diff -Nrcpad gcc-13.3.0/ChangeLog gcc-13.4.0/ChangeLog
*** gcc-13.3.0/ChangeLog	Tue May 21 07:47:37 2024
--- gcc-13.4.0/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/LAST_UPDATED gcc-13.4.0/LAST_UPDATED
*** gcc-13.3.0/LAST_UPDATED	Tue May 21 07:49:01 2024
--- gcc-13.4.0/LAST_UPDATED	Thu Jun  5 16:05:02 2025
***************
*** 1 ****
! Obtained from git: releases/gcc-13.3.0 revision b71f1de6e9cf7181a288c0f39f9b1ef6580cf5c8
--- 1 ----
! Obtained from git: releases/gcc-13.4.0 revision 99677969d463d75a562f94460ea75e9f6a016b4f
diff -Nrcpad gcc-13.3.0/MD5SUMS gcc-13.4.0/MD5SUMS
*** gcc-13.3.0/MD5SUMS	Tue May 21 08:15:57 2024
--- gcc-13.4.0/MD5SUMS	Thu Jun  5 16:32:32 2025
***************
*** 1,5 ****
! # This file contains the MD5 checksums of the files in the 
! # gcc-13.3.0.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-13.4.0.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
*************** c234515d9056662b94af0653f8562888  .dir-l
*** 17,23 ****
  fe60d87048567d4fe8c8a0ed2448bcc8  COPYING.RUNTIME
  d32239bcb673463ab874e80d47fae504  COPYING3
  6a6a8e020838b23406c81b19c1d46df6  COPYING3.LIB
! 0371abf438ac778f26a2ccda8a29b8f0  ChangeLog
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
--- 17,23 ----
  fe60d87048567d4fe8c8a0ed2448bcc8  COPYING.RUNTIME
  d32239bcb673463ab874e80d47fae504  COPYING3
  6a6a8e020838b23406c81b19c1d46df6  COPYING3.LIB
! 5167db07964409b81e76d1992786fbc2  ChangeLog
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
*************** fe07f4a77b2b246f67cc5eae162b510e  INSTAL
*** 31,45 ****
  cd5076051085f5cff39d8bfe54d1e160  INSTALL/prerequisites.html
  2c354642f325b07772e4d3c926b98f79  INSTALL/specific.html
  62069886bede1942dc164b60e4e4f62c  INSTALL/test.html
! a058236ed82b6beb0715da59ef6d535c  LAST_UPDATED
  81b3330d422f3ce1ef8b720dfae35068  MAINTAINERS
  2b61ddbd876fa839639a7ca551773426  Makefile.def
  5d2d6a74f897f8158d37f5f2ec6877ce  Makefile.in
  ee1e4bbc0929b8c8b5030564189dac22  Makefile.tpl
! a6c5f981389252b3302e754762459891  NEWS
  80d26bc3b1ad4f6969a96a24c9181bf5  README
  a657821f65bab77f4fbf3a75cdee6da9  ar-lib
! 6f49fabaf156e307d600d7ee1cbfd53c  c++tools/ChangeLog
  032c26e766fcea31a5d1a469ae7bf9e1  c++tools/Makefile.in
  edf805e559bf9ecb62db313d2e6edb47  c++tools/config.h.in
  ccd3498e6b247dfe4e65793a88a27296  c++tools/configure
--- 31,45 ----
  cd5076051085f5cff39d8bfe54d1e160  INSTALL/prerequisites.html
  2c354642f325b07772e4d3c926b98f79  INSTALL/specific.html
  62069886bede1942dc164b60e4e4f62c  INSTALL/test.html
! d83e96064b94604535750f674c79d282  LAST_UPDATED
  81b3330d422f3ce1ef8b720dfae35068  MAINTAINERS
  2b61ddbd876fa839639a7ca551773426  Makefile.def
  5d2d6a74f897f8158d37f5f2ec6877ce  Makefile.in
  ee1e4bbc0929b8c8b5030564189dac22  Makefile.tpl
! 70ee04dcbde099c3d4bd5432024a07a6  NEWS
  80d26bc3b1ad4f6969a96a24c9181bf5  README
  a657821f65bab77f4fbf3a75cdee6da9  ar-lib
! 83975a957803b20bc02b9f8600e8a234  c++tools/ChangeLog
  032c26e766fcea31a5d1a469ae7bf9e1  c++tools/Makefile.in
  edf805e559bf9ecb62db313d2e6edb47  c++tools/config.h.in
  ccd3498e6b247dfe4e65793a88a27296  c++tools/configure
*************** ccd3498e6b247dfe4e65793a88a27296  c++too
*** 52,58 ****
  c64564b7c7563dae5ebe016f340c9cd9  config.guess
  040359150cf11493f973a46d8a25b06b  config.rpath
  111d54aa3a3019adbab413c8fb435f22  config.sub
! 64a4c70a2abbcd3185c8863e6db9aff9  config/ChangeLog
  0d9cf183f9cbbe5f59796e35831fe774  config/acinclude.m4
  6afba47df446a629761ab1aa13a547cf  config/acx.m4
  6b030f5cf640bdd401ea739f54a667f8  config/asmcfi.m4
--- 52,58 ----
  c64564b7c7563dae5ebe016f340c9cd9  config.guess
  040359150cf11493f973a46d8a25b06b  config.rpath
  111d54aa3a3019adbab413c8fb435f22  config.sub
! 4f46230b3384f39a8b71ccd5c6ab879b  config/ChangeLog
  0d9cf183f9cbbe5f59796e35831fe774  config/acinclude.m4
  6afba47df446a629761ab1aa13a547cf  config/acx.m4
  6b030f5cf640bdd401ea739f54a667f8  config/asmcfi.m4
*************** e2dc6b4fd62b77bff96b7951ef74f78f  config
*** 154,160 ****
  0163b672c888aaf1c8ad3e867a0ec9f1  config/zlib.m4
  4dd4461c381dd94b116f27aa48dbef09  configure
  645c07e5dbfc57dcb04d206512423d1e  configure.ac
! 7a50b70743aeaaaf5cb59c92344f351b  contrib/ChangeLog
  5fc435c7928f858246df931ea3f3ece7  contrib/ChangeLog.jit
  7af8d2979bf1a7cfa88e30d05fa22be2  contrib/ChangeLog.tree-ssa
  d6334dc7fdcc1de5203f8b6b62f993c4  contrib/analyze_brprob.py
--- 154,160 ----
  0163b672c888aaf1c8ad3e867a0ec9f1  config/zlib.m4
  4dd4461c381dd94b116f27aa48dbef09  configure
  645c07e5dbfc57dcb04d206512423d1e  configure.ac
! 5f2864758c38c3e2d97c2b55612d6bee  contrib/ChangeLog
  5fc435c7928f858246df931ea3f3ece7  contrib/ChangeLog.jit
  7af8d2979bf1a7cfa88e30d05fa22be2  contrib/ChangeLog.tree-ssa
  d6334dc7fdcc1de5203f8b6b62f993c4  contrib/analyze_brprob.py
*************** f03de2f6492b5449fc1a238b3104c5bc  contri
*** 209,215 ****
  e074a10ed2cf3c78e317247bf6208823  contrib/git-fix-changelog.py
  5d80e88da5ae83c53513280bcff7c0a1  contrib/git-undescr.sh
  59304fc08afa489baa6b920cc76dc625  contrib/gthr_supp_vxw_5x.c
! d1048ba292fc32295f031ba65f85e703  contrib/header-tools/ChangeLog
  72d70766ec87033813e1378c5697fa87  contrib/header-tools/README
  05ef7fb87e90ba93ee04659be072a357  contrib/header-tools/count-headers
  ba0485a3c721bce9e32407ef996d2a9d  contrib/header-tools/gcc-order-headers
--- 209,215 ----
  e074a10ed2cf3c78e317247bf6208823  contrib/git-fix-changelog.py
  5d80e88da5ae83c53513280bcff7c0a1  contrib/git-undescr.sh
  59304fc08afa489baa6b920cc76dc625  contrib/gthr_supp_vxw_5x.c
! f57c5307bfe3b0963e8433d319ac9d4a  contrib/header-tools/ChangeLog
  72d70766ec87033813e1378c5697fa87  contrib/header-tools/README
  05ef7fb87e90ba93ee04659be072a357  contrib/header-tools/count-headers
  ba0485a3c721bce9e32407ef996d2a9d  contrib/header-tools/gcc-order-headers
*************** eedb9aee4fd5829d8ebc95c23a09687a  contri
*** 234,240 ****
  cb477dd95d5e602e9b906fc057a1fe16  contrib/prepare_patch.sh
  bad2b96e4296c0938aab1c646e9ccf33  contrib/prerequisites.md5
  4a395ab2dd4d15d66cb0183ec7e7bbd0  contrib/prerequisites.sha512
! f86485dbe357891aeb2f8601b5fd55b3  contrib/reghunt/ChangeLog
  562a0a9f9e5cc4e9c95319b727a1df94  contrib/reghunt/bin/gcc-build-full
  f1c54c76b9d27a6ac0169fe0c8d50f9d  contrib/reghunt/bin/gcc-build-simple
  3f2318bae7562a4ad1639e686916a545  contrib/reghunt/bin/gcc-cleanup
--- 234,240 ----
  cb477dd95d5e602e9b906fc057a1fe16  contrib/prepare_patch.sh
  bad2b96e4296c0938aab1c646e9ccf33  contrib/prerequisites.md5
  4a395ab2dd4d15d66cb0183ec7e7bbd0  contrib/prerequisites.sha512
! 73f697b5665921a8b16f2528b84eefe5  contrib/reghunt/ChangeLog
  562a0a9f9e5cc4e9c95319b727a1df94  contrib/reghunt/bin/gcc-build-full
  f1c54c76b9d27a6ac0169fe0c8d50f9d  contrib/reghunt/bin/gcc-build-simple
  3f2318bae7562a4ad1639e686916a545  contrib/reghunt/bin/gcc-cleanup
*************** f251d49dd87647250fcd74dd50b7835f  contri
*** 293,299 ****
  e2829fc4af4f433a6a328a62d5ce8066  contrib/reghunt/examples/reg-watch
  afd863c2ec84c906e20f9b9787b1f0fe  contrib/reghunt/examples/reg-watch.awk
  8955535523d4b5f48006bcb851ba9b4b  contrib/reghunt/examples/testall
! 88a0d987f4fee231ab0fd73a60b52a70  contrib/regression/ChangeLog
  30553bfced1b2b46bf7ca01ef6ba69d1  contrib/regression/GCC_Regression_Tester.wdgt/Default.png
  ad38ddd771df222eb9d413e3c7f6a751  contrib/regression/GCC_Regression_Tester.wdgt/Icon.png
  777bd286c147cc02861811f66b9a4440  contrib/regression/GCC_Regression_Tester.wdgt/Info.plist
--- 293,299 ----
  e2829fc4af4f433a6a328a62d5ce8066  contrib/reghunt/examples/reg-watch
  afd863c2ec84c906e20f9b9787b1f0fe  contrib/reghunt/examples/reg-watch.awk
  8955535523d4b5f48006bcb851ba9b4b  contrib/reghunt/examples/testall
! ccff06211014c68905f7e5b0fe21bf45  contrib/regression/ChangeLog
  30553bfced1b2b46bf7ca01ef6ba69d1  contrib/regression/GCC_Regression_Tester.wdgt/Default.png
  ad38ddd771df222eb9d413e3c7f6a751  contrib/regression/GCC_Regression_Tester.wdgt/Icon.png
  777bd286c147cc02861811f66b9a4440  contrib/regression/GCC_Regression_Tester.wdgt/Info.plist
*************** e49c998085ca49d5cdd5b1dd744b2e03  contri
*** 337,343 ****
  f896f3b2aae98b892d733dab4575cc66  contrib/vimrc
  da7aeedeb5a86ee6f5982e559a2d6dcc  contrib/warn_summary
  8b59f0d0a2dcdced14765c514fbad719  depcomp
! b9486c9e907a77b12aceb78eda91230b  fixincludes/ChangeLog
  6de190723745dc3f75080144dfa2215e  fixincludes/Makefile.in
  b6e3f4950abc6e254b467063381f6473  fixincludes/README
  455903ad4ff71fa5c5340ef7ae41a0e6  fixincludes/README-fixinc
--- 337,343 ----
  f896f3b2aae98b892d733dab4575cc66  contrib/vimrc
  da7aeedeb5a86ee6f5982e559a2d6dcc  contrib/warn_summary
  8b59f0d0a2dcdced14765c514fbad719  depcomp
! e4aead395936227026ff5caf6e08c7d1  fixincludes/ChangeLog
  6de190723745dc3f75080144dfa2215e  fixincludes/Makefile.in
  b6e3f4950abc6e254b467063381f6473  fixincludes/README
  455903ad4ff71fa5c5340ef7ae41a0e6  fixincludes/README-fixinc
*************** baef7ba9b787bf0e8083a807ade166c2  fixinc
*** 350,362 ****
  77fbad4fc8ec7be3578d045d003446ec  fixincludes/fixinc.in
  8ca216a7024876b7eb9b8abc30a30775  fixincludes/fixincl.c
  adf245e3714f799eafba40af16be8eb5  fixincludes/fixincl.tpl
! 151726f191d5a0e06860812c5209e398  fixincludes/fixincl.x
  545875b4fe1c26bc3e1befc75b34e9f5  fixincludes/fixlib.c
  620c770139fc32c75b975b614d3156e8  fixincludes/fixlib.h
  5b2c1fd3ef9d44fb6beb1a0d45ddd533  fixincludes/fixopts.c
  ed1415e9dbc8f421fd9288bde0d90ad1  fixincludes/fixtests.c
  51e915676df084b64297d3c4fb0d9c18  fixincludes/genfixes
! 453d6cc560fc70e6a0624a4cb1a2fbe1  fixincludes/inclhack.def
  dd5ae70d9f725bcaf2a15212782db49a  fixincludes/mkfixinc.sh
  516608ac1550577d47f48809bb512629  fixincludes/mkheaders.in
  3aa0563cd682ee61ecd9eb6eea0b0bce  fixincludes/procopen.c
--- 350,362 ----
  77fbad4fc8ec7be3578d045d003446ec  fixincludes/fixinc.in
  8ca216a7024876b7eb9b8abc30a30775  fixincludes/fixincl.c
  adf245e3714f799eafba40af16be8eb5  fixincludes/fixincl.tpl
! f77c6451b8c1c2e3cb63be23e7d75341  fixincludes/fixincl.x
  545875b4fe1c26bc3e1befc75b34e9f5  fixincludes/fixlib.c
  620c770139fc32c75b975b614d3156e8  fixincludes/fixlib.h
  5b2c1fd3ef9d44fb6beb1a0d45ddd533  fixincludes/fixopts.c
  ed1415e9dbc8f421fd9288bde0d90ad1  fixincludes/fixtests.c
  51e915676df084b64297d3c4fb0d9c18  fixincludes/genfixes
! 620ceb651d72b40104c3543e5fb075e4  fixincludes/inclhack.def
  dd5ae70d9f725bcaf2a15212782db49a  fixincludes/mkfixinc.sh
  516608ac1550577d47f48809bb512629  fixincludes/mkheaders.in
  3aa0563cd682ee61ecd9eb6eea0b0bce  fixincludes/procopen.c
*************** a22e70b3f29292d0e628450f4bb11e62  fixinc
*** 481,492 ****
  8baab8698bb83c6b90ef4091c00ddc1e  fixincludes/tests/base/unistd.h
  75d75572793b62bdd8ff4d1504e0cb4c  fixincludes/tests/base/yvals.h
  6593c1e7d0535b989e3b12084f001039  gcc/ABOUT-GCC-NLS
! f222dc4ceb8edc3d7d75d8dbff66b016  gcc/BASE-VER
  59530bdf33659b29e73d4adb9f9f6552  gcc/COPYING
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! 0c36b33719eb8472e3d2153bd59c3866  gcc/ChangeLog
  a3b63c675afa7a655cc2bfa8a907af79  gcc/ChangeLog-1997
  d9a88529352a010253c2e8fb1ed6023b  gcc/ChangeLog-1998
  240f08f81cb4699e8b49347db38233db  gcc/ChangeLog-1999
--- 481,492 ----
  8baab8698bb83c6b90ef4091c00ddc1e  fixincludes/tests/base/unistd.h
  75d75572793b62bdd8ff4d1504e0cb4c  fixincludes/tests/base/yvals.h
  6593c1e7d0535b989e3b12084f001039  gcc/ABOUT-GCC-NLS
! 93779f9d84ced7bf2de42bc824b71f8a  gcc/BASE-VER
  59530bdf33659b29e73d4adb9f9f6552  gcc/COPYING
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! 45508de0ce666cb8423fa502b7c3fa49  gcc/ChangeLog
  a3b63c675afa7a655cc2bfa8a907af79  gcc/ChangeLog-1997
  d9a88529352a010253c2e8fb1ed6023b  gcc/ChangeLog-1998
  240f08f81cb4699e8b49347db38233db  gcc/ChangeLog-1999
*************** fb3fadb88e1d2b3b640cfaaa5ff11780  gcc/Ch
*** 521,539 ****
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! 9ea270ed425327ec2070932c39dcc499  gcc/DATESTAMP
  d41d8cd98f00b204e9800998ecf8427e  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
  36698274bb69e2ada20f5cc434f3caa5  gcc/FSFChangeLog.11
  1f93f45664cdb0f660bcb8a952ca6078  gcc/LANGUAGES
! 49f87a7e0f2b3f3730bdd17bfe67af21  gcc/Makefile.in
  ec6799501b2eb2923d5de6a66169dbd2  gcc/ONEWS
  8c961c26ecaaf1660ca9888b2b0bca59  gcc/README.Portability
  f6d47a542d432aed7e7eaaecb71d3a4c  gcc/acinclude.m4
  6526979dd900a0b58b7691b478a91fec  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! 8b1045d820fd35f0cc18059b421dba4a  gcc/ada/ChangeLog
  683be0b07dc4f64f118fd5e8ae9cb30d  gcc/ada/ChangeLog-2001
  7aff25efb203be4136b8776cdc812956  gcc/ada/ChangeLog-2002
  cd2379152000f40157d349018fb9364d  gcc/ada/ChangeLog-2003
--- 521,539 ----
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! fc63a5f59d6e9c4222fa7604b3ff39e7  gcc/DATESTAMP
  d41d8cd98f00b204e9800998ecf8427e  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
  36698274bb69e2ada20f5cc434f3caa5  gcc/FSFChangeLog.11
  1f93f45664cdb0f660bcb8a952ca6078  gcc/LANGUAGES
! eebb79e2d53445139885768b9e77fc98  gcc/Makefile.in
  ec6799501b2eb2923d5de6a66169dbd2  gcc/ONEWS
  8c961c26ecaaf1660ca9888b2b0bca59  gcc/README.Portability
  f6d47a542d432aed7e7eaaecb71d3a4c  gcc/acinclude.m4
  6526979dd900a0b58b7691b478a91fec  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! 4525d67bae5e046bda83ab349680a25e  gcc/ada/ChangeLog
  683be0b07dc4f64f118fd5e8ae9cb30d  gcc/ada/ChangeLog-2001
  7aff25efb203be4136b8776cdc812956  gcc/ada/ChangeLog-2002
  cd2379152000f40157d349018fb9364d  gcc/ada/ChangeLog-2003
*************** c81efe8ccbd5f5b8399a3496f5015859  gcc/ad
*** 560,566 ****
  2cf41efa2dee24b2dda73018b855edd3  gcc/ada/ChangeLog.tree-ssa
  79432d3beb46b4a8f4c4c114203a6527  gcc/ada/Make-generated.in
  6c9c3b4249e781ed48c7ae55e8ef9999  gcc/ada/Makefile.in
! 0777b736aa8842cdda79a70c7870dd03  gcc/ada/Makefile.rtl
  328b32369db4e87b95cc21b16114a723  gcc/ada/accessibility.adb
  8398361054d01170d7c487f246c526e5  gcc/ada/accessibility.ads
  13cf7e52e4314ac021f4e7d70a814880  gcc/ada/ada_get_targ.adb
--- 560,566 ----
  2cf41efa2dee24b2dda73018b855edd3  gcc/ada/ChangeLog.tree-ssa
  79432d3beb46b4a8f4c4c114203a6527  gcc/ada/Make-generated.in
  6c9c3b4249e781ed48c7ae55e8ef9999  gcc/ada/Makefile.in
! 954a50a9d70041598f8c0618c6c66951  gcc/ada/Makefile.rtl
  328b32369db4e87b95cc21b16114a723  gcc/ada/accessibility.adb
  8398361054d01170d7c487f246c526e5  gcc/ada/accessibility.ads
  13cf7e52e4314ac021f4e7d70a814880  gcc/ada/ada_get_targ.adb
*************** a46d69407e1aeacce9b0e18f8c1d3526  gcc/ad
*** 621,627 ****
  98e4b1c85455e4b4bd4123863802d057  gcc/ada/cal.c
  4579d69a42e45e17fc08f2159fed02c7  gcc/ada/casing.adb
  a5d2684c3fa28eb916f7b7a78892adb3  gcc/ada/casing.ads
! fab092c8827198d39254e71eee1ac030  gcc/ada/checks.adb
  6eb178f5eb724a32f7541210a274ed19  gcc/ada/checks.ads
  ddd0ea57bd86f9494ea40dde8726a984  gcc/ada/cio.c
  d1b507d1ceaa7c53d3b70b63676a2990  gcc/ada/clean.adb
--- 621,627 ----
  98e4b1c85455e4b4bd4123863802d057  gcc/ada/cal.c
  4579d69a42e45e17fc08f2159fed02c7  gcc/ada/casing.adb
  a5d2684c3fa28eb916f7b7a78892adb3  gcc/ada/casing.ads
! 7d4aa3a3bea230cec488ff8ca31accaa  gcc/ada/checks.adb
  6eb178f5eb724a32f7541210a274ed19  gcc/ada/checks.ads
  ddd0ea57bd86f9494ea40dde8726a984  gcc/ada/cio.c
  d1b507d1ceaa7c53d3b70b63676a2990  gcc/ada/clean.adb
*************** e61587d5186b53b81a9ed49dc6190797  gcc/ad
*** 702,709 ****
  d37cc0a25d34e042d5dea64c9e740a45  gcc/ada/eval_fat.adb
  f1d86c3f88f5650d8de59f52e9e8083c  gcc/ada/eval_fat.ads
  3da935b78c544f50a354b87d5e568d41  gcc/ada/exit.c
! f798a78194a2edc741282f62e0e32ea2  gcc/ada/exp_aggr.adb
! 3b09213e625a7d78641da4c3f7b1af7e  gcc/ada/exp_aggr.ads
  f692b29add58ef2b71899d01acbc201a  gcc/ada/exp_atag.adb
  93759d533df63d41d11ae6ad2277af4f  gcc/ada/exp_atag.ads
  a22898d5944022480e0b01d418cb7625  gcc/ada/exp_attr.adb
--- 702,709 ----
  d37cc0a25d34e042d5dea64c9e740a45  gcc/ada/eval_fat.adb
  f1d86c3f88f5650d8de59f52e9e8083c  gcc/ada/eval_fat.ads
  3da935b78c544f50a354b87d5e568d41  gcc/ada/exit.c
! e31552bd8deced6462e3c8ec8cf2e970  gcc/ada/exp_aggr.adb
! 88d1e7853e8c1e5101e3b9183fda5214  gcc/ada/exp_aggr.ads
  f692b29add58ef2b71899d01acbc201a  gcc/ada/exp_atag.adb
  93759d533df63d41d11ae6ad2277af4f  gcc/ada/exp_atag.ads
  a22898d5944022480e0b01d418cb7625  gcc/ada/exp_attr.adb
*************** a9c24cbcffac5d49ea9292aebe5db0c4  gcc/ad
*** 719,731 ****
  da828d4dca65dbb421d61d7faa8d0487  gcc/ada/exp_ch13.ads
  1014458fddfddaa600134bdd0b7ee2df  gcc/ada/exp_ch2.adb
  874379155c2b31c67f54611f40fb4cde  gcc/ada/exp_ch2.ads
! f4b7384e5b9b2eaf0e9886f02b7dc4ff  gcc/ada/exp_ch3.adb
  d218e87874041895cd5628dbbd8a6666  gcc/ada/exp_ch3.ads
  6b921215061814b31ec2952a1a292ff3  gcc/ada/exp_ch4.adb
  6dcf102318099fe9b7d14dd8165a8dd8  gcc/ada/exp_ch4.ads
  f89ec33bdcb732ef1e123386cbfd333a  gcc/ada/exp_ch5.adb
  523a3e2d742ada054c744993ab53e80e  gcc/ada/exp_ch5.ads
! fe0fc0b410ddedad01d2e627409ffe82  gcc/ada/exp_ch6.adb
  c767e835c255a548d5f6bd72b17b0dfd  gcc/ada/exp_ch6.ads
  36b5be43f1d1948e9fab0d9c885f2346  gcc/ada/exp_ch7.adb
  58bed2052a219c0f136e6acab4a327c4  gcc/ada/exp_ch7.ads
--- 719,731 ----
  da828d4dca65dbb421d61d7faa8d0487  gcc/ada/exp_ch13.ads
  1014458fddfddaa600134bdd0b7ee2df  gcc/ada/exp_ch2.adb
  874379155c2b31c67f54611f40fb4cde  gcc/ada/exp_ch2.ads
! 4f75c9a91928bda7bcdf4826cf5e434b  gcc/ada/exp_ch3.adb
  d218e87874041895cd5628dbbd8a6666  gcc/ada/exp_ch3.ads
  6b921215061814b31ec2952a1a292ff3  gcc/ada/exp_ch4.adb
  6dcf102318099fe9b7d14dd8165a8dd8  gcc/ada/exp_ch4.ads
  f89ec33bdcb732ef1e123386cbfd333a  gcc/ada/exp_ch5.adb
  523a3e2d742ada054c744993ab53e80e  gcc/ada/exp_ch5.ads
! fab20def43be23d0aa1b73033480eeb2  gcc/ada/exp_ch6.adb
  c767e835c255a548d5f6bd72b17b0dfd  gcc/ada/exp_ch6.ads
  36b5be43f1d1948e9fab0d9c885f2346  gcc/ada/exp_ch7.adb
  58bed2052a219c0f136e6acab4a327c4  gcc/ada/exp_ch7.ads
*************** d1aeeae1258e8e67e9a54adda5962d98  gcc/ad
*** 751,757 ****
  9a293dcaad9cdae7da20aa663daa0367  gcc/ada/exp_pakd.ads
  10f71b915a4c827618fb2cc9a2ef91b7  gcc/ada/exp_prag.adb
  c355a5c9807909948e926e0eff0c8886  gcc/ada/exp_prag.ads
! ba0d63fc6928573357b49f30e4226cd4  gcc/ada/exp_put_image.adb
  584d34519aaaf49d65053dbda65375d0  gcc/ada/exp_put_image.ads
  8a7a0d8a8a4ea74d2245b22cb7659c8d  gcc/ada/exp_sel.adb
  4272be673f70088d0ae37c6e5b354518  gcc/ada/exp_sel.ads
--- 751,757 ----
  9a293dcaad9cdae7da20aa663daa0367  gcc/ada/exp_pakd.ads
  10f71b915a4c827618fb2cc9a2ef91b7  gcc/ada/exp_prag.adb
  c355a5c9807909948e926e0eff0c8886  gcc/ada/exp_prag.ads
! 1b4da8b55316929436c0dc8dd4976411  gcc/ada/exp_put_image.adb
  584d34519aaaf49d65053dbda65375d0  gcc/ada/exp_put_image.ads
  8a7a0d8a8a4ea74d2245b22cb7659c8d  gcc/ada/exp_sel.adb
  4272be673f70088d0ae37c6e5b354518  gcc/ada/exp_sel.ads
*************** d7b2305cd7daf72574c3e439e9dad5fe  gcc/ad
*** 765,771 ****
  8401d274c26d8ccae635f94df6d80993  gcc/ada/exp_tss.ads
  f389f2094366b0be1f6243f845940f2b  gcc/ada/exp_unst.adb
  561664a119ff189f9ac4fa58333fd49d  gcc/ada/exp_unst.ads
! d84775eec0efbf97bdd55429075f26fe  gcc/ada/exp_util.adb
  93549b6bb4f5744b025b146d62187fbe  gcc/ada/exp_util.ads
  442c80ee20fb5fb9447b3324a7f012d6  gcc/ada/expander.adb
  2195225a2f41ae7e918665cc084dbd57  gcc/ada/expander.ads
--- 765,771 ----
  8401d274c26d8ccae635f94df6d80993  gcc/ada/exp_tss.ads
  f389f2094366b0be1f6243f845940f2b  gcc/ada/exp_unst.adb
  561664a119ff189f9ac4fa58333fd49d  gcc/ada/exp_unst.ads
! c2e9af574d795c6bed420d0febbc2561  gcc/ada/exp_util.adb
  93549b6bb4f5744b025b146d62187fbe  gcc/ada/exp_util.ads
  442c80ee20fb5fb9447b3324a7f012d6  gcc/ada/expander.adb
  2195225a2f41ae7e918665cc084dbd57  gcc/ada/expander.ads
*************** d69e0fff19957a7b29ee08926fc6f3cf  gcc/ad
*** 793,799 ****
  29e1f3d1ec783849cfedc4ba5b3f86d2  gcc/ada/gcc-interface/ada.h
  67dc9599090345bd6fc9fed0361f76ee  gcc/ada/gcc-interface/config-lang.in
  df2ffb467ff9812983d01da40295ec68  gcc/ada/gcc-interface/cuintp.cc
! aea8c529158489b34477d251cba7f642  gcc/ada/gcc-interface/decl.cc
  2e46e3864371bc11eae92e2f030fe9c3  gcc/ada/gcc-interface/gadaint.h
  1e23461a8b089b3f96b0eec67b96b60d  gcc/ada/gcc-interface/gigi.h
  9f177b1d16ab7e6e558ee0eccca943ff  gcc/ada/gcc-interface/lang-specs.h
--- 793,799 ----
  29e1f3d1ec783849cfedc4ba5b3f86d2  gcc/ada/gcc-interface/ada.h
  67dc9599090345bd6fc9fed0361f76ee  gcc/ada/gcc-interface/config-lang.in
  df2ffb467ff9812983d01da40295ec68  gcc/ada/gcc-interface/cuintp.cc
! 6dba8ed83dcf439bd6eef93dfb9a45ec  gcc/ada/gcc-interface/decl.cc
  2e46e3864371bc11eae92e2f030fe9c3  gcc/ada/gcc-interface/gadaint.h
  1e23461a8b089b3f96b0eec67b96b60d  gcc/ada/gcc-interface/gigi.h
  9f177b1d16ab7e6e558ee0eccca943ff  gcc/ada/gcc-interface/lang-specs.h
*************** aea8c529158489b34477d251cba7f642  gcc/ad
*** 801,812 ****
  74cf3b6eca660d86a3d825ddc373b3be  gcc/ada/gcc-interface/misc.cc
  98e36f508f7c769bcd5983c57836e8c7  gcc/ada/gcc-interface/system.ads
  bfb9a4dce47d966bd926113ec79bd306  gcc/ada/gcc-interface/targtyps.cc
! 418332cd1100190fe7c1414fca7d36f8  gcc/ada/gcc-interface/trans.cc
  b1dd1628f0263961b7f7d8549d9007b0  gcc/ada/gcc-interface/utils.cc
  efc46a6dc53bb22e1fb621805da96b7f  gcc/ada/gcc-interface/utils2.cc
  40e0d992ce6e9be735b40d94c1c1255c  gcc/ada/gen_il-fields.ads
  6066d153ad6d2f0c2a89e9c170be125c  gcc/ada/gen_il-gen-gen_entities.adb
! 460ae9eaf4c292b48b4616f4dc61e583  gcc/ada/gen_il-gen-gen_nodes.adb
  f09dbf238948b614844c0c00c644ac7a  gcc/ada/gen_il-gen.adb
  cc13c168222313f941cf1175e328e4bd  gcc/ada/gen_il-gen.ads
  ec9be8365cf3d59cd75201a34f5ad56e  gcc/ada/gen_il-internals.adb
--- 801,812 ----
  74cf3b6eca660d86a3d825ddc373b3be  gcc/ada/gcc-interface/misc.cc
  98e36f508f7c769bcd5983c57836e8c7  gcc/ada/gcc-interface/system.ads
  bfb9a4dce47d966bd926113ec79bd306  gcc/ada/gcc-interface/targtyps.cc
! 60eae6c7f32d64d3724bbd95056efeb1  gcc/ada/gcc-interface/trans.cc
  b1dd1628f0263961b7f7d8549d9007b0  gcc/ada/gcc-interface/utils.cc
  efc46a6dc53bb22e1fb621805da96b7f  gcc/ada/gcc-interface/utils2.cc
  40e0d992ce6e9be735b40d94c1c1255c  gcc/ada/gen_il-fields.ads
  6066d153ad6d2f0c2a89e9c170be125c  gcc/ada/gen_il-gen-gen_entities.adb
! 94e4aa23794168ff15708c6ff1f779c7  gcc/ada/gen_il-gen-gen_nodes.adb
  f09dbf238948b614844c0c00c644ac7a  gcc/ada/gen_il-gen.adb
  cc13c168222313f941cf1175e328e4bd  gcc/ada/gen_il-gen.ads
  ec9be8365cf3d59cd75201a34f5ad56e  gcc/ada/gen_il-internals.adb
*************** a4acb2fbdcf04791241b928ee0e91015  gcc/ad
*** 849,855 ****
  99f2c81295d05677da660c9e0c0cd3c6  gcc/ada/gnatprep.adb
  2f85dfce619363b5f5b10dbd049aa9ac  gcc/ada/gnatprep.ads
  210e9441890ef1581c66d9853b40b98e  gcc/ada/gnatvsn.adb
! de77f4f096f2a869f2bbcb5a037da63b  gcc/ada/gnatvsn.ads
  a456d976bd979ec4ecf2d115bc606425  gcc/ada/gprep.adb
  6c031683ac4fe03ecb810e771e3bf1e0  gcc/ada/gprep.ads
  8185e397145fad080cd13bd47f2d7f57  gcc/ada/gsocket.h
--- 849,855 ----
  99f2c81295d05677da660c9e0c0cd3c6  gcc/ada/gnatprep.adb
  2f85dfce619363b5f5b10dbd049aa9ac  gcc/ada/gnatprep.ads
  210e9441890ef1581c66d9853b40b98e  gcc/ada/gnatvsn.adb
! efcfa63406c19f920d103e16dd418120  gcc/ada/gnatvsn.ads
  a456d976bd979ec4ecf2d115bc606425  gcc/ada/gprep.adb
  6c031683ac4fe03ecb810e771e3bf1e0  gcc/ada/gprep.ads
  8185e397145fad080cd13bd47f2d7f57  gcc/ada/gsocket.h
*************** c05450c642d1006629d7339a5a7a2759  gcc/ad
*** 1037,1043 ****
  43964d1593669d040e4248638713ecf7  gcc/ada/libgnarl/s-taprob.adb
  db9c0ccf4708058c2aaccba9d92e26a1  gcc/ada/libgnarl/s-taprob.ads
  d450207eda810423d7d8dfd38d4834a2  gcc/ada/libgnarl/s-taprop.ads
! 167d4db37b85ceb7c487ded0bc3269c9  gcc/ada/libgnarl/s-taprop__dummy.adb
  5fc47199a0065876f919d6a86274c714  gcc/ada/libgnarl/s-taprop__hpux-dce.adb
  0b26f5eb2a5499d42e2da26788cc1cc5  gcc/ada/libgnarl/s-taprop__linux.adb
  4004097f1b98722aaa91decb8a99e431  gcc/ada/libgnarl/s-taprop__mingw.adb
--- 1037,1043 ----
  43964d1593669d040e4248638713ecf7  gcc/ada/libgnarl/s-taprob.adb
  db9c0ccf4708058c2aaccba9d92e26a1  gcc/ada/libgnarl/s-taprob.ads
  d450207eda810423d7d8dfd38d4834a2  gcc/ada/libgnarl/s-taprop.ads
! 500f0ad9e2eb50bd66f53cd8aae14df3  gcc/ada/libgnarl/s-taprop__dummy.adb
  5fc47199a0065876f919d6a86274c714  gcc/ada/libgnarl/s-taprop__hpux-dce.adb
  0b26f5eb2a5499d42e2da26788cc1cc5  gcc/ada/libgnarl/s-taprop__linux.adb
  4004097f1b98722aaa91decb8a99e431  gcc/ada/libgnarl/s-taprop__mingw.adb
*************** e83ffabe7c0ddbf4d79fb74b607dd571  gcc/ad
*** 1336,1348 ****
  f8a74f5169bf9eba09b0050d2ce025f4  gcc/ada/libgnat/a-ncelfu.ads
  e890dadfdee4451c5c59b94792d98a2a  gcc/ada/libgnat/a-ngcefu.adb
  2e229d27b615410dbc242fd1d7d4bd98  gcc/ada/libgnat/a-ngcefu.ads
! fff323e7288212bcc2d58c781a5c74a0  gcc/ada/libgnat/a-ngcoar.adb
  03d934454f8cbd5b382c05c95cd2a70a  gcc/ada/libgnat/a-ngcoar.ads
  040128d3a2014e3fe7ebb2de287a4147  gcc/ada/libgnat/a-ngcoty.adb
  f5718c863ea8dfdc9ef570b19557791a  gcc/ada/libgnat/a-ngcoty.ads
  d06cdbd078d4988636f6c387b29e98fc  gcc/ada/libgnat/a-ngelfu.adb
  d08a004ab0bb389ab0cf5ee9399aa47b  gcc/ada/libgnat/a-ngelfu.ads
! 5484ef37569eaec97cbdaa968b65adb4  gcc/ada/libgnat/a-ngrear.adb
  763fb271e83332161551ac2459d1e540  gcc/ada/libgnat/a-ngrear.ads
  7f894c161f872e68b50172715a8a311e  gcc/ada/libgnat/a-nlcefu.ads
  307582c16af8c2d164031fd8dfb72581  gcc/ada/libgnat/a-nlcoar.ads
--- 1336,1348 ----
  f8a74f5169bf9eba09b0050d2ce025f4  gcc/ada/libgnat/a-ncelfu.ads
  e890dadfdee4451c5c59b94792d98a2a  gcc/ada/libgnat/a-ngcefu.adb
  2e229d27b615410dbc242fd1d7d4bd98  gcc/ada/libgnat/a-ngcefu.ads
! 67dd6b64bfcf283d25b58ad40aba5061  gcc/ada/libgnat/a-ngcoar.adb
  03d934454f8cbd5b382c05c95cd2a70a  gcc/ada/libgnat/a-ngcoar.ads
  040128d3a2014e3fe7ebb2de287a4147  gcc/ada/libgnat/a-ngcoty.adb
  f5718c863ea8dfdc9ef570b19557791a  gcc/ada/libgnat/a-ngcoty.ads
  d06cdbd078d4988636f6c387b29e98fc  gcc/ada/libgnat/a-ngelfu.adb
  d08a004ab0bb389ab0cf5ee9399aa47b  gcc/ada/libgnat/a-ngelfu.ads
! 4a36368591c2420247b6d52887a8f082  gcc/ada/libgnat/a-ngrear.adb
  763fb271e83332161551ac2459d1e540  gcc/ada/libgnat/a-ngrear.ads
  7f894c161f872e68b50172715a8a311e  gcc/ada/libgnat/a-nlcefu.ads
  307582c16af8c2d164031fd8dfb72581  gcc/ada/libgnat/a-nlcoar.ads
*************** c7db1cc4543deb8894cd5f586f40608f  gcc/ad
*** 2054,2059 ****
--- 2054,2060 ----
  ddb1428e2a1f24e383a48d6cd4b22b53  gcc/ada/libgnat/s-dmotpr.ads
  28f43708c010cf1a53c29ec40b211ce4  gcc/ada/libgnat/s-dorepr.adb
  4de630227a5fae0cebf22b2102826afb  gcc/ada/libgnat/s-dorepr__fma.adb
+ 4d528424421585e18b2d22bdde89cb4b  gcc/ada/libgnat/s-dorepr__freebsd.adb
  bd6a5f844ed0716238d14636ab8867a7  gcc/ada/libgnat/s-dourea.adb
  ae598e036b0ab59a2e0afe7146e52534  gcc/ada/libgnat/s-dourea.ads
  e57ab33a5d1a46aacdb08c8e7e22d2cc  gcc/ada/libgnat/s-dsaser.ads
*************** a322b246a3d17c3f1832766cf8cac75b  gcc/ad
*** 2764,2770 ****
  c4c2bee7a1e6722a599329cb37e824d5  gcc/ada/par-ch3.adb
  2dc2ba9e0dca0a0a25f29dd0e7ae7e22  gcc/ada/par-ch4.adb
  803a73a9e138df8cd2094197ac85b7f2  gcc/ada/par-ch5.adb
! c562491ed077a62954d7769ca3026810  gcc/ada/par-ch6.adb
  75d7186b24290e56a92fd51640f13ace  gcc/ada/par-ch7.adb
  ff7f8fef7274a2065b88731f71464179  gcc/ada/par-ch8.adb
  84b6dba62bf64c214228d151014e0a5a  gcc/ada/par-ch9.adb
--- 2765,2771 ----
  c4c2bee7a1e6722a599329cb37e824d5  gcc/ada/par-ch3.adb
  2dc2ba9e0dca0a0a25f29dd0e7ae7e22  gcc/ada/par-ch4.adb
  803a73a9e138df8cd2094197ac85b7f2  gcc/ada/par-ch5.adb
! f53ddecb3bf075269866c148f78162e3  gcc/ada/par-ch6.adb
  75d7186b24290e56a92fd51640f13ace  gcc/ada/par-ch7.adb
  ff7f8fef7274a2065b88731f71464179  gcc/ada/par-ch8.adb
  84b6dba62bf64c214228d151014e0a5a  gcc/ada/par-ch9.adb
*************** cb017ef183c47348a71d052d39be4bb0  gcc/ad
*** 2833,2839 ****
  40f63c56f82085566f13ca50914990e7  gcc/ada/sem_ch10.ads
  ed28c0c11a48d3eff130c0afc09b7e0f  gcc/ada/sem_ch11.adb
  3c73933ed4c54ac6090736275b072542  gcc/ada/sem_ch11.ads
! 02f582d22094eb01c184610f937555e5  gcc/ada/sem_ch12.adb
  a432065f95efc62fd49d139a9da251c4  gcc/ada/sem_ch12.ads
  8a298449ee2ee90b45102f7d4eeefb97  gcc/ada/sem_ch13.adb
  aaf7cf57dc41bc250bfe241c089cae3e  gcc/ada/sem_ch13.ads
--- 2834,2840 ----
  40f63c56f82085566f13ca50914990e7  gcc/ada/sem_ch10.ads
  ed28c0c11a48d3eff130c0afc09b7e0f  gcc/ada/sem_ch11.adb
  3c73933ed4c54ac6090736275b072542  gcc/ada/sem_ch11.ads
! 81aaee8ba203c376bb500910b1bdab1f  gcc/ada/sem_ch12.adb
  a432065f95efc62fd49d139a9da251c4  gcc/ada/sem_ch12.ads
  8a298449ee2ee90b45102f7d4eeefb97  gcc/ada/sem_ch13.adb
  aaf7cf57dc41bc250bfe241c089cae3e  gcc/ada/sem_ch13.ads
*************** deb6974405ea54141f8107717ebc15b7  gcc/ad
*** 2845,2851 ****
  6d1d0171249740f7108b433e1ac5ced3  gcc/ada/sem_ch4.ads
  c3ad3d10f8b77c300a53661e624021eb  gcc/ada/sem_ch5.adb
  ab69996d3822ad660d28709ab3cf046b  gcc/ada/sem_ch5.ads
! 264aacea30c2125472817bda55a6e826  gcc/ada/sem_ch6.adb
  1880e12d15e4f7a2655d25e1a39eb8c4  gcc/ada/sem_ch6.ads
  32f55ca6807c88d61d8274403291747a  gcc/ada/sem_ch7.adb
  ba37c865ac4be0ab3408a156f217b148  gcc/ada/sem_ch7.ads
--- 2846,2852 ----
  6d1d0171249740f7108b433e1ac5ced3  gcc/ada/sem_ch4.ads
  c3ad3d10f8b77c300a53661e624021eb  gcc/ada/sem_ch5.adb
  ab69996d3822ad660d28709ab3cf046b  gcc/ada/sem_ch5.ads
! 8d1e4896f34475140867a8109d9bb95e  gcc/ada/sem_ch6.adb
  1880e12d15e4f7a2655d25e1a39eb8c4  gcc/ada/sem_ch6.ads
  32f55ca6807c88d61d8274403291747a  gcc/ada/sem_ch7.adb
  ba37c865ac4be0ab3408a156f217b148  gcc/ada/sem_ch7.ads
*************** cd1485ab473af7619af9b0cdb75ff5f4  gcc/ad
*** 2871,2877 ****
  2628f4db0a13a198a497a1438f61ffa9  gcc/ada/sem_mech.ads
  0059c1f573176b8af855bd92c9043dbd  gcc/ada/sem_prag.adb
  2fc94fa1637a92b8548fdb0b65fd7bd4  gcc/ada/sem_prag.ads
! d46d0d1e48ef2fddfed0797985507448  gcc/ada/sem_res.adb
  8ed4f4454daa145c7fddf86782258422  gcc/ada/sem_res.ads
  e4b6d1e16b208ca35791c42ee9c3d067  gcc/ada/sem_scil.adb
  55301aee52465a299b07b1bb889a8304  gcc/ada/sem_scil.ads
--- 2872,2878 ----
  2628f4db0a13a198a497a1438f61ffa9  gcc/ada/sem_mech.ads
  0059c1f573176b8af855bd92c9043dbd  gcc/ada/sem_prag.adb
  2fc94fa1637a92b8548fdb0b65fd7bd4  gcc/ada/sem_prag.ads
! b208560eaf074caaa529eb6a1540df5e  gcc/ada/sem_res.adb
  8ed4f4454daa145c7fddf86782258422  gcc/ada/sem_res.ads
  e4b6d1e16b208ca35791c42ee9c3d067  gcc/ada/sem_scil.adb
  55301aee52465a299b07b1bb889a8304  gcc/ada/sem_scil.ads
*************** a8b48863de3b07302a6dded1699bca0f  gcc/ad
*** 2881,2887 ****
  c071d50bf00e96003f25bc610c901949  gcc/ada/sem_type.ads
  9beab99260d6c3e1688f86daf46762ae  gcc/ada/sem_util.adb
  3f302144d200644a75957c721a2bc55d  gcc/ada/sem_util.ads
! 3c74440d6680a37e1605e0696651e98b  gcc/ada/sem_warn.adb
  3ea742e0239d48146217b2888477f742  gcc/ada/sem_warn.ads
  515bb2980bf2da708a3a883fa201b105  gcc/ada/set_targ.adb
  296119347eb6f9c2638d31e594dda49f  gcc/ada/set_targ.ads
--- 2882,2888 ----
  c071d50bf00e96003f25bc610c901949  gcc/ada/sem_type.ads
  9beab99260d6c3e1688f86daf46762ae  gcc/ada/sem_util.adb
  3f302144d200644a75957c721a2bc55d  gcc/ada/sem_util.ads
! 9b857be44b79f45003b1324fe6902042  gcc/ada/sem_warn.adb
  3ea742e0239d48146217b2888477f742  gcc/ada/sem_warn.ads
  515bb2980bf2da708a3a883fa201b105  gcc/ada/set_targ.adb
  296119347eb6f9c2638d31e594dda49f  gcc/ada/set_targ.ads
*************** fa0dfbf0b3c5e0a4f28fccdd596e0f97  gcc/ad
*** 2969,2975 ****
  c103be07028e95592ee5562a178cb50d  gcc/ada/validsw.ads
  0c66cbc282eee965c09e4248768932ec  gcc/ada/vast.adb
  5796310e13c4553d943749517ecc6cbe  gcc/ada/vast.ads
! 107a84185fe50c348afd3b9e76042a6e  gcc/ada/version.c
  49ef8bc97a344f91b927f23054ade642  gcc/ada/vx_stack_info.c
  230f0a2f69b8ad56cc0d730f9fe0964b  gcc/ada/vxworks-ppc-link.spec
  745188949cd7ff6df266579735782385  gcc/ada/vxworks-smp-ppc-link.spec
--- 2970,2976 ----
  c103be07028e95592ee5562a178cb50d  gcc/ada/validsw.ads
  0c66cbc282eee965c09e4248768932ec  gcc/ada/vast.adb
  5796310e13c4553d943749517ecc6cbe  gcc/ada/vast.ads
! 80a9d1726e421d58c661b761812b04b6  gcc/ada/version.c
  49ef8bc97a344f91b927f23054ade642  gcc/ada/vx_stack_info.c
  230f0a2f69b8ad56cc0d730f9fe0964b  gcc/ada/vxworks-ppc-link.spec
  745188949cd7ff6df266579735782385  gcc/ada/vxworks-smp-ppc-link.spec
*************** c639abfea0fd6ce8174c76689f8098b9  gcc/ad
*** 2990,3001 ****
  576518abce20cefac18d69412e741a99  gcc/ada/xutil.ads
  978031793256be605b05ec556e69fc09  gcc/addresses.h
  6104bb06e8b5a16c6679280b8bd89a47  gcc/adjust-alignment.cc
! 5d438dee0a1e7b7d8e461b07198f9f7a  gcc/alias.cc
  e1f9606817a872c9b1770a2950665e17  gcc/alias.h
  e2c04eccc631052e7aa15c27e287e593  gcc/align.h
  889f9ffc24064f8ad2fbaf928d50d3e6  gcc/alloc-pool.cc
  aad6b6421ba955142beb58263efb7ca8  gcc/alloc-pool.h
! 074dec4cd2f14b7a809a1bc58df61c3c  gcc/analyzer/ChangeLog
  71cd762fdeee724b494e94ea479c15fa  gcc/analyzer/analysis-plan.cc
  2400916c9f340c6914b8432d05919cec  gcc/analyzer/analysis-plan.h
  6084312218152cf76e77ec8df68925c8  gcc/analyzer/analyzer-language.cc
--- 2991,3002 ----
  576518abce20cefac18d69412e741a99  gcc/ada/xutil.ads
  978031793256be605b05ec556e69fc09  gcc/addresses.h
  6104bb06e8b5a16c6679280b8bd89a47  gcc/adjust-alignment.cc
! 01d823a21f405732f330e9f16c9d15e0  gcc/alias.cc
  e1f9606817a872c9b1770a2950665e17  gcc/alias.h
  e2c04eccc631052e7aa15c27e287e593  gcc/align.h
  889f9ffc24064f8ad2fbaf928d50d3e6  gcc/alloc-pool.cc
  aad6b6421ba955142beb58263efb7ca8  gcc/alloc-pool.h
! c6596924bdd6a7228a4e40a1166e79c3  gcc/analyzer/ChangeLog
  71cd762fdeee724b494e94ea479c15fa  gcc/analyzer/analysis-plan.cc
  2400916c9f340c6914b8432d05919cec  gcc/analyzer/analysis-plan.h
  6084312218152cf76e77ec8df68925c8  gcc/analyzer/analyzer-language.cc
*************** c2f2cde735be8754015b085d20409b06  gcc/an
*** 3084,3096 ****
  eea1d859327444bcf8618ae79eac49a5  gcc/analyzer/varargs.cc
  47edda2a9e4ad848260206e8228a4ee2  gcc/analyzer/varargs.dot
  6062e521f076f3ebecb6b7c10bc9c19c  gcc/array-traits.h
! 14e568d63c7463eaf14e6be370c8042b  gcc/asan.cc
  e88bf1ee507e058adecd43ef10ff557b  gcc/asan.h
  1116915f4adb131b5451010ff6eb3264  gcc/attr-fnspec.h
  0893fa1e464a180774d4aa5d518943b5  gcc/attribs.cc
  910cd70bc9d3cdcaf432c9d1669b1393  gcc/attribs.h
  e174b4caa93ad41c4f53efed203ea6a9  gcc/auto-inc-dec.cc
! 5e297ee0acade8ac97fabe760b5e9ff3  gcc/auto-profile.cc
  53e6081015db1da68c92d954c932ac53  gcc/auto-profile.h
  340edf75f9fdacfbe681185c549b56e3  gcc/backend.h
  2c7acdc49c294ee259cf96681120a757  gcc/basic-block.h
--- 3085,3097 ----
  eea1d859327444bcf8618ae79eac49a5  gcc/analyzer/varargs.cc
  47edda2a9e4ad848260206e8228a4ee2  gcc/analyzer/varargs.dot
  6062e521f076f3ebecb6b7c10bc9c19c  gcc/array-traits.h
! 118d6936a13d96908c30944e5f692716  gcc/asan.cc
  e88bf1ee507e058adecd43ef10ff557b  gcc/asan.h
  1116915f4adb131b5451010ff6eb3264  gcc/attr-fnspec.h
  0893fa1e464a180774d4aa5d518943b5  gcc/attribs.cc
  910cd70bc9d3cdcaf432c9d1669b1393  gcc/attribs.h
  e174b4caa93ad41c4f53efed203ea6a9  gcc/auto-inc-dec.cc
! ecfe23b98189d9162eabf34977125e6d  gcc/auto-profile.cc
  53e6081015db1da68c92d954c932ac53  gcc/auto-profile.h
  340edf75f9fdacfbe681185c549b56e3  gcc/backend.h
  2c7acdc49c294ee259cf96681120a757  gcc/basic-block.h
*************** e174b4caa93ad41c4f53efed203ea6a9  gcc/au
*** 3101,3118 ****
  294ed61d52ae893dd5c09710fe945aca  gcc/btfout.cc
  bbdd0e6a2c558889d7b99c9e61ca5571  gcc/builtin-attrs.def
  cd880946aff3cd75bff1d0edafa92c14  gcc/builtin-types.def
! 8339eabb575538481e84e2e65c7e9384  gcc/builtins.cc
  8a86b0c51f15d3cd6813b9c29784719f  gcc/builtins.def
  92a923d816f64b2130d01c337f74afaa  gcc/builtins.h
! 18a7d32d4e4da13ae11b4a5077805ab5  gcc/c-family/ChangeLog
  ea3fa1f4d7390a105fa3caab4f79aaf7  gcc/c-family/ChangeLog.gimple-classes
! cb2dd3887aec46346c8b6f2e25cd2134  gcc/c-family/c-ada-spec.cc
  de8eafcdf817fbea182e701f29a59aa1  gcc/c-family/c-ada-spec.h
  685fbbfc5dd238220e1a87a69c1959f8  gcc/c-family/c-attribs.cc
  858855870c75d2029a59b182cec44350  gcc/c-family/c-common.cc
  14cc2c078b45b45e351e4ee4453dffe7  gcc/c-family/c-common.def
  5dae9e83d3de07bbde587cb0204b8f57  gcc/c-family/c-common.h
! 71f04ad211b574b2cc40ed074b45e0dd  gcc/c-family/c-cppbuiltin.cc
  3eb0b238f33b875eeedcf4ea912551cc  gcc/c-family/c-dump.cc
  902577b245ca4efaf2dfa561b6fcbd6c  gcc/c-family/c-format.cc
  b45a3a85918a7fc67dd9ed25c98bb687  gcc/c-family/c-format.h
--- 3102,3119 ----
  294ed61d52ae893dd5c09710fe945aca  gcc/btfout.cc
  bbdd0e6a2c558889d7b99c9e61ca5571  gcc/builtin-attrs.def
  cd880946aff3cd75bff1d0edafa92c14  gcc/builtin-types.def
! 64eabaf62f98ec188eff79bd5f9294ff  gcc/builtins.cc
  8a86b0c51f15d3cd6813b9c29784719f  gcc/builtins.def
  92a923d816f64b2130d01c337f74afaa  gcc/builtins.h
! 2ff0bb04dd1e6ea18277066ed76500f2  gcc/c-family/ChangeLog
  ea3fa1f4d7390a105fa3caab4f79aaf7  gcc/c-family/ChangeLog.gimple-classes
! aef14c07c0730693e794681c71142814  gcc/c-family/c-ada-spec.cc
  de8eafcdf817fbea182e701f29a59aa1  gcc/c-family/c-ada-spec.h
  685fbbfc5dd238220e1a87a69c1959f8  gcc/c-family/c-attribs.cc
  858855870c75d2029a59b182cec44350  gcc/c-family/c-common.cc
  14cc2c078b45b45e351e4ee4453dffe7  gcc/c-family/c-common.def
  5dae9e83d3de07bbde587cb0204b8f57  gcc/c-family/c-common.h
! 5ff5aeae6bf668de7d54ae8fc4ce2738  gcc/c-family/c-cppbuiltin.cc
  3eb0b238f33b875eeedcf4ea912551cc  gcc/c-family/c-dump.cc
  902577b245ca4efaf2dfa561b6fcbd6c  gcc/c-family/c-format.cc
  b45a3a85918a7fc67dd9ed25c98bb687  gcc/c-family/c-format.h
*************** b61b11fd774225229263a3340bfa12df  gcc/c-
*** 3137,3164 ****
  f2fccfe3cc85eeb29299baf4e96dee97  gcc/c-family/c-target.h
  beb75e8a7cb114d9af708092226dc0ad  gcc/c-family/c-ubsan.cc
  79e54a900b8b64b90c3eb82e40a758de  gcc/c-family/c-ubsan.h
! 5530d921cdae7bb1c72bc92c703c9ea2  gcc/c-family/c-warn.cc
  59b4098846e607d14af0bb533d761dd2  gcc/c-family/c.opt
  9e25d532fa20a9040f4d74794f090453  gcc/c-family/cppspec.cc
  6c751e1baf3d7c296dd2b20e431b37d2  gcc/c-family/known-headers.cc
  8ec9a4912d8b3f7d94a11ee04da7517e  gcc/c-family/known-headers.h
  6b3898853ed0b8ac1c9365f8e0da36bd  gcc/c-family/name-hint.h
  78725d6bd115506bafd5753f5e1e3cd0  gcc/c-family/stub-objc.cc
! c34d0d573e3fda8b4fda9c2b2221ed03  gcc/c/ChangeLog
  99998984ca5752ab57a30960e8384032  gcc/c/Make-lang.in
  5d00d791728697d48bdf1b6e276ce5bb  gcc/c/c-aux-info.cc
  1c014228ffb2f2191a1ab3cbd03422dc  gcc/c/c-convert.cc
! 5e42f5b6b7424e3824139d550a5a1b7f  gcc/c/c-decl.cc
  1d53fd8d8e52cf57a0005164f40c31b7  gcc/c/c-errors.cc
  b425749aff683118700bf07ba9eb0653  gcc/c/c-fold.cc
  36f1771d9957e6a1622b001a02e07e2c  gcc/c/c-lang.cc
  3e5bd36fb34468c5f3a3b04875ded56e  gcc/c/c-lang.h
  2c0aa1a5cafc6b82712c83a6a8499b61  gcc/c/c-objc-common.cc
  319c8e804a253f36ed22b5b45df085fe  gcc/c/c-objc-common.h
! a6102f28720e472dd5ddc359bda6873b  gcc/c/c-parser.cc
  cb80c5b43133affc0dd1cdce71b319a0  gcc/c/c-parser.h
  335ea162b657e6b61a17f3160590808c  gcc/c/c-tree.h
! 365c7e9ff9f0d2080855756b113f96ac  gcc/c/c-typeck.cc
  ab9869768090ce9680785aa66ec30241  gcc/c/config-lang.in
  52877b1ddcc264e0b1e414c092ad78b2  gcc/c/gccspec.cc
  05681ad54ba0d53b5bbfab61b6f033c9  gcc/c/gimple-parser.cc
--- 3138,3165 ----
  f2fccfe3cc85eeb29299baf4e96dee97  gcc/c-family/c-target.h
  beb75e8a7cb114d9af708092226dc0ad  gcc/c-family/c-ubsan.cc
  79e54a900b8b64b90c3eb82e40a758de  gcc/c-family/c-ubsan.h
! a52ef4a4723e7cdac973679710b1eb5b  gcc/c-family/c-warn.cc
  59b4098846e607d14af0bb533d761dd2  gcc/c-family/c.opt
  9e25d532fa20a9040f4d74794f090453  gcc/c-family/cppspec.cc
  6c751e1baf3d7c296dd2b20e431b37d2  gcc/c-family/known-headers.cc
  8ec9a4912d8b3f7d94a11ee04da7517e  gcc/c-family/known-headers.h
  6b3898853ed0b8ac1c9365f8e0da36bd  gcc/c-family/name-hint.h
  78725d6bd115506bafd5753f5e1e3cd0  gcc/c-family/stub-objc.cc
! 206055a3bbabebb16c7cce7160f23367  gcc/c/ChangeLog
  99998984ca5752ab57a30960e8384032  gcc/c/Make-lang.in
  5d00d791728697d48bdf1b6e276ce5bb  gcc/c/c-aux-info.cc
  1c014228ffb2f2191a1ab3cbd03422dc  gcc/c/c-convert.cc
! bf0332b558184c505f6690fc57ac56f7  gcc/c/c-decl.cc
  1d53fd8d8e52cf57a0005164f40c31b7  gcc/c/c-errors.cc
  b425749aff683118700bf07ba9eb0653  gcc/c/c-fold.cc
  36f1771d9957e6a1622b001a02e07e2c  gcc/c/c-lang.cc
  3e5bd36fb34468c5f3a3b04875ded56e  gcc/c/c-lang.h
  2c0aa1a5cafc6b82712c83a6a8499b61  gcc/c/c-objc-common.cc
  319c8e804a253f36ed22b5b45df085fe  gcc/c/c-objc-common.h
! 9fa17c0c8e84e38f4390491dd9b178ec  gcc/c/c-parser.cc
  cb80c5b43133affc0dd1cdce71b319a0  gcc/c/c-parser.h
  335ea162b657e6b61a17f3160590808c  gcc/c/c-tree.h
! 4ea2351703bde07965e3de8858420671  gcc/c/c-typeck.cc
  ab9869768090ce9680785aa66ec30241  gcc/c/config-lang.in
  52877b1ddcc264e0b1e414c092ad78b2  gcc/c/gccspec.cc
  05681ad54ba0d53b5bbfab61b6f033c9  gcc/c/gimple-parser.cc
*************** d019cb2ea45f5fa1f8a9cf4c24738ff7  gcc/cf
*** 3188,3197 ****
  19dacb8567e06231de7fe4cc82fe63da  gcc/cfgloopmanip.h
  747aaa45beb48effaf961370d9c062ce  gcc/cfgrtl.cc
  da68b1c5283ed68c563e46ff6573c10a  gcc/cfgrtl.h
! cc6dcbe93dbe0ec5e0b8f9f17b38f945  gcc/cgraph.cc
  018a16a4b62363ae44492c72bd779cfa  gcc/cgraph.h
  4adf120975b7f6553fea856b9e4c1622  gcc/cgraphbuild.cc
! e12eced2454a68c176f1d69ad3c515dc  gcc/cgraphclones.cc
  cc69456dd81e60eab5d0dc055bd1d4e4  gcc/cgraphunit.cc
  40601133406a9a11490ce86068a4e987  gcc/cif-code.def
  cf7fe7388be54e205514fd0c3032a455  gcc/collect-utils.cc
--- 3189,3198 ----
  19dacb8567e06231de7fe4cc82fe63da  gcc/cfgloopmanip.h
  747aaa45beb48effaf961370d9c062ce  gcc/cfgrtl.cc
  da68b1c5283ed68c563e46ff6573c10a  gcc/cfgrtl.h
! b69a154b40defaf9e2ab375547199a50  gcc/cgraph.cc
  018a16a4b62363ae44492c72bd779cfa  gcc/cgraph.h
  4adf120975b7f6553fea856b9e4c1622  gcc/cgraphbuild.cc
! 0f74e2779559c94f9c0cb9e33873b535  gcc/cgraphclones.cc
  cc69456dd81e60eab5d0dc055bd1d4e4  gcc/cgraphunit.cc
  40601133406a9a11490ce86068a4e987  gcc/cif-code.def
  cf7fe7388be54e205514fd0c3032a455  gcc/collect-utils.cc
*************** a72185fb3571a1a22bbb61fc3b7454f3  gcc/co
*** 3202,3208 ****
  44030d04130f80c7a8b32788a7d2f5e7  gcc/collect2.h
  cb80b744e071259c95e671849491dde2  gcc/color-macros.h
  e2b80b721f5d66e672c4f7978b551172  gcc/combine-stack-adj.cc
! 65048db4426173caef4c09e5d093add7  gcc/combine.cc
  043cecacdd70fa8fef961a26b00040fa  gcc/common.md
  434e51870f06b036b8e82feed2edac9a  gcc/common.opt
  dbdf1cd9a2b5243c1b082761a4401069  gcc/common/common-target-def.h
--- 3203,3209 ----
  44030d04130f80c7a8b32788a7d2f5e7  gcc/collect2.h
  cb80b744e071259c95e671849491dde2  gcc/color-macros.h
  e2b80b721f5d66e672c4f7978b551172  gcc/combine-stack-adj.cc
! 75f5b587ada82f6d311060854366967c  gcc/combine.cc
  043cecacdd70fa8fef961a26b00040fa  gcc/common.md
  434e51870f06b036b8e82feed2edac9a  gcc/common.opt
  dbdf1cd9a2b5243c1b082761a4401069  gcc/common/common-target-def.h
*************** dbdf1cd9a2b5243c1b082761a4401069  gcc/co
*** 3210,3216 ****
  af9eb41a9005138a377c5c3228fa354e  gcc/common/common-target.h
  cb86bee78570cfcfdddea72c500d6ca0  gcc/common/common-targhooks.cc
  6931fc217063c5dacb45b4e131629b48  gcc/common/common-targhooks.h
! fc58b748aac3806aacde6dded07976ab  gcc/common/config/aarch64/aarch64-common.cc
  d983944b066a9f91d172e604162aec56  gcc/common/config/alpha/alpha-common.cc
  cf52ea7bf51ae49e7e06fa2382572eff  gcc/common/config/arc/arc-common.cc
  84e073cf5e63cefa544a5487559115db  gcc/common/config/arm/arm-common.cc
--- 3211,3217 ----
  af9eb41a9005138a377c5c3228fa354e  gcc/common/common-target.h
  cb86bee78570cfcfdddea72c500d6ca0  gcc/common/common-targhooks.cc
  6931fc217063c5dacb45b4e131629b48  gcc/common/common-targhooks.h
! f2ee28be11fb50093a5b8b54ed351b61  gcc/common/config/aarch64/aarch64-common.cc
  d983944b066a9f91d172e604162aec56  gcc/common/config/alpha/alpha-common.cc
  cf52ea7bf51ae49e7e06fa2382572eff  gcc/common/config/arc/arc-common.cc
  84e073cf5e63cefa544a5487559115db  gcc/common/config/arm/arm-common.cc
*************** f5af84006ceedb8b558effab5e966caf  gcc/co
*** 3226,3234 ****
  ef4bef6bcc0fd9bc205e0372936e2e9a  gcc/common/config/frv/frv-common.cc
  92884e3745a520bd79446127d0e0cc1e  gcc/common/config/gcn/gcn-common.cc
  e9b5eb9f763e7c9c37f0cae3b2c2b227  gcc/common/config/h8300/h8300-common.cc
! c0c48e1d36ea20557753963834a76a5e  gcc/common/config/i386/cpuinfo.h
! 018fb2964fc3ab0ef6b656de09bdcfda  gcc/common/config/i386/i386-common.cc
! 9cb11e917d5515cc841c70c6b5a47a25  gcc/common/config/i386/i386-cpuinfo.h
  4731966ebb40e4a624fc35f7076c0036  gcc/common/config/i386/i386-isas.h
  dd1706199d92845c343787ef21d4905f  gcc/common/config/ia64/ia64-common.cc
  d927e055cae5a7415d9a5837fd8dee27  gcc/common/config/iq2000/iq2000-common.cc
--- 3227,3235 ----
  ef4bef6bcc0fd9bc205e0372936e2e9a  gcc/common/config/frv/frv-common.cc
  92884e3745a520bd79446127d0e0cc1e  gcc/common/config/gcn/gcn-common.cc
  e9b5eb9f763e7c9c37f0cae3b2c2b227  gcc/common/config/h8300/h8300-common.cc
! aa78228db3d3a20fa4d3e421c71eb0bb  gcc/common/config/i386/cpuinfo.h
! fcf0f3787c6e5e5145f88279ab017a2a  gcc/common/config/i386/i386-common.cc
! 247b6727a45b088c38e8aaa06496f5b4  gcc/common/config/i386/i386-cpuinfo.h
  4731966ebb40e4a624fc35f7076c0036  gcc/common/config/i386/i386-isas.h
  dd1706199d92845c343787ef21d4905f  gcc/common/config/ia64/ia64-common.cc
  d927e055cae5a7415d9a5837fd8dee27  gcc/common/config/iq2000/iq2000-common.cc
*************** bbb86dc26326c9e21536b29093ef0ccd  gcc/co
*** 3263,3277 ****
  08b08b7d10f25136197b98ebe582137e  gcc/compare-elim.cc
  c29a5051809c4038f65af7557c1e9fcd  gcc/conditions.h
  d343cb4b75d4bf1ab6e7001d3ce082eb  gcc/config.build
! 49d1756d6274e50b75e419a6563d6d16  gcc/config.gcc
  0d31f9eb11863dd34b34981d3e4acb3f  gcc/config.host
! c1171e5a9223f6f66cb7935c074e16df  gcc/config.in
  8e697813dc96ca90f5d0f4c196efe2cc  gcc/config/README
  01652a51b7f1b43b916764306bb9d2e5  gcc/config/aarch64/aarch64-arches.def
  5f42c31c26ba2ba899445953663c5213  gcc/config/aarch64/aarch64-builtins.cc
! 5261e48fdbbcfcfec5dd15cc3777a339  gcc/config/aarch64/aarch64-c.cc
  2d006aaa471ab025cdc16bfe082c0dad  gcc/config/aarch64/aarch64-cc-fusion.cc
! 8460a69a1ba7d2981a1e04415e45aa41  gcc/config/aarch64/aarch64-cores.def
  c92fe8de39f59c29808fbc4d06bb296a  gcc/config/aarch64/aarch64-cost-tables.h
  f36cfc0d8235a8638c1c878f0a78f3b9  gcc/config/aarch64/aarch64-d.cc
  412f7e5d8e9b61050a72b7115a3b0849  gcc/config/aarch64/aarch64-d.h
--- 3264,3278 ----
  08b08b7d10f25136197b98ebe582137e  gcc/compare-elim.cc
  c29a5051809c4038f65af7557c1e9fcd  gcc/conditions.h
  d343cb4b75d4bf1ab6e7001d3ce082eb  gcc/config.build
! 641499d4e856c6f34bd062593ad33ad8  gcc/config.gcc
  0d31f9eb11863dd34b34981d3e4acb3f  gcc/config.host
! 5ce7c19d80c83cb13de5fb0dfe3cbca1  gcc/config.in
  8e697813dc96ca90f5d0f4c196efe2cc  gcc/config/README
  01652a51b7f1b43b916764306bb9d2e5  gcc/config/aarch64/aarch64-arches.def
  5f42c31c26ba2ba899445953663c5213  gcc/config/aarch64/aarch64-builtins.cc
! fb493595d596ab42f957110465d0be51  gcc/config/aarch64/aarch64-c.cc
  2d006aaa471ab025cdc16bfe082c0dad  gcc/config/aarch64/aarch64-cc-fusion.cc
! c3ea1738c6c4747e5db352e881e39c09  gcc/config/aarch64/aarch64-cores.def
  c92fe8de39f59c29808fbc4d06bb296a  gcc/config/aarch64/aarch64-cost-tables.h
  f36cfc0d8235a8638c1c878f0a78f3b9  gcc/config/aarch64/aarch64-d.cc
  412f7e5d8e9b61050a72b7115a3b0849  gcc/config/aarch64/aarch64-d.h
*************** aa79e6c435e5a0665d38133b42f5d51e  gcc/co
*** 3279,3285 ****
  fdc449f6d081929b3aac795e0f3fdb8b  gcc/config/aarch64/aarch64-elf.h
  f3af4a840fabb36f7cfd20df12d20cd8  gcc/config/aarch64/aarch64-errata.h
  c078babb011318067b0732afd220560c  gcc/config/aarch64/aarch64-feature-deps.h
! bcce9f393a1c20a7530aee1fb89f531d  gcc/config/aarch64/aarch64-freebsd.h
  da1c20bb52f8669f737e6852bf618530  gcc/config/aarch64/aarch64-fusion-pairs.def
  4595dd7acaa56b83651a39124c9c7540  gcc/config/aarch64/aarch64-ldpstp.md
  836c7bac12f6d83fae19773b92f72bd7  gcc/config/aarch64/aarch64-linux.h
--- 3280,3286 ----
  fdc449f6d081929b3aac795e0f3fdb8b  gcc/config/aarch64/aarch64-elf.h
  f3af4a840fabb36f7cfd20df12d20cd8  gcc/config/aarch64/aarch64-errata.h
  c078babb011318067b0732afd220560c  gcc/config/aarch64/aarch64-feature-deps.h
! ca9596d9ffe42d4b80945d4985c10976  gcc/config/aarch64/aarch64-freebsd.h
  da1c20bb52f8669f737e6852bf618530  gcc/config/aarch64/aarch64-fusion-pairs.def
  4595dd7acaa56b83651a39124c9c7540  gcc/config/aarch64/aarch64-ldpstp.md
  836c7bac12f6d83fae19773b92f72bd7  gcc/config/aarch64/aarch64-linux.h
*************** d626f1f61bc2d0cad5551d7bb2666b91  gcc/co
*** 3293,3299 ****
  afd3ea5ae83178ba9ef0abc732623c75  gcc/config/aarch64/aarch64-simd-builtins.def
  a8aad92f02ba8729f4cd1b8b3c4efc5f  gcc/config/aarch64/aarch64-simd.md
  0fd01f881e8207e1d6c6521e7122e0a0  gcc/config/aarch64/aarch64-speculation.cc
! 3bb5af31e0168e86e3ebab238957919c  gcc/config/aarch64/aarch64-sve-builtins-base.cc
  59c3c335a6c6e57c547fb2e9fef3eef9  gcc/config/aarch64/aarch64-sve-builtins-base.def
  33bd4a836a53e47b04b4c46ba55098c9  gcc/config/aarch64/aarch64-sve-builtins-base.h
  768e4d9fba61f6fed2d93aa6876abcc2  gcc/config/aarch64/aarch64-sve-builtins-functions.h
--- 3294,3300 ----
  afd3ea5ae83178ba9ef0abc732623c75  gcc/config/aarch64/aarch64-simd-builtins.def
  a8aad92f02ba8729f4cd1b8b3c4efc5f  gcc/config/aarch64/aarch64-simd.md
  0fd01f881e8207e1d6c6521e7122e0a0  gcc/config/aarch64/aarch64-speculation.cc
! 33a2627754cd7f586c413d23113cca3e  gcc/config/aarch64/aarch64-sve-builtins-base.cc
  59c3c335a6c6e57c547fb2e9fef3eef9  gcc/config/aarch64/aarch64-sve-builtins-base.def
  33bd4a836a53e47b04b4c46ba55098c9  gcc/config/aarch64/aarch64-sve-builtins-base.h
  768e4d9fba61f6fed2d93aa6876abcc2  gcc/config/aarch64/aarch64-sve-builtins-functions.h
*************** fb2af51188d71aa0ad4edbb97be3fe41  gcc/co
*** 3305,3318 ****
  45d75fc8775a4aa44d49b8571fdf7b29  gcc/config/aarch64/aarch64-sve-builtins.cc
  d944ba1876e827e8299a96fc31433c22  gcc/config/aarch64/aarch64-sve-builtins.def
  4ec15579b7cd3388c4d8eb7117540e35  gcc/config/aarch64/aarch64-sve-builtins.h
! 1fe26d857090234eb7ecd771b092f5fe  gcc/config/aarch64/aarch64-sve.md
  539c5094467274e03fa1ea0087d02d65  gcc/config/aarch64/aarch64-sve2.md
! 9c49b804ec0efee3fff0c61aff10304e  gcc/config/aarch64/aarch64-tune.md
  59a2e50c10aa66ea9757d8594c3cb6dc  gcc/config/aarch64/aarch64-tuning-flags.def
  703c876523c318a07e43cdfe4a0a2bee  gcc/config/aarch64/aarch64-vxworks.h
! 511bae1b285624f4257877ee82f68454  gcc/config/aarch64/aarch64.cc
! ceb8c7931dea9ca79e31bca3dda14bc3  gcc/config/aarch64/aarch64.h
! 191518e0742788a36ce440b94ea9fd7f  gcc/config/aarch64/aarch64.md
  27b3d58e07a631b044b51b2920e36271  gcc/config/aarch64/aarch64.opt
  f10e987cf60989a2c0882723035228c8  gcc/config/aarch64/arm_acle.h
  037341ded31b1b6e3ab4e48e63f32185  gcc/config/aarch64/arm_bf16.h
--- 3306,3319 ----
  45d75fc8775a4aa44d49b8571fdf7b29  gcc/config/aarch64/aarch64-sve-builtins.cc
  d944ba1876e827e8299a96fc31433c22  gcc/config/aarch64/aarch64-sve-builtins.def
  4ec15579b7cd3388c4d8eb7117540e35  gcc/config/aarch64/aarch64-sve-builtins.h
! de96fdd9da0d4a9bb48655452dc138c2  gcc/config/aarch64/aarch64-sve.md
  539c5094467274e03fa1ea0087d02d65  gcc/config/aarch64/aarch64-sve2.md
! 7110ab6fb22b0e5dc8f7c105640b73f4  gcc/config/aarch64/aarch64-tune.md
  59a2e50c10aa66ea9757d8594c3cb6dc  gcc/config/aarch64/aarch64-tuning-flags.def
  703c876523c318a07e43cdfe4a0a2bee  gcc/config/aarch64/aarch64-vxworks.h
! d32970a53b05552eadc6493e3657fc9d  gcc/config/aarch64/aarch64.cc
! 8df0eba1e11a7d9dcc4820353ddc6ba5  gcc/config/aarch64/aarch64.h
! a0a174ab1c6d081490ab52ebf1d0bee1  gcc/config/aarch64/aarch64.md
  27b3d58e07a631b044b51b2920e36271  gcc/config/aarch64/aarch64.opt
  f10e987cf60989a2c0882723035228c8  gcc/config/aarch64/arm_acle.h
  037341ded31b1b6e3ab4e48e63f32185  gcc/config/aarch64/arm_bf16.h
*************** e0d82c4a6ccdb783c299ef853b07a85a  gcc/co
*** 3325,3331 ****
  5d97853bf44cafd1dd5a692c7ecd6d9e  gcc/config/aarch64/check-sve-md.awk
  13907bf624e4b4301887700631c9e355  gcc/config/aarch64/constraints.md
  cb3895773e41ffc0b75ab3f97389f5d5  gcc/config/aarch64/cortex-a57-fma-steering.cc
! 71f38a11477d951dc128122e18895417  gcc/config/aarch64/driver-aarch64.cc
  1ccc0238da5ced89db717f38da7987aa  gcc/config/aarch64/falkor-tag-collision-avoidance.cc
  6ea648b863a85cca380d5385687c7249  gcc/config/aarch64/falkor.md
  c89c7b8fec07c5b75e3628a6ee822c1f  gcc/config/aarch64/fractional-cost.h
--- 3326,3332 ----
  5d97853bf44cafd1dd5a692c7ecd6d9e  gcc/config/aarch64/check-sve-md.awk
  13907bf624e4b4301887700631c9e355  gcc/config/aarch64/constraints.md
  cb3895773e41ffc0b75ab3f97389f5d5  gcc/config/aarch64/cortex-a57-fma-steering.cc
! c8fca69ee7fa6e445bf2e659cb90f7b4  gcc/config/aarch64/driver-aarch64.cc
  1ccc0238da5ced89db717f38da7987aa  gcc/config/aarch64/falkor-tag-collision-avoidance.cc
  6ea648b863a85cca380d5385687c7249  gcc/config/aarch64/falkor.md
  c89c7b8fec07c5b75e3628a6ee822c1f  gcc/config/aarch64/fractional-cost.h
*************** a07ee362a4961e9d41cb0ab83553de74  gcc/co
*** 3353,3361 ****
  aff485c72ebe107fc7c9599affeb2726  gcc/config/alpha/alpha-protos.h
  00e3da44ce94c3dcbffe4749878dcf6c  gcc/config/alpha/alpha.cc
  446505a9b6a502168faad76aec44808e  gcc/config/alpha/alpha.h
! 3938a9d967b17b9bdfdba71e0d3bcf8e  gcc/config/alpha/alpha.md
  f6ac905f9f792ff6b01903c1e1a9c8c0  gcc/config/alpha/alpha.opt
! f7fa0546a73c06f853e5f9f9a1c1e0b6  gcc/config/alpha/constraints.md
  e0f40b5bfbc064296f490ee0452a7c6e  gcc/config/alpha/driver-alpha.cc
  68b07461f0b20c6f7a8b740b1b090bab  gcc/config/alpha/elf.h
  76dbc2f9ee0598fe4cb6f4593a18f3ca  gcc/config/alpha/elf.opt
--- 3354,3362 ----
  aff485c72ebe107fc7c9599affeb2726  gcc/config/alpha/alpha-protos.h
  00e3da44ce94c3dcbffe4749878dcf6c  gcc/config/alpha/alpha.cc
  446505a9b6a502168faad76aec44808e  gcc/config/alpha/alpha.h
! baca2f3a3e12bcc6612362f300410b8e  gcc/config/alpha/alpha.md
  f6ac905f9f792ff6b01903c1e1a9c8c0  gcc/config/alpha/alpha.opt
! 5fe6f05888c3968e4f81ad175122bf51  gcc/config/alpha/constraints.md
  e0f40b5bfbc064296f490ee0452a7c6e  gcc/config/alpha/driver-alpha.cc
  68b07461f0b20c6f7a8b740b1b090bab  gcc/config/alpha/elf.h
  76dbc2f9ee0598fe4cb6f4593a18f3ca  gcc/config/alpha/elf.opt
*************** a66f3c594c6fc329800e3fb836fdfd26  gcc/co
*** 3438,3444 ****
  604d3b4e6182f09e4a772f53ed92d704  gcc/config/arm/arm-simd-builtin-types.def
  0e7b2ceea31abf677030625bec385ac3  gcc/config/arm/arm-tables.opt
  5a144b12347f9e5cd1b3b8c2fcf8a8a3  gcc/config/arm/arm-tune.md
! a51c1c5bf4150affc707d8752a363648  gcc/config/arm/arm.cc
  c14964f7e41f42d7c9bf3b5b0b556ebf  gcc/config/arm/arm.h
  4b623b84f69c0f93d1212fd10edf4ab5  gcc/config/arm/arm.md
  cf127021475a9bc9dca6dabb24611b52  gcc/config/arm/arm.opt
--- 3439,3445 ----
  604d3b4e6182f09e4a772f53ed92d704  gcc/config/arm/arm-simd-builtin-types.def
  0e7b2ceea31abf677030625bec385ac3  gcc/config/arm/arm-tables.opt
  5a144b12347f9e5cd1b3b8c2fcf8a8a3  gcc/config/arm/arm-tune.md
! 4600e7f254fe7e45c3b912aeac984352  gcc/config/arm/arm.cc
  c14964f7e41f42d7c9bf3b5b0b556ebf  gcc/config/arm/arm.h
  4b623b84f69c0f93d1212fd10edf4ab5  gcc/config/arm/arm.md
  cf127021475a9bc9dca6dabb24611b52  gcc/config/arm/arm.opt
*************** df69a8be574605f025ea19dc33d19fbc  gcc/co
*** 3453,3461 ****
  7e6d9928423c323cde4eca1cfab9306d  gcc/config/arm/arm_cde_builtins.def
  dfc83255445673e1d6614fe8c8b5e6c2  gcc/config/arm/arm_cmse.h
  d6fef70ace0ae4ee8c79342bdd439e8b  gcc/config/arm/arm_fp16.h
! b641373612212f74e6a061622aa27323  gcc/config/arm/arm_mve.h
  70355c5056697a2abb28cf3390269afb  gcc/config/arm/arm_mve_builtins.def
! 972ecc9a7f1d9ef1cb9957095e0de3bb  gcc/config/arm/arm_mve_types.h
  05a32396895a46991ff4b4cee44c31da  gcc/config/arm/arm_neon.h
  0cc2962c49dec12eb6d5a69963c371ae  gcc/config/arm/arm_neon_builtins.def
  84ecce562f7cb7b7cc93005aac1c1017  gcc/config/arm/arm_vfp_builtins.def
--- 3454,3462 ----
  7e6d9928423c323cde4eca1cfab9306d  gcc/config/arm/arm_cde_builtins.def
  dfc83255445673e1d6614fe8c8b5e6c2  gcc/config/arm/arm_cmse.h
  d6fef70ace0ae4ee8c79342bdd439e8b  gcc/config/arm/arm_fp16.h
! e77f7696b58814939d7e7ad921a38f19  gcc/config/arm/arm_mve.h
  70355c5056697a2abb28cf3390269afb  gcc/config/arm/arm_mve_builtins.def
! 784b27ba061656254317f3cf1fd6df14  gcc/config/arm/arm_mve_types.h
  05a32396895a46991ff4b4cee44c31da  gcc/config/arm/arm_neon.h
  0cc2962c49dec12eb6d5a69963c371ae  gcc/config/arm/arm_neon_builtins.def
  84ecce562f7cb7b7cc93005aac1c1017  gcc/config/arm/arm_vfp_builtins.def
*************** e104a0a4449c8d71cd7bba42a336b2d1  gcc/co
*** 3489,3495 ****
  77cb5c60fe53c88c25353346c7b608c8  gcc/config/arm/fa626te.md
  db1d888a13c8d3fe34e5276ce2819975  gcc/config/arm/fa726te.md
  4ca792540ddb2c72f2d995c08d4223da  gcc/config/arm/fmp626.md
! 36a5628abd5fe7376df7e45729ca3fb4  gcc/config/arm/freebsd.h
  3513a27a77451eee41b1d9a273634a6f  gcc/config/arm/fuchsia-elf.h
  aaf960f6a664546f0a30d21b35065302  gcc/config/arm/iterators.md
  ca361a03f818d15e0a9b6f7f79074713  gcc/config/arm/iwmmxt.md
--- 3490,3496 ----
  77cb5c60fe53c88c25353346c7b608c8  gcc/config/arm/fa626te.md
  db1d888a13c8d3fe34e5276ce2819975  gcc/config/arm/fa726te.md
  4ca792540ddb2c72f2d995c08d4223da  gcc/config/arm/fmp626.md
! 7014ff02578254b8ad5668b37226684d  gcc/config/arm/freebsd.h
  3513a27a77451eee41b1d9a273634a6f  gcc/config/arm/fuchsia-elf.h
  aaf960f6a664546f0a30d21b35065302  gcc/config/arm/iterators.md
  ca361a03f818d15e0a9b6f7f79074713  gcc/config/arm/iwmmxt.md
*************** fcd6b308d68cd7bc641bb91e473518bf  gcc/co
*** 3502,3508 ****
  e2efbd2171ce4a6433002f5b9dabc4e6  gcc/config/arm/marvell-f-iwmmxt.md
  de8cd2160d601b4afb431254b804f705  gcc/config/arm/marvell-pj4.md
  be508a7c9d8bb071759bff618b2fbc2c  gcc/config/arm/mmintrin.h
! ca8c9182286824ade9c9ea366e90a540  gcc/config/arm/mve.md
  34261e480034458c42d06108151b78d8  gcc/config/arm/neon.md
  e092dc54e5e4e06263edfb3ec84d76af  gcc/config/arm/netbsd-eabi.h
  6accf4d7d44501880bfd48b1eb70b05e  gcc/config/arm/netbsd-elf.h
--- 3503,3509 ----
  e2efbd2171ce4a6433002f5b9dabc4e6  gcc/config/arm/marvell-f-iwmmxt.md
  de8cd2160d601b4afb431254b804f705  gcc/config/arm/marvell-pj4.md
  be508a7c9d8bb071759bff618b2fbc2c  gcc/config/arm/mmintrin.h
! 77d8b7747068713b7ed1d03e3d4c6fee  gcc/config/arm/mve.md
  34261e480034458c42d06108151b78d8  gcc/config/arm/neon.md
  e092dc54e5e4e06263edfb3ec84d76af  gcc/config/arm/netbsd-eabi.h
  6accf4d7d44501880bfd48b1eb70b05e  gcc/config/arm/netbsd-elf.h
*************** e3950ec6bd159734835f8f8fb143efc6  gcc/co
*** 3522,3528 ****
  687c0e473a8357eb9bbdf5b628db1fd7  gcc/config/arm/t-multilib
  dd332b5c4bf7f5818c7f79cc3af2ceb0  gcc/config/arm/t-phoenix
  3c5684b96d4856f15396bf751735a810  gcc/config/arm/t-rmprofile
! c434e99f4fc47fd32ffab26fbeea8464  gcc/config/arm/t-rtems
  99532a3b480860f7a66fd99e84508362  gcc/config/arm/t-symbian
  951be86a80be890746abaaf44836bd12  gcc/config/arm/t-vxworks
  3f0d4ea121f03e0f25da9fbf40fda7c7  gcc/config/arm/thumb1.md
--- 3523,3529 ----
  687c0e473a8357eb9bbdf5b628db1fd7  gcc/config/arm/t-multilib
  dd332b5c4bf7f5818c7f79cc3af2ceb0  gcc/config/arm/t-phoenix
  3c5684b96d4856f15396bf751735a810  gcc/config/arm/t-rmprofile
! dc8e1ff924dd1f2699f60837b792825a  gcc/config/arm/t-rtems
  99532a3b480860f7a66fd99e84508362  gcc/config/arm/t-symbian
  951be86a80be890746abaaf44836bd12  gcc/config/arm/t-vxworks
  3f0d4ea121f03e0f25da9fbf40fda7c7  gcc/config/arm/thumb1.md
*************** a373ca0dfe835fe420a8d470352225d5  gcc/co
*** 3543,3559 ****
  f4c79e9220e9187c3a843e0a42c1d503  gcc/config/avr/avr-arch.h
  5ac6143a494b67b2408579331c71c89a  gcc/config/avr/avr-c.cc
  1f1b24bccebced685f22675a39d03550  gcc/config/avr/avr-devices.cc
! 1a8dcd65c377e063a63bb97bad385cf3  gcc/config/avr/avr-dimode.md
  708f772e2588821bfa91118474a89d0a  gcc/config/avr/avr-fixed.md
  c3ab3d8980033cd869c1c27b318115ce  gcc/config/avr/avr-log.cc
! 4ae35627becfeb450a7a4a4e9c53d174  gcc/config/avr/avr-mcus.def
  69b36d3d75fa8c748a6f1c843d6888f7  gcc/config/avr/avr-modes.def
  9126e9ec7dee9b9d66f6893bb9926647  gcc/config/avr/avr-passes.def
! 4f91fbe7424d740dd0cf76ad9f603740  gcc/config/avr/avr-protos.h
  55c51229f13ced0bdddbfd397c9a57d4  gcc/config/avr/avr-stdint.h
! b3c430dc7829c2498fa34259687238d7  gcc/config/avr/avr.cc
  800f7501f0eacfee1c1b717e491085b2  gcc/config/avr/avr.h
! f70d7451deeba4ac71d3e57fedab7cff  gcc/config/avr/avr.md
  154dcf10de2f21666b4516257fbcecd2  gcc/config/avr/avr.opt
  d5ca1928fb0eef4a39e419faa25782b4  gcc/config/avr/avrlibc.h
  82e55abb13cdee932b88cb4c074f76fe  gcc/config/avr/builtins.def
--- 3544,3560 ----
  f4c79e9220e9187c3a843e0a42c1d503  gcc/config/avr/avr-arch.h
  5ac6143a494b67b2408579331c71c89a  gcc/config/avr/avr-c.cc
  1f1b24bccebced685f22675a39d03550  gcc/config/avr/avr-devices.cc
! 45d01b1a247cd92dd44c4bc361a97321  gcc/config/avr/avr-dimode.md
  708f772e2588821bfa91118474a89d0a  gcc/config/avr/avr-fixed.md
  c3ab3d8980033cd869c1c27b318115ce  gcc/config/avr/avr-log.cc
! 301062653b41a8bc14b7342f09f9a32a  gcc/config/avr/avr-mcus.def
  69b36d3d75fa8c748a6f1c843d6888f7  gcc/config/avr/avr-modes.def
  9126e9ec7dee9b9d66f6893bb9926647  gcc/config/avr/avr-passes.def
! 0e3f58ff86af5534419a0e0fb1a552a1  gcc/config/avr/avr-protos.h
  55c51229f13ced0bdddbfd397c9a57d4  gcc/config/avr/avr-stdint.h
! 86ba0b159451932a8735d4422011f882  gcc/config/avr/avr.cc
  800f7501f0eacfee1c1b717e491085b2  gcc/config/avr/avr.h
! 43fee9a758fe7d37f8c47f01e9eb6fad  gcc/config/avr/avr.md
  154dcf10de2f21666b4516257fbcecd2  gcc/config/avr/avr.opt
  d5ca1928fb0eef4a39e419faa25782b4  gcc/config/avr/avrlibc.h
  82e55abb13cdee932b88cb4c074f76fe  gcc/config/avr/builtins.def
*************** b62a47b77dccb47ce687a46ca17cec43  gcc/co
*** 3673,3679 ****
  39a0c9fb5dd1e1cfc368f3b0778f07f9  gcc/config/darwin-protos.h
  a581ffcfe57fc085bb14fed30225dcf4  gcc/config/darwin-sections.def
  017d51eec9cabc9e51025a6ced560872  gcc/config/darwin.cc
! ce0b3ff49e038f41e13d855e832b1ef1  gcc/config/darwin.h
  2d0c2e46036e1142674c71c1683e5029  gcc/config/darwin.opt
  e995cbf40e93284ca4ad4576deae0b57  gcc/config/default-c.cc
  d492599e2fe59e667eb069826c292f25  gcc/config/default-d.cc
--- 3674,3680 ----
  39a0c9fb5dd1e1cfc368f3b0778f07f9  gcc/config/darwin-protos.h
  a581ffcfe57fc085bb14fed30225dcf4  gcc/config/darwin-sections.def
  017d51eec9cabc9e51025a6ced560872  gcc/config/darwin.cc
! 3108516175e16c24ce25dfe9aff7e7c8  gcc/config/darwin.h
  2d0c2e46036e1142674c71c1683e5029  gcc/config/darwin.opt
  e995cbf40e93284ca4ad4576deae0b57  gcc/config/default-c.cc
  d492599e2fe59e667eb069826c292f25  gcc/config/default-d.cc
*************** b8e8b401593d4347be0a920265452f7d  gcc/co
*** 3706,3712 ****
  86ad7d130cfe80f1ad9f1c7b1b372cfe  gcc/config/fr30/predicates.md
  0225d3a0c5926ad58b3dbfb7415624b9  gcc/config/freebsd-d.cc
  c7b5aa1df838fa1bd0e96aa886998f99  gcc/config/freebsd-nthr.h
! f4ba9bc3a839054fcb5ee4a55dc469ef  gcc/config/freebsd-spec.h
  9b3580983bfd5a99db492af12b479144  gcc/config/freebsd-stdint.h
  c3f69841406bbfcf2e5efda655c10e7a  gcc/config/freebsd.h
  fea21f2974267988390e9375f392c0a6  gcc/config/freebsd.opt
--- 3707,3713 ----
  86ad7d130cfe80f1ad9f1c7b1b372cfe  gcc/config/fr30/predicates.md
  0225d3a0c5926ad58b3dbfb7415624b9  gcc/config/freebsd-d.cc
  c7b5aa1df838fa1bd0e96aa886998f99  gcc/config/freebsd-nthr.h
! 21a2a4656bf09f33ed2ceda68f580615  gcc/config/freebsd-spec.h
  9b3580983bfd5a99db492af12b479144  gcc/config/freebsd-stdint.h
  c3f69841406bbfcf2e5efda655c10e7a  gcc/config/freebsd.h
  fea21f2974267988390e9375f392c0a6  gcc/config/freebsd.opt
*************** b8695cdce964102e0ac837d1033a8d4a  gcc/co
*** 3814,3823 ****
  37a8378c33d1cd7dcadcddcb39f093a6  gcc/config/i386/avx512bitalgintrin.h
  d60f0dd52fd58d6cdaa795cd7aa379a7  gcc/config/i386/avx512bwintrin.h
  fc8ba175719967cb3897734b04aaa152  gcc/config/i386/avx512cdintrin.h
! d606104e61ee4184b105a29dd9f8874d  gcc/config/i386/avx512dqintrin.h
  89ad5161864151492138726742065bd4  gcc/config/i386/avx512erintrin.h
  3e485b91edc94f598c1586d50924107b  gcc/config/i386/avx512fintrin.h
! 6c0b3b014c64f96f9154305ad050e192  gcc/config/i386/avx512fp16intrin.h
  425bfb3a013e3d22cf85414c6976c54b  gcc/config/i386/avx512fp16vlintrin.h
  73911bb30ce2898efe5abaeed585f849  gcc/config/i386/avx512ifmaintrin.h
  b48423c9093a9e3f3e70c05090d7ed6f  gcc/config/i386/avx512ifmavlintrin.h
--- 3815,3824 ----
  37a8378c33d1cd7dcadcddcb39f093a6  gcc/config/i386/avx512bitalgintrin.h
  d60f0dd52fd58d6cdaa795cd7aa379a7  gcc/config/i386/avx512bwintrin.h
  fc8ba175719967cb3897734b04aaa152  gcc/config/i386/avx512cdintrin.h
! fc68d597c3eb1ace9864fd5dff6031bd  gcc/config/i386/avx512dqintrin.h
  89ad5161864151492138726742065bd4  gcc/config/i386/avx512erintrin.h
  3e485b91edc94f598c1586d50924107b  gcc/config/i386/avx512fintrin.h
! ba3ceea89d0f8425d868f2067307d1a4  gcc/config/i386/avx512fp16intrin.h
  425bfb3a013e3d22cf85414c6976c54b  gcc/config/i386/avx512fp16vlintrin.h
  73911bb30ce2898efe5abaeed585f849  gcc/config/i386/avx512ifmaintrin.h
  b48423c9093a9e3f3e70c05090d7ed6f  gcc/config/i386/avx512ifmavlintrin.h
*************** b48423c9093a9e3f3e70c05090d7ed6f  gcc/co
*** 3826,3834 ****
  1dac4b3b63df64d7731becf1987ac0d6  gcc/config/i386/avx512vbmi2vlintrin.h
  c4284954469dcfe25e15abf877171d6e  gcc/config/i386/avx512vbmiintrin.h
  d268e16dae79f5a97951c6073c15f760  gcc/config/i386/avx512vbmivlintrin.h
! 66c8baba8d8fbd130adf636459242de4  gcc/config/i386/avx512vlbwintrin.h
  3ed761d84d7f85efe8900af054b34adf  gcc/config/i386/avx512vldqintrin.h
! 471f241ee9f1c35967843a23b8dcd887  gcc/config/i386/avx512vlintrin.h
  c3f87fa01dedc77d30f7751b9d1c5497  gcc/config/i386/avx512vnniintrin.h
  e37ee6d1b89cb1c19910985b2aa737e1  gcc/config/i386/avx512vnnivlintrin.h
  cf862e171533f14c8449c9977f1b344b  gcc/config/i386/avx512vp2intersectintrin.h
--- 3827,3835 ----
  1dac4b3b63df64d7731becf1987ac0d6  gcc/config/i386/avx512vbmi2vlintrin.h
  c4284954469dcfe25e15abf877171d6e  gcc/config/i386/avx512vbmiintrin.h
  d268e16dae79f5a97951c6073c15f760  gcc/config/i386/avx512vbmivlintrin.h
! d283d7ef35f4c2ce2a78b4bea2a8b69e  gcc/config/i386/avx512vlbwintrin.h
  3ed761d84d7f85efe8900af054b34adf  gcc/config/i386/avx512vldqintrin.h
! e42cab5cffa7e89c246785da35ca5b38  gcc/config/i386/avx512vlintrin.h
  c3f87fa01dedc77d30f7751b9d1c5497  gcc/config/i386/avx512vnniintrin.h
  e37ee6d1b89cb1c19910985b2aa737e1  gcc/config/i386/avx512vnnivlintrin.h
  cf862e171533f14c8449c9977f1b344b  gcc/config/i386/avx512vp2intersectintrin.h
*************** e146cc080a7a71e632b794d7fe566014  gcc/co
*** 3856,3863 ****
  a905ae6a96a437211eb7c3bee6971774  gcc/config/i386/clflushoptintrin.h
  c21b5a888da33e9d722aed1166d447bf  gcc/config/i386/clwbintrin.h
  f8c18b60f8d694d9b04cc4f5352e2c9f  gcc/config/i386/clzerointrin.h
! b38f7b52c769a7a8a9150b9492951672  gcc/config/i386/cmpccxaddintrin.h
! dea8aa711b0d85027336c0a9e9f11aa2  gcc/config/i386/constraints.md
  d58c22e340508ccef0f5f2762e78242d  gcc/config/i386/core2.md
  93a70c3283b459b6d922b7d8a54086d1  gcc/config/i386/cpuid.h
  fc6740866dfd896d6b233e6c3fe047b3  gcc/config/i386/cross-stdarg.h
--- 3857,3864 ----
  a905ae6a96a437211eb7c3bee6971774  gcc/config/i386/clflushoptintrin.h
  c21b5a888da33e9d722aed1166d447bf  gcc/config/i386/clwbintrin.h
  f8c18b60f8d694d9b04cc4f5352e2c9f  gcc/config/i386/clzerointrin.h
! 70c9cd7fc53ed22cdfc795bc9ca3fd98  gcc/config/i386/cmpccxaddintrin.h
! de0a268f0df624c90bfa2330f45d8106  gcc/config/i386/constraints.md
  d58c22e340508ccef0f5f2762e78242d  gcc/config/i386/core2.md
  93a70c3283b459b6d922b7d8a54086d1  gcc/config/i386/cpuid.h
  fc6740866dfd896d6b233e6c3fe047b3  gcc/config/i386/cross-stdarg.h
*************** b942499d27601a7aba3efdeb5a8d300b  gcc/co
*** 3877,3891 ****
  6382c293f599527a86ff907f0794f4b7  gcc/config/i386/djgpp.h
  c64ce798db81479c69da1344e38dd450  gcc/config/i386/djgpp.opt
  17255f7edc13e66cee8ce104a1a16d7e  gcc/config/i386/dragonfly.h
! bcd4f258136d7aafe51093439019d1b4  gcc/config/i386/driver-i386.cc
  0db2a1b877b9b70a4f1314795cd9fce4  gcc/config/i386/driver-mingw32.cc
  230f254705a227cf2e3e968f01d82187  gcc/config/i386/emmintrin.h
  49b2eed6267812453a577bc231736495  gcc/config/i386/enqcmdintrin.h
  fc0629522816ca6cd8f3a9dc0669fe56  gcc/config/i386/f16cintrin.h
  5ade51009e0905689bda324eb7ce5f2c  gcc/config/i386/fma4intrin.h
  c36f1bf728e19aa1f1982a3eee0ff843  gcc/config/i386/fmaintrin.h
! 7207dcaf5f541010f8939ced1feb755b  gcc/config/i386/freebsd.h
! aa4eef0a8dc27bb5ee8e7c713fd03d96  gcc/config/i386/freebsd64.h
  94adad2d2cc10d6b8a1343b58ac8c6e0  gcc/config/i386/fxsrintrin.h
  942b10e6d8feadd376d9c697fec0e971  gcc/config/i386/gas.h
  5fe43bd191553cf1fa4b80b584a64d1c  gcc/config/i386/gcc-auto-profile
--- 3878,3892 ----
  6382c293f599527a86ff907f0794f4b7  gcc/config/i386/djgpp.h
  c64ce798db81479c69da1344e38dd450  gcc/config/i386/djgpp.opt
  17255f7edc13e66cee8ce104a1a16d7e  gcc/config/i386/dragonfly.h
! 7f93d3786971078734de70088b18b040  gcc/config/i386/driver-i386.cc
  0db2a1b877b9b70a4f1314795cd9fce4  gcc/config/i386/driver-mingw32.cc
  230f254705a227cf2e3e968f01d82187  gcc/config/i386/emmintrin.h
  49b2eed6267812453a577bc231736495  gcc/config/i386/enqcmdintrin.h
  fc0629522816ca6cd8f3a9dc0669fe56  gcc/config/i386/f16cintrin.h
  5ade51009e0905689bda324eb7ce5f2c  gcc/config/i386/fma4intrin.h
  c36f1bf728e19aa1f1982a3eee0ff843  gcc/config/i386/fmaintrin.h
! e22f5625b96180293716e0f95596bad7  gcc/config/i386/freebsd.h
! 774cbf38defeb63cad62eb618348f819  gcc/config/i386/freebsd64.h
  94adad2d2cc10d6b8a1343b58ac8c6e0  gcc/config/i386/fxsrintrin.h
  942b10e6d8feadd376d9c697fec0e971  gcc/config/i386/gas.h
  5fe43bd191553cf1fa4b80b584a64d1c  gcc/config/i386/gcc-auto-profile
*************** e92e6092340e3f2f41fe23e91d749ca0  gcc/co
*** 3906,3931 ****
  c712f75327bcb8b5d026dfb3dea205df  gcc/config/i386/hresetintrin.h
  05b81cca7926b1d1ab6ed9ad1de53cf0  gcc/config/i386/i386-builtin-types.awk
  3d2082f02d6f85c1c7931b78a04b1f0e  gcc/config/i386/i386-builtin-types.def
! a8ac28839c7d3d346b1e07edee526a70  gcc/config/i386/i386-builtin.def
  5aeccbe19338a2c1a6c4bd4ee786d9a0  gcc/config/i386/i386-builtins.cc
  142e87103f036ad8c37d13ec10c7b6e1  gcc/config/i386/i386-builtins.h
! 64e4a1d3829ad46f7ad22764053e20a2  gcc/config/i386/i386-c.cc
  111cfdf2d21796a75b1dc6dad85b1e0b  gcc/config/i386/i386-d.cc
  8a2fd04b87d1c3d5e2c0f09d28bbbabb  gcc/config/i386/i386-d.h
! a9b61771dd3c34cffcdd683c471d0ef1  gcc/config/i386/i386-expand.cc
  41a8f20de760a6af6575dd59a61d9d53  gcc/config/i386/i386-expand.h
  9239e5c6dba5eb6506ce40c23c41c768  gcc/config/i386/i386-features.cc
  1e007dd2e12b7cf3a6530dd879fb3f1c  gcc/config/i386/i386-features.h
  fe11cb894ffe7ab98667ab56d2f4723f  gcc/config/i386/i386-isa.def
  879010cdeb2877b05749acd5f54492a6  gcc/config/i386/i386-modes.def
! 814e6710b30e55d4bac4485010ee980e  gcc/config/i386/i386-options.cc
  003ffbe43bb8f6a09f829ad391579ca5  gcc/config/i386/i386-options.h
  7512d54a6f733ab8b39bf9b02c1ba4db  gcc/config/i386/i386-opts.h
  3d980f6dc86b67acb7d8e5be6c08c589  gcc/config/i386/i386-passes.def
  15146e6cff34da8c1205b0df0813ccb0  gcc/config/i386/i386-protos.h
! ab5f63810d81dcffcf47900bee13930f  gcc/config/i386/i386.cc
! 82696aeca79f77fde118d691062f7df3  gcc/config/i386/i386.h
! 26a0803cd67ae2704cb1bc63aa7605ea  gcc/config/i386/i386.md
  c32251e85ab598cb51e89383639566bb  gcc/config/i386/i386.opt
  faa318618e52a0740019e9aa0764b007  gcc/config/i386/i386elf.h
  7c89dc80159b83f67c1fa47a10c88c13  gcc/config/i386/ia32intrin.h
--- 3907,3932 ----
  c712f75327bcb8b5d026dfb3dea205df  gcc/config/i386/hresetintrin.h
  05b81cca7926b1d1ab6ed9ad1de53cf0  gcc/config/i386/i386-builtin-types.awk
  3d2082f02d6f85c1c7931b78a04b1f0e  gcc/config/i386/i386-builtin-types.def
! 93b31fe5012cd4aba754534215de5799  gcc/config/i386/i386-builtin.def
  5aeccbe19338a2c1a6c4bd4ee786d9a0  gcc/config/i386/i386-builtins.cc
  142e87103f036ad8c37d13ec10c7b6e1  gcc/config/i386/i386-builtins.h
! 93a35614595edc9f907a159250600af9  gcc/config/i386/i386-c.cc
  111cfdf2d21796a75b1dc6dad85b1e0b  gcc/config/i386/i386-d.cc
  8a2fd04b87d1c3d5e2c0f09d28bbbabb  gcc/config/i386/i386-d.h
! 67e1a5ddd4239a486c722dacc7385c51  gcc/config/i386/i386-expand.cc
  41a8f20de760a6af6575dd59a61d9d53  gcc/config/i386/i386-expand.h
  9239e5c6dba5eb6506ce40c23c41c768  gcc/config/i386/i386-features.cc
  1e007dd2e12b7cf3a6530dd879fb3f1c  gcc/config/i386/i386-features.h
  fe11cb894ffe7ab98667ab56d2f4723f  gcc/config/i386/i386-isa.def
  879010cdeb2877b05749acd5f54492a6  gcc/config/i386/i386-modes.def
! ffb1b3ecba72997c3e6804714698295d  gcc/config/i386/i386-options.cc
  003ffbe43bb8f6a09f829ad391579ca5  gcc/config/i386/i386-options.h
  7512d54a6f733ab8b39bf9b02c1ba4db  gcc/config/i386/i386-opts.h
  3d980f6dc86b67acb7d8e5be6c08c589  gcc/config/i386/i386-passes.def
  15146e6cff34da8c1205b0df0813ccb0  gcc/config/i386/i386-protos.h
! 37411c56abf14704d70f5f8934f354ea  gcc/config/i386/i386.cc
! ea1b2e9630b4be0a48c861f84f8b8226  gcc/config/i386/i386.h
! 132edee19206a270c6ab9a859fa5eea8  gcc/config/i386/i386.md
  c32251e85ab598cb51e89383639566bb  gcc/config/i386/i386.opt
  faa318618e52a0740019e9aa0764b007  gcc/config/i386/i386elf.h
  7c89dc80159b83f67c1fa47a10c88c13  gcc/config/i386/ia32intrin.h
*************** fdb61469c12e56b4016a6a403f4457f5  gcc/co
*** 3971,3977 ****
  2d2286f829251a7b7b024d0df060dd93  gcc/config/i386/popcntintrin.h
  290846a24853c7f93564e21cacbfb24d  gcc/config/i386/ppro.md
  cfb676e27f056a72bda51c6a87241427  gcc/config/i386/predicates.md
! 09399504e7c23318087f370cc84ad067  gcc/config/i386/prfchiintrin.h
  5d19ef9f68d49944d62aa30eccf5bca5  gcc/config/i386/prfchwintrin.h
  d4285d0c922c64b0040fab9420989bf5  gcc/config/i386/raointintrin.h
  ccb73dbea8f44f1a08e8f88b641b0109  gcc/config/i386/rdos.h
--- 3972,3978 ----
  2d2286f829251a7b7b024d0df060dd93  gcc/config/i386/popcntintrin.h
  290846a24853c7f93564e21cacbfb24d  gcc/config/i386/ppro.md
  cfb676e27f056a72bda51c6a87241427  gcc/config/i386/predicates.md
! b69945072c28579cce54a48b2d0ca062  gcc/config/i386/prfchiintrin.h
  5d19ef9f68d49944d62aa30eccf5bca5  gcc/config/i386/prfchwintrin.h
  d4285d0c922c64b0040fab9420989bf5  gcc/config/i386/raointintrin.h
  ccb73dbea8f44f1a08e8f88b641b0109  gcc/config/i386/rdos.h
*************** f71c2e5572561a74ea464ac5e46b48e9  gcc/co
*** 3985,3994 ****
  9ac8a2404b744a4725303bcaa6eb18ee  gcc/config/i386/slm.md
  78848cd4caaf8dc8240bd6c097488abe  gcc/config/i386/smmintrin.h
  f636ec0022d2efe9257b23fc816e2b32  gcc/config/i386/sol2.h
! 6f8511ce7e8589402124fe7c27706f97  gcc/config/i386/sse.md
  d5e445dfcfe76b4409b1d6a2115663fc  gcc/config/i386/ssemath.h
  0547e7c6a1807f6096d1ef483c6f9c13  gcc/config/i386/stringop.def
! f7ae3b5e53998d952d6de4ec0fa87479  gcc/config/i386/subst.md
  945c6888d50080573fad6f6c8969b67f  gcc/config/i386/sym-mingw32.cc
  5927dc15e6d5c74d087d26beb013139d  gcc/config/i386/sync.md
  2d4c630f2726c23bf8ece1af1e9f5655  gcc/config/i386/sysv4.h
--- 3986,3995 ----
  9ac8a2404b744a4725303bcaa6eb18ee  gcc/config/i386/slm.md
  78848cd4caaf8dc8240bd6c097488abe  gcc/config/i386/smmintrin.h
  f636ec0022d2efe9257b23fc816e2b32  gcc/config/i386/sol2.h
! f240cd1fbe1582422e3bbba0d220cb98  gcc/config/i386/sse.md
  d5e445dfcfe76b4409b1d6a2115663fc  gcc/config/i386/ssemath.h
  0547e7c6a1807f6096d1ef483c6f9c13  gcc/config/i386/stringop.def
! 5e04bf034cc99782faa1edf2d7d26383  gcc/config/i386/subst.md
  945c6888d50080573fad6f6c8969b67f  gcc/config/i386/sym-mingw32.cc
  5927dc15e6d5c74d087d26beb013139d  gcc/config/i386/sync.md
  2d4c630f2726c23bf8ece1af1e9f5655  gcc/config/i386/sysv4.h
*************** b4cde95b709fc93c90bf4d6b3edc7fd0  gcc/co
*** 4036,4047 ****
  8c1a4c75367c242e4240f63182298102  gcc/config/i386/x-mingw32
  382a0dd1703f45cfe6f1a5d3db496a84  gcc/config/i386/x-mingw32-utf8
  34e124411c74493d2987ca67a64213cd  gcc/config/i386/x86-64.h
! 483ae34cdadb3784655df5566b98bac9  gcc/config/i386/x86-tune-costs.h
  ceeba8f332c332a7db03815dd3144457  gcc/config/i386/x86-tune-sched-atom.cc
  cf77688a79e9eb5530fb5a30f8ead444  gcc/config/i386/x86-tune-sched-bd.cc
  30bef3dbd64dfc29211a442df4597f25  gcc/config/i386/x86-tune-sched-core.cc
! 70b97860072bcc5c13ce7ffe8d7c3a7d  gcc/config/i386/x86-tune-sched.cc
! 241c7859db415e40f23028d633f3d78e  gcc/config/i386/x86-tune.def
  bd48650a48294465d345812ad5e1b4e8  gcc/config/i386/x86gprintrin.h
  9bbe408d1dc406ddf72aa175ea24a4ab  gcc/config/i386/x86intrin.h
  8262b37347a6f221be8fda380c23e595  gcc/config/i386/xm-cygwin.h
--- 4037,4048 ----
  8c1a4c75367c242e4240f63182298102  gcc/config/i386/x-mingw32
  382a0dd1703f45cfe6f1a5d3db496a84  gcc/config/i386/x-mingw32-utf8
  34e124411c74493d2987ca67a64213cd  gcc/config/i386/x86-64.h
! 31bc0c5173500243e8ffae5241ea0be2  gcc/config/i386/x86-tune-costs.h
  ceeba8f332c332a7db03815dd3144457  gcc/config/i386/x86-tune-sched-atom.cc
  cf77688a79e9eb5530fb5a30f8ead444  gcc/config/i386/x86-tune-sched-bd.cc
  30bef3dbd64dfc29211a442df4597f25  gcc/config/i386/x86-tune-sched-core.cc
! 45245aff4235c8461409871e7e5070af  gcc/config/i386/x86-tune-sched.cc
! 5873f6de94f7f02a908186234d8a56fb  gcc/config/i386/x86-tune.def
  bd48650a48294465d345812ad5e1b4e8  gcc/config/i386/x86gprintrin.h
  9bbe408d1dc406ddf72aa175ea24a4ab  gcc/config/i386/x86intrin.h
  8262b37347a6f221be8fda380c23e595  gcc/config/i386/xm-cygwin.h
*************** a215229c735d32f3d01211350fd1f318  gcc/co
*** 4054,4061 ****
  f1f5f84a8dd49e6d726f7e2c20ed8e79  gcc/config/i386/xsaveoptintrin.h
  6275f6421011176a82b480067cd8773d  gcc/config/i386/xsavesintrin.h
  0ee718569f13b7df03c4919999566ddb  gcc/config/i386/xtestintrin.h
  3df7133920a3226cf278a7da93340bdd  gcc/config/i386/znver.md
- 6f6d5b0830a741f384328da33b52fdc0  gcc/config/i386/znver4.md
  99ac9eca82d2eb34419a7f546dbdf0a4  gcc/config/ia64/constraints.md
  48401aec42c82f35c84ac47cd01d83f6  gcc/config/ia64/div.md
  18fce4fb1a588e94b444c4fcd4f14157  gcc/config/ia64/elf.h
--- 4055,4062 ----
  f1f5f84a8dd49e6d726f7e2c20ed8e79  gcc/config/i386/xsaveoptintrin.h
  6275f6421011176a82b480067cd8773d  gcc/config/i386/xsavesintrin.h
  0ee718569f13b7df03c4919999566ddb  gcc/config/i386/xtestintrin.h
+ 81aee71a26429b0fb3b36474068b2699  gcc/config/i386/zn4zn5.md
  3df7133920a3226cf278a7da93340bdd  gcc/config/i386/znver.md
  99ac9eca82d2eb34419a7f546dbdf0a4  gcc/config/ia64/constraints.md
  48401aec42c82f35c84ac47cd01d83f6  gcc/config/ia64/div.md
  18fce4fb1a588e94b444c4fcd4f14157  gcc/config/ia64/elf.h
*************** a12887e2d76caaa13e14ecd486af32d8  gcc/co
*** 4139,4146 ****
  0a2ea88aa9d8b16199a929903fe1420e  gcc/config/loongarch/loongarch-protos.h
  b7e7ae8ebef609fa5b3638fc6d8da01c  gcc/config/loongarch/loongarch-str.h
  1d43515673828076071c491e3cdd6f1f  gcc/config/loongarch/loongarch-tune.h
! 328984f3a53ba90a960534f688dc4ab4  gcc/config/loongarch/loongarch.cc
! cb6b1ac932dc193c50167e9e3bca4109  gcc/config/loongarch/loongarch.h
  1092d0af6bbdeeebaf276d6b403a51fc  gcc/config/loongarch/loongarch.md
  a9bcbd6c03a77e0c5c0b70d652aa908e  gcc/config/loongarch/loongarch.opt
  2f8826252720e1086662bde87ecbe35f  gcc/config/loongarch/predicates.md
--- 4140,4147 ----
  0a2ea88aa9d8b16199a929903fe1420e  gcc/config/loongarch/loongarch-protos.h
  b7e7ae8ebef609fa5b3638fc6d8da01c  gcc/config/loongarch/loongarch-str.h
  1d43515673828076071c491e3cdd6f1f  gcc/config/loongarch/loongarch-tune.h
! 0604e558b65c0a185caf86ec71780386  gcc/config/loongarch/loongarch.cc
! a1b94a398a7e906ba7b8e6f3bc0e7839  gcc/config/loongarch/loongarch.h
  1092d0af6bbdeeebaf276d6b403a51fc  gcc/config/loongarch/loongarch.md
  a9bcbd6c03a77e0c5c0b70d652aa908e  gcc/config/loongarch/loongarch.opt
  2f8826252720e1086662bde87ecbe35f  gcc/config/loongarch/predicates.md
*************** fbe407e03794a9ee607663ce7de6eadb  gcc/co
*** 4293,4299 ****
  b6ef595c9b75af5e5679a8799c944443  gcc/config/mips/mips-protos.h
  32ba594f8a210398a1e585dfcc8b1d8d  gcc/config/mips/mips-ps-3d.md
  e0f0f7f5cd3f66adff43ada64fd352e1  gcc/config/mips/mips-tables.opt
! 9afd220cd19c25a7c28103340e9368d5  gcc/config/mips/mips.cc
  9e3bffdb2b33a326178eddd2138674d0  gcc/config/mips/mips.h
  fd1a1985d2fa9e92b6867215ad4b9127  gcc/config/mips/mips.md
  3b233a9733cc91ecbf6950b871004528  gcc/config/mips/mips.opt
--- 4294,4300 ----
  b6ef595c9b75af5e5679a8799c944443  gcc/config/mips/mips-protos.h
  32ba594f8a210398a1e585dfcc8b1d8d  gcc/config/mips/mips-ps-3d.md
  e0f0f7f5cd3f66adff43ada64fd352e1  gcc/config/mips/mips-tables.opt
! 36265b8f606076aae7dc7221733043d1  gcc/config/mips/mips.cc
  9e3bffdb2b33a326178eddd2138674d0  gcc/config/mips/mips.h
  fd1a1985d2fa9e92b6867215ad4b9127  gcc/config/mips/mips.md
  3b233a9733cc91ecbf6950b871004528  gcc/config/mips/mips.opt
*************** fb5e4ae6b9ac27e8a5d895927e338ac3  gcc/co
*** 4470,4476 ****
  5715146529b157ba9fe83d41ae7fce48  gcc/config/nvptx/nvptx-opts.h
  150dfbfb507d4c608d4d20b126b5fdce  gcc/config/nvptx/nvptx-protos.h
  eb2b7fd7d95a42a6075a41141051d9bc  gcc/config/nvptx/nvptx-sm.def
! 66a953260e5d8e62a7327f72e780c96d  gcc/config/nvptx/nvptx.cc
  7f391f72b033867c9d904eb6c94585b1  gcc/config/nvptx/nvptx.h
  765b71da81288f74bad49799b07e8378  gcc/config/nvptx/nvptx.md
  1a6cb783e21267f9ea1b9e52f864a575  gcc/config/nvptx/nvptx.opt
--- 4471,4477 ----
  5715146529b157ba9fe83d41ae7fce48  gcc/config/nvptx/nvptx-opts.h
  150dfbfb507d4c608d4d20b126b5fdce  gcc/config/nvptx/nvptx-protos.h
  eb2b7fd7d95a42a6075a41141051d9bc  gcc/config/nvptx/nvptx-sm.def
! 86d542b835812732c82d3d2833949230  gcc/config/nvptx/nvptx.cc
  7f391f72b033867c9d904eb6c94585b1  gcc/config/nvptx/nvptx.h
  765b71da81288f74bad49799b07e8378  gcc/config/nvptx/nvptx.md
  1a6cb783e21267f9ea1b9e52f864a575  gcc/config/nvptx/nvptx.opt
*************** b30a2b89233d310f6be15cb46069ae60  gcc/co
*** 4510,4529 ****
  4ad32e7623de40f1c03d99c01b056f13  gcc/config/pa/pa-hpux1111.opt
  8962dc7a9fa03b766a4606f2513b8386  gcc/config/pa/pa-hpux1131.h
  6a37880bed7f96557cb92d4090a85c6c  gcc/config/pa/pa-hpux1131.opt
! 58bc928a5f7db9b5a8b975bee98b7904  gcc/config/pa/pa-linux.h
  0f2572c80f183ff28125bbb6375e50cc  gcc/config/pa/pa-modes.def
  71596c89e8b56d028c1753b980794531  gcc/config/pa/pa-netbsd.h
  d6ed3ea0b084fce25b744c74274588a5  gcc/config/pa/pa-openbsd.h
  e90c5d0d138f683915e32d52840e42cc  gcc/config/pa/pa-opts.h
  6d7f17931666ea98e5793e2f41c93ac3  gcc/config/pa/pa-protos.h
! 9dff82ea6c9a6ed17981cec36379b32e  gcc/config/pa/pa.cc
! 948a0f04a993401c0b8969f0c9c708e1  gcc/config/pa/pa.h
! c55a80f89d2c3f11be94664513a5d702  gcc/config/pa/pa.md
  20ba6e16f7d2cf5e5eb89348793f2610  gcc/config/pa/pa.opt
  5268cfc61e7af09cd3b9ba6d2fa3faff  gcc/config/pa/pa32-linux.h
  c14312e902452e23e82cf7aea2550044  gcc/config/pa/pa32-netbsd.h
  caa0cd2212d43533afb7a45d04b90d37  gcc/config/pa/pa32-openbsd.h
! c7291c4ab3d77b3f24e59ddcdee9656a  gcc/config/pa/pa32-regs.h
  d0d96945cd58ca17fa448932b5e659a6  gcc/config/pa/pa64-hpux.h
  718dfdd18a2fdc17a1b3b0ab54f882dc  gcc/config/pa/pa64-hpux.opt
  a3aabcc63a7cb1d7d4fc907b4a3cc6ed  gcc/config/pa/pa64-linux.h
--- 4511,4530 ----
  4ad32e7623de40f1c03d99c01b056f13  gcc/config/pa/pa-hpux1111.opt
  8962dc7a9fa03b766a4606f2513b8386  gcc/config/pa/pa-hpux1131.h
  6a37880bed7f96557cb92d4090a85c6c  gcc/config/pa/pa-hpux1131.opt
! c8af08e2d69d3942ed3fa6f40a02be9b  gcc/config/pa/pa-linux.h
  0f2572c80f183ff28125bbb6375e50cc  gcc/config/pa/pa-modes.def
  71596c89e8b56d028c1753b980794531  gcc/config/pa/pa-netbsd.h
  d6ed3ea0b084fce25b744c74274588a5  gcc/config/pa/pa-openbsd.h
  e90c5d0d138f683915e32d52840e42cc  gcc/config/pa/pa-opts.h
  6d7f17931666ea98e5793e2f41c93ac3  gcc/config/pa/pa-protos.h
! 6a43f63b7f89c5ed6bcfccf2b6f36676  gcc/config/pa/pa.cc
! 765c3a4331887e13e7e4d4df4747b59b  gcc/config/pa/pa.h
! f875aa50d58ae06c01348a46110d9c45  gcc/config/pa/pa.md
  20ba6e16f7d2cf5e5eb89348793f2610  gcc/config/pa/pa.opt
  5268cfc61e7af09cd3b9ba6d2fa3faff  gcc/config/pa/pa32-linux.h
  c14312e902452e23e82cf7aea2550044  gcc/config/pa/pa32-netbsd.h
  caa0cd2212d43533afb7a45d04b90d37  gcc/config/pa/pa32-openbsd.h
! d927b3bea328b7a5794307e8820c2f46  gcc/config/pa/pa32-regs.h
  d0d96945cd58ca17fa448932b5e659a6  gcc/config/pa/pa64-hpux.h
  718dfdd18a2fdc17a1b3b0ab54f882dc  gcc/config/pa/pa64-hpux.opt
  a3aabcc63a7cb1d7d4fc907b4a3cc6ed  gcc/config/pa/pa64-linux.h
*************** b67ceabccf744a397b2520b8ea812b71  gcc/co
*** 4557,4567 ****
  0982d9d6c6c40fbf151b170da5698f08  gcc/config/pru/pru.opt
  a958a54f1eb9a02a649cc3a370a76be9  gcc/config/pru/t-pru
  e9af861b5837e640380b2d5ffc107d7d  gcc/config/riscv/arch-canonicalize
! d7016c15adb54a488bc10f953e91d2fd  gcc/config/riscv/bitmanip.md
  a4737c69a5d0ed9c26fb7664bbbf4965  gcc/config/riscv/constraints.md
  9ab80786137b8674a48e3f8eef8e592b  gcc/config/riscv/crypto.md
  65832be0e854802d491839f721961187  gcc/config/riscv/elf.h
! 40f4593bb42cb3cd1433436d3a14d3cb  gcc/config/riscv/freebsd.h
  506caa4941639a4cac9b4ad34c5a2a60  gcc/config/riscv/generic.md
  13567b8f9fc115dd93de3793a5667084  gcc/config/riscv/genrvv-type-indexer.cc
  3a424027ba3a05cd351ad2979a41e368  gcc/config/riscv/iterators.md
--- 4558,4568 ----
  0982d9d6c6c40fbf151b170da5698f08  gcc/config/pru/pru.opt
  a958a54f1eb9a02a649cc3a370a76be9  gcc/config/pru/t-pru
  e9af861b5837e640380b2d5ffc107d7d  gcc/config/riscv/arch-canonicalize
! a94fa71523d1a15874e012a792bedce8  gcc/config/riscv/bitmanip.md
  a4737c69a5d0ed9c26fb7664bbbf4965  gcc/config/riscv/constraints.md
  9ab80786137b8674a48e3f8eef8e592b  gcc/config/riscv/crypto.md
  65832be0e854802d491839f721961187  gcc/config/riscv/elf.h
! 6f114cc74171f69194d938a7af6e6157  gcc/config/riscv/freebsd.h
  506caa4941639a4cac9b4ad34c5a2a60  gcc/config/riscv/generic.md
  13567b8f9fc115dd93de3793a5667084  gcc/config/riscv/genrvv-type-indexer.cc
  3a424027ba3a05cd351ad2979a41e368  gcc/config/riscv/iterators.md
*************** dea62e3acd642311d5bd0e7a98df2b17  gcc/co
*** 4600,4606 ****
  7d26c26ff34ea77927e376f7a4dd6520  gcc/config/riscv/riscv-vsetvl.cc
  8fe843c7d03cb46cc233ba5d894d10d3  gcc/config/riscv/riscv-vsetvl.def
  81d14fa5df5f77f7fa3acbdd2532da0e  gcc/config/riscv/riscv-vsetvl.h
! 8be7dcb8180c65df22d9c75dfaf8c753  gcc/config/riscv/riscv.cc
  2b3c4e370e43ce97c06af8380c289dcc  gcc/config/riscv/riscv.h
  5ab14313554ab48f53e905909801dc40  gcc/config/riscv/riscv.md
  e8b00efbf2006bd1d55add7e5a1658fd  gcc/config/riscv/riscv.opt
--- 4601,4607 ----
  7d26c26ff34ea77927e376f7a4dd6520  gcc/config/riscv/riscv-vsetvl.cc
  8fe843c7d03cb46cc233ba5d894d10d3  gcc/config/riscv/riscv-vsetvl.def
  81d14fa5df5f77f7fa3acbdd2532da0e  gcc/config/riscv/riscv-vsetvl.h
! 1b474b1f3e5b36b9ff8a5bc2df08ee4c  gcc/config/riscv/riscv.cc
  2b3c4e370e43ce97c06af8380c289dcc  gcc/config/riscv/riscv.h
  5ab14313554ab48f53e905909801dc40  gcc/config/riscv/riscv.md
  e8b00efbf2006bd1d55add7e5a1658fd  gcc/config/riscv/riscv.opt
*************** a48da5f2c0eca621c8be9a9ac2b0d405  gcc/co
*** 4615,4621 ****
  b46131fe425be428d4d66c8f653f3d13  gcc/config/riscv/t-rtems
  97a182737ed075d29be4ab1e848de420  gcc/config/riscv/t-withmultilib
  0478f4e79601d91fb8ad8f210b304a7b  gcc/config/riscv/t-withmultilib-generator
! 3c60f3bce5f62f4325c736380a2b43f4  gcc/config/riscv/thead.cc
  3a60f8d771ec97e366fd23d19b081ea5  gcc/config/riscv/thead.md
  a73a2533a40d109ce2f50ab199b77fa6  gcc/config/riscv/vector-iterators.md
  54f69fc9d9408960f28c18b405185f87  gcc/config/riscv/vector.md
--- 4616,4622 ----
  b46131fe425be428d4d66c8f653f3d13  gcc/config/riscv/t-rtems
  97a182737ed075d29be4ab1e848de420  gcc/config/riscv/t-withmultilib
  0478f4e79601d91fb8ad8f210b304a7b  gcc/config/riscv/t-withmultilib-generator
! c35c1a17a29868c51f48abcd12f662c2  gcc/config/riscv/thead.cc
  3a60f8d771ec97e366fd23d19b081ea5  gcc/config/riscv/thead.md
  a73a2533a40d109ce2f50ab199b77fa6  gcc/config/riscv/vector-iterators.md
  54f69fc9d9408960f28c18b405185f87  gcc/config/riscv/vector.md
*************** b4ae894c7649abb1dc14070d9797b00d  gcc/co
*** 4652,4659 ****
  43cf8f7978a5d583e2342acb04cc595b  gcc/config/rs6000/aix72.h
  a87be9ee98a714eeeb92bad73f32f88f  gcc/config/rs6000/aix73.h
  02b877a569032dd21efb85d41dac9c4f  gcc/config/rs6000/altivec.h
! 7d89e7cdfded537fa96f3699774354de  gcc/config/rs6000/altivec.md
! 45bfb40325f39a90f2e32f88f229cffb  gcc/config/rs6000/amo.h
  656fb98293d82a76779be75ae8207857  gcc/config/rs6000/biarch64.h
  8eb9a873478c1238a6d5921b1c5ed77e  gcc/config/rs6000/bmi2intrin.h
  6ed5b6dd2a551b41cb3f2724d04523c3  gcc/config/rs6000/bmiintrin.h
--- 4653,4660 ----
  43cf8f7978a5d583e2342acb04cc595b  gcc/config/rs6000/aix72.h
  a87be9ee98a714eeeb92bad73f32f88f  gcc/config/rs6000/aix73.h
  02b877a569032dd21efb85d41dac9c4f  gcc/config/rs6000/altivec.h
! 071400944dc417db4ed74d3288710a61  gcc/config/rs6000/altivec.md
! 347774e3882e15d0157b143fa1f2df42  gcc/config/rs6000/amo.h
  656fb98293d82a76779be75ae8207857  gcc/config/rs6000/biarch64.h
  8eb9a873478c1238a6d5921b1c5ed77e  gcc/config/rs6000/bmi2intrin.h
  6ed5b6dd2a551b41cb3f2724d04523c3  gcc/config/rs6000/bmiintrin.h
*************** d4d352a74b5d6500c8c07ab9833cf907  gcc/co
*** 4679,4685 ****
  2722739019574b47b5d7c58f3abe9bac  gcc/config/rs6000/eabisim.h
  5eafe47b399ad9ef57b60982bfe3fb20  gcc/config/rs6000/emmintrin.h
  743766fc14e2ad8a4375ae5d16f8c423  gcc/config/rs6000/freebsd.h
! 77f0bc4dfe9c32d6f33610a4361632bf  gcc/config/rs6000/freebsd64.h
  51f772dba999b6c47e9afb00d4182755  gcc/config/rs6000/fusion.md
  ed1d3dca670d137022e574a142dba764  gcc/config/rs6000/genfusion.pl
  a112654f6df4b75096ef3cfc34745eef  gcc/config/rs6000/genopt.sh
--- 4680,4686 ----
  2722739019574b47b5d7c58f3abe9bac  gcc/config/rs6000/eabisim.h
  5eafe47b399ad9ef57b60982bfe3fb20  gcc/config/rs6000/emmintrin.h
  743766fc14e2ad8a4375ae5d16f8c423  gcc/config/rs6000/freebsd.h
! 013e3311669572e4855d422d214aeb75  gcc/config/rs6000/freebsd64.h
  51f772dba999b6c47e9afb00d4182755  gcc/config/rs6000/fusion.md
  ed1d3dca670d137022e574a142dba764  gcc/config/rs6000/genfusion.pl
  a112654f6df4b75096ef3cfc34745eef  gcc/config/rs6000/genopt.sh
*************** d1baa29d9961c7dc84928daba90fcb81  gcc/co
*** 4717,4746 ****
  d547b88b77b2e82d7e0a856f08b310ac  gcc/config/rs6000/predicates.md
  e5a56c67ccfa1b82910448cc8537ca90  gcc/config/rs6000/rbtree.cc
  41cca449520459ae09c87c093327fa5d  gcc/config/rs6000/rbtree.h
! 4ad3ad4328c79ff753a9190b682b49fb  gcc/config/rs6000/rs6000-builtin.cc
! ac53034bd09fb01f93ea842cf5c909fc  gcc/config/rs6000/rs6000-builtins.def
! ea881c70575ca4e61f23c4c22754ecba  gcc/config/rs6000/rs6000-c.cc
  694d76219041e35b535b99b2ebc1e647  gcc/config/rs6000/rs6000-call.cc
  67d3a89adef2cdc9c8320ff83e83b63d  gcc/config/rs6000/rs6000-cpus.def
  c4bd99f21aa66eed69bd520b225485ef  gcc/config/rs6000/rs6000-d.cc
  9ec1220497ad19253e259bcf72531180  gcc/config/rs6000/rs6000-d.h
! e39af002491bc8a962f6b2f0cc7304de  gcc/config/rs6000/rs6000-gen-builtins.cc
  5f2ed696da94a5a7ce06f115eaf05ef1  gcc/config/rs6000/rs6000-internal.h
  5c2bdb9dbbeef816761ed742a138a457  gcc/config/rs6000/rs6000-linux.cc
! 3ac8202f4574b740fad8eb70f4a064bc  gcc/config/rs6000/rs6000-logue.cc
  65280da8a93ee3b7561bfa95c73e5627  gcc/config/rs6000/rs6000-modes.def
  50658fd1a187f0dea15f89e04aeabd41  gcc/config/rs6000/rs6000-modes.h
  716db8b1d7952658da5eafaef58408db  gcc/config/rs6000/rs6000-opts.h
  950b77a5c94e9ba599bbc208ee84477b  gcc/config/rs6000/rs6000-overload.def
! c153115d2136d49f3f4b6f7477797041  gcc/config/rs6000/rs6000-p8swap.cc
  63dc1084063d0b0e7ee538d3941b6990  gcc/config/rs6000/rs6000-passes.def
  71cb7581d344fb01762cdd080bd833a5  gcc/config/rs6000/rs6000-pcrel-opt.cc
  1d69f9a2848499db58524c55c1803b51  gcc/config/rs6000/rs6000-protos.h
  df23a2df7c06e75bd39c82094b45b9b1  gcc/config/rs6000/rs6000-string.cc
  e6df0fb2cf41aa438e44a0a400ced1a4  gcc/config/rs6000/rs6000-tables.opt
! 345b02bdbfb1f1f6a24f57474b71f6e1  gcc/config/rs6000/rs6000.cc
! a7446c77f0bab5d43d72b7335e65868f  gcc/config/rs6000/rs6000.h
! 6989bcd197d1e8f8524dd7ef318ac43d  gcc/config/rs6000/rs6000.md
  1991c9d8619e7b44de464dadd1d07778  gcc/config/rs6000/rs6000.opt
  1f85593465476dff8f1a05954653d962  gcc/config/rs6000/rs64.md
  ce0d432b896bc7b4e10beccd1ffcdff4  gcc/config/rs6000/rtems.h
--- 4718,4747 ----
  d547b88b77b2e82d7e0a856f08b310ac  gcc/config/rs6000/predicates.md
  e5a56c67ccfa1b82910448cc8537ca90  gcc/config/rs6000/rbtree.cc
  41cca449520459ae09c87c093327fa5d  gcc/config/rs6000/rbtree.h
! 1ad7cf325793904125729328be21d327  gcc/config/rs6000/rs6000-builtin.cc
! 049a225e0000622ed349974c35113a18  gcc/config/rs6000/rs6000-builtins.def
! 04a7e926bd7a7996b82cd7d20bdd9722  gcc/config/rs6000/rs6000-c.cc
  694d76219041e35b535b99b2ebc1e647  gcc/config/rs6000/rs6000-call.cc
  67d3a89adef2cdc9c8320ff83e83b63d  gcc/config/rs6000/rs6000-cpus.def
  c4bd99f21aa66eed69bd520b225485ef  gcc/config/rs6000/rs6000-d.cc
  9ec1220497ad19253e259bcf72531180  gcc/config/rs6000/rs6000-d.h
! 40723a2533db3c84f0ee9dae4c756997  gcc/config/rs6000/rs6000-gen-builtins.cc
  5f2ed696da94a5a7ce06f115eaf05ef1  gcc/config/rs6000/rs6000-internal.h
  5c2bdb9dbbeef816761ed742a138a457  gcc/config/rs6000/rs6000-linux.cc
! fbc51148665e231fceeba5bbf0ceda8d  gcc/config/rs6000/rs6000-logue.cc
  65280da8a93ee3b7561bfa95c73e5627  gcc/config/rs6000/rs6000-modes.def
  50658fd1a187f0dea15f89e04aeabd41  gcc/config/rs6000/rs6000-modes.h
  716db8b1d7952658da5eafaef58408db  gcc/config/rs6000/rs6000-opts.h
  950b77a5c94e9ba599bbc208ee84477b  gcc/config/rs6000/rs6000-overload.def
! 5deed1f87a15d5cefdf23412f21c81d7  gcc/config/rs6000/rs6000-p8swap.cc
  63dc1084063d0b0e7ee538d3941b6990  gcc/config/rs6000/rs6000-passes.def
  71cb7581d344fb01762cdd080bd833a5  gcc/config/rs6000/rs6000-pcrel-opt.cc
  1d69f9a2848499db58524c55c1803b51  gcc/config/rs6000/rs6000-protos.h
  df23a2df7c06e75bd39c82094b45b9b1  gcc/config/rs6000/rs6000-string.cc
  e6df0fb2cf41aa438e44a0a400ced1a4  gcc/config/rs6000/rs6000-tables.opt
! 153e0a017cd8f973643794b63f4eeff0  gcc/config/rs6000/rs6000.cc
! 4b0d6e1befc4e76411b63383529aecd4  gcc/config/rs6000/rs6000.h
! 2872c612e8d0a50e8b2d3218d4e4e8c7  gcc/config/rs6000/rs6000.md
  1991c9d8619e7b44de464dadd1d07778  gcc/config/rs6000/rs6000.opt
  1f85593465476dff8f1a05954653d962  gcc/config/rs6000/rs64.md
  ce0d432b896bc7b4e10beccd1ffcdff4  gcc/config/rs6000/rtems.h
*************** fcfeeef0441253402f37264d272c84b5  gcc/co
*** 4749,4755 ****
  fa89ac38426979c76ffce6119b4b95e2  gcc/config/rs6000/smmintrin.h
  31c2160e56942951076f3d875a3d3ef3  gcc/config/rs6000/spu2vmx.h
  9d06d3f95b630c8f4ed3f6ef3c422dbc  gcc/config/rs6000/sync.md
! 43d2bb4bf090fd69c53d59dabb3d518a  gcc/config/rs6000/sysv4.h
  229078c9392d0c561108aa65b0d094af  gcc/config/rs6000/sysv4.opt
  2854da1fb5cd3321b88f52080fd2ca2f  gcc/config/rs6000/sysv4le.h
  efe8102b960925ab0905d8f0dcb1c90a  gcc/config/rs6000/t-aix52
--- 4750,4756 ----
  fa89ac38426979c76ffce6119b4b95e2  gcc/config/rs6000/smmintrin.h
  31c2160e56942951076f3d875a3d3ef3  gcc/config/rs6000/spu2vmx.h
  9d06d3f95b630c8f4ed3f6ef3c422dbc  gcc/config/rs6000/sync.md
! 45bc2a86df853cba62a98ff10b29c6ec  gcc/config/rs6000/sysv4.h
  229078c9392d0c561108aa65b0d094af  gcc/config/rs6000/sysv4.opt
  2854da1fb5cd3321b88f52080fd2ca2f  gcc/config/rs6000/sysv4le.h
  efe8102b960925ab0905d8f0dcb1c90a  gcc/config/rs6000/t-aix52
*************** f11925c88524d2fd457bf77944da1302  gcc/co
*** 4778,4784 ****
  11283c3d497b8f9e14d0f7b2e6c767e9  gcc/config/rs6000/tmmintrin.h
  8a427618716df54fe24964916961793c  gcc/config/rs6000/vec_types.h
  fc0103d6513257aadfcac62f4c7d98c3  gcc/config/rs6000/vector.md
! 727798df6556562e61de3e4d025c3125  gcc/config/rs6000/vsx.md
  4d40423d832e238fa189465ab2fed898  gcc/config/rs6000/vxworks.h
  71931e4a1a4bd00dded5b5ed4292e9d4  gcc/config/rs6000/vxworksae.h
  cf7960e5b95d3ca2732d3e96e5f3c80f  gcc/config/rs6000/vxworksmils.h
--- 4779,4785 ----
  11283c3d497b8f9e14d0f7b2e6c767e9  gcc/config/rs6000/tmmintrin.h
  8a427618716df54fe24964916961793c  gcc/config/rs6000/vec_types.h
  fc0103d6513257aadfcac62f4c7d98c3  gcc/config/rs6000/vector.md
! d22cb6afe8b185ebe50679d31a6f240a  gcc/config/rs6000/vsx.md
  4d40423d832e238fa189465ab2fed898  gcc/config/rs6000/vxworks.h
  71931e4a1a4bd00dded5b5ed4292e9d4  gcc/config/rs6000/vxworksae.h
  cf7960e5b95d3ca2732d3e96e5f3c80f  gcc/config/rs6000/vxworksmils.h
*************** b28ca95b8b556053aacce35b8d758109  gcc/co
*** 4813,4819 ****
  40fdb274e3a83ba9b3e9863d96423346  gcc/config/s390/2827.md
  56a15f0fa3bb1bb72f16a3cad4140b37  gcc/config/s390/2964.md
  57b1168c5b2333d9d70bd25830396346  gcc/config/s390/3906.md
! e2be7628f834ca0ebb5138ed553ac27d  gcc/config/s390/3931.md
  ab45ba53c0d3a1f3eba1cb6c17534ae2  gcc/config/s390/8561.md
  3a30ed5d6754bacf6acbc336aa3d5532  gcc/config/s390/constraints.md
  48f3989195522515e2c2f477ee1fc0b2  gcc/config/s390/driver-native.cc
--- 4814,4820 ----
  40fdb274e3a83ba9b3e9863d96423346  gcc/config/s390/2827.md
  56a15f0fa3bb1bb72f16a3cad4140b37  gcc/config/s390/2964.md
  57b1168c5b2333d9d70bd25830396346  gcc/config/s390/3906.md
! d0e725975f469ca692abecc316b0bb41  gcc/config/s390/3931.md
  ab45ba53c0d3a1f3eba1cb6c17534ae2  gcc/config/s390/8561.md
  3a30ed5d6754bacf6acbc336aa3d5532  gcc/config/s390/constraints.md
  48f3989195522515e2c2f477ee1fc0b2  gcc/config/s390/driver-native.cc
*************** bc0f35f11df98a3ea8154afd95aa8d0d  gcc/co
*** 4824,4839 ****
  f4fded4219d7abeba4d1752b63a47c1b  gcc/config/s390/s390-builtin-types.def
  9766dc05b49056b74fe8e10a9be25aaa  gcc/config/s390/s390-builtins.def
  e274089c979fe8cca36a358523639d7f  gcc/config/s390/s390-builtins.h
! d05bbbfa628a4e2a7b8b8b1c04d39657  gcc/config/s390/s390-c.cc
  ed576fb9a2ba561b17ab61f2a9bfe17f  gcc/config/s390/s390-d.cc
  445c8dfdbd431a0ac7b33f1c659bd733  gcc/config/s390/s390-d.h
  55bd22b1e6a549132e0c515ae9044df9  gcc/config/s390/s390-modes.def
  c7d2c6e9b07c780b3b02da4f5165316e  gcc/config/s390/s390-opts.h
  5871932ed4c83ad11e5593250b1e04a4  gcc/config/s390/s390-passes.def
! 55737d7f8c38ddd5e7b5430d910e0ed6  gcc/config/s390/s390-protos.h
! ba3493b8c659a51abf99f21a3aff1c12  gcc/config/s390/s390.cc
  0889a37d3bd6fd89b5ac6ae2d35ecee4  gcc/config/s390/s390.h
! 0f170902018152359f841ba28cd95c0d  gcc/config/s390/s390.md
  7eeb85e77191dec9449c41ad7680f212  gcc/config/s390/s390.opt
  f38f665269ada42e34f30f19b3fe7040  gcc/config/s390/s390intrin.h
  eae55aa734af7d9845853bc4a69f29d5  gcc/config/s390/s390x.h
--- 4825,4840 ----
  f4fded4219d7abeba4d1752b63a47c1b  gcc/config/s390/s390-builtin-types.def
  9766dc05b49056b74fe8e10a9be25aaa  gcc/config/s390/s390-builtins.def
  e274089c979fe8cca36a358523639d7f  gcc/config/s390/s390-builtins.h
! 11d964e81ffcbfae6bc43f8dfe495bc4  gcc/config/s390/s390-c.cc
  ed576fb9a2ba561b17ab61f2a9bfe17f  gcc/config/s390/s390-d.cc
  445c8dfdbd431a0ac7b33f1c659bd733  gcc/config/s390/s390-d.h
  55bd22b1e6a549132e0c515ae9044df9  gcc/config/s390/s390-modes.def
  c7d2c6e9b07c780b3b02da4f5165316e  gcc/config/s390/s390-opts.h
  5871932ed4c83ad11e5593250b1e04a4  gcc/config/s390/s390-passes.def
! 5d7bff78c36ce807dbd9be40c035eb93  gcc/config/s390/s390-protos.h
! e54e3503384dfd75a6f2e548bc9c0917  gcc/config/s390/s390.cc
  0889a37d3bd6fd89b5ac6ae2d35ecee4  gcc/config/s390/s390.h
! 0479677f52785f8340cf7b1d5fab5bc2  gcc/config/s390/s390.md
  7eeb85e77191dec9449c41ad7680f212  gcc/config/s390/s390.opt
  f38f665269ada42e34f30f19b3fe7040  gcc/config/s390/s390intrin.h
  eae55aa734af7d9845853bc4a69f29d5  gcc/config/s390/s390x.h
*************** fe1e650ea556632c1f992b768969e17f  gcc/co
*** 4844,4850 ****
  fef82f4d1e1a0a5d89db5abe7477c685  gcc/config/s390/tpf.md
  dd2d83fd2c5bd7e08fd6f9d0cdb88e05  gcc/config/s390/tpf.opt
  da267810de1aafcd04a83e0432f15e77  gcc/config/s390/vecintrin.h
! 23f21fe566e6c79f42be06d7c4b214c7  gcc/config/s390/vector.md
  2703cdfbd359495a6b381ec1d11d5a5b  gcc/config/s390/vx-builtins.md
  7813da5eac25ac16f589b0319ad43386  gcc/config/s390/x-native
  00c4f5a037a71b2f382274bd12d0e9a4  gcc/config/sh/constraints.md
--- 4845,4851 ----
  fef82f4d1e1a0a5d89db5abe7477c685  gcc/config/s390/tpf.md
  dd2d83fd2c5bd7e08fd6f9d0cdb88e05  gcc/config/s390/tpf.opt
  da267810de1aafcd04a83e0432f15e77  gcc/config/s390/vecintrin.h
! 8fd58e744710e606b3459935184b735f  gcc/config/s390/vector.md
  2703cdfbd359495a6b381ec1d11d5a5b  gcc/config/s390/vx-builtins.md
  7813da5eac25ac16f589b0319ad43386  gcc/config/s390/x-native
  00c4f5a037a71b2f382274bd12d0e9a4  gcc/config/sh/constraints.md
*************** cceba0c8dc90312627444162a8078239  gcc/co
*** 4866,4872 ****
  edd218d93f2616cdf22e23c86e41f678  gcc/config/sh/sh-mem.cc
  dafa05de62e4f5bb6c9b7a2ffb7a55df  gcc/config/sh/sh-modes.def
  4515312140f2002feb7cd75134f2c396  gcc/config/sh/sh-protos.h
! 7ef91c629751307b5a6b3eb24862493b  gcc/config/sh/sh.cc
  37b97b8797def6afb72ea964a453eca5  gcc/config/sh/sh.h
  cb421e48d5ee6f1a768564c1b2975300  gcc/config/sh/sh.md
  b5bc1e3d906715c2267ae3b833e714a8  gcc/config/sh/sh.opt
--- 4867,4873 ----
  edd218d93f2616cdf22e23c86e41f678  gcc/config/sh/sh-mem.cc
  dafa05de62e4f5bb6c9b7a2ffb7a55df  gcc/config/sh/sh-modes.def
  4515312140f2002feb7cd75134f2c396  gcc/config/sh/sh-protos.h
! 8688af86f284a2353424ec768bfdf7ac  gcc/config/sh/sh.cc
  37b97b8797def6afb72ea964a453eca5  gcc/config/sh/sh.h
  cb421e48d5ee6f1a768564c1b2975300  gcc/config/sh/sh.md
  b5bc1e3d906715c2267ae3b833e714a8  gcc/config/sh/sh.opt
*************** aacbf1e83201eb77692a157d6e3c5f45  gcc/co
*** 5077,5084 ****
  ffa27afe9bfa1c3d0a00c4512eb2c4b5  gcc/config/xtensa/xtensa.h
  f88fbbab5f3aff39a56b40c7929d2048  gcc/config/xtensa/xtensa.md
  f10ec7eaade722a89338c0ffe897f9e2  gcc/config/xtensa/xtensa.opt
! 87b43c907023cfe30b19f2685bbf8c35  gcc/configure
! 6310bc56e32ce72f84b9d1dc10ffecf5  gcc/configure.ac
  229f188a38efc970482185093cf21584  gcc/context.cc
  1ad60ec65e12637c35bfaf841220544d  gcc/context.h
  bc123b739cfba026c4d6ce3b43313c55  gcc/convert.cc
--- 5078,5085 ----
  ffa27afe9bfa1c3d0a00c4512eb2c4b5  gcc/config/xtensa/xtensa.h
  f88fbbab5f3aff39a56b40c7929d2048  gcc/config/xtensa/xtensa.md
  f10ec7eaade722a89338c0ffe897f9e2  gcc/config/xtensa/xtensa.opt
! 651fb97d6ac0e1773bf9adb7c8e27b9e  gcc/configure
! a1957ae3768646360d25fb3ca8cc5c6b  gcc/configure.ac
  229f188a38efc970482185093cf21584  gcc/context.cc
  1ad60ec65e12637c35bfaf841220544d  gcc/context.h
  bc123b739cfba026c4d6ce3b43313c55  gcc/convert.cc
*************** a92be6f532ece352cab8309520cf28f0  gcc/co
*** 5088,5094 ****
  6614aac0ce8960f693faf880a7560bc5  gcc/coroutine-passes.cc
  9d6931fedff9a87a6266d15841579e67  gcc/coverage.cc
  b964f4291cd58a61a06769149429435f  gcc/coverage.h
! bb77bc9456283dc57608572427e4d2ec  gcc/cp/ChangeLog
  d271e3663538ba1f3281cab3838e92cd  gcc/cp/ChangeLog-1993
  f5a44adbc05521162350ca409d1d95ce  gcc/cp/ChangeLog-1994
  ac55db48d964cb5469ff03c1cd3ee04d  gcc/cp/ChangeLog-1995
--- 5089,5095 ----
  6614aac0ce8960f693faf880a7560bc5  gcc/coroutine-passes.cc
  9d6931fedff9a87a6266d15841579e67  gcc/coverage.cc
  b964f4291cd58a61a06769149429435f  gcc/coverage.h
! e28e384b6677cf52a6e0794e2030c2a5  gcc/cp/ChangeLog
  d271e3663538ba1f3281cab3838e92cd  gcc/cp/ChangeLog-1993
  f5a44adbc05521162350ca409d1d95ce  gcc/cp/ChangeLog-1994
  ac55db48d964cb5469ff03c1cd3ee04d  gcc/cp/ChangeLog-1995
*************** cb06dcbb3232403bb30ebd0d7d1feae1  gcc/cp
*** 5122,5135 ****
  c1c7801b9b0f379e702a4f6cb83972e7  gcc/cp/ChangeLog.ptr
  9aa3cd9f75c785de9f51446e3f295515  gcc/cp/ChangeLog.tree-ssa
  d75ff9438918fb614a4d72f7ca8b08e8  gcc/cp/Make-lang.in
! ec12127a1728ea54bbf497a9af41918b  gcc/cp/call.cc
  002c198593210fa169a51ff63dd31f2a  gcc/cp/cfns.gperf
  896d83eec5aaaa6e6d65eaf91d39d283  gcc/cp/cfns.h
  0b2a03d49770c4eace1cd0be60ee4b69  gcc/cp/class.cc
  b0062ee9c9d42ee91eaf7512f6e1e0be  gcc/cp/config-lang.in
! 3f8ca07280cef3f0bc2ff56a77347cee  gcc/cp/constexpr.cc
! c86a86eac49d994369ce26823c3a5da2  gcc/cp/constraint.cc
! 84844f7fa5d484f9d95f78e6da6c51e2  gcc/cp/contracts.cc
  3fff7a95b0ebd54a1f3f2b2ace365aae  gcc/cp/contracts.h
  6fb5d560bb71f24a7b95bcc1c3075968  gcc/cp/coroutines.cc
  ebeaa808f85fa8a261591cd99ad1e7b0  gcc/cp/cp-gimplify.cc
--- 5123,5136 ----
  c1c7801b9b0f379e702a4f6cb83972e7  gcc/cp/ChangeLog.ptr
  9aa3cd9f75c785de9f51446e3f295515  gcc/cp/ChangeLog.tree-ssa
  d75ff9438918fb614a4d72f7ca8b08e8  gcc/cp/Make-lang.in
! d9b5ec86750c5cd59daf7a5aae58585b  gcc/cp/call.cc
  002c198593210fa169a51ff63dd31f2a  gcc/cp/cfns.gperf
  896d83eec5aaaa6e6d65eaf91d39d283  gcc/cp/cfns.h
  0b2a03d49770c4eace1cd0be60ee4b69  gcc/cp/class.cc
  b0062ee9c9d42ee91eaf7512f6e1e0be  gcc/cp/config-lang.in
! 08921b99d388726f86b809fbbce118ef  gcc/cp/constexpr.cc
! edccbdb3f4c2f1f4d32e807cb29e3c40  gcc/cp/constraint.cc
! da0483e6a5389a7d06c30a4f41b34d48  gcc/cp/contracts.cc
  3fff7a95b0ebd54a1f3f2b2ace365aae  gcc/cp/contracts.h
  6fb5d560bb71f24a7b95bcc1c3075968  gcc/cp/coroutines.cc
  ebeaa808f85fa8a261591cd99ad1e7b0  gcc/cp/cp-gimplify.cc
*************** ebeaa808f85fa8a261591cd99ad1e7b0  gcc/cp
*** 5139,5153 ****
  44864edbff7221ce5b72f9f551fe9269  gcc/cp/cp-objcp-common.h
  1ff6ed82de7381c392b01839746c2f74  gcc/cp/cp-trait.def
  d6887ccac1e3a9dea9c2908ef57ec747  gcc/cp/cp-tree.def
! 49effe4df0b1fb0ce008f9d0f3a46f83  gcc/cp/cp-tree.h
  b65da920bdc209a44d1cba37f4a1e4a7  gcc/cp/cp-ubsan.cc
! 7c8cb89616dfd4228ce7017a63abd999  gcc/cp/cvt.cc
  0f2a998ba44768f9ca6fbf7c608096bb  gcc/cp/cxx-pretty-print.cc
  e0aeb037cb4d8ca738781ded46d00a5d  gcc/cp/cxx-pretty-print.h
! c1b4ec8db711e8a297a5d4e85d0aeb7e  gcc/cp/cxxapi-data.csv
! 1c773040c95a2e867c49d5ce900b5650  gcc/cp/decl.cc
  04eca9fc6dc327f816ff062ad8e899a5  gcc/cp/decl.h
! 0671577dde455ea68fcde37fb14f8b06  gcc/cp/decl2.cc
  c00489cd7633dcb8caed5defda9fdc95  gcc/cp/dump.cc
  1bcab327fe1f6fb1402f82439488dce5  gcc/cp/error.cc
  84cc118eb988fc2b48cffcc665159d9c  gcc/cp/except.cc
--- 5140,5154 ----
  44864edbff7221ce5b72f9f551fe9269  gcc/cp/cp-objcp-common.h
  1ff6ed82de7381c392b01839746c2f74  gcc/cp/cp-trait.def
  d6887ccac1e3a9dea9c2908ef57ec747  gcc/cp/cp-tree.def
! 6607508a527a2e0df92d89ddffb2b518  gcc/cp/cp-tree.h
  b65da920bdc209a44d1cba37f4a1e4a7  gcc/cp/cp-ubsan.cc
! c1554fda460dfa5f48a6851603bd9332  gcc/cp/cvt.cc
  0f2a998ba44768f9ca6fbf7c608096bb  gcc/cp/cxx-pretty-print.cc
  e0aeb037cb4d8ca738781ded46d00a5d  gcc/cp/cxx-pretty-print.h
! 434b32d34aae1276a754296e20dbe8d9  gcc/cp/cxxapi-data.csv
! ad0139bc4d542f2e5abe2c0adedf3a07  gcc/cp/decl.cc
  04eca9fc6dc327f816ff062ad8e899a5  gcc/cp/decl.h
! 7382d510c21a206975eaf2dbec80e7c7  gcc/cp/decl2.cc
  c00489cd7633dcb8caed5defda9fdc95  gcc/cp/dump.cc
  1bcab327fe1f6fb1402f82439488dce5  gcc/cp/error.cc
  84cc118eb988fc2b48cffcc665159d9c  gcc/cp/except.cc
*************** c00489cd7633dcb8caed5defda9fdc95  gcc/cp
*** 5155,5161 ****
  281fa9e99941b10d92e580b8d8b19a97  gcc/cp/friend.cc
  38d795f01430a0d433f133d955f161f4  gcc/cp/g++spec.cc
  aae4769663c02dfe48e64b7622706074  gcc/cp/gen-cxxapi-file.py
! 7c64a139cba229698f3e116f6bb23759  gcc/cp/init.cc
  6bd222a6b8cbe1c6cc29ff623d02ab70  gcc/cp/lambda.cc
  0c9e7039d9e6c649820e714e1877a4c3  gcc/cp/lang-specs.h
  f6faa21098c86eb47a6c838ddfcdca1b  gcc/cp/lex.cc
--- 5156,5162 ----
  281fa9e99941b10d92e580b8d8b19a97  gcc/cp/friend.cc
  38d795f01430a0d433f133d955f161f4  gcc/cp/g++spec.cc
  aae4769663c02dfe48e64b7622706074  gcc/cp/gen-cxxapi-file.py
! 9b4f175743b46b3ce1e48901dda38b97  gcc/cp/init.cc
  6bd222a6b8cbe1c6cc29ff623d02ab70  gcc/cp/lambda.cc
  0c9e7039d9e6c649820e714e1877a4c3  gcc/cp/lang-specs.h
  f6faa21098c86eb47a6c838ddfcdca1b  gcc/cp/lex.cc
*************** f6faa21098c86eb47a6c838ddfcdca1b  gcc/cp
*** 5164,5202 ****
  c7cdcc0d91396db6f388061dec91b1bb  gcc/cp/mapper-client.cc
  73e96c254c4c826c654b7a43099710d0  gcc/cp/mapper-client.h
  ad0c37db747b2c38777b4746b7e9ccd8  gcc/cp/mapper-resolver.cc
! a87e8c8c6f292810c6635b6886f41185  gcc/cp/method.cc
  e99f1c941daa60c220221a5bef64116b  gcc/cp/module.cc
! 8740c7c9f2fd38589ccc750f2f0a9455  gcc/cp/name-lookup.cc
  340bb6c30bc1451bc4e2aee47ac22c19  gcc/cp/name-lookup.h
  8cef47f00b2658d60aa8aeac08d34464  gcc/cp/operators.def
! f85201a1e836c959c5c786648cc6d972  gcc/cp/optimize.cc
! a0344d59ee743b822955878910c7ae88  gcc/cp/parser.cc
  fbb3d4644cdc4c0c8d47620a0b3a8094  gcc/cp/parser.h
! b47e3d7430e000372d51cc1a61a7d517  gcc/cp/pt.cc
  d03dc5c4f806d6a6841801d7d7d0080c  gcc/cp/ptree.cc
! fe1c482387564398745b4aeef90dacd0  gcc/cp/rtti.cc
! 28a680085dafc994c4c8136245441f35  gcc/cp/search.cc
! b623e7998bfd836736ee07ee2506cb51  gcc/cp/semantics.cc
! fb2be2f3133f876739c03004015d47f5  gcc/cp/std-name-hint.gperf
! d26ed61dc964da99efa5bf2bcab640d9  gcc/cp/std-name-hint.h
! f702f84b6d0740b12c921e823b821a0b  gcc/cp/tree.cc
  48f7db9af3b30491ed4f238605782993  gcc/cp/type-utils.h
! c9726c191a0ee80997a9688c5205b786  gcc/cp/typeck.cc
! b1207dce713a8592cfcb8c93046aa983  gcc/cp/typeck2.cc
  d1622a9e8d6f8df6c5834932b9488b97  gcc/cp/vtable-class-hierarchy.cc
  2597401b7544997a7f6e4811a977c2c8  gcc/cppbuiltin.cc
  ec059990dce01decdd41fdf61eb21678  gcc/cppbuiltin.h
  88101fa4198c4ab42be4ea3192666f9c  gcc/cppdefault.cc
  9e61120d1db695867893215d871ef62f  gcc/cppdefault.h
  80b2750515e06d163b5fd96d303beaed  gcc/cprop.cc
! 1199ae4f00c89472ef090c97647099ea  gcc/cse.cc
! b1e287d0d0732952fad4f20cefc2aa7e  gcc/cselib.cc
  19399561ae12aed1eea23b8a6a04bbf3  gcc/cselib.h
  1ded054093de910d9786c62bc4fe8cc6  gcc/cstamp-h.in
  a667c8581cf5009d6af17f19f1186065  gcc/ctfc.cc
  9881edbbb726db4859766d0a32beb6a7  gcc/ctfc.h
  744cafae198aaa990e1c303aa66f0504  gcc/ctfout.cc
! b1fca2dd052a9ea6069d7e1303834a31  gcc/d/ChangeLog
  86f687c485111eedca2eb048294f957e  gcc/d/ChangeLog-2006
  70ed1c47fd9b3f5dd95055642ed79265  gcc/d/ChangeLog-2007
  a7090ab2dd83aa4f44823c17566b83ef  gcc/d/ChangeLog-2008
--- 5165,5203 ----
  c7cdcc0d91396db6f388061dec91b1bb  gcc/cp/mapper-client.cc
  73e96c254c4c826c654b7a43099710d0  gcc/cp/mapper-client.h
  ad0c37db747b2c38777b4746b7e9ccd8  gcc/cp/mapper-resolver.cc
! 90c8d9496b70f38e7902724d8d93df97  gcc/cp/method.cc
  e99f1c941daa60c220221a5bef64116b  gcc/cp/module.cc
! eba9d2541aa4aa5f8a8e7aa169c9d594  gcc/cp/name-lookup.cc
  340bb6c30bc1451bc4e2aee47ac22c19  gcc/cp/name-lookup.h
  8cef47f00b2658d60aa8aeac08d34464  gcc/cp/operators.def
! 7037f63acd4161418cc8dcd1d86866e0  gcc/cp/optimize.cc
! 233f423f1efad6a65da7b34342f3a2d9  gcc/cp/parser.cc
  fbb3d4644cdc4c0c8d47620a0b3a8094  gcc/cp/parser.h
! ea1aa35d4cd4b7c23cf5da64052c2179  gcc/cp/pt.cc
  d03dc5c4f806d6a6841801d7d7d0080c  gcc/cp/ptree.cc
! aba5829381a2a8991e36ebb8d4eb9761  gcc/cp/rtti.cc
! 88eb1ceb39a66b26decf9af394a4f5c2  gcc/cp/search.cc
! 43d87713204e7f945875e8ab10ff89a3  gcc/cp/semantics.cc
! 6ee0fac37bab072bf0804b3f1dfb78f1  gcc/cp/std-name-hint.gperf
! f46ba3abf12a9521b0a8ac2aac5e8373  gcc/cp/std-name-hint.h
! bde75ae2e2dc98ce0d7ebbb2e49e70c1  gcc/cp/tree.cc
  48f7db9af3b30491ed4f238605782993  gcc/cp/type-utils.h
! bd758da929d27a010b0a933dbc9ab2dd  gcc/cp/typeck.cc
! b08fff9701626891fd78d4b60a5b2b83  gcc/cp/typeck2.cc
  d1622a9e8d6f8df6c5834932b9488b97  gcc/cp/vtable-class-hierarchy.cc
  2597401b7544997a7f6e4811a977c2c8  gcc/cppbuiltin.cc
  ec059990dce01decdd41fdf61eb21678  gcc/cppbuiltin.h
  88101fa4198c4ab42be4ea3192666f9c  gcc/cppdefault.cc
  9e61120d1db695867893215d871ef62f  gcc/cppdefault.h
  80b2750515e06d163b5fd96d303beaed  gcc/cprop.cc
! 36db51bc22ea211883c381ab25f607c5  gcc/cse.cc
! aec47cbaec48561e260557f0682793cf  gcc/cselib.cc
  19399561ae12aed1eea23b8a6a04bbf3  gcc/cselib.h
  1ded054093de910d9786c62bc4fe8cc6  gcc/cstamp-h.in
  a667c8581cf5009d6af17f19f1186065  gcc/ctfc.cc
  9881edbbb726db4859766d0a32beb6a7  gcc/ctfc.h
  744cafae198aaa990e1c303aa66f0504  gcc/ctfout.cc
! bfdb4adbd0ba2933f14b00bc7057f7a2  gcc/d/ChangeLog
  86f687c485111eedca2eb048294f957e  gcc/d/ChangeLog-2006
  70ed1c47fd9b3f5dd95055642ed79265  gcc/d/ChangeLog-2007
  a7090ab2dd83aa4f44823c17566b83ef  gcc/d/ChangeLog-2008
*************** d46228dde1a38d9a1d640d737074c7c6  gcc/d/
*** 5214,5236 ****
  e432bfc5c605ae0b1beedf0492ad40d1  gcc/d/ChangeLog-2020
  1978e6674dd960299d771fdb335a9df2  gcc/d/ChangeLog-2021
  c7b625d76017d2ec4f8970c167523c57  gcc/d/ChangeLog-2022
! c5d7dbe4d1b63f56eeee925e03e3eaca  gcc/d/Make-lang.in
  426254b45d40584d0597c63f3fd1f889  gcc/d/README.gcc
  758e5fe316e70ac29cdf3b2f894655eb  gcc/d/config-lang.in
  85746b2dfddc127a55b01ebb697bf36d  gcc/d/d-attribs.cc
  8348e5c20fb3ad49d06d69cffb935c47  gcc/d/d-builtins.cc
! c147a5e413aca0c7adf6b23d59d449ec  gcc/d/d-codegen.cc
  971f4804175b7a391dcd1281695fa5a2  gcc/d/d-compiler.cc
  6677da531b8c8e5f00f6772e6c4a0ed4  gcc/d/d-convert.cc
! 93b3db7f73e5e1032c65e1f7ebdd23dd  gcc/d/d-ctfloat.cc
  b983a82870c682654e0b4a768273922d  gcc/d/d-diagnostic.cc
  35453b303e365085046bccb08e0d9adc  gcc/d/d-frontend.cc
  4a718835cb15902eb75c17c137867c6b  gcc/d/d-frontend.h
  eed95c64afa2c5152ed24f9e036c8558  gcc/d/d-gimplify.cc
  083320fd80e27f2723b9e7d3369f1b6b  gcc/d/d-incpath.cc
  ce6b33dda672c5a4dd51d395bb584cb5  gcc/d/d-lang.cc
! 0a3699396462263e3afd622842ec578c  gcc/d/d-longdouble.cc
! 81613174ef788429ef4d2d6b795c5e01  gcc/d/d-port.cc
  185499ceba21feb6f33c538ec84ccc2b  gcc/d/d-spec.cc
  3d5fc447a9af0885c21b752580606718  gcc/d/d-system.h
  702fee3dac729038fda2766339cd7526  gcc/d/d-target-def.h
--- 5215,5237 ----
  e432bfc5c605ae0b1beedf0492ad40d1  gcc/d/ChangeLog-2020
  1978e6674dd960299d771fdb335a9df2  gcc/d/ChangeLog-2021
  c7b625d76017d2ec4f8970c167523c57  gcc/d/ChangeLog-2022
! 51eb65a4b397367b4f35585661539235  gcc/d/Make-lang.in
  426254b45d40584d0597c63f3fd1f889  gcc/d/README.gcc
  758e5fe316e70ac29cdf3b2f894655eb  gcc/d/config-lang.in
  85746b2dfddc127a55b01ebb697bf36d  gcc/d/d-attribs.cc
  8348e5c20fb3ad49d06d69cffb935c47  gcc/d/d-builtins.cc
! 62ea809eb84816d478adf86ee577874c  gcc/d/d-codegen.cc
  971f4804175b7a391dcd1281695fa5a2  gcc/d/d-compiler.cc
  6677da531b8c8e5f00f6772e6c4a0ed4  gcc/d/d-convert.cc
! d2b1f01e0988dcd39d9447e3e7178798  gcc/d/d-ctfloat.cc
  b983a82870c682654e0b4a768273922d  gcc/d/d-diagnostic.cc
  35453b303e365085046bccb08e0d9adc  gcc/d/d-frontend.cc
  4a718835cb15902eb75c17c137867c6b  gcc/d/d-frontend.h
  eed95c64afa2c5152ed24f9e036c8558  gcc/d/d-gimplify.cc
  083320fd80e27f2723b9e7d3369f1b6b  gcc/d/d-incpath.cc
  ce6b33dda672c5a4dd51d395bb584cb5  gcc/d/d-lang.cc
! ef961ae9fa4971d839f64528e0a37ae0  gcc/d/d-longdouble.cc
! 3681feafef438df6cf30a76d70231ab9  gcc/d/d-port.cc
  185499ceba21feb6f33c538ec84ccc2b  gcc/d/d-spec.cc
  3d5fc447a9af0885c21b752580606718  gcc/d/d-system.h
  702fee3dac729038fda2766339cd7526  gcc/d/d-target-def.h
*************** fbc8000ee222d6ad5a0e1c6e84a312d4  gcc/d/
*** 5239,5245 ****
  0ef8ddb83bcd9713cc0bc91299edff2c  gcc/d/d-target.h
  df7deb9723aa01d867aaeec5d746c208  gcc/d/d-tree.def
  8bb261b53d8eeeb70c0c97ed965aacc2  gcc/d/d-tree.h
! be8dd0191d9920057e3ed061f469aeef  gcc/d/decl.cc
  2d7446d51cf4738aad1c8ceb43174a72  gcc/d/dmd/MERGE
  39fa65f9345bb0319180e90c1912a1ae  gcc/d/dmd/README.md
  dde7939f1c35c9e979832ac123e5692f  gcc/d/dmd/VERSION
--- 5240,5246 ----
  0ef8ddb83bcd9713cc0bc91299edff2c  gcc/d/d-target.h
  df7deb9723aa01d867aaeec5d746c208  gcc/d/d-tree.def
  8bb261b53d8eeeb70c0c97ed965aacc2  gcc/d/d-tree.h
! 647b3e7b67ae9032b1716758b451426d  gcc/d/decl.cc
  2d7446d51cf4738aad1c8ceb43174a72  gcc/d/dmd/MERGE
  39fa65f9345bb0319180e90c1912a1ae  gcc/d/dmd/README.md
  dde7939f1c35c9e979832ac123e5692f  gcc/d/dmd/VERSION
*************** c9a7dddb98d89035d4e0853147d7fb06  gcc/d/
*** 5414,5434 ****
  0e19f04aef543d4fabb6ec79def5b2df  gcc/d/dmd/version.h
  f9c518566ad51d0492965951bb50bc49  gcc/d/dmd/visitor.d
  0479d55eda5ee9de0e2106ae722ad649  gcc/d/dmd/visitor.h
! b65288e6e53cfaffacca937e6804af3a  gcc/d/expr.cc
  7c8d068883546d6053ab89a4aa3ad55c  gcc/d/gdc.texi
  09d8459a6a0334281c058ddbf35b079a  gcc/d/implement-d.texi
! e4c10d0521a4da4ca6e2b2c3f697716c  gcc/d/imports.cc
  f9a817d9bb4f6506675b8e8a688f0e11  gcc/d/intrinsics.cc
  f48e7f23e5575562bfba2a7778e519f4  gcc/d/intrinsics.def
  a21521366267b1a7b68ceb6ce15a9246  gcc/d/lang-specs.h
  3a84c708114b1f0e47fcf7d131e2b560  gcc/d/lang.opt
  170eed96a8d3563a9bcb03ac0fc59cbc  gcc/d/longdouble.h
! ca14a2291c78c98288cc3bbba9ab63d5  gcc/d/modules.cc
  b1d8cca7f88b3b7a419bdaad940457c0  gcc/d/runtime.cc
  7fbf81ad217c5efa6f267572778e7ab8  gcc/d/runtime.def
  48b3a4ef1af87b926e52c50d3bc81595  gcc/d/toir.cc
  168e3e721d8dc43fb9d250ca847af79a  gcc/d/typeinfo.cc
! 4073f5e4b70d8e8697305fb5544b99f9  gcc/d/types.cc
  accc2d7f211bb139fde71fcb94dbbf92  gcc/data-streamer-in.cc
  888eb4c7a007875545f7f89fa223643c  gcc/data-streamer-out.cc
  047c64792c9f1e60b4b6498df8817c94  gcc/data-streamer.cc
--- 5415,5435 ----
  0e19f04aef543d4fabb6ec79def5b2df  gcc/d/dmd/version.h
  f9c518566ad51d0492965951bb50bc49  gcc/d/dmd/visitor.d
  0479d55eda5ee9de0e2106ae722ad649  gcc/d/dmd/visitor.h
! 88ab8c337e2d8355f94eb5fdf72cfe5d  gcc/d/expr.cc
  7c8d068883546d6053ab89a4aa3ad55c  gcc/d/gdc.texi
  09d8459a6a0334281c058ddbf35b079a  gcc/d/implement-d.texi
! 52b373830c8db1956184db3d7c644eed  gcc/d/imports.cc
  f9a817d9bb4f6506675b8e8a688f0e11  gcc/d/intrinsics.cc
  f48e7f23e5575562bfba2a7778e519f4  gcc/d/intrinsics.def
  a21521366267b1a7b68ceb6ce15a9246  gcc/d/lang-specs.h
  3a84c708114b1f0e47fcf7d131e2b560  gcc/d/lang.opt
  170eed96a8d3563a9bcb03ac0fc59cbc  gcc/d/longdouble.h
! 5251baac92e17d12efc1de93cbfe6ba5  gcc/d/modules.cc
  b1d8cca7f88b3b7a419bdaad940457c0  gcc/d/runtime.cc
  7fbf81ad217c5efa6f267572778e7ab8  gcc/d/runtime.def
  48b3a4ef1af87b926e52c50d3bc81595  gcc/d/toir.cc
  168e3e721d8dc43fb9d250ca847af79a  gcc/d/typeinfo.cc
! d36c80c26768a485a06631dbc94be775  gcc/d/types.cc
  accc2d7f211bb139fde71fcb94dbbf92  gcc/data-streamer-in.cc
  888eb4c7a007875545f7f89fa223643c  gcc/data-streamer-out.cc
  047c64792c9f1e60b4b6498df8817c94  gcc/data-streamer.cc
*************** a6d0bb901e25b89558de1509a08a93f4  gcc/db
*** 5444,5450 ****
  ffaa76bc85940e5a2ce2d979fb3526d7  gcc/debug.h
  05f283c3358e737d36e036c1346ba5bf  gcc/defaults.h
  2559a7b14817860d335928172b0561ff  gcc/df-core.cc
! 8e05ca4414d5c36a982b6cad294025c5  gcc/df-problems.cc
  5ee0fa11da11a9c210c16c65460d9e55  gcc/df-scan.cc
  a711fb3e5abbc6d9dac11f2fa50e9836  gcc/df.h
  da8633f2ee3b0b40c380fab5776aa33e  gcc/dfp.cc
--- 5445,5451 ----
  ffaa76bc85940e5a2ce2d979fb3526d7  gcc/debug.h
  05f283c3358e737d36e036c1346ba5bf  gcc/defaults.h
  2559a7b14817860d335928172b0561ff  gcc/df-core.cc
! 4f1c1fdfe5b25c3252f442e04a092704  gcc/df-problems.cc
  5ee0fa11da11a9c210c16c65460d9e55  gcc/df-scan.cc
  a711fb3e5abbc6d9dac11f2fa50e9836  gcc/df.h
  da8633f2ee3b0b40c380fab5776aa33e  gcc/dfp.cc
*************** e927561ee87ffd471419ab7c04a9c03d  gcc/di
*** 5468,5474 ****
  768604617d8710f1848e11fd6d4f6713  gcc/digraph.cc
  1309ef041fe49676049fddd61225f25e  gcc/digraph.h
  ed4a41716cd834ae3e0120f4e94f21f6  gcc/doc/analyzer.texi
! a867d1bbc22658274c90a78fd6d010c3  gcc/doc/avr-mmcu.texi
  b55159f9c9fbeadedbd6a971434bef5e  gcc/doc/bugreport.texi
  97af20afa0c976df424f847ab0e7072d  gcc/doc/cfg.texi
  8784212b864de1903df4a7574095012f  gcc/doc/collect2.texi
--- 5469,5475 ----
  768604617d8710f1848e11fd6d4f6713  gcc/digraph.cc
  1309ef041fe49676049fddd61225f25e  gcc/digraph.h
  ed4a41716cd834ae3e0120f4e94f21f6  gcc/doc/analyzer.texi
! 042775b60723e8f420675b84d19dbec6  gcc/doc/avr-mmcu.texi
  b55159f9c9fbeadedbd6a971434bef5e  gcc/doc/bugreport.texi
  97af20afa0c976df424f847ab0e7072d  gcc/doc/cfg.texi
  8784212b864de1903df4a7574095012f  gcc/doc/collect2.texi
*************** ab5a29a444213b7a4b7edbae0720adf0  gcc/do
*** 5477,5515 ****
  8c23b33261e6d434a3bb388d13bf9750  gcc/doc/configterms.texi
  41fe29b312b42ee001aa367476b9444e  gcc/doc/contrib.texi
  42159646cb48b375710fd78e3dd6e6b4  gcc/doc/contribute.texi
! a8e1d7e792b1e9c9e6e58fee4188b0f0  gcc/doc/cpp.1
! 49ae2819f851d04602cabadd39edfe4b  gcc/doc/cpp.info
! 6d296baf9bec85f59c79959e355efb3b  gcc/doc/cpp.texi
  417eef489bd26f8def602795e86741fa  gcc/doc/cppdiropts.texi
  2011321798f5e6d57961e25563305e06  gcc/doc/cppenv.texi
  285e8a199dd7f9c4a06f98fa0f38cd37  gcc/doc/cppinternals.info
  60a3fa41bf1f6e279008366c78cb007c  gcc/doc/cppinternals.texi
  8d68aa98b0af8010285255a92aea623d  gcc/doc/cppopts.texi
  50173f3902d3d3c6e3bdb1a4f9044352  gcc/doc/cppwarnopts.texi
! c9d626cddd1834c0ba5e2873f02457e8  gcc/doc/extend.texi
  9da857d64fdcfd6b1982a75cf86bc597  gcc/doc/fragments.texi
  e3892bc4361a803d8c568c54c20cbcd9  gcc/doc/frontends.texi
! b852f290c51302f498c989ae34ae4f51  gcc/doc/fsf-funding.7
! e17b8861bdbfbf59ce4f73676768c0e5  gcc/doc/g++.1
! e17b8861bdbfbf59ce4f73676768c0e5  gcc/doc/gcc.1
! 60abc80f2940b58eff118acd14da72e0  gcc/doc/gcc.info
  295291ec7baa70b04da2b1b6ecffee99  gcc/doc/gcc.texi
  b732036db666d1191019593ac6523278  gcc/doc/gccinstall.info
! 088501367f66714fa52df3a8ad68e5df  gcc/doc/gccint.info
  edc0e7584ec44bfd909e0126057141b2  gcc/doc/gccint.texi
! 7d753ca9c33d087d4a5d5ce786ade385  gcc/doc/gcov-dump.1
  8cbf639fe99f374f9e305a031d0d6736  gcc/doc/gcov-dump.texi
! ddc19da1be3d7e41e50ae0a590b61bd9  gcc/doc/gcov-tool.1
  a4e8708b41fe686d6ecdc5246226e3e3  gcc/doc/gcov-tool.texi
! bc47867d4f6d14fa5c4e3b722e455454  gcc/doc/gcov.1
  ccaf4e1393ac66805b8317145261710e  gcc/doc/gcov.texi
  87c3d3669bc27263b6c7fc5d7fdd7c28  gcc/doc/generic.texi
! 092f61edeaf91879c1e810d03dfc1e98  gcc/doc/gfdl.7
! 3bd3cb0bc6bf0810b71430020d7c65ae  gcc/doc/gfortran.1
  5630240c5ef619f03fc1bd750bde7b61  gcc/doc/gimple.texi
  8c5e921b4436013be7b3d375620753f6  gcc/doc/gm2.texi
  dc4ccd9843d88bc01c909438dabfd6ab  gcc/doc/gnu.texi
! b19fdf31fc3820291b92af073c841bd6  gcc/doc/gpl.7
  9c051a6abfe79317ad83904f042d2738  gcc/doc/gty.texi
  42ebfb9fc08dafdae427760be5354428  gcc/doc/headerdirs.texi
  971cd503a0a7fde3063283de000ba2ea  gcc/doc/hostconfig.texi
--- 5478,5524 ----
  8c23b33261e6d434a3bb388d13bf9750  gcc/doc/configterms.texi
  41fe29b312b42ee001aa367476b9444e  gcc/doc/contrib.texi
  42159646cb48b375710fd78e3dd6e6b4  gcc/doc/contribute.texi
! 35a0bc4c81e09b037af53e1a78b063fd  gcc/doc/cpp.1
! 32db0c54c279a68e8856d7b1f2c3915c  gcc/doc/cpp.info
! 587fd46d043d4c91fa743bf32451859c  gcc/doc/cpp.texi
  417eef489bd26f8def602795e86741fa  gcc/doc/cppdiropts.texi
  2011321798f5e6d57961e25563305e06  gcc/doc/cppenv.texi
  285e8a199dd7f9c4a06f98fa0f38cd37  gcc/doc/cppinternals.info
  60a3fa41bf1f6e279008366c78cb007c  gcc/doc/cppinternals.texi
  8d68aa98b0af8010285255a92aea623d  gcc/doc/cppopts.texi
  50173f3902d3d3c6e3bdb1a4f9044352  gcc/doc/cppwarnopts.texi
! c99b8f869f34a5dd9cd46d59a3a76ae4  gcc/doc/extend.texi
  9da857d64fdcfd6b1982a75cf86bc597  gcc/doc/fragments.texi
  e3892bc4361a803d8c568c54c20cbcd9  gcc/doc/frontends.texi
! 2da924ddbb453b05a019b926a62577c2  gcc/doc/fsf-funding.7
! 0e07810bb7ccdac8559fbda78f8476bd  gcc/doc/g++.1
! 0e07810bb7ccdac8559fbda78f8476bd  gcc/doc/gcc.1
! 9b57a59b8eb0ebd5d5b75463a5677434  gcc/doc/gcc.info
  295291ec7baa70b04da2b1b6ecffee99  gcc/doc/gcc.texi
+ 91f4d873caa77d8686116b28aeedc564  gcc/doc/gccgo.1
+ d8d743e3a7186baedfcc9d31fed204a1  gcc/doc/gccgo.info
  b732036db666d1191019593ac6523278  gcc/doc/gccinstall.info
! acdc2ae3b7fdbcb55c232d018c65732e  gcc/doc/gccint.info
  edc0e7584ec44bfd909e0126057141b2  gcc/doc/gccint.texi
! 421d09dddb138c6adf182dc547c8d63a  gcc/doc/gcov-dump.1
  8cbf639fe99f374f9e305a031d0d6736  gcc/doc/gcov-dump.texi
! 7a7df0aea396a3d759256110c2b127f8  gcc/doc/gcov-tool.1
  a4e8708b41fe686d6ecdc5246226e3e3  gcc/doc/gcov-tool.texi
! c33983d1cc3499723848c0a3847f2aac  gcc/doc/gcov.1
  ccaf4e1393ac66805b8317145261710e  gcc/doc/gcov.texi
+ 6378832f3814a025c819e59543b98559  gcc/doc/gdc.1
+ f233a58cb023243d48e8d8d85fab4dc6  gcc/doc/gdc.info
  87c3d3669bc27263b6c7fc5d7fdd7c28  gcc/doc/generic.texi
! 63a7f74b4aadcbc3843a474690c7d943  gcc/doc/gfdl.7
! 995d523e49e3cb045615de39f6c8dafc  gcc/doc/gfortran.1
  5630240c5ef619f03fc1bd750bde7b61  gcc/doc/gimple.texi
+ c1c3d9cf0456a61410af3092abd21bae  gcc/doc/gm2.1
  8c5e921b4436013be7b3d375620753f6  gcc/doc/gm2.texi
+ 28d5c30df0c36abc0041d609cc15a9f4  gcc/doc/gnat-style.info
+ 93b5cac01e32d4af83387f86e0d4d40f  gcc/doc/gnat_rm.info
+ 2b449ebb58ae2949cf09dc6c9031f726  gcc/doc/gnat_ugn.info
  dc4ccd9843d88bc01c909438dabfd6ab  gcc/doc/gnu.texi
! f6b3263ab1e5301cb6fa8a9f0a687779  gcc/doc/gpl.7
  9c051a6abfe79317ad83904f042d2738  gcc/doc/gty.texi
  42ebfb9fc08dafdae427760be5354428  gcc/doc/headerdirs.texi
  971cd503a0a7fde3063283de000ba2ea  gcc/doc/hostconfig.texi
*************** e9b8122841fbfbbc30fee8ed6613c399  gcc/do
*** 5523,5535 ****
  b4c57b64e59441421fbf276de0639649  gcc/doc/install.texi
  0f44cc63abf9b607d1b8880175256326  gcc/doc/install.texi2html
  34b99c10f577dd2da256de717941c862  gcc/doc/interface.texi
! 7185e26012c0f86bde3d7b2b84727445  gcc/doc/invoke.texi
  f64676ceacf4c713f83bad704dbc5eaf  gcc/doc/languages.texi
  e36a87d027eabff1a8595ee341342560  gcc/doc/libgcc.texi
  8b6fb2575a94998971924157a5cabfd8  gcc/doc/loop.texi
! 707c9852b8200182b17ffa5a98efe6b4  gcc/doc/lto-dump.1
  ecfae67b5004f374351f0448f9b764e0  gcc/doc/lto-dump.texi
  a1c3440fcd17355fcd9956685728338c  gcc/doc/lto.texi
  e215e75acc6a49ab683dd3a4560fb7f8  gcc/doc/makefile.texi
  ac506e04e4e513f2e736736ace0a17ac  gcc/doc/match-and-simplify.texi
  41a368efad7b97a4b0d02368aa139e8f  gcc/doc/md.texi
--- 5532,5545 ----
  b4c57b64e59441421fbf276de0639649  gcc/doc/install.texi
  0f44cc63abf9b607d1b8880175256326  gcc/doc/install.texi2html
  34b99c10f577dd2da256de717941c862  gcc/doc/interface.texi
! b5fe517d44d3c4b55830c628f692e4c0  gcc/doc/invoke.texi
  f64676ceacf4c713f83bad704dbc5eaf  gcc/doc/languages.texi
  e36a87d027eabff1a8595ee341342560  gcc/doc/libgcc.texi
  8b6fb2575a94998971924157a5cabfd8  gcc/doc/loop.texi
! a12b2aa5462613eabba7366a9ae70e50  gcc/doc/lto-dump.1
  ecfae67b5004f374351f0448f9b764e0  gcc/doc/lto-dump.texi
  a1c3440fcd17355fcd9956685728338c  gcc/doc/lto.texi
+ 56302c35ebdbafd6185326b049fceb52  gcc/doc/m2.info
  e215e75acc6a49ab683dd3a4560fb7f8  gcc/doc/makefile.texi
  ac506e04e4e513f2e736736ace0a17ac  gcc/doc/match-and-simplify.texi
  41a368efad7b97a4b0d02368aa139e8f  gcc/doc/md.texi
*************** bcfc3857a75f879ec761a824ae77aa77  gcc/du
*** 5566,5572 ****
  3aecdcd1ecb4330fb6d35220436b4e16  gcc/dwarf2cfi.cc
  4b4d88e890847c2849c8a0dd429ad7d4  gcc/dwarf2ctf.cc
  6339307d1a91f4115e2184f117a9152f  gcc/dwarf2ctf.h
! 0c2495b127171e6c1515c181ab9240fe  gcc/dwarf2out.cc
  da9eb5f94d9f2537c44626df2e2d0731  gcc/dwarf2out.h
  56a3faa5b916a76e3e8e799879bb6f9f  gcc/early-remat.cc
  c916e1e3ac5144157fdf894c31dca957  gcc/edit-context.cc
--- 5576,5582 ----
  3aecdcd1ecb4330fb6d35220436b4e16  gcc/dwarf2cfi.cc
  4b4d88e890847c2849c8a0dd429ad7d4  gcc/dwarf2ctf.cc
  6339307d1a91f4115e2184f117a9152f  gcc/dwarf2ctf.h
! f875a454019ec249dc151f8ca693547a  gcc/dwarf2out.cc
  da9eb5f94d9f2537c44626df2e2d0731  gcc/dwarf2out.h
  56a3faa5b916a76e3e8e799879bb6f9f  gcc/early-remat.cc
  c916e1e3ac5144157fdf894c31dca957  gcc/edit-context.cc
*************** ece276800266c6e2e7e65e6f96ec5be4  gcc/er
*** 5578,5589 ****
  f81327904e356ae043c572c54bd25316  gcc/escaped_string.h
  61fc91903dd907005648d7413269ccd3  gcc/et-forest.cc
  860bca68f977fa9a726d09a684e1fbac  gcc/et-forest.h
! 43c71d0cd101eacd0ea048459db5a83b  gcc/except.cc
  b50077475f8f7a1b64242ec5e01d7784  gcc/except.h
  d2189b62c37dd572addf61825a41d344  gcc/exec-tool.in
  10518df9c294e40a2a7660c8d93f39a3  gcc/explow.cc
  16380b9326d8ac062959a6a82043cce3  gcc/explow.h
! aa87fe7a6bdb0d5979cc7df2a1ff6ba2  gcc/expmed.cc
  19036d67b94612828e60a36131f73399  gcc/expmed.h
  3bf4610f6c4a28c419e8f9ed167ceb37  gcc/expr.cc
  a58f8d09aca5337953e4002f8d46ada5  gcc/expr.h
--- 5588,5599 ----
  f81327904e356ae043c572c54bd25316  gcc/escaped_string.h
  61fc91903dd907005648d7413269ccd3  gcc/et-forest.cc
  860bca68f977fa9a726d09a684e1fbac  gcc/et-forest.h
! 5521d86e1428448db91f1d9706bff8db  gcc/except.cc
  b50077475f8f7a1b64242ec5e01d7784  gcc/except.h
  d2189b62c37dd572addf61825a41d344  gcc/exec-tool.in
  10518df9c294e40a2a7660c8d93f39a3  gcc/explow.cc
  16380b9326d8ac062959a6a82043cce3  gcc/explow.h
! efcdb43408c74630692eff921a1cc07f  gcc/expmed.cc
  19036d67b94612828e60a36131f73399  gcc/expmed.h
  3bf4610f6c4a28c419e8f9ed167ceb37  gcc/expr.cc
  a58f8d09aca5337953e4002f8d46ada5  gcc/expr.h
*************** bea216ccfb736c1b9a309ecf9afff70a  gcc/fi
*** 5593,5608 ****
  57947e4060d24d010e8c4dd7ba984127  gcc/file-find.h
  afd42e14b3f2852408195e6a82376326  gcc/file-prefix-map.cc
  cd0af84836966e2df321c3d08905a631  gcc/file-prefix-map.h
! 917ebde63babc279cc2dbdf9ebf5af07  gcc/final.cc
  5ecf2be631b0f86d2248af1c89340d18  gcc/fixed-value.cc
  fe6768163b0ca6c41fea1719448908eb  gcc/fixed-value.h
  20c9ffc1f2abf2ab017b88632fa9f63a  gcc/flag-types.h
  c2dbf831f4bbc53553765214d1b2d674  gcc/flags.h
  84632412a9570c311bb6f9944fdacccf  gcc/fold-const-call.cc
  46538296abcbd26df93f276f5974ec0f  gcc/fold-const-call.h
! 6472adeb714de6ecdad4ef40c376b945  gcc/fold-const.cc
  9dd2c87502c864095a8b942bea07b5f3  gcc/fold-const.h
! 381618e634171ec46fb11e3d2e606c0d  gcc/fortran/ChangeLog
  3330102ad3a0217cba963be6b5eefd58  gcc/fortran/ChangeLog-2002
  d000ab985b1eeb1ad5749f98b8fef99f  gcc/fortran/ChangeLog-2003
  bf42f94f0c51dcc7d8051cc7fda1efdc  gcc/fortran/ChangeLog-2004
--- 5603,5618 ----
  57947e4060d24d010e8c4dd7ba984127  gcc/file-find.h
  afd42e14b3f2852408195e6a82376326  gcc/file-prefix-map.cc
  cd0af84836966e2df321c3d08905a631  gcc/file-prefix-map.h
! f17f6b6aae9854537fcf8702abb390d6  gcc/final.cc
  5ecf2be631b0f86d2248af1c89340d18  gcc/fixed-value.cc
  fe6768163b0ca6c41fea1719448908eb  gcc/fixed-value.h
  20c9ffc1f2abf2ab017b88632fa9f63a  gcc/flag-types.h
  c2dbf831f4bbc53553765214d1b2d674  gcc/flags.h
  84632412a9570c311bb6f9944fdacccf  gcc/fold-const-call.cc
  46538296abcbd26df93f276f5974ec0f  gcc/fold-const-call.h
! f32e31e2e5d7d430555b0a476972ca3a  gcc/fold-const.cc
  9dd2c87502c864095a8b942bea07b5f3  gcc/fold-const.h
! 0c6771b89b2cb598d39fe199e783fd9a  gcc/fortran/ChangeLog
  3330102ad3a0217cba963be6b5eefd58  gcc/fortran/ChangeLog-2002
  d000ab985b1eeb1ad5749f98b8fef99f  gcc/fortran/ChangeLog-2003
  bf42f94f0c51dcc7d8051cc7fda1efdc  gcc/fortran/ChangeLog-2004
*************** d725b555490bb7f2cd61f6bcc2c3de67  gcc/fo
*** 5631,5637 ****
  bae3ddfd77897b5f94b83cad27576c0f  gcc/fortran/array.cc
  35e889b2dd5fcf9ccf78e37ed082d6e6  gcc/fortran/bbt.cc
  807fa70f21f149b3b3e27d9942f008b9  gcc/fortran/check.cc
! ce0a28d639a1a02f929ac8d86d857e84  gcc/fortran/class.cc
  e3250461219cfa76e4436196538109fc  gcc/fortran/config-lang.in
  25b8459831a3492589703f8ac166fb8c  gcc/fortran/constructor.cc
  dead8f794e0bc7ece3c9f46a4b9ead58  gcc/fortran/constructor.h
--- 5641,5647 ----
  bae3ddfd77897b5f94b83cad27576c0f  gcc/fortran/array.cc
  35e889b2dd5fcf9ccf78e37ed082d6e6  gcc/fortran/bbt.cc
  807fa70f21f149b3b3e27d9942f008b9  gcc/fortran/check.cc
! 0d3a98abb785a18e1b0e25ca1315e27b  gcc/fortran/class.cc
  e3250461219cfa76e4436196538109fc  gcc/fortran/config-lang.in
  25b8459831a3492589703f8ac166fb8c  gcc/fortran/constructor.cc
  dead8f794e0bc7ece3c9f46a4b9ead58  gcc/fortran/constructor.h
*************** dead8f794e0bc7ece3c9f46a4b9ead58  gcc/fo
*** 5640,5674 ****
  bc8a50172db20622023d7b83c31d7737  gcc/fortran/cpp.h
  d49d08bf3282ebea910b14cf88b1b5ee  gcc/fortran/data.cc
  86b2ebfc95645333cba0df8f79638b62  gcc/fortran/data.h
! c7f827b3e5ddad19cbe21c7b6f99e7f7  gcc/fortran/decl.cc
! 92b2a0849ab19332ebb5633d75c3565d  gcc/fortran/dependency.cc
  528121f9fe625a6b314dd0e4e9601e70  gcc/fortran/dependency.h
  638a4c6c1f147853ccf44c5442c876f9  gcc/fortran/dump-parse-tree.cc
  75860b58e8a01aadbfb046789efa8a88  gcc/fortran/error.cc
! e65a475d42ecb32ebe0f1c06adbd7fb6  gcc/fortran/expr.cc
  012392c6483a51939022df7c6de22fbc  gcc/fortran/f95-lang.cc
  2c46f4a85ebcd58b3bdb7f98f7d0b85c  gcc/fortran/frontend-passes.cc
  5d21a6b2bc38e36e9ce485f9b899cf5d  gcc/fortran/gfc-diagnostic.def
  d428ee96a4c880140da26aec0f107bda  gcc/fortran/gfc-internals.texi
! 54fbcaee3d67948956db7723661d66fd  gcc/fortran/gfortran.h
  bbdd5fdc9c27fb3e32e192c6d9ce6e0f  gcc/fortran/gfortran.info
  0da9587d85518945e473eb0045cf3202  gcc/fortran/gfortran.texi
  538b040a49c9f6c46cbd59c2a9ce1afd  gcc/fortran/gfortranspec.cc
! df9abf2c957c5340f4c65aa85a752b21  gcc/fortran/interface.cc
  fa6aa4009c0eec8232b24902c6900993  gcc/fortran/intrinsic.cc
  d9000cac276ba162b0a7fcc76c6f8be0  gcc/fortran/intrinsic.h
  9c38010b39eaa7dc10c02b510ddd4d20  gcc/fortran/intrinsic.texi
  211ec2a87dfb468db93dc18be3821b87  gcc/fortran/invoke.texi
  e25a04efa7ac5e920a21a383235da157  gcc/fortran/io.cc
  1b49007c5da8e0831c984754f0905035  gcc/fortran/ioparm.def
! dab05b735b8cb3f052d21778d880e650  gcc/fortran/iresolve.cc
  ad808a3e3c725da4d83aa2253f4b6bc3  gcc/fortran/iso-c-binding.def
  d2a4c5315fb086aeaa125c4b2829a29f  gcc/fortran/iso-fortran-env.def
  5659bf0ae0187cfd21cd8f599d82f98d  gcc/fortran/lang-specs.h
  92cf8f5887329d298f04e41b7fd4b780  gcc/fortran/lang.opt
  dfe2708ae1610f0355d4e3f64825ed31  gcc/fortran/libgfortran.h
  f820f80f97ddcdeff771996b47adc742  gcc/fortran/match.cc
! 6da0bc7042d9bd55ddf1b96015c07579  gcc/fortran/match.h
  38fc5448e9ea8b828a44496034ac708e  gcc/fortran/matchexp.cc
  540b2df11e809f8e922d0bc5b5562d6b  gcc/fortran/mathbuiltins.def
  7d747e480d55c8abf8c69b45a4d2b572  gcc/fortran/misc.cc
--- 5650,5684 ----
  bc8a50172db20622023d7b83c31d7737  gcc/fortran/cpp.h
  d49d08bf3282ebea910b14cf88b1b5ee  gcc/fortran/data.cc
  86b2ebfc95645333cba0df8f79638b62  gcc/fortran/data.h
! af7535cdf336627a57c695f9708c2ba8  gcc/fortran/decl.cc
! 03376b1f69cb12088fb0957658714aa3  gcc/fortran/dependency.cc
  528121f9fe625a6b314dd0e4e9601e70  gcc/fortran/dependency.h
  638a4c6c1f147853ccf44c5442c876f9  gcc/fortran/dump-parse-tree.cc
  75860b58e8a01aadbfb046789efa8a88  gcc/fortran/error.cc
! 0af32ed33f5748db7e33876cb180cbb3  gcc/fortran/expr.cc
  012392c6483a51939022df7c6de22fbc  gcc/fortran/f95-lang.cc
  2c46f4a85ebcd58b3bdb7f98f7d0b85c  gcc/fortran/frontend-passes.cc
  5d21a6b2bc38e36e9ce485f9b899cf5d  gcc/fortran/gfc-diagnostic.def
  d428ee96a4c880140da26aec0f107bda  gcc/fortran/gfc-internals.texi
! 706de8b42efb4516e0de8473694c5cde  gcc/fortran/gfortran.h
  bbdd5fdc9c27fb3e32e192c6d9ce6e0f  gcc/fortran/gfortran.info
  0da9587d85518945e473eb0045cf3202  gcc/fortran/gfortran.texi
  538b040a49c9f6c46cbd59c2a9ce1afd  gcc/fortran/gfortranspec.cc
! 97f68911dc79e4809e6107ec13390bf9  gcc/fortran/interface.cc
  fa6aa4009c0eec8232b24902c6900993  gcc/fortran/intrinsic.cc
  d9000cac276ba162b0a7fcc76c6f8be0  gcc/fortran/intrinsic.h
  9c38010b39eaa7dc10c02b510ddd4d20  gcc/fortran/intrinsic.texi
  211ec2a87dfb468db93dc18be3821b87  gcc/fortran/invoke.texi
  e25a04efa7ac5e920a21a383235da157  gcc/fortran/io.cc
  1b49007c5da8e0831c984754f0905035  gcc/fortran/ioparm.def
! 7c421af00835ab55bc57af498f8f2212  gcc/fortran/iresolve.cc
  ad808a3e3c725da4d83aa2253f4b6bc3  gcc/fortran/iso-c-binding.def
  d2a4c5315fb086aeaa125c4b2829a29f  gcc/fortran/iso-fortran-env.def
  5659bf0ae0187cfd21cd8f599d82f98d  gcc/fortran/lang-specs.h
  92cf8f5887329d298f04e41b7fd4b780  gcc/fortran/lang.opt
  dfe2708ae1610f0355d4e3f64825ed31  gcc/fortran/libgfortran.h
  f820f80f97ddcdeff771996b47adc742  gcc/fortran/match.cc
! a91d0fda9651b722ffd4fb160f95378a  gcc/fortran/match.h
  38fc5448e9ea8b828a44496034ac708e  gcc/fortran/matchexp.cc
  540b2df11e809f8e922d0bc5b5562d6b  gcc/fortran/mathbuiltins.def
  7d747e480d55c8abf8c69b45a4d2b572  gcc/fortran/misc.cc
*************** c310fb2cf5f2bb20fbf7f911e7a5b2cc  gcc/fo
*** 5677,5704 ****
  47d8fa5113c1f84c750b8fa73bbc5cfa  gcc/fortran/options.cc
  05417d717e262d61c78b736bc93c703d  gcc/fortran/parse.cc
  b07d21325e9bf64201a6131a3dacb9e2  gcc/fortran/parse.h
! 2b974d4b3c5e51da1bf6264790eda9b8  gcc/fortran/primary.cc
! b96796a2a7ec4e1b298aba9b2cdabc19  gcc/fortran/resolve.cc
  4c64219f591caa92c353a8d113120d87  gcc/fortran/scanner.cc
  0ea05c5f1f9c27f26a76525f5eed9380  gcc/fortran/scanner.h
! 8db2f33af4904b48c239e7b4e2bb147b  gcc/fortran/simplify.cc
  72519934fee840610460010d9b5e0503  gcc/fortran/st.cc
  b51ee6b2a9e4f3e8bf69662f69c8f23c  gcc/fortran/symbol.cc
  e99e43daa5fef5f3d2c6dce6be81a683  gcc/fortran/target-memory.cc
  70445c82cc8c84eb76adf2a52acad00d  gcc/fortran/target-memory.h
! 3030726083eec0092ff22a46e78d484b  gcc/fortran/trans-array.cc
  23946ddd5d17c204402c44a0b9a00d75  gcc/fortran/trans-array.h
  4c2eb969dbee5d6b83074ed09773b70b  gcc/fortran/trans-common.cc
  45ab297b0b34853431ed0f3c09a63db3  gcc/fortran/trans-const.cc
  2825c959ade33ef2a6492d640b05ef8c  gcc/fortran/trans-const.h
! 7c67a63f4b154b22cb30dea7903ab085  gcc/fortran/trans-decl.cc
! 1e27e2b7f34bbaece225b1b9887bc062  gcc/fortran/trans-expr.cc
! 2e6639a9d74a8323454f86e6150b460b  gcc/fortran/trans-intrinsic.cc
  c2777cd0e39ba69462f4cf01549e1001  gcc/fortran/trans-io.cc
  4100e048c21085f4f2f9bdb70f4e29a2  gcc/fortran/trans-openmp.cc
! 4fc2017b5296f4ee5fcbacb1b423c38b  gcc/fortran/trans-stmt.cc
  61675b3c591abd1d33f4d00338f84245  gcc/fortran/trans-stmt.h
! 2e87ee62588873ae7af554ee838b4eaf  gcc/fortran/trans-types.cc
  5581dfe9c36f8428667284c49aa3d0a8  gcc/fortran/trans-types.h
  78b4a00c913f103a3f3d18c8c181efd9  gcc/fortran/trans.cc
  f816175a2ce44db1f8492faf3a65da0d  gcc/fortran/trans.h
--- 5687,5714 ----
  47d8fa5113c1f84c750b8fa73bbc5cfa  gcc/fortran/options.cc
  05417d717e262d61c78b736bc93c703d  gcc/fortran/parse.cc
  b07d21325e9bf64201a6131a3dacb9e2  gcc/fortran/parse.h
! 1f61601d93e03a871f0903165ed660ad  gcc/fortran/primary.cc
! 209042c6f306fb2591745a1d48a78c8f  gcc/fortran/resolve.cc
  4c64219f591caa92c353a8d113120d87  gcc/fortran/scanner.cc
  0ea05c5f1f9c27f26a76525f5eed9380  gcc/fortran/scanner.h
! d7be9766180ba9d84c17fe538c02907f  gcc/fortran/simplify.cc
  72519934fee840610460010d9b5e0503  gcc/fortran/st.cc
  b51ee6b2a9e4f3e8bf69662f69c8f23c  gcc/fortran/symbol.cc
  e99e43daa5fef5f3d2c6dce6be81a683  gcc/fortran/target-memory.cc
  70445c82cc8c84eb76adf2a52acad00d  gcc/fortran/target-memory.h
! b16988fb11ef93959450cfdd9eaa8825  gcc/fortran/trans-array.cc
  23946ddd5d17c204402c44a0b9a00d75  gcc/fortran/trans-array.h
  4c2eb969dbee5d6b83074ed09773b70b  gcc/fortran/trans-common.cc
  45ab297b0b34853431ed0f3c09a63db3  gcc/fortran/trans-const.cc
  2825c959ade33ef2a6492d640b05ef8c  gcc/fortran/trans-const.h
! c15bfe2308615f6c0395efd6cdf7a3ae  gcc/fortran/trans-decl.cc
! db3105c2b544e19c5f87f1fc6165b7c0  gcc/fortran/trans-expr.cc
! 270fb3d641aa95f5ab3435bcf555d167  gcc/fortran/trans-intrinsic.cc
  c2777cd0e39ba69462f4cf01549e1001  gcc/fortran/trans-io.cc
  4100e048c21085f4f2f9bdb70f4e29a2  gcc/fortran/trans-openmp.cc
! 8c36caba9ba82554a7f97e56b2a48d63  gcc/fortran/trans-stmt.cc
  61675b3c591abd1d33f4d00338f84245  gcc/fortran/trans-stmt.h
! fc8598d1cff8fe85c82eb15bd14d186b  gcc/fortran/trans-types.cc
  5581dfe9c36f8428667284c49aa3d0a8  gcc/fortran/trans-types.h
  78b4a00c913f103a3f3d18c8c181efd9  gcc/fortran/trans.cc
  f816175a2ce44db1f8492faf3a65da0d  gcc/fortran/trans.h
*************** bae9bee7bfae062bb68f7c3b8d6acdb0  gcc/fo
*** 5708,5714 ****
  5a80a7008007e116025a7a3c9796fdc0  gcc/function-abi.cc
  3a145e6b7f87c4e84c84bbb84f77d201  gcc/function-abi.h
  9d3f4e62a09a4f1b7e01c2611985469b  gcc/function-tests.cc
! 0362ec62bbba4b7c063ed14ebfc3e29a  gcc/function.cc
  26caa4b20f75c2eb576da5bea538a2bc  gcc/function.h
  97522e4b206b460428df4f324aa88fe4  gcc/fwprop.cc
  8b44f92603525757cdb88056f5f18ca2  gcc/gcc-ar.cc
--- 5718,5724 ----
  5a80a7008007e116025a7a3c9796fdc0  gcc/function-abi.cc
  3a145e6b7f87c4e84c84bbb84f77d201  gcc/function-abi.h
  9d3f4e62a09a4f1b7e01c2611985469b  gcc/function-tests.cc
! dc0db54f4e74be29d19799f88ed3a0f9  gcc/function.cc
  26caa4b20f75c2eb576da5bea538a2bc  gcc/function.h
  97522e4b206b460428df4f324aa88fe4  gcc/fwprop.cc
  8b44f92603525757cdb88056f5f18ca2  gcc/gcc-ar.cc
*************** bae9bee7bfae062bb68f7c3b8d6acdb0  gcc/fo
*** 5717,5723 ****
  c1a2319dd98fbb3cf4d0f1bc3bd9411d  gcc/gcc-rich-location.cc
  311b586e10061aa51fe4a5104b704149  gcc/gcc-rich-location.h
  d0550adc071932f54b7e84efcf70390f  gcc/gcc-symtab.h
! 593b02fa14d7eeebe3b683e93b2228e2  gcc/gcc.cc
  ffa75db321d301638c5a896b4a82acb0  gcc/gcc.h
  2d213a0bc44c748c31a963119269ec27  gcc/gcov-counter.def
  21a831f5ad30a77681f463ffb6778855  gcc/gcov-dump.cc
--- 5727,5733 ----
  c1a2319dd98fbb3cf4d0f1bc3bd9411d  gcc/gcc-rich-location.cc
  311b586e10061aa51fe4a5104b704149  gcc/gcc-rich-location.h
  d0550adc071932f54b7e84efcf70390f  gcc/gcc-symtab.h
! 88524106b4009ebb6bfa3d080102658c  gcc/gcc.cc
  ffa75db321d301638c5a896b4a82acb0  gcc/gcc.h
  2d213a0bc44c748c31a963119269ec27  gcc/gcov-counter.def
  21a831f5ad30a77681f463ffb6778855  gcc/gcov-dump.cc
*************** ded5ec60ebdb05bebcfc3e1e29738ff1  gcc/ge
*** 5736,5742 ****
  32694c1fab4d6999b237e60631242209  gcc/genattr-common.cc
  fbf24911aa41bb149b45c91aca3c9919  gcc/genattr.cc
  2504227e2763bbdef5a8414d22894951  gcc/genattrtab.cc
! 03df20173faf9f2be4993619d9461aad  gcc/genautomata.cc
  e83d5121aed1484b28a27fb9beb475b7  gcc/gencfn-macros.cc
  187fd832a68e96b8341cf58b74deefc9  gcc/gencheck.cc
  8bdfd96e35a0803ec2371e14bd280bac  gcc/genchecksum.cc
--- 5746,5752 ----
  32694c1fab4d6999b237e60631242209  gcc/genattr-common.cc
  fbf24911aa41bb149b45c91aca3c9919  gcc/genattr.cc
  2504227e2763bbdef5a8414d22894951  gcc/genattrtab.cc
! 1b05f6cb2280bb75490385321280ee22  gcc/genautomata.cc
  e83d5121aed1484b28a27fb9beb475b7  gcc/gencfn-macros.cc
  187fd832a68e96b8341cf58b74deefc9  gcc/gencheck.cc
  8bdfd96e35a0803ec2371e14bd280bac  gcc/genchecksum.cc
*************** dd957e5f5e732e49835454d18d409c43  gcc/ge
*** 5751,5757 ****
  7a825a2d078d154675036b7133c6816a  gcc/genextract.cc
  7dc273587dd4838a57817b211ad1f139  gcc/genflags.cc
  b6fd297a00cab6b8993690131bc4c0f7  gcc/gengenrtl.cc
! 8b97ff86414cbc89bb60b38c55b77632  gcc/gengtype-lex.cc
  ff24fa6416a039455ff62a41252d6f7b  gcc/gengtype-lex.l
  91e7a263b28c131771f0c6463ebb1bcb  gcc/gengtype-parse.cc
  433b94a87abdc5536d0c8d2b097cb669  gcc/gengtype-state.cc
--- 5761,5767 ----
  7a825a2d078d154675036b7133c6816a  gcc/genextract.cc
  7dc273587dd4838a57817b211ad1f139  gcc/genflags.cc
  b6fd297a00cab6b8993690131bc4c0f7  gcc/gengenrtl.cc
! 9a796a13fcb7a64a6f9ae52ede4ffbca  gcc/gengtype-lex.cc
  ff24fa6416a039455ff62a41252d6f7b  gcc/gengtype-lex.l
  91e7a263b28c131771f0c6463ebb1bcb  gcc/gengtype-parse.cc
  433b94a87abdc5536d0c8d2b097cb669  gcc/gengtype-state.cc
*************** ccc5711ecd52f17d0dc04a5cd9ead00c  gcc/gg
*** 5782,5790 ****
  0e5407e2356362d7df736b05dd2f4438  gcc/gimple-array-bounds.h
  db0ccc0edfede8aba0098ae504276e86  gcc/gimple-builder.cc
  2e82b4bd416d82267e23cfb6b62145d3  gcc/gimple-builder.h
! e634f1d7185ba18b7409d0caf5dda150  gcc/gimple-expr.cc
  029271620b653993e15dfe20ddd2d37b  gcc/gimple-expr.h
! 5d5d242e64ed174aa6bbfaac6418ca3c  gcc/gimple-fold.cc
  9a9d95793deb7de9860fc0d1215b3390  gcc/gimple-fold.h
  7cf98e471595ea406079ac821d418500  gcc/gimple-harden-conditionals.cc
  ab5c0e8e80c5a594037aa3a03ad791c9  gcc/gimple-if-to-switch.cc
--- 5792,5800 ----
  0e5407e2356362d7df736b05dd2f4438  gcc/gimple-array-bounds.h
  db0ccc0edfede8aba0098ae504276e86  gcc/gimple-builder.cc
  2e82b4bd416d82267e23cfb6b62145d3  gcc/gimple-builder.h
! dcb207c1736268c66a622256d89d2336  gcc/gimple-expr.cc
  029271620b653993e15dfe20ddd2d37b  gcc/gimple-expr.h
! 0d4a2f003e7841c11e2a6c1b5e122669  gcc/gimple-fold.cc
  9a9d95793deb7de9860fc0d1215b3390  gcc/gimple-fold.h
  7cf98e471595ea406079ac821d418500  gcc/gimple-harden-conditionals.cc
  ab5c0e8e80c5a594037aa3a03ad791c9  gcc/gimple-if-to-switch.cc
*************** af0a5d375973bf0c61c83fe07c8953f2  gcc/gi
*** 5793,5803 ****
  348a424f3832c9ef4a35f364e4b74bf7  gcc/gimple-iterator.h
  9cb5accb4acfb52a12c188eb63da85aa  gcc/gimple-laddress.cc
  72e941e28563893bc3e6b2d86bcd8154  gcc/gimple-loop-interchange.cc
! 98ac4e2d69f0aa03e94034e43fa19b9c  gcc/gimple-loop-jam.cc
  4b9a3d495fb62afd583b19545c823417  gcc/gimple-loop-versioning.cc
  8c3fc8717df932de0ab2cf09c217d48d  gcc/gimple-low.cc
  f56d763b660a3269a8502a8976fb3400  gcc/gimple-low.h
! 2d81bba48eca8d323f007776e1865490  gcc/gimple-match-head.cc
  81662d1e70874dc5ddebb9cab55de6d7  gcc/gimple-match.h
  6c960fed3fd6e72de3db49e275f38177  gcc/gimple-predicate-analysis.cc
  9d5e6300c4a359fcde1abf212245eb5d  gcc/gimple-predicate-analysis.h
--- 5803,5813 ----
  348a424f3832c9ef4a35f364e4b74bf7  gcc/gimple-iterator.h
  9cb5accb4acfb52a12c188eb63da85aa  gcc/gimple-laddress.cc
  72e941e28563893bc3e6b2d86bcd8154  gcc/gimple-loop-interchange.cc
! 4b4b925935221f88c633e5898b5b3637  gcc/gimple-loop-jam.cc
  4b9a3d495fb62afd583b19545c823417  gcc/gimple-loop-versioning.cc
  8c3fc8717df932de0ab2cf09c217d48d  gcc/gimple-low.cc
  f56d763b660a3269a8502a8976fb3400  gcc/gimple-low.h
! 3c3436918a06fbe6acf3b5fe663cb0e2  gcc/gimple-match-head.cc
  81662d1e70874dc5ddebb9cab55de6d7  gcc/gimple-match.h
  6c960fed3fd6e72de3db49e275f38177  gcc/gimple-predicate-analysis.cc
  9d5e6300c4a359fcde1abf212245eb5d  gcc/gimple-predicate-analysis.h
*************** c006b7e8bf1d5bbb53532c7d765a7b5b  gcc/gi
*** 5806,5815 ****
  1f6de5d464fb403c0d90293d38ac4e28  gcc/gimple-pretty-print.h
  a11dc84518ffe22131bef7c5c59fb394  gcc/gimple-range-cache.cc
  cd5746fe031b5d538b360fa10b1d17af  gcc/gimple-range-cache.h
! b25199c5ed0e508a53d8475feccb5c61  gcc/gimple-range-edge.cc
  63552731dc609ddfd75542482f4ac3f9  gcc/gimple-range-edge.h
! 026c72667bfbb609f4eb2edd688d7f93  gcc/gimple-range-fold.cc
! 80a33f217a8462e04c962982e13c342f  gcc/gimple-range-fold.h
  630825f89ae6bad2278bb7f7782a3d83  gcc/gimple-range-gori.cc
  83fa369894ed79484edcd88e46e5ff5d  gcc/gimple-range-gori.h
  7b1dc20ba60b4caa74daea9f1f124b18  gcc/gimple-range-infer.cc
--- 5816,5825 ----
  1f6de5d464fb403c0d90293d38ac4e28  gcc/gimple-pretty-print.h
  a11dc84518ffe22131bef7c5c59fb394  gcc/gimple-range-cache.cc
  cd5746fe031b5d538b360fa10b1d17af  gcc/gimple-range-cache.h
! e9fa223929f8020fb122ede18c383ffa  gcc/gimple-range-edge.cc
  63552731dc609ddfd75542482f4ac3f9  gcc/gimple-range-edge.h
! e4f0c00a688b3744a867a1aabeee69fb  gcc/gimple-range-fold.cc
! 91c4c0f1e668a1c3844c18cf84d74fce  gcc/gimple-range-fold.h
  630825f89ae6bad2278bb7f7782a3d83  gcc/gimple-range-gori.cc
  83fa369894ed79484edcd88e46e5ff5d  gcc/gimple-range-gori.h
  7b1dc20ba60b4caa74daea9f1f124b18  gcc/gimple-range-infer.cc
*************** e29891d13b0ac2e960cac756204b9b46  gcc/gi
*** 5821,5836 ****
  a03b4f17862e24c25dc27bd52bf6e4c9  gcc/gimple-range-tests.cc
  1d284fef5facc9d3af2d9f27e0a7939b  gcc/gimple-range-trace.cc
  7a8faab9d11d2332278fc21791ee0b3e  gcc/gimple-range-trace.h
! dfa9268a94fe4ee9bba75c8c97f0200d  gcc/gimple-range.cc
! 0976244211621a90be645055605c6daf  gcc/gimple-range.h
! 60792107cb2744e47a67954a1847be2c  gcc/gimple-ssa-backprop.cc
! b3178e7dacab1eeef6f1baaa46a35607  gcc/gimple-ssa-isolate-paths.cc
  749a81e49450342357c075a9b79b8992  gcc/gimple-ssa-nonnull-compare.cc
  11b5e3a1e0c7638d90da5ecf2cdb04e3  gcc/gimple-ssa-split-paths.cc
  e6db658fd173ce4a9dd146d9a796e834  gcc/gimple-ssa-sprintf.cc
! e016c0710a12273d8b8fb58a8e6c0fac  gcc/gimple-ssa-store-merging.cc
! feb1e49f3049b5493cdc6992e835aac8  gcc/gimple-ssa-strength-reduction.cc
! 7b585ce00bb241b37688fa2707dbf689  gcc/gimple-ssa-warn-access.cc
  5552bbd93405fe7df3168326c4937c69  gcc/gimple-ssa-warn-access.h
  9d79faa40edf139ffdf7d68d1537b0a0  gcc/gimple-ssa-warn-alloca.cc
  40441da7b03d2997dffa1122ded5e2f4  gcc/gimple-ssa-warn-restrict.cc
--- 5831,5846 ----
  a03b4f17862e24c25dc27bd52bf6e4c9  gcc/gimple-range-tests.cc
  1d284fef5facc9d3af2d9f27e0a7939b  gcc/gimple-range-trace.cc
  7a8faab9d11d2332278fc21791ee0b3e  gcc/gimple-range-trace.h
! 5d089e48413b174d906755a37859dc74  gcc/gimple-range.cc
! d3d0bf916b0feeb213e0d274c25a85c9  gcc/gimple-range.h
! 09f02da5a2f5cbc14b2967c94d2c1697  gcc/gimple-ssa-backprop.cc
! 8d00f32ff8f171436e955a222205301e  gcc/gimple-ssa-isolate-paths.cc
  749a81e49450342357c075a9b79b8992  gcc/gimple-ssa-nonnull-compare.cc
  11b5e3a1e0c7638d90da5ecf2cdb04e3  gcc/gimple-ssa-split-paths.cc
  e6db658fd173ce4a9dd146d9a796e834  gcc/gimple-ssa-sprintf.cc
! 2473bab77546000ea6e8282364c009c6  gcc/gimple-ssa-store-merging.cc
! 4876a8cfb95480a27303d812e0e3c9c8  gcc/gimple-ssa-strength-reduction.cc
! a112e9722329de5148a24ed9b52f338f  gcc/gimple-ssa-warn-access.cc
  5552bbd93405fe7df3168326c4937c69  gcc/gimple-ssa-warn-access.h
  9d79faa40edf139ffdf7d68d1537b0a0  gcc/gimple-ssa-warn-alloca.cc
  40441da7b03d2997dffa1122ded5e2f4  gcc/gimple-ssa-warn-restrict.cc
*************** cdca7003d337efe5219b5d19f7155bc8  gcc/gi
*** 5847,5853 ****
  bb54e7f3ff9957dcf7b1b10fcd527797  gcc/gimple.h
  839b10eca81556c0515395365235a888  gcc/gimplify-me.cc
  0a4464e175c1aed6501ea243476b7c6d  gcc/gimplify-me.h
! d09325a19778a77fd47f9d4f6d621949  gcc/gimplify.cc
  d0042a88c5e87b0904397052ddc6c33a  gcc/gimplify.h
  02d1486ff7d3d34b7868801df9534c0e  gcc/ginclude/float.h
  b0ab9b7ae13d3afe6cdbfc24425a93fe  gcc/ginclude/iso646.h
--- 5857,5863 ----
  bb54e7f3ff9957dcf7b1b10fcd527797  gcc/gimple.h
  839b10eca81556c0515395365235a888  gcc/gimplify-me.cc
  0a4464e175c1aed6501ea243476b7c6d  gcc/gimplify-me.h
! 61549cdc6e1dd28cded29325e40de7b4  gcc/gimplify.cc
  d0042a88c5e87b0904397052ddc6c33a  gcc/gimplify.h
  02d1486ff7d3d34b7868801df9534c0e  gcc/ginclude/float.h
  b0ab9b7ae13d3afe6cdbfc24425a93fe  gcc/ginclude/iso646.h
*************** c8899b06ef78a5999996cf52cd344c91  gcc/gi
*** 5855,5861 ****
  9eb2d2dee513b57d67037d86d49ddf4e  gcc/ginclude/stdarg.h
  280375b0549a5bb8e2f366a4c8e1a45f  gcc/ginclude/stdatomic.h
  80a9c1aa0fa71b8fa9412be8589c4794  gcc/ginclude/stdbool.h
! 00b3c045a13f7594b628c670532dde1e  gcc/ginclude/stddef.h
  9f63387ae6ceb7b7baad05091512a829  gcc/ginclude/stdfix.h
  b62976756703b087708c4f6915eb8ff7  gcc/ginclude/stdint-gcc.h
  f85aa0745c3e9e0d32fa64753089b2f1  gcc/ginclude/stdint-wrap.h
--- 5865,5871 ----
  9eb2d2dee513b57d67037d86d49ddf4e  gcc/ginclude/stdarg.h
  280375b0549a5bb8e2f366a4c8e1a45f  gcc/ginclude/stdatomic.h
  80a9c1aa0fa71b8fa9412be8589c4794  gcc/ginclude/stdbool.h
! 32a1e0fe3be54d50e556383673edb26f  gcc/ginclude/stddef.h
  9f63387ae6ceb7b7baad05091512a829  gcc/ginclude/stdfix.h
  b62976756703b087708c4f6915eb8ff7  gcc/ginclude/stdint-gcc.h
  f85aa0745c3e9e0d32fa64753089b2f1  gcc/ginclude/stdint-wrap.h
*************** d805766cac737a191548368792524f9d  gcc/gi
*** 5864,5870 ****
  c92410f8fdb1cb95371b72c53ad55b5f  gcc/ginclude/unwind-arm-common.h
  8d9ecf0d6ef93c79623ce1d27a32a2cb  gcc/ginclude/varargs.h
  5a3af36f882f0b8588bf6b6d2a2dd6d4  gcc/glimits.h
! 1b82181bc560a382fd0818a6c6480543  gcc/go/ChangeLog
  1e68fc87619f2cd82132ed974cbcea92  gcc/go/Make-lang.in
  60ea054548c83c7f66170073f9f3e74c  gcc/go/README.gcc
  401d2277f19452f5b013534ed200a591  gcc/go/config-lang.in
--- 5874,5880 ----
  c92410f8fdb1cb95371b72c53ad55b5f  gcc/ginclude/unwind-arm-common.h
  8d9ecf0d6ef93c79623ce1d27a32a2cb  gcc/ginclude/varargs.h
  5a3af36f882f0b8588bf6b6d2a2dd6d4  gcc/glimits.h
! 6203700585b0aeb810914a5e9db364ca  gcc/go/ChangeLog
  1e68fc87619f2cd82132ed974cbcea92  gcc/go/Make-lang.in
  60ea054548c83c7f66170073f9f3e74c  gcc/go/README.gcc
  401d2277f19452f5b013534ed200a591  gcc/go/config-lang.in
*************** c12e2732707baf23e73a14d0b1b36dfd  gcc/in
*** 5985,6006 ****
  b604200ebd6bbb8075a58d20d96105e3  gcc/intl.cc
  2086a023243c1aeb61f8be26da7a72ad  gcc/intl.h
  f1c9645780e7d29c2d852ae147ef5d45  gcc/ipa-comdats.cc
! 5f572d6d715e1266d0bf058b735c3ec9  gcc/ipa-cp.cc
  55517140580887ca4deb8ce1e0321892  gcc/ipa-devirt.cc
! d454148b5247b81f13abdb82a69ea474  gcc/ipa-fnsummary.cc
  fb25c569d03784bece5c17aaaaa369c5  gcc/ipa-fnsummary.h
! 1101fd17ebb3014a7be788f45a328e40  gcc/ipa-free-lang-data.cc
! 6d21fe3817cab8b23c5fdb962ada6b28  gcc/ipa-icf-gimple.cc
  28a91c6a01875186812f053d31eef509  gcc/ipa-icf-gimple.h
  823b6616f611d67125e534b93e42a321  gcc/ipa-icf.cc
  7ff31fb3ed107fddec8cfac0849344d3  gcc/ipa-icf.h
  104e82a0a369ff3f6b580044a153fe82  gcc/ipa-inline-analysis.cc
  fc07475faa73a53e202938a58e7cac70  gcc/ipa-inline-transform.cc
! cd174164366ec63306585c2d13efcc1b  gcc/ipa-inline.cc
  d4b7959c20a98ff6f25372701739be82  gcc/ipa-inline.h
  bf2c8193144d067992fafe66ec1b66c4  gcc/ipa-modref-tree.cc
  c4370973ef8ca23676e8dd1782308f9c  gcc/ipa-modref-tree.h
! 2e9275d14ba42dd0fae6f51aa0afb13e  gcc/ipa-modref.cc
  b2fae5a0c725823232307d1ff107c412  gcc/ipa-modref.h
  f73a29a76199a719eea19b3d53ed26fe  gcc/ipa-param-manipulation.cc
  0a0833ceaf3d91577600c81d30513737  gcc/ipa-param-manipulation.h
--- 5995,6016 ----
  b604200ebd6bbb8075a58d20d96105e3  gcc/intl.cc
  2086a023243c1aeb61f8be26da7a72ad  gcc/intl.h
  f1c9645780e7d29c2d852ae147ef5d45  gcc/ipa-comdats.cc
! 91346ff57f1624cfcd802a92dface4d8  gcc/ipa-cp.cc
  55517140580887ca4deb8ce1e0321892  gcc/ipa-devirt.cc
! c8ce953e3c995ecf84e97c4c93a60807  gcc/ipa-fnsummary.cc
  fb25c569d03784bece5c17aaaaa369c5  gcc/ipa-fnsummary.h
! 8cb456bc5fdebef942016d07fbb2aead  gcc/ipa-free-lang-data.cc
! c285e2b415ea9b947136052a74dc4d82  gcc/ipa-icf-gimple.cc
  28a91c6a01875186812f053d31eef509  gcc/ipa-icf-gimple.h
  823b6616f611d67125e534b93e42a321  gcc/ipa-icf.cc
  7ff31fb3ed107fddec8cfac0849344d3  gcc/ipa-icf.h
  104e82a0a369ff3f6b580044a153fe82  gcc/ipa-inline-analysis.cc
  fc07475faa73a53e202938a58e7cac70  gcc/ipa-inline-transform.cc
! b66a71357a6149335f63d1d38da0ff9f  gcc/ipa-inline.cc
  d4b7959c20a98ff6f25372701739be82  gcc/ipa-inline.h
  bf2c8193144d067992fafe66ec1b66c4  gcc/ipa-modref-tree.cc
  c4370973ef8ca23676e8dd1782308f9c  gcc/ipa-modref-tree.h
! 5a78fdd6a39f4b401e23ae691ae39080  gcc/ipa-modref.cc
  b2fae5a0c725823232307d1ff107c412  gcc/ipa-modref.h
  f73a29a76199a719eea19b3d53ed26fe  gcc/ipa-param-manipulation.cc
  0a0833ceaf3d91577600c81d30513737  gcc/ipa-param-manipulation.h
*************** f73a29a76199a719eea19b3d53ed26fe  gcc/ip
*** 6008,6014 ****
  eeca019a2a20494b0c27fccd9ffa6e38  gcc/ipa-predicate.cc
  a37e46df93e9fdd5778f6c479d45c848  gcc/ipa-predicate.h
  d333e55ebff3f204e5c62a9f85f0b960  gcc/ipa-profile.cc
! c4f30545b16d1c72736b320f0d062b73  gcc/ipa-prop.cc
  acd05e664b9af90b895688a1182659f3  gcc/ipa-prop.h
  f5f5042251c5cf364068ae7041d1f402  gcc/ipa-pure-const.cc
  fea3656d7117f5bd9eb678ce7031b9cb  gcc/ipa-ref.cc
--- 6018,6024 ----
  eeca019a2a20494b0c27fccd9ffa6e38  gcc/ipa-predicate.cc
  a37e46df93e9fdd5778f6c479d45c848  gcc/ipa-predicate.h
  d333e55ebff3f204e5c62a9f85f0b960  gcc/ipa-profile.cc
! 136450610888883fb960790aeefad29d  gcc/ipa-prop.cc
  acd05e664b9af90b895688a1182659f3  gcc/ipa-prop.h
  f5f5042251c5cf364068ae7041d1f402  gcc/ipa-pure-const.cc
  fea3656d7117f5bd9eb678ce7031b9cb  gcc/ipa-ref.cc
*************** fea3656d7117f5bd9eb678ce7031b9cb  gcc/ip
*** 6016,6025 ****
  af7c79ee2c4119a45f7424269eeca17b  gcc/ipa-reference.cc
  854b54fd489dd96b9961e88be7f7b919  gcc/ipa-reference.h
  a868c75269d9dc9bcba5914603a445ca  gcc/ipa-split.cc
! 97c5cc7be6819135f3f460054fcef2a9  gcc/ipa-sra.cc
  0dd8ceab6156d8ec5c11a356a7810a6b  gcc/ipa-utils.cc
  9ba52d14c04352d1812510443e99efb6  gcc/ipa-utils.h
! 511f62c5d61101a088f6bf207caf3ba6  gcc/ipa-visibility.cc
  b7f8dfd9aa35c133f2d21657d28f5a45  gcc/ipa.cc
  6d8d0cb2c168378bf014af9d08fcbe4f  gcc/ira-build.cc
  918e14fe87dd453fa60668415bbcbcb8  gcc/ira-color.cc
--- 6026,6035 ----
  af7c79ee2c4119a45f7424269eeca17b  gcc/ipa-reference.cc
  854b54fd489dd96b9961e88be7f7b919  gcc/ipa-reference.h
  a868c75269d9dc9bcba5914603a445ca  gcc/ipa-split.cc
! d80f9c8edb74d6839485db7bbe58482f  gcc/ipa-sra.cc
  0dd8ceab6156d8ec5c11a356a7810a6b  gcc/ipa-utils.cc
  9ba52d14c04352d1812510443e99efb6  gcc/ipa-utils.h
! 85c5816c9e80f5ed3eb8e120c35b720f  gcc/ipa-visibility.cc
  b7f8dfd9aa35c133f2d21657d28f5a45  gcc/ipa.cc
  6d8d0cb2c168378bf014af9d08fcbe4f  gcc/ira-build.cc
  918e14fe87dd453fa60668415bbcbcb8  gcc/ira-color.cc
*************** ca3aaf780b4820c2efb4f99d452eafb2  gcc/ir
*** 6032,6038 ****
  daec5f5daeb40974ee5715d87b784866  gcc/ira.h
  794ab6840c05630c3df07341a0f339e5  gcc/is-a.h
  83fa9cced7fd3d64ba760bf4dd2f1414  gcc/iterator-utils.h
! 2fd767b08ca052b06846382ea144dac5  gcc/jit/ChangeLog
  6071bdf04fb356c5ac99a99ec00c9a12  gcc/jit/ChangeLog.jit
  297d5dd1b72e4324f8859997ca274f56  gcc/jit/Make-lang.in
  fd0d76b6467c987f813d430a35d4760a  gcc/jit/TODO.rst
--- 6042,6048 ----
  daec5f5daeb40974ee5715d87b784866  gcc/ira.h
  794ab6840c05630c3df07341a0f339e5  gcc/is-a.h
  83fa9cced7fd3d64ba760bf4dd2f1414  gcc/iterator-utils.h
! 6b1e133408909c685e7be1511d339d00  gcc/jit/ChangeLog
  6071bdf04fb356c5ac99a99ec00c9a12  gcc/jit/ChangeLog.jit
  297d5dd1b72e4324f8859997ca274f56  gcc/jit/Make-lang.in
  fd0d76b6467c987f813d430a35d4760a  gcc/jit/TODO.rst
*************** c4c7449278cafbafd910adefcb0538cb  gcc/ji
*** 6103,6113 ****
  6818dd9f17ca0afc1dd95badbc645ea9  gcc/jit/jit-dejagnu.h
  35586f69ac552479fa52d7c485d52bcf  gcc/jit/jit-logging.cc
  5aa44993b9fb9a380da286eaf9a52748  gcc/jit/jit-logging.h
! 7c9079754b3b27f9bfff94b5bfcb298f  gcc/jit/jit-playback.cc
  206bd9ef117c6b84ffd9e2de4b9f54c2  gcc/jit/jit-playback.h
! c596b3ad840027db86b407ecb6a88b69  gcc/jit/jit-recording.cc
  79c47ba6c9a2ba79c33c88c791e3e465  gcc/jit/jit-recording.h
! f39a4947637d7dbbad4e6871f9a348df  gcc/jit/jit-result.cc
  1f767b235b0f89c05295b429bd1720ba  gcc/jit/jit-result.h
  cde64615a5920a7cc57e007b61e670b9  gcc/jit/jit-spec.cc
  1643978a06c78212047af3717e00baef  gcc/jit/jit-tempdir.cc
--- 6113,6123 ----
  6818dd9f17ca0afc1dd95badbc645ea9  gcc/jit/jit-dejagnu.h
  35586f69ac552479fa52d7c485d52bcf  gcc/jit/jit-logging.cc
  5aa44993b9fb9a380da286eaf9a52748  gcc/jit/jit-logging.h
! 291d6783db40f11f5fe5b4178efc89c6  gcc/jit/jit-playback.cc
  206bd9ef117c6b84ffd9e2de4b9f54c2  gcc/jit/jit-playback.h
! ce36971d15ef90360dd830fd92e9f446  gcc/jit/jit-recording.cc
  79c47ba6c9a2ba79c33c88c791e3e465  gcc/jit/jit-recording.h
! 61599412bcd4905ee01deebeead2c4ca  gcc/jit/jit-result.cc
  1f767b235b0f89c05295b429bd1720ba  gcc/jit/jit-result.h
  cde64615a5920a7cc57e007b61e670b9  gcc/jit/jit-spec.cc
  1643978a06c78212047af3717e00baef  gcc/jit/jit-tempdir.cc
*************** e2c2b4c29dd562166e457ad5cd9d3ab4  gcc/lc
*** 6134,6140 ****
  472fea06d68ad0de5d8fdfae7873bc63  gcc/lists.cc
  30b8e3e407f46ad2cb39260ec4bab9f6  gcc/lock-and-run.sh
  86c53cb5fd2a7a7b0267db043ad0c017  gcc/logical-location.h
! 2c32d851483812d59cb183c0f6452ee0  gcc/loop-doloop.cc
  859d2f097f5e034fbcf23370c719eaad  gcc/loop-init.cc
  2cc756bec31fac101c34285d0717832f  gcc/loop-invariant.cc
  4c49af76db981526de035551f5c2745d  gcc/loop-iv.cc
--- 6144,6150 ----
  472fea06d68ad0de5d8fdfae7873bc63  gcc/lists.cc
  30b8e3e407f46ad2cb39260ec4bab9f6  gcc/lock-and-run.sh
  86c53cb5fd2a7a7b0267db043ad0c017  gcc/logical-location.h
! d8c6b901b6d59d107650e3cc3a31f0a2  gcc/loop-doloop.cc
  859d2f097f5e034fbcf23370c719eaad  gcc/loop-init.cc
  2cc756bec31fac101c34285d0717832f  gcc/loop-invariant.cc
  4c49af76db981526de035551f5c2745d  gcc/loop-iv.cc
*************** e7abca99420529cfac5bbb1e0273dc1b  gcc/lr
*** 6148,6161 ****
  770e42213cbcd993a445bee76524f8eb  gcc/lra-eliminations.cc
  7c8aeab71bcfacb356aecdcdb7762210  gcc/lra-int.h
  399337ad638584d9290158ea06d18de8  gcc/lra-lives.cc
! bc8532df35c2dd9a4e262d85ed29ffd4  gcc/lra-remat.cc
  f29a4612195d306e5b22fd456cfb2a91  gcc/lra-spills.cc
  292ab755fb0b9a22616cefeb10633fff  gcc/lra.cc
  e39f5642047f20c01157ff09360cf476  gcc/lra.h
! 3c0fc2beeb57bc91017e1ef0252f0c2f  gcc/lto-cgraph.cc
  6fc03350ec53f915e1e4e39ca5122e10  gcc/lto-compress.cc
  838379d3b336c074b7a518024dfc1524  gcc/lto-compress.h
! fe456b00f469a6237ac21a07bf3791a8  gcc/lto-opts.cc
  862eb9c06442298e051e94342486f26e  gcc/lto-section-in.cc
  2c1a311ccac95e377a112adacca59e52  gcc/lto-section-names.h
  aa824edd3a2322925eef8c0e675c646f  gcc/lto-section-out.cc
--- 6158,6171 ----
  770e42213cbcd993a445bee76524f8eb  gcc/lra-eliminations.cc
  7c8aeab71bcfacb356aecdcdb7762210  gcc/lra-int.h
  399337ad638584d9290158ea06d18de8  gcc/lra-lives.cc
! a8f3bbbd00b9de205b710a6cb7112517  gcc/lra-remat.cc
  f29a4612195d306e5b22fd456cfb2a91  gcc/lra-spills.cc
  292ab755fb0b9a22616cefeb10633fff  gcc/lra.cc
  e39f5642047f20c01157ff09360cf476  gcc/lra.h
! 17abf987a04a45276a0c7f8a248bc8ed  gcc/lto-cgraph.cc
  6fc03350ec53f915e1e4e39ca5122e10  gcc/lto-compress.cc
  838379d3b336c074b7a518024dfc1524  gcc/lto-compress.h
! 45bce25092293cf29273fb41d8af1a4b  gcc/lto-opts.cc
  862eb9c06442298e051e94342486f26e  gcc/lto-section-in.cc
  2c1a311ccac95e377a112adacca59e52  gcc/lto-section-names.h
  aa824edd3a2322925eef8c0e675c646f  gcc/lto-section-out.cc
*************** c65f55fed79f6f011c286a8c15d49485  gcc/lt
*** 6164,6170 ****
  84bdf4dde2c999956f004a2cec5fcdfa  gcc/lto-streamer.cc
  4051a87eb8e439afcde2567e10273f08  gcc/lto-streamer.h
  937c657e2ab15274b95fdb91519d7865  gcc/lto-wrapper.cc
! 0cb939f497c4e8cb4d8976e65286ef88  gcc/lto/ChangeLog
  1c031130b442e688f20c6f97577f6f1c  gcc/lto/Make-lang.in
  10ec91fabc2cd5424224460087811ade  gcc/lto/common.cc
  797d875c24181ac44cc33ff020e1b788  gcc/lto/common.h
--- 6174,6180 ----
  84bdf4dde2c999956f004a2cec5fcdfa  gcc/lto-streamer.cc
  4051a87eb8e439afcde2567e10273f08  gcc/lto-streamer.h
  937c657e2ab15274b95fdb91519d7865  gcc/lto-wrapper.cc
! 2466e7895148af5a4575b78d9aee2152  gcc/lto/ChangeLog
  1c031130b442e688f20c6f97577f6f1c  gcc/lto/Make-lang.in
  10ec91fabc2cd5424224460087811ade  gcc/lto/common.cc
  797d875c24181ac44cc33ff020e1b788  gcc/lto/common.h
*************** a497c0ed98b232be3d905aa138636779  gcc/lt
*** 6178,6184 ****
  db24810ac399c4a5d6146bd71ef73426  gcc/lto/lto-object.cc
  f018d5b0f30e1d8cb11793871268668a  gcc/lto/lto-partition.cc
  b42fe0b38243f7d8bd946b42c8b1fdcc  gcc/lto/lto-partition.h
! f91cdf415b673bc55139d4738952c1dd  gcc/lto/lto-symtab.cc
  64117f906dfc57aab1b4dcf007dc88fb  gcc/lto/lto-symtab.h
  e1760b67860124dafbbaf58a3e22c65e  gcc/lto/lto-tree.h
  885788a8016feb1e435d6099e3eebde0  gcc/lto/lto.cc
--- 6188,6194 ----
  db24810ac399c4a5d6146bd71ef73426  gcc/lto/lto-object.cc
  f018d5b0f30e1d8cb11793871268668a  gcc/lto/lto-partition.cc
  b42fe0b38243f7d8bd946b42c8b1fdcc  gcc/lto/lto-partition.h
! 4fa8e84a8428772802769f231e45ad45  gcc/lto/lto-symtab.cc
  64117f906dfc57aab1b4dcf007dc88fb  gcc/lto/lto-symtab.h
  e1760b67860124dafbbaf58a3e22c65e  gcc/lto/lto-tree.h
  885788a8016feb1e435d6099e3eebde0  gcc/lto/lto.cc
*************** e1760b67860124dafbbaf58a3e22c65e  gcc/lt
*** 6187,6194 ****
  a8dfb49da43514f61fc1ed162db2447b  gcc/m2/COPYING.RUNTIME
  8f0e2cd40e05189ec81232da84bd6e1a  gcc/m2/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/m2/COPYING3.LIB
! 3295f74701de6b49f9155e0353322778  gcc/m2/ChangeLog
! 1a9ec7429ed8a5741c53da23303513c2  gcc/m2/Make-lang.in
  ab3d0ce18922488c5090e9e2a293a461  gcc/m2/Make-maintainer.in
  6a74129fda00ca52ba9f953538250c45  gcc/m2/NEWS
  3e6a5f14d741382ac3cffb2b6c8d2ce8  gcc/m2/README
--- 6197,6204 ----
  a8dfb49da43514f61fc1ed162db2447b  gcc/m2/COPYING.RUNTIME
  8f0e2cd40e05189ec81232da84bd6e1a  gcc/m2/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/m2/COPYING3.LIB
! 9736a54681d10e45560b8dfbf73fd272  gcc/m2/ChangeLog
! ceb8d02b1a1ba1a8b9dfbabb05b35161  gcc/m2/Make-lang.in
  ab3d0ce18922488c5090e9e2a293a461  gcc/m2/Make-maintainer.in
  6a74129fda00ca52ba9f953538250c45  gcc/m2/NEWS
  3e6a5f14d741382ac3cffb2b6c8d2ce8  gcc/m2/README
*************** d26ca7644b0c87e9afba723a82e83ffa  gcc/ma
*** 7111,7117 ****
  020ac57561ab532784bab813afc03f17  gcc/machmode.h
  f837fae8701f147a459629038cc2f8d1  gcc/main.cc
  1f00c2ae711dcf705d2724bc1912adec  gcc/make-unique.h
! 3498ffc9e9d43181ede63b2fff469fb7  gcc/match.pd
  ad32d5a9a041bd32e3123d6caba1f49d  gcc/mcf.cc
  c3df3b1477c180924303d737bff27c46  gcc/mem-stats-traits.h
  6682c830fe9e4f4ab3d82e31b7e3aa49  gcc/mem-stats.h
--- 7121,7127 ----
  020ac57561ab532784bab813afc03f17  gcc/machmode.h
  f837fae8701f147a459629038cc2f8d1  gcc/main.cc
  1f00c2ae711dcf705d2724bc1912adec  gcc/make-unique.h
! 19924de2a2dbf163c8a7663f82e2a372  gcc/match.pd
  ad32d5a9a041bd32e3123d6caba1f49d  gcc/mcf.cc
  c3df3b1477c180924303d737bff27c46  gcc/mem-stats-traits.h
  6682c830fe9e4f4ab3d82e31b7e3aa49  gcc/mem-stats.h
*************** d0caebd6daf62e3e5144c3a086d8762c  gcc/me
*** 7122,7130 ****
  ebce6bd265d67531664bf1d4203ca138  gcc/mode-classes.def
  bc246446b97c858bc3cd1ae581f45202  gcc/mode-switching.cc
  6345379a31fea8924d61d305aae331cb  gcc/modulo-sched.cc
! e180d1930560f600f32938bf307f6af0  gcc/multiple_target.cc
  a2fed7a2244bb9b0027adc70211df092  gcc/mux-utils.h
! 45e517e66906ae7197d1a14d401e38d4  gcc/objc/ChangeLog
  f81a2e6746035c07e9e9dac7756ac658  gcc/objc/Make-lang.in
  b2ccd327d5f58dcac13e441e7a2e0200  gcc/objc/config-lang.in
  8f2dc56b3457df7ec0043be18397a760  gcc/objc/lang-specs.h
--- 7132,7140 ----
  ebce6bd265d67531664bf1d4203ca138  gcc/mode-classes.def
  bc246446b97c858bc3cd1ae581f45202  gcc/mode-switching.cc
  6345379a31fea8924d61d305aae331cb  gcc/modulo-sched.cc
! e7d61623cd256ebf43f39b45a81c7d15  gcc/multiple_target.cc
  a2fed7a2244bb9b0027adc70211df092  gcc/mux-utils.h
! eb6b92364e18d9266ba4be28fcd48957  gcc/objc/ChangeLog
  f81a2e6746035c07e9e9dac7756ac658  gcc/objc/Make-lang.in
  b2ccd327d5f58dcac13e441e7a2e0200  gcc/objc/config-lang.in
  8f2dc56b3457df7ec0043be18397a760  gcc/objc/lang-specs.h
*************** d6c198e878e546711874d25453047822  gcc/ob
*** 7143,7149 ****
  2cbe9f562d2debb11a2ecdb9b8686267  gcc/objc/objc-runtime-shared-support.cc
  fda5f7307dfc5b2817741a8e4061e51d  gcc/objc/objc-runtime-shared-support.h
  dca9bc33b5b769910000a9513ae55357  gcc/objc/objc-tree.def
! 44b56ebb3c06cca58ec0bd16d393cd95  gcc/objcp/ChangeLog
  b96d36f1290b06a5131e5b92d5adb66d  gcc/objcp/Make-lang.in
  35a444dbc66b72d53307a36f689fb73d  gcc/objcp/config-lang.in
  637bad28f1f1c9e646083bcda12973f9  gcc/objcp/lang-specs.h
--- 7153,7159 ----
  2cbe9f562d2debb11a2ecdb9b8686267  gcc/objc/objc-runtime-shared-support.cc
  fda5f7307dfc5b2817741a8e4061e51d  gcc/objc/objc-runtime-shared-support.h
  dca9bc33b5b769910000a9513ae55357  gcc/objc/objc-tree.def
! d2201e4c3c12c75c7932c44d3bddd0b3  gcc/objcp/ChangeLog
  b96d36f1290b06a5131e5b92d5adb66d  gcc/objcp/Make-lang.in
  35a444dbc66b72d53307a36f689fb73d  gcc/objcp/config-lang.in
  637bad28f1f1c9e646083bcda12973f9  gcc/objcp/lang-specs.h
*************** d8b2b6a9d82bb173fd998a51344f0af3  gcc/op
*** 7170,7176 ****
  bddf69ca9602442193ea19533499aa04  gcc/opt-problem.cc
  496b697c4fcf0d1d2a5aa7cb71f16571  gcc/opt-problem.h
  eb42aee5f98f8f74181aaf2a24242868  gcc/opt-read.awk
! 74e31942cc1d7fd16008890693f3f976  gcc/opt-suggestions.cc
  2c7e0eb8c977caade89510a8b6c8f3ba  gcc/opt-suggestions.h
  196f3d026b80296fbb764fe29e038a33  gcc/optabs-libfuncs.cc
  04358f91cfd91036383d359cdf5b049f  gcc/optabs-libfuncs.h
--- 7180,7186 ----
  bddf69ca9602442193ea19533499aa04  gcc/opt-problem.cc
  496b697c4fcf0d1d2a5aa7cb71f16571  gcc/opt-problem.h
  eb42aee5f98f8f74181aaf2a24242868  gcc/opt-read.awk
! ff0114720b71d8b6ceb41536bb2be7c8  gcc/opt-suggestions.cc
  2c7e0eb8c977caade89510a8b6c8f3ba  gcc/opt-suggestions.h
  196f3d026b80296fbb764fe29e038a33  gcc/optabs-libfuncs.cc
  04358f91cfd91036383d359cdf5b049f  gcc/optabs-libfuncs.h
*************** f8f3df70c36095097945cb03323a693b  gcc/op
*** 7182,7194 ****
  425698078194ac5f06fe487ecbba9dfe  gcc/optabs.def
  65ccc81ac4251caf331468bf897a4d21  gcc/optabs.h
  3dfd8d122c4d56a7627db3105cc0942f  gcc/optc-gen.awk
! 37e71871ee91c7863864c5d3d24d1985  gcc/optc-save-gen.awk
  be6cb7f9fbd9adbdd9060ceae7d37029  gcc/opth-gen.awk
  dfc051acb42805606a14abc06c814aa1  gcc/optinfo-emit-json.cc
  23a32bb6db5cc27f62e96f583a074dd5  gcc/optinfo-emit-json.h
  b7bd0b389d55d860eaef6b9957616899  gcc/optinfo.cc
  211aec5ccb8c1fb43ae8e372589b6652  gcc/optinfo.h
! 8d930e8b995aa12eff99ffbf3a815361  gcc/opts-common.cc
  4fdbf157243a5a1f53d3cd5b903ba290  gcc/opts-diagnostic.h
  3dc746f8732ba9f90e77f29ed51e1bed  gcc/opts-global.cc
  ba6821f04d884d92f0a7fed9a3232bb3  gcc/opts-jobserver.h
--- 7192,7204 ----
  425698078194ac5f06fe487ecbba9dfe  gcc/optabs.def
  65ccc81ac4251caf331468bf897a4d21  gcc/optabs.h
  3dfd8d122c4d56a7627db3105cc0942f  gcc/optc-gen.awk
! 8d273ef1f6eed63d50c6cd6b49dfc46c  gcc/optc-save-gen.awk
  be6cb7f9fbd9adbdd9060ceae7d37029  gcc/opth-gen.awk
  dfc051acb42805606a14abc06c814aa1  gcc/optinfo-emit-json.cc
  23a32bb6db5cc27f62e96f583a074dd5  gcc/optinfo-emit-json.h
  b7bd0b389d55d860eaef6b9957616899  gcc/optinfo.cc
  211aec5ccb8c1fb43ae8e372589b6652  gcc/optinfo.h
! 1317fc22a039eaceed1597ea38a6e955  gcc/opts-common.cc
  4fdbf157243a5a1f53d3cd5b903ba290  gcc/opts-diagnostic.h
  3dc746f8732ba9f90e77f29ed51e1bed  gcc/opts-global.cc
  ba6821f04d884d92f0a7fed9a3232bb3  gcc/opts-jobserver.h
*************** e6322900c0d89069064fee63484afb41  gcc/pa
*** 7201,7210 ****
  6d5e1909a25f7d21fbdbc4466bfc2f10  gcc/pass_manager.h
  a5e166ed8d84e4d0e1a8b637fc1e86f4  gcc/passes.cc
  f79c56de25494e8b3f384aeb3297e5b1  gcc/passes.def
! e4b251c052d442b33f51258301aaf71f  gcc/plugin.cc
  b7c23a22025fc638936c8776d5141077  gcc/plugin.def
  0d98256396aa9909139748326fe2ec5a  gcc/plugin.h
! 8e886c720ead9fca326e2d1c8241f5d3  gcc/po/ChangeLog
  529a60fd475862c5330245c858e844e1  gcc/po/EXCLUDES
  e4e35545a1fab9b9decbe9b06b468f72  gcc/po/be.gmo
  2ba501322d853f2ba4f16e197e60de49  gcc/po/be.po
--- 7211,7220 ----
  6d5e1909a25f7d21fbdbc4466bfc2f10  gcc/pass_manager.h
  a5e166ed8d84e4d0e1a8b637fc1e86f4  gcc/passes.cc
  f79c56de25494e8b3f384aeb3297e5b1  gcc/passes.def
! ef01241bfd0f3bd5c0b8283558c9b10a  gcc/plugin.cc
  b7c23a22025fc638936c8776d5141077  gcc/plugin.def
  0d98256396aa9909139748326fe2ec5a  gcc/plugin.h
! 2149bb7e8f20e653da6a1356df7728f2  gcc/po/ChangeLog
  529a60fd475862c5330245c858e844e1  gcc/po/EXCLUDES
  e4e35545a1fab9b9decbe9b06b468f72  gcc/po/be.gmo
  2ba501322d853f2ba4f16e197e60de49  gcc/po/be.po
*************** d106e1f524c9bc71a6317219b4248be3  gcc/po
*** 7246,7252 ****
  b561422731073b68d89df759bdbab101  gcc/po/zh_CN.po
  26080b5d6659bf16b31d74c084bbe8d2  gcc/po/zh_TW.gmo
  e787a3b9712d1eb24c32dd0cc731ccbd  gcc/po/zh_TW.po
! cbf955d69da4dcc78738dcadff3e0da4  gcc/pointer-query.cc
  27a82acfef939a6105653100ca817c22  gcc/pointer-query.h
  826e8613602ff66b4826777cca1f0f8c  gcc/poly-int-types.h
  904c1ca12d0557980609eab0e8c559a7  gcc/poly-int.h
--- 7256,7262 ----
  b561422731073b68d89df759bdbab101  gcc/po/zh_CN.po
  26080b5d6659bf16b31d74c084bbe8d2  gcc/po/zh_TW.gmo
  e787a3b9712d1eb24c32dd0cc731ccbd  gcc/po/zh_TW.po
! 8e945f56b5e2ea904a47c83a60fc2105  gcc/pointer-query.cc
  27a82acfef939a6105653100ca817c22  gcc/pointer-query.h
  826e8613602ff66b4826777cca1f0f8c  gcc/poly-int-types.h
  904c1ca12d0557980609eab0e8c559a7  gcc/poly-int.h
*************** c1360f9d799d927a43938d0fa2197c2f  gcc/ra
*** 7278,7284 ****
  6846faf0997a4e8ecce23929c94109be  gcc/read-rtl-function.cc
  537d10d7fa9077013a7396eb9ab761a0  gcc/read-rtl-function.h
  4323304c8d4c3b3f7a1a709a952b0eb6  gcc/read-rtl.cc
! 25281c1ad69703fcb08cf754d82ebad8  gcc/real.cc
  6d8554acc44b5e2e21e38a2b49a99b5a  gcc/real.h
  dc90e239bc529e45b018414e41f712d7  gcc/realmpfr.cc
  8b3665ee0408167deba63225c18ac5a1  gcc/realmpfr.h
--- 7288,7294 ----
  6846faf0997a4e8ecce23929c94109be  gcc/read-rtl-function.cc
  537d10d7fa9077013a7396eb9ab761a0  gcc/read-rtl-function.h
  4323304c8d4c3b3f7a1a709a952b0eb6  gcc/read-rtl.cc
! 96254099e9152f48e9b24b41626466a7  gcc/real.cc
  6d8554acc44b5e2e21e38a2b49a99b5a  gcc/real.h
  dc90e239bc529e45b018414e41f712d7  gcc/realmpfr.cc
  8b3665ee0408167deba63225c18ac5a1  gcc/realmpfr.h
*************** dd0ae195ddcf06998329b73113a0107a  gcc/re
*** 7298,7304 ****
  2a818cbdbd5406a63c71a18f7ec7809f  gcc/reload.cc
  2c10603003864024bc233887578ab725  gcc/reload.h
  a923e6ee5eb5118449aa9c3a9ea1cb2e  gcc/reload1.cc
! 9131f319ac95d928b6107f2d21da3af9  gcc/reorg.cc
  8847210067f0ab5a79fd62bbaebad8c2  gcc/resource.cc
  5e0f1c136548ffafc06dde7759d0b618  gcc/resource.h
  d4270c50409d0a37e41e87d9c5ad50b7  gcc/rtl-error.cc
--- 7308,7314 ----
  2a818cbdbd5406a63c71a18f7ec7809f  gcc/reload.cc
  2c10603003864024bc233887578ab725  gcc/reload.h
  a923e6ee5eb5118449aa9c3a9ea1cb2e  gcc/reload1.cc
! 0d6c7e10688dbe3742060bfc8ee47f18  gcc/reorg.cc
  8847210067f0ab5a79fd62bbaebad8c2  gcc/resource.cc
  5e0f1c136548ffafc06dde7759d0b618  gcc/resource.h
  d4270c50409d0a37e41e87d9c5ad50b7  gcc/rtl-error.cc
*************** d14e86636104f8e63873d0f94694d4f2  gcc/rt
*** 7338,7344 ****
  c7bcaa81dd77c23ab3a266bcbf9a0dd1  gcc/run-rtl-passes.cc
  89d68ba5dc6c7c5c9545c87886d96fa6  gcc/run-rtl-passes.h
  add9bd82fcec23469a4d0f7df03d9589  gcc/rust/CONTRIBUTING.md
! 0f09ad596389ba51e9a29b4bfc5e231a  gcc/rust/ChangeLog
  74b5c91895b4f121d23a07141ee9691c  gcc/rust/Make-lang.in
  080109fdd25bde98f968ee692c3e0200  gcc/rust/README.md
  656ef73d834ec5110c9e15fa59242e41  gcc/rust/ast/rust-ast-dump.cc
--- 7348,7354 ----
  c7bcaa81dd77c23ab3a266bcbf9a0dd1  gcc/run-rtl-passes.cc
  89d68ba5dc6c7c5c9545c87886d96fa6  gcc/run-rtl-passes.h
  add9bd82fcec23469a4d0f7df03d9589  gcc/rust/CONTRIBUTING.md
! 190c81891813935d501a2044d5eb9b56  gcc/rust/ChangeLog
  74b5c91895b4f121d23a07141ee9691c  gcc/rust/Make-lang.in
  080109fdd25bde98f968ee692c3e0200  gcc/rust/README.md
  656ef73d834ec5110c9e15fa59242e41  gcc/rust/ast/rust-ast-dump.cc
*************** e6c15bb100982c366657793f0ba5405f  gcc/sy
*** 7673,7679 ****
  1df86ebb721c32a31780042b3a5afa4f  gcc/symtab-thunks.h
  5d430915c811c8ef34649ce9ef163f79  gcc/symtab.cc
  ff3675d3b97df46f8e1ed96a13ce7dd7  gcc/sync-builtins.def
! ee12e84ef05b803a91d679b951df2689  gcc/system.h
  744e683ea9d5282ff763bca2bba4f90d  gcc/target-def.h
  e880e2e7aadcca94c17ee3bff654d152  gcc/target-globals.cc
  a4178410f0dd9596b6066554d292aa02  gcc/target-globals.h
--- 7683,7689 ----
  1df86ebb721c32a31780042b3a5afa4f  gcc/symtab-thunks.h
  5d430915c811c8ef34649ce9ef163f79  gcc/symtab.cc
  ff3675d3b97df46f8e1ed96a13ce7dd7  gcc/sync-builtins.def
! fe435b44b913dfd987519b7bf9e1d294  gcc/system.h
  744e683ea9d5282ff763bca2bba4f90d  gcc/target-def.h
  e880e2e7aadcca94c17ee3bff654d152  gcc/target-globals.cc
  a4178410f0dd9596b6066554d292aa02  gcc/target-globals.h
*************** b829ed0032c899e107be2db349c913f3  gcc/ta
*** 7684,7690 ****
  811da275a2b9d3186a6decf96c01b0ed  gcc/targhooks.cc
  edb193a32070c4a7626fb75382def9b9  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! 7ce6f8682fe989affc1dd2765d4551fa  gcc/testsuite/ChangeLog
  862f04afbd87da2cc6bc432c3f28430f  gcc/testsuite/ChangeLog-1993-2007
  029a5d8dacd25eb5d4711452ac448e5b  gcc/testsuite/ChangeLog-2008
  13ac28c41d51b66b4ec40dba6bd50f39  gcc/testsuite/ChangeLog-2009
--- 7694,7700 ----
  811da275a2b9d3186a6decf96c01b0ed  gcc/targhooks.cc
  edb193a32070c4a7626fb75382def9b9  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! 4661784bb4508a9f5be43f5dd666ac81  gcc/testsuite/ChangeLog
  862f04afbd87da2cc6bc432c3f28430f  gcc/testsuite/ChangeLog-1993-2007
  029a5d8dacd25eb5d4711452ac448e5b  gcc/testsuite/ChangeLog-2008
  13ac28c41d51b66b4ec40dba6bd50f39  gcc/testsuite/ChangeLog-2009
*************** c51902099b5071373c02eb23d9a61aab  gcc/te
*** 10334,10339 ****
--- 10344,10350 ----
  923b706d858a721ad9d14b4f36ff9bf7  gcc/testsuite/c-c++-common/Warray-bounds.c
  1465c746ce0da634140bd11994689fb1  gcc/testsuite/c-c++-common/Warray-compare-1.c
  86563e27b22c96809703786cd874a440  gcc/testsuite/c-c++-common/Warray-compare-2.c
+ 4e5a083c4ba660d982d456bf7982468f  gcc/testsuite/c-c++-common/Warray-compare-3.c
  fe25f03fdb469ad245f6cae14480ddad  gcc/testsuite/c-c++-common/Wattributes-2.c
  17bdcdb759c07d09c2d4d9895b89253d  gcc/testsuite/c-c++-common/Wattributes-3.c
  e07fdc272a434aa05e75700c13b249b0  gcc/testsuite/c-c++-common/Wattributes.c
*************** baefeae8b123d7fff8e835b68ec75bf4  gcc/te
*** 10553,10558 ****
--- 10564,10570 ----
  bf0b620625355f346eefd54a379f0ac2  gcc/testsuite/c-c++-common/Wsizeof-pointer-memaccess2.c
  9435b893d35596d6e6c421a7d0ca6b4e  gcc/testsuite/c-c++-common/Wsizeof-pointer-memaccess3.c
  c2f8af9a24cbf598244cbdf23a6eb007  gcc/testsuite/c-c++-common/Wsizeof-pointer-memaccess4.c
+ af1ddc910423deb7037d0df021bc094d  gcc/testsuite/c-c++-common/Wsizeof-pointer-memaccess5.c
  def0eee4b52b80a22825e7e10a92ec0d  gcc/testsuite/c-c++-common/Wstrict-flex-arrays.c
  f65e675073fa6e887cf5c8b46811dbbd  gcc/testsuite/c-c++-common/Wstringop-overflow-2-novec.c
  72b026b6797ea3ac3a7342c55601477c  gcc/testsuite/c-c++-common/Wstringop-overflow-2.c
*************** ac27af3ea0b119b95109334b03d48ca9  gcc/te
*** 10920,10925 ****
--- 10932,10938 ----
  fb93693065e3e66c29a51aa146b3d3fa  gcc/testsuite/c-c++-common/cpp/pr104147.c
  52031f4611a992f3a4ce30bfd206198d  gcc/testsuite/c-c++-common/cpp/pr108244-1.c
  923955687c7d11dfef99d344ff0d96a4  gcc/testsuite/c-c++-common/cpp/pr108244-2.c
+ c9c90fd4b9d3e25d8629a40a44fff10f  gcc/testsuite/c-c++-common/cpp/pr115913.c
  c85025f0def783f70f9bb6a4ea9a23f3  gcc/testsuite/c-c++-common/cpp/pr45457.c
  50c40c5b8912ad75a2e46fd06778339d  gcc/testsuite/c-c++-common/cpp/pr57580.c
  6b93142f33f13f29aa948ea5e779f1a0  gcc/testsuite/c-c++-common/cpp/pr58844-1.c
*************** ef8ec3320ae234be32fcdfc5379eaca2  gcc/te
*** 11523,11528 ****
--- 11536,11542 ----
  1164bc26f7382179d1bd6b607af1d336  gcc/testsuite/c-c++-common/gomp/pr106981.c
  8f995161beda01326e712ba172a760f8  gcc/testsuite/c-c++-common/gomp/pr107001.c
  9b182f81cba9d60fb2cbbde45ceae582  gcc/testsuite/c-c++-common/gomp/pr108244-3.c
+ c83ce004951a9a0719e190f7457302c7  gcc/testsuite/c-c++-common/gomp/pr119000.c
  e16ef156ad193ef1f3cba60ad16e57ab  gcc/testsuite/c-c++-common/gomp/pr51360.c
  84c977571aeb43c0224137efe7f5b213  gcc/testsuite/c-c++-common/gomp/pr53580.c
  28bfd873981083756a16f70fdb0b86db  gcc/testsuite/c-c++-common/gomp/pr54017.c
*************** a183a8ddeb27d5e9654e05ba36537908  gcc/te
*** 12056,12061 ****
--- 12070,12077 ----
  4ff3ed308d8da8d77850a30d4f12d391  gcc/testsuite/c-c++-common/raw-string-9.c
  9e3a91b7d141874f69445c22a3d74ab6  gcc/testsuite/c-c++-common/raw-string-directive-1.c
  00bb4dd954585ae7c44fc148fcaeff2c  gcc/testsuite/c-c++-common/raw-string-directive-2.c
+ c43e8c2f4e63188c7d29667b185abde0  gcc/testsuite/c-c++-common/raw-string-directive-3.c
+ eef0e9a4755fcdef5bc0aed73aa7dfc5  gcc/testsuite/c-c++-common/raw-string-directive-4.c
  27d899fda0e1e6f64fc3f2e0f3e7832e  gcc/testsuite/c-c++-common/restrict-1.c
  d38712ca0af7a9dc1180236b496d6f9f  gcc/testsuite/c-c++-common/restrict-2.c
  b75f32090613560551fe2b3a16a6bddf  gcc/testsuite/c-c++-common/restrict-4.c
*************** f64e9a0e7b5ee2dca69c8d247f6246ab  gcc/te
*** 12173,12183 ****
  6099fd0b163b9c570575cfa376ad44ae  gcc/testsuite/c-c++-common/torture/builtin-arith-overflow-p-8.c
  1521bd071912021d30375778ada20c27  gcc/testsuite/c-c++-common/torture/builtin-arith-overflow-p-9.c
  c0ced56aa092fbe05fcfb0400e4a7973  gcc/testsuite/c-c++-common/torture/builtin-arith-overflow.h
! 80c6991dac30744cf52461dd3f956e72  gcc/testsuite/c-c++-common/torture/builtin-clear-padding-1.c
! dcfe45ba6f5d3cfc6a596ae589694b44  gcc/testsuite/c-c++-common/torture/builtin-clear-padding-2.c
! 895fbc9bc655600ce8926f0324c028bf  gcc/testsuite/c-c++-common/torture/builtin-clear-padding-3.c
! ecf00277bf404ed30fb08d5a8347834e  gcc/testsuite/c-c++-common/torture/builtin-clear-padding-4.c
! 02ccc099dac6a69400f154fddb7c755d  gcc/testsuite/c-c++-common/torture/builtin-clear-padding-5.c
  e6519a905d51bc4a47ceea85c886d98b  gcc/testsuite/c-c++-common/torture/builtin-convertvector-1.c
  1152c43998c24654fd01c67b23e23932  gcc/testsuite/c-c++-common/torture/builtin-convertvector-2.c
  78be28e180d73a89ef820b89b8e47458  gcc/testsuite/c-c++-common/torture/builtin-shufflevector-1.c
--- 12189,12200 ----
  6099fd0b163b9c570575cfa376ad44ae  gcc/testsuite/c-c++-common/torture/builtin-arith-overflow-p-8.c
  1521bd071912021d30375778ada20c27  gcc/testsuite/c-c++-common/torture/builtin-arith-overflow-p-9.c
  c0ced56aa092fbe05fcfb0400e4a7973  gcc/testsuite/c-c++-common/torture/builtin-arith-overflow.h
! 3cee92adaa1a38086edfab9c3d84f00a  gcc/testsuite/c-c++-common/torture/builtin-clear-padding-1.c
! 1865956f3fc939653de54faba3618b72  gcc/testsuite/c-c++-common/torture/builtin-clear-padding-2.c
! 31f715afb9a58cc96ce3fe60e4c8101d  gcc/testsuite/c-c++-common/torture/builtin-clear-padding-3.c
! 1428b405a26a5320e9400f0d631ac3b9  gcc/testsuite/c-c++-common/torture/builtin-clear-padding-4.c
! f1ab5d6173eb9710341597174f8f1538  gcc/testsuite/c-c++-common/torture/builtin-clear-padding-5.c
! 550bf6a95b93ecdb962dab3cc0becb47  gcc/testsuite/c-c++-common/torture/builtin-clear-padding-6.c
  e6519a905d51bc4a47ceea85c886d98b  gcc/testsuite/c-c++-common/torture/builtin-convertvector-1.c
  1152c43998c24654fd01c67b23e23932  gcc/testsuite/c-c++-common/torture/builtin-convertvector-2.c
  78be28e180d73a89ef820b89b8e47458  gcc/testsuite/c-c++-common/torture/builtin-shufflevector-1.c
*************** d61cc0116375f68235d4f54cec36629f  gcc/te
*** 12198,12203 ****
--- 12215,12225 ----
  7a43079b53195516c0a573da0a3b9672  gcc/testsuite/c-c++-common/torture/harden-cond.c
  75b3c9a6df31ced0517c8cbc745ba01b  gcc/testsuite/c-c++-common/torture/pr101636.c
  72a2947bdd50352d6b0c1363882b7249  gcc/testsuite/c-c++-common/torture/pr104497.c
+ 002fc64f1c6639e5d798b8223d5eecc6  gcc/testsuite/c-c++-common/torture/pr113546-1.c
+ 669d583becd8ce34c50d8bdb30169d9c  gcc/testsuite/c-c++-common/torture/pr116189-1.c
+ 993b07c1c8f1a0db0b2e9956c1045e2c  gcc/testsuite/c-c++-common/torture/pr117912-1.c
+ 457a8eeb2f3d9696c824ae9b75b4c721  gcc/testsuite/c-c++-common/torture/pr117912-2.c
+ 700dd88b5774e08268eb43b2572a7160  gcc/testsuite/c-c++-common/torture/pr117912-3.c
  9f1ae2fa915c5159ec134a1894ad5cf1  gcc/testsuite/c-c++-common/torture/pr42834.c
  675e839574d99a5e8a0446f66b3520ca  gcc/testsuite/c-c++-common/torture/pr46137.c
  dad442c09041500a2c414da240f49b82  gcc/testsuite/c-c++-common/torture/pr53505.c
*************** e1da82b55923a7ab568cb5df4f052ed1  gcc/te
*** 12496,12501 ****
--- 12518,12524 ----
  6a2c10eb8366c9c7322a32a78e34f6e9  gcc/testsuite/c-c++-common/ubsan/shift-7.c
  49b5939d6db127edd8ca392ae5cc083e  gcc/testsuite/c-c++-common/ubsan/shift-8.c
  d3a2be8f3a7a8b7fadd57ee96000204a  gcc/testsuite/c-c++-common/ubsan/shift-9.c
+ 3b2c6f7b4a0247f3f957a16f086a7baf  gcc/testsuite/c-c++-common/ubsan/signed1bitfield-1.c
  bbe0978263ca9b069d3fb387b8d0c2f2  gcc/testsuite/c-c++-common/ubsan/typedef-1.c
  57e147b5b84fba5436994a33105171cd  gcc/testsuite/c-c++-common/ubsan/undefined-1.c
  c36d540bb12d6ab7f9bd3ae9a8a49d0d  gcc/testsuite/c-c++-common/ubsan/undefined-2.c
*************** fb777e6427f4a224508112af8340c3d4  gcc/te
*** 12992,12997 ****
--- 13015,13021 ----
  8b04df9268a6b4bf6e32b9647e354fe9  gcc/testsuite/g++.dg/asan/large-func-test-1.C
  ca4a8065918a3119cb5474bacec801f2  gcc/testsuite/g++.dg/asan/pr102656.C
  b03be3a03970717959df65ccdcbebe88  gcc/testsuite/g++.dg/asan/pr104449.C
+ 350e8cfd78cd243b5ca66f3b0149e4b7  gcc/testsuite/g++.dg/asan/pr118763.C
  e472f2ce37f2b55b1358ec08717d9f08  gcc/testsuite/g++.dg/asan/pr55617.C
  74a04a20e12a8acd0fd7d05742cf8d63  gcc/testsuite/g++.dg/asan/pr62017.C
  505943436d80a41b5e95bf0b67db97cd  gcc/testsuite/g++.dg/asan/pr64937.C
*************** e612eae08131c21ee29889099ea83336  gcc/te
*** 14032,14037 ****
--- 14056,14062 ----
  0bb3f63511b9329ed3397481d34f4eea  gcc/testsuite/g++.dg/cpp0x/alias-decl-ttp2.C
  f5ed750984341c509996395f9c245964  gcc/testsuite/g++.dg/cpp0x/alias-decl-variadic1.C
  4801ac3f92233a9abd7960d6704f81a5  gcc/testsuite/g++.dg/cpp0x/alias-decl-variadic2.C
+ 706280ea0e15fb25eef3a8036aefd636  gcc/testsuite/g++.dg/cpp0x/alias-decl-variadic3.C
  5b74a3057c420c4dac9d7faffd0a2d5c  gcc/testsuite/g++.dg/cpp0x/alias-decl-void1.C
  3160c52a8ac131b03192a1bc86ef7a35  gcc/testsuite/g++.dg/cpp0x/alignas1.C
  4866e3b93b878ee0244a039b009071ca  gcc/testsuite/g++.dg/cpp0x/alignas10.C
*************** d0613cd67d583f80a028bb4816e6c9e8  gcc/te
*** 14502,14507 ****
--- 14527,14534 ----
  8df497f4a921feee2cc5153489dcd088  gcc/testsuite/g++.dg/cpp0x/constexpr-recursion3.C
  5e160a188aef7805034f272bd43d2ab7  gcc/testsuite/g++.dg/cpp0x/constexpr-redeclaration1.C
  0754013cd1a94dc63c7abbafa940d434  gcc/testsuite/g++.dg/cpp0x/constexpr-redeclaration2.C
+ 59874fc5bcce854308a279716c598298  gcc/testsuite/g++.dg/cpp0x/constexpr-redeclaration3.C
+ 9b865fe605334bf36e6afd32a6606e9a  gcc/testsuite/g++.dg/cpp0x/constexpr-redeclaration4.C
  dc7a7eb622691a6363e90822f0e39072  gcc/testsuite/g++.dg/cpp0x/constexpr-ref1.C
  dd168221387ec9a93f3d125cb4241c56  gcc/testsuite/g++.dg/cpp0x/constexpr-ref10.C
  d9da9cf4bb858e7842583767dee979b2  gcc/testsuite/g++.dg/cpp0x/constexpr-ref11.C
*************** e0a86859c165bfaac8fd8efd9023935b  gcc/te
*** 14584,14589 ****
--- 14611,14617 ----
  7229788425547bc1befff78305c473c8  gcc/testsuite/g++.dg/cpp0x/constexpr-union7.C
  5d95979f72aa52bb0abbd82d05bf5e53  gcc/testsuite/g++.dg/cpp0x/constexpr-union7a.C
  d4cff4827a96cb7f369a338f6559edd2  gcc/testsuite/g++.dg/cpp0x/constexpr-union8.C
+ 672d560c9bad4c9225e64d802d62bb03  gcc/testsuite/g++.dg/cpp0x/constexpr-union9.C
  9c897128234fa6ab41edf384f11dd381  gcc/testsuite/g++.dg/cpp0x/constexpr-using.C
  7a9a83c41c3d2c5f82ac428442905b65  gcc/testsuite/g++.dg/cpp0x/constexpr-using2.C
  6dc93e335ab58c26289327a9c7e9d042  gcc/testsuite/g++.dg/cpp0x/constexpr-using3.C
*************** ec6bf8354ca1b8834959e856431d6ac4  gcc/te
*** 14602,14607 ****
--- 14630,14636 ----
  58e380f5c0bc16e86009e605e19acb07  gcc/testsuite/g++.dg/cpp0x/constexpr-volatile.C
  5081c9b6e2b0e12bf7d6e127f365efe7  gcc/testsuite/g++.dg/cpp0x/constexpr-volatile2.C
  30ced1e6b63c1eb7ae6b537c9e49bc1f  gcc/testsuite/g++.dg/cpp0x/constexpr-volatile3.C
+ a219624071878a5955efe99a018a2b43  gcc/testsuite/g++.dg/cpp0x/constexpr-volatile4.C
  7bca20d6ac21d6cb78ab16d5c52b7e64  gcc/testsuite/g++.dg/cpp0x/constexpr-wstring1.C
  b16fc42e77fa07ebcdb1053ea5d24120  gcc/testsuite/g++.dg/cpp0x/constexpr-wstring2.C
  70dc080523c40a07cec30261f6f7007a  gcc/testsuite/g++.dg/cpp0x/conv-tmpl1.C
*************** e81473abf06cde0a1694e5af550d221d  gcc/te
*** 15116,15121 ****
--- 15145,15152 ----
  09f09079c354ad93c3844a14549e0854  gcc/testsuite/g++.dg/cpp0x/initlist-array2.C
  d3992440eed37bacf3c1b2c2075afeca  gcc/testsuite/g++.dg/cpp0x/initlist-array21.C
  25f21baa02838e20e7b1cb692e279e2f  gcc/testsuite/g++.dg/cpp0x/initlist-array22.C
+ b8d0d7227f1835ae94108da2b2b1d06d  gcc/testsuite/g++.dg/cpp0x/initlist-array23.C
+ 4812e08c472dcdea2ca5a5c09dd6d4fc  gcc/testsuite/g++.dg/cpp0x/initlist-array24.C
  8c888f7ab5cc44480801a14718225380  gcc/testsuite/g++.dg/cpp0x/initlist-array3.C
  6c1907913d332611dd16d03002d759f9  gcc/testsuite/g++.dg/cpp0x/initlist-array4.C
  8758d8464674d29f4276f8d3ebc899c3  gcc/testsuite/g++.dg/cpp0x/initlist-array5.C
*************** bcbe398391cda8139c8462f46935b7e2  gcc/te
*** 15157,15162 ****
--- 15188,15194 ----
  17758d1e1b79cbbb897a8920f4d44cca  gcc/testsuite/g++.dg/cpp0x/initlist-opt1.C
  e572423dbc63856346f68c0f83dab54a  gcc/testsuite/g++.dg/cpp0x/initlist-overload1.C
  a054a7d4e96233b7a3a6591843a8d33f  gcc/testsuite/g++.dg/cpp0x/initlist-pmf1.C
+ dbae3b7057bbb77c75bce2ef15965ac1  gcc/testsuite/g++.dg/cpp0x/initlist-pmf2.C
  e3ec7ab89d20e6ccf50aa92954896f07  gcc/testsuite/g++.dg/cpp0x/initlist-postfix-open-square.C
  1b5c7e432be89c3edcbfaad424a2e353  gcc/testsuite/g++.dg/cpp0x/initlist-protected.C
  fd02e573e3be3d0a146192cd840840a1  gcc/testsuite/g++.dg/cpp0x/initlist-pure.C
*************** fab23eb9efdcf1b8c0f8393aa5ad7913  gcc/te
*** 15175,15181 ****
  72e0844bf4443787fe9b82aa10ad9c44  gcc/testsuite/g++.dg/cpp0x/initlist-vect2.C
  bc81668e2b4c77a6a8c52350eb5f9bc7  gcc/testsuite/g++.dg/cpp0x/initlist1.C
  56eb446b9a79a3e01433eed6090a0b6d  gcc/testsuite/g++.dg/cpp0x/initlist10.C
! df633d620f0b08588935e9570c6fc074  gcc/testsuite/g++.dg/cpp0x/initlist100.C
  65994e02b86022c95b64f705b9c16b14  gcc/testsuite/g++.dg/cpp0x/initlist101.C
  85b6ae75cc1f8486c8c9a3d2661a67f7  gcc/testsuite/g++.dg/cpp0x/initlist102.C
  c76baf8a79c92da59f1b1eea9116b0a0  gcc/testsuite/g++.dg/cpp0x/initlist103.C
--- 15207,15213 ----
  72e0844bf4443787fe9b82aa10ad9c44  gcc/testsuite/g++.dg/cpp0x/initlist-vect2.C
  bc81668e2b4c77a6a8c52350eb5f9bc7  gcc/testsuite/g++.dg/cpp0x/initlist1.C
  56eb446b9a79a3e01433eed6090a0b6d  gcc/testsuite/g++.dg/cpp0x/initlist10.C
! d73148d814c47732990b896f4ecdf212  gcc/testsuite/g++.dg/cpp0x/initlist100.C
  65994e02b86022c95b64f705b9c16b14  gcc/testsuite/g++.dg/cpp0x/initlist101.C
  85b6ae75cc1f8486c8c9a3d2661a67f7  gcc/testsuite/g++.dg/cpp0x/initlist102.C
  c76baf8a79c92da59f1b1eea9116b0a0  gcc/testsuite/g++.dg/cpp0x/initlist103.C
*************** b86be1b4c25b3063ddc7e4cb746b89ad  gcc/te
*** 15705,15710 ****
--- 15737,15746 ----
  640bcc6d84918140414a88703d7920cb  gcc/testsuite/g++.dg/cpp0x/noexcept78.C
  787befec69c43fcbbbfc00b982170915  gcc/testsuite/g++.dg/cpp0x/noexcept79.C
  e944a760f2bcd206b36820c53e03b241  gcc/testsuite/g++.dg/cpp0x/noexcept80.C
+ 9dee697e70ce1522a9e831b27a330b7b  gcc/testsuite/g++.dg/cpp0x/noexcept83.C
+ 4396d9cdc2190733e37f41a49051fa92  gcc/testsuite/g++.dg/cpp0x/noexcept84.C
+ 50112d50509a2d89fff4b693d5850d5d  gcc/testsuite/g++.dg/cpp0x/noexcept85.C
+ 342bc0f796cebda7581bc83a6c991fb7  gcc/testsuite/g++.dg/cpp0x/noexcept86.C
  3bf83ccb654cedbb57a45851fb14aa9d  gcc/testsuite/g++.dg/cpp0x/nolinkage1.C
  6b7c91b931bbdacbbffbf9b90a79bc6a  gcc/testsuite/g++.dg/cpp0x/nolinkage1.h
  c92e0eda44dd6b3d74960b249fa5204f  gcc/testsuite/g++.dg/cpp0x/nolinkage1a.cc
*************** f570e39b0271d39d9cdde0565b1fe390  gcc/te
*** 15732,15741 ****
--- 15768,15779 ----
  038b57fc82284f2499013b6711bc0a8e  gcc/testsuite/g++.dg/cpp0x/nsdmi-defer4.C
  171384a7319ac1870302b512ac8be270  gcc/testsuite/g++.dg/cpp0x/nsdmi-defer5.C
  01f9c6930a387a0b45cb4220fc7ec298  gcc/testsuite/g++.dg/cpp0x/nsdmi-defer6.C
+ d5481fd30f66f5324cfb9ec037967222  gcc/testsuite/g++.dg/cpp0x/nsdmi-defer7.C
  9a72677ce49b64f4a0e186df8902abff  gcc/testsuite/g++.dg/cpp0x/nsdmi-dr1397.C
  5af761999024cb836ca412ed02230774  gcc/testsuite/g++.dg/cpp0x/nsdmi-eh1.C
  a10475b2a54810b2909ccfef2102f693  gcc/testsuite/g++.dg/cpp0x/nsdmi-empty1.C
  b8706c4b353788bfe037cbbf67877a76  gcc/testsuite/g++.dg/cpp0x/nsdmi-list1.C
+ 6a58e200c423f61107667482c5ad2900  gcc/testsuite/g++.dg/cpp0x/nsdmi-list10.C
  28861172743173b9d509ef8324377edf  gcc/testsuite/g++.dg/cpp0x/nsdmi-list2.C
  ef20e3e0e53b4fb3163e5066efb89b64  gcc/testsuite/g++.dg/cpp0x/nsdmi-list3.C
  e7c5d3acfd99916be199f83340ddc3b9  gcc/testsuite/g++.dg/cpp0x/nsdmi-list4.C
*************** e7c5d3acfd99916be199f83340ddc3b9  gcc/te
*** 15743,15748 ****
--- 15781,15787 ----
  fa7f946c0cff896c422779a2b5819550  gcc/testsuite/g++.dg/cpp0x/nsdmi-list6.C
  ee42a0aeb16a7131a04999eccc339e5f  gcc/testsuite/g++.dg/cpp0x/nsdmi-list7.C
  c0d475fdef395d626f2b38aa568cbf9e  gcc/testsuite/g++.dg/cpp0x/nsdmi-list8.C
+ ccdd8a27ec0533174a42ba703073e1ce  gcc/testsuite/g++.dg/cpp0x/nsdmi-list9.C
  bb52d0707dea46cd2224e8f36c397c29  gcc/testsuite/g++.dg/cpp0x/nsdmi-local.C
  532b3e2c733c1b03dfa22d18667650fb  gcc/testsuite/g++.dg/cpp0x/nsdmi-sizeof.C
  6a97f223fff723db9f950c32a7828e35  gcc/testsuite/g++.dg/cpp0x/nsdmi-template1.C
*************** a174690fe306aaf345b02df91c3ddebe  gcc/te
*** 15872,15877 ****
--- 15911,15917 ----
  0f5046ead85037afdaba1b501accc894  gcc/testsuite/g++.dg/cpp0x/pr105256.C
  fa773bb98628f5c9f0fa9d8d8b29beda  gcc/testsuite/g++.dg/cpp0x/pr107065.C
  69f8f66bd163b5bad0e399b5155f053b  gcc/testsuite/g++.dg/cpp0x/pr108698.C
+ c6b0d9f964bf85f5f703f5dfa5e809e9  gcc/testsuite/g++.dg/cpp0x/pr119123.C
  26dea799d49ce223a0c4130a3c955271  gcc/testsuite/g++.dg/cpp0x/pr31431-2.C
  4d1da29b669bf3178b3987abce4d58b1  gcc/testsuite/g++.dg/cpp0x/pr31431.C
  d65e06a3830e2b511cc25692b94615a1  gcc/testsuite/g++.dg/cpp0x/pr31432.C
*************** cf4d7a0934fa5897248e568b884df620  gcc/te
*** 16110,16115 ****
--- 16150,16156 ----
  b01c3079ace1bdd462b03d3af7906721  gcc/testsuite/g++.dg/cpp0x/pr93905.C
  114fa71f09fe7fd9b70ee4d41e776e26  gcc/testsuite/g++.dg/cpp0x/pr94616.C
  c60c0db646b29d21cd7d61d24670d63e  gcc/testsuite/g++.dg/cpp0x/pr96440.C
+ 7f57e13552a3dc10e25c07f282add219  gcc/testsuite/g++.dg/cpp0x/pr98533.C
  1f725aacb479fe72f5d994446fab5d54  gcc/testsuite/g++.dg/cpp0x/ptrmem-cst-arg1.C
  0564cc0225d38f734d46986570531094  gcc/testsuite/g++.dg/cpp0x/ptrmem-cst1.C
  6e8e648c26d9bf237cc152180e88c2c2  gcc/testsuite/g++.dg/cpp0x/range-for1.C
*************** b18c63a0e6b162de2b47ab0e61b704bd  gcc/te
*** 16858,16863 ****
--- 16899,16905 ----
  03786101e254b753687a1c243a43278a  gcc/testsuite/g++.dg/cpp1y/constexpr-105050.C
  afbdcf440b8da95f919e745c0f3a85d1  gcc/testsuite/g++.dg/cpp1y/constexpr-105774.C
  bff4672a992bc57b0432abbc32b3c2c9  gcc/testsuite/g++.dg/cpp1y/constexpr-108158.C
+ 1d40cabd787f31f0fad7fcf842281e0d  gcc/testsuite/g++.dg/cpp1y/constexpr-110382.C
  2d72668eefa5659edd32ef8dabc1c48e  gcc/testsuite/g++.dg/cpp1y/constexpr-50060.C
  9b2030f5f70b0e913feb1b957c799f4f  gcc/testsuite/g++.dg/cpp1y/constexpr-66093.C
  9ecc58eab147adafbf3780c51ed706fc  gcc/testsuite/g++.dg/cpp1y/constexpr-70265-1.C
*************** e994f9235ea884899f4cb5f923eca140  gcc/te
*** 16923,16928 ****
--- 16965,16971 ----
  62c9fcd027436752619939db3ffca36e  gcc/testsuite/g++.dg/cpp1y/constexpr-base2.C
  e383dd00754b034ccf88071ffbf49978  gcc/testsuite/g++.dg/cpp1y/constexpr-base2a.C
  443fa5c73bd15f55a6b97bef44b05468  gcc/testsuite/g++.dg/cpp1y/constexpr-complex1.C
+ 57318e47f2033f13a5a726f1bb09a856  gcc/testsuite/g++.dg/cpp1y/constexpr-complex2.C
  9912061f6e14d9f4a1f557e23a4f89c2  gcc/testsuite/g++.dg/cpp1y/constexpr-copy1.C
  464341f29e9993d1f1a167321ef412cf  gcc/testsuite/g++.dg/cpp1y/constexpr-copy2.C
  e6815ab618d6af99025ddeacf6ab0545  gcc/testsuite/g++.dg/cpp1y/constexpr-copy3.C
*************** e3cfe7135470a51262be752b71c2092b  gcc/te
*** 16969,16974 ****
--- 17012,17018 ----
  5d70ae105705b7db38c2cb81da31b2fc  gcc/testsuite/g++.dg/cpp1y/constexpr-nsdmi9.C
  14a6242de0a2e59abd4b2ccf95495c91  gcc/testsuite/g++.dg/cpp1y/constexpr-ptrsub1.C
  3ebd2f678927c3d6b60ebc749680a96e  gcc/testsuite/g++.dg/cpp1y/constexpr-recursion1.C
+ b3f600f6748096c5ac4271189599f1d0  gcc/testsuite/g++.dg/cpp1y/constexpr-recursion2.C
  777febedb9b77383ec600e70a1668eb9  gcc/testsuite/g++.dg/cpp1y/constexpr-ref1.C
  60f807456796c8ef2678ab89851a8dd9  gcc/testsuite/g++.dg/cpp1y/constexpr-reinterpret3.C
  4f2e969a81be7a57cb28aad1fa0f584e  gcc/testsuite/g++.dg/cpp1y/constexpr-reinterpret4.C
*************** cc6586d67eedf5854ebc2931fb7d47a3  gcc/te
*** 17158,17163 ****
--- 17202,17208 ----
  946f59c2dd9c3a634f4e09b219af302c  gcc/testsuite/g++.dg/cpp1y/lambda-generic.C
  ca76d1cf09a7e8a0d6dcf484103a301f  gcc/testsuite/g++.dg/cpp1y/lambda-ice1.C
  cf53809dddf10444ecf4edb30fe8fb83  gcc/testsuite/g++.dg/cpp1y/lambda-ice2.C
+ 3c70c129edf9397287edad85adb5b753  gcc/testsuite/g++.dg/cpp1y/lambda-ice4.C
  a37fb46d4b08c91fb2119f46b9d04ce0  gcc/testsuite/g++.dg/cpp1y/lambda-init-vla1.C
  cd4be222672b195ed8554a2e99c88e68  gcc/testsuite/g++.dg/cpp1y/lambda-init.C
  92794dd2e4beab250816493d67c15717  gcc/testsuite/g++.dg/cpp1y/lambda-init1.C
*************** cd1e1cc2c8f983dad04083b892ec54ad  gcc/te
*** 17206,17211 ****
--- 17251,17259 ----
  4c1005cb08e449c04d79bc0ad019da98  gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr18.C
  a4faa7f44f43076a809225334e5cefa5  gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr19.C
  6181386fced4d11038690bcc0729a80d  gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr2.C
+ f044d441fed28ee965359a757ec1cb99  gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr20.C
+ 8ef34326c4d74e3fb9d0c3c36539b046  gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr21.C
+ 1ebdc149213f560b270e220d4f66a61a  gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr22.C
  379f3d0c83382658777fb1c2f47ed88a  gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr3.C
  d986a2e035160bd06d7fd81798876e53  gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr4.C
  f487f4137e5fa352c9bff3ababd18d3c  gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr5.C
*************** c7ab12616c35e8ba0c0796618d522c42  gcc/te
*** 17422,17427 ****
--- 17470,17476 ----
  b71a7403570a0e5b6ed564f63ee0d523  gcc/testsuite/g++.dg/cpp1y/var-templ79.C
  7490ba7f2bf9511118a48f52e8c4ceed  gcc/testsuite/g++.dg/cpp1y/var-templ8.C
  7babed4c27249bda4fc60ca9f7b378c0  gcc/testsuite/g++.dg/cpp1y/var-templ85.C
+ 2555b4c1ccdec6b7fca5b625f06840d3  gcc/testsuite/g++.dg/cpp1y/var-templ87.C
  c62c3c5ce4dabfb077ffd26896b1d204  gcc/testsuite/g++.dg/cpp1y/var-templ9.C
  2e5f8fa912af0b2871356af6f1adbd06  gcc/testsuite/g++.dg/cpp1y/vla-initlist1.C
  f82f70352e70742cc985b48be0774ebe  gcc/testsuite/g++.dg/cpp1y/vla10.C
*************** db3b073f0c7359db6e2ad4fbfa9c08d5  gcc/te
*** 17494,17499 ****
--- 17543,17549 ----
  d16e54a1ce726ad2154c8897b33a76f6  gcc/testsuite/g++.dg/cpp1z/class-deduction111.C
  07ec005b76a21ecba245d2a70baa779b  gcc/testsuite/g++.dg/cpp1z/class-deduction112.C
  189fae8c467b5ec39b2479b61e1a8bd6  gcc/testsuite/g++.dg/cpp1z/class-deduction113.C
+ a57c191ff65947f62c8c80935a968d19  gcc/testsuite/g++.dg/cpp1z/class-deduction117.C
  fccf66f75d0bb293e6ce56753e50eeda  gcc/testsuite/g++.dg/cpp1z/class-deduction12.C
  8033f2dbb1dc793a3fea073353a0487a  gcc/testsuite/g++.dg/cpp1z/class-deduction13.C
  f51a81e3b0aa46f289c5ca9d3faaded6  gcc/testsuite/g++.dg/cpp1z/class-deduction14.C
*************** e5653327dac59b8fbbaf57941cdf7070  gcc/te
*** 17590,17595 ****
--- 17640,17646 ----
  ee498b90c48803ed7e1e39f604107077  gcc/testsuite/g++.dg/cpp1z/class-deduction98.C
  196827ac69f45d97751bae8af9fb4549  gcc/testsuite/g++.dg/cpp1z/class-deduction99.C
  3e9e676eea887f9924149728080a4174  gcc/testsuite/g++.dg/cpp1z/constexpr-111284.C
+ 44dc55aa88b0ff0d3bd94802f0dc4d4b  gcc/testsuite/g++.dg/cpp1z/constexpr-116676.C
  d09105e6c1f377543e5514e34d2837cd  gcc/testsuite/g++.dg/cpp1z/constexpr-83692.C
  6962bfa121a4383ee0b7a8f045abde3f  gcc/testsuite/g++.dg/cpp1z/constexpr-84684.C
  7417be75f23f5974ec35fe6261395c8c  gcc/testsuite/g++.dg/cpp1z/constexpr-89074-1.C
*************** c19f90a6b67cea2957e319db88a63ee3  gcc/te
*** 17750,17755 ****
--- 17801,17807 ----
  e6baed7e5941603d690b9c2c737ea663  gcc/testsuite/g++.dg/cpp1z/elide6.C
  63be3b6d75aa3c2c8088552683d5245e  gcc/testsuite/g++.dg/cpp1z/eval-order10.C
  3abc6084e572264410718d38beb290bb  gcc/testsuite/g++.dg/cpp1z/eval-order11.C
+ 2a2d4866a044c20823b5f37f629ac147  gcc/testsuite/g++.dg/cpp1z/eval-order13.C
  bb194d9ce590c9e5e69935ebac0f25e4  gcc/testsuite/g++.dg/cpp1z/eval-order2.C
  8b89dee7164b6f4d992706e5b85433f4  gcc/testsuite/g++.dg/cpp1z/eval-order3.C
  6d8d378fedaf65b4cb89952060799280  gcc/testsuite/g++.dg/cpp1z/eval-order4.C
*************** fade45a91157c646e6940a215501f1c9  gcc/te
*** 17785,17790 ****
--- 17837,17843 ----
  ac9f13854ea3e455a1371aaa819ee22a  gcc/testsuite/g++.dg/cpp1z/has-unique-obj-representations1.C
  5f34b6f6c6b9801ac84fd35a7072c291  gcc/testsuite/g++.dg/cpp1z/has-unique-obj-representations2.C
  9f9fa73c4ae67e4de5904663c140998d  gcc/testsuite/g++.dg/cpp1z/has-unique-obj-representations3.C
+ 5c459c469bb0c88af36817ae049e53f3  gcc/testsuite/g++.dg/cpp1z/has-unique-obj-representations4.C
  712e0c3f886fdb90e5e03d39bd877f92  gcc/testsuite/g++.dg/cpp1z/inh-ctor1.C
  a5a039fe3394138160509efa1a2212c5  gcc/testsuite/g++.dg/cpp1z/inh-ctor22.C
  08e66730eb666f41f2d9476748d3745f  gcc/testsuite/g++.dg/cpp1z/inh-ctor23.C
*************** efb0c3ae0359db707086c1750b31b943  gcc/te
*** 17817,17822 ****
--- 17870,17876 ----
  76b7f341f47dbd5cf84c38d1d2af9229  gcc/testsuite/g++.dg/cpp1z/init-statement9.C
  ffdea6bae4a048d4f98ae5a40bf524e4  gcc/testsuite/g++.dg/cpp1z/inline-var1.C
  5fdda464ad6962839138592830f7ad8b  gcc/testsuite/g++.dg/cpp1z/inline-var1.h
+ e3b1bce9d7f1b55e5e768c492442d55f  gcc/testsuite/g++.dg/cpp1z/inline-var11.C
  289178cd112b6bcc3886d28022e1b86f  gcc/testsuite/g++.dg/cpp1z/inline-var1a.C
  3a8f2f26c3c27f6dc9df8bc59af96db5  gcc/testsuite/g++.dg/cpp1z/inline-var2.C
  d02bac8866e9a3e5c4f19da65dda7c9a  gcc/testsuite/g++.dg/cpp1z/inline-var3.C
*************** ae3e1959f85f05c9ec509a6dbdbe24ca  gcc/te
*** 17920,17925 ****
--- 17974,17981 ----
  6459f300d92f04eeb92c53237b82baac  gcc/testsuite/g++.dg/cpp1z/nontype4.C
  2d69a9b79c8f3fadb2bfb68b9d761c49  gcc/testsuite/g++.dg/cpp1z/nontype4a.C
  914a640ece1bdc2a12062de65d60a78d  gcc/testsuite/g++.dg/cpp1z/nontype5.C
+ 1a73a13a161c05eab6182bb64cba004b  gcc/testsuite/g++.dg/cpp1z/nontype7.C
+ 86d3c074d77c88bd7ef317faea9d2968  gcc/testsuite/g++.dg/cpp1z/pr115440.C
  e668ace19a2b0d8946e0e19fd8317af1  gcc/testsuite/g++.dg/cpp1z/pr78771.C
  bc5edc17d9b70d77a054dd4736a66223  gcc/testsuite/g++.dg/cpp1z/pr79143.C
  3e5ca07aaa322577e51fd003d9524cb0  gcc/testsuite/g++.dg/cpp1z/pr81016.C
*************** c72d14ea97191dbb2084a00c896b7069  gcc/te
*** 18065,18070 ****
--- 18121,18127 ----
  8cc9d0aee102e32cb9fdbbb7f94b195e  gcc/testsuite/g++.dg/cpp23/ext-floating13.C
  77c1e1529829f7eb3643512344995ae5  gcc/testsuite/g++.dg/cpp23/ext-floating14.C
  2a9ad0ec05ab4b695b06b215a048e7f8  gcc/testsuite/g++.dg/cpp23/ext-floating15.C
+ 72810cc66ff000fa577f48bacf4cb603  gcc/testsuite/g++.dg/cpp23/ext-floating18.C
  1ebec45b4e33e270199203eb41a5bd2a  gcc/testsuite/g++.dg/cpp23/ext-floating2.C
  4905f5f39ea9557a77ca4fa9b78a2d30  gcc/testsuite/g++.dg/cpp23/ext-floating3.C
  7cf138b5df4746c5a50ddd27889208d6  gcc/testsuite/g++.dg/cpp23/ext-floating4.C
*************** db740268984e13059571b37af26229f7  gcc/te
*** 18094,18099 ****
--- 18151,18157 ----
  5300ced02ead4880cbff47e1d6373999  gcc/testsuite/g++.dg/cpp23/normalize5.C
  8125bd59f190ca2bccecdec26bb94127  gcc/testsuite/g++.dg/cpp23/normalize6.C
  ef7d7c0e26159c8de94fcb3f8aeb2c11  gcc/testsuite/g++.dg/cpp23/normalize7.C
+ 1559cfc237c4cd0b5a977e0a3e97dcef  gcc/testsuite/g++.dg/cpp23/pr117287-attr.C
  5fe66da6d2baee159060686defa0e47e  gcc/testsuite/g++.dg/cpp23/size_t-literals.C
  15ad584a4607eb422fa274d5aec5df69  gcc/testsuite/g++.dg/cpp23/static-operator-call1.C
  2fcd37e13aa3cc9c26d3a3e7d923dbab  gcc/testsuite/g++.dg/cpp23/static-operator-call2.C
*************** ce0107015099b9bc8bbb6308d69d1335  gcc/te
*** 18245,18250 ****
--- 18303,18309 ----
  bd5315a1ae1bb7ab6b080320eca4e7cc  gcc/testsuite/g++.dg/cpp2a/concepts-decltype4.C
  2ff1559b74cd8147b9de258edac783b1  gcc/testsuite/g++.dg/cpp2a/concepts-defarg1.C
  8b450b687a58857141c45425bdbf8e80  gcc/testsuite/g++.dg/cpp2a/concepts-defarg2.C
+ e0a60fccd4fe206005be1e84cfb2682d  gcc/testsuite/g++.dg/cpp2a/concepts-defarg3.C
  c215ebfad2b56bf6dd6b0a287515afa7  gcc/testsuite/g++.dg/cpp2a/concepts-dep1.C
  37eafad18707c0514512d3caa8c07489  gcc/testsuite/g++.dg/cpp2a/concepts-dr1430.C
  b3feeac577b96f98eb5fffae47fd7684  gcc/testsuite/g++.dg/cpp2a/concepts-dr2428.C
*************** ab8fffd9ad5ab44288587ff17983258d  gcc/te
*** 18380,18385 ****
--- 18439,18445 ----
  fc797eabdd1dc0d22609e8841d633f99  gcc/testsuite/g++.dg/cpp2a/concepts-pmf1.C
  93d1e55f1ec8ecc0589c4cf386fc18c7  gcc/testsuite/g++.dg/cpp2a/concepts-pr104410.C
  d730bf14b7c6a0ff4579eb13739f7d2f  gcc/testsuite/g++.dg/cpp2a/concepts-pr108579.C
+ 4b3fe1ba64fb6a81fe92d55b090adf3a  gcc/testsuite/g++.dg/cpp2a/concepts-pr116681.C
  2e23f19968091d773a47c43a32a784ae  gcc/testsuite/g++.dg/cpp2a/concepts-pr58500.C
  07c6a4dff1357ef61c0d30b12db5c948  gcc/testsuite/g++.dg/cpp2a/concepts-pr58534.C
  b6ba42db630bfd3259d65662fc03aaa0  gcc/testsuite/g++.dg/cpp2a/concepts-pr58535.C
*************** ecb5e52db1e00c05c68ecde56b770c71  gcc/te
*** 18508,18513 ****
--- 18568,18574 ----
  3e21a3f313ac75b520a5d812a344b4aa  gcc/testsuite/g++.dg/cpp2a/concepts-requires34.C
  1e4ab841f68e67f2c321b5e9d609a128  gcc/testsuite/g++.dg/cpp2a/concepts-requires35.C
  d3851914c01bf78597e5cb411ed0b3d5  gcc/testsuite/g++.dg/cpp2a/concepts-requires4.C
+ 9ff29a02ca82332b82da206e1f44ad5c  gcc/testsuite/g++.dg/cpp2a/concepts-requires40.C
  480013be0f806d0b078176447ae77360  gcc/testsuite/g++.dg/cpp2a/concepts-requires5.C
  8ea6ab45de0c359b113c65f1958a54a1  gcc/testsuite/g++.dg/cpp2a/concepts-requires6.C
  d9a49412355c5ed0f91582f1c88c13ff  gcc/testsuite/g++.dg/cpp2a/concepts-requires7.C
*************** e9afe83f998c36b2fb7c1f09347d0bde  gcc/te
*** 18548,18553 ****
--- 18609,18615 ----
  9fd760dc32683991c1046ee2a7769a0f  gcc/testsuite/g++.dg/cpp2a/concepts-ttp4.C
  88c3dc6cebb92ccd4e70aff54871edad  gcc/testsuite/g++.dg/cpp2a/concepts-ttp5.C
  14dc8338f97cc1b6792145fdfa5edade  gcc/testsuite/g++.dg/cpp2a/concepts-ttp6.C
+ 2024568d84c5736719a943728b101e39  gcc/testsuite/g++.dg/cpp2a/concepts-ttp7.C
  12bfd0f0b99ab93e9f3c3ea3610ad8db  gcc/testsuite/g++.dg/cpp2a/concepts-uneval1.C
  728cf90d57c99021cb85c6b8dd9ffa5e  gcc/testsuite/g++.dg/cpp2a/concepts-uneval2.C
  8ededbbf50406070bfd15b600f7ea746  gcc/testsuite/g++.dg/cpp2a/concepts-uneval3.C
*************** f8b2a0016c59d132f059d57a7638806f  gcc/te
*** 18617,18622 ****
--- 18679,18687 ----
  6517514915e5a24d0ee38257c46994cc  gcc/testsuite/g++.dg/cpp2a/consteval7.C
  72c19713fa49fcd9432f9e2dfe1238e0  gcc/testsuite/g++.dg/cpp2a/consteval8.C
  be6031c0bedd5678304d7154f8ea2b35  gcc/testsuite/g++.dg/cpp2a/consteval9.C
+ bc9287a9c261c2c6a397e45407917a6d  gcc/testsuite/g++.dg/cpp2a/constexpr-117504.C
+ ae0f76ab894a07c21bf120374821b277  gcc/testsuite/g++.dg/cpp2a/constexpr-117504a.C
+ 6fb81533c7cb2d55e9a6e69ad7c13dd2  gcc/testsuite/g++.dg/cpp2a/constexpr-117775.C
  249686f0fb9ecbea2e909ed986426855  gcc/testsuite/g++.dg/cpp2a/constexpr-98122.C
  d28d3e5520803aa70919b2a4b20e6386  gcc/testsuite/g++.dg/cpp2a/constexpr-99287.C
  2004a926e55a105d0f80db50528a9def  gcc/testsuite/g++.dg/cpp2a/constexpr-dtor1.C
*************** b41b1406ccaabb57748ecf4f05c3e13b  gcc/te
*** 18724,18729 ****
--- 18789,18795 ----
  8356345162577a74b103ae82b69fde6d  gcc/testsuite/g++.dg/cpp2a/constexpr-virtual2.C
  86447166a312855244c09f8495d3f788  gcc/testsuite/g++.dg/cpp2a/constexpr-virtual20.C
  231e5def1ab26653f262d59a62914c61  gcc/testsuite/g++.dg/cpp2a/constexpr-virtual21.C
+ f435a2ed33541ac90cf1337aa6bbe7b1  gcc/testsuite/g++.dg/cpp2a/constexpr-virtual22.C
  387607aa06c3438be11d475781b728ae  gcc/testsuite/g++.dg/cpp2a/constexpr-virtual3.C
  4d58f9556b7091659bbc5730f1a2697b  gcc/testsuite/g++.dg/cpp2a/constexpr-virtual4.C
  ff80d3043b2e823e497517b5dffee736  gcc/testsuite/g++.dg/cpp2a/constexpr-virtual5.C
*************** a6ee108d333ad358664c642b33d39e46  gcc/te
*** 18779,18784 ****
--- 18845,18852 ----
  338ebe449657eb02c4167973adb86777  gcc/testsuite/g++.dg/cpp2a/desig25.C
  4509437e82877d48180736a8562517df  gcc/testsuite/g++.dg/cpp2a/desig26.C
  daa18336bb060cdb7bbf99966d100e43  gcc/testsuite/g++.dg/cpp2a/desig27.C
+ 722ef4faecf71da588eb987965ef47ed  gcc/testsuite/g++.dg/cpp2a/desig28.C
+ e46e47d5fc0146c5f51ff736dc8fc56d  gcc/testsuite/g++.dg/cpp2a/desig29.C
  9f489d7f3f58294a91f5e5ea62989f5c  gcc/testsuite/g++.dg/cpp2a/desig3.C
  a1e304613b1097092d10ed459e46fe0c  gcc/testsuite/g++.dg/cpp2a/desig4.C
  bf71e77b18ad9c10b7e9f64f07ee9d28  gcc/testsuite/g++.dg/cpp2a/desig5.C
*************** f50c8e7c7812a7eade38d014e8410110  gcc/te
*** 18907,18912 ****
--- 18975,18981 ----
  135aaa9e481a21f9375ce861b3274c3f  gcc/testsuite/g++.dg/cpp2a/lambda-pack-init7.C
  9f0cb1929455333894b8734212f3d221  gcc/testsuite/g++.dg/cpp2a/lambda-requires1.C
  fdacf3bee1e8bb4f226b833e6e15f7e8  gcc/testsuite/g++.dg/cpp2a/lambda-targ1.C
+ fa760f5c26c36d0c67ddc827d3f5e208  gcc/testsuite/g++.dg/cpp2a/lambda-targ8.C
  22ec10632b049637a7cbf82f46eda177  gcc/testsuite/g++.dg/cpp2a/lambda-this1.C
  c09b3406a6984eced941c654f03df8b6  gcc/testsuite/g++.dg/cpp2a/lambda-this2.C
  58b6c8506ae6f77f9498fd7dbed8bdeb  gcc/testsuite/g++.dg/cpp2a/lambda-this3.C
*************** c79632f5b81fdadda65a61ca549d97f6  gcc/te
*** 18920,18925 ****
--- 18989,18995 ----
  39a9dd88b9fa47a34b758e6abf328a7a  gcc/testsuite/g++.dg/cpp2a/lambda-uneval16.C
  e1f6714196bc4cc815de786f8301141d  gcc/testsuite/g++.dg/cpp2a/lambda-uneval17.C
  e99d0c361f9eaa55d53c9232f30b64cf  gcc/testsuite/g++.dg/cpp2a/lambda-uneval2.C
+ 5f89a0a811ca20d222ad6994a619a023  gcc/testsuite/g++.dg/cpp2a/lambda-uneval24.C
  95297857429ac8850dbeb5773639ea6b  gcc/testsuite/g++.dg/cpp2a/lambda-uneval3.C
  2f7bd1774e5f890e65ee937419a29669  gcc/testsuite/g++.dg/cpp2a/lambda-uneval4.C
  8e6b610dd3dab06841943bfa5f325489  gcc/testsuite/g++.dg/cpp2a/lambda-uneval5.C
*************** ea5c8a084e134dc0226629054f6b8db0  gcc/te
*** 19064,19075 ****
--- 19134,19148 ----
  21e71f3162abd9751094104c0159c323  gcc/testsuite/g++.dg/cpp2a/paren-init35.C
  0ef61146c2fa955bc93665db5f659444  gcc/testsuite/g++.dg/cpp2a/paren-init36.C
  57eb2722cf6f699bdfa2068b9a72dcfb  gcc/testsuite/g++.dg/cpp2a/paren-init37.C
+ 4a5eaffbdd1a6c2242e0ea939159a08e  gcc/testsuite/g++.dg/cpp2a/paren-init38.C
  f917e8e53ce100d9b00585ebdb34ff7a  gcc/testsuite/g++.dg/cpp2a/paren-init4.C
  27b16b7687e7dee72f901646937411af  gcc/testsuite/g++.dg/cpp2a/paren-init5.C
  7b6aa3241d306dea0df872ed947e3df4  gcc/testsuite/g++.dg/cpp2a/paren-init6.C
  98005d747053b3076aa53928776efb7e  gcc/testsuite/g++.dg/cpp2a/paren-init7.C
  ddb0c78842f6b4e3e4606849bc1a4a82  gcc/testsuite/g++.dg/cpp2a/paren-init8.C
  fc8ccbfe7f14dd4a41ff708c5a05b226  gcc/testsuite/g++.dg/cpp2a/paren-init9.C
+ 9d5c0df7ab0b6e3e5ab03bc8eb135452  gcc/testsuite/g++.dg/cpp2a/pr117317-1.C
+ 4b52a1949fed25dc03d5cfb83047e7c5  gcc/testsuite/g++.dg/cpp2a/pr117317-2.C
  7d1c1719a1c3e44cf69662819769f8a5  gcc/testsuite/g++.dg/cpp2a/pr88534.C
  3a4139bbe15eef2dce96cb020b2681f7  gcc/testsuite/g++.dg/cpp2a/pr88537.C
  b94ce4741edeca1190c4590e425522dc  gcc/testsuite/g++.dg/cpp2a/pr89913.C
*************** fbe4f142dfdc31d389f336c3a2132127  gcc/te
*** 19155,19160 ****
--- 19228,19235 ----
  91f2e33001c655b461532a4c839e5957  gcc/testsuite/g++.dg/cpp2a/spaceship-synth13.C
  ea73038f47b70b2d70c4032d05c21938  gcc/testsuite/g++.dg/cpp2a/spaceship-synth14.C
  ccb67d98b82aa9a514ad98e1a5cb8e6f  gcc/testsuite/g++.dg/cpp2a/spaceship-synth15.C
+ 40c442f9558d4f78e1642f223634f444  gcc/testsuite/g++.dg/cpp2a/spaceship-synth16.C
+ 726a7c0699e2a24867a147d9817ee82e  gcc/testsuite/g++.dg/cpp2a/spaceship-synth16a.C
  8f91979209d8d288d5c97266ecd046d7  gcc/testsuite/g++.dg/cpp2a/spaceship-synth1a.C
  5daa0011ffb3db93835d71c071ec0d71  gcc/testsuite/g++.dg/cpp2a/spaceship-synth2.C
  6a6f4a83eb2e888266655b23bebfc463  gcc/testsuite/g++.dg/cpp2a/spaceship-synth2a.C
*************** a0ac13a0885ee162c972f58ffbd934e7  gcc/te
*** 19423,19428 ****
--- 19498,19504 ----
  8d1c97a9b811ba8c9a789baf97c48ce4  gcc/testsuite/g++.dg/debug/namespace1.C
  98d1fa8a42200722f612a8f915bb9673  gcc/testsuite/g++.dg/debug/namespace2.C
  c805656a195d9a98cc7141e7db52d9ef  gcc/testsuite/g++.dg/debug/nullptr01.C
+ 21550e19d69b370b50935c9c58915853  gcc/testsuite/g++.dg/debug/pr101533.C
  57e21034689a45ffd010ec86b2596de5  gcc/testsuite/g++.dg/debug/pr106261.C
  19de4ef7373a891f957af0121c166d89  gcc/testsuite/g++.dg/debug/pr108967.C
  553e3d84e73e0efbd2c26b6ea6df2a6c  gcc/testsuite/g++.dg/debug/pr110295.C
*************** fa076f7aee99ba9138c0541bc50c2e01  gcc/te
*** 19740,19746 ****
  95a348b65d678b6ebd4ff12262eeb554  gcc/testsuite/g++.dg/eh/pr42859.C
  6b7a6fb9b5bb6227cd79629a94634556  gcc/testsuite/g++.dg/eh/pr43365.C
  6eb9d68250f630420d0fdb982047fe17  gcc/testsuite/g++.dg/eh/pr45569.C
! d38795dc5765c85251d1b51d2837fa65  gcc/testsuite/g++.dg/eh/pr84968.C
  9623b61344d258574a3ed60670199161  gcc/testsuite/g++.dg/eh/ref-temp1.C
  edd7f2bf186873e0f253e337b7c0baa7  gcc/testsuite/g++.dg/eh/ref-temp2.C
  a9ed8d0335c982c533cb9ab886ed3a49  gcc/testsuite/g++.dg/eh/registers1.C
--- 19816,19822 ----
  95a348b65d678b6ebd4ff12262eeb554  gcc/testsuite/g++.dg/eh/pr42859.C
  6b7a6fb9b5bb6227cd79629a94634556  gcc/testsuite/g++.dg/eh/pr43365.C
  6eb9d68250f630420d0fdb982047fe17  gcc/testsuite/g++.dg/eh/pr45569.C
! 9c5d2920df5e7cc1662956187cc0aabc  gcc/testsuite/g++.dg/eh/pr84968.C
  9623b61344d258574a3ed60670199161  gcc/testsuite/g++.dg/eh/ref-temp1.C
  edd7f2bf186873e0f253e337b7c0baa7  gcc/testsuite/g++.dg/eh/ref-temp2.C
  a9ed8d0335c982c533cb9ab886ed3a49  gcc/testsuite/g++.dg/eh/registers1.C
*************** f131cd45dc233c5c2aea409de5326ad9  gcc/te
*** 19842,19847 ****
--- 19918,19924 ----
  3d3186f9075a514cd76973d347f359da  gcc/testsuite/g++.dg/expr/cond15.C
  f3062d35c6188cd4856b89b8f6662263  gcc/testsuite/g++.dg/expr/cond16.C
  9d08ff6c739f94459e2d407b40fa5667  gcc/testsuite/g++.dg/expr/cond17.C
+ d5ea9c3fa2e535c5b8c4619216b85d73  gcc/testsuite/g++.dg/expr/cond18.C
  8b10df5612f3344d4a62c8ca3d47436f  gcc/testsuite/g++.dg/expr/cond2.C
  0ee447faae923ac2c95505c9d02aa9f9  gcc/testsuite/g++.dg/expr/cond3.C
  d30ef5af28e6363dab6713f12d513bc9  gcc/testsuite/g++.dg/expr/cond4.C
*************** c58cd83dba14fdd69d32822d58dce947  gcc/te
*** 19874,19879 ****
--- 19951,19957 ----
  d1d6d34f10781c55aeb5890ea6052f5e  gcc/testsuite/g++.dg/expr/pmf-1.C
  b1bfb08b8dd0886fd13d34d4e48087cc  gcc/testsuite/g++.dg/expr/pmf-2.C
  25d2470fc9b2a170d6429d0eb09ab6d3  gcc/testsuite/g++.dg/expr/pmf-3.C
+ a777585e4c5deccae4ecf9c2e334927f  gcc/testsuite/g++.dg/expr/pmf-4.C
  e0ba8ce6144da0b9ed7164d2baac70c5  gcc/testsuite/g++.dg/expr/pr19355-1.C
  60bb03281297f707f9874467907ac6cf  gcc/testsuite/g++.dg/expr/pr29066.C
  45c0fe859061b956d94f9743c51c2fa6  gcc/testsuite/g++.dg/expr/ptr-arith1.C
*************** ed7c739de707916f3c9f5cc4c86b846a  gcc/te
*** 20040,20045 ****
--- 20118,20124 ----
  436654db69995e2c5c9e51a240c1fb2b  gcc/testsuite/g++.dg/ext/attr-unavailable-1.C
  363318401f6c24d1fd4eb4b1352223b5  gcc/testsuite/g++.dg/ext/attr-unavailable-10.C
  dcdd1affde3b96d5073c02e9962a3e1f  gcc/testsuite/g++.dg/ext/attr-unavailable-11.C
+ b813499357caf8cdbe9a29e67e87622f  gcc/testsuite/g++.dg/ext/attr-unavailable-13.C
  edbfa498035679b0c1142cf98ca9e622  gcc/testsuite/g++.dg/ext/attr-unavailable-2.C
  4e90e81502c480379e69d6b0b0b238aa  gcc/testsuite/g++.dg/ext/attr-unavailable-3.C
  5403ddd4b93109633d19e176e484580f  gcc/testsuite/g++.dg/ext/attr-unavailable-4.C
*************** b1566206f932f28f1735fbaf347ef172  gcc/te
*** 20265,20270 ****
--- 20344,20350 ----
  10abc828e1142ff735666c5c8f9d280f  gcc/testsuite/g++.dg/ext/construct1.C
  356f009d32e7c4d124b9aff9f08aa85b  gcc/testsuite/g++.dg/ext/conv1.C
  3bb50ee395de79dadc26789478a32775  gcc/testsuite/g++.dg/ext/conv2.C
+ e31f52726c2ed8b87c4299ff89887ff0  gcc/testsuite/g++.dg/ext/conv3.C
  23a3636722151d503a22f1be497277f0  gcc/testsuite/g++.dg/ext/deprecate-1.C
  d7e31c37139238d965ce29bfb25cd3ce  gcc/testsuite/g++.dg/ext/deprecate-2.C
  739dd1176941bfc4e49f4d7f144da1d3  gcc/testsuite/g++.dg/ext/desig1.C
*************** c9c92d18a37f4f8ede2a39a1b3ad62f6  gcc/te
*** 20444,20449 ****
--- 20524,20530 ----
  5ba6edf25552f47c87c7d5735f634b3c  gcc/testsuite/g++.dg/ext/is_convertible3.C
  3a805f1dafea1ecf418ab3dbdb6af96b  gcc/testsuite/g++.dg/ext/is_convertible4.C
  986a829ca110a6da40ad4e40333b4eb5  gcc/testsuite/g++.dg/ext/is_convertible5.C
+ d74301fd930f4a488c9e941cdd242900  gcc/testsuite/g++.dg/ext/is_convertible6.C
  ebb1df191bcea60ed6342dad182b8901  gcc/testsuite/g++.dg/ext/is_deducible1.C
  deb5d60ce9955a69d116b30edd2cf933  gcc/testsuite/g++.dg/ext/is_empty.C
  51590a59aaf8715b9fe4a7ae06414cb8  gcc/testsuite/g++.dg/ext/is_empty2.C
*************** a3a19e204ac6e54df8904525f84903a0  gcc/te
*** 20557,20562 ****
--- 20638,20644 ----
  a355ef8a91fca7be6ca2387ec0ad27bd  gcc/testsuite/g++.dg/ext/pr93998.C
  0de975ae227332dc92f27d4dc970fa65  gcc/testsuite/g++.dg/ext/pr94197.C
  2e98a912d14514a9d68f342ae3ccc4cd  gcc/testsuite/g++.dg/ext/pr99508.C
+ 91b1b7433c2bf56ffbffab03e9b95707  gcc/testsuite/g++.dg/ext/pragma-target2.C
  769de1884d220580907e3b4f4ef76d76  gcc/testsuite/g++.dg/ext/pragma1.C
  ad117686eb16e680b29f2f5e45ebe0df  gcc/testsuite/g++.dg/ext/pragmaweak1.C
  ae2794e104309a224e228d70e4cede48  gcc/testsuite/g++.dg/ext/pretty1.C
*************** e6bc1a09cf3c9d838c7ad4575c3d8740  gcc/te
*** 20592,20597 ****
--- 20674,20680 ----
  08aa6b7926e8190151b8337923a5ece9  gcc/testsuite/g++.dg/ext/stmtexpr23.C
  50b71ec6184b5e6c3e905f0038802697  gcc/testsuite/g++.dg/ext/stmtexpr24.C
  12bbac313feac912640ed58cf1f7cdd2  gcc/testsuite/g++.dg/ext/stmtexpr25.C
+ fb5464937383d03f7e56903a4aec5a8f  gcc/testsuite/g++.dg/ext/stmtexpr26.C
  15be25b1a07f94e4d65103bfb52d6406  gcc/testsuite/g++.dg/ext/stmtexpr3.C
  7f4e8ebedb382ebc1349d7067b034121  gcc/testsuite/g++.dg/ext/stmtexpr4.C
  a6cc01634e0bd707301c873f2d35f891  gcc/testsuite/g++.dg/ext/stmtexpr5.C
*************** e3920251c1881f799695cd65335b3cac  gcc/te
*** 20654,20659 ****
--- 20737,20743 ----
  265da9fd5c8f508dc7188b306541554d  gcc/testsuite/g++.dg/ext/unroll-1.C
  a7fce0dd60f863364affd6e56b7f245e  gcc/testsuite/g++.dg/ext/unroll-2.C
  285baa853f6386189859dff27a9a3327  gcc/testsuite/g++.dg/ext/unroll-3.C
+ ab2216d6624316a506938e2c237dbb08  gcc/testsuite/g++.dg/ext/unroll-4.C
  d9dee27db71952e589ab6eb7dd4553b7  gcc/testsuite/g++.dg/ext/unroll-5.C
  cdf5946e18d62c848aa41c2fbcdc39da  gcc/testsuite/g++.dg/ext/unsigned-typedef1.C
  8e3e51531ba90a4fa918eb6f412fea72  gcc/testsuite/g++.dg/ext/unsigned-typedef2.C
*************** e7a4920eaa905e671e74b6482c654721  gcc/te
*** 21492,21497 ****
--- 21576,21582 ----
  12f516d0ef7088644b46185bbd83ef4d  gcc/testsuite/g++.dg/init/array6.C
  c083b6ec43687658fab80f7d11038fb8  gcc/testsuite/g++.dg/init/array60.C
  8f1cbb3eca47b9c2626ec2b222c22fd9  gcc/testsuite/g++.dg/init/array61.C
+ 6dacb8601d29390665707d5d3244c16d  gcc/testsuite/g++.dg/init/array66.C
  02cf876b0b0d2594118addc046b9112a  gcc/testsuite/g++.dg/init/array7.C
  4ab5bb9dc38b78d749ba584adefbdc33  gcc/testsuite/g++.dg/init/array8.C
  b1c2a3438d19ab4734ef026ce6aba7fa  gcc/testsuite/g++.dg/init/array9.C
*************** c43cd4a90674d630795e0323738e0460  gcc/te
*** 21885,21890 ****
--- 21970,21976 ----
  9a257f3564fd42fe9d7e00c5567f89d2  gcc/testsuite/g++.dg/ipa/pr108509.C
  9cf2cc98e56a48a7332ea02be0425960  gcc/testsuite/g++.dg/ipa/pr108830.C
  e66c84f48f938ed2bb548ce51957afce  gcc/testsuite/g++.dg/ipa/pr113757.C
+ 9183db2978d574bc26d43a0d942ec920  gcc/testsuite/g++.dg/ipa/pr118243.C
  02f3704c0511b2d171c55dbf09c64325  gcc/testsuite/g++.dg/ipa/pr43695.C
  5345293723ad062b59b168c319738e1e  gcc/testsuite/g++.dg/ipa/pr43812.C
  b001cbe3dfdeb7d2a1061f024aa08ea4  gcc/testsuite/g++.dg/ipa/pr44372.C
*************** c0d5ffeb75a35d8442846603fb55dbb5  gcc/te
*** 22243,22249 ****
  a08f7a8ee36ffedf58d45cdd0bea310c  gcc/testsuite/g++.dg/lookup/pr97905.C
  f7f019c20c4a98b96f2eecf985428f03  gcc/testsuite/g++.dg/lookup/pr99030.C
  a4d811ecd0c3887d68812c42b8d16691  gcc/testsuite/g++.dg/lookup/pr99039.C
! f3f1703b34389748bf54d9576b9b99a7  gcc/testsuite/g++.dg/lookup/pr99116-1.C
  cba7f8d0ef2bdfaf7627f1941b7dcd57  gcc/testsuite/g++.dg/lookup/pr99116-2.C
  9fc063d780e4510399927cfe832e8770  gcc/testsuite/g++.dg/lookup/pretty1.C
  f30dda31dee159f3aebbbc269a5fd8e4  gcc/testsuite/g++.dg/lookup/ptrmem1.C
--- 22329,22335 ----
  a08f7a8ee36ffedf58d45cdd0bea310c  gcc/testsuite/g++.dg/lookup/pr97905.C
  f7f019c20c4a98b96f2eecf985428f03  gcc/testsuite/g++.dg/lookup/pr99030.C
  a4d811ecd0c3887d68812c42b8d16691  gcc/testsuite/g++.dg/lookup/pr99039.C
! bfaf930bf878b1d2b2edff1232d8f515  gcc/testsuite/g++.dg/lookup/pr99116-1.C
  cba7f8d0ef2bdfaf7627f1941b7dcd57  gcc/testsuite/g++.dg/lookup/pr99116-2.C
  9fc063d780e4510399927cfe832e8770  gcc/testsuite/g++.dg/lookup/pretty1.C
  f30dda31dee159f3aebbbc269a5fd8e4  gcc/testsuite/g++.dg/lookup/ptrmem1.C
*************** cac1beb5973f2ae7f413286aea273726  gcc/te
*** 22521,22526 ****
--- 22607,22613 ----
  8b0aae3760bbbdbb56a12a24c02e7d7e  gcc/testsuite/g++.dg/lto/pr101396_0.C
  ac5555b4df88275d04e41aa95b0aca9a  gcc/testsuite/g++.dg/lto/pr101396_1.C
  57e4a1572912531a0ef7ae5e66a36910  gcc/testsuite/g++.dg/lto/pr105399_0.C
+ 6e7e7fc204b3df6d8de9823aac948376  gcc/testsuite/g++.dg/lto/pr107467_0.C
  0a39d2e9c16962015b5adf8bff3214c8  gcc/testsuite/g++.dg/lto/pr108772_0.C
  ba9b686c163762488051ec4094a838b2  gcc/testsuite/g++.dg/lto/pr40818_0.C
  08a786b250f802e56e458c7d60a358fc  gcc/testsuite/g++.dg/lto/pr42987_0.C
*************** ebbec8ff132c1bf960fba8ddac82480e  gcc/te
*** 23961,23966 ****
--- 24048,24054 ----
  fc956d5d39ddca9870d1a2fca7df287d  gcc/testsuite/g++.dg/opt/pr109434.C
  b66c56d1ba4ee568e881df0560f18827  gcc/testsuite/g++.dg/opt/pr109462.C
  b8fef9a1bd09e90415f3e35f5466c85c  gcc/testsuite/g++.dg/opt/pr110515.C
+ 149c3b47d16cfa08669bf79341552440  gcc/testsuite/g++.dg/opt/pr119327.C
  2896f5b1a96dd9fabb1dbb65cb4c5921  gcc/testsuite/g++.dg/opt/pr13066-1.C
  4f87f86b9f018cae74888e97468b2fe0  gcc/testsuite/g++.dg/opt/pr14029.C
  8fb7e68e9e9b5eb02628e03f5333e645  gcc/testsuite/g++.dg/opt/pr14888.C
*************** a0196ebfddfdcb265613530b34c75302  gcc/te
*** 24275,24280 ****
--- 24363,24370 ----
  662c11d709b6ca85c73287be5207f3ac  gcc/testsuite/g++.dg/other/anon-union3.C
  7ea92f81a45b2537512cf880ee35fe92  gcc/testsuite/g++.dg/other/anon-union4.C
  d0b5965b4982fc2453056380914a719f  gcc/testsuite/g++.dg/other/anon-union5.C
+ 498c728995604cce6cd6fb0603cfbad8  gcc/testsuite/g++.dg/other/anon-union6.C
+ 4f90ececca3ff47581ca71749fda9c86  gcc/testsuite/g++.dg/other/anon-union7.C
  25bec11b40119085408d52eaa5b86f6e  gcc/testsuite/g++.dg/other/anon2.C
  ac03cab67f2c4f5731d36b19f2ee4f42  gcc/testsuite/g++.dg/other/anon3.C
  735bc52cab8eca56a711c2c10845c981  gcc/testsuite/g++.dg/other/anon4.C
*************** f3924301e9a75e88ee237b6baeb316be  gcc/te
*** 24896,24901 ****
--- 24986,24992 ----
  34393b72e5dec85fca930dee15e2f669  gcc/testsuite/g++.dg/parse/crash7.C
  73b1cabb6ebba6515fc142024f664fa3  gcc/testsuite/g++.dg/parse/crash70.C
  78546442b1a4a93b74bc9a74697998e4  gcc/testsuite/g++.dg/parse/crash71.C
+ c3945b36146c7d629c7336eb3f9329fe  gcc/testsuite/g++.dg/parse/crash77.C
  5818f331167c496db06ad694932a1beb  gcc/testsuite/g++.dg/parse/crash9.C
  5940e29a523673e2c47048c21c11d678  gcc/testsuite/g++.dg/parse/ctor1.C
  6a4d22d64949d622a19d9e79684aad65  gcc/testsuite/g++.dg/parse/ctor10.C
*************** c555871eebd38318d08e6231eacd3642  gcc/te
*** 25420,25425 ****
--- 25511,25518 ----
  fd6634de9e7bec1226bf7939736dd6a2  gcc/testsuite/g++.dg/pr107985.C
  9f85b642c872ce476b819232071a1f96  gcc/testsuite/g++.dg/pr108520.C
  f678b424d2148346313809851fbbe611  gcc/testsuite/g++.dg/pr109524.C
+ adfc90a4ec5f7e6acacbdafc592a2862  gcc/testsuite/g++.dg/pr113673.C
+ 6431e5522e8138d482199836afdeb823  gcc/testsuite/g++.dg/pr114501_0.C
  2ac64817a39fe1a5c2dc328f4233cda1  gcc/testsuite/g++.dg/pr37742.C
  32b2fbda29ffd2ac2181c43c971f3a7d  gcc/testsuite/g++.dg/pr44328.C
  e43b4ea2d038b181b57782d5d56d22ba  gcc/testsuite/g++.dg/pr44486.C
*************** c196198d50bad93b87f24ccaf1c0ee15  gcc/te
*** 25493,25498 ****
--- 25586,25592 ----
  0f0d9bb4908d6bdb56109652b1ef4e88  gcc/testsuite/g++.dg/pr65032.C
  2a99023224d23b7b4c2df438196b9877  gcc/testsuite/g++.dg/pr65049.C
  c987d521d6ec4222a0bbaff58ae0df77  gcc/testsuite/g++.dg/pr65295.C
+ 2909098d71cb5efcd254025c0c520d24  gcc/testsuite/g++.dg/pr66279.C
  20bcb78b164336c6b42304de362d905a  gcc/testsuite/g++.dg/pr66655.C
  575d8cfa0f7cc7a30ac74c14eec274d2  gcc/testsuite/g++.dg/pr66655.h
  9b717eabe7d22f65a71673e3ffc1470b  gcc/testsuite/g++.dg/pr66655_1.cc
*************** d1ab3a2909d9d576c5dfa94f007a2714  gcc/te
*** 25813,25818 ****
--- 25907,25913 ----
  5428fd71694c60d17f4ec642a0d2f66b  gcc/testsuite/g++.dg/template/access40a.C
  70ca1a844bab441488d753b92bdb5b0a  gcc/testsuite/g++.dg/template/access41.C
  546a46c71775301a03f3deb4b60d4aad  gcc/testsuite/g++.dg/template/access41a.C
+ 7b80fa9125b48cb8cc6fddc40f053fa4  gcc/testsuite/g++.dg/template/access42.C
  043c53bbc7cad60a3c72bfa79987f011  gcc/testsuite/g++.dg/template/access5.C
  3f2e5ae210f767c1589637afbcf45353  gcc/testsuite/g++.dg/template/access6.C
  974ff59cea85bedc028eb1bc9e350cc5  gcc/testsuite/g++.dg/template/access7.C
*************** cfe8d64e9ca37d3d958070b43b9508ee  gcc/te
*** 25869,25874 ****
--- 25964,25970 ----
  c3bf718e40674b7f92cc163501e6cb19  gcc/testsuite/g++.dg/template/array34.C
  b61cd4449e714e370fbecc4fe1c24eb9  gcc/testsuite/g++.dg/template/array35.C
  e65889f5cceab5c9e8951170856d669d  gcc/testsuite/g++.dg/template/array36.C
+ 513ae61e07cb4c78f820f5ab1ac70358  gcc/testsuite/g++.dg/template/array37.C
  3904f7cfd18135b5f8ef1dbb020648fc  gcc/testsuite/g++.dg/template/array4.C
  c557bdb58ff52b9fc368185880923627  gcc/testsuite/g++.dg/template/array5.C
  294448858892b33e7116237b86ab785a  gcc/testsuite/g++.dg/template/array6.C
*************** c96fbe06df46f858258f3ea5558788f1  gcc/te
*** 25961,25966 ****
--- 26057,26063 ----
  93a91f0833b39ca0b08d8b6d0c0d19b1  gcc/testsuite/g++.dg/template/conv18.C
  bd99141c68d90e04855763e3f2bfa63a  gcc/testsuite/g++.dg/template/conv19.C
  383f6618c1ccaddea23b36ff23d6d35e  gcc/testsuite/g++.dg/template/conv2.C
+ 05f9ba85749887a212abad39f1a3aabf  gcc/testsuite/g++.dg/template/conv21.C
  be5017725e9889a47d07ba0d3a3464ff  gcc/testsuite/g++.dg/template/conv3.C
  53aab59e272fd22ef1ad191d0f31e01d  gcc/testsuite/g++.dg/template/conv4.C
  65388659b6ed4f0befbd55edf3402b26  gcc/testsuite/g++.dg/template/conv5.C
*************** d48db96d165a20e7398ea0f7e9cd00c3  gcc/te
*** 26313,26318 ****
--- 26410,26416 ----
  b705911769b4dedde26fc55666525547  gcc/testsuite/g++.dg/template/fn-ptr3a.C
  b21023a383690906d31ed5c2f45cd122  gcc/testsuite/g++.dg/template/fn-ptr3b.C
  2137f89260c82e219c89d76cc24abafa  gcc/testsuite/g++.dg/template/fn-ptr4.C
+ 15c91b52ba262150255ee24fc766130a  gcc/testsuite/g++.dg/template/fn-ptr5.C
  636ef7c6b9de68376146848db023fb19  gcc/testsuite/g++.dg/template/fn-ref1.C
  f85ab66eeb2b191e2fee2b0b5013d956  gcc/testsuite/g++.dg/template/fn.C
  1581f9141ad183d6d31a009275ebf7a4  gcc/testsuite/g++.dg/template/fnspec1.C
*************** e99bfe98523cadafac68ba8e9e8c8f35  gcc/te
*** 26394,26399 ****
--- 26492,26498 ----
  76ebd5e11a16898d1bdf51f8b1f76449  gcc/testsuite/g++.dg/template/friend73.C
  08aeef7e95f0f822e6e8b78c88d9bbb7  gcc/testsuite/g++.dg/template/friend74.C
  ceb858e95982ac0af2e9168f31aea229  gcc/testsuite/g++.dg/template/friend8.C
+ ae55d6e48a2ac8b72c938dc82c696408  gcc/testsuite/g++.dg/template/friend84.C
  59b5bf61b7f6210d3cf3b9b45692794a  gcc/testsuite/g++.dg/template/friend9.C
  d5d24fc94d133229a10c5b13f44c253b  gcc/testsuite/g++.dg/template/func1.C
  1959538a6f69b747e873f9e029cc6fa6  gcc/testsuite/g++.dg/template/func2.C
*************** fa23934e49741783f674026ff5030aff  gcc/te
*** 27465,27472 ****
--- 27564,27577 ----
  e8eff4c0ef885b002db007e536bb99f2  gcc/testsuite/g++.dg/torture/pr109342.C
  695916482bd1d276cc3c727b90232254  gcc/testsuite/g++.dg/torture/pr109724.C
  4b7c75dc51b97d5dc81c7e936ff3b460  gcc/testsuite/g++.dg/torture/pr111019.C
+ 6766aa21b009a63d71d22aa6baba228d  gcc/testsuite/g++.dg/torture/pr111245.C
  25af1620df0107cd03f275ddc7fd98b6  gcc/testsuite/g++.dg/torture/pr111465.C
  f5cb8caa482838045861d5ee18445814  gcc/testsuite/g++.dg/torture/pr113896.C
+ 6c3c5585841ff28b7c4ab8a61978f689  gcc/testsuite/g++.dg/torture/pr113994.C
+ ef666186552a9562e70783bbdf98ac33  gcc/testsuite/g++.dg/torture/pr115694.C
+ f298eddbaaad3dfdc15f6cf9683ff08a  gcc/testsuite/g++.dg/torture/pr11911.C
+ 9df51f0b5a7e716286f2e97dfd28d477  gcc/testsuite/g++.dg/torture/pr119610.C
+ 9cede7e8b587157ccdf0f9f6667d6cc8  gcc/testsuite/g++.dg/torture/pr119778.C
  161154ed9f6193a2a7da119e068c3f3f  gcc/testsuite/g++.dg/torture/pr27218.C
  a84e9fff95df4801f8e582fbc33303b8  gcc/testsuite/g++.dg/torture/pr30252.C
  e980bf95890544d46879b89f7aa98df6  gcc/testsuite/g++.dg/torture/pr30567.C
*************** d53f4a36bfd00298b6b687881aad6861  gcc/te
*** 27924,27929 ****
--- 28029,28035 ----
  5afe578074ff640a77903318faea8e72  gcc/testsuite/g++.dg/torture/str_empty.C
  42e128b3145495bd2df35c3cdcc684ac  gcc/testsuite/g++.dg/torture/tail-padding1.C
  0b01f7feb325a8c1dfd3c796eab53860  gcc/testsuite/g++.dg/torture/type-generic-1.C
+ 578b102f9caacae988fc6b469dc3f9c1  gcc/testsuite/g++.dg/torture/vect-absu-1.C
  ed87f64357e7fd49760145e5c345491d  gcc/testsuite/g++.dg/torture/vector-struct-1.C
  451c0082f351cdec594741735d086495  gcc/testsuite/g++.dg/torture/vector-subaccess-1.C
  164b3eb60b0c717428d0673a23922dfc  gcc/testsuite/g++.dg/torture/vshuf-16.inc
*************** bca63426f4323897c7869d093f089d80  gcc/te
*** 27995,28000 ****
--- 28101,28107 ----
  4dee88733af9764407daef44d97d6ea0  gcc/testsuite/g++.dg/tree-ssa/initlist-opt1.C
  7f93f0a7fb5af2dd6932d9ff18f9b668  gcc/testsuite/g++.dg/tree-ssa/initlist-opt2.C
  d12a46c580eb9d4dc235d3622d0f89b4  gcc/testsuite/g++.dg/tree-ssa/initlist-opt3.C
+ f1286ac97f93f603a960ccbf41fec9e9  gcc/testsuite/g++.dg/tree-ssa/initlist-opt7.C
  127599cd2fc99b9d009cc2cd103b0b2e  gcc/testsuite/g++.dg/tree-ssa/inline-1.C
  05007feb9baa282cc5097a6f8208ee56  gcc/testsuite/g++.dg/tree-ssa/inline-2.C
  dc09af43ca9827d657db7f2b91897bea  gcc/testsuite/g++.dg/tree-ssa/inline-3.C
*************** b43892ed3a0294f440ccfdc4017d74ed  gcc/te
*** 28026,28031 ****
--- 28133,28139 ----
  f95e009eb80810faddca573e232d899e  gcc/testsuite/g++.dg/tree-ssa/pr106936.C
  473b75bc40f72c03a042a150d43cb69b  gcc/testsuite/g++.dg/tree-ssa/pr107206.C
  5f9aef2211a5b0981f2a79d22debe366  gcc/testsuite/g++.dg/tree-ssa/pr107876.C
+ 284302237efd60e1d517c0925cad7644  gcc/testsuite/g++.dg/tree-ssa/pr118924.C
  482a64ed60783060cd1097d55e09aa68  gcc/testsuite/g++.dg/tree-ssa/pr13146.C
  e92faf794746371f0e92e8a68244ff5e  gcc/testsuite/g++.dg/tree-ssa/pr13954.C
  316b32deb2433fa7d0e4ad1c5a62804b  gcc/testsuite/g++.dg/tree-ssa/pr14703.C
*************** ebc4dd8d7b9c346d612ab748d0d8bda0  gcc/te
*** 28254,28259 ****
--- 28362,28369 ----
  80dcb1a17f65b63cbfe2e3509439563c  gcc/testsuite/g++.dg/ubsan/pr101210.C
  ad6c0b4132032f21f64bfdd4836d3313  gcc/testsuite/g++.dg/ubsan/pr105093.C
  59f2687e6719ef7d3d19b4de0e99a075  gcc/testsuite/g++.dg/ubsan/pr105729.C
+ 06fb5e3c91f4d1b4f58ee978dd2b4b30  gcc/testsuite/g++.dg/ubsan/pr116449.C
+ a9c7210a5fb28a26cd54ad5ce0872a53  gcc/testsuite/g++.dg/ubsan/pr117259.C
  a654df71119821a4303cc9fe0501191b  gcc/testsuite/g++.dg/ubsan/pr59250.C
  420a6623146bb014dc1310134356d81f  gcc/testsuite/g++.dg/ubsan/pr59306.C
  79755a51c3cbb97ff48bd411272f6b08  gcc/testsuite/g++.dg/ubsan/pr59331.C
*************** c378ba928bee729112b705d875e7738f  gcc/te
*** 28386,28391 ****
--- 28496,28502 ----
  141b03fd1e88cf3f158c145d30e5418b  gcc/testsuite/g++.dg/vect/pr110557.cc
  a774f9ba94df372c6d30a93f182668b8  gcc/testsuite/g++.dg/vect/pr112793.cc
  917d9d7e1f7b3dec4bc3be8a0e121df9  gcc/testsuite/g++.dg/vect/pr112961.cc
+ 53f2f1665d0bd22cbc1735b16ee8dc34  gcc/testsuite/g++.dg/vect/pr115278.cc
  02ab0e7dea4c30ddeaecb971c0b8241e  gcc/testsuite/g++.dg/vect/pr19951.cc
  e7c5a636a280962b70166d1494223f9c  gcc/testsuite/g++.dg/vect/pr21218.cc
  9a0a6f56bdb2cc697abc78c901418a19  gcc/testsuite/g++.dg/vect/pr21734_1.cc
*************** fd872aba23fcbd09e4b5cb3b61dbaadf  gcc/te
*** 28632,28637 ****
--- 28743,28749 ----
  a2a1c47c22d508bea7ea5f6ecfa4f8e0  gcc/testsuite/g++.dg/warn/Wfloat-equal-1.C
  eccc2b2ed947b72890c78d9f36703c07  gcc/testsuite/g++.dg/warn/Wformat-1.C
  410904ada3f7963a6e257984ca090127  gcc/testsuite/g++.dg/warn/Wformat-2.C
+ 043066dc34a8f88f0f8349d9f0370f8a  gcc/testsuite/g++.dg/warn/Wformat-3.C
  7176ad1e7207328b46fc3387dcae316c  gcc/testsuite/g++.dg/warn/Wformat-char8_t-1.C
  c051125966f7b3d00fdd612ba7549043  gcc/testsuite/g++.dg/warn/Wformat-method.C
  9af8ba70e2572530afefa641561d5f5c  gcc/testsuite/g++.dg/warn/Wformat-pr71863.C
*************** edc0bf3eb4f335c840738a8fe1732279  gcc/te
*** 28804,28809 ****
--- 28916,28922 ----
  f828038b7b0977748fac3e57cac5a3da  gcc/testsuite/g++.dg/warn/Wpointer-arith-1.C
  1d9458fc60d7d418323599b03b1bdb66  gcc/testsuite/g++.dg/warn/Wrange-loop-construct.C
  68ce3ed4f1a0e041fcb5b20b12b8ba42  gcc/testsuite/g++.dg/warn/Wrange-loop-construct2.C
+ 5bc140087fad838f5c93ce13d319a48e  gcc/testsuite/g++.dg/warn/Wrange-loop-construct3.C
  bc5f141d5ba64d906981c425b810d3ed  gcc/testsuite/g++.dg/warn/Wredundant-decls-spec.C
  f03226124ff1dcc1fed0a1fa8c9a335c  gcc/testsuite/g++.dg/warn/Wredundant-tags-2.C
  0369ff7656e712932961336c9fab1a58  gcc/testsuite/g++.dg/warn/Wredundant-tags-3.C
*************** c935eb4f9165b002b3615d052e7ee8db  gcc/te
*** 29159,29165 ****
--- 29272,29280 ----
  d5e518a89029e53244731ceed8c64fc4  gcc/testsuite/g++.dg/warn/deprecated-16.C
  0fb7e93661517b2d46da504d60c18ce0  gcc/testsuite/g++.dg/warn/deprecated-17.C
  5ba17fcb74188f6bd8e6e540093b8cd8  gcc/testsuite/g++.dg/warn/deprecated-18.C
+ 85b34a6a77145e6e988a38ae6c2a48d2  gcc/testsuite/g++.dg/warn/deprecated-19.C
  26bafcbe2a9f3729e0b0e2ff8ccf5317  gcc/testsuite/g++.dg/warn/deprecated-2.C
+ c63993ca8df065564f0d4ffb32339577  gcc/testsuite/g++.dg/warn/deprecated-20.C
  482df2a6c06bdf9046c6729484298715  gcc/testsuite/g++.dg/warn/deprecated-3.C
  98c2c2dc0644115f45902f826dc56a04  gcc/testsuite/g++.dg/warn/deprecated-4.C
  9fb0087e50484de53d979d8e849be2eb  gcc/testsuite/g++.dg/warn/deprecated-5.C
*************** edc1a994e1246279f2c5c7c45650e061  gcc/te
*** 29259,29264 ****
--- 29374,29380 ----
  1ba5741dd0aa023aa23edc39041b235e  gcc/testsuite/g++.dg/warn/pr108365.C
  adea0a023eba0c3c51b6a4894014d35a  gcc/testsuite/g++.dg/warn/pr11159.C
  f257fca4d00c8c67aa2b9d6e43ee906f  gcc/testsuite/g++.dg/warn/pr11492.C
+ b095255e81269c7739d80713d78edfb0  gcc/testsuite/g++.dg/warn/pr117825.C
  5fab7f879534ef351718dc73d825b667  gcc/testsuite/g++.dg/warn/pr12242.C
  5ea14e490362652b825c770f9d00d814  gcc/testsuite/g++.dg/warn/pr13358-2.C
  5af7a1b2eded6ae8e6b38e3c1b5e15a6  gcc/testsuite/g++.dg/warn/pr13358-3.C
*************** f3ce91773bd0b4a3127c481ccd50f20e  gcc/te
*** 32788,32793 ****
--- 32904,32911 ----
  ab6c5e333d0a740ae5ecff69966813a2  gcc/testsuite/g++.target/aarch64/sve/min_1.C
  6bb662ee32d75fad86cbbcc07aab9998  gcc/testsuite/g++.target/aarch64/sve/pr102252.C
  0dc60096927b240a4fb696311ad6b402  gcc/testsuite/g++.target/aarch64/sve/pr107920.C
+ a36c6629cdaa92f5a41aa0c862cf5a54  gcc/testsuite/g++.target/aarch64/sve/pr119610-sve.C
+ a99137b765de9aa71ce57dc37592e682  gcc/testsuite/g++.target/aarch64/sve/pr119706.C
  29fcc7f7695fcab2e4779698100f3053  gcc/testsuite/g++.target/aarch64/sve/pr96974.C
  6c0e94c363caf9e62df35ea98b4918ed  gcc/testsuite/g++.target/aarch64/sve/pr98177-1.C
  e64000c150bb204c31dca884ee33dd4f  gcc/testsuite/g++.target/aarch64/sve/pr98177-2.C
*************** bb7292912fa6d506586421d0df58412b  gcc/te
*** 32811,32816 ****
--- 32929,32935 ----
  4c06abe7b8d5bd183704907c3993392c  gcc/testsuite/g++.target/arm/pr102842.C
  5d0bfb5484f8db2f1a2556bb0ea6394b  gcc/testsuite/g++.target/arm/pr103676.C
  d8845d0576030f586cc8563067a1c9ed  gcc/testsuite/g++.target/arm/pr107080.C
+ 98e5c3b96316f917c107a3470b80e1ac  gcc/testsuite/g++.target/arm/pr115485.C
  86ce099311b8a462979885c1f82c41db  gcc/testsuite/g++.target/arm/pr81497.C
  c66ac2233f3efac56ec64b9294b3708d  gcc/testsuite/g++.target/arm/pr95726.C
  881bcc41183f756e0d7cbda13b2b51df  gcc/testsuite/g++.target/arm/pr99593.C
*************** ce8e2501180e952788ad7bfbfebcd617  gcc/te
*** 32858,32863 ****
--- 32977,32983 ----
  f23b91fd4df934b4b8cb89c14e082b05  gcc/testsuite/g++.target/i386/interference.C
  0ec10c6dd8c46db7332b15201fba84ba  gcc/testsuite/g++.target/i386/m128-check.h
  a1f73425439294ed2e5c470eb6a67f31  gcc/testsuite/g++.target/i386/m256-check.h
+ 662a67ed8bae70191097bad248259b6d  gcc/testsuite/g++.target/i386/mangling-alias1.C
  d9283642c1e353810c049d439e8f3c60  gcc/testsuite/g++.target/i386/mv1.C
  c996cc7c2a4c7d02d3a6fcb89d3bc8db  gcc/testsuite/g++.target/i386/mv10.C
  5dc72e87fb3dc9a6c73b652710d87007  gcc/testsuite/g++.target/i386/mv11.C
*************** bc255ba4628b94d5377f0ba915ad26da  gcc/te
*** 32881,32887 ****
  c3abd0fb44ca490064aaa6988814d40c  gcc/testsuite/g++.target/i386/mv26.C
  203c2fb05767e713a362682a2dcedfc7  gcc/testsuite/g++.target/i386/mv27.C
  015182fced49b5ec2160104b1e1fcfd5  gcc/testsuite/g++.target/i386/mv28.C
! 3dc8383e8aa0e822e68ee82dc2cbbc5f  gcc/testsuite/g++.target/i386/mv29.C
  bad9a677892adffe2c45653797aad55c  gcc/testsuite/g++.target/i386/mv3.C
  8e16cb4ef8b3ee3b728e21112c7331d1  gcc/testsuite/g++.target/i386/mv30.C
  6c2437562ef96defbdcf21aa49f5676f  gcc/testsuite/g++.target/i386/mv31.C
--- 33001,33007 ----
  c3abd0fb44ca490064aaa6988814d40c  gcc/testsuite/g++.target/i386/mv26.C
  203c2fb05767e713a362682a2dcedfc7  gcc/testsuite/g++.target/i386/mv27.C
  015182fced49b5ec2160104b1e1fcfd5  gcc/testsuite/g++.target/i386/mv28.C
! f1dcd0f047238a664c71844662594d0b  gcc/testsuite/g++.target/i386/mv29.C
  bad9a677892adffe2c45653797aad55c  gcc/testsuite/g++.target/i386/mv3.C
  8e16cb4ef8b3ee3b728e21112c7331d1  gcc/testsuite/g++.target/i386/mv30.C
  6c2437562ef96defbdcf21aa49f5676f  gcc/testsuite/g++.target/i386/mv31.C
*************** a47169fc44b57b7b3d6ec05df74c336a  gcc/te
*** 32961,32966 ****
--- 33081,33087 ----
  7086db1987eae6c4b80f5ef0dbadd48f  gcc/testsuite/g++.target/i386/pr111497.C
  51556317586878910157bab09d18703d  gcc/testsuite/g++.target/i386/pr111822.C
  f0bd5d5c6a67d4e72ffa0abde025c525  gcc/testsuite/g++.target/i386/pr112443.C
+ 309d3ebda65ef0d79e21d0a9c0310055  gcc/testsuite/g++.target/i386/pr119689.C
  55fb67abf6517f92b1a0240d2c06b5c5  gcc/testsuite/g++.target/i386/pr35513-1.C
  14dde546e4eefec7aa6d1ac41261cb16  gcc/testsuite/g++.target/i386/pr35513-2.C
  1c706f97b6d93c0124dc4a203c98f6d2  gcc/testsuite/g++.target/i386/pr57362.C
*************** a873678a5188427c7ceb88e3a408ce84  gcc/te
*** 33056,33061 ****
--- 33177,33183 ----
  bac7601eaf931ebd7c595a2dc9672d64  gcc/testsuite/g++.target/powerpc/pr102024.C
  52ec25547d922533a11b2b87bda1ef47  gcc/testsuite/g++.target/powerpc/pr105325.C
  a786ad78bd3d3301483d3f57c15f4634  gcc/testsuite/g++.target/powerpc/pr105485.C
+ eb79d8fe9b8ec72032c23669461e1efd  gcc/testsuite/g++.target/powerpc/pr106069.C
  ea50428d09d0e781698b21023398bfee  gcc/testsuite/g++.target/powerpc/pr110741.C
  8ca0dcb511ad4423506f8f334a6092e7  gcc/testsuite/g++.target/powerpc/pr111366.C
  92cbd869a66e265db57a505d568038a0  gcc/testsuite/g++.target/powerpc/pr111367.C
*************** fb86a7339c2fdd23671a828022581a5a  gcc/te
*** 33135,33140 ****
--- 33257,33263 ----
  1f98b1d1757ebed2e4df3c91f91846f5  gcc/testsuite/g++.target/s390/pr102024-4.C
  f0a679d402cd83e81a6efa4bbb02d02b  gcc/testsuite/g++.target/s390/pr102024-5.C
  f65e23ee2638d7bc7c063a2f41350d9c  gcc/testsuite/g++.target/s390/pr102024-6.C
+ 377180e93d364db46b93992e870cdab7  gcc/testsuite/g++.target/s390/pr119834.C
  63c9cacf807bdee09a1606a202373f30  gcc/testsuite/g++.target/s390/pr94704-1.C
  f536562eba9a9954ace3a616ac52f438  gcc/testsuite/g++.target/s390/pr94704-2.C
  673a3b45283bd1b872f1b198781a14a3  gcc/testsuite/g++.target/s390/pr94704-3.C
*************** aac64916588db7f60e87baab1268b8e2  gcc/te
*** 34201,34206 ****
--- 34324,34334 ----
  ca66c7f74573d2e86d4d649aa258e0e5  gcc/testsuite/gcc.c-torture/compile/pr111699-1.c
  2e72b534a63c68ecb879a9df0f934950  gcc/testsuite/gcc.c-torture/compile/pr112303.c
  597d2b1dda1b08561fbe83f15c76f510  gcc/testsuite/gcc.c-torture/compile/pr113603.c
+ cddb5f327c3c1dc3f843d95d86f7f6a9  gcc/testsuite/gcc.c-torture/compile/pr115143-1.c
+ ece87744c4e664bf39922d9937465df1  gcc/testsuite/gcc.c-torture/compile/pr115143-2.c
+ 14405634ff4726e79f727af592887eec  gcc/testsuite/gcc.c-torture/compile/pr115143-3.c
+ a374b3675317752237cc478b2e662a04  gcc/testsuite/gcc.c-torture/compile/pr115277.c
+ 0385d5805cb6d90dc8a17f2f44d3450e  gcc/testsuite/gcc.c-torture/compile/pr117358.c
  33c7141fcf5b1add3ddd2be0100f1f0d  gcc/testsuite/gcc.c-torture/compile/pr12517.c
  ec16b12ab11c499bf321be18ea59da33  gcc/testsuite/gcc.c-torture/compile/pr12578.c
  86f3d5cf87d24e97aa663b79f2d0ac5d  gcc/testsuite/gcc.c-torture/compile/pr12899.c
*************** c152b22273bc18a4c77712056ad155b2  gcc/te
*** 35550,35555 ****
--- 35678,35684 ----
  7b2e318b0268b72be90a65cf76db847a  gcc/testsuite/gcc.c-torture/execute/20230630-2.c
  4a01ae6027e3e54850f1b7a4cfd9e943  gcc/testsuite/gcc.c-torture/execute/20230630-3.c
  88c62fc9ed04e0f727eb572abcccb0d2  gcc/testsuite/gcc.c-torture/execute/20230630-4.c
+ b1b4e62be38d27a57c83e464074430c1  gcc/testsuite/gcc.c-torture/execute/20241029-1.c
  65f01ac7346bd4d47ed9c1ca94ab74ff  gcc/testsuite/gcc.c-torture/execute/900409-1.c
  5aefab4daab0bd29ecf2a389f3c44f40  gcc/testsuite/gcc.c-torture/execute/920202-1.c
  74e2b57e4fb280900b2f9b169dd75b1c  gcc/testsuite/gcc.c-torture/execute/920302-1.c
*************** eda9698796bef969bb50e5712208e61b  gcc/te
*** 36277,36282 ****
--- 36406,36412 ----
  4badcaaf116af3e7dd155e4534d8ac88  gcc/testsuite/gcc.c-torture/execute/pr108292.c
  154a19663c66fcea6a49b6718c685882  gcc/testsuite/gcc.c-torture/execute/pr108498-1.c
  ee35df6bcc12c95f226b88f0d72b377d  gcc/testsuite/gcc.c-torture/execute/pr108498-2.c
+ 51a0035891ee3cb8a4d201e8c3d3f1ed  gcc/testsuite/gcc.c-torture/execute/pr108789.c
  c8bc63449a253495869d91d5e4176c35  gcc/testsuite/gcc.c-torture/execute/pr109040.c
  23cbbe0d93f89048f8d1ce1883e61ac2  gcc/testsuite/gcc.c-torture/execute/pr109778.c
  cac0ac2f80f26d97359c398003db0f18  gcc/testsuite/gcc.c-torture/execute/pr109925.c
*************** db337c00bedfc272ed5edbb6acffed7c  gcc/te
*** 36290,36299 ****
--- 36420,36441 ----
  e7bc1f52654c430d9ceb1acb868fbc20  gcc/testsuite/gcc.c-torture/execute/pr111331-3.c
  eefdaed8e6e57c688553667e395d78d3  gcc/testsuite/gcc.c-torture/execute/pr111408.c
  9db3e649786fc47229bef9b14997489f  gcc/testsuite/gcc.c-torture/execute/pr111422.c
+ 07f86784b33bd8594d929a8762bcc758  gcc/testsuite/gcc.c-torture/execute/pr111613.c
  ecdedbf463fcb6869d2dcb4d5a4b2376  gcc/testsuite/gcc.c-torture/execute/pr112758.c
+ 255cd56658b86e1b37fc6003c864920b  gcc/testsuite/gcc.c-torture/execute/pr113787.c
+ 3f27c8320e9cf2d7c2d28cff11e038e0  gcc/testsuite/gcc.c-torture/execute/pr114207.c
  ce292472e176af7e97b5cfeddc436247  gcc/testsuite/gcc.c-torture/execute/pr114396.c
  7ae9a3b1d760fa818cb4c06f937f3d43  gcc/testsuite/gcc.c-torture/execute/pr114552.c
  c9d7810fb25abff9e36f2472a26b7432  gcc/testsuite/gcc.c-torture/execute/pr114965.c
+ 70ba48592053a7f5813dc5b2438d1c9d  gcc/testsuite/gcc.c-torture/execute/pr115033.c
+ c79311114bc2631215d25bfb45117788  gcc/testsuite/gcc.c-torture/execute/pr116799.c
+ 5ddda4b8eb54ab388a566dc4456abe06  gcc/testsuite/gcc.c-torture/execute/pr117095.c
+ ff6bb4fb6706fea0c26d717754a6569c  gcc/testsuite/gcc.c-torture/execute/pr117432.c
+ 5ea8b1886f746d04f95ef6475b79bbac  gcc/testsuite/gcc.c-torture/execute/pr117498.c
+ abc98cdd2ec724c17d58a00efc56816b  gcc/testsuite/gcc.c-torture/execute/pr118623.c
+ 5802f1a3b7f07033d3e5c9e6bc333779  gcc/testsuite/gcc.c-torture/execute/pr118915.c
+ fd7185346c3b94c0a7f7afba7b6bc241  gcc/testsuite/gcc.c-torture/execute/pr119071.c
+ b7150a91a8e64c0a2f8d47a9f857fd6e  gcc/testsuite/gcc.c-torture/execute/pr119291.c
  7758cb727d75f4fc1c0e483d503de146  gcc/testsuite/gcc.c-torture/execute/pr15262-1.c
  58dc249612dbc918d7fc4010e94deb8d  gcc/testsuite/gcc.c-torture/execute/pr15262-2.c
  d9c36fc850771445c5e4b6ce6dae1a12  gcc/testsuite/gcc.c-torture/execute/pr15262.c
*************** d77e2e844ad79bff2425db9218966c25  gcc/te
*** 36869,36874 ****
--- 37011,37017 ----
  1fd700aefedaf24e468029bac7fbc0da  gcc/testsuite/gcc.c-torture/execute/shiftdi-2.c
  218fd5bff9fbdcfe97495b29ad65316f  gcc/testsuite/gcc.c-torture/execute/shiftdi.c
  f32de799f0458e1e67012bf12c40583d  gcc/testsuite/gcc.c-torture/execute/shiftopt-1.c
+ 2009eb8565aa1a0d659558b5045da00f  gcc/testsuite/gcc.c-torture/execute/signed1bitfield-1.c
  a32edc960a41c187ce8ffbf1e99f4dec  gcc/testsuite/gcc.c-torture/execute/simd-1.c
  42bf5fec543c226567dd609fbeda49e4  gcc/testsuite/gcc.c-torture/execute/simd-2.c
  46696bda18b582435f5016a8a6f2e0db  gcc/testsuite/gcc.c-torture/execute/simd-4.c
*************** b989844b8de5feb2e33ec096aa812ec6  gcc/te
*** 38753,38761 ****
--- 38896,38908 ----
  e3f654469966ae1c0b0222fd88742a56  gcc/testsuite/gcc.dg/asan/pr108777-5.c
  50f6224f5546a4552995bf584c4638ff  gcc/testsuite/gcc.dg/asan/pr108777-6.c
  ea1638a3bd1b7f87abc2eda6d730213e  gcc/testsuite/gcc.dg/asan/pr110027.c
+ c712bebc72e1dc5a56ae1f93009d40b0  gcc/testsuite/gcc.dg/asan/pr110676.c
  26f93981271f9059440b991b53a92413  gcc/testsuite/gcc.dg/asan/pr112709-2.c
  e6fb871193af3e998394dba285a504b4  gcc/testsuite/gcc.dg/asan/pr114687.c
  335e527788f5fd39d280e244ac17b3ef  gcc/testsuite/gcc.dg/asan/pr114956.c
+ 7945c329a8682648ec766560d0d91934  gcc/testsuite/gcc.dg/asan/pr115172.c
+ c3ea87da60c15db26ad3d91106651fc4  gcc/testsuite/gcc.dg/asan/pr117209.c
+ c3e4c8b02647243ec96367bcfe4e9bc0  gcc/testsuite/gcc.dg/asan/pr119582.c
  a5e988481cd66b8acf6c610b847cb713  gcc/testsuite/gcc.dg/asan/pr56417.c
  0c13e4008bb665f05b030eb42e43183f  gcc/testsuite/gcc.dg/asan/pr63845.c
  9a45b4bebab3901180dbe2a44efcd070  gcc/testsuite/gcc.dg/asan/pr64170.c
*************** c115ab0574e19d4dbcdbf6104d957d6f  gcc/te
*** 39505,39510 ****
--- 39652,39658 ----
  baeaba3ea95c0e8dea526efb3880ad11  gcc/testsuite/gcc.dg/c23-stdarg-7.c
  a271d144580738671ceba31d72b6733a  gcc/testsuite/gcc.dg/c23-stdarg-8.c
  05ef945cebd68a0ff9fbfac148a02c6b  gcc/testsuite/gcc.dg/c23-stdarg-9.c
+ 473fe7babc27e639debb1233f451be1e  gcc/testsuite/gcc.dg/c23-stddef-2.c
  e534b0f2e881e50aca6c1f2a52542dc2  gcc/testsuite/gcc.dg/c2x-align-1.c
  6fd315ddd7219855d32d6938f5c972be  gcc/testsuite/gcc.dg/c2x-align-6.c
  1a6078af67236639a20541935b9c1759  gcc/testsuite/gcc.dg/c2x-attr-deprecated-1.c
*************** a0ac850750aaa6f8934dd8d86cad48b3  gcc/te
*** 41278,41289 ****
--- 41426,41439 ----
  9d75f75471d15ad9eab797c65fe24337  gcc/testsuite/gcc.dg/dfp/keywords-pedantic.c
  5f9dce48038ce1ba660b96e948792422  gcc/testsuite/gcc.dg/dfp/keywords-reserved.c
  440b3f562b43525babe2c96be973d1be  gcc/testsuite/gcc.dg/dfp/operator-bitwise.c
+ 20f50855676ea9189776efb27ee8f2a2  gcc/testsuite/gcc.dg/dfp/pr102674.c
  b6f9108cd4878577de83d43be75185ce  gcc/testsuite/gcc.dg/dfp/pr104510.c
  440b561ad1d9037d4559c7011d636b7a  gcc/testsuite/gcc.dg/dfp/pr104557.c
  74ff23770b319829b7487e85a1ed72f6  gcc/testsuite/gcc.dg/dfp/pr108068.c
  d8629eb8e0c765b5a7daa583cb8eedad  gcc/testsuite/gcc.dg/dfp/pr31344.c
  b59fd600db434af135f39c38e21e2d74  gcc/testsuite/gcc.dg/dfp/pr37435.c
  17353eaf91a4f3959fa168324f86f6f5  gcc/testsuite/gcc.dg/dfp/pr41049.c
+ 38fafce1a4984b228edcdb784386e374  gcc/testsuite/gcc.dg/dfp/pr43374.c
  8f20a249a1cf0ecc405e1799552e1d6f  gcc/testsuite/gcc.dg/dfp/pr48204.c
  8839751293dea7c31ee017e68d79c7a7  gcc/testsuite/gcc.dg/dfp/pr48928.c
  59389f9a6a0db946009dbbe47a66608f  gcc/testsuite/gcc.dg/dfp/pr52140.c
*************** bbdc28908094ef1ce181532afaf1b2dc  gcc/te
*** 43023,43028 ****
--- 43173,43179 ----
  a6cddd3e3979aa3c54f4319f60df295b  gcc/testsuite/gcc.dg/ipa/modref-1.c
  d183c6f1cbbc46bd9c8e5df2bbcd8795  gcc/testsuite/gcc.dg/ipa/modref-2.c
  e3225f0884da3b36b6309c89ccd143b7  gcc/testsuite/gcc.dg/ipa/modref-3.c
+ a06e20bfec7f7f19143678eb08edf720  gcc/testsuite/gcc.dg/ipa/modref-4.c
  80f4453150e9ddcd8976703b7c6ee1f6  gcc/testsuite/gcc.dg/ipa/noclone-1.c
  2f6a0c132f87682f7a7a3d21a8e51243  gcc/testsuite/gcc.dg/ipa/pr100600.c
  5c69058d29f4a7ea7e25487222d82209  gcc/testsuite/gcc.dg/ipa/pr101066.c
*************** b70865b06d221ed2025f4fc757d9e20a  gcc/te
*** 43050,43055 ****
--- 43201,43209 ----
  f741ddb64786110b58c8991c33d44c79  gcc/testsuite/gcc.dg/ipa/pr111571.c
  6cadebd8b42bda8557c5814d0103a2fa  gcc/testsuite/gcc.dg/ipa/pr112616.c
  b7a69609ea582386c302afd514d8e233  gcc/testsuite/gcc.dg/ipa/pr114247.c
+ e39432b4ae7797e55b13f6d2fd29a4a6  gcc/testsuite/gcc.dg/ipa/pr119852.c
+ fc7c9c751d59b444d0ab30c4d9029491  gcc/testsuite/gcc.dg/ipa/pr120044-1.c
+ 538e5a7542c72b7ea4e4375cbebde001  gcc/testsuite/gcc.dg/ipa/pr120044-2.c
  40bd41302666d56c4edf7330db97920e  gcc/testsuite/gcc.dg/ipa/pr42706.c
  e4887053c792f4f78b03804c148839ce  gcc/testsuite/gcc.dg/ipa/pr45644.c
  6e1b4f2c5d0c0d768778da8e3b7df828  gcc/testsuite/gcc.dg/ipa/pr48195.c
*************** ef0b90ba09e6e56d1d655afdcb63cdd4  gcc/te
*** 43425,43432 ****
  c3ad752a64c11978f9f2cce0520bf58c  gcc/testsuite/gcc.dg/lto/pr109778_1.c
  5a30be7e5faebcb3c788634739d7942d  gcc/testsuite/gcc.dg/lto/pr113359-1_0.c
  689493d8859ebd5141c7576ea5812894  gcc/testsuite/gcc.dg/lto/pr113359-1_1.c
! 7b2490a53ab05afe844a68c990f18421  gcc/testsuite/gcc.dg/lto/pr113359-2_0.c
! 41ee56adafb01df4348c7c69179db19b  gcc/testsuite/gcc.dg/lto/pr113359-2_1.c
  82e2344118052c04301038fec390f42d  gcc/testsuite/gcc.dg/lto/pr113359-3_0.c
  1f06069ea30d27a1e0fef1294b1bc9dd  gcc/testsuite/gcc.dg/lto/pr113359-3_1.c
  4a10953226e8b2bf38c71b31a58873ae  gcc/testsuite/gcc.dg/lto/pr113359-4_0.c
--- 43579,43586 ----
  c3ad752a64c11978f9f2cce0520bf58c  gcc/testsuite/gcc.dg/lto/pr109778_1.c
  5a30be7e5faebcb3c788634739d7942d  gcc/testsuite/gcc.dg/lto/pr113359-1_0.c
  689493d8859ebd5141c7576ea5812894  gcc/testsuite/gcc.dg/lto/pr113359-1_1.c
! a1748e20d9862396a285906364208f44  gcc/testsuite/gcc.dg/lto/pr113359-2_0.c
! 6edfa3823a45aec28bfe3906cb0c8c59  gcc/testsuite/gcc.dg/lto/pr113359-2_1.c
  82e2344118052c04301038fec390f42d  gcc/testsuite/gcc.dg/lto/pr113359-3_0.c
  1f06069ea30d27a1e0fef1294b1bc9dd  gcc/testsuite/gcc.dg/lto/pr113359-3_1.c
  4a10953226e8b2bf38c71b31a58873ae  gcc/testsuite/gcc.dg/lto/pr113359-4_0.c
*************** c3ad752a64c11978f9f2cce0520bf58c  gcc/te
*** 43436,43441 ****
--- 43590,43596 ----
  19509c8f1bdf98e2ab64c3f9e2c3f584  gcc/testsuite/gcc.dg/lto/pr113907_0.c
  9f07bf819862bc85bb8767d97947d837  gcc/testsuite/gcc.dg/lto/pr113907_1.c
  4d872eeace42ef5001147db36f0eb548  gcc/testsuite/gcc.dg/lto/pr113907_2.c
+ d043bebe314f4799a1f686632b791cca  gcc/testsuite/gcc.dg/lto/pr115815_0.c
  5192817b2492ca93ffadce3b4a5e4794  gcc/testsuite/gcc.dg/lto/pr27898_0.c
  c5f48897247dfaec60df4e32beffcd8e  gcc/testsuite/gcc.dg/lto/pr27898_1.c
  2ad724786bc4b555a7f31e8b3bf164b6  gcc/testsuite/gcc.dg/lto/pr28706_0.c
*************** f67a44e9e2f963084509149bec7655af  gcc/te
*** 43537,43542 ****
--- 43692,43699 ----
  833668f47a5741405cf53fc58d31d1bc  gcc/testsuite/gcc.dg/lto/pr88077_1.c
  c51c424cae679b65a2dc52ea3ddc96d9  gcc/testsuite/gcc.dg/lto/pr88297_0.c
  14664c531ea727ce3e6cd733560c6895  gcc/testsuite/gcc.dg/lto/pr88297_1.c
+ 0e4761398a1a807133de9d1dbb23f8dc  gcc/testsuite/gcc.dg/lto/pr91299_0.c
+ 2fa66cdf16d22012d4837a0c72b33169  gcc/testsuite/gcc.dg/lto/pr91299_1.c
  8333794e711e91fcca018cc86d41ea1e  gcc/testsuite/gcc.dg/lto/pr91393_0.c
  792aee8f66fa8c921ace23ab0bacbfa0  gcc/testsuite/gcc.dg/lto/pr93015_0.c
  452562151ef3b606235a43b661fb5f32  gcc/testsuite/gcc.dg/lto/pr93384_0.c
*************** cbe7e390158f186ae3fd0f808bea7563  gcc/te
*** 44153,44158 ****
--- 44310,44316 ----
  70303171ed7f5b2cba05e6b98daad2ab  gcc/testsuite/gcc.dg/pr101384.c
  566100ed369cb8ddbb77ca59ac7f4416  gcc/testsuite/gcc.dg/pr101403.c
  cf17d565e22770879e54b6d0b5f98c72  gcc/testsuite/gcc.dg/pr101419.c
+ 2d3f29a2cab8840cb09367ff4d489fae  gcc/testsuite/gcc.dg/pr101478.c
  51fa849c28379b9795b20cbcf5bd8067  gcc/testsuite/gcc.dg/pr101496.c
  82ba8f6dfa7a7a8e6eb6d73d5c8df572  gcc/testsuite/gcc.dg/pr101497.c
  fea990856f92887377e1bb43b4bd09e3  gcc/testsuite/gcc.dg/pr101741.c
*************** f97f1cf6ac420452092fc3fba4203574  gcc/te
*** 44424,44442 ****
--- 44582,44626 ----
  e5517dc2a2e07c9b2472bb545cd5a722  gcc/testsuite/gcc.dg/pr112837.c
  6b73a8d375ddff23d86f9f1c9377f381  gcc/testsuite/gcc.dg/pr112845.c
  68812a8a18bdcb8c9b56b83823f8a853  gcc/testsuite/gcc.dg/pr113013.c
+ 1eee6a6a3094137236b099c0bc7604f7  gcc/testsuite/gcc.dg/pr113207.c
  da36c4c045a6839485d1209b636f2fa6  gcc/testsuite/gcc.dg/pr113262.c
  e68a7c7f2d1db31e0e0e0a23960975a7  gcc/testsuite/gcc.dg/pr113907-1.c
+ b2d098af95852498cd59dba1a99dd84d  gcc/testsuite/gcc.dg/pr114052-1.c
  b200221e1cccaf2dc905de01fccdb601  gcc/testsuite/gcc.dg/pr114090.c
  12ecf3bc0aab66a39903f50c4a6dfc66  gcc/testsuite/gcc.dg/pr114115.c
  5f50cdb1b2a60a511ba8bff25319527f  gcc/testsuite/gcc.dg/pr114211.c
  7cd5609790e8cb3ba4ad54ccf122a48a  gcc/testsuite/gcc.dg/pr114310.c
+ e99866ca9e56b885a0004e2f573a6158  gcc/testsuite/gcc.dg/pr114493-1.c
+ 94931dbb7cf13d8363b141dd2b96ebdf  gcc/testsuite/gcc.dg/pr114493-2.c
  860f163dcd0b252ea3f85323bc959a7d  gcc/testsuite/gcc.dg/pr11459-1.c
  18db873e30d811e6904623797ead2825  gcc/testsuite/gcc.dg/pr114753.c
  278b6ea6998e142ef9ecea8b30a97701  gcc/testsuite/gcc.dg/pr114768.c
  86c7b688b3835d3cdb63a61f64b1ae73  gcc/testsuite/gcc.dg/pr114876.c
+ 4f24f3d12a3963918c32e40afe158f0a  gcc/testsuite/gcc.dg/pr114902.c
  fa53e159fc414cd332dc23393a95dabf  gcc/testsuite/gcc.dg/pr114907.c
  e164a736918661d669864e3645da290c  gcc/testsuite/gcc.dg/pr11492.c
+ e76a4663621c8d450d2c9d229d63e033  gcc/testsuite/gcc.dg/pr115092.c
+ d22dfd7d5e220a5d2333a3902005df42  gcc/testsuite/gcc.dg/pr115152.c
+ 64f4939cddc13bbbbd8e882d62d2436b  gcc/testsuite/gcc.dg/pr115197.c
+ 6ba8ec161f815bc3e024b67bfffd9530  gcc/testsuite/gcc.dg/pr115646.c
+ 8a0ca2cbf65dafe6cccb9a0465069fcc  gcc/testsuite/gcc.dg/pr116034.c
+ 7820d64b46e8082950940bc4a0bfba8c  gcc/testsuite/gcc.dg/pr116290.c
+ 298938472467086a22ec44a01fb0ee8f  gcc/testsuite/gcc.dg/pr116481.c
+ 3661cd7a3a7e0ed72337f96146acfa54  gcc/testsuite/gcc.dg/pr116850.c
+ af316e7c425bfdeaadea8998cbd27110  gcc/testsuite/gcc.dg/pr116891.c
+ cca17c29951566d10372eb936be3afeb  gcc/testsuite/gcc.dg/pr116906-1.c
+ 054759908cf55ab814809e00de717c0b  gcc/testsuite/gcc.dg/pr116906-2.c
+ 4de2a7a2ac95300f89928764d873895d  gcc/testsuite/gcc.dg/pr117104.c
+ 809d1e4fe382fd35194849af2413cb9f  gcc/testsuite/gcc.dg/pr117239.c
+ 22c935f2bff095783388f4e05eabe99b  gcc/testsuite/gcc.dg/pr117254.c
+ 508b7efd3e428ac089a9b5def12ba01c  gcc/testsuite/gcc.dg/pr117398.c
+ 6693dade68e2cac14ef3b85ed17c9a95  gcc/testsuite/gcc.dg/pr117745.c
  3b83403729a3686d25552352bf0c4577  gcc/testsuite/gcc.dg/pr11864-1.c
+ 33c13391b7d0c5d156ce1488a8cece3f  gcc/testsuite/gcc.dg/pr119071.c
+ a3d075dd1b96232581aa40c9e02294e1  gcc/testsuite/gcc.dg/pr119151.c
+ 23b8c99f9e2dfda91a95f1195ab38bfd  gcc/testsuite/gcc.dg/pr119183.c
+ 5b4015cb994569a43c505c35b96cda44  gcc/testsuite/gcc.dg/pr119204.c
+ 9444444b4f048eadd4b6a2d7592f5fca  gcc/testsuite/gcc.dg/pr120480.c
  bc5ddfbbc46f4e0cce1629d1b58d3090  gcc/testsuite/gcc.dg/pr12603.c
  72a2fca76cb69617ae36bab93c7ec0d7  gcc/testsuite/gcc.dg/pr12625-1.c
  6f0ef61e5a12db5f11da839b2988c5e1  gcc/testsuite/gcc.dg/pr13519-1.c
*************** c5719c018c12b0a0dfafc5cce8663b35  gcc/te
*** 45873,45879 ****
  423e68203f69b77d89938e7e12632466  gcc/testsuite/gcc.dg/pr81020.c
  0e9fa6d863f3301949fcec2f6c5d73ec  gcc/testsuite/gcc.dg/pr81030.c
  66ddd134037471a6a0f9653a3d3cee47  gcc/testsuite/gcc.dg/pr81165.c
! b491d1bc57ee8efd2d0cb606d3ba98d4  gcc/testsuite/gcc.dg/pr81192.c
  597afe973f83e86d9b7fde6d5683f0a2  gcc/testsuite/gcc.dg/pr81227.c
  f8b9e7e40bbdc976061399c74f48e7e0  gcc/testsuite/gcc.dg/pr81228.c
  db7151f89bb35a308fb76b916ed6af28  gcc/testsuite/gcc.dg/pr81281-1.c
--- 46057,46063 ----
  423e68203f69b77d89938e7e12632466  gcc/testsuite/gcc.dg/pr81020.c
  0e9fa6d863f3301949fcec2f6c5d73ec  gcc/testsuite/gcc.dg/pr81030.c
  66ddd134037471a6a0f9653a3d3cee47  gcc/testsuite/gcc.dg/pr81165.c
! cdeeddc71f3ac1679bbf87eda7e6bbce  gcc/testsuite/gcc.dg/pr81192.c
  597afe973f83e86d9b7fde6d5683f0a2  gcc/testsuite/gcc.dg/pr81227.c
  f8b9e7e40bbdc976061399c74f48e7e0  gcc/testsuite/gcc.dg/pr81228.c
  db7151f89bb35a308fb76b916ed6af28  gcc/testsuite/gcc.dg/pr81281-1.c
*************** b21ece181cd66a1e64aa9dde33e8d1d0  gcc/te
*** 46426,46431 ****
--- 46610,46616 ----
  6f1182e067a6b12f97acf69996773c2e  gcc/testsuite/gcc.dg/pr98766.c
  adabb0bef50f4d7481373e03730d7eca  gcc/testsuite/gcc.dg/pr98793.c
  740d7fb36e41a4cae562cdea26998ff2  gcc/testsuite/gcc.dg/pr98807.c
+ 693efb112a63e0bff9223024ab13758b  gcc/testsuite/gcc.dg/pr98845.c
  7935203ef9b964ed53ea8adeecd1bbed  gcc/testsuite/gcc.dg/pr98865.c
  310114e6ce04de1373727da3fff452a3  gcc/testsuite/gcc.dg/pr99104.c
  c8ed2bc909c8f2213b8af5e0e34bb1fc  gcc/testsuite/gcc.dg/pr99122-1.c
*************** dfb471a397851bdb52f7df883b650b86  gcc/te
*** 47304,47310 ****
  21ae8e4c97f9712921eba7fc818f95ac  gcc/testsuite/gcc.dg/torture/builtin-explog-1.c
  d5c9ca0ff5b0b34e1fa874eadc3d6c3c  gcc/testsuite/gcc.dg/torture/builtin-fp-int-inexact-c2x.c
  c52cf8304bc6fa5604bc97a203120619  gcc/testsuite/gcc.dg/torture/builtin-fp-int-inexact.c
! f17d1f5035ab6459558b499a77e14ecc  gcc/testsuite/gcc.dg/torture/builtin-frexp-1.c
  b240a0ef7d00244042073b024cac7c9e  gcc/testsuite/gcc.dg/torture/builtin-integral-1.c
  4ce025382a7da5160143d92f4b87df45  gcc/testsuite/gcc.dg/torture/builtin-isinf_sign-1.c
  ae065e2d0b0f2cf03ba8778b34d20d38  gcc/testsuite/gcc.dg/torture/builtin-issignaling-1.c
--- 47489,47495 ----
  21ae8e4c97f9712921eba7fc818f95ac  gcc/testsuite/gcc.dg/torture/builtin-explog-1.c
  d5c9ca0ff5b0b34e1fa874eadc3d6c3c  gcc/testsuite/gcc.dg/torture/builtin-fp-int-inexact-c2x.c
  c52cf8304bc6fa5604bc97a203120619  gcc/testsuite/gcc.dg/torture/builtin-fp-int-inexact.c
! aed4b127d2ac5e4bf304bcc673996ebf  gcc/testsuite/gcc.dg/torture/builtin-frexp-1.c
  b240a0ef7d00244042073b024cac7c9e  gcc/testsuite/gcc.dg/torture/builtin-integral-1.c
  4ce025382a7da5160143d92f4b87df45  gcc/testsuite/gcc.dg/torture/builtin-isinf_sign-1.c
  ae065e2d0b0f2cf03ba8778b34d20d38  gcc/testsuite/gcc.dg/torture/builtin-issignaling-1.c
*************** e289e3514153e0ffe8b5b086904f40c4  gcc/te
*** 47652,47657 ****
--- 47837,47843 ----
  5a3dd17b41272920e3804d1b42cba87e  gcc/testsuite/gcc.dg/torture/pr111917.c
  1e5a5be4efef1ee222e142fcbc25978e  gcc/testsuite/gcc.dg/torture/pr112281-1.c
  3acf5c04c64ba9b942f88c4d8bde666c  gcc/testsuite/gcc.dg/torture/pr112281-2.c
+ 956dc9b1dc1c726c549e9e69ca1db5ec  gcc/testsuite/gcc.dg/torture/pr112859.c
  0da1b162b4d30cd723409c71ad927d22  gcc/testsuite/gcc.dg/torture/pr112991.c
  8017656920f66e02201f705044be8aa7  gcc/testsuite/gcc.dg/torture/pr113396.c
  45205268a0626647bba2b5a390bc850c  gcc/testsuite/gcc.dg/torture/pr113630.c
*************** e968b8aa93e5a5203a6c7bf6ce0ab2b7  gcc/te
*** 47661,47666 ****
--- 47847,47873 ----
  edb26d624826c2089120476194daef30  gcc/testsuite/gcc.dg/torture/pr114246.c
  8ebd93b45204d340baa4a9798f5bcd62  gcc/testsuite/gcc.dg/torture/pr114672.c
  2c68830fdc44dbd18e300f9430c6c89f  gcc/testsuite/gcc.dg/torture/pr114787.c
+ b9fe62163204f0f9de8d47547473ce6c  gcc/testsuite/gcc.dg/torture/pr115347.c
+ 55696235dc27ddb3d877bca135cf0b3e  gcc/testsuite/gcc.dg/torture/pr115641.c
+ 390c74e1cc81bd0e33c375ee049fb18b  gcc/testsuite/gcc.dg/torture/pr115701.c
+ b9f75d112b5891dd319ae19e3779967f  gcc/testsuite/gcc.dg/torture/pr116057.c
+ 99a6c1e6285db8d08064cd8aaa300ddd  gcc/testsuite/gcc.dg/torture/pr116380.c
+ 78733925c03c093a5b9fb429087338ac  gcc/testsuite/gcc.dg/torture/pr116412-1.c
+ 26feb828f8efabc996ee22e90cd17fc1  gcc/testsuite/gcc.dg/torture/pr116585.c
+ 59484ae831cab97471a148691d17d840  gcc/testsuite/gcc.dg/torture/pr116768.c
+ 7ff97033e93d5c0fd815ba8a91fcd00e  gcc/testsuite/gcc.dg/torture/pr116922.c
+ 717e28a7c3f736d4be6dffbb456735cc  gcc/testsuite/gcc.dg/torture/pr117086.c
+ d6608e03b8048545410e7c67f9a30d4a  gcc/testsuite/gcc.dg/torture/pr117113.c
+ eed87995921a41d6f215168315f20d67  gcc/testsuite/gcc.dg/torture/pr117119.c
+ 6e7f6e2e418f4fdf187f07ac4ce3bafa  gcc/testsuite/gcc.dg/torture/pr117243-1.c
+ 42c403cdb88958c3d40395d6ca302c82  gcc/testsuite/gcc.dg/torture/pr117243-2.c
+ 0f6fc6ed111e2e5782be3518bfe6e1eb  gcc/testsuite/gcc.dg/torture/pr117333.c
+ 6ae50575ec63bfcc997168ba66e3cd75  gcc/testsuite/gcc.dg/torture/pr117417.c
+ 211f874eb690213e110852d5efe7da32  gcc/testsuite/gcc.dg/torture/pr117574-1.c
+ 66b62cd3c17e663e000967aafbe81bc7  gcc/testsuite/gcc.dg/torture/pr117979.c
+ 673535a31d0d70358a6475962b4d71c2  gcc/testsuite/gcc.dg/torture/pr118476-1.c
+ d29f5dbd5ce72ebe101793547b043347  gcc/testsuite/gcc.dg/torture/pr118717.c
+ 4f00237a70e232a883a71b2c8d7c8f95  gcc/testsuite/gcc.dg/torture/pr118922-1.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
*************** ba0f756770b2c8c27b5698876e3038d6  gcc/te
*** 49723,49732 ****
--- 49930,49942 ----
  486e83eb732ae374266e81bf0ad91d4c  gcc/testsuite/gcc.dg/tree-ssa/pr108684-1.c
  9a57b932241f72e62ecf6645de5034e9  gcc/testsuite/gcc.dg/tree-ssa/pr109031-1.c
  3e53d598753ed4660dbeb6be7795b42e  gcc/testsuite/gcc.dg/tree-ssa/pr109031-2.c
+ 3adb7e9f8a25b141deab6a826dbf4d2a  gcc/testsuite/gcc.dg/tree-ssa/pr109934.c
  c6848ef9d4a9873e77016b18db0eef64  gcc/testsuite/gcc.dg/tree-ssa/pr111583-1.c
  96d52de11a445b7c87980804cd19320b  gcc/testsuite/gcc.dg/tree-ssa/pr111583-2.c
  30191e7f04d08f0b42092e36965a3c63  gcc/testsuite/gcc.dg/tree-ssa/pr111967.c
  91ab942db3d3d13291ae97a65be94e36  gcc/testsuite/gcc.dg/tree-ssa/pr113993.c
+ 8710d339fbc689e052900f47a175994e  gcc/testsuite/gcc.dg/tree-ssa/pr114864.c
+ 5dd2285e0a64c83e08b6d68b6cd36eba  gcc/testsuite/gcc.dg/tree-ssa/pr117142.c
  78e6c5fe63f7305009c8a79840fe20dc  gcc/testsuite/gcc.dg/tree-ssa/pr13146.c
  eab19e0c04884cd782c9879cbe292109  gcc/testsuite/gcc.dg/tree-ssa/pr14341.c
  9945ed7002a5f7d4918e8ff5eb4cb647  gcc/testsuite/gcc.dg/tree-ssa/pr14490-1.c
*************** bc1b0eb9d58483a9f609b164efd64d18  gcc/te
*** 50750,50755 ****
--- 50960,50966 ----
  3fada5964c97d348ed7e7e1eb62f0512  gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-22.c
  6a109e21502e5353e985b8e9180f3c79  gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-23.c
  99cacb357948a00b34aa1d255c66558b  gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-24.c
+ a3fc09fc73db236301044a5b2f7e7fea  gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-25.c
  c0ab69fe1a4b916817bbafe5e5048c34  gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-3.c
  d00d2a078458d4fc876af7d2a29c241a  gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-5.c
  769aa5eb478537be389d55c410c46887  gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-6.c
*************** aa0a603e6aee5b8a3fd3463354c9bf10  gcc/te
*** 51839,51848 ****
--- 52050,52074 ----
  6fe7a9f8a10f6b62e25fc4c1fa96deff  gcc/testsuite/gcc.dg/vect/pr111764.c
  9386a649786af115ac3366d153cb1ece  gcc/testsuite/gcc.dg/vect/pr111882.c
  769cf4bfcb97c43ac962799ae8d222c5  gcc/testsuite/gcc.dg/vect/pr112505.c
+ c26acbf1612dc4698a8344d64f963df0  gcc/testsuite/gcc.dg/vect/pr113281-1.c
+ 21722bf37953d9796f5d5fd71e243c2b  gcc/testsuite/gcc.dg/vect/pr113281-2.c
+ 31ad99fbdbecf9925f5f4504adc83b13  gcc/testsuite/gcc.dg/vect/pr113281-3.c
+ e7f3d45d3b7be1d3f34c03fe14a64322  gcc/testsuite/gcc.dg/vect/pr113281-4.c
+ 8f0bbff86de57f60a2a350c847f4db18  gcc/testsuite/gcc.dg/vect/pr113281-5.c
  f2ad143cd940fa42deda153f442d29b2  gcc/testsuite/gcc.dg/vect/pr114027.c
  ae8b389a68778f9cfdd3436253d31b14  gcc/testsuite/gcc.dg/vect/pr114231.c
  0079bcebbbf82f5487b36b4f2e1532ef  gcc/testsuite/gcc.dg/vect/pr114485.c
  c0f0ed71d5889d42079442a4cdca8181  gcc/testsuite/gcc.dg/vect/pr114733.c
+ a652091690348408aec894da3d82b15d  gcc/testsuite/gcc.dg/vect/pr115192.c
+ d4499294f9334e38163cb0286c7b2483  gcc/testsuite/gcc.dg/vect/pr115669.c
+ ea3272b0a6fbd82aefd459202d8b2afc  gcc/testsuite/gcc.dg/vect/pr115841.c
+ 3617874dc8f0f764b079db5c7e0fa79b  gcc/testsuite/gcc.dg/vect/pr116125.c
+ d26c1450e737c9198e3e413deb96e2b3  gcc/testsuite/gcc.dg/vect/pr116997.c
+ 663c319abe6475a06b3f4517706d0d00  gcc/testsuite/gcc.dg/vect/pr117307.c
+ 6fd30961e11a3501d3b6aacf53957805  gcc/testsuite/gcc.dg/vect/pr119057.c
+ b8e70a728432436afa060e498411cc94  gcc/testsuite/gcc.dg/vect/pr119145.c
+ 8312a9b4f3649f0390632c660109eb1d  gcc/testsuite/gcc.dg/vect/pr119399.c
+ f5749a6330ea4377b859350a23760b4a  gcc/testsuite/gcc.dg/vect/pr119534.c
  42d48d2ecd5682545b12ac42f879a831  gcc/testsuite/gcc.dg/vect/pr16105.c
  231c99dba9475fe09525bbf6f4374124  gcc/testsuite/gcc.dg/vect/pr18308.c
  3aed50f38aa86c4915d6e4b3cef91287  gcc/testsuite/gcc.dg/vect/pr18400.c
*************** b913a0ce97e1075ed9731f6e62b860bf  gcc/te
*** 52778,52783 ****
--- 53004,53010 ----
  f7641c61bbf333053e42be5bfa67d8e4  gcc/testsuite/gcc.dg/vect/vect-fmin-1.c
  33e9990b22cd49f97ec590b283e99e41  gcc/testsuite/gcc.dg/vect/vect-fmin-2.c
  92e4333ba4e6a6e7852441677e9dd7e1  gcc/testsuite/gcc.dg/vect/vect-fmin-3.c
+ 8fd9883d5396ca3292f66484ef525262  gcc/testsuite/gcc.dg/vect/vect-fncall-mask.c
  f7e0d01143aad0f81b1d1f66c5737e3a  gcc/testsuite/gcc.dg/vect/vect-fold-1.c
  35c3ee4b34fc72c77cfca5c91b2ab36c  gcc/testsuite/gcc.dg/vect/vect-gather-1.c
  42b00c38af065e33048d2a1d390a7232  gcc/testsuite/gcc.dg/vect/vect-gather-2.c
*************** ae513bfb2896c38de994944b104fb7c8  gcc/te
*** 53706,53711 ****
--- 53933,53940 ----
  8a6aed21d2622bf72389f22f09d8bd4b  gcc/testsuite/gcc.target/aarch64/abs_2.c
  9cfd4d4ad02332bd9b9d2ef4e80d85c6  gcc/testsuite/gcc.target/aarch64/acle/acle.exp
  a545b8f7fc60af12576f85397e1733cb  gcc/testsuite/gcc.target/aarch64/acle/armv8-r.c
+ d75448581ffe687b59d90766e852e7df  gcc/testsuite/gcc.target/aarch64/acle/bf16_feature.c
+ 80f5f996bc3addf12ec6ed7a7a97d085  gcc/testsuite/gcc.target/aarch64/acle/bf16_sve_feature.c
  62e20cc9b647dedfdd26cf101e10f58e  gcc/testsuite/gcc.target/aarch64/acle/bti_def.c
  339f7215861041bbe928186d86e2c7b7  gcc/testsuite/gcc.target/aarch64/acle/crc32b.c
  b3b451a8f938e2c0a24c2751eab2c62d  gcc/testsuite/gcc.target/aarch64/acle/crc32cb.c
*************** d205b924c7f019cc69da5720c3107c22  gcc/te
*** 54513,54518 ****
--- 54742,54749 ----
  d335e36067020cadd7d9a133513eafd0  gcc/testsuite/gcc.target/aarch64/cpunative/info_21
  10b507183ea6ee447505b829be51e826  gcc/testsuite/gcc.target/aarch64/cpunative/info_22
  4c4387d4071cf10c793b4efe11f43439  gcc/testsuite/gcc.target/aarch64/cpunative/info_3
+ d7c6ea3e81a5b70c38883962d2efd8ee  gcc/testsuite/gcc.target/aarch64/cpunative/info_34
+ d7c6ea3e81a5b70c38883962d2efd8ee  gcc/testsuite/gcc.target/aarch64/cpunative/info_35
  d8a7caffcc99feff5312001aed51cd38  gcc/testsuite/gcc.target/aarch64/cpunative/info_4
  195bf754aeaf6d4fa8426e8fb4a553ce  gcc/testsuite/gcc.target/aarch64/cpunative/info_5
  73a2f048b60d92f4c6f8167c05bbd47c  gcc/testsuite/gcc.target/aarch64/cpunative/info_6
*************** bd3077fc2687bf509987850e7707ea80  gcc/te
*** 54536,54541 ****
--- 54767,54774 ----
  e033630a50ba8eda1384e5633631743a  gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_21.c
  b261e4b3a92afb198bb5a15e54284bae  gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_22.c
  5932d955ed9dc11faefb9f331763ff2c  gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_3.c
+ 8c086c230f3d3301367bcba61e8701bd  gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_34.c
+ ed6c20b66e7487d804e92b9c34f85aa5  gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_35.c
  cfd988497c936bc048f9b952dc82ebac  gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_4.c
  f40714de7a09b627eb98087b5a7cff0a  gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_5.c
  9852d3f0d62cf759f60853c972dbbedb  gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_6.c
*************** cd36419db4c9900c9708bb37b8a098cf  gcc/te
*** 54854,54861 ****
  0c4290a59a2e292e41e0c29bb697fc3a  gcc/testsuite/gcc.target/aarch64/options_set_24.c
  4859272e9512afe43a0babeaeb697569  gcc/testsuite/gcc.target/aarch64/options_set_25.c
  22795f64e718b99e4ce25b666f1d0146  gcc/testsuite/gcc.target/aarch64/options_set_26.c
  dadab3a539de6a89bb855b42477abf45  gcc/testsuite/gcc.target/aarch64/options_set_3.c
! 126860f6709220fb9557ef4fc3c09ed7  gcc/testsuite/gcc.target/aarch64/options_set_4.c
  8f27bf551906208d070df1b7012a68a2  gcc/testsuite/gcc.target/aarch64/options_set_5.c
  4cf7502e3271943a7d36d78ab82b8bbf  gcc/testsuite/gcc.target/aarch64/options_set_6.c
  3c7fc6e40b171e0b03c095ccf5773192  gcc/testsuite/gcc.target/aarch64/options_set_7.c
--- 55087,55096 ----
  0c4290a59a2e292e41e0c29bb697fc3a  gcc/testsuite/gcc.target/aarch64/options_set_24.c
  4859272e9512afe43a0babeaeb697569  gcc/testsuite/gcc.target/aarch64/options_set_25.c
  22795f64e718b99e4ce25b666f1d0146  gcc/testsuite/gcc.target/aarch64/options_set_26.c
+ f3b5922b8b4354df5f810cfdcfd0f7e6  gcc/testsuite/gcc.target/aarch64/options_set_27.c
+ 7dbad8c7e1b6f04a8adab6aac3c9f332  gcc/testsuite/gcc.target/aarch64/options_set_29.c
  dadab3a539de6a89bb855b42477abf45  gcc/testsuite/gcc.target/aarch64/options_set_3.c
! e721f980e1e7a9648d77300c2f6ea0e5  gcc/testsuite/gcc.target/aarch64/options_set_4.c
  8f27bf551906208d070df1b7012a68a2  gcc/testsuite/gcc.target/aarch64/options_set_5.c
  4cf7502e3271943a7d36d78ab82b8bbf  gcc/testsuite/gcc.target/aarch64/options_set_6.c
  3c7fc6e40b171e0b03c095ccf5773192  gcc/testsuite/gcc.target/aarch64/options_set_7.c
*************** cf2feda607251322b5205da4036fd1c4  gcc/te
*** 56979,56985 ****
  6d8bd2efb554f6d091fb8e33d61282ce  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/subr_u64.c
  c87493cb5df94025db4b916e3c76dbce  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/subr_u8.c
  d62014d4165619be9e66bb5968586984  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sudot_lane_s32.c
! abc1a5ce46a7ea8e1fbdd4a38900647c  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sudot_s32.c
  4aba6ed207e5eaeee50dd28f9ea0e6c8  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/tbl_bf16.c
  d716b98f28d9b983243b29c17423c344  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/tbl_f16.c
  0fbc73f88771b326dd4bb35363badfcd  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/tbl_f32.c
--- 57214,57220 ----
  6d8bd2efb554f6d091fb8e33d61282ce  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/subr_u64.c
  c87493cb5df94025db4b916e3c76dbce  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/subr_u8.c
  d62014d4165619be9e66bb5968586984  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sudot_lane_s32.c
! f313037b074c947edcfe07f61f5fbbc5  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sudot_s32.c
  4aba6ed207e5eaeee50dd28f9ea0e6c8  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/tbl_bf16.c
  d716b98f28d9b983243b29c17423c344  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/tbl_f16.c
  0fbc73f88771b326dd4bb35363badfcd  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/tbl_f32.c
*************** f05f061869c6f335b6395f5250ec83ee  gcc/te
*** 57413,57418 ****
--- 57648,57654 ----
  4e7a3ff45a72f35e2476f4e660886eb0  gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpeq_1.c
  60577eb222495e42c0d4e2d7e2ce19a3  gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpeq_2.c
  890d0907288d2b72f9ec70456e205a4c  gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpeq_3.c
+ 493d587eaeaa014288091839539ed594  gcc/testsuite/gcc.target/aarch64/sve/acle/general/cnot_1.c
  8670785b5e7c8b75fb219f0ddae33190  gcc/testsuite/gcc.target/aarch64/sve/acle/general/cntb_1.c
  9e41721b4dcb606909b3efa814293f4e  gcc/testsuite/gcc.target/aarch64/sve/acle/general/cntb_pat_1.c
  60a6cb5f3583610557e9b4dde6cd5453  gcc/testsuite/gcc.target/aarch64/sve/acle/general/cntd_pat_1.c
*************** a60971180940fb9126dc3f2440073c3a  gcc/te
*** 57494,57503 ****
  de2f1d6ff8c05a5ea5ffb81b8ce61ce2  gcc/testsuite/gcc.target/aarch64/sve/acle/general/unoptimized_1.c
  129d25d3f8de8545837b08910c736d81  gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_1.c
  5dbffb9595fe745c3cdfebeeece83ee5  gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_10.c
  2af690a7706f6a510d3d0b49d8bcbc92  gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_2.c
  786ef1b1105a4d7d76e8259890eddb76  gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_3.c
  32aacb55289afea049bef27ee3e43b32  gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_4.c
! b3ac885cdf7c809e6e3a99a873bb46db  gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_5.c
  5c753061bc4092a3fd420d4ea189dc5c  gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_6.c
  4252f061da5cf9319b8f1502028ab9d3  gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_7.c
  3c67dda964fc05a59fcc4c706524e07f  gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_8.c
--- 57730,57741 ----
  de2f1d6ff8c05a5ea5ffb81b8ce61ce2  gcc/testsuite/gcc.target/aarch64/sve/acle/general/unoptimized_1.c
  129d25d3f8de8545837b08910c736d81  gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_1.c
  5dbffb9595fe745c3cdfebeeece83ee5  gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_10.c
+ b32f166240692ad09eeb88e4c41a0584  gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_11.c
+ 3773293a3c03a36cfc6110e54ac5b251  gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_12.c
  2af690a7706f6a510d3d0b49d8bcbc92  gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_2.c
  786ef1b1105a4d7d76e8259890eddb76  gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_3.c
  32aacb55289afea049bef27ee3e43b32  gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_4.c
! cedaad7f4429d55119291005bb785f5f  gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_5.c
  5c753061bc4092a3fd420d4ea189dc5c  gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_6.c
  4252f061da5cf9319b8f1502028ab9d3  gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_7.c
  3c67dda964fc05a59fcc4c706524e07f  gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_8.c
*************** fca208aba0269c8218d4736a10ac6a83  gcc/te
*** 58210,58215 ****
--- 58448,58454 ----
  72b392d1da91fcaa10ed39874a05eb04  gcc/testsuite/gcc.target/aarch64/sve/pr109254.c
  bc4cb512648e75cde04a28680b1c4a89  gcc/testsuite/gcc.target/aarch64/sve/pr109505.c
  ea42d07119e6d0bf4a13e781c6d1367d  gcc/testsuite/gcc.target/aarch64/sve/pr110280.c
+ 32ab14334cab1c6336c74f3dc7e201db  gcc/testsuite/gcc.target/aarch64/sve/pr116238.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
*************** d7ac99c012df73ffbde36998316bf1ef  gcc/te
*** 59527,59532 ****
--- 59766,59772 ----
  fc2eb8ac52faed5fba0a017b858d4ae4  gcc/testsuite/gcc.target/aarch64/tlsle_sizeadj_tiny_1.c
  8a43a90457a76e1e8f6951c362fed0e0  gcc/testsuite/gcc.target/aarch64/torture/aarch64-torture.exp
  4036d83a59b4adcf9e8a4cf5a291d22e  gcc/testsuite/gcc.target/aarch64/torture/pr111677.c
+ 8ba6cf5317762b2b89350d4f652efa53  gcc/testsuite/gcc.target/aarch64/torture/pr116564.c
  5266ac107a73e3ee1d1f44e1cda7d9f2  gcc/testsuite/gcc.target/aarch64/torture/simd-abi-1.c
  9c3416db2fc04c3f91b03ecae15e943e  gcc/testsuite/gcc.target/aarch64/torture/simd-abi-10.c
  df55bfe2c1ce46074b19b4566cedeef4  gcc/testsuite/gcc.target/aarch64/torture/simd-abi-11.c
*************** c4eec60b3306ebc857f91dd9f92ff8fe  gcc/te
*** 59760,59765 ****
--- 60000,60007 ----
  868d557785ef579297eaa8d96b97b3fc  gcc/testsuite/gcc.target/alpha/max-2.c
  cda436a64900819743f9c85f6ef0caae  gcc/testsuite/gcc.target/alpha/pr105209.c
  29ae801d98cc199cb5dde311a9649e2c  gcc/testsuite/gcc.target/alpha/pr106966.c
+ d2f13118de8962e07bca23bc88ac4d1b  gcc/testsuite/gcc.target/alpha/pr115297.c
+ 763b8b959a5cab5d1f688ad38f7bcd29  gcc/testsuite/gcc.target/alpha/pr115526.c
  dc5943b1dd495250e6dc8076b32c902c  gcc/testsuite/gcc.target/alpha/pr19518.c
  f8467590e67b2b5f4718d571a9ba60c0  gcc/testsuite/gcc.target/alpha/pr22093.c
  b36471f8edbf2a11ce23359823ecc10b  gcc/testsuite/gcc.target/alpha/pr24178.c
*************** ce1fe2059d8e263b0f3d889cb1392892  gcc/te
*** 60247,60254 ****
  a29c7dfe0255ba24ca52aa9293640971  gcc/testsuite/gcc.target/arm/cmse/cmse-8.x
  ce946170746cf737bca71ec699014fef  gcc/testsuite/gcc.target/arm/cmse/cmse-9.c
  397473f1a48c5b6f6bd4381804634aad  gcc/testsuite/gcc.target/arm/cmse/cmse.exp
! 68589fe6cc14ec6e535b037c8db589b9  gcc/testsuite/gcc.target/arm/cmse/extend-param.c
! 448776b3a969f181f903853f8b701bca  gcc/testsuite/gcc.target/arm/cmse/extend-return.c
  6e9c9a777c4a333e2bdba95bdaf23364  gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/bitfield-4.c
  c540adef0c0a8fc3e8e03fee5f712683  gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/bitfield-5.c
  727ae9b55594654191b60afa67ad5094  gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/bitfield-6.c
--- 60489,60496 ----
  a29c7dfe0255ba24ca52aa9293640971  gcc/testsuite/gcc.target/arm/cmse/cmse-8.x
  ce946170746cf737bca71ec699014fef  gcc/testsuite/gcc.target/arm/cmse/cmse-9.c
  397473f1a48c5b6f6bd4381804634aad  gcc/testsuite/gcc.target/arm/cmse/cmse.exp
! 2ca1bc1b7709560cb23249102afd2dd8  gcc/testsuite/gcc.target/arm/cmse/extend-param.c
! e37af808fb07f04f12fd1323772cfb18  gcc/testsuite/gcc.target/arm/cmse/extend-return.c
  6e9c9a777c4a333e2bdba95bdaf23364  gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/bitfield-4.c
  c540adef0c0a8fc3e8e03fee5f712683  gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/bitfield-5.c
  727ae9b55594654191b60afa67ad5094  gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/bitfield-6.c
*************** dc937ad7bdd38e233f8eb2871fbab365  gcc/te
*** 60325,60331 ****
  37ee43df70f4d07a257b2684561a574c  gcc/testsuite/gcc.target/arm/cond_sub_restrict_it.c
  ea5c06143f89f8b3c26a3c80f255d03b  gcc/testsuite/gcc.target/arm/condarith_restrict_it.c
  702468e7cb2029f03eaac95e5eea0533  gcc/testsuite/gcc.target/arm/constant-pool.c
! d38897569ba0b5112694e6e1fe6662b5  gcc/testsuite/gcc.target/arm/copysign_softfloat_1.c
  c46d86d65d2d64a7a88fc4a4918fd806  gcc/testsuite/gcc.target/arm/cortex-m55-nodsp-flag-hard.c
  d68dd2fc1fc4947df53d60137d04cc39  gcc/testsuite/gcc.target/arm/cortex-m55-nodsp-flag-softfp.c
  b3f3ff81dd0095a51c242338491d533e  gcc/testsuite/gcc.target/arm/cortex-m55-nodsp-nofp-flag-softfp.c
--- 60567,60573 ----
  37ee43df70f4d07a257b2684561a574c  gcc/testsuite/gcc.target/arm/cond_sub_restrict_it.c
  ea5c06143f89f8b3c26a3c80f255d03b  gcc/testsuite/gcc.target/arm/condarith_restrict_it.c
  702468e7cb2029f03eaac95e5eea0533  gcc/testsuite/gcc.target/arm/constant-pool.c
! a15062bec8f5e7f6b88a19f23efae654  gcc/testsuite/gcc.target/arm/copysign_softfloat_1.c
  c46d86d65d2d64a7a88fc4a4918fd806  gcc/testsuite/gcc.target/arm/cortex-m55-nodsp-flag-hard.c
  d68dd2fc1fc4947df53d60137d04cc39  gcc/testsuite/gcc.target/arm/cortex-m55-nodsp-flag-softfp.c
  b3f3ff81dd0095a51c242338491d533e  gcc/testsuite/gcc.target/arm/cortex-m55-nodsp-nofp-flag-softfp.c
*************** c9fa67c20fec9ef097315c2e0664eb2f  gcc/te
*** 62622,62627 ****
--- 62864,62870 ----
  0e904d54afafee544aac46db74a0fb78  gcc/testsuite/gcc.target/arm/mve/intrinsics/vsetq_lane_s32.c
  def367f33eb6f2d3b377c08209d4e3ba  gcc/testsuite/gcc.target/arm/mve/intrinsics/vsetq_lane_s64.c
  8260100dce01c5f54338df06aed56da3  gcc/testsuite/gcc.target/arm/mve/intrinsics/vsetq_lane_s8.c
+ bfc6037993ab8de2e59e1fc18bd8c747  gcc/testsuite/gcc.target/arm/mve/intrinsics/vsetq_lane_su64.c
  3aebb2229ee3c92f32168bc434c06dcc  gcc/testsuite/gcc.target/arm/mve/intrinsics/vsetq_lane_u16.c
  b6849ec20ab5271453eb6a6910746ff2  gcc/testsuite/gcc.target/arm/mve/intrinsics/vsetq_lane_u32.c
  770546f9f98bbba226ff4a00ebb7d508  gcc/testsuite/gcc.target/arm/mve/intrinsics/vsetq_lane_u64.c
*************** ef10b7803f7ace6199521b5e4c9428a0  gcc/te
*** 63109,63114 ****
--- 63352,63358 ----
  12b022cc37717c3bfd0b8e98e9ed0a33  gcc/testsuite/gcc.target/arm/pac-7.c
  34aba47ad65c3950a41fc2c64c4861cf  gcc/testsuite/gcc.target/arm/pac-8.c
  1f9b68eab435a69c70be7fdee6ed275f  gcc/testsuite/gcc.target/arm/pac-9.c
+ 5fc600a11e9ef844b77eb834b6fd363c  gcc/testsuite/gcc.target/arm/pac-sibcall.c
  1115daad97541e167c5651bc1032e202  gcc/testsuite/gcc.target/arm/pac.h
  37a9218c79439946d7d0121ec2abee72  gcc/testsuite/gcc.target/arm/peep-ldrd-1.c
  ce2ea998f70f030c1e5c5cf0f3536bd7  gcc/testsuite/gcc.target/arm/peep-ldrd-2.c
*************** b39d52db8b06b00a7c57fd2d7dd7bc0a  gcc/te
*** 63377,63383 ****
  454ea9c4b205cc5970ef1f679c56ad7a  gcc/testsuite/gcc.target/arm/simd/mve-vorn.c
  fcce8db5ec7e8bdb594b192422634626  gcc/testsuite/gcc.target/arm/simd/mve-vorr.c
  8c135e895bc223508b6735896b11e21f  gcc/testsuite/gcc.target/arm/simd/mve-vshl.c
! 436aabb7e19b94cd90c42d18d9ffd235  gcc/testsuite/gcc.target/arm/simd/mve-vshr.c
  93474bc90e5156ad689799d6fb6a4511  gcc/testsuite/gcc.target/arm/simd/mve-vsub-scalar-1.c
  6c75eaaec68dfb8c4f79555ce03a5fc5  gcc/testsuite/gcc.target/arm/simd/mve-vsub_1.c
  1b47bf72d463778fb593a6c8e88de7bf  gcc/testsuite/gcc.target/arm/simd/neon-compare-1.c
--- 63621,63627 ----
  454ea9c4b205cc5970ef1f679c56ad7a  gcc/testsuite/gcc.target/arm/simd/mve-vorn.c
  fcce8db5ec7e8bdb594b192422634626  gcc/testsuite/gcc.target/arm/simd/mve-vorr.c
  8c135e895bc223508b6735896b11e21f  gcc/testsuite/gcc.target/arm/simd/mve-vshl.c
! c45f1243ffe171add3b39b622433aff8  gcc/testsuite/gcc.target/arm/simd/mve-vshr.c
  93474bc90e5156ad689799d6fb6a4511  gcc/testsuite/gcc.target/arm/simd/mve-vsub-scalar-1.c
  6c75eaaec68dfb8c4f79555ce03a5fc5  gcc/testsuite/gcc.target/arm/simd/mve-vsub_1.c
  1b47bf72d463778fb593a6c8e88de7bf  gcc/testsuite/gcc.target/arm/simd/neon-compare-1.c
*************** fcfc22b5becf29a31bc290457133738d  gcc/te
*** 63803,63808 ****
--- 64047,64061 ----
  da616058fed041fe8be91af9e560a517  gcc/testsuite/gcc.target/avr/torture/pr105753.c
  112c41be69fc1500c61b78d58e88cb62  gcc/testsuite/gcc.target/avr/torture/pr109650-1.c
  057f8a7fa6d90ee3ba242f26befaec45  gcc/testsuite/gcc.target/avr/torture/pr109650-2.c
+ 076528976282b60094f653255606b21f  gcc/testsuite/gcc.target/avr/torture/pr115307-isinf.c
+ f6a5b393e8b302550433204eafe7ff3e  gcc/testsuite/gcc.target/avr/torture/pr115317-isinf.c
+ e6f8c16f16933f4321616345f9504093  gcc/testsuite/gcc.target/avr/torture/pr116407-2.c
+ e4a3459589124a7656ce0cc1ace448d3  gcc/testsuite/gcc.target/avr/torture/pr116407-4.c
+ c02c9b09a64e3c14adfe954730cf8f3c  gcc/testsuite/gcc.target/avr/torture/pr119989-memx-1.c
+ 4075d89600bfef80102e75d0d4108ef3  gcc/testsuite/gcc.target/avr/torture/pr119989-memx-2.c
+ caa7b81fc83f2373b987ae3dec63aa32  gcc/testsuite/gcc.target/avr/torture/pr119989-memx-3.c
+ 9d65901f178212417bd03274e7a0ff1d  gcc/testsuite/gcc.target/avr/torture/pr119989-memx-4.c
+ 51d04706ca0c4216d8d453fbe55f52ca  gcc/testsuite/gcc.target/avr/torture/pr119989.h
  0844a939ea2464d30cc8892c85b4aecc  gcc/testsuite/gcc.target/avr/torture/pr39633.c
  8fb17af722ee890b7fa08b5610cdb80e  gcc/testsuite/gcc.target/avr/torture/pr41885.c
  70b849f57ecf42299230b99b7734dd2d  gcc/testsuite/gcc.target/avr/torture/pr51374-1.c
*************** ab53af0eb6dbfe2791a8ac1bbaf0c11f  gcc/te
*** 63817,63823 ****
--- 64070,64079 ----
  5f3be2dbb82f715c14a1a41fff447a60  gcc/testsuite/gcc.target/avr/torture/pr77326.c
  4fbef28c5655476b160563b7732f35f0  gcc/testsuite/gcc.target/avr/torture/pr83729.c
  3f60045ba7f9c20a87591727f9e0b7f1  gcc/testsuite/gcc.target/avr/torture/pr83801.c
+ cdd277ee16a82198dac193f2885f4cb3  gcc/testsuite/gcc.target/avr/torture/pr87376.c
+ 54e693530d5f4d0566b475b2eaa73cca  gcc/testsuite/gcc.target/avr/torture/pr88236-pr115726.c
  52eb2c2bb002e59b07281c8efa4702fb  gcc/testsuite/gcc.target/avr/torture/pr92606.c
+ d41e40769fe3b38d9debfff43a083a18  gcc/testsuite/gcc.target/avr/torture/pr98762.c
  21a45d34960ba9567b9f2483d22c843f  gcc/testsuite/gcc.target/avr/torture/progmem-1.c
  564c71a894aff68e98d5c4a6db2b47ae  gcc/testsuite/gcc.target/avr/torture/progmem-1.cpp
  126473a2f2a291f65eeb2dca66b500b2  gcc/testsuite/gcc.target/avr/torture/sat-hr-plus-minus.c
*************** aaef10fa24c4bc67258e89962335eaed  gcc/te
*** 65766,65771 ****
--- 66022,66028 ----
  851dac1c7dd73efe6b05026da917342d  gcc/testsuite/gcc.target/i386/avx256-unaligned-store-5.c
  3f5fa6be90bc7c0bb2fc93906c9940b3  gcc/testsuite/gcc.target/i386/avx256-unaligned-store-6.c
  57127db2a957cc3b9075d912d2186d74  gcc/testsuite/gcc.target/i386/avx256-unaligned-store-7.c
+ e7a323f0fdee8f7907cd7d1ceeec16ab  gcc/testsuite/gcc.target/i386/avx256_avoid_vec_perm.c
  0feb94f9968a5b27ad2447774a124af9  gcc/testsuite/gcc.target/i386/avx512-binop-1.h
  73f17c6e6c3de9b56b6c24f2ca95e8dc  gcc/testsuite/gcc.target/i386/avx512-binop-2.h
  7e80c283345b21a08008c43b6ba91fa4  gcc/testsuite/gcc.target/i386/avx512-binop-3.h
*************** bce67b236520c561f93006d5bd66eea1  gcc/te
*** 65867,65873 ****
  f647d36b7701e4997d1256eb0c4cb741  gcc/testsuite/gcc.target/i386/avx512bw-pr100267-d-2.c
  6fdcf602650b181e914aaa03a2e18c3a  gcc/testsuite/gcc.target/i386/avx512bw-pr100267-q-2.c
  7f067774026be7c71e746d719f34e7be  gcc/testsuite/gcc.target/i386/avx512bw-pr100267-w-2.c
! 71ac6a04534042bfa057ebce7bc266b4  gcc/testsuite/gcc.target/i386/avx512bw-pr103750-1.c
  2589b43ccc82e972823c4c4f159c2244  gcc/testsuite/gcc.target/i386/avx512bw-pr103750-2.c
  2d319ef27177a5dd5161f6c501d73c11  gcc/testsuite/gcc.target/i386/avx512bw-pr70329-1.c
  2578aaea4945a191c1767c5b6ebde5b2  gcc/testsuite/gcc.target/i386/avx512bw-pr70329-2.c
--- 66124,66130 ----
  f647d36b7701e4997d1256eb0c4cb741  gcc/testsuite/gcc.target/i386/avx512bw-pr100267-d-2.c
  6fdcf602650b181e914aaa03a2e18c3a  gcc/testsuite/gcc.target/i386/avx512bw-pr100267-q-2.c
  7f067774026be7c71e746d719f34e7be  gcc/testsuite/gcc.target/i386/avx512bw-pr100267-w-2.c
! 5ee9ec69a8d0c12ad27334fa1ed9ab05  gcc/testsuite/gcc.target/i386/avx512bw-pr103750-1.c
  2589b43ccc82e972823c4c4f159c2244  gcc/testsuite/gcc.target/i386/avx512bw-pr103750-2.c
  2d319ef27177a5dd5161f6c501d73c11  gcc/testsuite/gcc.target/i386/avx512bw-pr70329-1.c
  2578aaea4945a191c1767c5b6ebde5b2  gcc/testsuite/gcc.target/i386/avx512bw-pr70329-2.c
*************** ddee045bf26d24bb3c8c4957af9831a0  gcc/te
*** 65938,65943 ****
--- 66195,66201 ----
  9e407045b53a21ae0d7c112ffb790d43  gcc/testsuite/gcc.target/i386/avx512bw-vpaddw-1.c
  01f4adb01dc81937191efd641eeeb298  gcc/testsuite/gcc.target/i386/avx512bw-vpaddw-2.c
  381ec3d170d13e670a7d82cb4b8f7d0d  gcc/testsuite/gcc.target/i386/avx512bw-vpalignr-1.c
+ 167461ae051833f02dbe65e6c16defe8  gcc/testsuite/gcc.target/i386/avx512bw-vpalignr-1b.c
  ceeb85e9addcfe4b03eb11f284116f03  gcc/testsuite/gcc.target/i386/avx512bw-vpalignr-2.c
  c98c741ace98c244bd47dbae09219719  gcc/testsuite/gcc.target/i386/avx512bw-vpalignr-3.c
  642ccfbc2b444966fb6f736f43a1365c  gcc/testsuite/gcc.target/i386/avx512bw-vpalignr-4.c
*************** d846c7209b5bac971f214f29ca3fd506  gcc/te
*** 66234,66241 ****
--- 66492,66501 ----
  e44436f82377cc5b5cff6a5347fd450e  gcc/testsuite/gcc.target/i386/avx512dq-vfpclassps-1.c
  b3fc381ca0059d17a2d9812d9231ff01  gcc/testsuite/gcc.target/i386/avx512dq-vfpclassps-2.c
  315a3604df8b1e1c374a98f932da6925  gcc/testsuite/gcc.target/i386/avx512dq-vfpclasssd-1.c
+ 320c1383cbb8e4ce07f067792bb52fd4  gcc/testsuite/gcc.target/i386/avx512dq-vfpclasssd-1b.c
  5cd4bb271105b6457a2a496768007256  gcc/testsuite/gcc.target/i386/avx512dq-vfpclasssd-2.c
  8acc20767c397abf4448f2913287a865  gcc/testsuite/gcc.target/i386/avx512dq-vfpclassss-1.c
+ 7fc53c6d107e4e8b76a7a062a0e6ef7e  gcc/testsuite/gcc.target/i386/avx512dq-vfpclassss-1b.c
  d2a9855a64040f30e43740f4abffd5eb  gcc/testsuite/gcc.target/i386/avx512dq-vfpclassss-2.c
  1fb9353e1dd69f5c4b4f8968fba855ff  gcc/testsuite/gcc.target/i386/avx512dq-vinsert-1.c
  9ef48524b5d1edfc6602e9a3e815a433  gcc/testsuite/gcc.target/i386/avx512dq-vinsertf32x8-1.c
*************** f3ad87ac05bd79c4aae795b5c86f4c3c  gcc/te
*** 66277,66284 ****
--- 66537,66546 ----
  256d6929daa33a4c5bcb3aaaf1eb5260  gcc/testsuite/gcc.target/i386/avx512dq-vreduceps-3.c
  05e2e691a54d1d7d679200c87b52f5d9  gcc/testsuite/gcc.target/i386/avx512dq-vreduceps-4.c
  eb1182b1bc9929fffea30e9274753e93  gcc/testsuite/gcc.target/i386/avx512dq-vreducesd-1.c
+ f6c963a01ad7c80c01ff4cd13b04374c  gcc/testsuite/gcc.target/i386/avx512dq-vreducesd-1b.c
  f93a614a15d204e65833d00faeae06bd  gcc/testsuite/gcc.target/i386/avx512dq-vreducesd-2.c
  20aed644a835776e37e1d5aba4103fa4  gcc/testsuite/gcc.target/i386/avx512dq-vreducess-1.c
+ 0b78547190f1fea2da9af7c5cf1ac4d1  gcc/testsuite/gcc.target/i386/avx512dq-vreducess-1b.c
  73efe722ab3e8d69d28347b8d8df38ae  gcc/testsuite/gcc.target/i386/avx512dq-vreducess-2.c
  1b13c5919cffe7b16ec23ae099c1a222  gcc/testsuite/gcc.target/i386/avx512dq-vxorpd-1.c
  d2485d57c89b4736d55cf3ad043515d3  gcc/testsuite/gcc.target/i386/avx512dq-vxorpd-2.c
*************** baf31fdbb66bd1db60ed18831c7eb2a8  gcc/te
*** 67542,67547 ****
--- 67804,67810 ----
  c871215766439133615180b4861bbc02  gcc/testsuite/gcc.target/i386/avx512fp16-vfnmsubXXXsh-1b.c
  e5f342115c72c6f189324bbb8ba8498a  gcc/testsuite/gcc.target/i386/avx512fp16-vfpclassph-1a.c
  02d365e89418c102e31b90036e117273  gcc/testsuite/gcc.target/i386/avx512fp16-vfpclassph-1b.c
+ 1ef328cbfb02d1f2fd3e0e62d986ebfc  gcc/testsuite/gcc.target/i386/avx512fp16-vfpclassph-1c.c
  43f3189c0a0cc0109dba0b81ab99fb0a  gcc/testsuite/gcc.target/i386/avx512fp16-vfpclasssh-1a.c
  3e23e295b389d5fc7973bfc73cd8d235  gcc/testsuite/gcc.target/i386/avx512fp16-vfpclasssh-1b.c
  a3f1acec8cc23029e37e44877fc68d8f  gcc/testsuite/gcc.target/i386/avx512fp16-vgetexpph-1a.c
*************** df4c1c2e223dab18c858a16ca0d5bb83  gcc/te
*** 67873,67878 ****
--- 68136,68142 ----
  79c3a64519a5650ef8325a1e7ae43f77  gcc/testsuite/gcc.target/i386/avx512vl-valignd-1.c
  2c099e2c99e2a3a8736f9a95748c0aa5  gcc/testsuite/gcc.target/i386/avx512vl-valignd-2.c
  4a892693a270119b5c7d5360e4e5cdc8  gcc/testsuite/gcc.target/i386/avx512vl-valignq-1.c
+ a75775b26c58b3ceb1c73fecd52901f5  gcc/testsuite/gcc.target/i386/avx512vl-valignq-1b.c
  f706011a0cf678105b1949d4145c59b4  gcc/testsuite/gcc.target/i386/avx512vl-valignq-2.c
  f4ca20d06d9a8325947f96b09c244941  gcc/testsuite/gcc.target/i386/avx512vl-vandnpd-2.c
  14a35041817996bfc5797b2be0b109e2  gcc/testsuite/gcc.target/i386/avx512vl-vandnps-2.c
*************** b407509e91ada069c88bb25df10261f2  gcc/te
*** 68629,68634 ****
--- 68893,68899 ----
  89e5e49acc2dd5c296b6f32cc9af9e5e  gcc/testsuite/gcc.target/i386/bmi-blsr-2.c
  be3fee1889ad65677a041f24f858b1cb  gcc/testsuite/gcc.target/i386/bmi-blsr-2a.c
  4b8229596d6eeaa03a4011846a02cd4a  gcc/testsuite/gcc.target/i386/bmi-check.h
+ e7a531d7b228712b8efd31098ee9cdd4  gcc/testsuite/gcc.target/i386/bmi-pr116287.c
  837bc321452d830cdca00be675a80d02  gcc/testsuite/gcc.target/i386/bmi-tzcnt-1.c
  bddf7c2fb14fca97f8ff604d99aa87eb  gcc/testsuite/gcc.target/i386/bmi-tzcnt-1a.c
  d3a83e902d535bfb6c532e16d5b3622e  gcc/testsuite/gcc.target/i386/bmi-tzcnt-2.c
*************** eb6d296fc055f71af8d6286a76275c08  gcc/te
*** 68659,68664 ****
--- 68924,68930 ----
  c7ce604b365a1dabeac828385fadac82  gcc/testsuite/gcc.target/i386/bmi2-pext32-1a.c
  07f0339fdff4b3fe5bfd2ef2568cf1ff  gcc/testsuite/gcc.target/i386/bmi2-pext64-1.c
  80e1b157bf4698a4c063a051d260de86  gcc/testsuite/gcc.target/i386/bmi2-pext64-1a.c
+ 7bbc1a5c683010fceddd3ea5a04ee3a5  gcc/testsuite/gcc.target/i386/bmi2-pr116287.c
  b3c8283dbd8e5f9b716e300034584eb1  gcc/testsuite/gcc.target/i386/bmi2-rorx32-1.c
  43e2ea585c6afa59c6fc24b1d5778b5f  gcc/testsuite/gcc.target/i386/bmi2-rorx32-1a.c
  715c6fdea5af863f17366b07b0976147  gcc/testsuite/gcc.target/i386/bmi2-rorx64-1.c
*************** bcb4166cdef6b56e89b654dc4cb83a03  gcc/te
*** 68769,68774 ****
--- 69035,69041 ----
  f20d8e2e048a66edc93c5638ce3cd2d9  gcc/testsuite/gcc.target/i386/cmov8.c
  000f630353ad4e662a8123ff07c183c0  gcc/testsuite/gcc.target/i386/cmov9.c
  a7e5d6a57b645a1c832fad2acbb1016b  gcc/testsuite/gcc.target/i386/cmpccxadd-1.c
+ f22f68b0840ac6ff981a038296834407  gcc/testsuite/gcc.target/i386/cmpccxadd-1b.c
  7139cb8a2661e3fe95f654cff3bec6d7  gcc/testsuite/gcc.target/i386/cmpccxadd-2.c
  5f98340fec8fce3d9097abb98c65fb65  gcc/testsuite/gcc.target/i386/cmpti1.c
  657ffd70a2b88bad5845a02aad916083  gcc/testsuite/gcc.target/i386/cmpti2.c
*************** de96937d95fca09a8202692cb42b1b5c  gcc/te
*** 68931,68936 ****
--- 69198,69204 ----
  a977081749abfb4842b771248ebec575  gcc/testsuite/gcc.target/i386/fma-fmsubaddXX.c
  a2223c46858f0a78046f7081f1a8db8d  gcc/testsuite/gcc.target/i386/fma-fnmaddXX.c
  0eb820dcbdc8d469608686562368e957  gcc/testsuite/gcc.target/i386/fma-fnmsubXX.c
+ 39b6f4e4ca48937662b5a71ad89d9abf  gcc/testsuite/gcc.target/i386/fma-pr116891.c
  41d05944a41d2d54ba7f51df1beb87cc  gcc/testsuite/gcc.target/i386/fma3-builtin-2.c
  fca446fb8db4eb130017e79f6967b7fc  gcc/testsuite/gcc.target/i386/fma3-builtin.c
  98b87707fe8556bf09594d5fcd30383e  gcc/testsuite/gcc.target/i386/fma3-fma.c
*************** c1320fd604803bc04257c984f1e3ba77  gcc/te
*** 69009,69015 ****
  3dd864a351a6115db6a5b2ea1ee16ece  gcc/testsuite/gcc.target/i386/funcspec-3.c
  5af0527c599bf95f77628d48b1beb0ec  gcc/testsuite/gcc.target/i386/funcspec-4.c
  7568c1249431aafb7f8e2610a1e4a35e  gcc/testsuite/gcc.target/i386/funcspec-5.c
! d8d5af151fe446959eec33cf754947f6  gcc/testsuite/gcc.target/i386/funcspec-56.inc
  6886186deb869f2b04be36492c05b8aa  gcc/testsuite/gcc.target/i386/funcspec-6.c
  35655de5c9348f2a36254312a8d17908  gcc/testsuite/gcc.target/i386/funcspec-7.c
  0ba9f1b7368ea580cabab541b451aea8  gcc/testsuite/gcc.target/i386/funcspec-8.c
--- 69277,69283 ----
  3dd864a351a6115db6a5b2ea1ee16ece  gcc/testsuite/gcc.target/i386/funcspec-3.c
  5af0527c599bf95f77628d48b1beb0ec  gcc/testsuite/gcc.target/i386/funcspec-4.c
  7568c1249431aafb7f8e2610a1e4a35e  gcc/testsuite/gcc.target/i386/funcspec-5.c
! 846c75862f04b179269cf1d913177736  gcc/testsuite/gcc.target/i386/funcspec-56.inc
  6886186deb869f2b04be36492c05b8aa  gcc/testsuite/gcc.target/i386/funcspec-6.c
  35655de5c9348f2a36254312a8d17908  gcc/testsuite/gcc.target/i386/funcspec-7.c
  0ba9f1b7368ea580cabab541b451aea8  gcc/testsuite/gcc.target/i386/funcspec-8.c
*************** ec64d74d91ed819f110fdc6f8f90197e  gcc/te
*** 69485,69491 ****
  9f8568a66133d16283b57d8a97c3dc49  gcc/testsuite/gcc.target/i386/pie-copyrelocs-4.c
  f91cf99532e69c383485f6be3f62eb99  gcc/testsuite/gcc.target/i386/pie.c
  5d062b099437fb64de565760ffa381a8  gcc/testsuite/gcc.target/i386/pieces-memcpy-1.c
! 159890d45cc96b5006c69f188375af79  gcc/testsuite/gcc.target/i386/pieces-memcpy-10.c
  c8299c32a2fde2871d46799e54ca9c20  gcc/testsuite/gcc.target/i386/pieces-memcpy-11.c
  07e2e682ac676281588afe54520b14b5  gcc/testsuite/gcc.target/i386/pieces-memcpy-12.c
  cbaafd43310e10a7ba4ce687bafe06da  gcc/testsuite/gcc.target/i386/pieces-memcpy-13.c
--- 69753,69759 ----
  9f8568a66133d16283b57d8a97c3dc49  gcc/testsuite/gcc.target/i386/pie-copyrelocs-4.c
  f91cf99532e69c383485f6be3f62eb99  gcc/testsuite/gcc.target/i386/pie.c
  5d062b099437fb64de565760ffa381a8  gcc/testsuite/gcc.target/i386/pieces-memcpy-1.c
! 23061cd512728bc930eeb98dcd240079  gcc/testsuite/gcc.target/i386/pieces-memcpy-10.c
  c8299c32a2fde2871d46799e54ca9c20  gcc/testsuite/gcc.target/i386/pieces-memcpy-11.c
  07e2e682ac676281588afe54520b14b5  gcc/testsuite/gcc.target/i386/pieces-memcpy-12.c
  cbaafd43310e10a7ba4ce687bafe06da  gcc/testsuite/gcc.target/i386/pieces-memcpy-13.c
*************** b5f6fb3aaac27e15ae52d9111e60d98d  gcc/te
*** 69498,69507 ****
  279c04d20615905ca5bf2f44eb5a231d  gcc/testsuite/gcc.target/i386/pieces-memcpy-2.c
  7e2d486487e1f536c226d8bc290fd8ad  gcc/testsuite/gcc.target/i386/pieces-memcpy-20.c
  2f4b551b9d6addea576cff08a8831f3f  gcc/testsuite/gcc.target/i386/pieces-memcpy-21.c
  2820c9b91ec98c38843764eea07d4b75  gcc/testsuite/gcc.target/i386/pieces-memcpy-3.c
  698986063dd5ba005476ca849de14359  gcc/testsuite/gcc.target/i386/pieces-memcpy-4.c
  5e90eca9009d511850fb8fc840c7e236  gcc/testsuite/gcc.target/i386/pieces-memcpy-5.c
! 592f55f6e3184576f7ecadf1df7171df  gcc/testsuite/gcc.target/i386/pieces-memcpy-6.c
  e4e4d6519861d83a595eadd0756e3cf2  gcc/testsuite/gcc.target/i386/pieces-memcpy-7.c
  bb3f405fb2a00f93ade9f112f66a2ae2  gcc/testsuite/gcc.target/i386/pieces-memcpy-8.c
  224b0424797e8741da92fc8c1b86afb3  gcc/testsuite/gcc.target/i386/pieces-memcpy-9.c
--- 69766,69776 ----
  279c04d20615905ca5bf2f44eb5a231d  gcc/testsuite/gcc.target/i386/pieces-memcpy-2.c
  7e2d486487e1f536c226d8bc290fd8ad  gcc/testsuite/gcc.target/i386/pieces-memcpy-20.c
  2f4b551b9d6addea576cff08a8831f3f  gcc/testsuite/gcc.target/i386/pieces-memcpy-21.c
+ 483ed3c0a5b3efe685343cb5dc87d54d  gcc/testsuite/gcc.target/i386/pieces-memcpy-22.c
  2820c9b91ec98c38843764eea07d4b75  gcc/testsuite/gcc.target/i386/pieces-memcpy-3.c
  698986063dd5ba005476ca849de14359  gcc/testsuite/gcc.target/i386/pieces-memcpy-4.c
  5e90eca9009d511850fb8fc840c7e236  gcc/testsuite/gcc.target/i386/pieces-memcpy-5.c
! 24f2ee2e996e237f6e102d9bc2cb8deb  gcc/testsuite/gcc.target/i386/pieces-memcpy-6.c
  e4e4d6519861d83a595eadd0756e3cf2  gcc/testsuite/gcc.target/i386/pieces-memcpy-7.c
  bb3f405fb2a00f93ade9f112f66a2ae2  gcc/testsuite/gcc.target/i386/pieces-memcpy-8.c
  224b0424797e8741da92fc8c1b86afb3  gcc/testsuite/gcc.target/i386/pieces-memcpy-9.c
*************** dfdb563e4ff7bbe491b12bbbe647b9dc  gcc/te
*** 69536,69548 ****
  181b017254dd31eb2223399402d99647  gcc/testsuite/gcc.target/i386/pieces-memset-35.c
  1459df6a5e5bf8ce8f966ba8966bfddd  gcc/testsuite/gcc.target/i386/pieces-memset-36.c
  706f5c92442e84a05ac86f5049be1023  gcc/testsuite/gcc.target/i386/pieces-memset-37.c
! 71d7cb14af52878612fec7d2cc2dcdff  gcc/testsuite/gcc.target/i386/pieces-memset-38.c
  46290722ded2b4db346c0397ed4a4f6e  gcc/testsuite/gcc.target/i386/pieces-memset-39.c
  b9528f9fe022aa90d7c7d9764f67ece4  gcc/testsuite/gcc.target/i386/pieces-memset-4.c
! e97806715f1d074e19f850beb7a46cf7  gcc/testsuite/gcc.target/i386/pieces-memset-40.c
! fa508fb4ea1f8f8b18cde0a830cf3953  gcc/testsuite/gcc.target/i386/pieces-memset-41.c
! ef978a20afb9412dabbe15a9b8dfb5b0  gcc/testsuite/gcc.target/i386/pieces-memset-42.c
! 36d97d09e24700e91c20a52767b17774  gcc/testsuite/gcc.target/i386/pieces-memset-43.c
  2b47b7f82aeabc7a238642520819b3f0  gcc/testsuite/gcc.target/i386/pieces-memset-44.c
  f2f0e85f12be6d8c85584ef9e34e08ca  gcc/testsuite/gcc.target/i386/pieces-memset-45.c
  f29f6d2af05e1f08f148f0eed162d860  gcc/testsuite/gcc.target/i386/pieces-memset-46.c
--- 69805,69817 ----
  181b017254dd31eb2223399402d99647  gcc/testsuite/gcc.target/i386/pieces-memset-35.c
  1459df6a5e5bf8ce8f966ba8966bfddd  gcc/testsuite/gcc.target/i386/pieces-memset-36.c
  706f5c92442e84a05ac86f5049be1023  gcc/testsuite/gcc.target/i386/pieces-memset-37.c
! aded7685d2737a1f9f9bfa29d142578b  gcc/testsuite/gcc.target/i386/pieces-memset-38.c
  46290722ded2b4db346c0397ed4a4f6e  gcc/testsuite/gcc.target/i386/pieces-memset-39.c
  b9528f9fe022aa90d7c7d9764f67ece4  gcc/testsuite/gcc.target/i386/pieces-memset-4.c
! 5e61a688623c5bae3c58091373dada37  gcc/testsuite/gcc.target/i386/pieces-memset-40.c
! 32898a0a3b4f097526a33f5b752c0607  gcc/testsuite/gcc.target/i386/pieces-memset-41.c
! 8d0f7c4609b34ade3bbe7b6fcdd6636b  gcc/testsuite/gcc.target/i386/pieces-memset-42.c
! 6a10741d846589134acea1c912c80293  gcc/testsuite/gcc.target/i386/pieces-memset-43.c
  2b47b7f82aeabc7a238642520819b3f0  gcc/testsuite/gcc.target/i386/pieces-memset-44.c
  f2f0e85f12be6d8c85584ef9e34e08ca  gcc/testsuite/gcc.target/i386/pieces-memset-45.c
  f29f6d2af05e1f08f148f0eed162d860  gcc/testsuite/gcc.target/i386/pieces-memset-46.c
*************** fab4224ceed336ed6902793909c0c6c2  gcc/te
*** 69551,69562 ****
  b6a5763cac2b72e43f0900c7fbca0740  gcc/testsuite/gcc.target/i386/pieces-memset-49.c
  e59e962761850423b307c01f720c8e84  gcc/testsuite/gcc.target/i386/pieces-memset-5.c
  f6afe5571570af54d1d2e02c0e28d3f6  gcc/testsuite/gcc.target/i386/pieces-memset-50.c
  9a26520df010055f642c2ece0b8228da  gcc/testsuite/gcc.target/i386/pieces-memset-6.c
  965472deb34cf62f613f73701201f9b4  gcc/testsuite/gcc.target/i386/pieces-memset-7.c
  7c2aa9a23dfc3f65dc77c8d3af0a6a3f  gcc/testsuite/gcc.target/i386/pieces-memset-8.c
  5a05b363e010e9b9a4fc05f362d42dae  gcc/testsuite/gcc.target/i386/pieces-memset-9.c
  b1d366c21cfdcfacf9854ed6cbfd7bc3  gcc/testsuite/gcc.target/i386/pieces-strcpy-1.c
! 52e52549556117888f85f13d26ced39b  gcc/testsuite/gcc.target/i386/pieces-strcpy-2.c
  13d06bee88f2ccd2a16effe0c243e61e  gcc/testsuite/gcc.target/i386/pow-1.c
  08e64611506eb827fa5c5f614b29322b  gcc/testsuite/gcc.target/i386/pr100066.c
  59cbc0324755fe5398f1eeb23440ed0c  gcc/testsuite/gcc.target/i386/pr100093.c
--- 69820,69833 ----
  b6a5763cac2b72e43f0900c7fbca0740  gcc/testsuite/gcc.target/i386/pieces-memset-49.c
  e59e962761850423b307c01f720c8e84  gcc/testsuite/gcc.target/i386/pieces-memset-5.c
  f6afe5571570af54d1d2e02c0e28d3f6  gcc/testsuite/gcc.target/i386/pieces-memset-50.c
+ 587ca57e48d1c64f4cb91b6203512c99  gcc/testsuite/gcc.target/i386/pieces-memset-51.c
  9a26520df010055f642c2ece0b8228da  gcc/testsuite/gcc.target/i386/pieces-memset-6.c
  965472deb34cf62f613f73701201f9b4  gcc/testsuite/gcc.target/i386/pieces-memset-7.c
  7c2aa9a23dfc3f65dc77c8d3af0a6a3f  gcc/testsuite/gcc.target/i386/pieces-memset-8.c
  5a05b363e010e9b9a4fc05f362d42dae  gcc/testsuite/gcc.target/i386/pieces-memset-9.c
  b1d366c21cfdcfacf9854ed6cbfd7bc3  gcc/testsuite/gcc.target/i386/pieces-strcpy-1.c
! cc22fd26fc6861d68ee19f474f5eb5a2  gcc/testsuite/gcc.target/i386/pieces-strcpy-2.c
! b0e41142465073730317837ceeca8c09  gcc/testsuite/gcc.target/i386/pieces-strcpy-3.c
  13d06bee88f2ccd2a16effe0c243e61e  gcc/testsuite/gcc.target/i386/pow-1.c
  08e64611506eb827fa5c5f614b29322b  gcc/testsuite/gcc.target/i386/pr100066.c
  59cbc0324755fe5398f1eeb23440ed0c  gcc/testsuite/gcc.target/i386/pr100093.c
*************** d0e5711b97afe1b1990bb5e2ae02b3a6  gcc/te
*** 70020,70027 ****
--- 70291,70316 ----
  f561e51e21b70027e9a545f161c78a39  gcc/testsuite/gcc.target/i386/pr114184.c
  d2e40d7bd7109a0b57be13dfeec77fe6  gcc/testsuite/gcc.target/i386/pr114339.c
  624a387ab1cfd526aa46778b8c3cbf5f  gcc/testsuite/gcc.target/i386/pr114415.c
+ ae4ee357225c00ac286e183fee7b266a  gcc/testsuite/gcc.target/i386/pr115568.c
+ 4c9bd5ab4032e6b8dbf245c84e59d76d  gcc/testsuite/gcc.target/i386/pr115872.c
+ 667fbe7bd981494b067a94d4b7aa743c  gcc/testsuite/gcc.target/i386/pr116043.c
+ 5d7ed648796e3bb1badb99e986fd299a  gcc/testsuite/gcc.target/i386/pr116512.c
+ b032673fbd5ea0fa71ec43f67e37cd44  gcc/testsuite/gcc.target/i386/pr116621.c
+ 15bae7870bdfe5399b1490ea96088982  gcc/testsuite/gcc.target/i386/pr116839.c
+ 4fd839ad1866642d113d7c4f7474f89f  gcc/testsuite/gcc.target/i386/pr116962.c
+ 873d8965ee038d36a40500e2a179c793  gcc/testsuite/gcc.target/i386/pr117116.c
+ bd129be2e771c24c9a0830b8a42bbd83  gcc/testsuite/gcc.target/i386/pr117159.c
+ 13f48febf4f30f9fae29d44fb617cc94  gcc/testsuite/gcc.target/i386/pr117240_avx.c
+ 056042626d89fadd97a896dd5693a5ae  gcc/testsuite/gcc.target/i386/pr117240_avx512f.c
+ da692b8fe7fe8e3d33b45f3f919da356  gcc/testsuite/gcc.target/i386/pr117296.c
+ 917d3074e579c1fad9a86cf1657c1ab6  gcc/testsuite/gcc.target/i386/pr117318.c
+ d9c36e68265950d44ce781ce1be85bf6  gcc/testsuite/gcc.target/i386/pr117357.c
+ d354c62b8ff60efc0d5983bf81d1bfa4  gcc/testsuite/gcc.target/i386/pr117418-1.c
+ 60ce35a307c6c720d7d566058b4d7c52  gcc/testsuite/gcc.target/i386/pr117432.c
+ e12ace984bb5ee071207675ca43c7e58  gcc/testsuite/gcc.target/i386/pr118739.c
  991b7f7f44e28179f98bb458fdb69ea6  gcc/testsuite/gcc.target/i386/pr11877-2.c
  e7f6a568e551d3786797d6f56294b949  gcc/testsuite/gcc.target/i386/pr11877.c
+ 61d1a6c7aba6d7071f54e24b6dc92da7  gcc/testsuite/gcc.target/i386/pr118776.c
  b03b1d817538a863277c823b5e4cdf75  gcc/testsuite/gcc.target/i386/pr12092-1.c
  f99f88a6e994ad6e55e065e41bc58f8f  gcc/testsuite/gcc.target/i386/pr12329.c
  8951a1fa31f2d45ef9eacfff6a733f77  gcc/testsuite/gcc.target/i386/pr13366.c
*************** b91162801f7d0d6af855bd692e22ab63  gcc/te
*** 71360,71365 ****
--- 71649,71655 ----
  c7fbb8c42391916088505cea2847ff00  gcc/testsuite/gcc.target/i386/pr87918.c
  4b54801016bc4b3cc228ac7dd70de407  gcc/testsuite/gcc.target/i386/pr87928.c
  4fc2942c48d13b19282e746bb6deb0f5  gcc/testsuite/gcc.target/i386/pr87955.c
+ 888e51b46121c41e1f289e80df7c57ce  gcc/testsuite/gcc.target/i386/pr87984.c
  ec61cb2764cd0d05b8fd416bac2b290b  gcc/testsuite/gcc.target/i386/pr88033.c
  a720bfe0104feb1cfa40b8ab91dc5f05  gcc/testsuite/gcc.target/i386/pr88070.c
  b14b816d91744aa96c9da5bad9de427b  gcc/testsuite/gcc.target/i386/pr88178.c
*************** a3e5a8589b650ac289a1ebcf789619f6  gcc/te
*** 71864,71870 ****
  3e24fab4cd6a98c884b490eae74a3aaf  gcc/testsuite/gcc.target/i386/pr99881.c
  939447bef72a36fa24dc61bac7010b1b  gcc/testsuite/gcc.target/i386/pr99905.c
  bb74fe2f09b19928e6c4047fee136b0b  gcc/testsuite/gcc.target/i386/prefer-vector-width-attr.c
! aac8ef14c7538ca8bb3df8ee0d3a6144  gcc/testsuite/gcc.target/i386/prefetchi-1.c
  5fb0aad075edba2ca6bd9c52e18048a4  gcc/testsuite/gcc.target/i386/prefetchi-2.c
  0d239d33a9eeb5af2e5ffd12b6d373df  gcc/testsuite/gcc.target/i386/prefetchi-3.c
  89c120add0d0cea3a2a86aaa0863dd2e  gcc/testsuite/gcc.target/i386/prefetchi-4.c
--- 72154,72161 ----
  3e24fab4cd6a98c884b490eae74a3aaf  gcc/testsuite/gcc.target/i386/pr99881.c
  939447bef72a36fa24dc61bac7010b1b  gcc/testsuite/gcc.target/i386/pr99905.c
  bb74fe2f09b19928e6c4047fee136b0b  gcc/testsuite/gcc.target/i386/prefer-vector-width-attr.c
! d9c90a27fd6b9568c79455bcaf9faacc  gcc/testsuite/gcc.target/i386/prefetchi-1.c
! d380df14afc6d38427db2430bb5640c7  gcc/testsuite/gcc.target/i386/prefetchi-1b.c
  5fb0aad075edba2ca6bd9c52e18048a4  gcc/testsuite/gcc.target/i386/prefetchi-2.c
  0d239d33a9eeb5af2e5ffd12b6d373df  gcc/testsuite/gcc.target/i386/prefetchi-3.c
  89c120add0d0cea3a2a86aaa0863dd2e  gcc/testsuite/gcc.target/i386/prefetchi-4.c
*************** bcf0d6d51d39f674c2672181211f8783  gcc/te
*** 72071,72076 ****
--- 72362,72368 ----
  011989a32280bb1aa821f00e7f492898  gcc/testsuite/gcc.target/i386/sse-orps-1.c
  9ac73bc009f43ea60db7fc10dec3ab01  gcc/testsuite/gcc.target/i386/sse-os-support.h
  dc6831587ee7762436a7ac070e187a5d  gcc/testsuite/gcc.target/i386/sse-pr101007.c
+ d575c93e3a64abc3f18f4916f1fcd689  gcc/testsuite/gcc.target/i386/sse-pr116738.c
  642da3797fdc5a430e7dffdf36d5a54d  gcc/testsuite/gcc.target/i386/sse-rcpps-1.c
  717722e6af4d66ee3202cb215f622945  gcc/testsuite/gcc.target/i386/sse-recip-vec.c
  3f9ef1b15bd7ed1556ef4a6fc75b7a66  gcc/testsuite/gcc.target/i386/sse-recip.c
*************** effe4dc13814c957854a50cd5fad661e  gcc/te
*** 72592,72597 ****
--- 72884,72890 ----
  b0951967bfa853ba12e42c1c743667dc  gcc/testsuite/gcc.target/i386/sse4a-insert.c
  c97961536a95b0d04409c1f58de570ff  gcc/testsuite/gcc.target/i386/sse4a-montsd.c
  2692626ae624bec3c2fbfa92340ac9cf  gcc/testsuite/gcc.target/i386/sse4a-montss.c
+ cc298080e7c43d26930d1fdf76d398aa  gcc/testsuite/gcc.target/i386/sse_movcc_use_blendv.c
  76d762004d078a0c483b932e5ffdfca2  gcc/testsuite/gcc.target/i386/ssefn-1.c
  ae471ea12fb81b2280f51db2fd6b1249  gcc/testsuite/gcc.target/i386/ssefn-2.c
  b30af657dc02d895db811d45730e91fa  gcc/testsuite/gcc.target/i386/ssefn-3.c
*************** fc3a18821c52e48c29f54252053988ba  gcc/te
*** 72665,72670 ****
--- 72958,72964 ----
  84b12afcb316a8ec7dce5bea1db67912  gcc/testsuite/gcc.target/i386/tbm-1.c
  b292dd3bc21c285ba5f3f1bcac0a5139  gcc/testsuite/gcc.target/i386/tbm-2.c
  052ea02011f5031dc3a4171aed715a52  gcc/testsuite/gcc.target/i386/tbm-bextri-1.c
+ d463b6607b227bc8376b031954d58ffb  gcc/testsuite/gcc.target/i386/tbm-pr116287.c
  4edd7df3f7e7eae5b3e0d3be8a5068e4  gcc/testsuite/gcc.target/i386/testimm-1.c
  7188c4d254bb0c4fb66e39b2c8e51711  gcc/testsuite/gcc.target/i386/testimm-10.c
  ac027496b6114a9f7eb014a0c4cf998a  gcc/testsuite/gcc.target/i386/testimm-2.c
*************** d6f2200e900b3d85d0a491db3bfa13bc  gcc/te
*** 73051,73056 ****
--- 73345,73351 ----
  087dab2b9c082de756b93456f039cdb7  gcc/testsuite/gcc.target/loongarch/pr107713-1.c
  dfafc65f0a89ca5ee45ebec52ceac527  gcc/testsuite/gcc.target/loongarch/pr107713-2.c
  ee611d581d29c00b7178ec95c3dc6e82  gcc/testsuite/gcc.target/loongarch/pr107731.c
+ 9ad6397c4344b9805128cce24404b86a  gcc/testsuite/gcc.target/loongarch/pr115752.c
  3adba2a8ae6f671eb22ec8228777c1ac  gcc/testsuite/gcc.target/loongarch/prolog-opt.c
  1075563283e6d2ab3492f10a46a844ad  gcc/testsuite/gcc.target/loongarch/relocs-symbol-noaddend.c
  1794666eb38b2c760f7e0797a8843251  gcc/testsuite/gcc.target/loongarch/stack-check-alloca-1.c
*************** b94b02f54e2566541edbead974161cd8  gcc/te
*** 74998,75003 ****
--- 75293,75299 ----
  2f3b0bbee570abb68e2bf91b3f4ef43d  gcc/testsuite/gcc.target/powerpc/mma-builtin-7.c
  7ff80abf6e1bf3a4c80a83f649959643  gcc/testsuite/gcc.target/powerpc/mma-builtin-8.c
  8b6d1c7065bb09caeaafe44d4931e70d  gcc/testsuite/gcc.target/powerpc/mma-builtin-9.c
+ 24d225346acbd6a1813f58b8dde96931  gcc/testsuite/gcc.target/powerpc/mma-builtin-error.c
  88617795d710b40cc25cbabe90e45e4e  gcc/testsuite/gcc.target/powerpc/mma-double-test.c
  57fc310b69598562cbec3535f97fd354  gcc/testsuite/gcc.target/powerpc/mma-single-test.c
  a271f35c38761fdbb749bf1bec83cfe4  gcc/testsuite/gcc.target/powerpc/mma-supported.c
*************** f0ddfb3edfb9941a08b8e295a57f843e  gcc/te
*** 75336,75341 ****
--- 75632,75639 ----
  e1311d3408303e5d3bb31126a2f3dcaf  gcc/testsuite/gcc.target/powerpc/pr105991.c
  1ab2f3b15230d62d1557536701b89524  gcc/testsuite/gcc.target/powerpc/pr106016.c
  1717ad0418e192e7d5bbcdcc715baa9a  gcc/testsuite/gcc.target/powerpc/pr106017.c
+ b7f505658e736391f1fb218bd7977b0f  gcc/testsuite/gcc.target/powerpc/pr106069-1.c
+ c931d1d7ae559c7f1a38c2e40fb73784  gcc/testsuite/gcc.target/powerpc/pr106069-2.c
  77039220fc5a52161837a12ea92d1ea3  gcc/testsuite/gcc.target/powerpc/pr106091.c
  19c79cd734687058ce13a5486b78bd77  gcc/testsuite/gcc.target/powerpc/pr106322.c
  7b0904894180cdbddf64e53f5fbe7f6c  gcc/testsuite/gcc.target/powerpc/pr106460.c
*************** d746d0fb9156720298fa3c2071023bbf  gcc/te
*** 75379,75384 ****
--- 75677,75688 ----
  c610c8d7cbb111b72025bba844602bd8  gcc/testsuite/gcc.target/powerpc/pr111380-1.c
  68b71977f7a24a5a6b3cb45a7941649a  gcc/testsuite/gcc.target/powerpc/pr111380-2.c
  b61eff89fa46bd55405a0700c83058dd  gcc/testsuite/gcc.target/powerpc/pr113950.c
+ 12344387881dc07bc23f4a66e635ea56  gcc/testsuite/gcc.target/powerpc/pr114759-2.c
+ c2e6a1b23bf6293d877c7cdbc988b959  gcc/testsuite/gcc.target/powerpc/pr114759-3.c
+ edbd673b54dc453f6adb46e7d7b5d688  gcc/testsuite/gcc.target/powerpc/pr114846.c
+ 5e2462c89d1f070e8e6bd6ae6deaa4eb  gcc/testsuite/gcc.target/powerpc/pr115355.c
+ d2a0d498fd73b9c4321c054d794a4050  gcc/testsuite/gcc.target/powerpc/pr115389.c
+ 68e7a002ed920723f1529e366afe30de  gcc/testsuite/gcc.target/powerpc/pr116415.c
  c2f6d6cf82ef4931619d09e10a0a72aa  gcc/testsuite/gcc.target/powerpc/pr16155.c
  396ae287e72ecdda51bb3157818030a9  gcc/testsuite/gcc.target/powerpc/pr16286.c
  198d8a69d2887e8fadcb050d90e21aa6  gcc/testsuite/gcc.target/powerpc/pr16458-1.c
*************** c8159472599bdbc1920f30b21821761f  gcc/te
*** 75692,75697 ****
--- 75996,76002 ----
  3cbcbf709dba0c7d2f3ee1bb86a4c1ab  gcc/testsuite/gcc.target/powerpc/pr97142.c
  18aa6c13663fc57c77c9258b01d06c8b  gcc/testsuite/gcc.target/powerpc/pr97267.c
  213beaa984952c5e9c8741ff42bef29f  gcc/testsuite/gcc.target/powerpc/pr97360.c
+ 6f417fe4390c81ea54e3227afee2727a  gcc/testsuite/gcc.target/powerpc/pr97367.c
  be1d7456a640bf70727b92bfa00019b7  gcc/testsuite/gcc.target/powerpc/pr98092.c
  adff3606ba35a019752b04f06365d9ae  gcc/testsuite/gcc.target/powerpc/pr98872.c
  16ccc7fd43a210703f804ed86b1bbe88  gcc/testsuite/gcc.target/powerpc/pr98914.c
*************** d84dbc7cecc66316cc6e095e4da62b30  gcc/te
*** 76909,76914 ****
--- 77214,77220 ----
  2dff48c2cbadd1b5f5afb4808e4eadff  gcc/testsuite/gcc.target/riscv/pr109508.c
  15f456db6fb5e46494c853d4c141ca96  gcc/testsuite/gcc.target/riscv/pr113095.c
  ef588c023f4aba7b77e02fe6afe13376  gcc/testsuite/gcc.target/riscv/pr114130.c
+ 688ebf101a572759db563707428afe70  gcc/testsuite/gcc.target/riscv/pr116720.c
  10400130cc47973d43925669f3c795ed  gcc/testsuite/gcc.target/riscv/pr84660.c
  d0bc2826c32a584c39586e1efc3830d5  gcc/testsuite/gcc.target/riscv/pr89835.c
  287e116d84e5eca39a410aca336f89b1  gcc/testsuite/gcc.target/riscv/pr93202.c
*************** ac71bb928660a9e6d22ba4f78a7ad0b8  gcc/te
*** 77734,77739 ****
--- 78040,78047 ----
  3c9d94ddfcfae97abd4d5ffece4e122d  gcc/testsuite/gcc.target/riscv/zba-shNadd-04.c
  1456e0b644560b4d55a604c8032c331b  gcc/testsuite/gcc.target/riscv/zba-shNadd-05.c
  f73a8a79af831fbaafde15c511033527  gcc/testsuite/gcc.target/riscv/zba-shNadd-07.c
+ ca8dcbe1d318561f3ba7df5abeff7677  gcc/testsuite/gcc.target/riscv/zba-shNadd-09.c
+ 6e3f79b288eb5a99b23ffcdb5b2986ac  gcc/testsuite/gcc.target/riscv/zba-shNadd-10.c
  da20df00924c672e61656946641d3cf9  gcc/testsuite/gcc.target/riscv/zba-shadd.c
  1b8636944ff925cb64365451c0156358  gcc/testsuite/gcc.target/riscv/zba-slliuw.c
  fc7c6281b4cedac153ced742d0cc8c5b  gcc/testsuite/gcc.target/riscv/zba-zextw.c
*************** b65b6b60679fe5fe589b83fa813950ac  gcc/te
*** 78014,78019 ****
--- 78322,78329 ----
  7768189c94023d287d68251021ad2dee  gcc/testsuite/gcc.target/s390/pr106355-2.c
  a69e5256407f09ac05e2e19ea14c9e15  gcc/testsuite/gcc.target/s390/pr106355-3.c
  5680e7515cb52b85f38e10b48d5e6a75  gcc/testsuite/gcc.target/s390/pr106355.h
+ b3924bf1892d3c296907c61da351118a  gcc/testsuite/gcc.target/s390/pr115860-1.c
+ e282b73f72ab6c2a629448cad8de65a7  gcc/testsuite/gcc.target/s390/pr118835.c
  765307a040de72f2f4376b7068d68018  gcc/testsuite/gcc.target/s390/pr20927.c
  85f31fb9b4b15529205376d3f6fa385c  gcc/testsuite/gcc.target/s390/pr24624.c
  7adacbd67601dc0845e556e5632cd718  gcc/testsuite/gcc.target/s390/pr27661.c
*************** daf32d359b4f5080aef58859b29870b9  gcc/te
*** 78175,78181 ****
  cd87621c97dea4b44990c53afb0e84f0  gcc/testsuite/gcc.target/s390/vector/fp-signedint-convert-1.c
  7555086a7e981f40ab0a053876683cc4  gcc/testsuite/gcc.target/s390/vector/fp-unsignedint-convert-1.c
  8a6c46e492362a7ae789676034c82a23  gcc/testsuite/gcc.target/s390/vector/int128-1.c
! cfd1d2dc2bb2e6e67cead63e9e5b6e04  gcc/testsuite/gcc.target/s390/vector/long-double-asm-abi.c
  7b57f62cb279490843705e46351b77dd  gcc/testsuite/gcc.target/s390/vector/long-double-asm-commutative.c
  d9717b93ea1bc6140ba0284c50adb76b  gcc/testsuite/gcc.target/s390/vector/long-double-asm-earlyclobber.c
  e3dbf48af3006ce478179091e800da73  gcc/testsuite/gcc.target/s390/vector/long-double-asm-fprvrmem.c
--- 78485,78491 ----
  cd87621c97dea4b44990c53afb0e84f0  gcc/testsuite/gcc.target/s390/vector/fp-signedint-convert-1.c
  7555086a7e981f40ab0a053876683cc4  gcc/testsuite/gcc.target/s390/vector/fp-unsignedint-convert-1.c
  8a6c46e492362a7ae789676034c82a23  gcc/testsuite/gcc.target/s390/vector/int128-1.c
! 694840e6548b0c0deef3e89fd571892a  gcc/testsuite/gcc.target/s390/vector/long-double-asm-abi.c
  7b57f62cb279490843705e46351b77dd  gcc/testsuite/gcc.target/s390/vector/long-double-asm-commutative.c
  d9717b93ea1bc6140ba0284c50adb76b  gcc/testsuite/gcc.target/s390/vector/long-double-asm-earlyclobber.c
  e3dbf48af3006ce478179091e800da73  gcc/testsuite/gcc.target/s390/vector/long-double-asm-fprvrmem.c
*************** a3bf933038b58e4d541e60748b47629b  gcc/te
*** 78210,78216 ****
  b1f6b9b6a5afaf7103d770ae87762260  gcc/testsuite/gcc.target/s390/vector/long-double-to-float.c
  7894fd15c9ad66ed3bb637ac9fb4499d  gcc/testsuite/gcc.target/s390/vector/long-double-to-i16.c
  125443693bd86803a7d78e258a91f334  gcc/testsuite/gcc.target/s390/vector/long-double-to-i32.c
! e21d178b02e384164a81caf3ffee7b0b  gcc/testsuite/gcc.target/s390/vector/long-double-to-i64.c
  693a76edc110ca1f6149d64c15447588  gcc/testsuite/gcc.target/s390/vector/long-double-to-i8.c
  83521187ebf9ff9a612ae879e97d69c9  gcc/testsuite/gcc.target/s390/vector/long-double-to-u16.c
  c2be2c1316a4a96cdd7687813bff0db1  gcc/testsuite/gcc.target/s390/vector/long-double-to-u32.c
--- 78520,78526 ----
  b1f6b9b6a5afaf7103d770ae87762260  gcc/testsuite/gcc.target/s390/vector/long-double-to-float.c
  7894fd15c9ad66ed3bb637ac9fb4499d  gcc/testsuite/gcc.target/s390/vector/long-double-to-i16.c
  125443693bd86803a7d78e258a91f334  gcc/testsuite/gcc.target/s390/vector/long-double-to-i32.c
! 0eed6004b7bc93fde7e8183202dffa08  gcc/testsuite/gcc.target/s390/vector/long-double-to-i64.c
  693a76edc110ca1f6149d64c15447588  gcc/testsuite/gcc.target/s390/vector/long-double-to-i8.c
  83521187ebf9ff9a612ae879e97d69c9  gcc/testsuite/gcc.target/s390/vector/long-double-to-u16.c
  c2be2c1316a4a96cdd7687813bff0db1  gcc/testsuite/gcc.target/s390/vector/long-double-to-u32.c
*************** c388e8e709c00e2cb14b83a7bcb1db96  gcc/te
*** 78386,78391 ****
--- 78696,78702 ----
  35e87e60957f9b00691107426abfa992  gcc/testsuite/gcc.target/s390/zvector/get-element-bswap-3.c
  4abdf0afcb959d37baa8b81d5308c265  gcc/testsuite/gcc.target/s390/zvector/get-element-bswap-4.c
  13199189797f1cfdb8952aba604e6159  gcc/testsuite/gcc.target/s390/zvector/imm-range-error-1.c
+ d1469ef79e7de046a5a0d7120bc3edf4  gcc/testsuite/gcc.target/s390/zvector/pr114676.c
  7d0eb00954092ab19d710323c872dd2a  gcc/testsuite/gcc.target/s390/zvector/pr79893.c
  8bc7e55288af53eddbd5437d08f5f9a1  gcc/testsuite/gcc.target/s390/zvector/pr82317.c
  c5f2f4df3f7c11977663ad182d69c2a7  gcc/testsuite/gcc.target/s390/zvector/pr82322.c
*************** e050fd9a26438159421caec59183ebf7  gcc/te
*** 79594,79600 ****
--- 79905,79918 ----
  f57bfa4edc494fecd4284a542f695d0f  gcc/testsuite/gdc.dg/debug/dwarf2/imports/pr98067.d
  37e2ca0f4e06cb14e92a710579518a60  gcc/testsuite/gdc.dg/debug/dwarf2/langdw2.d
  db93819c7b52f4f6ea4f42fed3e0a48a  gcc/testsuite/gdc.dg/debug/dwarf2/langdw3.d
+ 30443b3dc638d26f028436f75f9e0edb  gcc/testsuite/gdc.dg/debug/dwarf2/pr118309.d
  8527933fbf2d9fb7c82fd63435063168  gcc/testsuite/gdc.dg/debug/dwarf2/pr98067.d
+ b4f9c61a9b5b383751c01b4fe84cb747  gcc/testsuite/gdc.dg/debug/imports/m119817/a.d
+ 07b707a4e1481ec8da698665df0a25d9  gcc/testsuite/gdc.dg/debug/imports/m119817/b.d
+ bcf389e3992a960c831b1dafe53a539c  gcc/testsuite/gdc.dg/debug/imports/m119817/package.d
+ 21f5f82749fd628b3d9ef87a60d160be  gcc/testsuite/gdc.dg/debug/imports/pr119826b.d
+ 5a8822cd928a2d3538e6c92ad6d8ad3f  gcc/testsuite/gdc.dg/debug/pr119817.d
+ 511a4b96302498f658f208676182a550  gcc/testsuite/gdc.dg/debug/pr119826.d
  0121ae6408f107a6bf6f915c24102bd3  gcc/testsuite/gdc.dg/debug/trivial.d
  221872e623e7561cf7ee01e02bd48936  gcc/testsuite/gdc.dg/dg.exp
  e13b61cf77c000f61413c39e9ed0fa64  gcc/testsuite/gdc.dg/extern-c++/extern-c++.exp
*************** f0bb47c02bfbb905cf063586cccf248d  gcc/te
*** 79705,79714 ****
--- 80023,80036 ----
  5c59d3e98036f128b405b1247659bb7f  gcc/testsuite/gdc.dg/pr110514c.d
  7124a74c780cc3de82649fa56120e037  gcc/testsuite/gdc.dg/pr110514d.d
  65d0d00a4d68ddc7476ea00fc7bcf91a  gcc/testsuite/gdc.dg/pr110712.d
+ ddd530df4f1d7e7128b4953096cd25ce  gcc/testsuite/gdc.dg/pr111650.d
  5bf4c18033711e862e1b35b2017684a3  gcc/testsuite/gdc.dg/pr112270.d
  a2d402e0596a4abb1dc6e25b11e9aa9c  gcc/testsuite/gdc.dg/pr112285.d
  83f6a6a53d8587bd4243109d22d0b9f5  gcc/testsuite/gdc.dg/pr112290.d
  9b63f428c6cdc3f7abd69df6a3077880  gcc/testsuite/gdc.dg/pr113125.d
+ 204042c2eb4ac43dee360b7272aee369  gcc/testsuite/gdc.dg/pr116961.d
+ a81f29fc44be5cd208351e9e8b4a742b  gcc/testsuite/gdc.dg/pr117621.d
+ 0b4ca5d336606fc94e656b8731b0a78e  gcc/testsuite/gdc.dg/pr119139.d
  d32aa8ed5ea10931be4ddb5bb9e863d8  gcc/testsuite/gdc.dg/pr89017.d
  53fa8db94d4ca3fc9ba83769733dc0e7  gcc/testsuite/gdc.dg/pr89041.d
  6c316b13f71ea31fcada56b58a41ebd1  gcc/testsuite/gdc.dg/pr89042a.d
*************** ff744a0a8c5876d35d04359a49ff0f84  gcc/te
*** 79838,79843 ****
--- 80160,80166 ----
  de9193ce38f7ef3ee1cc3a94fc8a92dc  gcc/testsuite/gdc.dg/torture/pr110516b.d
  ad67c2aef0ecf01677e58695b0cc5d36  gcc/testsuite/gdc.dg/torture/pr113758.d
  c3a3fcac804266bf984aad50e1f84157  gcc/testsuite/gdc.dg/torture/pr114171.d
+ a1ef8a304026fe097c3f6356f2dd2b2a  gcc/testsuite/gdc.dg/torture/pr117002.d
  580aadb24b666799e25f1f02ef3b7bbb  gcc/testsuite/gdc.dg/torture/pr92309.d
  d5626e21f8cdc22799175cb6adfddfd6  gcc/testsuite/gdc.dg/torture/pr94424.d
  ae5b279461655f243d767b80a6d0bc1b  gcc/testsuite/gdc.dg/torture/pr94777b.d
*************** fbf6eb41453bed2d7b01d6d3ecd3b075  gcc/te
*** 83759,83764 ****
--- 84082,84088 ----
  243cbfa77a9448c9019b236137e7803d  gcc/testsuite/gfortran.dg/alloc_comp_std.f90
  909cf7d56a64fc559ec64c2bb71d1197  gcc/testsuite/gfortran.dg/alloc_comp_transformational_1.f90
  6ad12324ccb5fbf1f5f93c86d22f4ca4  gcc/testsuite/gfortran.dg/alloc_deferred_comp_1.f90
+ 5334a73b001aae1d99840ad1e2c59044  gcc/testsuite/gfortran.dg/allocatable_char_1.f90
  c59ad781dee7ec8e48a5f7ca04827100  gcc/testsuite/gfortran.dg/allocatable_dummy_1.f90
  56cdd5c6ada96e8035ed20712fda44d5  gcc/testsuite/gfortran.dg/allocatable_dummy_2.f90
  b44c3949481c974b2c6896675c16886c  gcc/testsuite/gfortran.dg/allocatable_dummy_3.f90
*************** f27e65cbaa74101ffeaa1c5d321f9f84  gcc/te
*** 83857,83862 ****
--- 84181,84187 ----
  38e19991aabdffdc81e84c14648b7da3  gcc/testsuite/gfortran.dg/allocate_with_source_27.f90
  bf834ed2e7b3a4fdc0884e37ef74f79c  gcc/testsuite/gfortran.dg/allocate_with_source_28.f90
  8cd7bcf0efad3a6d0e1f5b5492a6cdf7  gcc/testsuite/gfortran.dg/allocate_with_source_3.f90
+ cc464a02a7bb7c7851bc05f4d6fc32b6  gcc/testsuite/gfortran.dg/allocate_with_source_32.f90
  6e6cc1fe5ed4f0f5c650bc8b6e0634b0  gcc/testsuite/gfortran.dg/allocate_with_source_4.f90
  6df025374b593e0339c7b746700d109e  gcc/testsuite/gfortran.dg/allocate_with_source_5.f90
  7f6a8b7d1a41fd76b5f7f49b5f8f978a  gcc/testsuite/gfortran.dg/allocate_with_source_6.f90
*************** b2e6281180a54adeebe04844e3233ce6  gcc/te
*** 84092,84102 ****
--- 84417,84431 ----
  3b8425a2f59699b47aac6da29c11aba9  gcc/testsuite/gfortran.dg/asan/associate_58.f90
  e9f58df1de071d2b106b16b3af8f6764  gcc/testsuite/gfortran.dg/asan/associate_59.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
+ 2afed544877f5a6213485c057dd4276d  gcc/testsuite/gfortran.dg/asan/unlimited_polymorphic_34.f90
  28bbca8fc062ad301c676d4eb94d000d  gcc/testsuite/gfortran.dg/assign-debug.f90
  7ad5faf60f3a1cebebfbb2c9e52516d7  gcc/testsuite/gfortran.dg/assign.f90
  4fd44d78ecb3264e1dd3d6bbb0ca8ea6  gcc/testsuite/gfortran.dg/assign_1.f90
  2fadd08fe3904fa5e7b9e433747dd9e5  gcc/testsuite/gfortran.dg/assign_10.f90
  5a14c8021ea0007a87c0f2d24385903b  gcc/testsuite/gfortran.dg/assign_11.f90
+ 77968474ca7077dddd7b87844075962e  gcc/testsuite/gfortran.dg/assign_12.f90
  d13716000aff2182530213b6daeb5f10  gcc/testsuite/gfortran.dg/assign_2.f90
  a0494aa37ce786eddcb2107da73e9e9d  gcc/testsuite/gfortran.dg/assign_3.f90
  bd3eaa5ee0e2bbe2c28826271bd7069f  gcc/testsuite/gfortran.dg/assign_4.f
*************** e266ed6fc3d13470e97d022451deea4e  gcc/te
*** 84168,84174 ****
--- 84497,84505 ----
  fe80c25bfc4d1e630472420bac3dc836  gcc/testsuite/gfortran.dg/associate_6.f03
  e9397925a65e83d2a17ebe43551198a1  gcc/testsuite/gfortran.dg/associate_60.f90
  2381f00179da895cbcdcd70c1f3ab8e6  gcc/testsuite/gfortran.dg/associate_62.f90
+ aa770fb17af427bac4bab1f165ac2792  gcc/testsuite/gfortran.dg/associate_69.f90
  ac2154aefe0a4ce981b3fa252235e2dd  gcc/testsuite/gfortran.dg/associate_7.f03
+ cbd20a2196505f5c05eaf4a0b2deb506  gcc/testsuite/gfortran.dg/associate_70.f90
  3c2206420bb8717914aa447789b5f079  gcc/testsuite/gfortran.dg/associate_8.f03
  0406413659a92c10d44ed1f1576987b9  gcc/testsuite/gfortran.dg/associate_9.f03
  51f82584276ab8f411b8d9d7e84fadc8  gcc/testsuite/gfortran.dg/associated_1.f90
*************** b890668874e1bc07a00cd706581c6fd1  gcc/te
*** 84528,84533 ****
--- 84859,84865 ----
  7577ff710a256393f1fb5c102e69baa4  gcc/testsuite/gfortran.dg/bounds_check_21.f90
  e585af8e23493967fa5b80361d02ccd5  gcc/testsuite/gfortran.dg/bounds_check_22.f90
  c255cbccd21b3a2d3ab21d32d680086e  gcc/testsuite/gfortran.dg/bounds_check_23.f90
+ df581146a6f103a1d6bc36eb134e10d4  gcc/testsuite/gfortran.dg/bounds_check_27.f90
  1ff91e96da26ef6e7839e53e2b71499d  gcc/testsuite/gfortran.dg/bounds_check_3.f90
  a9119407c225c716d99c309178d77952  gcc/testsuite/gfortran.dg/bounds_check_4.f90
  167a95fa41d2abf20f66591e1389d059  gcc/testsuite/gfortran.dg/bounds_check_5.f90
*************** c9785c9fd5f854a6bb32eb226663d4a6  gcc/te
*** 85005,85011 ****
  52155afcdc7f61593bf6506ef7ca2348  gcc/testsuite/gfortran.dg/character_comparison_8.f90
  e095a5844fa090e86a92405f5c0b0dba  gcc/testsuite/gfortran.dg/character_comparison_9.f90
  3c251099889c78e5e0c76fe96288838d  gcc/testsuite/gfortran.dg/character_mismatch.f90
! 9a59817952ffe39d8f72423786ec1e4b  gcc/testsuite/gfortran.dg/character_workout_1.f90
  89ddbaa606b83db4b331a67d0037b847  gcc/testsuite/gfortran.dg/character_workout_4.f90
  50a996cd9c41e5c61f567b57a9d68a2d  gcc/testsuite/gfortran.dg/charlen_01.f90
  df26b34bc7ab97ed1f739b2ee67c8985  gcc/testsuite/gfortran.dg/charlen_02.f90
--- 85337,85343 ----
  52155afcdc7f61593bf6506ef7ca2348  gcc/testsuite/gfortran.dg/character_comparison_8.f90
  e095a5844fa090e86a92405f5c0b0dba  gcc/testsuite/gfortran.dg/character_comparison_9.f90
  3c251099889c78e5e0c76fe96288838d  gcc/testsuite/gfortran.dg/character_mismatch.f90
! 28d44be730e9e79e92d600030871dcd8  gcc/testsuite/gfortran.dg/character_workout_1.f90
  89ddbaa606b83db4b331a67d0037b847  gcc/testsuite/gfortran.dg/character_workout_4.f90
  50a996cd9c41e5c61f567b57a9d68a2d  gcc/testsuite/gfortran.dg/charlen_01.f90
  df26b34bc7ab97ed1f739b2ee67c8985  gcc/testsuite/gfortran.dg/charlen_02.f90
*************** f8a4ca21ccf302214564ec0d59e8fd51  gcc/te
*** 85535,85540 ****
--- 85867,85873 ----
  6c5fde96cb793d7badc2635511fec23b  gcc/testsuite/gfortran.dg/cray_pointers_10.f90
  74dd2b09e2326c23ec50a90bf151d3b9  gcc/testsuite/gfortran.dg/cray_pointers_11.f90
  14819713d383cb1fa792e93981cec2ad  gcc/testsuite/gfortran.dg/cray_pointers_12.f90
+ 1de3372d6065323b2d05753364b5310b  gcc/testsuite/gfortran.dg/cray_pointers_13.f90
  e973e5ebed82feb1ac5ff4990efdfe76  gcc/testsuite/gfortran.dg/cray_pointers_2.f90
  49ea5999b0fbbd860fa0b8b1e6a01397  gcc/testsuite/gfortran.dg/cray_pointers_3.f90
  c00f3a9d2f365b0dab03e2415fabbc16  gcc/testsuite/gfortran.dg/cray_pointers_4.f90
*************** ce817f495edb0ac306d6ae1052014e67  gcc/te
*** 86362,86367 ****
--- 86695,86702 ----
  1a5bc1047ebef5fd584a1a70750ddd9c  gcc/testsuite/gfortran.dg/finalize_54.f90
  e3f8979302c39ffbf6c7c03d08fc1562  gcc/testsuite/gfortran.dg/finalize_55.f90
  4a82b3bd0b6fd8d978b3278deeaf8249  gcc/testsuite/gfortran.dg/finalize_56.f90
+ 51b8bf932be238b91e30f73f65cbee55  gcc/testsuite/gfortran.dg/finalize_58.f90
+ 273d9e21ad8fadbf6d2705e86315b2a3  gcc/testsuite/gfortran.dg/finalize_59.f90
  00394d3b18b9e094a6751225fef04a51  gcc/testsuite/gfortran.dg/finalize_6.f90
  520ae6cd723f43e02411aa72bb807bb5  gcc/testsuite/gfortran.dg/finalize_7.f03
  a1de3ecdc32a070009986504b0fcaf97  gcc/testsuite/gfortran.dg/finalize_8.f03
*************** c0300fa958c7a5a9d045a2bc5b399370  gcc/te
*** 87677,87682 ****
--- 88012,88018 ----
  50a6484505ec970335e3f3ccb48b9a52  gcc/testsuite/gfortran.dg/ieee/large_3.F90
  31a7f3f0840cdd4377df7cd6605acc0b  gcc/testsuite/gfortran.dg/ieee/large_4.f90
  54f1a11c1d7136dd3d8d28a66d7e2a22  gcc/testsuite/gfortran.dg/ieee/modes_1.f90
+ dc07ff10f30b05b8a666d9210f10eb1f  gcc/testsuite/gfortran.dg/ieee/pr115070.f90
  5b088816bf399445be998bb7b0f307bd  gcc/testsuite/gfortran.dg/ieee/pr77372.f90
  d19c8b732b5cf70aa6edcc4165fe30b3  gcc/testsuite/gfortran.dg/ieee/pr77507.f90
  26f7d10e3401a2366b42da4a4f97bd15  gcc/testsuite/gfortran.dg/ieee/rounding_1.f90
*************** b364b3ff21603caf412b448a464408d0  gcc/te
*** 88818,88823 ****
--- 89154,89160 ----
  ff989302c0eaa3dd486cbb3c28260163  gcc/testsuite/gfortran.dg/operator_7.f90
  42e0fc1830b7ed49ee54d17cf4cbdabd  gcc/testsuite/gfortran.dg/operator_c1202.f90
  22f7aca59da7d6e1f570808dbd33aea4  gcc/testsuite/gfortran.dg/optional_absent_1.f90
+ 3051f2a57ae3b2d6b9734b75fe35f835  gcc/testsuite/gfortran.dg/optional_absent_13.f90
  312210dc1ff1e05299f1119ee49985a6  gcc/testsuite/gfortran.dg/optional_absent_2.f90
  4550d5bd4f2bf82443d2fabda1853aa1  gcc/testsuite/gfortran.dg/optional_absent_3.f90
  7c0836bf69a838c108ff2372276a09d4  gcc/testsuite/gfortran.dg/optional_absent_4.f90
*************** a3ab8fbef738997039cfd45f350461a3  gcc/te
*** 89019,89024 ****
--- 89356,89363 ----
  77eca811eac1f80edb0f33c68ac0c4d3  gcc/testsuite/gfortran.dg/power_7.f90
  457d6bb30d331f4d3250628bdae53dc3  gcc/testsuite/gfortran.dg/power_8.f90
  e13b5dd50c332ea865cb6fabb5f79f29  gcc/testsuite/gfortran.dg/pr100154.f90
+ c9e427811a6c55713cbb096365eec807  gcc/testsuite/gfortran.dg/pr100193.f90
+ e08828a7d864f8531a58aa25e1b58894  gcc/testsuite/gfortran.dg/pr100273.f90
  fc0ae38e4fdc2d7761aba57181c97b51  gcc/testsuite/gfortran.dg/pr100551.f90
  17f130e627232745d6279696b6984514  gcc/testsuite/gfortran.dg/pr100949.f90
  3838974931fe610997470a0a7f2e3a97  gcc/testsuite/gfortran.dg/pr100950.f90
*************** c35066e873add73fe333d803e2854739  gcc/te
*** 89051,89057 ****
--- 89390,89398 ----
  95206e73bd86fd997d85643e08c24a44  gcc/testsuite/gfortran.dg/pr103258.f90
  4b404e5693e05cfd48ecd00e22ac323d  gcc/testsuite/gfortran.dg/pr103259.f90
  48782be659f3ec5c8d9cba03ca6cc43d  gcc/testsuite/gfortran.dg/pr103286.f90
+ ce86820082e25f5aad2607f9163c3cf4  gcc/testsuite/gfortran.dg/pr103312.f90
  ab2e9f64b18aaf6df9600288ded6ce51  gcc/testsuite/gfortran.dg/pr103366.f90
+ 9e00f34ad9d6d78b98007d4ad68251f5  gcc/testsuite/gfortran.dg/pr103389.f90
  5403c8d36e959e2211ecc4f2a1db6e1c  gcc/testsuite/gfortran.dg/pr103475.f90
  b624133cafd19857eb2915c507731455  gcc/testsuite/gfortran.dg/pr103504.f90
  0ca27f571c157feff083b371f4147538  gcc/testsuite/gfortran.dg/pr103505.f90
*************** b46bd97116489e6e683fb2b742d3b37e  gcc/te
*** 89075,89080 ****
--- 89416,89422 ----
  91c8ea6ad8bf77406a4c4b4c07b386e3  gcc/testsuite/gfortran.dg/pr104314.f90
  0e7851ec2240cdd415a65847b3559661  gcc/testsuite/gfortran.dg/pr104330.f90
  7d09118ed5915e3ef92dba4a6d9cd54c  gcc/testsuite/gfortran.dg/pr104349.f90
+ 5b0868c84244a96dfe5b07e4df03eaa7  gcc/testsuite/gfortran.dg/pr104429.f90
  d54a9a735e74cc7d08959a7e744ae292  gcc/testsuite/gfortran.dg/pr104466.f90
  20b528a5635e11a2c7db46289cab958c  gcc/testsuite/gfortran.dg/pr104528.f
  f2033aa803ce0a0763522fb821b7bdf6  gcc/testsuite/gfortran.dg/pr104554.f90
*************** f2033aa803ce0a0763522fb821b7bdf6  gcc/te
*** 89083,89088 ****
--- 89425,89431 ----
  0d8084e6020a7001ebdb9b59d688556e  gcc/testsuite/gfortran.dg/pr104716.f
  7a5b7a18d621b5e1b9d04b73e259ddd4  gcc/testsuite/gfortran.dg/pr104849.f90
  35a7804825dacf412e34e3f973b467f1  gcc/testsuite/gfortran.dg/pr104908.f90
+ a5bb6d9b844f014490dab5e87b60244c  gcc/testsuite/gfortran.dg/pr105152.f90
  ff052278fd65d5823600af4550f5eae7  gcc/testsuite/gfortran.dg/pr105205.f90
  22283af469347d85bd1fe4dae42939a3  gcc/testsuite/gfortran.dg/pr105230.f90
  d7a956964080feaa84755b3114519005  gcc/testsuite/gfortran.dg/pr105473.f90
*************** bb19038b0b7c42c6403475e34570ae3d  gcc/te
*** 89132,89148 ****
--- 89475,89496 ----
  a367beafff806aa88b45192d28091201  gcc/testsuite/gfortran.dg/pr108529.f90
  89000eec5be4848c1ee9f28782affc5d  gcc/testsuite/gfortran.dg/pr108544.f90
  ff15b9a6b62e2f00e552b437eece42bf  gcc/testsuite/gfortran.dg/pr108592.f90
+ 56971b3b5ba5a0aa6c2a3044027e0494  gcc/testsuite/gfortran.dg/pr108889.f90
  7f1da97161aa1f82490b1a5323dd6fba  gcc/testsuite/gfortran.dg/pr108961.f90
  8f9de055ba3027b7ae59405bcbee699f  gcc/testsuite/gfortran.dg/pr109209.f90
  b7b6edb61862ad55069c70c4744ad157  gcc/testsuite/gfortran.dg/pr109265.f90
+ dded6526baf90ec32b44f9162a8d90f6  gcc/testsuite/gfortran.dg/pr109345.f90
  05aad7d3d7d82955070028e39fdf28af  gcc/testsuite/gfortran.dg/pr109358.f90
  f2965c649a5f8dcb271f4f49f656cfff  gcc/testsuite/gfortran.dg/pr109948.f90
  898c3ea8360d1452c5f815b15dc6f6f8  gcc/testsuite/gfortran.dg/pr110221.f
+ 998a85b06cf4402e9dcaa8e7dd203ee2  gcc/testsuite/gfortran.dg/pr110415.f90
  73c24aa3bc97b0687036c0da0f6bf2b2  gcc/testsuite/gfortran.dg/pr111022.f90
  6176c5192c44068787a0e803e38dacbd  gcc/testsuite/gfortran.dg/pr111880.f90
  f715b6386f4a20f6cad01cbb51dffd3b  gcc/testsuite/gfortran.dg/pr112316.f90
  aa358931bdcdffc331e74ec0c69f4a2a  gcc/testsuite/gfortran.dg/pr112407a.f90
  75beb8de36fb348963c6214f20178363  gcc/testsuite/gfortran.dg/pr112407b.f90
+ 49386e415982e1a2f18ad84457b9937e  gcc/testsuite/gfortran.dg/pr112459.f90
+ 551b794393ba12749122575dffd8b57a  gcc/testsuite/gfortran.dg/pr113363.f90
  57f789001fbff5df460557a54ec241a4  gcc/testsuite/gfortran.dg/pr113956.f90
  b90d3cad8caadc96fae5e6ac9b101803  gcc/testsuite/gfortran.dg/pr114012.f90
  d832d83a7f0305ed5af20dce6be24b4b  gcc/testsuite/gfortran.dg/pr114304-2.f90
*************** d832d83a7f0305ed5af20dce6be24b4b  gcc/te
*** 89150,89155 ****
--- 89498,89512 ----
  e91d746b0b9de2b6ed5529fb46921a0b  gcc/testsuite/gfortran.dg/pr114535d.f90
  60e9f03f051c282f39e48a14c058f5de  gcc/testsuite/gfortran.dg/pr114535iv.f90
  d3d77a4c149cf5358eb97935171795fb  gcc/testsuite/gfortran.dg/pr114739.f90
+ 862aedc97da38fe9b3319406b768d9c0  gcc/testsuite/gfortran.dg/pr115348.f90
+ 6c3af77c51cf7ae784cf117509d09064  gcc/testsuite/gfortran.dg/pr117730_a.f90
+ c409953e60b511d0f73cda8df16bc1dc  gcc/testsuite/gfortran.dg/pr117730_b.f90
+ 9d60e354f12f632752ec6e7da4915d39  gcc/testsuite/gfortran.dg/pr117763.f90
+ 2e62e84a71388f1638a677b41adbe5d9  gcc/testsuite/gfortran.dg/pr117797.f90
+ 8f53cbad5581d72a5d0420f900cee217  gcc/testsuite/gfortran.dg/pr120191_1.f90
+ 4787146fc7e8109511f0d22d056e2127  gcc/testsuite/gfortran.dg/pr120191_2.f90
+ 05457962d41eef6a41a3de889144d78a  gcc/testsuite/gfortran.dg/pr120191_3.f90
+ b1cb2c9a52574c2df5df49bd13ee7e5d  gcc/testsuite/gfortran.dg/pr120196.f90
  984f8307f36d56a0b48b5acce2dd5eb5  gcc/testsuite/gfortran.dg/pr12884.f
  64075248b9d1bffd6f380bb4e2a6eae0  gcc/testsuite/gfortran.dg/pr15129.f90
  e9cbd51db4e16292fc5dd1fead2e5a49  gcc/testsuite/gfortran.dg/pr15140.f90
*************** e338cfba2f466abedf9af92b52cd6fb3  gcc/te
*** 89597,89602 ****
--- 89954,89960 ----
  b6ff04901e3aee18765a74bf65804e38  gcc/testsuite/gfortran.dg/pr82253.f90
  344be7c0602202457870166d368441e0  gcc/testsuite/gfortran.dg/pr82314.f90
  7f04eca318ca64e1442ceabc31fab9fb  gcc/testsuite/gfortran.dg/pr82397.f
+ 5e9eb92684de357b4c23a7f04959db82  gcc/testsuite/gfortran.dg/pr82774.f90
  616772c135ee9b14c410dcd23fdbc3e4  gcc/testsuite/gfortran.dg/pr82973.f90
  0a918cecf6f52a31004b77728cb30038  gcc/testsuite/gfortran.dg/pr83113.f90
  3efdf6eef62b5bb55c7bd5d6342e1943  gcc/testsuite/gfortran.dg/pr83149.f90
*************** ee7b5aa850a8be8a1ed15f2fcdca347a  gcc/te
*** 89612,89619 ****
--- 89970,89980 ----
  c41bc69547a048a19ccb1adc57ce3bca  gcc/testsuite/gfortran.dg/pr84155.f90
  12af81a97aa86950b63e458f115e45c9  gcc/testsuite/gfortran.dg/pr84523.f90
  6d593814cbde3b81eb21e9501a48bac2  gcc/testsuite/gfortran.dg/pr84565.f90
+ 4cf62650961664b3e4bce16d177b5929  gcc/testsuite/gfortran.dg/pr84674.f90
  7cb3611bc701529711c1f596921afaa3  gcc/testsuite/gfortran.dg/pr84734.f90
  a4758a568b5ef9b888cb911bc4cdd259  gcc/testsuite/gfortran.dg/pr84784.f90
+ 41e0ad3a735d1f75c8f837590c9d8293  gcc/testsuite/gfortran.dg/pr84868.f90
+ bb61cbbb8a58939e43f49e77c93df95f  gcc/testsuite/gfortran.dg/pr84869.f90
  cc82665e1d54c6a2d5a100788c474853  gcc/testsuite/gfortran.dg/pr84957.f90
  42d21294436ebefdc995a697f0266fd9  gcc/testsuite/gfortran.dg/pr85082.f90
  4355c9f07079d67c1134f6106f8fcb0b  gcc/testsuite/gfortran.dg/pr85138_1.f90
*************** d8214bedb5ecef9053ef86971d5501cc  gcc/te
*** 89657,89662 ****
--- 90018,90024 ----
  aa095a787c42cdeb4d2b7777cbeccfe3  gcc/testsuite/gfortran.dg/pr87922.f90
  f8e6352c1c80659a4023e56075d6f1cc  gcc/testsuite/gfortran.dg/pr87945_1.f90
  b37e2980deb28560322fe1668580dd8c  gcc/testsuite/gfortran.dg/pr87945_2.f90
+ c1dd798267bd0e91b569e9524791a49b  gcc/testsuite/gfortran.dg/pr87946.f90
  48fd45c2154312b459b658b1686dd7d6  gcc/testsuite/gfortran.dg/pr87991.f90
  b64e61e88b486cf88558e16bb151917f  gcc/testsuite/gfortran.dg/pr87992.f90
  a9e192b49dbc72e5972a1e60f82ee433  gcc/testsuite/gfortran.dg/pr87993.f90
*************** c3fb068a6513a1b586c18e7f98aee0e3  gcc/te
*** 90144,90149 ****
--- 90506,90512 ----
  deda23d08864e8fd5de581142c84d0c3  gcc/testsuite/gfortran.dg/ptr_func_assign_3.f08
  f19a3e696f77f97e6aa2d83addab4ac4  gcc/testsuite/gfortran.dg/ptr_func_assign_4.f08
  8610f62acf79505ce9c955532780ae20  gcc/testsuite/gfortran.dg/ptr_func_assign_5.f08
+ 34c911109f23bf944fad22240fbb32c4  gcc/testsuite/gfortran.dg/ptr_func_assign_6.f08
  1bdd54ec3c3cda30429d4442e8a439e5  gcc/testsuite/gfortran.dg/public_private_module.f90
  f8e80e36d7b5c3c5e55ab57d88d798e6  gcc/testsuite/gfortran.dg/public_private_module_10.f90
  53bfb4bd5468c34fc1b1a819ebc75855  gcc/testsuite/gfortran.dg/public_private_module_2.f90
*************** df7acd1342733a419754eb5cbcbc9a3f  gcc/te
*** 90501,90506 ****
--- 90864,90870 ----
  8c21b488e7773e67f9472b6a064868b9  gcc/testsuite/gfortran.dg/shape_1.f90
  2a136a103d2e76c84d90569febf9b783  gcc/testsuite/gfortran.dg/shape_10.f90
  052a4b2bd7fe6fdc1737283f758ffaec  gcc/testsuite/gfortran.dg/shape_11.f90
+ a886c4820db91aa38f79d36f82bd5be5  gcc/testsuite/gfortran.dg/shape_12.f90
  83165f49617d33a60724f58032240b93  gcc/testsuite/gfortran.dg/shape_2.f90
  3c6dfb31a52f344f631d36f369e069bf  gcc/testsuite/gfortran.dg/shape_3.f90
  3a839d4a8d0dfd6f0b50c08763804e26  gcc/testsuite/gfortran.dg/shape_4.f90
*************** c8b716cee316206a2cc9482d0e553937  gcc/te
*** 90590,90595 ****
--- 90954,90960 ----
  5fc47d7780848b7c842c444d94dc4eca  gcc/testsuite/gfortran.dg/statement_function_2.f90
  dbb65e9cc1aa2d7834531d84c81cb2d0  gcc/testsuite/gfortran.dg/statement_function_3.f
  efd81d9041f4aeee27fa3012b88b8802  gcc/testsuite/gfortran.dg/statement_function_4.f90
+ a10440d44e29d8fa9298c8da87ea0ce0  gcc/testsuite/gfortran.dg/statement_function_5.f90
  8297205d0fd462057bf77c41569c1427  gcc/testsuite/gfortran.dg/static_linking_1.c
  fdcc241cfe92b58fca2cd6843c525442  gcc/testsuite/gfortran.dg/static_linking_1.f
  296d5384b485fdd46ff80cb7e9cf66fa  gcc/testsuite/gfortran.dg/stfunc_1.f90
*************** d05a12266ad47ee1cc684d7801d940a9  gcc/te
*** 90612,90617 ****
--- 90977,90983 ----
  59dc2252743acc1ead6c32c9e43e01c4  gcc/testsuite/gfortran.dg/storage_size_4.f90
  cff431afd58d8fc76bce899d42dfd678  gcc/testsuite/gfortran.dg/storage_size_5.f90
  badc90ad1c40dd1ff7af93ded0b4dafe  gcc/testsuite/gfortran.dg/storage_size_6.f90
+ af3b8f2a20e4f4dd98a4e4827e4169d2  gcc/testsuite/gfortran.dg/storage_size_7.f90
  187ed98bc6c4ad9278e3bfc17380d52c  gcc/testsuite/gfortran.dg/str_comp_optimize_1.f90
  2af34d6f3f5fb66212d16d6fa862bcf3  gcc/testsuite/gfortran.dg/streamio_1.f90
  0d4b684f470d06cc0aa31820d157d114  gcc/testsuite/gfortran.dg/streamio_10.f90
*************** c8b0d6393a41cf9eb55a5d2e1b706da5  gcc/te
*** 90642,90647 ****
--- 91008,91014 ----
  b049a93bb885fff9b901963c525f8f7a  gcc/testsuite/gfortran.dg/string_array_constructor_1.f90
  13d6f88aeeff911702e36d2e3dc09715  gcc/testsuite/gfortran.dg/string_array_constructor_2.f90
  c42a30583403fb080a182c51bf903430  gcc/testsuite/gfortran.dg/string_array_constructor_3.f90
+ d21fdcf13cb627285fde4b89858f0a2c  gcc/testsuite/gfortran.dg/string_array_constructor_4.f90
  31ce36c8c330d44a992ca049d1676a77  gcc/testsuite/gfortran.dg/string_assign_1.f90
  6c2109b0fba944cce6055da135dd7fc7  gcc/testsuite/gfortran.dg/string_assign_2.f90
  2b6e51ff41746a997a9d452462485739  gcc/testsuite/gfortran.dg/string_compare_1.f90
*************** ad625f0340741a09e4be8d42e070139e  gcc/te
*** 90769,90774 ****
--- 91136,91142 ----
  76406e3436f42466e7735ed9f5762bd7  gcc/testsuite/gfortran.dg/transfer_class_1.f90
  7f1199fe5fa90085dcbb4f81cbcf7062  gcc/testsuite/gfortran.dg/transfer_class_2.f90
  4003da30901edcfc6adf19924dc746a2  gcc/testsuite/gfortran.dg/transfer_class_3.f90
+ d9a1040ed4fe93e5d91936d8b26af4cc  gcc/testsuite/gfortran.dg/transfer_class_4.f90
  dc67674921059cc6c14a48ba9f6e8515  gcc/testsuite/gfortran.dg/transfer_hollerith_1.f90
  adc172acf631bf550ac06d92fba37d99  gcc/testsuite/gfortran.dg/transfer_intrinsic_1.f90
  e26ab1b7e21f778b1135b8600958bcd1  gcc/testsuite/gfortran.dg/transfer_intrinsic_2.f90
*************** e67a4a11f35c66e08fb4bb3279634a7a  gcc/te
*** 91066,91071 ****
--- 91434,91440 ----
  6fac87544cba607bd825cef815200556  gcc/testsuite/gfortran.dg/use_rename_1.f90
  308a35fc4732b520bfd71e20221425a5  gcc/testsuite/gfortran.dg/use_rename_10.f90
  52e1f158e101567519db0f087abec0ea  gcc/testsuite/gfortran.dg/use_rename_11.f90
+ 70a2a320617593688637c5dd834680a9  gcc/testsuite/gfortran.dg/use_rename_13.f90
  7047ce88a57d708d3d2c2ac3c3ca337e  gcc/testsuite/gfortran.dg/use_rename_2.f90
  56d36b08080e432e1860759131695014  gcc/testsuite/gfortran.dg/use_rename_3.f90
  4c6c9f47b5091f92496b13e280371057  gcc/testsuite/gfortran.dg/use_rename_4.f90
*************** ad2a054aea75840d3ecf97c2faa0f183  gcc/te
*** 93539,93544 ****
--- 93908,93914 ----
  f8aa1b9b6d8605d6d8f8640d0af378d3  gcc/testsuite/gnat.dg/abstract_with_anonymous_result.adb
  1ab0ba269ad1e4ee5cc0b2651374a2a5  gcc/testsuite/gnat.dg/access1.adb
  6d63d89266459501cbab795f893986a6  gcc/testsuite/gnat.dg/access10.adb
+ 1fd18942315c2275f2f19f6664a7deea  gcc/testsuite/gnat.dg/access11.adb
  943026829386ee6566add3daafeab5a1  gcc/testsuite/gnat.dg/access2.adb
  2fa4700bffd8945e6a0f90d0475d0d69  gcc/testsuite/gnat.dg/access3.adb
  85a2981071298449aa62b8862bba17d1  gcc/testsuite/gnat.dg/access3.ads
*************** b3a316ada43c24ff36cbe71860fae91c  gcc/te
*** 93635,93640 ****
--- 94005,94011 ----
  674ef7d1ee7e35c007365502de84ded5  gcc/testsuite/gnat.dg/aggr3.adb
  26bbb4b239255e447bbe6c32ccb6f5f3  gcc/testsuite/gnat.dg/aggr30.adb
  3c5d0783cbdc3181db59d9f27a9e1a2d  gcc/testsuite/gnat.dg/aggr30.ads
+ 4c012319986c2dce532428fea4934ee2  gcc/testsuite/gnat.dg/aggr31.adb
  35168b6dce753ec723ff0dcf21d977d0  gcc/testsuite/gnat.dg/aggr4.adb
  a12ec40d7ebc1ab08b05b0d1f6a57bc4  gcc/testsuite/gnat.dg/aggr7.adb
  39fba9f7f4870b15e9c37bcf9a358858  gcc/testsuite/gnat.dg/aggr8.adb
*************** cb1449549fbec08e3825194300068909  gcc/te
*** 94317,94322 ****
--- 94688,94696 ----
  9a4ab87324b8c87d230d15befd39d45e  gcc/testsuite/gnat.dg/generic_inst13_pkg-nested_g.ads
  928dfbf6ec7df12eeb49a5f7acbb7417  gcc/testsuite/gnat.dg/generic_inst13_pkg-ops_g.ads
  2a5b88b3ac5eecd266342e44fafe6523  gcc/testsuite/gnat.dg/generic_inst13_pkg.ads
+ 9e7293f7fd3655a8da0bb7b827baa897  gcc/testsuite/gnat.dg/generic_inst14.adb
+ da22f29f94ebe295441ccc41597913b0  gcc/testsuite/gnat.dg/generic_inst14_pkg-child.ads
+ 29969c1ad7978ac871e75cd3b2d99efd  gcc/testsuite/gnat.dg/generic_inst14_pkg.ads
  bfa8ba450e641250f8eccf95997dd260  gcc/testsuite/gnat.dg/generic_inst2.adb
  063cf5c93b1a85bf617a62be0da63bdb  gcc/testsuite/gnat.dg/generic_inst2.ads
  2faefd507420ceafdccad8d472e66202  gcc/testsuite/gnat.dg/generic_inst2_c.ads
*************** b7e24879332d72f72c91833c27ceef33  gcc/te
*** 94418,94423 ****
--- 94792,94798 ----
  d24c1f2d3c7c5ce631b8e820352deb2a  gcc/testsuite/gnat.dg/incomplete6.ads
  364f1ec537cca524899aa053257e6e22  gcc/testsuite/gnat.dg/incomplete7.adb
  1f23bb7ed3585206d4d2d3f99f9612a9  gcc/testsuite/gnat.dg/incomplete7.ads
+ f6095c751e19a6eb26e30eb71790897a  gcc/testsuite/gnat.dg/incomplete8.adb
  2d278c8204ff052ae1bda719e5201baa  gcc/testsuite/gnat.dg/init_scalar1.adb
  3479acc931417b59027c8944440c51a6  gcc/testsuite/gnat.dg/initializes.adb
  4c9f08106824a08b0375a36c6163ca80  gcc/testsuite/gnat.dg/initializes.ads
*************** b0752d6fc68f640a84237fcef9762258  gcc/te
*** 94737,94742 ****
--- 95112,95118 ----
  198e584cc0cef45ce405667052c23e05  gcc/testsuite/gnat.dg/machine_attr2.adb
  a43575908eb1e17e2afdeb4ea7308f2a  gcc/testsuite/gnat.dg/machine_attr2.ads
  cc1ed6ae65ad5b0d5af3f2f3767e091e  gcc/testsuite/gnat.dg/machine_code1.adb
+ d3f7e556abc113803210eb76117456b0  gcc/testsuite/gnat.dg/matrix1.adb
  ebbd44798662a03d43697c3bec8dc4b4  gcc/testsuite/gnat.dg/max_align.adb
  edfa22639b0fb30d009fbc732d8cecad  gcc/testsuite/gnat.dg/max_size.adb
  cffc6067b6c163f5c2e06406b2632c70  gcc/testsuite/gnat.dg/max_size_pkg.ads
*************** dc262de3547bdd707bae595ff3f7bad4  gcc/te
*** 95225,95230 ****
--- 95601,95607 ----
  50987d7538aa8313cd07427064ec0cf0  gcc/testsuite/gnat.dg/pure_function3c.adb
  004d0a4eab7269238d8df3bd245f540d  gcc/testsuite/gnat.dg/pure_subp_body.adb
  2cac0c26d493dcb2a6bc9eb14b048d12  gcc/testsuite/gnat.dg/pure_subp_body_pkg.ads
+ 90037ebb91d6c21f5fd1a7d637986ed6  gcc/testsuite/gnat.dg/put_image1.adb
  86264155418d37c3c433352efc4d7216  gcc/testsuite/gnat.dg/quote.adb
  14ca6ec6ac239ab1d151eea57c9f41a0  gcc/testsuite/gnat.dg/raise_ce.adb
  02b35cb51408b925b49e3ad8ff0a7ea4  gcc/testsuite/gnat.dg/raise_expr.adb
*************** abe14a1ac8ff19714a07b9e460b5fa25  gcc/te
*** 95390,95395 ****
--- 95767,95773 ----
  8a35e508f92ae8cfc2bf7f553c3a11da  gcc/testsuite/gnat.dg/specs/array5_pkg1.ads
  65f73b5444cd39e6751236739aa9ae10  gcc/testsuite/gnat.dg/specs/array5_pkg2-g.ads
  0b740b5110495d8d3401e65ea953524e  gcc/testsuite/gnat.dg/specs/array5_pkg2.ads
+ bfb26e1cdacb2ba2f03eb976978bb43f  gcc/testsuite/gnat.dg/specs/array7.ads
  18531dc960411dab820aa7279791f03a  gcc/testsuite/gnat.dg/specs/array_no_def_init.ads
  2d9efbd53366881b4d205fa4d00c2cc9  gcc/testsuite/gnat.dg/specs/atomic1.ads
  483b6cbd58c1c8ac9dacb4ab3aac99bb  gcc/testsuite/gnat.dg/specs/atomic2.ads
*************** bc790bd930f8c4f971b8268bdda83659  gcc/te
*** 95440,95445 ****
--- 95818,95827 ----
  085a1214c06b4e9495c47b56f30e6cd3  gcc/testsuite/gnat.dg/specs/formal_type.ads
  b605c919a473b8d6808dd232aa7eaf49  gcc/testsuite/gnat.dg/specs/gen_interface.ads
  4830454a8335e61b1876284f60de9782  gcc/testsuite/gnat.dg/specs/gen_interface_p.ads
+ c3d551a8416dc4b2870263e10877307e  gcc/testsuite/gnat.dg/specs/generic_inst1.ads
+ 84bbd54b835597ff50d8d9c0c1ed6128  gcc/testsuite/gnat.dg/specs/generic_inst2-child1.ads
+ acb50fb5dcaeadfaa1d06f3a291ad5ac  gcc/testsuite/gnat.dg/specs/generic_inst2-child2.ads
+ 26c02326292bb6ec71f4f8278f140bff  gcc/testsuite/gnat.dg/specs/generic_inst2.ads
  484402f090540a3714934de7a830cc2f  gcc/testsuite/gnat.dg/specs/genericppc.ads
  5fadbbff25531c82473d756d722cd174  gcc/testsuite/gnat.dg/specs/gnati.ads
  f0f859863b2bb6251359cf35dc6ffbf5  gcc/testsuite/gnat.dg/specs/iface_eq_test-child.ads
*************** ac78c396effa4859b1c3270e50e530dc  gcc/te
*** 95567,95572 ****
--- 95949,95955 ----
  32d18c664c80e0567f098ad3f5c64c62  gcc/testsuite/gnat.dg/specs/varsize_return_pkg2.ads
  fafeaea1e6dc6430a977c194dcce2366  gcc/testsuite/gnat.dg/specs/vfa1.ads
  2d6bea14f8e514f5f34e005d6b116ff9  gcc/testsuite/gnat.dg/specs/vfa2.ads
+ 47d3228aa802e4ebef17075e98575f14  gcc/testsuite/gnat.dg/specs/vfa3.ads
  de49d4de8670ae0823ffb5315870359c  gcc/testsuite/gnat.dg/specs/volatile1.ads
  3ab8359f200ce6638ca1a08c54293318  gcc/testsuite/gnat.dg/specs/warnstar.ads
  83ff35b3de15ad167604f5a3fec2f0f2  gcc/testsuite/gnat.dg/specs/weak1.ads
*************** a60d5bd3c7d97738a821caa2b6320a63  gcc/te
*** 96016,96021 ****
--- 96399,96406 ----
  69b3f8ab621ff4711647c31f763db1d7  gcc/testsuite/gnat.dg/warn31.adb
  160ffffc2f2f6edc17044d747f727a5d  gcc/testsuite/gnat.dg/warn31.ads
  0cdebd32eacd337e71c8db2ab9d37a99  gcc/testsuite/gnat.dg/warn32.adb
+ 3c7023a211454ed0b601f4509949969b  gcc/testsuite/gnat.dg/warn33.adb
+ 831b1f99f5a5a1534ee78ccfa364a4d6  gcc/testsuite/gnat.dg/warn33_pkg.ads
  3973b8e21a39fdc98663d8d4c6b3ae18  gcc/testsuite/gnat.dg/warn4.adb
  30bdcc5f53e82fa0a748765edd2d8e03  gcc/testsuite/gnat.dg/warn5.adb
  99d15089537d8f6f3bed5ba4b1675ffc  gcc/testsuite/gnat.dg/warn6.adb
*************** aa1a9744fe32138a966f03d5dfc22541  gcc/te
*** 98212,98218 ****
  66192f2d835f72f9e0f50ce956d8f995  gcc/testsuite/lib/gm2-dg.exp
  511af82e7784b79930a99ed264ee4c75  gcc/testsuite/lib/gm2-simple.exp
  0fbcd8f9a1d131320112a60524ba11db  gcc/testsuite/lib/gm2-torture.exp
! 07fe5aff395d6ff3aeef68e2cf99b423  gcc/testsuite/lib/gm2.exp
  a77eb2ae0a7376bf33d355a4714553ea  gcc/testsuite/lib/gnat-dg.exp
  b4ae06eef6b4887b9ed689af978d27c3  gcc/testsuite/lib/gnat.exp
  53bb5e228778a22ee832e582b423c29f  gcc/testsuite/lib/go-dg.exp
--- 98597,98603 ----
  66192f2d835f72f9e0f50ce956d8f995  gcc/testsuite/lib/gm2-dg.exp
  511af82e7784b79930a99ed264ee4c75  gcc/testsuite/lib/gm2-simple.exp
  0fbcd8f9a1d131320112a60524ba11db  gcc/testsuite/lib/gm2-torture.exp
! f6cc952331a767fcf232fa123e5d2683  gcc/testsuite/lib/gm2.exp
  a77eb2ae0a7376bf33d355a4714553ea  gcc/testsuite/lib/gnat-dg.exp
  b4ae06eef6b4887b9ed689af978d27c3  gcc/testsuite/lib/gnat.exp
  53bb5e228778a22ee832e582b423c29f  gcc/testsuite/lib/go-dg.exp
*************** e020b68426183241592d8d9e6fc099b4  gcc/te
*** 98249,98255 ****
  b295a72c05b831c76c031b8e2eb4d3b2  gcc/testsuite/lib/scanwpaipa.exp
  193dff75973e9817b77d076cd499f3fa  gcc/testsuite/lib/target-libpath.exp
  3d3f2e71aead61b3117d14eb7bbd4a01  gcc/testsuite/lib/target-supports-dg.exp
! 9447bb1b109192cb1b1c2aed092ec46e  gcc/testsuite/lib/target-supports.exp
  7e0169745cc1fb5c7a32430931fd5493  gcc/testsuite/lib/target-utils.exp
  60311806ad83bff4ff32a9473e1b70f2  gcc/testsuite/lib/timeout-dg.exp
  b097a1276df72ba56dc546dc3859883c  gcc/testsuite/lib/timeout.exp
--- 98634,98640 ----
  b295a72c05b831c76c031b8e2eb4d3b2  gcc/testsuite/lib/scanwpaipa.exp
  193dff75973e9817b77d076cd499f3fa  gcc/testsuite/lib/target-libpath.exp
  3d3f2e71aead61b3117d14eb7bbd4a01  gcc/testsuite/lib/target-supports-dg.exp
! c340faeb4b9a17de175506f693cdba4a  gcc/testsuite/lib/target-supports.exp
  7e0169745cc1fb5c7a32430931fd5493  gcc/testsuite/lib/target-utils.exp
  60311806ad83bff4ff32a9473e1b70f2  gcc/testsuite/lib/timeout-dg.exp
  b097a1276df72ba56dc546dc3859883c  gcc/testsuite/lib/timeout.exp
*************** f94e7e93a949cf8bbb4daed6f2adcefe  gcc/tr
*** 100057,100072 ****
  41f165f234cc64d36b07d87290ce6d0a  gcc/trans-mem.h
  08f249c7fa2dbee7c097b1ee10aca886  gcc/tree-affine.cc
  af4dad4e7c08b9fb38895d9d5c6480a5  gcc/tree-affine.h
! 2b98aa251dc483dea477bbf0374214a9  gcc/tree-call-cdce.cc
! 4652b828a80ab53030290170193c4378  gcc/tree-cfg.cc
  2921805a6732bc91a8722618d4189584  gcc/tree-cfg.h
  02211b0e40626f889cfc27d57f80db1e  gcc/tree-cfgcleanup.cc
  a027071bbc28b44a8697ab0a322059e7  gcc/tree-cfgcleanup.h
! cd9d9a63ed5b22b1082f8a0388f82674  gcc/tree-chrec.cc
  36c8667090105100455277b131b1db62  gcc/tree-chrec.h
  5d1fcefce8e08d4c308c542ec7e6597b  gcc/tree-complex.cc
  9a5b72989d74c0d97cbb0289e27a677c  gcc/tree-core.h
! e9973d95dfe0ba3726a25fb41974386e  gcc/tree-data-ref.cc
  bc11b118ba0b8bafdf4ce00928b10bc0  gcc/tree-data-ref.h
  0f6be79143e064ba60962a4042d43122  gcc/tree-dfa.cc
  25b2344a8a870f7c9c3a04df1cd70c27  gcc/tree-dfa.h
--- 100442,100458 ----
  41f165f234cc64d36b07d87290ce6d0a  gcc/trans-mem.h
  08f249c7fa2dbee7c097b1ee10aca886  gcc/tree-affine.cc
  af4dad4e7c08b9fb38895d9d5c6480a5  gcc/tree-affine.h
! 58ecb6d9b62baf05e7298fc077e53e01  gcc/tree-assume.cc
! 7917044c19ad94d1944a953647469ac9  gcc/tree-call-cdce.cc
! 52b912862453c1b9940486ad40517d7a  gcc/tree-cfg.cc
  2921805a6732bc91a8722618d4189584  gcc/tree-cfg.h
  02211b0e40626f889cfc27d57f80db1e  gcc/tree-cfgcleanup.cc
  a027071bbc28b44a8697ab0a322059e7  gcc/tree-cfgcleanup.h
! 494b5ba6fdb678d25ed757c4cac06aa8  gcc/tree-chrec.cc
  36c8667090105100455277b131b1db62  gcc/tree-chrec.h
  5d1fcefce8e08d4c308c542ec7e6597b  gcc/tree-complex.cc
  9a5b72989d74c0d97cbb0289e27a677c  gcc/tree-core.h
! 578b5f05da1bd55d269ba92ab6cb0fe4  gcc/tree-data-ref.cc
  bc11b118ba0b8bafdf4ce00928b10bc0  gcc/tree-data-ref.h
  0f6be79143e064ba60962a4042d43122  gcc/tree-dfa.cc
  25b2344a8a870f7c9c3a04df1cd70c27  gcc/tree-dfa.h
*************** beb28836faf3cbf46c223a78f4ed0f2f  gcc/tr
*** 100076,100089 ****
  497415d4f3c2631a2ed6b125e635cb4e  gcc/tree-diagnostic.h
  1372af3bb41e349a9519f88746ea7770  gcc/tree-dump.cc
  ad4739e1ababa9fe99c700a409d4d39c  gcc/tree-dump.h
! ca4884c3aef6befeb84abe15b95ed221  gcc/tree-eh.cc
  6393cd11119dc8ba74124d979d213cdb  gcc/tree-eh.h
  27041cf11105e487781bc6230f204232  gcc/tree-emutls.cc
  582c0d8e240fd276fd28bed9cfa593f3  gcc/tree-hash-traits.h
  51a9944253ec880d2fcefce4f457fd81  gcc/tree-hasher.h
! 78fa3cebebb0b245d407fee8b0b7c5d8  gcc/tree-if-conv.cc
  d827a40245726bb17d7019eeb50733a5  gcc/tree-if-conv.h
! a11a3ff641a3bdf2ea8af5ddeccc6530  gcc/tree-inline.cc
  05a54334040842ce3f2e8586d3d67b76  gcc/tree-inline.h
  9cfa0b6fbd2cdc3d42b9a6a68ee42ef5  gcc/tree-into-ssa.cc
  f1fe226578aba70864fab526bf69c25b  gcc/tree-into-ssa.h
--- 100462,100475 ----
  497415d4f3c2631a2ed6b125e635cb4e  gcc/tree-diagnostic.h
  1372af3bb41e349a9519f88746ea7770  gcc/tree-dump.cc
  ad4739e1ababa9fe99c700a409d4d39c  gcc/tree-dump.h
! 258ba77bb59d2b4d97f06b9b6b86b572  gcc/tree-eh.cc
  6393cd11119dc8ba74124d979d213cdb  gcc/tree-eh.h
  27041cf11105e487781bc6230f204232  gcc/tree-emutls.cc
  582c0d8e240fd276fd28bed9cfa593f3  gcc/tree-hash-traits.h
  51a9944253ec880d2fcefce4f457fd81  gcc/tree-hasher.h
! 4528063fea5b6304571700b11c07ee3f  gcc/tree-if-conv.cc
  d827a40245726bb17d7019eeb50733a5  gcc/tree-if-conv.h
! 2370d942b5c54b26b1330de13e076535  gcc/tree-inline.cc
  05a54334040842ce3f2e8586d3d67b76  gcc/tree-inline.h
  9cfa0b6fbd2cdc3d42b9a6a68ee42ef5  gcc/tree-into-ssa.cc
  f1fe226578aba70864fab526bf69c25b  gcc/tree-into-ssa.h
*************** f1fe226578aba70864fab526bf69c25b  gcc/tr
*** 100091,100097 ****
  ccda522d2791061d143ed10d67ebb8ab  gcc/tree-iterator.h
  478753fdfe072165d600af5c8bd4a83e  gcc/tree-logical-location.cc
  aa8406f5353334e06321a4bfde913f90  gcc/tree-logical-location.h
! 066ebbb1e8baf2fd2a688050c78e7e84  gcc/tree-loop-distribution.cc
  4ab7af103ce3eb3d3e4ae5c7181a3141  gcc/tree-nested.cc
  9bba957c6a1ab17bb89c93f7fe4f63df  gcc/tree-nested.h
  f08dc5d3e5c244c9f3d0921a13600db5  gcc/tree-nrv.cc
--- 100477,100483 ----
  ccda522d2791061d143ed10d67ebb8ab  gcc/tree-iterator.h
  478753fdfe072165d600af5c8bd4a83e  gcc/tree-logical-location.cc
  aa8406f5353334e06321a4bfde913f90  gcc/tree-logical-location.h
! dd6ddd51a9c744753847a5f1a430a39f  gcc/tree-loop-distribution.cc
  4ab7af103ce3eb3d3e4ae5c7181a3141  gcc/tree-nested.cc
  9bba957c6a1ab17bb89c93f7fe4f63df  gcc/tree-nested.h
  f08dc5d3e5c244c9f3d0921a13600db5  gcc/tree-nrv.cc
*************** feca017a2b8993f6879429c3b7fa9740  gcc/tr
*** 100110,100145 ****
  13e933e748d0799695ef67be87740769  gcc/tree-profile.cc
  835e107c7d950e109cab7dc47dd27a51  gcc/tree-scalar-evolution.cc
  b8223329488a4001552728350c5dbbef  gcc/tree-scalar-evolution.h
! 68e8f3ae9e325c7e9e869432d7610cfb  gcc/tree-sra.cc
  1f7981f8ac0c98c7d1acb674035e2c16  gcc/tree-sra.h
  931fca6fc15298fa1f2021f8e4f2ed8d  gcc/tree-ssa-address.cc
  c37e139873f3e8da2fffefa09903ee42  gcc/tree-ssa-address.h
! a8390868d15220dfcd12e320402468a6  gcc/tree-ssa-alias-compare.h
! f5944817a22a299f4d675e3af8f8072a  gcc/tree-ssa-alias.cc
  ba44f6b9cdb34f227ce92ce6bbaaf35d  gcc/tree-ssa-alias.h
! 17d317771a454d90a0623fde152c7739  gcc/tree-ssa-ccp.cc
  cd2e4de6ee944facf2a1995f8743f8c2  gcc/tree-ssa-ccp.h
  da67de91badb3e7882b0f0f56a67670e  gcc/tree-ssa-coalesce.cc
  96b67f0be71acb075f0ac5ac12c58664  gcc/tree-ssa-coalesce.h
! 224369f622af9776abe022853f1a0d00  gcc/tree-ssa-copy.cc
! 1bd17638abbe47cbb1458cbc3491baa4  gcc/tree-ssa-dce.cc
  e36c0da1e5dc257d4ccff9c24043d7fc  gcc/tree-ssa-dce.h
! 2064fb92d4753ce421275bb80258341c  gcc/tree-ssa-dom.cc
  aba207ac671bbe2380e556429ad21a00  gcc/tree-ssa-dom.h
  96193370d3840ed2faa499783b5b1028  gcc/tree-ssa-dse.cc
  9fe4418350cac32811c9ed2ed8de371f  gcc/tree-ssa-dse.h
! 3e8c5cda4491861954032e31c7f3f139  gcc/tree-ssa-forwprop.cc
  567c30a8d9160fdcd286536c8e4a553e  gcc/tree-ssa-ifcombine.cc
  e5c556ba07b04f0f9890c0d4618c716e  gcc/tree-ssa-live.cc
  d68a110616d98e6c023567d2239e4e13  gcc/tree-ssa-live.h
  286a1abc75a2657034c3ff16b07e46cb  gcc/tree-ssa-loop-ch.cc
  82db0d5ee7e3891957928ab4770ad9df  gcc/tree-ssa-loop-im.cc
  e167c39b8e8961b4e66068ab4f68bed2  gcc/tree-ssa-loop-ivcanon.cc
! fe68c2998f9a92ecc09cff3dbadfc827  gcc/tree-ssa-loop-ivopts.cc
  370a3d6606f97b793ee8a94e17f8a1f5  gcc/tree-ssa-loop-ivopts.h
  aa498fcb0de83e00d2d79464ed4fa669  gcc/tree-ssa-loop-manip.cc
  c10dc1a11bed8461c36db2d370f534b6  gcc/tree-ssa-loop-manip.h
! b80f43bc54f84fc0838859d56980364a  gcc/tree-ssa-loop-niter.cc
  63e23177ceb0e06f07092e962fb6ec1e  gcc/tree-ssa-loop-niter.h
  29515e41d02e46edeeede5dbddecc177  gcc/tree-ssa-loop-prefetch.cc
  8d00446e723fdc157e179d58c825952a  gcc/tree-ssa-loop-split.cc
--- 100496,100531 ----
  13e933e748d0799695ef67be87740769  gcc/tree-profile.cc
  835e107c7d950e109cab7dc47dd27a51  gcc/tree-scalar-evolution.cc
  b8223329488a4001552728350c5dbbef  gcc/tree-scalar-evolution.h
! 031698db6d2907dd7d749a4ff8847897  gcc/tree-sra.cc
  1f7981f8ac0c98c7d1acb674035e2c16  gcc/tree-sra.h
  931fca6fc15298fa1f2021f8e4f2ed8d  gcc/tree-ssa-address.cc
  c37e139873f3e8da2fffefa09903ee42  gcc/tree-ssa-address.h
! e7da83a9f8b9fdd2773b043ed2e5d28d  gcc/tree-ssa-alias-compare.h
! 7fac33c1038c88f8f926620ac4bdf3c8  gcc/tree-ssa-alias.cc
  ba44f6b9cdb34f227ce92ce6bbaaf35d  gcc/tree-ssa-alias.h
! 6a88811f7f31882f57fe34d498a722d4  gcc/tree-ssa-ccp.cc
  cd2e4de6ee944facf2a1995f8743f8c2  gcc/tree-ssa-ccp.h
  da67de91badb3e7882b0f0f56a67670e  gcc/tree-ssa-coalesce.cc
  96b67f0be71acb075f0ac5ac12c58664  gcc/tree-ssa-coalesce.h
! 8ced730c768e011c0f1ef4c6345cc59a  gcc/tree-ssa-copy.cc
! 1d67e5802182e37fa7408e02a48948c0  gcc/tree-ssa-dce.cc
  e36c0da1e5dc257d4ccff9c24043d7fc  gcc/tree-ssa-dce.h
! 35f365067a15b900bdc007c8c4366fd1  gcc/tree-ssa-dom.cc
  aba207ac671bbe2380e556429ad21a00  gcc/tree-ssa-dom.h
  96193370d3840ed2faa499783b5b1028  gcc/tree-ssa-dse.cc
  9fe4418350cac32811c9ed2ed8de371f  gcc/tree-ssa-dse.h
! 8d97cf47138ffd7cd6f4c316e206b8f2  gcc/tree-ssa-forwprop.cc
  567c30a8d9160fdcd286536c8e4a553e  gcc/tree-ssa-ifcombine.cc
  e5c556ba07b04f0f9890c0d4618c716e  gcc/tree-ssa-live.cc
  d68a110616d98e6c023567d2239e4e13  gcc/tree-ssa-live.h
  286a1abc75a2657034c3ff16b07e46cb  gcc/tree-ssa-loop-ch.cc
  82db0d5ee7e3891957928ab4770ad9df  gcc/tree-ssa-loop-im.cc
  e167c39b8e8961b4e66068ab4f68bed2  gcc/tree-ssa-loop-ivcanon.cc
! 2a82e5db3ae8cda9f73ccedf14ad528f  gcc/tree-ssa-loop-ivopts.cc
  370a3d6606f97b793ee8a94e17f8a1f5  gcc/tree-ssa-loop-ivopts.h
  aa498fcb0de83e00d2d79464ed4fa669  gcc/tree-ssa-loop-manip.cc
  c10dc1a11bed8461c36db2d370f534b6  gcc/tree-ssa-loop-manip.h
! c90a53a9053650864e74999a5ab82442  gcc/tree-ssa-loop-niter.cc
  63e23177ceb0e06f07092e962fb6ec1e  gcc/tree-ssa-loop-niter.h
  29515e41d02e46edeeede5dbddecc177  gcc/tree-ssa-loop-prefetch.cc
  8d00446e723fdc157e179d58c825952a  gcc/tree-ssa-loop-split.cc
*************** e2040b0e641b28b006e48fb2094500e2  gcc/tr
*** 100150,100171 ****
  e9484a6f5b1f9056c6681cedce910ed4  gcc/tree-ssa-math-opts.h
  918abd54b699b48204a42158c4379381  gcc/tree-ssa-operands.cc
  0db421e827039fe3c4f796b4c7600c52  gcc/tree-ssa-operands.h
! 10341b5c6a2c1032f229530c1b341271  gcc/tree-ssa-phiopt.cc
  731542d52a45ac5f609554aee9faf6dd  gcc/tree-ssa-phiprop.cc
! a14874d21e39e1817f9c1d2ec93a9cfe  gcc/tree-ssa-pre.cc
  92e37073a834f5e59681947910d76467  gcc/tree-ssa-propagate.cc
  658e45ca3c1c387fbd4e8bf835de1acd  gcc/tree-ssa-propagate.h
! 0e65a4fb28abfdc989e09484443d8cda  gcc/tree-ssa-reassoc.cc
  3d6728ab6aa97921854f86b5d2116c3d  gcc/tree-ssa-reassoc.h
! bec4f7e27c1b500341ef89b99eccc170  gcc/tree-ssa-sccvn.cc
  1c663c39e61b7e64cbea685db2598475  gcc/tree-ssa-sccvn.h
  0dd72fccd9280ac160f5ac770517ee10  gcc/tree-ssa-scopedtables.cc
  bdda02f8f5872266cc26122c45c7d248  gcc/tree-ssa-scopedtables.h
! c46fe59d6ead2c7ed06d10742f701799  gcc/tree-ssa-sink.cc
! d9ce4edd899f7df0f6f508ed3e8c8b90  gcc/tree-ssa-strlen.cc
  cae334e8d7f57adf439062af515c28ae  gcc/tree-ssa-strlen.h
! aa41b31722276367122b7a66b67c737c  gcc/tree-ssa-structalias.cc
! ede21d1664bb37be5cafde80cb42a6ff  gcc/tree-ssa-tail-merge.cc
  ef149bbc15f2173d0e0b9f2254c03eb5  gcc/tree-ssa-ter.cc
  ae3a1dc45c510377c6acedecbc823d32  gcc/tree-ssa-ter.h
  a199afc3c0cb77a15c36952ce742bcbb  gcc/tree-ssa-threadbackward.cc
--- 100536,100557 ----
  e9484a6f5b1f9056c6681cedce910ed4  gcc/tree-ssa-math-opts.h
  918abd54b699b48204a42158c4379381  gcc/tree-ssa-operands.cc
  0db421e827039fe3c4f796b4c7600c52  gcc/tree-ssa-operands.h
! e78eec419e994fc2d9ed7161400c6439  gcc/tree-ssa-phiopt.cc
  731542d52a45ac5f609554aee9faf6dd  gcc/tree-ssa-phiprop.cc
! ef15621f3fcf286ff9b897cc3ef0d498  gcc/tree-ssa-pre.cc
  92e37073a834f5e59681947910d76467  gcc/tree-ssa-propagate.cc
  658e45ca3c1c387fbd4e8bf835de1acd  gcc/tree-ssa-propagate.h
! 58c0ef78644b94b752f3d6d91823c3f9  gcc/tree-ssa-reassoc.cc
  3d6728ab6aa97921854f86b5d2116c3d  gcc/tree-ssa-reassoc.h
! 043efbe0ee23033d49aed6bcec082b3b  gcc/tree-ssa-sccvn.cc
  1c663c39e61b7e64cbea685db2598475  gcc/tree-ssa-sccvn.h
  0dd72fccd9280ac160f5ac770517ee10  gcc/tree-ssa-scopedtables.cc
  bdda02f8f5872266cc26122c45c7d248  gcc/tree-ssa-scopedtables.h
! 3651b347d24df9f7410ea32fdf639a5d  gcc/tree-ssa-sink.cc
! edb47f7d1dfba701b0bea40c2c33eeb2  gcc/tree-ssa-strlen.cc
  cae334e8d7f57adf439062af515c28ae  gcc/tree-ssa-strlen.h
! c447caeb8cd3ddc21a4fac3f7536d8bd  gcc/tree-ssa-structalias.cc
! 5fb55b888080a274f1a657904168a72f  gcc/tree-ssa-tail-merge.cc
  ef149bbc15f2173d0e0b9f2254c03eb5  gcc/tree-ssa-ter.cc
  ae3a1dc45c510377c6acedecbc823d32  gcc/tree-ssa-ter.h
  a199afc3c0cb77a15c36952ce742bcbb  gcc/tree-ssa-threadbackward.cc
*************** ac4c7ef64fae79629a0ea0c741c25ba7  gcc/tr
*** 100175,100184 ****
  52eb7df5e9ebd417f62e6b8d01ce878a  gcc/tree-ssa-threadupdate.h
  17e2ec9603a80d2276f05853965d8d70  gcc/tree-ssa-uncprop.cc
  161e75112e3d7ecfdd17ce0f10bdc83d  gcc/tree-ssa-uninit.cc
! 5c97cbcf8fb3ee3f1914e5814c64042d  gcc/tree-ssa.cc
  ed13c4549041c596b249948a9d4583a3  gcc/tree-ssa.h
! 4e799d8e730086c4d3788890d70f6cff  gcc/tree-ssanames.cc
! b238783d1764a95333811500c3144a7c  gcc/tree-ssanames.h
  ea18451dcbcb4446e5c1f87b9a0aeddc  gcc/tree-stdarg.cc
  6a98188a4af79ee9fb79c2d93528ab27  gcc/tree-stdarg.h
  c09a192585c4c06d68ac3efacc09c3f6  gcc/tree-streamer-in.cc
--- 100561,100570 ----
  52eb7df5e9ebd417f62e6b8d01ce878a  gcc/tree-ssa-threadupdate.h
  17e2ec9603a80d2276f05853965d8d70  gcc/tree-ssa-uncprop.cc
  161e75112e3d7ecfdd17ce0f10bdc83d  gcc/tree-ssa-uninit.cc
! 4ecc9bf1baeedc1b5f48a4d6569caba8  gcc/tree-ssa.cc
  ed13c4549041c596b249948a9d4583a3  gcc/tree-ssa.h
! dda0c7d83a905217a83e0a0efd3d6355  gcc/tree-ssanames.cc
! b624e1f5044ba9c561a5ba44e5b64417  gcc/tree-ssanames.h
  ea18451dcbcb4446e5c1f87b9a0aeddc  gcc/tree-stdarg.cc
  6a98188a4af79ee9fb79c2d93528ab27  gcc/tree-stdarg.h
  c09a192585c4c06d68ac3efacc09c3f6  gcc/tree-streamer-in.cc
*************** ad22fabedd9c85512941d6537188dcdc  gcc/tr
*** 100188,100208 ****
  55b4d99428849459155be80d762f91a7  gcc/tree-switch-conversion.cc
  7c63c2566792c75263e89aad9dbdd648  gcc/tree-switch-conversion.h
  a4918516d4e0d24a0f05be8cdde5d93f  gcc/tree-tailcall.cc
! 10451d43754b22d671c1e121913d7013  gcc/tree-vect-data-refs.cc
! 412520523308236f49087cb7a3f02c6d  gcc/tree-vect-generic.cc
  c45157ab0aed55ef9c76715a91e9ec64  gcc/tree-vect-loop-manip.cc
! 72ad2a873f642129a2a36a11caa406ee  gcc/tree-vect-loop.cc
! 0c1ce9b0be82bf22ade71d648ef1ffe7  gcc/tree-vect-patterns.cc
  b2d8890f59e3b9eaa4fce183bf5f75be  gcc/tree-vect-slp-patterns.cc
! 8d7d301d5ac66ee1194e221b5aae1e20  gcc/tree-vect-slp.cc
! 3d095602bcdb15501da338c556db6819  gcc/tree-vect-stmts.cc
  9ed16219bf6ab97b79539fb1bca89485  gcc/tree-vector-builder.cc
  672861a6f3b4ede253a47c708e10856d  gcc/tree-vector-builder.h
! 6aa65afe715f0a1a0aeb28eec7a7931c  gcc/tree-vectorizer.cc
  273e2d8b40a81cd971fbfbf62d964bfa  gcc/tree-vectorizer.h
! 77cb16f595a988710bcea28078cf75a3  gcc/tree-vrp.cc
  1506b4121fe3a1f91b7dce7fd11903b1  gcc/tree-vrp.h
! 1b4a06e747310e7e17f17867e44fc008  gcc/tree.cc
  90cbee0521eed701cdda38cb80c79c9a  gcc/tree.def
  fe516d7c8d021430db52ce4066099c2c  gcc/tree.h
  1bc8e733e733c31e894ea8e9911dc5c0  gcc/treestruct.def
--- 100574,100594 ----
  55b4d99428849459155be80d762f91a7  gcc/tree-switch-conversion.cc
  7c63c2566792c75263e89aad9dbdd648  gcc/tree-switch-conversion.h
  a4918516d4e0d24a0f05be8cdde5d93f  gcc/tree-tailcall.cc
! c4f2e2a2cc275dcf93b14541755c8797  gcc/tree-vect-data-refs.cc
! 8d1574c041db981b77499997880f38ff  gcc/tree-vect-generic.cc
  c45157ab0aed55ef9c76715a91e9ec64  gcc/tree-vect-loop-manip.cc
! a3f570d0bae1f5cb941213a48c4e8187  gcc/tree-vect-loop.cc
! fc473067a8cba47493488fd0e39e82e1  gcc/tree-vect-patterns.cc
  b2d8890f59e3b9eaa4fce183bf5f75be  gcc/tree-vect-slp-patterns.cc
! ae5fc3590da86a81b77b9bbbda17c40c  gcc/tree-vect-slp.cc
! 2578b9def1e89bc98e186ae47cdbfc3d  gcc/tree-vect-stmts.cc
  9ed16219bf6ab97b79539fb1bca89485  gcc/tree-vector-builder.cc
  672861a6f3b4ede253a47c708e10856d  gcc/tree-vector-builder.h
! ca7a666858d4e46dfb08e1e6932bb5f4  gcc/tree-vectorizer.cc
  273e2d8b40a81cd971fbfbf62d964bfa  gcc/tree-vectorizer.h
! bc72028fa27951bff9394d746764fc75  gcc/tree-vrp.cc
  1506b4121fe3a1f91b7dce7fd11903b1  gcc/tree-vrp.h
! cf071e7cb5ad16b6a14bede98d4c0aa5  gcc/tree.cc
  90cbee0521eed701cdda38cb80c79c9a  gcc/tree.def
  fe516d7c8d021430db52ce4066099c2c  gcc/tree.h
  1bc8e733e733c31e894ea8e9911dc5c0  gcc/treestruct.def
*************** d583fab067d805f6faa3a0c843de7b9c  gcc/ts
*** 100214,100220 ****
  fcb65b893faa201083a06dbdeab0d943  gcc/typeclass.h
  7bb7945cafc3b8f490163c395ae34a14  gcc/typed-splay-tree.cc
  6b94f4f6cbec65970fd2b161eaddf0c6  gcc/typed-splay-tree.h
! e29a797aefc747dd87e10c62aa2eabc6  gcc/ubsan.cc
  42de1b0b3ffabde0a54387be6e2b87b9  gcc/ubsan.h
  13e4856f601fb192ec89efc7f04f9b21  gcc/valtrack.cc
  b9e4a4b10a8dd4e13e216336646d9cfe  gcc/valtrack.h
--- 100600,100606 ----
  fcb65b893faa201083a06dbdeab0d943  gcc/typeclass.h
  7bb7945cafc3b8f490163c395ae34a14  gcc/typed-splay-tree.cc
  6b94f4f6cbec65970fd2b161eaddf0c6  gcc/typed-splay-tree.h
! acc4979ab91105581e143211dc3df7af  gcc/ubsan.cc
  42de1b0b3ffabde0a54387be6e2b87b9  gcc/ubsan.h
  13e4856f601fb192ec89efc7f04f9b21  gcc/valtrack.cc
  b9e4a4b10a8dd4e13e216336646d9cfe  gcc/valtrack.h
*************** eaf2f0aeb4ab13c534f4cab90292864c  gcc/va
*** 100228,100239 ****
  cc2c1890bdcf636e36bcdd23285dd304  gcc/value-range-pretty-print.h
  e6184a6abb9af9d66b052e39e9f5fa34  gcc/value-range-storage.cc
  1127df135ad647ce7accd976a6d0768b  gcc/value-range-storage.h
! c2c57668339f82e23b02160aa96816c0  gcc/value-range.cc
! c557a2ad003ef8de2d230d1dd92e20d6  gcc/value-range.h
  e102b0f38013046bea428c1347577c4e  gcc/value-relation.cc
  4d6e7c80d58e26a86b0f46f81d4fe33c  gcc/value-relation.h
  e31285175438a68675780b419cf964ec  gcc/var-tracking.cc
! c8c1864460f57d50251367428d53ac66  gcc/varasm.cc
  a801df1efea35850028f5ec3cc36b36d  gcc/varasm.h
  dc419bc01226f41334020c39be67d5cb  gcc/varpool.cc
  05234e0f40aa8065b424e1ce1f6801fc  gcc/vec-perm-indices.cc
--- 100614,100625 ----
  cc2c1890bdcf636e36bcdd23285dd304  gcc/value-range-pretty-print.h
  e6184a6abb9af9d66b052e39e9f5fa34  gcc/value-range-storage.cc
  1127df135ad647ce7accd976a6d0768b  gcc/value-range-storage.h
! 13ab87c5915ba80bc1ca92abd0eb8fed  gcc/value-range.cc
! 503ab1c6d5150f14e3b6b5094d13d500  gcc/value-range.h
  e102b0f38013046bea428c1347577c4e  gcc/value-relation.cc
  4d6e7c80d58e26a86b0f46f81d4fe33c  gcc/value-relation.h
  e31285175438a68675780b419cf964ec  gcc/var-tracking.cc
! e8028efd8ee5b5ad4b762c6e09d663e9  gcc/varasm.cc
  a801df1efea35850028f5ec3cc36b36d  gcc/varasm.h
  dc419bc01226f41334020c39be67d5cb  gcc/varpool.cc
  05234e0f40aa8065b424e1ce1f6801fc  gcc/vec-perm-indices.cc
*************** ebc3498f02b086ce0e67eab6a6fece3f  gcc/wi
*** 100255,100265 ****
  ebf250cf9194edd780d532a486554dee  gcc/wide-int.cc
  0eb153be091e6f61b9b03c8fd72336d1  gcc/wide-int.h
  83081f4aecfcb23b16fa34e4109aa61a  gcc/xcoff.h
! 3234b3876c4671347a98d98093866f27  gnattools/ChangeLog
  3e149f46f7f39c4f49e3e3449af997a3  gnattools/Makefile.in
  612bff48e9d0bfce4a8a8b2ce0e136ae  gnattools/configure
  5904825aa8ada9f931733a205c8ed847  gnattools/configure.ac
! 8c6c9a62acd25de79620014d7910cc01  gotools/ChangeLog
  5d56cc28c41dee982565dd2bb6835d75  gotools/Makefile.am
  1b3e301307fb3c8ef2e668e88e9da768  gotools/Makefile.in
  7e23031e2e274aaa07b61c1e8f18dc99  gotools/README
--- 100641,100651 ----
  ebf250cf9194edd780d532a486554dee  gcc/wide-int.cc
  0eb153be091e6f61b9b03c8fd72336d1  gcc/wide-int.h
  83081f4aecfcb23b16fa34e4109aa61a  gcc/xcoff.h
! e50f0bb6c86a76c9154f3ab9efd98178  gnattools/ChangeLog
  3e149f46f7f39c4f49e3e3449af997a3  gnattools/Makefile.in
  612bff48e9d0bfce4a8a8b2ce0e136ae  gnattools/configure
  5904825aa8ada9f931733a205c8ed847  gnattools/configure.ac
! 0c979eb76ed8ec86093f411349876d6a  gotools/ChangeLog
  5d56cc28c41dee982565dd2bb6835d75  gotools/Makefile.am
  1b3e301307fb3c8ef2e668e88e9da768  gotools/Makefile.in
  7e23031e2e274aaa07b61c1e8f18dc99  gotools/README
*************** c4e8176c1964a5ebe0a55900f2141299  gotool
*** 100270,100276 ****
  eb2aeb3a6cffe7b26a8f1c8a2da23dcd  gotools/gofmt.1
  59530bdf33659b29e73d4adb9f9f6552  include/COPYING
  d32239bcb673463ab874e80d47fae504  include/COPYING3
! b926be477d686767ad9ec5dca8e3fb83  include/ChangeLog
  4263432a72ff47ed8bf420208ee7eea5  include/ChangeLog-9103
  a43d76108493b20da790f953f829c6a5  include/ChangeLog.jit
  0ff2b24587f14124d511aab046079147  include/ansidecl.h
--- 100656,100662 ----
  eb2aeb3a6cffe7b26a8f1c8a2da23dcd  gotools/gofmt.1
  59530bdf33659b29e73d4adb9f9f6552  include/COPYING
  d32239bcb673463ab874e80d47fae504  include/COPYING3
! b947bd954eca6c3b2dd66eca7185f9fb  include/ChangeLog
  4263432a72ff47ed8bf420208ee7eea5  include/ChangeLog-9103
  a43d76108493b20da790f953f829c6a5  include/ChangeLog.jit
  0ff2b24587f14124d511aab046079147  include/ansidecl.h
*************** b6bc18ff7e3681049201bc69010936b9  includ
*** 100320,100326 ****
  5b7dc4eb0d130a5e69585036ec952a8b  include/xtensa-config.h
  7c9ba9d93474d91c7467ed1f1ed2f088  include/xtensa-dynconfig.h
  361482dd6b5b5eb7090fff3986fba68a  install-sh
! a1eaaa0b5ed3a5b30c8ed7e7f152530f  intl/ChangeLog
  a5f61a727ebbc9d02c42160796629b91  intl/Makefile.in
  6ec998bb4716c744bf8185e607f69301  intl/README
  76ca170a525d5b84d90f0478fe788931  intl/VERSION
--- 100706,100712 ----
  5b7dc4eb0d130a5e69585036ec952a8b  include/xtensa-config.h
  7c9ba9d93474d91c7467ed1f1ed2f088  include/xtensa-dynconfig.h
  361482dd6b5b5eb7090fff3986fba68a  install-sh
! 69c81f75fbdfc0d198228ccfe8b889ff  intl/ChangeLog
  a5f61a727ebbc9d02c42160796629b91  intl/Makefile.in
  6ec998bb4716c744bf8185e607f69301  intl/README
  76ca170a525d5b84d90f0478fe788931  intl/VERSION
*************** ec38b8a64a735196854a8f7d76b79a78  intl/p
*** 100363,100374 ****
  b4758a0194e3e41362b939911472ce62  intl/relocatable.c
  bedade7bcfc3bc5eb09a2c6844f637f3  intl/relocatable.h
  43f287d082528203fc85c1d2d81bf30d  intl/textdomain.c
! ee1807e265d93d14515b94c88b5824d2  libada/ChangeLog
  dca5ce4eb1363d83b4ad5b9a53945d40  libada/Makefile.in
  c84521662479d4955e33fae0dded80b9  libada/configure
  a7a500814e0b8f1c0566431969ec0b61  libada/configure.ac
  46d3fe6da7a771cc2d5420c4137a6861  libatomic/.gitignore
! a029f476c4ad1bed7375a7503bfaf286  libatomic/ChangeLog
  341eb3cfc5416fe2e8b441ba30b064d3  libatomic/Makefile.am
  4b64390f7024f015eef3741123d570bd  libatomic/Makefile.in
  04a8eb275561484cf0d6f8c459a38177  libatomic/acinclude.m4
--- 100749,100760 ----
  b4758a0194e3e41362b939911472ce62  intl/relocatable.c
  bedade7bcfc3bc5eb09a2c6844f637f3  intl/relocatable.h
  43f287d082528203fc85c1d2d81bf30d  intl/textdomain.c
! e94c07825882aa17f0773d7c840230ed  libada/ChangeLog
  dca5ce4eb1363d83b4ad5b9a53945d40  libada/Makefile.in
  c84521662479d4955e33fae0dded80b9  libada/configure
  a7a500814e0b8f1c0566431969ec0b61  libada/configure.ac
  46d3fe6da7a771cc2d5420c4137a6861  libatomic/.gitignore
! d6c7cd16e6f2af0d336dd4b39c45ba5c  libatomic/ChangeLog
  341eb3cfc5416fe2e8b441ba30b064d3  libatomic/Makefile.am
  4b64390f7024f015eef3741123d570bd  libatomic/Makefile.in
  04a8eb275561484cf0d6f8c459a38177  libatomic/acinclude.m4
*************** d8dd1496d0a47e0c36547274ddb129a2  libato
*** 100388,100398 ****
  54dfed278e96c1c3d6019414564adf5d  libatomic/config/linux/arm/load_n.c
  b203dc97760ced0dd6b989ddc85de233  libatomic/config/linux/arm/store_n.c
  499c9b858ab0b6a31b571f05e2f35da0  libatomic/config/mingw/host-config.h
! 62cbf2fa3900c584b4346bf2bf38d3bb  libatomic/config/mingw/lock.c
  32947feebf3d4e7e09c04cb9ac2f9cc0  libatomic/config/nvptx/host-config.h
  d095a6f286a5cf65c278619ac9e3ebe9  libatomic/config/nvptx/lock.c
  06a4055a895b52254dbd86a62a16cb0e  libatomic/config/posix/host-config.h
! c44a36cc8503d04241e63432ee3cbd4b  libatomic/config/posix/lock.c
  d04f86e742ddfedb71fb4a3d0ceede39  libatomic/config/powerpc/host-config.h
  ae056c7038d61ce6191ec149aee8f69b  libatomic/config/rtems/host-config.h
  08b0225a8b5565ea77c2a80132653b12  libatomic/config/rtems/lock.c
--- 100774,100784 ----
  54dfed278e96c1c3d6019414564adf5d  libatomic/config/linux/arm/load_n.c
  b203dc97760ced0dd6b989ddc85de233  libatomic/config/linux/arm/store_n.c
  499c9b858ab0b6a31b571f05e2f35da0  libatomic/config/mingw/host-config.h
! 8ec990b5729dca0c1f1460b95e254a3f  libatomic/config/mingw/lock.c
  32947feebf3d4e7e09c04cb9ac2f9cc0  libatomic/config/nvptx/host-config.h
  d095a6f286a5cf65c278619ac9e3ebe9  libatomic/config/nvptx/lock.c
  06a4055a895b52254dbd86a62a16cb0e  libatomic/config/posix/host-config.h
! a8e7ef477674b8a137b3a3cce95ef5ab  libatomic/config/posix/lock.c
  d04f86e742ddfedb71fb4a3d0ceede39  libatomic/config/powerpc/host-config.h
  ae056c7038d61ce6191ec149aee8f69b  libatomic/config/rtems/host-config.h
  08b0225a8b5565ea77c2a80132653b12  libatomic/config/rtems/lock.c
*************** c03a072efac9b30f8f8429ac52fd246b  libato
*** 100464,100470 ****
  8a7308fda7ed1543cb9e3be0f8e47bce  libatomic/testsuite/libatomic.c/atomic-store-5.c
  40618200985a15bcba64f871863da498  libatomic/testsuite/libatomic.c/c.exp
  97b0c9cdfcb733664bdf4efe0f5dc449  libatomic/testsuite/libatomic.c/generic-2.c
! 31d564c6e0d566573c7288dde0b1f3d8  libbacktrace/ChangeLog
  eb3a88b53140eb234a99a4b3a55e56bf  libbacktrace/ChangeLog.jit
  5431de88dcbaf345c8d41207e69831ed  libbacktrace/Makefile.am
  8a9d07c55aa13be8dcb16f5cdfae20f0  libbacktrace/Makefile.in
--- 100850,100856 ----
  8a7308fda7ed1543cb9e3be0f8e47bce  libatomic/testsuite/libatomic.c/atomic-store-5.c
  40618200985a15bcba64f871863da498  libatomic/testsuite/libatomic.c/c.exp
  97b0c9cdfcb733664bdf4efe0f5dc449  libatomic/testsuite/libatomic.c/generic-2.c
! 9fe00aa755eb361e45bbb8c58e6ac984  libbacktrace/ChangeLog
  eb3a88b53140eb234a99a4b3a55e56bf  libbacktrace/ChangeLog.jit
  5431de88dcbaf345c8d41207e69831ed  libbacktrace/Makefile.am
  8a9d07c55aa13be8dcb16f5cdfae20f0  libbacktrace/Makefile.in
*************** a37f48eb7af8f0adfd0a41fe23b724c9  libbac
*** 100513,100519 ****
  7f1f78dcf5b2c12c7827ec55b61d90ac  libbacktrace/xztest.c
  d7bb81957a672df5fc5249dbec0877ec  libbacktrace/zstdtest.c
  586b56fbae916b5d8c89226d03eecbec  libbacktrace/ztest.c
! 77cba6979712b292d173c891ed4a2b08  libcc1/ChangeLog
  d780af7af66b50fb66c1bcf6745b61e2  libcc1/Makefile.am
  4c0714d9e0254b52de979d8acb09c146  libcc1/Makefile.in
  b39668f1b706dbfe7203b3cfa277b792  libcc1/aclocal.m4
--- 100899,100905 ----
  7f1f78dcf5b2c12c7827ec55b61d90ac  libbacktrace/xztest.c
  d7bb81957a672df5fc5249dbec0877ec  libbacktrace/zstdtest.c
  586b56fbae916b5d8c89226d03eecbec  libbacktrace/ztest.c
! 7d9cacbe5d1076ae190e60b557e8d1b9  libcc1/ChangeLog
  d780af7af66b50fb66c1bcf6745b61e2  libcc1/Makefile.am
  4c0714d9e0254b52de979d8acb09c146  libcc1/Makefile.in
  b39668f1b706dbfe7203b3cfa277b792  libcc1/aclocal.m4
*************** d0eb9eb0a1908e5adeca21c5333cca67  libcc1
*** 100550,100556 ****
  8e32b4f309146e8842db7a077d77be28  libcody/CMakeLists.txt
  c96a56ec7f0400e30e99a9aa445e0425  libcody/CODING.md
  b5243c8c76fc965a409394a30679e613  libcody/CONTRIB.md
! 728ecf1f4ab27ee5be10b0bb8a6a892c  libcody/ChangeLog
  86d3f3a95c324c9479bd8986968f4327  libcody/LICENSE
  ba83ee39cdf97b35fb51d4f39880aa89  libcody/Makefile.in
  ca1c6fe3df5427016005ce753c73d454  libcody/README.md
--- 100936,100942 ----
  8e32b4f309146e8842db7a077d77be28  libcody/CMakeLists.txt
  c96a56ec7f0400e30e99a9aa445e0425  libcody/CODING.md
  b5243c8c76fc965a409394a30679e613  libcody/CONTRIB.md
! 1153674fa49f5d3c92f8e056b2c6acf6  libcody/ChangeLog
  86d3f3a95c324c9479bd8986968f4327  libcody/LICENSE
  ba83ee39cdf97b35fb51d4f39880aa89  libcody/Makefile.in
  ca1c6fe3df5427016005ce753c73d454  libcody/README.md
*************** cffdeae41b78da05839b193e90188f55  libcod
*** 100569,100575 ****
  6419dfc879387358e95288142e569914  libcody/packet.cc
  688ece05c8b9d378b3df186808162e76  libcody/resolver.cc
  b1f3850fc5ac62999d1e124aa6f76531  libcody/server.cc
! beb13a934a307a8b1f6a22ecb8764dd5  libcpp/ChangeLog
  2bd831b17997584e38305782cebe6948  libcpp/ChangeLog.jit
  c0a6ef2c7117069e80a305c7adaf1650  libcpp/Makefile.in
  9d15bb14e9ac1a74366e673ea260722e  libcpp/aclocal.m4
--- 100955,100961 ----
  6419dfc879387358e95288142e569914  libcody/packet.cc
  688ece05c8b9d378b3df186808162e76  libcody/resolver.cc
  b1f3850fc5ac62999d1e124aa6f76531  libcody/server.cc
! e55f48359f5ae93517911eb90e2a5c88  libcpp/ChangeLog
  2bd831b17997584e38305782cebe6948  libcpp/ChangeLog.jit
  c0a6ef2c7117069e80a305c7adaf1650  libcpp/Makefile.in
  9d15bb14e9ac1a74366e673ea260722e  libcpp/aclocal.m4
*************** a91fac880a6d16a6c8bbbe6c25e2d8ac  libcpp
*** 100589,100595 ****
  fdb620c15e6f934b317e2311ee26683e  libcpp/include/symtab.h
  72502fd7910efaafd6e57090d597fb21  libcpp/init.cc
  9b75a240393d9ded89f1f53f8bde743e  libcpp/internal.h
! dafb1678aedc8ed0aabfdd6405959d2f  libcpp/lex.cc
  9069946f6da4520e2be3263aba1fc15b  libcpp/line-map.cc
  46a07100f95f5e354c7e25cd19d26884  libcpp/location-example.txt
  ff413cbf5d61faa394a5ab2ef711257d  libcpp/macro.cc
--- 100975,100981 ----
  fdb620c15e6f934b317e2311ee26683e  libcpp/include/symtab.h
  72502fd7910efaafd6e57090d597fb21  libcpp/init.cc
  9b75a240393d9ded89f1f53f8bde743e  libcpp/internal.h
! f6d10ef1f47671a4482f3cf888ded146  libcpp/lex.cc
  9069946f6da4520e2be3263aba1fc15b  libcpp/line-map.cc
  46a07100f95f5e354c7e25cd19d26884  libcpp/location-example.txt
  ff413cbf5d61faa394a5ab2ef711257d  libcpp/macro.cc
*************** ab776697d1c83f80b45ce82ce889ce27  libcpp
*** 100597,100603 ****
  8200bcdbc955945f7651606e2f838c81  libcpp/makeuname2c.cc
  5db6ce86211354562c9ae6339d3716ea  libcpp/mkdeps.cc
  d127e0980eecd90c5bbb6bcad6d44d9d  libcpp/pch.cc
! 33dcf22ada8ea8b3d02f23affe665a56  libcpp/po/ChangeLog
  768453cca0d8c0e2666a269e0aff862b  libcpp/po/be.gmo
  a2192a718d535196be1091cf9c6c2ff5  libcpp/po/be.po
  6d54c123e102174620d1738492df73d5  libcpp/po/ca.gmo
--- 100983,100989 ----
  8200bcdbc955945f7651606e2f838c81  libcpp/makeuname2c.cc
  5db6ce86211354562c9ae6339d3716ea  libcpp/mkdeps.cc
  d127e0980eecd90c5bbb6bcad6d44d9d  libcpp/pch.cc
! a1a555ee8b54179bb8df913c9db9dbdb  libcpp/po/ChangeLog
  768453cca0d8c0e2666a269e0aff862b  libcpp/po/be.gmo
  a2192a718d535196be1091cf9c6c2ff5  libcpp/po/be.po
  6d54c123e102174620d1738492df73d5  libcpp/po/ca.gmo
*************** d45cfd418abb46cfdbba624667399ae9  libcpp
*** 100652,100658 ****
  1bc7c82d10193a95f2d52ac65a96b194  libcpp/ucnid.tab
  ac39f0cc87f289263a76afc28c45d47b  libcpp/uname2c.h
  a6c2b3de06c7424706b16f4c206396a1  libdecnumber/.gitignore
! cc4ecb0bb16f340eff9653cf49be3665  libdecnumber/ChangeLog
  2bd831b17997584e38305782cebe6948  libdecnumber/ChangeLog.jit
  c940ed5e883906ebe7e673a41403f6a8  libdecnumber/Makefile.in
  2a70099a79e40a57a666d5430a5e2529  libdecnumber/aclocal.m4
--- 101038,101044 ----
  1bc7c82d10193a95f2d52ac65a96b194  libcpp/ucnid.tab
  ac39f0cc87f289263a76afc28c45d47b  libcpp/uname2c.h
  a6c2b3de06c7424706b16f4c206396a1  libdecnumber/.gitignore
! a7f7eca108bf01babbb7db7815d50a41  libdecnumber/ChangeLog
  2bd831b17997584e38305782cebe6948  libdecnumber/ChangeLog.jit
  c940ed5e883906ebe7e673a41403f6a8  libdecnumber/Makefile.in
  2a70099a79e40a57a666d5430a5e2529  libdecnumber/aclocal.m4
*************** a97c47969dfc92a7666dfe3c2e1e1448  libdec
*** 100716,100722 ****
  5c5101362d0b5ad6cce073da470594f8  libdecnumber/dpd/decimal64.h
  0f6db29710e7075c2fd62bc4478b3b8d  libdecnumber/dpd/decimal64Symbols.h
  055606b47e85369c5d003f6e3a1b657e  libffi/.gitattributes
! 586c0b97cafb6512a72e38a0290bd340  libffi/ChangeLog
  0e38ead823643c45765e5fe55e7ab16b  libffi/ChangeLog.libffi
  fbbc216bc25d759a72ea3e6d734af56b  libffi/ChangeLog.libgcj
  d946d2b97454ad50a1dbfbf48923c5be  libffi/ChangeLog.v1
--- 101102,101108 ----
  5c5101362d0b5ad6cce073da470594f8  libdecnumber/dpd/decimal64.h
  0f6db29710e7075c2fd62bc4478b3b8d  libdecnumber/dpd/decimal64Symbols.h
  055606b47e85369c5d003f6e3a1b657e  libffi/.gitattributes
! 7a7104221e15c27b4f58686628447abe  libffi/ChangeLog
  0e38ead823643c45765e5fe55e7ab16b  libffi/ChangeLog.libffi
  fbbc216bc25d759a72ea3e6d734af56b  libffi/ChangeLog.libgcj
  d946d2b97454ad50a1dbfbf48923c5be  libffi/ChangeLog.v1
*************** b65906677faeb64d5b833fe9c2963544  libffi
*** 100735,100740 ****
--- 101121,101127 ----
  dbd21d77c2acf20037c7e2e16de7a70c  libffi/configure.ac
  b2dbb88c38d08a37b89fc9ed08e79538  libffi/configure.host
  bad91ff01547ce79fe537211f4763ac0  libffi/doc/Makefile.am
+ 20ebc69e7e1224fe9bf01a9f9b85e674  libffi/doc/libffi.info
  db28be3951c18d6db6e90f7e612bc67b  libffi/doc/libffi.texi
  0c1453cd8505c0c665c9194ef9d7f529  libffi/doc/version.texi
  ea125d6ff0b3d20372a1556f82ca6a05  libffi/fficonfig.h.in
*************** a3eb5dee2788fe0a6c42502ba658eddd  libffi
*** 101109,101117 ****
  0f3c94e520870e194cf525de7ec404dc  libffi/testsuite/libffi.go/ffitest.h
  6cfb66c1c00023abb2c2276d85f16e77  libffi/testsuite/libffi.go/go.exp
  189dc193fd0e627a2d55b2e84871edc5  libffi/testsuite/libffi.go/static-chain.h
! abbc05b83bea328ad98078530d18aa63  libgcc/ChangeLog
  dbe2f0a8ebc3b4337505e8aafc2e59e6  libgcc/Makefile.in
! 91d32ac9ac139b4db00764d4627c5efa  libgcc/config.host
  312fccd8251056a36e26bad71f9cfaa2  libgcc/config.in
  65f4c5be67642a2f7d2323a197380435  libgcc/config/aarch64/aarch64-unwind.h
  bb23301cb30f10c0745c9333199557ae  libgcc/config/aarch64/crtfastmath.c
--- 101496,101504 ----
  0f3c94e520870e194cf525de7ec404dc  libffi/testsuite/libffi.go/ffitest.h
  6cfb66c1c00023abb2c2276d85f16e77  libffi/testsuite/libffi.go/go.exp
  189dc193fd0e627a2d55b2e84871edc5  libffi/testsuite/libffi.go/static-chain.h
! 5f884fa82d11d6eae0f38e3d4bb6758f  libgcc/ChangeLog
  dbe2f0a8ebc3b4337505e8aafc2e59e6  libgcc/Makefile.in
! 94c3955cfe980da8d8f4273289b4077a  libgcc/config.host
  312fccd8251056a36e26bad71f9cfaa2  libgcc/config.in
  65f4c5be67642a2f7d2323a197380435  libgcc/config/aarch64/aarch64-unwind.h
  bb23301cb30f10c0745c9333199557ae  libgcc/config/aarch64/crtfastmath.c
*************** e653acc82cec8a8d48b70a87c637b25e  libgcc
*** 101199,101205 ****
  b3675139f61a988317e855285d68c39c  libgcc/config/arm/bpabi.S
  689b1eb6eeb7b0d0d40e509445aca4d5  libgcc/config/arm/bpabi.c
  1811f328b8e791c4500486f1c4ce59a5  libgcc/config/arm/cmse.c
! fd93ba734717b35e7126f2bd7e95a8c6  libgcc/config/arm/cmse_nonsecure_call.S
  54adcd7dd7f8ddd86b027fd2049d8659  libgcc/config/arm/crtfastmath.c
  1d87a3635df0978917fe0df01b07e636  libgcc/config/arm/crti.S
  88893d121300859529fbe270573faafc  libgcc/config/arm/crtn.S
--- 101586,101592 ----
  b3675139f61a988317e855285d68c39c  libgcc/config/arm/bpabi.S
  689b1eb6eeb7b0d0d40e509445aca4d5  libgcc/config/arm/bpabi.c
  1811f328b8e791c4500486f1c4ce59a5  libgcc/config/arm/cmse.c
! d8712065861b21b5f96d7c982d3408da  libgcc/config/arm/cmse_nonsecure_call.S
  54adcd7dd7f8ddd86b027fd2049d8659  libgcc/config/arm/crtfastmath.c
  1d87a3635df0978917fe0df01b07e636  libgcc/config/arm/crti.S
  88893d121300859529fbe270573faafc  libgcc/config/arm/crtn.S
*************** d3a9f35aa3368d1b42549e9f573b7f19  libgcc
*** 101237,101243 ****
  660f8302d8422ba8cf16712c84a2bde0  libgcc/config/avr/lib1funcs.S
  622f81485f02d0eac2caaafa7d3a2fd1  libgcc/config/avr/lib2-object.mk
  624dc6fc660cb976b810335b3730ec59  libgcc/config/avr/lib2funcs.c
! 9d9229a51f143cc3de266fe7d87ec77d  libgcc/config/avr/libf7/ChangeLog
  69b1e41bdec3b286de0827697e4b6acd  libgcc/config/avr/libf7/asm-defs.h
  434f68c401e93814081ae499ba72ffaf  libgcc/config/avr/libf7/f7-renames.h
  ec0383052925c464decb1bfdeaa5c95c  libgcc/config/avr/libf7/f7-wraps.h
--- 101624,101630 ----
  660f8302d8422ba8cf16712c84a2bde0  libgcc/config/avr/lib1funcs.S
  622f81485f02d0eac2caaafa7d3a2fd1  libgcc/config/avr/lib2-object.mk
  624dc6fc660cb976b810335b3730ec59  libgcc/config/avr/lib2funcs.c
! 4241d61a93883e73a622f9f1ca7d1885  libgcc/config/avr/libf7/ChangeLog
  69b1e41bdec3b286de0827697e4b6acd  libgcc/config/avr/libf7/asm-defs.h
  434f68c401e93814081ae499ba72ffaf  libgcc/config/avr/libf7/f7-renames.h
  ec0383052925c464decb1bfdeaa5c95c  libgcc/config/avr/libf7/f7-wraps.h
*************** c0d4a5a9b2844505ec941ff60cae008f  libgcc
*** 101245,101256 ****
  8df828b3d2faf7a35d58170a9bafa333  libgcc/config/avr/libf7/f7wraps.sh
  929b89a7da7c3071631792a97bbda961  libgcc/config/avr/libf7/libf7-array.def
  5d9def53110ec07e8f29e66d593d758f  libgcc/config/avr/libf7/libf7-asm-object.mk
! 103b94d807e255f7a98d28b6f6d9e24f  libgcc/config/avr/libf7/libf7-asm.sx
  6b4886ae302fca1fa733831066c5c830  libgcc/config/avr/libf7/libf7-c-object.mk
  47dccabf16372b55fb7154bd70ce141f  libgcc/config/avr/libf7/libf7-common.mk
  abb1c90068e1f456d0639bcaa1cc4a94  libgcc/config/avr/libf7/libf7-const.def
  be57c709e03ea165307e79182d605104  libgcc/config/avr/libf7/libf7-constdef.h
! 424c1c5d2ea745ccabf8ccfc22e5eea2  libgcc/config/avr/libf7/libf7.c
  ca86a4c7e23f8a5616f937c913d8e5bf  libgcc/config/avr/libf7/libf7.h
  606c568e8f2d692bc5762eaba8d8e7b0  libgcc/config/avr/libf7/t-libf7
  bf9360cfc14e0b0129af5560893f374e  libgcc/config/avr/libf7/t-libf7-math
--- 101632,101643 ----
  8df828b3d2faf7a35d58170a9bafa333  libgcc/config/avr/libf7/f7wraps.sh
  929b89a7da7c3071631792a97bbda961  libgcc/config/avr/libf7/libf7-array.def
  5d9def53110ec07e8f29e66d593d758f  libgcc/config/avr/libf7/libf7-asm-object.mk
! 508c8be98af26874d031b6b77b89a761  libgcc/config/avr/libf7/libf7-asm.sx
  6b4886ae302fca1fa733831066c5c830  libgcc/config/avr/libf7/libf7-c-object.mk
  47dccabf16372b55fb7154bd70ce141f  libgcc/config/avr/libf7/libf7-common.mk
  abb1c90068e1f456d0639bcaa1cc4a94  libgcc/config/avr/libf7/libf7-const.def
  be57c709e03ea165307e79182d605104  libgcc/config/avr/libf7/libf7-constdef.h
! c0daae88e1f82342cb30acbb3a42ad7d  libgcc/config/avr/libf7/libf7.c
  ca86a4c7e23f8a5616f937c913d8e5bf  libgcc/config/avr/libf7/libf7.h
  606c568e8f2d692bc5762eaba8d8e7b0  libgcc/config/avr/libf7/t-libf7
  bf9360cfc14e0b0129af5560893f374e  libgcc/config/avr/libf7/t-libf7-math
*************** c648b3441acf03960443d5a3d1b7e4d7  libgcc
*** 101472,101478 ****
  c6afe173595c17ffb20e9c76a90f5158  libgcc/config/i386/t-crtstuff
  9bd719f83d655207581528ab5e7b7354  libgcc/config/i386/t-cygming
  a56b9c84f7b8c5427982b9c1ac4d0268  libgcc/config/i386/t-cygwin
! ab24e8c90feb5a86f9ff59988a9bcc43  libgcc/config/i386/t-darwin
  2005c91878a4a69d60c9418077eefa97  libgcc/config/i386/t-dlldir
  0a87d076e42adda36ab55bbaaac59649  libgcc/config/i386/t-dlldir-x
  68adad1226ee1737a6a8d12b84a63297  libgcc/config/i386/t-dragonfly
--- 101859,101865 ----
  c6afe173595c17ffb20e9c76a90f5158  libgcc/config/i386/t-crtstuff
  9bd719f83d655207581528ab5e7b7354  libgcc/config/i386/t-cygming
  a56b9c84f7b8c5427982b9c1ac4d0268  libgcc/config/i386/t-cygwin
! e831a13e330d0eb6ffa779c755d5fe3d  libgcc/config/i386/t-darwin
  2005c91878a4a69d60c9418077eefa97  libgcc/config/i386/t-dlldir
  0a87d076e42adda36ab55bbaaac59649  libgcc/config/i386/t-dlldir-x
  68adad1226ee1737a6a8d12b84a63297  libgcc/config/i386/t-dragonfly
*************** b3c219e3fe7be0926b9c45521b07ca2a  libgcc
*** 101530,101536 ****
  d528fa6fb472c8cbd6b9df08a8d0a244  libgcc/config/ia64/vms-unwind.h
  f998607b97eeae6d2a3d1e10128c7cb1  libgcc/config/iq2000/lib2funcs.c
  102f7dad8ad6b54434a1b8313d1e42c4  libgcc/config/iq2000/t-iq2000
! b9837c52c1a0b242d3a4d64d3aef1824  libgcc/config/libbid/ChangeLog
  e354955f92ec07ad37a62cd940b9001b  libgcc/config/libbid/_addsub_dd.c
  b89183791201be7d372019b758b007bb  libgcc/config/libbid/_addsub_sd.c
  a4d88b5941b22be078d1fb782e621350  libgcc/config/libbid/_addsub_td.c
--- 101917,101923 ----
  d528fa6fb472c8cbd6b9df08a8d0a244  libgcc/config/ia64/vms-unwind.h
  f998607b97eeae6d2a3d1e10128c7cb1  libgcc/config/iq2000/lib2funcs.c
  102f7dad8ad6b54434a1b8313d1e42c4  libgcc/config/iq2000/t-iq2000
! a9c9cf1fb9ea1725d713e877f231161a  libgcc/config/libbid/ChangeLog
  e354955f92ec07ad37a62cd940b9001b  libgcc/config/libbid/_addsub_dd.c
  b89183791201be7d372019b758b007bb  libgcc/config/libbid/_addsub_sd.c
  a4d88b5941b22be078d1fb782e621350  libgcc/config/libbid/_addsub_td.c
*************** d1b33e021d547f29de7264898f30b39e  libgcc
*** 102252,102258 ****
  db2d53d612d8d902893f509f83b8b708  libgcc/config/rs6000/sol-cn.S
  3fa6bf8673b3a7fa2278aeb2fe1824f4  libgcc/config/rs6000/t-aix-cxa
  0d6637a7e112c021e7ce371918c7659c  libgcc/config/rs6000/t-crtstuff
! b780b81d7bccdf7af090dbcd3e639dd1  libgcc/config/rs6000/t-darwin
  a8ea28c94f3264c3602a98b4728fed82  libgcc/config/rs6000/t-darwin-ehs
  a0014912b4b08cfbe887d9945460e370  libgcc/config/rs6000/t-darwin64
  01de3124b53eff3c5b115f34ba5434c1  libgcc/config/rs6000/t-e500v1-fp
--- 102639,102645 ----
  db2d53d612d8d902893f509f83b8b708  libgcc/config/rs6000/sol-cn.S
  3fa6bf8673b3a7fa2278aeb2fe1824f4  libgcc/config/rs6000/t-aix-cxa
  0d6637a7e112c021e7ce371918c7659c  libgcc/config/rs6000/t-crtstuff
! bc91baf0523c8475334ca80d6ff265c4  libgcc/config/rs6000/t-darwin
  a8ea28c94f3264c3602a98b4728fed82  libgcc/config/rs6000/t-darwin-ehs
  a0014912b4b08cfbe887d9945460e370  libgcc/config/rs6000/t-darwin64
  01de3124b53eff3c5b115f34ba5434c1  libgcc/config/rs6000/t-e500v1-fp
*************** f199b38114ce849b77b38bd475d72cff  libgcc
*** 102351,102356 ****
--- 102738,102744 ----
  060a49bb5c4a53a2125123d4cbd571de  libgcc/config/t-crtstuff-pic
  fc8b2970727885119792967fb3344fda  libgcc/config/t-darwin
  f699f9e7159ba2c6033406086c5c8299  libgcc/config/t-darwin-ehs
+ 1b055dd68e433300709a246c1b88d25b  libgcc/config/t-darwin-libgccs1
  5f05c653ae1e197bae3fc3fc5ca1e59d  libgcc/config/t-darwin-min-1
  d8138086c2f686d6fb17804f19019954  libgcc/config/t-darwin-min-5
  830793a6b0d554dc6c4495bc27a0c9e3  libgcc/config/t-darwin-min-8
*************** cf3c5b6953d6faf993393bda407b4fc5  libgcc
*** 102607,102613 ****
  c52111328a177e0b1addfc9d6d294923  libgcc/unwind-c.c
  46542b765754d0b49060c9f5e3ecd6b6  libgcc/unwind-compat.c
  7044f5eb123a3753a5f52e5efe651fb3  libgcc/unwind-compat.h
! 31b15a852af79aea6a26219bbf10ae04  libgcc/unwind-dw2-btree.h
  2cb9cc7b172c9e705a5ddcd8eb85b84a  libgcc/unwind-dw2-execute_cfa.h
  aca8a62f2fbdbe43c1346aee0c0a45d8  libgcc/unwind-dw2-fde-compat.c
  b692b7b9c6ddcbd8540373af0f341850  libgcc/unwind-dw2-fde-dip.c
--- 102995,103001 ----
  c52111328a177e0b1addfc9d6d294923  libgcc/unwind-c.c
  46542b765754d0b49060c9f5e3ecd6b6  libgcc/unwind-compat.c
  7044f5eb123a3753a5f52e5efe651fb3  libgcc/unwind-compat.h
! 9fda9235764e14b38d5b97b52ffe84c6  libgcc/unwind-dw2-btree.h
  2cb9cc7b172c9e705a5ddcd8eb85b84a  libgcc/unwind-dw2-execute_cfa.h
  aca8a62f2fbdbe43c1346aee0c0a45d8  libgcc/unwind-dw2-fde-compat.c
  b692b7b9c6ddcbd8540373af0f341850  libgcc/unwind-dw2-fde-dip.c
*************** bc0d3012b8b7835b6369ac8efc9b08a8  libgcc
*** 102624,102630 ****
  afca86d4e2ebcbd002c0967889bca65c  libgcc/vtv_end_preinit.c
  120570d3d00f2719ceb16accb59b9502  libgcc/vtv_start.c
  0c268e8e6df76a1dc94c1bc709707a5a  libgcc/vtv_start_preinit.c
! 0a41dd6146b71dafb41eefedb514f723  libgfortran/ChangeLog
  9aca36338382e5b4b730e7779170b24d  libgfortran/ChangeLog-2002
  80d3edc880c2da0b7a2beec2e2c4f774  libgfortran/ChangeLog-2003
  9f0239429993a5e64ed793eb6c55a5c1  libgfortran/ChangeLog-2004
--- 103012,103018 ----
  afca86d4e2ebcbd002c0967889bca65c  libgcc/vtv_end_preinit.c
  120570d3d00f2719ceb16accb59b9502  libgcc/vtv_start.c
  0c268e8e6df76a1dc94c1bc709707a5a  libgcc/vtv_start_preinit.c
! f2d92dff53007cb00247d67b22e97a8d  libgfortran/ChangeLog
  9aca36338382e5b4b730e7779170b24d  libgfortran/ChangeLog-2002
  80d3edc880c2da0b7a2beec2e2c4f774  libgfortran/ChangeLog-2003
  9f0239429993a5e64ed793eb6c55a5c1  libgfortran/ChangeLog-2004
*************** b17bec84859ecfc3e6361f3795750935  libgfo
*** 102956,102963 ****
  9dc10294a79c01169b166619221e4888  libgfortran/generated/findloc1_r8.c
  0c7973abab4cce435527dabb6f6a36b8  libgfortran/generated/findloc1_s1.c
  39f26bb8daec1525d659ceb5dfb1ddee  libgfortran/generated/findloc1_s4.c
! 2ebf8ac4fe4f3a5d7faf3ee1e009d94f  libgfortran/generated/findloc2_s1.c
! cdeda0cf3d38dd5600e24d6c6ee38b50  libgfortran/generated/findloc2_s4.c
  f2c87a8fd888ec762983474a516b5b3e  libgfortran/generated/iall_i1.c
  48bbbc3d75942a4a496d90c0a17b808b  libgfortran/generated/iall_i16.c
  fa94a0c0bae4eeb22b2c3614cc501eeb  libgfortran/generated/iall_i2.c
--- 103344,103351 ----
  9dc10294a79c01169b166619221e4888  libgfortran/generated/findloc1_r8.c
  0c7973abab4cce435527dabb6f6a36b8  libgfortran/generated/findloc1_s1.c
  39f26bb8daec1525d659ceb5dfb1ddee  libgfortran/generated/findloc1_s4.c
! 7e66bb31bcd066705da6903b12fb57bc  libgfortran/generated/findloc2_s1.c
! 895ebfa3076c93efa7f7253c207ac694  libgfortran/generated/findloc2_s4.c
  f2c87a8fd888ec762983474a516b5b3e  libgfortran/generated/iall_i1.c
  48bbbc3d75942a4a496d90c0a17b808b  libgfortran/generated/iall_i16.c
  fa94a0c0bae4eeb22b2c3614cc501eeb  libgfortran/generated/iall_i2.c
*************** af8b1fcf0e5fb45ecb5a260c75c8d2db  libgfo
*** 103082,103089 ****
  05c9be3731f34eb49120c390a4c7cb13  libgfortran/generated/maxloc1_16_r17.c
  021b61bee81b13679b8e9aedb57e2b89  libgfortran/generated/maxloc1_16_r4.c
  28977f2fb2e6352955731dcfe8608a17  libgfortran/generated/maxloc1_16_r8.c
! fd64b52796c07636f28eac8f498f2878  libgfortran/generated/maxloc1_16_s1.c
! 39bdebdb23f92f8d18267d8b14453cc1  libgfortran/generated/maxloc1_16_s4.c
  21944c5afaf8b0fd5a0d8934ff422fd7  libgfortran/generated/maxloc1_4_i1.c
  b3317239defd2308a3481c704c2912e0  libgfortran/generated/maxloc1_4_i16.c
  4e32fafca96b9b37c24236457ffdc9d9  libgfortran/generated/maxloc1_4_i2.c
--- 103470,103477 ----
  05c9be3731f34eb49120c390a4c7cb13  libgfortran/generated/maxloc1_16_r17.c
  021b61bee81b13679b8e9aedb57e2b89  libgfortran/generated/maxloc1_16_r4.c
  28977f2fb2e6352955731dcfe8608a17  libgfortran/generated/maxloc1_16_r8.c
! aa95c29d3c4dec2b0328f725ebdb328b  libgfortran/generated/maxloc1_16_s1.c
! b8c8ad0b7e334af9e9e012d9f2453898  libgfortran/generated/maxloc1_16_s4.c
  21944c5afaf8b0fd5a0d8934ff422fd7  libgfortran/generated/maxloc1_4_i1.c
  b3317239defd2308a3481c704c2912e0  libgfortran/generated/maxloc1_4_i16.c
  4e32fafca96b9b37c24236457ffdc9d9  libgfortran/generated/maxloc1_4_i2.c
*************** e3511ed8efbcbabc153ba36f5d746dec  libgfo
*** 103094,103101 ****
  e132f12f22498e6e1c7e3803c8b559a2  libgfortran/generated/maxloc1_4_r17.c
  564eb2eff62a565351dd06e689d2ef24  libgfortran/generated/maxloc1_4_r4.c
  c77bdbc8c95d9eb99d9f80224ac8bbf2  libgfortran/generated/maxloc1_4_r8.c
! 20c3167bf09d430f9b515e4bbace81ff  libgfortran/generated/maxloc1_4_s1.c
! 33938b76fe5302306ebbedb8875d4460  libgfortran/generated/maxloc1_4_s4.c
  2b4d8e914fe07cd9fc572ed9bf6cd517  libgfortran/generated/maxloc1_8_i1.c
  5893625de37006fe4dddbadaaf5b3d32  libgfortran/generated/maxloc1_8_i16.c
  3099bb099a36b29a7fa4306d0d648874  libgfortran/generated/maxloc1_8_i2.c
--- 103482,103489 ----
  e132f12f22498e6e1c7e3803c8b559a2  libgfortran/generated/maxloc1_4_r17.c
  564eb2eff62a565351dd06e689d2ef24  libgfortran/generated/maxloc1_4_r4.c
  c77bdbc8c95d9eb99d9f80224ac8bbf2  libgfortran/generated/maxloc1_4_r8.c
! 2ad1f03a28f316059c82c05520f500f7  libgfortran/generated/maxloc1_4_s1.c
! 556794c6aee31a5bcf3f4070044e1778  libgfortran/generated/maxloc1_4_s4.c
  2b4d8e914fe07cd9fc572ed9bf6cd517  libgfortran/generated/maxloc1_8_i1.c
  5893625de37006fe4dddbadaaf5b3d32  libgfortran/generated/maxloc1_8_i16.c
  3099bb099a36b29a7fa4306d0d648874  libgfortran/generated/maxloc1_8_i2.c
*************** abf097816deff1be5afefde10ce29ae4  libgfo
*** 103106,103119 ****
  7df711d3ff7b66135e05f73a73f187ab  libgfortran/generated/maxloc1_8_r17.c
  e9437e99605734d36484747b502360f6  libgfortran/generated/maxloc1_8_r4.c
  3126b1ac1e3976b7235dd8ff40fccb8f  libgfortran/generated/maxloc1_8_r8.c
! d5c7f0d3f1f0ec34200826416f1042d4  libgfortran/generated/maxloc1_8_s1.c
! 000f09a20ff21083bc750980ba8ba91b  libgfortran/generated/maxloc1_8_s4.c
! 0c8abb0fb05447a0b92d11d827246d90  libgfortran/generated/maxloc2_16_s1.c
! cd51ec9b12d060f3af99427f284b4dd9  libgfortran/generated/maxloc2_16_s4.c
! 0d4068e49e159e5c6cff51c5e01c2d27  libgfortran/generated/maxloc2_4_s1.c
! 836a5c96016d42e47bb9394ecd6c377f  libgfortran/generated/maxloc2_4_s4.c
! 63a3de8507ec3a35d76ec81e0e0355ec  libgfortran/generated/maxloc2_8_s1.c
! dd8c37353f332e3e3f852a24506f5814  libgfortran/generated/maxloc2_8_s4.c
  888a839abf66f62f2e94d40bf6c64768  libgfortran/generated/maxval0_s1.c
  2f58aec33f4f8ce2350807f0efbad310  libgfortran/generated/maxval0_s4.c
  549184878780f448c93745f85c3923bd  libgfortran/generated/maxval1_s1.c
--- 103494,103507 ----
  7df711d3ff7b66135e05f73a73f187ab  libgfortran/generated/maxloc1_8_r17.c
  e9437e99605734d36484747b502360f6  libgfortran/generated/maxloc1_8_r4.c
  3126b1ac1e3976b7235dd8ff40fccb8f  libgfortran/generated/maxloc1_8_r8.c
! d63bb5819d6cfa98bdf4e841164fb89f  libgfortran/generated/maxloc1_8_s1.c
! 000c2daca32982c4008efd42fd12921a  libgfortran/generated/maxloc1_8_s4.c
! f76787805ae51b1cd758edc2e9ffca65  libgfortran/generated/maxloc2_16_s1.c
! 0889481d87a184d6854d3ea7dd5b6ffc  libgfortran/generated/maxloc2_16_s4.c
! a38a527e63b0f2dd56186f040edb8b43  libgfortran/generated/maxloc2_4_s1.c
! 7446a295245ddd80f54ec08a0f92aeaf  libgfortran/generated/maxloc2_4_s4.c
! 5c62b4905d61c969dde4783dec3d8233  libgfortran/generated/maxloc2_8_s1.c
! 3e4e8bc62f4cf04e1f23adb0b8e5362f  libgfortran/generated/maxloc2_8_s4.c
  888a839abf66f62f2e94d40bf6c64768  libgfortran/generated/maxval0_s1.c
  2f58aec33f4f8ce2350807f0efbad310  libgfortran/generated/maxval0_s4.c
  549184878780f448c93745f85c3923bd  libgfortran/generated/maxval1_s1.c
*************** c9fb11ec052ea2c8fd61cafd1b237212  libgfo
*** 103174,103181 ****
  dce014d809712c190ac967ab8b6e9c18  libgfortran/generated/minloc1_16_r17.c
  4fc5cf276fc63eb0d9fed8291e5f1a2a  libgfortran/generated/minloc1_16_r4.c
  2500c58ae5b6bbb4f607ce06203ce829  libgfortran/generated/minloc1_16_r8.c
! 56d351a8ad8acc9f87df6ce2a4d204c3  libgfortran/generated/minloc1_16_s1.c
! dce8a9b6ee41a5df12f014db141bc5c5  libgfortran/generated/minloc1_16_s4.c
  10bccc05a67c476cf3e9f78a2dd0e925  libgfortran/generated/minloc1_4_i1.c
  1ee06ea0623a3e012fb8d28566b379af  libgfortran/generated/minloc1_4_i16.c
  058229ead5bfd94ce11097b14f793e15  libgfortran/generated/minloc1_4_i2.c
--- 103562,103569 ----
  dce014d809712c190ac967ab8b6e9c18  libgfortran/generated/minloc1_16_r17.c
  4fc5cf276fc63eb0d9fed8291e5f1a2a  libgfortran/generated/minloc1_16_r4.c
  2500c58ae5b6bbb4f607ce06203ce829  libgfortran/generated/minloc1_16_r8.c
! a413f5778c4612cc3c3cd1d7cbe7e442  libgfortran/generated/minloc1_16_s1.c
! fcd7a593db717bca5c29eb1b83dc2fe9  libgfortran/generated/minloc1_16_s4.c
  10bccc05a67c476cf3e9f78a2dd0e925  libgfortran/generated/minloc1_4_i1.c
  1ee06ea0623a3e012fb8d28566b379af  libgfortran/generated/minloc1_4_i16.c
  058229ead5bfd94ce11097b14f793e15  libgfortran/generated/minloc1_4_i2.c
*************** c7cbe7b071bdff9131364a805b4d3d4b  libgfo
*** 103186,103193 ****
  201c44330f3a1d2542b6d571c34bab83  libgfortran/generated/minloc1_4_r17.c
  2c228529be8be60937599b049da110be  libgfortran/generated/minloc1_4_r4.c
  23b471f0f0fe5f5d75022c6b20f2d274  libgfortran/generated/minloc1_4_r8.c
! 23b1849e5e02207be34fbdaea8a155b2  libgfortran/generated/minloc1_4_s1.c
! fbd75534a59b1a3dfd3486e467c3be91  libgfortran/generated/minloc1_4_s4.c
  b641ddb490394565d7a830c07f48f975  libgfortran/generated/minloc1_8_i1.c
  4272f4c2b2091243f3ffd2aee54a70a2  libgfortran/generated/minloc1_8_i16.c
  914a9536ec8d20599b0bb44d2f5fb99d  libgfortran/generated/minloc1_8_i2.c
--- 103574,103581 ----
  201c44330f3a1d2542b6d571c34bab83  libgfortran/generated/minloc1_4_r17.c
  2c228529be8be60937599b049da110be  libgfortran/generated/minloc1_4_r4.c
  23b471f0f0fe5f5d75022c6b20f2d274  libgfortran/generated/minloc1_4_r8.c
! 34666b0bfe964fd5c58c31e12ba17b54  libgfortran/generated/minloc1_4_s1.c
! 22b421dacce7762e93d865c79dd730ba  libgfortran/generated/minloc1_4_s4.c
  b641ddb490394565d7a830c07f48f975  libgfortran/generated/minloc1_8_i1.c
  4272f4c2b2091243f3ffd2aee54a70a2  libgfortran/generated/minloc1_8_i16.c
  914a9536ec8d20599b0bb44d2f5fb99d  libgfortran/generated/minloc1_8_i2.c
*************** e02bfc3b9609ddf8d82d22f8a6c570a8  libgfo
*** 103198,103211 ****
  99eac5f7dcd17e2cd13149fadbeee8cf  libgfortran/generated/minloc1_8_r17.c
  7342f1eddca71ac143e933007d702136  libgfortran/generated/minloc1_8_r4.c
  6b85ef54d48ef114dc6090908b959168  libgfortran/generated/minloc1_8_r8.c
! c610bd030db897e607082d6fdc9aafb6  libgfortran/generated/minloc1_8_s1.c
! ff928f0ee754312e6503df160b8de4f1  libgfortran/generated/minloc1_8_s4.c
! 97d35d4ff6066478cba83a8bcc9b2237  libgfortran/generated/minloc2_16_s1.c
! 52b807d11f0f6fe902d330b4dd390dab  libgfortran/generated/minloc2_16_s4.c
! 0018c0cedc55aa5a53739307824f3d25  libgfortran/generated/minloc2_4_s1.c
! 1f053b21a2d0c113a582f5745421e68f  libgfortran/generated/minloc2_4_s4.c
! c2aab1f3b9081ac738fc358a7f60ca92  libgfortran/generated/minloc2_8_s1.c
! 8b6fb27160ce0e1c8bacf70f72a67628  libgfortran/generated/minloc2_8_s4.c
  16a14bc6a38a49a3c12c6a701d138c1e  libgfortran/generated/minval0_s1.c
  c3397c9b8b0d2838b089d25169be38c2  libgfortran/generated/minval0_s4.c
  cc57bbd362f85fceb3887978981e1ac2  libgfortran/generated/minval1_s1.c
--- 103586,103599 ----
  99eac5f7dcd17e2cd13149fadbeee8cf  libgfortran/generated/minloc1_8_r17.c
  7342f1eddca71ac143e933007d702136  libgfortran/generated/minloc1_8_r4.c
  6b85ef54d48ef114dc6090908b959168  libgfortran/generated/minloc1_8_r8.c
! 6412d125f1da9c9d73d797f78d72e17b  libgfortran/generated/minloc1_8_s1.c
! 04be4c9ab2f21aa2fab347404b280f16  libgfortran/generated/minloc1_8_s4.c
! 3bd29213daeaed2d616b4e73d2f2157f  libgfortran/generated/minloc2_16_s1.c
! f7067790f5ddb35b7d5e35662925da45  libgfortran/generated/minloc2_16_s4.c
! 2c52cd3c5744c1e3c191a3bfd5b34223  libgfortran/generated/minloc2_4_s1.c
! aa9465b5ed05a3d87f51e364fb80b123  libgfortran/generated/minloc2_4_s4.c
! bf4e16449ebcbe29c3d440e9b3142ddb  libgfortran/generated/minloc2_8_s1.c
! d2a0eefcf1746c09f02301b7267ddd19  libgfortran/generated/minloc2_8_s4.c
  16a14bc6a38a49a3c12c6a701d138c1e  libgfortran/generated/minval0_s1.c
  c3397c9b8b0d2838b089d25169be38c2  libgfortran/generated/minval0_s4.c
  cc57bbd362f85fceb3887978981e1ac2  libgfortran/generated/minval1_s1.c
*************** c9d8247486900e2a58d4acd1506ca530  libgfo
*** 103477,103488 ****
  5c584a4f4d1d101c847a9683896f816d  libgfortran/m4/iany.m4
  12e65c85a7b1380da4a2b2626a3e28c8  libgfortran/m4/ifindloc0.m4
  7c318bfedf88da606a14b334606eca73  libgfortran/m4/ifindloc1.m4
! a9b333e990ea3269022c5ca5dd2a5651  libgfortran/m4/ifindloc2.m4
  143daeeed4d4e1baa17753b51ddd88be  libgfortran/m4/iforeach-s.m4
  ef77f0d18ce645146e5155d85730a2dc  libgfortran/m4/iforeach-s2.m4
  8bbbce69fc532a405b1b88c79c2ef47b  libgfortran/m4/iforeach.m4
  d41d8cd98f00b204e9800998ecf8427e  libgfortran/m4/ifunc.m4
! 89b98ba2db8ff2252ed184a6c20b8f31  libgfortran/m4/ifunction-s.m4
  1603b9dcffb8d8436da0598e622783a9  libgfortran/m4/ifunction-s2.m4
  3cbecd5d114cf344efea0d4754437c7a  libgfortran/m4/ifunction.m4
  86a682dafdbffea255a15ff37710c93a  libgfortran/m4/ifunction_logical.m4
--- 103865,103876 ----
  5c584a4f4d1d101c847a9683896f816d  libgfortran/m4/iany.m4
  12e65c85a7b1380da4a2b2626a3e28c8  libgfortran/m4/ifindloc0.m4
  7c318bfedf88da606a14b334606eca73  libgfortran/m4/ifindloc1.m4
! a487ee56e40e361b64c48fcd76b2cba7  libgfortran/m4/ifindloc2.m4
  143daeeed4d4e1baa17753b51ddd88be  libgfortran/m4/iforeach-s.m4
  ef77f0d18ce645146e5155d85730a2dc  libgfortran/m4/iforeach-s2.m4
  8bbbce69fc532a405b1b88c79c2ef47b  libgfortran/m4/iforeach.m4
  d41d8cd98f00b204e9800998ecf8427e  libgfortran/m4/ifunc.m4
! 315f45e021310f13fe6461d79608ac6d  libgfortran/m4/ifunction-s.m4
  1603b9dcffb8d8436da0598e622783a9  libgfortran/m4/ifunction-s2.m4
  3cbecd5d114cf344efea0d4754437c7a  libgfortran/m4/ifunction.m4
  86a682dafdbffea255a15ff37710c93a  libgfortran/m4/ifunction_logical.m4
*************** aa00c963c5894aef260a2582577cf747  libgfo
*** 103498,103504 ****
  704635440ffe3544a7b5ed071c194570  libgfortran/m4/maxloc0s.m4
  7a48df838a08b5772894e7a7f35874c9  libgfortran/m4/maxloc1.m4
  ae3abcb1bc7b1bcea924833fc8612626  libgfortran/m4/maxloc1s.m4
! 4bdee60072825fb954e660f2b922e6ac  libgfortran/m4/maxloc2s.m4
  303dccd351a5a4d21f7c8bf7776ad79f  libgfortran/m4/maxval.m4
  953751aaf307be916b3f11df71c9097f  libgfortran/m4/maxval0s.m4
  1430f30b8c6dc16c1db2794d350041b9  libgfortran/m4/maxval1s.m4
--- 103886,103892 ----
  704635440ffe3544a7b5ed071c194570  libgfortran/m4/maxloc0s.m4
  7a48df838a08b5772894e7a7f35874c9  libgfortran/m4/maxloc1.m4
  ae3abcb1bc7b1bcea924833fc8612626  libgfortran/m4/maxloc1s.m4
! 2c270198bf9b82b579627580a70076e7  libgfortran/m4/maxloc2s.m4
  303dccd351a5a4d21f7c8bf7776ad79f  libgfortran/m4/maxval.m4
  953751aaf307be916b3f11df71c9097f  libgfortran/m4/maxval0s.m4
  1430f30b8c6dc16c1db2794d350041b9  libgfortran/m4/maxval1s.m4
*************** ae3abcb1bc7b1bcea924833fc8612626  libgfo
*** 103506,103512 ****
  6c8927381ab3750edeea11e48405de0d  libgfortran/m4/minloc0s.m4
  e926e3ec307fe1069719faaf0bcdd0ef  libgfortran/m4/minloc1.m4
  a91a206179303b5355d846f04cd32fb1  libgfortran/m4/minloc1s.m4
! d8657549646e6319d0fa620f0a0a8a22  libgfortran/m4/minloc2s.m4
  42996baf060828b41d899b18ffc5c0b7  libgfortran/m4/minval.m4
  34cc5204d729114a55e478ca42e9b72b  libgfortran/m4/minval0s.m4
  8b331bb2b8000fc9e3e74521fea84073  libgfortran/m4/minval1s.m4
--- 103894,103900 ----
  6c8927381ab3750edeea11e48405de0d  libgfortran/m4/minloc0s.m4
  e926e3ec307fe1069719faaf0bcdd0ef  libgfortran/m4/minloc1.m4
  a91a206179303b5355d846f04cd32fb1  libgfortran/m4/minloc1s.m4
! 7e9aa44e305b0c62d8b7ea9b50da0761  libgfortran/m4/minloc2s.m4
  42996baf060828b41d899b18ffc5c0b7  libgfortran/m4/minval.m4
  34cc5204d729114a55e478ca42e9b72b  libgfortran/m4/minval0s.m4
  8b331bb2b8000fc9e3e74521fea84073  libgfortran/m4/minval1s.m4
*************** c87426032ff9745d21a72b2252600951  libgfo
*** 103546,103552 ****
  f8ec0c7cb3d2eabb48625cdc600708a9  libgfortran/runtime/select_inc.c
  55fd2fd3b90bb8261a9398449ad6368d  libgfortran/runtime/stop.c
  69ebfc81af9a19cab0a2e3014118803a  libgfortran/runtime/string.c
! c517bed94a7b44f82e6abf42135d711b  libgm2/ChangeLog
  8bb8d5e70d5876414059d98f12750d6c  libgm2/Makefile.am
  e4a52ca01185338bc95a587a7e240123  libgm2/Makefile.in
  6f403a61e058e0ec6bc551e0d8d28a77  libgm2/aclocal.m4
--- 103934,103940 ----
  f8ec0c7cb3d2eabb48625cdc600708a9  libgfortran/runtime/select_inc.c
  55fd2fd3b90bb8261a9398449ad6368d  libgfortran/runtime/stop.c
  69ebfc81af9a19cab0a2e3014118803a  libgfortran/runtime/string.c
! 07c101194b7a1a6bb0a163e0a9a29780  libgm2/ChangeLog
  8bb8d5e70d5876414059d98f12750d6c  libgm2/Makefile.am
  e4a52ca01185338bc95a587a7e240123  libgm2/Makefile.in
  6f403a61e058e0ec6bc551e0d8d28a77  libgm2/aclocal.m4
*************** dcdcea9380167bc0fc31fbcc9ae7cd70  libgo/
*** 105345,105358 ****
  1e4c9666f505813e54ed2b3d4056d2f8  libgo/go/crypto/tls/example_test.go
  6c121e7342c13fdc786312f66d8dbb99  libgo/go/crypto/tls/generate_cert.go
  92c22ddf04bfc1134e9ce858e4fe63d1  libgo/go/crypto/tls/handshake_client.go
! b1c3932241580b99b951fae0edb61fd8  libgo/go/crypto/tls/handshake_client_test.go
  0427ef397843c02f3be96cfacd0f14a3  libgo/go/crypto/tls/handshake_client_tls13.go
  46b69f2680156d5e71cb8c6ae2343e94  libgo/go/crypto/tls/handshake_messages.go
  0945ccb0c15b2deb95d8ca2b33b0ea54  libgo/go/crypto/tls/handshake_messages_test.go
  5acf20b462aafc7a101527ee55f5c865  libgo/go/crypto/tls/handshake_server.go
! 2b8b5b21bf0ce23f0cc1267b74babf93  libgo/go/crypto/tls/handshake_server_test.go
  4de3e07cdf2105cfcbfc08e792804987  libgo/go/crypto/tls/handshake_server_tls13.go
! b064ac2d0b92b42852f6ecd68366b46d  libgo/go/crypto/tls/handshake_test.go
  9a32a638fe102dd2d9c10bdc7fea9e5e  libgo/go/crypto/tls/handshake_unix_test.go
  a7f68e8d2ee39cb8a707a0e0eba8ca47  libgo/go/crypto/tls/key_agreement.go
  aa7a95034a03be2806fa57040be5dc21  libgo/go/crypto/tls/key_schedule.go
--- 105733,105746 ----
  1e4c9666f505813e54ed2b3d4056d2f8  libgo/go/crypto/tls/example_test.go
  6c121e7342c13fdc786312f66d8dbb99  libgo/go/crypto/tls/generate_cert.go
  92c22ddf04bfc1134e9ce858e4fe63d1  libgo/go/crypto/tls/handshake_client.go
! f76251738608d414afc6c3f485ba35a8  libgo/go/crypto/tls/handshake_client_test.go
  0427ef397843c02f3be96cfacd0f14a3  libgo/go/crypto/tls/handshake_client_tls13.go
  46b69f2680156d5e71cb8c6ae2343e94  libgo/go/crypto/tls/handshake_messages.go
  0945ccb0c15b2deb95d8ca2b33b0ea54  libgo/go/crypto/tls/handshake_messages_test.go
  5acf20b462aafc7a101527ee55f5c865  libgo/go/crypto/tls/handshake_server.go
! 20c613e2c2699d3c223d49f0ca1b8984  libgo/go/crypto/tls/handshake_server_test.go
  4de3e07cdf2105cfcbfc08e792804987  libgo/go/crypto/tls/handshake_server_tls13.go
! 6a407d52ecada2de1da0168e7271f0c0  libgo/go/crypto/tls/handshake_test.go
  9a32a638fe102dd2d9c10bdc7fea9e5e  libgo/go/crypto/tls/handshake_unix_test.go
  a7f68e8d2ee39cb8a707a0e0eba8ca47  libgo/go/crypto/tls/key_agreement.go
  aa7a95034a03be2806fa57040be5dc21  libgo/go/crypto/tls/key_schedule.go
*************** d6a3256a046d57feca0ff021235c9ede  libgo/
*** 105483,105489 ****
  e2ec9bd8f6f42c104c048bb324bf00d7  libgo/go/crypto/tls/testdata/example-key.pem
  e0281d4b0d8067540dc185550b995938  libgo/go/crypto/tls/ticket.go
  fb39d36797992586f3178188718b0c36  libgo/go/crypto/tls/tls.go
! 7f2c0871f5c00a0aeaa3fad129d50796  libgo/go/crypto/tls/tls_test.go
  fee50745a618969de6971115cea99c5b  libgo/go/crypto/x509/cert_pool.go
  6ba0dbba8fd8e3ffecd7972e85cfdc83  libgo/go/crypto/x509/hybrid_pool_test.go
  7fc12e96e70223731b3f6723c759bcee  libgo/go/crypto/x509/name_constraints_test.go
--- 105871,105877 ----
  e2ec9bd8f6f42c104c048bb324bf00d7  libgo/go/crypto/tls/testdata/example-key.pem
  e0281d4b0d8067540dc185550b995938  libgo/go/crypto/tls/ticket.go
  fb39d36797992586f3178188718b0c36  libgo/go/crypto/tls/tls.go
! bdd3816b98bd07ab38ad8cfdfc5ac82b  libgo/go/crypto/tls/tls_test.go
  fee50745a618969de6971115cea99c5b  libgo/go/crypto/x509/cert_pool.go
  6ba0dbba8fd8e3ffecd7972e85cfdc83  libgo/go/crypto/x509/hybrid_pool_test.go
  7fc12e96e70223731b3f6723c759bcee  libgo/go/crypto/x509/name_constraints_test.go
*************** e3e86019491a40bd4f45424d7ce11037  libgo/
*** 109080,109086 ****
  c5574d106d35be5d94e80301b0855ada  libgo/testsuite/libgo-test-support.exp.in
  bf162aa572f7b96b25dbd2b027845d32  libgo/testsuite/libgo.testmain/testmain.exp
  cc9d2a0e34e31ba866a8caf9f46f48f3  libgomp/.gitattributes
! 285eb4900aedea8c245b59ed126fb91e  libgomp/ChangeLog
  0d55aa862aee66efdc5f8d62c94ff8fb  libgomp/ChangeLog.graphite
  8126886ecbd94666cc701e26bf9d7ec7  libgomp/Makefile.am
  54dac50e0dd75535eabeac324da5d027  libgomp/Makefile.in
--- 109468,109474 ----
  c5574d106d35be5d94e80301b0855ada  libgo/testsuite/libgo-test-support.exp.in
  bf162aa572f7b96b25dbd2b027845d32  libgo/testsuite/libgo.testmain/testmain.exp
  cc9d2a0e34e31ba866a8caf9f46f48f3  libgomp/.gitattributes
! e8fec1070192f0170f59f649e41fa112  libgomp/ChangeLog
  0d55aa862aee66efdc5f8d62c94ff8fb  libgomp/ChangeLog.graphite
  8126886ecbd94666cc701e26bf9d7ec7  libgomp/Makefile.am
  54dac50e0dd75535eabeac324da5d027  libgomp/Makefile.in
*************** ac9e80c7d1eb2f0ec65ce5a9226fb1d2  libgom
*** 111308,111314 ****
  1c3ea6cf8b3fdbaaca48eede6a78b377  libgomp/testsuite/libgomp.oacc-fortran/private-atomic-1-worker.f90
  a2a630debffe26086dcf2269428bc680  libgomp/testsuite/libgomp.oacc-fortran/private-variables.f90
  08b06d21055c0ae650695af3186e447b  libgomp/testsuite/libgomp.oacc-fortran/privatized-ref-1.f95
! 952cf19c9f437fe5bca60825d6e099a0  libgomp/testsuite/libgomp.oacc-fortran/privatized-ref-2.f90
  c8960b2d870263545f61c78baeb03c7b  libgomp/testsuite/libgomp.oacc-fortran/pset-1.f90
  0094f0ea35e805d38b98b9fc1df88e12  libgomp/testsuite/libgomp.oacc-fortran/reduction-1.f90
  97e65050d6226da060e95c2fb1985e9d  libgomp/testsuite/libgomp.oacc-fortran/reduction-2.f90
--- 111696,111702 ----
  1c3ea6cf8b3fdbaaca48eede6a78b377  libgomp/testsuite/libgomp.oacc-fortran/private-atomic-1-worker.f90
  a2a630debffe26086dcf2269428bc680  libgomp/testsuite/libgomp.oacc-fortran/private-variables.f90
  08b06d21055c0ae650695af3186e447b  libgomp/testsuite/libgomp.oacc-fortran/privatized-ref-1.f95
! 5159beb3fbb6cd285c66163c06346478  libgomp/testsuite/libgomp.oacc-fortran/privatized-ref-2.f90
  c8960b2d870263545f61c78baeb03c7b  libgomp/testsuite/libgomp.oacc-fortran/pset-1.f90
  0094f0ea35e805d38b98b9fc1df88e12  libgomp/testsuite/libgomp.oacc-fortran/reduction-1.f90
  97e65050d6226da060e95c2fb1985e9d  libgomp/testsuite/libgomp.oacc-fortran/reduction-2.f90
*************** e8a3245c095430c8ef2413afe2ee4c48  libgom
*** 111340,111346 ****
  b409f1646a05495747142fadf3690e0c  libgomp/work.c
  99c2e5e712b990ee07be10f53e41f3fb  libiberty/.gitignore
  a916467b91076e631dd8edb7424769c7  libiberty/COPYING.LIB
! 9e0254a96742cf828e9da174657f9e5a  libiberty/ChangeLog
  347c31392973de6a4872d540c1718dc1  libiberty/ChangeLog.jit
  fa93bac944903a228f11c248e20425c1  libiberty/Makefile.in
  8b93d0e0369daed24e2260ccfd102eb3  libiberty/README
--- 111728,111734 ----
  b409f1646a05495747142fadf3690e0c  libgomp/work.c
  99c2e5e712b990ee07be10f53e41f3fb  libiberty/.gitignore
  a916467b91076e631dd8edb7424769c7  libiberty/COPYING.LIB
! 346ccfeb3decb562b8aa99df50c6a9ce  libiberty/ChangeLog
  347c31392973de6a4872d540c1718dc1  libiberty/ChangeLog.jit
  fa93bac944903a228f11c248e20425c1  libiberty/Makefile.in
  8b93d0e0369daed24e2260ccfd102eb3  libiberty/README
*************** e7ff11c4ae7f1858d4cda405eadc20db  libibe
*** 111448,111454 ****
  284bb7a096480b355b75c337086220a2  libiberty/sigsetmask.c
  920e1afa7ad8988735b7221db8ab709d  libiberty/simple-object-coff.c
  3f5d339eff2073f4a2437949a3797dee  libiberty/simple-object-common.h
! 5e8924f926aca119e02158b8eb4d4b3e  libiberty/simple-object-elf.c
  a60ce9470fc2a0d124b0931b858b3265  libiberty/simple-object-mach-o.c
  085b4b2948c994fb2b65894a77756e60  libiberty/simple-object-xcoff.c
  ace1a8709791ca05541a70dca2614837  libiberty/simple-object.c
--- 111836,111842 ----
  284bb7a096480b355b75c337086220a2  libiberty/sigsetmask.c
  920e1afa7ad8988735b7221db8ab709d  libiberty/simple-object-coff.c
  3f5d339eff2073f4a2437949a3797dee  libiberty/simple-object-common.h
! f6dc20493a7999b1b5f8da12b01b3963  libiberty/simple-object-elf.c
  a60ce9470fc2a0d124b0931b858b3265  libiberty/simple-object-mach-o.c
  085b4b2948c994fb2b65894a77756e60  libiberty/simple-object-xcoff.c
  ace1a8709791ca05541a70dca2614837  libiberty/simple-object.c
*************** e52d95644dc6f186070f349a5903ca72  libibe
*** 111507,111513 ****
  6f774a92661ca4a067f1691a7925524b  libiberty/xstrerror.c
  23f92e212cd9d0aa705c4291d15b1b1d  libiberty/xstrndup.c
  3d5f811c995181239208230e3fb986c9  libiberty/xvasprintf.c
! fedbf1573bb49b616cbed2868f506315  libitm/ChangeLog
  a9df0726c501bf71a46f426068e8fc9f  libitm/Makefile.am
  06bb67375770bbbe550b5708624ed9d8  libitm/Makefile.in
  b0ef0123257ddf33dc8877750e9d701f  libitm/aatree.cc
--- 111895,111901 ----
  6f774a92661ca4a067f1691a7925524b  libiberty/xstrerror.c
  23f92e212cd9d0aa705c4291d15b1b1d  libiberty/xstrndup.c
  3d5f811c995181239208230e3fb986c9  libiberty/xvasprintf.c
! 8f604bcd5d60aaf7d0479a5610d93bac  libitm/ChangeLog
  a9df0726c501bf71a46f426068e8fc9f  libitm/Makefile.am
  06bb67375770bbbe550b5708624ed9d8  libitm/Makefile.in
  b0ef0123257ddf33dc8877750e9d701f  libitm/aatree.cc
*************** b4e503ecfdccc9f13da8f73eeb6f23a9  libitm
*** 111617,111623 ****
  ef24198422c19f99b0c41be6a16f7081  libitm/testsuite/libitm.c/txrelease.c
  a197d6f8af1f2c34ee3acbd225b506dc  libitm/useraction.cc
  18405e5244b1dc4579b93b5ac7e2fd64  libitm/util.cc
! 78ed3764cf7d03dd00411a466f763b08  libobjc/ChangeLog
  0f2cc07c6f5697c9ea864715931006d2  libobjc/Makefile.in
  dacc3eacefeae25b7b2440b3744216c3  libobjc/NXConstStr.m
  1ce3e10a7cd87c690040cc7e049c4771  libobjc/Object.m
--- 112005,112011 ----
  ef24198422c19f99b0c41be6a16f7081  libitm/testsuite/libitm.c/txrelease.c
  a197d6f8af1f2c34ee3acbd225b506dc  libitm/useraction.cc
  18405e5244b1dc4579b93b5ac7e2fd64  libitm/util.cc
! ee770b34e0e1e9978a910cf53f999c5c  libobjc/ChangeLog
  0f2cc07c6f5697c9ea864715931006d2  libobjc/Makefile.in
  dacc3eacefeae25b7b2440b3744216c3  libobjc/NXConstStr.m
  1ce3e10a7cd87c690040cc7e049c4771  libobjc/Object.m
*************** f73dc5b4bd6ccb056fedbcc20afbb42e  libobj
*** 111674,111680 ****
  4315de5775daa14dcb27acf8981e900b  libobjc/selector.c
  76858dbd60cea84725adf102503b0caf  libobjc/sendmsg.c
  07a2d7242871d2ccd937ab58211f029a  libobjc/thr.c
! e7537fa77cf9d9e955457259f3bf4cba  libphobos/ChangeLog
  94c5ad2e83438058486ba0c7c2fba0ab  libphobos/Makefile.am
  138fba343eb20a167ee2f5240bb53f27  libphobos/Makefile.in
  ee88c20a7744a2305503e1670f3b7889  libphobos/README.gcc
--- 112062,112068 ----
  4315de5775daa14dcb27acf8981e900b  libobjc/selector.c
  76858dbd60cea84725adf102503b0caf  libobjc/sendmsg.c
  07a2d7242871d2ccd937ab58211f029a  libobjc/thr.c
! 5c0fa592f36e58ad64d939cd646105b5  libphobos/ChangeLog
  94c5ad2e83438058486ba0c7c2fba0ab  libphobos/Makefile.am
  138fba343eb20a167ee2f5240bb53f27  libphobos/Makefile.in
  ee88c20a7744a2305503e1670f3b7889  libphobos/README.gcc
*************** d3ca33295a3a7d8dce98defab11dd626  libpho
*** 112525,112531 ****
  020279de8eacb878931ae40833bd6508  libphobos/testsuite/libphobos.unittest/unittest.exp
  bf9a9859c3d5e0581c756501aefba7b9  libphobos/testsuite/testsuite_flags.in
  a916467b91076e631dd8edb7424769c7  libquadmath/COPYING.LIB
! 0256472d9bbc777c67e5c443356c1bd9  libquadmath/ChangeLog
  4696eddf264dd090e144b4849b0a6d91  libquadmath/Makefile.am
  644a78a01d94abe28b364eaa21142d82  libquadmath/Makefile.in
  d9afbc1f1e04c7e461265ff9323cc6f4  libquadmath/acinclude.m4
--- 112913,112919 ----
  020279de8eacb878931ae40833bd6508  libphobos/testsuite/libphobos.unittest/unittest.exp
  bf9a9859c3d5e0581c756501aefba7b9  libphobos/testsuite/testsuite_flags.in
  a916467b91076e631dd8edb7424769c7  libquadmath/COPYING.LIB
! aa14f46a4936bd234c0b52d10ffc2675  libquadmath/ChangeLog
  4696eddf264dd090e144b4849b0a6d91  libquadmath/Makefile.am
  644a78a01d94abe28b364eaa21142d82  libquadmath/Makefile.in
  d9afbc1f1e04c7e461265ff9323cc6f4  libquadmath/acinclude.m4
*************** afdc9f496616fa82df7f0fe745c94715  libqua
*** 112573,112579 ****
  a79c69584ad8588015499b21237806e0  libquadmath/math/erfq.c
  33862b23bd6abcc57d8827fdc4186def  libquadmath/math/exp2q.c
  1548eb0dd3f9e6732da4a7fe975e29b8  libquadmath/math/expm1q.c
! e5817a6317e56b7de35ef78dd3f9aedc  libquadmath/math/expq.c
  0aeade4d60bd21701f9e751a4cea9acc  libquadmath/math/expq_table.h
  64ad2fc9b59a6759c6b929e0ac39ab85  libquadmath/math/fabsq.c
  b70fca866938cc819de3e4006b0c4b63  libquadmath/math/fdimq.c
--- 112961,112967 ----
  a79c69584ad8588015499b21237806e0  libquadmath/math/erfq.c
  33862b23bd6abcc57d8827fdc4186def  libquadmath/math/exp2q.c
  1548eb0dd3f9e6732da4a7fe975e29b8  libquadmath/math/expm1q.c
! cc79ca17cc585ecf1d9971ad99e91bad  libquadmath/math/expq.c
  0aeade4d60bd21701f9e751a4cea9acc  libquadmath/math/expq_table.h
  64ad2fc9b59a6759c6b929e0ac39ab85  libquadmath/math/fabsq.c
  b70fca866938cc819de3e4006b0c4b63  libquadmath/math/fdimq.c
*************** e0bd9b8669e44ec6010f92da1d5188ad  libqua
*** 112665,112671 ****
  af84fa5118f4adec8393614994e1c4d6  libquadmath/strtod/strtoflt128.c
  d15a18f7c46ba2add6148edc5b7563c0  libquadmath/strtod/tens_in_limb.c
  12c73a846f7668d29de720bd79502bef  libquadmath/update-quadmath.py
! b9b3b7b373d3b9516ba51a6155844c99  libsanitizer/ChangeLog
  63916ba64a3cfa7ce2809fb46ab38597  libsanitizer/HOWTO_MERGE
  0249c37748936faf5b1efd5789587909  libsanitizer/LICENSE.TXT
  29e193ebd43391db91cd7be26d8cd169  libsanitizer/LOCAL_PATCHES
--- 113053,113059 ----
  af84fa5118f4adec8393614994e1c4d6  libquadmath/strtod/strtoflt128.c
  d15a18f7c46ba2add6148edc5b7563c0  libquadmath/strtod/tens_in_limb.c
  12c73a846f7668d29de720bd79502bef  libquadmath/update-quadmath.py
! 4e8d2ba5eec5b7ed23ec618a764e4d83  libsanitizer/ChangeLog
  63916ba64a3cfa7ce2809fb46ab38597  libsanitizer/HOWTO_MERGE
  0249c37748936faf5b1efd5789587909  libsanitizer/LICENSE.TXT
  29e193ebd43391db91cd7be26d8cd169  libsanitizer/LOCAL_PATCHES
*************** bd58abd803667b3373381b6bb1b68f1b  libsan
*** 113146,113152 ****
  545e91fffb8d4987ca5d1c0054aadd11  libsanitizer/ubsan/ubsan_win_dll_thunk.cpp
  e9c85349d92ab1a6b66d0872077acd3b  libsanitizer/ubsan/ubsan_win_dynamic_runtime_thunk.cpp
  72f297f487b6bb9db917cce361192c28  libsanitizer/ubsan/ubsan_win_weak_interception.cpp
! ca3fedf03e52f58bd9deac754d069010  libssp/ChangeLog
  e2f3818fe9d994ce13d0ce070a7d329b  libssp/Makefile.am
  b56958cdc5828ca811c35bbf479b3a09  libssp/Makefile.in
  f6f6c804e40e3a3ef407d3d13fafb6c0  libssp/aclocal.m4
--- 113534,113540 ----
  545e91fffb8d4987ca5d1c0054aadd11  libsanitizer/ubsan/ubsan_win_dll_thunk.cpp
  e9c85349d92ab1a6b66d0872077acd3b  libsanitizer/ubsan/ubsan_win_dynamic_runtime_thunk.cpp
  72f297f487b6bb9db917cce361192c28  libsanitizer/ubsan/ubsan_win_weak_interception.cpp
! 78cc44b21cfab33d077c6a79e96f2530  libssp/ChangeLog
  e2f3818fe9d994ce13d0ce070a7d329b  libssp/Makefile.am
  b56958cdc5828ca811c35bbf479b3a09  libssp/Makefile.in
  f6f6c804e40e3a3ef407d3d13fafb6c0  libssp/aclocal.m4
*************** c265574887f4390ecccd1073ee5c0190  libssp
*** 113175,113181 ****
  02470b541ab713bd1bfb8e6787e65f2c  libssp/strncpy-chk.c
  8a7a0719ef45cb3ae0041192eac8d550  libssp/vsnprintf-chk.c
  d662ba7536e1bd06226d47b1a7f1f4e2  libssp/vsprintf-chk.c
! d059d550b8c1ff19ee31d9d3106d2dba  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
--- 113563,113569 ----
  02470b541ab713bd1bfb8e6787e65f2c  libssp/strncpy-chk.c
  8a7a0719ef45cb3ae0041192eac8d550  libssp/vsnprintf-chk.c
  d662ba7536e1bd06226d47b1a7f1f4e2  libssp/vsprintf-chk.c
! ae2bd6cb395bb4775257b1550b43a11d  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
*************** a8f4290dba5b481ad426148a03c75dd0  libstd
*** 113206,113212 ****
  f372af73db4ac0ad88e43199e1f29e08  libstdc++-v3/README
  97b52e1b3e25b17be33966380fd4e289  libstdc++-v3/acinclude.m4
  13f29ef95664bfe876c83f7743ca504d  libstdc++-v3/aclocal.m4
! 71abdb358e55c1697456f1d0db6694f4  libstdc++-v3/config.h.in
  dbe719d2ffb42b6b243512fe87e49072  libstdc++-v3/config/abi/compatibility.h
  cec6d34c230f78424e5b88d5918096ff  libstdc++-v3/config/abi/post/aarch64-linux-gnu/baseline_symbols.txt
  730569c0ef38f6e6322b3c4ac65253ce  libstdc++-v3/config/abi/post/alpha-linux-gnu/baseline_symbols.txt
--- 113594,113600 ----
  f372af73db4ac0ad88e43199e1f29e08  libstdc++-v3/README
  97b52e1b3e25b17be33966380fd4e289  libstdc++-v3/acinclude.m4
  13f29ef95664bfe876c83f7743ca504d  libstdc++-v3/aclocal.m4
! 6cc8d6ac75e0ac7abadd4f2e087c2d1d  libstdc++-v3/config.h.in
  dbe719d2ffb42b6b243512fe87e49072  libstdc++-v3/config/abi/compatibility.h
  cec6d34c230f78424e5b88d5918096ff  libstdc++-v3/config/abi/post/aarch64-linux-gnu/baseline_symbols.txt
  730569c0ef38f6e6322b3c4ac65253ce  libstdc++-v3/config/abi/post/alpha-linux-gnu/baseline_symbols.txt
*************** b01f8da8f4373070847fe317fe8a546e  libstd
*** 113244,113250 ****
  de1009b57da80b0c8a0e9cb3c2650440  libstdc++-v3/config/allocator/malloc_allocator_base.h
  f56d3b48d132e35738b60e08703928ec  libstdc++-v3/config/allocator/new_allocator_base.h
  6dbae0e1d3939ce8cfdfdfb59f98acd3  libstdc++-v3/config/cpu/aarch64/opt/bits/opt_random.h
! 856579dc0753a6c75df9820146ca4e6a  libstdc++-v3/config/cpu/aarch64/opt/ext/opt_random.h
  02c0f8180905eadeb5dec2ef410f1522  libstdc++-v3/config/cpu/arm/cpu_defines.h
  8e2f45e49b7aca79fffff6191ecdf532  libstdc++-v3/config/cpu/arm/cxxabi_tweaks.h
  87a80a225b66fea2e5ae71ff6e7650ea  libstdc++-v3/config/cpu/cris/atomic_word.h
--- 113632,113638 ----
  de1009b57da80b0c8a0e9cb3c2650440  libstdc++-v3/config/allocator/malloc_allocator_base.h
  f56d3b48d132e35738b60e08703928ec  libstdc++-v3/config/allocator/new_allocator_base.h
  6dbae0e1d3939ce8cfdfdfb59f98acd3  libstdc++-v3/config/cpu/aarch64/opt/bits/opt_random.h
! 29cd79984fad9d2e557fb92a9fdb336b  libstdc++-v3/config/cpu/aarch64/opt/ext/opt_random.h
  02c0f8180905eadeb5dec2ef410f1522  libstdc++-v3/config/cpu/arm/cpu_defines.h
  8e2f45e49b7aca79fffff6191ecdf532  libstdc++-v3/config/cpu/arm/cxxabi_tweaks.h
  87a80a225b66fea2e5ae71ff6e7650ea  libstdc++-v3/config/cpu/cris/atomic_word.h
*************** b098d581016d75297e50710c32ae79da  libstd
*** 113260,113266 ****
  0ea7a8b5a407fc5d43cb70bf14ff1b8e  libstdc++-v3/config/cpu/i386/atomicity.h
  adcea90b4e1088e2e86276002047930d  libstdc++-v3/config/cpu/i486/atomicity.h
  4525c517bb9575ecaaae8c3fa20987b0  libstdc++-v3/config/cpu/i486/opt/bits/opt_random.h
! ea3147f843171e066481409c662cbbed  libstdc++-v3/config/cpu/i486/opt/ext/opt_random.h
  3aa3ed8ee6fd04d9308fcde43d292665  libstdc++-v3/config/cpu/m68k/atomicity.h
  7233b706a3c2c7b310f1f42332f973f0  libstdc++-v3/config/cpu/microblaze/cpu_defines.h
  37c2c5d6e3b3be67576ea4e238b25fdc  libstdc++-v3/config/cpu/powerpc/cpu_defines.h
--- 113648,113654 ----
  0ea7a8b5a407fc5d43cb70bf14ff1b8e  libstdc++-v3/config/cpu/i386/atomicity.h
  adcea90b4e1088e2e86276002047930d  libstdc++-v3/config/cpu/i486/atomicity.h
  4525c517bb9575ecaaae8c3fa20987b0  libstdc++-v3/config/cpu/i486/opt/bits/opt_random.h
! 202373daf2f8682e6bb73de1c0ec34ae  libstdc++-v3/config/cpu/i486/opt/ext/opt_random.h
  3aa3ed8ee6fd04d9308fcde43d292665  libstdc++-v3/config/cpu/m68k/atomicity.h
  7233b706a3c2c7b310f1f42332f973f0  libstdc++-v3/config/cpu/microblaze/cpu_defines.h
  37c2c5d6e3b3be67576ea4e238b25fdc  libstdc++-v3/config/cpu/powerpc/cpu_defines.h
*************** f093a64957701e345212de01e53fea28  libstd
*** 113278,113284 ****
  a1463943efae57b930a3a778e2596408  libstdc++-v3/config/locale/dragonfly/ctype_members.cc
  e82371f75a7f131a45c51112632b00b4  libstdc++-v3/config/locale/dragonfly/monetary_members.cc
  c83126a29fa2ea4cc4232659b79d6bff  libstdc++-v3/config/locale/dragonfly/numeric_members.cc
! e9c61ccdf8ef54d372d54d0c699bda74  libstdc++-v3/config/locale/dragonfly/time_members.cc
  babdea4ccb54a63bdff1489b18e8becc  libstdc++-v3/config/locale/dragonfly/time_members.h
  9f74bddaf0a254d96f13d40d9173727d  libstdc++-v3/config/locale/generic/c++locale_internal.h
  26ae3157f22fb32d7f4745f54982978f  libstdc++-v3/config/locale/generic/c_locale.cc
--- 113666,113672 ----
  a1463943efae57b930a3a778e2596408  libstdc++-v3/config/locale/dragonfly/ctype_members.cc
  e82371f75a7f131a45c51112632b00b4  libstdc++-v3/config/locale/dragonfly/monetary_members.cc
  c83126a29fa2ea4cc4232659b79d6bff  libstdc++-v3/config/locale/dragonfly/numeric_members.cc
! 5ef43c66c02ed51574cffb75fd0eea55  libstdc++-v3/config/locale/dragonfly/time_members.cc
  babdea4ccb54a63bdff1489b18e8becc  libstdc++-v3/config/locale/dragonfly/time_members.h
  9f74bddaf0a254d96f13d40d9173727d  libstdc++-v3/config/locale/generic/c++locale_internal.h
  26ae3157f22fb32d7f4745f54982978f  libstdc++-v3/config/locale/generic/c_locale.cc
*************** f849d2d4eb8c20f1c5d2e16fbea97539  libstd
*** 113290,113296 ****
  fd5c1983dd99f637e17b4fb4f4c91d6f  libstdc++-v3/config/locale/generic/messages_members.h
  c32dbd91f9ad1b71f5c737eacc134517  libstdc++-v3/config/locale/generic/monetary_members.cc
  d960100fae5380030303b7afb281c98f  libstdc++-v3/config/locale/generic/numeric_members.cc
! b80202e65ad971ad4e9427b8012b68da  libstdc++-v3/config/locale/generic/time_members.cc
  53d6a9be38a5811a359af970e56b023d  libstdc++-v3/config/locale/generic/time_members.h
  942cafcd7b13ed006a05b9b3cba3416b  libstdc++-v3/config/locale/gnu/c++locale_internal.h
  adc14174bf7d5246d2139f20e418378e  libstdc++-v3/config/locale/gnu/c_locale.cc
--- 113678,113684 ----
  fd5c1983dd99f637e17b4fb4f4c91d6f  libstdc++-v3/config/locale/generic/messages_members.h
  c32dbd91f9ad1b71f5c737eacc134517  libstdc++-v3/config/locale/generic/monetary_members.cc
  d960100fae5380030303b7afb281c98f  libstdc++-v3/config/locale/generic/numeric_members.cc
! b6b915f387842bca4ee5e8a11b0385f8  libstdc++-v3/config/locale/generic/time_members.cc
  53d6a9be38a5811a359af970e56b023d  libstdc++-v3/config/locale/generic/time_members.h
  942cafcd7b13ed006a05b9b3cba3416b  libstdc++-v3/config/locale/gnu/c++locale_internal.h
  adc14174bf7d5246d2139f20e418378e  libstdc++-v3/config/locale/gnu/c_locale.cc
*************** de202fda56a19eec7e45a1e10aed9752  libstd
*** 113302,113308 ****
  245444437b5ad5def5b0cb67ff923f90  libstdc++-v3/config/locale/gnu/messages_members.h
  57719128b782d9adf6ea00944ad4edaa  libstdc++-v3/config/locale/gnu/monetary_members.cc
  e9a0ad292580556a800c1c8f76c7cdf3  libstdc++-v3/config/locale/gnu/numeric_members.cc
! 26b0c2046bc28c36bca194378d820618  libstdc++-v3/config/locale/gnu/time_members.cc
  ce947e3179d47efaba19fc99a9f13a33  libstdc++-v3/config/locale/gnu/time_members.h
  aeee8c086899ce09c367f69061bf00a0  libstdc++-v3/config/locale/ieee_1003.1-2001/c_locale.cc
  92d1f30fdee980064ce519618da0483d  libstdc++-v3/config/locale/ieee_1003.1-2001/c_locale.h
--- 113690,113696 ----
  245444437b5ad5def5b0cb67ff923f90  libstdc++-v3/config/locale/gnu/messages_members.h
  57719128b782d9adf6ea00944ad4edaa  libstdc++-v3/config/locale/gnu/monetary_members.cc
  e9a0ad292580556a800c1c8f76c7cdf3  libstdc++-v3/config/locale/gnu/numeric_members.cc
! fb38d2e395896971ce9d9e94d506f289  libstdc++-v3/config/locale/gnu/time_members.cc
  ce947e3179d47efaba19fc99a9f13a33  libstdc++-v3/config/locale/gnu/time_members.h
  aeee8c086899ce09c367f69061bf00a0  libstdc++-v3/config/locale/ieee_1003.1-2001/c_locale.cc
  92d1f30fdee980064ce519618da0483d  libstdc++-v3/config/locale/ieee_1003.1-2001/c_locale.h
*************** c164c601e952178705c49357c46929b1  libstd
*** 113395,113402 ****
  88829ac417697de6fbc89e7077167668  libstdc++-v3/config/os/vxworks/ctype_configure_char.cc
  2e42197ec5d9567a84a1069dc2a1bab3  libstdc++-v3/config/os/vxworks/ctype_inline.h
  fcfb034722a9543debf35ed340716876  libstdc++-v3/config/os/vxworks/os_defines.h
! d14e4b919642ca3b797214ec732920c1  libstdc++-v3/configure
! 5cd10c9cfb6accf9f587af8ab659acad  libstdc++-v3/configure.ac
  47ef67fb6f3fafc3f01a86a267dfeb82  libstdc++-v3/configure.host
  450cc52f6f6f0abf59940662504c450e  libstdc++-v3/crossconfig.m4
  aedbb1de1dc942434f2d23b8971c0b6f  libstdc++-v3/doc/Makefile.am
--- 113783,113790 ----
  88829ac417697de6fbc89e7077167668  libstdc++-v3/config/os/vxworks/ctype_configure_char.cc
  2e42197ec5d9567a84a1069dc2a1bab3  libstdc++-v3/config/os/vxworks/ctype_inline.h
  fcfb034722a9543debf35ed340716876  libstdc++-v3/config/os/vxworks/os_defines.h
! 563cce312672416205bbbbf63e39e18d  libstdc++-v3/configure
! 42cd91c84c04b07396c45d6f040ef13d  libstdc++-v3/configure.ac
  47ef67fb6f3fafc3f01a86a267dfeb82  libstdc++-v3/configure.host
  450cc52f6f6f0abf59940662504c450e  libstdc++-v3/crossconfig.m4
  aedbb1de1dc942434f2d23b8971c0b6f  libstdc++-v3/doc/Makefile.am
*************** f298475c719652bf6b563563d90f327a  libstd
*** 113411,113417 ****
  c68ff21babfa14f20b98e36a2c808418  libstdc++-v3/doc/html/api.html
  08920438eea18325b4bfdf979379ff66  libstdc++-v3/doc/html/bk02.html
  47886ba7da131bf3cbf81a27cada5f6f  libstdc++-v3/doc/html/bk03.html
! 4fa64b0e3aa46e2dff08dec622544941  libstdc++-v3/doc/html/faq.html
  1ae70f0bf94464b036515d333fff8ab2  libstdc++-v3/doc/html/images/confdeps.png
  d7f63b43e9f4c39cf71de7585de522ee  libstdc++-v3/doc/html/images/pbds_balls_and_bins.png
  22eedc841676a98f8ae8b95131ac4d7e  libstdc++-v3/doc/html/images/pbds_binary_priority_queue_int_push.png
--- 113799,113805 ----
  c68ff21babfa14f20b98e36a2c808418  libstdc++-v3/doc/html/api.html
  08920438eea18325b4bfdf979379ff66  libstdc++-v3/doc/html/bk02.html
  47886ba7da131bf3cbf81a27cada5f6f  libstdc++-v3/doc/html/bk03.html
! f03dd1c38b579d5d224000379ab03739  libstdc++-v3/doc/html/faq.html
  1ae70f0bf94464b036515d333fff8ab2  libstdc++-v3/doc/html/images/confdeps.png
  d7f63b43e9f4c39cf71de7585de522ee  libstdc++-v3/doc/html/images/pbds_balls_and_bins.png
  22eedc841676a98f8ae8b95131ac4d7e  libstdc++-v3/doc/html/images/pbds_binary_priority_queue_int_push.png
*************** d7249eb4d31bd107d0b09ea3c80cb723  libstd
*** 113492,113500 ****
  33bc39e8f2d47f3d490d7ca7d4832b43  libstdc++-v3/doc/html/images/pbds_trie_node_updator_policy_cd.png
  df705f3839120dcb896e9839cf3404d0  libstdc++-v3/doc/html/images/pbds_update_seq_diagram.png
  625efc86360b3cc5168c5168c6a19706  libstdc++-v3/doc/html/index.html
! 62925196d824e20c496c37ac4fbc4215  libstdc++-v3/doc/html/manual/abi.html
  4ce10e27356ac31a5b7962aecbeb3638  libstdc++-v3/doc/html/manual/algorithms.html
! 53be92d5dc6b55da6d64c3a62b120f5e  libstdc++-v3/doc/html/manual/api.html
  cae42c74365059906619c1dd199023e5  libstdc++-v3/doc/html/manual/appendix.html
  349dd21397f799989e513b2c3c7b44d4  libstdc++-v3/doc/html/manual/appendix_contributing.html
  23038a3eb57967596dd7dc4f944e55e6  libstdc++-v3/doc/html/manual/appendix_free.html
--- 113880,113888 ----
  33bc39e8f2d47f3d490d7ca7d4832b43  libstdc++-v3/doc/html/images/pbds_trie_node_updator_policy_cd.png
  df705f3839120dcb896e9839cf3404d0  libstdc++-v3/doc/html/images/pbds_update_seq_diagram.png
  625efc86360b3cc5168c5168c6a19706  libstdc++-v3/doc/html/index.html
! 134faa7711d5b5bbf5d0b8059df205ec  libstdc++-v3/doc/html/manual/abi.html
  4ce10e27356ac31a5b7962aecbeb3638  libstdc++-v3/doc/html/manual/algorithms.html
! f3a00de8d697339e0ee085425ed75182  libstdc++-v3/doc/html/manual/api.html
  cae42c74365059906619c1dd199023e5  libstdc++-v3/doc/html/manual/appendix.html
  349dd21397f799989e513b2c3c7b44d4  libstdc++-v3/doc/html/manual/appendix_contributing.html
  23038a3eb57967596dd7dc4f944e55e6  libstdc++-v3/doc/html/manual/appendix_free.html
*************** c7e40c1085e414b3b4d5896db4013205  libstd
*** 113524,113533 ****
  e47e050922ad8c8f67f42be36ea507c4  libstdc++-v3/doc/html/manual/ext_algorithms.html
  3cbcc93e277e8589a94b618c95dcb54c  libstdc++-v3/doc/html/manual/ext_compile_checks.html
  afcc2751dae09e088abc1e3175cb94cc  libstdc++-v3/doc/html/manual/ext_concurrency.html
! 6ff2323d07ed91e8dec5a072df16f901  libstdc++-v3/doc/html/manual/ext_concurrency_impl.html
  9eae121ff2ad3f2dd5a2748f87f9f530  libstdc++-v3/doc/html/manual/ext_concurrency_use.html
  0597d03ff215b7f17e0240178c030166  libstdc++-v3/doc/html/manual/ext_containers.html
! 3946985aede4994e9743b0f8d71b41ba  libstdc++-v3/doc/html/manual/ext_demangling.html
  05003e71d54cfdfd4c8291489f8ffa07  libstdc++-v3/doc/html/manual/ext_io.html
  44f8ef8b093904d418755d0e32d700b7  libstdc++-v3/doc/html/manual/ext_iterators.html
  8f3bd86e04d263ad87cc258c289aae6d  libstdc++-v3/doc/html/manual/ext_numerics.html
--- 113912,113921 ----
  e47e050922ad8c8f67f42be36ea507c4  libstdc++-v3/doc/html/manual/ext_algorithms.html
  3cbcc93e277e8589a94b618c95dcb54c  libstdc++-v3/doc/html/manual/ext_compile_checks.html
  afcc2751dae09e088abc1e3175cb94cc  libstdc++-v3/doc/html/manual/ext_concurrency.html
! 41d83456313998bffbded9e19febedc6  libstdc++-v3/doc/html/manual/ext_concurrency_impl.html
  9eae121ff2ad3f2dd5a2748f87f9f530  libstdc++-v3/doc/html/manual/ext_concurrency_use.html
  0597d03ff215b7f17e0240178c030166  libstdc++-v3/doc/html/manual/ext_containers.html
! a9a11843531e8f06066ca107b8c76ceb  libstdc++-v3/doc/html/manual/ext_demangling.html
  05003e71d54cfdfd4c8291489f8ffa07  libstdc++-v3/doc/html/manual/ext_io.html
  44f8ef8b093904d418755d0e32d700b7  libstdc++-v3/doc/html/manual/ext_iterators.html
  8f3bd86e04d263ad87cc258c289aae6d  libstdc++-v3/doc/html/manual/ext_numerics.html
*************** b1c1fa7bf6c8cbf798960537e735cf07  libstd
*** 113547,113568 ****
  ae9b2e57903953c857a0a2314010036c  libstdc++-v3/doc/html/manual/license.html
  945f5ecd78f495a46c64b58665a37d69  libstdc++-v3/doc/html/manual/localization.html
  9d7282a3a92209b987a91b15973414af  libstdc++-v3/doc/html/manual/make.html
! 8b2787265d975e2eab0f3b9ca5f0dd65  libstdc++-v3/doc/html/manual/memory.html
  c40a00e2cba07156a6bd77b14cccc2e4  libstdc++-v3/doc/html/manual/mt_allocator.html
  4934caabf7eef9ff3618e9ac17acba49  libstdc++-v3/doc/html/manual/mt_allocator_design.html
  bdbb1ff20830123a43576a05081312f9  libstdc++-v3/doc/html/manual/mt_allocator_ex_multi.html
  a40a3344663fbccc3184759981310047  libstdc++-v3/doc/html/manual/mt_allocator_ex_single.html
! aee2d8386d54bb939d6ae70d4cbfe804  libstdc++-v3/doc/html/manual/mt_allocator_impl.html
  9dabea61a71c003598f8a991e614e76c  libstdc++-v3/doc/html/manual/numerics.html
  88a009e3d0a8c9e08103a63fdce3f776  libstdc++-v3/doc/html/manual/numerics_and_c.html
  d569c55932dee4a3a4e8598da8998e28  libstdc++-v3/doc/html/manual/pairs.html
  f9f0e84051f62c45dfb0a2c150dff6ee  libstdc++-v3/doc/html/manual/parallel_mode.html
! 5f0f59eb4592f14c6f1d291939b42874  libstdc++-v3/doc/html/manual/parallel_mode_design.html
  ecf6c505a75fa3dff283b1fefdda671b  libstdc++-v3/doc/html/manual/parallel_mode_semantics.html
  e2c97bcb68cbed2f84d4599f561c91d0  libstdc++-v3/doc/html/manual/parallel_mode_test.html
! 935f34a82f6ef3b0dc60b8d3a06563ae  libstdc++-v3/doc/html/manual/parallel_mode_using.html
  9979d7cb4d5cf7e6587881acebf84a4d  libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html
! 6e9d39694dfe3eb4d8ac9ff0d499d99a  libstdc++-v3/doc/html/manual/policy_data_structures.html
  84c9bc8c54a3de8b4d90dfe3b438bc43  libstdc++-v3/doc/html/manual/policy_data_structures_ack.html
  d973b7693c2b6c717784b81d549c61e5  libstdc++-v3/doc/html/manual/policy_data_structures_design.html
  9acf818681732e9c264224c86b5ffdb3  libstdc++-v3/doc/html/manual/policy_data_structures_using.html
--- 113935,113956 ----
  ae9b2e57903953c857a0a2314010036c  libstdc++-v3/doc/html/manual/license.html
  945f5ecd78f495a46c64b58665a37d69  libstdc++-v3/doc/html/manual/localization.html
  9d7282a3a92209b987a91b15973414af  libstdc++-v3/doc/html/manual/make.html
! 7a3b63e848018e95afaa64804870213d  libstdc++-v3/doc/html/manual/memory.html
  c40a00e2cba07156a6bd77b14cccc2e4  libstdc++-v3/doc/html/manual/mt_allocator.html
  4934caabf7eef9ff3618e9ac17acba49  libstdc++-v3/doc/html/manual/mt_allocator_design.html
  bdbb1ff20830123a43576a05081312f9  libstdc++-v3/doc/html/manual/mt_allocator_ex_multi.html
  a40a3344663fbccc3184759981310047  libstdc++-v3/doc/html/manual/mt_allocator_ex_single.html
! 7a5b54081f120ee870ec6bd2c18eaaed  libstdc++-v3/doc/html/manual/mt_allocator_impl.html
  9dabea61a71c003598f8a991e614e76c  libstdc++-v3/doc/html/manual/numerics.html
  88a009e3d0a8c9e08103a63fdce3f776  libstdc++-v3/doc/html/manual/numerics_and_c.html
  d569c55932dee4a3a4e8598da8998e28  libstdc++-v3/doc/html/manual/pairs.html
  f9f0e84051f62c45dfb0a2c150dff6ee  libstdc++-v3/doc/html/manual/parallel_mode.html
! d0a5d1e6143763602cd06a3431e5eba7  libstdc++-v3/doc/html/manual/parallel_mode_design.html
  ecf6c505a75fa3dff283b1fefdda671b  libstdc++-v3/doc/html/manual/parallel_mode_semantics.html
  e2c97bcb68cbed2f84d4599f561c91d0  libstdc++-v3/doc/html/manual/parallel_mode_test.html
! e5c19b8ff5bc3c648559dbeb909a643d  libstdc++-v3/doc/html/manual/parallel_mode_using.html
  9979d7cb4d5cf7e6587881acebf84a4d  libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html
! 270766051c7a0ebb41d65856ebe73508  libstdc++-v3/doc/html/manual/policy_data_structures.html
  84c9bc8c54a3de8b4d90dfe3b438bc43  libstdc++-v3/doc/html/manual/policy_data_structures_ack.html
  d973b7693c2b6c717784b81d549c61e5  libstdc++-v3/doc/html/manual/policy_data_structures_design.html
  9acf818681732e9c264224c86b5ffdb3  libstdc++-v3/doc/html/manual/policy_data_structures_using.html
*************** ffceba0f3c20f451f9753c101c0fa634  libstd
*** 113577,113597 ****
  01c6fb78afa342def6da44376b90a890  libstdc++-v3/doc/html/manual/source_code_style.html
  f875f3f4cddfe4fee6aff2308ccb4563  libstdc++-v3/doc/html/manual/source_design_notes.html
  391422dd4f4cdbd4d764a952a0f345e6  libstdc++-v3/doc/html/manual/source_organization.html
! 38e10bc2d50653a3cb7e24195313d92f  libstdc++-v3/doc/html/manual/status.html
  ea0c531c09fa230f346f8ba700961e4a  libstdc++-v3/doc/html/manual/std_contents.html
  dbb5f81a9e8864374fbb835eaa4e8b0d  libstdc++-v3/doc/html/manual/streambufs.html
! 47e6a6ef4752e7c7e3ecb2a4948a7514  libstdc++-v3/doc/html/manual/strings.html
  4fceea62121ba1fe214414a7506d385e  libstdc++-v3/doc/html/manual/stringstreams.html
  52f0c68b15c7a2b6e098bcfb8da0094b  libstdc++-v3/doc/html/manual/support.html
  fcdceeabf3a95117ea22e93a0354e564  libstdc++-v3/doc/html/manual/termination.html
! 4506d82a2b758f7152eaa50cab8c7bba  libstdc++-v3/doc/html/manual/test.html
  c39b927efcec5ac84139c1490c8ef320  libstdc++-v3/doc/html/manual/traits.html
  530b96535baacfe35df2e65f9dfe7efc  libstdc++-v3/doc/html/manual/unordered_associative.html
! ecfecbbb6dd2ff762607d2cb36083c1d  libstdc++-v3/doc/html/manual/using.html
! a98d94ba8ccfb620e98ebfe01192e61e  libstdc++-v3/doc/html/manual/using_concurrency.html
! 79fb9de4a4c89a913a76e1828500499d  libstdc++-v3/doc/html/manual/using_dual_abi.html
  a372b01a93ca1beeb843a1440bd25cdd  libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html
! 90f1ace0e51461f3caa15a913228c521  libstdc++-v3/doc/html/manual/using_exceptions.html
  8fc6625206a4feba33ced5fa38ab3af8  libstdc++-v3/doc/html/manual/using_headers.html
  c1e8d8c0d84363807d41edeb82e9dbfc  libstdc++-v3/doc/html/manual/using_macros.html
  ccc3b1a320ccc49a977c80546610195b  libstdc++-v3/doc/html/manual/using_namespaces.html
--- 113965,113985 ----
  01c6fb78afa342def6da44376b90a890  libstdc++-v3/doc/html/manual/source_code_style.html
  f875f3f4cddfe4fee6aff2308ccb4563  libstdc++-v3/doc/html/manual/source_design_notes.html
  391422dd4f4cdbd4d764a952a0f345e6  libstdc++-v3/doc/html/manual/source_organization.html
! 7810b58abc912971d66aae870302da12  libstdc++-v3/doc/html/manual/status.html
  ea0c531c09fa230f346f8ba700961e4a  libstdc++-v3/doc/html/manual/std_contents.html
  dbb5f81a9e8864374fbb835eaa4e8b0d  libstdc++-v3/doc/html/manual/streambufs.html
! 99d2fb8d1299bbdeefb3417992bcd322  libstdc++-v3/doc/html/manual/strings.html
  4fceea62121ba1fe214414a7506d385e  libstdc++-v3/doc/html/manual/stringstreams.html
  52f0c68b15c7a2b6e098bcfb8da0094b  libstdc++-v3/doc/html/manual/support.html
  fcdceeabf3a95117ea22e93a0354e564  libstdc++-v3/doc/html/manual/termination.html
! f68eb6ec77205287aeb6b8d394f6f320  libstdc++-v3/doc/html/manual/test.html
  c39b927efcec5ac84139c1490c8ef320  libstdc++-v3/doc/html/manual/traits.html
  530b96535baacfe35df2e65f9dfe7efc  libstdc++-v3/doc/html/manual/unordered_associative.html
! dd7e5ec8a331bbd3f15aa29f3b191afb  libstdc++-v3/doc/html/manual/using.html
! ea78c1e7e98f6458923056e2b869969d  libstdc++-v3/doc/html/manual/using_concurrency.html
! f8898e59cc7155a01a17f15a3b853c30  libstdc++-v3/doc/html/manual/using_dual_abi.html
  a372b01a93ca1beeb843a1440bd25cdd  libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html
! 09eeb2fa79fb240e032461adcbe2cb4a  libstdc++-v3/doc/html/manual/using_exceptions.html
  8fc6625206a4feba33ced5fa38ab3af8  libstdc++-v3/doc/html/manual/using_headers.html
  c1e8d8c0d84363807d41edeb82e9dbfc  libstdc++-v3/doc/html/manual/using_macros.html
  ccc3b1a320ccc49a977c80546610195b  libstdc++-v3/doc/html/manual/using_namespaces.html
*************** ccbc0492a648982f2dc225595bdbc567  libstd
*** 113601,113607 ****
  5906074c27c57c65b220c35bbcb2c5ec  libstdc++-v3/doc/xml/book.txml
  44d3a92b83abfb18efac80519c79b44c  libstdc++-v3/doc/xml/chapter.txml
  011b8e6a5442e4dc08f02e7295b644a3  libstdc++-v3/doc/xml/class.txml
! 3dd8e992a5c3e037b8c5d81ab8d2dd47  libstdc++-v3/doc/xml/faq.xml
  ea77580f7e81e2c49aea3f425c01ee2b  libstdc++-v3/doc/xml/gnu/fdl-1.3.xml
  56bb32e9ab9358834c5f8eca2cd0e969  libstdc++-v3/doc/xml/gnu/gpl-3.0.xml
  18a6390297702ec8fd75cbcc525d2005  libstdc++-v3/doc/xml/images/confdeps.dot
--- 113989,113995 ----
  5906074c27c57c65b220c35bbcb2c5ec  libstdc++-v3/doc/xml/book.txml
  44d3a92b83abfb18efac80519c79b44c  libstdc++-v3/doc/xml/chapter.txml
  011b8e6a5442e4dc08f02e7295b644a3  libstdc++-v3/doc/xml/class.txml
! cd3e86b2f1ae5be8167ef6f329aad872  libstdc++-v3/doc/xml/faq.xml
  ea77580f7e81e2c49aea3f425c01ee2b  libstdc++-v3/doc/xml/gnu/fdl-1.3.xml
  56bb32e9ab9358834c5f8eca2cd0e969  libstdc++-v3/doc/xml/gnu/gpl-3.0.xml
  18a6390297702ec8fd75cbcc525d2005  libstdc++-v3/doc/xml/images/confdeps.dot
*************** cc132f90a00a3ca05f64b578f9e332aa  libstd
*** 113781,113789 ****
  f63bfdc03ba2b82c74864f02206d7c52  libstdc++-v3/doc/xml/images/pbds_tree_text_lor_find.svg
  33bc39e8f2d47f3d490d7ca7d4832b43  libstdc++-v3/doc/xml/images/pbds_trie_node_updator_policy_cd.png
  df705f3839120dcb896e9839cf3404d0  libstdc++-v3/doc/xml/images/pbds_update_seq_diagram.png
! f2b698ac9c16af780200a31809e68c05  libstdc++-v3/doc/xml/manual/abi.xml
  c1d775ba87be90b85044162eab59a66c  libstdc++-v3/doc/xml/manual/algorithms.xml
! 14c656cb14d8e0a60b8817d8934d7766  libstdc++-v3/doc/xml/manual/allocator.xml
  7bdfafe644aa63fec22160e7cc582eb3  libstdc++-v3/doc/xml/manual/appendix_contributing.xml
  11e0fd62db5b93db462f3c54750904ec  libstdc++-v3/doc/xml/manual/appendix_free.xml
  0e37b1b056c89ad8cd7ef98f9924284c  libstdc++-v3/doc/xml/manual/appendix_porting.xml
--- 114169,114177 ----
  f63bfdc03ba2b82c74864f02206d7c52  libstdc++-v3/doc/xml/images/pbds_tree_text_lor_find.svg
  33bc39e8f2d47f3d490d7ca7d4832b43  libstdc++-v3/doc/xml/images/pbds_trie_node_updator_policy_cd.png
  df705f3839120dcb896e9839cf3404d0  libstdc++-v3/doc/xml/images/pbds_update_seq_diagram.png
! e03902a98b440447a5487632669a59e1  libstdc++-v3/doc/xml/manual/abi.xml
  c1d775ba87be90b85044162eab59a66c  libstdc++-v3/doc/xml/manual/algorithms.xml
! 6c610a11a12068aeba6bb4d50860f6a5  libstdc++-v3/doc/xml/manual/allocator.xml
  7bdfafe644aa63fec22160e7cc582eb3  libstdc++-v3/doc/xml/manual/appendix_contributing.xml
  11e0fd62db5b93db462f3c54750904ec  libstdc++-v3/doc/xml/manual/appendix_free.xml
  0e37b1b056c89ad8cd7ef98f9924284c  libstdc++-v3/doc/xml/manual/appendix_porting.xml
*************** b84cb983bda244285e1314327a420e66  libstd
*** 113794,113800 ****
  e184d827d7fb559037041e81118936cb  libstdc++-v3/doc/xml/manual/build_hacking.xml
  8f13cae7ea80bc018b87b4ff8de7e3cf  libstdc++-v3/doc/xml/manual/codecvt.xml
  af3361d0d0af961859ec0346c38ac8c8  libstdc++-v3/doc/xml/manual/concurrency.xml
! 86f27306f8b76aebd69ea92641fd2c94  libstdc++-v3/doc/xml/manual/concurrency_extensions.xml
  c814233bae2af79cc1273d72145d497c  libstdc++-v3/doc/xml/manual/configure.xml
  0af07cc2460e288292186ea8149169ee  libstdc++-v3/doc/xml/manual/containers.xml
  d08c687d9520b2f9d8dd6d973cca9e6a  libstdc++-v3/doc/xml/manual/ctype.xml
--- 114182,114188 ----
  e184d827d7fb559037041e81118936cb  libstdc++-v3/doc/xml/manual/build_hacking.xml
  8f13cae7ea80bc018b87b4ff8de7e3cf  libstdc++-v3/doc/xml/manual/codecvt.xml
  af3361d0d0af961859ec0346c38ac8c8  libstdc++-v3/doc/xml/manual/concurrency.xml
! 9da4610e32c81714e9188c6852c8dc93  libstdc++-v3/doc/xml/manual/concurrency_extensions.xml
  c814233bae2af79cc1273d72145d497c  libstdc++-v3/doc/xml/manual/configure.xml
  0af07cc2460e288292186ea8149169ee  libstdc++-v3/doc/xml/manual/containers.xml
  d08c687d9520b2f9d8dd6d973cca9e6a  libstdc++-v3/doc/xml/manual/ctype.xml
*************** abf083b50c6a5992ed45fd74c564ce42  libstd
*** 113802,113809 ****
  c38bf467401b65722356772cdf4d064b  libstdc++-v3/doc/xml/manual/debug_mode.xml
  f320f25003678cca910f09ba54c923fc  libstdc++-v3/doc/xml/manual/diagnostics.xml
  c7467f13981c47fc740c948b16a42a53  libstdc++-v3/doc/xml/manual/documentation_hacking.xml
! e93feff3499d469f746714f539549e5f  libstdc++-v3/doc/xml/manual/evolution.xml
! 137276d6eb0bbaf6563b8319770dc747  libstdc++-v3/doc/xml/manual/extensions.xml
  7f1864c7f3c3b2bfde84b7086be97ca7  libstdc++-v3/doc/xml/manual/internals.xml
  7dd90360d3e28e9f8aa299d81e4234c7  libstdc++-v3/doc/xml/manual/intro.xml
  93c3158fe28bdfbbf03dd039cc4e79a2  libstdc++-v3/doc/xml/manual/io.xml
--- 114190,114197 ----
  c38bf467401b65722356772cdf4d064b  libstdc++-v3/doc/xml/manual/debug_mode.xml
  f320f25003678cca910f09ba54c923fc  libstdc++-v3/doc/xml/manual/diagnostics.xml
  c7467f13981c47fc740c948b16a42a53  libstdc++-v3/doc/xml/manual/documentation_hacking.xml
! 07eb831e9f3d714ededaf4fd8eaf953e  libstdc++-v3/doc/xml/manual/evolution.xml
! bdd63abf4539dfac8d1930024114b8ac  libstdc++-v3/doc/xml/manual/extensions.xml
  7f1864c7f3c3b2bfde84b7086be97ca7  libstdc++-v3/doc/xml/manual/internals.xml
  7dd90360d3e28e9f8aa299d81e4234c7  libstdc++-v3/doc/xml/manual/intro.xml
  93c3158fe28bdfbbf03dd039cc4e79a2  libstdc++-v3/doc/xml/manual/io.xml
*************** e93feff3499d469f746714f539549e5f  libstd
*** 113811,113839 ****
  b9c8759ff9b60e09bd2875420a55cd31  libstdc++-v3/doc/xml/manual/locale.xml
  b00f98f125f6186c369ce588d795f978  libstdc++-v3/doc/xml/manual/localization.xml
  90cedee1e8e04d1ab87bbf41d47293ec  libstdc++-v3/doc/xml/manual/messages.xml
! cd6d12f87a30d3b85d80833476c19995  libstdc++-v3/doc/xml/manual/mt_allocator.xml
  42b8355117a7bd9aa755048290e70d2c  libstdc++-v3/doc/xml/manual/numerics.xml
! 7edd591e15a0bbc76d58e9edcb7c28d1  libstdc++-v3/doc/xml/manual/parallel_mode.xml
  7c390b245068bcc2f3f52590bdf8526f  libstdc++-v3/doc/xml/manual/policy_data_structures.xml
! 26c588a0ffa7f8fc5b3e09d398c52a3f  libstdc++-v3/doc/xml/manual/policy_data_structures_biblio.xml
  f25986e96331b9ee671b4fe62ab33a1c  libstdc++-v3/doc/xml/manual/prerequisites.xml
! ab6d91afc9a36e19a6524c6ca834170a  libstdc++-v3/doc/xml/manual/shared_ptr.xml
  d7f222c42325cd44eadad2c59eef7e6f  libstdc++-v3/doc/xml/manual/spine.xml
! 771a0435ad3ba95fddbd89a287b0bc1a  libstdc++-v3/doc/xml/manual/status_cxx1998.xml
! 04fb25fd727e021e3810c7ccde4d89ca  libstdc++-v3/doc/xml/manual/status_cxx2011.xml
! 708d5465f3f43ba013bb710a025f9997  libstdc++-v3/doc/xml/manual/status_cxx2014.xml
! 5959c45f31d87132a1bc2ebb44e6077b  libstdc++-v3/doc/xml/manual/status_cxx2017.xml
! 291ed67ecefdbadd1de1d8c1475832af  libstdc++-v3/doc/xml/manual/status_cxx2020.xml
! d5ba1429aea50cd5ee84e7912579da72  libstdc++-v3/doc/xml/manual/status_cxx2023.xml
  e12241b98a6c1e835b7b1d1bb31761ca  libstdc++-v3/doc/xml/manual/status_cxxis29124.xml
! 4ff8e2cf783a5175985ae3ef1db7940d  libstdc++-v3/doc/xml/manual/status_cxxtr1.xml
! 3bde59a9cc218b08c6510f5247349dc2  libstdc++-v3/doc/xml/manual/status_cxxtr24733.xml
! 49334f70b9df9a3f9b81e04a418e8066  libstdc++-v3/doc/xml/manual/strings.xml
  2b80feb1b53a8d0895a292620ec430b2  libstdc++-v3/doc/xml/manual/support.xml
! eccf4425a72a8b7f78470723176803db  libstdc++-v3/doc/xml/manual/test.xml
  e2e099be3dd6a4b7a940a7232635ee2c  libstdc++-v3/doc/xml/manual/test_policy_data_structures.xml
! 8bdf3d05092df5ba07699d293887542a  libstdc++-v3/doc/xml/manual/using.xml
! 8b2ecaf4e0a66bc6db1724038373671a  libstdc++-v3/doc/xml/manual/using_exceptions.xml
  74a5acaa32b3d223bd413c1bb5b69ac6  libstdc++-v3/doc/xml/manual/utilities.xml
  0c8bbf7c330217f862dd4871a5ba88d0  libstdc++-v3/doc/xml/spine.xml
  bd966b4a0df6f2a84f9770525581d45c  libstdc++-v3/doc/xsl/customization.xsl.in
--- 114199,114227 ----
  b9c8759ff9b60e09bd2875420a55cd31  libstdc++-v3/doc/xml/manual/locale.xml
  b00f98f125f6186c369ce588d795f978  libstdc++-v3/doc/xml/manual/localization.xml
  90cedee1e8e04d1ab87bbf41d47293ec  libstdc++-v3/doc/xml/manual/messages.xml
! 40bc0d6083e3e199fcc5fa8738760f30  libstdc++-v3/doc/xml/manual/mt_allocator.xml
  42b8355117a7bd9aa755048290e70d2c  libstdc++-v3/doc/xml/manual/numerics.xml
! 670fae5ac4c0fa1aec6d56273ad3e32f  libstdc++-v3/doc/xml/manual/parallel_mode.xml
  7c390b245068bcc2f3f52590bdf8526f  libstdc++-v3/doc/xml/manual/policy_data_structures.xml
! 44c53fbcb219a9a8db16061983e78759  libstdc++-v3/doc/xml/manual/policy_data_structures_biblio.xml
  f25986e96331b9ee671b4fe62ab33a1c  libstdc++-v3/doc/xml/manual/prerequisites.xml
! adadeaccd7e3be18b69dcc095e96f3af  libstdc++-v3/doc/xml/manual/shared_ptr.xml
  d7f222c42325cd44eadad2c59eef7e6f  libstdc++-v3/doc/xml/manual/spine.xml
! 95aa2fc9a168e2b8d3cd7a6ff333683b  libstdc++-v3/doc/xml/manual/status_cxx1998.xml
! 10a19df4d3fefacaf3ed4ca4c5cb4e05  libstdc++-v3/doc/xml/manual/status_cxx2011.xml
! 4f70307aa2cb0ee63e0118644ca335f7  libstdc++-v3/doc/xml/manual/status_cxx2014.xml
! 7497dc124fde2f4f2c9ec52524ddd874  libstdc++-v3/doc/xml/manual/status_cxx2017.xml
! 2b8d7fa4458f9cef741ce5f3a1ea20c2  libstdc++-v3/doc/xml/manual/status_cxx2020.xml
! 978a702dd6ecf22eddec8319d1845acb  libstdc++-v3/doc/xml/manual/status_cxx2023.xml
  e12241b98a6c1e835b7b1d1bb31761ca  libstdc++-v3/doc/xml/manual/status_cxxis29124.xml
! 4bd1d4baf604762339c18293f55fea6a  libstdc++-v3/doc/xml/manual/status_cxxtr1.xml
! 69ef1453c4992cd33717252bf276663e  libstdc++-v3/doc/xml/manual/status_cxxtr24733.xml
! f034a532553ac7a651470a37734de409  libstdc++-v3/doc/xml/manual/strings.xml
  2b80feb1b53a8d0895a292620ec430b2  libstdc++-v3/doc/xml/manual/support.xml
! 00b1a0e7aadec2255b3511eddc296e0b  libstdc++-v3/doc/xml/manual/test.xml
  e2e099be3dd6a4b7a940a7232635ee2c  libstdc++-v3/doc/xml/manual/test_policy_data_structures.xml
! 73e68ba75395798b0bc3fc9ebcafa33f  libstdc++-v3/doc/xml/manual/using.xml
! 257e301935b13b4b045e571fa248a4d8  libstdc++-v3/doc/xml/manual/using_exceptions.xml
  74a5acaa32b3d223bd413c1bb5b69ac6  libstdc++-v3/doc/xml/manual/utilities.xml
  0c8bbf7c330217f862dd4871a5ba88d0  libstdc++-v3/doc/xml/spine.xml
  bd966b4a0df6f2a84f9770525581d45c  libstdc++-v3/doc/xsl/customization.xsl.in
*************** ba5569b3568669c1c77efc18640dd1aa  libstd
*** 113854,113865 ****
  b7a02d402cc5dc3b5900e144b1443bb7  libstdc++-v3/include/bits/allocated_ptr.h
  9c5b773ad00830bea46f2a8fa4ac22e7  libstdc++-v3/include/bits/allocator.h
  c5174ab6282ecbeced42a602ef71aa54  libstdc++-v3/include/bits/atomic_base.h
! 32bb2eb4f10336b3a7bbcbcb3e7b2697  libstdc++-v3/include/bits/atomic_futex.h
  10c6f59884b2d39c8bfaeb46e55b914d  libstdc++-v3/include/bits/atomic_timed_wait.h
  d365c012b1cfe6ca40197bca4b8e9abe  libstdc++-v3/include/bits/atomic_wait.h
  7a572f1436f9b069a82a366cd364af5c  libstdc++-v3/include/bits/basic_ios.h
  f72ffffc3ea2a2cb85b705217a116e9e  libstdc++-v3/include/bits/basic_ios.tcc
! 15ebc9646635613a992794065eddba61  libstdc++-v3/include/bits/basic_string.h
  9e86f840e9d2da76f6ca15673d268d93  libstdc++-v3/include/bits/basic_string.tcc
  12d210ea7f6b7aff57c126940f016d55  libstdc++-v3/include/bits/boost_concept_check.h
  588d77b5caf0f9ab703289024f7faf88  libstdc++-v3/include/bits/c++0x_warning.h
--- 114242,114253 ----
  b7a02d402cc5dc3b5900e144b1443bb7  libstdc++-v3/include/bits/allocated_ptr.h
  9c5b773ad00830bea46f2a8fa4ac22e7  libstdc++-v3/include/bits/allocator.h
  c5174ab6282ecbeced42a602ef71aa54  libstdc++-v3/include/bits/atomic_base.h
! f32e39c120815c7e19ae3bd66fae1f0c  libstdc++-v3/include/bits/atomic_futex.h
  10c6f59884b2d39c8bfaeb46e55b914d  libstdc++-v3/include/bits/atomic_timed_wait.h
  d365c012b1cfe6ca40197bca4b8e9abe  libstdc++-v3/include/bits/atomic_wait.h
  7a572f1436f9b069a82a366cd364af5c  libstdc++-v3/include/bits/basic_ios.h
  f72ffffc3ea2a2cb85b705217a116e9e  libstdc++-v3/include/bits/basic_ios.tcc
! b9b621010f3ee8b23e19f54706fcfe72  libstdc++-v3/include/bits/basic_string.h
  9e86f840e9d2da76f6ca15673d268d93  libstdc++-v3/include/bits/basic_string.tcc
  12d210ea7f6b7aff57c126940f016d55  libstdc++-v3/include/bits/boost_concept_check.h
  588d77b5caf0f9ab703289024f7faf88  libstdc++-v3/include/bits/c++0x_warning.h
*************** f72ffffc3ea2a2cb85b705217a116e9e  libstd
*** 113867,113883 ****
  7f47148b0e13c75cb1ca1385d6ba2b3e  libstdc++-v3/include/bits/char_traits.h
  0a14bf55d3849f91b6f272370226f0b8  libstdc++-v3/include/bits/charconv.h
  a26ba7aaa694d8aeb87258e9cd78db1d  libstdc++-v3/include/bits/chrono.h
! c9cb671d5a943207974e081664d4944c  libstdc++-v3/include/bits/chrono_io.h
  99228a8561efb5af08fdf896e792dbd3  libstdc++-v3/include/bits/codecvt.h
  02b297f22d933704022d62bb998083b6  libstdc++-v3/include/bits/concept_check.h
  ab05c0fac3a44588f6ca1f197b7758d2  libstdc++-v3/include/bits/cow_string.h
! d954ef085b8f02d0a654ba85e5171161  libstdc++-v3/include/bits/cpp_type_traits.h
! dd2d6ad4ef742a835282ef7c20df17d0  libstdc++-v3/include/bits/deque.tcc
  144af56eb1fdcfa071b31d4e35716372  libstdc++-v3/include/bits/enable_special_members.h
  9fbde52831f934ca63d09c817fe5f7b3  libstdc++-v3/include/bits/erase_if.h
  68f726da90926f2730fc257270d717cd  libstdc++-v3/include/bits/forward_list.h
  fc266b1bf548f2445b990be5c7f574c1  libstdc++-v3/include/bits/forward_list.tcc
! b0bd8700601834f8e0122eb103c2a3a6  libstdc++-v3/include/bits/fs_dir.h
  01a4d96f29ae6ac0bb84541df306c3f5  libstdc++-v3/include/bits/fs_fwd.h
  254fcd2d0a399cb31596c75aa676ce58  libstdc++-v3/include/bits/fs_ops.h
  1be3cfd07ce0d4556bd52594ab337b7f  libstdc++-v3/include/bits/fs_path.h
--- 114255,114271 ----
  7f47148b0e13c75cb1ca1385d6ba2b3e  libstdc++-v3/include/bits/char_traits.h
  0a14bf55d3849f91b6f272370226f0b8  libstdc++-v3/include/bits/charconv.h
  a26ba7aaa694d8aeb87258e9cd78db1d  libstdc++-v3/include/bits/chrono.h
! 728eefcd3d8bd361f5754ccef8cd601d  libstdc++-v3/include/bits/chrono_io.h
  99228a8561efb5af08fdf896e792dbd3  libstdc++-v3/include/bits/codecvt.h
  02b297f22d933704022d62bb998083b6  libstdc++-v3/include/bits/concept_check.h
  ab05c0fac3a44588f6ca1f197b7758d2  libstdc++-v3/include/bits/cow_string.h
! ec765e2f1e49a5d8005cfb00827e03af  libstdc++-v3/include/bits/cpp_type_traits.h
! abf10f7822a3d2b4feaa7a1a2daa8865  libstdc++-v3/include/bits/deque.tcc
  144af56eb1fdcfa071b31d4e35716372  libstdc++-v3/include/bits/enable_special_members.h
  9fbde52831f934ca63d09c817fe5f7b3  libstdc++-v3/include/bits/erase_if.h
  68f726da90926f2730fc257270d717cd  libstdc++-v3/include/bits/forward_list.h
  fc266b1bf548f2445b990be5c7f574c1  libstdc++-v3/include/bits/forward_list.tcc
! c9541d566769e4c7678db8b75d569397  libstdc++-v3/include/bits/fs_dir.h
  01a4d96f29ae6ac0bb84541df306c3f5  libstdc++-v3/include/bits/fs_fwd.h
  254fcd2d0a399cb31596c75aa676ce58  libstdc++-v3/include/bits/fs_ops.h
  1be3cfd07ce0d4556bd52594ab337b7f  libstdc++-v3/include/bits/fs_path.h
*************** b0bd8700601834f8e0122eb103c2a3a6  libstd
*** 113886,113898 ****
  fed35fb4e12ff04f01f0125e66325dd6  libstdc++-v3/include/bits/functional_hash.h
  fd5665870d6f833cfe3af7154f1e95a7  libstdc++-v3/include/bits/gslice.h
  a4d667ef5d5bd526eb81a380ad0b14d3  libstdc++-v3/include/bits/gslice_array.h
! 0f9e2cd62fdac1fa9e234550d89e7ed2  libstdc++-v3/include/bits/hashtable.h
! 2497138cf51c7ec677ba7e4e1eca69fa  libstdc++-v3/include/bits/hashtable_policy.h
  db128d77b5e73ac628f1a9af7bc9fad0  libstdc++-v3/include/bits/indirect_array.h
  5c9dfe0c12f9c609716ed80b27ea7473  libstdc++-v3/include/bits/invoke.h
  9f9c18891605c48f576cee879c306254  libstdc++-v3/include/bits/ios_base.h
  0177f2702bc5b9d1cdc7b9049c8fdd12  libstdc++-v3/include/bits/istream.tcc
! 5b445142c28567ca98b97173b85f1d53  libstdc++-v3/include/bits/iterator_concepts.h
  0456c62eaa10cb4e168d79d026a57de2  libstdc++-v3/include/bits/list.tcc
  56f636f54833b560098a6de5754d02b7  libstdc++-v3/include/bits/locale_classes.h
  28d76b82765840e78ee58ecb42681e63  libstdc++-v3/include/bits/locale_classes.tcc
--- 114274,114286 ----
  fed35fb4e12ff04f01f0125e66325dd6  libstdc++-v3/include/bits/functional_hash.h
  fd5665870d6f833cfe3af7154f1e95a7  libstdc++-v3/include/bits/gslice.h
  a4d667ef5d5bd526eb81a380ad0b14d3  libstdc++-v3/include/bits/gslice_array.h
! 0febe716121f68c30cddf6a861277829  libstdc++-v3/include/bits/hashtable.h
! b8208b36138e61224ac99495a380db6e  libstdc++-v3/include/bits/hashtable_policy.h
  db128d77b5e73ac628f1a9af7bc9fad0  libstdc++-v3/include/bits/indirect_array.h
  5c9dfe0c12f9c609716ed80b27ea7473  libstdc++-v3/include/bits/invoke.h
  9f9c18891605c48f576cee879c306254  libstdc++-v3/include/bits/ios_base.h
  0177f2702bc5b9d1cdc7b9049c8fdd12  libstdc++-v3/include/bits/istream.tcc
! 71ba91b659239512509665ed27cf63ab  libstdc++-v3/include/bits/iterator_concepts.h
  0456c62eaa10cb4e168d79d026a57de2  libstdc++-v3/include/bits/list.tcc
  56f636f54833b560098a6de5754d02b7  libstdc++-v3/include/bits/locale_classes.h
  28d76b82765840e78ee58ecb42681e63  libstdc++-v3/include/bits/locale_classes.tcc
*************** db128d77b5e73ac628f1a9af7bc9fad0  libstd
*** 113900,113915 ****
  430651eae09aa9aab33723552132e6b1  libstdc++-v3/include/bits/locale_facets.h
  1513b4b84e748e62522421d3d82fc18e  libstdc++-v3/include/bits/locale_facets.tcc
  771fef7ddd10f5b7bc49075f5053bacb  libstdc++-v3/include/bits/locale_facets_nonio.h
! 59faf9f9f9abed543b2edad1f0b2964f  libstdc++-v3/include/bits/locale_facets_nonio.tcc
  e7037c9f7bba915cc571698cb6ce6ea9  libstdc++-v3/include/bits/localefwd.h
  b0c76e6c0ecd855f846a15efd155643d  libstdc++-v3/include/bits/mask_array.h
  857dc87bf729b0952c45c2a098f2691d  libstdc++-v3/include/bits/max_size_type.h
! 5bf5234e2d2fd297abf5070bce896c27  libstdc++-v3/include/bits/memory_resource.h
  f91bfefc8ffc8275f1860208a7ce4598  libstdc++-v3/include/bits/memoryfwd.h
  7b351469ff54ea35e3e585733ed01c68  libstdc++-v3/include/bits/mofunc_impl.h
  666aabd4a7b2d63fc1081b35311b7ac1  libstdc++-v3/include/bits/move.h
  12f5ad319cadf9071cacd4f73057d844  libstdc++-v3/include/bits/move_only_function.h
! c7892ebb1170c1f49c5be98396a83230  libstdc++-v3/include/bits/new_allocator.h
  0ab91b18b69100cacedda0df4d54f8ee  libstdc++-v3/include/bits/node_handle.h
  805d48778212d7bcf6e4201f891f03ca  libstdc++-v3/include/bits/ostream.tcc
  acc3c5b842d22ae52e5f0a6713275fef  libstdc++-v3/include/bits/ostream_insert.h
--- 114288,114303 ----
  430651eae09aa9aab33723552132e6b1  libstdc++-v3/include/bits/locale_facets.h
  1513b4b84e748e62522421d3d82fc18e  libstdc++-v3/include/bits/locale_facets.tcc
  771fef7ddd10f5b7bc49075f5053bacb  libstdc++-v3/include/bits/locale_facets_nonio.h
! d5cd6ad30ab763812c46ee6d46377274  libstdc++-v3/include/bits/locale_facets_nonio.tcc
  e7037c9f7bba915cc571698cb6ce6ea9  libstdc++-v3/include/bits/localefwd.h
  b0c76e6c0ecd855f846a15efd155643d  libstdc++-v3/include/bits/mask_array.h
  857dc87bf729b0952c45c2a098f2691d  libstdc++-v3/include/bits/max_size_type.h
! 9e0543d0f8ef116c6280f26e5926d2e6  libstdc++-v3/include/bits/memory_resource.h
  f91bfefc8ffc8275f1860208a7ce4598  libstdc++-v3/include/bits/memoryfwd.h
  7b351469ff54ea35e3e585733ed01c68  libstdc++-v3/include/bits/mofunc_impl.h
  666aabd4a7b2d63fc1081b35311b7ac1  libstdc++-v3/include/bits/move.h
  12f5ad319cadf9071cacd4f73057d844  libstdc++-v3/include/bits/move_only_function.h
! 166335287d841974caaf2b4a6db8688d  libstdc++-v3/include/bits/new_allocator.h
  0ab91b18b69100cacedda0df4d54f8ee  libstdc++-v3/include/bits/node_handle.h
  805d48778212d7bcf6e4201f891f03ca  libstdc++-v3/include/bits/ostream.tcc
  acc3c5b842d22ae52e5f0a6713275fef  libstdc++-v3/include/bits/ostream_insert.h
*************** ea9f3638ad1b48ca29f5994d80c71708  libstd
*** 113921,113932 ****
  5063de5afefced00ecaace4d45d034d3  libstdc++-v3/include/bits/random.h
  09901fcf0de4c3ba0d6a0dfd023607b9  libstdc++-v3/include/bits/random.tcc
  473f8f1ef247a71477d517401689f0c9  libstdc++-v3/include/bits/range_access.h
! 77d322c823055aabe8ffa990d70b0c26  libstdc++-v3/include/bits/ranges_algo.h
! 0456f04c77137db2972b340487b1fdea  libstdc++-v3/include/bits/ranges_algobase.h
! 12a76c1b7d1a0d2fa1d155693458e373  libstdc++-v3/include/bits/ranges_base.h
  130f0e54de161dc32742e62f03e44704  libstdc++-v3/include/bits/ranges_cmp.h
! 0169a884ede559c4f97d0f92430da167  libstdc++-v3/include/bits/ranges_uninitialized.h
! e6057e846a1b5c1c8e373a852009b429  libstdc++-v3/include/bits/ranges_util.h
  5f28e5a597b4b84858ca077d118b7655  libstdc++-v3/include/bits/refwrap.h
  6578fe4f222b797a9819bac2fff076aa  libstdc++-v3/include/bits/regex.h
  2715eb7a43f808404c2629768d926ff1  libstdc++-v3/include/bits/regex.tcc
--- 114309,114320 ----
  5063de5afefced00ecaace4d45d034d3  libstdc++-v3/include/bits/random.h
  09901fcf0de4c3ba0d6a0dfd023607b9  libstdc++-v3/include/bits/random.tcc
  473f8f1ef247a71477d517401689f0c9  libstdc++-v3/include/bits/range_access.h
! 0b340f9f0aa8be50f3129c18e59e2b02  libstdc++-v3/include/bits/ranges_algo.h
! 8da69d1883c69ec7a5d57af5d6bb60fd  libstdc++-v3/include/bits/ranges_algobase.h
! 9b18aa7d8fd40cbccc3783c4d2e93046  libstdc++-v3/include/bits/ranges_base.h
  130f0e54de161dc32742e62f03e44704  libstdc++-v3/include/bits/ranges_cmp.h
! 1df9866686fcec2b45ae110995687d70  libstdc++-v3/include/bits/ranges_uninitialized.h
! 9ae5b2e65607cbdc7f3bf5bf34e1f3f5  libstdc++-v3/include/bits/ranges_util.h
  5f28e5a597b4b84858ca077d118b7655  libstdc++-v3/include/bits/refwrap.h
  6578fe4f222b797a9819bac2fff076aa  libstdc++-v3/include/bits/regex.h
  2715eb7a43f808404c2629768d926ff1  libstdc++-v3/include/bits/regex.tcc
*************** f5db8c25a45bb53faa4affdc482ec0ae  libstd
*** 113954,113965 ****
  f7dbdb00cb5664fe06868cb519c18fbf  libstdc++-v3/include/bits/std_thread.h
  5be391a12793142550786b0bb50e6138  libstdc++-v3/include/bits/stl_algo.h
  443f7678e66a208008b30b4fe6575fc7  libstdc++-v3/include/bits/stl_algobase.h
! fe211f2fb904e83c5ef954a7e1af3d49  libstdc++-v3/include/bits/stl_bvector.h
  2692aca002018b5b1663c464dddaf63f  libstdc++-v3/include/bits/stl_construct.h
! e4d39faab9dc5e3419435581d6869651  libstdc++-v3/include/bits/stl_deque.h
  60507e6d5f3434ae5ce86363f622a178  libstdc++-v3/include/bits/stl_function.h
  f1a151d37c2259f38ae9f3bb60c184cc  libstdc++-v3/include/bits/stl_heap.h
! 078d2c6e40695db2f690aeaa2795d719  libstdc++-v3/include/bits/stl_iterator.h
  a98431c50c8cf6faa3d9b03f2ae47efb  libstdc++-v3/include/bits/stl_iterator_base_funcs.h
  d041a2fcff4ab5d385d0c6c1542917bc  libstdc++-v3/include/bits/stl_iterator_base_types.h
  fb63f540eb43cc83f3b74a25a0038a07  libstdc++-v3/include/bits/stl_list.h
--- 114342,114353 ----
  f7dbdb00cb5664fe06868cb519c18fbf  libstdc++-v3/include/bits/std_thread.h
  5be391a12793142550786b0bb50e6138  libstdc++-v3/include/bits/stl_algo.h
  443f7678e66a208008b30b4fe6575fc7  libstdc++-v3/include/bits/stl_algobase.h
! 017c2db5a715f2c5215992f550936e62  libstdc++-v3/include/bits/stl_bvector.h
  2692aca002018b5b1663c464dddaf63f  libstdc++-v3/include/bits/stl_construct.h
! 4a0bb23f380040a1ce59a88a8353ce1b  libstdc++-v3/include/bits/stl_deque.h
  60507e6d5f3434ae5ce86363f622a178  libstdc++-v3/include/bits/stl_function.h
  f1a151d37c2259f38ae9f3bb60c184cc  libstdc++-v3/include/bits/stl_heap.h
! d8a7a6dcde87a94d9c9abc252fe100d5  libstdc++-v3/include/bits/stl_iterator.h
  a98431c50c8cf6faa3d9b03f2ae47efb  libstdc++-v3/include/bits/stl_iterator_base_funcs.h
  d041a2fcff4ab5d385d0c6c1542917bc  libstdc++-v3/include/bits/stl_iterator_base_types.h
  fb63f540eb43cc83f3b74a25a0038a07  libstdc++-v3/include/bits/stl_list.h
*************** c3445e498460fdc279feccd5ae8fbb86  libstd
*** 113976,113982 ****
  f7c3cbbbff1984288eafd88b89681a07  libstdc++-v3/include/bits/stl_tempbuf.h
  36d6f928cc8e71e112b42db10f544bc1  libstdc++-v3/include/bits/stl_tree.h
  318d09ba72a8265560864b609bcb530f  libstdc++-v3/include/bits/stl_uninitialized.h
! 514164964ac06e2061e9e779d8cf420e  libstdc++-v3/include/bits/stl_vector.h
  8b9076ee3d87752c4e3d5cdafa8b9461  libstdc++-v3/include/bits/stream_iterator.h
  9210c3666e5e698bc555d7335c97696d  libstdc++-v3/include/bits/streambuf.tcc
  c41c5f3f46185db536fa877db8f0dd4e  libstdc++-v3/include/bits/streambuf_iterator.h
--- 114364,114370 ----
  f7c3cbbbff1984288eafd88b89681a07  libstdc++-v3/include/bits/stl_tempbuf.h
  36d6f928cc8e71e112b42db10f544bc1  libstdc++-v3/include/bits/stl_tree.h
  318d09ba72a8265560864b609bcb530f  libstdc++-v3/include/bits/stl_uninitialized.h
! 270f7329af0d2978723eb52b899a22c3  libstdc++-v3/include/bits/stl_vector.h
  8b9076ee3d87752c4e3d5cdafa8b9461  libstdc++-v3/include/bits/stream_iterator.h
  9210c3666e5e698bc555d7335c97696d  libstdc++-v3/include/bits/streambuf.tcc
  c41c5f3f46185db536fa877db8f0dd4e  libstdc++-v3/include/bits/streambuf_iterator.h
*************** a6cc9d4b57dc76ee00dc459b9aa9aa4b  libstd
*** 113995,114001 ****
  322814b36de24720a8d60f70da5e3f19  libstdc++-v3/include/bits/valarray_array.h
  d0dc224b4535c28e743c20c95a58c09e  libstdc++-v3/include/bits/valarray_array.tcc
  497da4999eb1bda92fc3d86d2d395554  libstdc++-v3/include/bits/valarray_before.h
! b0d28e6caeb7772f5e6ceabb9e69c4a6  libstdc++-v3/include/bits/vector.tcc
  51aca95b9c0bb2ebdb0394442ba41eb5  libstdc++-v3/include/c/cassert
  a92920f183eb4d2e23e70f36bdd58854  libstdc++-v3/include/c/cctype
  d81a9516b0313de19e213978a64ec2e6  libstdc++-v3/include/c/cerrno
--- 114383,114389 ----
  322814b36de24720a8d60f70da5e3f19  libstdc++-v3/include/bits/valarray_array.h
  d0dc224b4535c28e743c20c95a58c09e  libstdc++-v3/include/bits/valarray_array.tcc
  497da4999eb1bda92fc3d86d2d395554  libstdc++-v3/include/bits/valarray_before.h
! eb9f9f894ffc2193a0a27653af910f84  libstdc++-v3/include/bits/vector.tcc
  51aca95b9c0bb2ebdb0394442ba41eb5  libstdc++-v3/include/c/cassert
  a92920f183eb4d2e23e70f36bdd58854  libstdc++-v3/include/c/cctype
  d81a9516b0313de19e213978a64ec2e6  libstdc++-v3/include/c/cerrno
*************** f34e6ddbb19306e7d9f8c42d51dc6ee3  libstd
*** 114029,114035 ****
  7c28e4e3982f6e96077ec15bed4383ca  libstdc++-v3/include/c_compatibility/setjmp.h
  a86ce75f9dd847b36b3103cbfd0e09e9  libstdc++-v3/include/c_compatibility/signal.h
  1a5903d050b8c3869307031770f14305  libstdc++-v3/include/c_compatibility/stdarg.h
! 0357bf0f700fc5d113d9b75e44ef7f50  libstdc++-v3/include/c_compatibility/stdatomic.h
  b5100d87f77cb4c61636b48f0c141322  libstdc++-v3/include/c_compatibility/stdbool.h
  daab9fb674dcda63c383435afd5fa8c2  libstdc++-v3/include/c_compatibility/stddef.h
  284efb34492927d9c1440f8ec8aaac9d  libstdc++-v3/include/c_compatibility/stdint.h
--- 114417,114423 ----
  7c28e4e3982f6e96077ec15bed4383ca  libstdc++-v3/include/c_compatibility/setjmp.h
  a86ce75f9dd847b36b3103cbfd0e09e9  libstdc++-v3/include/c_compatibility/signal.h
  1a5903d050b8c3869307031770f14305  libstdc++-v3/include/c_compatibility/stdarg.h
! 0bad5da76e01eae1afaa9e5634313135  libstdc++-v3/include/c_compatibility/stdatomic.h
  b5100d87f77cb4c61636b48f0c141322  libstdc++-v3/include/c_compatibility/stdbool.h
  daab9fb674dcda63c383435afd5fa8c2  libstdc++-v3/include/c_compatibility/stddef.h
  284efb34492927d9c1440f8ec8aaac9d  libstdc++-v3/include/c_compatibility/stdint.h
*************** bedeabf12edce197ed12dcd0316fb014  libstd
*** 114051,114057 ****
  e056e894d561a617e8a5fbe43b91fe5c  libstdc++-v3/include/c_global/ciso646
  6630f0421a36b3f446414bf99ca60dd8  libstdc++-v3/include/c_global/climits
  e4c7c2d232b07c4cd56e5e8f767283f8  libstdc++-v3/include/c_global/clocale
! d9b6c14588a399c837455c0bccf98534  libstdc++-v3/include/c_global/cmath
  999c263b7a2d246d1187abd6a13e8c28  libstdc++-v3/include/c_global/csetjmp
  9829a810311d8c8e3e1dd51b6db1980a  libstdc++-v3/include/c_global/csignal
  f4048bb0abba66f92a6c162d91e03840  libstdc++-v3/include/c_global/cstdalign
--- 114439,114445 ----
  e056e894d561a617e8a5fbe43b91fe5c  libstdc++-v3/include/c_global/ciso646
  6630f0421a36b3f446414bf99ca60dd8  libstdc++-v3/include/c_global/climits
  e4c7c2d232b07c4cd56e5e8f767283f8  libstdc++-v3/include/c_global/clocale
! bfedd8724dfb7d08f864ea6b57586b4a  libstdc++-v3/include/c_global/cmath
  999c263b7a2d246d1187abd6a13e8c28  libstdc++-v3/include/c_global/csetjmp
  9829a810311d8c8e3e1dd51b6db1980a  libstdc++-v3/include/c_global/csignal
  f4048bb0abba66f92a6c162d91e03840  libstdc++-v3/include/c_global/cstdalign
*************** d723cddadad626e4147ae555a795d3ac  libstd
*** 114094,114107 ****
  92c5ac3f7e20f86e3d86f1342849f7dd  libstdc++-v3/include/debug/formatter.h
  eb3ad55c903b7d6432e96f2f61e61420  libstdc++-v3/include/debug/forward_list
  8fcdb38b4006678d506e0e223988824a  libstdc++-v3/include/debug/functions.h
! dce642be87943b1f37b2680d758c8e3c  libstdc++-v3/include/debug/helper_functions.h
  3e1868550108da7987015b77b3629fad  libstdc++-v3/include/debug/list
  c845fd12d717810528aaf5733a4658e4  libstdc++-v3/include/debug/macros.h
  72ee22202e97490f4d8c37281e830aa4  libstdc++-v3/include/debug/map
! d5844aa5092f35f6cdf39396dce97604  libstdc++-v3/include/debug/map.h
  8d4679fa6a8e970942dbe3b756ae5bc2  libstdc++-v3/include/debug/multimap.h
  d443675b9794922fdb6c461970f46f25  libstdc++-v3/include/debug/multiset.h
! 575884fb576324c807e0a94cca2eff7c  libstdc++-v3/include/debug/safe_base.h
  44f2fc7d6d27fe3a96e1738e5c822061  libstdc++-v3/include/debug/safe_container.h
  3ad930cc0c68c1430017b76ccd9c0d6b  libstdc++-v3/include/debug/safe_iterator.h
  00ddfda7c8638d6207e74ded47f3e868  libstdc++-v3/include/debug/safe_iterator.tcc
--- 114482,114495 ----
  92c5ac3f7e20f86e3d86f1342849f7dd  libstdc++-v3/include/debug/formatter.h
  eb3ad55c903b7d6432e96f2f61e61420  libstdc++-v3/include/debug/forward_list
  8fcdb38b4006678d506e0e223988824a  libstdc++-v3/include/debug/functions.h
! ebd5f380617a81d5eb6376d80975bd9b  libstdc++-v3/include/debug/helper_functions.h
  3e1868550108da7987015b77b3629fad  libstdc++-v3/include/debug/list
  c845fd12d717810528aaf5733a4658e4  libstdc++-v3/include/debug/macros.h
  72ee22202e97490f4d8c37281e830aa4  libstdc++-v3/include/debug/map
! 538180632197978527fe5cdc4a44f160  libstdc++-v3/include/debug/map.h
  8d4679fa6a8e970942dbe3b756ae5bc2  libstdc++-v3/include/debug/multimap.h
  d443675b9794922fdb6c461970f46f25  libstdc++-v3/include/debug/multiset.h
! f0e2005ebfa49bfda411410ffbff06d7  libstdc++-v3/include/debug/safe_base.h
  44f2fc7d6d27fe3a96e1738e5c822061  libstdc++-v3/include/debug/safe_container.h
  3ad930cc0c68c1430017b76ccd9c0d6b  libstdc++-v3/include/debug/safe_iterator.h
  00ddfda7c8638d6207e74ded47f3e868  libstdc++-v3/include/debug/safe_iterator.tcc
*************** bc1b8f823ee669382df0aa37d0a726de  libstd
*** 114116,114122 ****
  95990efcc5a75c70d2ee2a4967563b48  libstdc++-v3/include/debug/set.h
  f98b297a4efe585eb7874f38d1b32139  libstdc++-v3/include/debug/stl_iterator.h
  0a0ed08176f4ebe2b80f8677df11a0e3  libstdc++-v3/include/debug/string
! 9e8f38b257585b3ddc23834eb2cd2643  libstdc++-v3/include/debug/unordered_map
  a1e7cd885333d6f9b9bf82eee39843e4  libstdc++-v3/include/debug/unordered_set
  affcbf27d1705bd03ac3e7f0bc6fb0e9  libstdc++-v3/include/debug/vector
  f9838218b1ad0fc9cdad73fcc5e60e14  libstdc++-v3/include/decimal/decimal
--- 114504,114510 ----
  95990efcc5a75c70d2ee2a4967563b48  libstdc++-v3/include/debug/set.h
  f98b297a4efe585eb7874f38d1b32139  libstdc++-v3/include/debug/stl_iterator.h
  0a0ed08176f4ebe2b80f8677df11a0e3  libstdc++-v3/include/debug/string
! d8b1241cfebe05ce282b277aa0085d72  libstdc++-v3/include/debug/unordered_map
  a1e7cd885333d6f9b9bf82eee39843e4  libstdc++-v3/include/debug/unordered_set
  affcbf27d1705bd03ac3e7f0bc6fb0e9  libstdc++-v3/include/debug/vector
  f9838218b1ad0fc9cdad73fcc5e60e14  libstdc++-v3/include/decimal/decimal
*************** d52e8b488fcf0c0276e7f0fb61e40321  libstd
*** 114132,114147 ****
  7830abbb146efd29a73d7fd1fe3db78b  libstdc++-v3/include/experimental/bits/net.h
  e2a104d7a05ff3b698e72c9ab349273c  libstdc++-v3/include/experimental/bits/numeric_traits.h
  3774e633795d511398c269b801a8a7ea  libstdc++-v3/include/experimental/bits/shared_ptr.h
! e1cb3ebcd85ea431f51698031621d6da  libstdc++-v3/include/experimental/bits/simd.h
! c53d51467aec3f34e07d9c8ee00d9a2d  libstdc++-v3/include/experimental/bits/simd_builtin.h
  acd3f967f14a179045b2bb2c58c8677f  libstdc++-v3/include/experimental/bits/simd_converter.h
  fd6a017b7e2e7951d6cf7997942705c7  libstdc++-v3/include/experimental/bits/simd_detail.h
! dd7f12fd188831cca8a0107d318d3276  libstdc++-v3/include/experimental/bits/simd_fixed_size.h
  716234e07f419b61b873aa9055be4170  libstdc++-v3/include/experimental/bits/simd_math.h
  fdd19fd11643f8229f9801a6cbf18142  libstdc++-v3/include/experimental/bits/simd_neon.h
  170863eb71a1b1f81aaa53b33a10d2d9  libstdc++-v3/include/experimental/bits/simd_ppc.h
  18f90ab4b4448d48b775a15641bb01c5  libstdc++-v3/include/experimental/bits/simd_scalar.h
! 28d0a3eb51613550a940270b49597804  libstdc++-v3/include/experimental/bits/simd_x86.h
  286fb694a932e5841d01656193387a08  libstdc++-v3/include/experimental/bits/simd_x86_conversions.h
  fa90a6b6457c0d6ae32b629f779d25ac  libstdc++-v3/include/experimental/bits/string_view.tcc
  8c4c2beba9f9b4c59585fc0068db4869  libstdc++-v3/include/experimental/buffer
--- 114520,114535 ----
  7830abbb146efd29a73d7fd1fe3db78b  libstdc++-v3/include/experimental/bits/net.h
  e2a104d7a05ff3b698e72c9ab349273c  libstdc++-v3/include/experimental/bits/numeric_traits.h
  3774e633795d511398c269b801a8a7ea  libstdc++-v3/include/experimental/bits/shared_ptr.h
! 00778397455c21d941555b3d22dd07f5  libstdc++-v3/include/experimental/bits/simd.h
! 968150fbe72c603ba3d3a218282b0634  libstdc++-v3/include/experimental/bits/simd_builtin.h
  acd3f967f14a179045b2bb2c58c8677f  libstdc++-v3/include/experimental/bits/simd_converter.h
  fd6a017b7e2e7951d6cf7997942705c7  libstdc++-v3/include/experimental/bits/simd_detail.h
! 0d05c4ad6438fce2072f67102d7a5afc  libstdc++-v3/include/experimental/bits/simd_fixed_size.h
  716234e07f419b61b873aa9055be4170  libstdc++-v3/include/experimental/bits/simd_math.h
  fdd19fd11643f8229f9801a6cbf18142  libstdc++-v3/include/experimental/bits/simd_neon.h
  170863eb71a1b1f81aaa53b33a10d2d9  libstdc++-v3/include/experimental/bits/simd_ppc.h
  18f90ab4b4448d48b775a15641bb01c5  libstdc++-v3/include/experimental/bits/simd_scalar.h
! cdfdc5c74035b044ffed128c14bfa6bc  libstdc++-v3/include/experimental/bits/simd_x86.h
  286fb694a932e5841d01656193387a08  libstdc++-v3/include/experimental/bits/simd_x86_conversions.h
  fa90a6b6457c0d6ae32b629f779d25ac  libstdc++-v3/include/experimental/bits/string_view.tcc
  8c4c2beba9f9b4c59585fc0068db4869  libstdc++-v3/include/experimental/buffer
*************** d6f5ecf98e51ea071ec1fd44c8fd115e  libstd
*** 114187,114193 ****
  abec9f625ca91c38369762f6368bffac  libstdc++-v3/include/ext/aligned_buffer.h
  c3bd7eb4301800345e9e13630c9c2302  libstdc++-v3/include/ext/alloc_traits.h
  87d86b344e138ba9274c585c9243bbba  libstdc++-v3/include/ext/atomicity.h
! 80981d56cd0311e9211b897adb136e51  libstdc++-v3/include/ext/bitmap_allocator.h
  1bb491ac6f482e93fb0c506dad0cc942  libstdc++-v3/include/ext/cast.h
  86d62b01b4a4c3e919ad644a5faec72b  libstdc++-v3/include/ext/cmath
  94c05fa20599993783f1f094ae70fa94  libstdc++-v3/include/ext/codecvt_specializations.h
--- 114575,114581 ----
  abec9f625ca91c38369762f6368bffac  libstdc++-v3/include/ext/aligned_buffer.h
  c3bd7eb4301800345e9e13630c9c2302  libstdc++-v3/include/ext/alloc_traits.h
  87d86b344e138ba9274c585c9243bbba  libstdc++-v3/include/ext/atomicity.h
! 3608b63ef0f5b4fbeb75fad002b4c856  libstdc++-v3/include/ext/bitmap_allocator.h
  1bb491ac6f482e93fb0c506dad0cc942  libstdc++-v3/include/ext/cast.h
  86d62b01b4a4c3e919ad644a5faec72b  libstdc++-v3/include/ext/cmath
  94c05fa20599993783f1f094ae70fa94  libstdc++-v3/include/ext/codecvt_specializations.h
*************** c33947951ce4ff17413dbb63a058a642  libstd
*** 114197,114205 ****
  f2d14e4762dc99e1875cd1c27a20d39d  libstdc++-v3/include/ext/extptr_allocator.h
  ba58c58ff35e16aeaed5b3998fd4e105  libstdc++-v3/include/ext/functional
  6cf714cd2195e10929c3f27cf54bf0ba  libstdc++-v3/include/ext/iterator
! 057f6f980678a9a58af2992fa5166c8a  libstdc++-v3/include/ext/malloc_allocator.h
  8dc69bfb93216f9a42f74b158ee1e35b  libstdc++-v3/include/ext/memory
! 5e86747d1aa7509a2e7602931db4d6bc  libstdc++-v3/include/ext/mt_allocator.h
  a78402670a6ed5815c8460eb28e80b98  libstdc++-v3/include/ext/new_allocator.h
  021496ad8a8b42ca36e301637da06c02  libstdc++-v3/include/ext/numeric
  8771efb8ee9ad8cbaff1ee04f8b9eff0  libstdc++-v3/include/ext/numeric_traits.h
--- 114585,114593 ----
  f2d14e4762dc99e1875cd1c27a20d39d  libstdc++-v3/include/ext/extptr_allocator.h
  ba58c58ff35e16aeaed5b3998fd4e105  libstdc++-v3/include/ext/functional
  6cf714cd2195e10929c3f27cf54bf0ba  libstdc++-v3/include/ext/iterator
! ff705c45ebb7882873c5ecc784df3e09  libstdc++-v3/include/ext/malloc_allocator.h
  8dc69bfb93216f9a42f74b158ee1e35b  libstdc++-v3/include/ext/memory
! 72b20c1f691c15604ab40ec58c4a3b5a  libstdc++-v3/include/ext/mt_allocator.h
  a78402670a6ed5815c8460eb28e80b98  libstdc++-v3/include/ext/new_allocator.h
  021496ad8a8b42ca36e301637da06c02  libstdc++-v3/include/ext/numeric
  8771efb8ee9ad8cbaff1ee04f8b9eff0  libstdc++-v3/include/ext/numeric_traits.h
*************** a71f1dd732989c548e6fb3cd90bfcc75  libstd
*** 114448,114454 ****
  e7b68ea74dbc4486f304d6445d5772a5  libstdc++-v3/include/ext/pb_ds/trie_policy.hpp
  caadfacabfe85328d467de9b1a25d397  libstdc++-v3/include/ext/pod_char_traits.h
  20ee1e20f41dc68c730b2c9db8475c3c  libstdc++-v3/include/ext/pointer.h
! d281468ceb3c4beb04f6da63ab463dfa  libstdc++-v3/include/ext/pool_allocator.h
  7955d1b4c96e31649813e1ada0e5811b  libstdc++-v3/include/ext/random
  bcda42405934b29e401f272851d5bfaf  libstdc++-v3/include/ext/random.tcc
  474a1ed09128969a0c560e03266bc56f  libstdc++-v3/include/ext/rb_tree
--- 114836,114842 ----
  e7b68ea74dbc4486f304d6445d5772a5  libstdc++-v3/include/ext/pb_ds/trie_policy.hpp
  caadfacabfe85328d467de9b1a25d397  libstdc++-v3/include/ext/pod_char_traits.h
  20ee1e20f41dc68c730b2c9db8475c3c  libstdc++-v3/include/ext/pointer.h
! 77bb1ef847d55994d9c652b65ddf54e1  libstdc++-v3/include/ext/pool_allocator.h
  7955d1b4c96e31649813e1ada0e5811b  libstdc++-v3/include/ext/random
  bcda42405934b29e401f272851d5bfaf  libstdc++-v3/include/ext/random.tcc
  474a1ed09128969a0c560e03266bc56f  libstdc++-v3/include/ext/rb_tree
*************** dd6e851bc473b9ff23e81df89abe4fc7  libstd
*** 114524,114536 ****
  0b0a3983fbed012140824669c804e50a  libstdc++-v3/include/pstl/glue_memory_defs.h
  e5017e0d8d380d892163a4a110331fb0  libstdc++-v3/include/pstl/glue_memory_impl.h
  9470d07762f86ba4655154491929a328  libstdc++-v3/include/pstl/glue_numeric_defs.h
! 95509c3eea99d2f277912479e94c6449  libstdc++-v3/include/pstl/glue_numeric_impl.h
  d654c6a3cf5ee1bab1e7bc476cbb7f37  libstdc++-v3/include/pstl/memory_impl.h
  b692aa95f9f120acbe330c2893c3ce6e  libstdc++-v3/include/pstl/numeric_fwd.h
! 33218e2d937214ece57cd4bb425788e6  libstdc++-v3/include/pstl/numeric_impl.h
  f0154f75dafee0c95cfc13f091939f93  libstdc++-v3/include/pstl/parallel_backend.h
  e972bfc42cfac92bfde04a35e915514e  libstdc++-v3/include/pstl/parallel_backend_serial.h
! c7205056b7b327c57e1b8ab09cebb91d  libstdc++-v3/include/pstl/parallel_backend_tbb.h
  e128e525f970f3948feec2f4750919a8  libstdc++-v3/include/pstl/parallel_backend_utils.h
  d3d2812c60e828c1e822801f148c7630  libstdc++-v3/include/pstl/parallel_impl.h
  64e9a3bc96d1e3015387cb95106544cf  libstdc++-v3/include/pstl/pstl_config.h
--- 114912,114924 ----
  0b0a3983fbed012140824669c804e50a  libstdc++-v3/include/pstl/glue_memory_defs.h
  e5017e0d8d380d892163a4a110331fb0  libstdc++-v3/include/pstl/glue_memory_impl.h
  9470d07762f86ba4655154491929a328  libstdc++-v3/include/pstl/glue_numeric_defs.h
! afa2ad29c813beefe86de217e3f5e063  libstdc++-v3/include/pstl/glue_numeric_impl.h
  d654c6a3cf5ee1bab1e7bc476cbb7f37  libstdc++-v3/include/pstl/memory_impl.h
  b692aa95f9f120acbe330c2893c3ce6e  libstdc++-v3/include/pstl/numeric_fwd.h
! f77d53ba87bdc41f32fe05abd7640590  libstdc++-v3/include/pstl/numeric_impl.h
  f0154f75dafee0c95cfc13f091939f93  libstdc++-v3/include/pstl/parallel_backend.h
  e972bfc42cfac92bfde04a35e915514e  libstdc++-v3/include/pstl/parallel_backend_serial.h
! 902b12072934917ec50145590999c9ac  libstdc++-v3/include/pstl/parallel_backend_tbb.h
  e128e525f970f3948feec2f4750919a8  libstdc++-v3/include/pstl/parallel_backend_utils.h
  d3d2812c60e828c1e822801f148c7630  libstdc++-v3/include/pstl/parallel_impl.h
  64e9a3bc96d1e3015387cb95106544cf  libstdc++-v3/include/pstl/pstl_config.h
*************** c236e001d2914387b789ce13408d7224  libstd
*** 114538,114550 ****
  16ecbf48b313f47955487be8fe668037  libstdc++-v3/include/pstl/utils.h
  685f5bca7582106082732b3aa4facb12  libstdc++-v3/include/std/algorithm
  fc9b21dd5374fb6eb8ae18d329975612  libstdc++-v3/include/std/any
! 346953c0cf183d86db8f48ff6d545b53  libstdc++-v3/include/std/array
  0919c06365948d659b248b825a7d0146  libstdc++-v3/include/std/atomic
  9f99ade7dd4b9b396effd0996ee55664  libstdc++-v3/include/std/barrier
! 66e855a0f296b637102284d4a6d3323c  libstdc++-v3/include/std/bit
  06852873ecbf5b23ff53ea0b1952d3d8  libstdc++-v3/include/std/bitset
  3ee0e8090ee1f0e442c4bf1bc44a96f4  libstdc++-v3/include/std/charconv
! e9f472b97e9f586d385ce06ed2d72fc3  libstdc++-v3/include/std/chrono
  bbf20db5408848d929deed7c0ba28df3  libstdc++-v3/include/std/codecvt
  d3e91ccfa90352c8af77f3f7e0303ac8  libstdc++-v3/include/std/complex
  933005cab15e64abf8af0d4e0972908f  libstdc++-v3/include/std/concepts
--- 114926,114938 ----
  16ecbf48b313f47955487be8fe668037  libstdc++-v3/include/pstl/utils.h
  685f5bca7582106082732b3aa4facb12  libstdc++-v3/include/std/algorithm
  fc9b21dd5374fb6eb8ae18d329975612  libstdc++-v3/include/std/any
! 2d7e12f609af86f79536f7ce64c736c4  libstdc++-v3/include/std/array
  0919c06365948d659b248b825a7d0146  libstdc++-v3/include/std/atomic
  9f99ade7dd4b9b396effd0996ee55664  libstdc++-v3/include/std/barrier
! 6a6e184e0a63330c64ab616785279ac6  libstdc++-v3/include/std/bit
  06852873ecbf5b23ff53ea0b1952d3d8  libstdc++-v3/include/std/bitset
  3ee0e8090ee1f0e442c4bf1bc44a96f4  libstdc++-v3/include/std/charconv
! c1d080b2c23b4f05b4cb6ae8fe066cad  libstdc++-v3/include/std/chrono
  bbf20db5408848d929deed7c0ba28df3  libstdc++-v3/include/std/codecvt
  d3e91ccfa90352c8af77f3f7e0303ac8  libstdc++-v3/include/std/complex
  933005cab15e64abf8af0d4e0972908f  libstdc++-v3/include/std/concepts
*************** d4f9ad7eed03fb685a74447a8cd6ef66  libstd
*** 114554,114563 ****
  eea32f3270e190607c59e827a3854ace  libstdc++-v3/include/std/execution
  fee506a1489dec7f7e00673a321a5570  libstdc++-v3/include/std/expected
  0e0edf5c0fdce36e4277045c50bf6e82  libstdc++-v3/include/std/filesystem
! 9dfa7027ca214cbd41ff9bee60881be5  libstdc++-v3/include/std/format
! f613bffa0644f4de7e6e3bafb4867437  libstdc++-v3/include/std/forward_list
  7aba15a067efc51b46fe83c639a9b4d4  libstdc++-v3/include/std/fstream
! 3cd9b1e9b37be162511c33419612df91  libstdc++-v3/include/std/functional
  6d8fbfd3a7a0317ed98876afb42ce0c2  libstdc++-v3/include/std/future
  fe1fb31246025d68ee9697d7214dd7f5  libstdc++-v3/include/std/iomanip
  ef4ef6905a058db64662fe609f829159  libstdc++-v3/include/std/ios
--- 114942,114951 ----
  eea32f3270e190607c59e827a3854ace  libstdc++-v3/include/std/execution
  fee506a1489dec7f7e00673a321a5570  libstdc++-v3/include/std/expected
  0e0edf5c0fdce36e4277045c50bf6e82  libstdc++-v3/include/std/filesystem
! 2f46544d95881c00b89b0232fe577183  libstdc++-v3/include/std/format
! e8b3f7dcdc2931df0cd13c42bbd3dcc8  libstdc++-v3/include/std/forward_list
  7aba15a067efc51b46fe83c639a9b4d4  libstdc++-v3/include/std/fstream
! 16e7743571a067798c9ef29c142086b1  libstdc++-v3/include/std/functional
  6d8fbfd3a7a0317ed98876afb42ce0c2  libstdc++-v3/include/std/future
  fe1fb31246025d68ee9697d7214dd7f5  libstdc++-v3/include/std/iomanip
  ef4ef6905a058db64662fe609f829159  libstdc++-v3/include/std/ios
*************** ea6795f6774a79557597d2fd2d000712  libstd
*** 114567,114585 ****
  656e493c4e4aa66815f357c21bad1d57  libstdc++-v3/include/std/iterator
  0e5d279cbe89540e3f36a092a3beb896  libstdc++-v3/include/std/latch
  ae3312c33853f8a52ee7443cbe05a3f5  libstdc++-v3/include/std/limits
! f045775244230f66d1844314954ac80d  libstdc++-v3/include/std/list
  456031d64ca4a2578e3d5507f328753d  libstdc++-v3/include/std/locale
  5dc3e17ba9e05d4af5bbd28d13d7c43b  libstdc++-v3/include/std/map
  f78d1595423575bfc922448e67e52239  libstdc++-v3/include/std/memory
  654e4d13aaec5087497c0b3cd42d26b3  libstdc++-v3/include/std/memory_resource
  6294ee905a70436875640f1d15627c30  libstdc++-v3/include/std/mutex
  ce04f4fc0fa3c3aa259cf4b87813d4a7  libstdc++-v3/include/std/numbers
! 3e6c45e4ef81035a43294dda759c6a00  libstdc++-v3/include/std/numeric
  f983d195aabe6ddf5bdb53a8b9960b70  libstdc++-v3/include/std/optional
  d80e37105837d110af793b72a4094525  libstdc++-v3/include/std/ostream
  243b863f64a8568d74b7e83bfa7fe62d  libstdc++-v3/include/std/queue
  5f64c48b6b92533c0dfdcd5b2f349ba0  libstdc++-v3/include/std/random
! 5ce845c53d08dd6ac09610b95bb20a18  libstdc++-v3/include/std/ranges
  ea42966b5a22878e369a7160ef8ad6c7  libstdc++-v3/include/std/ratio
  dbf94a876bc82510f36ab506bfc09d2a  libstdc++-v3/include/std/regex
  f38325f4d3fcf20cc0b517fcd149a1ec  libstdc++-v3/include/std/scoped_allocator
--- 114955,114973 ----
  656e493c4e4aa66815f357c21bad1d57  libstdc++-v3/include/std/iterator
  0e5d279cbe89540e3f36a092a3beb896  libstdc++-v3/include/std/latch
  ae3312c33853f8a52ee7443cbe05a3f5  libstdc++-v3/include/std/limits
! 5ba2d8a242267c09a901e9b10ddadd93  libstdc++-v3/include/std/list
  456031d64ca4a2578e3d5507f328753d  libstdc++-v3/include/std/locale
  5dc3e17ba9e05d4af5bbd28d13d7c43b  libstdc++-v3/include/std/map
  f78d1595423575bfc922448e67e52239  libstdc++-v3/include/std/memory
  654e4d13aaec5087497c0b3cd42d26b3  libstdc++-v3/include/std/memory_resource
  6294ee905a70436875640f1d15627c30  libstdc++-v3/include/std/mutex
  ce04f4fc0fa3c3aa259cf4b87813d4a7  libstdc++-v3/include/std/numbers
! 911822e909a122dab0874ada31ffa30f  libstdc++-v3/include/std/numeric
  f983d195aabe6ddf5bdb53a8b9960b70  libstdc++-v3/include/std/optional
  d80e37105837d110af793b72a4094525  libstdc++-v3/include/std/ostream
  243b863f64a8568d74b7e83bfa7fe62d  libstdc++-v3/include/std/queue
  5f64c48b6b92533c0dfdcd5b2f349ba0  libstdc++-v3/include/std/random
! 40a8af9fb85c1ed2009c401022069c28  libstdc++-v3/include/std/ranges
  ea42966b5a22878e369a7160ef8ad6c7  libstdc++-v3/include/std/ratio
  dbf94a876bc82510f36ab506bfc09d2a  libstdc++-v3/include/std/regex
  f38325f4d3fcf20cc0b517fcd149a1ec  libstdc++-v3/include/std/scoped_allocator
*************** f38325f4d3fcf20cc0b517fcd149a1ec  libstd
*** 114587,114597 ****
  d03063a4bedb845e2ff7fba28b7ecb1d  libstdc++-v3/include/std/set
  91349ac9a04bb9ff2dc33d743bcf6601  libstdc++-v3/include/std/shared_mutex
  d379c79a4b4ed0a78190d8f4a9da9aa2  libstdc++-v3/include/std/source_location
! 3df9d92055e757482663896ead5a8d25  libstdc++-v3/include/std/span
  d85e5f395906ee64d169f731e153854e  libstdc++-v3/include/std/spanstream
  a75470ffd4afdfac6eca39a7b36542d2  libstdc++-v3/include/std/sstream
  91e5fdbed2e8180adc1417ecfceba477  libstdc++-v3/include/std/stack
! 87229a12a31c154c90a496fe9432fb25  libstdc++-v3/include/std/stacktrace
  91c2dec920e37dc2bdfcd57f2ee1917c  libstdc++-v3/include/std/stdexcept
  59e3dae4ebf67b9eb46705e56e8541af  libstdc++-v3/include/std/stdfloat
  7fd4f7aceafc9e47af067236ba39094f  libstdc++-v3/include/std/stop_token
--- 114975,114985 ----
  d03063a4bedb845e2ff7fba28b7ecb1d  libstdc++-v3/include/std/set
  91349ac9a04bb9ff2dc33d743bcf6601  libstdc++-v3/include/std/shared_mutex
  d379c79a4b4ed0a78190d8f4a9da9aa2  libstdc++-v3/include/std/source_location
! 2a2066d8e8f8c8a94b2d17fa0990856d  libstdc++-v3/include/std/span
  d85e5f395906ee64d169f731e153854e  libstdc++-v3/include/std/spanstream
  a75470ffd4afdfac6eca39a7b36542d2  libstdc++-v3/include/std/sstream
  91e5fdbed2e8180adc1417ecfceba477  libstdc++-v3/include/std/stack
! bbc0c33c94ab18dc7789ef417cbd2143  libstdc++-v3/include/std/stacktrace
  91c2dec920e37dc2bdfcd57f2ee1917c  libstdc++-v3/include/std/stdexcept
  59e3dae4ebf67b9eb46705e56e8541af  libstdc++-v3/include/std/stdfloat
  7fd4f7aceafc9e47af067236ba39094f  libstdc++-v3/include/std/stop_token
*************** d4462abdac571d8d61a236930c8cfc4b  libstd
*** 114602,114616 ****
  0ef04d7cdcad35a449aec6319852270f  libstdc++-v3/include/std/system_error
  f247d2ab92c9235549e795b99206b5e7  libstdc++-v3/include/std/thread
  f16a4d988e4018aed43e10d719ed07a4  libstdc++-v3/include/std/tuple
! 49095ed70189a951979ca9e359bde8c9  libstdc++-v3/include/std/type_traits
  5a950e25b3e5d469314bc0a340057eaa  libstdc++-v3/include/std/typeindex
  b3721b1a59dccec76d19cdcd7d20c684  libstdc++-v3/include/std/unordered_map
  2af236cf7fc416569643f603c509e022  libstdc++-v3/include/std/unordered_set
  a14d821c738b7d692853bd5ac9aca208  libstdc++-v3/include/std/utility
  3b6db236d79c47508252ed42b9305f08  libstdc++-v3/include/std/valarray
! 22fc5a7cce5f720c8aa059a5b35be999  libstdc++-v3/include/std/variant
  347610187149e687c9f04f346f8398b6  libstdc++-v3/include/std/vector
! de58479c9fae8e6fb4a9a8bd5ced2efc  libstdc++-v3/include/std/version
  3aa50c1dd58b008e63662874a93f6614  libstdc++-v3/include/tr1/array
  98b97b662591af51ce88a917962a9c2e  libstdc++-v3/include/tr1/bessel_function.tcc
  feca7de6d090c997fdee966b7ad6b001  libstdc++-v3/include/tr1/beta_function.tcc
--- 114990,115004 ----
  0ef04d7cdcad35a449aec6319852270f  libstdc++-v3/include/std/system_error
  f247d2ab92c9235549e795b99206b5e7  libstdc++-v3/include/std/thread
  f16a4d988e4018aed43e10d719ed07a4  libstdc++-v3/include/std/tuple
! aaf1c30405392a16806fece2b71d7820  libstdc++-v3/include/std/type_traits
  5a950e25b3e5d469314bc0a340057eaa  libstdc++-v3/include/std/typeindex
  b3721b1a59dccec76d19cdcd7d20c684  libstdc++-v3/include/std/unordered_map
  2af236cf7fc416569643f603c509e022  libstdc++-v3/include/std/unordered_set
  a14d821c738b7d692853bd5ac9aca208  libstdc++-v3/include/std/utility
  3b6db236d79c47508252ed42b9305f08  libstdc++-v3/include/std/valarray
! cfd9d740f075b0603b1484631a782667  libstdc++-v3/include/std/variant
  347610187149e687c9f04f346f8398b6  libstdc++-v3/include/std/vector
! ce5ec575fd7e050a98518622017ff2d1  libstdc++-v3/include/std/version
  3aa50c1dd58b008e63662874a93f6614  libstdc++-v3/include/tr1/array
  98b97b662591af51ce88a917962a9c2e  libstdc++-v3/include/tr1/bessel_function.tcc
  feca7de6d090c997fdee966b7ad6b001  libstdc++-v3/include/tr1/beta_function.tcc
*************** e3f34f2c8325e33d3fa3c1052982d594  libstd
*** 114675,114682 ****
  e978819ab1cdd7dd69926a891b85b537  libstdc++-v3/include/tr1/wctype.h
  7a2f4509b3ff8ea1e8fc5f10ba537bf8  libstdc++-v3/include/tr2/bool_set
  491a252c5a2320cd573a7031abfb77e4  libstdc++-v3/include/tr2/bool_set.tcc
! d30f7a7f5bd45e1663f5b30814d25153  libstdc++-v3/include/tr2/dynamic_bitset
! 3801b9b5eda8d271c741ba96d0082827  libstdc++-v3/include/tr2/dynamic_bitset.tcc
  69455a5f73dd1eea720b68b11f2cee1e  libstdc++-v3/include/tr2/ratio
  23ab9ed7b3cf5140e855a5cab8a827ad  libstdc++-v3/include/tr2/type_traits
  2c6b97e1a1e45288a285a2a617d3cd01  libstdc++-v3/libsupc++/Makefile.am
--- 115063,115070 ----
  e978819ab1cdd7dd69926a891b85b537  libstdc++-v3/include/tr1/wctype.h
  7a2f4509b3ff8ea1e8fc5f10ba537bf8  libstdc++-v3/include/tr2/bool_set
  491a252c5a2320cd573a7031abfb77e4  libstdc++-v3/include/tr2/bool_set.tcc
! 73b0abbbd4a77c1e736c227c2262d5ca  libstdc++-v3/include/tr2/dynamic_bitset
! 7bcb8c86c4f32c1bca115f0264efe170  libstdc++-v3/include/tr2/dynamic_bitset.tcc
  69455a5f73dd1eea720b68b11f2cee1e  libstdc++-v3/include/tr2/ratio
  23ab9ed7b3cf5140e855a5cab8a827ad  libstdc++-v3/include/tr2/type_traits
  2c6b97e1a1e45288a285a2a617d3cd01  libstdc++-v3/libsupc++/Makefile.am
*************** a035b4dae3b2c081d8c7f5186d09d602  libstd
*** 114732,114738 ****
  314ad14748ccb9ff85c65d17ebb0828b  libstdc++-v3/libsupc++/exception_ptr.h
  c64a545d5c646a5538993c23e17aee98  libstdc++-v3/libsupc++/function_type_info.cc
  4a3b7f5a30ac297a461e71888f2ba9c3  libstdc++-v3/libsupc++/fundamental_type_info.cc
! d9be9f5772273085f9bc3f4b403ac7e6  libstdc++-v3/libsupc++/guard.cc
  9047126521e1cfe8dcfbcf2352463f79  libstdc++-v3/libsupc++/guard_error.cc
  ea7eb5497094b7c9acff6dc908df2bfa  libstdc++-v3/libsupc++/hash_bytes.cc
  747349fa8997cb211d2d6b9f5db4eaf5  libstdc++-v3/libsupc++/hash_bytes.h
--- 115120,115126 ----
  314ad14748ccb9ff85c65d17ebb0828b  libstdc++-v3/libsupc++/exception_ptr.h
  c64a545d5c646a5538993c23e17aee98  libstdc++-v3/libsupc++/function_type_info.cc
  4a3b7f5a30ac297a461e71888f2ba9c3  libstdc++-v3/libsupc++/fundamental_type_info.cc
! 700a8d7b34ba3503399c224759af6432  libstdc++-v3/libsupc++/guard.cc
  9047126521e1cfe8dcfbcf2352463f79  libstdc++-v3/libsupc++/guard_error.cc
  ea7eb5497094b7c9acff6dc908df2bfa  libstdc++-v3/libsupc++/hash_bytes.cc
  747349fa8997cb211d2d6b9f5db4eaf5  libstdc++-v3/libsupc++/hash_bytes.h
*************** a1cffdff3f1336cd9faeea4f99884f6d  libstd
*** 114742,114748 ****
  d9c6a94d55db87a407605e7b41ee9900  libstdc++-v3/libsupc++/new
  67067ac20b20cdf4d4d92587b6aeb70d  libstdc++-v3/libsupc++/new_handler.cc
  308d128661043bfc1b2b821fbb4567a4  libstdc++-v3/libsupc++/new_op.cc
! 23aef8c8b2cc2819d506d3390c584eab  libstdc++-v3/libsupc++/new_opa.cc
  482fdfa9782c2c1f28f418b0ceceb209  libstdc++-v3/libsupc++/new_opant.cc
  87353ff702d0a5b439354d92519d806f  libstdc++-v3/libsupc++/new_opnt.cc
  0502b836a4f288f4da6e73a11e624501  libstdc++-v3/libsupc++/new_opv.cc
--- 115130,115136 ----
  d9c6a94d55db87a407605e7b41ee9900  libstdc++-v3/libsupc++/new
  67067ac20b20cdf4d4d92587b6aeb70d  libstdc++-v3/libsupc++/new_handler.cc
  308d128661043bfc1b2b821fbb4567a4  libstdc++-v3/libsupc++/new_op.cc
! bf6ea40cbe53813833180d53b1e2c298  libstdc++-v3/libsupc++/new_opa.cc
  482fdfa9782c2c1f28f418b0ceceb209  libstdc++-v3/libsupc++/new_opant.cc
  87353ff702d0a5b439354d92519d806f  libstdc++-v3/libsupc++/new_opnt.cc
  0502b836a4f288f4da6e73a11e624501  libstdc++-v3/libsupc++/new_opv.cc
*************** c94ad903b4e7baf364cdc3ef5e9f58a8  libstd
*** 114776,114782 ****
  e4724aea7b38f8f2110f154ac4a2df43  libstdc++-v3/python/hook.in
  68b329da9893e34099c7d8ad5cb9c940  libstdc++-v3/python/libstdcxx/__init__.py
  74cf87654ab91027b27296333b040171  libstdc++-v3/python/libstdcxx/v6/__init__.py
! 91648d2c5bc6db491fa408226d3687d4  libstdc++-v3/python/libstdcxx/v6/printers.py
  358ce01ad28bc23f412d6cca22c00026  libstdc++-v3/python/libstdcxx/v6/xmethods.py
  cdac7363b91e7d57b85f7b560f62f033  libstdc++-v3/scripts/check_compile
  a4c1d51bba293cee2307fc7f9dd090f7  libstdc++-v3/scripts/check_performance
--- 115164,115170 ----
  e4724aea7b38f8f2110f154ac4a2df43  libstdc++-v3/python/hook.in
  68b329da9893e34099c7d8ad5cb9c940  libstdc++-v3/python/libstdcxx/__init__.py
  74cf87654ab91027b27296333b040171  libstdc++-v3/python/libstdcxx/v6/__init__.py
! 25fca50ddaa1dca3dfd2c2fa6d6159c0  libstdc++-v3/python/libstdcxx/v6/printers.py
  358ce01ad28bc23f412d6cca22c00026  libstdc++-v3/python/libstdcxx/v6/xmethods.py
  cdac7363b91e7d57b85f7b560f62f033  libstdc++-v3/scripts/check_compile
  a4c1d51bba293cee2307fc7f9dd090f7  libstdc++-v3/scripts/check_performance
*************** c3455b8d87dcefd65c7fdcd24e4ce3a4  libstd
*** 114795,114803 ****
  d183489efa48c4d78ff3dbd68b24a207  libstdc++-v3/src/Makefile.in
  61c530a39ead22fbaa26b6bcf0b07b08  libstdc++-v3/src/c++11/Makefile.am
  a69dee2219d44a5de8d6d6238d30bff3  libstdc++-v3/src/c++11/Makefile.in
! 4afad50e36b2bfef56fb3189f112ee46  libstdc++-v3/src/c++11/assert_fail.cc
  85081a7300398dcaa490d1027f2165b6  libstdc++-v3/src/c++11/chrono.cc
! b9d9e87481311acb2931f3cec60f25fa  libstdc++-v3/src/c++11/codecvt.cc
  d1f2d13073a3e57e01ede9898b5eed46  libstdc++-v3/src/c++11/compatibility-atomic-c++0x.cc
  de9c3ba43495072dd85a4e6e96e1ea62  libstdc++-v3/src/c++11/compatibility-c++0x.cc
  9f57a171f75b71e3df9afbc529cf2779  libstdc++-v3/src/c++11/compatibility-chrono.cc
--- 115183,115191 ----
  d183489efa48c4d78ff3dbd68b24a207  libstdc++-v3/src/Makefile.in
  61c530a39ead22fbaa26b6bcf0b07b08  libstdc++-v3/src/c++11/Makefile.am
  a69dee2219d44a5de8d6d6238d30bff3  libstdc++-v3/src/c++11/Makefile.in
! a8301e209641b5926e6d480e14114cad  libstdc++-v3/src/c++11/assert_fail.cc
  85081a7300398dcaa490d1027f2165b6  libstdc++-v3/src/c++11/chrono.cc
! 268a362ac69a5ba9568ae6f4cc26db2a  libstdc++-v3/src/c++11/codecvt.cc
  d1f2d13073a3e57e01ede9898b5eed46  libstdc++-v3/src/c++11/compatibility-atomic-c++0x.cc
  de9c3ba43495072dd85a4e6e96e1ea62  libstdc++-v3/src/c++11/compatibility-c++0x.cc
  9f57a171f75b71e3df9afbc529cf2779  libstdc++-v3/src/c++11/compatibility-chrono.cc
*************** ba1e398802c7793fc33131cddac099d5  libstd
*** 114829,114835 ****
  9289636c5342b21635582d8c595b61df  libstdc++-v3/src/c++11/fstream-inst.cc
  33ecc52466d9288b45d383a46dc140dd  libstdc++-v3/src/c++11/functexcept.cc
  3c12964a3ab2a922a90ec8927ab8dd88  libstdc++-v3/src/c++11/functional.cc
! 7d3d4758c370f9823c9bad4ca0d006b7  libstdc++-v3/src/c++11/futex.cc
  382270f3469ceff6145375b027db83e6  libstdc++-v3/src/c++11/future.cc
  78431bb3ab4d07b6db3befcbdcc4b544  libstdc++-v3/src/c++11/hash_c++0x.cc
  59d3894c8a066bda1b6b65aa8799ad50  libstdc++-v3/src/c++11/hashtable_c++0x.cc
--- 115217,115223 ----
  9289636c5342b21635582d8c595b61df  libstdc++-v3/src/c++11/fstream-inst.cc
  33ecc52466d9288b45d383a46dc140dd  libstdc++-v3/src/c++11/functexcept.cc
  3c12964a3ab2a922a90ec8927ab8dd88  libstdc++-v3/src/c++11/functional.cc
! 6bf0cef94c536aae503d3d59f78ee22b  libstdc++-v3/src/c++11/futex.cc
  382270f3469ceff6145375b027db83e6  libstdc++-v3/src/c++11/future.cc
  78431bb3ab4d07b6db3befcbdcc4b544  libstdc++-v3/src/c++11/hash_c++0x.cc
  59d3894c8a066bda1b6b65aa8799ad50  libstdc++-v3/src/c++11/hashtable_c++0x.cc
*************** cdf9c54ab7ea85aa42bbf32b2e749913  libstd
*** 114873,114880 ****
  093cc2d73328b5328c46320d9fb0ad05  libstdc++-v3/src/c++17/fast_float/fast_float.h
  00d3e56ee130af41108d7a0f493703f6  libstdc++-v3/src/c++17/floating_from_chars.cc
  3b38edf9d188d303f6aa2c63b7032e89  libstdc++-v3/src/c++17/floating_to_chars.cc
! 56791bd9a91b72bbb0632e8468cf9459  libstdc++-v3/src/c++17/fs_dir.cc
! 9e347d1ef535da7cc88a9c5f335b1e0f  libstdc++-v3/src/c++17/fs_ops.cc
  17fedf8750118959c518303ad2958de2  libstdc++-v3/src/c++17/fs_path.cc
  115b4116584b81ff091cc1c8a434be2b  libstdc++-v3/src/c++17/memory_resource.cc
  2e23492a9bdff13463ee6d01c4b7cc20  libstdc++-v3/src/c++17/ostream-inst.cc
--- 115261,115268 ----
  093cc2d73328b5328c46320d9fb0ad05  libstdc++-v3/src/c++17/fast_float/fast_float.h
  00d3e56ee130af41108d7a0f493703f6  libstdc++-v3/src/c++17/floating_from_chars.cc
  3b38edf9d188d303f6aa2c63b7032e89  libstdc++-v3/src/c++17/floating_to_chars.cc
! fa072ccb9e6e80b3f27e4b23dfd619f9  libstdc++-v3/src/c++17/fs_dir.cc
! 4f8743f3869fca4fcea53ac133a5149c  libstdc++-v3/src/c++17/fs_ops.cc
  17fedf8750118959c518303ad2958de2  libstdc++-v3/src/c++17/fs_path.cc
  115b4116584b81ff091cc1c8a434be2b  libstdc++-v3/src/c++17/memory_resource.cc
  2e23492a9bdff13463ee6d01c4b7cc20  libstdc++-v3/src/c++17/ostream-inst.cc
*************** fbb127f006c65ae37d591c627cc6235c  libstd
*** 114897,114904 ****
  254cd9c33da3fa7ab663f4fb0c3eb02d  libstdc++-v3/src/c++20/Makefile.am
  1a78ce3875810d2fbde4c0259e6da49c  libstdc++-v3/src/c++20/Makefile.in
  b914ff6670ac6160405a2435443a4a06  libstdc++-v3/src/c++20/sstream-inst.cc
! e2adbf62aa6624a603458198af4025e9  libstdc++-v3/src/c++20/tzdata.zi
! 994c5b2b8a1c7c1228890dba62855eb0  libstdc++-v3/src/c++20/tzdb.cc
  45134a761e2989110bf92106ea6dca4e  libstdc++-v3/src/c++98/Makefile.am
  9b27a44fa8ef5adb147c45f43b150e95  libstdc++-v3/src/c++98/Makefile.in
  0da013c21616235a62a7ce091c9e8ab8  libstdc++-v3/src/c++98/allocator-inst.cc
--- 115285,115292 ----
  254cd9c33da3fa7ab663f4fb0c3eb02d  libstdc++-v3/src/c++20/Makefile.am
  1a78ce3875810d2fbde4c0259e6da49c  libstdc++-v3/src/c++20/Makefile.in
  b914ff6670ac6160405a2435443a4a06  libstdc++-v3/src/c++20/sstream-inst.cc
! e9e89f4578e59d252e4caaf0b63d6dfb  libstdc++-v3/src/c++20/tzdata.zi
! 9bb91b77dc34356d05e32ad4ef38f6e4  libstdc++-v3/src/c++20/tzdb.cc
  45134a761e2989110bf92106ea6dca4e  libstdc++-v3/src/c++98/Makefile.am
  9b27a44fa8ef5adb147c45f43b150e95  libstdc++-v3/src/c++98/Makefile.in
  0da013c21616235a62a7ce091c9e8ab8  libstdc++-v3/src/c++98/allocator-inst.cc
*************** abe234bc845d7a759221c1caad48a1ee  libstd
*** 114927,114933 ****
  4bc338a372195ca235399072b8b7ad26  libstdc++-v3/src/c++98/list.cc
  0db0d35ab11b29b5b2828cf0160e1ac8  libstdc++-v3/src/c++98/list_associated-2.cc
  fc33ed0acf80ceef9187dbb7eda62679  libstdc++-v3/src/c++98/list_associated.cc
! 6dfbe005b2933c84ce33101c06330f40  libstdc++-v3/src/c++98/locale.cc
  4bae27438a526fd00a6a0ce6a862c2dd  libstdc++-v3/src/c++98/locale_facets.cc
  92d21c2f9a1dd3532d9a20cf930839c8  libstdc++-v3/src/c++98/locale_init.cc
  f6f314bd5c74acee3b35f5da15a70a09  libstdc++-v3/src/c++98/localename.cc
--- 115315,115321 ----
  4bc338a372195ca235399072b8b7ad26  libstdc++-v3/src/c++98/list.cc
  0db0d35ab11b29b5b2828cf0160e1ac8  libstdc++-v3/src/c++98/list_associated-2.cc
  fc33ed0acf80ceef9187dbb7eda62679  libstdc++-v3/src/c++98/list_associated.cc
! aae4bf6ce9f761b6024659d85a879339  libstdc++-v3/src/c++98/locale.cc
  4bae27438a526fd00a6a0ce6a862c2dd  libstdc++-v3/src/c++98/locale_facets.cc
  92d21c2f9a1dd3532d9a20cf930839c8  libstdc++-v3/src/c++98/locale_init.cc
  f6f314bd5c74acee3b35f5da15a70a09  libstdc++-v3/src/c++98/localename.cc
*************** a6f95078e97a60d866de0908aeb10897  libstd
*** 114952,114959 ****
  3985b8fca46c60e27ba47d4d73565f04  libstdc++-v3/src/filesystem/cow-path.cc
  a9e784beb869d9bc7d37934ce0a952f9  libstdc++-v3/src/filesystem/dir-common.h
  d45c23b8e35edb3a14e4d3400daeb1ed  libstdc++-v3/src/filesystem/dir.cc
! 14bf4a0ef04f6e7d20624e7bbc5e9522  libstdc++-v3/src/filesystem/ops-common.h
! 8e0c18d507965c2ba5ee0441ff387994  libstdc++-v3/src/filesystem/ops.cc
  2fa22da658515e688182701d446f5194  libstdc++-v3/src/filesystem/path.cc
  39db16d7fc6280edeec0ba37d212cb2d  libstdc++-v3/src/libbacktrace/Makefile.am
  430cbf1148b0314dca1a5bc2054883ad  libstdc++-v3/src/libbacktrace/Makefile.in
--- 115340,115347 ----
  3985b8fca46c60e27ba47d4d73565f04  libstdc++-v3/src/filesystem/cow-path.cc
  a9e784beb869d9bc7d37934ce0a952f9  libstdc++-v3/src/filesystem/dir-common.h
  d45c23b8e35edb3a14e4d3400daeb1ed  libstdc++-v3/src/filesystem/dir.cc
! c182f1c2e54adc3a27981482189fa2e8  libstdc++-v3/src/filesystem/ops-common.h
! 9888787832c93f2184290cfcc78eb874  libstdc++-v3/src/filesystem/ops.cc
  2fa22da658515e688182701d446f5194  libstdc++-v3/src/filesystem/path.cc
  39db16d7fc6280edeec0ba37d212cb2d  libstdc++-v3/src/libbacktrace/Makefile.am
  430cbf1148b0314dca1a5bc2054883ad  libstdc++-v3/src/libbacktrace/Makefile.in
*************** b8a53b2b8da32d102d69cbedea3d2216  libstd
*** 115017,115023 ****
  87c7733236320e31ca6bf506b77b98d6  libstdc++-v3/testsuite/17_intro/headers/c++2020/operator_names.cc
  63f0e684ae33ff5970309759eeaf2ba5  libstdc++-v3/testsuite/17_intro/headers/c++2020/stdc++.cc
  9294278b7daa21bfd4ce42da363eaad0  libstdc++-v3/testsuite/17_intro/headers/c++2020/stdc++_multiple_inclusion.cc
! 6c68984e91b93591e62a75a2f9fbabfb  libstdc++-v3/testsuite/17_intro/names.cc
  047ad714f0a1ac010ab86a084dfbeee7  libstdc++-v3/testsuite/17_intro/names_pstl.cc
  007efc2146fdda22fd1b14eaf4ea9b10  libstdc++-v3/testsuite/17_intro/shared_with_static_deps.cc
  1693d92844259e69b8c6b8f258a91f17  libstdc++-v3/testsuite/17_intro/static.cc
--- 115405,115411 ----
  87c7733236320e31ca6bf506b77b98d6  libstdc++-v3/testsuite/17_intro/headers/c++2020/operator_names.cc
  63f0e684ae33ff5970309759eeaf2ba5  libstdc++-v3/testsuite/17_intro/headers/c++2020/stdc++.cc
  9294278b7daa21bfd4ce42da363eaad0  libstdc++-v3/testsuite/17_intro/headers/c++2020/stdc++_multiple_inclusion.cc
! 1a13f63ebbea22ec5dd4e12f7671516f  libstdc++-v3/testsuite/17_intro/names.cc
  047ad714f0a1ac010ab86a084dfbeee7  libstdc++-v3/testsuite/17_intro/names_pstl.cc
  007efc2146fdda22fd1b14eaf4ea9b10  libstdc++-v3/testsuite/17_intro/shared_with_static_deps.cc
  1693d92844259e69b8c6b8f258a91f17  libstdc++-v3/testsuite/17_intro/static.cc
*************** f055c78e8747fc4f4b5a710da7dd09a5  libstd
*** 115164,115170 ****
  1e6a108fd979e33cb149de569e281631  libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_functions.cc
  24d6fa4ccb4f432c3b8e366828851b67  libstdc++-v3/testsuite/18_support/numeric_limits/requirements/explicit_instantiation/1.cc
  a906925b10e0436080d570a389a6daef  libstdc++-v3/testsuite/18_support/numeric_limits/specialization_default_values.cc
! 01ebe853c947ebb5e621174d6aeb4553  libstdc++-v3/testsuite/18_support/numeric_limits/traps.cc
  4e3ea06d904d52667f565825f1e4e919  libstdc++-v3/testsuite/18_support/pthread_guard.cc
  80d3f7823484c223d65241febf462975  libstdc++-v3/testsuite/18_support/quick_exit/quick_exit.cc
  ab48a1f1389afd0fcfb7b41a3d573e7f  libstdc++-v3/testsuite/18_support/set_terminate.cc
--- 115552,115558 ----
  1e6a108fd979e33cb149de569e281631  libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_functions.cc
  24d6fa4ccb4f432c3b8e366828851b67  libstdc++-v3/testsuite/18_support/numeric_limits/requirements/explicit_instantiation/1.cc
  a906925b10e0436080d570a389a6daef  libstdc++-v3/testsuite/18_support/numeric_limits/specialization_default_values.cc
! 370d5a1026778703cd52b11447b20a97  libstdc++-v3/testsuite/18_support/numeric_limits/traps.cc
  4e3ea06d904d52667f565825f1e4e919  libstdc++-v3/testsuite/18_support/pthread_guard.cc
  80d3f7823484c223d65241febf462975  libstdc++-v3/testsuite/18_support/quick_exit/quick_exit.cc
  ab48a1f1389afd0fcfb7b41a3d573e7f  libstdc++-v3/testsuite/18_support/set_terminate.cc
*************** b19ff1d2f7a35f456f900bbd20bffd32  libstd
*** 115236,115243 ****
  670eda46fbfa7789251c32b2ebbd9c15  libstdc++-v3/testsuite/19_diagnostics/runtime_error/what-big.cc
  0a6f99b4a76bef420ec7f0c83d28240a  libstdc++-v3/testsuite/19_diagnostics/stacktrace/current.cc
  029d8f43de155602a6121288a02d27b9  libstdc++-v3/testsuite/19_diagnostics/stacktrace/entry.cc
! 1cb3680da0023fa955ece4a3030256f9  libstdc++-v3/testsuite/19_diagnostics/stacktrace/hash.cc
! f5d4ebe78f05f4f4dc9f316b6989f6bf  libstdc++-v3/testsuite/19_diagnostics/stacktrace/stacktrace.cc
  1a16038fc4f582a0976f9f59a252d7cb  libstdc++-v3/testsuite/19_diagnostics/stacktrace/synopsis.cc
  663e3dcea433a03255e7eed74d7d7f2f  libstdc++-v3/testsuite/19_diagnostics/stacktrace/version.cc
  ea274be46bbf3f9fb04b2ff6ef7a2cfd  libstdc++-v3/testsuite/19_diagnostics/stdexcept.cc
--- 115624,115631 ----
  670eda46fbfa7789251c32b2ebbd9c15  libstdc++-v3/testsuite/19_diagnostics/runtime_error/what-big.cc
  0a6f99b4a76bef420ec7f0c83d28240a  libstdc++-v3/testsuite/19_diagnostics/stacktrace/current.cc
  029d8f43de155602a6121288a02d27b9  libstdc++-v3/testsuite/19_diagnostics/stacktrace/entry.cc
! e3e66ff5b6b96c482ffc02a871380022  libstdc++-v3/testsuite/19_diagnostics/stacktrace/hash.cc
! f7621cd47aa55c21d2a3e0fa094e6071  libstdc++-v3/testsuite/19_diagnostics/stacktrace/stacktrace.cc
  1a16038fc4f582a0976f9f59a252d7cb  libstdc++-v3/testsuite/19_diagnostics/stacktrace/synopsis.cc
  663e3dcea433a03255e7eed74d7d7f2f  libstdc++-v3/testsuite/19_diagnostics/stacktrace/version.cc
  ea274be46bbf3f9fb04b2ff6ef7a2cfd  libstdc++-v3/testsuite/19_diagnostics/stdexcept.cc
*************** ec62fef561a1089bfaf166057a0bf97f  libstd
*** 115389,115395 ****
  f7835b12ebc78dfbfd92e7ea0009129e  libstdc++-v3/testsuite/20_util/bind/placeholders.cc
  54111bea275d92306634b466007bf41c  libstdc++-v3/testsuite/20_util/bind/ref.cc
  472ef7d8e6bc573e0fbdef41c148ab73  libstdc++-v3/testsuite/20_util/bind/ref2.cc
! 7efbafe3ff4ce6578ae62c14d4dd1276  libstdc++-v3/testsuite/20_util/bind/ref_neg.cc
  74dd9f024a0fd7328cd0bbc7a5a9a350  libstdc++-v3/testsuite/20_util/bind/refqual.cc
  5b2714416c46b4e95667b1d81e33c6fa  libstdc++-v3/testsuite/20_util/bind/socket.cc
  22b315cd786be549e08a0d3d60a69756  libstdc++-v3/testsuite/20_util/bitset/107037.cc
--- 115777,115783 ----
  f7835b12ebc78dfbfd92e7ea0009129e  libstdc++-v3/testsuite/20_util/bind/placeholders.cc
  54111bea275d92306634b466007bf41c  libstdc++-v3/testsuite/20_util/bind/ref.cc
  472ef7d8e6bc573e0fbdef41c148ab73  libstdc++-v3/testsuite/20_util/bind/ref2.cc
! 3448dccc902fd798314dd4bafd5957ec  libstdc++-v3/testsuite/20_util/bind/ref_neg.cc
  74dd9f024a0fd7328cd0bbc7a5a9a350  libstdc++-v3/testsuite/20_util/bind/refqual.cc
  5b2714416c46b4e95667b1d81e33c6fa  libstdc++-v3/testsuite/20_util/bind/socket.cc
  22b315cd786be549e08a0d3d60a69756  libstdc++-v3/testsuite/20_util/bitset/107037.cc
*************** ac5fc86cab4f651a7009b5e1a04bcc86  libstd
*** 115476,115482 ****
  9c60e231bb78dba8a918d00c8b3648a3  libstdc++-v3/testsuite/20_util/duration/cons/dr2094.cc
  b8359368c2247b52886827271163885e  libstdc++-v3/testsuite/20_util/duration/cons/dr3050.cc
  a0774b99c18fd2bc252c8cd6edb7cf08  libstdc++-v3/testsuite/20_util/duration/cons/dr974_neg.cc
! 559a54bd040d4a4d8aa0b81226502edf  libstdc++-v3/testsuite/20_util/duration/io.cc
  36bc50f45d98b5197379c425a2a7555f  libstdc++-v3/testsuite/20_util/duration/literals/61166.cc
  4ad88bdc966146f6ec3c7264a2a6e138  libstdc++-v3/testsuite/20_util/duration/literals/65499.cc
  6b548b7ad2bc536c9d4fc09f6d07ae8a  libstdc++-v3/testsuite/20_util/duration/literals/84671.cc
--- 115864,115870 ----
  9c60e231bb78dba8a918d00c8b3648a3  libstdc++-v3/testsuite/20_util/duration/cons/dr2094.cc
  b8359368c2247b52886827271163885e  libstdc++-v3/testsuite/20_util/duration/cons/dr3050.cc
  a0774b99c18fd2bc252c8cd6edb7cf08  libstdc++-v3/testsuite/20_util/duration/cons/dr974_neg.cc
! 5ece20909183eed32608487aa72f9c32  libstdc++-v3/testsuite/20_util/duration/io.cc
  36bc50f45d98b5197379c425a2a7555f  libstdc++-v3/testsuite/20_util/duration/literals/61166.cc
  4ad88bdc966146f6ec3c7264a2a6e138  libstdc++-v3/testsuite/20_util/duration/literals/65499.cc
  6b548b7ad2bc536c9d4fc09f6d07ae8a  libstdc++-v3/testsuite/20_util/duration/literals/84671.cc
*************** a592eb6fd816aac034c9922ae4d29f69  libstd
*** 115693,115699 ****
  3ae8ca41b35eac2d1f1517093d72db3b  libstdc++-v3/testsuite/20_util/integer_comparisons/less_neg.cc
  b99be92eb0e0d8698ca6bdc364542e6b  libstdc++-v3/testsuite/20_util/integer_comparisons/not_equal.cc
  12c317569e4d8b79c0b4e9513495def4  libstdc++-v3/testsuite/20_util/integer_comparisons/not_equal_neg.cc
! 01419816e55df10955ea47006b7fd41b  libstdc++-v3/testsuite/20_util/integer_sequence/112473.cc
  b24e47328645bea855bab51280f4457d  libstdc++-v3/testsuite/20_util/integer_sequence/intseq.cc
  b299881c5f8a46c9954c9cfffbb15437  libstdc++-v3/testsuite/20_util/integer_sequence/pr111357.cc
  e58ed11f85b333351ada2f2c5246f90c  libstdc++-v3/testsuite/20_util/integer_sequence/requirements/typedefs.cc
--- 116081,116087 ----
  3ae8ca41b35eac2d1f1517093d72db3b  libstdc++-v3/testsuite/20_util/integer_comparisons/less_neg.cc
  b99be92eb0e0d8698ca6bdc364542e6b  libstdc++-v3/testsuite/20_util/integer_comparisons/not_equal.cc
  12c317569e4d8b79c0b4e9513495def4  libstdc++-v3/testsuite/20_util/integer_comparisons/not_equal_neg.cc
! 7355b0813ebc7993824c3879b4a4e286  libstdc++-v3/testsuite/20_util/integer_sequence/112473.cc
  b24e47328645bea855bab51280f4457d  libstdc++-v3/testsuite/20_util/integer_sequence/intseq.cc
  b299881c5f8a46c9954c9cfffbb15437  libstdc++-v3/testsuite/20_util/integer_sequence/pr111357.cc
  e58ed11f85b333351ada2f2c5246f90c  libstdc++-v3/testsuite/20_util/integer_sequence/requirements/typedefs.cc
*************** efb0b570168ffe84d6e2f37ece809386  libstd
*** 116380,116386 ****
  38f5fbeb35345e4d64d18256a78ba515  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/808590-cxx11.cc
  eae64f29ccdbfcdee6063dc34aadfbc8  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/808590.cc
  643fec3aad33540f16c15ac8700662f5  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/89164.cc
! 48c076e50b07e3f7a7ea7026a7e0f5f6  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/constrained.cc
  8949b41536e4ffb28df4c101423f875f  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/move_iterators/1.cc
  9b3e4f319f44ee77ea0c657fdf58b9fc  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy_n/102064.cc
  6b726c26a8fedc476b6d05db04708cd0  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy_n/58982.cc
--- 116768,116774 ----
  38f5fbeb35345e4d64d18256a78ba515  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/808590-cxx11.cc
  eae64f29ccdbfcdee6063dc34aadfbc8  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/808590.cc
  643fec3aad33540f16c15ac8700662f5  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/89164.cc
! 78b9b684e389fcca091b9832f8448b11  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/constrained.cc
  8949b41536e4ffb28df4c101423f875f  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/move_iterators/1.cc
  9b3e4f319f44ee77ea0c657fdf58b9fc  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy_n/102064.cc
  6b726c26a8fedc476b6d05db04708cd0  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy_n/58982.cc
*************** f43520c8500e12c4d4cd0dd9a8c89d53  libstd
*** 116403,116409 ****
  dd6ca9bbbc3ccd376989fd7088e7fa48  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill_n/94017.cc
  134934699c21eecdbe0eaac97cdfa0f6  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill_n/dr1339.cc
  955d8659a65af878d72c899c14451bb6  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill_n/sizes.cc
! b18fa5cb153e18bec22ffb1e08619094  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_move/constrained.cc
  cd26b65b16e380bbb132809e2ae32dd1  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_value_construct/94540.cc
  c66f2a4b305f52142ba4933f4a3283bf  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_value_construct/94831.cc
  fced6aef1c90b8200f7966d8fc0d1e2b  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_value_construct/constrained.cc
--- 116791,116797 ----
  dd6ca9bbbc3ccd376989fd7088e7fa48  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill_n/94017.cc
  134934699c21eecdbe0eaac97cdfa0f6  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill_n/dr1339.cc
  955d8659a65af878d72c899c14451bb6  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill_n/sizes.cc
! 6e0c3735257694976d8c46f5453c6e17  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_move/constrained.cc
  cd26b65b16e380bbb132809e2ae32dd1  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_value_construct/94540.cc
  c66f2a4b305f52142ba4933f4a3283bf  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_value_construct/94831.cc
  fced6aef1c90b8200f7966d8fc0d1e2b  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_value_construct/constrained.cc
*************** e3fe5ffa6e73649a9f21bc27604fa67e  libstd
*** 116691,116696 ****
--- 117079,117085 ----
  5a245092d50fbff80c427ac99d035c64  libstdc++-v3/testsuite/21_strings/basic_string/40160.cc
  b6e891619cb7e448b49abc63a8ea5d5e  libstdc++-v3/testsuite/21_strings/basic_string/56166.cc
  554d42fbd2ede47fc8cb890a469cce49  libstdc++-v3/testsuite/21_strings/basic_string/79162.cc
+ 6248db4fb7f9c3f83628abf0ac9a21f7  libstdc++-v3/testsuite/21_strings/basic_string/allocator/116641.cc
  9b15e2d1b69151c37ee69650fd30973c  libstdc++-v3/testsuite/21_strings/basic_string/allocator/71964.cc
  44d87f9dd9e3eb7dec99c16028aad28a  libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/copy.cc
  26e8ad0e792657638a1bfdf00ae39b29  libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/copy_assign.cc
*************** a5d43073d77e6a82fc19d777ecf8d46d  libstd
*** 117098,117104 ****
  a832a3b960eb348c9173631d099625c3  libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/2.cc
  4c17567bb37dac4f130cf7027ac16d1c  libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/24559.cc
  6d3a63038ce6c57d5c627c929b6f6e5d  libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/3_neg.cc
! 82d6b4f00580779800e341ec6c9ffaea  libstdc++-v3/testsuite/21_strings/char_traits/requirements/113200.cc
  6b5a2a7c9ce21f32df0f07815bb0efbf  libstdc++-v3/testsuite/21_strings/char_traits/requirements/char/1.cc
  f0db6b54329d88264f75aa5376489f1b  libstdc++-v3/testsuite/21_strings/char_traits/requirements/char/57704.cc
  fc10e558e5f0aee7e00e78d125372b52  libstdc++-v3/testsuite/21_strings/char_traits/requirements/char/65049.cc
--- 117487,117493 ----
  a832a3b960eb348c9173631d099625c3  libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/2.cc
  4c17567bb37dac4f130cf7027ac16d1c  libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/24559.cc
  6d3a63038ce6c57d5c627c929b6f6e5d  libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/3_neg.cc
! ff1a0cc128c3057b55bd8bac27c27d78  libstdc++-v3/testsuite/21_strings/char_traits/requirements/113200.cc
  6b5a2a7c9ce21f32df0f07815bb0efbf  libstdc++-v3/testsuite/21_strings/char_traits/requirements/char/1.cc
  f0db6b54329d88264f75aa5376489f1b  libstdc++-v3/testsuite/21_strings/char_traits/requirements/char/57704.cc
  fc10e558e5f0aee7e00e78d125372b52  libstdc++-v3/testsuite/21_strings/char_traits/requirements/char/65049.cc
*************** fd01b31b169942eecab854f246bc52e2  libstd
*** 117157,117167 ****
  01b1dd4508f18cb388f882127de06e5b  libstdc++-v3/testsuite/22_locale/codecvt/char16_t.cc
  bd333062b7b6faf3b89b05fcdf075c73  libstdc++-v3/testsuite/22_locale/codecvt/char32_t-char8_t.cc
  0a854aa822b999e314f3fd2f27e43efd  libstdc++-v3/testsuite/22_locale/codecvt/char32_t.cc
! ef0d7ab133458c0e4fdcf24623b8b3d6  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_unicode.cc
! c6356589ddb2f76da9726a03bce7be0e  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_unicode.h
! 4586afaccef10b14e5cccbaf448d95c6  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_unicode_wchar_t.cc
  750e8d83b8e45b141befcbeca8c9d9d0  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/66417.cc
! 622ff2c6b116c7d3c82b128e5342029d  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/79980.cc
  8f88813744024d0f74dae7d2052ca424  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/80041.cc
  9298c94c14de146f6de9b9ba6e0eeb11  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/members.cc
  0e71f450fcb7bf37738b522479fe9df0  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/misaligned.cc
--- 117546,117557 ----
  01b1dd4508f18cb388f882127de06e5b  libstdc++-v3/testsuite/22_locale/codecvt/char16_t.cc
  bd333062b7b6faf3b89b05fcdf075c73  libstdc++-v3/testsuite/22_locale/codecvt/char32_t-char8_t.cc
  0a854aa822b999e314f3fd2f27e43efd  libstdc++-v3/testsuite/22_locale/codecvt/char32_t.cc
! dd155e7590a810f9d0c0256264cc8023  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_unicode.cc
! a88a51da2e3367bb53fd9364462673f1  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_unicode.h
! cb103aae8e055fb344d974b88a75d5ba  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_unicode_char8_t.cc
! 01f8942b2953be7e8333dc440fc03bd2  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_unicode_wchar_t.cc
  750e8d83b8e45b141befcbeca8c9d9d0  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/66417.cc
! 74a19063f218643e65ceda2842f1e054  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/79980.cc
  8f88813744024d0f74dae7d2052ca424  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/80041.cc
  9298c94c14de146f6de9b9ba6e0eeb11  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/members.cc
  0e71f450fcb7bf37738b522479fe9df0  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/misaligned.cc
*************** ceb82f9c3296cb91c772fbaed4221733  libstd
*** 117635,117640 ****
--- 118025,118031 ----
  9a5d5453b707db4ec789cf0cb5a97b67  libstdc++-v3/testsuite/22_locale/time_get/get/char/2.cc
  0bf1b4fd315bbb7bd66dfc9666e0e5e6  libstdc++-v3/testsuite/22_locale/time_get/get/char/3.cc
  c7d31005652249477e0646ec2cd23fa9  libstdc++-v3/testsuite/22_locale/time_get/get/char/4.cc
+ ccae84ef860b6cb792e3bba047c642ba  libstdc++-v3/testsuite/22_locale/time_get/get/char/5.cc
  3b97c35b6f37ac43ebdc34362fb5bb27  libstdc++-v3/testsuite/22_locale/time_get/get/char/71367.cc
  20d958c3a84f4a43c906a4983e1512f8  libstdc++-v3/testsuite/22_locale/time_get/get/char/71557.cc
  dea983530302f4a9ad9004fc650cba6f  libstdc++-v3/testsuite/22_locale/time_get/get/char/88681.cc
*************** dea983530302f4a9ad9004fc650cba6f  libstd
*** 117642,117647 ****
--- 118033,118039 ----
  0fa31317657a8dc3aadb34c1c334abd1  libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/2.cc
  6062ff92984041ca6eb46a705033d625  libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/3.cc
  7615d7c3d0ffc9373cce7ea37d2818c5  libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/4.cc
+ 08060d3b75d32f2fd6603702387d3dd1  libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/5.cc
  060925d7d586495f246e9e4251ad7f97  libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/71367.cc
  6179effc9fc467cc2a0629756e434dea  libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/71557.cc
  11e3eaf8650d9500d35a64c21bccf971  libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/88681.cc
*************** fd41d82a175006535bf3fbc41edfdc02  libstd
*** 117766,117771 ****
--- 118158,118164 ----
  800d98c4ed801c2762ce2b63d1fc2b5d  libstdc++-v3/testsuite/23_containers/array/capacity/empty.cc
  2de7c8abb11aece9cd75117399640545  libstdc++-v3/testsuite/23_containers/array/capacity/max_size.cc
  a99f5e5e0120fb575c308a5f7e16570a  libstdc++-v3/testsuite/23_containers/array/capacity/size.cc
+ f171d6452750aeee17d87967ee1cb642  libstdc++-v3/testsuite/23_containers/array/comparison_operators/106212.cc
  0f1599760c1ba53517bb0408a4ce7d5a  libstdc++-v3/testsuite/23_containers/array/comparison_operators/96851.cc
  70a7002a1d1ebe17d0e2fb5440609490  libstdc++-v3/testsuite/23_containers/array/comparison_operators/constexpr.cc
  5c9463c3dc19638249b62d90647a8779  libstdc++-v3/testsuite/23_containers/array/comparison_operators/equal.cc
*************** b3513ed5ffa499cca3181c7fd14dcf43  libstd
*** 117781,117786 ****
--- 118174,118180 ----
  93661bce5f3afebe28cac67fcb071b4f  libstdc++-v3/testsuite/23_containers/array/creation/1.cc
  29863c1177013eb82c96ce1e6df02aea  libstdc++-v3/testsuite/23_containers/array/creation/110167.cc
  c33e3cf546fa87ee1cf2a1313c16655a  libstdc++-v3/testsuite/23_containers/array/creation/111512.cc
+ 8593454bedb83a84b3bcc44f4613f66a  libstdc++-v3/testsuite/23_containers/array/creation/115522.cc
  bad60bb55072f7831f210bb5cf8c0cbc  libstdc++-v3/testsuite/23_containers/array/creation/2.cc
  69458a6af51c0639515b7d48201e0bf7  libstdc++-v3/testsuite/23_containers/array/creation/3_neg.cc
  a49a7352cef5176add32c3a8e0e3e034  libstdc++-v3/testsuite/23_containers/array/debug/back1_neg.cc
*************** e66b484200a9bdecd71e4541bed6b93e  libstd
*** 117888,117893 ****
--- 118282,118288 ----
  21665584bf5430f125db35d91bb8b5e6  libstdc++-v3/testsuite/23_containers/deque/init-list.cc
  3b8b76830e28c2e8787678503c757a5d  libstdc++-v3/testsuite/23_containers/deque/modifiers/assign/1.cc
  5b30438ec704fa2989c2780d4b7988b0  libstdc++-v3/testsuite/23_containers/deque/modifiers/emplace/1.cc
+ 0ff485943b32fb63316f65b20ffe13b8  libstdc++-v3/testsuite/23_containers/deque/modifiers/emplace/90389.cc
  cb5f4a07ac39deee08d7f147b104a300  libstdc++-v3/testsuite/23_containers/deque/modifiers/emplace/92878_92947.cc
  f4824b00e1312af5ab44145ea82783d5  libstdc++-v3/testsuite/23_containers/deque/modifiers/emplace/cxx17_return.cc
  54cef924a6d78a5bfc6986a5ac342f47  libstdc++-v3/testsuite/23_containers/deque/modifiers/erase/1.cc
*************** dcd4a7b6693f87bdac13ef4262b82a2f  libstd
*** 117896,117901 ****
--- 118291,118297 ----
  c6c0dc3e44ffa40cdc219bded3accc96  libstdc++-v3/testsuite/23_containers/deque/modifiers/erase/50529.cc
  29ef987dee2c9746931a908206197655  libstdc++-v3/testsuite/23_containers/deque/modifiers/erase/54577.cc
  db640db25c8533c189ce5fae5802edc6  libstdc++-v3/testsuite/23_containers/deque/modifiers/erase/moveable.cc
+ bba735cdd63b156bce7cabf7cc2f280d  libstdc++-v3/testsuite/23_containers/deque/modifiers/insert/118035.cc
  2443fab002ea381df0a112392ac37be8  libstdc++-v3/testsuite/23_containers/deque/modifiers/insert/const_iterator.cc
  81d0536967077833f0df8d222b39c532  libstdc++-v3/testsuite/23_containers/deque/modifiers/moveable.cc
  79f5f829ea12055e9218d50ebefb35ed  libstdc++-v3/testsuite/23_containers/deque/modifiers/push_back/49836.cc
*************** c1c67b7f0cdd8a4e08ccb5f1c47684d4  libstd
*** 117999,118005 ****
  4872030e67caf4c33440c2864041e24e  libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after6_neg.cc
  5213fe2cb3990f2cba5e56a0bb714c88  libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after7_neg.cc
  9f32ca6f0a5bc2f373d834b141e33c11  libstdc++-v3/testsuite/23_containers/forward_list/debug/swap.cc
! fe049265fc2753bafa43c99f25313580  libstdc++-v3/testsuite/23_containers/forward_list/erasure.cc
  3d729b39a39f38eeb3bb2e0215082778  libstdc++-v3/testsuite/23_containers/forward_list/modifiers/1.cc
  53165a1f8a0bc90aa9a98a98f6c3fce1  libstdc++-v3/testsuite/23_containers/forward_list/modifiers/2.cc
  921bfaa93cd79b819d72430ef8eaf8ad  libstdc++-v3/testsuite/23_containers/forward_list/modifiers/3.cc
--- 118395,118401 ----
  4872030e67caf4c33440c2864041e24e  libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after6_neg.cc
  5213fe2cb3990f2cba5e56a0bb714c88  libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after7_neg.cc
  9f32ca6f0a5bc2f373d834b141e33c11  libstdc++-v3/testsuite/23_containers/forward_list/debug/swap.cc
! ffad374cf7ee755cfefd656ab0e265d2  libstdc++-v3/testsuite/23_containers/forward_list/erasure.cc
  3d729b39a39f38eeb3bb2e0215082778  libstdc++-v3/testsuite/23_containers/forward_list/modifiers/1.cc
  53165a1f8a0bc90aa9a98a98f6c3fce1  libstdc++-v3/testsuite/23_containers/forward_list/modifiers/2.cc
  921bfaa93cd79b819d72430ef8eaf8ad  libstdc++-v3/testsuite/23_containers/forward_list/modifiers/3.cc
*************** d7718e3fce4457460dfbe2d8534dac84  libstd
*** 118125,118131 ****
  6cec8f507b3cef9c3309367d2cd146f5  libstdc++-v3/testsuite/23_containers/list/debug/invalidation/2.cc
  9c839bb0680313331b28a0c0c4b6c729  libstdc++-v3/testsuite/23_containers/list/debug/invalidation/3.cc
  46f0395f612d951d6c25a76797893d3d  libstdc++-v3/testsuite/23_containers/list/debug/invalidation/4.cc
! efa0bb3c4d9dd9f43e5ce456fb9f679b  libstdc++-v3/testsuite/23_containers/list/erasure.cc
  ee6de5b462e30789f10533fc8263f580  libstdc++-v3/testsuite/23_containers/list/init-list.cc
  013d2ce9cc9ebe10a5990775e72712b4  libstdc++-v3/testsuite/23_containers/list/init-list.h
  5f3c0b34393300a8039b6ef101b0e33a  libstdc++-v3/testsuite/23_containers/list/modifiers/1.cc
--- 118521,118527 ----
  6cec8f507b3cef9c3309367d2cd146f5  libstdc++-v3/testsuite/23_containers/list/debug/invalidation/2.cc
  9c839bb0680313331b28a0c0c4b6c729  libstdc++-v3/testsuite/23_containers/list/debug/invalidation/3.cc
  46f0395f612d951d6c25a76797893d3d  libstdc++-v3/testsuite/23_containers/list/debug/invalidation/4.cc
! 69412ef1bd8813ca06ea6fccd250d3b9  libstdc++-v3/testsuite/23_containers/list/erasure.cc
  ee6de5b462e30789f10533fc8263f580  libstdc++-v3/testsuite/23_containers/list/init-list.cc
  013d2ce9cc9ebe10a5990775e72712b4  libstdc++-v3/testsuite/23_containers/list/init-list.h
  5f3c0b34393300a8039b6ef101b0e33a  libstdc++-v3/testsuite/23_containers/list/modifiers/1.cc
*************** f4cc805475fe4eb6e298f4a6f06fc466  libstd
*** 118560,118565 ****
--- 118956,118962 ----
  9eb510e023d1354dc13a7ca6b55e1b35  libstdc++-v3/testsuite/23_containers/set/requirements/typedefs.cc
  24be6a251d10ec91a71a6cbf08e52ce6  libstdc++-v3/testsuite/23_containers/span/1.cc
  62d71e263b54ca463af9228fd31a5f0f  libstdc++-v3/testsuite/23_containers/span/101411.cc
+ 514a582127ec8ba0d75d3b689192b0b6  libstdc++-v3/testsuite/23_containers/span/117966.cc
  a41a95237005cc1253becbc65d0e579a  libstdc++-v3/testsuite/23_containers/span/2.cc
  e54c50ffc58578394a5d9dc8f8c88fed  libstdc++-v3/testsuite/23_containers/span/back_assert_neg.cc
  8c144576c278335e14589c3a325f9d3b  libstdc++-v3/testsuite/23_containers/span/back_neg.cc
*************** ca6e6c070f5eebec8f25252bdec87031  libstd
*** 118581,118587 ****
  3cabc72155b68493a5402e5bc03f3716  libstdc++-v3/testsuite/23_containers/span/last_neg.cc
  64e1b8875fd0c928889c5831cd7e709c  libstdc++-v3/testsuite/23_containers/span/layout_compat.cc
  be1f50b1146968c150d08a2efb45f08a  libstdc++-v3/testsuite/23_containers/span/lwg3255.cc
! e45c1853ec6f098abc263746f2bf72fa  libstdc++-v3/testsuite/23_containers/span/nodiscard.cc
  253debc3012d6998190de8476a1af448  libstdc++-v3/testsuite/23_containers/span/nothrow_cons.cc
  5abdd960c84c3d05118cb4193f67acd6  libstdc++-v3/testsuite/23_containers/span/subspan_2_assert_neg.cc
  83f0d62dacd84d70115c058e8323ee44  libstdc++-v3/testsuite/23_containers/span/subspan_3_assert_neg.cc
--- 118978,118984 ----
  3cabc72155b68493a5402e5bc03f3716  libstdc++-v3/testsuite/23_containers/span/last_neg.cc
  64e1b8875fd0c928889c5831cd7e709c  libstdc++-v3/testsuite/23_containers/span/layout_compat.cc
  be1f50b1146968c150d08a2efb45f08a  libstdc++-v3/testsuite/23_containers/span/lwg3255.cc
! 7f83e348557ab945c2a07cd58325b011  libstdc++-v3/testsuite/23_containers/span/nodiscard.cc
  253debc3012d6998190de8476a1af448  libstdc++-v3/testsuite/23_containers/span/nothrow_cons.cc
  5abdd960c84c3d05118cb4193f67acd6  libstdc++-v3/testsuite/23_containers/span/subspan_2_assert_neg.cc
  83f0d62dacd84d70115c058e8323ee44  libstdc++-v3/testsuite/23_containers/span/subspan_3_assert_neg.cc
*************** a5e6700a2a84fc0b1f002e05017a83c0  libstd
*** 119036,119041 ****
--- 119433,119439 ----
  5621b32ddf6633edc0ebd4980dafce1c  libstdc++-v3/testsuite/23_containers/vector/63500.cc
  8136b652fd3b368de1b902d69ceead52  libstdc++-v3/testsuite/23_containers/vector/70303.cc
  66d0f776d2c31e8e454e78933220d9b2  libstdc++-v3/testsuite/23_containers/vector/92124.cc
+ 371791c0200fa087edd099071f38f4ca  libstdc++-v3/testsuite/23_containers/vector/allocator/115854.cc
  147baba18244a4f051ef7d0475b48a96  libstdc++-v3/testsuite/23_containers/vector/allocator/construction.cc
  7e47a884971671bfda28ba6023d8689c  libstdc++-v3/testsuite/23_containers/vector/allocator/copy.cc
  b42f676183465738e18df1b4bfcb64da  libstdc++-v3/testsuite/23_containers/vector/allocator/copy_assign.cc
*************** a830cc0e83dd9df546274fdba18aa9fc  libstd
*** 119054,119059 ****
--- 119452,119458 ----
  db3000bea2e5400e6fa098f5f2045e51  libstdc++-v3/testsuite/23_containers/vector/bool/72847.cc
  b5c49d8dad38eff83740e30632ee2b28  libstdc++-v3/testsuite/23_containers/vector/bool/80893.cc
  f4230443a3feda858c8939974edb01bb  libstdc++-v3/testsuite/23_containers/vector/bool/82558.cc
+ 73c5b9c54b2908f68ed5159e5d3cb134  libstdc++-v3/testsuite/23_containers/vector/bool/allocator/115854.cc
  a5e9cc044dca5419b0dd551dd690acaa  libstdc++-v3/testsuite/23_containers/vector/bool/allocator/copy.cc
  48be012d82a222e324550392414e1efe  libstdc++-v3/testsuite/23_containers/vector/bool/allocator/copy_assign.cc
  2638890341a017542203b1fb4987a7fe  libstdc++-v3/testsuite/23_containers/vector/bool/allocator/default_init.cc
*************** ddce1d839be1ae13b82e9a0c421350fc  libstd
*** 119064,119069 ****
--- 119463,119470 ----
  21241dc725e9f60afec074ded60948d7  libstdc++-v3/testsuite/23_containers/vector/bool/allocator/noexcept.cc
  367f27adc1f8771787d15e7888fad23b  libstdc++-v3/testsuite/23_containers/vector/bool/allocator/swap.cc
  207ff9cc2bd7e9f620e7ce0d5283a76b  libstdc++-v3/testsuite/23_containers/vector/bool/capacity/1.cc
+ 43418c25f2ef20388b351d32b8432a94  libstdc++-v3/testsuite/23_containers/vector/bool/capacity/110498.cc
+ a90fac2726b803c892d71ff9366d2daa  libstdc++-v3/testsuite/23_containers/vector/bool/capacity/114758.cc
  e769cfd5846d2ec62fa83df607879554  libstdc++-v3/testsuite/23_containers/vector/bool/capacity/29134.cc
  f3a53ae538351a02f5ec621190a341fc  libstdc++-v3/testsuite/23_containers/vector/bool/capacity/constexpr.cc
  f672646095d11205cf50faf1509941ce  libstdc++-v3/testsuite/23_containers/vector/bool/capacity/shrink_to_fit.cc
*************** bd1112e48ed191a945eed483d8fcb137  libstd
*** 119078,119083 ****
--- 119479,119485 ----
  35e0cd4f42eda824bbba54df3a2bb017  libstdc++-v3/testsuite/23_containers/vector/bool/element_access/constexpr.cc
  d1114cc2d510dae7a9bf1b8326a487d5  libstdc++-v3/testsuite/23_containers/vector/bool/emplace.cc
  708465ee83ee8d2cedd6178588b80861  libstdc++-v3/testsuite/23_containers/vector/bool/emplace_cxx17_return.cc
+ 61dccf009d507fd3f577a5aeacafcbf6  libstdc++-v3/testsuite/23_containers/vector/bool/emplace_rvalue.cc
  cd96e65058ebe814656e826478326fee  libstdc++-v3/testsuite/23_containers/vector/bool/hash/1.cc
  bb235d56a0913b726dcbcf78e6e2d6ff  libstdc++-v3/testsuite/23_containers/vector/bool/iterator_c++20.cc
  527c1ee736303057226c1aff439f6619  libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/assign/1.cc
*************** e5ce6172cf6fcdb926ab9b03f3e76ade  libstd
*** 119116,119122 ****
  031e5adf8a70e8ab5f1a41371962e7ac  libstdc++-v3/testsuite/23_containers/vector/check_construct_destroy.cc
  9320329243f60de2ac1ddcfb8440d0e2  libstdc++-v3/testsuite/23_containers/vector/cmp_c++20.cc
  fa4a6541280ab8fbe2cc5ac8b589b4be  libstdc++-v3/testsuite/23_containers/vector/cons/1.cc
! 6bfe3fe60e55efb3d1e962aa17c03c0a  libstdc++-v3/testsuite/23_containers/vector/cons/113841.cc
  c7f03648598ef0cab3092f51b3f00744  libstdc++-v3/testsuite/23_containers/vector/cons/2.cc
  c664a685c6f3a9f8c19d7c9e275a8a93  libstdc++-v3/testsuite/23_containers/vector/cons/3.cc
  6c1d7fcf8dd6d3449ee74f6719a389a8  libstdc++-v3/testsuite/23_containers/vector/cons/4.cc
--- 119518,119524 ----
  031e5adf8a70e8ab5f1a41371962e7ac  libstdc++-v3/testsuite/23_containers/vector/check_construct_destroy.cc
  9320329243f60de2ac1ddcfb8440d0e2  libstdc++-v3/testsuite/23_containers/vector/cmp_c++20.cc
  fa4a6541280ab8fbe2cc5ac8b589b4be  libstdc++-v3/testsuite/23_containers/vector/cons/1.cc
! c0f1f9158e1bb05e7c104325fb5ba28c  libstdc++-v3/testsuite/23_containers/vector/cons/113841.cc
  c7f03648598ef0cab3092f51b3f00744  libstdc++-v3/testsuite/23_containers/vector/cons/2.cc
  c664a685c6f3a9f8c19d7c9e275a8a93  libstdc++-v3/testsuite/23_containers/vector/cons/3.cc
  6c1d7fcf8dd6d3449ee74f6719a389a8  libstdc++-v3/testsuite/23_containers/vector/cons/4.cc
*************** fd16d373b8a28303b6943e6339972258  libstd
*** 119207,119212 ****
--- 119609,119615 ----
  b4ff6f2b7d6d5964dcf90b3d262e02d6  libstdc++-v3/testsuite/23_containers/vector/modifiers/erase/54577.cc
  6342fad60af43c688fae7b5d17f2d0d7  libstdc++-v3/testsuite/23_containers/vector/modifiers/erase/moveable.cc
  bd380b2e874bfa2f8d63461b8f4a8add  libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/1.cc
+ 4efef42f0cfbeb752b2c967583ca4237  libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/117983.cc
  0a5fb821e9a92434f958f65b5fc083c7  libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/58148.cc
  6ab51574ca3c277f756fe3df91890541  libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/aliasing.cc
  e237c5e34318ddc293afe0b0a6b36839  libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/const_iterator.cc
*************** ae8505ef374dd9974845cff7aeaa5d37  libstd
*** 119262,119277 ****
  debb68c68dd5189b867e83a0950968c4  libstdc++-v3/testsuite/24_iterators/bidirectional/tag.cc
  6f53257e08db7bf79198e821fba81d8c  libstdc++-v3/testsuite/24_iterators/common_iterator/1.cc
  a827335620d308b35c53b3ee1c9877b9  libstdc++-v3/testsuite/24_iterators/common_iterator/100823.cc
  19962f4a948ee8a811eb1d167bc7885d  libstdc++-v3/testsuite/24_iterators/common_iterator/2.cc
! e0a48c815909ee67a38f78eeb920db89  libstdc++-v3/testsuite/24_iterators/const_iterator/1.cc
  3941f812a2cc88107aa50d5fa67d2cce  libstdc++-v3/testsuite/24_iterators/container_access.cc
  ff373ccb63010db03d4b9fc644be36cb  libstdc++-v3/testsuite/24_iterators/contiguous/concept.cc
  355ec131f5c874467d4e57e6f83aa348  libstdc++-v3/testsuite/24_iterators/contiguous/tag.cc
  c4578e9138804397582ab09fb8ae0be9  libstdc++-v3/testsuite/24_iterators/counted_iterator/1.cc
  7b5e5aa4292ba9e356f2d182d1e498a2  libstdc++-v3/testsuite/24_iterators/counted_iterator/lwg3389.cc
  564e115ff4a93acb59630b87fa2920f9  libstdc++-v3/testsuite/24_iterators/counted_iterator/lwg3643.cc
  129fb7a708505b7658a965e4734efa23  libstdc++-v3/testsuite/24_iterators/customization_points/92894.cc
! 4628b9edaabe057bd16fa80f66fa98ef  libstdc++-v3/testsuite/24_iterators/customization_points/iter_move.cc
  aae04855d68526603b64dfac6700c76d  libstdc++-v3/testsuite/24_iterators/customization_points/iter_swap.cc
  aefa346a1ce0c8098fbcc79cf583de94  libstdc++-v3/testsuite/24_iterators/customization_points/lwg3420.cc
  c2ab2ac172f6cfa5558835ba26066369  libstdc++-v3/testsuite/24_iterators/forward/concept.cc
--- 119665,119683 ----
  debb68c68dd5189b867e83a0950968c4  libstdc++-v3/testsuite/24_iterators/bidirectional/tag.cc
  6f53257e08db7bf79198e821fba81d8c  libstdc++-v3/testsuite/24_iterators/common_iterator/1.cc
  a827335620d308b35c53b3ee1c9877b9  libstdc++-v3/testsuite/24_iterators/common_iterator/100823.cc
+ 860ac6e26479f7bb4d8e3d1529ffbb0e  libstdc++-v3/testsuite/24_iterators/common_iterator/101527.cc
  19962f4a948ee8a811eb1d167bc7885d  libstdc++-v3/testsuite/24_iterators/common_iterator/2.cc
! 3cac830e703c04cc46e53a8cd159c4fc  libstdc++-v3/testsuite/24_iterators/const_iterator/1.cc
! 0ac3e08f2580f096d42535d8bd3e0f68  libstdc++-v3/testsuite/24_iterators/const_iterator/112490.cc
  3941f812a2cc88107aa50d5fa67d2cce  libstdc++-v3/testsuite/24_iterators/container_access.cc
  ff373ccb63010db03d4b9fc644be36cb  libstdc++-v3/testsuite/24_iterators/contiguous/concept.cc
  355ec131f5c874467d4e57e6f83aa348  libstdc++-v3/testsuite/24_iterators/contiguous/tag.cc
  c4578e9138804397582ab09fb8ae0be9  libstdc++-v3/testsuite/24_iterators/counted_iterator/1.cc
+ f660eb1deca5d116e078e801e8f152e1  libstdc++-v3/testsuite/24_iterators/counted_iterator/101527.cc
  7b5e5aa4292ba9e356f2d182d1e498a2  libstdc++-v3/testsuite/24_iterators/counted_iterator/lwg3389.cc
  564e115ff4a93acb59630b87fa2920f9  libstdc++-v3/testsuite/24_iterators/counted_iterator/lwg3643.cc
  129fb7a708505b7658a965e4734efa23  libstdc++-v3/testsuite/24_iterators/customization_points/92894.cc
! dc5099ed3fb727009e1d604b169b7737  libstdc++-v3/testsuite/24_iterators/customization_points/iter_move.cc
  aae04855d68526603b64dfac6700c76d  libstdc++-v3/testsuite/24_iterators/customization_points/iter_swap.cc
  aefa346a1ce0c8098fbcc79cf583de94  libstdc++-v3/testsuite/24_iterators/customization_points/lwg3420.cc
  c2ab2ac172f6cfa5558835ba26066369  libstdc++-v3/testsuite/24_iterators/forward/concept.cc
*************** dfc826bcfdcc73ea48c29bc164a8cc63  libstd
*** 119335,119343 ****
  a33efb91b787bf40c3d4736fff85e4fd  libstdc++-v3/testsuite/24_iterators/move_iterator/input_iterator.cc
  b71c164c19f41e605bbd1c5406034051  libstdc++-v3/testsuite/24_iterators/move_iterator/lwg3390.cc
  a8e3e1f3fb1408d1056247dd051b75c7  libstdc++-v3/testsuite/24_iterators/move_iterator/lwg3391.cc
  73cc87e3970927d6d0a2da1edf59953d  libstdc++-v3/testsuite/24_iterators/move_iterator/move_only.cc
  07ce682361ed0ad0f811c9f052ebdf97  libstdc++-v3/testsuite/24_iterators/move_iterator/p2520r0.cc
! 9b9fad43f1df4f5a1f9882976e56735c  libstdc++-v3/testsuite/24_iterators/move_iterator/rel_ops_c++20.cc
  90deb52d353436af1d0ac667e877a9f8  libstdc++-v3/testsuite/24_iterators/move_iterator/sentinel.cc
  bc688d904bce917c2f66ab4bb619fc40  libstdc++-v3/testsuite/24_iterators/normal_iterator/58403.cc
  ebe18fc0e7b2e2c74bd59ee0815c30ae  libstdc++-v3/testsuite/24_iterators/normal_iterator/cmp_c++20.cc
--- 119741,119750 ----
  a33efb91b787bf40c3d4736fff85e4fd  libstdc++-v3/testsuite/24_iterators/move_iterator/input_iterator.cc
  b71c164c19f41e605bbd1c5406034051  libstdc++-v3/testsuite/24_iterators/move_iterator/lwg3390.cc
  a8e3e1f3fb1408d1056247dd051b75c7  libstdc++-v3/testsuite/24_iterators/move_iterator/lwg3391.cc
+ e74ad32767276ebf45617ab912639d2b  libstdc++-v3/testsuite/24_iterators/move_iterator/lwg3736.cc
  73cc87e3970927d6d0a2da1edf59953d  libstdc++-v3/testsuite/24_iterators/move_iterator/move_only.cc
  07ce682361ed0ad0f811c9f052ebdf97  libstdc++-v3/testsuite/24_iterators/move_iterator/p2520r0.cc
! bcb81c425271365503385799f745e7b7  libstdc++-v3/testsuite/24_iterators/move_iterator/rel_ops_c++20.cc
  90deb52d353436af1d0ac667e877a9f8  libstdc++-v3/testsuite/24_iterators/move_iterator/sentinel.cc
  bc688d904bce917c2f66ab4bb619fc40  libstdc++-v3/testsuite/24_iterators/normal_iterator/58403.cc
  ebe18fc0e7b2e2c74bd59ee0815c30ae  libstdc++-v3/testsuite/24_iterators/normal_iterator/cmp_c++20.cc
*************** aa9930f1ed9f06f2d99c91ddab8802af  libstd
*** 119374,119380 ****
  71ec18369f3a12952163565985f0b100  libstdc++-v3/testsuite/24_iterators/range_operations/advance.cc
  6d7eb0347f53ca13b926d9f9b99c9a2f  libstdc++-v3/testsuite/24_iterators/range_operations/advance_debug_neg.cc
  5dcff108eb2f62baa60bfa3a74d92304  libstdc++-v3/testsuite/24_iterators/range_operations/advance_overflow.cc
! 88a53a38be47a524b07722f68deb33be  libstdc++-v3/testsuite/24_iterators/range_operations/distance.cc
  3851ab6d95bc78163ba5186545dd9eb7  libstdc++-v3/testsuite/24_iterators/range_operations/lwg3392.cc
  719157d78f9921ad711b728fc354eac9  libstdc++-v3/testsuite/24_iterators/range_operations/next.cc
  614701f7ea3bfad828c724f514f9002f  libstdc++-v3/testsuite/24_iterators/range_operations/prev.cc
--- 119781,119787 ----
  71ec18369f3a12952163565985f0b100  libstdc++-v3/testsuite/24_iterators/range_operations/advance.cc
  6d7eb0347f53ca13b926d9f9b99c9a2f  libstdc++-v3/testsuite/24_iterators/range_operations/advance_debug_neg.cc
  5dcff108eb2f62baa60bfa3a74d92304  libstdc++-v3/testsuite/24_iterators/range_operations/advance_overflow.cc
! b6e2647c2814fb14642582c4deb700cb  libstdc++-v3/testsuite/24_iterators/range_operations/distance.cc
  3851ab6d95bc78163ba5186545dd9eb7  libstdc++-v3/testsuite/24_iterators/range_operations/lwg3392.cc
  719157d78f9921ad711b728fc354eac9  libstdc++-v3/testsuite/24_iterators/range_operations/next.cc
  614701f7ea3bfad828c724f514f9002f  libstdc++-v3/testsuite/24_iterators/range_operations/prev.cc
*************** c629fb829445d4fe899403deb3f1e8b1  libstd
*** 119444,119450 ****
  efaf386a62222b506e2e629523f82be6  libstdc++-v3/testsuite/25_algorithms/contains/1.cc
  0719c4dc9fc16425ac3f7ec38de3dbfe  libstdc++-v3/testsuite/25_algorithms/contains_subrange/1.cc
  6c4217e480602bd852cc85e482e32892  libstdc++-v3/testsuite/25_algorithms/copy/1.cc
! ab3dc855e72ee51df3a966a7fda86fc5  libstdc++-v3/testsuite/25_algorithms/copy/108846.cc
  c377d7bddae0527d5517e24864a915a5  libstdc++-v3/testsuite/25_algorithms/copy/2.cc
  1ac739298af8b4ff67a2aeecedf7dded  libstdc++-v3/testsuite/25_algorithms/copy/3.cc
  fffa59230f2109ca541558d92faa5399  libstdc++-v3/testsuite/25_algorithms/copy/34595.cc
--- 119851,119857 ----
  efaf386a62222b506e2e629523f82be6  libstdc++-v3/testsuite/25_algorithms/contains/1.cc
  0719c4dc9fc16425ac3f7ec38de3dbfe  libstdc++-v3/testsuite/25_algorithms/contains_subrange/1.cc
  6c4217e480602bd852cc85e482e32892  libstdc++-v3/testsuite/25_algorithms/copy/1.cc
! ae049046b45a395504fd1e8a19c4f18b  libstdc++-v3/testsuite/25_algorithms/copy/108846.cc
  c377d7bddae0527d5517e24864a915a5  libstdc++-v3/testsuite/25_algorithms/copy/2.cc
  1ac739298af8b4ff67a2aeecedf7dded  libstdc++-v3/testsuite/25_algorithms/copy/3.cc
  fffa59230f2109ca541558d92faa5399  libstdc++-v3/testsuite/25_algorithms/copy/34595.cc
*************** e64d102047a62234a5b214614317d2f3  libstd
*** 119481,119487 ****
  1bcd6f83f98c852a519aeea534df0f81  libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/2.cc
  6de08c1e8d8947ca7d4522f65f6d684a  libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/3.cc
  88c10c08bff86e78d9ade328bfa3c0b1  libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/4.cc
! bb0e824b90574124bc4bf32ff7dc510b  libstdc++-v3/testsuite/25_algorithms/copy_backward/108846.cc
  607bcd1792800b43bb61b9097afc3b18  libstdc++-v3/testsuite/25_algorithms/copy_backward/94013.cc
  d67bf0088f3d346d94fe6b96005fa647  libstdc++-v3/testsuite/25_algorithms/copy_backward/95578.cc
  ac7977f6977a4dd984db73a74728c68c  libstdc++-v3/testsuite/25_algorithms/copy_backward/constexpr.cc
--- 119888,119894 ----
  1bcd6f83f98c852a519aeea534df0f81  libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/2.cc
  6de08c1e8d8947ca7d4522f65f6d684a  libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/3.cc
  88c10c08bff86e78d9ade328bfa3c0b1  libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/4.cc
! ea6103a279f6870c767eeb7c52ec5c64  libstdc++-v3/testsuite/25_algorithms/copy_backward/108846.cc
  607bcd1792800b43bb61b9097afc3b18  libstdc++-v3/testsuite/25_algorithms/copy_backward/94013.cc
  d67bf0088f3d346d94fe6b96005fa647  libstdc++-v3/testsuite/25_algorithms/copy_backward/95578.cc
  ac7977f6977a4dd984db73a74728c68c  libstdc++-v3/testsuite/25_algorithms/copy_backward/constexpr.cc
*************** bab78fb497f5333fdf085b11009e760e  libstd
*** 119502,119508 ****
  fda414818df4fbd72024f365a90e6653  libstdc++-v3/testsuite/25_algorithms/copy_if/requirements/explicit_instantiation/2.cc
  15a1f11beb9c93d485dd418844e8d0f5  libstdc++-v3/testsuite/25_algorithms/copy_if/requirements/explicit_instantiation/pod.cc
  321ce325e49187b9dd7f15f20e1954df  libstdc++-v3/testsuite/25_algorithms/copy_n/1.cc
! 1e20df47bf8b9c2d7325fca62a0f583e  libstdc++-v3/testsuite/25_algorithms/copy_n/108846.cc
  2ba0f7ac8dc951dd09ad9e2ad235643c  libstdc++-v3/testsuite/25_algorithms/copy_n/2.cc
  ff2b074cd18ad6d9466ec7f7320d3c6b  libstdc++-v3/testsuite/25_algorithms/copy_n/3.cc
  8b43157079b91b2cc1ee9b2a5ac51ff3  libstdc++-v3/testsuite/25_algorithms/copy_n/4.cc
--- 119909,119915 ----
  fda414818df4fbd72024f365a90e6653  libstdc++-v3/testsuite/25_algorithms/copy_if/requirements/explicit_instantiation/2.cc
  15a1f11beb9c93d485dd418844e8d0f5  libstdc++-v3/testsuite/25_algorithms/copy_if/requirements/explicit_instantiation/pod.cc
  321ce325e49187b9dd7f15f20e1954df  libstdc++-v3/testsuite/25_algorithms/copy_n/1.cc
! 09578b9aadb39524362e19a9314c8e28  libstdc++-v3/testsuite/25_algorithms/copy_n/108846.cc
  2ba0f7ac8dc951dd09ad9e2ad235643c  libstdc++-v3/testsuite/25_algorithms/copy_n/2.cc
  ff2b074cd18ad6d9466ec7f7320d3c6b  libstdc++-v3/testsuite/25_algorithms/copy_n/3.cc
  8b43157079b91b2cc1ee9b2a5ac51ff3  libstdc++-v3/testsuite/25_algorithms/copy_n/4.cc
*************** c8cc941191e5a18adb248a4971c9b8ba  libstd
*** 119569,119575 ****
  47540909917f3eeed92abdd17833a267  libstdc++-v3/testsuite/25_algorithms/fill/94017.cc
  2f23041c665defe07b4fa2b89067ea48  libstdc++-v3/testsuite/25_algorithms/fill/bvector/1.cc
  1c3267c9337e98dde2ee7398da5f7807  libstdc++-v3/testsuite/25_algorithms/fill/constexpr.cc
! 7959e3354ecd49081a5bef27394c71c9  libstdc++-v3/testsuite/25_algorithms/fill/constrained.cc
  ee9e5114226c9e4b93fd76ec9c23aef6  libstdc++-v3/testsuite/25_algorithms/fill/deque_iterators/1.cc
  f10b41f2922157b993e10752b8a2c7f1  libstdc++-v3/testsuite/25_algorithms/fill/requirements/explicit_instantiation/2.cc
  0b05cf2b83108c5508793b50ffcd9223  libstdc++-v3/testsuite/25_algorithms/fill/requirements/explicit_instantiation/pod.cc
--- 119976,119982 ----
  47540909917f3eeed92abdd17833a267  libstdc++-v3/testsuite/25_algorithms/fill/94017.cc
  2f23041c665defe07b4fa2b89067ea48  libstdc++-v3/testsuite/25_algorithms/fill/bvector/1.cc
  1c3267c9337e98dde2ee7398da5f7807  libstdc++-v3/testsuite/25_algorithms/fill/constexpr.cc
! 9856f1b9bc16aad0c0eb9bf5cbd107c9  libstdc++-v3/testsuite/25_algorithms/fill/constrained.cc
  ee9e5114226c9e4b93fd76ec9c23aef6  libstdc++-v3/testsuite/25_algorithms/fill/deque_iterators/1.cc
  f10b41f2922157b993e10752b8a2c7f1  libstdc++-v3/testsuite/25_algorithms/fill/requirements/explicit_instantiation/2.cc
  0b05cf2b83108c5508793b50ffcd9223  libstdc++-v3/testsuite/25_algorithms/fill/requirements/explicit_instantiation/pod.cc
*************** a85cd34fdcb5e54a541d3be4b3b4b041  libstd
*** 119682,119688 ****
  2d46fad13a235de09f8ea7fa0f475b52  libstdc++-v3/testsuite/25_algorithms/inplace_merge/moveable2.cc
  755c3750d744f825e72b097f92678317  libstdc++-v3/testsuite/25_algorithms/inplace_merge/requirements/explicit_instantiation/2.cc
  2023fa634065356f6ea0968abe064c7f  libstdc++-v3/testsuite/25_algorithms/inplace_merge/requirements/explicit_instantiation/pod.cc
- d18d6a10bee851ae4d1c75594365580f  libstdc++-v3/testsuite/25_algorithms/iota/1.cc
  a28ebcf5b90dd46567c9b38582c8a4bf  libstdc++-v3/testsuite/25_algorithms/is_heap/1.cc
  d8b91176a6344b7fa5cdaccd31cb0c02  libstdc++-v3/testsuite/25_algorithms/is_heap/constexpr.cc
  8eb8f901643fb00613b7930a67521307  libstdc++-v3/testsuite/25_algorithms/is_heap/requirements/explicit_instantiation/2.cc
--- 120089,120094 ----
*************** b1a449ccb32a0a264d841cb7be77e70f  libstd
*** 119735,119741 ****
  690cb7765bed6fe88df169bf79ff4be7  libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/requirements/explicit_instantiation/pod.cc
  f0b5cac939d18d126824dc4b64355130  libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/uchar.cc
  06256947d7de04257118d42ce1585812  libstdc++-v3/testsuite/25_algorithms/lexicographical_compare_three_way/1.cc
! fda158d264fd98a45243c1135a92fa52  libstdc++-v3/testsuite/25_algorithms/lexicographical_compare_three_way/113960.cc
  937c47c9ebbb5f0ea137b5120adeff12  libstdc++-v3/testsuite/25_algorithms/lexicographical_compare_three_way/constexpr.cc
  39bfd6a3194043d02813679ddc10fc58  libstdc++-v3/testsuite/25_algorithms/lower_bound/1.cc
  b3a5c4d22b09bb16074d8c3103e3be23  libstdc++-v3/testsuite/25_algorithms/lower_bound/2.cc
--- 120141,120147 ----
  690cb7765bed6fe88df169bf79ff4be7  libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/requirements/explicit_instantiation/pod.cc
  f0b5cac939d18d126824dc4b64355130  libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/uchar.cc
  06256947d7de04257118d42ce1585812  libstdc++-v3/testsuite/25_algorithms/lexicographical_compare_three_way/1.cc
! 92571708f62e7c1033836b36c001aae1  libstdc++-v3/testsuite/25_algorithms/lexicographical_compare_three_way/113960.cc
  937c47c9ebbb5f0ea137b5120adeff12  libstdc++-v3/testsuite/25_algorithms/lexicographical_compare_three_way/constexpr.cc
  39bfd6a3194043d02813679ddc10fc58  libstdc++-v3/testsuite/25_algorithms/lower_bound/1.cc
  b3a5c4d22b09bb16074d8c3103e3be23  libstdc++-v3/testsuite/25_algorithms/lower_bound/2.cc
*************** ba6fc08d76f0cfd27beb79b445cedfc1  libstd
*** 119823,119846 ****
  53496db09c56f7403b8edf8b7704c0c1  libstdc++-v3/testsuite/25_algorithms/mismatch/constexpr.cc
  5708439e1733b5e8b3cc9ca67743b973  libstdc++-v3/testsuite/25_algorithms/mismatch/constrained.cc
  40e8a45fd7ccef3c1363b88f59ff2460  libstdc++-v3/testsuite/25_algorithms/move/1.cc
! 4ae907818586f505a2d4d108b85aff1d  libstdc++-v3/testsuite/25_algorithms/move/108846.cc
  1313c446b963da853508f219ea47cd4d  libstdc++-v3/testsuite/25_algorithms/move/69478.cc
  c1b10c439f8cfb8c7c09b01a66ca5ada  libstdc++-v3/testsuite/25_algorithms/move/93872.cc
  9dd80d084c2a760183a852943d0b3bd6  libstdc++-v3/testsuite/25_algorithms/move/94013.cc
  5b1fe6053dc70ae9a0996364e3f7d378  libstdc++-v3/testsuite/25_algorithms/move/95578.cc
  8a39c328d588445253bbfbd913a4260b  libstdc++-v3/testsuite/25_algorithms/move/constexpr.cc
! 1c607179988db8681bb6be0ff1d16cf0  libstdc++-v3/testsuite/25_algorithms/move/constrained.cc
  c41fedc68e3cee79d652221a1c6b2c9a  libstdc++-v3/testsuite/25_algorithms/move/deque_iterators/1.cc
  a417fe30d1623862ee00bba233ef5e94  libstdc++-v3/testsuite/25_algorithms/move/deque_iterators/2.cc
  5ee4b06194077e736017cc9f10b004c4  libstdc++-v3/testsuite/25_algorithms/move/requirements/explicit_instantiation/2.cc
  5a0293674ce442702a6ad1c6a8a16492  libstdc++-v3/testsuite/25_algorithms/move/requirements/explicit_instantiation/pod.cc
  20f3efba2c15d8ab2139954b1a58e619  libstdc++-v3/testsuite/25_algorithms/move_backward/1.cc
! ad56a2e5738139bc09cd67e855d44a07  libstdc++-v3/testsuite/25_algorithms/move_backward/108846.cc
  24606d02bd1f9ae398448705e0c24295  libstdc++-v3/testsuite/25_algorithms/move_backward/69478.cc
  3c661187d0b5dc7fdf6e6b4f0fc73ba5  libstdc++-v3/testsuite/25_algorithms/move_backward/93872.cc
  f0ce7931212718242daa71b848cc4704  libstdc++-v3/testsuite/25_algorithms/move_backward/94013.cc
  2c1f214bbcd18909d14dab7e3756d5c2  libstdc++-v3/testsuite/25_algorithms/move_backward/95578.cc
! d1f4afbe91e122031d04e6b422d8a90e  libstdc++-v3/testsuite/25_algorithms/move_backward/constrained.cc
  d798b4d62b339492aca582244b60767f  libstdc++-v3/testsuite/25_algorithms/move_backward/deque_iterators/1.cc
  e158b8cd4536920792f94be152249ba5  libstdc++-v3/testsuite/25_algorithms/move_backward/deque_iterators/2.cc
  f6025503a9e582f1bb0dd35004b4df2c  libstdc++-v3/testsuite/25_algorithms/move_backward/requirements/explicit_instantiation/2.cc
--- 120229,120252 ----
  53496db09c56f7403b8edf8b7704c0c1  libstdc++-v3/testsuite/25_algorithms/mismatch/constexpr.cc
  5708439e1733b5e8b3cc9ca67743b973  libstdc++-v3/testsuite/25_algorithms/mismatch/constrained.cc
  40e8a45fd7ccef3c1363b88f59ff2460  libstdc++-v3/testsuite/25_algorithms/move/1.cc
! aace0cdd5e42f11fdd7c78151e077cda  libstdc++-v3/testsuite/25_algorithms/move/108846.cc
  1313c446b963da853508f219ea47cd4d  libstdc++-v3/testsuite/25_algorithms/move/69478.cc
  c1b10c439f8cfb8c7c09b01a66ca5ada  libstdc++-v3/testsuite/25_algorithms/move/93872.cc
  9dd80d084c2a760183a852943d0b3bd6  libstdc++-v3/testsuite/25_algorithms/move/94013.cc
  5b1fe6053dc70ae9a0996364e3f7d378  libstdc++-v3/testsuite/25_algorithms/move/95578.cc
  8a39c328d588445253bbfbd913a4260b  libstdc++-v3/testsuite/25_algorithms/move/constexpr.cc
! 2db0dfc858371317be8f08ea455f3169  libstdc++-v3/testsuite/25_algorithms/move/constrained.cc
  c41fedc68e3cee79d652221a1c6b2c9a  libstdc++-v3/testsuite/25_algorithms/move/deque_iterators/1.cc
  a417fe30d1623862ee00bba233ef5e94  libstdc++-v3/testsuite/25_algorithms/move/deque_iterators/2.cc
  5ee4b06194077e736017cc9f10b004c4  libstdc++-v3/testsuite/25_algorithms/move/requirements/explicit_instantiation/2.cc
  5a0293674ce442702a6ad1c6a8a16492  libstdc++-v3/testsuite/25_algorithms/move/requirements/explicit_instantiation/pod.cc
  20f3efba2c15d8ab2139954b1a58e619  libstdc++-v3/testsuite/25_algorithms/move_backward/1.cc
! f96f2b153f5a6c89fcfd083b81e845f7  libstdc++-v3/testsuite/25_algorithms/move_backward/108846.cc
  24606d02bd1f9ae398448705e0c24295  libstdc++-v3/testsuite/25_algorithms/move_backward/69478.cc
  3c661187d0b5dc7fdf6e6b4f0fc73ba5  libstdc++-v3/testsuite/25_algorithms/move_backward/93872.cc
  f0ce7931212718242daa71b848cc4704  libstdc++-v3/testsuite/25_algorithms/move_backward/94013.cc
  2c1f214bbcd18909d14dab7e3756d5c2  libstdc++-v3/testsuite/25_algorithms/move_backward/95578.cc
! eb6646c8fe664751b37895d4d73a8b2b  libstdc++-v3/testsuite/25_algorithms/move_backward/constrained.cc
  d798b4d62b339492aca582244b60767f  libstdc++-v3/testsuite/25_algorithms/move_backward/deque_iterators/1.cc
  e158b8cd4536920792f94be152249ba5  libstdc++-v3/testsuite/25_algorithms/move_backward/deque_iterators/2.cc
  f6025503a9e582f1bb0dd35004b4df2c  libstdc++-v3/testsuite/25_algorithms/move_backward/requirements/explicit_instantiation/2.cc
*************** e717660631b041883deaa24debf6fe3c  libstd
*** 120260,120265 ****
--- 120666,120672 ----
  50114d2831f612476e5d2f9e26830bd0  libstdc++-v3/testsuite/26_numerics/endian/3.cc
  d82876a2c8e35c1fbc4ce356c69a5c55  libstdc++-v3/testsuite/26_numerics/endian/4.cc
  99298cef7e624e3f4c3272acf5184c20  libstdc++-v3/testsuite/26_numerics/exclusive_scan/1.cc
+ dad3be405305f6b99125a0379a0d3209  libstdc++-v3/testsuite/26_numerics/exclusive_scan/2.cc
  4ae2caeaa19a1414391829f460a1675b  libstdc++-v3/testsuite/26_numerics/exclusive_scan/constexpr.cc
  744d041824042d2af8ef47c28119ef25  libstdc++-v3/testsuite/26_numerics/gcd/1.cc
  50d80887b49e18b929dd57c20f038646  libstdc++-v3/testsuite/26_numerics/gcd/105844.cc
*************** e4dc0ecfcde74513b415da85f6d0dec9  libstd
*** 120270,120275 ****
--- 120677,120684 ----
  fc0aaccd952d01a07f9bf96efd98f8ea  libstdc++-v3/testsuite/26_numerics/headers/cfenv/std_c++0x_neg.cc
  a13cb486aaf183556330c527b56f1345  libstdc++-v3/testsuite/26_numerics/headers/cfenv/types_std_c++0x.cc
  2c248a4dde912eb37b2f452da846b228  libstdc++-v3/testsuite/26_numerics/headers/cmath/109758.cc
+ efb29c63594b8c9c8ff93f156ac2258e  libstdc++-v3/testsuite/26_numerics/headers/cmath/117321.cc
+ 1d4f0562c55581c718f582ed7b171d69  libstdc++-v3/testsuite/26_numerics/headers/cmath/117406.cc
  1107829a4b0ebddc2e237d1d81bc6ed7  libstdc++-v3/testsuite/26_numerics/headers/cmath/14608.cc
  b8cb9025cfd55dab112b42cf7a12b8b9  libstdc++-v3/testsuite/26_numerics/headers/cmath/19322.cc
  2f35d567cbc188cc70ee976864919d7a  libstdc++-v3/testsuite/26_numerics/headers/cmath/25913.cc
*************** a6db5d0c9abc4de3e1712927738fea9b  libstd
*** 120338,120343 ****
--- 120747,120753 ----
  1995509dd7579d37fc3493dfe68edb13  libstdc++-v3/testsuite/26_numerics/inner_product/requirements/explicit_instantiation/2.cc
  aeabc4d25a07bde7a910fa5d4f8a61db  libstdc++-v3/testsuite/26_numerics/inner_product/requirements/explicit_instantiation/pod.cc
  8a05b353535c62f64920a74cb2f34c79  libstdc++-v3/testsuite/26_numerics/iota/1.cc
+ 66c8545cd579254002ca50b8c067b0a5  libstdc++-v3/testsuite/26_numerics/iota/2.cc
  e0b58269927e38e2e9feb4189e3e95ba  libstdc++-v3/testsuite/26_numerics/iota/constexpr.cc
  f0ab4198daf9a63a5a01cff40b2e3836  libstdc++-v3/testsuite/26_numerics/iota/requirements/explicit_instantiation/2.cc
  d676a735941e66a8673d0e9f60b144e3  libstdc++-v3/testsuite/26_numerics/iota/requirements/explicit_instantiation/pod.cc
*************** cbd03d6d32922d359a1ddd86655e1392  libstd
*** 120364,120369 ****
--- 120774,120780 ----
  728b695ae5c9ff90da938142637faf50  libstdc++-v3/testsuite/26_numerics/partial_sum/lwg2055.cc
  83c6ab989fe00bb9d4949456b4ba4ce0  libstdc++-v3/testsuite/26_numerics/partial_sum/requirements/explicit_instantiation/2.cc
  a1caa68cc4972cd3159804a408643d76  libstdc++-v3/testsuite/26_numerics/partial_sum/requirements/explicit_instantiation/pod.cc
+ e4a16c3ad7049351e7aa5c01c10241f5  libstdc++-v3/testsuite/26_numerics/pstl/numeric_ops/108236.cc
  862f4f439e8707b32a42b5fe736946a5  libstdc++-v3/testsuite/26_numerics/pstl/numeric_ops/adjacent_difference.cc
  0553df89726830b7195d3dc76149d7b4  libstdc++-v3/testsuite/26_numerics/pstl/numeric_ops/reduce.cc
  e7d03e915035104e8c34f0e1a253cea1  libstdc++-v3/testsuite/26_numerics/pstl/numeric_ops/scan.cc
*************** d587f0a010ee52da14e4291740ea9e88  libstd
*** 121537,121542 ****
--- 121948,121954 ----
  fb9bd68e33aa6488c7aed84aa97fe981  libstdc++-v3/testsuite/27_io/filesystem/iterators/caching.cc
  d377ea6c61fb7fb1fa2c4001a830da11  libstdc++-v3/testsuite/27_io/filesystem/iterators/directory_iterator.cc
  dcd882a17587b064a50fa3897aca0e32  libstdc++-v3/testsuite/27_io/filesystem/iterators/error_reporting.cc
+ 0e9098cdf2940ba66dfb21dc2150f62f  libstdc++-v3/testsuite/27_io/filesystem/iterators/lwg3480.cc
  c45fc7189824b4a01ce3d6ad049d44d4  libstdc++-v3/testsuite/27_io/filesystem/iterators/lwg3719.cc
  ea42cb0d3f5239983a65e71ffc4032e5  libstdc++-v3/testsuite/27_io/filesystem/iterators/pop.cc
  57277e79141b7a52b38a49c5f3f4ce58  libstdc++-v3/testsuite/27_io/filesystem/iterators/recursion_pending.cc
*************** c0f916777909ec31862f1c1598826016  libstd
*** 121544,121551 ****
  a758fd957636105227fc87a9661db9cc  libstdc++-v3/testsuite/27_io/filesystem/operations/absolute.cc
  045e16e4aeda74a97373f2bdf807b39c  libstdc++-v3/testsuite/27_io/filesystem/operations/all.cc
  9fdcddf0081f3acb01e9e3aa40cb7294  libstdc++-v3/testsuite/27_io/filesystem/operations/canonical.cc
! a42f2f8bc28c4671f94b1ccf937795ea  libstdc++-v3/testsuite/27_io/filesystem/operations/copy.cc
! 9a472855ba191981b089cc12907f9f33  libstdc++-v3/testsuite/27_io/filesystem/operations/copy_file.cc
  10b6e95add9984bd29138cd25bc3a19f  libstdc++-v3/testsuite/27_io/filesystem/operations/copy_file_108178.cc
  acc8cbac48528e1912d33385e5aa6809  libstdc++-v3/testsuite/27_io/filesystem/operations/create_directories.cc
  8c33f78dd03e730cfd6fb6e7f071d069  libstdc++-v3/testsuite/27_io/filesystem/operations/create_directory.cc
--- 121956,121963 ----
  a758fd957636105227fc87a9661db9cc  libstdc++-v3/testsuite/27_io/filesystem/operations/absolute.cc
  045e16e4aeda74a97373f2bdf807b39c  libstdc++-v3/testsuite/27_io/filesystem/operations/all.cc
  9fdcddf0081f3acb01e9e3aa40cb7294  libstdc++-v3/testsuite/27_io/filesystem/operations/canonical.cc
! 2ae4b87537bb4617579e462404dd1076  libstdc++-v3/testsuite/27_io/filesystem/operations/copy.cc
! 24ed676097dde6d7646736d10831bc62  libstdc++-v3/testsuite/27_io/filesystem/operations/copy_file.cc
  10b6e95add9984bd29138cd25bc3a19f  libstdc++-v3/testsuite/27_io/filesystem/operations/copy_file_108178.cc
  acc8cbac48528e1912d33385e5aa6809  libstdc++-v3/testsuite/27_io/filesystem/operations/create_directories.cc
  8c33f78dd03e730cfd6fb6e7f071d069  libstdc++-v3/testsuite/27_io/filesystem/operations/create_directory.cc
*************** b21feaf3945442a938ec54a4401d86e7  libstd
*** 121554,121562 ****
--- 121966,121976 ----
  79868451e7c586a9b0a218419a43786f  libstdc++-v3/testsuite/27_io/filesystem/operations/equivalent.cc
  174c747425f2c8a8a5af6df0c12b933b  libstdc++-v3/testsuite/27_io/filesystem/operations/exists.cc
  22ed45f524883e23e793351cf4019f14  libstdc++-v3/testsuite/27_io/filesystem/operations/file_size.cc
+ 25af75aca20d7f43b2517d9ce56b7c4b  libstdc++-v3/testsuite/27_io/filesystem/operations/hard_link_count.cc
  70241ed0411548125d4c89de6fc437a1  libstdc++-v3/testsuite/27_io/filesystem/operations/is_empty.cc
  f35204011be3068a8f812b54872d4610  libstdc++-v3/testsuite/27_io/filesystem/operations/last_write_time.cc
  a6ef8cf8069a17c91e4f975d33e75ca7  libstdc++-v3/testsuite/27_io/filesystem/operations/permissions.cc
+ d3bfb9763a0417404cbf25c413706c20  libstdc++-v3/testsuite/27_io/filesystem/operations/pr118158.cc
  5a82feb397d738850290d5651301a11f  libstdc++-v3/testsuite/27_io/filesystem/operations/proximate.cc
  aa12f3ad5d07760fdef4c7f8339e1ea7  libstdc++-v3/testsuite/27_io/filesystem/operations/read_symlink.cc
  0c6c07a9c9dbccc7719497b85201d9a6  libstdc++-v3/testsuite/27_io/filesystem/operations/relative.cc
*************** e23b2883804b35ac5891e75b0a975de3  libstd
*** 122115,122120 ****
--- 122529,122535 ----
  fd9969b7cdd62fd1e119db8e8bdf6cdf  libstdc++-v3/testsuite/29_atomics/headers/atomic/types_std_c++20_neg.cc
  5af271ea2712313f414c78333645649b  libstdc++-v3/testsuite/29_atomics/headers/atomic/types_std_c++2a.cc
  3e856e5c5a9bbd861afa51f299c70069  libstdc++-v3/testsuite/29_atomics/headers/atomic/types_std_c++2a_neg.cc
+ 660dcc78afd7c69bc2712a52dc1d0dae  libstdc++-v3/testsuite/29_atomics/headers/stdatomic.h/115807.cc
  8f793a0a8dcd336f7edd48cf780787d8  libstdc++-v3/testsuite/29_atomics/headers/stdatomic.h/c_compat.cc
  0b170396131d3e657e1f9d0dcec3429f  libstdc++-v3/testsuite/29_atomics/headers/stdatomic.h/version.cc
  5b1af9fe172aee7236f683fc11c916e0  libstdc++-v3/testsuite/30_threads/async/106695.cc
*************** eed866b1ac338410533c7f661a852403  libstd
*** 122174,122179 ****
--- 122589,122595 ----
  6c56a64c4dd0499b61fdb652de802c08  libstdc++-v3/testsuite/30_threads/future/cons/default.cc
  9384933ea2bd7be29e855c357593d3bc  libstdc++-v3/testsuite/30_threads/future/cons/move.cc
  4ad4a80615e7c82771546bf3b43d3ce7  libstdc++-v3/testsuite/30_threads/future/cons/move_assign.cc
+ 558c2f7e2a442daebbbc612ba05b66c5  libstdc++-v3/testsuite/30_threads/future/members/118093.cc
  7ef0128f3cce4588b2583ceb2e953abb  libstdc++-v3/testsuite/30_threads/future/members/45133.cc
  9755ccefb356c567fde1743d0a2ea121  libstdc++-v3/testsuite/30_threads/future/members/93456.cc
  a0a58329eb9d9453778ff24db5dd3451  libstdc++-v3/testsuite/30_threads/future/members/clock_neg.cc
*************** f622008c5ec7680a2ac920136d22446f  libstd
*** 122922,122928 ****
  e155a009b2335cbb1d5dbec61a48178f  libstdc++-v3/testsuite/experimental/propagate_const/typedefs.cc
  604640f7d96bea98e0ab1fb0b28aa71e  libstdc++-v3/testsuite/experimental/random/randint.cc
  56e02397ebefff69c8ba22a52ab0ab37  libstdc++-v3/testsuite/experimental/ratio/value.cc
! 18f1edf3ab8b0c093f8d5f79063f64d3  libstdc++-v3/testsuite/experimental/scopeguard/114152.cc
  97b562b4ea6fc1f0be023106d56bcc79  libstdc++-v3/testsuite/experimental/scopeguard/exit.cc
  97af52a589fe5083b653ed57d72e004b  libstdc++-v3/testsuite/experimental/scopeguard/uniqueres.cc
  a63e3ed06f23d2ca257b8e6528aaebc3  libstdc++-v3/testsuite/experimental/set/erasure.cc
--- 123338,123344 ----
  e155a009b2335cbb1d5dbec61a48178f  libstdc++-v3/testsuite/experimental/propagate_const/typedefs.cc
  604640f7d96bea98e0ab1fb0b28aa71e  libstdc++-v3/testsuite/experimental/random/randint.cc
  56e02397ebefff69c8ba22a52ab0ab37  libstdc++-v3/testsuite/experimental/ratio/value.cc
! cf45cdc75f1770a82002e49634f67698  libstdc++-v3/testsuite/experimental/scopeguard/114152.cc
  97b562b4ea6fc1f0be023106d56bcc79  libstdc++-v3/testsuite/experimental/scopeguard/exit.cc
  97af52a589fe5083b653ed57d72e004b  libstdc++-v3/testsuite/experimental/scopeguard/uniqueres.cc
  a63e3ed06f23d2ca257b8e6528aaebc3  libstdc++-v3/testsuite/experimental/set/erasure.cc
*************** d6f0083479e5097ec27151965ff89e5d  libstd
*** 122932,122937 ****
--- 123348,123355 ----
  03e8f51d7ef48b8a37325dad25e551ed  libstdc++-v3/testsuite/experimental/simd/pr109261_constexpr_simd.cc
  40516291f4d97883db23570b8f0c38a0  libstdc++-v3/testsuite/experimental/simd/pr109822_cast_functions.cc
  4abe9d75da280cd5bcef090bd6898210  libstdc++-v3/testsuite/experimental/simd/pr114803_vecbuiltin_cvt.cc
+ 1c1b2c7973008ec3c4e64f42293c9612  libstdc++-v3/testsuite/experimental/simd/pr114958.cc
+ 8321e9c97cfe9622f4b70a13cf623661  libstdc++-v3/testsuite/experimental/simd/pr115454_find_last_set.cc
  0b0eeba3af6dbb041b7ca3773f781cda  libstdc++-v3/testsuite/experimental/simd/standard_abi_usable.cc
  3718cfdb2ca6d6f1e0fb585a7350e074  libstdc++-v3/testsuite/experimental/simd/standard_abi_usable_2.cc
  5e5d595bd073d01ac2c22da1f7fe3ccb  libstdc++-v3/testsuite/experimental/simd/tests/abs.cc
*************** c2fffbeb57664d2e1f01bda5a2994663  libstd
*** 123061,123066 ****
--- 123479,123485 ----
  ac8deac2e95f3487688cdca323967544  libstdc++-v3/testsuite/experimental/unordered_map/erasure.cc
  12ab3728c7054394764fe34a87d48655  libstdc++-v3/testsuite/experimental/unordered_set/erasure.cc
  90bebec8264814179b24e83d7a2ba800  libstdc++-v3/testsuite/experimental/vector/erasure.cc
+ 95a373500a567d97002f91fef18ca2e2  libstdc++-v3/testsuite/ext/104395.cc
  13c8adb8595b8fa60ca0edb8c78dffef  libstdc++-v3/testsuite/ext/bitmap_allocator/check_allocate_max_size.cc
  f48bf2de1921d03c3db5868c6cae9024  libstdc++-v3/testsuite/ext/bitmap_allocator/check_deallocate_null.cc
  4ec6d50ccf2e1eaab5ee483209efbcb1  libstdc++-v3/testsuite/ext/bitmap_allocator/check_delete.cc
*************** b50f7790625af70d2584bce7448797a3  libstd
*** 123674,123691 ****
  7c33090d5221d00fb69f073eb3a39e01  libstdc++-v3/testsuite/std/concepts/concepts.object/movable.cc
  dee3f965ae51e534527b2ab57de6173c  libstdc++-v3/testsuite/std/concepts/concepts.object/regular.cc
  e5c73ec71149072c79be3cd39964fc84  libstdc++-v3/testsuite/std/concepts/concepts.object/semiregular.cc
! 576d75aaf7d2aae28e341cda63776ff9  libstdc++-v3/testsuite/std/format/arguments/112607.cc
! b9c3ea7130154a38dba11b27e2a33dd6  libstdc++-v3/testsuite/std/format/arguments/args.cc
! 86404cb94182c29843b1d0bb30b8d9dd  libstdc++-v3/testsuite/std/format/arguments/args_neg.cc
  3c510d04daf35518cf5c56c6859f3d86  libstdc++-v3/testsuite/std/format/arguments/lwg3810.cc
  26cb34ad3aa73e01fb7d018f1b97e73e  libstdc++-v3/testsuite/std/format/error.cc
  c4026a6d0520e4329e27fe92fdd65a86  libstdc++-v3/testsuite/std/format/format_string.cc
! 6fa5a2c92632d72f763333e89659d4a5  libstdc++-v3/testsuite/std/format/formatter/112832.cc
! 6dfab89727d04a1035aba73afcf4d6a8  libstdc++-v3/testsuite/std/format/formatter/basic.cc
  5477cf5cf0d83c16c3641c1ba9a1fca9  libstdc++-v3/testsuite/std/format/formatter/concept.cc
! 912a5a69faf2558c407722cee5b26879  libstdc++-v3/testsuite/std/format/formatter/requirements.cc
  926f89ddc54be9fcf8daa5c0a5f35b88  libstdc++-v3/testsuite/std/format/functions/107871.cc
! 4037aac1f41e45d7a8422b65aea24e07  libstdc++-v3/testsuite/std/format/functions/format.cc
  48557cbd39e13d7e8ae282149478ea92  libstdc++-v3/testsuite/std/format/functions/format_c++23.cc
  e891997379a2804aff5d4567d8e50802  libstdc++-v3/testsuite/std/format/functions/format_to.cc
  5763728e220b19553b5285dbd2311349  libstdc++-v3/testsuite/std/format/functions/format_to_n.cc
--- 124093,124111 ----
  7c33090d5221d00fb69f073eb3a39e01  libstdc++-v3/testsuite/std/concepts/concepts.object/movable.cc
  dee3f965ae51e534527b2ab57de6173c  libstdc++-v3/testsuite/std/concepts/concepts.object/regular.cc
  e5c73ec71149072c79be3cd39964fc84  libstdc++-v3/testsuite/std/concepts/concepts.object/semiregular.cc
! 2100b0f852e00a8da5330b0af04216f4  libstdc++-v3/testsuite/std/format/arguments/112607.cc
! 63a13bd573fe413d27f846ea792f8c94  libstdc++-v3/testsuite/std/format/arguments/args.cc
! 204b654c4b89fe8a1d6425ade9dc8947  libstdc++-v3/testsuite/std/format/arguments/args_neg.cc
  3c510d04daf35518cf5c56c6859f3d86  libstdc++-v3/testsuite/std/format/arguments/lwg3810.cc
+ aabcd6d4a5870b81f4601ec096e2534a  libstdc++-v3/testsuite/std/format/context.cc
  26cb34ad3aa73e01fb7d018f1b97e73e  libstdc++-v3/testsuite/std/format/error.cc
  c4026a6d0520e4329e27fe92fdd65a86  libstdc++-v3/testsuite/std/format/format_string.cc
! 4b1a23661c36f53dd1580cdb7b929f19  libstdc++-v3/testsuite/std/format/formatter/112832.cc
! 2a60a6a31e9b5e364ae19f2b1b5c1a62  libstdc++-v3/testsuite/std/format/formatter/basic.cc
  5477cf5cf0d83c16c3641c1ba9a1fca9  libstdc++-v3/testsuite/std/format/formatter/concept.cc
! 173f51673fac83c111c4b2dfcf5e4542  libstdc++-v3/testsuite/std/format/formatter/requirements.cc
  926f89ddc54be9fcf8daa5c0a5f35b88  libstdc++-v3/testsuite/std/format/functions/107871.cc
! 8014ce27e1306ec7f1b324f4f14e3bf4  libstdc++-v3/testsuite/std/format/functions/format.cc
  48557cbd39e13d7e8ae282149478ea92  libstdc++-v3/testsuite/std/format/functions/format_c++23.cc
  e891997379a2804aff5d4567d8e50802  libstdc++-v3/testsuite/std/format/functions/format_to.cc
  5763728e220b19553b5285dbd2311349  libstdc++-v3/testsuite/std/format/functions/format_to_n.cc
*************** efe074fd50fae87fcfe4de707f8c07a0  libstd
*** 123721,123727 ****
  202e17626aff79b167a4884d4674e795  libstdc++-v3/testsuite/std/ranges/adaptors/adjacent/1.cc
  dfaace835421177fca7beffe48564885  libstdc++-v3/testsuite/std/ranges/adaptors/adjacent_transform/1.cc
  627ec2851e5a9ef14fa7f85fde916815  libstdc++-v3/testsuite/std/ranges/adaptors/all.cc
! bfcf1004a149342f80da7950ca8df7e1  libstdc++-v3/testsuite/std/ranges/adaptors/as_const/1.cc
  87ba957cd4433e77a0cb6227da3d374f  libstdc++-v3/testsuite/std/ranges/adaptors/as_rvalue/1.cc
  86881fe316fe3dddbf1fdcb5446a4d28  libstdc++-v3/testsuite/std/ranges/adaptors/chunk/1.cc
  1fccda8f7a1de96c8ccb844d90976182  libstdc++-v3/testsuite/std/ranges/adaptors/chunk_by/1.cc
--- 124141,124147 ----
  202e17626aff79b167a4884d4674e795  libstdc++-v3/testsuite/std/ranges/adaptors/adjacent/1.cc
  dfaace835421177fca7beffe48564885  libstdc++-v3/testsuite/std/ranges/adaptors/adjacent_transform/1.cc
  627ec2851e5a9ef14fa7f85fde916815  libstdc++-v3/testsuite/std/ranges/adaptors/all.cc
! d9f80cdef103e21bd46b7f21f8e941b5  libstdc++-v3/testsuite/std/ranges/adaptors/as_const/1.cc
  87ba957cd4433e77a0cb6227da3d374f  libstdc++-v3/testsuite/std/ranges/adaptors/as_rvalue/1.cc
  86881fe316fe3dddbf1fdcb5446a4d28  libstdc++-v3/testsuite/std/ranges/adaptors/chunk/1.cc
  1fccda8f7a1de96c8ccb844d90976182  libstdc++-v3/testsuite/std/ranges/adaptors/chunk_by/1.cc
*************** bfcf1004a149342f80da7950ca8df7e1  libstd
*** 123729,123735 ****
  01493f9520b1a8c2d7672ccb6169b37e  libstdc++-v3/testsuite/std/ranges/adaptors/conditionally_borrowed.cc
  b6a927b256eb5eab0f3abcd01a2c8c31  libstdc++-v3/testsuite/std/ranges/adaptors/counted.cc
  c2b2be0c1640a49df2db13de9010388c  libstdc++-v3/testsuite/std/ranges/adaptors/detail/copyable_box.cc
! 600b9066effca126cddab6467daee09e  libstdc++-v3/testsuite/std/ranges/adaptors/drop.cc
  601a50c193fb8ba7a88242946e976753  libstdc++-v3/testsuite/std/ranges/adaptors/drop_while.cc
  c0a8eb7862d860bdd0ca173629ed25af  libstdc++-v3/testsuite/std/ranges/adaptors/elements.cc
  3fcb281a03409e43294f77c1e7809391  libstdc++-v3/testsuite/std/ranges/adaptors/enumerate/1.cc
--- 124149,124155 ----
  01493f9520b1a8c2d7672ccb6169b37e  libstdc++-v3/testsuite/std/ranges/adaptors/conditionally_borrowed.cc
  b6a927b256eb5eab0f3abcd01a2c8c31  libstdc++-v3/testsuite/std/ranges/adaptors/counted.cc
  c2b2be0c1640a49df2db13de9010388c  libstdc++-v3/testsuite/std/ranges/adaptors/detail/copyable_box.cc
! 94993597aaea635c3357fe34871e970e  libstdc++-v3/testsuite/std/ranges/adaptors/drop.cc
  601a50c193fb8ba7a88242946e976753  libstdc++-v3/testsuite/std/ranges/adaptors/drop_while.cc
  c0a8eb7862d860bdd0ca173629ed25af  libstdc++-v3/testsuite/std/ranges/adaptors/elements.cc
  3fcb281a03409e43294f77c1e7809391  libstdc++-v3/testsuite/std/ranges/adaptors/enumerate/1.cc
*************** bd67d76104555a7de62866a1baff7ed3  libstd
*** 123752,123759 ****
  1229ac38c7f1dd6e1799edab32d470de  libstdc++-v3/testsuite/std/ranges/adaptors/stride/1.cc
  f5e5bb8391ba02b0e327a14148fb1ac8  libstdc++-v3/testsuite/std/ranges/adaptors/take.cc
  ef73229904799aeb3dae759b2b1506fd  libstdc++-v3/testsuite/std/ranges/adaptors/take_while.cc
! 24fb3ae41a8df557c3a6d329c76b8bf4  libstdc++-v3/testsuite/std/ranges/adaptors/transform.cc
! 1b6e66801e47197c0377da8fde3b1372  libstdc++-v3/testsuite/std/ranges/cartesian_product/1.cc
  305712b194a813db5b31eff4849e104f  libstdc++-v3/testsuite/std/ranges/empty_view.cc
  8d78702ca001ddafb85b0d93417f76eb  libstdc++-v3/testsuite/std/ranges/headers/ranges/synopsis.cc
  fbe0c8c2b69ba1b4bbb1acb0b57446ef  libstdc++-v3/testsuite/std/ranges/iota/93267.cc
--- 124172,124179 ----
  1229ac38c7f1dd6e1799edab32d470de  libstdc++-v3/testsuite/std/ranges/adaptors/stride/1.cc
  f5e5bb8391ba02b0e327a14148fb1ac8  libstdc++-v3/testsuite/std/ranges/adaptors/take.cc
  ef73229904799aeb3dae759b2b1506fd  libstdc++-v3/testsuite/std/ranges/adaptors/take_while.cc
! 1d336da62b68ad415ae48cef574ddcb4  libstdc++-v3/testsuite/std/ranges/adaptors/transform.cc
! c145d0c042d643c24e1171c8060ff604  libstdc++-v3/testsuite/std/ranges/cartesian_product/1.cc
  305712b194a813db5b31eff4849e104f  libstdc++-v3/testsuite/std/ranges/empty_view.cc
  8d78702ca001ddafb85b0d93417f76eb  libstdc++-v3/testsuite/std/ranges/headers/ranges/synopsis.cc
  fbe0c8c2b69ba1b4bbb1acb0b57446ef  libstdc++-v3/testsuite/std/ranges/iota/93267.cc
*************** ffd1e161360542a85035e61017a148be  libstd
*** 123768,123774 ****
  1451ff29f4fda6d96579803764fcc33e  libstdc++-v3/testsuite/std/ranges/p2259.cc
  1dd70d499650e8ad4637a8c3e7340206  libstdc++-v3/testsuite/std/ranges/p2325.cc
  6fdbb2b63654acd70477f608bbd22caa  libstdc++-v3/testsuite/std/ranges/p2367.cc
! 64917713313546d047b2ca481245d6db  libstdc++-v3/testsuite/std/ranges/range.cc
  e27e6cc700eea1e8f56568af51b68894  libstdc++-v3/testsuite/std/ranges/range_adaptor_closure.cc
  52223be05a4253d92d8435166f662346  libstdc++-v3/testsuite/std/ranges/refinements.cc
  f418fc948884e46ba7a08b985ec3c9ce  libstdc++-v3/testsuite/std/ranges/repeat/1.cc
--- 124188,124194 ----
  1451ff29f4fda6d96579803764fcc33e  libstdc++-v3/testsuite/std/ranges/p2259.cc
  1dd70d499650e8ad4637a8c3e7340206  libstdc++-v3/testsuite/std/ranges/p2325.cc
  6fdbb2b63654acd70477f608bbd22caa  libstdc++-v3/testsuite/std/ranges/p2367.cc
! 8bc051e12acbe57bc9bb85c809d67ade  libstdc++-v3/testsuite/std/ranges/range.cc
  e27e6cc700eea1e8f56568af51b68894  libstdc++-v3/testsuite/std/ranges/range_adaptor_closure.cc
  52223be05a4253d92d8435166f662346  libstdc++-v3/testsuite/std/ranges/refinements.cc
  f418fc948884e46ba7a08b985ec3c9ce  libstdc++-v3/testsuite/std/ranges/repeat/1.cc
*************** bdce08f2fd8fced9e4b963933e9a7751  libstd
*** 123777,123792 ****
  116d0cf0585a091738f4cd379682ce98  libstdc++-v3/testsuite/std/ranges/single_view.cc
  d8ca7990dfbb17794aaa2cb6f3f9029b  libstdc++-v3/testsuite/std/ranges/sized.cc
  3b43079628213bcfeda0d10685ba810f  libstdc++-v3/testsuite/std/ranges/subrange/1.cc
! 1b1867dca54804ebf61ac12f0ff3e7fc  libstdc++-v3/testsuite/std/ranges/subrange/111948.cc
  aa9b5d321d5828991047eebe29838127  libstdc++-v3/testsuite/std/ranges/subrange/96042.cc
  3ccf34bd2bf97b2cd71e28104381c67f  libstdc++-v3/testsuite/std/ranges/subrange/97512.cc
  1296c3e0f2c2c6e1cbf08f5653d24b2d  libstdc++-v3/testsuite/std/ranges/subrange/constexpr.cc
  b0d0511fba3555c80fa2d60aef381210  libstdc++-v3/testsuite/std/ranges/subrange/lwg3282_neg.cc
  2e166bf1580c1e7a5a1d27912b1203fa  libstdc++-v3/testsuite/std/ranges/subrange/lwg3286.cc
  7bc7369b71669085e15c29a0fc70c3d4  libstdc++-v3/testsuite/std/ranges/subrange/lwg3433.cc
  62dfabaa87afd998a8749dc6ef82e8ba  libstdc++-v3/testsuite/std/ranges/subrange/sizeof.cc
  aeb9eaadef4893f7af9121e729b30082  libstdc++-v3/testsuite/std/ranges/subrange/tuple_like.cc
! e558156d543990fd7ffedd413e678c0f  libstdc++-v3/testsuite/std/ranges/version_c++23.cc
  6cd4bc58902113776271473a39e74ec7  libstdc++-v3/testsuite/std/ranges/view.cc
  be195a164d7b231d7be0ceceab7d53c7  libstdc++-v3/testsuite/std/ranges/zip/1.cc
  2f16a173debd2e7c50247b158bd4cbf1  libstdc++-v3/testsuite/std/ranges/zip_transform/1.cc
--- 124197,124213 ----
  116d0cf0585a091738f4cd379682ce98  libstdc++-v3/testsuite/std/ranges/single_view.cc
  d8ca7990dfbb17794aaa2cb6f3f9029b  libstdc++-v3/testsuite/std/ranges/sized.cc
  3b43079628213bcfeda0d10685ba810f  libstdc++-v3/testsuite/std/ranges/subrange/1.cc
! 880dcafb63bf6cb2e06aa5cdb726993d  libstdc++-v3/testsuite/std/ranges/subrange/111948.cc
  aa9b5d321d5828991047eebe29838127  libstdc++-v3/testsuite/std/ranges/subrange/96042.cc
  3ccf34bd2bf97b2cd71e28104381c67f  libstdc++-v3/testsuite/std/ranges/subrange/97512.cc
  1296c3e0f2c2c6e1cbf08f5653d24b2d  libstdc++-v3/testsuite/std/ranges/subrange/constexpr.cc
  b0d0511fba3555c80fa2d60aef381210  libstdc++-v3/testsuite/std/ranges/subrange/lwg3282_neg.cc
  2e166bf1580c1e7a5a1d27912b1203fa  libstdc++-v3/testsuite/std/ranges/subrange/lwg3286.cc
  7bc7369b71669085e15c29a0fc70c3d4  libstdc++-v3/testsuite/std/ranges/subrange/lwg3433.cc
+ 5114b5e62452a6782ad6fc37b16551a9  libstdc++-v3/testsuite/std/ranges/subrange/lwg3589.cc
  62dfabaa87afd998a8749dc6ef82e8ba  libstdc++-v3/testsuite/std/ranges/subrange/sizeof.cc
  aeb9eaadef4893f7af9121e729b30082  libstdc++-v3/testsuite/std/ranges/subrange/tuple_like.cc
! cf3e74295fc3c3033b27bcf4d5db06c5  libstdc++-v3/testsuite/std/ranges/version_c++23.cc
  6cd4bc58902113776271473a39e74ec7  libstdc++-v3/testsuite/std/ranges/view.cc
  be195a164d7b231d7be0ceceab7d53c7  libstdc++-v3/testsuite/std/ranges/zip/1.cc
  2f16a173debd2e7c50247b158bd4cbf1  libstdc++-v3/testsuite/std/ranges/zip_transform/1.cc
*************** ff09d6a4a1def92f6d35e9fe30514c86  libstd
*** 123804,123810 ****
  0a3070814d79652e6b1fe27f7015a3ac  libstdc++-v3/testsuite/std/time/day/1.cc
  77463919543ba53beb10607117a38a31  libstdc++-v3/testsuite/std/time/day/io.cc
  e59bae3ab8463e3865786e0a60bdd79a  libstdc++-v3/testsuite/std/time/exceptions.cc
! 76f7879f2fb1d1595c4d18f03a52e6e6  libstdc++-v3/testsuite/std/time/format.cc
  41f97e07a76cb7a65bc750e893046837  libstdc++-v3/testsuite/std/time/hh_mm_ss/1.cc
  c4cc8acc0b99459e782a764012ec7dba  libstdc++-v3/testsuite/std/time/hh_mm_ss/io.cc
  a065073fed0dc7a95626c6b2486f9c90  libstdc++-v3/testsuite/std/time/is_am/1.cc
--- 124225,124232 ----
  0a3070814d79652e6b1fe27f7015a3ac  libstdc++-v3/testsuite/std/time/day/1.cc
  77463919543ba53beb10607117a38a31  libstdc++-v3/testsuite/std/time/day/io.cc
  e59bae3ab8463e3865786e0a60bdd79a  libstdc++-v3/testsuite/std/time/exceptions.cc
! 76f7879f2fb1d1595c4d18f03a52e6e6  libstdc++-v3/testsuite/std/time/format/format.cc
! 9b8356c80a978d4f17aa779471f729b1  libstdc++-v3/testsuite/std/time/format/pr117085.cc
  41f97e07a76cb7a65bc750e893046837  libstdc++-v3/testsuite/std/time/hh_mm_ss/1.cc
  c4cc8acc0b99459e782a764012ec7dba  libstdc++-v3/testsuite/std/time/hh_mm_ss/io.cc
  a065073fed0dc7a95626c6b2486f9c90  libstdc++-v3/testsuite/std/time/is_am/1.cc
*************** a065073fed0dc7a95626c6b2486f9c90  libstd
*** 123812,123818 ****
  1aa818c227a28fca2d3c2e546b6014d6  libstdc++-v3/testsuite/std/time/make12/1.cc
  87596ab8b1810f739b3d2c858bfda056  libstdc++-v3/testsuite/std/time/make24/1.cc
  43a4e44d54ec6859e52e1bcc0c9e3e5c  libstdc++-v3/testsuite/std/time/month/1.cc
! b7a5373ed0797aa495f69436f1939726  libstdc++-v3/testsuite/std/time/month/2.cc
  7e479ae5ca8265cd19dd07f766a60526  libstdc++-v3/testsuite/std/time/month/io.cc
  1fbdb236aee5632defb6a49d0a7f2343  libstdc++-v3/testsuite/std/time/month_day/1.cc
  3a975002efe1fa2e12dde1fd56899ff8  libstdc++-v3/testsuite/std/time/month_day/io.cc
--- 124234,124240 ----
  1aa818c227a28fca2d3c2e546b6014d6  libstdc++-v3/testsuite/std/time/make12/1.cc
  87596ab8b1810f739b3d2c858bfda056  libstdc++-v3/testsuite/std/time/make24/1.cc
  43a4e44d54ec6859e52e1bcc0c9e3e5c  libstdc++-v3/testsuite/std/time/month/1.cc
! c436cc081f7ce78c695aa66a485a69d7  libstdc++-v3/testsuite/std/time/month/2.cc
  7e479ae5ca8265cd19dd07f766a60526  libstdc++-v3/testsuite/std/time/month/io.cc
  1fbdb236aee5632defb6a49d0a7f2343  libstdc++-v3/testsuite/std/time/month_day/1.cc
  3a975002efe1fa2e12dde1fd56899ff8  libstdc++-v3/testsuite/std/time/month_day/io.cc
*************** a10ddc36ca5b426a02ccdd5079f271cf  libstd
*** 123826,123838 ****
  ac082744b5a33ad2dcb6eff594cf3d6f  libstdc++-v3/testsuite/std/time/time_zone/get_info_local.cc
  678f61b38f9d54cc6d494cbe2b1ddcb2  libstdc++-v3/testsuite/std/time/time_zone/get_info_sys.cc
  61384ef28db3a8798c62cac5d1d159f0  libstdc++-v3/testsuite/std/time/time_zone/requirements.cc
  75d0e4e06ccb5ac2db3d6835ab3af815  libstdc++-v3/testsuite/std/time/traits/is_clock.cc
! 0d9016886ac8724855b531f459418ee9  libstdc++-v3/testsuite/std/time/tzdb/1.cc
  4df74ec3b21766e5f9628e0ce23bde18  libstdc++-v3/testsuite/std/time/tzdb/leap_seconds.cc
  017128485d4a5d97449c74cacee711c0  libstdc++-v3/testsuite/std/time/tzdb_list/1.cc
  b2c3486444c7d0802d426b76e32fd654  libstdc++-v3/testsuite/std/time/tzdb_list/requirements.cc
  013359a7005b3f65c0f9b0b16356fafa  libstdc++-v3/testsuite/std/time/weekday/1.cc
! d6cb5f0804c9bd14e047294d47decf33  libstdc++-v3/testsuite/std/time/weekday/2.cc
  cdb2ea791ba9eb7ddb4551a829904423  libstdc++-v3/testsuite/std/time/weekday/io.cc
  642869ce92d47849ba692534f16ca9b1  libstdc++-v3/testsuite/std/time/weekday_indexed/1.cc
  dc49b0641b0c5749177888953dd3c115  libstdc++-v3/testsuite/std/time/weekday_indexed/io.cc
--- 124248,124262 ----
  ac082744b5a33ad2dcb6eff594cf3d6f  libstdc++-v3/testsuite/std/time/time_zone/get_info_local.cc
  678f61b38f9d54cc6d494cbe2b1ddcb2  libstdc++-v3/testsuite/std/time/time_zone/get_info_sys.cc
  61384ef28db3a8798c62cac5d1d159f0  libstdc++-v3/testsuite/std/time/time_zone/requirements.cc
+ f29caeef5aa140b1811c02a5922262f9  libstdc++-v3/testsuite/std/time/time_zone/sys_info_abbrev.cc
  75d0e4e06ccb5ac2db3d6835ab3af815  libstdc++-v3/testsuite/std/time/traits/is_clock.cc
! 12c1c428804a60e85bbea69f24f66236  libstdc++-v3/testsuite/std/time/tzdb/1.cc
  4df74ec3b21766e5f9628e0ce23bde18  libstdc++-v3/testsuite/std/time/tzdb/leap_seconds.cc
+ 1011fa87c9cfe396c343f0158cb58a75  libstdc++-v3/testsuite/std/time/tzdb/links.cc
  017128485d4a5d97449c74cacee711c0  libstdc++-v3/testsuite/std/time/tzdb_list/1.cc
  b2c3486444c7d0802d426b76e32fd654  libstdc++-v3/testsuite/std/time/tzdb_list/requirements.cc
  013359a7005b3f65c0f9b0b16356fafa  libstdc++-v3/testsuite/std/time/weekday/1.cc
! ae87ba632eaa4d14220b7cf69c9056f7  libstdc++-v3/testsuite/std/time/weekday/2.cc
  cdb2ea791ba9eb7ddb4551a829904423  libstdc++-v3/testsuite/std/time/weekday/io.cc
  642869ce92d47849ba692534f16ca9b1  libstdc++-v3/testsuite/std/time/weekday_indexed/1.cc
  dc49b0641b0c5749177888953dd3c115  libstdc++-v3/testsuite/std/time/weekday_indexed/io.cc
*************** a01a1569cbc17b299bb2f6eedbeef2f0  libstd
*** 124458,124463 ****
--- 124882,124888 ----
  6a469f89e183263aab103a432ec9b121  libstdc++-v3/testsuite/tr2/dynamic_bitset/cons.cc
  ccb783ef723de026936a15dcfbcc4637  libstdc++-v3/testsuite/tr2/dynamic_bitset/copy.cc
  e0c8e7f7937cda5b1dda18c9ecff0912  libstdc++-v3/testsuite/tr2/dynamic_bitset/move.cc
+ bb455cd7974df6cd892858b5c801e9eb  libstdc++-v3/testsuite/tr2/dynamic_bitset/pr115399.cc
  f2b2ba6e35c391e64f6d50df18097cc6  libstdc++-v3/testsuite/tr2/dynamic_bitset/pr58729.cc
  71669505661c2946ee4dafce7d8bfe1c  libstdc++-v3/testsuite/tr2/dynamic_bitset/pr87784.cc
  0c8a30db56f78f068645e9dd357dde96  libstdc++-v3/testsuite/tr2/dynamic_bitset/pr92059.cc
*************** b8b1c2808eb70c03c963b4a62269d1cc  libstd
*** 124561,124567 ****
  181feb52eb8dcfa7f8dfa030bc4514b5  libstdc++-v3/testsuite/util/testsuite_abi.h
  3208b7061a80358262b38cd5bf2218bf  libstdc++-v3/testsuite/util/testsuite_abi_check.cc
  263b373c9fe52e8b875a12a883c95d86  libstdc++-v3/testsuite/util/testsuite_allocator.cc
! 9406332303942cc83935f23514585300  libstdc++-v3/testsuite/util/testsuite_allocator.h
  4da3c8f6f248cd98402f19e6c49995ce  libstdc++-v3/testsuite/util/testsuite_api.h
  97fbe89d20ac641bef8e2676e4c8f626  libstdc++-v3/testsuite/util/testsuite_character.cc
  a36fc20999f54183117d7846a06feeaf  libstdc++-v3/testsuite/util/testsuite_character.h
--- 124986,124992 ----
  181feb52eb8dcfa7f8dfa030bc4514b5  libstdc++-v3/testsuite/util/testsuite_abi.h
  3208b7061a80358262b38cd5bf2218bf  libstdc++-v3/testsuite/util/testsuite_abi_check.cc
  263b373c9fe52e8b875a12a883c95d86  libstdc++-v3/testsuite/util/testsuite_allocator.cc
! cf8cc3718c9d61e64250ee6675fbccb6  libstdc++-v3/testsuite/util/testsuite_allocator.h
  4da3c8f6f248cd98402f19e6c49995ce  libstdc++-v3/testsuite/util/testsuite_api.h
  97fbe89d20ac641bef8e2676e4c8f626  libstdc++-v3/testsuite/util/testsuite_character.cc
  a36fc20999f54183117d7846a06feeaf  libstdc++-v3/testsuite/util/testsuite_character.h
*************** a35c2255ea5214961ff4081b94e09730  libstd
*** 124578,124584 ****
  625d778f1f66c43960648fdd07b7b7bc  libstdc++-v3/testsuite/util/testsuite_io.h
  9b8f11313b72d34bc1517462349bfa39  libstdc++-v3/testsuite/util/testsuite_iterators.h
  11ae45f476a871567cb1b477497ee4aa  libstdc++-v3/testsuite/util/testsuite_new_operators.h
! bbaafce7b0ab41c5ac26c28a18c1dec6  libstdc++-v3/testsuite/util/testsuite_performance.h
  eeddd49c5e0a43c6ba48826801307e3f  libstdc++-v3/testsuite/util/testsuite_random.h
  49face3c31126da3ec67e58e2cc8a00e  libstdc++-v3/testsuite/util/testsuite_regex.h
  d706579031a63c180248a9f8f73f0a68  libstdc++-v3/testsuite/util/testsuite_rng.h
--- 125003,125009 ----
  625d778f1f66c43960648fdd07b7b7bc  libstdc++-v3/testsuite/util/testsuite_io.h
  9b8f11313b72d34bc1517462349bfa39  libstdc++-v3/testsuite/util/testsuite_iterators.h
  11ae45f476a871567cb1b477497ee4aa  libstdc++-v3/testsuite/util/testsuite_new_operators.h
! c1d9eab43609a39e391cf47b31de9c0b  libstdc++-v3/testsuite/util/testsuite_performance.h
  eeddd49c5e0a43c6ba48826801307e3f  libstdc++-v3/testsuite/util/testsuite_random.h
  49face3c31126da3ec67e58e2cc8a00e  libstdc++-v3/testsuite/util/testsuite_regex.h
  d706579031a63c180248a9f8f73f0a68  libstdc++-v3/testsuite/util/testsuite_rng.h
*************** abd3b6f8114b664454ef48f05d7112b1  libstd
*** 124589,124595 ****
  8a7ff78e20c170bc7e06e28ee78d2d12  libstdc++-v3/testsuite/util/thread/all.h
  b950d655469c477755252b1e18009596  libtool-ldflags
  2e824852870b4611099b99dcf89b981b  libtool.m4
! cb16d99cb0e6ca856b1930499f573c1d  libvtv/ChangeLog
  6250d856c456725aa05b120686976895  libvtv/Makefile.am
  b1170aae9472f26fdc8326737dc22aba  libvtv/Makefile.in
  3b765c4f4a0a0f606db1472bce2b8d29  libvtv/acinclude.m4
--- 125014,125020 ----
  8a7ff78e20c170bc7e06e28ee78d2d12  libstdc++-v3/testsuite/util/thread/all.h
  b950d655469c477755252b1e18009596  libtool-ldflags
  2e824852870b4611099b99dcf89b981b  libtool.m4
! 35693726fc5aa28594cbcc84559c6e98  libvtv/ChangeLog
  6250d856c456725aa05b120686976895  libvtv/Makefile.am
  b1170aae9472f26fdc8326737dc22aba  libvtv/Makefile.in
  3b765c4f4a0a0f606db1472bce2b8d29  libvtv/acinclude.m4
*************** c9cd02479c9f4c081d88190334e65fae  libvtv
*** 124672,124678 ****
  76849f682e2cb5f9c2866e45ce1e9d83  libvtv/vtv_utils.h
  247597a3fcc5b5aa8bd923351c59d853  ltgcc.m4
  06c2854f9cfe5864b2885e0d0e9c512f  ltmain.sh
! bf4656f73bec593b3c1874c5109d94d4  lto-plugin/ChangeLog
  aced0d5ba993307440be577533b64eb3  lto-plugin/Makefile.am
  9e1d03259c911094d39831e7e86546d8  lto-plugin/Makefile.in
  75fc65b35d0a47ac098f7a278d37060b  lto-plugin/aclocal.m4
--- 125097,125103 ----
  76849f682e2cb5f9c2866e45ce1e9d83  libvtv/vtv_utils.h
  247597a3fcc5b5aa8bd923351c59d853  ltgcc.m4
  06c2854f9cfe5864b2885e0d0e9c512f  ltmain.sh
! cf33db8cfc6d4f07ddc19b913a565a12  lto-plugin/ChangeLog
  aced0d5ba993307440be577533b64eb3  lto-plugin/Makefile.am
  9e1d03259c911094d39831e7e86546d8  lto-plugin/Makefile.in
  75fc65b35d0a47ac098f7a278d37060b  lto-plugin/aclocal.m4
*************** dee72a6a60e99528b0d17bf3ff9a1e15  ltopti
*** 124685,124691 ****
  bc2f6032c98896249eadb56177c7d357  ltsugar.m4
  c30cd33c496505f13d9fbdb6970c7c33  ltversion.m4
  293853a13b7e218e3a4342cf85fbbf25  lt~obsolete.m4
! 690189f5f40bd4e86c9bee8b0616d98e  maintainer-scripts/ChangeLog
  33c7bc2d2c55956dfac85a05d8a80eff  maintainer-scripts/README
  507e832af5f2d63b8a78eef217c807a7  maintainer-scripts/branch_changer.py
  c819510f0d438149c1518bda7b165ac4  maintainer-scripts/bugzilla-close-candidate.py
--- 125110,125116 ----
  bc2f6032c98896249eadb56177c7d357  ltsugar.m4
  c30cd33c496505f13d9fbdb6970c7c33  ltversion.m4
  293853a13b7e218e3a4342cf85fbbf25  lt~obsolete.m4
! d74779284745e965c5cae4d0eff1571a  maintainer-scripts/ChangeLog
  33c7bc2d2c55956dfac85a05d8a80eff  maintainer-scripts/README
  507e832af5f2d63b8a78eef217c807a7  maintainer-scripts/branch_changer.py
  c819510f0d438149c1518bda7b165ac4  maintainer-scripts/bugzilla-close-candidate.py
*************** cf2baa0854f564a7785307e79f155efc  symlin
*** 124706,124712 ****
  40bb1f4ce4a60a36d1ec50d66aeed4d1  test-driver
  cb06c1be6a41d68b0a65e0c1a91752bc  ylwrap
  03bf3ba8089f4bf475ef4035cf316a47  zlib/CMakeLists.txt
! 3c99a06356d4f0a0b550f863177d5f32  zlib/ChangeLog
  f10e5e9394787b288e91fed29533720a  zlib/ChangeLog.gcj
  0e9a37be8e3b85cc0ccf60504064c297  zlib/ChangeLog.jit
  b7a1991f01daea3efe108a215c5514a5  zlib/FAQ
--- 125131,125137 ----
  40bb1f4ce4a60a36d1ec50d66aeed4d1  test-driver
  cb06c1be6a41d68b0a65e0c1a91752bc  ylwrap
  03bf3ba8089f4bf475ef4035cf316a47  zlib/CMakeLists.txt
! 7b83bc6ba31d13ceefb7029d8726969c  zlib/ChangeLog
  f10e5e9394787b288e91fed29533720a  zlib/ChangeLog.gcj
  0e9a37be8e3b85cc0ccf60504064c297  zlib/ChangeLog.jit
  b7a1991f01daea3efe108a215c5514a5  zlib/FAQ
diff -Nrcpad gcc-13.3.0/NEWS gcc-13.4.0/NEWS
*** gcc-13.3.0/NEWS	Tue May 21 07:50:03 2024
--- gcc-13.4.0/NEWS	Thu Jun  5 16:05:56 2025
*************** see ONEWS.
*** 8,30 ****
  http://gcc.gnu.org/gcc-13/index.html
                               GCC 13 Release Series
  
!    May 21, 2024
  
!    The GCC developers are pleased to announce the release of GCC 13.3.
  
     This release is a bug-fix release, containing fixes for regressions in
!    GCC 13.2 relative to previous releases of GCC.
  
  Release History
  
     GCC 13.3
!           May 21, 2024 ([1]changes, [2]documentation)
  
     GCC 13.2
!           July 27, 2023 ([3]changes, [4]documentation)
  
     GCC 13.1
!           April 26, 2023 ([5]changes, [6]documentation)
  
  References and Acknowledgements
  
--- 8,33 ----
  http://gcc.gnu.org/gcc-13/index.html
                               GCC 13 Release Series
  
!    June 5, 2025
  
!    The GCC developers are pleased to announce the release of GCC 13.4.
  
     This release is a bug-fix release, containing fixes for regressions in
!    GCC 13.3 relative to previous releases of GCC.
  
  Release History
  
+    GCC 13.4
+           June 5, 2025 ([1]changes, [2]documentation)
+ 
     GCC 13.3
!           May 21, 2024 ([3]changes, [4]documentation)
  
     GCC 13.2
!           July 27, 2023 ([5]changes, [6]documentation)
  
     GCC 13.1
!           April 26, 2023 ([7]changes, [8]documentation)
  
  References and Acknowledgements
  
*************** References and Acknowledgements
*** 34,82 ****
  
     The GCC developers would like to thank the numerous people that have
     contributed new features, improvements, bug fixes, and other changes as
!    well as test results to GCC. This [7]amazing group of volunteers is
     what makes GCC successful.
  
!    For additional information about GCC please refer to the [8]GCC project
!    web site or contact the [9]GCC development mailing list.
  
!    To obtain GCC please use [10]our mirror sites or [11]our version
     control system.
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [12]GCC manuals. If that fails, the
!     [13]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [14]gcc@gcc.gnu.org. All of [15]our lists have public
      archives.
  
!    Copyright (C) [16]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [17]maintained by the GCC team. Last modified
!    2024-05-21.
  
  References
  
     1. https://gcc.gnu.org/gcc-13/changes.html
!    2. http://gcc.gnu.org/onlinedocs/13.3.0/
     3. https://gcc.gnu.org/gcc-13/changes.html
!    4. http://gcc.gnu.org/onlinedocs/13.2.0/
     5. https://gcc.gnu.org/gcc-13/changes.html
!    6. http://gcc.gnu.org/onlinedocs/13.1.0/
!    7. http://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Contributors.html
!    8. https://gcc.gnu.org/index.html
!    9. mailto:gcc@gcc.gnu.org
!   10. https://gcc.gnu.org/mirrors.html
!   11. https://gcc.gnu.org/git.html
!   12. https://gcc.gnu.org/onlinedocs/
!   13. mailto:gcc-help@gcc.gnu.org
!   14. mailto:gcc@gcc.gnu.org
!   15. https://gcc.gnu.org/lists.html
!   16. https://www.fsf.org/
!   17. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-13/changes.html
                               GCC 13 Release Series
--- 37,87 ----
  
     The GCC developers would like to thank the numerous people that have
     contributed new features, improvements, bug fixes, and other changes as
!    well as test results to GCC. This [9]amazing group of volunteers is
     what makes GCC successful.
  
!    For additional information about GCC please refer to the [10]GCC
!    project web site or contact the [11]GCC development mailing list.
  
!    To obtain GCC please use [12]our mirror sites or [13]our version
     control system.
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [14]GCC manuals. If that fails, the
!     [15]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [16]gcc@gcc.gnu.org. All of [17]our lists have public
      archives.
  
!    Copyright (C) [18]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [19]maintained by the GCC team. Last modified
!    2025-06-05.
  
  References
  
     1. https://gcc.gnu.org/gcc-13/changes.html
!    2. https://gcc.gnu.org/onlinedocs/13.4.0/
     3. https://gcc.gnu.org/gcc-13/changes.html
!    4. https://gcc.gnu.org/onlinedocs/13.3.0/
     5. https://gcc.gnu.org/gcc-13/changes.html
!    6. https://gcc.gnu.org/onlinedocs/13.2.0/
!    7. https://gcc.gnu.org/gcc-13/changes.html
!    8. https://gcc.gnu.org/onlinedocs/13.1.0/
!    9. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Contributors.html
!   10. https://gcc.gnu.org/index.html
!   11. mailto:gcc@gcc.gnu.org
!   12. https://gcc.gnu.org/mirrors.html
!   13. https://gcc.gnu.org/git.html
!   14. https://gcc.gnu.org/onlinedocs/
!   15. mailto:gcc-help@gcc.gnu.org
!   16. mailto:gcc@gcc.gnu.org
!   17. https://gcc.gnu.org/lists.html
!   18. https://www.fsf.org/
!   19. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-13/changes.html
                               GCC 13 Release Series
*************** Caveats
*** 115,128 ****
         in every source file that includes the <iostream> header. This
         change improves the start-up performance of C++ programs, but it
         means that code compiled with GCC 13.1 will crash if the correct
!        version of libstdc++.so is not used at runtime. See the
!        [8]documentation about using the right libstdc++.so at runtime.
         Future GCC releases will mitigate the problem so that the program
         cannot be run at all with an older libstdc++.so.
  
! General Improvements
  
!      * [9]OpenMP
            + Reverse offload is now supported with AMD GCN and nvptx
              devices. Additionally, the requires handling has been improved
              and all clauses are now accepted. If a requirement cannot be
--- 120,133 ----
         in every source file that includes the <iostream> header. This
         change improves the start-up performance of C++ programs, but it
         means that code compiled with GCC 13.1 will crash if the correct
!        version of libstdc++.so is not used at run time. See the
!        [8]documentation about using the right libstdc++.so at run time.
         Future GCC releases will mitigate the problem so that the program
         cannot be run at all with an older libstdc++.so.
  
! [9]General Improvements
  
!      * [10]OpenMP
            + Reverse offload is now supported with AMD GCN and nvptx
              devices. Additionally, the requires handling has been improved
              and all clauses are now accepted. If a requirement cannot be
*************** General Improvements
*** 154,160 ****
              added in Technical Report (TR11) is already handled.
            + For user defined allocators requesting high bandwidth or large
              capacity memspaces or interleaved partitioning, the
!             [10]memkind library is used, if available at run time.
       * AddressSanitizer defaults to detect_stack_use_after_return=1 on
         GNU/Linux targets. For compatibility, it can be disabled with env
         ASAN_OPTIONS=detect_stack_use_after_return=0.
--- 159,165 ----
              added in Technical Report (TR11) is already handled.
            + For user defined allocators requesting high bandwidth or large
              capacity memspaces or interleaved partitioning, the
!             [11]memkind library is used, if available at run time.
       * AddressSanitizer defaults to detect_stack_use_after_return=1 on
         GNU/Linux targets. For compatibility, it can be disabled with env
         ASAN_OPTIONS=detect_stack_use_after_return=0.
*************** General Improvements
*** 167,177 ****
       * -Ofast, -ffast-math and -funsafe-math-optimizations will no longer
         add startup code to alter the floating-point environment when
         producing a shared object with -shared.
!      * GCC can now emit its diagnostics using [11]SARIF. This is a
         JSON-based format suited for capturing the results of static
!        analysis tools (like GCC's [12]-fanalyzer), but it can also be used
         to capture other GCC warnings and errors in a machine-readable
!        format. Specifically, the [13]-fdiagnostics-format= option has been
         extended to support these new values:
            + -fdiagnostics-format=sarif-stderr
            + -fdiagnostics-format=sarif-file
--- 172,182 ----
       * -Ofast, -ffast-math and -funsafe-math-optimizations will no longer
         add startup code to alter the floating-point environment when
         producing a shared object with -shared.
!      * GCC can now emit its diagnostics using [12]SARIF. This is a
         JSON-based format suited for capturing the results of static
!        analysis tools (like GCC's [13]-fanalyzer), but it can also be used
         to capture other GCC warnings and errors in a machine-readable
!        format. Specifically, the [14]-fdiagnostics-format= option has been
         extended to support these new values:
            + -fdiagnostics-format=sarif-stderr
            + -fdiagnostics-format=sarif-file
*************** General Improvements
*** 181,195 ****
         where the json-prefixed variants refer to GCC's own JSON diagnostic
         format.
       * Support for profiling and test coverage in freestanding
!        environments has been added, see also [14]Profiling and Test
         Coverage in Freestanding Environments.
       * New options -fharden-compares and -fharden-conditional-branches to
         verify compares and conditional branches, to detect some
         power-deprivation hardware attacks, using reversed conditions.
  
! New Languages and Language specific improvements
  
!   Ada
  
       * Traceback support added in RTEMS for the PPC ELF and ARM
         architectures.
--- 186,200 ----
         where the json-prefixed variants refer to GCC's own JSON diagnostic
         format.
       * Support for profiling and test coverage in freestanding
!        environments has been added, see also [15]Profiling and Test
         Coverage in Freestanding Environments.
       * New options -fharden-compares and -fharden-conditional-branches to
         verify compares and conditional branches, to detect some
         power-deprivation hardware attacks, using reversed conditions.
  
! [16]New Languages and Language specific improvements
  
!   [17]Ada
  
       * Traceback support added in RTEMS for the PPC ELF and ARM
         architectures.
*************** New Languages and Language specific impr
*** 201,261 ****
         been further improved.
       * Documentation improvements.
  
!   C family
  
       * New warnings:
!           + [15]-Wxor-used-as-pow warns about uses of ^, the exclusive or
              operator, where it appears the user meant exponentiation
!             ([16]PR90885)
       * Three new function attributes for documenting int arguments that
         are file descriptors:
!           + [17]__attribute__((fd_arg(N)))
!           + [18]__attribute__((fd_arg_read(N)))
!           + [19]__attribute__((fd_arg_write(N)))
!        These are used by [20]-fanalyzer to detect misuses of file
         descriptors.
!      * A new statement attribute for C++23 [21]P1774R8 Portable
         assumptions support also in C or older C++:
!        [22]__attribute__((assume(EXPR)));
       * GCC can now control when to treat the trailing array of a structure
         as a flexible array member for the purpose of accessing the
         elements of such an array. By default, all trailing arrays in
         aggregates are treated as flexible array members. Use the new
!        command-line option [23]-fstrict-flex-arrays to control which array
         members are treated as flexible arrays.
  
!   C
  
       * Several C23 features have been implemented:
!           + [24]N3042, Introduce the nullptr constant
!           + [25]N2963, Enhanced Enumerations (fixed underlying types)
!           + [26]N2975, Relax requirements for variadic parameter lists
!           + [27]N3007, Type inference for object definitions (auto)
!           + [28]N3018, The constexpr specifier for object definitions
!           + [29]N3038, Introduce storage-class specifiers for compound
              literals
            + typeof (previously supported as an extension) and
              typeof_unqual
            + New keywords alignas, alignof, bool, false, static_assert,
              thread_local, true
!           + [30]N2764, The noreturn attribute
            + Support for empty initializer braces
            + __STDC_VERSION_*_H__ header version macros
            + Removal of ATOMIC_VAR_INIT
            + unreachable macro in <stddef.h>
            + Removal of trigraphs
            + Removal of unprototyped functions
!           + printf and scanf format checking with [31]-Wformat for %wN and
              %wfN format length modifiers
!           + [32]N2836, Identifier Syntax using Unicode Standard Annex 31
       * In addition to those C23 features, existing features adopted in C23
         have been adjusted to follow C23 requirements and are not diagnosed
         with -std=c2x -Wpedantic.
       * New warnings:
!           + [33]-Wenum-int-mismatch warns about mismatches between an
!             enumerated type and an integer type ([34]PR105131)
  
!   C++
  
       * Excess precision support (which has been available in C since GCC
         4.5) has been implemented for C++ as well. It is enabled by default
--- 206,266 ----
         been further improved.
       * Documentation improvements.
  
!   [18]C family
  
       * New warnings:
!           + [19]-Wxor-used-as-pow warns about uses of ^, the exclusive or
              operator, where it appears the user meant exponentiation
!             ([20]PR90885)
       * Three new function attributes for documenting int arguments that
         are file descriptors:
!           + [21]__attribute__((fd_arg(N)))
!           + [22]__attribute__((fd_arg_read(N)))
!           + [23]__attribute__((fd_arg_write(N)))
!        These are used by [24]-fanalyzer to detect misuses of file
         descriptors.
!      * A new statement attribute for C++23 [25]P1774R8 Portable
         assumptions support also in C or older C++:
!        [26]__attribute__((assume(EXPR)));
       * GCC can now control when to treat the trailing array of a structure
         as a flexible array member for the purpose of accessing the
         elements of such an array. By default, all trailing arrays in
         aggregates are treated as flexible array members. Use the new
!        command-line option [27]-fstrict-flex-arrays to control which array
         members are treated as flexible arrays.
  
!   [28]C
  
       * Several C23 features have been implemented:
!           + [29]N3042, Introduce the nullptr constant
!           + [30]N2963, Enhanced Enumerations (fixed underlying types)
!           + [31]N2975, Relax requirements for variadic parameter lists
!           + [32]N3007, Type inference for object definitions (auto)
!           + [33]N3018, The constexpr specifier for object definitions
!           + [34]N3038, Introduce storage-class specifiers for compound
              literals
            + typeof (previously supported as an extension) and
              typeof_unqual
            + New keywords alignas, alignof, bool, false, static_assert,
              thread_local, true
!           + [35]N2764, The noreturn attribute
            + Support for empty initializer braces
            + __STDC_VERSION_*_H__ header version macros
            + Removal of ATOMIC_VAR_INIT
            + unreachable macro in <stddef.h>
            + Removal of trigraphs
            + Removal of unprototyped functions
!           + printf and scanf format checking with [36]-Wformat for %wN and
              %wfN format length modifiers
!           + [37]N2836, Identifier Syntax using Unicode Standard Annex 31
       * In addition to those C23 features, existing features adopted in C23
         have been adjusted to follow C23 requirements and are not diagnosed
         with -std=c2x -Wpedantic.
       * New warnings:
!           + [38]-Wenum-int-mismatch warns about mismatches between an
!             enumerated type and an integer type ([39]PR105131)
  
!   [40]C++
  
       * Excess precision support (which has been available in C since GCC
         4.5) has been implemented for C++ as well. It is enabled by default
*************** New Languages and Language specific impr
*** 270,311 ****
         are supported those are evaluated in float precision.
         -fexcess-precision=fast restores previous behavior.
       * Several C++23 features have been implemented:
!           + [35]P2324R1, Labels at the end of compound statements
!             ([36]PR103539)
!           + [37]P2255R2, A type trait to detect reference binding to
!             temporary ([38]PR104477)
!           + [39]P2327R1, De-deprecating volatile compound operations
!           + [40]P2437R1, Support for #warning ([41]PR106646)
!           + [42]P2290R3, Delimited escape sequences ([43]PR106645)
!           + [44]P2071R2, Named universal character escapes ([45]PR106648)
!           + [46]P2513R3, char8_t Compatibility and Portability Fix
!             ([47]PR106656)
!           + [48]P1169R4, static operator() ([49]PR106651)
!           + [50]P2266R3, Simpler implicit move ([51]PR101165)
!           + [52]P2468R2, The Equality Operator You Are Looking For
!             ([53]PR106644)
!           + [54]P2362R3, Remove non-encodable
              wide character literals and multicharacter wide character lite
!             rals ([55]PR106647)
!           + [56]P2448R2, Relaxing some constexpr restrictions
!             ([57]PR106649)
!           + [58]P1467R9, Extended floating-point types and standard names
!             ([59]PR106652)
!           + [60]P1774R8, Portable assumptions ([61]PR106654)
!           + [62]P2295R6, Support for
!             UTF-8 as a portable source file encoding ([63]PR106655)
!           + [64]P2589R1, static operator[] ([65]PR107684)
       * New warnings:
!           + [66]-Wself-move warns when a value is moved to itself with
!             std::move ([67]PR81159)
!           + [68]-Wdangling-reference warns when a reference is bound to a
!             temporary whose lifetime has ended ([69]PR106393)
!      * The [70]-Wpessimizing-move and [71]-Wredundant-move warnings have
         been extended to warn in more contexts.
!      * The [72]-nostdlib++ option has been added, to enable linking with
         g++ without implicitly linking in the C++ standard library.
  
!     Runtime Library (libstdc++)
  
       * Improved experimental support for C++20, including:
            + <format> header and std::format.
--- 275,316 ----
         are supported those are evaluated in float precision.
         -fexcess-precision=fast restores previous behavior.
       * Several C++23 features have been implemented:
!           + [41]P2324R1, Labels at the end of compound statements
!             ([42]PR103539)
!           + [43]P2255R2, A type trait to detect reference binding to
!             temporary ([44]PR104477)
!           + [45]P2327R1, De-deprecating volatile compound operations
!           + [46]P2437R1, Support for #warning ([47]PR106646)
!           + [48]P2290R3, Delimited escape sequences ([49]PR106645)
!           + [50]P2071R2, Named universal character escapes ([51]PR106648)
!           + [52]P2513R3, char8_t Compatibility and Portability Fix
!             ([53]PR106656)
!           + [54]P1169R4, static operator() ([55]PR106651)
!           + [56]P2266R3, Simpler implicit move ([57]PR101165)
!           + [58]P2468R2, The Equality Operator You Are Looking For
!             ([59]PR106644)
!           + [60]P2362R3, Remove non-encodable
              wide character literals and multicharacter wide character lite
!             rals ([61]PR106647)
!           + [62]P2448R2, Relaxing some constexpr restrictions
!             ([63]PR106649)
!           + [64]P1467R9, Extended floating-point types and standard names
!             ([65]PR106652)
!           + [66]P1774R8, Portable assumptions ([67]PR106654)
!           + [68]P2295R6, Support for
!             UTF-8 as a portable source file encoding ([69]PR106655)
!           + [70]P2589R1, static operator[] ([71]PR107684)
       * New warnings:
!           + [72]-Wself-move warns when a value is moved to itself with
!             std::move ([73]PR81159)
!           + [74]-Wdangling-reference warns when a reference is bound to a
!             temporary whose lifetime has ended ([75]PR106393)
!      * The [76]-Wpessimizing-move and [77]-Wredundant-move warnings have
         been extended to warn in more contexts.
!      * The [78]-nostdlib++ option has been added, to enable linking with
         g++ without implicitly linking in the C++ standard library.
  
!     [79]Runtime Library (libstdc++)
  
       * Improved experimental support for C++20, including:
            + <format> header and std::format.
*************** New Languages and Language specific impr
*** 335,371 ****
       * Support for many previously unavailable features in freestanding
         mode, thanks to Arsen Arsenović. For example, std::tuple is now
         available for freestanding compilation. The freestanding subset
!        contains all the components made freestanding by [73]P1642, but
!        libstdc++ adds more components to the freestanding subset, such as
!        std::array and std::string_view. Additionally, libstdc++ now
!        respects the -ffreestanding compiler option and so it is not
!        necessary to build a separate freestanding installation of
!        libstdc++. Compiling with -ffreestanding will restrict the
!        available features to the freestanding subset, even if libstdc++
!        was built as a full, hosted implementation.
  
!   Fortran
  
       * Finalization is now fully supported.
  
!   Go
  
       * GCC 13, like GCC 12, provides a complete implementation of the Go
         1.18 user packages.
       * Although Go 1.18 includes support for generic programming, that
         support is not yet available in GCC.
  
!   Modula-2
  
       * Support for the language Modula-2 has been added. This includes
         support for the ISO/IEC 10514-1, PIM2, PIM3, PIM4 dialects together
         with a complete set of ISO/IEC 10514-1 and PIM libraries.
       * The <* noreturn *> attribute is supported with the -Wreturn-type
!        [74]option.
  
! New Targets and Target Specific Improvements
  
!   AArch64
  
       * The AArch64 target now supports Decimal Floating-point in the BID
         format through the libbid library.
--- 340,414 ----
       * Support for many previously unavailable features in freestanding
         mode, thanks to Arsen Arsenović. For example, std::tuple is now
         available for freestanding compilation. The freestanding subset
!        contains all the components made freestanding by [80]P1642, and
!        libstdc++ adds more components such as std::array and
!        std::string_view. Additionally, libstdc++ now respects the
!        -ffreestanding compiler option and so it is not necessary to build
!        a separate freestanding installation of libstdc++. Compiling with
!        -ffreestanding restricts the available features to the freestanding
!        subset, even if libstdc++ was built as a full, hosted
!        implementation.
  
!   [81]D
! 
!      * Support for the D programming language has been updated to version
!        2.103.1 of the language and run-time library. Full changelog for
!        this release and previous releases can be found on the
!        [82]dlang.org website.
!      * The following GCC attributes are now recognized and available from
!        the gcc.attributes module with short-hand aliases for convenience:
!           + @attribute("no_sanitize", arguments) or
!             @no_sanitize(arguments).
!           + @attribute("register") or @register.
!           + @attribute("simd") or @simd.
!           + @attribute("simd_clones", mask) or @simd_clones(mask).
!           + @attribute("visibility", arguments) or @visibility(arguments).
!      * New aliases have been added to gcc.attributes for compatibility
!        with ldc.attributes.
!           + The @hidden attribute is an alias for @attribute("visibility",
!             "hidden").
!           + The @noSanitize attribute is an alias for
!             @attribute("no_sanitize").
!      * Vector operation intrinsics prefetch, loadUnaligned,
!        storeUnaligned, shuffle, shufflevector, extractelement,
!        insertelement, convertvector, and blendvector have been added to
!        the gcc.simd module.
!      * New warnings:
!           + [83]-Wbuiltin-declaration-mismatch= warns when a built-in
!             function is declared with the wrong signature.
!           + [84]-Wmismatched-special-enum warns when a special enum is
!             declared with the wrong base type.
!      * New version identifier D_Optimized is now predefined when the -O
!        option, or any higher optimization level is used.
!      * The predefinition of version D_Exceptions can now by controlled by
!        the option -fexception.
!      * The predefinition of version D_TypeInfo can now by controlled by
!        the option -frtti.
!      * The -fdebug= and -fversion= compiler switches no longer accept an
!        integer argument.
! 
!   [85]Fortran
  
       * Finalization is now fully supported.
  
!   [86]Go
  
       * GCC 13, like GCC 12, provides a complete implementation of the Go
         1.18 user packages.
       * Although Go 1.18 includes support for generic programming, that
         support is not yet available in GCC.
  
!   [87]Modula-2
  
       * Support for the language Modula-2 has been added. This includes
         support for the ISO/IEC 10514-1, PIM2, PIM3, PIM4 dialects together
         with a complete set of ISO/IEC 10514-1 and PIM libraries.
       * The <* noreturn *> attribute is supported with the -Wreturn-type
!        [88]option.
  
! [89]New Targets and Target Specific Improvements
  
!   [90]AArch64
  
       * The AArch64 target now supports Decimal Floating-point in the BID
         format through the libbid library.
*************** New Targets and Target Specific Improvem
*** 390,403 ****
       * The FEAT_LSE2 feature is now supported through libatomic and
         provides lockless 16-byte atomics on systems that implement it.
  
!   AMD Radeon (GCN)
  
!      * Support for the Instinct MI200 series devices ([75] gfx90a) has
         been added.
       * SIMD vectorization support has been improved; this and
!        stack-handling changes [76]require newlib 4.3.0 (or newer).
  
!   arm
  
       * A number of new CPUs are supported through the -mcpu and -mtune
         options (GCC identifiers in parentheses).
--- 433,446 ----
       * The FEAT_LSE2 feature is now supported through libatomic and
         provides lockless 16-byte atomics on systems that implement it.
  
!   [91]AMD Radeon (GCN)
  
!      * Support for the Instinct MI200 series devices ([92] gfx90a) has
         been added.
       * SIMD vectorization support has been improved; this and
!        stack-handling changes [93]require newlib 4.3.0 (or newer).
  
!   [94]arm
  
       * A number of new CPUs are supported through the -mcpu and -mtune
         options (GCC identifiers in parentheses).
*************** New Targets and Target Specific Improvem
*** 409,422 ****
         jump-oriented attacks. It can be enabled through the
         -mbranch-protection= option.
  
!   IA-32/x86-64
  
       * For both C and C++ the __bf16 type is supported on x86 systems with
         SSE2 and above enabled.
!      * Use real __bf16 type for AVX512BF16 intrinsics. Previously we use
!        __bfloat16 which is typedef of short. Now we introduced real __bf16
!        type to x86 psABI. Users need to adjust their AVX512BF16-related
!        source code when upgrading GCC12 to GCC13.
       * New ISA extension support for Intel AMX-COMPLEX was added.
         AMX-COMPLEX intrinsics are available via the -mamx-complex compiler
         switch.
--- 452,480 ----
         jump-oriented attacks. It can be enabled through the
         -mbranch-protection= option.
  
!   [95]AVR
! 
!      * Support for the following devices has been added in v13.3:
!           + ATtiny102, ATtiny104, ATtiny424, ATtiny426, ATtiny427,
!             ATtiny824, ATtiny826, ATtiny827, ATtiny1624, ATtiny1626,
!             ATtiny1627, ATtiny3224, ATtiny3226, ATtiny3227, AVR32DD14,
!             AVR32DD20, AVR32DD28, AVR32DD32, AVR32DU14, AVR32DU20,
!             AVR32DU28, AVR32DU32, AVR32EA28, AVR32EA32, AVR32EA48,
!             AVR64DD14, AVR64DD20, AVR64DD28, AVR64DD32, AVR64DU28,
!             AVR64DU32, AVR64EA28, AVR64EA32, AVR64EA48, ATA5787, ATA5835,
!             ATA5700M322.
!      * Support for the following devices has been added in v13.4:
!           + AVR32SD20, AVR32SD28, AVR32SD32, AVR64SD28, AVR64SD32,
!             AVR64SD48.
! 
!   [96]IA-32/x86-64
  
       * For both C and C++ the __bf16 type is supported on x86 systems with
         SSE2 and above enabled.
!      * Use this __bf16 type for AVX512BF16 intrinsics instead of
!        __bfloat16 which is typedef for short. __bf16 is now part of the
!        x86 psABI. Users need to adjust their AVX512BF16-related source
!        code when upgrading to GCC 13.
       * New ISA extension support for Intel AMX-COMPLEX was added.
         AMX-COMPLEX intrinsics are available via the -mamx-complex compiler
         switch.
*************** New Targets and Target Specific Improvem
*** 458,464 ****
         -march=znver4. The switch makes GCC consider using 512-bit vectors
         when auto-vectorizing.
  
!   LoongArch
  
       * New features
            + The new command-line option -mexplicit-relocs decides whether
--- 516,522 ----
         -march=znver4. The switch makes GCC consider using 512-bit vectors
         when auto-vectorizing.
  
!   [97]LoongArch
  
       * New features
            + The new command-line option -mexplicit-relocs decides whether
*************** New Targets and Target Specific Improvem
*** 468,474 ****
              time.
            + The new command-line option -mdirect-extern-access can be used
              to prevent accessing external symbols through GOT.
!           + The new variable attribute [77]model has been added.
       * Built-in functions
            + The rint and copysign mathematical builtins (and their float
              variants) are now implemented as inline LoongArch intrinsics.
--- 526,532 ----
              time.
            + The new command-line option -mdirect-extern-access can be used
              to prevent accessing external symbols through GOT.
!           + The new variable attribute [98]model has been added.
       * Built-in functions
            + The rint and copysign mathematical builtins (and their float
              variants) are now implemented as inline LoongArch intrinsics.
*************** New Targets and Target Specific Improvem
*** 484,501 ****
            + Address sanitizers other than HWASan and TSan are now
              supported on LoongArch.
  
!   NVPTX
  
!      * The default value for the [78]-march option can be now changed when
!        [79]building GCC using the [80]--with-arch= configure option. GCC's
!        target libraries are then build both with sm_30 and the specified
!        target architecture. If not specified, GCC defaults to sm_30.
  
!   RISC-V
  
!      * Support for vector intrinsics as specified in [81]version 0.11 of
         the RISC-V vector intrinsic specification, thanks Ju-Zhe Zhong from
!        [82]RiVAI for contributing most of implementation.
       * Support for the following standard extensions has been added:
            + Zawrs
            + Zbkb
--- 542,560 ----
            + Address sanitizers other than HWASan and TSan are now
              supported on LoongArch.
  
!   [99]NVPTX
  
!      * The default value for the [100]-march option can be now changed
!        when [101]building GCC using the [102]--with-arch= configure
!        option. GCC's target libraries are then build both with sm_30 and
!        the specified target architecture. If not specified, GCC defaults
!        to sm_30.
  
!   [103]RISC-V
  
!      * Support for vector intrinsics as specified in [104]version 0.11 of
         the RISC-V vector intrinsic specification, thanks Ju-Zhe Zhong from
!        [105]RiVAI for contributing most of implementation.
       * Support for the following standard extensions has been added:
            + Zawrs
            + Zbkb
*************** New Targets and Target Specific Improvem
*** 536,544 ****
         best-fit multi-lib candidate instead of requiring all possible
         reuse rules to be listed at build time.
  
! Operating Systems
  
!   Windows
  
       * The GNU threads library used by the win32 thread model has been
         reimplemented using direct Win32 API calls, except for the
--- 595,603 ----
         best-fit multi-lib candidate instead of requiring all possible
         reuse rules to be listed at build time.
  
! [106]Operating Systems
  
!   [107]Windows
  
       * The GNU threads library used by the win32 thread model has been
         reimplemented using direct Win32 API calls, except for the
*************** Operating Systems
*** 549,619 ****
         recommended to use a recent version of MinGW-W64 in conjunction
         with the win32 thread model.
  
! Improvements to Static Analyzer
  
       * The analyzer has gained 20 new warnings:
!           + [83]-Wanalyzer-allocation-size
!           + [84]-Wanalyzer-deref-before-check
!           + [85]-Wanalyzer-exposure-through-uninit-copy
            + Seven new warnings relating to misuse of file descriptors:
!                o [86]-Wanalyzer-fd-access-mode-mismatch
!                o [87]-Wanalyzer-fd-double-close
!                o [88]-Wanalyzer-fd-leak
!                o [89]-Wanalyzer-fd-phase-mismatch (e.g. calling accept on
                   a socket before calling listen on it)
!                o [90]-Wanalyzer-fd-type-mismatch (e.g. using a stream
                   socket operation on a datagram socket)
!                o [91]-Wanalyzer-fd-use-after-close
!                o [92]-Wanalyzer-fd-use-without-check
              along with special-casing handling of the behavior of open,
              close, creat, dup, dup2, dup3, pipe, pipe2, read, and write.
!           + [93]-Wanalyzer-imprecise-fp-arithmetic
!           + [94]-Wanalyzer-infinite-recursion
!           + [95]-Wanalyzer-jump-through-null
!           + [96]-Wanalyzer-out-of-bounds
!           + [97]-Wanalyzer-putenv-of-auto-var
!           + [98]-Wanalyzer-tainted-assertion
            + Four new warnings for misuses of <stdarg.h>:
!                o [99]-Wanalyzer-va-list-leak for complaining about missing
!                  va_end after a va_start or va_copy
!                o [100]-Wanalyzer-va-list-use-after-va-end for complaining
                   about va_arg or va_copy used on a va_list that's had
                   va_end called on it
!                o [101]-Wanalyzer-va-arg-type-mismatch for type-checking of
                   va_arg usage in interprocedural execution paths against
                   the types of the parameters that were actually passed to
                   the variadic call
!                o [102]-Wanalyzer-va-list-exhausted for complaining in
                   interprocedural execution paths if va_arg is used too
                   many times on a va_list
         along with numerous other improvements.
  
! Improvements for plugin authors
  
!      * GCC diagnostics can now be [103]associated with rules such as from
         coding standards documents, or specifications. Such rules have a
         code name and can have a URL, which GCC can print in text form or
!        capture in its [104]SARIF output when emitting diagnostics.
  
  Other significant improvements
  
! GCC 13.1
  
!    This is the [105]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 13.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! GCC 13.2
  
!    This is the [106]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 13.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! GCC 13.3
  
!    This is the [107]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 13.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
--- 608,678 ----
         recommended to use a recent version of MinGW-W64 in conjunction
         with the win32 thread model.
  
! [108]Improvements to Static Analyzer
  
       * The analyzer has gained 20 new warnings:
!           + [109]-Wanalyzer-allocation-size
!           + [110]-Wanalyzer-deref-before-check
!           + [111]-Wanalyzer-exposure-through-uninit-copy
            + Seven new warnings relating to misuse of file descriptors:
!                o [112]-Wanalyzer-fd-access-mode-mismatch
!                o [113]-Wanalyzer-fd-double-close
!                o [114]-Wanalyzer-fd-leak
!                o [115]-Wanalyzer-fd-phase-mismatch (e.g. calling accept on
                   a socket before calling listen on it)
!                o [116]-Wanalyzer-fd-type-mismatch (e.g. using a stream
                   socket operation on a datagram socket)
!                o [117]-Wanalyzer-fd-use-after-close
!                o [118]-Wanalyzer-fd-use-without-check
              along with special-casing handling of the behavior of open,
              close, creat, dup, dup2, dup3, pipe, pipe2, read, and write.
!           + [119]-Wanalyzer-imprecise-fp-arithmetic
!           + [120]-Wanalyzer-infinite-recursion
!           + [121]-Wanalyzer-jump-through-null
!           + [122]-Wanalyzer-out-of-bounds
!           + [123]-Wanalyzer-putenv-of-auto-var
!           + [124]-Wanalyzer-tainted-assertion
            + Four new warnings for misuses of <stdarg.h>:
!                o [125]-Wanalyzer-va-list-leak for complaining about
!                  missing va_end after a va_start or va_copy
!                o [126]-Wanalyzer-va-list-use-after-va-end for complaining
                   about va_arg or va_copy used on a va_list that's had
                   va_end called on it
!                o [127]-Wanalyzer-va-arg-type-mismatch for type-checking of
                   va_arg usage in interprocedural execution paths against
                   the types of the parameters that were actually passed to
                   the variadic call
!                o [128]-Wanalyzer-va-list-exhausted for complaining in
                   interprocedural execution paths if va_arg is used too
                   many times on a va_list
         along with numerous other improvements.
  
! [129]Improvements for plugin authors
  
!      * GCC diagnostics can now be [130]associated with rules such as from
         coding standards documents, or specifications. Such rules have a
         code name and can have a URL, which GCC can print in text form or
!        capture in its [131]SARIF output when emitting diagnostics.
  
  Other significant improvements
  
! [132]GCC 13.1
  
!    This is the [133]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 13.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [134]GCC 13.2
  
!    This is the [135]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 13.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [136]GCC 13.3
  
!    This is the [137]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 13.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
*************** GCC 13.3
*** 628,647 ****
         libstdc++_libbacktrace.a library. This means that -lstdc++exp is
         the only library needed for all experimental libstdc++ features.
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [108]GCC manuals. If that fails, the
!     [109]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [110]gcc@gcc.gnu.org. All of [111]our lists have public
      archives.
  
!    Copyright (C) [112]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [113]maintained by the GCC team. Last modified
!    2024-05-21.
  
  References
  
--- 687,713 ----
         libstdc++_libbacktrace.a library. This means that -lstdc++exp is
         the only library needed for all experimental libstdc++ features.
  
+ [138]GCC 13.4
+ 
+    This is the [139]list of problem reports (PRs) from GCC's bug tracking
+    system that are known to be fixed in the 13.4 release. This list might
+    not be complete (that is, it is possible that some PRs that have been
+    fixed are not listed here).
+ 
  
      For questions related to the use of GCC, please consult these web
!     pages and the [140]GCC manuals. If that fails, the
!     [141]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [142]gcc@gcc.gnu.org. All of [143]our lists have public
      archives.
  
!    Copyright (C) [144]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [145]maintained by the GCC team. Last modified
!    2025-06-05.
  
  References
  
*************** References
*** 653,784 ****
     6. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html
     7. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/ARM-iWMMXt-Built-in-Functions.html
     8. https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic
!    9. https://gcc.gnu.org/projects/gomp/
!   10. http://memkind.github.io/memkind/
!   11. https://sarifweb.azurewebsites.net/
!   12. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html
!   13. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
!   14. https://gcc.gnu.org/onlinedocs/gcc/Freestanding-Environments.html
!   15. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Warning-Options.html#index-Wxor-used-as-pow
!   16. https://gcc.gnu.org/PR90885
!   17. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Common-Function-Attributes.html#index-fd_005farg-function-attribute
!   18. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Common-Function-Attributes.html#index-fd_005farg_005fread-function-attribute
!   19. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Common-Function-Attributes.html#index-fd_005farg_005fwrite-function-attribute
!   20. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html
!   21. https://wg21.link/p1774r8
!   22. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Statement-Attributes.html#index-assume-statement-attribute
!   23. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/C-Dialect-Options.html#index-fstrict-flex-arrays
!   24. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3042.htm
!   25. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2963.htm
!   26. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2975.pdf
!   27. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3007.htm
!   28. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3018.htm
!   29. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3038.htm
!   30. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2764.pdf
!   31. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Warning-Options.html#index-Wformat
!   32. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2836.pdf
!   33. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Warning-Options.html#index-Wenum-int-mismatch
!   34. https://gcc.gnu.org/PR105131
!   35. https://wg21.link/p2324
!   36. https://gcc.gnu.org/PR103539
!   37. https://wg21.link/p2255
!   38. https://gcc.gnu.org/PR104477
!   39. https://wg21.link/p2327
!   40. https://wg21.link/p2437
!   41. https://gcc.gnu.org/PR106646
!   42. https://wg21.link/p2290
!   43. https://gcc.gnu.org/PR106645
!   44. https://wg21.link/p2071
!   45. https://gcc.gnu.org/PR106648
!   46. https://wg21.link/p2513
!   47. https://gcc.gnu.org/PR106656
!   48. https://wg21.link/p1169r4
!   49. https://gcc.gnu.org/PR106651
!   50. https://wg21.link/p2266r3
!   51. https://gcc.gnu.org/PR101165
!   52. https://wg21.link/p2468r2
!   53. https://gcc.gnu.org/PR106644
!   54. https://wg21.link/p2362r3
!   55. https://gcc.gnu.org/PR106647
!   56. https://wg21.link/p2448r2
!   57. https://gcc.gnu.org/PR106649
!   58. https://wg21.link/p1467r9
!   59. https://gcc.gnu.org/PR106652
!   60. https://wg21.link/p1774r8
!   61. https://gcc.gnu.org/PR106654
!   62. https://wg21.link/p2295r6
!   63. https://gcc.gnu.org/PR106655
!   64. https://wg21.link/p2589r1
!   65. https://gcc.gnu.org/PR107684
!   66. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Warning-Options.html#index-Wself-move
!   67. https://gcc.gnu.org/PR81159
!   68. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wdangling-reference
!   69. https://gcc.gnu.org/PR106393
!   70. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wpessimizing-move
!   71. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wredundant-move
!   72. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Link-Options.html#index-nostdlib_002b_002b
!   73. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p1642r11.html
!   74. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gm2/Compiler-options.html
!   75. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/AMD-GCN-Options.html
!   76. https://gcc.gnu.org/install/specific.html#amdgcn-x-amdhsa
!   77. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/LoongArch-Variable-Attributes.html#LoongArch-Variable-Attributes
!   78. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Nvidia-PTX-Options.html
!   79. https://gcc.gnu.org/install/
!   80. https://gcc.gnu.org/install/specific.html#nvptx-x-none
!   81. https://github.com/riscv-non-isa/rvv-intrinsic-doc/tree/v0.11.x
!   82. https://rivai-ic.com.cn/
!   83. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-allocation-size
!   84. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-deref-before-check
!   85. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-exposure-through-uninit-copy
!   86. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-access-mode-mismatch
!   87. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-double-close
!   88. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-leak
!   89. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-phase-mismatch
!   90. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-type-mismatch
!   91. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-use-after-close
!   92. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-use-without-check
!   93. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-imprecise-fp-arithmetic
!   94. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-infinite-recursion
!   95. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-jump-through-null
!   96. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-out-of-bounds
!   97. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-putenv-of-auto-var
!   98. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-assertion
!   99. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-va-list-leak
!  100. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-va-list-use-after-va-end
!  101. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-va-arg-type-mismatch
!  102. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-va-list-exhausted
!  103. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=0b14f590e3e9d95b8211b77d992589d5ab4c25f0
!  104. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
!  105. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=13.0
!  106. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=13.2
!  107. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=13.3
!  108. https://gcc.gnu.org/onlinedocs/
!  109. mailto:gcc-help@gcc.gnu.org
!  110. mailto:gcc@gcc.gnu.org
!  111. https://gcc.gnu.org/lists.html
!  112. https://www.fsf.org/
!  113. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-12/index.html
                               GCC 12 Release Series
  
!    May 8, 2023
  
!    The GCC developers are pleased to announce the release of GCC 12.3.
  
     This release is a bug-fix release, containing fixes for regressions in
!    GCC 12.2 relative to previous releases of GCC.
  
  Release History
  
     GCC 12.3
!           May 8, 2023 ([1]changes, [2]documentation)
  
     GCC 12.2
!           Aug 19, 2022 ([3]changes, [4]documentation)
  
     GCC 12.1
!           May 6, 2022 ([5]changes, [6]documentation)
  
  References and Acknowledgements
  
--- 719,885 ----
     6. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html
     7. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/ARM-iWMMXt-Built-in-Functions.html
     8. https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic
!    9. https://gcc.gnu.org/gcc-13/changes.html#general
!   10. https://gcc.gnu.org/projects/gomp/
!   11. http://memkind.github.io/memkind/
!   12. https://sarifweb.azurewebsites.net/
!   13. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html
!   14. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
!   15. https://gcc.gnu.org/onlinedocs/gcc/Freestanding-Environments.html
!   16. https://gcc.gnu.org/gcc-13/changes.html#languages
!   17. https://gcc.gnu.org/gcc-13/changes.html#ada
!   18. https://gcc.gnu.org/gcc-13/changes.html#c-family
!   19. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Warning-Options.html#index-Wxor-used-as-pow
!   20. https://gcc.gnu.org/PR90885
!   21. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Common-Function-Attributes.html#index-fd_005farg-function-attribute
!   22. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Common-Function-Attributes.html#index-fd_005farg_005fread-function-attribute
!   23. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Common-Function-Attributes.html#index-fd_005farg_005fwrite-function-attribute
!   24. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html
!   25. https://wg21.link/p1774r8
!   26. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Statement-Attributes.html#index-assume-statement-attribute
!   27. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/C-Dialect-Options.html#index-fstrict-flex-arrays
!   28. https://gcc.gnu.org/gcc-13/changes.html#c
!   29. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3042.htm
!   30. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2963.htm
!   31. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2975.pdf
!   32. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3007.htm
!   33. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3018.htm
!   34. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3038.htm
!   35. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2764.pdf
!   36. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Warning-Options.html#index-Wformat
!   37. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2836.pdf
!   38. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Warning-Options.html#index-Wenum-int-mismatch
!   39. https://gcc.gnu.org/PR105131
!   40. https://gcc.gnu.org/gcc-13/changes.html#cxx
!   41. https://wg21.link/p2324
!   42. https://gcc.gnu.org/PR103539
!   43. https://wg21.link/p2255
!   44. https://gcc.gnu.org/PR104477
!   45. https://wg21.link/p2327
!   46. https://wg21.link/p2437
!   47. https://gcc.gnu.org/PR106646
!   48. https://wg21.link/p2290
!   49. https://gcc.gnu.org/PR106645
!   50. https://wg21.link/p2071
!   51. https://gcc.gnu.org/PR106648
!   52. https://wg21.link/p2513
!   53. https://gcc.gnu.org/PR106656
!   54. https://wg21.link/p1169r4
!   55. https://gcc.gnu.org/PR106651
!   56. https://wg21.link/p2266r3
!   57. https://gcc.gnu.org/PR101165
!   58. https://wg21.link/p2468r2
!   59. https://gcc.gnu.org/PR106644
!   60. https://wg21.link/p2362r3
!   61. https://gcc.gnu.org/PR106647
!   62. https://wg21.link/p2448r2
!   63. https://gcc.gnu.org/PR106649
!   64. https://wg21.link/p1467r9
!   65. https://gcc.gnu.org/PR106652
!   66. https://wg21.link/p1774r8
!   67. https://gcc.gnu.org/PR106654
!   68. https://wg21.link/p2295r6
!   69. https://gcc.gnu.org/PR106655
!   70. https://wg21.link/p2589r1
!   71. https://gcc.gnu.org/PR107684
!   72. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Warning-Options.html#index-Wself-move
!   73. https://gcc.gnu.org/PR81159
!   74. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wdangling-reference
!   75. https://gcc.gnu.org/PR106393
!   76. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wpessimizing-move
!   77. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wredundant-move
!   78. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Link-Options.html#index-nostdlib_002b_002b
!   79. https://gcc.gnu.org/gcc-13/changes.html#libstdcxx
!   80. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p1642r11.html
!   81. https://gcc.gnu.org/gcc-13/changes.html#d
!   82. https://dlang.org/changelog/2.103.1.html
!   83. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gdc/Warnings.html#index-Wno-builtin-declaration-mismatch
!   84. https://gcc.gnu.org/onlinedocs/gcc-13.2.0/gdc/Warnings.html#index-Wmismatched-special-enum
!   85. https://gcc.gnu.org/gcc-13/changes.html#fortran
!   86. https://gcc.gnu.org/gcc-13/changes.html#go
!   87. https://gcc.gnu.org/gcc-13/changes.html#modula2
!   88. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gm2/Compiler-options.html
!   89. https://gcc.gnu.org/gcc-13/changes.html#targets
!   90. https://gcc.gnu.org/gcc-13/changes.html#aarch64
!   91. https://gcc.gnu.org/gcc-13/changes.html#amdgcn
!   92. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/AMD-GCN-Options.html
!   93. https://gcc.gnu.org/install/specific.html#amdgcn-x-amdhsa
!   94. https://gcc.gnu.org/gcc-13/changes.html#arm
!   95. https://gcc.gnu.org/gcc-13/changes.html#avr
!   96. https://gcc.gnu.org/gcc-13/changes.html#x86
!   97. https://gcc.gnu.org/gcc-13/changes.html#loongarch
!   98. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/LoongArch-Variable-Attributes.html#LoongArch-Variable-Attributes
!   99. https://gcc.gnu.org/gcc-13/changes.html#nvptx
!  100. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Nvidia-PTX-Options.html
!  101. https://gcc.gnu.org/install/
!  102. https://gcc.gnu.org/install/specific.html#nvptx-x-none
!  103. https://gcc.gnu.org/gcc-13/changes.html#riscv
!  104. https://github.com/riscv-non-isa/rvv-intrinsic-doc/tree/v0.11.x
!  105. https://rivai-ic.com.cn/
!  106. https://gcc.gnu.org/gcc-13/changes.html#os
!  107. https://gcc.gnu.org/gcc-13/changes.html#windows
!  108. https://gcc.gnu.org/gcc-13/changes.html#analyzer
!  109. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-allocation-size
!  110. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-deref-before-check
!  111. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-exposure-through-uninit-copy
!  112. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-access-mode-mismatch
!  113. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-double-close
!  114. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-leak
!  115. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-phase-mismatch
!  116. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-type-mismatch
!  117. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-use-after-close
!  118. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-use-without-check
!  119. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-imprecise-fp-arithmetic
!  120. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-infinite-recursion
!  121. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-jump-through-null
!  122. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-out-of-bounds
!  123. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-putenv-of-auto-var
!  124. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-assertion
!  125. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-va-list-leak
!  126. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-va-list-use-after-va-end
!  127. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-va-arg-type-mismatch
!  128. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-va-list-exhausted
!  129. https://gcc.gnu.org/gcc-13/changes.html#plugins
!  130. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=0b14f590e3e9d95b8211b77d992589d5ab4c25f0
!  131. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
!  132. https://gcc.gnu.org/gcc-13/changes.html#13.1
!  133. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=13.0
!  134. https://gcc.gnu.org/gcc-13/changes.html#13.2
!  135. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=13.2
!  136. https://gcc.gnu.org/gcc-13/changes.html#13.3
!  137. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=13.3
!  138. https://gcc.gnu.org/gcc-13/changes.html#13.4
!  139. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=13.4
!  140. https://gcc.gnu.org/onlinedocs/
!  141. mailto:gcc-help@gcc.gnu.org
!  142. mailto:gcc@gcc.gnu.org
!  143. https://gcc.gnu.org/lists.html
!  144. https://www.fsf.org/
!  145. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-12/index.html
                               GCC 12 Release Series
  
!    Jun 20, 2024
  
!    The GCC developers are pleased to announce the release of GCC 12.4.
  
     This release is a bug-fix release, containing fixes for regressions in
!    GCC 12.3 relative to previous releases of GCC.
  
  Release History
  
+    GCC 12.4
+           Jun 20, 2024 ([1]changes, [2]documentation)
+ 
     GCC 12.3
!           May 8, 2023 ([3]changes, [4]documentation)
  
     GCC 12.2
!           Aug 19, 2022 ([5]changes, [6]documentation)
  
     GCC 12.1
!           May 6, 2022 ([7]changes, [8]documentation)
  
  References and Acknowledgements
  
*************** References and Acknowledgements
*** 788,836 ****
  
     The GCC developers would like to thank the numerous people that have
     contributed new features, improvements, bug fixes, and other changes as
!    well as test results to GCC. This [7]amazing group of volunteers is
     what makes GCC successful.
  
!    For additional information about GCC please refer to the [8]GCC project
!    web site or contact the [9]GCC development mailing list.
  
!    To obtain GCC please use [10]our mirror sites or [11]our version
     control system.
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [12]GCC manuals. If that fails, the
!     [13]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [14]gcc@gcc.gnu.org. All of [15]our lists have public
      archives.
  
!    Copyright (C) [16]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [17]maintained by the GCC team. Last modified
!    2023-10-15.
  
  References
  
     1. https://gcc.gnu.org/gcc-12/changes.html
!    2. http://gcc.gnu.org/onlinedocs/12.3.0/
     3. https://gcc.gnu.org/gcc-12/changes.html
!    4. http://gcc.gnu.org/onlinedocs/12.2.0/
     5. https://gcc.gnu.org/gcc-12/changes.html
!    6. http://gcc.gnu.org/onlinedocs/12.1.0/
!    7. http://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Contributors.html
!    8. https://gcc.gnu.org/index.html
!    9. mailto:gcc@gcc.gnu.org
!   10. https://gcc.gnu.org/mirrors.html
!   11. https://gcc.gnu.org/git.html
!   12. https://gcc.gnu.org/onlinedocs/
!   13. mailto:gcc-help@gcc.gnu.org
!   14. mailto:gcc@gcc.gnu.org
!   15. https://gcc.gnu.org/lists.html
!   16. https://www.fsf.org/
!   17. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-12/changes.html
                               GCC 12 Release Series
--- 889,939 ----
  
     The GCC developers would like to thank the numerous people that have
     contributed new features, improvements, bug fixes, and other changes as
!    well as test results to GCC. This [9]amazing group of volunteers is
     what makes GCC successful.
  
!    For additional information about GCC please refer to the [10]GCC
!    project web site or contact the [11]GCC development mailing list.
  
!    To obtain GCC please use [12]our mirror sites or [13]our version
     control system.
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [14]GCC manuals. If that fails, the
!     [15]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [16]gcc@gcc.gnu.org. All of [17]our lists have public
      archives.
  
!    Copyright (C) [18]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [19]maintained by the GCC team. Last modified
!    2024-06-20.
  
  References
  
     1. https://gcc.gnu.org/gcc-12/changes.html
!    2. https://gcc.gnu.org/onlinedocs/12.4.0/
     3. https://gcc.gnu.org/gcc-12/changes.html
!    4. https://gcc.gnu.org/onlinedocs/12.3.0/
     5. https://gcc.gnu.org/gcc-12/changes.html
!    6. https://gcc.gnu.org/onlinedocs/12.2.0/
!    7. https://gcc.gnu.org/gcc-12/changes.html
!    8. https://gcc.gnu.org/onlinedocs/12.1.0/
!    9. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Contributors.html
!   10. https://gcc.gnu.org/index.html
!   11. mailto:gcc@gcc.gnu.org
!   12. https://gcc.gnu.org/mirrors.html
!   13. https://gcc.gnu.org/git.html
!   14. https://gcc.gnu.org/onlinedocs/
!   15. mailto:gcc-help@gcc.gnu.org
!   16. mailto:gcc@gcc.gnu.org
!   17. https://gcc.gnu.org/lists.html
!   18. https://www.fsf.org/
!   19. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-12/changes.html
                               GCC 12 Release Series
*************** Caveats
*** 877,889 ****
         supports the bitmap, mt, and pool arguments. Those configurations
         had been broken for some time.
       * D: Building and bootstrapping GDC, the D compiler, now requires a
!        working GDC compiler (GCC version 9.1 or later) and D runtime
!        library, libphobos, as the D front end is written in D. On some
!        targets, libphobos isn't enabled by default, but compiles and works
!        if --enable-libphobos is used. Other targets may require a more
!        recent minimum version of GCC to bootstrap. Specifics are
!        documented for affected targets in the [6]manual for installing
!        GCC.
       * Fortran: OpenMP code using the omp_lib.h include file can no longer
         be compiled with -std=f95 but now requires at least -std=f2003.
         Alternatively, use the omp_lib module, which still supports
--- 980,991 ----
         supports the bitmap, mt, and pool arguments. Those configurations
         had been broken for some time.
       * D: Building and bootstrapping GDC, the D compiler, now requires a
!        working GDC (GCC version 9.1 or later) and D runtime library,
!        libphobos, as the D front end is written in D. On some targets,
!        libphobos isn't enabled by default, but compiles and works if
!        --enable-libphobos is used. Other targets may require a more recent
!        version of GCC to bootstrap. Specifics are documented for affected
!        targets in the [6]Installing GCC manual.
       * Fortran: OpenMP code using the omp_lib.h include file can no longer
         be compiled with -std=f95 but now requires at least -std=f2003.
         Alternatively, use the omp_lib module, which still supports
*************** Caveats
*** 907,927 ****
       * The optimization level -Ofast now implies
         -fno-semantic-interposition.
  
! General Improvements
  
       * Vectorization is enabled at -O2 which is now equivalent to what
         would have been -O2 -ftree-vectorize -fvect-cost-model=very-cheap
         in the past. Note that the default vectorizer cost model has been
         changed; it used to behave as if -fvect-cost-model=cheap had been
         specified.
!      * GCC now supports the [7]ShadowCallStack sanitizer, which can be
         enabled using the command-line option
!        [8]-fsanitize=shadow-call-stack. This sanitizer currently only
         works on AArch64 targets and it requires an environment in which
         all code has been compiled with -ffixed-r18. Its primary initial
         user is the Linux kernel.
  
! New Languages and Language specific improvements
  
       * OpenMP
            + OpenMP 5.0 support has been extended: The close map modifier
--- 1009,1029 ----
       * The optimization level -Ofast now implies
         -fno-semantic-interposition.
  
! [7]General Improvements
  
       * Vectorization is enabled at -O2 which is now equivalent to what
         would have been -O2 -ftree-vectorize -fvect-cost-model=very-cheap
         in the past. Note that the default vectorizer cost model has been
         changed; it used to behave as if -fvect-cost-model=cheap had been
         specified.
!      * GCC now supports the [8]ShadowCallStack sanitizer, which can be
         enabled using the command-line option
!        [9]-fsanitize=shadow-call-stack. This sanitizer currently only
         works on AArch64 targets and it requires an environment in which
         all code has been compiled with -ffixed-r18. Its primary initial
         user is the Linux kernel.
  
! [10]New Languages and Language specific improvements
  
       * OpenMP
            + OpenMP 5.0 support has been extended: The close map modifier
*************** New Languages and Language specific impr
*** 946,972 ****
              the memory-allocation routines added for Fortran and extended
              for C/C++ in OpenMP 5.1. In Fortran code, strictly structured
              blocks can be used.
!           + The [9]OpenMP Implementation Status can be found in the
              libgomp manual.
!      * Version 2.6 of the [10]OpenACC specification continues to be
         maintained and improved in the C, C++ and Fortran compilers. See
!        the [11]implementation status section on the OpenACC wiki page and
!        the [12]run-time library documentation for further information. In
         addition to general performance tuning and bug fixing, new features
         include:
!           + OpenACC worker parallelism for [13]AMD GPUs (already for a
!             long time supported for [14]Nvidia GPUs).
            + Data privatization/sharing at the OpenACC gang level.
            + Considerable improvements for the experimental OpenACC
!             'kernels' decomposition ([15]--param
              openacc-kernels=decompose).
!           + A new warning flag [16]-Wopenacc-parallelism to warn about
              potentially suboptimal choices related to OpenACC parallelism.
       * The offload target code generation for OpenMP and OpenACC can now
!        be better adjusted using the new [17]-foffload-options= flag and
!        the pre-existing but now documented [18]-foffload= flag.
  
!   Ada
  
       * Ada 2022
            + Added the -gnat2022 flag to indicate strict Ada 2022
--- 1048,1074 ----
              the memory-allocation routines added for Fortran and extended
              for C/C++ in OpenMP 5.1. In Fortran code, strictly structured
              blocks can be used.
!           + The [11]OpenMP Implementation Status can be found in the
              libgomp manual.
!      * Version 2.6 of the [12]OpenACC specification continues to be
         maintained and improved in the C, C++ and Fortran compilers. See
!        the [13]implementation status section on the OpenACC wiki page and
!        the [14]run-time library documentation for further information. In
         addition to general performance tuning and bug fixing, new features
         include:
!           + OpenACC worker parallelism for [15]AMD GPUs (already for a
!             long time supported for [16]Nvidia GPUs).
            + Data privatization/sharing at the OpenACC gang level.
            + Considerable improvements for the experimental OpenACC
!             'kernels' decomposition ([17]--param
              openacc-kernels=decompose).
!           + A new warning flag [18]-Wopenacc-parallelism to warn about
              potentially suboptimal choices related to OpenACC parallelism.
       * The offload target code generation for OpenMP and OpenACC can now
!        be better adjusted using the new [19]-foffload-options= flag and
!        the pre-existing but now documented [20]-foffload= flag.
  
!   [21]Ada
  
       * Ada 2022
            + Added the -gnat2022 flag to indicate strict Ada 2022
*************** function Multiply (S1, S2 : Sign) return
*** 1019,1027 ****
         improved. Memory pools have also seen some minor enhancements.
       * Improvements to embedded-RTOS targets such as RTEMS, VxWorks and
         QNX. Older targets were removed or cleaned.
!      * Added some [19]hardening features.
  
!   C family
  
       * Support for __builtin_shufflevector compatible with the clang
         language extension was added.
--- 1121,1129 ----
         improved. Memory pools have also seen some minor enhancements.
       * Improvements to embedded-RTOS targets such as RTEMS, VxWorks and
         QNX. Older targets were removed or cleaned.
!      * Added some [22]hardening features.
  
!   [23]C family
  
       * Support for __builtin_shufflevector compatible with the clang
         language extension was added.
*************** function Multiply (S1, S2 : Sign) return
*** 1031,1050 ****
       * Support for __builtin_dynamic_object_size compatible with the clang
         language extension was added.
       * New warnings:
!           + [20]-Wbidi-chars warns about potentially misleading UTF-8
              bidirectional control characters. The default is
!             -Wbidi-chars=unpaired ([21]PR103026)
!           + [22]-Warray-compare warns about comparisons between two
!             operands of array type ([23]PR97573)
       * Enhancements to existing warnings:
!           + [24]-Wattributes has been extended so that it's possible to
              use -Wno-attributes=ns::attr or -Wno-attributes=ns:: to
              suppress warnings about unknown scoped attributes (in C++11
              and C2X). Similarly, #pragma GCC diagnostic ignored_attributes
              "vendor::attr" can be used to achieve the same effect
!             ([25]PR101940)
  
!   C
  
       * Some new features from the upcoming C2X revision of the ISO C
         standard are supported with -std=c2x and -std=gnu2x. Some of these
--- 1133,1152 ----
       * Support for __builtin_dynamic_object_size compatible with the clang
         language extension was added.
       * New warnings:
!           + [24]-Wbidi-chars warns about potentially misleading UTF-8
              bidirectional control characters. The default is
!             -Wbidi-chars=unpaired ([25]PR103026)
!           + [26]-Warray-compare warns about comparisons between two
!             operands of array type ([27]PR97573)
       * Enhancements to existing warnings:
!           + [28]-Wattributes has been extended so that it's possible to
              use -Wno-attributes=ns::attr or -Wno-attributes=ns:: to
              suppress warnings about unknown scoped attributes (in C++11
              and C2X). Similarly, #pragma GCC diagnostic ignored_attributes
              "vendor::attr" can be used to achieve the same effect
!             ([29]PR101940)
  
!   [30]C
  
       * Some new features from the upcoming C2X revision of the ISO C
         standard are supported with -std=c2x and -std=gnu2x. Some of these
*************** function Multiply (S1, S2 : Sign) return
*** 1056,1096 ****
            + Digit separators (as in C++) are supported for C2X.
            + The #elifdef and #elifndef preprocessing directives are now
              supported.
!           + The printf and scanf format checking with [26]-Wformat now
              supports the %b format specified by C2X for binary integers,
              and the %B format recommended by C2X for printf.
  
!   C++
  
       * Several C++23 features have been implemented:
!           + [27]P1938R3, if consteval ([28]PR100974)
!           + [29]P0849R8, auto(x): decay-copy in the language
!             ([30]PR103049)
!           + [31]P2242R3, Non-literal variables (and labels and gotos) in
!             constexpr functions ([32]PR102612)
!           + [33]P2334R1, Support for preprocessing directives elifdef and
!             elifndef ([34]PR102616)
!           + [35]P2360R0, Extend init-statement to allow alias-declaration
!             ([36]PR102617)
!           + [37]P2128R6, Multidimensional subscript operator
!           + [38]DR 2397, auto specifier for pointers and references to
!             arrays ([39]PR100975)
       * Several C++ Defect Reports have been resolved, e.g.:
!           + [40]DR 960, Covariant functions and lvalue/rvalue references
!           + [41]DR 1227, Mixing immediate and non-immediate contexts in
              deduction failure
!           + [42]DR 1315, Restrictions on non-type template arguments in
              partial specializations
!           + [43]DR 2082, Referring to parameters in unevaluated operands
              of default arguments
!           + [44]DR 2351, void{}
!           + [45]DR 2374, Overly permissive specification of enum
              direct-list-initialization
!           + [46]DR 2397, auto specifier for pointers and references to
              arrays
!           + [47]DR 2446, Questionable type-dependency of concept-ids
       * New command-line option -fimplicit-constexpr can be used to make
!        inline functions implicitly constexpr ([48]git)
       * New command-line option -ffold-simple-inlines can be used to fold
         calls to certain trivial inline functions (currently std::move,
         std::forward, std::addressof and std::as_const). In contrast to
--- 1158,1198 ----
            + Digit separators (as in C++) are supported for C2X.
            + The #elifdef and #elifndef preprocessing directives are now
              supported.
!           + The printf and scanf format checking with [31]-Wformat now
              supports the %b format specified by C2X for binary integers,
              and the %B format recommended by C2X for printf.
  
!   [32]C++
  
       * Several C++23 features have been implemented:
!           + [33]P1938R3, if consteval ([34]PR100974)
!           + [35]P0849R8, auto(x): decay-copy in the language
!             ([36]PR103049)
!           + [37]P2242R3, Non-literal variables (and labels and gotos) in
!             constexpr functions ([38]PR102612)
!           + [39]P2334R1, Support for preprocessing directives elifdef and
!             elifndef ([40]PR102616)
!           + [41]P2360R0, Extend init-statement to allow alias-declaration
!             ([42]PR102617)
!           + [43]P2128R6, Multidimensional subscript operator
!           + [44]DR 2397, auto specifier for pointers and references to
!             arrays ([45]PR100975)
       * Several C++ Defect Reports have been resolved, e.g.:
!           + [46]DR 960, Covariant functions and lvalue/rvalue references
!           + [47]DR 1227, Mixing immediate and non-immediate contexts in
              deduction failure
!           + [48]DR 1315, Restrictions on non-type template arguments in
              partial specializations
!           + [49]DR 2082, Referring to parameters in unevaluated operands
              of default arguments
!           + [50]DR 2351, void{}
!           + [51]DR 2374, Overly permissive specification of enum
              direct-list-initialization
!           + [52]DR 2397, auto specifier for pointers and references to
              arrays
!           + [53]DR 2446, Questionable type-dependency of concept-ids
       * New command-line option -fimplicit-constexpr can be used to make
!        inline functions implicitly constexpr ([54]git)
       * New command-line option -ffold-simple-inlines can be used to fold
         calls to certain trivial inline functions (currently std::move,
         std::forward, std::addressof and std::as_const). In contrast to
*************** function Multiply (S1, S2 : Sign) return
*** 1100,1159 ****
         the fundamental operations from which they're defined (e.g.
         std::move versus static_cast). This flag is enabled by default when
         -fno-inline is not active.
!      * Deduction guides can be declared at class scope ([49]PR79501)
!      * [50]-Wuninitialized warns about using uninitialized variables in
!        member initializer lists ([51]PR19808)
!      * [52]-Wint-in-bool-context is now disabled when instantiating a
!        template ([53]git)
       * Stricter checking of attributes on friend declarations: if a friend
         declaration has an attribute, that declaration must be a
         definition. Moreover, a C++11 attribute cannot appear in the middle
!        of the decl-specifier-seq. ([54]PR99032)
       * New warning options for C++ language mismatches:
         -Wc++11-extensions, -Wc++14-extensions, -Wc++17-extensions,
         -Wc++20-extensions, and -Wc++23-extensions. They are enabled by
         default and can be used to control existing pedwarns about
         occurrences of new C++ constructs in code using an old C++ standard
         dialect.
!      * New warning [55]-Wmissing-requires warns about missing requires
!        ([56]git)
       * The existing std::is_constant_evaluated in if warning was extended
!        to warn in more cases ([57]PR100995)
!      * [58]-Waddress has been enhanced so that it now warns about, for
         instance, comparing the address of a nonstatic member function to
!        null ([59]PR102103)
       * Errors about narrowing are no longer hidden if they occur in system
         headers
!      * Ordered comparison of null pointers is now rejected ([60]PR99701)
!      * Anonymous structs with bases are now rejected ([61]git)
       * The compiler rejects taking the address of an immediate member
!        function ([62]PR102753)
       * The compiler has support for C++20
         __cpp_lib_is_pointer_interconvertible and
         __cpp_lib_is_layout_compatible to help the C++ library implement
!        [63]P0466, Layout-compatibility and Pointer-interconvertibility
!        Traits ([64]PR101539)
       * Memory usage of constraint subsumption has been improved
!        ([65]PR100828)
       * constinit thread_local variables are optimized better
!        ([66]PR101786)
       * Support for C++17 std::hardware_destructive_interference_size was
!        added, along with the [67]-Winterference-size warning ([68]git)
!      * Many bugs in the CTAD handling have been fixed ([69]PR101344,
!        [70]PR101883, [71]PR89062, [72]PR101233, [73]PR88252, [74]PR86439,
!        [75]PR98832, [76]PR102933 ...)
       * Two-stage name lookup for dependent operator expressions has been
!        corrected ([77]PR51577)
       * Several issues with constrained variable templates have been fixed
!        ([78]PR98486)
       * The compiler performs less instantiating when doing speculative
!        constant evaluation ([79]git)
       * Various diagnostic improvements; e.g., a more precise caret
         location for pointer-to-member expressions
       * The new -fconstexpr-fp-except flag allows IEC559 floating point
         exceptions in constant-expressions.
  
!     Runtime Library (libstdc++)
  
       * Improved experimental C++20 support, including:
            + std::vector, std::basic_string, std::optional, and
--- 1202,1261 ----
         the fundamental operations from which they're defined (e.g.
         std::move versus static_cast). This flag is enabled by default when
         -fno-inline is not active.
!      * Deduction guides can be declared at class scope ([55]PR79501)
!      * [56]-Wuninitialized warns about using uninitialized variables in
!        member initializer lists ([57]PR19808)
!      * [58]-Wint-in-bool-context is now disabled when instantiating a
!        template ([59]git)
       * Stricter checking of attributes on friend declarations: if a friend
         declaration has an attribute, that declaration must be a
         definition. Moreover, a C++11 attribute cannot appear in the middle
!        of the decl-specifier-seq. ([60]PR99032)
       * New warning options for C++ language mismatches:
         -Wc++11-extensions, -Wc++14-extensions, -Wc++17-extensions,
         -Wc++20-extensions, and -Wc++23-extensions. They are enabled by
         default and can be used to control existing pedwarns about
         occurrences of new C++ constructs in code using an old C++ standard
         dialect.
!      * New warning [61]-Wmissing-requires warns about missing requires
!        ([62]git)
       * The existing std::is_constant_evaluated in if warning was extended
!        to warn in more cases ([63]PR100995)
!      * [64]-Waddress has been enhanced so that it now warns about, for
         instance, comparing the address of a nonstatic member function to
!        null ([65]PR102103)
       * Errors about narrowing are no longer hidden if they occur in system
         headers
!      * Ordered comparison of null pointers is now rejected ([66]PR99701)
!      * Anonymous structs with bases are now rejected ([67]git)
       * The compiler rejects taking the address of an immediate member
!        function ([68]PR102753)
       * The compiler has support for C++20
         __cpp_lib_is_pointer_interconvertible and
         __cpp_lib_is_layout_compatible to help the C++ library implement
!        [69]P0466, Layout-compatibility and Pointer-interconvertibility
!        Traits ([70]PR101539)
       * Memory usage of constraint subsumption has been improved
!        ([71]PR100828)
       * constinit thread_local variables are optimized better
!        ([72]PR101786)
       * Support for C++17 std::hardware_destructive_interference_size was
!        added, along with the [73]-Winterference-size warning ([74]git)
!      * Many bugs in the CTAD handling have been fixed ([75]PR101344,
!        [76]PR101883, [77]PR89062, [78]PR101233, [79]PR88252, [80]PR86439,
!        [81]PR98832, [82]PR102933 ...)
       * Two-stage name lookup for dependent operator expressions has been
!        corrected ([83]PR51577)
       * Several issues with constrained variable templates have been fixed
!        ([84]PR98486)
       * The compiler performs less instantiating when doing speculative
!        constant evaluation ([85]git)
       * Various diagnostic improvements; e.g., a more precise caret
         location for pointer-to-member expressions
       * The new -fconstexpr-fp-except flag allows IEC559 floating point
         exceptions in constant-expressions.
  
!     [86]Runtime Library (libstdc++)
  
       * Improved experimental C++20 support, including:
            + std::vector, std::basic_string, std::optional, and
*************** function Multiply (S1, S2 : Sign) return
*** 1174,1193 ****
            + std::invoke_r
            + constexpr std::type_info::operator==
  
!   D
  
       * New features:
            + Support for the D programming language has been updated to
              version 2.100.1 of the language and run-time library. Full
              changelog for this release and previous releases can be found
!             on the [80]dlang.org website.
            + On supported targets, the __traits(compiles) expression can
              now be used to determine whether a target-specific built-in is
!             available without error during CTFE ([81]PR101127).
            + Functions annotated with pragma(inline, true) are now compiled
!             into every module where they are used from ([82]PR106563).
            + Partial support for directly importing C99 sources into a D
!             compilation ([83]ImportC) has been added to the language. A
              notable missing feature is support for preprocessing C
              imports, which can be worked around by preprocessing all C
              sources used for importing ahead of time.
--- 1276,1295 ----
            + std::invoke_r
            + constexpr std::type_info::operator==
  
!   [87]D
  
       * New features:
            + Support for the D programming language has been updated to
              version 2.100.1 of the language and run-time library. Full
              changelog for this release and previous releases can be found
!             on the [88]dlang.org website.
            + On supported targets, the __traits(compiles) expression can
              now be used to determine whether a target-specific built-in is
!             available without error during CTFE ([89]PR101127).
            + Functions annotated with pragma(inline, true) are now compiled
!             into every module where they are used from ([90]PR106563).
            + Partial support for directly importing C99 sources into a D
!             compilation ([91]ImportC) has been added to the language. A
              notable missing feature is support for preprocessing C
              imports, which can be worked around by preprocessing all C
              sources used for importing ahead of time.
*************** function Multiply (S1, S2 : Sign) return
*** 1218,1224 ****
              switches have been renamed to -fpreview=dip25 and
              -fpreview=dip1000.
  
!   Fortran
  
       * WG5/N1942, "TS 29113 Further Interoperability of Fortran with C",
         is now fully supported. In addition to implementing previously
--- 1320,1326 ----
              switches have been renamed to -fpreview=dip25 and
              -fpreview=dip1000.
  
!   [92]Fortran
  
       * WG5/N1942, "TS 29113 Further Interoperability of Fortran with C",
         is now fully supported. In addition to implementing previously
*************** function Multiply (S1, S2 : Sign) return
*** 1237,1280 ****
         -fconvert option, the CONVERT specifier of the OPEN statement and
         the GFORTRAN_CONVERT_UNIT environment variable.
  
!   Go
  
       * GCC 12 provides a complete implementation of the Go 1.18 user
         packages.
       * Although Go 1.18 includes support for generic programming, that
         support is not yet available in GCC.
  
! libgccjit
  
       * The libgccjit API gained 30 new entry points:
            + 17 new "reflection" entry points for querying functions and
!             types ([84]LIBGCCJIT_ABI_16)
!           + [85]gcc_jit_lvalue_set_tls_model for supporting thread-local
!             variables ([86]LIBGCCJIT_ABI_17)
!           + [87]gcc_jit_lvalue_set_link_section for setting the link
              section of global variables, analogous to
!             [88]__attribute__((section(".section")))
!             ([89]LIBGCCJIT_ABI_18)
            + 4 new entry points for initializing global variables and
!             creating constructors for rvalues ([90]LIBGCCJIT_ABI_19)
            + Support for sized integer types, including 128-bit integers
!             and helper functions for such types ([91]LIBGCCJIT_ABI_20)
!           + [92]gcc_jit_context_new_bitcast for reinterpreting the bits of
!             an rvalue as a different type ([93]LIBGCCJIT_ABI_21)
!           + [94]gcc_jit_lvalue_set_register_name for setting a specific
!             register for a variable ([95]LIBGCCJIT_ABI_22)
!           + [96]gcc_jit_context_set_bool_print_errors_to_stderr
!             ([97]LIBGCCJIT_ABI_23)
            + 2 new entry points for setting the alignment of a variable
!             ([98]LIBGCCJIT_ABI_24)
       * libgccjit has gained support for the use of various atomic builtins
!        ([99]PR96066, [100]PR96067)
!      * [101]gcc_jit_context_new_cast is now able to handle truncation and
!        extension between different integer types ([102]PR95498)
  
! New Targets and Target Specific Improvements
  
!   AArch64 & arm
  
       * Newer revisions of the Arm Architecture are supported as arguments
         to the -march option: armv8.7-a, armv8.8-a, armv9-a.
--- 1339,1382 ----
         -fconvert option, the CONVERT specifier of the OPEN statement and
         the GFORTRAN_CONVERT_UNIT environment variable.
  
!   [93]Go
  
       * GCC 12 provides a complete implementation of the Go 1.18 user
         packages.
       * Although Go 1.18 includes support for generic programming, that
         support is not yet available in GCC.
  
! [94]libgccjit
  
       * The libgccjit API gained 30 new entry points:
            + 17 new "reflection" entry points for querying functions and
!             types ([95]LIBGCCJIT_ABI_16)
!           + [96]gcc_jit_lvalue_set_tls_model for supporting thread-local
!             variables ([97]LIBGCCJIT_ABI_17)
!           + [98]gcc_jit_lvalue_set_link_section for setting the link
              section of global variables, analogous to
!             [99]__attribute__((section(".section")))
!             ([100]LIBGCCJIT_ABI_18)
            + 4 new entry points for initializing global variables and
!             creating constructors for rvalues ([101]LIBGCCJIT_ABI_19)
            + Support for sized integer types, including 128-bit integers
!             and helper functions for such types ([102]LIBGCCJIT_ABI_20)
!           + [103]gcc_jit_context_new_bitcast for reinterpreting the bits
!             of an rvalue as a different type ([104]LIBGCCJIT_ABI_21)
!           + [105]gcc_jit_lvalue_set_register_name for setting a specific
!             register for a variable ([106]LIBGCCJIT_ABI_22)
!           + [107]gcc_jit_context_set_bool_print_errors_to_stderr
!             ([108]LIBGCCJIT_ABI_23)
            + 2 new entry points for setting the alignment of a variable
!             ([109]LIBGCCJIT_ABI_24)
       * libgccjit has gained support for the use of various atomic builtins
!        ([110]PR96066, [111]PR96067)
!      * [112]gcc_jit_context_new_cast is now able to handle truncation and
!        extension between different integer types ([113]PR95498)
  
! [114]New Targets and Target Specific Improvements
  
!   [115]AArch64 & arm
  
       * Newer revisions of the Arm Architecture are supported as arguments
         to the -march option: armv8.7-a, armv8.8-a, armv9-a.
*************** New Targets and Target Specific Improvem
*** 1284,1290 ****
         dot-product operations, taking advantage of instructions in the
         Advanced SIMD (AArch64/AArch32) and SVE (AArch64) instruction sets.
  
!   AArch64
  
       * A number of new CPUs are supported through the -mcpu and -mtune
         options (GCC identifiers in parentheses).
--- 1386,1392 ----
         dot-product operations, taking advantage of instructions in the
         Advanced SIMD (AArch64/AArch32) and SVE (AArch64) instruction sets.
  
!   [116]AArch64
  
       * A number of new CPUs are supported through the -mcpu and -mtune
         options (GCC identifiers in parentheses).
*************** New Targets and Target Specific Improvem
*** 1292,1298 ****
            + Arm Cortex-A710 (cortex-a710).
            + Arm Cortex-X2 (cortex-x2).
       * The 64-byte atomic load/store intrinsics to accelerator memory from
!        the [103]2020 Arm Architecture extensions are supported through the
         +ls64 option extension.
       * Initial code generation support is supported for hardware
         instructions used to accelerate the memcpy,memmove and memset
--- 1394,1400 ----
            + Arm Cortex-A710 (cortex-a710).
            + Arm Cortex-X2 (cortex-x2).
       * The 64-byte atomic load/store intrinsics to accelerator memory from
!        the [117]2020 Arm Architecture extensions are supported through the
         +ls64 option extension.
       * Initial code generation support is supported for hardware
         instructions used to accelerate the memcpy,memmove and memset
*************** New Targets and Target Specific Improvem
*** 1305,1311 ****
         cores that have a total vector bandwidth of 512 bits. Please refer
         to the documentation for more details.
  
!   AMD Radeon (GCN)
  
       * Debug experience with ROCGDB has been improved.
       * Support for the type __int128_t/integer(kind=16) was added.
--- 1407,1413 ----
         cores that have a total vector bandwidth of 512 bits. Please refer
         to the documentation for more details.
  
!   [118]AMD Radeon (GCN)
  
       * Debug experience with ROCGDB has been improved.
       * Support for the type __int128_t/integer(kind=16) was added.
*************** New Targets and Target Specific Improvem
*** 1315,1321 ****
         wavefronts in total, per CU). Additionally, the number of used
         wavefronts and workgroups was tuned for performance.
  
!   arm
  
       * Support is added for accessing the stack canary value via the TLS
         register through the -fstack-protector-guard=tls and
--- 1417,1423 ----
         wavefronts in total, per CU). Additionally, the number of used
         wavefronts and workgroups was tuned for performance.
  
!   [119]arm
  
       * Support is added for accessing the stack canary value via the TLS
         register through the -fstack-protector-guard=tls and
*************** New Targets and Target Specific Improvem
*** 1323,1335 ****
         Linux kernel development. Please refer to the documentation for
         more details.
  
!   BPF
  
       * Support for CO-RE (compile-once, run-everywhere) has been added to
         the BPF back end. CO-RE allows to compile portable BPF programs
         that are able to run among different versions of the Linux kernel.
  
!   IA-32/x86-64
  
       * New ISA extension support for Intel AVX512-FP16 was added.
         AVX512-FP16 intrinsics are available via the -mavx512fp16 compiler
--- 1425,1437 ----
         Linux kernel development. Please refer to the documentation for
         more details.
  
!   [120]BPF
  
       * Support for CO-RE (compile-once, run-everywhere) has been added to
         the BPF back end. CO-RE allows to compile portable BPF programs
         that are able to run among different versions of the Linux kernel.
  
!   [121]IA-32/x86-64
  
       * New ISA extension support for Intel AVX512-FP16 was added.
         AVX512-FP16 intrinsics are available via the -mavx512fp16 compiler
*************** New Targets and Target Specific Improvem
*** 1346,1352 ****
         function symbols when the new -mno-direct-extern-access
         command-line option is specified.
  
!   LoongArch
  
       * Support for the LoongArch architecture instruction set has been
         added.
--- 1448,1454 ----
         function symbols when the new -mno-direct-extern-access
         command-line option is specified.
  
!   [122]LoongArch
  
       * Support for the LoongArch architecture instruction set has been
         added.
*************** New Targets and Target Specific Improvem
*** 1356,1362 ****
            + Loongson LA464 core (la464).
            + LoongArch 64-bit generic core (loongarch64).
  
!   MIPS
  
       * The ABI passing arguments containing zero-width fields (for
         example, C/C++ zero-width bit-fields, GNU C/C++ zero-length arrays,
--- 1458,1464 ----
            + Loongson LA464 core (la464).
            + LoongArch 64-bit generic core (loongarch64).
  
!   [123]MIPS
  
       * The ABI passing arguments containing zero-width fields (for
         example, C/C++ zero-width bit-fields, GNU C/C++ zero-length arrays,
*************** New Targets and Target Specific Improvem
*** 1372,1378 ****
         through 11. GCC 12 on MIPS will report such incompatibilities as an
         inform unless -Wno-psabi is used.
  
!   NVPTX
  
       * The -march flag has been added. The -misa flag is now considered an
         alias of the -march flag.
--- 1474,1480 ----
         through 11. GCC 12 on MIPS will report such incompatibilities as an
         inform unless -Wno-psabi is used.
  
!   [124]NVPTX
  
       * The -march flag has been added. The -misa flag is now considered an
         alias of the -march flag.
*************** New Targets and Target Specific Improvem
*** 1398,1410 ****
         predefined macros allows code to check the PTX ISA version being
         targeted by the compiler.
  
!   PowerPC / PowerPC64 / RS6000
  
       * The internal implementation of Power's target-specific built-in
         functions has been rewritten to be easier and less error-prone to
         maintain. Every attempt has been made to ensure that the new
         behavior matches the old behavior, but inevitably some bugs can be
!        expected. Please report any problems via [104]GCC Bugzilla.
       * The built-in functions __builtin_get_texasr, __builtin_get_texasru,
         __builtin_get_tfhar, __builtin_get_tfiar, __builtin_set_texasr,
         __builtin_set_texasru, __builtin_set_tfhar, and __builtin_set_tfiar
--- 1500,1512 ----
         predefined macros allows code to check the PTX ISA version being
         targeted by the compiler.
  
!   [125]PowerPC / PowerPC64 / RS6000
  
       * The internal implementation of Power's target-specific built-in
         functions has been rewritten to be easier and less error-prone to
         maintain. Every attempt has been made to ensure that the new
         behavior matches the old behavior, but inevitably some bugs can be
!        expected. Please [126]report any problems.
       * The built-in functions __builtin_get_texasr, __builtin_get_texasru,
         __builtin_get_tfhar, __builtin_get_tfiar, __builtin_set_texasr,
         __builtin_set_texasru, __builtin_set_tfhar, and __builtin_set_tfiar
*************** New Targets and Target Specific Improvem
*** 1416,1431 ****
         now behave as documented. On prior releases, these built-in
         functions had incorrect semantics on little-endian targets.
  
!   PRU
  
!      * The [105]__regio_symbol variable qualifier has been added. It
         allows easier access in C programs to the __R30 and __R31 CPU I/O
         registers.
  
!   RISC-V
  
!      * Default ISA spec version was bump to 20191213, more detail see this
!        [106]announcement
       * New ISA extension support for zba, zbb, zbc, zbs was added.
       * New ISA extension support for vector and scalar crypto was added,
         only support architecture testing macro and -march= parsing.
--- 1518,1533 ----
         now behave as documented. On prior releases, these built-in
         functions had incorrect semantics on little-endian targets.
  
!   [127]PRU
  
!      * The [128]__regio_symbol variable qualifier has been added. It
         allows easier access in C programs to the __R30 and __R31 CPU I/O
         registers.
  
!   [129]RISC-V
  
!      * The default ISA spec version was bumped to 20191213; see [130]this
!        announcement for details.
       * New ISA extension support for zba, zbb, zbc, zbs was added.
       * New ISA extension support for vector and scalar crypto was added,
         only support architecture testing macro and -march= parsing.
*************** New Targets and Target Specific Improvem
*** 1435,1483 ****
         Distributions that have out-of-tree workarounds for -latomic should
         check their ABIs again.
  
! Operating Systems
  
! Improvements to Static Analyzer
  
       * The analyzer has gained a
!        [107]-Wanalyzer-use-of-uninitialized-value warning, similar to
!        [108]-Wuninitialized and [109]-Wmaybe-uninitialized, but based on
!        an interprocedural path-sensitive analysis ([110]PR95006).
         Such warnings are not disabled by the new
!        [111]-ftrivial-auto-var-init (see below), as the latter is
         considered a mitigation option.
!      * [112]-Wanalyzer-write-to-const and
!        [113]-Wanalyzer-write-to-string-literal will now check for
!        [114]__attribute__ ((access, ....)) on calls to externally-defined
         functions, and complain about read-only regions pointed to by
         arguments marked with a write_only or read_write attribute
!        ([115]PR104793).
       * The analyzer's "taint" mode, activated by
!        [116]-fanalyzer-checker=taint (in addition to [117]-fanalyzer), has
         gained four new taint-based warnings:
!           + [118]-Wanalyzer-tainted-allocation-size for e.g.
              attacker-controlled malloc and alloca,
!           + [119]-Wanalyzer-tainted-divisor for detecting where an
              attacker can inject a divide-by-zero,
!           + [120]-Wanalyzer-tainted-offset for attacker-controlled pointer
              offsets,
!           + [121]-Wanalyzer-tainted-size for attacker-controlled values
              being used as a size parameter to calls to memset or to
!             functions marked with [122]__attribute__ ((access, ....)).
!        The existing [123]-Wanalyzer-tainted-array-index has been reworded
         to talk about "attacker-controlled" rather than "tainted" values,
         for consistency with the new warnings.
!        A new [124]__attribute__ ((tainted_args)) has been added to the C
         and C++ front ends, usable on functions, and on function pointer
         callback fields in structs. The analyzer's taint mode will treat
         all parameters and buffers pointed to by parameters of such
         functions as being attacker-controlled, such as for annotating
         system calls in an operating system kernel as being an "attack
         surface".
!      * The analyzer now respects [125]__attribute__((const)): it will
         treat such functions as returning the same value when given the
!        same inputs ([126]PR104434), and as having no side effects
!        ([127]PR104576).
       * The analyzer is now able to split its analysis into multiple
         execution paths in places where there isn't a split in the control
         flow graph. For example, it now handles realloc calls by splitting
--- 1537,1585 ----
         Distributions that have out-of-tree workarounds for -latomic should
         check their ABIs again.
  
! [131]Operating Systems
  
! [132]Improvements to Static Analyzer
  
       * The analyzer has gained a
!        [133]-Wanalyzer-use-of-uninitialized-value warning, similar to
!        [134]-Wuninitialized and [135]-Wmaybe-uninitialized, but based on
!        an interprocedural path-sensitive analysis ([136]PR95006).
         Such warnings are not disabled by the new
!        [137]-ftrivial-auto-var-init (see below), as the latter is
         considered a mitigation option.
!      * [138]-Wanalyzer-write-to-const and
!        [139]-Wanalyzer-write-to-string-literal will now check for
!        [140]__attribute__ ((access, ....)) on calls to externally-defined
         functions, and complain about read-only regions pointed to by
         arguments marked with a write_only or read_write attribute
!        ([141]PR104793).
       * The analyzer's "taint" mode, activated by
!        [142]-fanalyzer-checker=taint (in addition to [143]-fanalyzer), has
         gained four new taint-based warnings:
!           + [144]-Wanalyzer-tainted-allocation-size for e.g.
              attacker-controlled malloc and alloca,
!           + [145]-Wanalyzer-tainted-divisor for detecting where an
              attacker can inject a divide-by-zero,
!           + [146]-Wanalyzer-tainted-offset for attacker-controlled pointer
              offsets,
!           + [147]-Wanalyzer-tainted-size for attacker-controlled values
              being used as a size parameter to calls to memset or to
!             functions marked with [148]__attribute__ ((access, ....)).
!        The existing [149]-Wanalyzer-tainted-array-index has been reworded
         to talk about "attacker-controlled" rather than "tainted" values,
         for consistency with the new warnings.
!        A new [150]__attribute__ ((tainted_args)) has been added to the C
         and C++ front ends, usable on functions, and on function pointer
         callback fields in structs. The analyzer's taint mode will treat
         all parameters and buffers pointed to by parameters of such
         functions as being attacker-controlled, such as for annotating
         system calls in an operating system kernel as being an "attack
         surface".
!      * The analyzer now respects [151]__attribute__((const)): it will
         treat such functions as returning the same value when given the
!        same inputs ([152]PR104434), and as having no side effects
!        ([153]PR104576).
       * The analyzer is now able to split its analysis into multiple
         execution paths in places where there isn't a split in the control
         flow graph. For example, it now handles realloc calls by splitting
*************** Improvements to Static Analyzer
*** 1490,1510 ****
         to track calls through function pointers.
       * The analyzer now makes the assumption that if we know PTR is
         non-NULL, then (PTR + OFFSET) is also non-NULL. This isn't strictly
!        true, but eliminates false positives in practice ([128]PR101962).
       * The analyzer has gained some initial support for inline assembler
         code. This is extremely limited, and is purely to help suppress
         false positives when analyzing the Linux kernel, which makes heavy
!        use of inline assembler ([129]PR101570).
       * The way the analyzer tracks the state of memory along an execution
         path has been improved in various ways for GCC 12:
            + An optimization for representing bulk updates to memory (e.g.
              zero fills) has been removed as it never worked well. In GCC
              12 it has been replaced with a simpler and more accurate
!             approach, eliminating many false positives ([130]PR95006).
            + Various optimizations have been added, speeding up the
              analysis on a particularly problematic source file from 4
!             minutes down to 17 seconds ([131]PR104943, [132]PR104954, and
!             [133]PR104955).
            + The analyzer now tracks the sizes of dynamically-allocated
              regions, both on the heap (via malloc etc) and stack (via
              alloca), though none of the analyzer warnings make use of this
--- 1592,1612 ----
         to track calls through function pointers.
       * The analyzer now makes the assumption that if we know PTR is
         non-NULL, then (PTR + OFFSET) is also non-NULL. This isn't strictly
!        true, but eliminates false positives in practice ([154]PR101962).
       * The analyzer has gained some initial support for inline assembler
         code. This is extremely limited, and is purely to help suppress
         false positives when analyzing the Linux kernel, which makes heavy
!        use of inline assembler ([155]PR101570).
       * The way the analyzer tracks the state of memory along an execution
         path has been improved in various ways for GCC 12:
            + An optimization for representing bulk updates to memory (e.g.
              zero fills) has been removed as it never worked well. In GCC
              12 it has been replaced with a simpler and more accurate
!             approach, eliminating many false positives ([156]PR95006).
            + Various optimizations have been added, speeding up the
              analysis on a particularly problematic source file from 4
!             minutes down to 17 seconds ([157]PR104943, [158]PR104954, and
!             [159]PR104955).
            + The analyzer now tracks the sizes of dynamically-allocated
              regions, both on the heap (via malloc etc) and stack (via
              alloca), though none of the analyzer warnings make use of this
*************** Improvements to Static Analyzer
*** 1514,1538 ****
  
  Other significant improvements
  
!   Eliminating uninitialized variables
  
!      * GCC can now [134]initialize all stack variables implicitly,
         including padding. This is intended to eliminate all classes of
         uninitialized stack variable flaws. Lack of explicit initialization
!        will still warn when [135]-Wuninitialized is active. For best
         debugging, use of the new command-line option
!        [136]-ftrivial-auto-var-init=pattern can be used to fill variables
         with a repeated 0xFE pattern, which tends to illuminate many bugs
         (e.g. pointers receive invalid addresses, sizes and indices are
         very large). For best production results, the new command-line
!        option [137]-ftrivial-auto-var-init=zero can be used to fill
         variables with 0x00, which tends to provide a safer state for bugs
         (e.g. pointers are NULL, strings are NUL filled, and sizes and
         indices are 0).
  
!   Debugging formats
  
!      * GCC can now generate debugging information in [138]CTF, a
         lightweight debugging format that provides information about C
         types and the association between functions and data symbols and
         types. This format is designed to be embedded in ELF files and to
--- 1616,1640 ----
  
  Other significant improvements
  
!   [160]Eliminating uninitialized variables
  
!      * GCC can now [161]initialize all stack variables implicitly,
         including padding. This is intended to eliminate all classes of
         uninitialized stack variable flaws. Lack of explicit initialization
!        will still warn when [162]-Wuninitialized is active. For best
         debugging, use of the new command-line option
!        [163]-ftrivial-auto-var-init=pattern can be used to fill variables
         with a repeated 0xFE pattern, which tends to illuminate many bugs
         (e.g. pointers receive invalid addresses, sizes and indices are
         very large). For best production results, the new command-line
!        option [164]-ftrivial-auto-var-init=zero can be used to fill
         variables with 0x00, which tends to provide a safer state for bugs
         (e.g. pointers are NULL, strings are NUL filled, and sizes and
         indices are 0).
  
!   [165]Debugging formats
  
!      * GCC can now generate debugging information in [166]CTF, a
         lightweight debugging format that provides information about C
         types and the association between functions and data symbols and
         types. This format is designed to be embedded in ELF files and to
*************** Other significant improvements
*** 1543,1558 ****
         The compiler can generate BTF for any target, when enabled with the
         command-line option -gbtf
  
! GCC 12.1
  
!    This is the [139]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 12.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! GCC 12.2
  
!    This is the [140]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 12.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
--- 1645,1660 ----
         The compiler can generate BTF for any target, when enabled with the
         command-line option -gbtf
  
! [167]GCC 12.1
  
!    This is the [168]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 12.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [169]GCC 12.2
  
!    This is the [170]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 12.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
*************** GCC 12.2
*** 1566,1572 ****
         all optimization levels but -O0 and -Og. The old behavior can be
         obtained by explicitly passing -mcheck-zero-division to GCC.
  
! GCC 12.3
  
    Target Specific Changes
  
--- 1668,1674 ----
         all optimization levels but -O0 and -Og. The old behavior can be
         obtained by explicitly passing -mcheck-zero-division to GCC.
  
! [171]GCC 12.3
  
    Target Specific Changes
  
*************** GCC 12.3
*** 1576,1610 ****
         -march=znver4. The switch makes GCC consider using 512-bit vectors
         when auto-vectorizing.
  
!    This is the [141]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 12.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! GCC 12.4
! 
!    Note: GCC 12.4 has not been released yet, so this section is a
!    work-in-progress.
  
!    This is the [142]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 12.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [143]GCC manuals. If that fails, the
!     [144]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [145]gcc@gcc.gnu.org. All of [146]our lists have public
      archives.
  
!    Copyright (C) [147]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [148]maintained by the GCC team. Last modified
!    2024-05-17.
  
  References
  
--- 1678,1709 ----
         -march=znver4. The switch makes GCC consider using 512-bit vectors
         when auto-vectorizing.
  
!    This is the [172]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 12.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [173]GCC 12.4
  
!    This is the [174]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 12.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [175]GCC manuals. If that fails, the
!     [176]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [177]gcc@gcc.gnu.org. All of [178]our lists have public
      archives.
  
!    Copyright (C) [179]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [180]maintained by the GCC team. Last modified
!    2025-01-31.
  
  References
  
*************** References
*** 1614,1785 ****
     4. https://gcc.gnu.org/PR42217
     5. https://gcc.gnu.org/gcc-12/changes.html#mips_zero_width_fields
     6. https://gcc.gnu.org/install/specific.html
!    7. https://clang.llvm.org/docs/ShadowCallStack.html
!    8. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Instrumentation-Options.html#index-fsanitize_003dshadow-call-stack
!    9. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/libgomp/OpenMP-Implementation-Status.html
!   10. https://www.openacc.org/
!   11. https://gcc.gnu.org/wiki/OpenACC/Implementation Status#status-12
!   12. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/libgomp/Enabling-OpenACC.html
!   13. https://gcc.gnu.org/gcc-12/changes.html#amdgcn
!   14. https://gcc.gnu.org/gcc-12/changes.html#nvptx
!   15. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-param
!   16. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wopenacc-parallelism
!   17. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/C-Dialect-Options.html#index-foffload-options
!   18. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/C-Dialect-Options.html#index-foffload
!   19. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gnat_rm/Security-Hardening-Features.html#Security-Hardening-Features
!   20. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wbidi-chars
!   21. https://gcc.gnu.org/PR103026
!   22. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Warray-compare
!   23. https://gcc.gnu.org/PR97573
!   24. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wattributes
!   25. https://gcc.gnu.org/PR101940
!   26. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wformat
!   27. https://wg21.link/p1938
!   28. https://gcc.gnu.org/PR100974
!   29. https://wg21.link/p0849
!   30. https://gcc.gnu.org/PR103049
!   31. https://wg21.link/p2242
!   32. https://gcc.gnu.org/PR102612
!   33. https://wg21.link/p2334
!   34. https://gcc.gnu.org/PR102616
!   35. https://wg21.link/p2360
!   36. https://gcc.gnu.org/PR102617
!   37. https://wg21.link/p2128
!   38. https://wg21.link/cwg2397
!   39. https://gcc.gnu.org/PR100975
!   40. https://wg21.link/cwg960
!   41. https://wg21.link/cwg1227
!   42. https://wg21.link/cwg1315
!   43. https://wg21.link/cwg2082
!   44. https://wg21.link/cwg2351
!   45. https://wg21.link/cwg2374
!   46. https://wg21.link/cwg2397
!   47. https://wg21.link/cwg2446
!   48. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=87c2080b
!   49. https://gcc.gnu.org/PR79501
!   50. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wuninitialized
!   51. https://gcc.gnu.org/PR19808
!   52. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wint-in-bool-context
!   53. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=3a2b12bc
!   54. https://gcc.gnu.org/PR99032
!   55. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wmissing-requires
!   56. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=e18e56c7
!   57. https://gcc.gnu.org/PR100995
!   58. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Waddress
!   59. https://gcc.gnu.org/PR102103
!   60. https://gcc.gnu.org/PR99701
!   61. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=3ead06c1
!   62. https://gcc.gnu.org/PR102753
!   63. https://wg21.link/p0466
!   64. https://gcc.gnu.org/PR101539
!   65. https://gcc.gnu.org/PR100828
!   66. https://gcc.gnu.org/PR101786
!   67. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Winterference-size
!   68. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=76b75018
!   69. https://gcc.gnu.org/PR101344
!   70. https://gcc.gnu.org/PR101883
!   71. https://gcc.gnu.org/PR89062
!   72. https://gcc.gnu.org/PR101233
!   73. https://gcc.gnu.org/PR88252
!   74. https://gcc.gnu.org/PR86439
!   75. https://gcc.gnu.org/PR98832
!   76. https://gcc.gnu.org/PR102933
!   77. https://gcc.gnu.org/PR51577
!   78. https://gcc.gnu.org/PR98486
!   79. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=1595fe44
!   80. https://dlang.org/changelog/2.100.1.html
!   81. https://gcc.gnu.org/PR101127
!   82. https://gcc.gnu.org/PR106563
!   83. https://dlang.org/spec/importc.html
!   84. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-16
!   85. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_lvalue_set_tls_model
!   86. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-17
!   87. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_lvalue_set_link_section
!   88. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Variable-Attributes.html#index-section-variable-attribute
!   89. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-18
!   90. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-19
!   91. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-20
!   92. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_context_new_bitcast
!   93. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-21
!   94. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_lvalue_set_register_name
!   95. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-22
!   96. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/contexts.html#c.gcc_jit_context_set_bool_print_errors_to_stderr
!   97. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-23
!   98. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-24
!   99. https://gcc.gnu.org/PR96066
!  100. https://gcc.gnu.org/PR96067
!  101. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_context_new_cast
!  102. https://gcc.gnu.org/PR95498
!  103. https://community.arm.com/arm-community-blogs/b/architectures-and-processors-blog/posts/arm-a-profile-architecture-developments-2020
!  104. https://gcc.gnu.org/bugzilla/
!  105. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Named-Address-Spaces.html#PRU-Named-Address-Spaces
!  106. https://groups.google.com/a/groups.riscv.org/g/sw-dev/c/aE1ZeHHCYf4
!  107. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-use-of-uninitialized-value
!  108. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wuninitialized
!  109. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wmaybe-uninitialized
!  110. https://gcc.gnu.org/PR95006
!  111. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init
!  112. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-const
!  113. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-string-literal
!  114. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Function-Attributes.html
!  115. https://gcc.gnu.org/PR104793
!  116. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-fanalyzer-checker
!  117. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-fanalyzer
!  118. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-allocation-size
!  119. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-divisor
!  120. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-offset
!  121. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-size
!  122. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Function-Attributes.html
!  123. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-array-index
!  124. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Function-Attributes.html#index-tainted_005fargs-function-attribute
!  125. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Function-Attributes.html#index-const-function-attribute
!  126. https://gcc.gnu.org/PR104434
!  127. https://gcc.gnu.org/PR104576
!  128. https://gcc.gnu.org/PR101962
!  129. https://gcc.gnu.org/PR101570
!  130. https://gcc.gnu.org/PR95006
!  131. https://gcc.gnu.org/PR104943
!  132. https://gcc.gnu.org/PR104954
!  133. https://gcc.gnu.org/PR104955
!  134. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init
!  135. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wuninitialized
!  136. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init
   137. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init
!  138. https://ctfstd.org/
!  139. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.0
!  140. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.2
!  141. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.3
!  142. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.4
!  143. https://gcc.gnu.org/onlinedocs/
!  144. mailto:gcc-help@gcc.gnu.org
!  145. mailto:gcc@gcc.gnu.org
!  146. https://gcc.gnu.org/lists.html
!  147. https://www.fsf.org/
!  148. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-11/index.html
                               GCC 11 Release Series
  
!    May 29, 2023
  
!    The GCC developers are pleased to announce the release of GCC 11.4.
  
     This release is a bug-fix release, containing fixes for regressions in
!    GCC 11.3 relative to previous releases of GCC.
  
  Release History
  
     GCC 11.4
!           May 29, 2023 ([1]changes, [2]documentation)
  
     GCC 11.3
!           April 21, 2022 ([3]changes, [4]documentation)
  
     GCC 11.2
!           July 28, 2021 ([5]changes, [6]documentation)
  
     GCC 11.1
!           April 27, 2021 ([7]changes, [8]documentation)
  
  References and Acknowledgements
  
--- 1713,1919 ----
     4. https://gcc.gnu.org/PR42217
     5. https://gcc.gnu.org/gcc-12/changes.html#mips_zero_width_fields
     6. https://gcc.gnu.org/install/specific.html
!    7. https://gcc.gnu.org/gcc-12/changes.html#general
!    8. https://clang.llvm.org/docs/ShadowCallStack.html
!    9. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Instrumentation-Options.html#index-fsanitize_003dshadow-call-stack
!   10. https://gcc.gnu.org/gcc-12/changes.html#languages
!   11. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/libgomp/OpenMP-Implementation-Status.html
!   12. https://www.openacc.org/
!   13. https://gcc.gnu.org/wiki/OpenACC/Implementation Status#status-12
!   14. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/libgomp/Enabling-OpenACC.html
!   15. https://gcc.gnu.org/gcc-12/changes.html#amdgcn
!   16. https://gcc.gnu.org/gcc-12/changes.html#nvptx
!   17. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-param
!   18. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wopenacc-parallelism
!   19. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/C-Dialect-Options.html#index-foffload-options
!   20. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/C-Dialect-Options.html#index-foffload
!   21. https://gcc.gnu.org/gcc-12/changes.html#ada
!   22. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gnat_rm/Security-Hardening-Features.html#Security-Hardening-Features
!   23. https://gcc.gnu.org/gcc-12/changes.html#c-family
!   24. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wbidi-chars
!   25. https://gcc.gnu.org/PR103026
!   26. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Warray-compare
!   27. https://gcc.gnu.org/PR97573
!   28. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wattributes
!   29. https://gcc.gnu.org/PR101940
!   30. https://gcc.gnu.org/gcc-12/changes.html#c
!   31. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wformat
!   32. https://gcc.gnu.org/gcc-12/changes.html#cxx
!   33. https://wg21.link/p1938
!   34. https://gcc.gnu.org/PR100974
!   35. https://wg21.link/p0849
!   36. https://gcc.gnu.org/PR103049
!   37. https://wg21.link/p2242
!   38. https://gcc.gnu.org/PR102612
!   39. https://wg21.link/p2334
!   40. https://gcc.gnu.org/PR102616
!   41. https://wg21.link/p2360
!   42. https://gcc.gnu.org/PR102617
!   43. https://wg21.link/p2128
!   44. https://wg21.link/cwg2397
!   45. https://gcc.gnu.org/PR100975
!   46. https://wg21.link/cwg960
!   47. https://wg21.link/cwg1227
!   48. https://wg21.link/cwg1315
!   49. https://wg21.link/cwg2082
!   50. https://wg21.link/cwg2351
!   51. https://wg21.link/cwg2374
!   52. https://wg21.link/cwg2397
!   53. https://wg21.link/cwg2446
!   54. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=87c2080b
!   55. https://gcc.gnu.org/PR79501
!   56. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wuninitialized
!   57. https://gcc.gnu.org/PR19808
!   58. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wint-in-bool-context
!   59. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=3a2b12bc
!   60. https://gcc.gnu.org/PR99032
!   61. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wmissing-requires
!   62. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=e18e56c7
!   63. https://gcc.gnu.org/PR100995
!   64. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Waddress
!   65. https://gcc.gnu.org/PR102103
!   66. https://gcc.gnu.org/PR99701
!   67. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=3ead06c1
!   68. https://gcc.gnu.org/PR102753
!   69. https://wg21.link/p0466
!   70. https://gcc.gnu.org/PR101539
!   71. https://gcc.gnu.org/PR100828
!   72. https://gcc.gnu.org/PR101786
!   73. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Winterference-size
!   74. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=76b75018
!   75. https://gcc.gnu.org/PR101344
!   76. https://gcc.gnu.org/PR101883
!   77. https://gcc.gnu.org/PR89062
!   78. https://gcc.gnu.org/PR101233
!   79. https://gcc.gnu.org/PR88252
!   80. https://gcc.gnu.org/PR86439
!   81. https://gcc.gnu.org/PR98832
!   82. https://gcc.gnu.org/PR102933
!   83. https://gcc.gnu.org/PR51577
!   84. https://gcc.gnu.org/PR98486
!   85. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=1595fe44
!   86. https://gcc.gnu.org/gcc-12/changes.html#libstdcxx
!   87. https://gcc.gnu.org/gcc-12/changes.html#d
!   88. https://dlang.org/changelog/2.100.1.html
!   89. https://gcc.gnu.org/PR101127
!   90. https://gcc.gnu.org/PR106563
!   91. https://dlang.org/spec/importc.html
!   92. https://gcc.gnu.org/gcc-12/changes.html#fortran
!   93. https://gcc.gnu.org/gcc-12/changes.html#go
!   94. https://gcc.gnu.org/gcc-12/changes.html#jit
!   95. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-16
!   96. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_lvalue_set_tls_model
!   97. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-17
!   98. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_lvalue_set_link_section
!   99. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Variable-Attributes.html#index-section-variable-attribute
!  100. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-18
!  101. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-19
!  102. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-20
!  103. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_context_new_bitcast
!  104. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-21
!  105. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_lvalue_set_register_name
!  106. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-22
!  107. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/contexts.html#c.gcc_jit_context_set_bool_print_errors_to_stderr
!  108. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-23
!  109. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-24
!  110. https://gcc.gnu.org/PR96066
!  111. https://gcc.gnu.org/PR96067
!  112. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_context_new_cast
!  113. https://gcc.gnu.org/PR95498
!  114. https://gcc.gnu.org/gcc-12/changes.html#targets
!  115. https://gcc.gnu.org/gcc-12/changes.html#arm-targets
!  116. https://gcc.gnu.org/gcc-12/changes.html#aarch64
!  117. https://community.arm.com/arm-community-blogs/b/architectures-and-processors-blog/posts/arm-a-profile-architecture-developments-2020
!  118. https://gcc.gnu.org/gcc-12/changes.html#amdgcn
!  119. https://gcc.gnu.org/gcc-12/changes.html#arm
!  120. https://gcc.gnu.org/gcc-12/changes.html#bpf
!  121. https://gcc.gnu.org/gcc-12/changes.html#x86
!  122. https://gcc.gnu.org/gcc-12/changes.html#loongarch
!  123. https://gcc.gnu.org/gcc-12/changes.html#mips
!  124. https://gcc.gnu.org/gcc-12/changes.html#nvptx
!  125. https://gcc.gnu.org/gcc-12/changes.html#powerpc
!  126. https://gcc.gnu.org/bugs/
!  127. https://gcc.gnu.org/gcc-12/changes.html#pru
!  128. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Named-Address-Spaces.html#PRU-Named-Address-Spaces
!  129. https://gcc.gnu.org/gcc-12/changes.html#riscv
!  130. https://groups.google.com/a/groups.riscv.org/g/sw-dev/c/aE1ZeHHCYf4
!  131. https://gcc.gnu.org/gcc-12/changes.html#os
!  132. https://gcc.gnu.org/gcc-12/changes.html#analyzer
!  133. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-use-of-uninitialized-value
!  134. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wuninitialized
!  135. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wmaybe-uninitialized
!  136. https://gcc.gnu.org/PR95006
   137. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init
!  138. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-const
!  139. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-string-literal
!  140. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Function-Attributes.html
!  141. https://gcc.gnu.org/PR104793
!  142. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-fanalyzer-checker
!  143. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-fanalyzer
!  144. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-allocation-size
!  145. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-divisor
!  146. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-offset
!  147. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-size
!  148. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Function-Attributes.html
!  149. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-array-index
!  150. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Function-Attributes.html#index-tainted_005fargs-function-attribute
!  151. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Function-Attributes.html#index-const-function-attribute
!  152. https://gcc.gnu.org/PR104434
!  153. https://gcc.gnu.org/PR104576
!  154. https://gcc.gnu.org/PR101962
!  155. https://gcc.gnu.org/PR101570
!  156. https://gcc.gnu.org/PR95006
!  157. https://gcc.gnu.org/PR104943
!  158. https://gcc.gnu.org/PR104954
!  159. https://gcc.gnu.org/PR104955
!  160. https://gcc.gnu.org/gcc-12/changes.html#uninitialized
!  161. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init
!  162. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wuninitialized
!  163. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init
!  164. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init
!  165. https://gcc.gnu.org/gcc-12/changes.html#debug
!  166. https://ctfstd.org/
!  167. https://gcc.gnu.org/gcc-12/changes.html#12.1
!  168. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.0
!  169. https://gcc.gnu.org/gcc-12/changes.html#12.2
!  170. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.2
!  171. https://gcc.gnu.org/gcc-12/changes.html#12.3
!  172. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.3
!  173. https://gcc.gnu.org/gcc-12/changes.html#12.4
!  174. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.4
!  175. https://gcc.gnu.org/onlinedocs/
!  176. mailto:gcc-help@gcc.gnu.org
!  177. mailto:gcc@gcc.gnu.org
!  178. https://gcc.gnu.org/lists.html
!  179. https://www.fsf.org/
!  180. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-11/index.html
                               GCC 11 Release Series
  
!    July 19, 2024
  
!    The GCC developers are pleased to announce the release of GCC 11.5.
  
     This release is a bug-fix release, containing fixes for regressions in
!    GCC 11.4 relative to previous releases of GCC.
  
  Release History
  
+    GCC 11.5
+           July 19, 2024 ([1]changes, [2]documentation)
+ 
     GCC 11.4
!           May 29, 2023 ([3]changes, [4]documentation)
  
     GCC 11.3
!           April 21, 2022 ([5]changes, [6]documentation)
  
     GCC 11.2
!           July 28, 2021 ([7]changes, [8]documentation)
  
     GCC 11.1
!           April 27, 2021 ([9]changes, [10]documentation)
  
  References and Acknowledgements
  
*************** References and Acknowledgements
*** 1789,1839 ****
  
     The GCC developers would like to thank the numerous people that have
     contributed new features, improvements, bug fixes, and other changes as
!    well as test results to GCC. This [9]amazing group of volunteers is
     what makes GCC successful.
  
!    For additional information about GCC please refer to the [10]GCC
!    project web site or contact the [11]GCC development mailing list.
  
!    To obtain GCC please use [12]our mirror sites or [13]our version
     control system.
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [14]GCC manuals. If that fails, the
!     [15]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [16]gcc@gcc.gnu.org. All of [17]our lists have public
      archives.
  
!    Copyright (C) [18]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [19]maintained by the GCC team. Last modified
!    2023-10-15.
  
  References
  
     1. https://gcc.gnu.org/gcc-11/changes.html
!    2. http://gcc.gnu.org/onlinedocs/11.4.0/
     3. https://gcc.gnu.org/gcc-11/changes.html
!    4. http://gcc.gnu.org/onlinedocs/11.3.0/
     5. https://gcc.gnu.org/gcc-11/changes.html
!    6. http://gcc.gnu.org/onlinedocs/11.2.0/
     7. https://gcc.gnu.org/gcc-11/changes.html
!    8. http://gcc.gnu.org/onlinedocs/11.1.0/
!    9. http://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Contributors.html
!   10. https://gcc.gnu.org/index.html
!   11. mailto:gcc@gcc.gnu.org
!   12. https://gcc.gnu.org/mirrors.html
!   13. https://gcc.gnu.org/git.html
!   14. https://gcc.gnu.org/onlinedocs/
!   15. mailto:gcc-help@gcc.gnu.org
!   16. mailto:gcc@gcc.gnu.org
!   17. https://gcc.gnu.org/lists.html
!   18. https://www.fsf.org/
!   19. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-11/changes.html
                               GCC 11 Release Series
--- 1923,1975 ----
  
     The GCC developers would like to thank the numerous people that have
     contributed new features, improvements, bug fixes, and other changes as
!    well as test results to GCC. This [11]amazing group of volunteers is
     what makes GCC successful.
  
!    For additional information about GCC please refer to the [12]GCC
!    project web site or contact the [13]GCC development mailing list.
  
!    To obtain GCC please use [14]our mirror sites or [15]our version
     control system.
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [16]GCC manuals. If that fails, the
!     [17]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [18]gcc@gcc.gnu.org. All of [19]our lists have public
      archives.
  
!    Copyright (C) [20]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [21]maintained by the GCC team. Last modified
!    2024-07-19.
  
  References
  
     1. https://gcc.gnu.org/gcc-11/changes.html
!    2. https://gcc.gnu.org/onlinedocs/11.5.0/
     3. https://gcc.gnu.org/gcc-11/changes.html
!    4. https://gcc.gnu.org/onlinedocs/11.4.0/
     5. https://gcc.gnu.org/gcc-11/changes.html
!    6. https://gcc.gnu.org/onlinedocs/11.3.0/
     7. https://gcc.gnu.org/gcc-11/changes.html
!    8. https://gcc.gnu.org/onlinedocs/11.2.0/
!    9. https://gcc.gnu.org/gcc-11/changes.html
!   10. https://gcc.gnu.org/onlinedocs/11.1.0/
!   11. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Contributors.html
!   12. https://gcc.gnu.org/index.html
!   13. mailto:gcc@gcc.gnu.org
!   14. https://gcc.gnu.org/mirrors.html
!   15. https://gcc.gnu.org/git.html
!   16. https://gcc.gnu.org/onlinedocs/
!   17. mailto:gcc-help@gcc.gnu.org
!   18. mailto:gcc@gcc.gnu.org
!   19. https://gcc.gnu.org/lists.html
!   20. https://www.fsf.org/
!   21. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-11/changes.html
                               GCC 11 Release Series
*************** Caveats
*** 1872,1881 ****
       * Some short options of the gcov tool have been renamed: -i to -j and
         -j to -H.
  
! General Improvements
  
!      * [5]ThreadSanitizer improvements to support alternative runtimes and
!        environments. The [6]Linux Kernel Concurrency Sanitizer (KCSAN) is
         now supported.
            + Add --param tsan-distinguish-volatile to optionally emit
              instrumentation distinguishing volatile accesses.
--- 2008,2017 ----
       * Some short options of the gcov tool have been renamed: -i to -j and
         -j to -H.
  
! [5]General Improvements
  
!      * [6]ThreadSanitizer improvements to support alternative runtimes and
!        environments. The [7]Linux Kernel Concurrency Sanitizer (KCSAN) is
         now supported.
            + Add --param tsan-distinguish-volatile to optionally emit
              instrumentation distinguishing volatile accesses.
*************** General Improvements
*** 1894,1904 ****
         columns, and its UTF-8 encoding requires four bytes.
         In GCC 11 the column numbers default to being column numbers,
         respecting multi-column characters. The old behavior can be
!        restored using a new option [7]-fdiagnostics-column-unit=byte.
!        There is also a new option [8]-fdiagnostics-column-origin=,
         allowing the pre-existing default of the left-hand column being
         column 1 to be overridden if desired (e.g. for 0-based columns).
!        The output of [9]-fdiagnostics-format=json has been extended to
         supply both byte counts and column numbers for all source
         locations.
         Additionally, in previous releases of GCC, tab characters in the
--- 2030,2040 ----
         columns, and its UTF-8 encoding requires four bytes.
         In GCC 11 the column numbers default to being column numbers,
         respecting multi-column characters. The old behavior can be
!        restored using a new option [8]-fdiagnostics-column-unit=byte.
!        There is also a new option [9]-fdiagnostics-column-origin=,
         allowing the pre-existing default of the left-hand column being
         column 1 to be overridden if desired (e.g. for 0-based columns).
!        The output of [10]-fdiagnostics-format=json has been extended to
         supply both byte counts and column numbers for all source
         locations.
         Additionally, in previous releases of GCC, tab characters in the
*************** General Improvements
*** 1906,1925 ****
         prefixed with whitespace or line number information, leading to
         misalignments in the resulting output when compared with the actual
         source. Tab characters are now printed as an appropriate number of
!        spaces, using the [10]-ftabstop option (which defaults to 8 spaces
         per tab stop).
!      * Introduce [11]Hardware-assisted AddressSanitizer support. This
         sanitizer currently only works for the AArch64 target. It helps
!        debug address problems similarly to [12]AddressSanitizer but is
         based on partial hardware assistance and provides probabilistic
!        protection to use less RAM at run time. [13]Hardware-assisted
         AddressSanitizer is not production-ready for user space, and is
         provided mainly for use compiling the Linux Kernel.
         To use this sanitizer the command line arguments are:
            + -fsanitize=hwaddress to instrument userspace code.
            + -fsanitize=kernel-hwaddress to instrument kernel code.
       * For targets that produce DWARF debugging information GCC now
!        defaults to [14]DWARF version 5 (with the exception of VxWorks and
         Darwin/Mac OS X which default to version 2 and AIX which defaults
         to version 4). This can produce up to 25% more compact debug
         information compared to earlier versions.
--- 2042,2061 ----
         prefixed with whitespace or line number information, leading to
         misalignments in the resulting output when compared with the actual
         source. Tab characters are now printed as an appropriate number of
!        spaces, using the [11]-ftabstop option (which defaults to 8 spaces
         per tab stop).
!      * Introduce [12]Hardware-assisted AddressSanitizer support. This
         sanitizer currently only works for the AArch64 target. It helps
!        debug address problems similarly to [13]AddressSanitizer but is
         based on partial hardware assistance and provides probabilistic
!        protection to use less RAM at run time. [14]Hardware-assisted
         AddressSanitizer is not production-ready for user space, and is
         provided mainly for use compiling the Linux Kernel.
         To use this sanitizer the command line arguments are:
            + -fsanitize=hwaddress to instrument userspace code.
            + -fsanitize=kernel-hwaddress to instrument kernel code.
       * For targets that produce DWARF debugging information GCC now
!        defaults to [15]DWARF version 5 (with the exception of VxWorks and
         Darwin/Mac OS X which default to version 2 and AIX which defaults
         to version 4). This can produce up to 25% more compact debug
         information compared to earlier versions.
*************** General Improvements
*** 1955,1967 ****
         This statement can be transformed into a switch statement and then
         expanded into a bit-test.
       * New command-line options:
!           + [15]-fbit-tests, enabled by default, can be used to enable or
              disable switch expansion using bit-tests.
       * Inter-procedural optimization improvements:
            + A new IPA-modref pass was added to track side effects of
              function calls and improve precision of points-to-analysis.
!             The pass can be controlled by the [16]-fipa-modref option.
!           + The identical code folding pass (controlled by [17]-fipa-icf)
              was significantly improved to increase the number of unified
              functions and to reduce compile-time memory use.
            + IPA-CP (Interprocedural constant propagation) heuristics
--- 2091,2103 ----
         This statement can be transformed into a switch statement and then
         expanded into a bit-test.
       * New command-line options:
!           + [16]-fbit-tests, enabled by default, can be used to enable or
              disable switch expansion using bit-tests.
       * Inter-procedural optimization improvements:
            + A new IPA-modref pass was added to track side effects of
              function calls and improve precision of points-to-analysis.
!             The pass can be controlled by the [17]-fipa-modref option.
!           + The identical code folding pass (controlled by [18]-fipa-icf)
              was significantly improved to increase the number of unified
              functions and to reduce compile-time memory use.
            + IPA-CP (Interprocedural constant propagation) heuristics
*************** General Improvements
*** 1974,1988 ****
            + Memory allocation of the linking stage was improved to reduce
              peak memory use.
       * Profile driven optimization improvements:
!           + Using [18]-fprofile-values, was improved by tracking more
              target values for e.g. indirect calls.
            + GCOV data file format outputs smaller files by representing
              zero counters in a more compact way.
  
! New Languages and Language specific improvements
  
       * GCC 11 adds support for non-rectangular loop nests in OpenMP
!        constructs and the allocator routines of [19]OpenMP 5.0, including
         initial allocate clause support in C/C++. The OMP_TARGET_OFFLOAD
         environment variable and the active-levels routines are now
         supported. For C/C++, the declare variant and map support has been
--- 2110,2124 ----
            + Memory allocation of the linking stage was improved to reduce
              peak memory use.
       * Profile driven optimization improvements:
!           + Using [19]-fprofile-values, was improved by tracking more
              target values for e.g. indirect calls.
            + GCOV data file format outputs smaller files by representing
              zero counters in a more compact way.
  
! [20]New Languages and Language specific improvements
  
       * GCC 11 adds support for non-rectangular loop nests in OpenMP
!        constructs and the allocator routines of [21]OpenMP 5.0, including
         initial allocate clause support in C/C++. The OMP_TARGET_OFFLOAD
         environment variable and the active-levels routines are now
         supported. For C/C++, the declare variant and map support has been
*************** New Languages and Language specific impr
*** 1994,2042 ****
         extensions of OpenMP 5.0, if clause with simd and cancel modifiers,
         target data without map clause, and limited support for the
         requires construct.
!      * Version 2.6 of the [20]OpenACC specification continues to be
         maintained and improved in the C, C++ and Fortran compilers. See
!        the [21]implementation status section on the OpenACC wiki page and
!        the [22]run-time library documentation for further information.
  
!   C family
  
       * New attributes:
!           + The [23]no_stack_protector attribute has been added to mark
              functions which should not be instrumented with stack
              protection (-fstack-protector).
!           + The existing [24]malloc attribute has been extended so that it
              can be used to identify allocator/deallocator API pairs. A
!             pair of new [25]-Wmismatched-dealloc and
!             [26]-Wmismatched-new-delete warnings will complain about
!             mismatched calls, and [27]-Wfree-nonheap-object about
              deallocation calls with pointers not obtained from allocation
              functions. Additionally, the static analyzer will use these
              attributes when checking for leaks, double-frees,
              use-after-frees, and similar issues.
       * New warnings:
!           + [28]-Wmismatched-dealloc, enabled by default, warns about
              calls to deallocation functions with pointers returned from
              mismatched allocation functions.
!           + [29]-Wsizeof-array-div, enabled by -Wall, warns about
              divisions of two sizeof operators when the first one is
              applied to an array and the divisor does not equal the size of
              the array element.
!           + [30]-Wstringop-overread, enabled by default, warns about calls
              to string functions reading past the end of the arrays passed
              to them as arguments. In prior GCC releases most instances of
              his warning are diagnosed by -Wstringop-overflow.
!           + [31]-Wtsan, enabled by default, warns about unsupported
              features in ThreadSanitizer (currently
              std::atomic_thread_fence).
       * Enhancements to existing warnings:
!           + [32]-Wfree-nonheap-object detects many more instances of calls
              to deallocation functions with pointers not returned from a
              dynamic memory allocation function.
!           + [33]-Wmaybe-uninitialized diagnoses passing pointers or
              references to uninitialized memory to functions taking
              const-qualified arguments.
!           + [34]-Wuninitialized detects reads from uninitialized
              dynamically allocated memory.
       * For ELF targets that support the GNU or FreeBSD OSABIs, the used
         attribute will now save the symbol declaration it is applied to
--- 2130,2178 ----
         extensions of OpenMP 5.0, if clause with simd and cancel modifiers,
         target data without map clause, and limited support for the
         requires construct.
!      * Version 2.6 of the [22]OpenACC specification continues to be
         maintained and improved in the C, C++ and Fortran compilers. See
!        the [23]implementation status section on the OpenACC wiki page and
!        the [24]run-time library documentation for further information.
  
!   [25]C family
  
       * New attributes:
!           + The [26]no_stack_protector attribute has been added to mark
              functions which should not be instrumented with stack
              protection (-fstack-protector).
!           + The existing [27]malloc attribute has been extended so that it
              can be used to identify allocator/deallocator API pairs. A
!             pair of new [28]-Wmismatched-dealloc and
!             [29]-Wmismatched-new-delete warnings will complain about
!             mismatched calls, and [30]-Wfree-nonheap-object about
              deallocation calls with pointers not obtained from allocation
              functions. Additionally, the static analyzer will use these
              attributes when checking for leaks, double-frees,
              use-after-frees, and similar issues.
       * New warnings:
!           + [31]-Wmismatched-dealloc, enabled by default, warns about
              calls to deallocation functions with pointers returned from
              mismatched allocation functions.
!           + [32]-Wsizeof-array-div, enabled by -Wall, warns about
              divisions of two sizeof operators when the first one is
              applied to an array and the divisor does not equal the size of
              the array element.
!           + [33]-Wstringop-overread, enabled by default, warns about calls
              to string functions reading past the end of the arrays passed
              to them as arguments. In prior GCC releases most instances of
              his warning are diagnosed by -Wstringop-overflow.
!           + [34]-Wtsan, enabled by default, warns about unsupported
              features in ThreadSanitizer (currently
              std::atomic_thread_fence).
       * Enhancements to existing warnings:
!           + [35]-Wfree-nonheap-object detects many more instances of calls
              to deallocation functions with pointers not returned from a
              dynamic memory allocation function.
!           + [36]-Wmaybe-uninitialized diagnoses passing pointers or
              references to uninitialized memory to functions taking
              const-qualified arguments.
!           + [37]-Wuninitialized detects reads from uninitialized
              dynamically allocated memory.
       * For ELF targets that support the GNU or FreeBSD OSABIs, the used
         attribute will now save the symbol declaration it is applied to
*************** New Languages and Language specific impr
*** 2047,2053 ****
         sections.
         This functionality requires Binutils version 2.36 or later.
  
!   C
  
       * Several new features from the upcoming C2X revision of the ISO C
         standard are supported with -std=c2x and -std=gnu2x. Some of these
--- 2183,2189 ----
         sections.
         This functionality requires Binutils version 2.36 or later.
  
!   [38]C
  
       * Several new features from the upcoming C2X revision of the ISO C
         standard are supported with -std=c2x and -std=gnu2x. Some of these
*************** New Languages and Language specific impr
*** 2075,2092 ****
            + Labels may appear before declarations and at the end of a
              compound statement.
       * New warnings:
!           + [35]-Warray-parameter, enabled by -Wall, warns about
              redeclarations of functions with ordinary array arguments
              declared using inconsistent forms. The warning also enables
              the detection of the likely out of bounds accesses in calls to
              such functions with smaller arrays.
!           + [36]-Wvla-parameter, enabled by -Wall, warns redeclarations of
              functions with variable length array arguments declared using
              inconsistent forms or with mismatched bounds. The warning also
              enables the detection of the likely out of bounds accesses in
              calls to such functions with smaller arrays.
  
!   C++
  
       * The default mode has been changed to -std=gnu++17.
       * Several C++20 features have been implemented:
--- 2211,2228 ----
            + Labels may appear before declarations and at the end of a
              compound statement.
       * New warnings:
!           + [39]-Warray-parameter, enabled by -Wall, warns about
              redeclarations of functions with ordinary array arguments
              declared using inconsistent forms. The warning also enables
              the detection of the likely out of bounds accesses in calls to
              such functions with smaller arrays.
!           + [40]-Wvla-parameter, enabled by -Wall, warns redeclarations of
              functions with variable length array arguments declared using
              inconsistent forms or with mismatched bounds. The warning also
              enables the detection of the likely out of bounds accesses in
              calls to such functions with smaller arrays.
  
!   [41]C++
  
       * The default mode has been changed to -std=gnu++17.
       * Several C++20 features have been implemented:
*************** New Languages and Language specific impr
*** 2100,2111 ****
            + P1009R2, Array size deduction in new-expressions
            + P1099R5, using enum
            + Modules, Requires -fmodules-ts and some aspects are
!             incomplete. Refer to [37]C++ 20 Status
       * The C++ front end has experimental support for some of the upcoming
         C++23 draft features with the -std=c++23, -std=gnu++23, -std=c++2b
         or -std=gnu++2b flags, including
            + P0330R8, Literal Suffix for (signed) size_t.
!        For a full list of new features, see [38]the C++ status page.
       * Several C++ Defect Reports have been resolved, e.g.:
            + DR 625, Use of auto as a template-argument
            + DR 1512, Pointer comparison vs qualification conversions
--- 2236,2247 ----
            + P1009R2, Array size deduction in new-expressions
            + P1099R5, using enum
            + Modules, Requires -fmodules-ts and some aspects are
!             incomplete. Refer to [42]C++ 20 Status
       * The C++ front end has experimental support for some of the upcoming
         C++23 draft features with the -std=c++23, -std=gnu++23, -std=c++2b
         or -std=gnu++2b flags, including
            + P0330R8, Literal Suffix for (signed) size_t.
!        For a full list of new features, see [43]the C++ status page.
       * Several C++ Defect Reports have been resolved, e.g.:
            + DR 625, Use of auto as a template-argument
            + DR 1512, Pointer comparison vs qualification conversions
*************** New Languages and Language specific impr
*** 2118,2160 ****
            + DR 2303, Partial ordering and recursive variadic inheritance
            + DR 2369, Ordering between constraints and substitution
            + DR 2450, braced-init-list as a template-argument
!      * G++ now performs better access checking in templates ([39]PR41437).
       * reinterpret_casts in constexpr evaluation are now checked more
!        completely ([40]PR95307).
       * The diagnostic for static_assert has been improved: the compiler
         now shows the expression including its template arguments (if there
         were any), and can point to the failing clause if the condition
!        comprised of any logical AND operators ([41]PR97518).
       * New warnings:
!           + [42]-Wctad-maybe-unsupported, disabled by default, warns about
              performing class template argument deduction on a type with no
              deduction guides.
!           + [43]-Wrange-loop-construct, enabled by -Wall, warns when a
              range-based for-loop is creating unnecessary and expensive
              copies.
!           + [44]-Wdeprecated-enum-enum-conversion, enabled by default in
              C++20, warns about deprecated arithmetic conversions on
              operands of enumeration types, as outlined in
              [depr.arith.conv.enum].
!           + [45]-Wdeprecated-enum-float-conversion, enabled by default in
              C++20, warns about deprecated arithmetic conversions on
              operands where one is of enumeration type and the other is of
              a floating-point type, as outlined in [depr.arith.conv.enum].
!           + [46]-Wmismatched-new-delete, enabled by -Wall, warns about
              calls to C++ operator delete with pointers returned from
              mismatched forms of operator new or from other mismatched
              allocation functions.
!           + [47]-Wvexing-parse, enabled by default, warns about the most
              vexing parse rule: the cases when a declaration looks like a
              variable definition, but the C++ language requires it to be
              interpreted as a function declaration.
       * Enhancements to existing warnings:
!           + [48]-Wnonnull considers the implicit this argument of every
              C++ nonstatic member function to have been implicitly declared
              with attribute nonnull and triggers warnings for calls where
              the pointer is null.
  
!     Runtime Library (libstdc++)
  
       * Improved C++17 support, including:
            + std::from_chars and std::to_chars for floating-point types.
--- 2254,2296 ----
            + DR 2303, Partial ordering and recursive variadic inheritance
            + DR 2369, Ordering between constraints and substitution
            + DR 2450, braced-init-list as a template-argument
!      * G++ now performs better access checking in templates ([44]PR41437).
       * reinterpret_casts in constexpr evaluation are now checked more
!        completely ([45]PR95307).
       * The diagnostic for static_assert has been improved: the compiler
         now shows the expression including its template arguments (if there
         were any), and can point to the failing clause if the condition
!        comprised of any logical AND operators ([46]PR97518).
       * New warnings:
!           + [47]-Wctad-maybe-unsupported, disabled by default, warns about
              performing class template argument deduction on a type with no
              deduction guides.
!           + [48]-Wrange-loop-construct, enabled by -Wall, warns when a
              range-based for-loop is creating unnecessary and expensive
              copies.
!           + [49]-Wdeprecated-enum-enum-conversion, enabled by default in
              C++20, warns about deprecated arithmetic conversions on
              operands of enumeration types, as outlined in
              [depr.arith.conv.enum].
!           + [50]-Wdeprecated-enum-float-conversion, enabled by default in
              C++20, warns about deprecated arithmetic conversions on
              operands where one is of enumeration type and the other is of
              a floating-point type, as outlined in [depr.arith.conv.enum].
!           + [51]-Wmismatched-new-delete, enabled by -Wall, warns about
              calls to C++ operator delete with pointers returned from
              mismatched forms of operator new or from other mismatched
              allocation functions.
!           + [52]-Wvexing-parse, enabled by default, warns about the most
              vexing parse rule: the cases when a declaration looks like a
              variable definition, but the C++ language requires it to be
              interpreted as a function declaration.
       * Enhancements to existing warnings:
!           + [53]-Wnonnull considers the implicit this argument of every
              C++ nonstatic member function to have been implicitly declared
              with attribute nonnull and triggers warnings for calls where
              the pointer is null.
  
!     [54]Runtime Library (libstdc++)
  
       * Improved C++17 support, including:
            + std::from_chars and std::to_chars for floating-point types.
*************** New Languages and Language specific impr
*** 2175,2181 ****
         Parallelism 2 TS, thanks to Matthias Kretz.
       * Faster std::uniform_int_distribution, thanks to Daniel Lemire.
  
!   D
  
       * New features:
            + A new bottom type typeof(*null) has been added to represent
--- 2311,2317 ----
         Parallelism 2 TS, thanks to Matthias Kretz.
       * Faster std::uniform_int_distribution, thanks to Daniel Lemire.
  
!   [55]D
  
       * New features:
            + A new bottom type typeof(*null) has been added to represent
*************** New Languages and Language specific impr
*** 2202,2208 ****
              core.stdc.config module.
            + User-defined attributes can now be used to annotate enum
              members, alias declarations, and function parameters.
!           + Templates alias parameters can now be instantiated with basic
              types such as int or void function().
            + The mixin construct can now be used as types in the form
              mixin(string) var.
--- 2338,2344 ----
              core.stdc.config module.
            + User-defined attributes can now be used to annotate enum
              members, alias declarations, and function parameters.
!           + Template alias parameters can now be instantiated with basic
              types such as int or void function().
            + The mixin construct can now be used as types in the form
              mixin(string) var.
*************** New Languages and Language specific impr
*** 2297,2326 ****
            + The -fweak compiler switch has been removed, as it existed
              only for testing.
  
!   Fortran
  
       * Added DEPRECATED to !GCC$'s attributes directive.
  
!   Go
  
       * GCC 11 provides a complete implementation of the Go 1.16.3 user
         packages.
  
! libgccjit
  
!      * libgccjit was marked as merely "Alpha" quality when [49]originally
!        added in GCC 5. Given that we have maintained [50]API and ABI
         compatibility since then and it is in use by various projects, we
         have removed that caveat.
       * libgccjit can now be built for MinGW
       * The libgccjit API gained 10 new entry points:
!           + [51]gcc_jit_global_set_initializer
!           + 9 entrypoints for [52]directly embedding asm statements into a
              compile, analogous to inline asm in the C front end
  
! New Targets and Target Specific Improvements
  
!   AArch64 & arm
  
       * A number of new CPUs are supported through arguments to the -mcpu
         and -mtune options in both the arm and aarch64 back ends (GCC
--- 2433,2462 ----
            + The -fweak compiler switch has been removed, as it existed
              only for testing.
  
!   [56]Fortran
  
       * Added DEPRECATED to !GCC$'s attributes directive.
  
!   [57]Go
  
       * GCC 11 provides a complete implementation of the Go 1.16.3 user
         packages.
  
! [58]libgccjit
  
!      * libgccjit was marked as merely "Alpha" quality when [59]originally
!        added in GCC 5. Given that we have maintained [60]API and ABI
         compatibility since then and it is in use by various projects, we
         have removed that caveat.
       * libgccjit can now be built for MinGW
       * The libgccjit API gained 10 new entry points:
!           + [61]gcc_jit_global_set_initializer
!           + 9 entrypoints for [62]directly embedding asm statements into a
              compile, analogous to inline asm in the C front end
  
! [63]New Targets and Target Specific Improvements
  
!   [64]AArch64 & arm
  
       * A number of new CPUs are supported through arguments to the -mcpu
         and -mtune options in both the arm and aarch64 back ends (GCC
*************** New Targets and Target Specific Improvem
*** 2337,2343 ****
         in the Armv8.3-a (AArch64/AArch32), SVE (AArch64), SVE2 (AArch64)
         and MVE (AArch32 M-profile) instruction sets.
  
!   AArch64
  
       * In addition to the above, the following AArch64-only CPUs are now
         supported:
--- 2473,2479 ----
         in the Armv8.3-a (AArch64/AArch32), SVE (AArch64), SVE2 (AArch64)
         and MVE (AArch32 M-profile) instruction sets.
  
!   [65]AArch64
  
       * In addition to the above, the following AArch64-only CPUs are now
         supported:
*************** New Targets and Target Specific Improvem
*** 2345,2362 ****
            + Arm Cortex-R82 (cortex-r82).
       * The AArch64 Armv8-R architecture is now supported through the
         -march=armv8-r option.
!      * Mitigation against the [53]Straight-line Speculation vulnerability
         is supported with the -mharden-sls= option. Please refer to the
         documentation for usage instructions.
       * The availability of Advanced SIMD intrinsics available through the
         arm_neon.h header is improved and GCC 11 supports the full set of
         intrinsics defined by ACLE Q3 2020.
  
!   AMD Radeon (GCN)
  
       * Initial support for gfx908 GPUs has been added.
  
!   arm
  
       * Initial auto-vectorization is now available when targeting the MVE
         instruction set.
--- 2481,2498 ----
            + Arm Cortex-R82 (cortex-r82).
       * The AArch64 Armv8-R architecture is now supported through the
         -march=armv8-r option.
!      * Mitigation against the [66]Straight-line Speculation vulnerability
         is supported with the -mharden-sls= option. Please refer to the
         documentation for usage instructions.
       * The availability of Advanced SIMD intrinsics available through the
         arm_neon.h header is improved and GCC 11 supports the full set of
         intrinsics defined by ACLE Q3 2020.
  
!   [67]AMD Radeon (GCN)
  
       * Initial support for gfx908 GPUs has been added.
  
!   [68]arm
  
       * Initial auto-vectorization is now available when targeting the MVE
         instruction set.
*************** New Targets and Target Specific Improvem
*** 2366,2372 ****
         +nomve.fp to control generation of MVE and MVE floating-point
         instructions.
  
!   IA-32/x86-64
  
       * New ISA extension support for Intel TSXLDTRK was added to GCC.
         TSXLDTRK intrinsics are available via the -mtsxldtrk compiler
--- 2502,2508 ----
         +nomve.fp to control generation of MVE and MVE floating-point
         instructions.
  
!   [69]IA-32/x86-64
  
       * New ISA extension support for Intel TSXLDTRK was added to GCC.
         TSXLDTRK intrinsics are available via the -mtsxldtrk compiler
*************** New Targets and Target Specific Improvem
*** 2404,2410 ****
       * GCC now supports micro-architecture levels defined in the x86-64
         psABI via -march=x86-64-v2, -march=x86-64-v3 and -march=x86-64-v4.
  
!   Nios II
  
       * The options -mcustom-insn=N no longer produce compiler warnings if
         the custom instruction is not generated due to missing optimization
--- 2540,2546 ----
       * GCC now supports micro-architecture levels defined in the x86-64
         psABI via -march=x86-64-v2, -march=x86-64-v3 and -march=x86-64-v4.
  
!   [70]Nios II
  
       * The options -mcustom-insn=N no longer produce compiler warnings if
         the custom instruction is not generated due to missing optimization
*************** New Targets and Target Specific Improvem
*** 2415,2421 ****
         custom instructions supported by the Nios II Floating Point
         Hardware 2 Component.
  
!   NVPTX
  
       * The -misa default has changed from sm_30 to sm_35.
       * The -m32 compiler switch has been removed.
--- 2551,2557 ----
         custom instructions supported by the Nios II Floating Point
         Hardware 2 Component.
  
!   [71]NVPTX
  
       * The -misa default has changed from sm_30 to sm_35.
       * The -m32 compiler switch has been removed.
*************** New Targets and Target Specific Improvem
*** 2423,2429 ****
         it accepted -msoft-stack-reserve-local<n>. It now accepts
         -msoft-stack-reserve-local=<n>.
  
!   S/390, System z, IBM Z Systems
  
       * The behavior when compiling with -fexcess-precision=standard (e.g.,
         implied by -std=c99) on s390(x) targets can now be controlled at
--- 2559,2565 ----
         it accepted -msoft-stack-reserve-local<n>. It now accepts
         -msoft-stack-reserve-local=<n>.
  
!   [72]S/390, System z, IBM Z Systems
  
       * The behavior when compiling with -fexcess-precision=standard (e.g.,
         implied by -std=c99) on s390(x) targets can now be controlled at
*************** New Targets and Target Specific Improvem
*** 2435,2441 ****
         builds and cross compiles that have target libc headers, GCC will
         by default match the definition of float_t in the installed glibc.
  
!   RISC-V
  
       * Support address sanitizer for RISC-V.
       * Support big-endian for RISC-V, thanks to Marcus Comstedt.
--- 2571,2577 ----
         builds and cross compiles that have target libc headers, GCC will
         by default match the definition of float_t in the installed glibc.
  
!   [73]RISC-V
  
       * Support address sanitizer for RISC-V.
       * Support big-endian for RISC-V, thanks to Marcus Comstedt.
*************** New Targets and Target Specific Improvem
*** 2462,2470 ****
       * Introduce shorten_memrefs optimization, which reduces the code size
         for memory access, thanks to Craig Blackmore.
  
! Operating Systems
  
!   AIX
  
       * GCC for AIX can be built as a 64-bit application and the runtime is
         built as FAT libraries containing both 32-bit and 64-bit objects.
--- 2598,2606 ----
       * Introduce shorten_memrefs optimization, which reduces the code size
         for memory access, thanks to Craig Blackmore.
  
! [74]Operating Systems
  
!   [75]AIX
  
       * GCC for AIX can be built as a 64-bit application and the runtime is
         built as FAT libraries containing both 32-bit and 64-bit objects.
*************** Operating Systems
*** 2473,2482 ****
       * Use thread-safe access in ctype.
       * Link with libc128.a when long-double-128 enabled.
  
! Improvements to Static Analyzer
  
       * The implementation of how program state is tracked within
!        [54]-fanalyzer has been completely rewritten for GCC 11, fixing
         numerous bugs, and allowing for the analyzer to scale to larger C
         source files.
       * The analysis of allocations and deallocations has been generalized
--- 2609,2618 ----
       * Use thread-safe access in ctype.
       * Link with libc128.a when long-double-128 enabled.
  
! [76]Improvements to Static Analyzer
  
       * The implementation of how program state is tracked within
!        [77]-fanalyzer has been completely rewritten for GCC 11, fixing
         numerous bugs, and allowing for the analyzer to scale to larger C
         source files.
       * The analysis of allocations and deallocations has been generalized
*************** Improvements to Static Analyzer
*** 2484,2542 ****
            + As preliminary work towards eventually supporting C++, the
              malloc/free checking will also check new/delete and
              new[]/delete[]. However, C++ is not yet properly supported by
!             [55]-fanalyzer (for example, exception-handling is
              unimplemented).
!           + As noted above, the existing [56]malloc attribute has been
              extended so that it can be used to identify
              allocator/deallocator API pairs. The analyzer will use these
              attributes when checking for leaks, double-frees,
              use-after-frees, and similar issues.
!           + A new [57]-Wanalyzer-mismatching-deallocation warning has been
              added, covering such mismatches as using scalar delete rather
              vector delete[].
       * The analyzer has gained warnings
!        [58]-Wanalyzer-shift-count-negative,
!        [59]-Wanalyzer-shift-count-overflow, [60]-Wanalyzer-write-to-const,
!        and [61]-Wanalyzer-write-to-string-literal, all enabled by default
!        when [62]-fanalyzer is enabled.
       * The analyzer can now be extended by GCC plugins, allowing for
         domain-specific path-sensitive warnings. An example of using a
!        [63]GCC plugin to check for misuses of CPython's global interpreter
         lock can be seen in the test suite
       * The analyzer has gained new debugging options
!        [64]-fdump-analyzer-json and [65]-fno-analyzer-feasibility.
  
  Other significant improvements
  
       * GCC has gained a new environment variable
!        [66]GCC_EXTRA_DIAGNOSTIC_OUTPUT which can be used by IDEs to
         request machine-readable fix-it hints without needing to adjust
         build flags.
  
! GCC 11.1
  
!    This is the [67]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 11.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! GCC 11.2
  
!    This is the [68]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 11.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! GCC 11.3
  
!    This is the [69]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 11.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! GCC 11.4
  
!    This is the [70]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 11.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
--- 2620,2678 ----
            + As preliminary work towards eventually supporting C++, the
              malloc/free checking will also check new/delete and
              new[]/delete[]. However, C++ is not yet properly supported by
!             [78]-fanalyzer (for example, exception-handling is
              unimplemented).
!           + As noted above, the existing [79]malloc attribute has been
              extended so that it can be used to identify
              allocator/deallocator API pairs. The analyzer will use these
              attributes when checking for leaks, double-frees,
              use-after-frees, and similar issues.
!           + A new [80]-Wanalyzer-mismatching-deallocation warning has been
              added, covering such mismatches as using scalar delete rather
              vector delete[].
       * The analyzer has gained warnings
!        [81]-Wanalyzer-shift-count-negative,
!        [82]-Wanalyzer-shift-count-overflow, [83]-Wanalyzer-write-to-const,
!        and [84]-Wanalyzer-write-to-string-literal, all enabled by default
!        when [85]-fanalyzer is enabled.
       * The analyzer can now be extended by GCC plugins, allowing for
         domain-specific path-sensitive warnings. An example of using a
!        [86]GCC plugin to check for misuses of CPython's global interpreter
         lock can be seen in the test suite
       * The analyzer has gained new debugging options
!        [87]-fdump-analyzer-json and [88]-fno-analyzer-feasibility.
  
  Other significant improvements
  
       * GCC has gained a new environment variable
!        [89]GCC_EXTRA_DIAGNOSTIC_OUTPUT which can be used by IDEs to
         request machine-readable fix-it hints without needing to adjust
         build flags.
  
! [90]GCC 11.1
  
!    This is the [91]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 11.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [92]GCC 11.2
  
!    This is the [93]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 11.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [94]GCC 11.3
  
!    This is the [95]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 11.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [96]GCC 11.4
  
!    This is the [97]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 11.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
*************** GCC 11.4
*** 2555,2574 ****
       * Add CS prefix to call and jmp to indirect thunk with branch target
         in r8-r15 registers via -mindirect-branch-cs-prefix.
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [71]GCC manuals. If that fails, the
!     [72]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [73]gcc@gcc.gnu.org. All of [74]our lists have public
      archives.
  
!    Copyright (C) [75]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [76]maintained by the GCC team. Last modified
!    2024-05-09.
  
  References
  
--- 2691,2729 ----
       * Add CS prefix to call and jmp to indirect thunk with branch target
         in r8-r15 registers via -mindirect-branch-cs-prefix.
  
+ [98]GCC 11.5
+ 
+    This is the [99]list of problem reports (PRs) from GCC's bug tracking
+    system that are known to be fixed in the 11.5 release. This list might
+    not be complete (that is, it is possible that some PRs that have been
+    fixed are not listed here).
+ 
+   Caveats
+ 
+     aarch64
+ 
+      * Due to a bug introduced a few weeks before the 11.5.0 release if
+        the compiler is configured without explicit --with-arch=,
+        --with=cpu= and/or --with-tune= configure options the compiler
+        without explicit -march= etc. options might act as if asked for
+        cortex-a34. This can be fixed by applying manually the
+        [100]r12-8060 commit patch on top of GCC 11.5.0. See [101]PR116029
+        for more details. GCC 11.4.0 or earlier releases are not affected.
+ 
  
      For questions related to the use of GCC, please consult these web
!     pages and the [102]GCC manuals. If that fails, the
!     [103]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [104]gcc@gcc.gnu.org. All of [105]our lists have public
      archives.
  
!    Copyright (C) [106]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [107]maintained by the GCC team. Last modified
!    2025-01-31.
  
  References
  
*************** References
*** 2576,2653 ****
     2. https://gcc.gnu.org/onlinedocs/index.html#current
     3. https://wg21.link/p0522r0
     4. https://gcc.gnu.org/pipermail/gcc-patches/2020-May/546494.html
!    5. https://github.com/google/sanitizers/wiki/ThreadSanitizerCppManual
!    6. https://www.kernel.org/doc/html/latest/dev-tools/kcsan.html
!    7. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-column-unit
!    8. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-column-origin
!    9. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
!   10. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Preprocessor-Options.html#index-ftabstop
!   11. https://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html
!   12. https://github.com/google/sanitizers/wiki/AddressSanitizer
!   13. https://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html
!   14. https://dwarfstd.org/doc/DWARF5.pdf
!   15. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Code-Gen-Options.html#index-fno-bit-tests
!   16. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Optimize-Options.html#index-fipa-modref
!   17. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Optimize-Options.html#index-fipa-ocf
!   18. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Optimize-Options.html#index-fprofile-values
!   19. https://www.openmp.org/specifications/
!   20. https://www.openacc.org/
!   21. https://gcc.gnu.org/wiki/OpenACC/Implementation Status#status-11
!   22. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/libgomp/Enabling-OpenACC.html
!   23. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Common-Function-Attributes.html#index-no_005fstack_005fprotector-function-attribute
!   24. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Common-Function-Attributes.html#index-malloc-function-attribute
!   25. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wmismatched-dealloc
!   26. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wmismatched-new-delete
!   27. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wfree-nonheap-object
    28. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wmismatched-dealloc
!   29. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wsizeof-array-div
!   30. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wstringop-overread
!   31. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wtsan
!   32. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wfree-nonheap-object
!   33. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wmaybe-uninitialized
!   34. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wuninitialized
!   35. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Warray-parameter
!   36. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wvla-parameter
!   37. https://gcc.gnu.org/projects/cxx-status.html#cxx20
!   38. https://gcc.gnu.org/projects/cxx-status.html#cxx23
!   39. https://gcc.gnu.org/PR41437
!   40. https://gcc.gnu.org/PR95307
!   41. https://gcc.gnu.org/PR97518
!   42. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wctad-maybe-unsupported
!   43. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wrange-loop-construct
!   44. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-enum-enum-conversion
!   45. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-enum-float-conversion
!   46. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wmismatched-new-delete
!   47. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wvexing-parse
!   48. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wnonnull
!   49. https://gcc.gnu.org/gcc-5/changes.html#jit
!   50. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/jit/topics/compatibility.html
!   51. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/jit/topics/expressions.html#c.gcc_jit_global_set_initializer
!   52. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/jit/topics/asm.html
!   53. https://developer.arm.com/documentation/102587/0102/Straight-line-speculation-frequently-asked-questions
!   54. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html
!   55. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html
!   56. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Common-Function-Attributes.html#index-malloc-function-attribute
!   57. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-mismatching-deallocation
!   58. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-shift-count-negative
!   59. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-shift-count-overflow
!   60. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-const
!   61. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-string-literal
!   62. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html
!   63. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=66dde7bc64b75d4a338266333c9c490b12d49825
!   64. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-fdump-analyzer-json
!   65. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-fno-analyzer-feasibility
!   66. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Environment-Variables.html#index-GCC_005fEXTRA_005fDIAGNOSTIC_005fOUTPUT
!   67. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.0
!   68. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.2
!   69. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.3
!   70. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.4
!   71. https://gcc.gnu.org/onlinedocs/
!   72. mailto:gcc-help@gcc.gnu.org
!   73. mailto:gcc@gcc.gnu.org
!   74. https://gcc.gnu.org/lists.html
!   75. https://www.fsf.org/
!   76. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-10/index.html
                               GCC 10 Release Series
--- 2731,2839 ----
     2. https://gcc.gnu.org/onlinedocs/index.html#current
     3. https://wg21.link/p0522r0
     4. https://gcc.gnu.org/pipermail/gcc-patches/2020-May/546494.html
!    5. https://gcc.gnu.org/gcc-11/changes.html#general
!    6. https://github.com/google/sanitizers/wiki/ThreadSanitizerCppManual
!    7. https://www.kernel.org/doc/html/latest/dev-tools/kcsan.html
!    8. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-column-unit
!    9. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-column-origin
!   10. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
!   11. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Preprocessor-Options.html#index-ftabstop
!   12. https://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html
!   13. https://github.com/google/sanitizers/wiki/AddressSanitizer
!   14. https://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html
!   15. https://dwarfstd.org/doc/DWARF5.pdf
!   16. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Code-Gen-Options.html#index-fno-bit-tests
!   17. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Optimize-Options.html#index-fipa-modref
!   18. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Optimize-Options.html#index-fipa-ocf
!   19. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Optimize-Options.html#index-fprofile-values
!   20. https://gcc.gnu.org/gcc-11/changes.html#languages
!   21. https://www.openmp.org/specifications/
!   22. https://www.openacc.org/
!   23. https://gcc.gnu.org/wiki/OpenACC/Implementation Status#status-11
!   24. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/libgomp/Enabling-OpenACC.html
!   25. https://gcc.gnu.org/gcc-11/changes.html#c-family
!   26. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Common-Function-Attributes.html#index-no_005fstack_005fprotector-function-attribute
!   27. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Common-Function-Attributes.html#index-malloc-function-attribute
    28. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wmismatched-dealloc
!   29. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wmismatched-new-delete
!   30. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wfree-nonheap-object
!   31. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wmismatched-dealloc
!   32. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wsizeof-array-div
!   33. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wstringop-overread
!   34. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wtsan
!   35. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wfree-nonheap-object
!   36. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wmaybe-uninitialized
!   37. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wuninitialized
!   38. https://gcc.gnu.org/gcc-11/changes.html#c
!   39. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Warray-parameter
!   40. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wvla-parameter
!   41. https://gcc.gnu.org/gcc-11/changes.html#cxx
!   42. https://gcc.gnu.org/projects/cxx-status.html#cxx20
!   43. https://gcc.gnu.org/projects/cxx-status.html#cxx23
!   44. https://gcc.gnu.org/PR41437
!   45. https://gcc.gnu.org/PR95307
!   46. https://gcc.gnu.org/PR97518
!   47. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wctad-maybe-unsupported
!   48. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wrange-loop-construct
!   49. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-enum-enum-conversion
!   50. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-enum-float-conversion
!   51. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wmismatched-new-delete
!   52. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wvexing-parse
!   53. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wnonnull
!   54. https://gcc.gnu.org/gcc-11/changes.html#libstdcxx
!   55. https://gcc.gnu.org/gcc-11/changes.html#d
!   56. https://gcc.gnu.org/gcc-11/changes.html#fortran
!   57. https://gcc.gnu.org/gcc-11/changes.html#go
!   58. https://gcc.gnu.org/gcc-11/changes.html#jit
!   59. https://gcc.gnu.org/gcc-5/changes.html#jit
!   60. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/jit/topics/compatibility.html
!   61. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/jit/topics/expressions.html#c.gcc_jit_global_set_initializer
!   62. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/jit/topics/asm.html
!   63. https://gcc.gnu.org/gcc-11/changes.html#targets
!   64. https://gcc.gnu.org/gcc-11/changes.html#arm-targets
!   65. https://gcc.gnu.org/gcc-11/changes.html#aarch64
!   66. https://developer.arm.com/documentation/102587/0102/Straight-line-speculation-frequently-asked-questions
!   67. https://gcc.gnu.org/gcc-11/changes.html#amdgcn
!   68. https://gcc.gnu.org/gcc-11/changes.html#arm
!   69. https://gcc.gnu.org/gcc-11/changes.html#x86
!   70. https://gcc.gnu.org/gcc-11/changes.html#nios2
!   71. https://gcc.gnu.org/gcc-11/changes.html#nvptx
!   72. https://gcc.gnu.org/gcc-11/changes.html#s390
!   73. https://gcc.gnu.org/gcc-11/changes.html#riscv
!   74. https://gcc.gnu.org/gcc-11/changes.html#os
!   75. https://gcc.gnu.org/gcc-11/changes.html#aix
!   76. https://gcc.gnu.org/gcc-11/changes.html#analyzer
!   77. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html
!   78. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html
!   79. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Common-Function-Attributes.html#index-malloc-function-attribute
!   80. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-mismatching-deallocation
!   81. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-shift-count-negative
!   82. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-shift-count-overflow
!   83. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-const
!   84. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-string-literal
!   85. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html
!   86. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=66dde7bc64b75d4a338266333c9c490b12d49825
!   87. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-fdump-analyzer-json
!   88. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-fno-analyzer-feasibility
!   89. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Environment-Variables.html#index-GCC_005fEXTRA_005fDIAGNOSTIC_005fOUTPUT
!   90. https://gcc.gnu.org/gcc-11/changes.html#11.1
!   91. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.0
!   92. https://gcc.gnu.org/gcc-11/changes.html#11.2
!   93. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.2
!   94. https://gcc.gnu.org/gcc-11/changes.html#11.3
!   95. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.3
!   96. https://gcc.gnu.org/gcc-11/changes.html#11.4
!   97. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.4
!   98. https://gcc.gnu.org/gcc-11/changes.html#11.5
!   99. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.5
!  100. https://gcc.gnu.org/r12-8060
!  101. https://gcc.gnu.org/PR116029
!  102. https://gcc.gnu.org/onlinedocs/
!  103. mailto:gcc-help@gcc.gnu.org
!  104. mailto:gcc@gcc.gnu.org
!  105. https://gcc.gnu.org/lists.html
!  106. https://www.fsf.org/
!  107. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-10/index.html
                               GCC 10 Release Series
*************** References and Acknowledgements
*** 2709,2730 ****
     provided this notice is preserved.
  
     These pages are [22]maintained by the GCC team. Last modified
!    2023-10-15.
  
  References
  
     1. http://www.gnu.org/
     2. https://gcc.gnu.org/gcc-10/changes.html
!    3. http://gcc.gnu.org/onlinedocs/10.5.0/
     4. https://gcc.gnu.org/gcc-10/changes.html
!    5. http://gcc.gnu.org/onlinedocs/10.4.0/
     6. https://gcc.gnu.org/gcc-10/changes.html
!    7. http://gcc.gnu.org/onlinedocs/10.3.0/
     8. https://gcc.gnu.org/gcc-10/changes.html
!    9. http://gcc.gnu.org/onlinedocs/10.2.0/
    10. https://gcc.gnu.org/gcc-10/changes.html
!   11. http://gcc.gnu.org/onlinedocs/10.1.0/
!   12. http://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Contributors.html
    13. https://gcc.gnu.org/index.html
    14. mailto:gcc@gcc.gnu.org
    15. https://gcc.gnu.org/mirrors.html
--- 2895,2916 ----
     provided this notice is preserved.
  
     These pages are [22]maintained by the GCC team. Last modified
!    2024-05-30.
  
  References
  
     1. http://www.gnu.org/
     2. https://gcc.gnu.org/gcc-10/changes.html
!    3. https://gcc.gnu.org/onlinedocs/10.5.0/
     4. https://gcc.gnu.org/gcc-10/changes.html
!    5. https://gcc.gnu.org/onlinedocs/10.4.0/
     6. https://gcc.gnu.org/gcc-10/changes.html
!    7. https://gcc.gnu.org/onlinedocs/10.3.0/
     8. https://gcc.gnu.org/gcc-10/changes.html
!    9. https://gcc.gnu.org/onlinedocs/10.2.0/
    10. https://gcc.gnu.org/gcc-10/changes.html
!   11. https://gcc.gnu.org/onlinedocs/10.1.0/
!   12. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Contributors.html
    13. https://gcc.gnu.org/index.html
    14. mailto:gcc@gcc.gnu.org
    15. https://gcc.gnu.org/mirrors.html
*************** Caveats
*** 2773,2803 ****
         std::istreambuf_iterator was changed in C++98 mode to be consistent
         with C++11 and later standards. See the [5]libstdc++ notes below
         for more details.
  
! General Improvements
  
       * New built-in functions:
!           + The [6]__has_builtin built-in preprocessor operator can be
              used to query support for built-in functions provided by GCC
              and other compilers that support it.
            + __builtin_roundeven for the corresponding function from
              ISO/IEC TS 18661.
       * New command-line options:
!           + [7]-fallocation-dce removes unneeded pairs of new and delete
              operators.
!           + [8]-fprofile-partial-training can now be used to inform the
              compiler that code paths not covered by the training run
              should not be optimized for size.
!           + [9]-fprofile-reproducible controls level of reproducibility of
!             profile gathered by [10]-fprofile-generate. This makes it
              possible to rebuild program with same outcome which is useful,
              for example, for distribution packages.
!           + [11]-fprofile-prefix-path can be used in combination with
              -fprofile-generate=profile_dir and -fprofile-use=profile_dir
              to inform GCC where the base directory of build source tree is
              in case it differs between instrumentation and optimized
              builds.
!           + [12]-fanalyzer enables a new static analysis pass and
              associated warnings. This pass performs a time-consuming
              exploration of paths through the code in the hope of detecting
              various common errors, such as double-free bugs. This option
--- 2959,2991 ----
         std::istreambuf_iterator was changed in C++98 mode to be consistent
         with C++11 and later standards. See the [5]libstdc++ notes below
         for more details.
+      * GCC 10.5 does not bootstrap with a C++98 compiler; if you need to
+        start from C++98, you should build 10.4 or 9.5 instead.
  
! [6]General Improvements
  
       * New built-in functions:
!           + The [7]__has_builtin built-in preprocessor operator can be
              used to query support for built-in functions provided by GCC
              and other compilers that support it.
            + __builtin_roundeven for the corresponding function from
              ISO/IEC TS 18661.
       * New command-line options:
!           + [8]-fallocation-dce removes unneeded pairs of new and delete
              operators.
!           + [9]-fprofile-partial-training can now be used to inform the
              compiler that code paths not covered by the training run
              should not be optimized for size.
!           + [10]-fprofile-reproducible controls level of reproducibility
!             of profile gathered by [11]-fprofile-generate. This makes it
              possible to rebuild program with same outcome which is useful,
              for example, for distribution packages.
!           + [12]-fprofile-prefix-path can be used in combination with
              -fprofile-generate=profile_dir and -fprofile-use=profile_dir
              to inform GCC where the base directory of build source tree is
              in case it differs between instrumentation and optimized
              builds.
!           + [13]-fanalyzer enables a new static analysis pass and
              associated warnings. This pass performs a time-consuming
              exploration of paths through the code in the hope of detecting
              various common errors, such as double-free bugs. This option
*************** General Improvements
*** 2807,2813 ****
            + The inter-procedural scalar replacement of aggregates
              (IPA-SRA) pass was re-implemented to work at link-time and can
              now also remove computing and returning unused return values.
!           + [13]-finline-functions is now enabled at -O2 and was retuned
              for better code size versus runtime performance trade-offs.
              Inliner heuristics was also significantly sped up to avoid
              negative impact to -flto -O2 compile times.
--- 2995,3001 ----
            + The inter-procedural scalar replacement of aggregates
              (IPA-SRA) pass was re-implemented to work at link-time and can
              now also remove computing and returning unused return values.
!           + [14]-finline-functions is now enabled at -O2 and was retuned
              for better code size versus runtime performance trade-offs.
              Inliner heuristics was also significantly sped up to avoid
              negative impact to -flto -O2 compile times.
*************** General Improvements
*** 2817,2828 ****
            + During link-time optimization the C++ One Definition Rule is
              used to increase precision of type based alias analysis.
       * Link-time optimization improvements:
!           + A new binary [14]lto-dump has been added. It dumps various
              information about LTO bytecode object files.
            + The parallel phase of the LTO can automatically detect a
              running make's jobserver or fall back to number of available
              cores.
!           + The LTO bytecode can be compressed with the [15]zstd
              algorithm. The configure script automatically detects zstd
              support.
            + Most --param values can now be specified at translation unit
--- 3005,3016 ----
            + During link-time optimization the C++ One Definition Rule is
              used to increase precision of type based alias analysis.
       * Link-time optimization improvements:
!           + A new binary [15]lto-dump has been added. It dumps various
              information about LTO bytecode object files.
            + The parallel phase of the LTO can automatically detect a
              running make's jobserver or fall back to number of available
              cores.
!           + The LTO bytecode can be compressed with the [16]zstd
              algorithm. The configure script automatically detects zstd
              support.
            + Most --param values can now be specified at translation unit
*************** General Improvements
*** 2835,2861 ****
       * Profile driven optimization improvements:
            + Profile maintenance during compilation and hot/cold code
              partitioning have been improved.
!           + Using [16]-fprofile-values, an instrumented binary can track
              multiple values (up to 4) for e.g. indirect calls and provide
              more precise profile information.
  
! New Languages and Language-Specific Improvements
  
!      * Version 2.6 of the [17]OpenACC specification is now supported by
!        the C, C++ and Fortran compilers. See the [18]implementation status
!        section on the OpenACC wiki page and the [19]run-time library
         documentation for further information.
!      * GCC 10 adds a number of newly implemented [20]OpenMP 5.0 features
         such as conditional lastprivate clause, scan and loop directives,
         order(concurrent) and use_device_addr clauses support, if clause on
         simd construct, and partial support for the declare variant
         directive, getting closer to full support of the OpenMP 5.0
         standard.
!      * OpenMP and OpenACC now support [21]offloading to AMD Radeon (GCN)
         GPUs; supported are the third-generation Fiji (fiji) and the
         fifth-generation VEGA 10/VEGA 20 (gfx900 or gfx906).
  
!   C family
  
       * New attributes:
            + The access function and type attribute has been added to
--- 3023,3049 ----
       * Profile driven optimization improvements:
            + Profile maintenance during compilation and hot/cold code
              partitioning have been improved.
!           + Using [17]-fprofile-values, an instrumented binary can track
              multiple values (up to 4) for e.g. indirect calls and provide
              more precise profile information.
  
! [18]New Languages and Language-Specific Improvements
  
!      * Version 2.6 of the [19]OpenACC specification is now supported by
!        the C, C++ and Fortran compilers. See the [20]implementation status
!        section on the OpenACC wiki page and the [21]run-time library
         documentation for further information.
!      * GCC 10 adds a number of newly implemented [22]OpenMP 5.0 features
         such as conditional lastprivate clause, scan and loop directives,
         order(concurrent) and use_device_addr clauses support, if clause on
         simd construct, and partial support for the declare variant
         directive, getting closer to full support of the OpenMP 5.0
         standard.
!      * OpenMP and OpenACC now support [23]offloading to AMD Radeon (GCN)
         GPUs; supported are the third-generation Fiji (fiji) and the
         fifth-generation VEGA 10/VEGA 20 (gfx900 or gfx906).
  
!   [24]C family
  
       * New attributes:
            + The access function and type attribute has been added to
*************** New Languages and Language-Specific Impr
*** 2870,2901 ****
              inline assembly with GNU as symver directive because the
              latter is not compatible with link-time optimizations.
       * New warnings:
!           + [22]-Wstring-compare, enabled by -Wextra, warns about equality
              and inequality expressions between zero and the result of a
              call to either strcmp and strncmp that evaluate to a constant
              as a result of the length of one argument being greater than
              the size of the array pointed to by the other.
!           + [23]-Wzero-length-bounds, enabled by -Warray-bounds, warns
              about accesses to elements of zero-length arrays that might
              overlap other members of the same object.
       * Enhancements to existing warnings:
!           + [24]-Warray-bounds detects more out-of-bounds accesses to
              member arrays as well as accesses to elements of zero-length
              arrays.
!           + [25]-Wformat-overflow makes full use of string length
              information computed by the strlen optimization pass.
!           + [26]-Wrestrict detects overlapping accesses to dynamically
              allocated objects.
!           + [27]-Wreturn-local-addr diagnoses more instances of return
              statements returning addresses of automatic variables.
!           + [28]-Wstringop-overflow detects more out-of-bounds stores to
              member arrays including zero-length arrays, dynamically
              allocated objects and variable length arrays, as well as more
              instances of reads of unterminated character arrays by string
              built-in functions. The warning also detects out-of-bounds
              accesses by calls to user-defined functions declared with the
              new attribute access.
!           + [29]-Warith-conversion re-enables warnings from -Wconversion,
              -Wfloat-conversion, and -Wsign-conversion that are now off by
              default for an expression where the result of an arithmetic
              operation will not fit in the target type due to promotion,
--- 3058,3089 ----
              inline assembly with GNU as symver directive because the
              latter is not compatible with link-time optimizations.
       * New warnings:
!           + [25]-Wstring-compare, enabled by -Wextra, warns about equality
              and inequality expressions between zero and the result of a
              call to either strcmp and strncmp that evaluate to a constant
              as a result of the length of one argument being greater than
              the size of the array pointed to by the other.
!           + [26]-Wzero-length-bounds, enabled by -Warray-bounds, warns
              about accesses to elements of zero-length arrays that might
              overlap other members of the same object.
       * Enhancements to existing warnings:
!           + [27]-Warray-bounds detects more out-of-bounds accesses to
              member arrays as well as accesses to elements of zero-length
              arrays.
!           + [28]-Wformat-overflow makes full use of string length
              information computed by the strlen optimization pass.
!           + [29]-Wrestrict detects overlapping accesses to dynamically
              allocated objects.
!           + [30]-Wreturn-local-addr diagnoses more instances of return
              statements returning addresses of automatic variables.
!           + [31]-Wstringop-overflow detects more out-of-bounds stores to
              member arrays including zero-length arrays, dynamically
              allocated objects and variable length arrays, as well as more
              instances of reads of unterminated character arrays by string
              built-in functions. The warning also detects out-of-bounds
              accesses by calls to user-defined functions declared with the
              new attribute access.
!           + [32]-Warith-conversion re-enables warnings from -Wconversion,
              -Wfloat-conversion, and -Wsign-conversion that are now off by
              default for an expression where the result of an arithmetic
              operation will not fit in the target type due to promotion,
*************** int get_naïve_pi() {
*** 2909,2915 ****
    return π;
  }
  
!   C
  
       * Several new features from the upcoming C2X revision of the ISO C
         standard are supported with -std=c2x and -std=gnu2x. Some of these
--- 3097,3103 ----
    return π;
  }
  
!   [33]C
  
       * Several new features from the upcoming C2X revision of the ISO C
         standard are supported with -std=c2x and -std=gnu2x. Some of these
*************** int get_naïve_pi() {
*** 2943,2949 ****
         errors. With -fcommon such definitions are silently merged during
         linking.
  
!   C++
  
       * Several C++20 features have been implemented:
            + Concepts, including P0734R0, P0857R0, P1084R2, P1141R2,
--- 3131,3137 ----
         errors. With -fcommon such definitions are silently merged during
         linking.
  
!   [34]C++
  
       * Several C++20 features have been implemented:
            + Concepts, including P0734R0, P0857R0, P1084R2, P1141R2,
*************** int get_naïve_pi() {
*** 2980,2992 ****
              initializer-list
            + DR 1710, Missing template keyword in class-or-decltype
       * New warnings:
!           + [30]-Wmismatched-tags, disabled by default, warns about
              declarations of structs, classes, and class templates and
              their specializations with a class-key that does not match
              either the definition or the first declaration if no
              definition is provided. The option is provided to ease
              portability to Windows-based compilers.
!           + [31]-Wredundant-tags, disabled by default, warns about
              redundant class-key and enum-key in contexts where the key can
              be eliminated without causing an syntactic ambiguity.
       * G++ can now detect modifying constant objects in constexpr
--- 3168,3180 ----
              initializer-list
            + DR 1710, Missing template keyword in class-or-decltype
       * New warnings:
!           + [35]-Wmismatched-tags, disabled by default, warns about
              declarations of structs, classes, and class templates and
              their specializations with a class-key that does not match
              either the definition or the first declaration if no
              definition is provided. The option is provided to ease
              portability to Windows-based compilers.
!           + [36]-Wredundant-tags, disabled by default, warns about
              redundant class-key and enum-key in contexts where the key can
              be eliminated without causing an syntactic ambiguity.
       * G++ can now detect modifying constant objects in constexpr
*************** int get_naïve_pi() {
*** 3000,3007 ****
         context as per [class.mem].
       * The attribute deprecated can now be used on namespaces too.
       * The ABI of passing and returning certain C++ classes by value
!        changed on several targets in GCC 10, including [32]AArch64,
!        [33]ARM, [34]PowerPC ELFv2, [35]S/390 and [36]Itanium. These
         changes affect classes with a zero-sized subobject (an empty base
         class, or data member with the [[no_unique_address]] attribute)
         where all other non-static data members have the same type (this is
--- 3188,3195 ----
         context as per [class.mem].
       * The attribute deprecated can now be used on namespaces too.
       * The ABI of passing and returning certain C++ classes by value
!        changed on several targets in GCC 10, including [37]AArch64,
!        [38]ARM, [39]PowerPC ELFv2, [40]S/390 and [41]Itanium. These
         changes affect classes with a zero-sized subobject (an empty base
         class, or data member with the [[no_unique_address]] attribute)
         where all other non-static data members have the same type (this is
*************** int get_naïve_pi() {
*** 3021,3027 ****
         the ABI argument passing decisions as they should be. Both of these
         ABI changes are now diagnosed with -Wpsabi.
  
!     Runtime Library (libstdc++)
  
       * Improved experimental C++2a support, including:
            + Library concepts in <concepts> and <iterator>.
--- 3209,3215 ----
         the ABI argument passing decisions as they should be. Both of these
         ABI changes are now diagnosed with -Wpsabi.
  
!     [42]Runtime Library (libstdc++)
  
       * Improved experimental C++2a support, including:
            + Library concepts in <concepts> and <iterator>.
*************** int get_naïve_pi() {
*** 3049,3057 ****
         subobjects of type std::istreambuf_iterator<C> and another iterator
         type with a std::iterator<input_iterator_tag, C, ...> base class.
         The layout of such a type might change when compiled as C++98.
!        [37]Bug 92285 has more details and concrete examples.
  
!   D
  
       * Support for static foreach has been implemented.
       * Aliases can now be created directly from any __traits that return
--- 3237,3245 ----
         subobjects of type std::istreambuf_iterator<C> and another iterator
         type with a std::iterator<input_iterator_tag, C, ...> base class.
         The layout of such a type might change when compiled as C++98.
!        [43]Bug 92285 has more details and concrete examples.
  
!   [44]D
  
       * Support for static foreach has been implemented.
       * Aliases can now be created directly from any __traits that return
*************** int get_naïve_pi() {
*** 3077,3085 ****
         whether to build only the core D runtime library, or both the core
         and standard libraries into libphobos.
  
!   Fortran
  
!      * use_device_addr of version 5.0 of the [38]OpenMP specification is
         now supported. Note that otherwise OpenMP 4.5 is partially
         supported in the Fortran compiler; the largest missing item is
         structure element mapping.
--- 3265,3273 ----
         whether to build only the core D runtime library, or both the core
         and standard libraries into libphobos.
  
!   [45]Fortran
  
!      * use_device_addr of version 5.0 of the [46]OpenMP specification is
         now supported. Note that otherwise OpenMP 4.5 is partially
         supported in the Fortran compiler; the largest missing item is
         structure element mapping.
*************** int get_naïve_pi() {
*** 3138,3159 ****
         change therefore breaks the ABI, but only for cases where this 126
         character limit was exceeded.
  
!   Go
  
       * GCC 10 provides a complete implementation of the Go 1.14.6 user
         packages.
  
! libgccjit
  
       * The libgccjit API gained four new entry points:
!           + [39]gcc_jit_version_major, [40]gcc_jit_version_minor, and
!             [41]gcc_jit_version_patchlevel for programmatically checking
              the libgccjit version from client code, and
!           + [42]gcc_jit_context_new_bitfield
  
! New Targets and Target Specific Improvements
  
!   AArch64 & arm
  
       * The AArch64 and arm ports now support condition flag output
         constraints in inline assembly, as indicated by the
--- 3326,3347 ----
         change therefore breaks the ABI, but only for cases where this 126
         character limit was exceeded.
  
!   [47]Go
  
       * GCC 10 provides a complete implementation of the Go 1.14.6 user
         packages.
  
! [48]libgccjit
  
       * The libgccjit API gained four new entry points:
!           + [49]gcc_jit_version_major, [50]gcc_jit_version_minor, and
!             [51]gcc_jit_version_patchlevel for programmatically checking
              the libgccjit version from client code, and
!           + [52]gcc_jit_context_new_bitfield
  
! [53]New Targets and Target Specific Improvements
  
!   [54]AArch64 & arm
  
       * The AArch64 and arm ports now support condition flag output
         constraints in inline assembly, as indicated by the
*************** New Targets and Target Specific Improvem
*** 3161,3167 ****
         A32 and T32 targets. Please refer to the documentation for more
         details.
  
!   AArch64
  
       * There have been several improvements related to the Scalable Vector
         Extension (SVE):
--- 3349,3355 ----
         A32 and T32 targets. Please refer to the documentation for more
         details.
  
!   [55]AArch64
  
       * There have been several improvements related to the Scalable Vector
         Extension (SVE):
*************** typedef svbool_t pred512 __attribute__((
*** 3246,3252 ****
         options, for example: -mcpu=cortex-a77 or -mtune=cortex-a65ae or as
         arguments to the equivalent target attributes and pragmas.
  
!   arm
  
       * Support for the FDPIC ABI has been added. It uses 64-bit function
         descriptors to represent pointers to functions, and enables code
--- 3434,3440 ----
         options, for example: -mcpu=cortex-a77 or -mtune=cortex-a65ae or as
         arguments to the equivalent target attributes and pragmas.
  
!   [56]arm
  
       * Support for the FDPIC ABI has been added. It uses 64-bit function
         descriptors to represent pointers to functions, and enables code
*************** typedef svbool_t pred512 __attribute__((
*** 3267,3287 ****
            + Arm Cortex-M55 (cortex-m55).
         The GCC identifiers can be used as arguments to the -mcpu or -mtune
         options, for example: -mcpu=cortex-a77 or -mtune=cortex-m35p.
!      * Support has been extended for the ACLE [43]data-processing
         intrinsics to include 32-bit SIMD, saturating arithmetic, 16-bit
         multiplication and other related intrinsics aimed at DSP algorithm
         optimization.
       * Support for -mpure-code in Thumb-1 (v6m) has been added: this
         M-profile feature is no longer restricted to targets with MOVT. For
         example, -mcpu=cortex-m0 now supports this option.
!      * Support for the [44]Armv8.1-M Mainline Architecture has been added.
            + Armv8.1-M Mainline can be enabled by using the
              -march=armv8.1-m.main command-line option.
!      * Support for the [45]MVE beta ACLE intrinsics has been added. These
         intrinsics can be enabled by including the arm_mve.h header file
         and passing the +mve or +mve.fp option extensions (for example:
         -march=armv8.1-m.main+mve).
!      * Support for the Custom Datapath Extension beta ACLE [46]intrinsics
         has been added.
       * Support for Armv8.1-M Mainline Security Extensions architecture has
         been added. The -mcmse option, when used in combination with an
--- 3455,3475 ----
            + Arm Cortex-M55 (cortex-m55).
         The GCC identifiers can be used as arguments to the -mcpu or -mtune
         options, for example: -mcpu=cortex-a77 or -mtune=cortex-m35p.
!      * Support has been extended for the ACLE [57]data-processing
         intrinsics to include 32-bit SIMD, saturating arithmetic, 16-bit
         multiplication and other related intrinsics aimed at DSP algorithm
         optimization.
       * Support for -mpure-code in Thumb-1 (v6m) has been added: this
         M-profile feature is no longer restricted to targets with MOVT. For
         example, -mcpu=cortex-m0 now supports this option.
!      * Support for the [58]Armv8.1-M Mainline Architecture has been added.
            + Armv8.1-M Mainline can be enabled by using the
              -march=armv8.1-m.main command-line option.
!      * Support for the [59]MVE beta ACLE intrinsics has been added. These
         intrinsics can be enabled by including the arm_mve.h header file
         and passing the +mve or +mve.fp option extensions (for example:
         -march=armv8.1-m.main+mve).
!      * Support for the Custom Datapath Extension beta ACLE [60]intrinsics
         has been added.
       * Support for Armv8.1-M Mainline Security Extensions architecture has
         been added. The -mcmse option, when used in combination with an
*************** typedef svbool_t pred512 __attribute__((
*** 3289,3300 ****
         -mcmse), now leads to the generation of improved code sequences
         when changing security states.
  
!   AMD Radeon (GCN)
  
       * Code generation and in particular vectorization support have been
         much improved.
  
!   ARC
  
       * The interrupt service routine functions save all used registers,
         including extension registers and auxiliary registers used by Zero
--- 3477,3488 ----
         -mcmse), now leads to the generation of improved code sequences
         when changing security states.
  
!   [61]AMD Radeon (GCN)
  
       * Code generation and in particular vectorization support have been
         much improved.
  
!   [62]ARC
  
       * The interrupt service routine functions save all used registers,
         including extension registers and auxiliary registers used by Zero
*************** typedef svbool_t pred512 __attribute__((
*** 3307,3313 ****
       * Remove -mq-class option.
       * Improve 64-bit integer addition and subtraction operations.
  
!   AVR
  
       * Support for the XMEGA-like devices
  
--- 3495,3501 ----
       * Remove -mq-class option.
       * Improve 64-bit integer addition and subtraction operations.
  
!   [63]AVR
  
       * Support for the XMEGA-like devices
  
*************** typedef svbool_t pred512 __attribute__((
*** 3320,3326 ****
         to provide a custom device-specs file by means of
  
       avr-gcc -nodevicespecs -specs=my-spec-file <options>
!        and without the need to provide options -B and -mmcu=. See [47]AVR
         command-line options for details. This feature is also available in
         GCC 9.3+ and GCC 8.4+.
       * New command-line options -mdouble=[32,64] and -mlong-double=[32,64]
--- 3508,3514 ----
         to provide a custom device-specs file by means of
  
       avr-gcc -nodevicespecs -specs=my-spec-file <options>
!        and without the need to provide options -B and -mmcu=. See [64]AVR
         command-line options for details. This feature is also available in
         GCC 9.3+ and GCC 8.4+.
       * New command-line options -mdouble=[32,64] and -mlong-double=[32,64]
*************** typedef svbool_t pred512 __attribute__((
*** 3328,3342 ****
         double and long double types, respectively. Whether or not the
         mentioned layouts are available, whether the options act as a
         multilib option, and the default for either option are controlled
!        by the new [48]AVR configure options --with-double= and
         --with-long-double=.
       * A new configure option --with-libf7= has been added. It controls to
         which level avr-libgcc provides 64-bit floating point support by
!        means of [49]Libf7.
       * A new configure option --with-double-comparison= has been added.
         It's unlikely you need to set this option by hand.
  
!   IA-32/x86-64
  
       * Support to expand __builtin_roundeven into the appropriate SSE 4.1
         instruction has been added.
--- 3516,3530 ----
         double and long double types, respectively. Whether or not the
         mentioned layouts are available, whether the options act as a
         multilib option, and the default for either option are controlled
!        by the new [65]AVR configure options --with-double= and
         --with-long-double=.
       * A new configure option --with-libf7= has been added. It controls to
         which level avr-libgcc provides 64-bit floating point support by
!        means of [66]Libf7.
       * A new configure option --with-double-comparison= has been added.
         It's unlikely you need to set this option by hand.
  
!   [67]IA-32/x86-64
  
       * Support to expand __builtin_roundeven into the appropriate SSE 4.1
         instruction has been added.
*************** typedef svbool_t pred512 __attribute__((
*** 3349,3355 ****
         -march=tigerlake. The switch enables the MOVDIRI MOVDIR64B
         AVX512VP2INTERSECT ISA extensions.
  
!   MIPS
  
       * The mips*-*-linux* targets now mark object files with appropriate
         GNU-stack note, facilitating use of non-executable stack hardening
--- 3537,3543 ----
         -march=tigerlake. The switch enables the MOVDIRI MOVDIR64B
         AVX512VP2INTERSECT ISA extensions.
  
!   [68]MIPS
  
       * The mips*-*-linux* targets now mark object files with appropriate
         GNU-stack note, facilitating use of non-executable stack hardening
*************** typedef svbool_t pred512 __attribute__((
*** 3358,3367 ****
         configured with --with-glibc-version=2.31 against glibc 2.31 or
         later.
  
!   PowerPC / PowerPC64 / RS6000
  
       * Many vector builtins have been listed as deprecated in the
!        [50]64-Bit ELF V2 ABI Specification for quite a number of years.
         The vector builtins listed in Tables A.8 through A.10 are now
         deprecated for GCC 10, and will likely be removed from support in
         GCC 11. Note that this does not result in any loss of function.
--- 3546,3555 ----
         configured with --with-glibc-version=2.31 against glibc 2.31 or
         later.
  
!   [69]PowerPC / PowerPC64 / RS6000
  
       * Many vector builtins have been listed as deprecated in the
!        [70]64-Bit ELF V2 ABI Specification for quite a number of years.
         The vector builtins listed in Tables A.8 through A.10 are now
         deprecated for GCC 10, and will likely be removed from support in
         GCC 11. Note that this does not result in any loss of function.
*************** typedef svbool_t pred512 __attribute__((
*** 3372,3388 ****
         will be unlikely to affect much if any code, and any required code
         changes will be trivial.
  
!   PRU
  
       * A new back end targeting TI PRU I/O processors has been contributed
         to GCC.
  
!   RISC-V
  
       * The riscv*-*-* targets now require GNU binutils version 2.30 or
         later, to support new assembly instructions produced by GCC.
  
!   V850
  
       * The ABI for V850 nested functions has been changed. Previously the
         V850 port used %r20 for the static chain pointer, now the port uses
--- 3560,3576 ----
         will be unlikely to affect much if any code, and any required code
         changes will be trivial.
  
!   [71]PRU
  
       * A new back end targeting TI PRU I/O processors has been contributed
         to GCC.
  
!   [72]RISC-V
  
       * The riscv*-*-* targets now require GNU binutils version 2.30 or
         later, to support new assembly instructions produced by GCC.
  
!   [73]V850
  
       * The ABI for V850 nested functions has been changed. Previously the
         V850 port used %r20 for the static chain pointer, now the port uses
*************** typedef svbool_t pred512 __attribute__((
*** 3390,3407 ****
         where a call to a nested function would unexpectedly change the
         value in %r20.
  
! Operating Systems
  
! Improvements for plugin authors
  
       * GCC diagnostics can now have a chain of events associated with
         them, describing a path through the code that triggers the problem.
         These can be printed by the diagnostics subsystem in various ways,
!        controlled by the [51]-fdiagnostics-path-format option, or captured
!        in JSON form via [52]-fdiagnostics-format=json.
!      * GCC diagnostics can now be associated with [53]CWE weakness
         identifiers, which will appear on the standard error stream, and in
!        the JSON output from [54]-fdiagnostics-format=json.
  
  Other significant improvements
  
--- 3578,3595 ----
         where a call to a nested function would unexpectedly change the
         value in %r20.
  
! [74]Operating Systems
  
! [75]Improvements for plugin authors
  
       * GCC diagnostics can now have a chain of events associated with
         them, describing a path through the code that triggers the problem.
         These can be printed by the diagnostics subsystem in various ways,
!        controlled by the [76]-fdiagnostics-path-format option, or captured
!        in JSON form via [77]-fdiagnostics-format=json.
!      * GCC diagnostics can now be associated with [78]CWE weakness
         identifiers, which will appear on the standard error stream, and in
!        the JSON output from [79]-fdiagnostics-format=json.
  
  Other significant improvements
  
*************** Other significant improvements
*** 3413,3440 ****
       * For many releases, when GCC emits a warning it prints the option
         controlling that warning. As of GCC 10, that option text is now a
         clickable hyperlink for the documentation of that option (assuming
!        a [55]sufficiently capable terminal). This behavior can be
!        controlled via a new [56]-fdiagnostics-urls option (along with
         various environment variables and heuristics documented with that
         option).
  
  GCC 10.1
  
!    This is the [57]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 10.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! GCC 10.2
  
!    This is the [58]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 10.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! GCC 10.3
  
!    This is the [59]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 10.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
--- 3601,3628 ----
       * For many releases, when GCC emits a warning it prints the option
         controlling that warning. As of GCC 10, that option text is now a
         clickable hyperlink for the documentation of that option (assuming
!        a [80]sufficiently capable terminal). This behavior can be
!        controlled via a new [81]-fdiagnostics-urls option (along with
         various environment variables and heuristics documented with that
         option).
  
  GCC 10.1
  
!    This is the [82]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 10.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [83]GCC 10.2
  
!    This is the [84]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 10.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [85]GCC 10.3
  
!    This is the [86]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 10.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
*************** GCC 10.3
*** 3459,3467 ****
       * GCC 10.3 supports AMD CPUs based on the znver3 core via
         -march=znver3.
  
! GCC 10.4
  
!    This is the [60]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 10.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
--- 3647,3655 ----
       * GCC 10.3 supports AMD CPUs based on the znver3 core via
         -march=znver3.
  
! [87]GCC 10.4
  
!    This is the [88]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 10.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
*************** GCC 10.4
*** 3475,3501 ****
         MMX no longer changes how they are passed nor returned. This ABI
         change is now diagnosed with -Wpsabi.
  
! GCC 10.5
  
!    This is the [61]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 10.5 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [62]GCC manuals. If that fails, the
!     [63]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [64]gcc@gcc.gnu.org. All of [65]our lists have public
      archives.
  
!    Copyright (C) [66]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [67]maintained by the GCC team. Last modified
!    2023-07-07.
  
  References
  
--- 3663,3689 ----
         MMX no longer changes how they are passed nor returned. This ABI
         change is now diagnosed with -Wpsabi.
  
! [89]GCC 10.5
  
!    This is the [90]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 10.5 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [91]GCC manuals. If that fails, the
!     [92]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [93]gcc@gcc.gnu.org. All of [94]our lists have public
      archives.
  
!    Copyright (C) [95]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [96]maintained by the GCC team. Last modified
!    2025-03-21.
  
  References
  
*************** References
*** 3504,3571 ****
     3. https://gcc.gnu.org/gcc-10/changes.html#empty_base
     4. https://www.mpfr.org/
     5. https://gcc.gnu.org/gcc-10/changes.html#iterator_base
!    6. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/cpp/_005f_005fhas_005fbuiltin.html#g_t_005f_005fhas_005fbuiltin
!    7. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Optimize-Options.html#index-fno-allocation-dce
!    8. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Optimize-Options.html#index-fprofile-partial-training
!    9. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Instrumentation-Options.html#index-fprofile-reproducible
!   10. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Instrumentation-Options.html#index-fprofile-generate
!   11. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Instrumentation-Options.html#index-fprofile-prefix-path
!   12. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Static-Analyzer-Options.html
!   13. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Optimize-Options.html#index-finline-functions
!   14. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/lto-dump.html
!   15. https://facebook.github.io/zstd/
!   16. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Optimize-Options.html#index-fprofile-values
!   17. https://www.openacc.org/
!   18. https://gcc.gnu.org/wiki/OpenACC/Implementation Status#status-10
!   19. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/libgomp/#toc-Enabling-OpenACC-1
!   20. https://www.openmp.org/specifications/
!   21. https://gcc.gnu.org/wiki/Offloading
!   22. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wstring-compare
!   23. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wzero-length-bounds
!   24. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Warray-bounds
!   25. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wformat-overflow
!   26. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wrestrict
!   27. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wreturn-local-addr
!   28. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wstringop-overflow
!   29. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Warith-conversion
!   30. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wmismatched-tags
!   31. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wredundant-tags
!   32. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94383
!   33. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94711
!   34. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94707
!   35. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94704
!   36. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94706
!   37. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92285
!   38. https://www.openmp.org/specifications/
!   39. https://gcc.gnu.org/onlinedocs/jit/topics/compatibility.html#c.gcc_jit_version_major
!   40. https://gcc.gnu.org/onlinedocs/jit/topics/compatibility.html#c.gcc_jit_version_minor
!   41. https://gcc.gnu.org/onlinedocs/jit/topics/compatibility.html#c.gcc_jit_version_patchlevel
!   42. https://gcc.gnu.org/onlinedocs/jit/topics/types.html#c.gcc_jit_context_new_bitfield
!   43. https://developer.arm.com/documentation/101028/0009/Data-processing-intrinsics
!   44. https://developer.arm.com/Architectures/M-Profile Architecture
!   45. https://developer.arm.com/architectures/instruction-sets/intrinsics/
!   46. https://developer.arm.com/documentation/101028/0010/Custom-Datapath-Extension
!   47. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/AVR-Options.html#index-nodevicespecs
!   48. https://gcc.gnu.org/install/configure.html#avr
!   49. https://gcc.gnu.org/wiki/avr-gcc#Libf7
!   50. https://openpowerfoundation.org/?resource_lib=64-bit-elf-v2-abi-specification-power-architecture
!   51. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-path-format
!   52. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
!   53. https://cwe.mitre.org/
!   54. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
!   55. https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda
!   56. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-urls
!   57. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.0
!   58. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.2
!   59. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.3
!   60. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.4
!   61. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.5
!   62. https://gcc.gnu.org/onlinedocs/
!   63. mailto:gcc-help@gcc.gnu.org
!   64. mailto:gcc@gcc.gnu.org
!   65. https://gcc.gnu.org/lists.html
!   66. https://www.fsf.org/
!   67. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-9/index.html
                                GCC 9 Release Series
--- 3692,3788 ----
     3. https://gcc.gnu.org/gcc-10/changes.html#empty_base
     4. https://www.mpfr.org/
     5. https://gcc.gnu.org/gcc-10/changes.html#iterator_base
!    6. https://gcc.gnu.org/gcc-10/changes.html#general
!    7. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/cpp/_005f_005fhas_005fbuiltin.html#g_t_005f_005fhas_005fbuiltin
!    8. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Optimize-Options.html#index-fno-allocation-dce
!    9. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Optimize-Options.html#index-fprofile-partial-training
!   10. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Instrumentation-Options.html#index-fprofile-reproducible
!   11. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Instrumentation-Options.html#index-fprofile-generate
!   12. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Instrumentation-Options.html#index-fprofile-prefix-path
!   13. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Static-Analyzer-Options.html
!   14. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Optimize-Options.html#index-finline-functions
!   15. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/lto-dump.html
!   16. https://facebook.github.io/zstd/
!   17. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Optimize-Options.html#index-fprofile-values
!   18. https://gcc.gnu.org/gcc-10/changes.html#languages
!   19. https://www.openacc.org/
!   20. https://gcc.gnu.org/wiki/OpenACC/Implementation Status#status-10
!   21. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/libgomp/#toc-Enabling-OpenACC-1
!   22. https://www.openmp.org/specifications/
!   23. https://gcc.gnu.org/wiki/Offloading
!   24. https://gcc.gnu.org/gcc-10/changes.html#c-family
!   25. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wstring-compare
!   26. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wzero-length-bounds
!   27. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Warray-bounds
!   28. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wformat-overflow
!   29. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wrestrict
!   30. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wreturn-local-addr
!   31. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wstringop-overflow
!   32. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Warith-conversion
!   33. https://gcc.gnu.org/gcc-10/changes.html#c
!   34. https://gcc.gnu.org/gcc-10/changes.html#cxx
!   35. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wmismatched-tags
!   36. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wredundant-tags
!   37. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94383
!   38. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94711
!   39. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94707
!   40. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94704
!   41. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94706
!   42. https://gcc.gnu.org/gcc-10/changes.html#libstdcxx
!   43. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92285
!   44. https://gcc.gnu.org/gcc-10/changes.html#d
!   45. https://gcc.gnu.org/gcc-10/changes.html#fortran
!   46. https://www.openmp.org/specifications/
!   47. https://gcc.gnu.org/gcc-10/changes.html#go
!   48. https://gcc.gnu.org/gcc-10/changes.html#jit
!   49. https://gcc.gnu.org/onlinedocs/jit/topics/compatibility.html#c.gcc_jit_version_major
!   50. https://gcc.gnu.org/onlinedocs/jit/topics/compatibility.html#c.gcc_jit_version_minor
!   51. https://gcc.gnu.org/onlinedocs/jit/topics/compatibility.html#c.gcc_jit_version_patchlevel
!   52. https://gcc.gnu.org/onlinedocs/jit/topics/types.html#c.gcc_jit_context_new_bitfield
!   53. https://gcc.gnu.org/gcc-10/changes.html#targets
!   54. https://gcc.gnu.org/gcc-10/changes.html#arm-targets
!   55. https://gcc.gnu.org/gcc-10/changes.html#aarch64
!   56. https://gcc.gnu.org/gcc-10/changes.html#arm
!   57. https://developer.arm.com/documentation/101028/0009/Data-processing-intrinsics
!   58. https://developer.arm.com/Architectures/M-Profile Architecture
!   59. https://developer.arm.com/architectures/instruction-sets/intrinsics/
!   60. https://developer.arm.com/documentation/101028/0010/Custom-Datapath-Extension
!   61. https://gcc.gnu.org/gcc-10/changes.html#amdgcn
!   62. https://gcc.gnu.org/gcc-10/changes.html#arc
!   63. https://gcc.gnu.org/gcc-10/changes.html#avr
!   64. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/AVR-Options.html#index-nodevicespecs
!   65. https://gcc.gnu.org/install/configure.html#avr
!   66. https://gcc.gnu.org/wiki/avr-gcc#Libf7
!   67. https://gcc.gnu.org/gcc-10/changes.html#x86
!   68. https://gcc.gnu.org/gcc-10/changes.html#mips
!   69. https://gcc.gnu.org/gcc-10/changes.html#powerpc
!   70. https://openpowerfoundation.org/?resource_lib=64-bit-elf-v2-abi-specification-power-architecture
!   71. https://gcc.gnu.org/gcc-10/changes.html#pru
!   72. https://gcc.gnu.org/gcc-10/changes.html#riscv
!   73. https://gcc.gnu.org/gcc-10/changes.html#v850
!   74. https://gcc.gnu.org/gcc-10/changes.html#os
!   75. https://gcc.gnu.org/gcc-10/changes.html#plugins
!   76. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-path-format
!   77. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
!   78. https://cwe.mitre.org/
!   79. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
!   80. https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda
!   81. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-urls
!   82. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.0
!   83. https://gcc.gnu.org/gcc-10/changes.html#GCC10.2
!   84. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.2
!   85. https://gcc.gnu.org/gcc-10/changes.html#GCC10.3
!   86. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.3
!   87. https://gcc.gnu.org/gcc-10/changes.html#GCC10.4
!   88. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.4
!   89. https://gcc.gnu.org/gcc-10/changes.html#GCC10.5
!   90. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.5
!   91. https://gcc.gnu.org/onlinedocs/
!   92. mailto:gcc-help@gcc.gnu.org
!   93. mailto:gcc@gcc.gnu.org
!   94. https://gcc.gnu.org/lists.html
!   95. https://www.fsf.org/
!   96. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-9/index.html
                                GCC 9 Release Series
*************** References and Acknowledgements
*** 3627,3648 ****
     provided this notice is preserved.
  
     These pages are [22]maintained by the GCC team. Last modified
!    2023-10-15.
  
  References
  
     1. http://www.gnu.org/
     2. https://gcc.gnu.org/gcc-9/changes.html
!    3. http://gcc.gnu.org/onlinedocs/9.5.0/
     4. https://gcc.gnu.org/gcc-9/changes.html
!    5. http://gcc.gnu.org/onlinedocs/9.4.0/
     6. https://gcc.gnu.org/gcc-9/changes.html
!    7. http://gcc.gnu.org/onlinedocs/9.3.0/
     8. https://gcc.gnu.org/gcc-9/changes.html
!    9. http://gcc.gnu.org/onlinedocs/9.2.0/
    10. https://gcc.gnu.org/gcc-9/changes.html
!   11. http://gcc.gnu.org/onlinedocs/9.1.0/
!   12. http://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Contributors.html
    13. https://gcc.gnu.org/index.html
    14. mailto:gcc@gcc.gnu.org
    15. https://gcc.gnu.org/mirrors.html
--- 3844,3865 ----
     provided this notice is preserved.
  
     These pages are [22]maintained by the GCC team. Last modified
!    2024-05-30.
  
  References
  
     1. http://www.gnu.org/
     2. https://gcc.gnu.org/gcc-9/changes.html
!    3. https://gcc.gnu.org/onlinedocs/9.5.0/
     4. https://gcc.gnu.org/gcc-9/changes.html
!    5. https://gcc.gnu.org/onlinedocs/9.4.0/
     6. https://gcc.gnu.org/gcc-9/changes.html
!    7. https://gcc.gnu.org/onlinedocs/9.3.0/
     8. https://gcc.gnu.org/gcc-9/changes.html
!    9. https://gcc.gnu.org/onlinedocs/9.2.0/
    10. https://gcc.gnu.org/gcc-9/changes.html
!   11. https://gcc.gnu.org/onlinedocs/9.1.0/
!   12. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Contributors.html
    13. https://gcc.gnu.org/index.html
    14. mailto:gcc@gcc.gnu.org
    15. https://gcc.gnu.org/mirrors.html
*************** Caveats
*** 3700,3714 ****
         installed <bits/c++config.h> headers to define the
         _GLIBCXX_USE_CXX11_ABI macro to 0.
  
! General Improvements
  
     The following GCC command line options have been introduced or
     improved.
       * All command line options that take a byte-size argument accept
         64-bit integers as well as standard SI and IEC suffixes such as kb
         and KiB, MB and MiB, or GB and GiB denoting the corresponding
!        multiples of bytes. See [9]Invoking GCC for more.
!      * A new option [10]-flive-patching=[inline-only-static|inline-clone]
         generates code suitable for live patching. At the same time it
         provides multiple-level control over IPA optimizations. See the
         user guide for more details.
--- 3917,3931 ----
         installed <bits/c++config.h> headers to define the
         _GLIBCXX_USE_CXX11_ABI macro to 0.
  
! [9]General Improvements
  
     The following GCC command line options have been introduced or
     improved.
       * All command line options that take a byte-size argument accept
         64-bit integers as well as standard SI and IEC suffixes such as kb
         and KiB, MB and MiB, or GB and GiB denoting the corresponding
!        multiples of bytes. See [10]Invoking GCC for more.
!      * A new option [11]-flive-patching=[inline-only-static|inline-clone]
         generates code suitable for live patching. At the same time it
         provides multiple-level control over IPA optimizations. See the
         user guide for more details.
*************** General Improvements
*** 3717,3723 ****
         Bash-completion.
       * GCC's diagnostics now print source code with a left margin showing
         line numbers, configurable with
!        [11]-fno-diagnostics-show-line-numbers.
         GCC's diagnostics can also now label regions of the source code to
         show pertinent information, such as the types within an expression.
  $ g++ t.cc
--- 3934,3940 ----
         Bash-completion.
       * GCC's diagnostics now print source code with a left margin showing
         line numbers, configurable with
!        [12]-fno-diagnostics-show-line-numbers.
         GCC's diagnostics can also now label regions of the source code to
         show pertinent information, such as the types within an expression.
  $ g++ t.cc
*************** e>' and 'boxed_value<double>')
*** 3733,3753 ****
        |                |
        |                boxed_value<[...]>
  
!        These labels can be disabled via [12]-fno-diagnostics-show-labels.
!      * A new option [13]-fdiagnostics-format=json has been introduced for
         emitting diagnostics in a machine-readable format.
!      * The alignment-related options [14]-falign-functions,
!        [15]-falign-labels, [16]-falign-loops, and [17]-falign-jumps
         received support for a secondary alignment (e.g.
         -falign-loops=n:m:n2:m2).
!      * New pair of profiling options ([18]-fprofile-filter-files and
!        [19]-fprofile-exclude-files) has been added. The options help to
         filter which source files are instrumented.
       * AddressSanitizer generates more compact redzones for automatic
         variables. That helps to reduce memory footprint of a sanitized
         binary.
       * Numerous improvements have been made to the output of
!        [20]-fopt-info.
         Messages are now prefixed with optimized, missed, or note, rather
         than the old behavior of all being prefixed with note.
         The output from -fopt-info can now contain information on inlining
--- 3950,3970 ----
        |                |
        |                boxed_value<[...]>
  
!        These labels can be disabled via [13]-fno-diagnostics-show-labels.
!      * A new option [14]-fdiagnostics-format=json has been introduced for
         emitting diagnostics in a machine-readable format.
!      * The alignment-related options [15]-falign-functions,
!        [16]-falign-labels, [17]-falign-loops, and [18]-falign-jumps
         received support for a secondary alignment (e.g.
         -falign-loops=n:m:n2:m2).
!      * New pair of profiling options ([19]-fprofile-filter-files and
!        [20]-fprofile-exclude-files) has been added. The options help to
         filter which source files are instrumented.
       * AddressSanitizer generates more compact redzones for automatic
         variables. That helps to reduce memory footprint of a sanitized
         binary.
       * Numerous improvements have been made to the output of
!        [21]-fopt-info.
         Messages are now prefixed with optimized, missed, or note, rather
         than the old behavior of all being prefixed with note.
         The output from -fopt-info can now contain information on inlining
*************** mory");
*** 3783,3809 ****
  
         The old behavior can be obtained via a new -internals suboption of
         -fopt-info.
!      * A new option, [21]-fsave-optimization-record has been added, which
         writes a SRCFILE.opt-record.json.gz file describing the
         optimization decisions made by GCC. This is similar to the output
         of -fopt-info, but with additional metadata such as the inlining
         chain, and profile information (if available).
       * Inter-procedural propagation of stack alignment can now be
!        controlled by [22]-fipa-stack-alignment.
       * Propagation of addressability, readonly, and writeonly flags on
         static variables can now be controlled by
!        [23]-fipa-reference-addressable.
  
     The following built-in functions have been introduced.
!      * [24]__builtin_expect_with_probability to provide branch prediction
         probability hints to the optimizer.
!      * [25]__builtin_has_attribute determines whether a function, type, or
         variable has been declared with some attribute.
!      * [26]__builtin_speculation_safe_value can be used to help mitigate
         against unsafe speculative execution.
  
     The following attributes have been introduced.
!      * The [27]copy function attribute has been added. The attribute can
         also be applied to type definitions and to variable declarations.
  
     A large number of improvements to code generation have been made,
--- 4000,4026 ----
  
         The old behavior can be obtained via a new -internals suboption of
         -fopt-info.
!      * A new option, [22]-fsave-optimization-record has been added, which
         writes a SRCFILE.opt-record.json.gz file describing the
         optimization decisions made by GCC. This is similar to the output
         of -fopt-info, but with additional metadata such as the inlining
         chain, and profile information (if available).
       * Inter-procedural propagation of stack alignment can now be
!        controlled by [23]-fipa-stack-alignment.
       * Propagation of addressability, readonly, and writeonly flags on
         static variables can now be controlled by
!        [24]-fipa-reference-addressable.
  
     The following built-in functions have been introduced.
!      * [25]__builtin_expect_with_probability to provide branch prediction
         probability hints to the optimizer.
!      * [26]__builtin_has_attribute determines whether a function, type, or
         variable has been declared with some attribute.
!      * [27]__builtin_speculation_safe_value can be used to help mitigate
         against unsafe speculative execution.
  
     The following attributes have been introduced.
!      * The [28]copy function attribute has been added. The attribute can
         also be applied to type definitions and to variable declarations.
  
     A large number of improvements to code generation have been made,
*************** mory");
*** 3811,3817 ****
       * Switch expansion has been improved by using a different strategy
         (jump table, bit test, decision tree) for a subset of switch cases.
       * A linear function expression defined as a switch statement can be
!        transformed by [28]-ftree-switch-conversion. For example:
  
  int
  foo (int how)
--- 4028,4034 ----
       * Switch expansion has been improved by using a different strategy
         (jump table, bit test, decision tree) for a subset of switch cases.
       * A linear function expression defined as a switch statement can be
!        transformed by [29]-ftree-switch-conversion. For example:
  
  int
  foo (int how)
*************** foo (int how)
*** 3838,3846 ****
            + Improved scalability for very large translation units
              (especially when link-time optimizing large programs).
       * Profile driven optimization improvements:
!           + [29]-fprofile-use now enables [30]-fversion-loops-for-strides,
!             [31]-floop-interchange, [32]-floop-unroll-and-jam,
!             [33]-ftree-loop-distribution.
            + Streaming of counter histograms was removed, which reduces the
              size of profile files. Histograms are computed on the fly with
              link-time optimization.
--- 4055,4063 ----
            + Improved scalability for very large translation units
              (especially when link-time optimizing large programs).
       * Profile driven optimization improvements:
!           + [30]-fprofile-use now enables [31]-fversion-loops-for-strides,
!             [32]-floop-interchange, [33]-floop-unroll-and-jam,
!             [34]-ftree-loop-distribution.
            + Streaming of counter histograms was removed, which reduces the
              size of profile files. Histograms are computed on the fly with
              link-time optimization.
*************** foo (int how)
*** 3868,3912 ****
  
     The following improvements to the gcov command-line utility have been
     made.
!      * The gcov tool received a new option [34]--use-hotness-colors (-q)
         that can provide perf-like coloring of hot functions.
       * The gcov tool has changed its intermediate format to a new JSON
         format.
  
! New Languages and Language specific improvements
  
!    [35]OpenACC support in C, C++, and Fortran continues to be maintained
     and improved. Most of the OpenACC 2.5 specification is implemented. See
!    the [36]implementation status section on the OpenACC wiki page for
     further information.
  
!   C family
  
!      * Version 5.0 of the [37]OpenMP specification is now partially
         supported in the C and C++ compilers. For details which features of
         OpenMP 5.0 are and which are not supported in the GCC 9 release see
!        [38]this mail.
       * New extensions:
!           + [39]__builtin_convertvector built-in for vector conversions
              has been added.
       * New warnings:
!           + [40]-Waddress-of-packed-member, enabled by default, warns
              about an unaligned pointer value from the address of a packed
              member of a struct or union.
       * Enhancements to existing warnings:
!           + [41]-Warray-bounds detects more instances of out-of-bounds
              indices.
!           + [42]-Wattribute-alias also detects attribute mismatches
              between alias declarations and their targets, in addition to
              mismatches between their types.
!           + [43]-Wformat-overflow and [44]-Wformat-truncation have been
              extended to all formatted input/output functions (where
              applicable) and enhanced to detect a subset of instances of
              reading past the end of unterminated constant character arrays
              in %s directives.
!           + [45]-Wmissing-attributes detects instances of missing function
              attributes on declarations of aliases and weak references.
!           + [46]-Wstringop-truncation also detects a subset of instances
              of reading past the end of unterminated constant character
              arrays,
       * If a macro is used with the wrong argument count, the C and C++
--- 4085,4129 ----
  
     The following improvements to the gcov command-line utility have been
     made.
!      * The gcov tool received a new option [35]--use-hotness-colors (-q)
         that can provide perf-like coloring of hot functions.
       * The gcov tool has changed its intermediate format to a new JSON
         format.
  
! [36]New Languages and Language specific improvements
  
!    [37]OpenACC support in C, C++, and Fortran continues to be maintained
     and improved. Most of the OpenACC 2.5 specification is implemented. See
!    the [38]implementation status section on the OpenACC wiki page for
     further information.
  
!   [39]C family
  
!      * Version 5.0 of the [40]OpenMP specification is now partially
         supported in the C and C++ compilers. For details which features of
         OpenMP 5.0 are and which are not supported in the GCC 9 release see
!        [41]this mail.
       * New extensions:
!           + [42]__builtin_convertvector built-in for vector conversions
              has been added.
       * New warnings:
!           + [43]-Waddress-of-packed-member, enabled by default, warns
              about an unaligned pointer value from the address of a packed
              member of a struct or union.
       * Enhancements to existing warnings:
!           + [44]-Warray-bounds detects more instances of out-of-bounds
              indices.
!           + [45]-Wattribute-alias also detects attribute mismatches
              between alias declarations and their targets, in addition to
              mismatches between their types.
!           + [46]-Wformat-overflow and [47]-Wformat-truncation have been
              extended to all formatted input/output functions (where
              applicable) and enhanced to detect a subset of instances of
              reading past the end of unterminated constant character arrays
              in %s directives.
!           + [48]-Wmissing-attributes detects instances of missing function
              attributes on declarations of aliases and weak references.
!           + [49]-Wstringop-truncation also detects a subset of instances
              of reading past the end of unterminated constant character
              arrays,
       * If a macro is used with the wrong argument count, the C and C++
*************** New Languages and Language specific impr
*** 3915,3921 ****
         threshold for similarity has been tightened, to avoid nonsensical
         suggestions.
  
!   C
  
       * There is now experimental support for -std=c2x, to select support
         for the upcoming C2X revision of the ISO C standard. This standard
--- 4132,4138 ----
         threshold for similarity has been tightened, to avoid nonsensical
         suggestions.
  
!   [50]C
  
       * There is now experimental support for -std=c2x, to select support
         for the upcoming C2X revision of the ISO C standard. This standard
*************** New Languages and Language specific impr
*** 3927,3933 ****
         added in C2X (such warnings are also enabled by use of -Wpedantic
         if not using -std=c2x or -std=gnu2x).
       * New warnings:
!           + [47]-Wabsolute-value warns for calls to standard functions
              that compute the absolute value of an argument when a more
              appropriate standard function is available. For example,
              calling abs(3.14) triggers the warning because the appropriate
--- 4144,4150 ----
         added in C2X (such warnings are also enabled by use of -Wpedantic
         if not using -std=c2x or -std=gnu2x).
       * New warnings:
!           + [51]-Wabsolute-value warns for calls to standard functions
              that compute the absolute value of an argument when a more
              appropriate standard function is available. For example,
              calling abs(3.14) triggers the warning because the appropriate
*************** New Languages and Language specific impr
*** 3937,3958 ****
              This warning can be suppressed with an explicit type cast and
              it is also enabled by -Wextra.
  
!   C++
  
       * New warnings:
!           + [48]-Wdeprecated-copy, implied by -Wextra, warns about the
              C++11 deprecation of implicitly declared copy constructor and
              assignment operator if one of them is user-provided.
              -Wdeprecated-copy-dtor also warns if the destructor is
              user-provided, as specified in C++11.
!           + [49]-Winit-list-lifetime, on by default, warns about uses of
              std::initializer_list that are likely to result in a dangling
              pointer, such as returning or assigning from a temporary list.
!           + [50]-Wredundant-move, implied by -Wextra, warns about
              redundant calls to std::move.
!           + [51]-Wpessimizing-move, implied by -Wall, warns when a call to
              std::move prevents copy elision.
!           + [52]-Wclass-conversion, on by default, warns when a conversion
              function will never be called due to the type it converts to.
       * The C++ front end has experimental support for some of the upcoming
         C++2a draft features with the -std=c++2a or -std=gnu++2a flags,
--- 4154,4175 ----
              This warning can be suppressed with an explicit type cast and
              it is also enabled by -Wextra.
  
!   [52]C++
  
       * New warnings:
!           + [53]-Wdeprecated-copy, implied by -Wextra, warns about the
              C++11 deprecation of implicitly declared copy constructor and
              assignment operator if one of them is user-provided.
              -Wdeprecated-copy-dtor also warns if the destructor is
              user-provided, as specified in C++11.
!           + [54]-Winit-list-lifetime, on by default, warns about uses of
              std::initializer_list that are likely to result in a dangling
              pointer, such as returning or assigning from a temporary list.
!           + [55]-Wredundant-move, implied by -Wextra, warns about
              redundant calls to std::move.
!           + [56]-Wpessimizing-move, implied by -Wall, warns when a call to
              std::move prevents copy elision.
!           + [57]-Wclass-conversion, on by default, warns when a conversion
              function will never be called due to the type it converts to.
       * The C++ front end has experimental support for some of the upcoming
         C++2a draft features with the -std=c++2a or -std=gnu++2a flags,
*************** New Languages and Language specific impr
*** 3963,3969 ****
         attributes, class types in non-type template parameters, allowing
         virtual function calls in constant expressions, explicit(bool),
         std::is_constant_evaluated, nested inline namespaces, etc. For a
!        full list of new features, see [53]the C++ status page.
       * The C++ front end now preserves source locations for literals,
         id-expression, and mem-initializer for longer. For example it is
         now able to pin-point the pertinent locations for bad
--- 4180,4186 ----
         attributes, class types in non-type template parameters, allowing
         virtual function calls in constant expressions, explicit(bool),
         std::is_constant_evaluated, nested inline namespaces, etc. For a
!        full list of new features, see [58]the C++ status page.
       * The C++ front end now preserves source locations for literals,
         id-expression, and mem-initializer for longer. For example it is
         now able to pin-point the pertinent locations for bad
*************** d*, int)'
*** 4023,4029 ****
      3 | void callee (int, void *, int)
        |                   ^~~~~~
  
!      * The C++ front end's implementation of [54]-Wformat now shows
         precise locations within string literals, and underlines the
         pertinent arguments at bogus call sites (the C front end has been
         doing this since GCC 7). For example:
--- 4240,4246 ----
      3 | void callee (int, void *, int)
        |                   ^~~~~~
  
!      * The C++ front end's implementation of [59]-Wformat now shows
         precise locations within string literals, and underlines the
         pertinent arguments at bogus call sites (the C front end has been
         doing this since GCC 7). For example:
*************** _SIZE'?
*** 4105,4115 ****
        |             ^~~~~~~
        |             BUF_SIZE
  
!     Runtime Library (libstdc++)
  
       * Improved support for C++17, including:
            + The C++17 implementation is no longer experimental.
!           + Parallel algorithms and <execution> (requires [55]Thread
              Building Blocks 2018 or newer).
            + <memory_resource>.
            + Using the types and functions in <filesystem> does not require
--- 4322,4332 ----
        |             ^~~~~~~
        |             BUF_SIZE
  
!     [60]Runtime Library (libstdc++)
  
       * Improved support for C++17, including:
            + The C++17 implementation is no longer experimental.
!           + Parallel algorithms and <execution> (requires [61]Thread
              Building Blocks 2018 or newer).
            + <memory_resource>.
            + Using the types and functions in <filesystem> does not require
*************** _SIZE'?
*** 4137,4148 ****
         Filesystem TS on Windows.
       * Incomplete, experimental support for the Networking TS.
  
!   D
  
       * Support for the D programming language has been added to GCC,
         implementing version 2.076 of the language and run-time library.
  
!   Fortran
  
       * Asynchronous I/O is now fully supported. The program needs to be
         linked against the pthreads library to use it, otherwise the I/O is
--- 4354,4365 ----
         Filesystem TS on Windows.
       * Incomplete, experimental support for the Networking TS.
  
!   [62]D
  
       * Support for the D programming language has been added to GCC,
         implementing version 2.076 of the language and run-time library.
  
!   [63]Fortran
  
       * Asynchronous I/O is now fully supported. The program needs to be
         linked against the pthreads library to use it, otherwise the I/O is
*************** _SIZE'?
*** 4164,4192 ****
         specific way, one needs to explicitly check for NaN's before
         calling MAX or MIN, e.g. by using the IEEE_IS_NAN function from the
         intrinsic module IEEE_ARITHMETIC.
!      * A new command-line option [56]-fdec-include, set also by the
!        [57]-fdec option, has been added to increase compatibility with
         legacy code. With this option, an INCLUDE directive is also parsed
         as a statement, which allows the directive to be spread across
         multiple source lines with line continuations.
!      * A new [58]BUILTIN directive, has been added. The purpose of the
         directive is to provide an API between the GCC compiler and the GNU
         C Library which would define vector implementations of math
         routines.
  
!   Go
  
       * GCC 9 provides a complete implementation of the Go 1.12.2 user
         packages.
  
! libgccjit
  
       * The libgccjit API gained a new entry point:
!        [59]gcc_jit_context_add_driver_option.
  
! New Targets and Target Specific Improvements
  
!   AArch64 & Arm
  
       * Support has been added for the following processors (GCC
         identifiers in parentheses):
--- 4381,4409 ----
         specific way, one needs to explicitly check for NaN's before
         calling MAX or MIN, e.g. by using the IEEE_IS_NAN function from the
         intrinsic module IEEE_ARITHMETIC.
!      * A new command-line option [64]-fdec-include, set also by the
!        [65]-fdec option, has been added to increase compatibility with
         legacy code. With this option, an INCLUDE directive is also parsed
         as a statement, which allows the directive to be spread across
         multiple source lines with line continuations.
!      * A new [66]BUILTIN directive, has been added. The purpose of the
         directive is to provide an API between the GCC compiler and the GNU
         C Library which would define vector implementations of math
         routines.
  
!   [67]Go
  
       * GCC 9 provides a complete implementation of the Go 1.12.2 user
         packages.
  
! [68]libgccjit
  
       * The libgccjit API gained a new entry point:
!        [69]gcc_jit_context_add_driver_option.
  
! [70]New Targets and Target Specific Improvements
  
!   [71]AArch64 & Arm
  
       * Support has been added for the following processors (GCC
         identifiers in parentheses):
*************** New Targets and Target Specific Improvem
*** 4223,4229 ****
       * Support has been added for the Arm Neoverse E1 processor
         (-mcpu=neoverse-e1).
       * The AArch64 port now has support for stack clash protection using
!        the [60]-fstack-clash-protection option. The probing interval/guard
         size can be set by using --param
         stack-clash-protection-guard-size=12|16. The value of this
         parameter must be in bytes represented as a power of two. The two
--- 4440,4446 ----
       * Support has been added for the Arm Neoverse E1 processor
         (-mcpu=neoverse-e1).
       * The AArch64 port now has support for stack clash protection using
!        the [72]-fstack-clash-protection option. The probing interval/guard
         size can be set by using --param
         stack-clash-protection-guard-size=12|16. The value of this
         parameter must be in bytes represented as a power of two. The two
*************** New Targets and Target Specific Improvem
*** 4236,4242 ****
         option can now be used to enable the return address signing as well
         as the new Branch Target Identification feature of Armv8.5-A
         architecture. For more information on the arguments accepted by
!        this option, please refer to [61]AArch64-Options.
       * The following optional extensions to Armv8.5-A architecture are now
         supported and only affect the assembler.
            + Random Number Generation instructions through the
--- 4453,4459 ----
         option can now be used to enable the return address signing as well
         as the new Branch Target Identification feature of Armv8.5-A
         architecture. For more information on the arguments accepted by
!        this option, please refer to [73]AArch64-Options.
       * The following optional extensions to Armv8.5-A architecture are now
         supported and only affect the assembler.
            + Random Number Generation instructions through the
*************** New Targets and Target Specific Improvem
*** 4255,4261 ****
       * Corrected FPU configurations for Cortex-R7 and Cortex-R8 when using
         their respective -mcpu options.
  
!   AMD GCN
  
       * A new back end targeting AMD GCN GPUs has been contributed to GCC.
         The implementation is currently limited to compiling
--- 4472,4478 ----
       * Corrected FPU configurations for Cortex-R7 and Cortex-R8 when using
         their respective -mcpu options.
  
!   [74]AMD GCN
  
       * A new back end targeting AMD GCN GPUs has been contributed to GCC.
         The implementation is currently limited to compiling
*************** New Targets and Target Specific Improvem
*** 4266,4284 ****
            + Fiji (fiji).
            + Vega 10 (gfx900).
  
!   ARC
  
       * LRA is now on by default for the ARC target. This can be controlled
         by -mlra.
       * Add support for frame code-density and branch-and-index
         instructions.
  
!   C-SKY
  
       * A new back end targeting C-SKY V2 processors has been contributed
         to GCC.
  
!   IA-32/x86-64
  
       * Support of Intel MPX (Memory Protection Extensions) has been
         removed.
--- 4483,4501 ----
            + Fiji (fiji).
            + Vega 10 (gfx900).
  
!   [75]ARC
  
       * LRA is now on by default for the ARC target. This can be controlled
         by -mlra.
       * Add support for frame code-density and branch-and-index
         instructions.
  
!   [76]C-SKY
  
       * A new back end targeting C-SKY V2 processors has been contributed
         to GCC.
  
!   [77]IA-32/x86-64
  
       * Support of Intel MPX (Memory Protection Extensions) has been
         removed.
*************** New Targets and Target Specific Improvem
*** 4289,4295 ****
         following ISA extensions: AVX512F, AVX512VL, AVX512CD, AVX512BW,
         AVX512DQ, AVX512VNNI.
  
!   MIPS
  
       * The Loongson loongson-mmi and loongson-ext extensions have been
         split from loongson3a:
--- 4506,4512 ----
         following ISA extensions: AVX512F, AVX512VL, AVX512CD, AVX512BW,
         AVX512DQ, AVX512VNNI.
  
!   [78]MIPS
  
       * The Loongson loongson-mmi and loongson-ext extensions have been
         split from loongson3a:
*************** New Targets and Target Specific Improvem
*** 4313,4324 ****
         -mtune options (as in -mcpu=gs464 or -mtune=gs464e) or as arguments
         to the equivalent target attributes and pragmas.
  
!   OpenRISC
  
       * A new back end targeting OpenRISC processors has been contributed
         to GCC.
  
!   S/390, System z, IBM z Systems
  
       * Support for the arch13 architecture has been added. When using the
         -march=arch13 option, the compiler will generate code making use of
--- 4530,4541 ----
         -mtune options (as in -mcpu=gs464 or -mtune=gs464e) or as arguments
         to the equivalent target attributes and pragmas.
  
!   [79]OpenRISC
  
       * A new back end targeting OpenRISC processors has been contributed
         to GCC.
  
!   [80]S/390, System z, IBM z Systems
  
       * Support for the arch13 architecture has been added. When using the
         -march=arch13 option, the compiler will generate code making use of
*************** New Targets and Target Specific Improvem
*** 4348,4356 ****
         containing pointers to each profiling call stub. This is useful for
         automatically patching in and out calls.
  
! Operating Systems
  
!   Solaris
  
       * g++ now unconditionally enables large file support when compiling
         32-bit code.
--- 4565,4573 ----
         containing pointers to each profiling call stub. This is useful for
         automatically patching in and out calls.
  
! [81]Operating Systems
  
!   [82]Solaris
  
       * g++ now unconditionally enables large file support when compiling
         32-bit code.
*************** Operating Systems
*** 4361,4369 ****
         Solaris 11/x86. It requires the use of GNU as. Solaris 11/SPARC
         support is still work-in-progress.
  
!   Windows
  
!      * A C++ Microsoft ABI bitfield layout bug, [62]PR87137 has been
         fixed. A non-field declaration could cause the current bitfield
         allocation unit to be completed, incorrectly placing a following
         bitfield into a new allocation unit. The Microsoft ABI is selected
--- 4578,4586 ----
         Solaris 11/x86. It requires the use of GNU as. Solaris 11/SPARC
         support is still work-in-progress.
  
!   [83]Windows
  
!      * A C++ Microsoft ABI bitfield layout bug, [84]PR87137 has been
         fixed. A non-field declaration could cause the current bitfield
         allocation unit to be completed, incorrectly placing a following
         bitfield into a new allocation unit. The Microsoft ABI is selected
*************** Operating Systems
*** 4374,4386 ****
            + SuperH targets when the -mhitachi option is specified, or
              __attribute__((renesas)) is used
  
! Improvements for plugin authors
  
       * GCC's diagnostic subsystem now has a way to logically group
         together related diagnostics, auto_diagnostic_group. Such
         diagnostics will be nested by the output of
!        [63]-fdiagnostics-format=json.
!      * GCC now has a set of [64]user experience guidelines for GCC, with
         information and advice on implementing new diagnostics.
  
  Other significant improvements
--- 4591,4603 ----
            + SuperH targets when the -mhitachi option is specified, or
              __attribute__((renesas)) is used
  
! [85]Improvements for plugin authors
  
       * GCC's diagnostic subsystem now has a way to logically group
         together related diagnostics, auto_diagnostic_group. Such
         diagnostics will be nested by the output of
!        [86]-fdiagnostics-format=json.
!      * GCC now has a set of [87]user experience guidelines for GCC, with
         information and advice on implementing new diagnostics.
  
  Other significant improvements
*************** Other significant improvements
*** 4388,4417 ****
       * GCC's internal "selftest" suite now runs for C++ as well as C (in
         debug builds of the compiler).
  
! GCC 9.1
  
!    This is the [65]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 9.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! GCC 9.2
  
!    This is the [66]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 9.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! GCC 9.3
  
!    This is the [67]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 9.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! GCC 9.4
  
!    This is the [68]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 9.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
--- 4605,4634 ----
       * GCC's internal "selftest" suite now runs for C++ as well as C (in
         debug builds of the compiler).
  
! [88]GCC 9.1
  
!    This is the [89]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 9.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [90]GCC 9.2
  
!    This is the [91]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 9.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [92]GCC 9.3
  
!    This is the [93]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 9.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [94]GCC 9.4
  
!    This is the [95]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 9.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
*************** GCC 9.4
*** 4434,4460 ****
         for all SVE implementations. Adding -msve-vector-bits=512 makes the
         code specific to 512-bit SVE.
  
! GCC 9.5
  
!    This is the [69]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 9.5 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [70]GCC manuals. If that fails, the
!     [71]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [72]gcc@gcc.gnu.org. All of [73]our lists have public
      archives.
  
!    Copyright (C) [74]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [75]maintained by the GCC team. Last modified
!    2024-05-09.
  
  References
  
--- 4651,4677 ----
         for all SVE implementations. Adding -msve-vector-bits=512 makes the
         code specific to 512-bit SVE.
  
! [96]GCC 9.5
  
!    This is the [97]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 9.5 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [98]GCC manuals. If that fails, the
!     [99]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [100]gcc@gcc.gnu.org. All of [101]our lists have public
      archives.
  
!    Copyright (C) [102]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [103]maintained by the GCC team. Last modified
!    2025-01-31.
  
  References
  
*************** References
*** 4466,4538 ****
     6. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90920
     7. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-frepo
     8. https://gcc.gnu.org/PR90361
!    9. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Invoking-GCC.html#Invoking-GCC
!   10. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-flive-patching
!   11. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fno-diagnostics-show-line-numbers
!   12. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fno-diagnostics-show-labels
!   13. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
!   14. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-falign-functions
!   15. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-falign-labels
!   16. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-falign-loops
!   17. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-falign-jumps
!   18. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Instrumentation-Options.html#index-fprofile-filter-files
!   19. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Instrumentation-Options.html#index-fprofile-exclude-files
!   20. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Developer-Options.html#index-fopt-info
!   21. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Developer-Options.html#index-fsave-optimization-record
!   22. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-fipa-stack-alignment
!   23. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-fipa-reference-addressable
!   24. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Other-Builtins.html#index-_005f_005fbuiltin_005fexpect_005fwith_005fprobability
!   25. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Other-Builtins.html#index-_005f_005fbuiltin_005fhas_005fattribute-1
!   26. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Other-Builtins.html#index-_005f_005fbuiltin_005fspeculation_005fsafe_005fvalue-1
!   27. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Common-Function-Attributes.html#index-copy-function-attribute
!   28. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-ftree-switch-conversion
!   29. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-fprofile-use
!   30. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-fversion-loops-for-strides
!   31. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-floop-interchange
!   32. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-floop-unroll-and-jam
!   33. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-ftree-loop-distribution
!   34. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Invoking-Gcov.html#Invoking-Gcov
!   35. https://www.openacc.org/
!   36. https://gcc.gnu.org/wiki/OpenACC/Implementation Status#status-9
!   37. https://www.openmp.org/specifications/
!   38. https://gcc.gnu.org/ml/gcc-patches/2018-11/msg00628.html
!   39. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Vector-Extensions.html#index-_005f_005fbuiltin_005fconvertvector
!   40. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Waddress-of-packed-member
!   41. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Warray-bounds
!   42. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wattribute-alias
!   43. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wformat-overflow
!   44. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wformat-truncation
!   45. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wmissing-attributes
!   46. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wstringop-truncation
!   47. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wabsolute-value
!   48. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-copy
!   49. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Winit-list-lifetime
!   50. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wredundant-move
!   51. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wpessimizing-move
!   52. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wclass-conversion
!   53. https://gcc.gnu.org/projects/cxx-status.html#cxx2a
!   54. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wformat
!   55. https://github.com/oneapi-src/oneTBB
!   56. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gfortran/Fortran-Dialect-Options.html#index-fdec-include
!   57. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gfortran/Fortran-Dialect-Options.html#index-fdec
!   58. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gfortran/BUILTIN-directive.html#BUILTIN-directive
!   59. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/jit/topics/contexts.html#gcc_jit_context_add_driver_option
!   60. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Instrumentation-Options.html#index-fstack-protector
!   61. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/AArch64-Options.html#AArch64-Options
!   62. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87137
!   63. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
!   64. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gccint/User-Experience-Guidelines.html
!   65. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.0
!   66. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.2
!   67. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.3
!   68. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.4
!   69. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.5
!   70. https://gcc.gnu.org/onlinedocs/
!   71. mailto:gcc-help@gcc.gnu.org
!   72. mailto:gcc@gcc.gnu.org
!   73. https://gcc.gnu.org/lists.html
!   74. https://www.fsf.org/
!   75. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-8/index.html
                                GCC 8 Release Series
--- 4683,4783 ----
     6. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90920
     7. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-frepo
     8. https://gcc.gnu.org/PR90361
!    9. https://gcc.gnu.org/gcc-9/changes.html#general
!   10. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Invoking-GCC.html#Invoking-GCC
!   11. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-flive-patching
!   12. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fno-diagnostics-show-line-numbers
!   13. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fno-diagnostics-show-labels
!   14. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
!   15. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-falign-functions
!   16. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-falign-labels
!   17. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-falign-loops
!   18. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-falign-jumps
!   19. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Instrumentation-Options.html#index-fprofile-filter-files
!   20. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Instrumentation-Options.html#index-fprofile-exclude-files
!   21. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Developer-Options.html#index-fopt-info
!   22. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Developer-Options.html#index-fsave-optimization-record
!   23. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-fipa-stack-alignment
!   24. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-fipa-reference-addressable
!   25. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Other-Builtins.html#index-_005f_005fbuiltin_005fexpect_005fwith_005fprobability
!   26. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Other-Builtins.html#index-_005f_005fbuiltin_005fhas_005fattribute-1
!   27. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Other-Builtins.html#index-_005f_005fbuiltin_005fspeculation_005fsafe_005fvalue-1
!   28. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Common-Function-Attributes.html#index-copy-function-attribute
!   29. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-ftree-switch-conversion
!   30. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-fprofile-use
!   31. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-fversion-loops-for-strides
!   32. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-floop-interchange
!   33. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-floop-unroll-and-jam
!   34. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-ftree-loop-distribution
!   35. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Invoking-Gcov.html#Invoking-Gcov
!   36. https://gcc.gnu.org/gcc-9/changes.html#languages
!   37. https://www.openacc.org/
!   38. https://gcc.gnu.org/wiki/OpenACC/Implementation Status#status-9
!   39. https://gcc.gnu.org/gcc-9/changes.html#c-family
!   40. https://www.openmp.org/specifications/
!   41. https://gcc.gnu.org/ml/gcc-patches/2018-11/msg00628.html
!   42. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Vector-Extensions.html#index-_005f_005fbuiltin_005fconvertvector
!   43. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Waddress-of-packed-member
!   44. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Warray-bounds
!   45. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wattribute-alias
!   46. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wformat-overflow
!   47. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wformat-truncation
!   48. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wmissing-attributes
!   49. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wstringop-truncation
!   50. https://gcc.gnu.org/gcc-9/changes.html#c
!   51. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wabsolute-value
!   52. https://gcc.gnu.org/gcc-9/changes.html#cxx
!   53. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-copy
!   54. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Winit-list-lifetime
!   55. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wredundant-move
!   56. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wpessimizing-move
!   57. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wclass-conversion
!   58. https://gcc.gnu.org/projects/cxx-status.html#cxx2a
!   59. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wformat
!   60. https://gcc.gnu.org/gcc-9/changes.html#libstdcxx
!   61. https://github.com/uxlfoundation/oneTBB
!   62. https://gcc.gnu.org/gcc-9/changes.html#d
!   63. https://gcc.gnu.org/gcc-9/changes.html#fortran
!   64. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gfortran/Fortran-Dialect-Options.html#index-fdec-include
!   65. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gfortran/Fortran-Dialect-Options.html#index-fdec
!   66. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gfortran/BUILTIN-directive.html#BUILTIN-directive
!   67. https://gcc.gnu.org/gcc-9/changes.html#go
!   68. https://gcc.gnu.org/gcc-9/changes.html#jit
!   69. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/jit/topics/contexts.html#gcc_jit_context_add_driver_option
!   70. https://gcc.gnu.org/gcc-9/changes.html#targets
!   71. https://gcc.gnu.org/gcc-9/changes.html#arm-targets
!   72. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Instrumentation-Options.html#index-fstack-protector
!   73. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/AArch64-Options.html#AArch64-Options
!   74. https://gcc.gnu.org/gcc-9/changes.html#amdgcn
!   75. https://gcc.gnu.org/gcc-9/changes.html#arc
!   76. https://gcc.gnu.org/gcc-9/changes.html#csky
!   77. https://gcc.gnu.org/gcc-9/changes.html#x86
!   78. https://gcc.gnu.org/gcc-9/changes.html#mips
!   79. https://gcc.gnu.org/gcc-9/changes.html#or1k
!   80. https://gcc.gnu.org/gcc-9/changes.html#s390
!   81. https://gcc.gnu.org/gcc-9/changes.html#os
!   82. https://gcc.gnu.org/gcc-9/changes.html#solaris
!   83. https://gcc.gnu.org/gcc-9/changes.html#windows
!   84. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87137
!   85. https://gcc.gnu.org/gcc-9/changes.html#plugins
!   86. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
!   87. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gccint/User-Experience-Guidelines.html
!   88. https://gcc.gnu.org/gcc-9/changes.html#GCC9.1
!   89. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.0
!   90. https://gcc.gnu.org/gcc-9/changes.html#GCC9.2
!   91. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.2
!   92. https://gcc.gnu.org/gcc-9/changes.html#GCC9.3
!   93. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.3
!   94. https://gcc.gnu.org/gcc-9/changes.html#GCC9.4
!   95. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.4
!   96. https://gcc.gnu.org/gcc-9/changes.html#GCC9.5
!   97. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.5
!   98. https://gcc.gnu.org/onlinedocs/
!   99. mailto:gcc-help@gcc.gnu.org
!  100. mailto:gcc@gcc.gnu.org
!  101. https://gcc.gnu.org/lists.html
!  102. https://www.fsf.org/
!  103. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-8/index.html
                                GCC 8 Release Series
*************** References and Acknowledgements
*** 4597,4619 ****
     provided this notice is preserved.
  
     These pages are [23]maintained by the GCC team. Last modified
!    2022-10-26.
  
  References
  
     1. http://www.gnu.org/
     2. https://gcc.gnu.org/gcc-8/changes.html
!    3. http://gcc.gnu.org/onlinedocs/8.5.0/
     4. https://gcc.gnu.org/gcc-8/changes.html
!    5. http://gcc.gnu.org/onlinedocs/8.4.0/
     6. https://gcc.gnu.org/gcc-8/changes.html
!    7. http://gcc.gnu.org/onlinedocs/8.3.0/
     8. https://gcc.gnu.org/gcc-8/changes.html
!    9. http://gcc.gnu.org/onlinedocs/8.2.0/
    10. https://gcc.gnu.org/gcc-8/changes.html
!   11. http://gcc.gnu.org/onlinedocs/8.1.0/
    12. https://gcc.gnu.org/gcc-8/buildstat.html
!   13. http://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Contributors.html
    14. https://gcc.gnu.org/index.html
    15. mailto:gcc@gcc.gnu.org
    16. https://gcc.gnu.org/mirrors.html
--- 4842,4864 ----
     provided this notice is preserved.
  
     These pages are [23]maintained by the GCC team. Last modified
!    2024-05-30.
  
  References
  
     1. http://www.gnu.org/
     2. https://gcc.gnu.org/gcc-8/changes.html
!    3. https://gcc.gnu.org/onlinedocs/8.5.0/
     4. https://gcc.gnu.org/gcc-8/changes.html
!    5. https://gcc.gnu.org/onlinedocs/8.4.0/
     6. https://gcc.gnu.org/gcc-8/changes.html
!    7. https://gcc.gnu.org/onlinedocs/8.3.0/
     8. https://gcc.gnu.org/gcc-8/changes.html
!    9. https://gcc.gnu.org/onlinedocs/8.2.0/
    10. https://gcc.gnu.org/gcc-8/changes.html
!   11. https://gcc.gnu.org/onlinedocs/8.1.0/
    12. https://gcc.gnu.org/gcc-8/buildstat.html
!   13. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Contributors.html
    14. https://gcc.gnu.org/index.html
    15. mailto:gcc@gcc.gnu.org
    16. https://gcc.gnu.org/mirrors.html
*************** http://gcc.gnu.org/gcc-8/changes.html
*** 4635,4640 ****
--- 4880,4886 ----
  
  Caveats
  
+      * The default mode for C is now -std=gnu17 instead of -std=gnu11.
       * Support for the obsolete SDB/coff debug info format has been
         removed. The option -gcoff no longer does anything.
       * The Cilk+ extensions to the C and C++ languages have been removed.
*************** Caveats
*** 4650,4656 ****
         revive them, the next release of GCC will have their sources
         permanently removed.
  
! General Improvements
  
       * Inter-procedural optimization improvements:
            + Reworked run-time estimation metrics leading to more realistic
--- 4896,4902 ----
         revive them, the next release of GCC will have their sources
         permanently removed.
  
! [4]General Improvements
  
       * Inter-procedural optimization improvements:
            + Reworked run-time estimation metrics leading to more realistic
*************** SUMMARY: AddressSanitizer: invalid-point
*** 4837,4852 ****
  void __attribute__ ((no_sanitize ("alignment", "object-size")))
  f () { /* Do something. */; }
  
! New Languages and Language specific improvements
  
!   Ada
  
       * For its internal exception handling used on the host for error
         recovery in the front-end, the compiler now relies on the native
         exception handling mechanism of the host platform, which should be
         more efficient than the former mechanism.
  
!   BRIG (HSAIL)
  
     In this release cycle, the focus for the BRIGFE was on stabilization
     and performance improvements. Also a couple of completely new features
--- 5083,5098 ----
  void __attribute__ ((no_sanitize ("alignment", "object-size")))
  f () { /* Do something. */; }
  
! [5]New Languages and Language specific improvements
  
!   [6]Ada
  
       * For its internal exception handling used on the host for error
         recovery in the front-end, the compiler now relies on the native
         exception handling mechanism of the host platform, which should be
         more efficient than the former mechanism.
  
!   [7]BRIG (HSAIL)
  
     In this release cycle, the focus for the BRIGFE was on stabilization
     and performance improvements. Also a couple of completely new features
*************** New Languages and Language specific impr
*** 4880,4893 ****
       * libhsail-rt: Assume the host runtime allocates the work group
         memory.
  
!   C family
  
       * New command-line options have been added for the C and C++
         compilers:
!           + [4]-Wmultistatement-macros warns about unsafe macros expanding
              to multiple statements used as a body of a statement such as
              if, else, while, switch, or for.
!           + [5]-Wstringop-truncation warns for calls to bounded string
              manipulation functions such as strncat, strncpy, and stpncpy
              that might either truncate the copied string or leave the
              destination unchanged. For example, the following call to
--- 5126,5139 ----
       * libhsail-rt: Assume the host runtime allocates the work group
         memory.
  
!   [8]C family
  
       * New command-line options have been added for the C and C++
         compilers:
!           + [9]-Wmultistatement-macros warns about unsafe macros expanding
              to multiple statements used as a body of a statement such as
              if, else, while, switch, or for.
!           + [10]-Wstringop-truncation warns for calls to bounded string
              manipulation functions such as strncat, strncpy, and stpncpy
              that might either truncate the copied string or leave the
              destination unchanged. For example, the following call to
*************** void copy (const char *s)
*** 4915,4938 ****
  warning: 'strncpy' specified bound 80 equals destination size [-Wstringop-trunca
  tion]
              The -Wstringop-truncation option is included in -Wall.
!             Note that due to GCC bug [6]82944, defining strncat, strncpy,
              or stpncpy as a macro in a system header as some
              implementations do, suppresses the warning.
!           + [7]-Wif-not-aligned controls warnings issued in response to
              invalid uses of objects declared with attribute
!             [8]warn_if_not_aligned.
              The -Wif-not-aligned option is included in -Wall.
!           + [9]-Wmissing-attributes warns when a declaration of a function
!             is missing one or more attributes that a related function is
!             declared with and whose absence may adversely affect the
!             correctness or efficiency of generated code. For example, in
!             C++, the warning is issued when an explicit specialization of
!             a primary template declared with attribute alloc_align,
!             alloc_size, assume_aligned, format, format_arg, malloc, or
!             nonnull is declared without it. Attributes deprecated, error,
!             and warning suppress the warning.
              The -Wmissing-attributes option is included in -Wall.
!           + [10]-Wpacked-not-aligned warns when a struct or union declared
              with attribute packed defines a member with an explicitly
              specified alignment greater than 1. Such a member will wind up
              under-aligned. For example, a warning will be issued for the
--- 5161,5184 ----
  warning: 'strncpy' specified bound 80 equals destination size [-Wstringop-trunca
  tion]
              The -Wstringop-truncation option is included in -Wall.
!             Note that due to GCC bug [11]82944, defining strncat, strncpy,
              or stpncpy as a macro in a system header as some
              implementations do, suppresses the warning.
!           + [12]-Wif-not-aligned controls warnings issued in response to
              invalid uses of objects declared with attribute
!             [13]warn_if_not_aligned.
              The -Wif-not-aligned option is included in -Wall.
!           + [14]-Wmissing-attributes warns when a declaration of a
!             function is missing one or more attributes that a related
!             function is declared with and whose absence may adversely
!             affect the correctness or efficiency of generated code. For
!             example, in C++, the warning is issued when an explicit
!             specialization of a primary template declared with attribute
!             alloc_align, alloc_size, assume_aligned, format, format_arg,
!             malloc, or nonnull is declared without it. Attributes
!             deprecated, error, and warning suppress the warning.
              The -Wmissing-attributes option is included in -Wall.
!           + [15]-Wpacked-not-aligned warns when a struct or union declared
              with attribute packed defines a member with an explicitly
              specified alignment greater than 1. Such a member will wind up
              under-aligned. For example, a warning will be issued for the
*************** warning: alignment 1 of 'struct S' is le
*** 4967,4977 ****
         optimization levels. Using -fsanitize=signed-integer-overflow is
         now the preferred way to audit code, -Wstrict-overflow is
         deprecated.
!      * The [11]-Warray-bounds option has been improved to detect more
         instances of out-of-bounds array indices and pointer offsets. For
         example, negative or excessive indices into flexible array members
         and string literals are detected.
!      * The [12]-Wrestrict option introduced in GCC 7 has been enhanced to
         detect many more instances of overlapping accesses to objects via
         restrict-qualified arguments to standard memory and string
         manipulation functions such as memcpy and strcpy. For example, the
--- 5213,5223 ----
         optimization levels. Using -fsanitize=signed-integer-overflow is
         now the preferred way to audit code, -Wstrict-overflow is
         deprecated.
!      * The [16]-Warray-bounds option has been improved to detect more
         instances of out-of-bounds array indices and pointer offsets. For
         example, negative or excessive indices into flexible array members
         and string literals are detected.
!      * The [17]-Wrestrict option introduced in GCC 7 has been enhanced to
         detect many more instances of overlapping accesses to objects via
         restrict-qualified arguments to standard memory and string
         manipulation functions such as memcpy and strcpy. For example, the
*************** warning: 'strcpy' accessing 5 bytes at o
*** 4989,4995 ****
   4 [-Wrestrict]
         The -Wrestrict option is included in -Wall.
       * Several optimizer enhancements have enabled improvements to the
!        [13]-Wformat-overflow and [14]-Wformat-truncation options. The
         warnings detect more instances of buffer overflow and truncation
         than in GCC 7 and are better at avoiding certain kinds of false
         positives.
--- 5235,5241 ----
   4 [-Wrestrict]
         The -Wrestrict option is included in -Wall.
       * Several optimizer enhancements have enabled improvements to the
!        [18]-Wformat-overflow and [19]-Wformat-truncation options. The
         warnings detect more instances of buffer overflow and truncation
         than in GCC 7 and are better at avoiding certain kinds of false
         positives.
*************** unclosed-2.c:8:45: error: expected ')' b
*** 5070,5076 ****
  
         They will also emit fix-it hints.
  
!   C++
  
       * GCC 8 (-fabi-version=12) has a couple of corrections to the calling
         convention, which changes the ABI for some uncommon code:
--- 5316,5329 ----
  
         They will also emit fix-it hints.
  
!   [20]C
! 
!      * New options -std=c17, to select support for the 2018 edition of the
!        ISO C standard (__STDC_VERSION__ == 201710L), and -std=gnu17, for
!        C17 with GNU extensions.
!      * The default mode has been changed to -std=gnu17.
! 
!   [21]C++
  
       * GCC 8 (-fabi-version=12) has a couple of corrections to the calling
         convention, which changes the ABI for some uncommon code:
*************** unclosed-2.c:8:45: error: expected ')' b
*** 5083,5089 ****
              a class was impossible.
            + WARNING: In GCC 8.1 the second change mistakenly also affects
              classes with a deleted copy constructor and defaulted trivial
!             move constructor (bug [15]c++/86094). This issue is fixed in
              GCC 8.2 (-fabi-version=13).
         You can test whether these changes affect your code with -Wabi=11
         (or -Wabi=12 in GCC 8.2 for the third issue); if these changes are
--- 5336,5342 ----
              a class was impossible.
            + WARNING: In GCC 8.1 the second change mistakenly also affects
              classes with a deleted copy constructor and defaulted trivial
!             move constructor (bug [22]c++/86094). This issue is fixed in
              GCC 8.2 (-fabi-version=13).
         You can test whether these changes affect your code with -Wabi=11
         (or -Wabi=12 in GCC 8.2 for the third issue); if these changes are
*************** unclosed-2.c:8:45: error: expected ')' b
*** 5096,5102 ****
         preferred alignment should use __alignof__ instead.
       * New command-line options have been added for the C++ compiler to
         control warnings:
!           + [16]-Wclass-memaccess warns when objects of non-trivial class
              types are manipulated in potentially unsafe ways by raw memory
              functions such as memcpy, or realloc. The warning helps detect
              calls that bypass user-defined constructors or copy-assignment
--- 5349,5355 ----
         preferred alignment should use __alignof__ instead.
       * New command-line options have been added for the C++ compiler to
         control warnings:
!           + [23]-Wclass-memaccess warns when objects of non-trivial class
              types are manipulated in potentially unsafe ways by raw memory
              functions such as memcpy, or realloc. The warning helps detect
              calls that bypass user-defined constructors or copy-assignment
*************** o trivial copy-assignment [-Wclass-memac
*** 5115,5121 ****
         including designated initializers, default member initializers for
         bit-fields, __VA_OPT__ (except that #__VA_OPT__ is unsupported),
         lambda [=, this] captures, etc. For a full list of new features,
!        see [17]the C++ status page.
       * When reporting on attempts to access private fields of a class or
         struct, the C++ compiler will now offer fix-it hints showing how to
         use an accessor function to get at the field in question, if one
--- 5368,5374 ----
         including designated initializers, default member initializers for
         bit-fields, __VA_OPT__ (except that #__VA_OPT__ is unsupported),
         lambda [=, this] captures, etc. For a full list of new features,
!        see [24]the C++ status page.
       * When reporting on attempts to access private fields of a class or
         struct, the C++ compiler will now offer fix-it hints showing how to
         use an accessor function to get at the field in question, if one
*************** ctor<double> >()' from 'map<map<int,vect
*** 5260,5266 ****
         result of this change, -Wreturn-type warnings are enabled by
         default for C++.
  
!     Runtime Library (libstdc++)
  
       * Improved experimental support for C++17, including the following
         features:
--- 5513,5519 ----
         result of this change, -Wreturn-type warnings are enabled by
         default for C++.
  
!     [25]Runtime Library (libstdc++)
  
       * Improved experimental support for C++17, including the following
         features:
*************** ctor<double> >()' from 'map<map<int,vect
*** 5281,5287 ****
       * Extensions __gnu_cxx::airy_ai and __gnu_cxx::airy_bi added to the
         Mathematical Special Functions.
  
!   Fortran
  
       * The main version of libfortran has been changed to 5.
       * Parameterized derived types, a major feature of Fortran 2003, have
--- 5534,5540 ----
       * Extensions __gnu_cxx::airy_ai and __gnu_cxx::airy_bi added to the
         Mathematical Special Functions.
  
!   [26]Fortran
  
       * The main version of libfortran has been changed to 5.
       * Parameterized derived types, a major feature of Fortran 2003, have
*************** ctor<double> >()' from 'map<map<int,vect
*** 5327,5333 ****
         hierarchical subsets of images that execute independently of other
         image subsets.
  
!   Go
  
       * GCC 8 provides a complete implementation of the Go 1.10.1 user
         packages.
--- 5580,5586 ----
         hierarchical subsets of images that execute independently of other
         image subsets.
  
!   [27]Go
  
       * GCC 8 provides a complete implementation of the Go 1.10.1 user
         packages.
*************** ctor<double> >()' from 'map<map<int,vect
*** 5338,5358 ****
         Go front end. This significantly reduces the number of heap
         allocations by allocating values on the stack instead.
  
! libgccjit
  
     The libgccjit API gained four new entry points:
!      * [18]gcc_jit_type_get_vector and
!      * [19]gcc_jit_context_new_rvalue_from_vector for working with
         vectors,
!      * [20]gcc_jit_type_get_aligned
!      * [21]gcc_jit_function_get_address
  
!    The C code generated by [22]gcc_jit_context_dump_reproducer_to_file is
     now easier-to-read.
  
! New Targets and Target Specific Improvements
  
!   AArch64
  
       * The Armv8.4-A architecture is now supported. It can be used by
         specifying the -march=armv8.4-a option.
--- 5591,5611 ----
         Go front end. This significantly reduces the number of heap
         allocations by allocating values on the stack instead.
  
! [28]libgccjit
  
     The libgccjit API gained four new entry points:
!      * [29]gcc_jit_type_get_vector and
!      * [30]gcc_jit_context_new_rvalue_from_vector for working with
         vectors,
!      * [31]gcc_jit_type_get_aligned
!      * [32]gcc_jit_function_get_address
  
!    The C code generated by [33]gcc_jit_context_dump_reproducer_to_file is
     now easier-to-read.
  
! [34]New Targets and Target Specific Improvements
  
!   [35]AArch64
  
       * The Armv8.4-A architecture is now supported. It can be used by
         specifying the -march=armv8.4-a option.
*************** New Targets and Target Specific Improvem
*** 5396,5402 ****
         options, for example: -mcpu=cortex-a75 or -mtune=cortex-a75 or as
         arguments to the equivalent target attributes and pragmas.
  
!   ARC
  
       * Added support for:
            + Fast interrupts.
--- 5649,5655 ----
         options, for example: -mcpu=cortex-a75 or -mtune=cortex-a75 or as
         arguments to the equivalent target attributes and pragmas.
  
!   [36]ARC
  
       * Added support for:
            + Fast interrupts.
*************** New Targets and Target Specific Improvem
*** 5414,5420 ****
         Introduced -mlpc-width command-line option to control the width of
         the lp_count register.
  
!   ARM
  
       * The -mfpu option now takes a new option setting of -mfpu=auto. When
         set to this the floating-point and SIMD settings are derived from
--- 5667,5673 ----
         Introduced -mlpc-width command-line option to control the width of
         the lp_count register.
  
!   [37]ARM
  
       * The -mfpu option now takes a new option setting of -mfpu=auto. When
         set to this the floating-point and SIMD settings are derived from
*************** New Targets and Target Specific Improvem
*** 5437,5443 ****
         arguments as -mcpu but only the CPU name has an effect on tuning.
         The architecture extensions do not have any effect. For details of
         what extensions a particular architecture or CPU option supports
!        please refer to the [23]documentation.
       * The -mstructure-size-boundary option has been deprecated and will
         be removed in a future release.
       * The default link behavior for Armv6 and Armv7-R targets has been
--- 5690,5696 ----
         arguments as -mcpu but only the CPU name has an effect on tuning.
         The architecture extensions do not have any effect. For details of
         what extensions a particular architecture or CPU option supports
!        please refer to the [38]documentation.
       * The -mstructure-size-boundary option has been deprecated and will
         be removed in a future release.
       * The default link behavior for Armv6 and Armv7-R targets has been
*************** New Targets and Target Specific Improvem
*** 5479,5506 ****
         options, for example: -mcpu=cortex-a75 or -mtune=cortex-r52 or as
         arguments to the equivalent target attributes and pragmas.
  
!   AVR
  
       * The AVR port now supports the following XMEGA-like devices:
  
       ATtiny212, ATtiny214, ATtiny412, ATtiny414, ATtiny416, ATtiny417,
       ATtiny814, ATtiny816, ATtiny817, ATtiny1614, ATtiny1616, ATtiny1617,
       ATtiny3214, ATtiny3216, ATtiny3217
!        The new devices are listed under [24]-mmcu=avrxmega3.
            + These devices see flash memory in the RAM address space, so
              that features like PROGMEM and __flash are not needed any more
              (as opposed to other AVR families for which read-only data
              will be located in RAM except special, non-standard features
              are used to locate and access such data). This requires that
              the compiler is used with Binutils 2.29 or newer so that
!             [25]read-only data will be located in flash memory.
            + A new command-line option -mshort-calls is supported. This
              option is used internally for multilib selection of the
              avrxmega3 variants. It is not an optimization option. Do not
              set it by hand.
!      * The compiler now generates [26]efficient interrupt service routine
         (ISR) prologues and epilogues. This is achieved by using the new
!        [27]AVR pseudo instruction __gcc_isr which is supported and
         resolved by the GNU assembler.
            + As the __gcc_isr pseudo-instruction will be resolved by the
              assembler, inline assembly is transparent to the process. This
--- 5732,5759 ----
         options, for example: -mcpu=cortex-a75 or -mtune=cortex-r52 or as
         arguments to the equivalent target attributes and pragmas.
  
!   [39]AVR
  
       * The AVR port now supports the following XMEGA-like devices:
  
       ATtiny212, ATtiny214, ATtiny412, ATtiny414, ATtiny416, ATtiny417,
       ATtiny814, ATtiny816, ATtiny817, ATtiny1614, ATtiny1616, ATtiny1617,
       ATtiny3214, ATtiny3216, ATtiny3217
!        The new devices are listed under [40]-mmcu=avrxmega3.
            + These devices see flash memory in the RAM address space, so
              that features like PROGMEM and __flash are not needed any more
              (as opposed to other AVR families for which read-only data
              will be located in RAM except special, non-standard features
              are used to locate and access such data). This requires that
              the compiler is used with Binutils 2.29 or newer so that
!             [41]read-only data will be located in flash memory.
            + A new command-line option -mshort-calls is supported. This
              option is used internally for multilib selection of the
              avrxmega3 variants. It is not an optimization option. Do not
              set it by hand.
!      * The compiler now generates [42]efficient interrupt service routine
         (ISR) prologues and epilogues. This is achieved by using the new
!        [43]AVR pseudo instruction __gcc_isr which is supported and
         resolved by the GNU assembler.
            + As the __gcc_isr pseudo-instruction will be resolved by the
              assembler, inline assembly is transparent to the process. This
*************** New Targets and Target Specific Improvem
*** 5515,5532 ****
            + The feature is turned on per default for all optimization
              levels except for -O0 and -Og. It is explicitly enabled by
              means of option -mgas-isr-prologues.
!           + Support has been added for a new [28]AVR function attribute
              no_gccisr. It can be used to disable __gcc_isr pseudo
              instruction generation for individual ISRs.
            + This optimization is only available if GCC is configured with
              GNU Binutils 2.29 or newer; or at least with a version of
!             Binutils that implements feature [29]PR21683.
       * The compiler no more saves / restores registers in main; the effect
         is the same as if attribute OS_task was specified for main. This
         optimization can be switched off by the new command-line option
         -mno-main-is-OS_task.
  
!   IA-32/x86-64
  
       * The x86 port now supports the naked function attribute.
       * Better tuning for znver1 and Intel Core based CPUs.
--- 5768,5785 ----
            + The feature is turned on per default for all optimization
              levels except for -O0 and -Og. It is explicitly enabled by
              means of option -mgas-isr-prologues.
!           + Support has been added for a new [44]AVR function attribute
              no_gccisr. It can be used to disable __gcc_isr pseudo
              instruction generation for individual ISRs.
            + This optimization is only available if GCC is configured with
              GNU Binutils 2.29 or newer; or at least with a version of
!             Binutils that implements feature [45]PR21683.
       * The compiler no more saves / restores registers in main; the effect
         is the same as if attribute OS_task was specified for main. This
         optimization can be switched off by the new command-line option
         -mno-main-is-OS_task.
  
!   [46]IA-32/x86-64
  
       * The x86 port now supports the naked function attribute.
       * Better tuning for znver1 and Intel Core based CPUs.
*************** New Targets and Target Specific Improvem
*** 5542,5553 ****
       * GCC now supports the Intel Control-flow Enforcement Technology
         (CET) extension through -fcf-protection option.
  
!   NDS32
  
       * New command-line options -mext-perf, -mext-perf2, and -mext-string
         have been added for performance extension instructions.
  
!   Nios II
  
       * The Nios II back end has been improved to generate better-optimized
         code. Changes include switching to LRA, more accurate cost models,
--- 5795,5806 ----
       * GCC now supports the Intel Control-flow Enforcement Technology
         (CET) extension through -fcf-protection option.
  
!   [47]NDS32
  
       * New command-line options -mext-perf, -mext-perf2, and -mext-string
         have been added for performance extension instructions.
  
!   [48]Nios II
  
       * The Nios II back end has been improved to generate better-optimized
         code. Changes include switching to LRA, more accurate cost models,
*************** New Targets and Target Specific Improvem
*** 5556,5562 ****
         added.
       * The stack-smashing protection options are now enabled on Nios II.
  
!   PA-RISC
  
       * The default call ABI on 32-bit linux has been changed from callee
         copies to caller copies. This affects objects larger than eight
--- 5809,5815 ----
         added.
       * The stack-smashing protection options are now enabled on Nios II.
  
!   [49]PA-RISC
  
       * The default call ABI on 32-bit linux has been changed from callee
         copies to caller copies. This affects objects larger than eight
*************** New Targets and Target Specific Improvem
*** 5564,5570 ****
         x86 and resolve issues with OpenMP.
       * Other PA-RISC targets are unchanged.
  
!   PowerPC / PowerPC64 / RS6000
  
       * The PowerPC SPE support is split off to a separate powerpcspe port.
         The separate port is deprecated and might be removed in a future
--- 5817,5823 ----
         x86 and resolve issues with OpenMP.
       * Other PA-RISC targets are unchanged.
  
!   [50]PowerPC / PowerPC64 / RS6000
  
       * The PowerPC SPE support is split off to a separate powerpcspe port.
         The separate port is deprecated and might be removed in a future
*************** New Targets and Target Specific Improvem
*** 5579,5592 ****
         target (-maltivec=be) is deprecated and will be removed in a future
         release.
  
!   Tile
  
       * The TILE-Gx port is deprecated and will be removed in a future
         release.
  
! Operating Systems
  
!   Windows
  
       * GCC on Microsoft Windows can now be configured via
         --enable-mingw-wildcard or --disable-mingw-wildcard to force a
--- 5832,5845 ----
         target (-maltivec=be) is deprecated and will be removed in a future
         release.
  
!   [51]Tile
  
       * The TILE-Gx port is deprecated and will be removed in a future
         release.
  
! [52]Operating Systems
  
!   [53]Windows
  
       * GCC on Microsoft Windows can now be configured via
         --enable-mingw-wildcard or --disable-mingw-wildcard to force a
*************** Operating Systems
*** 5596,5602 ****
         obtained by not using the above options or by using
         --enable-mingw-wildcard=platform.
  
! Improvements for plugin authors
  
       * Plugins can now register a callback hook for when comments are
         encountered by the C and C++ compilers, e.g. allowing for plugins
--- 5849,5855 ----
         obtained by not using the above options or by using
         --enable-mingw-wildcard=platform.
  
! [54]Improvements for plugin authors
  
       * Plugins can now register a callback hook for when comments are
         encountered by the C and C++ compilers, e.g. allowing for plugins
*************** Improvements for plugin authors
*** 5607,5622 ****
       * The API for creating fix-it hints now supports newlines, and for
         emitting mutually incompatible fix-it hints for one diagnostic.
  
! GCC 8.1
  
!    This is the [30]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 8.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! GCC 8.2
  
!    This is the [31]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 8.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
--- 5860,5875 ----
       * The API for creating fix-it hints now supports newlines, and for
         emitting mutually incompatible fix-it hints for one diagnostic.
  
! [55]GCC 8.1
  
!    This is the [56]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 8.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [57]GCC 8.2
  
!    This is the [58]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 8.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
*************** GCC 8.2
*** 5632,5659 ****
  
     GCC 8.2 fixed a bug introduced in GCC 8.1 affecting passing or
     returning of classes with a deleted copy constructor and defaulted
!    trivial move constructor (bug [32]c++/86094). GCC 8.2 introduces
     -fabi-version=13 and makes it the default, ABI incompatibilities
!    between GCC 8.1 and 8.2 can be reported with -Wabi=12. See [33]C++
     changes for more details.
  
    Target Specific Changes
  
      IA-32/x86-64
  
!      * -mtune=native performance regression [34]PR84413 on Intel Skylake
         processors has been fixed.
  
! GCC 8.3
  
!    This is the [35]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 8.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
    Windows
  
!      * A C++ Microsoft ABI bitfield layout bug, [36]PR87137 has been
         fixed. A non-field declaration could cause the current bitfield
         allocation unit to be completed, incorrectly placing a following
         bitfield into a new allocation unit. The Microsoft ABI is selected
--- 5885,5912 ----
  
     GCC 8.2 fixed a bug introduced in GCC 8.1 affecting passing or
     returning of classes with a deleted copy constructor and defaulted
!    trivial move constructor (bug [59]c++/86094). GCC 8.2 introduces
     -fabi-version=13 and makes it the default, ABI incompatibilities
!    between GCC 8.1 and 8.2 can be reported with -Wabi=12. See [60]C++
     changes for more details.
  
    Target Specific Changes
  
      IA-32/x86-64
  
!      * -mtune=native performance regression [61]PR84413 on Intel Skylake
         processors has been fixed.
  
! [62]GCC 8.3
  
!    This is the [63]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 8.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
    Windows
  
!      * A C++ Microsoft ABI bitfield layout bug, [64]PR87137 has been
         fixed. A non-field declaration could cause the current bitfield
         allocation unit to be completed, incorrectly placing a following
         bitfield into a new allocation unit. The Microsoft ABI is selected
*************** GCC 8.3
*** 5667,5682 ****
         resolve only those regressions, we decided to resolve all the cases
         of this defect in single change.
  
! GCC 8.4
  
!    This is the [37]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 8.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! GCC 8.5
  
!    This is the [38]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 8.5 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
--- 5920,5935 ----
         resolve only those regressions, we decided to resolve all the cases
         of this defect in single change.
  
! [65]GCC 8.4
  
!    This is the [66]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 8.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [67]GCC 8.5
  
!    This is the [68]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 8.5 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
*************** GCC 8.5
*** 5694,5758 ****
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [39]GCC manuals. If that fails, the
!     [40]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [41]gcc@gcc.gnu.org. All of [42]our lists have public
      archives.
  
!    Copyright (C) [43]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [44]maintained by the GCC team. Last modified
!    2023-01-11.
  
  References
  
     1. https://gcc.gnu.org/gcc-8/porting_to.html
     2. https://gcc.gnu.org/onlinedocs/index.html#current
     3. https://gcc.gnu.org/ml/gcc/2018-04/msg00102.html
!    4. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wmultistatement-macros
!    5. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wstringop-truncation
!    6. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82944
!    7. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wif-not-aligned
!    8. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Common-Variable-Attributes.html#index-warn_005fif_005fnot_005faligned-variable-attribute
!    9. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wmissing-attributes
!   10. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wpacked-not-aligned
!   11. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Warray-bounds
!   12. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wrestrict
!   13. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wformat-overflow
!   14. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wformat-truncation
!   15. https://gcc.gnu.org/PR86094
!   16. https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Dialect-Options.html#index-Wclass-memaccess
!   17. https://gcc.gnu.org/projects/cxx-status.html#cxx2a
!   18. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/jit/topics/types.html#gcc_jit_type_get_vector
!   19. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/jit/topics/expressions.html#gcc_jit_context_new_rvalue_from_vector
!   20. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/jit/topics/types.html#gcc_jit_type_get_aligned
!   21. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/jit/topics/function-pointers.html#gcc_jit_function_get_address
!   22. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/jit/topics/contexts.html#gcc_jit_context_dump_reproducer_to_file
!   23. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/ARM-Options.html#ARM-Options
!   24. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/AVR-Options.html
!   25. https://sourceware.org/PR21472
!   26. https://gcc.gnu.org/PR20296
!   27. https://sourceware.org/binutils/docs-2.29/as/AVR-Pseudo-Instructions.html
!   28. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/AVR-Function-Attributes.html
!   29. https://sourceware.org/PR21683
!   30. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=8.0
!   31. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=8.2
!   32. https://gcc.gnu.org/PR86094
!   33. https://gcc.gnu.org/gcc-8/changes.html#cxx
!   34. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84413
!   35. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=8.3
!   36. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87137
!   37. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=8.4
!   38. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=8.5
!   39. https://gcc.gnu.org/onlinedocs/
!   40. mailto:gcc-help@gcc.gnu.org
!   41. mailto:gcc@gcc.gnu.org
!   42. https://gcc.gnu.org/lists.html
!   43. https://www.fsf.org/
!   44. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-7/index.html
                                GCC 7 Release Series
--- 5947,6041 ----
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [69]GCC manuals. If that fails, the
!     [70]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [71]gcc@gcc.gnu.org. All of [72]our lists have public
      archives.
  
!    Copyright (C) [73]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [74]maintained by the GCC team. Last modified
!    2025-01-31.
  
  References
  
     1. https://gcc.gnu.org/gcc-8/porting_to.html
     2. https://gcc.gnu.org/onlinedocs/index.html#current
     3. https://gcc.gnu.org/ml/gcc/2018-04/msg00102.html
!    4. https://gcc.gnu.org/gcc-8/changes.html#general
!    5. https://gcc.gnu.org/gcc-8/changes.html#languages
!    6. https://gcc.gnu.org/gcc-8/changes.html#ada
!    7. https://gcc.gnu.org/gcc-8/changes.html#brig
!    8. https://gcc.gnu.org/gcc-8/changes.html#c-family
!    9. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wmultistatement-macros
!   10. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wstringop-truncation
!   11. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82944
!   12. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wif-not-aligned
!   13. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Common-Variable-Attributes.html#index-warn_005fif_005fnot_005faligned-variable-attribute
!   14. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wmissing-attributes
!   15. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wpacked-not-aligned
!   16. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Warray-bounds
!   17. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wrestrict
!   18. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wformat-overflow
!   19. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wformat-truncation
!   20. https://gcc.gnu.org/gcc-8/changes.html#c
!   21. https://gcc.gnu.org/gcc-8/changes.html#cxx
!   22. https://gcc.gnu.org/PR86094
!   23. https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Dialect-Options.html#index-Wclass-memaccess
!   24. https://gcc.gnu.org/projects/cxx-status.html#cxx2a
!   25. https://gcc.gnu.org/gcc-8/changes.html#libstdcxx
!   26. https://gcc.gnu.org/gcc-8/changes.html#fortran
!   27. https://gcc.gnu.org/gcc-8/changes.html#go
!   28. https://gcc.gnu.org/gcc-8/changes.html#jit
!   29. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/jit/topics/types.html#gcc_jit_type_get_vector
!   30. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/jit/topics/expressions.html#gcc_jit_context_new_rvalue_from_vector
!   31. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/jit/topics/types.html#gcc_jit_type_get_aligned
!   32. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/jit/topics/function-pointers.html#gcc_jit_function_get_address
!   33. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/jit/topics/contexts.html#gcc_jit_context_dump_reproducer_to_file
!   34. https://gcc.gnu.org/gcc-8/changes.html#targets
!   35. https://gcc.gnu.org/gcc-8/changes.html#aarch64
!   36. https://gcc.gnu.org/gcc-8/changes.html#arc
!   37. https://gcc.gnu.org/gcc-8/changes.html#arm
!   38. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/ARM-Options.html#ARM-Options
!   39. https://gcc.gnu.org/gcc-8/changes.html#avr
!   40. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/AVR-Options.html
!   41. https://sourceware.org/PR21472
!   42. https://gcc.gnu.org/PR20296
!   43. https://sourceware.org/binutils/docs-2.29/as/AVR-Pseudo-Instructions.html
!   44. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/AVR-Function-Attributes.html
!   45. https://sourceware.org/PR21683
!   46. https://gcc.gnu.org/gcc-8/changes.html#x86
!   47. https://gcc.gnu.org/gcc-8/changes.html#nds32
!   48. https://gcc.gnu.org/gcc-8/changes.html#nios2
!   49. https://gcc.gnu.org/gcc-8/changes.html#hppa
!   50. https://gcc.gnu.org/gcc-8/changes.html#powerpc
!   51. https://gcc.gnu.org/gcc-8/changes.html#Tile
!   52. https://gcc.gnu.org/gcc-8/changes.html#os
!   53. https://gcc.gnu.org/gcc-8/changes.html#windows
!   54. https://gcc.gnu.org/gcc-8/changes.html#plugins
!   55. https://gcc.gnu.org/gcc-8/changes.html#GCC8.1
!   56. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=8.0
!   57. https://gcc.gnu.org/gcc-8/changes.html#GCC8.2
!   58. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=8.2
!   59. https://gcc.gnu.org/PR86094
!   60. https://gcc.gnu.org/gcc-8/changes.html#cxx
!   61. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84413
!   62. https://gcc.gnu.org/gcc-8/changes.html#GCC8.3
!   63. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=8.3
!   64. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87137
!   65. https://gcc.gnu.org/gcc-8/changes.html#GCC8.4
!   66. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=8.4
!   67. https://gcc.gnu.org/gcc-8/changes.html#GCC8.5
!   68. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=8.5
!   69. https://gcc.gnu.org/onlinedocs/
!   70. mailto:gcc-help@gcc.gnu.org
!   71. mailto:gcc@gcc.gnu.org
!   72. https://gcc.gnu.org/lists.html
!   73. https://www.fsf.org/
!   74. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-7/index.html
                                GCC 7 Release Series
*************** References and Acknowledgements
*** 5817,5839 ****
     provided this notice is preserved.
  
     These pages are [23]maintained by the GCC team. Last modified
!    2022-10-26.
  
  References
  
     1. http://www.gnu.org/
     2. https://gcc.gnu.org/gcc-7/changes.html
!    3. http://gcc.gnu.org/onlinedocs/7.5.0/
     4. https://gcc.gnu.org/gcc-7/changes.html
!    5. http://gcc.gnu.org/onlinedocs/7.4.0/
     6. https://gcc.gnu.org/gcc-7/changes.html
!    7. http://gcc.gnu.org/onlinedocs/7.3.0/
     8. https://gcc.gnu.org/gcc-7/changes.html
!    9. http://gcc.gnu.org/onlinedocs/7.2.0/
    10. https://gcc.gnu.org/gcc-7/changes.html
!   11. http://gcc.gnu.org/onlinedocs/7.1.0/
    12. https://gcc.gnu.org/gcc-7/buildstat.html
!   13. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html
    14. https://gcc.gnu.org/index.html
    15. mailto:gcc@gcc.gnu.org
    16. https://gcc.gnu.org/mirrors.html
--- 6100,6122 ----
     provided this notice is preserved.
  
     These pages are [23]maintained by the GCC team. Last modified
!    2024-05-30.
  
  References
  
     1. http://www.gnu.org/
     2. https://gcc.gnu.org/gcc-7/changes.html
!    3. https://gcc.gnu.org/onlinedocs/7.5.0/
     4. https://gcc.gnu.org/gcc-7/changes.html
!    5. https://gcc.gnu.org/onlinedocs/7.4.0/
     6. https://gcc.gnu.org/gcc-7/changes.html
!    7. https://gcc.gnu.org/onlinedocs/7.3.0/
     8. https://gcc.gnu.org/gcc-7/changes.html
!    9. https://gcc.gnu.org/onlinedocs/7.2.0/
    10. https://gcc.gnu.org/gcc-7/changes.html
!   11. https://gcc.gnu.org/onlinedocs/7.1.0/
    12. https://gcc.gnu.org/gcc-7/buildstat.html
!   13. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
    14. https://gcc.gnu.org/index.html
    15. mailto:gcc@gcc.gnu.org
    16. https://gcc.gnu.org/mirrors.html
*************** Caveats
*** 5872,5878 ****
         is enabled (on by default) the compiler will emit a diagnostic note
         for code that might be affected.
  
! General Optimizer Improvements
  
       * GCC 7 can determine the return value or range of return values of
         some calls to the sprintf family of functions and make it available
--- 6155,6161 ----
         is enabled (on by default) the compiler will emit a diagnostic note
         for code that might be affected.
  
! [6]General Optimizer Improvements
  
       * GCC 7 can determine the return value or range of return values of
         some calls to the sprintf family of functions and make it available
*************** Address 0x7fffb8dba990 is located in sta
*** 5967,5984 ****
         information remains the default until consumers of debugging
         information are adjusted.
  
! New Languages and Language specific improvements
  
     OpenACC support in C, C++, and Fortran continues to be maintained and
!    improved. See the [6]OpenACC and [7]Offloading wiki pages for further
     information.
  
!   Ada
  
       * On mainstream native platforms, Ada programs no longer require the
         stack to be made executable in order to run properly.
  
!   BRIG (HSAIL)
  
     Support for processing BRIG 1.0 files was added in this release. BRIG
     is a binary format for HSAIL (Heterogeneous System Architecture
--- 6250,6267 ----
         information remains the default until consumers of debugging
         information are adjusted.
  
! [7]New Languages and Language specific improvements
  
     OpenACC support in C, C++, and Fortran continues to be maintained and
!    improved. See the [8]OpenACC and [9]Offloading wiki pages for further
     information.
  
!   [10]Ada
  
       * On mainstream native platforms, Ada programs no longer require the
         stack to be made executable in order to run properly.
  
!   [11]BRIG (HSAIL)
  
     Support for processing BRIG 1.0 files was added in this release. BRIG
     is a binary format for HSAIL (Heterogeneous System Architecture
*************** New Languages and Language specific impr
*** 5987,5993 ****
     GCC-supported targets. An implementation of an HSAIL runtime library,
     libhsail-rt is also included.
  
!   C family
  
       * New command-line options have been added for the C and C++
         compilers:
--- 6270,6276 ----
     GCC-supported targets. An implementation of an HSAIL runtime library,
     libhsail-rt is also included.
  
!   [12]C family
  
       * New command-line options have been added for the C and C++
         compilers:
*************** note: 'snprintf' output between 3 and 5
*** 6289,6295 ****
              more cases of the problem than in prior GCC versions.
            + The -Wstringop-overflow=type option detects buffer overflow in
              calls to string handling functions like memcpy and strcpy. The
!             option relies on [8]Object Size Checking and has an effect
              similar to defining the _FORTIFY_SOURCE macro.
              -Wstringop-overflow=2 is enabled by default.
              For example, in the following snippet, because the call to
--- 6572,6578 ----
              more cases of the problem than in prior GCC versions.
            + The -Wstringop-overflow=type option detects buffer overflow in
              calls to string handling functions like memcpy and strcpy. The
!             option relies on [13]Object Size Checking and has an effect
              similar to defining the _FORTIFY_SOURCE macro.
              -Wstringop-overflow=2 is enabled by default.
              For example, in the following snippet, because the call to
*************** enum {
*** 6346,6352 ****
    c = __builtin_mul_overflow_p (a, b, a) ? 0 : a * b
  };
  
!   C
  
       * The C front end now supports type names _FloatN for floating-point
         types with IEEE interchange formats and _FloatNx for floating-point
--- 6629,6635 ----
    c = __builtin_mul_overflow_p (a, b, a) ? 0 : a * b
  };
  
!   [14]C
  
       * The C front end now supports type names _FloatN for floating-point
         types with IEEE interchange formats and _FloatNx for floating-point
*************** enum {
*** 6373,6392 ****
       * Compilation with -fopenmp is now compatible with the C11 _Atomic
         keyword.
  
!   C++
  
       * The C++ front end has experimental support for all of the current
         C++17 draft with the -std=c++1z or -std=gnu++1z flags, including if
         constexpr, class template argument deduction, auto template
         parameters, and structured bindings. For a full list of new
!        features, see [9]the C++ status page.
       * C++17 support for new of over-aligned types can be enabled in other
         modes with the -faligned-new flag.
       * The C++17 evaluation order requirements can be selected in other
         modes with the -fstrong-eval-order flag, or disabled in C++17 mode
         with -fno-strong-eval-order.
       * The default semantics of inherited constructors has changed in all
!        modes, following [10]P0136. Essentially, overload resolution
         happens as if calling the inherited constructor directly, and the
         compiler fills in construction of the other bases and members as
         needed. Most uses should not need any changes. The old behavior can
--- 6656,6675 ----
       * Compilation with -fopenmp is now compatible with the C11 _Atomic
         keyword.
  
!   [15]C++
  
       * The C++ front end has experimental support for all of the current
         C++17 draft with the -std=c++1z or -std=gnu++1z flags, including if
         constexpr, class template argument deduction, auto template
         parameters, and structured bindings. For a full list of new
!        features, see [16]the C++ status page.
       * C++17 support for new of over-aligned types can be enabled in other
         modes with the -faligned-new flag.
       * The C++17 evaluation order requirements can be selected in other
         modes with the -fstrong-eval-order flag, or disabled in C++17 mode
         with -fno-strong-eval-order.
       * The default semantics of inherited constructors has changed in all
!        modes, following [17]P0136. Essentially, overload resolution
         happens as if calling the inherited constructor directly, and the
         compiler fills in construction of the other bases and members as
         needed. Most uses should not need any changes. The old behavior can
*************** test.cc:4:11: error: expected ';' after
*** 6407,6416 ****
       * -Waligned-new has been added to the C++ front end. It warns about
         new of type with extended alignment without -faligned-new.
  
!     Runtime Library (libstdc++)
  
       * The type of exception thrown by iostreams, std::ios_base::failure,
!        now uses the [11]cxx11 ABI.
       * Experimental support for C++17, including the following new
         features:
            + std::string_view;
--- 6690,6699 ----
       * -Waligned-new has been added to the C++ front end. It warns about
         new of type with extended alignment without -faligned-new.
  
!     [18]Runtime Library (libstdc++)
  
       * The type of exception thrown by iostreams, std::ios_base::failure,
!        now uses the [19]cxx11 ABI.
       * Experimental support for C++17, including the following new
         features:
            + std::string_view;
*************** test.cc:4:11: error: expected ';' after
*** 6446,6452 ****
       * A new power-of-two rehashing policy for use with the _Hashtable
         internals, thanks to François Dumont.
  
!   Fortran
  
       * Support for a number of extensions for compatibility with legacy
         code with new flags:
--- 6729,6735 ----
       * A new power-of-two rehashing policy for use with the _Hashtable
         internals, thanks to François Dumont.
  
!   [20]Fortran
  
       * Support for a number of extensions for compatibility with legacy
         code with new flags:
*************** end program test
*** 6476,6482 ****
  At line 8 of file do_check_12.f90
  Fortran runtime error: Loop iterates infinitely
  
!      * Version 4.5 of the [12]OpenMP specification is now partially
         supported in the Fortran compiler; the largest missing item is
         structure element mapping.
       * User-defined derived-type input/output (UDTIO) is added.
--- 6759,6765 ----
  At line 8 of file do_check_12.f90
  Fortran runtime error: Loop iterates infinitely
  
!      * Version 4.5 of the [21]OpenMP specification is now partially
         supported in the Fortran compiler; the largest missing item is
         structure element mapping.
       * User-defined derived-type input/output (UDTIO) is added.
*************** Fortran runtime error: Loop iterates inf
*** 6490,6496 ****
       * Improved diagnostics (polymorphic results in pure functions).
       * Coarray: Support for failed images (Fortan 2015 feature).
  
!   Go
  
       * GCC 7 provides a complete implementation of the Go 1.8.1 user
         packages.
--- 6773,6779 ----
       * Improved diagnostics (polymorphic results in pure functions).
       * Coarray: Support for failed images (Fortan 2015 feature).
  
!   [22]Go
  
       * GCC 7 provides a complete implementation of the Go 1.8.1 user
         packages.
*************** Fortran runtime error: Loop iterates inf
*** 6500,6515 ****
         -fgo-optimize-allocs option. The -fgo-debug-escape prints
         information useful for debugging escape analysis choices.
  
!   Java (GCJ)
  
     The GCC Java front end and associated libjava runtime library have been
     removed from GCC.
  
! libgccjit
  
     The libgccjit API gained support for marking calls as requiring
     tail-call optimization via a new entry point:
!    [13]gcc_jit_rvalue_set_bool_require_tail_call.
  
     libgccjit performs numerous checks at the API boundary, but if these
     succeed, it previously ignored errors and other diagnostics emitted
--- 6783,6798 ----
         -fgo-optimize-allocs option. The -fgo-debug-escape prints
         information useful for debugging escape analysis choices.
  
!   [23]Java (GCJ)
  
     The GCC Java front end and associated libjava runtime library have been
     removed from GCC.
  
! [24]libgccjit
  
     The libgccjit API gained support for marking calls as requiring
     tail-call optimization via a new entry point:
!    [25]gcc_jit_rvalue_set_bool_require_tail_call.
  
     libgccjit performs numerous checks at the API boundary, but if these
     succeed, it previously ignored errors and other diagnostics emitted
*************** libgccjit
*** 6518,6526 ****
     are emitted, they are visible from the libgccjit API, and that the the
     context is flagged as having failed.
  
! New Targets and Target Specific Improvements
  
!   AArch64
  
       * GCC has been updated to the latest revision of the procedure call
         standard (AAPCS64) to provide support for parameter passing when
--- 6801,6809 ----
     are emitted, they are visible from the libgccjit API, and that the the
     context is flagged as having failed.
  
! [26]New Targets and Target Specific Improvements
  
!   [27]AArch64
  
       * GCC has been updated to the latest revision of the procedure call
         standard (AAPCS64) to provide support for parameter passing when
*************** New Targets and Target Specific Improvem
*** 6530,6536 ****
       * The option -msign-return-address= is supported to enable return
         address protection using ARMv8.3-A Pointer Authentication
         Extensions. For more information on the arguments accepted by this
!        option, please refer to [14]AArch64-Options.
       * The ARMv8.2-A architecture and the ARMv8.2-A 16-bit Floating-Point
         Extensions are now supported. They can be used by specifying the
         -march=armv8.2-a or -march=armv8.2-a+fp16 options. The 16-bit
--- 6813,6819 ----
       * The option -msign-return-address= is supported to enable return
         address protection using ARMv8.3-A Pointer Authentication
         Extensions. For more information on the arguments accepted by this
!        option, please refer to [28]AArch64-Options.
       * The ARMv8.2-A architecture and the ARMv8.2-A 16-bit Floating-Point
         Extensions are now supported. They can be used by specifying the
         -march=armv8.2-a or -march=armv8.2-a+fp16 options. The 16-bit
*************** New Targets and Target Specific Improvem
*** 6546,6552 ****
         options, for example: -mcpu=cortex-a73 or -mtune=vulcan or as
         arguments to the equivalent target attributes and pragmas.
  
!   ARC
  
       * Added support for ARC HS and ARC EM processors.
       * Added support for ARC EM variation found in Intel QuarkSE SoCs.
--- 6829,6835 ----
         options, for example: -mcpu=cortex-a73 or -mtune=vulcan or as
         arguments to the equivalent target attributes and pragmas.
  
!   [29]ARC
  
       * Added support for ARC HS and ARC EM processors.
       * Added support for ARC EM variation found in Intel QuarkSE SoCs.
*************** New Targets and Target Specific Improvem
*** 6556,6562 ****
       * Fixed PIE for ARC CPUs.
       * New CPU templates are supported via multilib.
  
!   ARM
  
       * Support for the ARMv5 and ARMv5E architectures has been deprecated
         (which have no known implementations) and will be removed in a
--- 6839,6845 ----
       * Fixed PIE for ARC CPUs.
       * New CPU templates are supported via multilib.
  
!   [30]ARM
  
       * Support for the ARMv5 and ARMv5E architectures has been deprecated
         (which have no known implementations) and will be removed in a
*************** New Targets and Target Specific Improvem
*** 6585,6595 ****
         of intrinsics such as cdp, ldc, and others.
       * The configure option --with-multilib-list now accepts the value
         rmprofile to build multilib libraries for a range of embedded
!        targets. See our [15]installation instructions for details.
  
!   AVR
  
!      * On the reduced Tiny cores, the progmem [16]variable attribute is
         now properly supported. Respective read-only variables are located
         in flash memory in section .progmem.data. No special code is needed
         to access such variables; the compiler automatically adds an offset
--- 6868,6878 ----
         of intrinsics such as cdp, ldc, and others.
       * The configure option --with-multilib-list now accepts the value
         rmprofile to build multilib libraries for a range of embedded
!        targets. See our [31]installation instructions for details.
  
!   [32]AVR
  
!      * On the reduced Tiny cores, the progmem [33]variable attribute is
         now properly supported. Respective read-only variables are located
         in flash memory in section .progmem.data. No special code is needed
         to access such variables; the compiler automatically adds an offset
*************** const int* get_address (unsigned idx)
*** 6617,6627 ****
         off — or turns into errors — warnings that are reported for
         interrupt service routines (ISRs) which don't follow AVR-LibC's
         naming convention of prefixing ISR names with __vector.
!      * __builtin_avr_nops(n) is a new [17]built-in function that inserts n
         NOP instructions into the instruction stream. n must be a value
         known at compile time.
  
!   IA-32/x86-64
  
       * Support for the AVX-512 Fused Multiply Accumulation Packed Single
         precision (4FMAPS), AVX-512 Vector Neural Network Instructions Word
--- 6900,6910 ----
         off — or turns into errors — warnings that are reported for
         interrupt service routines (ISRs) which don't follow AVR-LibC's
         naming convention of prefixing ISR names with __vector.
!      * __builtin_avr_nops(n) is a new [34]built-in function that inserts n
         NOP instructions into the instruction stream. n must be a value
         known at compile time.
  
!   [35]IA-32/x86-64
  
       * Support for the AVX-512 Fused Multiply Accumulation Packed Single
         precision (4FMAPS), AVX-512 Vector Neural Network Instructions Word
*************** const int* get_address (unsigned idx)
*** 6629,6640 ****
         (VPOPCNTDQ) and Software Guard Extensions (SGX) ISA extensions has
         been added.
  
!   NVPTX
  
       * OpenMP target regions can now be offloaded to NVidia PTX GPGPUs.
!        See the [18]Offloading Wiki on how to configure it.
  
!   PowerPC / PowerPC64 / RS6000
  
       * The PowerPC port now uses LRA by default.
       * GCC now diagnoses inline assembly that clobbers register r2. This
--- 6912,6923 ----
         (VPOPCNTDQ) and Software Guard Extensions (SGX) ISA extensions has
         been added.
  
!   [36]NVPTX
  
       * OpenMP target regions can now be offloaded to NVidia PTX GPGPUs.
!        See the [37]Offloading Wiki on how to configure it.
  
!   [38]PowerPC / PowerPC64 / RS6000
  
       * The PowerPC port now uses LRA by default.
       * GCC now diagnoses inline assembly that clobbers register r2. This
*************** const int* get_address (unsigned idx)
*** 6655,6661 ****
         -mstack-protector-guard-offset= change how the stack protector gets
         the value to use as canary.
  
!   S/390, System z, IBM z Systems, IBM Z
  
       * Support for the IBM z14 processor has been added. When using the
         -march=z14 option, the compiler will generate code making use of
--- 6938,6944 ----
         -mstack-protector-guard-offset= change how the stack protector gets
         the value to use as canary.
  
!   [39]S/390, System z, IBM z Systems, IBM Z
  
       * Support for the IBM z14 processor has been added. When using the
         -march=z14 option, the compiler will generate code making use of
*************** const int* get_address (unsigned idx)
*** 6666,6681 ****
       * Builtins for the new vector instructions have been added and can be
         enabled using the -mzvector option.
  
!   RISC-V
  
       * Support for the RISC-V instruction set has been added.
  
!   RX
  
     Basic support for atomic built-in function has been added. It is
     currently implemented by flipping interrupts off and on as needed.
  
!   SH
  
       * Support for SH5/SH64 has been removed.
       * Improved utilization of delay slots on SH2A.
--- 6949,6964 ----
       * Builtins for the new vector instructions have been added and can be
         enabled using the -mzvector option.
  
!   [40]RISC-V
  
       * Support for the RISC-V instruction set has been added.
  
!   [41]RX
  
     Basic support for atomic built-in function has been added. It is
     currently implemented by flipping interrupts off and on as needed.
  
!   [42]SH
  
       * Support for SH5/SH64 has been removed.
       * Improved utilization of delay slots on SH2A.
*************** const int* get_address (unsigned idx)
*** 6695,6717 ****
            + mov.w R0,@Rn+
            + mov.l R0,@Rn+
  
!   SPARC
  
       * The SPARC port now uses LRA by default.
       * Support for the new Subtract-Extended-with-Carry instruction
         available in SPARC M7 (Niagara 7) has been added.
  
! Operating Systems
  
!   AIX
  
       * Visibility support has been enabled for AIX 7.1 and above.
  
!   Fuchsia
  
!      * Support has been added for the [19]Fuchsia OS.
  
!   RTEMS
  
       * The ABI changes on ARM so that no short enums are used by default.
  
--- 6978,7000 ----
            + mov.w R0,@Rn+
            + mov.l R0,@Rn+
  
!   [43]SPARC
  
       * The SPARC port now uses LRA by default.
       * Support for the new Subtract-Extended-with-Carry instruction
         available in SPARC M7 (Niagara 7) has been added.
  
! [44]Operating Systems
  
!   [45]AIX
  
       * Visibility support has been enabled for AIX 7.1 and above.
  
!   [46]Fuchsia
  
!      * Support has been added for the [47]Fuchsia OS.
  
!   [48]RTEMS
  
       * The ABI changes on ARM so that no short enums are used by default.
  
*************** x-early-inliner-iterations'?
*** 6826,6846 ****
            + GCC's C front end has been extended so that it can parse dumps
              of GCC's internal representations, allowing for DejaGnu tests
              that more directly exercise specific optimization passes. This
!             covers both the [20]GIMPLE representation (for testing
!             higher-level optimizations) and the [21]RTL representation,
              allowing for more direct testing of lower-level details, such
              as register allocation and instruction selection.
  
! GCC 7.1
  
!    This is the [22]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 7.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! GCC 7.2
  
!    This is the [23]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 7.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
--- 7109,7129 ----
            + GCC's C front end has been extended so that it can parse dumps
              of GCC's internal representations, allowing for DejaGnu tests
              that more directly exercise specific optimization passes. This
!             covers both the [49]GIMPLE representation (for testing
!             higher-level optimizations) and the [50]RTL representation,
              allowing for more direct testing of lower-level details, such
              as register allocation and instruction selection.
  
! [51]GCC 7.1
  
!    This is the [52]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 7.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [53]GCC 7.2
  
!    This is the [54]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 7.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
*************** GCC 7.2
*** 6865,6873 ****
       * Support for 64-bit PowerPC using the ELFv2 ABI with 64-bit long
         double has been added.
  
! GCC 7.3
  
!    This is the [24]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 7.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
--- 7148,7156 ----
       * Support for 64-bit PowerPC using the ELFv2 ABI with 64-bit long
         double has been added.
  
! [55]GCC 7.3
  
!    This is the [56]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 7.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
*************** GCC 7.3
*** 6876,6882 ****
  
      SPARC
  
!      * Workarounds for the four [25]LEON3FT errata GRLIB-TN-0010..0013
         have been added. Relevant errata are activated by the target
         specific -mfix-ut699, -mfix-ut700 and -mfix-gr712rc switches.
  
--- 7159,7165 ----
  
      SPARC
  
!      * Workarounds for the four [57]LEON3FT errata GRLIB-TN-0010..0013
         have been added. Relevant errata are activated by the target
         specific -mfix-ut699, -mfix-ut700 and -mfix-gr712rc switches.
  
*************** GCC 7.3
*** 6886,6919 ****
  
       * Support has been added for Epiphany target.
  
! GCC 7.4
  
!    This is the [26]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 7.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! GCC 7.5
  
!    This is the [27]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 7.5 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [28]GCC manuals. If that fails, the
!     [29]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [30]gcc@gcc.gnu.org. All of [31]our lists have public
      archives.
  
!    Copyright (C) [32]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [33]maintained by the GCC team. Last modified
!    2022-10-26.
  
  References
  
--- 7169,7202 ----
  
       * Support has been added for Epiphany target.
  
! [58]GCC 7.4
  
!    This is the [59]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 7.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [60]GCC 7.5
  
!    This is the [61]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 7.5 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [62]GCC manuals. If that fails, the
!     [63]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [64]gcc@gcc.gnu.org. All of [65]our lists have public
      archives.
  
!    Copyright (C) [66]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [67]maintained by the GCC team. Last modified
!    2025-01-31.
  
  References
  
*************** References
*** 6922,6955 ****
     3. https://gcc.gnu.org/wiki/LRAIsDefault
     4. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/libstdc++/manual/manual/profile_mode.html
     5. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77728
!    6. https://gcc.gnu.org/wiki/OpenACC
!    7. https://gcc.gnu.org/wiki/Offloading
!    8. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/Object-Size-Checking.html
!    9. https://gcc.gnu.org/projects/cxx-status.html#cxx1z
!   10. https://wg21.link/p0136
!   11. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/libstdc++/manual/using_dual_abi.html
!   12. https://www.openmp.org/specifications/
!   13. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/jit/topics/expressions.html#gcc_jit_rvalue_set_bool_require_tail_call
!   14. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/AArch64-Options.html#AArch64-Options
!   15. https://gcc.gnu.org/install/configure.html
!   16. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/AVR-Variable-Attributes.html
!   17. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/AVR-Built-in-Functions.html
!   18. https://gcc.gnu.org/wiki/Offloading
!   19. https://fuchsia.googlesource.com/
!   20. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gccint/GIMPLE-Tests.html
!   21. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gccint/RTL-Tests.html
!   22. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=7.0
!   23. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=7.2
!   24. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=7.3
!   25. https://www.gaisler.com/index.php/information/app-tech-notes
!   26. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=7.4
!   27. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=7.5
!   28. https://gcc.gnu.org/onlinedocs/
!   29. mailto:gcc-help@gcc.gnu.org
!   30. mailto:gcc@gcc.gnu.org
!   31. https://gcc.gnu.org/lists.html
!   32. https://www.fsf.org/
!   33. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-6/index.html
                                GCC 6 Release Series
--- 7205,7272 ----
     3. https://gcc.gnu.org/wiki/LRAIsDefault
     4. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/libstdc++/manual/manual/profile_mode.html
     5. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77728
!    6. https://gcc.gnu.org/gcc-7/changes.html#general
!    7. https://gcc.gnu.org/gcc-7/changes.html#languages
!    8. https://gcc.gnu.org/wiki/OpenACC
!    9. https://gcc.gnu.org/wiki/Offloading
!   10. https://gcc.gnu.org/gcc-7/changes.html#ada
!   11. https://gcc.gnu.org/gcc-7/changes.html#brig
!   12. https://gcc.gnu.org/gcc-7/changes.html#c-family
!   13. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/Object-Size-Checking.html
!   14. https://gcc.gnu.org/gcc-7/changes.html#c
!   15. https://gcc.gnu.org/gcc-7/changes.html#cxx
!   16. https://gcc.gnu.org/projects/cxx-status.html#cxx1z
!   17. https://wg21.link/p0136
!   18. https://gcc.gnu.org/gcc-7/changes.html#libstdcxx
!   19. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/libstdc++/manual/using_dual_abi.html
!   20. https://gcc.gnu.org/gcc-7/changes.html#fortran
!   21. https://www.openmp.org/specifications/
!   22. https://gcc.gnu.org/gcc-7/changes.html#go
!   23. https://gcc.gnu.org/gcc-7/changes.html#java
!   24. https://gcc.gnu.org/gcc-7/changes.html#jit
!   25. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/jit/topics/expressions.html#gcc_jit_rvalue_set_bool_require_tail_call
!   26. https://gcc.gnu.org/gcc-7/changes.html#targets
!   27. https://gcc.gnu.org/gcc-7/changes.html#aarch64
!   28. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/AArch64-Options.html#AArch64-Options
!   29. https://gcc.gnu.org/gcc-7/changes.html#arc
!   30. https://gcc.gnu.org/gcc-7/changes.html#arm
!   31. https://gcc.gnu.org/install/configure.html
!   32. https://gcc.gnu.org/gcc-7/changes.html#avr
!   33. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/AVR-Variable-Attributes.html
!   34. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/AVR-Built-in-Functions.html
!   35. https://gcc.gnu.org/gcc-7/changes.html#x86
!   36. https://gcc.gnu.org/gcc-7/changes.html#nvptx
!   37. https://gcc.gnu.org/wiki/Offloading
!   38. https://gcc.gnu.org/gcc-7/changes.html#powerpc
!   39. https://gcc.gnu.org/gcc-7/changes.html#s390
!   40. https://gcc.gnu.org/gcc-7/changes.html#riscv
!   41. https://gcc.gnu.org/gcc-7/changes.html#rx
!   42. https://gcc.gnu.org/gcc-7/changes.html#sh
!   43. https://gcc.gnu.org/gcc-7/changes.html#sparc
!   44. https://gcc.gnu.org/gcc-7/changes.html#os
!   45. https://gcc.gnu.org/gcc-7/changes.html#aix
!   46. https://gcc.gnu.org/gcc-7/changes.html#fuchsia
!   47. https://fuchsia.googlesource.com/
!   48. https://gcc.gnu.org/gcc-7/changes.html#rtems
!   49. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gccint/GIMPLE-Tests.html
!   50. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gccint/RTL-Tests.html
!   51. https://gcc.gnu.org/gcc-7/changes.html#GCC7.1
!   52. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=7.0
!   53. https://gcc.gnu.org/gcc-7/changes.html#GCC7.2
!   54. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=7.2
!   55. https://gcc.gnu.org/gcc-7/changes.html#GCC7.3
!   56. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=7.3
!   57. https://www.gaisler.com/app-notes-tech-notes-and-white-papers
!   58. https://gcc.gnu.org/gcc-7/changes.html#GCC7.4
!   59. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=7.4
!   60. https://gcc.gnu.org/gcc-7/changes.html#GCC7.5
!   61. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=7.5
!   62. https://gcc.gnu.org/onlinedocs/
!   63. mailto:gcc-help@gcc.gnu.org
!   64. mailto:gcc@gcc.gnu.org
!   65. https://gcc.gnu.org/lists.html
!   66. https://www.fsf.org/
!   67. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-6/index.html
                                GCC 6 Release Series
*************** References and Acknowledgements
*** 7014,7036 ****
     provided this notice is preserved.
  
     These pages are [23]maintained by the GCC team. Last modified
!    2022-10-26.
  
  References
  
     1. http://www.gnu.org/
     2. https://gcc.gnu.org/gcc-6/changes.html
!    3. http://gcc.gnu.org/onlinedocs/6.5.0/
     4. https://gcc.gnu.org/gcc-6/changes.html
!    5. http://gcc.gnu.org/onlinedocs/6.4.0/
     6. https://gcc.gnu.org/gcc-6/changes.html
!    7. http://gcc.gnu.org/onlinedocs/6.3.0/
     8. https://gcc.gnu.org/gcc-6/changes.html
!    9. http://gcc.gnu.org/onlinedocs/6.2.0/
    10. https://gcc.gnu.org/gcc-6/changes.html
!   11. http://gcc.gnu.org/onlinedocs/6.1.0/
    12. https://gcc.gnu.org/gcc-6/buildstat.html
!   13. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html
    14. https://gcc.gnu.org/index.html
    15. mailto:gcc@gcc.gnu.org
    16. https://gcc.gnu.org/mirrors.html
--- 7331,7353 ----
     provided this notice is preserved.
  
     These pages are [23]maintained by the GCC team. Last modified
!    2024-05-30.
  
  References
  
     1. http://www.gnu.org/
     2. https://gcc.gnu.org/gcc-6/changes.html
!    3. https://gcc.gnu.org/onlinedocs/6.5.0/
     4. https://gcc.gnu.org/gcc-6/changes.html
!    5. https://gcc.gnu.org/onlinedocs/6.4.0/
     6. https://gcc.gnu.org/gcc-6/changes.html
!    7. https://gcc.gnu.org/onlinedocs/6.3.0/
     8. https://gcc.gnu.org/gcc-6/changes.html
!    9. https://gcc.gnu.org/onlinedocs/6.2.0/
    10. https://gcc.gnu.org/gcc-6/changes.html
!   11. https://gcc.gnu.org/onlinedocs/6.1.0/
    12. https://gcc.gnu.org/gcc-6/buildstat.html
!   13. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
    14. https://gcc.gnu.org/index.html
    15. mailto:gcc@gcc.gnu.org
    16. https://gcc.gnu.org/mirrors.html
*************** Caveats
*** 7071,7077 ****
         there is a patch in the bug report to allow it to be fixed by
         anybody packaging GCC 6.5 or installing it themselves.
  
! General Optimizer Improvements
  
       * UndefinedBehaviorSanitizer gained a new sanitization option,
         -fsanitize=bounds-strict, which enables strict checking of array
--- 7388,7394 ----
         there is a patch in the bug report to allow it to be fixed by
         anybody packaging GCC 6.5 or installing it themselves.
  
! [6]General Optimizer Improvements
  
       * UndefinedBehaviorSanitizer gained a new sanitization option,
         -fsanitize=bounds-strict, which enables strict checking of array
*************** General Optimizer Improvements
*** 7142,7151 ****
            + Function cloning now more aggressively eliminates unused
              function parameters.
  
! New Languages and Language specific improvements
  
     Compared to GCC 5, the GCC 6 release series includes a much improved
!    implementation of the [6]OpenACC 2.0a specification. Highlights are:
       * In addition to single-threaded host-fallback execution, offloading
         is supported for nvptx (Nvidia GPUs) on x86_64 and PowerPC 64-bit
         little-endian GNU/Linux host systems. For nvptx offloading, with
--- 7459,7468 ----
            + Function cloning now more aggressively eliminates unused
              function parameters.
  
! [7]New Languages and Language specific improvements
  
     Compared to GCC 5, the GCC 6 release series includes a much improved
!    implementation of the [8]OpenACC 2.0a specification. Highlights are:
       * In addition to single-threaded host-fallback execution, offloading
         is supported for nvptx (Nvidia GPUs) on x86_64 and PowerPC 64-bit
         little-endian GNU/Linux host systems. For nvptx offloading, with
*************** New Languages and Language specific impr
*** 7175,7186 ****
         argument, the function call evaluates to a compile-time constant
         value only for C and C++ but not for Fortran.
  
!    See the [7]OpenACC and [8]Offloading wiki pages for further
     information.
  
!   C family
  
!      * Version 4.5 of the [9]OpenMP specification is now supported in the
         C and C++ compilers.
       * The C and C++ compilers now support attributes on enumerators. For
         instance, it is now possible to mark enumerators as deprecated:
--- 7492,7503 ----
         argument, the function call evaluates to a compile-time constant
         value only for C and C++ but not for Fortran.
  
!    See the [9]OpenACC and [10]Offloading wiki pages for further
     information.
  
!   [11]C family
  
!      * Version 4.5 of the [12]OpenMP specification is now supported in the
         C and C++ compilers.
       * The C and C++ compilers now support attributes on enumerators. For
         instance, it is now possible to mark enumerators as deprecated:
*************** you mean 'color'?
*** 7246,7252 ****
            + -Wmisleading-indentation warns about places where the
              indentation of the code gives a misleading idea of the block
              structure of the code to a human reader. For example, given
!             [10]CVE-2014-1266:
  
  sslKeyExchange.c: In function 'SSLVerifySignedServerKeyExchange':
  sslKeyExchange.c:629:3: warning: this 'if' clause does not guard... [-Wmisleadin
--- 7563,7569 ----
            + -Wmisleading-indentation warns about places where the
              indentation of the code gives a misleading idea of the block
              structure of the code to a human reader. For example, given
!             [13]CVE-2014-1266:
  
  sslKeyExchange.c: In function 'SSLVerifySignedServerKeyExchange':
  sslKeyExchange.c:629:3: warning: this 'if' clause does not guard... [-Wmisleadin
*************** test.c:3:1: error: version control confl
*** 7266,7272 ****
   <<<<<<< HEAD
   ^~~~~~~
  
!   C
  
       * It is possible to disable warnings when an initialized field of a
         structure or a union with side effects is being overridden when
--- 7583,7589 ----
   <<<<<<< HEAD
   ^~~~~~~
  
!   [14]C
  
       * It is possible to disable warnings when an initialized field of a
         structure or a union with side effects is being overridden when
*************** test.c:3:1: error: version control confl
*** 7276,7296 ****
         and unions has been introduced. It specifies the storage order (aka
         endianness) in memory of scalar fields in structures or unions.
  
!   C++
  
       * The default mode has been changed to -std=gnu++14.
!      * [11]C++ Concepts are now supported when compiling with -fconcepts.
       * -flifetime-dse is more aggressive in dead-store elimination in
         situations where a memory store to a location precedes a
         constructor to that memory location.
!      * G++ now supports [12]C++17 fold expressions, u8 character literals,
         extended static_assert, and nested namespace definitions.
       * G++ now allows constant evaluation for all non-type template
         arguments.
       * G++ now supports C++ Transactional Memory when compiling with
         -fgnu-tm.
  
!     Runtime Library (libstdc++)
  
       * Extensions to the C++ Library to support mathematical special
         functions (ISO/IEC 29124:2010), thanks to Edward Smith-Rowland.
--- 7593,7613 ----
         and unions has been introduced. It specifies the storage order (aka
         endianness) in memory of scalar fields in structures or unions.
  
!   [15]C++
  
       * The default mode has been changed to -std=gnu++14.
!      * [16]C++ Concepts are now supported when compiling with -fconcepts.
       * -flifetime-dse is more aggressive in dead-store elimination in
         situations where a memory store to a location precedes a
         constructor to that memory location.
!      * G++ now supports [17]C++17 fold expressions, u8 character literals,
         extended static_assert, and nested namespace definitions.
       * G++ now allows constant evaluation for all non-type template
         arguments.
       * G++ now supports C++ Transactional Memory when compiling with
         -fgnu-tm.
  
!     [18]Runtime Library (libstdc++)
  
       * Extensions to the C++ Library to support mathematical special
         functions (ISO/IEC 29124:2010), thanks to Edward Smith-Rowland.
*************** test.c:3:1: error: version control confl
*** 7320,7326 ****
       * Improved std::locale support for DragonFly and FreeBSD, thanks to
         John Marino and Andreas Tobler.
  
!   Fortran
  
       * Fortran 2008 SUBMODULE support.
       * Fortran 2015 EVENT_TYPE, EVENT_POST, EVENT_WAIT, and EVENT_QUERY
--- 7637,7643 ----
       * Improved std::locale support for DragonFly and FreeBSD, thanks to
         John Marino and Andreas Tobler.
  
!   [19]Fortran
  
       * Fortran 2008 SUBMODULE support.
       * Fortran 2015 EVENT_TYPE, EVENT_POST, EVENT_WAIT, and EVENT_QUERY
*************** test.c:3:1: error: version control confl
*** 7338,7356 ****
         divisions of integer constants which are truncated. This option is
         included in -Wall by default.
  
! libgccjit
  
       * The driver code is now run in-process within libgccjit, providing a
         small speed-up of the compilation process.
       * The API has gained entrypoints for
!           + [13]timing how long was spent in different parts of code,
!           + [14]creating switch statements,
!           + [15]allowing unreachable basic blocks in a function, and
!           + [16]adding arbitrary command-line options to a compilation.
  
! New Targets and Target Specific Improvements
  
!   AArch64
  
       * A number of AArch64-specific options have been added. The most
         important ones are summarised in this section; for more detailed
--- 7655,7673 ----
         divisions of integer constants which are truncated. This option is
         included in -Wall by default.
  
! [20]libgccjit
  
       * The driver code is now run in-process within libgccjit, providing a
         small speed-up of the compilation process.
       * The API has gained entrypoints for
!           + [21]timing how long was spent in different parts of code,
!           + [22]creating switch statements,
!           + [23]allowing unreachable basic blocks in a function, and
!           + [24]adding arbitrary command-line options to a compilation.
  
! [25]New Targets and Target Specific Improvements
  
!   [26]AArch64
  
       * A number of AArch64-specific options have been added. The most
         important ones are summarised in this section; for more detailed
*************** New Targets and Target Specific Improvem
*** 7364,7370 ****
         is limited to 28KiB under the LP64 SysV ABI, and 15KiB under the
         ILP32 SysV ABI.
       * The AArch64 port now supports target attributes and pragmas. Please
!        refer to the [17]documentation for details of available attributes
         and pragmas as well as usage instructions.
       * Link-time optimization across translation units with different
         target-specific options is now supported.
--- 7681,7687 ----
         is limited to 28KiB under the LP64 SysV ABI, and 15KiB under the
         ILP32 SysV ABI.
       * The AArch64 port now supports target attributes and pragmas. Please
!        refer to the [27]documentation for details of available attributes
         and pragmas as well as usage instructions.
       * Link-time optimization across translation units with different
         target-specific options is now supported.
*************** New Targets and Target Specific Improvem
*** 7410,7416 ****
         for big-endian targets have been fixed resulting in improved code
         generation for ACLE intrinsics with -mbig-endian.
  
!   ARM
  
       * Support for revisions of the ARM architecture prior to ARMv4t has
         been deprecated and will be removed in a future GCC release. The
--- 7727,7733 ----
         for big-endian targets have been fixed resulting in improved code
         generation for ACLE intrinsics with -mbig-endian.
  
!   [28]ARM
  
       * Support for revisions of the ARM architecture prior to ARMv4t has
         been deprecated and will be removed in a future GCC release. The
*************** New Targets and Target Specific Improvem
*** 7422,7428 ****
         arm7tdmi is still supported. The values of -march that are
         deprecated are: armv2,armv2a,armv3,armv3m,armv4.
       * The ARM port now supports target attributes and pragmas. Please
!        refer to the [18]documentation for details of available attributes
         and pragmas as well as usage instructions.
       * Support has been added for the following processors (GCC
         identifiers in parentheses): ARM Cortex-A32 (cortex-a32), ARM
--- 7739,7745 ----
         arm7tdmi is still supported. The values of -march that are
         deprecated are: armv2,armv2a,armv3,armv3m,armv4.
       * The ARM port now supports target attributes and pragmas. Please
!        refer to the [29]documentation for details of available attributes
         and pragmas as well as usage instructions.
       * Support has been added for the following processors (GCC
         identifiers in parentheses): ARM Cortex-A32 (cortex-a32), ARM
*************** New Targets and Target Specific Improvem
*** 7430,7436 ****
         identifiers can be used as arguments to the -mcpu or -mtune
         options, for example: -mcpu=cortex-a32 or -mtune=cortex-a35.
  
!   Heterogeneous Systems Architecture
  
       * GCC can now generate HSAIL (Heterogeneous System Architecture
         Intermediate Language) for simple OpenMP device constructs if
--- 7747,7753 ----
         identifiers can be used as arguments to the -mcpu or -mtune
         options, for example: -mcpu=cortex-a32 or -mtune=cortex-a35.
  
!   [30]Heterogeneous Systems Architecture
  
       * GCC can now generate HSAIL (Heterogeneous System Architecture
         Intermediate Language) for simple OpenMP device constructs if
*************** New Targets and Target Specific Improvem
*** 7451,7457 ****
  
         into parallel HSA GPU kernels.
  
!   IA-32/x86-64
  
       * GCC now supports the Intel CPU named Skylake with AVX-512
         extensions through -march=skylake-avx512. The switch enables the
--- 7768,7774 ----
  
         into parallel HSA GPU kernels.
  
!   [31]IA-32/x86-64
  
       * GCC now supports the Intel CPU named Skylake with AVX-512
         extensions through -march=skylake-avx512. The switch enables the
*************** New Targets and Target Specific Improvem
*** 7472,7487 ****
       * Support for address spaces __seg_fs, __seg_gs, and __seg_tls. These
         can be used to access data via the %fs and %gs segments without
         having to resort to inline assembly. Please refer to the
!        [19]documentation for usage instructions.
       * Support for AMD Zen (family 17h) processors is now available
         through the -march=znver1 and -mtune=znver1 options.
  
!   MeP
  
       * Support for the MeP (mep-elf) architecture has been deprecated and
         will be removed in a future GCC release.
  
!   MSP430
  
       * The MSP430 compiler now has the ability to automatically distribute
         code and data between low memory (addresses below 64K) and high
--- 7789,7804 ----
       * Support for address spaces __seg_fs, __seg_gs, and __seg_tls. These
         can be used to access data via the %fs and %gs segments without
         having to resort to inline assembly. Please refer to the
!        [32]documentation for usage instructions.
       * Support for AMD Zen (family 17h) processors is now available
         through the -march=znver1 and -mtune=znver1 options.
  
!   [33]MeP
  
       * Support for the MeP (mep-elf) architecture has been deprecated and
         will be removed in a future GCC release.
  
!   [34]MSP430
  
       * The MSP430 compiler now has the ability to automatically distribute
         code and data between low memory (addresses below 64K) and high
*************** New Targets and Target Specific Improvem
*** 7499,7505 ****
         compiler what to do with objects that do not have one of these new
         attributes.
  
!   PowerPC / PowerPC64 / RS6000
  
       * PowerPC64 now supports IEEE 128-bit floating-point using the
         __float128 data type. In GCC 6, this is not enabled by default, but
--- 7816,7822 ----
         compiler what to do with objects that do not have one of these new
         attributes.
  
!   [35]PowerPC / PowerPC64 / RS6000
  
       * PowerPC64 now supports IEEE 128-bit floating-point using the
         __float128 data type. In GCC 6, this is not enabled by default, but
*************** New Targets and Target Specific Improvem
*** 7573,7579 ****
       * The "q", "S", "T", and "t" asm-constraints have been removed.
       * The "b", "B", "m", "M", and "W" format modifiers have been removed.
  
!   S/390, System z, IBM z Systems
  
       * Support for the IBM z13 processor has been added. When using the
         -march=z13 option, the compiler will generate code making use of
--- 7890,7896 ----
       * The "q", "S", "T", and "t" asm-constraints have been removed.
       * The "b", "B", "m", "M", and "W" format modifiers have been removed.
  
!   [36]S/390, System z, IBM z Systems
  
       * Support for the IBM z13 processor has been added. When using the
         -march=z13 option, the compiler will generate code making use of
*************** New Targets and Target Specific Improvem
*** 7600,7606 ****
         setting for that system. If GCC is unable to detect the host CPU
         these options have no effect.
       * The IBM z Systems port now supports target attributes and pragmas.
!        Please refer to the [20]documentation for details of available
         attributes and pragmas as well as usage instructions.
       * -fsplit-stack is now supported as part of the IBM z Systems port.
         This feature requires a recent gold linker to be used.
--- 7917,7923 ----
         setting for that system. If GCC is unable to detect the host CPU
         these options have no effect.
       * The IBM z Systems port now supports target attributes and pragmas.
!        Please refer to the [37]documentation for details of available
         attributes and pragmas as well as usage instructions.
       * -fsplit-stack is now supported as part of the IBM z Systems port.
         This feature requires a recent gold linker to be used.
*************** New Targets and Target Specific Improvem
*** 7609,7622 ****
         from now on defaults to -march=z900 if not specified otherwise.
         -march=native on a g5/g6 machine will default to -march=z900.
  
!   SH
  
       * Support for SH5 / SH64 has been declared obsolete and will be
         removed in future releases.
       * Support for the FDPIC ABI has been added. It can be enabled using
         the new -mfdpic target option and --enable-fdpic configure option.
  
!   SPARC
  
       * An ABI bug has been fixed in 64-bit mode. Unfortunately, this
         change will break binary compatibility with earlier releases for
--- 7926,7939 ----
         from now on defaults to -march=z900 if not specified otherwise.
         -march=native on a g5/g6 machine will default to -march=z900.
  
!   [38]SH
  
       * Support for SH5 / SH64 has been declared obsolete and will be
         removed in future releases.
       * Support for the FDPIC ABI has been added. It can be enabled using
         the new -mfdpic target option and --enable-fdpic configure option.
  
!   [39]SPARC
  
       * An ABI bug has been fixed in 64-bit mode. Unfortunately, this
         change will break binary compatibility with earlier releases for
*************** New Targets and Target Specific Improvem
*** 7628,7651 ****
         register %d32 in lieu of on the stack as per the SPARC calling
         conventions.
  
! Operating Systems
  
!   AIX
  
       * DWARF debugging support for AIX 7.1 has been enabled as an optional
         debugging format. A more recent Technology Level (TL) and GCC built
         with that level are required for full exploitation of DWARF
         debugging capabilities.
  
!   Linux
  
!      * Support for the [21]musl C library was added for the AArch64, ARM,
         MicroBlaze, MIPS, MIPS64, PowerPC, PowerPC64, SH, i386, x32 and
         x86_64 targets. It can be selected using the new -mmusl option in
         case musl is not the default libc. GCC defaults to musl libc if it
         is built with a target triplet matching the *-linux-musl* pattern.
  
!   RTEMS
  
       * The RTEMS thread model implementation changed. Mutexes now use
         self-contained objects defined in newlib <sys/lock.h> instead of
--- 7945,7968 ----
         register %d32 in lieu of on the stack as per the SPARC calling
         conventions.
  
! [40]Operating Systems
  
!   [41]AIX
  
       * DWARF debugging support for AIX 7.1 has been enabled as an optional
         debugging format. A more recent Technology Level (TL) and GCC built
         with that level are required for full exploitation of DWARF
         debugging capabilities.
  
!   [42]Linux
  
!      * Support for the [43]musl C library was added for the AArch64, ARM,
         MicroBlaze, MIPS, MIPS64, PowerPC, PowerPC64, SH, i386, x32 and
         x86_64 targets. It can be selected using the new -mmusl option in
         case musl is not the default libc. GCC defaults to musl libc if it
         is built with a target triplet matching the *-linux-musl* pattern.
  
!   [44]RTEMS
  
       * The RTEMS thread model implementation changed. Mutexes now use
         self-contained objects defined in newlib <sys/lock.h> instead of
*************** Operating Systems
*** 7659,7665 ****
         thread pools for each scheduler instance via the environment
         variable GOMP_RTEMS_THREAD_POOLS.
  
!   Solaris
  
       * Solaris 12 is now fully supported. Minimal support had already been
         present in GCC 5.3.
--- 7976,7982 ----
         thread pools for each scheduler instance via the environment
         variable GOMP_RTEMS_THREAD_POOLS.
  
!   [45]Solaris
  
       * Solaris 12 is now fully supported. Minimal support had already been
         present in GCC 5.3.
*************** Operating Systems
*** 7671,7677 ****
         linker.
       * libvtv has been ported to Solaris 11 and up.
  
!   Windows
  
       * The option -mstackrealign is now automatically activated in 32-bit
         mode whenever the use of SSE instructions is requested.
--- 7988,7994 ----
         linker.
       * libvtv has been ported to Solaris 11 and up.
  
!   [46]Windows
  
       * The option -mstackrealign is now automatically activated in 32-bit
         mode whenever the use of SSE instructions is requested.
*************** gcc: error: unrecognized command line op
*** 7688,7696 ****
       * The --enable-default-pie configure option enables generation of PIE
         by default.
  
!                                     GCC 6.2
  
!    This is the [22]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 6.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
--- 8005,8013 ----
       * The --enable-default-pie configure option enables generation of PIE
         by default.
  
!                                   [47]GCC 6.2
  
!    This is the [48]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 6.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
*************** Target Specific Changes
*** 7704,7712 ****
       * Support for the SPARC M7 (Niagara 7) processor has been added.
       * Support for the VIS 4.0 instruction set has been added.
  
!                                     GCC 6.3
  
!    This is the [23]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 6.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
--- 8021,8029 ----
       * Support for the SPARC M7 (Niagara 7) processor has been added.
       * Support for the VIS 4.0 instruction set has been added.
  
!                                   [49]GCC 6.3
  
!    This is the [50]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 6.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
*************** Target Specific Changes
*** 7715,7757 ****
  
    IA-32/x86-64
  
!      * Support for the [24]deprecated pcommit instruction has been
         removed.
  
!                                     GCC 6.4
  
!    This is the [25]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 6.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! Operating Systems
  
!   RTEMS
  
       * The ABI changes on ARM so that no short enums are used by default.
  
!                                     GCC 6.5
  
!    This is the [26]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 6.5 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [27]GCC manuals. If that fails, the
!     [28]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [29]gcc@gcc.gnu.org. All of [30]our lists have public
      archives.
  
!    Copyright (C) [31]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [32]maintained by the GCC team. Last modified
!    2023-02-20.
  
  References
  
--- 8032,8074 ----
  
    IA-32/x86-64
  
!      * Support for the [51]deprecated pcommit instruction has been
         removed.
  
!                                   [52]GCC 6.4
  
!    This is the [53]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 6.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [54]Operating Systems
  
!   [55]RTEMS
  
       * The ABI changes on ARM so that no short enums are used by default.
  
!                                   [56]GCC 6.5
  
!    This is the [57]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 6.5 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [58]GCC manuals. If that fails, the
!     [59]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [60]gcc@gcc.gnu.org. All of [61]our lists have public
      archives.
  
!    Copyright (C) [62]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [63]maintained by the GCC team. Last modified
!    2025-01-31.
  
  References
  
*************** References
*** 7760,7792 ****
     3. https://gcc.gnu.org/ml/gcc/2015-08/msg00101.html
     4. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71151
     5. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87822
!    6. https://www.openacc.org/
!    7. https://gcc.gnu.org/wiki/OpenACC
!    8. https://gcc.gnu.org/wiki/Offloading
!    9. https://www.openmp.org/specifications/
!   10. https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-1266
!   11. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4377.pdf
!   12. https://gcc.gnu.org/projects/cxx-status.html#cxx1z
!   13. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/jit/topics/performance.html
!   14. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/jit/topics/functions.html#gcc_jit_block_end_with_switch
!   15. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/jit/topics/contexts.html#gcc_jit_context_set_bool_allow_unreachable_blocks
!   16. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/jit/topics/contexts.html#gcc_jit_context_add_command_line_option
!   17. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/AArch64-Function-Attributes.html#AArch64-Function-Attributes
!   18. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/ARM-Function-Attributes.html#ARM-Function-Attributes
!   19. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/Named-Address-Spaces.html#Named-Address-Spaces
!   20. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/S_002f390-Function-Attributes.html#S_002f390-Function-Attributes
!   21. http://www.musl-libc.org/
!   22. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.2
!   23. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.3
!   24. https://www.intel.com/content/www/us/en/developer/articles/technical/deprecate-pcommit-instruction.html
!   25. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.4
!   26. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.5
!   27. https://gcc.gnu.org/onlinedocs/
!   28. mailto:gcc-help@gcc.gnu.org
!   29. mailto:gcc@gcc.gnu.org
!   30. https://gcc.gnu.org/lists.html
!   31. https://www.fsf.org/
!   32. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-5/index.html
                                GCC 5 Release Series
--- 8077,8140 ----
     3. https://gcc.gnu.org/ml/gcc/2015-08/msg00101.html
     4. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71151
     5. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87822
!    6. https://gcc.gnu.org/gcc-6/changes.html#general
!    7. https://gcc.gnu.org/gcc-6/changes.html#languages
!    8. https://www.openacc.org/
!    9. https://gcc.gnu.org/wiki/OpenACC
!   10. https://gcc.gnu.org/wiki/Offloading
!   11. https://gcc.gnu.org/gcc-6/changes.html#c-family
!   12. https://www.openmp.org/specifications/
!   13. https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-1266
!   14. https://gcc.gnu.org/gcc-6/changes.html#c
!   15. https://gcc.gnu.org/gcc-6/changes.html#cxx
!   16. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4377.pdf
!   17. https://gcc.gnu.org/projects/cxx-status.html#cxx1z
!   18. https://gcc.gnu.org/gcc-6/changes.html#libstdcxx
!   19. https://gcc.gnu.org/gcc-6/changes.html#fortran
!   20. https://gcc.gnu.org/gcc-6/changes.html#jit
!   21. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/jit/topics/performance.html
!   22. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/jit/topics/functions.html#gcc_jit_block_end_with_switch
!   23. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/jit/topics/contexts.html#gcc_jit_context_set_bool_allow_unreachable_blocks
!   24. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/jit/topics/contexts.html#gcc_jit_context_add_command_line_option
!   25. https://gcc.gnu.org/gcc-6/changes.html#targets
!   26. https://gcc.gnu.org/gcc-6/changes.html#aarch64
!   27. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/AArch64-Function-Attributes.html#AArch64-Function-Attributes
!   28. https://gcc.gnu.org/gcc-6/changes.html#arm
!   29. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/ARM-Function-Attributes.html#ARM-Function-Attributes
!   30. https://gcc.gnu.org/gcc-6/changes.html#hsa
!   31. https://gcc.gnu.org/gcc-6/changes.html#x86
!   32. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/Named-Address-Spaces.html#Named-Address-Spaces
!   33. https://gcc.gnu.org/gcc-6/changes.html#mep
!   34. https://gcc.gnu.org/gcc-6/changes.html#msp430
!   35. https://gcc.gnu.org/gcc-6/changes.html#powerpc
!   36. https://gcc.gnu.org/gcc-6/changes.html#s390
!   37. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/S_002f390-Function-Attributes.html#S_002f390-Function-Attributes
!   38. https://gcc.gnu.org/gcc-6/changes.html#sh
!   39. https://gcc.gnu.org/gcc-6/changes.html#sparc
!   40. https://gcc.gnu.org/gcc-6/changes.html#os
!   41. https://gcc.gnu.org/gcc-6/changes.html#aix
!   42. https://gcc.gnu.org/gcc-6/changes.html#linux
!   43. http://www.musl-libc.org/
!   44. https://gcc.gnu.org/gcc-6/changes.html#rtems
!   45. https://gcc.gnu.org/gcc-6/changes.html#solaris
!   46. https://gcc.gnu.org/gcc-6/changes.html#windows
!   47. https://gcc.gnu.org/gcc-6/changes.html#GCC6.2
!   48. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.2
!   49. https://gcc.gnu.org/gcc-6/changes.html#GCC6.3
!   50. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.3
!   51. https://www.intel.com/content/www/us/en/developer/articles/technical/deprecate-pcommit-instruction.html
!   52. https://gcc.gnu.org/gcc-6/changes.html#GCC6.4
!   53. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.4
!   54. https://gcc.gnu.org/gcc-6/changes.html#os64
!   55. https://gcc.gnu.org/gcc-6/changes.html#rtems64
!   56. https://gcc.gnu.org/gcc-6/changes.html#GCC6.5
!   57. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.5
!   58. https://gcc.gnu.org/onlinedocs/
!   59. mailto:gcc-help@gcc.gnu.org
!   60. mailto:gcc@gcc.gnu.org
!   61. https://gcc.gnu.org/lists.html
!   62. https://www.fsf.org/
!   63. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-5/index.html
                                GCC 5 Release Series
*************** References and Acknowledgements
*** 7851,7873 ****
     provided this notice is preserved.
  
     These pages are [23]maintained by the GCC team. Last modified
!    2022-10-26.
  
  References
  
     1. http://www.gnu.org/
     2. https://gcc.gnu.org/gcc-5/changes.html
!    3. http://gcc.gnu.org/onlinedocs/5.5.0/
     4. https://gcc.gnu.org/gcc-5/changes.html
!    5. http://gcc.gnu.org/onlinedocs/5.4.0/
     6. https://gcc.gnu.org/gcc-5/changes.html
!    7. http://gcc.gnu.org/onlinedocs/5.3.0/
     8. https://gcc.gnu.org/gcc-5/changes.html
!    9. http://gcc.gnu.org/onlinedocs/5.2.0/
    10. https://gcc.gnu.org/gcc-5/changes.html
!   11. http://gcc.gnu.org/onlinedocs/5.1.0/
    12. https://gcc.gnu.org/gcc-5/buildstat.html
!   13. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html
    14. https://gcc.gnu.org/index.html
    15. mailto:gcc@gcc.gnu.org
    16. https://gcc.gnu.org/mirrors.html
--- 8199,8221 ----
     provided this notice is preserved.
  
     These pages are [23]maintained by the GCC team. Last modified
!    2024-05-30.
  
  References
  
     1. http://www.gnu.org/
     2. https://gcc.gnu.org/gcc-5/changes.html
!    3. https://gcc.gnu.org/onlinedocs/5.5.0/
     4. https://gcc.gnu.org/gcc-5/changes.html
!    5. https://gcc.gnu.org/onlinedocs/5.4.0/
     6. https://gcc.gnu.org/gcc-5/changes.html
!    7. https://gcc.gnu.org/onlinedocs/5.3.0/
     8. https://gcc.gnu.org/gcc-5/changes.html
!    9. https://gcc.gnu.org/onlinedocs/5.2.0/
    10. https://gcc.gnu.org/gcc-5/changes.html
!   11. https://gcc.gnu.org/onlinedocs/5.1.0/
    12. https://gcc.gnu.org/gcc-5/buildstat.html
!   13. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
    14. https://gcc.gnu.org/index.html
    15. mailto:gcc@gcc.gnu.org
    16. https://gcc.gnu.org/mirrors.html
*************** Caveats
*** 7898,7912 ****
         C++11 traits is_trivially_default_constructible,
         is_trivially_copy_constructible and is_trivially_copy_assignable
         should be used instead.
-      * On AVR, support has been added for the devices
-        ATtiny4/5/9/10/20/40. This requires Binutils 2.25 or newer.
-      * The AVR port uses a new scheme to describe supported devices: For
-        each supported device the compiler provides a device-specific
-        [2]spec file. If the compiler is used together with AVR-LibC, this
-        requires at least GCC 5.2 and a version of AVR-LibC which
-        implements [3]feature #44574.
  
! General Optimizer Improvements
  
       * Inter-procedural optimization improvements:
            + An Identical Code Folding (ICF) pass (controlled via
--- 8246,8253 ----
         C++11 traits is_trivially_default_constructible,
         is_trivially_copy_constructible and is_trivially_copy_assignable
         should be used instead.
  
! [2]General Optimizer Improvements
  
       * Inter-procedural optimization improvements:
            + An Identical Code Folding (ICF) pass (controlled via
*************** General Optimizer Improvements
*** 8030,8038 ****
         bounds to detect pointer bounds violations (overflows). The Pointer
         Bounds Checker is available on x86/x86-64 GNU/Linux targets with a
         new ISA extension Intel MPX support. See the Pointer Bounds Checker
!        [4]Wiki page for more details.
  
! New Languages and Language specific improvements
  
       * [5]OpenMP 4.0 specification offloading features are now supported
         by the C, C++, and Fortran compilers. Generic changes:
--- 8371,8379 ----
         bounds to detect pointer bounds violations (overflows). The Pointer
         Bounds Checker is available on x86/x86-64 GNU/Linux targets with a
         new ISA extension Intel MPX support. See the Pointer Bounds Checker
!        [3]Wiki page for more details.
  
! [4]New Languages and Language specific improvements
  
       * [5]OpenMP 4.0 specification offloading features are now supported
         by the C, C++, and Fortran compilers. Generic changes:
*************** New Languages and Language specific impr
*** 8047,8056 ****
         devices such as GPUs. See [7]the OpenACC wiki page for more
         information.
  
!   C family
  
       * The default setting of the -fdiagnostics-color= command-line option
!        is now [8]configurable when building GCC using configuration option
         --with-diagnostics-color=. The possible values are: never, always,
         auto and auto-if-env. The new default auto uses color only when the
         standard error is a terminal. The default in GCC 4.9 was
--- 8388,8397 ----
         devices such as GPUs. See [7]the OpenACC wiki page for more
         information.
  
!   [8]C family
  
       * The default setting of the -fdiagnostics-color= command-line option
!        is now [9]configurable when building GCC using configuration option
         --with-diagnostics-color=. The possible values are: never, always,
         auto and auto-if-env. The new default auto uses color only when the
         standard error is a terminal. The default in GCC 4.9 was
*************** New Languages and Language specific impr
*** 8103,8109 ****
       * A new built-in function-like macro to determine the existence of an
         attribute, __has_attribute, has been added. The equivalent built-in
         macro __has_cpp_attribute was added to C++ to support
!        [9]Feature-testing recommendations for C++. The macro
         __has_attribute is added to all C-like languages as an extension:
  
  int
--- 8444,8450 ----
       * A new built-in function-like macro to determine the existence of an
         attribute, __has_attribute, has been added. The equivalent built-in
         macro __has_cpp_attribute was added to C++ to support
!        [10]Feature-testing recommendations for C++. The macro
         __has_attribute is added to all C-like languages as an extension:
  
  int
*************** calloc (size_t x, size_t y)
*** 8151,8157 ****
         C++, and for C99 and later C versions. Various bugs in the
         implementation of extended identifiers have been fixed.
  
!   C
  
       * The default mode has been changed to -std=gnu11.
       * A new command-line option -Wc90-c99-compat has been added to warn
--- 8492,8498 ----
         C++, and for C99 and later C versions. Various bugs in the
         implementation of extended identifiers have been fixed.
  
!   [11]C
  
       * The default mode has been changed to -std=gnu11.
       * A new command-line option -Wc90-c99-compat has been added to warn
*************** calloc (size_t x, size_t y)
*** 8175,8200 ****
       * The -pg command-line option now only affects the current file in an
         LTO build.
  
!   C++
  
!      * G++ now supports [10]C++14 variable templates.
       * -Wnon-virtual-dtor doesn't warn anymore for final classes.
       * Excessive template instantiation depth is now a fatal error. This
         prevents excessive diagnostics that usually do not help to identify
         the problem.
       * G++ and libstdc++ now implement the feature-testing macros from
!        [11]Feature-testing recommendations for C++.
       * G++ now allows typename in a template template parameter.
  
  template<template<typename> typename X> struct D; // OK
  
!      * G++ now supports [12]C++14 aggregates with non-static data member
         initializers.
  
  struct A { int i, j = i; };
  A a = { 42 }; // a.j is also 42
  
!      * G++ now supports [13]C++14 extended constexpr.
  
  constexpr int f (int i)
  {
--- 8516,8541 ----
       * The -pg command-line option now only affects the current file in an
         LTO build.
  
!   [12]C++
  
!      * G++ now supports [13]C++14 variable templates.
       * -Wnon-virtual-dtor doesn't warn anymore for final classes.
       * Excessive template instantiation depth is now a fatal error. This
         prevents excessive diagnostics that usually do not help to identify
         the problem.
       * G++ and libstdc++ now implement the feature-testing macros from
!        [14]Feature-testing recommendations for C++.
       * G++ now allows typename in a template template parameter.
  
  template<template<typename> typename X> struct D; // OK
  
!      * G++ now supports [15]C++14 aggregates with non-static data member
         initializers.
  
  struct A { int i, j = i; };
  A a = { 42 }; // a.j is also 42
  
!      * G++ now supports [16]C++14 extended constexpr.
  
  constexpr int f (int i)
  {
*************** constexpr int f (int i)
*** 8206,8212 ****
  
  constexpr int i = f(42); // i is 42
  
!      * G++ now supports the [14]C++14 sized deallocation functions.
  
  void operator delete (void *, std::size_t) noexcept;
  void operator delete[] (void *, std::size_t) noexcept;
--- 8547,8553 ----
  
  constexpr int i = f(42); // i is 42
  
!      * G++ now supports the [17]C++14 sized deallocation functions.
  
  void operator delete (void *, std::size_t) noexcept;
  void operator delete[] (void *, std::size_t) noexcept;
*************** void operator delete[] (void *, std::siz
*** 8219,8225 ****
         namespaces) to improve code generation. These warnings can be used
         at compile time, but they are more useful in combination with
         link-time optimization.
!      * G++ no longer supports [15]N3639 variable length arrays, as they
         were removed from the C++14 working paper prior to ratification.
         GNU VLAs are still supported, so VLA support is now the same in
         C++14 mode as in C++98 and C++11 modes.
--- 8560,8566 ----
         namespaces) to improve code generation. These warnings can be used
         at compile time, but they are more useful in combination with
         link-time optimization.
!      * G++ no longer supports [18]N3639 variable length arrays, as they
         were removed from the C++14 working paper prior to ratification.
         GNU VLAs are still supported, so VLA support is now the same in
         C++14 mode as in C++98 and C++11 modes.
*************** void operator delete[] (void *, std::siz
*** 8236,8244 ****
         member with type std::nullptr_t which changes position due to this
         change.
  
!     Runtime Library (libstdc++)
  
!      * A [16]Dual ABI is provided by the library. A new ABI is enabled by
         default. The old ABI is still supported and can be used by defining
         the macro _GLIBCXX_USE_CXX11_ABI to 0 before including any C++
         standard library headers.
--- 8577,8585 ----
         member with type std::nullptr_t which changes position due to this
         change.
  
!     [19]Runtime Library (libstdc++)
  
!      * A [20]Dual ABI is provided by the library. A new ABI is enabled by
         default. The old ABI is still supported and can be used by defining
         the macro _GLIBCXX_USE_CXX11_ABI to 0 before including any C++
         standard library headers.
*************** void operator delete[] (void *, std::siz
*** 8247,8253 ****
         counting.
       * A new implementation of std::list is enabled by default, with an
         O(1) size() function;
!      * [17]Full support for C++11, including the following new features:
            + std::deque and std::vector<bool> meet the allocator-aware
              container requirements;
            + movable and swappable iostream classes;
--- 8588,8594 ----
         counting.
       * A new implementation of std::list is enabled by default, with an
         O(1) size() function;
!      * [21]Full support for C++11, including the following new features:
            + std::deque and std::vector<bool> meet the allocator-aware
              container requirements;
            + movable and swappable iostream classes;
*************** void operator delete[] (void *, std::siz
*** 8270,8283 ****
         prevent the use of hexadecimal notation for floating point types
         use str.unsetf(std::ios_base::floatfield) to clear the relevant
         bits in str.flags().
!      * [18]Full experimental support for C++14, including the following
         new features:
            + std::is_final type trait;
            + heterogeneous comparison lookup in associative containers.
            + global functions cbegin, cend, rbegin, rend, crbegin, and
              crend for range access to containers, arrays and initializer
              lists.
!      * [19]Improved experimental support for the Library Fundamentals TS,
         including:
            + class std::experimental::any;
            + function template std::experimental::apply;
--- 8611,8624 ----
         prevent the use of hexadecimal notation for floating point types
         use str.unsetf(std::ios_base::floatfield) to clear the relevant
         bits in str.flags().
!      * [22]Full experimental support for C++14, including the following
         new features:
            + std::is_final type trait;
            + heterogeneous comparison lookup in associative containers.
            + global functions cbegin, cend, rbegin, rend, crbegin, and
              crend for range access to containers, arrays and initializer
              lists.
!      * [23]Improved experimental support for the Library Fundamentals TS,
         including:
            + class std::experimental::any;
            + function template std::experimental::apply;
*************** void operator delete[] (void *, std::siz
*** 8288,8300 ****
            + function template std::experimental::not_fn.
       * New random number distributions logistic_distribution and
         uniform_on_sphere_distribution as extensions.
!      * [20]GDB Xmethods for containers and std::unique_ptr.
  
!   Fortran
  
       * Compatibility notice:
            + The version of the module files (.mod) has been incremented.
!           + For free-form source files [21]-Werror=line-truncation is now
              enabled by default. Note that comments exceeding the line
              length are not diagnosed. (For fixed-form source code, the
              same warning is available but turned off by default, such that
--- 8629,8641 ----
            + function template std::experimental::not_fn.
       * New random number distributions logistic_distribution and
         uniform_on_sphere_distribution as extensions.
!      * [24]GDB Xmethods for containers and std::unique_ptr.
  
!   [25]Fortran
  
       * Compatibility notice:
            + The version of the module files (.mod) has been incremented.
!           + For free-form source files [26]-Werror=line-truncation is now
              enabled by default. Note that comments exceeding the line
              length are not diagnosed. (For fixed-form source code, the
              same warning is available but turned off by default, such that
*************** void operator delete[] (void *, std::siz
*** 8308,8316 ****
              by -Wall, -pedantic and the f95, f2003, f2008 and f2008ts
              options of -std=.
       * Incomplete support for colorizing diagnostics emitted by gfortran
!        has been added. The option [22]-fdiagnostics-color controls when
         color is used in diagnostics. The default value of this option can
!        be [23]configured when building GCC. The GCC_COLORS environment
         variable can be used to customize the colors or disable coloring
         completely. Sample diagnostics output:
        $ gfortran -fdiagnostics-color=always -Wuse-without-only test.f90
--- 8649,8657 ----
              by -Wall, -pedantic and the f95, f2003, f2008 and f2008ts
              options of -std=.
       * Incomplete support for colorizing diagnostics emitted by gfortran
!        has been added. The option [27]-fdiagnostics-color controls when
         color is used in diagnostics. The default value of this option can
!        be [28]configured when building GCC. The GCC_COLORS environment
         variable can be used to customize the colors or disable coloring
         completely. Sample diagnostics output:
        $ gfortran -fdiagnostics-color=always -Wuse-without-only test.f90
*************** void operator delete[] (void *, std::siz
*** 8330,8347 ****
         public entities of the used module.
       * Formatted READ and WRITE statements now work correctly in
         locale-aware programs. For more information and potential caveats,
!        see [24]Section 5.3 Thread-safety of the runtime library in the
         manual.
!      * [25]Fortran 2003:
            + The intrinsic IEEE modules (IEEE_FEATURES, IEEE_EXCEPTIONS and
              IEEE_ARITHMETIC) are now supported.
!      * [26]Fortran 2008:
!           + [27]Coarrays: Full experimental support of Fortran 2008's
              coarrays with -fcoarray=lib except for allocatable/pointer
              components of derived-type coarrays. GCC currently only ships
              with a single-image library (libcaf_single), but multi-image
              support based on MPI and GASNet is provided by the libraries
!             of the [28]OpenCoarrays project.
       * TS18508 Additional Parallel Features in Fortran:
            + Support for the collective intrinsic subroutines CO_MAX,
              CO_MIN, CO_SUM, CO_BROADCAST and CO_REDUCE has been added,
--- 8671,8688 ----
         public entities of the used module.
       * Formatted READ and WRITE statements now work correctly in
         locale-aware programs. For more information and potential caveats,
!        see [29]Section 5.3 Thread-safety of the runtime library in the
         manual.
!      * [30]Fortran 2003:
            + The intrinsic IEEE modules (IEEE_FEATURES, IEEE_EXCEPTIONS and
              IEEE_ARITHMETIC) are now supported.
!      * [31]Fortran 2008:
!           + [32]Coarrays: Full experimental support of Fortran 2008's
              coarrays with -fcoarray=lib except for allocatable/pointer
              components of derived-type coarrays. GCC currently only ships
              with a single-image library (libcaf_single), but multi-image
              support based on MPI and GASNet is provided by the libraries
!             of the [33]OpenCoarrays project.
       * TS18508 Additional Parallel Features in Fortran:
            + Support for the collective intrinsic subroutines CO_MAX,
              CO_MIN, CO_SUM, CO_BROADCAST and CO_REDUCE has been added,
*************** void operator delete[] (void *, std::siz
*** 8352,8394 ****
            + Support for IMPLICIT NONE (external, type).
            + ERROR STOP is now permitted in pure procedures.
  
!   Go
  
       * GCC 5 provides a complete implementation of the Go 1.4.2 release.
       * Building GCC 5 with Go enabled will install two new programs:
!        [29]go and [30]gofmt.
  
! libgccjit
  
     New in GCC 5 is the ability to build GCC as a shared library for
     embedding in other processes (such as interpreters), suitable for
     Just-In-Time compilation to machine code.
  
!    The shared library has a [31]C API and a [32]C++ wrapper API providing
     some "syntactic sugar". There are also bindings available from 3rd
!    parties for [33]Python and for [34]D.
  
!    For example, this library can be used by interpreters for [35]compiling
     functions from bytecode to machine code.
  
     The library can also be used for ahead-of-time compilation, enabling
     GCC to be plugged into a pre-existing front end. An example of using
     this to build a compiler for an esoteric language we'll refer to as
!    "brainf" can be seen [36]here.
  
     libgccjit is licensed under the GPLv3 (or at your option, any later
     version)
  
     It should be regarded as experimental at this time.
  
! New Targets and Target Specific Improvements
  
!   Reporting stack usage
  
       * The BFIN, FT32, H8300, IQ2000 and M32C targets now support the
         -fstack-usage option.
  
!   AArch64
  
       * Code generation for the ARM Cortex-A57 processor has been improved.
         A more accurate instruction scheduling model for the processor is
--- 8693,8735 ----
            + Support for IMPLICIT NONE (external, type).
            + ERROR STOP is now permitted in pure procedures.
  
!   [34]Go
  
       * GCC 5 provides a complete implementation of the Go 1.4.2 release.
       * Building GCC 5 with Go enabled will install two new programs:
!        [35]go and [36]gofmt.
  
! [37]libgccjit
  
     New in GCC 5 is the ability to build GCC as a shared library for
     embedding in other processes (such as interpreters), suitable for
     Just-In-Time compilation to machine code.
  
!    The shared library has a [38]C API and a [39]C++ wrapper API providing
     some "syntactic sugar". There are also bindings available from 3rd
!    parties for [40]Python and for [41]D.
  
!    For example, this library can be used by interpreters for [42]compiling
     functions from bytecode to machine code.
  
     The library can also be used for ahead-of-time compilation, enabling
     GCC to be plugged into a pre-existing front end. An example of using
     this to build a compiler for an esoteric language we'll refer to as
!    "brainf" can be seen [43]here.
  
     libgccjit is licensed under the GPLv3 (or at your option, any later
     version)
  
     It should be regarded as experimental at this time.
  
! [44]New Targets and Target Specific Improvements
  
!   [45]Reporting stack usage
  
       * The BFIN, FT32, H8300, IQ2000 and M32C targets now support the
         -fstack-usage option.
  
!   [46]AArch64
  
       * Code generation for the ARM Cortex-A57 processor has been improved.
         A more accurate instruction scheduling model for the processor is
*************** New Targets and Target Specific Improvem
*** 8416,8422 ****
       * The transitional options -mlra and -mno-lra have been removed. The
         AArch64 back end now uses the local register allocator (LRA) only.
  
!   ARM
  
       * Thumb-1 assembly code is now generated in unified syntax. The new
         option -masm-syntax-unified specifies whether inline assembly code
--- 8757,8763 ----
       * The transitional options -mlra and -mno-lra have been removed. The
         AArch64 back end now uses the local register allocator (LRA) only.
  
!   [47]ARM
  
       * Thumb-1 assembly code is now generated in unified syntax. The new
         option -masm-syntax-unified specifies whether inline assembly code
*************** New Targets and Target Specific Improvem
*** 8449,8460 ****
       * The transitional options -mlra and -mno-lra have been removed. The
         ARM back end now uses the local register allocator (LRA) only.
  
!   AVR
  
!      * The compiler no more supports individual devices like ATmega8.
!        Specifying, say, -mmcu=atmega8 triggers the usage of the
!        device-specific [37]spec file specs-atmega8 which is part of the
!        installation and describes options for the sub-processes like
         compiler proper, assembler and linker. You can add support for a
         new device -mmcu=mydevice as follows:
           1. In an empty directory /someplace, create a new directory
--- 8790,8808 ----
       * The transitional options -mlra and -mno-lra have been removed. The
         ARM back end now uses the local register allocator (LRA) only.
  
!   [48]AVR
  
!      * Support has been added for the devices ATtiny4/5/9/10/20/40. This
!        requires Binutils 2.25 or newer.
!      * The port uses a new scheme to describe supported devices: For each
!        supported device, the compiler provides a device-specific [49]spec
!        file. If the compiler is used together with AVR-LibC, this requires
!        at least GCC 5.2 and a version of AVR-LibC which implements
!        [50]feature #44574.
!        As a consequence, the compiler no more supports individual devices
!        like ATmega8. Specifying, say, -mmcu=atmega8 triggers the usage of
!        the device-specific [51]spec file specs-atmega8 which is part of
!        the installation and describes options for the sub-processes like
         compiler proper, assembler and linker. You can add support for a
         new device -mmcu=mydevice as follows:
           1. In an empty directory /someplace, create a new directory
*************** New Targets and Target Specific Improvem
*** 8483,8498 ****
          -mn-flash=size
                  Specify the flash size of the device in units of 64 KiB,
                  rounded up to the next integer as needed. This option
!                 affects the availability of the [38]AVR address-spaces.
  
          -mskip-bug
                  Set if the device is affected by the respective silicon
                  bug.
  
!        In general, you don't need to set these options by hand. The new
!        device-specific spec file will set them as needed.
  
!   IA-32/x86-64
  
       * New ISA extensions support AVX-512{BW,DQ,VL,IFMA,VBMI} of Intel's
         CPU codenamed Skylake Server was added to GCC. That includes inline
--- 8831,8847 ----
          -mn-flash=size
                  Specify the flash size of the device in units of 64 KiB,
                  rounded up to the next integer as needed. This option
!                 affects the availability of the [52]AVR address-spaces.
  
          -mskip-bug
                  Set if the device is affected by the respective silicon
                  bug.
  
!        These options are used internally in order to communicate between
!        the compiler and the device-spces file. They are set in the
!        device-specs file as needed. Don't set them by hand.
  
!   [53]IA-32/x86-64
  
       * New ISA extensions support AVX-512{BW,DQ,VL,IFMA,VBMI} of Intel's
         CPU codenamed Skylake Server was added to GCC. That includes inline
*************** New Targets and Target Specific Improvem
*** 8524,8530 ****
         when SSE is disabled and there are no variable arguments passed in
         vector registers. This can be used to optimize the Linux kernel.
  
!   MIPS
  
       * MIPS Releases 3 and 5 are now directly supported. Use the
         command-line options -mips32r3, -mips64r3, -mips32r5 and -mips64r5
--- 8873,8879 ----
         when SSE is disabled and there are no variable arguments passed in
         vector registers. This can be used to optimize the Linux kernel.
  
!   [54]MIPS
  
       * MIPS Releases 3 and 5 are now directly supported. Use the
         command-line options -mips32r3, -mips64r3, -mips32r5 and -mips64r5
*************** New Targets and Target Specific Improvem
*** 8575,8581 ****
         .set directive to override the global assembler options when
         compiling for soft-float targets.
  
!   NDS32
  
       * The variadic function ABI implementation is now compatible with
         past Andes toolchains where the caller uses registers to pass
--- 8924,8930 ----
         .set directive to override the global assembler options when
         compiling for soft-float targets.
  
!   [55]NDS32
  
       * The variadic function ABI implementation is now compatible with
         past Andes toolchains where the caller uses registers to pass
*************** New Targets and Target Specific Improvem
*** 8587,8593 ****
         models on code generation. The -mgp-direct option became
         meaningless and can be discarded.
  
!   RX
  
       * A new command line option -mno-allow-string-insns can be used to
         disable the generation of the SCMPU, SMOVU, SMOVB, SMOVF, SUNTIL,
--- 8936,8942 ----
         models on code generation. The -mgp-direct option became
         meaningless and can be discarded.
  
!   [56]RX
  
       * A new command line option -mno-allow-string-insns can be used to
         disable the generation of the SCMPU, SMOVU, SMOVB, SMOVF, SUNTIL,
*************** New Targets and Target Specific Improvem
*** 8597,8603 ****
         programmer is concerned that the I/O space might be accessed. The
         default is still to enable these instructions.
  
!   SH
  
       * The compiler will now pass the appropriate --isa= option to the
         assembler.
--- 8946,8952 ----
         programmer is concerned that the I/O space might be accessed. The
         default is still to enable these instructions.
  
!   [57]SH
  
       * The compiler will now pass the appropriate --isa= option to the
         assembler.
*************** New Targets and Target Specific Improvem
*** 8630,8653 ****
         in the original SH7055) by specifying the new option
         -mcbranch-force-delay-slot.
  
! Operating Systems
  
!   AIX
  
       * GCC now supports stabs debugging continuation lines to allow long
         stabs debug information without overflow that generates AIX linker
         errors.
  
!   DragonFly BSD
  
       * GCC now supports the DragonFly BSD operating system.
  
!   FreeBSD
  
       * GCC now supports the FreeBSD operating system for the arm port
         through the arm*-*-freebsd* target triplets.
  
!   VxWorks MILS
  
       * GCC now supports the MILS (Multiple Independent Levels of Security)
         variant of WindRiver's VxWorks operating system for PowerPC
--- 8979,9002 ----
         in the original SH7055) by specifying the new option
         -mcbranch-force-delay-slot.
  
! [58]Operating Systems
  
!   [59]AIX
  
       * GCC now supports stabs debugging continuation lines to allow long
         stabs debug information without overflow that generates AIX linker
         errors.
  
!   [60]DragonFly BSD
  
       * GCC now supports the DragonFly BSD operating system.
  
!   [61]FreeBSD
  
       * GCC now supports the FreeBSD operating system for the arm port
         through the arm*-*-freebsd* target triplets.
  
!   [62]VxWorks MILS
  
       * GCC now supports the MILS (Multiple Independent Levels of Security)
         variant of WindRiver's VxWorks operating system for PowerPC
*************** Other significant improvements
*** 8662,8670 ****
         automatically generates a developer-friendly reproducer whenever an
         internal compiler error is encountered.
  
!                                     GCC 5.2
  
!    This is the [39]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 5.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
--- 9011,9019 ----
         automatically generates a developer-friendly reproducer whenever an
         internal compiler error is encountered.
  
!                                   [63]GCC 5.2
  
!    This is the [64]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 5.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
*************** Target Specific Changes
*** 8703,8711 ****
         make use of these builtins the vecintrin.h header file needs to be
         included.
  
!                                     GCC 5.3
  
!    This is the [40]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 5.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
--- 9052,9060 ----
         make use of these builtins the vecintrin.h header file needs to be
         included.
  
!                                   [65]GCC 5.3
  
!    This is the [66]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 5.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
*************** Target Specific Changes
*** 8725,8740 ****
         the GO runtime environment. GCC 5.3 has proven to be able to
         compile larger GO applications on IBM z Systems.
  
!                                     GCC 5.4
  
!    This is the [41]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 5.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
!                                     GCC 5.5
  
!    This is the [42]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 5.5 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
--- 9074,9089 ----
         the GO runtime environment. GCC 5.3 has proven to be able to
         compile larger GO applications on IBM z Systems.
  
!                                   [67]GCC 5.4
  
!    This is the [68]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 5.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
!                                   [69]GCC 5.5
  
!    This is the [70]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 5.5 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
*************** Target Specific Changes
*** 8743,8817 ****
  
    IA-32/x86-64
  
!      * Support for the [43]deprecated pcommit instruction has been
         removed.
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [44]GCC manuals. If that fails, the
!     [45]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [46]gcc@gcc.gnu.org. All of [47]our lists have public
      archives.
  
!    Copyright (C) [48]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [49]maintained by the GCC team. Last modified
!    2023-09-02.
  
  References
  
     1. https://gcc.gnu.org/gcc-5/changes.html#libstdcxx
!    2. https://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html
!    3. https://savannah.nongnu.org/bugs/?44574
!    4. https://gcc.gnu.org/wiki/Intel MPX support in the GCC compiler
     5. https://www.openmp.org/wp-content/uploads/OpenMP4.0.0.pdf
     6. https://www.openmp.org/wp-content/uploads/OpenMP4.0.0.Examples.pdf
     7. https://gcc.gnu.org/wiki/OpenACC
!    8. https://gcc.gnu.org/install/configure.html
!    9. https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations
!   10. https://gcc.gnu.org/projects/cxx1y.html
!   11. https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations
!   12. https://gcc.gnu.org/projects/cxx1y.html
    13. https://gcc.gnu.org/projects/cxx1y.html
!   14. https://gcc.gnu.org/projects/cxx1y.html
!   15. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3639.html
!   16. https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html
!   17. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/libstdc++/manual/manual/status.html#status.iso.2011
!   18. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/libstdc++/manual/manual/status.html#status.iso.2014
!   19. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/libstdc++/manual/manual/status.html#status.iso.2014
!   20. https://sourceware.org/gdb/current/onlinedocs/gdb#Xmethods-In-Python
!   21. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gfortran/Error-and-Warning-Options.html
!   22. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gcc/Language-Independent-Options.html
!   23. https://gcc.gnu.org/install/configure.html
!   24. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gfortran/Thread-safety-of-the-runtime-library.html
!   25. https://gcc.gnu.org/wiki/Fortran2003Status
!   26. https://gcc.gnu.org/wiki/Fortran2008Status
!   27. https://gcc.gnu.org/wiki/Coarray
!   28. http://www.opencoarrays.org/
!   29. https://pkg.go.dev/cmd/go
!   30. https://pkg.go.dev/cmd/gofmt
!   31. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/jit/intro/index.html
!   32. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/jit/cp/index.html
!   33. https://github.com/davidmalcolm/pygccjit
!   34. https://github.com/ibuclaw/gccjitd
!   35. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/jit/intro/tutorial04.html
!   36. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/jit/intro/tutorial05.html
!   37. https://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html
!   38. https://gcc.gnu.org/onlinedocs/gcc/Named-Address-Spaces.html
!   39. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.2
!   40. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.3
!   41. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.4
!   42. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.5
!   43. https://www.intel.com/content/www/us/en/developer/articles/technical/deprecate-pcommit-instruction.html
!   44. https://gcc.gnu.org/onlinedocs/
!   45. mailto:gcc-help@gcc.gnu.org
!   46. mailto:gcc@gcc.gnu.org
!   47. https://gcc.gnu.org/lists.html
!   48. https://www.fsf.org/
!   49. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-4.9/index.html
                               GCC 4.9 Release Series
--- 9092,9194 ----
  
    IA-32/x86-64
  
!      * Support for the [71]deprecated pcommit instruction has been
         removed.
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [72]GCC manuals. If that fails, the
!     [73]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [74]gcc@gcc.gnu.org. All of [75]our lists have public
      archives.
  
!    Copyright (C) [76]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [77]maintained by the GCC team. Last modified
!    2025-02-28.
  
  References
  
     1. https://gcc.gnu.org/gcc-5/changes.html#libstdcxx
!    2. https://gcc.gnu.org/gcc-5/changes.html#general
!    3. https://gcc.gnu.org/wiki/Intel MPX support in the GCC compiler
!    4. https://gcc.gnu.org/gcc-5/changes.html#languages
     5. https://www.openmp.org/wp-content/uploads/OpenMP4.0.0.pdf
     6. https://www.openmp.org/wp-content/uploads/OpenMP4.0.0.Examples.pdf
     7. https://gcc.gnu.org/wiki/OpenACC
!    8. https://gcc.gnu.org/gcc-5/changes.html#c-family
!    9. https://gcc.gnu.org/install/configure.html
!   10. https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations
!   11. https://gcc.gnu.org/gcc-5/changes.html#c
!   12. https://gcc.gnu.org/gcc-5/changes.html#cxx
    13. https://gcc.gnu.org/projects/cxx1y.html
!   14. https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations
!   15. https://gcc.gnu.org/projects/cxx1y.html
!   16. https://gcc.gnu.org/projects/cxx1y.html
!   17. https://gcc.gnu.org/projects/cxx1y.html
!   18. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3639.html
!   19. https://gcc.gnu.org/gcc-5/changes.html#libstdcxx
!   20. https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html
!   21. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/libstdc++/manual/manual/status.html#status.iso.2011
!   22. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/libstdc++/manual/manual/status.html#status.iso.2014
!   23. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/libstdc++/manual/manual/status.html#status.iso.2014
!   24. https://sourceware.org/gdb/current/onlinedocs/gdb#Xmethods-In-Python
!   25. https://gcc.gnu.org/gcc-5/changes.html#fortran
!   26. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gfortran/Error-and-Warning-Options.html
!   27. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gcc/Language-Independent-Options.html
!   28. https://gcc.gnu.org/install/configure.html
!   29. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gfortran/Thread-safety-of-the-runtime-library.html
!   30. https://gcc.gnu.org/wiki/Fortran2003Status
!   31. https://gcc.gnu.org/wiki/Fortran2008Status
!   32. https://gcc.gnu.org/wiki/Coarray
!   33. http://www.opencoarrays.org/
!   34. https://gcc.gnu.org/gcc-5/changes.html#go
!   35. https://pkg.go.dev/cmd/go
!   36. https://pkg.go.dev/cmd/gofmt
!   37. https://gcc.gnu.org/gcc-5/changes.html#jit
!   38. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/jit/intro/index.html
!   39. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/jit/cp/index.html
!   40. https://github.com/davidmalcolm/pygccjit
!   41. https://github.com/ibuclaw/gccjitd
!   42. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/jit/intro/tutorial04.html
!   43. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/jit/intro/tutorial05.html
!   44. https://gcc.gnu.org/gcc-5/changes.html#targets
!   45. https://gcc.gnu.org/gcc-5/changes.html#stack-usage
!   46. https://gcc.gnu.org/gcc-5/changes.html#aarch64
!   47. https://gcc.gnu.org/gcc-5/changes.html#arm
!   48. https://gcc.gnu.org/gcc-5/changes.html#avr
!   49. https://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html
!   50. https://savannah.nongnu.org/bugs/?44574
!   51. https://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html
!   52. https://gcc.gnu.org/onlinedocs/gcc/Named-Address-Spaces.html
!   53. https://gcc.gnu.org/gcc-5/changes.html#x86
!   54. https://gcc.gnu.org/gcc-5/changes.html#mips
!   55. https://gcc.gnu.org/gcc-5/changes.html#nds32
!   56. https://gcc.gnu.org/gcc-5/changes.html#rx
!   57. https://gcc.gnu.org/gcc-5/changes.html#sh
!   58. https://gcc.gnu.org/gcc-5/changes.html#os
!   59. https://gcc.gnu.org/gcc-5/changes.html#aix
!   60. https://gcc.gnu.org/gcc-5/changes.html#dragonfly
!   61. https://gcc.gnu.org/gcc-5/changes.html#freebsd
!   62. https://gcc.gnu.org/gcc-5/changes.html#vxmils
!   63. https://gcc.gnu.org/gcc-5/changes.html#GCC5.2
!   64. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.2
!   65. https://gcc.gnu.org/gcc-5/changes.html#GCC5.3
!   66. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.3
!   67. https://gcc.gnu.org/gcc-5/changes.html#GCC5.4
!   68. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.4
!   69. https://gcc.gnu.org/gcc-5/changes.html#GCC5.5
!   70. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.5
!   71. https://www.intel.com/content/www/us/en/developer/articles/technical/deprecate-pcommit-instruction.html
!   72. https://gcc.gnu.org/onlinedocs/
!   73. mailto:gcc-help@gcc.gnu.org
!   74. mailto:gcc@gcc.gnu.org
!   75. https://gcc.gnu.org/lists.html
!   76. https://www.fsf.org/
!   77. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-4.9/index.html
                               GCC 4.9 Release Series
*************** References and Acknowledgements
*** 8876,8894 ****
     provided this notice is preserved.
  
     These pages are [23]maintained by the GCC team. Last modified
!    2022-10-26.
  
  References
  
     1. http://www.gnu.org/
     2. https://gcc.gnu.org/gcc-4.9/changes.html
!    3. http://gcc.gnu.org/onlinedocs/4.9.4/
     4. https://gcc.gnu.org/gcc-4.9/changes.html
!    5. http://gcc.gnu.org/onlinedocs/4.9.3/
     6. https://gcc.gnu.org/gcc-4.9/changes.html
!    7. http://gcc.gnu.org/onlinedocs/4.9.2/
     8. https://gcc.gnu.org/gcc-4.9/changes.html
!    9. http://gcc.gnu.org/onlinedocs/4.9.1/
    10. https://gcc.gnu.org/gcc-4.9/changes.html
    11. https://gcc.gnu.org/onlinedocs/4.9.0/
    12. https://gcc.gnu.org/gcc-4.9/buildstat.html
--- 9253,9271 ----
     provided this notice is preserved.
  
     These pages are [23]maintained by the GCC team. Last modified
!    2024-05-30.
  
  References
  
     1. http://www.gnu.org/
     2. https://gcc.gnu.org/gcc-4.9/changes.html
!    3. https://gcc.gnu.org/onlinedocs/4.9.4/
     4. https://gcc.gnu.org/gcc-4.9/changes.html
!    5. https://gcc.gnu.org/onlinedocs/4.9.3/
     6. https://gcc.gnu.org/gcc-4.9/changes.html
!    7. https://gcc.gnu.org/onlinedocs/4.9.2/
     8. https://gcc.gnu.org/gcc-4.9/changes.html
!    9. https://gcc.gnu.org/onlinedocs/4.9.1/
    10. https://gcc.gnu.org/gcc-4.9/changes.html
    11. https://gcc.gnu.org/onlinedocs/4.9.0/
    12. https://gcc.gnu.org/gcc-4.9/buildstat.html
*************** General Optimizer Improvements
*** 8988,9000 ****
              handle cross-module calls when link-time optimization is
              enabled.
  
! New Languages and Language specific improvements
  
!      * Version 4.0 of the [4]OpenMP specification is now supported in the
         C and C++ compilers and starting with the 4.9.1 release also in the
         Fortran compiler. The new -fopenmp-simd option can be used to
         enable OpenMP's SIMD directives while ignoring other OpenMP
!        directives. The new [5]-fsimd-cost-model= option permits to tune
         the vectorization cost model for loops annotated with OpenMP and
         Cilk Plus simd directives. -Wopenmp-simd warns when the current
         cost model overrides simd directives set by the user.
--- 9365,9377 ----
              handle cross-module calls when link-time optimization is
              enabled.
  
! [4]New Languages and Language specific improvements
  
!      * Version 4.0 of the [5]OpenMP specification is now supported in the
         C and C++ compilers and starting with the 4.9.1 release also in the
         Fortran compiler. The new -fopenmp-simd option can be used to
         enable OpenMP's SIMD directives while ignoring other OpenMP
!        directives. The new [6]-fsimd-cost-model= option permits to tune
         the vectorization cost model for loops annotated with OpenMP and
         Cilk Plus simd directives. -Wopenmp-simd warns when the current
         cost model overrides simd directives set by the user.
*************** New Languages and Language specific impr
*** 9003,9016 ****
         macros are used. Those macros might prevent bit-wise-identical
         reproducible compilations.
  
!   Ada
  
       * GNAT switched to Ada 2012 instead of Ada 2005 by default.
  
!   C family
  
       * Support for colorizing diagnostics emitted by GCC has been added.
!        The [6]-fdiagnostics-color=auto will enable it when outputting to
         terminals, -fdiagnostics-color=always unconditionally. The
         GCC_COLORS environment variable can be used to customize the colors
         or disable coloring. If GCC_COLORS variable is present in the
--- 9380,9393 ----
         macros are used. Those macros might prevent bit-wise-identical
         reproducible compilations.
  
!   [7]Ada
  
       * GNAT switched to Ada 2012 instead of Ada 2005 by default.
  
!   [8]C family
  
       * Support for colorizing diagnostics emitted by GCC has been added.
!        The [9]-fdiagnostics-color=auto will enable it when outputting to
         terminals, -fdiagnostics-color=always unconditionally. The
         GCC_COLORS environment variable can be used to customize the colors
         or disable coloring. If GCC_COLORS variable is present in the
*************** late struct X<1000>;
*** 9034,9040 ****
  
      test.C:2:46: error: incomplete type ‘X<100>’ used in nested name specifier
  
!      * With the new [7]#pragma GCC ivdep, the user can assert that there
         are no loop-carried dependencies which would prevent concurrent
         execution of consecutive iterations using SIMD (single instruction
         multiple data) instructions.
--- 9411,9417 ----
  
      test.C:2:46: error: incomplete type ‘X<100>’ used in nested name specifier
  
!      * With the new [10]#pragma GCC ivdep, the user can assert that there
         are no loop-carried dependencies which would prevent concurrent
         execution of consecutive iterations using SIMD (single instruction
         multiple data) instructions.
*************** late struct X<1000>;
*** 9061,9071 ****
       * A new C extension __auto_type provides a subset of the
         functionality of C++11 auto in GNU C.
  
!   C++
  
!      * The G++ implementation of [8]C++1y return type deduction for normal
!        functions has been updated to conform to [9]N3638, the proposal
!        accepted into the working paper. Most notably, it adds
         decltype(auto) for getting decltype semantics rather than the
         template argument deduction semantics of plain auto:
  
--- 9438,9448 ----
       * A new C extension __auto_type provides a subset of the
         functionality of C++11 auto in GNU C.
  
!   [11]C++
  
!      * The G++ implementation of [12]C++1y return type deduction for
!        normal functions has been updated to conform to [13]N3638, the
!        proposal accepted into the working paper. Most notably, it adds
         decltype(auto) for getting decltype semantics rather than the
         template argument deduction semantics of plain auto:
  
*************** int& f();
*** 9073,9086 ****
           auto  i1 = f(); // int
  decltype(auto) i2 = f(); // int&
  
!      * G++ supports [10]C++1y lambda capture initializers:
  
  [x = 42]{ ... };
  
         Actually, they have been accepted since GCC 4.5, but now the
         compiler doesn't warn about them with -std=c++1y, and supports
         parenthesized and brace-enclosed initializers as well.
!      * G++ supports [11]C++1y variable length arrays. G++ has supported
         GNU/C99-style VLAs for a long time, but now additionally supports
         initializers and lambda capture by reference. In C++1y mode G++
         will complain about VLA uses that are not permitted by the draft
--- 9450,9463 ----
           auto  i1 = f(); // int
  decltype(auto) i2 = f(); // int&
  
!      * G++ supports [14]C++1y lambda capture initializers:
  
  [x = 42]{ ... };
  
         Actually, they have been accepted since GCC 4.5, but now the
         compiler doesn't warn about them with -std=c++1y, and supports
         parenthesized and brace-enclosed initializers as well.
!      * G++ supports [15]C++1y variable length arrays. G++ has supported
         GNU/C99-style VLAs for a long time, but now additionally supports
         initializers and lambda capture by reference. In C++1y mode G++
         will complain about VLA uses that are not permitted by the draft
*************** void f(int n) {
*** 9095,9101 ****
    &a; // error, taking address of VLA
  }
  
!      * G++ supports the [12]C++1y [[deprecated]] attribute modulo bugs in
         the underlying [[gnu::deprecated]] attribute. Classes and functions
         can be marked deprecated and a diagnostic message added:
  
--- 9472,9478 ----
    &a; // error, taking address of VLA
  }
  
!      * G++ supports the [16]C++1y [[deprecated]] attribute modulo bugs in
         the underlying [[gnu::deprecated]] attribute. Classes and functions
         can be marked deprecated and a diagnostic message added:
  
*************** A aa; // warning: 'A' is deprecated : A
*** 9113,9119 ****
  int j = bar(2); // warning: 'int bar(int)' is deprecated : bar is unsafe; use fo
  o() instead
  
!      * G++ supports [13]C++1y digit separators. Long numeric literals can
         be subdivided with a single quote ' to enhance readability:
  
  int i = 1048576;
--- 9490,9496 ----
  int j = bar(2); // warning: 'int bar(int)' is deprecated : bar is unsafe; use fo
  o() instead
  
!      * G++ supports [17]C++1y digit separators. Long numeric literals can
         be subdivided with a single quote ' to enhance readability:
  
  int i = 1048576;
*************** int n = 0b0001'0000'0000'0000'0000'0000;
*** 9125,9131 ****
  double x = 1.602'176'565e-19;
  double y = 1.602'176'565e-1'9;
  
!      * G++ supports [14]C++1y generic (polymorphic) lambdas.
  
  // a functional object that will increment any type
  auto incr = [](auto x) { return x++; };
--- 9502,9508 ----
  double x = 1.602'176'565e-19;
  double y = 1.602'176'565e-1'9;
  
!      * G++ supports [18]C++1y generic (polymorphic) lambdas.
  
  // a functional object that will increment any type
  auto incr = [](auto x) { return x++; };
*************** auto incr = [](auto x) { return x++; };
*** 9138,9144 ****
  auto add = [] <typename T> (T a, T b) { return a + b; };
  
       * G++ supports unconstrained generic functions as specified by §4.1.2
!        and §5.1.1 of [15]N3889: Concepts Lite Specification. Briefly, auto
         may be used as a type-specifier in a parameter declaration of any
         function declarator in order to introduce an implicit function
         template parameter, akin to generic lambdas.
--- 9515,9521 ----
  auto add = [] <typename T> (T a, T b) { return a + b; };
  
       * G++ supports unconstrained generic functions as specified by §4.1.2
!        and §5.1.1 of [19]N3889: Concepts Lite Specification. Briefly, auto
         may be used as a type-specifier in a parameter declaration of any
         function declarator in order to introduce an implicit function
         template parameter, akin to generic lambdas.
*************** auto incr(T x) { return x++; }
*** 9150,9162 ****
  
      Runtime Library (libstdc++)
  
!      * [16]Improved support for C++11, including:
            + support for <regex>;
            + The associative containers in <map> and <set> and the
              unordered associative containers in <unordered_map> and
              <unordered_set> meet the allocator-aware container
              requirements;
!      * [17]Improved experimental support for the upcoming ISO C++
         standard, C++14, including:
            + fixing constexpr member functions without const;
            + implementation of the std::exchange() utility function;
--- 9527,9539 ----
  
      Runtime Library (libstdc++)
  
!      * [20]Improved support for C++11, including:
            + support for <regex>;
            + The associative containers in <map> and <set> and the
              unordered associative containers in <unordered_map> and
              <unordered_set> meet the allocator-aware container
              requirements;
!      * [21]Improved experimental support for the upcoming ISO C++
         standard, C++14, including:
            + fixing constexpr member functions without const;
            + implementation of the std::exchange() utility function;
*************** auto incr(T x) { return x++; }
*** 9182,9188 ****
         and will be removed in a future version. std::make_exception_ptr
         should be used instead.
  
!   Fortran
  
       * Compatibility notice:
            + Module files: The version of the module files (.mod) has been
--- 9559,9565 ----
         and will be removed in a future version. std::make_exception_ptr
         should be used instead.
  
!   [22]Fortran
  
       * Compatibility notice:
            + Module files: The version of the module files (.mod) has been
*************** auto incr(T x) { return x++; }
*** 9195,9201 ****
              object files and libraries are fully compatible with older
              versions (except as stated below).
            + ABI changes:
!                o The [18]argument passing ABI has changed for scalar dummy
                   arguments of type INTEGER, REAL, COMPLEX and LOGICAL,
                   which have both the VALUE and the OPTIONAL attributes.
                 o To support finalization the virtual table associated with
--- 9572,9578 ----
              object files and libraries are fully compatible with older
              versions (except as stated below).
            + ABI changes:
!                o The [23]argument passing ABI has changed for scalar dummy
                   arguments of type INTEGER, REAL, COMPLEX and LOGICAL,
                   which have both the VALUE and the OPTIONAL attributes.
                 o To support finalization the virtual table associated with
*************** auto incr(T x) { return x++; }
*** 9223,9229 ****
       * The compiler no longer unconditionally warns about DO loops with
         zero iterations. This warning is now controlled by the -Wzerotrip
         option, which is implied by -Wall.
!      * The new NO_ARG_CHECK attribute of the [19]!GCC$ directive can be
         used to disable the type-kind-rank (TKR) argument check for a dummy
         argument. The feature is similar to ISO/IEC TS 29133:2012's
         TYPE(*), except that it additionally also disables the rank check.
--- 9600,9606 ----
       * The compiler no longer unconditionally warns about DO loops with
         zero iterations. This warning is now controlled by the -Wzerotrip
         option, which is implied by -Wall.
!      * The new NO_ARG_CHECK attribute of the [24]!GCC$ directive can be
         used to disable the type-kind-rank (TKR) argument check for a dummy
         argument. The feature is similar to ISO/IEC TS 29133:2012's
         TYPE(*), except that it additionally also disables the rank check.
*************** auto incr(T x) { return x++; }
*** 9239,9256 ****
         contrary to NO_ARG_CHECK assumed-rank arguments pass an array
         descriptor which contains the array shape and stride of the
         argument.
!      * [20]Fortran 2003:
            + Finalization is now supported. It is currently only done for a
              subset of those situations in which it should occur.
            + Experimental support for scalar character components with
              deferred length (i.e. allocatable string length) in derived
              types has been added. (Deferred-length character variables are
              supported since GCC 4.6.)
!      * [21]Fortran 2008:
            + When STOP or ERROR STOP are used to terminate the execution
              and any exception (but inexact) is signaling, a warning is
              printed to ERROR_UNIT, indicating which exceptions are
!             signaling. The [22]-ffpe-summary= command-line option can be
              used to fine-tune for which exceptions the warning should be
              shown.
            + Rounding on input (READ) is now handled on systems where
--- 9616,9633 ----
         contrary to NO_ARG_CHECK assumed-rank arguments pass an array
         descriptor which contains the array shape and stride of the
         argument.
!      * [25]Fortran 2003:
            + Finalization is now supported. It is currently only done for a
              subset of those situations in which it should occur.
            + Experimental support for scalar character components with
              deferred length (i.e. allocatable string length) in derived
              types has been added. (Deferred-length character variables are
              supported since GCC 4.6.)
!      * [26]Fortran 2008:
            + When STOP or ERROR STOP are used to terminate the execution
              and any exception (but inexact) is signaling, a warning is
              printed to ERROR_UNIT, indicating which exceptions are
!             signaling. The [27]-ffpe-summary= command-line option can be
              used to fine-tune for which exceptions the warning should be
              shown.
            + Rounding on input (READ) is now handled on systems where
*************** auto incr(T x) { return x++; }
*** 9260,9272 ****
              least significant [cf. IEC 60559:1989] for a tie, while
              compatible rounds away from zero in that case).
  
!   Go
  
       * GCC 4.9 provides a complete implementation of the Go 1.2.1 release.
  
! New Targets and Target Specific Improvements
  
!   AArch64
  
       * The ARMv8-A crypto and CRC instructions are now supported through
         intrinsics. These are enabled when the architecture supports these
--- 9637,9649 ----
              least significant [cf. IEC 60559:1989] for a tie, while
              compatible rounds away from zero in that case).
  
!   [28]Go
  
       * GCC 4.9 provides a complete implementation of the Go 1.2.1 release.
  
! [29]New Targets and Target Specific Improvements
  
!   [30]AArch64
  
       * The ARMv8-A crypto and CRC instructions are now supported through
         intrinsics. These are enabled when the architecture supports these
*************** New Targets and Target Specific Improvem
*** 9294,9305 ****
         default by configuring GCC with the --enable-fix-cortex-a53-835769
         option.
  
!   ARC
  
       * A port for Synopsys Designware ARC has been contributed by Embecosm
         and Synopsys Inc.
  
!   ARM
  
       * Use of Advanced SIMD (Neon) for 64-bit scalar computations has been
         disabled by default. This was found to generate better code in only
--- 9671,9682 ----
         default by configuring GCC with the --enable-fix-cortex-a53-835769
         option.
  
!   [31]ARC
  
       * A port for Synopsys Designware ARC has been contributed by Embecosm
         and Synopsys Inc.
  
!   [32]ARM
  
       * Use of Advanced SIMD (Neon) for 64-bit scalar computations has been
         disabled by default. This was found to generate better code in only
*************** New Targets and Target Specific Improvem
*** 9342,9354 ****
       * A number of code generation improvements for Thumb2 to reduce code
         size when compiling for the M-profile processors.
  
!   AVR
  
       * A new command-line option -mfract-convert-truncate has been added.
         It allows compiler to use truncation instead of rounding towards
         zero for fractional fixed-point types.
  
!   IA-32/x86-64
  
       * -mfpmath=sse is now implied by -ffast-math on all targets where
         SSE2 is supported.
--- 9719,9731 ----
       * A number of code generation improvements for Thumb2 to reduce code
         size when compiling for the M-profile processors.
  
!   [33]AVR
  
       * A new command-line option -mfract-convert-truncate has been added.
         It allows compiler to use truncation instead of rounding towards
         zero for fractional fixed-point types.
  
!   [34]IA-32/x86-64
  
       * -mfpmath=sse is now implied by -ffast-math on all targets where
         SSE2 is supported.
*************** New Targets and Target Specific Improvem
*** 9364,9370 ****
         a file that are tagged with the corresponding target attribute
         without having to compile the entire file with the -mxxx option.
         This improves the usability of x86 intrinsics and is particularly
!        useful when doing [23]Function Multiversioning.
       * GCC now supports the new Intel microarchitecture named Silvermont
         through -march=silvermont.
       * GCC now supports the new Intel microarchitecture named Broadwell
--- 9741,9747 ----
         a file that are tagged with the corresponding target attribute
         without having to compile the entire file with the -mxxx option.
         This improves the usability of x86 intrinsics and is particularly
!        useful when doing [35]Function Multiversioning.
       * GCC now supports the new Intel microarchitecture named Silvermont
         through -march=silvermont.
       * GCC now supports the new Intel microarchitecture named Broadwell
*************** New Targets and Target Specific Improvem
*** 9388,9394 ****
       * Support for new AMD family 15h processors (Excavator core) is now
         available through the -march=bdver4 and -mtune=bdver4 options.
  
!   MSP430
  
       * A new command-line option -mcpu= has been added to the MSP430 back
         end. This option is used to specify the ISA to be used. Accepted
--- 9765,9771 ----
       * Support for new AMD family 15h processors (Excavator core) is now
         available through the -march=bdver4 and -mtune=bdver4 options.
  
!   [36]MSP430
  
       * A new command-line option -mcpu= has been added to the MSP430 back
         end. This option is used to specify the ISA to be used. Accepted
*************** New Targets and Target Specific Improvem
*** 9399,9417 ****
         preprocessor symbol that will be recognised by the msp430.h header
         file.
  
!   NDS32
  
       * A new nds32 port supports the 32-bit architecture from Andes
         Technology Corporation.
       * The port provides initial support for the V2, V3, V3m instruction
         set architectures.
  
!   Nios II
  
       * A port for the Altera Nios II has been contributed by Mentor
         Graphics.
  
!   PowerPC / PowerPC64 / RS6000
  
       * GCC now supports Power ISA 2.07, which includes support for
         Hardware Transactional Memory (HTM), Quadword atomics and several
--- 9776,9794 ----
         preprocessor symbol that will be recognised by the msp430.h header
         file.
  
!   [37]NDS32
  
       * A new nds32 port supports the 32-bit architecture from Andes
         Technology Corporation.
       * The port provides initial support for the V2, V3, V3m instruction
         set architectures.
  
!   [38]Nios II
  
       * A port for the Altera Nios II has been contributed by Mentor
         Graphics.
  
!   [39]PowerPC / PowerPC64 / RS6000
  
       * GCC now supports Power ISA 2.07, which includes support for
         Hardware Transactional Memory (HTM), Quadword atomics and several
*************** New Targets and Target Specific Improvem
*** 9447,9459 ****
         certain leaf function with -march=z10 or higher.
       * The LRA rtl pass replaces reload by default on S/390.
  
!   RX
  
       * The port now allows to specify the RX100, RX200, and RX600
         processors with the command-line options -mcpu=rx100, -mcpu=rx200
         and -mcpu=rx600.
  
!   SH
  
       * Minor improvements to code generated for integer arithmetic and
         code that involves the T bit.
--- 9824,9836 ----
         certain leaf function with -march=z10 or higher.
       * The LRA rtl pass replaces reload by default on S/390.
  
!   [40]RX
  
       * The port now allows to specify the RX100, RX200, and RX600
         processors with the command-line options -mcpu=rx100, -mcpu=rx200
         and -mcpu=rx600.
  
!   [41]SH
  
       * Minor improvements to code generated for integer arithmetic and
         code that involves the T bit.
*************** New Targets and Target Specific Improvem
*** 9470,9478 ****
       * The option -mcmpeqdi has been deprecated. Specifying it will result
         in a warning and will not influence code generation.
  
! GCC 4.9.1
  
!    This is the [24]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.9.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
--- 9847,9855 ----
       * The option -mcmpeqdi has been deprecated. Specifying it will result
         in a warning and will not influence code generation.
  
! [42]GCC 4.9.1
  
!    This is the [43]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.9.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
*************** GCC 4.9.1
*** 9480,9556 ****
     Version 4.0 of the OpenMP specification is supported even in Fortran,
     not just C and C++.
  
! GCC 4.9.2
  
!    This is the [25]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.9.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! GCC 4.9.3
  
!    This is the [26]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.9.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! GCC 4.9.4
  
!    This is the [27]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.9.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [28]GCC manuals. If that fails, the
!     [29]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [30]gcc@gcc.gnu.org. All of [31]our lists have public
      archives.
  
!    Copyright (C) [32]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [33]maintained by the GCC team. Last modified
!    2023-09-02.
  
  References
  
     1. https://gcc.gnu.org/ml/gcc-patches/2013-05/msg00728.html
     2. https://gcc.gnu.org/PR60825
     3. https://gcc.gnu.org/gcc-4.9/porting_to.html
!    4. https://www.openmp.org/specifications/
!    5. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Optimize-Options.html#index-fsimd-cost-model-908
!    6. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Language-Independent-Options.html#index-fdiagnostics-color-252
!    7. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Loop-Specific-Pragmas.html
!    8. https://gcc.gnu.org/projects/cxx1y.html
!    9. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3638.html
!   10. https://gcc.gnu.org/projects/cxx1y.html
!   11. https://gcc.gnu.org/projects/cxx1y.html
    12. https://gcc.gnu.org/projects/cxx1y.html
!   13. https://gcc.gnu.org/projects/cxx1y.html
    14. https://gcc.gnu.org/projects/cxx1y.html
!   15. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3889.pdf
!   16. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/libstdc++/manual/manual/status.html#status.iso.2011
!   17. https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2014
!   18. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/Argument-passing-conventions.html
!   19. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/GNU-Fortran-Compiler-Directives.html
!   20. https://gcc.gnu.org/wiki/Fortran2003Status
!   21. https://gcc.gnu.org/wiki/Fortran2008Status
!   22. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/Debugging-Options.html
!   23. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Function-Multiversioning.html
!   24. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.1
!   25. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.2
!   26. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.3
!   27. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.4
!   28. https://gcc.gnu.org/onlinedocs/
!   29. mailto:gcc-help@gcc.gnu.org
!   30. mailto:gcc@gcc.gnu.org
!   31. https://gcc.gnu.org/lists.html
!   32. https://www.fsf.org/
!   33. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-4.8/index.html
                               GCC 4.8 Release Series
--- 9857,9955 ----
     Version 4.0 of the OpenMP specification is supported even in Fortran,
     not just C and C++.
  
! [44]GCC 4.9.2
  
!    This is the [45]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.9.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [46]GCC 4.9.3
  
!    This is the [47]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.9.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [48]GCC 4.9.4
  
!    This is the [49]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.9.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [50]GCC manuals. If that fails, the
!     [51]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [52]gcc@gcc.gnu.org. All of [53]our lists have public
      archives.
  
!    Copyright (C) [54]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [55]maintained by the GCC team. Last modified
!    2025-01-31.
  
  References
  
     1. https://gcc.gnu.org/ml/gcc-patches/2013-05/msg00728.html
     2. https://gcc.gnu.org/PR60825
     3. https://gcc.gnu.org/gcc-4.9/porting_to.html
!    4. https://gcc.gnu.org/gcc-4.9/changes.html#languages
!    5. https://www.openmp.org/specifications/
!    6. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Optimize-Options.html#index-fsimd-cost-model-908
!    7. https://gcc.gnu.org/gcc-4.9/changes.html#ada
!    8. https://gcc.gnu.org/gcc-4.9/changes.html#c-family
!    9. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Language-Independent-Options.html#index-fdiagnostics-color-252
!   10. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Loop-Specific-Pragmas.html
!   11. https://gcc.gnu.org/gcc-4.9/changes.html#cxx
    12. https://gcc.gnu.org/projects/cxx1y.html
!   13. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3638.html
    14. https://gcc.gnu.org/projects/cxx1y.html
!   15. https://gcc.gnu.org/projects/cxx1y.html
!   16. https://gcc.gnu.org/projects/cxx1y.html
!   17. https://gcc.gnu.org/projects/cxx1y.html
!   18. https://gcc.gnu.org/projects/cxx1y.html
!   19. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3889.pdf
!   20. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/libstdc++/manual/manual/status.html#status.iso.2011
!   21. https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2014
!   22. https://gcc.gnu.org/gcc-4.9/changes.html#fortran
!   23. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/Argument-passing-conventions.html
!   24. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/GNU-Fortran-Compiler-Directives.html
!   25. https://gcc.gnu.org/wiki/Fortran2003Status
!   26. https://gcc.gnu.org/wiki/Fortran2008Status
!   27. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/Debugging-Options.html
!   28. https://gcc.gnu.org/gcc-4.9/changes.html#go
!   29. https://gcc.gnu.org/gcc-4.9/changes.html#targets
!   30. https://gcc.gnu.org/gcc-4.9/changes.html#aarch64
!   31. https://gcc.gnu.org/gcc-4.9/changes.html#arc
!   32. https://gcc.gnu.org/gcc-4.9/changes.html#arm
!   33. https://gcc.gnu.org/gcc-4.9/changes.html#avr
!   34. https://gcc.gnu.org/gcc-4.9/changes.html#x86
!   35. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Function-Multiversioning.html
!   36. https://gcc.gnu.org/gcc-4.9/changes.html#msp430
!   37. https://gcc.gnu.org/gcc-4.9/changes.html#nds32
!   38. https://gcc.gnu.org/gcc-4.9/changes.html#nios2
!   39. https://gcc.gnu.org/gcc-4.9/changes.html#powerpc
!   40. https://gcc.gnu.org/gcc-4.9/changes.html#rx
!   41. https://gcc.gnu.org/gcc-4.9/changes.html#sh
!   42. https://gcc.gnu.org/gcc-4.9/changes.html#GCC4.9.1
!   43. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.1
!   44. https://gcc.gnu.org/gcc-4.9/changes.html#GCC4.9.2
!   45. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.2
!   46. https://gcc.gnu.org/gcc-4.9/changes.html#GCC4.9.3
!   47. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.3
!   48. https://gcc.gnu.org/gcc-4.9/changes.html#GCC4.9.4
!   49. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.4
!   50. https://gcc.gnu.org/onlinedocs/
!   51. mailto:gcc-help@gcc.gnu.org
!   52. mailto:gcc@gcc.gnu.org
!   53. https://gcc.gnu.org/lists.html
!   54. https://www.fsf.org/
!   55. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-4.8/index.html
                               GCC 4.8 Release Series
*************** Caveats
*** 9684,9701 ****
     built with older versions of GCC. Auto-vectorized code is not affected
     by this change.
  
-    On AVR, support has been removed for the command-line option
-    -mshort-calls deprecated in GCC 4.7.
- 
-    On AVR, the configure option --with-avrlibc supported since GCC 4.7.2
-    is turned on per default for all non-RTEMS configurations. This option
-    arranges for a better integration of [3]AVR Libc with avr-gcc. For
-    technical details, see [4]PR54461. To turn off the option in non-RTEMS
-    configurations, use --with-avrlibc=no. If the compiler is configured
-    for RTEMS, the option is always turned off.
- 
     More information on porting to GCC 4.8 from previous versions of GCC
!    can be found in the [5]porting guide for this release.
  
  General Optimizer Improvements (and Changes)
  
--- 10083,10090 ----
     built with older versions of GCC. Auto-vectorized code is not affected
     by this change.
  
     More information on porting to GCC 4.8 from previous versions of GCC
!    can be found in the [3]porting guide for this release.
  
  General Optimizer Improvements (and Changes)
  
*************** General Optimizer Improvements (and Chan
*** 9748,9761 ****
              reference) are now propagated at the inter-procedural level
              leading to better inlining decisions (for example in the case
              of Fortran array descriptors) and devirtualization.
!      * [6]AddressSanitizer , a fast memory error detector, has been added
         and can be enabled via -fsanitize=address. Memory access
         instructions will be instrumented to detect heap-, stack-, and
         global-buffer overflow as well as use-after-free bugs. To get nicer
         stacktraces, use -fno-omit-frame-pointer. The AddressSanitizer is
         available on IA-32/x86-64/x32/PowerPC/PowerPC64 GNU/Linux and on
         x86-64 Darwin.
!      * [7]ThreadSanitizer has been added and can be enabled via
         -fsanitize=thread. Instructions will be instrumented to detect data
         races. The ThreadSanitizer is available on x86-64 GNU/Linux.
       * A new local register allocator (LRA) has been implemented, which
--- 10137,10150 ----
              reference) are now propagated at the inter-procedural level
              leading to better inlining decisions (for example in the case
              of Fortran array descriptors) and devirtualization.
!      * [4]AddressSanitizer , a fast memory error detector, has been added
         and can be enabled via -fsanitize=address. Memory access
         instructions will be instrumented to detect heap-, stack-, and
         global-buffer overflow as well as use-after-free bugs. To get nicer
         stacktraces, use -fno-omit-frame-pointer. The AddressSanitizer is
         available on IA-32/x86-64/x32/PowerPC/PowerPC64 GNU/Linux and on
         x86-64 Darwin.
!      * [5]ThreadSanitizer has been added and can be enabled via
         -fsanitize=thread. Instructions will be instrumented to detect data
         races. The ThreadSanitizer is available on x86-64 GNU/Linux.
       * A new local register allocator (LRA) has been implemented, which
*************** t.c:7:7: note: in expansion of macro 'MY
*** 9802,9813 ****
         diagnostics that are disabled when using -Wno-pedantic.
       * The option -Wshadow no longer warns if a declaration shadows a
         function declaration, unless the former declares a function or
!        pointer to function, because this is [8]a common and valid case in
         real-world code.
  
!   C++
  
!      * G++ now implements the [9]C++11 thread_local keyword; this differs
         from the GNU __thread keyword primarily in that it allows dynamic
         initialization and destruction semantics. Unfortunately, this
         support requires a run-time penalty for references to
--- 10191,10202 ----
         diagnostics that are disabled when using -Wno-pedantic.
       * The option -Wshadow no longer warns if a declaration shadows a
         function declaration, unless the former declares a function or
!        pointer to function, because this is [6]a common and valid case in
         real-world code.
  
!   [7]C++
  
!      * G++ now implements the [8]C++11 thread_local keyword; this differs
         from the GNU __thread keyword primarily in that it allows dynamic
         initialization and destruction semantics. Unfortunately, this
         support requires a run-time penalty for references to
*************** t.c:7:7: note: in expansion of macro 'MY
*** 9823,9829 ****
         -fno-extern-tls-init option.
         OpenMP threadprivate variables now also support dynamic
         initialization and destruction by the same mechanism.
!      * G++ now implements the [10]C++11 attribute syntax, e.g.
  
  [[noreturn]] void f();
  
--- 10212,10218 ----
         -fno-extern-tls-init option.
         OpenMP threadprivate variables now also support dynamic
         initialization and destruction by the same mechanism.
!      * G++ now implements the [9]C++11 attribute syntax, e.g.
  
  [[noreturn]] void f();
  
*************** t.c:7:7: note: in expansion of macro 'MY
*** 9831,9849 ****
  
  alignas(double) int i;
  
!      * G++ now implements [11]C++11 inheriting constructors, e.g.
  
  struct A { A(int); };
  struct B: A { using A::A; }; // defines B::B(int)
  B b(42); // OK
  
       * As of GCC 4.8.1, G++ implements the change to decltype semantics
!        from [12]N3276.
  
  struct A f();
  decltype(f()) g();    // OK, return type of f() is not required to be complete.
  
!      * As of GCC 4.8.1, G++ implements [13]C++11 ref-qualifiers, e.g.
  
  struct A { int f() &; };
  int i = A().f();  // error, f() requires an lvalue object
--- 10220,10238 ----
  
  alignas(double) int i;
  
!      * G++ now implements [10]C++11 inheriting constructors, e.g.
  
  struct A { A(int); };
  struct B: A { using A::A; }; // defines B::B(int)
  B b(42); // OK
  
       * As of GCC 4.8.1, G++ implements the change to decltype semantics
!        from [11]N3276.
  
  struct A f();
  decltype(f()) g();    // OK, return type of f() is not required to be complete.
  
!      * As of GCC 4.8.1, G++ implements [12]C++11 ref-qualifiers, e.g.
  
  struct A { int f() &; };
  int i = A().f();  // error, f() requires an lvalue object
*************** int i = A().f();  // error, f() requires
*** 9852,9859 ****
         features proposed for the next revision of the standard, expected
         around 2014. Currently the only difference from -std=c++11 is
         support for return type deduction in normal functions, as proposed
!        in [14]N3386. Status of C++1y features in GCC 4.8 can be found
!        [15]here.
       * The G++ namespace association extension, __attribute ((strong)),
         has been deprecated. Inline namespaces should be used instead.
       * G++ now supports a -fext-numeric-literal option to control whether
--- 10241,10248 ----
         features proposed for the next revision of the standard, expected
         around 2014. Currently the only difference from -std=c++11 is
         support for return type deduction in normal functions, as proposed
!        in [13]N3386. Status of C++1y features in GCC 4.8 can be found
!        [14]here.
       * The G++ namespace association extension, __attribute ((strong)),
         has been deprecated. Inline namespaces should be used instead.
       * G++ now supports a -fext-numeric-literal option to control whether
*************** int i = A().f();  // error, f() requires
*** 9865,9871 ****
  
      Runtime Library (libstdc++)
  
!      * [16]Improved experimental support for the new ISO C++ standard,
         C++11, including:
            + forward_list meets the allocator-aware container requirements;
            + this_thread::sleep_for(), this_thread::sleep_until() and
--- 10254,10260 ----
  
      Runtime Library (libstdc++)
  
!      * [15]Improved experimental support for the new ISO C++ standard,
         C++11, including:
            + forward_list meets the allocator-aware container requirements;
            + this_thread::sleep_for(), this_thread::sleep_until() and
*************** int i = A().f();  // error, f() requires
*** 9888,9894 ****
         This may be useful for embedded systems to reduce the size of
         executables that link statically to the library.
  
!   Fortran
  
       * Compatibility notice:
            + Module files: The version of module files (.mod) has been
--- 10277,10283 ----
         This may be useful for embedded systems to reduce the size of
         executables that link statically to the library.
  
!   [16]Fortran
  
       * Compatibility notice:
            + Module files: The version of module files (.mod) has been
*************** int i = A().f();  // error, f() requires
*** 9962,9968 ****
              TS29113, see [26]gfortran's header file or use the [27]Chasm
              Language Interoperability Tools.
  
!   Go
  
       * GCC 4.8.2 provides a complete implementation of the Go 1.1.2
         release.
--- 10351,10357 ----
              TS29113, see [26]gfortran's header file or use the [27]Chasm
              Language Interoperability Tools.
  
!   [28]Go
  
       * GCC 4.8.2 provides a complete implementation of the Go 1.1.2
         release.
*************** int i = A().f();  // error, f() requires
*** 9972,9980 ****
         processors including x86, x86_64, PowerPC, SPARC, and Alpha. It may
         work on other platforms as well.
  
! New Targets and Target Specific Improvements
  
!   AArch64
  
       * A new port has been added to support AArch64, the new 64-bit
         architecture from ARM. Note that this is a separate port from the
--- 10361,10369 ----
         processors including x86, x86_64, PowerPC, SPARC, and Alpha. It may
         work on other platforms as well.
  
! [29]New Targets and Target Specific Improvements
  
!   [30]AArch64
  
       * A new port has been added to support AArch64, the new 64-bit
         architecture from ARM. Note that this is a separate port from the
*************** New Targets and Target Specific Improvem
*** 9988,9994 ****
         default by configuring GCC with the --enable-fix-cortex-a53-835769
         option.
  
!   ARM
  
       * Initial support has been added for the AArch32 extensions defined
         in the ARMv8 architecture.
--- 10377,10383 ----
         default by configuring GCC with the --enable-fix-cortex-a53-835769
         option.
  
!   [31]ARM
  
       * Initial support has been added for the AArch32 extensions defined
         in the ARMv8 architecture.
*************** New Targets and Target Specific Improvem
*** 10019,10028 ****
            + arm*-*-freebsd (no alternative)
            + arm*-wince-pe* (no alternative).
  
!   AVR
  
       * Support for the "Embedded C" fixed-point has been added. For
!        details, see the [28]GCC wiki and the [29]user manual. The support
         is not complete.
       * A new print modifier %r for register operands in inline assembler
         is supported. It will print the raw register number without the
--- 10408,10425 ----
            + arm*-*-freebsd (no alternative)
            + arm*-wince-pe* (no alternative).
  
!   [32]AVR
  
+      * Support for the command-line option -mshort-calls has been removed.
+        It was deprecated in GCC 4.7.
+      * The configure option --with-avrlibc supported since GCC 4.7.2 is
+        turned on per default for all non-RTEMS configurations. This option
+        arranges for a better integration of [33]AVR-LibC with avr-gcc. For
+        technical details, see [34]PR54461. To turn off the option in
+        non-AVR-LibC configurations, use --with-avrlibc=no. If the compiler
+        is configured for RTEMS, the option is always turned off.
       * Support for the "Embedded C" fixed-point has been added. For
!        details, see the [35]GCC wiki and the [36]user manual. The support
         is not complete.
       * A new print modifier %r for register operands in inline assembler
         is supported. It will print the raw register number without the
*************** New Targets and Target Specific Improvem
*** 10079,10085 ****
              string literal argument, the CPU name. For example,
              __builtin_cpu_is("westmere") returns a positive integer if the
              run-time CPU is an Intel Core i7 Westmere processor. Please
!             refer to the [30]user manual for the list of valid CPU names
              recognized.
            + A built-in function __builtin_cpu_supports has been added to
              detect if the run-time CPU supports a particular ISA feature.
--- 10476,10482 ----
              string literal argument, the CPU name. For example,
              __builtin_cpu_is("westmere") returns a positive integer if the
              run-time CPU is an Intel Core i7 Westmere processor. Please
!             refer to the [37]user manual for the list of valid CPU names
              recognized.
            + A built-in function __builtin_cpu_supports has been added to
              detect if the run-time CPU supports a particular ISA feature.
*************** New Targets and Target Specific Improvem
*** 10087,10093 ****
              It accepts one string literal argument, the ISA feature. For
              example, __builtin_cpu_supports("ssse3") returns a positive
              integer if the run-time CPU supports SSSE3 instructions.
!             Please refer to the [31]user manual for the list of valid ISA
              names recognized.
         Caveat: If these built-in functions are called before any static
         constructors are invoked, like during IFUNC initialization, then
--- 10484,10490 ----
              It accepts one string literal argument, the ISA feature. For
              example, __builtin_cpu_supports("ssse3") returns a positive
              integer if the run-time CPU supports SSSE3 instructions.
!             Please refer to the [38]user manual for the list of valid ISA
              names recognized.
         Caveat: If these built-in functions are called before any static
         constructors are invoked, like during IFUNC initialization, then
*************** New Targets and Target Specific Improvem
*** 10126,10132 ****
        return 0;
      }
  
!        Please refer to this [32]wiki for more information.
       * The x86 back end has been improved to allow option -fschedule-insns
         to work reliably. This option can be used to schedule instructions
         better and leads to improved performace in certain cases.
--- 10523,10529 ----
        return 0;
      }
  
!        Please refer to this [39]wiki for more information.
       * The x86 back end has been improved to allow option -fschedule-insns
         to work reliably. This option can be used to schedule instructions
         better and leads to improved performace in certain cases.
*************** New Targets and Target Specific Improvem
*** 10137,10147 ****
       * Support for new AMD family 16h processors (Jaguar core) is now
         available through the -march=btver2 and -mtune=btver2 options.
  
!   FRV
  
       * This target now supports the -fstack-usage command-line option.
  
!   MIPS
  
       * GCC can now generate code specifically for the R4700, Broadcom XLP
         and MIPS 34kn processors. The associated -march options are
--- 10534,10544 ----
       * Support for new AMD family 16h processors (Jaguar core) is now
         available through the -march=btver2 and -mtune=btver2 options.
  
!   [40]FRV
  
       * This target now supports the -fstack-usage command-line option.
  
!   [41]MIPS
  
       * GCC can now generate code specifically for the R4700, Broadcom XLP
         and MIPS 34kn processors. The associated -march options are
*************** New Targets and Target Specific Improvem
*** 10155,10161 ****
         intended or supported, and did not generate position-independent
         code. GCC 4.8 now reports an error when this combination is used.
  
!   PowerPC / PowerPC64 / RS6000
  
       * SVR4 configurations (GNU/Linux, FreeBSD, NetBSD) no longer save,
         restore or update the VRSAVE register by default. The respective
--- 10552,10558 ----
         intended or supported, and did not generate position-independent
         code. GCC 4.8 now reports an error when this combination is used.
  
!   [42]PowerPC / PowerPC64 / RS6000
  
       * SVR4 configurations (GNU/Linux, FreeBSD, NetBSD) no longer save,
         restore or update the VRSAVE register by default. The respective
*************** New Targets and Target Specific Improvem
*** 10167,10173 ****
         when targetting processors that support those hardware features on
         AIX 6.1 and above.
  
!   RX
  
       * This target will now issue a warning message whenever multiple fast
         interrupt handlers are found in the same compilation unit. This
--- 10564,10570 ----
         when targetting processors that support those hardware features on
         AIX 6.1 and above.
  
!   [43]RX
  
       * This target will now issue a warning message whenever multiple fast
         interrupt handlers are found in the same compilation unit. This
*************** New Targets and Target Specific Improvem
*** 10192,10198 ****
         higher. The purpose is to make use of the IFUNC optimized versions
         in Glibc.
  
!   SH
  
       * The default alignment settings have been reduced to be less
         aggressive. This results in more compact code for optimization
--- 10589,10595 ----
         higher. The purpose is to make use of the IFUNC optimized versions
         in Glibc.
  
!   [44]SH
  
       * The default alignment settings have been reduced to be less
         aggressive. This results in more compact code for optimization
*************** New Targets and Target Specific Improvem
*** 10267,10300 ****
       * The -mdiv= option for targets other than SHmedia has been fixed and
         documented.
  
!   SPARC
  
       * Added optimized instruction scheduling for Niagara4.
  
!   TILE-Gx
  
       * Added support for the -mcmodel=MODEL command-line option. The
         models supported are small and large.
  
!   V850
  
       * This target now supports the E3V5 architecture via the use of the
         new -mv850e3v5 command-line option. It also has experimental
         support for the e3v5 LOOP instruction which can be enabled via the
         new -mloop command-line option.
  
!   XStormy16
  
       * This target now supports the -fstack-usage command-line option.
  
! Operating Systems
  
!   OpenBSD
  
       * Support for OpenBSD/amd64 (x86_64-*-openbsd*) has been added and
         support for OpenBSD/i386 (i386-*-openbsd*) has been rejuvenated.
  
!   Windows (Cygwin)
  
       * Executables are now linked against shared libgcc by default. The
         previous default was to link statically, which can still be done by
--- 10664,10697 ----
       * The -mdiv= option for targets other than SHmedia has been fixed and
         documented.
  
!   [45]SPARC
  
       * Added optimized instruction scheduling for Niagara4.
  
!   [46]TILE-Gx
  
       * Added support for the -mcmodel=MODEL command-line option. The
         models supported are small and large.
  
!   [47]V850
  
       * This target now supports the E3V5 architecture via the use of the
         new -mv850e3v5 command-line option. It also has experimental
         support for the e3v5 LOOP instruction which can be enabled via the
         new -mloop command-line option.
  
!   [48]XStormy16
  
       * This target now supports the -fstack-usage command-line option.
  
! [49]Operating Systems
  
!   [50]OpenBSD
  
       * Support for OpenBSD/amd64 (x86_64-*-openbsd*) has been added and
         support for OpenBSD/i386 (i386-*-openbsd*) has been rejuvenated.
  
!   [51]Windows (Cygwin)
  
       * Executables are now linked against shared libgcc by default. The
         previous default was to link statically, which can still be done by
*************** Operating Systems
*** 10305,10313 ****
         only links against the Windows DLLs, but offers little or no
         benefit.
  
! GCC 4.8.1
  
!    This is the [33]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.8.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
--- 10702,10710 ----
         only links against the Windows DLLs, but offers little or no
         benefit.
  
! [52]GCC 4.8.1
  
!    This is the [53]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.8.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
*************** GCC 4.8.1
*** 10328,10343 ****
     libstdc++ configured with the non-default --enable-libstdcxx-time=
     configuration option needs to be recompiled.
  
! GCC 4.8.2
  
!    This is the [34]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.8.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! GCC 4.8.3
  
!    This is the [35]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.8.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
--- 10725,10740 ----
     libstdc++ configured with the non-default --enable-libstdcxx-time=
     configuration option needs to be recompiled.
  
! [54]GCC 4.8.2
  
!    This is the [55]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.8.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [56]GCC 4.8.3
  
!    This is the [57]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.8.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
*************** GCC 4.8.3
*** 10345,10397 ****
     Support for the new powerpc64le-linux platform has been added. It
     defaults to generating code that conforms to the ELFV2 ABI.
  
! GCC 4.8.4
  
!    This is the [36]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.8.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! GCC 4.8.5
  
!    This is the [37]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.8.5 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [38]GCC manuals. If that fails, the
!     [39]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [40]gcc@gcc.gnu.org. All of [41]our lists have public
      archives.
  
!    Copyright (C) [42]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [43]maintained by the GCC team. Last modified
!    2022-11-05.
  
  References
  
     1. https://gcc.gnu.org/wiki/cxx-conversion
     2. ftp://gcc.gnu.org/pub/gcc/infrastructure/
!    3. http://www.nongnu.org/avr-libc/
!    4. https://gcc.gnu.org/PR54461
!    5. https://gcc.gnu.org/gcc-4.8/porting_to.html
!    6. https://github.com/google/sanitizers
!    7. https://code.google.com/archive/p/data-race-test/wikis/ThreadSanitizer.wiki
!    8. https://lkml.org/lkml/2006/11/28/239
     9. https://gcc.gnu.org/gcc-4.8/cxx0x_status.html
    10. https://gcc.gnu.org/gcc-4.8/cxx0x_status.html
!   11. https://gcc.gnu.org/gcc-4.8/cxx0x_status.html
!   12. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3276.pdf
!   13. https://gcc.gnu.org/gcc-4.8/cxx0x_status.html
!   14. https://www.open-std.org/JTC1/SC22/WG21/docs/papers/2012/n3386.html
!   15. https://gcc.gnu.org/projects/cxx1y.html
!   16. https://gcc.gnu.org/onlinedocs/gcc-4.8.4/libstdc++/manual/manual/status.html#status.iso.2011
    17. https://gcc.gnu.org/onlinedocs/gfortran/BACKTRACE.html
    18. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html
    19. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html
--- 10742,10794 ----
     Support for the new powerpc64le-linux platform has been added. It
     defaults to generating code that conforms to the ELFV2 ABI.
  
! [58]GCC 4.8.4
  
!    This is the [59]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.8.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [60]GCC 4.8.5
  
!    This is the [61]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.8.5 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [62]GCC manuals. If that fails, the
!     [63]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [64]gcc@gcc.gnu.org. All of [65]our lists have public
      archives.
  
!    Copyright (C) [66]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [67]maintained by the GCC team. Last modified
!    2025-02-28.
  
  References
  
     1. https://gcc.gnu.org/wiki/cxx-conversion
     2. ftp://gcc.gnu.org/pub/gcc/infrastructure/
!    3. https://gcc.gnu.org/gcc-4.8/porting_to.html
!    4. https://github.com/google/sanitizers
!    5. https://code.google.com/archive/p/data-race-test/wikis/ThreadSanitizer.wiki
!    6. https://lkml.org/lkml/2006/11/28/239
!    7. https://gcc.gnu.org/gcc-4.8/changes.html#cxx
!    8. https://gcc.gnu.org/gcc-4.8/cxx0x_status.html
     9. https://gcc.gnu.org/gcc-4.8/cxx0x_status.html
    10. https://gcc.gnu.org/gcc-4.8/cxx0x_status.html
!   11. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3276.pdf
!   12. https://gcc.gnu.org/gcc-4.8/cxx0x_status.html
!   13. https://www.open-std.org/JTC1/SC22/WG21/docs/papers/2012/n3386.html
!   14. https://gcc.gnu.org/projects/cxx1y.html
!   15. https://gcc.gnu.org/onlinedocs/gcc-4.8.4/libstdc++/manual/manual/status.html#status.iso.2011
!   16. https://gcc.gnu.org/gcc-4.8/changes.html#fortran
    17. https://gcc.gnu.org/onlinedocs/gfortran/BACKTRACE.html
    18. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html
    19. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html
*************** References
*** 10403,10424 ****
    25. https://gcc.gnu.org/wiki/TS29113Status
    26. https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=libgfortran/libgfortran.h
    27. https://chasm-interop.sourceforge.net/
!   28. https://gcc.gnu.org/wiki/avr-gcc#Fixed-Point_Support
!   29. https://gcc.gnu.org/onlinedocs/gcc/Fixed-Point.html
!   30. https://gcc.gnu.org/onlinedocs/gcc/x86-Built-in-Functions.html
!   31. https://gcc.gnu.org/onlinedocs/gcc/x86-Built-in-Functions.html
!   32. https://gcc.gnu.org/wiki/FunctionMultiVersioning
!   33. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.1
!   34. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.2
!   35. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.3
!   36. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.4
!   37. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.5
!   38. https://gcc.gnu.org/onlinedocs/
!   39. mailto:gcc-help@gcc.gnu.org
!   40. mailto:gcc@gcc.gnu.org
!   41. https://gcc.gnu.org/lists.html
!   42. https://www.fsf.org/
!   43. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-4.7/index.html
                               GCC 4.7 Release Series
--- 10800,10845 ----
    25. https://gcc.gnu.org/wiki/TS29113Status
    26. https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=libgfortran/libgfortran.h
    27. https://chasm-interop.sourceforge.net/
!   28. https://gcc.gnu.org/gcc-4.8/changes.html#go
!   29. https://gcc.gnu.org/gcc-4.8/changes.html#targets
!   30. https://gcc.gnu.org/gcc-4.8/changes.html#aarch64
!   31. https://gcc.gnu.org/gcc-4.8/changes.html#arm
!   32. https://gcc.gnu.org/gcc-4.8/changes.html#avr
!   33. http://www.nongnu.org/avr-libc/
!   34. https://gcc.gnu.org/PR54461
!   35. https://gcc.gnu.org/wiki/avr-gcc#Fixed-Point_Support
!   36. https://gcc.gnu.org/onlinedocs/gcc/Fixed-Point.html
!   37. https://gcc.gnu.org/onlinedocs/gcc/x86-Built-in-Functions.html
!   38. https://gcc.gnu.org/onlinedocs/gcc/x86-Built-in-Functions.html
!   39. https://gcc.gnu.org/wiki/FunctionMultiVersioning
!   40. https://gcc.gnu.org/gcc-4.8/changes.html#frv
!   41. https://gcc.gnu.org/gcc-4.8/changes.html#mips
!   42. https://gcc.gnu.org/gcc-4.8/changes.html#powerpc
!   43. https://gcc.gnu.org/gcc-4.8/changes.html#rx
!   44. https://gcc.gnu.org/gcc-4.8/changes.html#sh
!   45. https://gcc.gnu.org/gcc-4.8/changes.html#sparc
!   46. https://gcc.gnu.org/gcc-4.8/changes.html#tilegx
!   47. https://gcc.gnu.org/gcc-4.8/changes.html#v850
!   48. https://gcc.gnu.org/gcc-4.8/changes.html#xstormy16
!   49. https://gcc.gnu.org/gcc-4.8/changes.html#os
!   50. https://gcc.gnu.org/gcc-4.8/changes.html#openbsd
!   51. https://gcc.gnu.org/gcc-4.8/changes.html#windows
!   52. https://gcc.gnu.org/gcc-4.8/changes.html#GCC4.8.1
!   53. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.1
!   54. https://gcc.gnu.org/gcc-4.8/changes.html#GCC4.8.2
!   55. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.2
!   56. https://gcc.gnu.org/gcc-4.8/changes.html#GCC4.8.3
!   57. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.3
!   58. https://gcc.gnu.org/gcc-4.8/changes.html#GCC4.8.4
!   59. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.4
!   60. https://gcc.gnu.org/gcc-4.8/changes.html#GCC4.8.5
!   61. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.5
!   62. https://gcc.gnu.org/onlinedocs/
!   63. mailto:gcc-help@gcc.gnu.org
!   64. mailto:gcc@gcc.gnu.org
!   65. https://gcc.gnu.org/lists.html
!   66. https://www.fsf.org/
!   67. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-4.7/index.html
                               GCC 4.7 Release Series
*************** Caveats
*** 10578,10600 ****
         from Solaris 11, and was only intended as a migration aid from
         SunOS 4 to SunOS 5. The -compat-bsd compiler option is not
         recognized any longer.
-      * The AVR port's libgcc has been improved and its multilib structure
-        has been enhanced. As a result, all objects contributing to an
-        application must either be compiled with GCC versions up to 4.6.x
-        or with GCC versions 4.7.1 or later. If the compiler is used with
-        AVR Libc, you need a version that supports the new layout, i.e.
-        implements [2]#35407.
-      * The AVR port's -mshort-calls command-line option has been
-        deprecated. It will be removed in the GCC 4.8 release. See -mrelax
-        for a replacement.
-      * The AVR port only references startup code that clears .bss and the
-        common section resp. initializes the .data and .rodata section
-        provided respective sections (or subsections thereof) are not
-        empty, see [3]PR18145. Applications that put all static storage
-        objects into non-standard sections and / or define all static
-        storage objects in assembler modules, must reference __do_clear_bss
-        resp. __do_copy_data by hand or undefine the symbol(s) by means of
-        -Wl,-u,__do_clear_bss resp. -Wl,-u,__do_copy_data.
       * The ARM port's -mwords-little-endian option has been deprecated. It
         will be removed in a future release.
       * Support has been removed for the NetWare x86 configuration
--- 10999,11004 ----
*************** Caveats
*** 10620,10626 ****
         not affected by this change. (This change affects GCC versions
         4.7.2 and later.)
       * More information on porting to GCC 4.7 from previous versions of
!        GCC can be found in the [4]porting guide for this release.
  
  General Optimizer Improvements
  
--- 11024,11030 ----
         not affected by this change. (This change affects GCC versions
         4.7.2 and later.)
       * More information on porting to GCC 4.7 from previous versions of
!        GCC can be found in the [2]porting guide for this release.
  
  General Optimizer Improvements
  
*************** New Languages and Language specific impr
*** 10751,10757 ****
         constructs, use the -fgnu-tm option.
         Support is currently available for Alpha, ARM, PowerPC, SH, SPARC,
         and 32-bit/64-bit x86 platforms.
!        For more details on transactional memory see [5]the GCC WiKi.
       * Support for atomic operations specifying the C++11/C11 memory model
         has been added. These new __atomic routines replace the existing
         __sync built-in routines.
--- 11155,11161 ----
         constructs, use the -fgnu-tm option.
         Support is currently available for Alpha, ARM, PowerPC, SH, SPARC,
         and 32-bit/64-bit x86 platforms.
!        For more details on transactional memory see [3]the GCC WiKi.
       * Support for atomic operations specifying the C++11/C11 memory model
         has been added. These new __atomic routines replace the existing
         __sync built-in routines.
*************** New Languages and Language specific impr
*** 10762,10768 ****
         library functions is available on the GCC atomic wiki in the
         "External Atomics Library" section.
         For more details on the memory models and features, see the
!        [6]atomic wiki.
       * When a binary operation is performed on vector types and one of the
         operands is a uniform vector, it is possible to replace the vector
         with the generating element. For example:
--- 11166,11172 ----
         library functions is available on the GCC atomic wiki in the
         "External Atomics Library" section.
         For more details on the memory models and features, see the
!        [4]atomic wiki.
       * When a binary operation is performed on vector types and one of the
         operands is a uniform vector, it is possible to replace the vector
         with the generating element. For example:
*************** res = a - x;  /* means a - {x,x,x,x}  */
*** 10787,10798 ****
            + A built-in function __builtin_complex is provided to support C
              library implementation of the CMPLX family of macros.
  
!   C++
  
       * G++ now accepts the -std=c++11, -std=gnu++11, and -Wc++11-compat
         options, which are equivalent to -std=c++0x, -std=gnu++0x, and
         -Wc++0x-compat, respectively.
!      * G++ now implements [7]C++11 extended friend syntax:
  
  template<class W>
  class Q
--- 11191,11202 ----
            + A built-in function __builtin_complex is provided to support C
              library implementation of the CMPLX family of macros.
  
!   [5]C++
  
       * G++ now accepts the -std=c++11, -std=gnu++11, and -Wc++11-compat
         options, which are equivalent to -std=c++0x, -std=gnu++0x, and
         -Wc++0x-compat, respectively.
!      * G++ now implements [6]C++11 extended friend syntax:
  
  template<class W>
  class Q
*************** struct B
*** 10807,10813 ****
    int ar[Q<B>::I];
  };
  
!      * Thanks to Ville Voutilainen, G++ now implements [8]C++11 explicit
         override control.
  
  struct B {
--- 11211,11217 ----
    int ar[Q<B>::I];
  };
  
!      * Thanks to Ville Voutilainen, G++ now implements [7]C++11 explicit
         override control.
  
  struct B {
*************** struct D : B {
*** 10824,10849 ****
  struct E final { };
  struct F: E { }; // error: deriving from final class
  
!      * G++ now implements [9]C++11 non-static data member initializers.
  
  struct A {
    int i = 42;
  } a; // initializes a.i to 42
  
!      * Thanks to Ed Smith-Rowland, G++ now implements [10]C++11
         user-defined literals.
  
  // Not actually a good approximation.  :)
  constexpr long double operator"" _degrees (long double d) { return d * 0.0175; }
  long double pi = 180.0_degrees;
  
!      * G++ now implements [11]C++11 alias-declarations.
  
  template <class T> using Ptr = T*;
  Ptr<int> ip;  // decltype(ip) is int*
  
       * Thanks to Ville Voutilainen and Pedro Lamarão, G++ now implements
!        [12]C++11 delegating constructors.
  
  struct A {
    A(int);
--- 11228,11253 ----
  struct E final { };
  struct F: E { }; // error: deriving from final class
  
!      * G++ now implements [8]C++11 non-static data member initializers.
  
  struct A {
    int i = 42;
  } a; // initializes a.i to 42
  
!      * Thanks to Ed Smith-Rowland, G++ now implements [9]C++11
         user-defined literals.
  
  // Not actually a good approximation.  :)
  constexpr long double operator"" _degrees (long double d) { return d * 0.0175; }
  long double pi = 180.0_degrees;
  
!      * G++ now implements [10]C++11 alias-declarations.
  
  template <class T> using Ptr = T*;
  Ptr<int> ip;  // decltype(ip) is int*
  
       * Thanks to Ville Voutilainen and Pedro Lamarão, G++ now implements
!        [11]C++11 delegating constructors.
  
  struct A {
    A(int);
*************** const int &y = f(2);
*** 10922,10935 ****
         Using-declarations are to be used instead. Furthermore, some
         efforts have been made to improve the support of class scope
         using-declarations. In particular, using-declarations referring to
!        a dependent type now work as expected ([13]bug c++/14258).
       * The ELF symbol visibility of a template instantiation is now
         properly constrained by the visibility of its template arguments
!        ([14]bug c++/35688).
  
      Runtime Library (libstdc++)
  
!      * [15]Improved experimental support for the new ISO C++ standard,
         C++11, including:
            + using noexcept in most of the library;
            + implementations of pointer_traits, allocator_traits and
--- 11326,11339 ----
         Using-declarations are to be used instead. Furthermore, some
         efforts have been made to improve the support of class scope
         using-declarations. In particular, using-declarations referring to
!        a dependent type now work as expected ([12]bug c++/14258).
       * The ELF symbol visibility of a template instantiation is now
         properly constrained by the visibility of its template arguments
!        ([13]bug c++/35688).
  
      Runtime Library (libstdc++)
  
!      * [14]Improved experimental support for the new ISO C++ standard,
         C++11, including:
            + using noexcept in most of the library;
            + implementations of pointer_traits, allocator_traits and
*************** const int &y = f(2);
*** 10943,10949 ****
       * Debug Mode iterators for unordered associative containers.
       * Avoid polluting the global namespace and do not include <unistd.h>.
  
!   Fortran
  
       * The compile flag [16]-fstack-arrays has been added, which causes
         all local arrays to be put on stack memory. For some programs this
--- 11347,11353 ----
       * Debug Mode iterators for unordered associative containers.
       * Avoid polluting the global namespace and do not include <unistd.h>.
  
!   [15]Fortran
  
       * The compile flag [16]-fstack-arrays has been added, which causes
         all local arrays to be put on stack memory. For some programs this
*************** const int &y = f(2);
*** 11011,11028 ****
              compatible with the candidate draft of TS 29113 (since GCC
              4.6).
  
!   Go
  
!      * GCC 4.7 implements the [34]Go 1 language standard. The library
         support in 4.7.0 is not quite complete, due to release timing.
         Release 4.7.1 includes complete support for Go 1. The Go library is
         from the Go 1.0.1 release.
       * Go has been tested on GNU/Linux and Solaris platforms. It may work
         on other platforms as well.
  
! New Targets and Target Specific Improvements
  
!   ARM
  
       * GCC now supports the Cortex-A7 processor implementing the v7-a
         version of the architecture using the option -mcpu=cortex-a7.
--- 11415,11432 ----
              compatible with the candidate draft of TS 29113 (since GCC
              4.6).
  
!   [34]Go
  
!      * GCC 4.7 implements the [35]Go 1 language standard. The library
         support in 4.7.0 is not quite complete, due to release timing.
         Release 4.7.1 includes complete support for Go 1. The Go library is
         from the Go 1.0.1 release.
       * Go has been tested on GNU/Linux and Solaris platforms. It may work
         on other platforms as well.
  
! [36]New Targets and Target Specific Improvements
  
!   [37]ARM
  
       * GCC now supports the Cortex-A7 processor implementing the v7-a
         version of the architecture using the option -mcpu=cortex-a7.
*************** New Targets and Target Specific Improvem
*** 11032,11042 ****
       * A new option -mvectorize-with-neon-double was added to allow users
         to change the vector size to 64 bits.
  
!   AVR
  
!      * GCC now supports the XMEGA architecture. This requires GNU binutils
         2.22 or later.
!      * Support for the [35]named address spaces __flash, __flash1, …,
         __flash5 and __memx has been added. These address spaces locate
         read-only data in flash memory and allow reading from flash memory
         by means of ordinary C code, i.e. without the need of (inline)
--- 11436,11462 ----
       * A new option -mvectorize-with-neon-double was added to allow users
         to change the vector size to 64 bits.
  
!   [38]AVR
  
!      * The AVR port's libgcc has been improved and its multilib structure
!        has been enhanced. As a result, all objects contributing to an
!        application must either be compiled with GCC versions up to 4.6.x
!        or with GCC versions 4.7.1 or later. If the compiler is used with
!        AVR-LibC, you need a version that supports the new layout, i.e.
!        implements [39]#35407.
!      * The -mshort-calls command-line option has been deprecated. It will
!        be removed in the GCC 4.8 release. See -mrelax for a replacement.
!      * The compiled code only references startup code that clears .bss and
!        the common section resp. initializes the .data and .rodata section
!        provided respective sections (or subsections thereof) are not
!        empty, see [40]PR18145. Applications that put all static storage
!        objects into non-standard sections and / or define all static
!        storage objects in assembler modules, must reference __do_clear_bss
!        resp. __do_copy_data by hand or undefine the symbol(s) by means of
!        -Wl,-u,__do_clear_bss resp. -Wl,-u,__do_copy_data.
!      * GCC now supports the XMEGA architecture. This requires GNU Binutils
         2.22 or later.
!      * Support for the [41]named address spaces __flash, __flash1, …,
         __flash5 and __memx has been added. These address spaces locate
         read-only data in flash memory and allow reading from flash memory
         by means of ordinary C code, i.e. without the need of (inline)
*************** int add_values (const __flash int *p, in
*** 11051,11062 ****
  
       * Support has been added for the AVR-specific configure option
         --with-avrlibc=yes in order to arrange for better integration of
!        [36]AVR-Libc. This configure option is supported in avr-gcc 4.7.2
         and newer and will only take effect in non-RTEMS configurations. If
         avr-gcc is configured for RTEMS, the option will be ignored which
!        is the same as specifying --with-avrlibc=no. See [37]PR54461 for
         more technical details.
!      * Support for AVR-specific [38]built-in functions has been added.
       * Support has been added for the signed and unsigned 24-bit scalar
         integer types __int24 and __uint24.
       * New command-line options -maccumulate-args, -mbranch-cost=cost and
--- 11471,11482 ----
  
       * Support has been added for the AVR-specific configure option
         --with-avrlibc=yes in order to arrange for better integration of
!        [42]AVR-Libc. This configure option is supported in avr-gcc v4.7.2
         and newer and will only take effect in non-RTEMS configurations. If
         avr-gcc is configured for RTEMS, the option will be ignored which
!        is the same as specifying --with-avrlibc=no. See [43]PR54461 for
         more technical details.
!      * Support for AVR-specific [44]built-in functions has been added.
       * Support has been added for the signed and unsigned 24-bit scalar
         integer types __int24 and __uint24.
       * New command-line options -maccumulate-args, -mbranch-cost=cost and
*************** void set_portb (uint8_t value)
*** 11138,11144 ****
         FMA, BMI, BMI2, LZCNT is available through -march=core-avx2.
       * Support for new AMD family 15h processors (Piledriver core) is now
         available through -march=bdver2 and -mtune=bdver2 options.
!      * Support for [39]the x32 psABI is now available through the -mx32
         option.
       * Windows mingw targets are using the -mms-bitfields option by
         default.
--- 11558,11564 ----
         FMA, BMI, BMI2, LZCNT is available through -march=core-avx2.
       * Support for new AMD family 15h processors (Piledriver core) is now
         available through -march=bdver2 and -mtune=bdver2 options.
!      * Support for [45]the x32 psABI is now available through the -mx32
         option.
       * Windows mingw targets are using the -mms-bitfields option by
         default.
*************** void set_portb (uint8_t value)
*** 11147,11153 ****
       * Support for the configure option --with-threads=posix for Windows
         mingw targets.
  
!   MIPS
  
       * GCC now supports thread-local storage (TLS) for MIPS16. This
         requires GNU binutils 2.22 or later.
--- 11567,11573 ----
       * Support for the configure option --with-threads=posix for Windows
         mingw targets.
  
!   [46]MIPS
  
       * GCC now supports thread-local storage (TLS) for MIPS16. This
         requires GNU binutils 2.22 or later.
*************** Other significant improvements
*** 11253,11327 ****
         the DW_AT_producer attribute string in the DWARF debugging
         information.
       * GCC now supports various new GNU extensions to the DWARF debugging
!        information format, like [40]entry value and [41]call site
!        information, [42]typed DWARF stack or [43]a more compact macro
         representation. Support for these extensions has been added to GDB
         7.4. They can be disabled through the -gstrict-dwarf command-line
         option.
  
! GCC 4.7.1
  
!    This is the [44]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.7.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
!    The Go front end in the 4.7.1 release fully supports the [45]Go 1
     language standard.
  
! GCC 4.7.2
  
!    This is the [46]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.7.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! GCC 4.7.3
  
!    This is the [47]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.7.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! GCC 4.7.4
  
!    This is the [48]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.7.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [49]GCC manuals. If that fails, the
!     [50]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [51]gcc@gcc.gnu.org. All of [52]our lists have public
      archives.
  
!    Copyright (C) [53]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [54]maintained by the GCC team. Last modified
!    2023-03-29.
  
  References
  
     1. https://gcc.gnu.org/ml/gcc-patches/2011-03/msg01263.html
!    2. http://savannah.nongnu.org/bugs/?35407
!    3. https://gcc.gnu.org/PR18145
!    4. https://gcc.gnu.org/gcc-4.7/porting_to.html
!    5. https://gcc.gnu.org/wiki/TransactionalMemory
!    6. https://gcc.gnu.org/wiki/Atomic/GCCMM
     7. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
     8. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
     9. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
    10. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
    11. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
!   12. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
!   13. https://gcc.gnu.org/PR14258
!   14. https://gcc.gnu.org/PR35688
!   15. https://gcc.gnu.org/onlinedocs/gcc-4.7.4/libstdc++/manual/manual/status.html#status.iso.2011
    16. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfstack-arrays_007d-254
    17. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Optimize-Options.html#index-Ofast-689
    18. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfno-protect-parens_007d-270
--- 11673,11747 ----
         the DW_AT_producer attribute string in the DWARF debugging
         information.
       * GCC now supports various new GNU extensions to the DWARF debugging
!        information format, like [47]entry value and [48]call site
!        information, [49]typed DWARF stack or [50]a more compact macro
         representation. Support for these extensions has been added to GDB
         7.4. They can be disabled through the -gstrict-dwarf command-line
         option.
  
! [51]GCC 4.7.1
  
!    This is the [52]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.7.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
!    The Go front end in the 4.7.1 release fully supports the [53]Go 1
     language standard.
  
! [54]GCC 4.7.2
  
!    This is the [55]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.7.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [56]GCC 4.7.3
  
!    This is the [57]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.7.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [58]GCC 4.7.4
  
!    This is the [59]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.7.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [60]GCC manuals. If that fails, the
!     [61]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [62]gcc@gcc.gnu.org. All of [63]our lists have public
      archives.
  
!    Copyright (C) [64]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [65]maintained by the GCC team. Last modified
!    2025-02-28.
  
  References
  
     1. https://gcc.gnu.org/ml/gcc-patches/2011-03/msg01263.html
!    2. https://gcc.gnu.org/gcc-4.7/porting_to.html
!    3. https://gcc.gnu.org/wiki/TransactionalMemory
!    4. https://gcc.gnu.org/wiki/Atomic/GCCMM
!    5. https://gcc.gnu.org/gcc-4.7/changes.html#cxx
!    6. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
     7. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
     8. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
     9. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
    10. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
    11. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
!   12. https://gcc.gnu.org/PR14258
!   13. https://gcc.gnu.org/PR35688
!   14. https://gcc.gnu.org/onlinedocs/gcc-4.7.4/libstdc++/manual/manual/status.html#status.iso.2011
!   15. https://gcc.gnu.org/gcc-4.7/changes.html#fortran
    16. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfstack-arrays_007d-254
    17. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Optimize-Options.html#index-Ofast-689
    18. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfno-protect-parens_007d-270
*************** References
*** 11340,11366 ****
    31. https://gcc.gnu.org/wiki/CoarrayLib
    32. https://gcc.gnu.org/wiki/TS29113Status
    33. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Fortran-Dialect-Options.html#index-g_t_0040code_007bstd_003d_007d_0040var_007bstd_007d-option-53
!   34. https://go.dev/doc/go1
!   35. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Named-Address-Spaces.html
!   36. http://www.nongnu.org/avr-libc/
!   37. https://gcc.gnu.org/PR54461
!   38. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/AVR-Built_002din-Functions.html
!   39. https://sites.google.com/site/x32abi/
!   40. https://dwarfstd.org/issues/100909.1.html
!   41. https://dwarfstd.org/issues/100909.2.html
!   42. https://dwarfstd.org/issues/140425.1.html
!   43. https://dwarfstd.org/issues/110722.1.html
!   44. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.1
!   45. https://go.dev/doc/go1
!   46. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.2
!   47. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.3
!   48. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.4
!   49. https://gcc.gnu.org/onlinedocs/
!   50. mailto:gcc-help@gcc.gnu.org
!   51. mailto:gcc@gcc.gnu.org
!   52. https://gcc.gnu.org/lists.html
!   53. https://www.fsf.org/
!   54. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-4.6/index.html
                               GCC 4.6 Release Series
--- 11760,11797 ----
    31. https://gcc.gnu.org/wiki/CoarrayLib
    32. https://gcc.gnu.org/wiki/TS29113Status
    33. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Fortran-Dialect-Options.html#index-g_t_0040code_007bstd_003d_007d_0040var_007bstd_007d-option-53
!   34. https://gcc.gnu.org/gcc-4.7/changes.html#go
!   35. https://go.dev/doc/go1
!   36. https://gcc.gnu.org/gcc-4.7/changes.html#targets
!   37. https://gcc.gnu.org/gcc-4.7/changes.html#arm
!   38. https://gcc.gnu.org/gcc-4.7/changes.html#avr
!   39. http://savannah.nongnu.org/bugs/?35407
!   40. https://gcc.gnu.org/PR18145
!   41. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Named-Address-Spaces.html
!   42. http://www.nongnu.org/avr-libc/
!   43. https://gcc.gnu.org/PR54461
!   44. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/AVR-Built_002din-Functions.html
!   45. https://sites.google.com/site/x32abi/
!   46. https://gcc.gnu.org/gcc-4.7/changes.html#mips
!   47. https://dwarfstd.org/issues/100909.1.html
!   48. https://dwarfstd.org/issues/100909.2.html
!   49. https://dwarfstd.org/issues/140425.1.html
!   50. https://dwarfstd.org/issues/110722.1.html
!   51. https://gcc.gnu.org/gcc-4.7/changes.html#GCC4.7.1
!   52. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.1
!   53. https://go.dev/doc/go1
!   54. https://gcc.gnu.org/gcc-4.7/changes.html#GCC4.7.2
!   55. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.2
!   56. https://gcc.gnu.org/gcc-4.7/changes.html#GCC4.7.3
!   57. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.3
!   58. https://gcc.gnu.org/gcc-4.7/changes.html#GCC4.7.4
!   59. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.4
!   60. https://gcc.gnu.org/onlinedocs/
!   61. mailto:gcc-help@gcc.gnu.org
!   62. mailto:gcc@gcc.gnu.org
!   63. https://gcc.gnu.org/lists.html
!   64. https://www.fsf.org/
!   65. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-4.6/index.html
                               GCC 4.6 Release Series
*************** New Languages and Language specific impr
*** 11702,11708 ****
       * The -fmax-errors=N option is now supported. Using this option
         causes the compiler to exit after N errors have been issued.
  
!   C
  
       * There is now experimental support for some features from the
         upcoming C1X revision of the ISO C standard. This support may be
--- 12133,12139 ----
       * The -fmax-errors=N option is now supported. Using this option
         causes the compiler to exit after N errors have been issued.
  
!   [7]C
  
       * There is now experimental support for some features from the
         upcoming C1X revision of the ISO C standard. This support may be
*************** New Languages and Language specific impr
*** 11726,11734 ****
         field whose type is a typedef name may be referred to using the
         typedef name.
  
!   C++
  
!      * Improved [7]experimental support for the upcoming C++0x ISO C++
         standard, including support for constexpr (thanks to Gabriel Dos
         Reis and Jason Merrill), nullptr (thanks to Magnus Fromreide),
         noexcept, unrestricted unions, range-based for loops (thanks to
--- 12157,12165 ----
         field whose type is a typedef name may be referred to using the
         typedef name.
  
!   [8]C++
  
!      * Improved [9]experimental support for the upcoming C++0x ISO C++
         standard, including support for constexpr (thanks to Gabriel Dos
         Reis and Jason Merrill), nullptr (thanks to Magnus Fromreide),
         noexcept, unrestricted unions, range-based for loops (thanks to
*************** New Languages and Language specific impr
*** 11738,11751 ****
       * When an extern declaration within a function does not match a
         declaration in the enclosing context, G++ now properly declares the
         name within the namespace of the function rather than the namespace
!        which was open just before the function definition ([8]c++/43145).
       * GCC now warns by default when casting integers to larger pointer
         types. These warnings can be disabled with the option
         -Wno-int-to-pointer-cast, which is now also available in C++.
       * G++ no longer optimizes using the assumption that a value of
         enumeration type will fall within the range specified by the
         standard, since that assumption is easily violated with a
!        conversion from integer type ([9]c++/43680). The old behavior can
         be restored with -fstrict-enums.
       * The new -fnothrow-opt flag changes the semantics of a throw()
         exception specification to match the proposed semantics of the
--- 12169,12182 ----
       * When an extern declaration within a function does not match a
         declaration in the enclosing context, G++ now properly declares the
         name within the namespace of the function rather than the namespace
!        which was open just before the function definition ([10]c++/43145).
       * GCC now warns by default when casting integers to larger pointer
         types. These warnings can be disabled with the option
         -Wno-int-to-pointer-cast, which is now also available in C++.
       * G++ no longer optimizes using the assumption that a value of
         enumeration type will fall within the range specified by the
         standard, since that assumption is easily violated with a
!        conversion from integer type ([11]c++/43680). The old behavior can
         be restored with -fstrict-enums.
       * The new -fnothrow-opt flag changes the semantics of a throw()
         exception specification to match the proposed semantics of the
*************** New Languages and Language specific impr
*** 11768,11774 ****
         class member declarations.
       * G++ now issues clearer diagnostics when a colon is used in a place
         where a double-colon was intended.
!      * G++ no longer accepts mutable on reference members ([10]c++/33558).
         Use -fpermissive to allow the old, non-conforming behaviour.
       * A few mangling fixes have been made, to attribute const/volatile on
         function pointer types, decltype of a plain decl, and use of a
--- 12199,12205 ----
         class member declarations.
       * G++ now issues clearer diagnostics when a colon is used in a place
         where a double-colon was intended.
!      * G++ no longer accepts mutable on reference members ([12]c++/33558).
         Use -fpermissive to allow the old, non-conforming behaviour.
       * A few mangling fixes have been made, to attribute const/volatile on
         function pointer types, decltype of a plain decl, and use of a
*************** New Languages and Language specific impr
*** 11781,11787 ****
       * In 4.6.0 and 4.6.1 G++ no longer allows objects of const-qualified
         type to be default initialized unless the type has a user-declared
         default constructor. In 4.6.2 G++ implements the proposed
!        resolution of [11]DR 253, so default initialization is allowed if
         it initializes all subobjects. Code that fails to compile can be
         fixed by providing an initializer e.g.
      struct A { A(); };
--- 12212,12218 ----
       * In 4.6.0 and 4.6.1 G++ no longer allows objects of const-qualified
         type to be default initialized unless the type has a user-declared
         default constructor. In 4.6.2 G++ implements the proposed
!        resolution of [13]DR 253, so default initialization is allowed if
         it initializes all subobjects. Code that fails to compile can be
         fixed by providing an initializer e.g.
      struct A { A(); };
*************** New Languages and Language specific impr
*** 11791,11809 ****
  
      Runtime Library (libstdc++)
  
!      * [12]Improved experimental support for the upcoming ISO C++
         standard, C++0x, including using constexpr and nullptr.
!      * Performance improvements to the [13]Debug Mode, thanks to François
         Dumont.
       * Atomic operations used for reference-counting are annotated so that
         they can be understood by race detectors such as Helgrind, see
!        [14]Data Race Hunting.
       * Most libstdc++ standard headers have been changed to no longer
         include the cstddef header as an implementation detail. Code that
         relied on that header being included as side-effect of including
         other standard headers will need to include cstddef explicitly.
  
!   Fortran
  
       * On systems supporting the libquadmath library, GNU Fortran now also
         supports a quad-precision, kind=16 floating-point data type
--- 12222,12240 ----
  
      Runtime Library (libstdc++)
  
!      * [14]Improved experimental support for the upcoming ISO C++
         standard, C++0x, including using constexpr and nullptr.
!      * Performance improvements to the [15]Debug Mode, thanks to François
         Dumont.
       * Atomic operations used for reference-counting are annotated so that
         they can be understood by race detectors such as Helgrind, see
!        [16]Data Race Hunting.
       * Most libstdc++ standard headers have been changed to no longer
         include the cstddef header as an implementation detail. Code that
         relied on that header being included as side-effect of including
         other standard headers will need to include cstddef explicitly.
  
!   [17]Fortran
  
       * On systems supporting the libquadmath library, GNU Fortran now also
         supports a quad-precision, kind=16 floating-point data type
*************** New Languages and Language specific impr
*** 11821,11827 ****
       * The -fwhole-file flag is now enabled by default. This improves code
         generation and diagnostics. It can be disabled using the deprecated
         -fno-whole-file flag.
!      * Support the generation of Makefile dependencies via the [15]-M...
         flags of GCC; you may need to specify the -cpp option in addition.
         The dependencies take modules, Fortran's include, and CPP's
         #include into account. Note: Using -M for the module path is no
--- 12252,12258 ----
       * The -fwhole-file flag is now enabled by default. This improves code
         generation and diagnostics. It can be disabled using the deprecated
         -fno-whole-file flag.
!      * Support the generation of Makefile dependencies via the [18]-M...
         flags of GCC; you may need to specify the -cpp option in addition.
         The dependencies take modules, Fortran's include, and CPP's
         #include into account. Note: Using -M for the module path is no
*************** New Languages and Language specific impr
*** 11838,11844 ****
       * Fortran 2003 support has been extended:
            + Improved support for polymorphism between libraries and
              programs and for complicated inheritance patterns (cf.
!             [16]object-oriented programming).
            + Experimental support of the ASSOCIATE construct.
            + In pointer assignments it is now possible to specify the lower
              bounds of the pointer and, for a rank-1 or a simply contiguous
--- 12269,12275 ----
       * Fortran 2003 support has been extended:
            + Improved support for polymorphism between libraries and
              programs and for complicated inheritance patterns (cf.
!             [19]object-oriented programming).
            + Experimental support of the ASSOCIATE construct.
            + In pointer assignments it is now possible to specify the lower
              bounds of the pointer and, for a rank-1 or a simply contiguous
*************** New Languages and Language specific impr
*** 11855,11862 ****
            + Namelist variables with allocatable and pointer attribute and
              nonconstant length type parameter are supported.
       * Fortran 2008 support has been extended:
!           + Experimental [17]coarray support (for one image only, i.e.
!             num_images() == 1); use the [18]-fcoarray=single flag to
              enable it.
            + The STOP and the new ERROR STOP statements now support all
              constant expressions.
--- 12286,12293 ----
            + Namelist variables with allocatable and pointer attribute and
              nonconstant length type parameter are supported.
       * Fortran 2008 support has been extended:
!           + Experimental [20]coarray support (for one image only, i.e.
!             num_images() == 1); use the [21]-fcoarray=single flag to
              enable it.
            + The STOP and the new ERROR STOP statements now support all
              constant expressions.
*************** New Languages and Language specific impr
*** 11907,11913 ****
              been added in GCC 4.4; note that the transformational
              functions use a recurrence algorithm.
  
!   Go
  
     Support for the Go programming language has been added to GCC. It is
     not enabled by default when you build GCC; use the --enable-languages
--- 12338,12344 ----
              been added in GCC 4.4; note that the transformational
              functions use a recurrence algorithm.
  
!   [22]Go
  
     Support for the Go programming language has been added to GCC. It is
     not enabled by default when you build GCC; use the --enable-languages
*************** New Languages and Language specific impr
*** 11917,11923 ****
     Go is currently known to work on GNU/Linux and RTEMS. Solaris support
     is in progress. It may or may not work on other platforms.
  
!   Objective-C and Objective-C++
  
       * The -fobjc-exceptions flag is now required to enable Objective-C
         exception and synchronization syntax (introduced by the keywords
--- 12348,12354 ----
     Go is currently known to work on GNU/Linux and RTEMS. Solaris support
     is in progress. It may or may not work on other platforms.
  
!   [23]Objective-C and Objective-C++
  
       * The -fobjc-exceptions flag is now required to enable Objective-C
         exception and synchronization syntax (introduced by the keywords
*************** New Languages and Language specific impr
*** 12014,12022 ****
       * Runtime support for Objective-C 2.0 fast enumeration has been
         added.
  
! New Targets and Target Specific Improvements
  
!   ARM
  
       * GCC now supports the Cortex-M4 processor implementing the v7-em
         version of the architecture using the option -mcpu=cortex-m4.
--- 12445,12453 ----
       * Runtime support for Objective-C 2.0 fast enumeration has been
         added.
  
! [24]New Targets and Target Specific Improvements
  
!   [25]ARM
  
       * GCC now supports the Cortex-M4 processor implementing the v7-em
         version of the architecture using the option -mcpu=cortex-m4.
*************** New Targets and Target Specific Improvem
*** 12080,12086 ****
       * Support for AMD's BMI (Bit Manipulation) built-in functions and
         code generation is available via -mbmi.
  
!   MicroBlaze
  
       * Support has been added for the Xilinx MicroBlaze softcore processor
         (microblaze-elf) embedded target. This configurable processor is
--- 12511,12517 ----
       * Support for AMD's BMI (Bit Manipulation) built-in functions and
         code generation is available via -mbmi.
  
!   [26]MicroBlaze
  
       * Support has been added for the Xilinx MicroBlaze softcore processor
         (microblaze-elf) embedded target. This configurable processor is
*************** New Targets and Target Specific Improvem
*** 12091,12097 ****
       * GCC now supports the Loongson 3A processor. Its canonical -march=
         and -mtune= name is loongson3a.
  
!   MN10300 / AM33
  
       * The inline assembly register constraint "A" has been renamed "c".
         This constraint is used to select a floating-point register that
--- 12522,12528 ----
       * GCC now supports the Loongson 3A processor. Its canonical -march=
         and -mtune= name is loongson3a.
  
!   [27]MN10300 / AM33
  
       * The inline assembly register constraint "A" has been renamed "c".
         This constraint is used to select a floating-point register that
*************** New Targets and Target Specific Improvem
*** 12187,12195 ****
         documented workaround for the single erratum of the Atmel AT697F
         processor.
  
! Operating Systems
  
!   Android
  
       * GCC now supports the Bionic C library and provides a convenient way
         of building native libraries and applications for the Android
--- 12618,12626 ----
         documented workaround for the single erratum of the Atmel AT697F
         processor.
  
! [28]Operating Systems
  
!   [29]Android
  
       * GCC now supports the Bionic C library and provides a convenient way
         of building native libraries and applications for the Android
*************** Operating Systems
*** 12197,12203 ****
         options for details on building native code. At the moment, Android
         support is enabled only for ARM.
  
!   Darwin/Mac OS X
  
       * General
            + Initial support for CFString types has been added.
--- 12628,12634 ----
         options for details on building native code. At the moment, Android
         support is enabled only for ARM.
  
!   [30]Darwin/Mac OS X
  
       * General
            + Initial support for CFString types has been added.
*************** Operating Systems
*** 12242,12248 ****
            + The -fsection-anchors option is now available although,
              presently, not heavily tested.
  
!   Solaris 2
  
      New Features
  
--- 12673,12679 ----
            + The -fsection-anchors option is now available although,
              presently, not heavily tested.
  
!   [31]Solaris 2
  
      New Features
  
*************** Operating Systems
*** 12267,12273 ****
         use the new -mvect8-ret-in-mem option to remain compatible with
         previous versions of GCC and Sun Studio.
  
!   Windows x86/x86_64
  
       * Initial support for decimal floating point.
       * Support for the __thiscall calling-convention.
--- 12698,12704 ----
         use the new -mvect8-ret-in-mem option to remain compatible with
         previous versions of GCC and Sun Studio.
  
!   [32]Windows x86/x86_64
  
       * Initial support for decimal floating point.
       * Support for the __thiscall calling-convention.
*************** Changes for GCC Developers
*** 12307,12354 ****
       * The old GC allocation interface of ggc_alloc and friends was
         replaced with a type-safe alternative.
  
! GCC 4.6.1
  
!    This is the [19]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.6.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! GCC 4.6.2
  
!    This is the [20]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.6.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! GCC 4.6.3
  
!    This is the [21]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.6.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! GCC 4.6.4
  
!    This is the [22]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.6.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [23]GCC manuals. If that fails, the
!     [24]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [25]gcc@gcc.gnu.org. All of [26]our lists have public
      archives.
  
!    Copyright (C) [27]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [28]maintained by the GCC team. Last modified
!    2024-05-17.
  
  References
  
--- 12738,12785 ----
       * The old GC allocation interface of ggc_alloc and friends was
         replaced with a type-safe alternative.
  
! [33]GCC 4.6.1
  
!    This is the [34]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.6.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [35]GCC 4.6.2
  
!    This is the [36]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.6.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [37]GCC 4.6.3
  
!    This is the [38]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.6.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [39]GCC 4.6.4
  
!    This is the [40]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.6.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [41]GCC manuals. If that fails, the
!     [42]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [43]gcc@gcc.gnu.org. All of [44]our lists have public
      archives.
  
!    Copyright (C) [45]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [46]maintained by the GCC team. Last modified
!    2025-01-31.
  
  References
  
*************** References
*** 12358,12385 ****
     4. https://gcc.gnu.org/gcc-4.6/porting_to.html
     5. https://gcc.gnu.org/projects/lto/whopr.pdf
     6. https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#Warning-Options
!    7. https://gcc.gnu.org/gcc-4.6/cxx0x_status.html
!    8. https://gcc.gnu.org/PR43145
!    9. https://gcc.gnu.org/PR43680
!   10. https://gcc.gnu.org/PR33558
!   11. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#253
!   12. https://gcc.gnu.org/onlinedocs/gcc-4.6.4/libstdc++/manual/manual/status.html#status.iso.200x
!   13. https://gcc.gnu.org/onlinedocs/libstdc++/manual/debug_mode.html
!   14. https://gcc.gnu.org/onlinedocs/libstdc++/manual/debug.html#debug.races
!   15. https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html
!   16. https://gcc.gnu.org/wiki/OOP
!   17. https://gcc.gnu.org/wiki/Coarray
!   18. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfcoarray_007d-233
!   19. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.1
!   20. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.2
!   21. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.3
!   22. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.4
!   23. https://gcc.gnu.org/onlinedocs/
!   24. mailto:gcc-help@gcc.gnu.org
!   25. mailto:gcc@gcc.gnu.org
!   26. https://gcc.gnu.org/lists.html
!   27. https://www.fsf.org/
!   28. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-4.5/index.html
                               GCC 4.5 Release Series
--- 12789,12834 ----
     4. https://gcc.gnu.org/gcc-4.6/porting_to.html
     5. https://gcc.gnu.org/projects/lto/whopr.pdf
     6. https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#Warning-Options
!    7. https://gcc.gnu.org/gcc-4.6/changes.html#c
!    8. https://gcc.gnu.org/gcc-4.6/changes.html#cplusplus
!    9. https://gcc.gnu.org/gcc-4.6/cxx0x_status.html
!   10. https://gcc.gnu.org/PR43145
!   11. https://gcc.gnu.org/PR43680
!   12. https://gcc.gnu.org/PR33558
!   13. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#253
!   14. https://gcc.gnu.org/onlinedocs/gcc-4.6.4/libstdc++/manual/manual/status.html#status.iso.200x
!   15. https://gcc.gnu.org/onlinedocs/libstdc++/manual/debug_mode.html
!   16. https://gcc.gnu.org/onlinedocs/libstdc++/manual/debug.html#debug.races
!   17. https://gcc.gnu.org/gcc-4.6/changes.html#fortran
!   18. https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html
!   19. https://gcc.gnu.org/wiki/OOP
!   20. https://gcc.gnu.org/wiki/Coarray
!   21. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfcoarray_007d-233
!   22. https://gcc.gnu.org/gcc-4.6/changes.html#go
!   23. https://gcc.gnu.org/gcc-4.6/changes.html#objective-c
!   24. https://gcc.gnu.org/gcc-4.6/changes.html#targets
!   25. https://gcc.gnu.org/gcc-4.6/changes.html#arm
!   26. https://gcc.gnu.org/gcc-4.6/changes.html#microblaze
!   27. https://gcc.gnu.org/gcc-4.6/changes.html#mn10300
!   28. https://gcc.gnu.org/gcc-4.6/changes.html#os
!   29. https://gcc.gnu.org/gcc-4.6/changes.html#android
!   30. https://gcc.gnu.org/gcc-4.6/changes.html#darwin
!   31. https://gcc.gnu.org/gcc-4.6/changes.html#solaris
!   32. https://gcc.gnu.org/gcc-4.6/changes.html#windows
!   33. https://gcc.gnu.org/gcc-4.6/changes.html#GCC4.6.1
!   34. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.1
!   35. https://gcc.gnu.org/gcc-4.6/changes.html#GCC4.6.2
!   36. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.2
!   37. https://gcc.gnu.org/gcc-4.6/changes.html#GCC4.6.3
!   38. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.3
!   39. https://gcc.gnu.org/gcc-4.6/changes.html#GCC4.6.4
!   40. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.4
!   41. https://gcc.gnu.org/onlinedocs/
!   42. mailto:gcc-help@gcc.gnu.org
!   43. mailto:gcc@gcc.gnu.org
!   44. https://gcc.gnu.org/lists.html
!   45. https://www.fsf.org/
!   46. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-4.5/index.html
                               GCC 4.5 Release Series
*************** New Languages and Language specific impr
*** 12671,12679 ****
         supported. This is currently only implemented for the SPU
         processor.
  
!   C++
  
!      * Improved [11]experimental support for the upcoming C++0x ISO C++
         standard, including support for raw strings, lambda expressions and
         explicit type conversion operators.
       * When printing the name of a class template specialization, G++ will
--- 13120,13128 ----
         supported. This is currently only implemented for the SPU
         processor.
  
!   [11]C++
  
!      * Improved [12]experimental support for the upcoming C++0x ISO C++
         standard, including support for raw strings, lambda expressions and
         explicit type conversion operators.
       * When printing the name of a class template specialization, G++ will
*************** New Languages and Language specific impr
*** 12701,12713 ****
       * In C++0x mode local and anonymous classes are now allowed as
         template arguments, and in declarations of variables and functions
         with linkage, so long as any such declaration that is used is also
!        defined ([12]DR 757).
       * Labels may now have attributes, as has been permitted for a while
         in C. This is only permitted when the label definition and the
         attribute specifier is followed by a semicolon—i.e., the label
         applies to an empty statement. The only useful attribute for a
         label is unused.
!      * G++ now implements [13]DR 176. Previously G++ did not support using
         the injected-class-name of a template base class as a type name,
         and lookup of the name found the declaration of the template in the
         enclosing scope. Now lookup of the name finds the
--- 13150,13162 ----
       * In C++0x mode local and anonymous classes are now allowed as
         template arguments, and in declarations of variables and functions
         with linkage, so long as any such declaration that is used is also
!        defined ([13]DR 757).
       * Labels may now have attributes, as has been permitted for a while
         in C. This is only permitted when the label definition and the
         attribute specifier is followed by a semicolon—i.e., the label
         applies to an empty statement. The only useful attribute for a
         label is unused.
!      * G++ now implements [14]DR 176. Previously G++ did not support using
         the injected-class-name of a template base class as a type name,
         and lookup of the name found the declaration of the template in the
         enclosing scope. Now lookup of the name finds the
*************** New Languages and Language specific impr
*** 12745,12751 ****
            + Existing facilities now exploit explicit operators and the
              newly implemented core C++0x features.
            + The header <cstdatomic> has been renamed to <atomic>.
!      * An experimental [14]profile mode has been added. This is an
         implementation of many C++ standard library constructs with an
         additional analysis layer that gives performance improvement advice
         based on recognition of suboptimal usage patterns. For example,
--- 13194,13200 ----
            + Existing facilities now exploit explicit operators and the
              newly implemented core C++0x features.
            + The header <cstdatomic> has been renamed to <atomic>.
!      * An experimental [15]profile mode has been added. This is an
         implementation of many C++ standard library constructs with an
         additional analysis layer that gives performance improvement advice
         based on recognition of suboptimal usage patterns. For example,
*************** vector-size: improvement = 3: call stack
*** 12767,12773 ****
         These constructs can be substituted for the normal libstdc++
         constructs on a piecemeal basis, or all existing components can be
         transformed via the -D_GLIBCXX_PROFILE macro.
!      * [15]Support for decimal floating-point arithmetic (aka ISO C++ TR
         24733) has been added. This support is in header file
         <decimal/decimal>, uses namespace std::decimal, and includes
         classes decimal32, decimal64, and decimal128.
--- 13216,13222 ----
         These constructs can be substituted for the normal libstdc++
         constructs on a piecemeal basis, or all existing components can be
         transformed via the -D_GLIBCXX_PROFILE macro.
!      * [16]Support for decimal floating-point arithmetic (aka ISO C++ TR
         24733) has been added. This support is in header file
         <decimal/decimal>, uses namespace std::decimal, and includes
         classes decimal32, decimal64, and decimal128.
*************** vector-size: improvement = 3: call stack
*** 12777,12796 ****
         components that simplify the internal representation and present a
         more intuitive view of components when used with
         appropriately-advanced versions of GDB. For more information,
!        please consult the more [16]detailed description.
       * The default behavior for comparing typeinfo names has changed, so
         in <typeinfo>, __GXX_MERGED_TYPEINFO_NAMES now defaults to zero.
       * The new -static-libstdc++ option directs g++ to link the C++
         library statically, even if the default would normally be to link
         it dynamically.
  
!   Fortran
  
       * The COMMON default padding has been changed – instead of adding the
         padding before a variable it is now added afterwards, which
         increases the compatibility with other vendors and helps to obtain
         the correct output in some cases. Cf. also the -falign-commons
!        option ([17]added in 4.4).
       * The -finit-real= option now also supports the value snan for
         signaling not-a-number; to be effective, one additionally needs to
         enable trapping (e.g. via -ffpe-trap=). Note: Compile-time
--- 13226,13245 ----
         components that simplify the internal representation and present a
         more intuitive view of components when used with
         appropriately-advanced versions of GDB. For more information,
!        please consult the more [17]detailed description.
       * The default behavior for comparing typeinfo names has changed, so
         in <typeinfo>, __GXX_MERGED_TYPEINFO_NAMES now defaults to zero.
       * The new -static-libstdc++ option directs g++ to link the C++
         library statically, even if the default would normally be to link
         it dynamically.
  
!   [18]Fortran
  
       * The COMMON default padding has been changed – instead of adding the
         padding before a variable it is now added afterwards, which
         increases the compatibility with other vendors and helps to obtain
         the correct output in some cases. Cf. also the -falign-commons
!        option ([19]added in 4.4).
       * The -finit-real= option now also supports the value snan for
         signaling not-a-number; to be effective, one additionally needs to
         enable trapping (e.g. via -ffpe-trap=). Note: Compile-time
*************** vector-size: improvement = 3: call stack
*** 12808,12814 ****
       * The run-time checking -fcheck=bounds now warns about invalid string
         lengths of character dummy arguments. Additionally, more
         compile-time checks have been added.
!      * The new option [18]-fno-protect-parens has been added; if set, the
         compiler may reorder REAL and COMPLEX expressions without regard to
         parentheses.
       * GNU Fortran no longer links against libgfortranbegin. As before,
--- 13257,13263 ----
       * The run-time checking -fcheck=bounds now warns about invalid string
         lengths of character dummy arguments. Additionally, more
         compile-time checks have been added.
!      * The new option [20]-fno-protect-parens has been added; if set, the
         compiler may reorder REAL and COMPLEX expressions without regard to
         parentheses.
       * GNU Fortran no longer links against libgfortranbegin. As before,
*************** vector-size: improvement = 3: call stack
*** 12816,12822 ****
         which is invoked by the main function. However, main is now
         generated and put in the same object file as MAIN__. For the time
         being, libgfortranbegin still exists for backward compatibility.
!        For details see the new [19]Mixed-Language Programming chapter in
         the manual.
       * The I/O library was restructured for performance and cleaner code.
       * Array assignments and WHERE are now run in parallel when OpenMP's
--- 13265,13271 ----
         which is invoked by the main function. However, main is now
         generated and put in the same object file as MAIN__. For the time
         being, libgfortranbegin still exists for backward compatibility.
!        For details see the new [21]Mixed-Language Programming chapter in
         the manual.
       * The I/O library was restructured for performance and cleaner code.
       * Array assignments and WHERE are now run in parallel when OpenMP's
*************** vector-size: improvement = 3: call stack
*** 12828,12834 ****
       * More Fortran 2003 and Fortran 2008 mathematical functions can now
         be used as initialization expressions.
       * Some extended attributes such as STDCALL are now supported via the
!        [20]GCC$ compiler directive.
       * For Fortran 77 compatibility: If -fno-sign-zero is used, the SIGN
         intrinsic behaves now as if zero were always positive.
       * For legacy compatibiliy: On Cygwin and MinGW, the special files
--- 13277,13283 ----
       * More Fortran 2003 and Fortran 2008 mathematical functions can now
         be used as initialization expressions.
       * Some extended attributes such as STDCALL are now supported via the
!        [22]GCC$ compiler directive.
       * For Fortran 77 compatibility: If -fno-sign-zero is used, the SIGN
         intrinsic behaves now as if zero were always positive.
       * For legacy compatibiliy: On Cygwin and MinGW, the special files
*************** vector-size: improvement = 3: call stack
*** 12854,12860 ****
              procedure pointer with PASS attribute now have to use CLASS in
              line with the Fortran 2003 standard; the workaround to use
              TYPE is no longer supported.
!           + [21]Experimental, incomplete support for polymorphism,
              including CLASS, SELECT TYPE and dynamic dispatch of
              type-bound procedure calls. Some features do not work yet such
              as unlimited polymorphism (CLASS(*)).
--- 13303,13309 ----
              procedure pointer with PASS attribute now have to use CLASS in
              line with the Fortran 2003 standard; the workaround to use
              TYPE is no longer supported.
!           + [23]Experimental, incomplete support for polymorphism,
              including CLASS, SELECT TYPE and dynamic dispatch of
              type-bound procedure calls. Some features do not work yet such
              as unlimited polymorphism (CLASS(*)).
*************** vector-size: improvement = 3: call stack
*** 12871,12877 ****
              ATAN(Y,X) is now an alias for ATAN2(Y,X).
            + The BLOCK construct has been implemented.
  
! New Targets and Target Specific Improvements
  
    AIX
  
--- 13320,13326 ----
              ATAN(Y,X) is now an alias for ATAN2(Y,X).
            + The BLOCK construct has been implemented.
  
! [24]New Targets and Target Specific Improvements
  
    AIX
  
*************** New Targets and Target Specific Improvem
*** 12902,12908 ****
            + ATmega16U2
            + ATmega32U2
  
!   IA-32/x86-64
  
       * GCC now will set the default for -march= based on the configure
         target.
--- 13351,13357 ----
            + ATmega16U2
            + ATmega32U2
  
!   [25]IA-32/x86-64
  
       * GCC now will set the default for -march= based on the configure
         target.
*************** New Targets and Target Specific Improvem
*** 12936,12942 ****
       * GCC now supports thread-local storage (TLS) on M68K and ColdFire
         processors.
  
!   MeP
  
     Support has been added for the Toshiba Media embedded Processor (MeP,
     or mep-elf) embedded target.
--- 13385,13391 ----
       * GCC now supports thread-local storage (TLS) on M68K and ColdFire
         processors.
  
!   [26]MeP
  
     Support has been added for the Toshiba Media embedded Processor (MeP,
     or mep-elf) embedded target.
*************** New Targets and Target Specific Improvem
*** 12974,12980 ****
         use_debug_exception_return. See the documentation for more details
         about these attributes.
  
!   RS/6000 (POWER/PowerPC)
  
       * GCC now supports the Power ISA 2.06, which includes the VSX
         instructions that add vector 64-bit floating point support, new
--- 13423,13429 ----
         use_debug_exception_return. See the documentation for more details
         about these attributes.
  
!   [27]RS/6000 (POWER/PowerPC)
  
       * GCC now supports the Power ISA 2.06, which includes the VSX
         instructions that add vector 64-bit floating point support, new
*************** New Targets and Target Specific Improvem
*** 12999,13011 ****
         adhere to the ABI for 128-bit vectors with 64-bit integer base
         types (PR 48857). This is also fixed in the GCC 4.6.1 release.
  
!   RX
  
     Support has been added for the Renesas RX Processor (rx-elf) target.
  
! Operating Systems
  
!   Windows (Cygwin and MinGW)
  
       * GCC now installs all the major language runtime libraries as DLLs
         when configured with the --enable-shared option.
--- 13448,13460 ----
         adhere to the ABI for 128-bit vectors with 64-bit integer base
         types (PR 48857). This is also fixed in the GCC 4.6.1 release.
  
!   [28]RX
  
     Support has been added for the Renesas RX Processor (rx-elf) target.
  
! [29]Operating Systems
  
!   [30]Windows (Cygwin and MinGW)
  
       * GCC now installs all the major language runtime libraries as DLLs
         when configured with the --enable-shared option.
*************** Other significant improvements
*** 13054,13069 ****
         infodir info documentation [DATAROOTDIR/info]
         mandir  man documentation [DATAROOTDIR/man]
  
! GCC 4.5.1
  
!    This is the [22]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.5.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
    All languages
  
!      * GCC's new link-time optimizer ([23]-flto) now also works on a few
         non-ELF targets:
            + Cygwin (*-cygwin*)
            + MinGW (*-mingw*)
--- 13503,13518 ----
         infodir info documentation [DATAROOTDIR/info]
         mandir  man documentation [DATAROOTDIR/man]
  
! [31]GCC 4.5.1
  
!    This is the [32]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.5.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
    All languages
  
!      * GCC's new link-time optimizer ([33]-flto) now also works on a few
         non-ELF targets:
            + Cygwin (*-cygwin*)
            + MinGW (*-mingw*)
*************** GCC 4.5.1
*** 13071,13086 ****
         LTO is not enabled by default for these targets. To enable LTO, you
         should configure with the --enable-lto option.
  
! GCC 4.5.2
  
!    This is the [24]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.5.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! GCC 4.5.3
  
!    This is the [25]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.5.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
--- 13520,13535 ----
         LTO is not enabled by default for these targets. To enable LTO, you
         should configure with the --enable-lto option.
  
! [34]GCC 4.5.2
  
!    This is the [35]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.5.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [36]GCC 4.5.3
  
!    This is the [37]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.5.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
*************** GCC 4.5.3
*** 13095,13121 ****
     vec_vsx_ld and vec_vsx_st which always generates the VSX memory
     instructions.
  
! GCC 4.5.4
  
!    This is the [26]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.5.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [27]GCC manuals. If that fails, the
!     [28]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [29]gcc@gcc.gnu.org. All of [30]our lists have public
      archives.
  
!    Copyright (C) [31]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [32]maintained by the GCC team. Last modified
!    2023-07-30.
  
  References
  
--- 13544,13570 ----
     vec_vsx_ld and vec_vsx_st which always generates the VSX memory
     instructions.
  
! [38]GCC 4.5.4
  
!    This is the [39]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.5.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [40]GCC manuals. If that fails, the
!     [41]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [42]gcc@gcc.gnu.org. All of [43]our lists have public
      archives.
  
!    Copyright (C) [44]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [45]maintained by the GCC team. Last modified
!    2025-01-31.
  
  References
  
*************** References
*** 13129,13156 ****
     8. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-fwhopr-802
     9. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-fwhole-program-800
    10. https://gcc.gnu.org/onlinedocs/gcc/Restricted-Pointers.html
!   11. https://gcc.gnu.org/gcc-4.5/cxx0x_status.html
!   12. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#757
!   13. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#176
!   14. https://gcc.gnu.org/onlinedocs/libstdc++/manual/profile_mode.html
!   15. https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.tr24733
!   16. https://sourceware.org/gdb/wiki/STLSupport
!   17. https://gcc.gnu.org/gcc-4.4/changes.html
!   18. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html
!   19. https://gcc.gnu.org/onlinedocs/gfortran/Mixed-Language-Programming.html
!   20. https://gcc.gnu.org/onlinedocs/gfortran/GNU-Fortran-Compiler-Directives.html
!   21. https://gcc.gnu.org/wiki/OOP
!   22. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.1
!   23. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-flto-801
!   24. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.2
!   25. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.3
!   26. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.4
!   27. https://gcc.gnu.org/onlinedocs/
!   28. mailto:gcc-help@gcc.gnu.org
!   29. mailto:gcc@gcc.gnu.org
!   30. https://gcc.gnu.org/lists.html
!   31. https://www.fsf.org/
!   32. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-4.4/index.html
                               GCC 4.4 Release Series
--- 13578,13618 ----
     8. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-fwhopr-802
     9. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-fwhole-program-800
    10. https://gcc.gnu.org/onlinedocs/gcc/Restricted-Pointers.html
!   11. https://gcc.gnu.org/gcc-4.5/changes.html#cplusplus
!   12. https://gcc.gnu.org/gcc-4.5/cxx0x_status.html
!   13. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#757
!   14. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#176
!   15. https://gcc.gnu.org/onlinedocs/libstdc++/manual/profile_mode.html
!   16. https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.tr24733
!   17. https://sourceware.org/gdb/wiki/STLSupport
!   18. https://gcc.gnu.org/gcc-4.5/changes.html#Fortran
!   19. https://gcc.gnu.org/gcc-4.4/changes.html
!   20. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html
!   21. https://gcc.gnu.org/onlinedocs/gfortran/Mixed-Language-Programming.html
!   22. https://gcc.gnu.org/onlinedocs/gfortran/GNU-Fortran-Compiler-Directives.html
!   23. https://gcc.gnu.org/wiki/OOP
!   24. https://gcc.gnu.org/gcc-4.5/changes.html#targets
!   25. https://gcc.gnu.org/gcc-4.5/changes.html#x86
!   26. https://gcc.gnu.org/gcc-4.5/changes.html#mep
!   27. https://gcc.gnu.org/gcc-4.5/changes.html#rs6000
!   28. https://gcc.gnu.org/gcc-4.5/changes.html#rx
!   29. https://gcc.gnu.org/gcc-4.5/changes.html#os
!   30. https://gcc.gnu.org/gcc-4.5/changes.html#windows
!   31. https://gcc.gnu.org/gcc-4.5/changes.html#GCC4.5.1
!   32. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.1
!   33. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-flto-801
!   34. https://gcc.gnu.org/gcc-4.5/changes.html#GCC4.5.2
!   35. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.2
!   36. https://gcc.gnu.org/gcc-4.5/changes.html#GCC4.5.3
!   37. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.3
!   38. https://gcc.gnu.org/gcc-4.5/changes.html#GCC4.5.4
!   39. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.4
!   40. https://gcc.gnu.org/onlinedocs/
!   41. mailto:gcc-help@gcc.gnu.org
!   42. mailto:gcc@gcc.gnu.org
!   43. https://gcc.gnu.org/lists.html
!   44. https://www.fsf.org/
!   45. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-4.4/index.html
                               GCC 4.4 Release Series
*************** New Languages and Language specific impr
*** 13597,13603 ****
       * The Ada runtime now supports multilibs on many platforms including
         x86_64, SPARC and PowerPC. Their build is enabled by default.
  
! New Targets and Target Specific Improvements
  
    ARM
  
--- 14059,14065 ----
       * The Ada runtime now supports multilibs on many platforms including
         x86_64, SPARC and PowerPC. Their build is enabled by default.
  
! [11]New Targets and Target Specific Improvements
  
    ARM
  
*************** New Targets and Target Specific Improvem
*** 13753,13759 ****
         canonical -march= and -mtune= names for these processors are
         loongson2e and loongson2f.
  
!   picochip
  
     Picochip is a 16-bit processor. A typical picoChip contains over 250
     small cores, each with small amounts of memory. There are three
--- 14215,14221 ----
         canonical -march= and -mtune= names for these processors are
         loongson2e and loongson2f.
  
!   [12]picochip
  
     Picochip is a 16-bit processor. A typical picoChip contains over 250
     small cores, each with small amounts of memory. There are three
*************** Documentation improvements
*** 13791,13859 ****
  
  Other significant improvements
  
! GCC 4.4.1
  
!    This is the [11]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.4.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! GCC 4.4.2
  
!    This is the [12]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.4.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! GCC 4.4.3
  
!    This is the [13]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.4.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! GCC 4.4.4
  
!    This is the [14]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.4.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! GCC 4.4.5
  
!    This is the [15]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.4.5 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! GCC 4.4.6
  
!    This is the [16]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.4.6 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! GCC 4.4.7
  
!    This is the [17]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.4.7 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [18]GCC manuals. If that fails, the
!     [19]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [20]gcc@gcc.gnu.org. All of [21]our lists have public
      archives.
  
!    Copyright (C) [22]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [23]maintained by the GCC team. Last modified
!    2022-11-01.
  
  References
  
--- 14253,14321 ----
  
  Other significant improvements
  
! [13]GCC 4.4.1
  
!    This is the [14]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.4.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [15]GCC 4.4.2
  
!    This is the [16]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.4.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [17]GCC 4.4.3
  
!    This is the [18]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.4.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [19]GCC 4.4.4
  
!    This is the [20]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.4.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [21]GCC 4.4.5
  
!    This is the [22]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.4.5 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [23]GCC 4.4.6
  
!    This is the [24]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.4.6 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [25]GCC 4.4.7
  
!    This is the [26]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.4.7 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [27]GCC manuals. If that fails, the
!     [28]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [29]gcc@gcc.gnu.org. All of [30]our lists have public
      archives.
  
!    Copyright (C) [31]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [32]maintained by the GCC team. Last modified
!    2025-01-31.
  
  References
  
*************** References
*** 13867,13885 ****
     8. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html#index-g_t_0040code_007bWarray-temporaries_007d-125
     9. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfcheck-array-temporaries_007d-221
    10. https://gcc.gnu.org/onlinedocs/gfortran/Fortran-Dialect-Options.html#index-g_t_0040code_007bbackslash_007d-34
!   11. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.1
!   12. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.2
!   13. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.3
!   14. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.4
!   15. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.5
!   16. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.6
!   17. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.7
!   18. https://gcc.gnu.org/onlinedocs/
!   19. mailto:gcc-help@gcc.gnu.org
!   20. mailto:gcc@gcc.gnu.org
!   21. https://gcc.gnu.org/lists.html
!   22. https://www.fsf.org/
!   23. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-4.3/index.html
                               GCC 4.3 Release Series
--- 14329,14356 ----
     8. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html#index-g_t_0040code_007bWarray-temporaries_007d-125
     9. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfcheck-array-temporaries_007d-221
    10. https://gcc.gnu.org/onlinedocs/gfortran/Fortran-Dialect-Options.html#index-g_t_0040code_007bbackslash_007d-34
!   11. https://gcc.gnu.org/gcc-4.4/changes.html#targets
!   12. https://gcc.gnu.org/gcc-4.4/changes.html#picochip
!   13. https://gcc.gnu.org/gcc-4.4/changes.html#GCC4.4.1
!   14. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.1
!   15. https://gcc.gnu.org/gcc-4.4/changes.html#GCC4.4.2
!   16. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.2
!   17. https://gcc.gnu.org/gcc-4.4/changes.html#GCC4.4.3
!   18. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.3
!   19. https://gcc.gnu.org/gcc-4.4/changes.html#GCC4.4.4
!   20. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.4
!   21. https://gcc.gnu.org/gcc-4.4/changes.html#GCC4.4.5
!   22. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.5
!   23. https://gcc.gnu.org/gcc-4.4/changes.html#GCC4.4.6
!   24. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.6
!   25. https://gcc.gnu.org/gcc-4.4/changes.html#GCC4.4.7
!   26. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.7
!   27. https://gcc.gnu.org/onlinedocs/
!   28. mailto:gcc-help@gcc.gnu.org
!   29. mailto:gcc@gcc.gnu.org
!   30. https://gcc.gnu.org/lists.html
!   31. https://www.fsf.org/
!   32. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-4.3/index.html
                               GCC 4.3 Release Series
*************** New Languages and Language specific impr
*** 14328,14334 ****
         packagers no longer have to update libgcj when a time zone change
         is published.
  
! New Targets and Target Specific Improvements
  
    IA-32/x86-64
  
--- 14799,14805 ----
         packagers no longer have to update libgcj when a time zone change
         is published.
  
! [18]New Targets and Target Specific Improvements
  
    IA-32/x86-64
  
*************** New Targets and Target Specific Improvem
*** 14381,14387 ****
       * Compiler and Library support for Thumb-2 and the ARMv7 architecture
         has been added.
  
!   CRIS
  
      New features
  
--- 14852,14858 ----
       * Compiler and Library support for Thumb-2 and the ARMv7 architecture
         has been added.
  
!   [19]CRIS
  
      New features
  
*************** New Targets and Target Specific Improvem
*** 14405,14411 ****
       * __builtin_bswap32 is now implemented using the swapwb instruction,
         when available.
  
!   m68k and ColdFire
  
      New features
  
--- 14876,14882 ----
       * __builtin_bswap32 is now implemented using the swapwb instruction,
         when available.
  
!   [20]m68k and ColdFire
  
      New features
  
*************** Documentation improvements
*** 14650,14656 ****
  
       * Existing libstdc++ documentation has been edited and restructured
         into a single DocBook XML manual. The results can be viewed online
!        [18]here.
  
  Other significant improvements
  
--- 15121,15127 ----
  
       * Existing libstdc++ documentation has been edited and restructured
         into a single DocBook XML manual. The results can be viewed online
!        [21]here.
  
  Other significant improvements
  
*************** Other significant improvements
*** 14680,14688 ****
         distributor-specific string in manuals and --version output and to
         specify the URL for reporting bugs in their versions of GCC.
  
! GCC 4.3.1
  
!    This is the [19]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.3.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
--- 15151,15159 ----
         distributor-specific string in manuals and --version output and to
         specify the URL for reporting bugs in their versions of GCC.
  
! [22]GCC 4.3.1
  
!    This is the [23]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.3.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
*************** Target Specific Changes
*** 14706,14760 ****
         by default for 32-bit x86 targets by configuring GCC with the
         --enable-cld configure option.
  
! GCC 4.3.2
  
!    This is the [20]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.3.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! GCC 4.3.3
  
!    This is the [21]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.3.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! GCC 4.3.4
  
!    This is the [22]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.3.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! GCC 4.3.5
  
!    This is the [23]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.3.5 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! GCC 4.3.6
  
!    This is the [24]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.3.6 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [25]GCC manuals. If that fails, the
!     [26]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [27]gcc@gcc.gnu.org. All of [28]our lists have public
      archives.
  
!    Copyright (C) [29]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [30]maintained by the GCC team. Last modified
!    2022-10-26.
  
  References
  
--- 15177,15231 ----
         by default for 32-bit x86 targets by configuring GCC with the
         --enable-cld configure option.
  
! [24]GCC 4.3.2
  
!    This is the [25]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.3.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [26]GCC 4.3.3
  
!    This is the [27]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.3.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [28]GCC 4.3.4
  
!    This is the [29]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.3.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [30]GCC 4.3.5
  
!    This is the [31]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.3.5 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [32]GCC 4.3.6
  
!    This is the [33]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.3.6 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [34]GCC manuals. If that fails, the
!     [35]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [36]gcc@gcc.gnu.org. All of [37]our lists have public
      archives.
  
!    Copyright (C) [38]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [39]maintained by the GCC team. Last modified
!    2025-01-31.
  
  References
  
*************** References
*** 14775,14793 ****
    15. https://gcc.gnu.org/onlinedocs/gcc-4.3.0/gfortran/LGAMMA.html
    16. https://gcc.gnu.org/onlinedocs/gfortran/Fortran-Dialect-Options.html
    17. https://gcc.gnu.org/onlinedocs/gfortran/BOZ-literal-constants.html
!   18. https://gcc.gnu.org/onlinedocs/libstdc++/
!   19. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.1
!   20. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.2
!   21. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.3
!   22. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.4
!   23. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.5
!   24. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.6
!   25. https://gcc.gnu.org/onlinedocs/
!   26. mailto:gcc-help@gcc.gnu.org
!   27. mailto:gcc@gcc.gnu.org
!   28. https://gcc.gnu.org/lists.html
!   29. https://www.fsf.org/
!   30. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-4.2/index.html
                               GCC 4.2 Release Series
--- 15246,15273 ----
    15. https://gcc.gnu.org/onlinedocs/gcc-4.3.0/gfortran/LGAMMA.html
    16. https://gcc.gnu.org/onlinedocs/gfortran/Fortran-Dialect-Options.html
    17. https://gcc.gnu.org/onlinedocs/gfortran/BOZ-literal-constants.html
!   18. https://gcc.gnu.org/gcc-4.3/changes.html#targets
!   19. https://gcc.gnu.org/gcc-4.3/changes.html#cris
!   20. https://gcc.gnu.org/gcc-4.3/changes.html#m68k
!   21. https://gcc.gnu.org/onlinedocs/libstdc++/
!   22. https://gcc.gnu.org/gcc-4.3/changes.html#GCC4.3.1
!   23. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.1
!   24. https://gcc.gnu.org/gcc-4.3/changes.html#GCC4.3.2
!   25. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.2
!   26. https://gcc.gnu.org/gcc-4.3/changes.html#GCC4.3.3
!   27. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.3
!   28. https://gcc.gnu.org/gcc-4.3/changes.html#GCC4.3.4
!   29. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.4
!   30. https://gcc.gnu.org/gcc-4.3/changes.html#GCC4.3.5
!   31. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.5
!   32. https://gcc.gnu.org/gcc-4.3/changes.html#GCC4.3.6
!   33. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.6
!   34. https://gcc.gnu.org/onlinedocs/
!   35. mailto:gcc-help@gcc.gnu.org
!   36. mailto:gcc@gcc.gnu.org
!   37. https://gcc.gnu.org/lists.html
!   38. https://www.fsf.org/
!   39. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-4.2/index.html
                               GCC 4.2 Release Series
*************** New Languages and Language specific impr
*** 15070,15076 ****
         script that is based on InfoZIP and provides the same functionality
         as fastjar.
  
! New Targets and Target Specific Improvements
  
    IA-32/x86-64
  
--- 15550,15556 ----
         script that is based on InfoZIP and provides the same functionality
         as fastjar.
  
! [6]New Targets and Target Specific Improvements
  
    IA-32/x86-64
  
*************** New Targets and Target Specific Improvem
*** 15119,15125 ****
       * Added Java language support (libffi and libjava) for 32-bit HP-UX
         11 target.
  
! Obsolete Systems
  
  Documentation improvements
  
--- 15599,15605 ----
       * Added Java language support (libffi and libjava) for 32-bit HP-UX
         11 target.
  
! [7]Obsolete Systems
  
  Documentation improvements
  
*************** Other significant improvements
*** 15169,15185 ****
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [6]GCC manuals. If that fails, the
!     [7]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [8]gcc@gcc.gnu.org. All of [9]our lists have public archives.
  
!    Copyright (C) [10]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [11]maintained by the GCC team. Last modified
!    2022-10-26.
  
  References
  
--- 15649,15666 ----
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [8]GCC manuals. If that fails, the
!     [9]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [10]gcc@gcc.gnu.org. All of [11]our lists have public
!     archives.
  
!    Copyright (C) [12]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [13]maintained by the GCC team. Last modified
!    2025-01-31.
  
  References
  
*************** References
*** 15188,15199 ****
     3. https://gcc.gnu.org/onlinedocs/libstdc++/ext/pb_ds/index.html
     4. https://gcc.gnu.org/onlinedocs/gfortran/Runtime-Options.html
     5. https://gcc.gnu.org/wiki/Statically_linking_libgcj
!    6. https://gcc.gnu.org/onlinedocs/
!    7. mailto:gcc-help@gcc.gnu.org
!    8. mailto:gcc@gcc.gnu.org
!    9. https://gcc.gnu.org/lists.html
!   10. https://www.fsf.org/
!   11. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-4.1/index.html
                               GCC 4.1 Release Series
--- 15669,15682 ----
     3. https://gcc.gnu.org/onlinedocs/libstdc++/ext/pb_ds/index.html
     4. https://gcc.gnu.org/onlinedocs/gfortran/Runtime-Options.html
     5. https://gcc.gnu.org/wiki/Statically_linking_libgcj
!    6. https://gcc.gnu.org/gcc-4.2/changes.html#targets
!    7. https://gcc.gnu.org/gcc-4.2/changes.html#obsolete_systems
!    8. https://gcc.gnu.org/onlinedocs/
!    9. mailto:gcc-help@gcc.gnu.org
!   10. mailto:gcc@gcc.gnu.org
!   11. https://gcc.gnu.org/lists.html
!   12. https://www.fsf.org/
!   13. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-4.1/index.html
                               GCC 4.1 Release Series
*************** New Languages and Language specific impr
*** 15405,15411 ****
         infrastructure of GCC. This should make doing cross builds of Ada a
         bit easier.
  
!   C++
  
       * ARM-style name-injection of friend declarations is no longer the
         default. For example:
--- 15888,15894 ----
         infrastructure of GCC. This should make doing cross builds of Ada a
         bit easier.
  
!   [2]C++
  
       * ARM-style name-injection of friend declarations is no longer the
         default. For example:
*************** New Languages and Language specific impr
*** 15660,15666 ****
                   most of the work is currently being done around gcj/gij
                   we want this framework to be as VM neutral as possible.
                   Early design is described in:
!                  [2]https://gcc.gnu.org/ml/java/2005-05/msg00260.html
                 o QT4 AWT peers, enable by giving configure
                   --enable-qt-peer. Included, but not ready for production
                   yet. They are explicitly disabled and not supported. But
--- 16143,16149 ----
                   most of the work is currently being done around gcj/gij
                   we want this framework to be as VM neutral as possible.
                   Early design is described in:
!                  [3]https://gcc.gnu.org/ml/java/2005-05/msg00260.html
                 o QT4 AWT peers, enable by giving configure
                   --enable-qt-peer. Included, but not ready for production
                   yet. They are explicitly disabled and not supported. But
*************** New Languages and Language specific impr
*** 15669,15677 ****
                   explicitly enable them to try them out (and they will
                   most likely contain bugs).
                 o Documentation fixes all over the place. See
!                  [3]https://developer.classpath.org/doc/
  
! New Targets and Target Specific Improvements
  
    IA-32/x86-64
  
--- 16152,16160 ----
                   explicitly enable them to try them out (and they will
                   most likely contain bugs).
                 o Documentation fixes all over the place. See
!                  [4]https://developer.classpath.org/doc/
  
! [5]New Targets and Target Specific Improvements
  
    IA-32/x86-64
  
*************** New Targets and Target Specific Improvem
*** 15738,15744 ****
              instructions implicitly truncate the shift count to six bits.
       * Back-end support for the following generic features has been
         implemented:
!           + The full set of [4]built-in functions for atomic memory
              access.
            + The -fstack-protector feature.
            + The optimization pass avoiding unnecessary stores of incoming
--- 16221,16227 ----
              instructions implicitly truncate the shift count to six bits.
       * Back-end support for the following generic features has been
         implemented:
!           + The full set of [6]built-in functions for atomic memory
              access.
            + The -fstack-protector feature.
            + The optimization pass avoiding unnecessary stores of incoming
*************** New Targets and Target Specific Improvem
*** 15756,15762 ****
  
       * Support has been added for this new architecture.
  
! Obsolete Systems
  
  Documentation improvements
  
--- 16239,16245 ----
  
       * Support has been added for this new architecture.
  
! [7]Obsolete Systems
  
  Documentation improvements
  
*************** Other significant improvements
*** 15772,15780 ****
         have far smaller overhead. This means that programs built using
         safe builtins should not experience any measurable slowdown.
  
! GCC 4.1.2
  
!    This is the [5]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.1.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
--- 16255,16263 ----
         have far smaller overhead. This means that programs built using
         safe builtins should not experience any measurable slowdown.
  
! [8]GCC 4.1.2
  
!    This is the [9]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.1.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
*************** GCC 4.1.2
*** 15800,15830 ****
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [6]GCC manuals. If that fails, the
!     [7]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [8]gcc@gcc.gnu.org. All of [9]our lists have public archives.
  
!    Copyright (C) [10]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [11]maintained by the GCC team. Last modified
!    2022-10-26.
  
  References
  
     1. https://gcc.gnu.org/gcc-4.1/changes.html#4.1.2
!    2. https://gcc.gnu.org/ml/java/2005-05/msg00260.html
!    3. https://developer.classpath.org/doc/
!    4. https://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html
!    5. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.1.2
!    6. https://gcc.gnu.org/onlinedocs/
!    7. mailto:gcc-help@gcc.gnu.org
!    8. mailto:gcc@gcc.gnu.org
!    9. https://gcc.gnu.org/lists.html
!   10. https://www.fsf.org/
!   11. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-4.0/index.html
                               GCC 4.0 Release Series
--- 16283,16318 ----
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [10]GCC manuals. If that fails, the
!     [11]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [12]gcc@gcc.gnu.org. All of [13]our lists have public
!     archives.
  
!    Copyright (C) [14]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [15]maintained by the GCC team. Last modified
!    2025-01-31.
  
  References
  
     1. https://gcc.gnu.org/gcc-4.1/changes.html#4.1.2
!    2. https://gcc.gnu.org/gcc-4.1/changes.html#cplusplus
!    3. https://gcc.gnu.org/ml/java/2005-05/msg00260.html
!    4. https://developer.classpath.org/doc/
!    5. https://gcc.gnu.org/gcc-4.1/changes.html#targets
!    6. https://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html
!    7. https://gcc.gnu.org/gcc-4.1/changes.html#obsolete_systems
!    8. https://gcc.gnu.org/gcc-4.1/changes.html#GCC4.1.2
!    9. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.1.2
!   10. https://gcc.gnu.org/onlinedocs/
!   11. mailto:gcc-help@gcc.gnu.org
!   12. mailto:gcc@gcc.gnu.org
!   13. https://gcc.gnu.org/lists.html
!   14. https://www.fsf.org/
!   15. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-4.0/index.html
                               GCC 4.0 Release Series
*************** class N::A {
*** 16184,16190 ****
         since the Ada front end is not currently activated by default. See
         the [10]Installing GCC for details.
  
! New Targets and Target Specific Improvements
  
    H8/300
  
--- 16672,16678 ----
         since the Ada front end is not currently activated by default. See
         the [10]Installing GCC for details.
  
! [11]New Targets and Target Specific Improvements
  
    H8/300
  
*************** New Targets and Target Specific Improvem
*** 16312,16318 ****
         (the ABI previously supported was that of some Unix systems, which
         NetWare never tried to support).
  
! Obsolete Systems
  
     Support for a number of older systems has been declared obsolete in GCC
     4.0. Unless there is activity to revive them, the next release of GCC
--- 16800,16806 ----
         (the ABI previously supported was that of some Unix systems, which
         NetWare never tried to support).
  
! [12]Obsolete Systems
  
     Support for a number of older systems has been declared obsolete in GCC
     4.0. Unless there is activity to revive them, the next release of GCC
*************** Other significant improvements
*** 16357,16388 ****
         solving problems many projects such as python were forced to use
         RTLD_LOCAL for (with its resulting issues for C++ correctness). You
         can find more information about using these options at
!        [11]https://gcc.gnu.org/wiki/Visibility.
       __________________________________________________________________
  
! GCC 4.0.1
  
!    This is the [12]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.0.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! GCC 4.0.2
  
!    This is the [13]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.0.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
     Unfortunately, due to a release engineering failure, this release has a
     regression on Solaris that will affect some C++ programs. We suggest
!    that Solaris users apply a [14]patch that corrects the problem. Users
     who do not wish to apply the patch should explicitly link C++ programs
     with the -pthreads option, even if they do not use threads. This
     problem has been corrected in the current 4.0 branch sources and will
     not be present in GCC 4.0.3.
  
! GCC 4.0.3
  
     Starting with this release, the function getcontext is recognized by
     the compiler as having the same semantics as the setjmp function. In
--- 16845,16876 ----
         solving problems many projects such as python were forced to use
         RTLD_LOCAL for (with its resulting issues for C++ correctness). You
         can find more information about using these options at
!        [13]https://gcc.gnu.org/wiki/Visibility.
       __________________________________________________________________
  
! [14]GCC 4.0.1
  
!    This is the [15]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.0.1 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
! [16]GCC 4.0.2
  
!    This is the [17]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.0.2 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
     Unfortunately, due to a release engineering failure, this release has a
     regression on Solaris that will affect some C++ programs. We suggest
!    that Solaris users apply a [18]patch that corrects the problem. Users
     who do not wish to apply the patch should explicitly link C++ programs
     with the -pthreads option, even if they do not use threads. This
     problem has been corrected in the current 4.0 branch sources and will
     not be present in GCC 4.0.3.
  
! [19]GCC 4.0.3
  
     Starting with this release, the function getcontext is recognized by
     the compiler as having the same semantics as the setjmp function. In
*************** GCC 4.0.3
*** 16390,16398 ****
     calling such a function and will emit a warning about the variables
     that may be clobbered after the second return from the function.
  
! GCC 4.0.4
  
!    This is the [15]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.0.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
--- 16878,16886 ----
     calling such a function and will emit a warning about the variables
     that may be clobbered after the second return from the function.
  
! [20]GCC 4.0.4
  
!    This is the [21]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 4.0.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
*************** GCC 4.0.4
*** 16403,16420 ****
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [16]GCC manuals. If that fails, the
!     [17]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [18]gcc@gcc.gnu.org. All of [19]our lists have public
      archives.
  
!    Copyright (C) [20]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [21]maintained by the GCC team. Last modified
!    2022-10-26.
  
  References
  
--- 16891,16908 ----
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [22]GCC manuals. If that fails, the
!     [23]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [24]gcc@gcc.gnu.org. All of [25]our lists have public
      archives.
  
!    Copyright (C) [26]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [27]maintained by the GCC team. Last modified
!    2025-01-31.
  
  References
  
*************** References
*** 16428,16444 ****
     8. https://itanium-cxx-abi.github.io/cxx-abi/
     9. https://gcc.gnu.org/fortran/
    10. https://gcc.gnu.org/install/
!   11. https://gcc.gnu.org/wiki/Visibility
!   12. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.0.1
!   13. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.0.2
!   14. https://gcc.gnu.org/ml/gcc-cvs/2005-09/msg00984.html
!   15. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.0.4
!   16. https://gcc.gnu.org/onlinedocs/
!   17. mailto:gcc-help@gcc.gnu.org
!   18. mailto:gcc@gcc.gnu.org
!   19. https://gcc.gnu.org/lists.html
!   20. https://www.fsf.org/
!   21. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-3.4/index.html
                               GCC 3.4 Release Series
--- 16916,16938 ----
     8. https://itanium-cxx-abi.github.io/cxx-abi/
     9. https://gcc.gnu.org/fortran/
    10. https://gcc.gnu.org/install/
!   11. https://gcc.gnu.org/gcc-4.0/changes.html#targets
!   12. https://gcc.gnu.org/gcc-4.0/changes.html#obsolete_systems
!   13. https://gcc.gnu.org/wiki/Visibility
!   14. https://gcc.gnu.org/gcc-4.0/changes.html#GCC4.0.1
!   15. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.0.1
!   16. https://gcc.gnu.org/gcc-4.0/changes.html#GCC4.0.2
!   17. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.0.2
!   18. https://gcc.gnu.org/ml/gcc-cvs/2005-09/msg00984.html
!   19. https://gcc.gnu.org/gcc-4.0/changes.html#GCC4.0.3
!   20. https://gcc.gnu.org/gcc-4.0/changes.html#GCC4.0.4
!   21. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.0.4
!   22. https://gcc.gnu.org/onlinedocs/
!   23. mailto:gcc-help@gcc.gnu.org
!   24. mailto:gcc@gcc.gnu.org
!   25. https://gcc.gnu.org/lists.html
!   26. https://www.fsf.org/
!   27. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-3.4/index.html
                               GCC 3.4 Release Series
*************** New Languages and Language specific impr
*** 16771,16777 ****
         and may be overridden with the -finput-charset command line option.
         In the future we will add support for inline encoding markers.
  
!   C++
  
       * G++ is now much closer to full conformance to the ISO/ANSI C++
         standard. This means, among other things, that a lot of invalid
--- 17265,17271 ----
         and may be overridden with the -finput-charset command line option.
         In the future we will add support for inline encoding markers.
  
!   [11]C++
  
       * G++ is now much closer to full conformance to the ISO/ANSI C++
         standard. This means, among other things, that a lot of invalid
*************** New Languages and Language specific impr
*** 16949,16955 ****
         declaration must be accessible at the point of that declaration.
         Previous versions of G++ used to be less strict about this and
         allowed friend declarations for private class members, for example.
!        See the ISO C++ Standard Committee's [11]defect report #209 for
         details.
       * Declaration of member functions of class templates as friends are
         supported. For example,
--- 17443,17449 ----
         declaration must be accessible at the point of that declaration.
         Previous versions of G++ used to be less strict about this and
         allowed friend declarations for private class members, for example.
!        See the ISO C++ Standard Committee's [12]defect report #209 for
         details.
       * Declaration of member functions of class templates as friends are
         supported. For example,
*************** New Languages and Language specific impr
*** 17025,17031 ****
            foo(a1);        // OK, a1 is a lvalue
          }
         This might be surprising at first sight, especially since most
!        popular compilers do not correctly implement this rule ([12]further
         details).
       * When forming a pointer to member or a pointer to member function,
         access checks for class visibility (public, protected, private) are
--- 17519,17525 ----
            foo(a1);        // OK, a1 is a lvalue
          }
         This might be surprising at first sight, especially since most
!        popular compilers do not correctly implement this rule ([13]further
         details).
       * When forming a pointer to member or a pointer to member function,
         access checks for class visibility (public, protected, private) are
*************** New Languages and Language specific impr
*** 17095,17101 ****
              synchronization (@synchronized) support. These are accessible
              via the -fobjc-exceptions switch; as of this writing, they may
              only be used in conjunction with -fnext-runtime on Mac OS X
!             10.3 and later. See [13]Options Controlling Objective-C
              Dialect for more information.
            + An overhaul of @encode logic. The C99 _Bool and C++ bool type
              may now be encoded as 'B'. In addition, the back-end/codegen
--- 17589,17595 ----
              synchronization (@synchronized) support. These are accessible
              via the -fobjc-exceptions switch; as of this writing, they may
              only be used in conjunction with -fnext-runtime on Mac OS X
!             10.3 and later. See [14]Options Controlling Objective-C
              Dialect for more information.
            + An overhaul of @encode logic. The C99 _Bool and C++ bool type
              may now be encoded as 'B'. In addition, the back-end/codegen
*************** New Languages and Language specific impr
*** 17105,17116 ****
              properly, and that correct diagnostics are issued.
            + Support for "Zero-Link" (-fzero-link) and "Fix-and-Continue"
              (-freplace-objc-classes) debugging modes, currently available
!             on Mac OS X 10.3 and later. See [14]Options Controlling
              Objective-C Dialect for more information.
            + Access to optimized runtime entry points (-fno-nil-receivers )
              on the assumption that message receivers are never nil. This
              is currently available on Mac OS X 10.3 and later. See
!             [15]Options Controlling Objective-C Dialect for more
              information.
  
    Java
--- 17599,17610 ----
              properly, and that correct diagnostics are issued.
            + Support for "Zero-Link" (-fzero-link) and "Fix-and-Continue"
              (-freplace-objc-classes) debugging modes, currently available
!             on Mac OS X 10.3 and later. See [15]Options Controlling
              Objective-C Dialect for more information.
            + Access to optimized runtime entry points (-fno-nil-receivers )
              on the assumption that message receivers are never nil. This
              is currently available on Mac OS X 10.3 and later. See
!             [16]Options Controlling Objective-C Dialect for more
              information.
  
    Java
*************** New Languages and Language specific impr
*** 17122,17131 ****
         to gcj.
       * libgcj has a new gcjlib URL type; this lets URLClassLoader load
         code from shared libraries.
!      * libgcj has been much more completely merged with [16]GNU Classpath.
       * Class loading is now much more correct; in particular the caller's
         class loader is now used when that is required.
!      * [17]Eclipse 2.x will run out of the box using gij.
       * Parts of java.nio have been implemented. Direct and indirect
         buffers work, as do fundamental file and socket operations.
       * java.awt has been improved, though it is still not ready for
--- 17616,17625 ----
         to gcj.
       * libgcj has a new gcjlib URL type; this lets URLClassLoader load
         code from shared libraries.
!      * libgcj has been much more completely merged with [17]GNU Classpath.
       * Class loading is now much more correct; in particular the caller's
         class loader is now used when that is required.
!      * [18]Eclipse 2.x will run out of the box using gij.
       * Parts of java.nio have been implemented. Direct and indirect
         buffers work, as do fundamental file and socket operations.
       * java.awt has been improved, though it is still not ready for
*************** New Languages and Language specific impr
*** 17138,17150 ****
  
    Fortran
  
!      * Fortran improvements are listed in the [18]Fortran documentation.
  
  New Targets and Target Specific Improvements
  
    Alpha
  
!      * Several [19]built-in functions have been added such as
         __builtin_alpha_zap to allow utilizing the more obscure
         instructions of the CPU.
       * Parameter passing of complex arguments has changed to match the
--- 17632,17644 ----
  
    Fortran
  
!      * Fortran improvements are listed in the [19]Fortran documentation.
  
  New Targets and Target Specific Improvements
  
    Alpha
  
!      * Several [20]built-in functions have been added such as
         __builtin_alpha_zap to allow utilizing the more obscure
         instructions of the CPU.
       * Parameter passing of complex arguments has changed to match the
*************** New Targets and Target Specific Improvem
*** 17165,17172 ****
       * A new ARM target has been added: arm-wince-pe. This is similar to
         the arm-pe target, but it defaults to using the APCS32 ABI.
       * The existing ARM pipeline description has been converted to the use
!        the [20]DFA processor pipeline model. There is not much change in
!        code performance, but the description is now [21]easier to
         understand.
       * Support for the Cirrus EP9312 Maverick floating point co-processor
         added. Enabled at run time with the -mcpu=ep9312 command line
--- 17659,17666 ----
       * A new ARM target has been added: arm-wince-pe. This is similar to
         the arm-pe target, but it defaults to using the APCS32 ABI.
       * The existing ARM pipeline description has been converted to the use
!        the [21]DFA processor pipeline model. There is not much change in
!        code performance, but the description is now [22]easier to
         understand.
       * Support for the Cirrus EP9312 Maverick floating point co-processor
         added. Enabled at run time with the -mcpu=ep9312 command line
*************** New Targets and Target Specific Improvem
*** 17212,17218 ****
         generation of code tuned for Itanium 2 (option -mtune=itanium2) is
         enabled by default now. To generate code tuned for Itanium 1 the
         option -mtune=itanium1 should be used.
!      * [22]DFA processor pipeline descriptions for the IA-64 processors
         have been added. This resulted in about 3% improvement on the
         SPECInt2000 benchmark for Itanium 2.
       * Instruction bundling for the IA-64 processors has been rewritten
--- 17706,17712 ----
         generation of code tuned for Itanium 2 (option -mtune=itanium2) is
         enabled by default now. To generate code tuned for Itanium 1 the
         option -mtune=itanium1 should be used.
!      * [23]DFA processor pipeline descriptions for the IA-64 processors
         have been added. This resulted in about 3% improvement on the
         SPECInt2000 benchmark for Itanium 2.
       * Instruction bundling for the IA-64 processors has been rewritten
*************** New Targets and Target Specific Improvem
*** 17276,17282 ****
  
      General
  
!      * Several [23]ABI bugs have been fixed. Unfortunately, these changes
         will break binary compatibility with earlier releases.
       * GCC can now use explicit relocation operators when generating
         -mabicalls code. This behavior is controlled by -mexplicit-relocs
--- 17770,17776 ----
  
      General
  
!      * Several [24]ABI bugs have been fixed. Unfortunately, these changes
         will break binary compatibility with earlier releases.
       * GCC can now use explicit relocation operators when generating
         -mabicalls code. This behavior is controlled by -mexplicit-relocs
*************** New Targets and Target Specific Improvem
*** 17301,17307 ****
    PowerPC
  
       * GCC 3.4 releases have a number of fixes for PowerPC and PowerPC64
!        [24]ABI incompatibilities regarding the way parameters are passed
         during functions calls. These changes may result in incompatibility
         between code compiled with GCC 3.3 and GCC 3.4.
  
--- 17795,17801 ----
    PowerPC
  
       * GCC 3.4 releases have a number of fixes for PowerPC and PowerPC64
!        [25]ABI incompatibilities regarding the way parameters are passed
         during functions calls. These changes may result in incompatibility
         between code compiled with GCC 3.3 and GCC 3.4.
  
*************** New Targets and Target Specific Improvem
*** 17383,17389 ****
  
       * The option -mflat is deprecated.
       * Support for large (> 2GB) frames has been added to the 64-bit port.
!      * Several [25]ABI bugs have been fixed. Unfortunately, these changes
         will break binary compatibility with earlier releases.
       * The default debugging format has been switched from STABS to
         DWARF-2 for 32-bit code on Solaris 7 and later. DWARF-2 is already
--- 17877,17883 ----
  
       * The option -mflat is deprecated.
       * Support for large (> 2GB) frames has been added to the 64-bit port.
!      * Several [26]ABI bugs have been fixed. Unfortunately, these changes
         will break binary compatibility with earlier releases.
       * The default debugging format has been switched from STABS to
         DWARF-2 for 32-bit code on Solaris 7 and later. DWARF-2 is already
*************** New Targets and Target Specific Improvem
*** 17431,17437 ****
         header file when building GCC. Additionally, the
         -mno-serialize-volatile option is no longer supported.
  
! Obsolete Systems
  
     Support for a number of older systems has been declared obsolete in GCC
     3.4. Unless there is activity to revive them, the next release of GCC
--- 17925,17931 ----
         header file when building GCC. Additionally, the
         -mno-serialize-volatile option is no longer supported.
  
! [27]Obsolete Systems
  
     Support for a number of older systems has been declared obsolete in GCC
     3.4. Unless there is activity to revive them, the next release of GCC
*************** Other significant improvements
*** 17491,17508 ****
         particularly for non-optimizing compilations.
       __________________________________________________________________
  
! GCC 3.4.0
  
    Bug Fixes
  
     A vast number of bugs have been fixed in 3.4.0, too many to publish a
!    complete list here. [26]Follow this link to query the Bugzilla database
     for the list of over 900 bugs fixed in 3.4.0. This is the list of all
     bugs marked as resolved and fixed in 3.4.0 that are not flagged as 3.4
     regressions.
       __________________________________________________________________
  
! GCC 3.4.1
  
    Bug Fixes
  
--- 17985,18002 ----
         particularly for non-optimizing compilations.
       __________________________________________________________________
  
! [28]GCC 3.4.0
  
    Bug Fixes
  
     A vast number of bugs have been fixed in 3.4.0, too many to publish a
!    complete list here. [29]Follow this link to query the Bugzilla database
     for the list of over 900 bugs fixed in 3.4.0. This is the list of all
     bugs marked as resolved and fixed in 3.4.0 that are not flagged as 3.4
     regressions.
       __________________________________________________________________
  
! [30]GCC 3.4.1
  
    Bug Fixes
  
*************** GCC 3.4.1
*** 17513,17779 ****
  
      Bootstrap failures
  
!      * [27]10129 Ada bootstrap fails on PPC-Darwin - invalid assembler
         emitted - PIC related
!      * [28]14576 [ARM] ICE in libiberty when building gcc-3.4 for arm-elf
!      * [29]14760 A bug in configure.in prevents using both
         --program-suffix and --program-prefix
!      * [30]14671 [hppa64] bootstrap fails: ICE in
         save_call_clobbered_regs, in caller_save.c
!      * [31]15093 [alpha][Java] make bootstrap fails to configure libffi on
         Alpha
!      * [32]15178 Solaris 9/x86 fails linking after stage 3
  
      Multi-platform internal compiler errors (ICEs)
  
!      * [33]12753 (preprocessor) Memory corruption in preprocessor on bad
         input
!      * [34]13985 ICE in gcc.c-torture/compile/930621-1.c
!      * [35]14810 (c++) tree check failures with invalid code involving
         templates
!      * [36]14883 (c++) ICE on invalid code, in cp_parser_lookup_name, in
         cp/parser.c
!      * [37]15044 (c++) ICE on syntax error, template header
!      * [38]15057 (c++) Compiling of conditional value throw constructs
         cause a segmentation violation
!      * [39]15064 (c++) typeid of template parameter gives ICE
!      * [40]15142 (c++) ICE when passing a string where a char* is expected
         in a throw statement
!      * [41]15159 ICE in rtl_verify_flow_info_1
!      * [42]15165 (c++) ICE in instantiate_template
!      * [43]15193 Unary minus using pointer to V4SF vector causes
         -fforce-mem to exhaust all memory
!      * [44]15209 (c++) Runs out of memory with packed structs
!      * [45]15227 (c++) Trouble with invalid function definition
!      * [46]15285 (c++) instantiate_type ICE when forming pointer to
         template function
!      * [47]15299 (c++) ICE in resolve_overloaded_unification
!      * [48]15329 (c++) ICE on constructor of member template
!      * [49]15550 ICE in extract_insn, in recog.c
!      * [50]15554 (c++) ICE in tsubst_copy, in cp/pt.c
!      * [51]15640 (c++) ICE on invalid code in arg_assoc, in
         cp/name-lookup.c
!      * [52]15666 [unit-at-a-time] Gcc abort on valid code
!      * [53]15696 (c++) ICE with bad pointer-to-member code
!      * [54]15701 (c++) ICE with friends and template template parameter
!      * [55]15761 ICE in do_SUBST, in combine.c
!      * [56]15829 (c++) ICE on Botan-1.3.13 due to -funroll-loops
  
      Ada
  
!      * [57]14538 All RTEMS targets broken for gnat
  
      C front end
  
!      * [58]12391 missing warning about assigning to an incomplete type
!      * [59]14649 atan(1.0) should not be a constant expression
!      * [60]15004 [unit-at-a-time] no warning for unused paramater in
         static function
!      * [61]15749 --pedantic-errors behaves differently from --pedantic
         with C-compiler on GNU/Linux
  
      C++ compiler and library
  
!      * [62]10646 non-const reference is incorrectly matched in a "const T"
         partial specialization
!      * [63]12077 wcin.rdbuf()->in_avail() return value too high
!      * [64]13598 enc_filebuf doesn't work
!      * [65]14211 const_cast returns lvalue but should be rvalue
!      * [66]14220 num_put::do_put() undesired float/double behavior
!      * [67]14245 problem with user-defined allocators in std::basic_string
!      * [68]14340 libstdc++ Debug mode: failure to convert iterator to
         const_iterator
!      * [69]14600 __gnu_cxx::stdio_sync_filebuf should expose internal
         FILE*
!      * [70]14668 no warning anymore for reevaluation of declaration
!      * [71]14775 LFS (large file support) tests missing
!      * [72]14821 Duplicate namespace alias declaration should not conflict
!      * [73]14930 Friend declaration ignored
!      * [74]14932 cannot use offsetof to get offsets of array elements in
         g++ 3.4.0
!      * [75]14950 [non unit-at-a-time] always_inline does not mix with
         templates and -O0
!      * [76]14962 g++ ignores #pragma redefine_extname
!      * [77]14975 Segfault on low-level write error during imbue
!      * [78]15002 Linewise stream input is unusably slow (std::string slow)
!      * [79]15025 compiler accepts redeclaration of template as
         non-template
!      * [80]15046 [arm] Math functions misdetected by cross configuration
!      * [81]15069 a bit test on a variable of enum type is miscompiled
!      * [82]15074 g++ -lsupc++ still links against libstdc++
!      * [83]15083 spurious "statement has no effect" warning
!      * [84]15096 parse error with templates and pointer to const member
!      * [85]15287 combination of operator[] and operator .* fails in
         templates
!      * [86]15317 __attribute__ unused in first parameter of constructor
         gives error
!      * [87]15337 sizeof on incomplete type diagnostic
!      * [88]15361 bitset<>::_Find_next fails
!      * [89]15412 _GLIBCXX_ symbols symbols defined and used in different
         namespaces
!      * [90]15427 valid code results in incomplete type error
!      * [91]15471 Incorrect member pointer offsets in anonymous
         structs/unions
!      * [92]15503 nested template problem
!      * [93]15507 compiler hangs while laying out union
!      * [94]15542 operator & and template definitions
!      * [95]15565 SLES9: leading + sign for unsigned int with showpos
!      * [96]15625 friend defined inside a template fails to find static
         function
!      * [97]15629 Function templates, overloads, and friend name injection
!      * [98]15742 'noreturn' attribute ignored in method of template
         functions.
!      * [99]15775 Allocator::pointer consistently ignored
!      * [100]15821 Duplicate namespace alias within namespace rejected
!      * [101]15862 'enum yn' fails (confict with undeclared builtin)
!      * [102]15875 rejects pointer to member in template
!      * [103]15877 valid code using templates and anonymous enums is
         rejected
!      * [104]15947 Puzzling error message for wrong destructor declaration
         in template class
!      * [105]16020 cannot copy __gnu_debug::bitset
!      * [106]16154 input iterator concept too restrictive
!      * [107]16174 deducing top-level consts
  
      Java
  
!      * [108]14315 Java compiler is not parallel make safe
  
      Fortran
  
!      * [109]15151 [g77] incorrect logical i/o in 64-bit mode
  
      Objective-C
  
!      * [110]7993 private variables cannot be shadowed in subclasses
  
      Optimization bugs
  
!      * [111]15228 useless copies of floating point operands
!      * [112]15345 [non-unit-at-a-time] unreferenced nested inline
         functions not optimized away
!      * [113]15945 Incorrect floating point optimization
!      * [114]15526 ftrapv aborts on 0 * (-1)
!      * [115]14690 Miscompiled POOMA tests
!      * [116]15112 GCC generates code to write to unchanging memory
  
      Preprocessor
  
!      * [117]15067 Minor glitch in the source of cpp
  
      Main driver program bugs
  
!      * [118]1963 collect2 interprets -oldstyle_liblookup as -o
         ldstyle_liblookup
  
      x86-specific (Intel/AMD)
  
!      * [119]15717 Error: can't resolve `L0' {*ABS* section} - `xx' {*UND*
         section}
  
      HPPA-specific
  
!      * [120]14782 GCC produces an unaligned data access at -O2
!      * [121]14828 FAIL: gcc.c-torture/execute/20030408-1.c execution, -O2
!      * [122]15202 ICE in reload_cse_simplify_operands, in postreload.c
  
      IA64-specific
  
!      * [123]14610 __float80 constants incorrectly emitted
!      * [124]14813 init_array sections are initialized in the wrong order
!      * [125]14857 GCC segfault on duplicated asm statement
!      * [126]15598 Gcc 3.4 ICE on valid code
!      * [127]15653 Gcc 3.4 ICE on valid code
  
      MIPS-specific
  
!      * [128]15189 wrong filling of delay slot with -march=mips1 -G0
         -mno-split-addresses -mno-explicit-relocs
!      * [129]15331 Assembler error building gnatlib on IRIX 6.5 with GNU as
         2.14.91
!      * [130]16144 Bogus reference to __divdf3 when -O1
!      * [131]16176 Miscompilation of unaligned data in MIPS backend
  
      PowerPC-specific
  
!      * [132]11591 ICE in gcc.dg/altivec-5.c
!      * [133]12028 powerpc-eabispe produces bad sCOND operation
!      * [134]14478 rs6000 geu/ltu patterns generate incorrect code
!      * [135]14567 long double and va_arg complex args
!      * [136]14715 Altivec stack layout may overlap gpr save with stack
         temps
!      * [137]14902 (libstdc++) Stream checking functions fail when -pthread
         option is used.
!      * [138]14924 Compiler ICE on valid code
!      * [139]14960 -maltivec affects vector return with -mabi=no-altivec
!      * [140]15106 vector varargs failure passing from altivec to
         non-altivec code for -m32
!      * [141]16026 ICE in function.c:4804, assign_parms, when -mpowerpc64 &
         half-word operation
!      * [142]15191 -maltivec -mabi=no-altivec results in mis-aligned lvx
         and stvx
!      * [143]15662 Segmentation fault when an exception is thrown - even if
         try and catch are specified
  
      s390-specific
  
!      * [144]15054 Bad code due to overlapping stack temporaries
  
      SPARC-specific
  
!      * [145]15783 ICE with union assignment in 64-bit mode
!      * [146]15626 GCC 3.4 emits "ld: warning: relocation error:
         R_SPARC_UA32"
  
      x86-64-specific
  
!      * [147]14326 boehm-gc hardcodes to 3DNow! prefetch for x86_64
!      * [148]14723 Backported -march=nocona from mainline
!      * [149]15290 __float128 failed to pass to function properly
  
      Cygwin/Mingw32-specific
  
!      * [150]15250 Option -mms-bitfields support on GCC 3.4 is not
         conformant to MS layout
!      * [151]15551 -mtune=pentium4 -O2 with sjlj EH breaks stack probe
         worker on windows32 targets
  
      Bugs specific to embedded processors
  
!      * [152]8309 [m68k] -m5200 produces erroneous SImode set of short
         varaible on stack
!      * [153]13250 [SH] Gcc code for rotation clobbers the register, but
         gcc continues to use the register as if it was not clobbered
!      * [154]13803 [coldfire] movqi operand constraints too restrictivefor
         TARGET_COLDFIRE
!      * [155]14093 [SH] ICE for code when using -mhitachi option in SH
!      * [156]14457 [m6811hc] ICE with simple c++ source
!      * [157]14542 [m6811hc] ICE on simple source
!      * [158]15100 [SH] cc1plus got hang-up on
         libstdc++-v3/testsuite/abi_check.cc
!      * [159]15296 [CRIS] Delayed branch scheduling causing invalid code on
         cris-*
!      * [160]15396 [SH] ICE with -O2 -fPIC
!      * [161]15782 [coldfire] m68k_output_mi_thunk emits wrong code for
         ColdFire
  
      Testsuite problems (compiler not affected)
  
!      * [162]11610 libstdc++ testcases 27_io/* don't work properly remotely
!      * [163]15488 (libstdc++) possibly insufficient file permissions for
         executing test suite
!      * [164]15489 (libstdc++) testsuite_files determined incorrectly
  
      Documentation bugs
  
!      * [165]13928 (libstdc++) no whatis info in some man pages generated
         by doxygen
!      * [166]14150 Ada documentation out of date
!      * [167]14949 (c++) Need to document method visibility changes
!      * [168]15123 libstdc++-doc: Allocators.3 manpage is empty
       __________________________________________________________________
  
! GCC 3.4.2
  
    Bug Fixes
  
--- 18007,18273 ----
  
      Bootstrap failures
  
!      * [31]10129 Ada bootstrap fails on PPC-Darwin - invalid assembler
         emitted - PIC related
!      * [32]14576 [ARM] ICE in libiberty when building gcc-3.4 for arm-elf
!      * [33]14760 A bug in configure.in prevents using both
         --program-suffix and --program-prefix
!      * [34]14671 [hppa64] bootstrap fails: ICE in
         save_call_clobbered_regs, in caller_save.c
!      * [35]15093 [alpha][Java] make bootstrap fails to configure libffi on
         Alpha
!      * [36]15178 Solaris 9/x86 fails linking after stage 3
  
      Multi-platform internal compiler errors (ICEs)
  
!      * [37]12753 (preprocessor) Memory corruption in preprocessor on bad
         input
!      * [38]13985 ICE in gcc.c-torture/compile/930621-1.c
!      * [39]14810 (c++) tree check failures with invalid code involving
         templates
!      * [40]14883 (c++) ICE on invalid code, in cp_parser_lookup_name, in
         cp/parser.c
!      * [41]15044 (c++) ICE on syntax error, template header
!      * [42]15057 (c++) Compiling of conditional value throw constructs
         cause a segmentation violation
!      * [43]15064 (c++) typeid of template parameter gives ICE
!      * [44]15142 (c++) ICE when passing a string where a char* is expected
         in a throw statement
!      * [45]15159 ICE in rtl_verify_flow_info_1
!      * [46]15165 (c++) ICE in instantiate_template
!      * [47]15193 Unary minus using pointer to V4SF vector causes
         -fforce-mem to exhaust all memory
!      * [48]15209 (c++) Runs out of memory with packed structs
!      * [49]15227 (c++) Trouble with invalid function definition
!      * [50]15285 (c++) instantiate_type ICE when forming pointer to
         template function
!      * [51]15299 (c++) ICE in resolve_overloaded_unification
!      * [52]15329 (c++) ICE on constructor of member template
!      * [53]15550 ICE in extract_insn, in recog.c
!      * [54]15554 (c++) ICE in tsubst_copy, in cp/pt.c
!      * [55]15640 (c++) ICE on invalid code in arg_assoc, in
         cp/name-lookup.c
!      * [56]15666 [unit-at-a-time] Gcc abort on valid code
!      * [57]15696 (c++) ICE with bad pointer-to-member code
!      * [58]15701 (c++) ICE with friends and template template parameter
!      * [59]15761 ICE in do_SUBST, in combine.c
!      * [60]15829 (c++) ICE on Botan-1.3.13 due to -funroll-loops
  
      Ada
  
!      * [61]14538 All RTEMS targets broken for gnat
  
      C front end
  
!      * [62]12391 missing warning about assigning to an incomplete type
!      * [63]14649 atan(1.0) should not be a constant expression
!      * [64]15004 [unit-at-a-time] no warning for unused paramater in
         static function
!      * [65]15749 --pedantic-errors behaves differently from --pedantic
         with C-compiler on GNU/Linux
  
      C++ compiler and library
  
!      * [66]10646 non-const reference is incorrectly matched in a "const T"
         partial specialization
!      * [67]12077 wcin.rdbuf()->in_avail() return value too high
!      * [68]13598 enc_filebuf doesn't work
!      * [69]14211 const_cast returns lvalue but should be rvalue
!      * [70]14220 num_put::do_put() undesired float/double behavior
!      * [71]14245 problem with user-defined allocators in std::basic_string
!      * [72]14340 libstdc++ Debug mode: failure to convert iterator to
         const_iterator
!      * [73]14600 __gnu_cxx::stdio_sync_filebuf should expose internal
         FILE*
!      * [74]14668 no warning anymore for reevaluation of declaration
!      * [75]14775 LFS (large file support) tests missing
!      * [76]14821 Duplicate namespace alias declaration should not conflict
!      * [77]14930 Friend declaration ignored
!      * [78]14932 cannot use offsetof to get offsets of array elements in
         g++ 3.4.0
!      * [79]14950 [non unit-at-a-time] always_inline does not mix with
         templates and -O0
!      * [80]14962 g++ ignores #pragma redefine_extname
!      * [81]14975 Segfault on low-level write error during imbue
!      * [82]15002 Linewise stream input is unusably slow (std::string slow)
!      * [83]15025 compiler accepts redeclaration of template as
         non-template
!      * [84]15046 [arm] Math functions misdetected by cross configuration
!      * [85]15069 a bit test on a variable of enum type is miscompiled
!      * [86]15074 g++ -lsupc++ still links against libstdc++
!      * [87]15083 spurious "statement has no effect" warning
!      * [88]15096 parse error with templates and pointer to const member
!      * [89]15287 combination of operator[] and operator .* fails in
         templates
!      * [90]15317 __attribute__ unused in first parameter of constructor
         gives error
!      * [91]15337 sizeof on incomplete type diagnostic
!      * [92]15361 bitset<>::_Find_next fails
!      * [93]15412 _GLIBCXX_ symbols symbols defined and used in different
         namespaces
!      * [94]15427 valid code results in incomplete type error
!      * [95]15471 Incorrect member pointer offsets in anonymous
         structs/unions
!      * [96]15503 nested template problem
!      * [97]15507 compiler hangs while laying out union
!      * [98]15542 operator & and template definitions
!      * [99]15565 SLES9: leading + sign for unsigned int with showpos
!      * [100]15625 friend defined inside a template fails to find static
         function
!      * [101]15629 Function templates, overloads, and friend name injection
!      * [102]15742 'noreturn' attribute ignored in method of template
         functions.
!      * [103]15775 Allocator::pointer consistently ignored
!      * [104]15821 Duplicate namespace alias within namespace rejected
!      * [105]15862 'enum yn' fails (confict with undeclared builtin)
!      * [106]15875 rejects pointer to member in template
!      * [107]15877 valid code using templates and anonymous enums is
         rejected
!      * [108]15947 Puzzling error message for wrong destructor declaration
         in template class
!      * [109]16020 cannot copy __gnu_debug::bitset
!      * [110]16154 input iterator concept too restrictive
!      * [111]16174 deducing top-level consts
  
      Java
  
!      * [112]14315 Java compiler is not parallel make safe
  
      Fortran
  
!      * [113]15151 [g77] incorrect logical i/o in 64-bit mode
  
      Objective-C
  
!      * [114]7993 private variables cannot be shadowed in subclasses
  
      Optimization bugs
  
!      * [115]15228 useless copies of floating point operands
!      * [116]15345 [non-unit-at-a-time] unreferenced nested inline
         functions not optimized away
!      * [117]15945 Incorrect floating point optimization
!      * [118]15526 ftrapv aborts on 0 * (-1)
!      * [119]14690 Miscompiled POOMA tests
!      * [120]15112 GCC generates code to write to unchanging memory
  
      Preprocessor
  
!      * [121]15067 Minor glitch in the source of cpp
  
      Main driver program bugs
  
!      * [122]1963 collect2 interprets -oldstyle_liblookup as -o
         ldstyle_liblookup
  
      x86-specific (Intel/AMD)
  
!      * [123]15717 Error: can't resolve `L0' {*ABS* section} - `xx' {*UND*
         section}
  
      HPPA-specific
  
!      * [124]14782 GCC produces an unaligned data access at -O2
!      * [125]14828 FAIL: gcc.c-torture/execute/20030408-1.c execution, -O2
!      * [126]15202 ICE in reload_cse_simplify_operands, in postreload.c
  
      IA64-specific
  
!      * [127]14610 __float80 constants incorrectly emitted
!      * [128]14813 init_array sections are initialized in the wrong order
!      * [129]14857 GCC segfault on duplicated asm statement
!      * [130]15598 Gcc 3.4 ICE on valid code
!      * [131]15653 Gcc 3.4 ICE on valid code
  
      MIPS-specific
  
!      * [132]15189 wrong filling of delay slot with -march=mips1 -G0
         -mno-split-addresses -mno-explicit-relocs
!      * [133]15331 Assembler error building gnatlib on IRIX 6.5 with GNU as
         2.14.91
!      * [134]16144 Bogus reference to __divdf3 when -O1
!      * [135]16176 Miscompilation of unaligned data in MIPS backend
  
      PowerPC-specific
  
!      * [136]11591 ICE in gcc.dg/altivec-5.c
!      * [137]12028 powerpc-eabispe produces bad sCOND operation
!      * [138]14478 rs6000 geu/ltu patterns generate incorrect code
!      * [139]14567 long double and va_arg complex args
!      * [140]14715 Altivec stack layout may overlap gpr save with stack
         temps
!      * [141]14902 (libstdc++) Stream checking functions fail when -pthread
         option is used.
!      * [142]14924 Compiler ICE on valid code
!      * [143]14960 -maltivec affects vector return with -mabi=no-altivec
!      * [144]15106 vector varargs failure passing from altivec to
         non-altivec code for -m32
!      * [145]16026 ICE in function.c:4804, assign_parms, when -mpowerpc64 &
         half-word operation
!      * [146]15191 -maltivec -mabi=no-altivec results in mis-aligned lvx
         and stvx
!      * [147]15662 Segmentation fault when an exception is thrown - even if
         try and catch are specified
  
      s390-specific
  
!      * [148]15054 Bad code due to overlapping stack temporaries
  
      SPARC-specific
  
!      * [149]15783 ICE with union assignment in 64-bit mode
!      * [150]15626 GCC 3.4 emits "ld: warning: relocation error:
         R_SPARC_UA32"
  
      x86-64-specific
  
!      * [151]14326 boehm-gc hardcodes to 3DNow! prefetch for x86_64
!      * [152]14723 Backported -march=nocona from mainline
!      * [153]15290 __float128 failed to pass to function properly
  
      Cygwin/Mingw32-specific
  
!      * [154]15250 Option -mms-bitfields support on GCC 3.4 is not
         conformant to MS layout
!      * [155]15551 -mtune=pentium4 -O2 with sjlj EH breaks stack probe
         worker on windows32 targets
  
      Bugs specific to embedded processors
  
!      * [156]8309 [m68k] -m5200 produces erroneous SImode set of short
         varaible on stack
!      * [157]13250 [SH] Gcc code for rotation clobbers the register, but
         gcc continues to use the register as if it was not clobbered
!      * [158]13803 [coldfire] movqi operand constraints too restrictivefor
         TARGET_COLDFIRE
!      * [159]14093 [SH] ICE for code when using -mhitachi option in SH
!      * [160]14457 [m6811hc] ICE with simple c++ source
!      * [161]14542 [m6811hc] ICE on simple source
!      * [162]15100 [SH] cc1plus got hang-up on
         libstdc++-v3/testsuite/abi_check.cc
!      * [163]15296 [CRIS] Delayed branch scheduling causing invalid code on
         cris-*
!      * [164]15396 [SH] ICE with -O2 -fPIC
!      * [165]15782 [coldfire] m68k_output_mi_thunk emits wrong code for
         ColdFire
  
      Testsuite problems (compiler not affected)
  
!      * [166]11610 libstdc++ testcases 27_io/* don't work properly remotely
!      * [167]15488 (libstdc++) possibly insufficient file permissions for
         executing test suite
!      * [168]15489 (libstdc++) testsuite_files determined incorrectly
  
      Documentation bugs
  
!      * [169]13928 (libstdc++) no whatis info in some man pages generated
         by doxygen
!      * [170]14150 Ada documentation out of date
!      * [171]14949 (c++) Need to document method visibility changes
!      * [172]15123 libstdc++-doc: Allocators.3 manpage is empty
       __________________________________________________________________
  
! [173]GCC 3.4.2
  
    Bug Fixes
  
*************** GCC 3.4.2
*** 17784,18307 ****
  
      Bootstrap failures and issues
  
!      * [169]16469 [mips-sgi-irix5.3] bootstrap fails in
         libstdc++-v3/testsuite
!      * [170]16344 [hppa-linux-gnu] libstdc++'s PCH built by
         profiledbootstrap does not work with the built compiler
!      * [171]16842 [Solaris/x86] mkheaders can not find mkheaders.conf
  
      Multi-platform internal compiler errors (ICEs)
  
!      * [172]12608 (c++) ICE: expected class 't', have 'x' (error_mark) in
         cp_parser_class_specifier, in cp/parser.c
!      * [173]14492 ICE in loc_descriptor_from_tree, in dwarf2out.c
!      * [174]15461 (c++) ICE due to NRV and inlining
!      * [175]15890 (c++) ICE in c_expand_expr, in c-common.c
!      * [176]16180 ICE: segmentation fault in RTL optimization
!      * [177]16224 (c++) ICE in write_unscoped_name (template/namespace)
!      * [178]16408 ICE: in delete_insn, in cfgrtl.c
!      * [179]16529 (c++) ICE for: namespace-alias shall not be declared as
         the name of any other entity
!      * [180]16698 (c++) ICE with exceptions and declaration of __cxa_throw
!      * [181]16706 (c++) ICE in finish_member_declaration, in
         cp/semantics.c
!      * [182]16810 (c++) Legal C++ program with cast gives ICE in
         build_ptrmemfunc
!      * [183]16851 (c++) ICE when throwing a comma expression
!      * [184]16870 (c++) Boost.Spirit causes ICE in tsubst, in cp/pt.c
!      * [185]16904 (c++) ICE in finish_class_member_access_expr, in
         cp/typeck.c
!      * [186]16905 (c++) ICE (segfault) with exceptions
!      * [187]16964 (c++) ICE in cp_parser_class_specifier due to
         redefinition
!      * [188]17068 (c++) ICE: tree check: expected class 'd', have 'x'
         (identifier_node) in dependent_template_p, in cp/pt.c
  
      Preprocessor bugs
  
!      * [189]16366 Preprocessor option -remap causes memory corruption
  
      Optimization
  
!      * [190]15345 unreferenced nested inline functions not optimized away
!      * [191]16590 Incorrect execution when compiling with -O2
!      * [192]16693 Bitwise AND is lost when used within a cast to an enum
         of the same precision
!      * [193]17078 Jump into if(0) substatement fails
  
      Problems in generated debug information
  
!      * [194]13956 incorrect stabs for nested local variables
  
      C front end bugs
  
!      * [195]16684 GCC should not warn about redundant redeclarations of
         built-ins
  
      C++ compiler and library
  
!      * [196]12658 Thread safety problems in locale::global() and
         locale::locale()
!      * [197]13092 g++ accepts invalid pointer-to-member conversion
!      * [198]15320 Excessive memory consumption
!      * [199]16246 Incorrect template argument deduction
!      * [200]16273 Memory exhausted when using nested classes and virtual
         functions
!      * [201]16401 ostringstream in gcc 3.4.x very slow for big data
!      * [202]16411 undefined reference to
         __gnu_cxx::stdio_sync_filebuf<char, std::char_traits<char>
         >::file()
!      * [203]16489 G++ incorrectly rejects use of a null constant integral
         expression as a null constant pointer
!      * [204]16618 offsetof fails with constant member
!      * [205]16637 syntax error reported for valid input code
!      * [206]16717 __attribute__((constructor)) broken in C++
!      * [207]16813 compiler error in DEBUG version of range insertion
         std::map::insert
!      * [208]16853 pointer-to-member initialization from incompatible one
         accepted
!      * [209]16889 ambiguity is not detected
!      * [210]16959 Segmentation fault in ios_base::sync_with_stdio
  
      Java compiler and library
  
!      * [211]7587 direct threaded interpreter not thread-safe
!      * [212]16473 ServerSocket accept() leaks file descriptors
!      * [213]16478 Hash synchronization deadlock with finalizers
  
      Alpha-specific
  
!      * [214]10695 ICE in dwarf2out_frame_debug_expr, in dwarf2out.c
!      * [215]16974 could not split insn (ice in final_scan_insn, in
         final.c)
  
      x86-specific
  
!      * [216]16298 ICE in output_operand
!      * [217]17113 ICE with SSE2 intrinsics
  
      x86-64 specific
  
!      * [218]14697 libstdc++ couldn't find 32bit libgcc_s
  
      MIPS-specific
  
!      * [219]15869 [mips64] No NOP after LW (with -mips1 -O0)
!      * [220]16325 [mips64] value profiling clobbers gp on mips
!      * [221]16357 [mipsisa64-elf] ICE copying 7 bytes between extern
         char[]s
!      * [222]16380 [mips64] Use of uninitialised register after dbra
         conversion
!      * [223]16407 [mips64] Unaligned access to local variables
!      * [224]16643 [mips64] verify_local_live_at_start ICE after
         crossjumping & cfgcleanup
  
      ARM-specific
  
!      * [225]15927 THUMB -O2: strength-reduced iteration variable ends up
         off by 1
!      * [226]15948 THUMB: ICE with non-commutative cbranch
!      * [227]17019 THUMB: bad switch statement in md code for
         addsi3_cbranch_scratch
  
      IA64-specific
  
!      * [228]16130 ICE on valid code: in bundling, in config/ia64/ia64.c
         (-mtune=merced)
!      * [229]16142 ICE on valid code: in bundling, in config/ia64/ia64.c
         (-mtune=itanium)
!      * [230]16278 Gcc failed to build Linux kernel with -mtune=merced
!      * [231]16414 ICE on valid code: typo in comparison of asm_noperands
         result
!      * [232]16445 ICE on valid code: don't count ignored insns
!      * [233]16490 ICE (segfault) while compiling with -fprofile-use
!      * [234]16683 ia64 does not honor SUBTARGET_EXTRA_SPECS
  
      PowerPC-specific
  
!      * [235]16195 (ppc64): Miscompilation of GCC 3.3.x by 3.4.x
!      * [236]16239 ICE on ppc64 (mozilla 1.7 compile, -O1 -fno-exceptions
         issue)
  
      SPARC-specific
  
!      * [237]16199 ICE while compiling apache 2.0.49
!      * [238]16416 -m64 doesn't imply -mcpu=v9 anymore
!      * [239]16430 ICE when returning non-C aggregates larger than 16 bytes
  
      Bugs specific to embedded processors
  
!      * [240]16379 [m32r] can't output large model function call of memcpy
!      * [241]17093 [m32r] ICE with -msdata=use -O0
!      * [242]17119 [m32r] ICE at switch case 0x8000
  
      DJGPP-specific
  
!      * [243]15928 libstdc++ in 3.4.x doesn't cross-compile for djgpp
  
      Alpha Tru64-specific
  
!      * [244]16210 libstdc++ gratuitously omits "long long" I/O
  
      Testsuite, documentation issues (compiler is not affected):
  
!      * [245]15488 (libstdc++) possibly insufficient file permissions for
         executing test suite
!      * [246]16250 ada/doctools runs makeinfo even in release tarball
       __________________________________________________________________
  
! GCC 3.4.3
  
!    This is the [247]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 3.4.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
      Bootstrap failures
  
!      * [248]17369 [ia64] Bootstrap failure with binutils-2.15.90.0.1.1
!      * [249]17850 [arm-elf] bootstrap failure - libstdc++ uses strtold
         when undeclared
  
      Internal compiler errors (ICEs) affecting multiple platforms
  
!      * [250]13948 (java) GCJ segmentation fault while compiling GL4Java
         .class files
!      * [251]14492 ICE in loc_descriptor_from_tree, in dwarf2out.c
!      * [252]16301 (c++) ICE when "strong" attribute is attached to a using
         directive
!      * [253]16566 ICE with flexible arrays
!      * [254]17023 ICE with nested functions in parameter declaration
!      * [255]17027 ICE with noreturn function in loop at -O2
!      * [256]17524 ICE in grokdeclarator, in cp/decl.c
!      * [257]17826 (c++) ICE in cp_tree_equal
  
      C and optimization bugs
  
!      * [258]15526 -ftrapv aborts on 0 * (-1)
!      * [259]16999 #ident stopped working
!      * [260]17503 quadratic behaviour in invalid_mode_change_p
!      * [261]17581 Long long arithmetic fails inside a switch/case
         statement when compiled with -O2
!      * [262]18129 -fwritable-strings doesn't work
  
      C++ compiler and library bugs
  
!      * [263]10975 incorrect initial ostringstream::tellp()
!      * [264]11722 Unbuffered filebuf::sgetn is slow
!      * [265]14534 Unrecognizing static function as a template parameter
         when its return value is also templated
!      * [266]15172 Copy constructor optimization in aggregate
         initialization
!      * [267]15786 Bad error message for frequently occuring error.
!      * [268]16162 Rejects valid member-template-definition
!      * [269]16612 empty basic_strings can't live in shared memory
!      * [270]16715 std::basic_iostream is instantiated when used, even
         though instantiations are already contained in libstdc++
!      * [271]16848 code in /ext/demangle.h appears broken
!      * [272]17132 GCC fails to eliminate function template specialization
         when argument deduction fails
!      * [273]17259 One more _S_leaf incorrectly qualified with _RopeRep::
         in ropeimpl.h
!      * [274]17327 use of `enumeral_type' in template type unification
!      * [275]17393 "unused variable '._0'" warning with -Wall
!      * [276]17501 Confusion with member templates
!      * [277]17537 g++ not passing -lstdc++ to linker when all command line
         arguments are libraries
!      * [278]17585 usage of unqualified name of static member from within
         class not allowed
!      * [279]17821 Poor diagnostic for using "." instead of "->"
!      * [280]17829 wrong error: call of overloaded function is ambiguous
!      * [281]17851 Misleading diagnostic for invalid function declarations
         with undeclared types
!      * [282]17976 Destructor is called twice
!      * [283]18020 rejects valid definition of enum value in template
!      * [284]18093 bogus conflict in namespace aliasing
!      * [285]18140 C++ parser bug when using >> in templates
  
      Fortran
  
!      * [286]17541 data statements with double precision constants fail
  
      x86-specific
  
!      * [287]17853 -O2 ICE for MMX testcase
  
      SPARC-specific
  
!      * [288]17245 ICE compiling gsl-1.5 statistics/lag1.c
  
      Darwin-specific
  
!      * [289]17167 FATAL:Symbol L_foo$stub already defined.
  
      AIX-specific
  
!      * [290]17277 could not catch an exception when specified -maix64
  
      Solaris-specific
  
!      * [291]17505 <cmath> calls acosf(), ceilf(), and other functions
         missing from system libraries
  
      HP/UX specific:
  
!      * [292]17684 /usr/ccs/bin/ld: Can't create libgcc_s.sl
  
      ARM-specific
  
!      * [293]17384 ICE with mode attribute on structures
  
      MIPS-specific
  
!      * [294]17770 No NOP after LWL with -mips1
  
      Other embedded target specific
  
!      * [295]11476 [arc-elf] gcc ICE on newlib's vfprintf.c
!      * [296]14064 [avr-elf] -fdata-sections triggers ICE
!      * [297]14678 [m68hc11-elf] gcc ICE
!      * [298]15583 [powerpc-rtems] powerpc-rtems lacks __USE_INIT_FINI__
!      * [299]15790 [i686-coff] Alignment error building gcc with i686-coff
         target
!      * [300]15886 [SH] Miscompilation with -O2 -fPIC
!      * [301]16884 [avr-elf] [fweb related] bug while initializing
         variables
  
      Bugs relating to debugger support
  
!      * [302]13841 missing debug info for _Complex function arguments
!      * [303]15860 [big-endian targets] No DW_AT_location debug info is
         emitted for formal arguments to a function that uses "register"
         qualifiers
  
      Testsuite issues (compiler not affected)
  
!      * [304]17465 Testsuite in libffi overrides LD_LIBRARY_PATH
!      * [305]17469 Testsuite in libstdc++ overrides LD_LIBRARY_PATH
!      * [306]18138 [mips-sgi-irix6.5] libgcc_s.so.1 not found by 64-bit
         testsuite
  
      Documentation
  
!      * [307]15498 typo in gcc manual: non-existing locale example en_UK,
         should be en_GB
!      * [308]15747 [mips-sgi-irix5.3] /bin/sh hangs during bootstrap:
         document broken shell
!      * [309]16406 USE_LD_AS_NEEDED undocumented
       __________________________________________________________________
  
! GCC 3.4.4
  
!    This is the [310]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 3.4.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
       __________________________________________________________________
  
! GCC 3.4.5
  
!    This is the [311]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 3.4.5 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
      Bootstrap issues
  
!      * [312]24688 sco_math fixincl breaks math.h
  
      C compiler bugs
  
!      * [313]17188 struct Foo { } redefinition
!      * [314]20187 wrong code for ((unsigned char)(unsigned long
         long)((a?a:1)&(a*b)))?0:1)
!      * [315]21873 infinite warning loop on bad array initializer
!      * [316]21899 enum definition accepts values to be overriden
!      * [317]22061 ICE in find_function_data, in function.c
!      * [318]22308 Failure to diagnose violation of constraint 6.516p2
!      * [319]22458 ICE on missing brace
!      * [320]22589 ICE casting to long long
!      * [321]24101 Segfault with preprocessed source
  
      C++ compiler and library bugs
  
!      * [322]10611 operations on vector mode not recognized in C++
!      * [323]13377 unexpected behavior of namespace usage directive
!      * [324]16002 Strange error message with new parser
!      * [325]17413 local classes as template argument
!      * [326]17609 spurious error message after using keyword
!      * [327]17618 ICE in cp_convert_to_pointer, in cp/cvt.c
!      * [328]18124 ICE with invalid template template parameter
!      * [329]18155 typedef in template declaration not rejected
!      * [330]18177 ICE with const_cast for undeclared variable
!      * [331]18368 C++ error message regression
!      * [332]16378 ICE when returning a copy of a packed member
!      * [333]18466 int ::i; accepted
!      * [334]18512 ICE on invalid usage of template base class
!      * [335]18454 ICE when returning undefined type
!      * [336]18738 typename not allowed with non-dependent qualified name
!      * [337]18803 rejects access to operator() in template
!      * [338]19004 ICE in uses_template_parms, in cp/pt.c
!      * [339]19208 Spurious error about variably modified type
!      * [340]18253 bad error message / ICE for invalid template parameter
!      * [341]19608 ICE after friend function definition in local class
!      * [342]19884 ICE on explicit instantiation of a non-template
         constructor
!      * [343]20153 ICE when C++ template function contains anonymous union
!      * [344]20563 Infinite loop in diagnostic (and ice after error
         message)
!      * [345]20789 ICE with incomplete type in template
!      * [346]21336 Internal compiler error when using custom new operators
!      * [347]21768 ICE in error message due to violation of coding
         conventions
!      * [348]21853 constness of pointer to data member ignored
!      * [349]21903 Default argument of template function causes a
         compile-time error
!      * [350]21983 multiple diagnostics
!      * [351]21987 New testsuite failure
         g++.dg/warn/conversion-function-1.C
!      * [352]22153 ICE on invalid template specialization
!      * [353]22172 Internal compiler error, seg fault.
!      * [354]21286 filebuf::xsgetn vs pipes
!      * [355]22233 ICE with wrong number of template parameters
!      * [356]22508 ICE after invalid operator new
!      * [357]22545 ICE with pointer to class member & user defined
         conversion operator
!      * [358]23528 Wrong default allocator in ext/hash_map
!      * [359]23550 char_traits requirements/1.cc test bad math
!      * [360]23586 Bad diagnostic for invalid namespace-name
!      * [361]23624 ICE in invert_truthvalue, in fold-const.c
!      * [362]23639 Bad error message: not a member of '<declaration error>'
!      * [363]23797 ICE on typename outside template
!      * [364]23965 Bogus error message: no matching function for call to
         'foo(<type error>)'
!      * [365]24052 &#`label_decl' not supported by dump_expr#<expression
         error>
!      * [366]24580 virtual base class cause exception not to be caught
  
      Problems in generated debug information
  
!      * [367]24267 Bad DWARF for altivec vectors
  
      Optimizations issues
  
!      * [368]17810 ICE in verify_local_live_at_start
!      * [369]17860 Wrong generated code for loop with varying bound
!      * [370]21709 ICE on compile-time complex NaN
!      * [371]21964 broken tail call at -O2 or more
!      * [372]22167 Strange optimization bug when using -Os
!      * [373]22619 Compilation failure for real_const_1.f and
         real_const_2.f90
!      * [374]23241 Invalid code generated for comparison of uchar to 255
!      * [375]23478 Miscompilation due to reloading of a var that is also
         used in EH pad
!      * [376]24470 segmentation fault in cc1plus when compiling with -O
!      * [377]24950 ICE in operand_subword_force
  
      Precompiled headers problems
  
!      * [378]14400 Cannot compile qt-x11-free-3.3.0
!      * [379]14940 PCH largefile test fails on various platforms
  
      Preprocessor bugs
  
!      * [380]20239 ICE on empty preprocessed input
!      * [381]15220 "gcc -E -MM -MG" reports missing system headers in
         source directory
  
      Testsuite issues
  
!      * [382]19275 gcc.dg/20020919-1.c fails with -fpic/-fPIC on
         i686-pc-linux-gnu
  
      Alpha specific
  
!      * [383]21888 bootstrap failure with linker relaxation enabled
  
      ARM specific
  
!      * [384]15342 [arm-linux]: ICE in verify_local_live_at_start
!      * [385]23985 Memory aliasing information incorrect in inlined memcpy
  
      ColdFile specific
  
!      * [386]16719 Illegal move of byte into address register causes
         compiler to ICE
  
      HPPA specific
  
!      * [387]21723 ICE while building libgfortran
!      * [388]21841 -mhp-ld/-mgnu-ld documentation
  
      IA-64 specific
  
!      * [389]23644 IA-64 hardware models and configuration options
         documentation error
!      * [390]24718 Shared libgcc not used for linking by default
  
      M68000 specific
  
!      * [391]18421 ICE in reload_cse_simplify_operands, in postreload.c
  
      MIPS specific
  
!      * [392]20621 ICE in change_address_1, in emit-rtl.c
  
      PowerPC and PowerPC64 specific
  
!      * [393]18583 error on valid code: const
         __attribute__((altivec(vector__))) doesn't work in arrays
!      * [394]20191 ICE in reload_cse_simplify_operands
!      * [395]22083 AIX: TARGET_C99_FUNCTIONS is wrongly defined
!      * [396]23070 CALL_V4_CLEAR_FP_ARGS flag not properly set
!      * [397]23404 gij trashes args of functions with more than 8 fp args
!      * [398]23539 C & C++ compiler generating misaligned references
         regardless of compiler flags
!      * [399]24102 floatdisf2_internal2 broken
!      * [400]24465 -mminimal-toc miscompilation of __thread vars
  
      Solaris specific
  
!      * [401]19933 Problem with define of HUGE_VAL in math_c99
!      * [402]21889 Native Solaris assembler cannot grok DTP-relative debug
         symbols
  
      SPARC specific
  
!      * [403]19300 PCH failures on sparc-linux
!      * [404]20301 Assembler labels have a leading "-"
!      * [405]20673 C PCH testsuite assembly comparison failure
  
      x86 and x86_64 specific
  
!      * [406]18582 ICE with arrays of type V2DF
!      * [407]19340 Compilation SEGFAULTs with -O1 -fschedule-insns2
         -fsched2-use-traces
!      * [408]21716 ICE in reg-stack.c's swap_rtx_condition
!      * [409]24315 amd64 fails -fpeephole2
       __________________________________________________________________
  
! GCC 3.4.6
  
!    This is the [410]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 3.4.6 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [411]GCC manuals. If that fails, the
!     [412]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [413]gcc@gcc.gnu.org. All of [414]our lists have public
      archives.
  
!    Copyright (C) [415]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [416]maintained by the GCC team. Last modified
!    2023-01-27.
  
  References
  
--- 18278,18801 ----
  
      Bootstrap failures and issues
  
!      * [174]16469 [mips-sgi-irix5.3] bootstrap fails in
         libstdc++-v3/testsuite
!      * [175]16344 [hppa-linux-gnu] libstdc++'s PCH built by
         profiledbootstrap does not work with the built compiler
!      * [176]16842 [Solaris/x86] mkheaders can not find mkheaders.conf
  
      Multi-platform internal compiler errors (ICEs)
  
!      * [177]12608 (c++) ICE: expected class 't', have 'x' (error_mark) in
         cp_parser_class_specifier, in cp/parser.c
!      * [178]14492 ICE in loc_descriptor_from_tree, in dwarf2out.c
!      * [179]15461 (c++) ICE due to NRV and inlining
!      * [180]15890 (c++) ICE in c_expand_expr, in c-common.c
!      * [181]16180 ICE: segmentation fault in RTL optimization
!      * [182]16224 (c++) ICE in write_unscoped_name (template/namespace)
!      * [183]16408 ICE: in delete_insn, in cfgrtl.c
!      * [184]16529 (c++) ICE for: namespace-alias shall not be declared as
         the name of any other entity
!      * [185]16698 (c++) ICE with exceptions and declaration of __cxa_throw
!      * [186]16706 (c++) ICE in finish_member_declaration, in
         cp/semantics.c
!      * [187]16810 (c++) Legal C++ program with cast gives ICE in
         build_ptrmemfunc
!      * [188]16851 (c++) ICE when throwing a comma expression
!      * [189]16870 (c++) Boost.Spirit causes ICE in tsubst, in cp/pt.c
!      * [190]16904 (c++) ICE in finish_class_member_access_expr, in
         cp/typeck.c
!      * [191]16905 (c++) ICE (segfault) with exceptions
!      * [192]16964 (c++) ICE in cp_parser_class_specifier due to
         redefinition
!      * [193]17068 (c++) ICE: tree check: expected class 'd', have 'x'
         (identifier_node) in dependent_template_p, in cp/pt.c
  
      Preprocessor bugs
  
!      * [194]16366 Preprocessor option -remap causes memory corruption
  
      Optimization
  
!      * [195]15345 unreferenced nested inline functions not optimized away
!      * [196]16590 Incorrect execution when compiling with -O2
!      * [197]16693 Bitwise AND is lost when used within a cast to an enum
         of the same precision
!      * [198]17078 Jump into if(0) substatement fails
  
      Problems in generated debug information
  
!      * [199]13956 incorrect stabs for nested local variables
  
      C front end bugs
  
!      * [200]16684 GCC should not warn about redundant redeclarations of
         built-ins
  
      C++ compiler and library
  
!      * [201]12658 Thread safety problems in locale::global() and
         locale::locale()
!      * [202]13092 g++ accepts invalid pointer-to-member conversion
!      * [203]15320 Excessive memory consumption
!      * [204]16246 Incorrect template argument deduction
!      * [205]16273 Memory exhausted when using nested classes and virtual
         functions
!      * [206]16401 ostringstream in gcc 3.4.x very slow for big data
!      * [207]16411 undefined reference to
         __gnu_cxx::stdio_sync_filebuf<char, std::char_traits<char>
         >::file()
!      * [208]16489 G++ incorrectly rejects use of a null constant integral
         expression as a null constant pointer
!      * [209]16618 offsetof fails with constant member
!      * [210]16637 syntax error reported for valid input code
!      * [211]16717 __attribute__((constructor)) broken in C++
!      * [212]16813 compiler error in DEBUG version of range insertion
         std::map::insert
!      * [213]16853 pointer-to-member initialization from incompatible one
         accepted
!      * [214]16889 ambiguity is not detected
!      * [215]16959 Segmentation fault in ios_base::sync_with_stdio
  
      Java compiler and library
  
!      * [216]7587 direct threaded interpreter not thread-safe
!      * [217]16473 ServerSocket accept() leaks file descriptors
!      * [218]16478 Hash synchronization deadlock with finalizers
  
      Alpha-specific
  
!      * [219]10695 ICE in dwarf2out_frame_debug_expr, in dwarf2out.c
!      * [220]16974 could not split insn (ice in final_scan_insn, in
         final.c)
  
      x86-specific
  
!      * [221]16298 ICE in output_operand
!      * [222]17113 ICE with SSE2 intrinsics
  
      x86-64 specific
  
!      * [223]14697 libstdc++ couldn't find 32bit libgcc_s
  
      MIPS-specific
  
!      * [224]15869 [mips64] No NOP after LW (with -mips1 -O0)
!      * [225]16325 [mips64] value profiling clobbers gp on mips
!      * [226]16357 [mipsisa64-elf] ICE copying 7 bytes between extern
         char[]s
!      * [227]16380 [mips64] Use of uninitialised register after dbra
         conversion
!      * [228]16407 [mips64] Unaligned access to local variables
!      * [229]16643 [mips64] verify_local_live_at_start ICE after
         crossjumping & cfgcleanup
  
      ARM-specific
  
!      * [230]15927 THUMB -O2: strength-reduced iteration variable ends up
         off by 1
!      * [231]15948 THUMB: ICE with non-commutative cbranch
!      * [232]17019 THUMB: bad switch statement in md code for
         addsi3_cbranch_scratch
  
      IA64-specific
  
!      * [233]16130 ICE on valid code: in bundling, in config/ia64/ia64.c
         (-mtune=merced)
!      * [234]16142 ICE on valid code: in bundling, in config/ia64/ia64.c
         (-mtune=itanium)
!      * [235]16278 Gcc failed to build Linux kernel with -mtune=merced
!      * [236]16414 ICE on valid code: typo in comparison of asm_noperands
         result
!      * [237]16445 ICE on valid code: don't count ignored insns
!      * [238]16490 ICE (segfault) while compiling with -fprofile-use
!      * [239]16683 ia64 does not honor SUBTARGET_EXTRA_SPECS
  
      PowerPC-specific
  
!      * [240]16195 (ppc64): Miscompilation of GCC 3.3.x by 3.4.x
!      * [241]16239 ICE on ppc64 (mozilla 1.7 compile, -O1 -fno-exceptions
         issue)
  
      SPARC-specific
  
!      * [242]16199 ICE while compiling apache 2.0.49
!      * [243]16416 -m64 doesn't imply -mcpu=v9 anymore
!      * [244]16430 ICE when returning non-C aggregates larger than 16 bytes
  
      Bugs specific to embedded processors
  
!      * [245]16379 [m32r] can't output large model function call of memcpy
!      * [246]17093 [m32r] ICE with -msdata=use -O0
!      * [247]17119 [m32r] ICE at switch case 0x8000
  
      DJGPP-specific
  
!      * [248]15928 libstdc++ in 3.4.x doesn't cross-compile for djgpp
  
      Alpha Tru64-specific
  
!      * [249]16210 libstdc++ gratuitously omits "long long" I/O
  
      Testsuite, documentation issues (compiler is not affected):
  
!      * [250]15488 (libstdc++) possibly insufficient file permissions for
         executing test suite
!      * [251]16250 ada/doctools runs makeinfo even in release tarball
       __________________________________________________________________
  
! [252]GCC 3.4.3
  
!    This is the [253]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 3.4.3 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
      Bootstrap failures
  
!      * [254]17369 [ia64] Bootstrap failure with binutils-2.15.90.0.1.1
!      * [255]17850 [arm-elf] bootstrap failure - libstdc++ uses strtold
         when undeclared
  
      Internal compiler errors (ICEs) affecting multiple platforms
  
!      * [256]13948 (java) GCJ segmentation fault while compiling GL4Java
         .class files
!      * [257]14492 ICE in loc_descriptor_from_tree, in dwarf2out.c
!      * [258]16301 (c++) ICE when "strong" attribute is attached to a using
         directive
!      * [259]16566 ICE with flexible arrays
!      * [260]17023 ICE with nested functions in parameter declaration
!      * [261]17027 ICE with noreturn function in loop at -O2
!      * [262]17524 ICE in grokdeclarator, in cp/decl.c
!      * [263]17826 (c++) ICE in cp_tree_equal
  
      C and optimization bugs
  
!      * [264]15526 -ftrapv aborts on 0 * (-1)
!      * [265]16999 #ident stopped working
!      * [266]17503 quadratic behaviour in invalid_mode_change_p
!      * [267]17581 Long long arithmetic fails inside a switch/case
         statement when compiled with -O2
!      * [268]18129 -fwritable-strings doesn't work
  
      C++ compiler and library bugs
  
!      * [269]10975 incorrect initial ostringstream::tellp()
!      * [270]11722 Unbuffered filebuf::sgetn is slow
!      * [271]14534 Unrecognizing static function as a template parameter
         when its return value is also templated
!      * [272]15172 Copy constructor optimization in aggregate
         initialization
!      * [273]15786 Bad error message for frequently occuring error.
!      * [274]16162 Rejects valid member-template-definition
!      * [275]16612 empty basic_strings can't live in shared memory
!      * [276]16715 std::basic_iostream is instantiated when used, even
         though instantiations are already contained in libstdc++
!      * [277]16848 code in /ext/demangle.h appears broken
!      * [278]17132 GCC fails to eliminate function template specialization
         when argument deduction fails
!      * [279]17259 One more _S_leaf incorrectly qualified with _RopeRep::
         in ropeimpl.h
!      * [280]17327 use of `enumeral_type' in template type unification
!      * [281]17393 "unused variable '._0'" warning with -Wall
!      * [282]17501 Confusion with member templates
!      * [283]17537 g++ not passing -lstdc++ to linker when all command line
         arguments are libraries
!      * [284]17585 usage of unqualified name of static member from within
         class not allowed
!      * [285]17821 Poor diagnostic for using "." instead of "->"
!      * [286]17829 wrong error: call of overloaded function is ambiguous
!      * [287]17851 Misleading diagnostic for invalid function declarations
         with undeclared types
!      * [288]17976 Destructor is called twice
!      * [289]18020 rejects valid definition of enum value in template
!      * [290]18093 bogus conflict in namespace aliasing
!      * [291]18140 C++ parser bug when using >> in templates
  
      Fortran
  
!      * [292]17541 data statements with double precision constants fail
  
      x86-specific
  
!      * [293]17853 -O2 ICE for MMX testcase
  
      SPARC-specific
  
!      * [294]17245 ICE compiling gsl-1.5 statistics/lag1.c
  
      Darwin-specific
  
!      * [295]17167 FATAL:Symbol L_foo$stub already defined.
  
      AIX-specific
  
!      * [296]17277 could not catch an exception when specified -maix64
  
      Solaris-specific
  
!      * [297]17505 <cmath> calls acosf(), ceilf(), and other functions
         missing from system libraries
  
      HP/UX specific:
  
!      * [298]17684 /usr/ccs/bin/ld: Can't create libgcc_s.sl
  
      ARM-specific
  
!      * [299]17384 ICE with mode attribute on structures
  
      MIPS-specific
  
!      * [300]17770 No NOP after LWL with -mips1
  
      Other embedded target specific
  
!      * [301]11476 [arc-elf] gcc ICE on newlib's vfprintf.c
!      * [302]14064 [avr-elf] -fdata-sections triggers ICE
!      * [303]14678 [m68hc11-elf] gcc ICE
!      * [304]15583 [powerpc-rtems] powerpc-rtems lacks __USE_INIT_FINI__
!      * [305]15790 [i686-coff] Alignment error building gcc with i686-coff
         target
!      * [306]15886 [SH] Miscompilation with -O2 -fPIC
!      * [307]16884 [avr-elf] [fweb related] bug while initializing
         variables
  
      Bugs relating to debugger support
  
!      * [308]13841 missing debug info for _Complex function arguments
!      * [309]15860 [big-endian targets] No DW_AT_location debug info is
         emitted for formal arguments to a function that uses "register"
         qualifiers
  
      Testsuite issues (compiler not affected)
  
!      * [310]17465 Testsuite in libffi overrides LD_LIBRARY_PATH
!      * [311]17469 Testsuite in libstdc++ overrides LD_LIBRARY_PATH
!      * [312]18138 [mips-sgi-irix6.5] libgcc_s.so.1 not found by 64-bit
         testsuite
  
      Documentation
  
!      * [313]15498 typo in gcc manual: non-existing locale example en_UK,
         should be en_GB
!      * [314]15747 [mips-sgi-irix5.3] /bin/sh hangs during bootstrap:
         document broken shell
!      * [315]16406 USE_LD_AS_NEEDED undocumented
       __________________________________________________________________
  
! [316]GCC 3.4.4
  
!    This is the [317]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 3.4.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
       __________________________________________________________________
  
! [318]GCC 3.4.5
  
!    This is the [319]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 3.4.5 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
      Bootstrap issues
  
!      * [320]24688 sco_math fixincl breaks math.h
  
      C compiler bugs
  
!      * [321]17188 struct Foo { } redefinition
!      * [322]20187 wrong code for ((unsigned char)(unsigned long
         long)((a?a:1)&(a*b)))?0:1)
!      * [323]21873 infinite warning loop on bad array initializer
!      * [324]21899 enum definition accepts values to be overriden
!      * [325]22061 ICE in find_function_data, in function.c
!      * [326]22308 Failure to diagnose violation of constraint 6.516p2
!      * [327]22458 ICE on missing brace
!      * [328]22589 ICE casting to long long
!      * [329]24101 Segfault with preprocessed source
  
      C++ compiler and library bugs
  
!      * [330]10611 operations on vector mode not recognized in C++
!      * [331]13377 unexpected behavior of namespace usage directive
!      * [332]16002 Strange error message with new parser
!      * [333]17413 local classes as template argument
!      * [334]17609 spurious error message after using keyword
!      * [335]17618 ICE in cp_convert_to_pointer, in cp/cvt.c
!      * [336]18124 ICE with invalid template template parameter
!      * [337]18155 typedef in template declaration not rejected
!      * [338]18177 ICE with const_cast for undeclared variable
!      * [339]18368 C++ error message regression
!      * [340]16378 ICE when returning a copy of a packed member
!      * [341]18466 int ::i; accepted
!      * [342]18512 ICE on invalid usage of template base class
!      * [343]18454 ICE when returning undefined type
!      * [344]18738 typename not allowed with non-dependent qualified name
!      * [345]18803 rejects access to operator() in template
!      * [346]19004 ICE in uses_template_parms, in cp/pt.c
!      * [347]19208 Spurious error about variably modified type
!      * [348]18253 bad error message / ICE for invalid template parameter
!      * [349]19608 ICE after friend function definition in local class
!      * [350]19884 ICE on explicit instantiation of a non-template
         constructor
!      * [351]20153 ICE when C++ template function contains anonymous union
!      * [352]20563 Infinite loop in diagnostic (and ice after error
         message)
!      * [353]20789 ICE with incomplete type in template
!      * [354]21336 Internal compiler error when using custom new operators
!      * [355]21768 ICE in error message due to violation of coding
         conventions
!      * [356]21853 constness of pointer to data member ignored
!      * [357]21903 Default argument of template function causes a
         compile-time error
!      * [358]21983 multiple diagnostics
!      * [359]21987 New testsuite failure
         g++.dg/warn/conversion-function-1.C
!      * [360]22153 ICE on invalid template specialization
!      * [361]22172 Internal compiler error, seg fault.
!      * [362]21286 filebuf::xsgetn vs pipes
!      * [363]22233 ICE with wrong number of template parameters
!      * [364]22508 ICE after invalid operator new
!      * [365]22545 ICE with pointer to class member & user defined
         conversion operator
!      * [366]23528 Wrong default allocator in ext/hash_map
!      * [367]23550 char_traits requirements/1.cc test bad math
!      * [368]23586 Bad diagnostic for invalid namespace-name
!      * [369]23624 ICE in invert_truthvalue, in fold-const.c
!      * [370]23639 Bad error message: not a member of '<declaration error>'
!      * [371]23797 ICE on typename outside template
!      * [372]23965 Bogus error message: no matching function for call to
         'foo(<type error>)'
!      * [373]24052 &#`label_decl' not supported by dump_expr#<expression
         error>
!      * [374]24580 virtual base class cause exception not to be caught
  
      Problems in generated debug information
  
!      * [375]24267 Bad DWARF for altivec vectors
  
      Optimizations issues
  
!      * [376]17810 ICE in verify_local_live_at_start
!      * [377]17860 Wrong generated code for loop with varying bound
!      * [378]21709 ICE on compile-time complex NaN
!      * [379]21964 broken tail call at -O2 or more
!      * [380]22167 Strange optimization bug when using -Os
!      * [381]22619 Compilation failure for real_const_1.f and
         real_const_2.f90
!      * [382]23241 Invalid code generated for comparison of uchar to 255
!      * [383]23478 Miscompilation due to reloading of a var that is also
         used in EH pad
!      * [384]24470 segmentation fault in cc1plus when compiling with -O
!      * [385]24950 ICE in operand_subword_force
  
      Precompiled headers problems
  
!      * [386]14400 Cannot compile qt-x11-free-3.3.0
!      * [387]14940 PCH largefile test fails on various platforms
  
      Preprocessor bugs
  
!      * [388]20239 ICE on empty preprocessed input
!      * [389]15220 "gcc -E -MM -MG" reports missing system headers in
         source directory
  
      Testsuite issues
  
!      * [390]19275 gcc.dg/20020919-1.c fails with -fpic/-fPIC on
         i686-pc-linux-gnu
  
      Alpha specific
  
!      * [391]21888 bootstrap failure with linker relaxation enabled
  
      ARM specific
  
!      * [392]15342 [arm-linux]: ICE in verify_local_live_at_start
!      * [393]23985 Memory aliasing information incorrect in inlined memcpy
  
      ColdFile specific
  
!      * [394]16719 Illegal move of byte into address register causes
         compiler to ICE
  
      HPPA specific
  
!      * [395]21723 ICE while building libgfortran
!      * [396]21841 -mhp-ld/-mgnu-ld documentation
  
      IA-64 specific
  
!      * [397]23644 IA-64 hardware models and configuration options
         documentation error
!      * [398]24718 Shared libgcc not used for linking by default
  
      M68000 specific
  
!      * [399]18421 ICE in reload_cse_simplify_operands, in postreload.c
  
      MIPS specific
  
!      * [400]20621 ICE in change_address_1, in emit-rtl.c
  
      PowerPC and PowerPC64 specific
  
!      * [401]18583 error on valid code: const
         __attribute__((altivec(vector__))) doesn't work in arrays
!      * [402]20191 ICE in reload_cse_simplify_operands
!      * [403]22083 AIX: TARGET_C99_FUNCTIONS is wrongly defined
!      * [404]23070 CALL_V4_CLEAR_FP_ARGS flag not properly set
!      * [405]23404 gij trashes args of functions with more than 8 fp args
!      * [406]23539 C & C++ compiler generating misaligned references
         regardless of compiler flags
!      * [407]24102 floatdisf2_internal2 broken
!      * [408]24465 -mminimal-toc miscompilation of __thread vars
  
      Solaris specific
  
!      * [409]19933 Problem with define of HUGE_VAL in math_c99
!      * [410]21889 Native Solaris assembler cannot grok DTP-relative debug
         symbols
  
      SPARC specific
  
!      * [411]19300 PCH failures on sparc-linux
!      * [412]20301 Assembler labels have a leading "-"
!      * [413]20673 C PCH testsuite assembly comparison failure
  
      x86 and x86_64 specific
  
!      * [414]18582 ICE with arrays of type V2DF
!      * [415]19340 Compilation SEGFAULTs with -O1 -fschedule-insns2
         -fsched2-use-traces
!      * [416]21716 ICE in reg-stack.c's swap_rtx_condition
!      * [417]24315 amd64 fails -fpeephole2
       __________________________________________________________________
  
! [418]GCC 3.4.6
  
!    This is the [419]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 3.4.6 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [420]GCC manuals. If that fails, the
!     [421]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [422]gcc@gcc.gnu.org. All of [423]our lists have public
      archives.
  
!    Copyright (C) [424]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [425]maintained by the GCC team. Last modified
!    2025-01-31.
  
  References
  
*************** References
*** 18315,18726 ****
     8. https://gcc.gnu.org/PR11953
     9. https://gcc.gnu.org/PR8361
    10. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Other-Builtins.html#Other Builtins
!   11. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#209
!   12. https://gcc.gnu.org/bugs/#cxx_rvalbind
!   13. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Objective-C-Dialect-Options.html
    14. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Objective-C-Dialect-Options.html
    15. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Objective-C-Dialect-Options.html
!   16. http://www.gnu.org/software/classpath/
!   17. https://www.eclipse.org/
!   18. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/g77/News.html
!   19. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Alpha-Built-in-Functions.html
!   20. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gccint/Processor-pipeline-description.html
!   21. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gccint/Comparison-of-the-two-descriptions.html
!   22. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gccint/Processor-pipeline-description.html
!   23. https://gcc.gnu.org/gcc-3.4/mips-abi.html
!   24. https://gcc.gnu.org/gcc-3.4/powerpc-abi.html
!   25. https://gcc.gnu.org/gcc-3.4/sparc-abi.html
!   26. https://gcc.gnu.org/bugzilla/buglist.cgi?short_desc_type=notregexp&short_desc=\[3\.4.*[Rr]egression&target_milestone=3.4.0&bug_status=RESOLVED&resolution=FIXED
!   27. https://gcc.gnu.org/PR10129
!   28. https://gcc.gnu.org/PR14576
!   29. https://gcc.gnu.org/PR14760
!   30. https://gcc.gnu.org/PR14671
!   31. https://gcc.gnu.org/PR15093
!   32. https://gcc.gnu.org/PR15178
!   33. https://gcc.gnu.org/PR12753
!   34. https://gcc.gnu.org/PR13985
!   35. https://gcc.gnu.org/PR14810
!   36. https://gcc.gnu.org/PR14883
!   37. https://gcc.gnu.org/PR15044
!   38. https://gcc.gnu.org/PR15057
!   39. https://gcc.gnu.org/PR15064
!   40. https://gcc.gnu.org/PR15142
!   41. https://gcc.gnu.org/PR15159
!   42. https://gcc.gnu.org/PR15165
!   43. https://gcc.gnu.org/PR15193
!   44. https://gcc.gnu.org/PR15209
!   45. https://gcc.gnu.org/PR15227
!   46. https://gcc.gnu.org/PR15285
!   47. https://gcc.gnu.org/PR15299
!   48. https://gcc.gnu.org/PR15329
!   49. https://gcc.gnu.org/PR15550
!   50. https://gcc.gnu.org/PR15554
!   51. https://gcc.gnu.org/PR15640
!   52. https://gcc.gnu.org/PR15666
!   53. https://gcc.gnu.org/PR15696
!   54. https://gcc.gnu.org/PR15701
!   55. https://gcc.gnu.org/PR15761
!   56. https://gcc.gnu.org/PR15829
!   57. https://gcc.gnu.org/PR14538
!   58. https://gcc.gnu.org/PR12391
!   59. https://gcc.gnu.org/PR14649
!   60. https://gcc.gnu.org/PR15004
!   61. https://gcc.gnu.org/PR15749
!   62. https://gcc.gnu.org/PR10646
!   63. https://gcc.gnu.org/PR12077
!   64. https://gcc.gnu.org/PR13598
!   65. https://gcc.gnu.org/PR14211
!   66. https://gcc.gnu.org/PR14220
!   67. https://gcc.gnu.org/PR14245
!   68. https://gcc.gnu.org/PR14340
!   69. https://gcc.gnu.org/PR14600
!   70. https://gcc.gnu.org/PR14668
!   71. https://gcc.gnu.org/PR14775
!   72. https://gcc.gnu.org/PR14821
!   73. https://gcc.gnu.org/PR14930
!   74. https://gcc.gnu.org/PR14932
!   75. https://gcc.gnu.org/PR14950
!   76. https://gcc.gnu.org/PR14962
!   77. https://gcc.gnu.org/PR14975
!   78. https://gcc.gnu.org/PR15002
!   79. https://gcc.gnu.org/PR15025
!   80. https://gcc.gnu.org/PR15046
!   81. https://gcc.gnu.org/PR15069
!   82. https://gcc.gnu.org/PR15074
!   83. https://gcc.gnu.org/PR15083
!   84. https://gcc.gnu.org/PR15096
!   85. https://gcc.gnu.org/PR15287
!   86. https://gcc.gnu.org/PR15317
!   87. https://gcc.gnu.org/PR15337
!   88. https://gcc.gnu.org/PR15361
!   89. https://gcc.gnu.org/PR15412
!   90. https://gcc.gnu.org/PR15427
!   91. https://gcc.gnu.org/PR15471
!   92. https://gcc.gnu.org/PR15503
!   93. https://gcc.gnu.org/PR15507
!   94. https://gcc.gnu.org/PR15542
!   95. https://gcc.gnu.org/PR15565
!   96. https://gcc.gnu.org/PR15625
!   97. https://gcc.gnu.org/PR15629
!   98. https://gcc.gnu.org/PR15742
!   99. https://gcc.gnu.org/PR15775
!  100. https://gcc.gnu.org/PR15821
!  101. https://gcc.gnu.org/PR15862
!  102. https://gcc.gnu.org/PR15875
!  103. https://gcc.gnu.org/PR15877
!  104. https://gcc.gnu.org/PR15947
!  105. https://gcc.gnu.org/PR16020
!  106. https://gcc.gnu.org/PR16154
!  107. https://gcc.gnu.org/PR16174
!  108. https://gcc.gnu.org/PR14315
!  109. https://gcc.gnu.org/PR15151
!  110. https://gcc.gnu.org/PR7993
!  111. https://gcc.gnu.org/PR15228
!  112. https://gcc.gnu.org/PR15345
!  113. https://gcc.gnu.org/PR15945
!  114. https://gcc.gnu.org/PR15526
!  115. https://gcc.gnu.org/PR14690
!  116. https://gcc.gnu.org/PR15112
!  117. https://gcc.gnu.org/PR15067
!  118. https://gcc.gnu.org/PR1963
!  119. https://gcc.gnu.org/PR15717
!  120. https://gcc.gnu.org/PR14782
!  121. https://gcc.gnu.org/PR14828
!  122. https://gcc.gnu.org/PR15202
!  123. https://gcc.gnu.org/PR14610
!  124. https://gcc.gnu.org/PR14813
!  125. https://gcc.gnu.org/PR14857
!  126. https://gcc.gnu.org/PR15598
!  127. https://gcc.gnu.org/PR15653
!  128. https://gcc.gnu.org/PR15189
!  129. https://gcc.gnu.org/PR15331
!  130. https://gcc.gnu.org/PR16144
!  131. https://gcc.gnu.org/PR16176
!  132. https://gcc.gnu.org/PR11591
!  133. https://gcc.gnu.org/PR12028
!  134. https://gcc.gnu.org/PR14478
!  135. https://gcc.gnu.org/PR14567
!  136. https://gcc.gnu.org/PR14715
!  137. https://gcc.gnu.org/PR14902
!  138. https://gcc.gnu.org/PR14924
!  139. https://gcc.gnu.org/PR14960
!  140. https://gcc.gnu.org/PR15106
!  141. https://gcc.gnu.org/PR16026
!  142. https://gcc.gnu.org/PR15191
!  143. https://gcc.gnu.org/PR15662
!  144. https://gcc.gnu.org/PR15054
!  145. https://gcc.gnu.org/PR15783
!  146. https://gcc.gnu.org/PR15626
!  147. https://gcc.gnu.org/PR14326
!  148. https://gcc.gnu.org/PR14723
!  149. https://gcc.gnu.org/PR15290
!  150. https://gcc.gnu.org/PR15250
!  151. https://gcc.gnu.org/PR15551
!  152. https://gcc.gnu.org/PR8309
!  153. https://gcc.gnu.org/PR13250
!  154. https://gcc.gnu.org/PR13803
!  155. https://gcc.gnu.org/PR14093
!  156. https://gcc.gnu.org/PR14457
!  157. https://gcc.gnu.org/PR14542
!  158. https://gcc.gnu.org/PR15100
!  159. https://gcc.gnu.org/PR15296
!  160. https://gcc.gnu.org/PR15396
!  161. https://gcc.gnu.org/PR15782
!  162. https://gcc.gnu.org/PR11610
!  163. https://gcc.gnu.org/PR15488
!  164. https://gcc.gnu.org/PR15489
!  165. https://gcc.gnu.org/PR13928
!  166. https://gcc.gnu.org/PR14150
!  167. https://gcc.gnu.org/PR14949
!  168. https://gcc.gnu.org/PR15123
!  169. https://gcc.gnu.org/PR16469
!  170. https://gcc.gnu.org/PR16344
!  171. https://gcc.gnu.org/PR16842
!  172. https://gcc.gnu.org/PR12608
!  173. https://gcc.gnu.org/PR14492
!  174. https://gcc.gnu.org/PR15461
!  175. https://gcc.gnu.org/PR15890
!  176. https://gcc.gnu.org/PR16180
!  177. https://gcc.gnu.org/PR16224
!  178. https://gcc.gnu.org/PR16408
!  179. https://gcc.gnu.org/PR16529
!  180. https://gcc.gnu.org/PR16698
!  181. https://gcc.gnu.org/PR16706
!  182. https://gcc.gnu.org/PR16810
!  183. https://gcc.gnu.org/PR16851
!  184. https://gcc.gnu.org/PR16870
!  185. https://gcc.gnu.org/PR16904
!  186. https://gcc.gnu.org/PR16905
!  187. https://gcc.gnu.org/PR16964
!  188. https://gcc.gnu.org/PR17068
!  189. https://gcc.gnu.org/PR16366
!  190. https://gcc.gnu.org/PR15345
!  191. https://gcc.gnu.org/PR16590
!  192. https://gcc.gnu.org/PR16693
!  193. https://gcc.gnu.org/PR17078
!  194. https://gcc.gnu.org/PR13956
!  195. https://gcc.gnu.org/PR16684
!  196. https://gcc.gnu.org/PR12658
!  197. https://gcc.gnu.org/PR13092
!  198. https://gcc.gnu.org/PR15320
!  199. https://gcc.gnu.org/PR16246
!  200. https://gcc.gnu.org/PR16273
!  201. https://gcc.gnu.org/PR16401
!  202. https://gcc.gnu.org/PR16411
!  203. https://gcc.gnu.org/PR16489
!  204. https://gcc.gnu.org/PR16618
!  205. https://gcc.gnu.org/PR16637
!  206. https://gcc.gnu.org/PR16717
!  207. https://gcc.gnu.org/PR16813
!  208. https://gcc.gnu.org/PR16853
!  209. https://gcc.gnu.org/PR16889
!  210. https://gcc.gnu.org/PR16959
!  211. https://gcc.gnu.org/PR7587
!  212. https://gcc.gnu.org/PR16473
!  213. https://gcc.gnu.org/PR16478
!  214. https://gcc.gnu.org/PR10695
!  215. https://gcc.gnu.org/PR16974
!  216. https://gcc.gnu.org/PR16298
!  217. https://gcc.gnu.org/PR17113
!  218. https://gcc.gnu.org/PR14697
!  219. https://gcc.gnu.org/PR15869
!  220. https://gcc.gnu.org/PR16325
!  221. https://gcc.gnu.org/PR16357
!  222. https://gcc.gnu.org/PR16380
!  223. https://gcc.gnu.org/PR16407
!  224. https://gcc.gnu.org/PR16643
!  225. https://gcc.gnu.org/PR15927
!  226. https://gcc.gnu.org/PR15948
!  227. https://gcc.gnu.org/PR17019
!  228. https://gcc.gnu.org/PR16130
!  229. https://gcc.gnu.org/PR16142
!  230. https://gcc.gnu.org/PR16278
!  231. https://gcc.gnu.org/PR16414
!  232. https://gcc.gnu.org/PR16445
!  233. https://gcc.gnu.org/PR16490
!  234. https://gcc.gnu.org/PR16683
!  235. https://gcc.gnu.org/PR16195
!  236. https://gcc.gnu.org/PR16239
!  237. https://gcc.gnu.org/PR16199
!  238. https://gcc.gnu.org/PR16416
!  239. https://gcc.gnu.org/PR16430
!  240. https://gcc.gnu.org/PR16379
!  241. https://gcc.gnu.org/PR17093
!  242. https://gcc.gnu.org/PR17119
!  243. https://gcc.gnu.org/PR15928
!  244. https://gcc.gnu.org/PR16210
!  245. https://gcc.gnu.org/PR15488
!  246. https://gcc.gnu.org/PR16250
!  247. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.3
!  248. https://gcc.gnu.org/PR17369
!  249. https://gcc.gnu.org/PR17850
!  250. https://gcc.gnu.org/PR13948
!  251. https://gcc.gnu.org/PR14492
!  252. https://gcc.gnu.org/PR16301
!  253. https://gcc.gnu.org/PR16566
!  254. https://gcc.gnu.org/PR17023
!  255. https://gcc.gnu.org/PR17027
!  256. https://gcc.gnu.org/PR17524
!  257. https://gcc.gnu.org/PR17826
!  258. https://gcc.gnu.org/PR15526
!  259. https://gcc.gnu.org/PR16999
!  260. https://gcc.gnu.org/PR17503
!  261. https://gcc.gnu.org/PR17581
!  262. https://gcc.gnu.org/PR18129
!  263. https://gcc.gnu.org/PR10975
!  264. https://gcc.gnu.org/PR11722
!  265. https://gcc.gnu.org/PR14534
!  266. https://gcc.gnu.org/PR15172
!  267. https://gcc.gnu.org/PR15786
!  268. https://gcc.gnu.org/PR16162
!  269. https://gcc.gnu.org/PR16612
!  270. https://gcc.gnu.org/PR16715
!  271. https://gcc.gnu.org/PR16848
!  272. https://gcc.gnu.org/PR17132
!  273. https://gcc.gnu.org/PR17259
!  274. https://gcc.gnu.org/PR17327
!  275. https://gcc.gnu.org/PR17393
!  276. https://gcc.gnu.org/PR17501
!  277. https://gcc.gnu.org/PR17537
!  278. https://gcc.gnu.org/PR17585
!  279. https://gcc.gnu.org/PR17821
!  280. https://gcc.gnu.org/PR17829
!  281. https://gcc.gnu.org/PR17851
!  282. https://gcc.gnu.org/PR17976
!  283. https://gcc.gnu.org/PR18020
!  284. https://gcc.gnu.org/PR18093
!  285. https://gcc.gnu.org/PR18140
!  286. https://gcc.gnu.org/PR17541
!  287. https://gcc.gnu.org/PR17853
!  288. https://gcc.gnu.org/PR17245
!  289. https://gcc.gnu.org/PR17167
!  290. https://gcc.gnu.org/PR17277
!  291. https://gcc.gnu.org/PR17505
!  292. https://gcc.gnu.org/PR17684
!  293. https://gcc.gnu.org/PR17384
!  294. https://gcc.gnu.org/PR17770
!  295. https://gcc.gnu.org/PR11476
!  296. https://gcc.gnu.org/PR14064
!  297. https://gcc.gnu.org/PR14678
!  298. https://gcc.gnu.org/PR15583
!  299. https://gcc.gnu.org/PR15790
!  300. https://gcc.gnu.org/PR15886
!  301. https://gcc.gnu.org/PR16884
!  302. https://gcc.gnu.org/PR13841
!  303. https://gcc.gnu.org/PR15860
!  304. https://gcc.gnu.org/PR17465
!  305. https://gcc.gnu.org/PR17469
!  306. https://gcc.gnu.org/PR18138
!  307. https://gcc.gnu.org/PR15498
!  308. https://gcc.gnu.org/PR15747
!  309. https://gcc.gnu.org/PR16406
!  310. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.4
!  311. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.5
!  312. https://gcc.gnu.org/PR24688
!  313. https://gcc.gnu.org/PR17188
!  314. https://gcc.gnu.org/PR20187
!  315. https://gcc.gnu.org/PR21873
!  316. https://gcc.gnu.org/PR21899
!  317. https://gcc.gnu.org/PR22061
!  318. https://gcc.gnu.org/PR22208
!  319. https://gcc.gnu.org/PR22458
!  320. https://gcc.gnu.org/PR22589
!  321. https://gcc.gnu.org/PR24101
!  322. https://gcc.gnu.org/PR10611
!  323. https://gcc.gnu.org/PR13377
!  324. https://gcc.gnu.org/PR16002
!  325. https://gcc.gnu.org/PR17413
!  326. https://gcc.gnu.org/PR17609
!  327. https://gcc.gnu.org/PR17618
!  328. https://gcc.gnu.org/PR18124
!  329. https://gcc.gnu.org/PR18155
!  330. https://gcc.gnu.org/PR18177
!  331. https://gcc.gnu.org/PR18368
!  332. https://gcc.gnu.org/PR18378
!  333. https://gcc.gnu.org/PR18466
!  334. https://gcc.gnu.org/PR18512
!  335. https://gcc.gnu.org/PR18545
!  336. https://gcc.gnu.org/PR18738
!  337. https://gcc.gnu.org/PR18803
!  338. https://gcc.gnu.org/PR19004
!  339. https://gcc.gnu.org/PR19208
!  340. https://gcc.gnu.org/PR19253
!  341. https://gcc.gnu.org/PR19608
!  342. https://gcc.gnu.org/PR19884
!  343. https://gcc.gnu.org/PR20153
!  344. https://gcc.gnu.org/PR20563
!  345. https://gcc.gnu.org/PR20789
!  346. https://gcc.gnu.org/PR21336
!  347. https://gcc.gnu.org/PR21768
!  348. https://gcc.gnu.org/PR21853
!  349. https://gcc.gnu.org/PR21903
!  350. https://gcc.gnu.org/PR21983
!  351. https://gcc.gnu.org/PR21987
!  352. https://gcc.gnu.org/PR22153
!  353. https://gcc.gnu.org/PR22172
!  354. https://gcc.gnu.org/PR21286
!  355. https://gcc.gnu.org/PR22233
!  356. https://gcc.gnu.org/PR22508
!  357. https://gcc.gnu.org/PR22545
!  358. https://gcc.gnu.org/PR23528
!  359. https://gcc.gnu.org/PR23550
!  360. https://gcc.gnu.org/PR23586
!  361. https://gcc.gnu.org/PR23624
!  362. https://gcc.gnu.org/PR23639
!  363. https://gcc.gnu.org/PR23797
!  364. https://gcc.gnu.org/PR23965
!  365. https://gcc.gnu.org/PR24052
!  366. https://gcc.gnu.org/PR24580
!  367. https://gcc.gnu.org/PR24267
!  368. https://gcc.gnu.org/PR17810
!  369. https://gcc.gnu.org/PR17860
!  370. https://gcc.gnu.org/PR21709
!  371. https://gcc.gnu.org/PR21964
!  372. https://gcc.gnu.org/PR22167
!  373. https://gcc.gnu.org/PR22619
!  374. https://gcc.gnu.org/PR23241
!  375. https://gcc.gnu.org/PR23478
!  376. https://gcc.gnu.org/PR24470
!  377. https://gcc.gnu.org/PR24950
!  378. https://gcc.gnu.org/PR14400
!  379. https://gcc.gnu.org/PR14940
!  380. https://gcc.gnu.org/PR20239
!  381. https://gcc.gnu.org/PR15220
!  382. https://gcc.gnu.org/PR19275
!  383. https://gcc.gnu.org/PR21888
!  384. https://gcc.gnu.org/PR15342
!  385. https://gcc.gnu.org/PR23985
!  386. https://gcc.gnu.org/PR16719
!  387. https://gcc.gnu.org/PR21723
!  388. https://gcc.gnu.org/PR21841
!  389. https://gcc.gnu.org/PR23644
!  390. https://gcc.gnu.org/PR24718
!  391. https://gcc.gnu.org/PR18421
!  392. https://gcc.gnu.org/PR20621
!  393. https://gcc.gnu.org/PR18583
!  394. https://gcc.gnu.org/PR20191
!  395. https://gcc.gnu.org/PR22083
!  396. https://gcc.gnu.org/PR23070
!  397. https://gcc.gnu.org/PR23404
!  398. https://gcc.gnu.org/PR23539
!  399. https://gcc.gnu.org/PR24102
!  400. https://gcc.gnu.org/PR24465
!  401. https://gcc.gnu.org/PR19933
!  402. https://gcc.gnu.org/PR21889
!  403. https://gcc.gnu.org/PR19300
!  404. https://gcc.gnu.org/PR20301
!  405. https://gcc.gnu.org/PR20673
!  406. https://gcc.gnu.org/PR18582
!  407. https://gcc.gnu.org/PR19340
!  408. https://gcc.gnu.org/PR21716
!  409. https://gcc.gnu.org/PR24315
!  410. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.6
!  411. https://gcc.gnu.org/onlinedocs/
!  412. mailto:gcc-help@gcc.gnu.org
!  413. mailto:gcc@gcc.gnu.org
!  414. https://gcc.gnu.org/lists.html
!  415. https://www.fsf.org/
!  416. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-3.3/index.html
                               GCC 3.3 Release Series
--- 18809,19229 ----
     8. https://gcc.gnu.org/PR11953
     9. https://gcc.gnu.org/PR8361
    10. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Other-Builtins.html#Other Builtins
!   11. https://gcc.gnu.org/gcc-3.4/changes.html#cplusplus
!   12. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#209
!   13. https://gcc.gnu.org/bugs/#cxx_rvalbind
    14. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Objective-C-Dialect-Options.html
    15. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Objective-C-Dialect-Options.html
!   16. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Objective-C-Dialect-Options.html
!   17. https://www.gnu.org/software/classpath/
!   18. https://www.eclipse.org/
!   19. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/g77/News.html
!   20. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Alpha-Built-in-Functions.html
!   21. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gccint/Processor-pipeline-description.html
!   22. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gccint/Comparison-of-the-two-descriptions.html
!   23. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gccint/Processor-pipeline-description.html
!   24. https://gcc.gnu.org/gcc-3.4/mips-abi.html
!   25. https://gcc.gnu.org/gcc-3.4/powerpc-abi.html
!   26. https://gcc.gnu.org/gcc-3.4/sparc-abi.html
!   27. https://gcc.gnu.org/gcc-3.4/changes.html#obsolete_systems
!   28. https://gcc.gnu.org/gcc-3.4/changes.html#GCC3.4.0
!   29. https://gcc.gnu.org/bugzilla/buglist.cgi?short_desc_type=notregexp&short_desc=\[3\.4.*[Rr]egression&target_milestone=3.4.0&bug_status=RESOLVED&resolution=FIXED
!   30. https://gcc.gnu.org/gcc-3.4/changes.html#GCC3.4.1
!   31. https://gcc.gnu.org/PR10129
!   32. https://gcc.gnu.org/PR14576
!   33. https://gcc.gnu.org/PR14760
!   34. https://gcc.gnu.org/PR14671
!   35. https://gcc.gnu.org/PR15093
!   36. https://gcc.gnu.org/PR15178
!   37. https://gcc.gnu.org/PR12753
!   38. https://gcc.gnu.org/PR13985
!   39. https://gcc.gnu.org/PR14810
!   40. https://gcc.gnu.org/PR14883
!   41. https://gcc.gnu.org/PR15044
!   42. https://gcc.gnu.org/PR15057
!   43. https://gcc.gnu.org/PR15064
!   44. https://gcc.gnu.org/PR15142
!   45. https://gcc.gnu.org/PR15159
!   46. https://gcc.gnu.org/PR15165
!   47. https://gcc.gnu.org/PR15193
!   48. https://gcc.gnu.org/PR15209
!   49. https://gcc.gnu.org/PR15227
!   50. https://gcc.gnu.org/PR15285
!   51. https://gcc.gnu.org/PR15299
!   52. https://gcc.gnu.org/PR15329
!   53. https://gcc.gnu.org/PR15550
!   54. https://gcc.gnu.org/PR15554
!   55. https://gcc.gnu.org/PR15640
!   56. https://gcc.gnu.org/PR15666
!   57. https://gcc.gnu.org/PR15696
!   58. https://gcc.gnu.org/PR15701
!   59. https://gcc.gnu.org/PR15761
!   60. https://gcc.gnu.org/PR15829
!   61. https://gcc.gnu.org/PR14538
!   62. https://gcc.gnu.org/PR12391
!   63. https://gcc.gnu.org/PR14649
!   64. https://gcc.gnu.org/PR15004
!   65. https://gcc.gnu.org/PR15749
!   66. https://gcc.gnu.org/PR10646
!   67. https://gcc.gnu.org/PR12077
!   68. https://gcc.gnu.org/PR13598
!   69. https://gcc.gnu.org/PR14211
!   70. https://gcc.gnu.org/PR14220
!   71. https://gcc.gnu.org/PR14245
!   72. https://gcc.gnu.org/PR14340
!   73. https://gcc.gnu.org/PR14600
!   74. https://gcc.gnu.org/PR14668
!   75. https://gcc.gnu.org/PR14775
!   76. https://gcc.gnu.org/PR14821
!   77. https://gcc.gnu.org/PR14930
!   78. https://gcc.gnu.org/PR14932
!   79. https://gcc.gnu.org/PR14950
!   80. https://gcc.gnu.org/PR14962
!   81. https://gcc.gnu.org/PR14975
!   82. https://gcc.gnu.org/PR15002
!   83. https://gcc.gnu.org/PR15025
!   84. https://gcc.gnu.org/PR15046
!   85. https://gcc.gnu.org/PR15069
!   86. https://gcc.gnu.org/PR15074
!   87. https://gcc.gnu.org/PR15083
!   88. https://gcc.gnu.org/PR15096
!   89. https://gcc.gnu.org/PR15287
!   90. https://gcc.gnu.org/PR15317
!   91. https://gcc.gnu.org/PR15337
!   92. https://gcc.gnu.org/PR15361
!   93. https://gcc.gnu.org/PR15412
!   94. https://gcc.gnu.org/PR15427
!   95. https://gcc.gnu.org/PR15471
!   96. https://gcc.gnu.org/PR15503
!   97. https://gcc.gnu.org/PR15507
!   98. https://gcc.gnu.org/PR15542
!   99. https://gcc.gnu.org/PR15565
!  100. https://gcc.gnu.org/PR15625
!  101. https://gcc.gnu.org/PR15629
!  102. https://gcc.gnu.org/PR15742
!  103. https://gcc.gnu.org/PR15775
!  104. https://gcc.gnu.org/PR15821
!  105. https://gcc.gnu.org/PR15862
!  106. https://gcc.gnu.org/PR15875
!  107. https://gcc.gnu.org/PR15877
!  108. https://gcc.gnu.org/PR15947
!  109. https://gcc.gnu.org/PR16020
!  110. https://gcc.gnu.org/PR16154
!  111. https://gcc.gnu.org/PR16174
!  112. https://gcc.gnu.org/PR14315
!  113. https://gcc.gnu.org/PR15151
!  114. https://gcc.gnu.org/PR7993
!  115. https://gcc.gnu.org/PR15228
!  116. https://gcc.gnu.org/PR15345
!  117. https://gcc.gnu.org/PR15945
!  118. https://gcc.gnu.org/PR15526
!  119. https://gcc.gnu.org/PR14690
!  120. https://gcc.gnu.org/PR15112
!  121. https://gcc.gnu.org/PR15067
!  122. https://gcc.gnu.org/PR1963
!  123. https://gcc.gnu.org/PR15717
!  124. https://gcc.gnu.org/PR14782
!  125. https://gcc.gnu.org/PR14828
!  126. https://gcc.gnu.org/PR15202
!  127. https://gcc.gnu.org/PR14610
!  128. https://gcc.gnu.org/PR14813
!  129. https://gcc.gnu.org/PR14857
!  130. https://gcc.gnu.org/PR15598
!  131. https://gcc.gnu.org/PR15653
!  132. https://gcc.gnu.org/PR15189
!  133. https://gcc.gnu.org/PR15331
!  134. https://gcc.gnu.org/PR16144
!  135. https://gcc.gnu.org/PR16176
!  136. https://gcc.gnu.org/PR11591
!  137. https://gcc.gnu.org/PR12028
!  138. https://gcc.gnu.org/PR14478
!  139. https://gcc.gnu.org/PR14567
!  140. https://gcc.gnu.org/PR14715
!  141. https://gcc.gnu.org/PR14902
!  142. https://gcc.gnu.org/PR14924
!  143. https://gcc.gnu.org/PR14960
!  144. https://gcc.gnu.org/PR15106
!  145. https://gcc.gnu.org/PR16026
!  146. https://gcc.gnu.org/PR15191
!  147. https://gcc.gnu.org/PR15662
!  148. https://gcc.gnu.org/PR15054
!  149. https://gcc.gnu.org/PR15783
!  150. https://gcc.gnu.org/PR15626
!  151. https://gcc.gnu.org/PR14326
!  152. https://gcc.gnu.org/PR14723
!  153. https://gcc.gnu.org/PR15290
!  154. https://gcc.gnu.org/PR15250
!  155. https://gcc.gnu.org/PR15551
!  156. https://gcc.gnu.org/PR8309
!  157. https://gcc.gnu.org/PR13250
!  158. https://gcc.gnu.org/PR13803
!  159. https://gcc.gnu.org/PR14093
!  160. https://gcc.gnu.org/PR14457
!  161. https://gcc.gnu.org/PR14542
!  162. https://gcc.gnu.org/PR15100
!  163. https://gcc.gnu.org/PR15296
!  164. https://gcc.gnu.org/PR15396
!  165. https://gcc.gnu.org/PR15782
!  166. https://gcc.gnu.org/PR11610
!  167. https://gcc.gnu.org/PR15488
!  168. https://gcc.gnu.org/PR15489
!  169. https://gcc.gnu.org/PR13928
!  170. https://gcc.gnu.org/PR14150
!  171. https://gcc.gnu.org/PR14949
!  172. https://gcc.gnu.org/PR15123
!  173. https://gcc.gnu.org/gcc-3.4/changes.html#GCC3.4.2
!  174. https://gcc.gnu.org/PR16469
!  175. https://gcc.gnu.org/PR16344
!  176. https://gcc.gnu.org/PR16842
!  177. https://gcc.gnu.org/PR12608
!  178. https://gcc.gnu.org/PR14492
!  179. https://gcc.gnu.org/PR15461
!  180. https://gcc.gnu.org/PR15890
!  181. https://gcc.gnu.org/PR16180
!  182. https://gcc.gnu.org/PR16224
!  183. https://gcc.gnu.org/PR16408
!  184. https://gcc.gnu.org/PR16529
!  185. https://gcc.gnu.org/PR16698
!  186. https://gcc.gnu.org/PR16706
!  187. https://gcc.gnu.org/PR16810
!  188. https://gcc.gnu.org/PR16851
!  189. https://gcc.gnu.org/PR16870
!  190. https://gcc.gnu.org/PR16904
!  191. https://gcc.gnu.org/PR16905
!  192. https://gcc.gnu.org/PR16964
!  193. https://gcc.gnu.org/PR17068
!  194. https://gcc.gnu.org/PR16366
!  195. https://gcc.gnu.org/PR15345
!  196. https://gcc.gnu.org/PR16590
!  197. https://gcc.gnu.org/PR16693
!  198. https://gcc.gnu.org/PR17078
!  199. https://gcc.gnu.org/PR13956
!  200. https://gcc.gnu.org/PR16684
!  201. https://gcc.gnu.org/PR12658
!  202. https://gcc.gnu.org/PR13092
!  203. https://gcc.gnu.org/PR15320
!  204. https://gcc.gnu.org/PR16246
!  205. https://gcc.gnu.org/PR16273
!  206. https://gcc.gnu.org/PR16401
!  207. https://gcc.gnu.org/PR16411
!  208. https://gcc.gnu.org/PR16489
!  209. https://gcc.gnu.org/PR16618
!  210. https://gcc.gnu.org/PR16637
!  211. https://gcc.gnu.org/PR16717
!  212. https://gcc.gnu.org/PR16813
!  213. https://gcc.gnu.org/PR16853
!  214. https://gcc.gnu.org/PR16889
!  215. https://gcc.gnu.org/PR16959
!  216. https://gcc.gnu.org/PR7587
!  217. https://gcc.gnu.org/PR16473
!  218. https://gcc.gnu.org/PR16478
!  219. https://gcc.gnu.org/PR10695
!  220. https://gcc.gnu.org/PR16974
!  221. https://gcc.gnu.org/PR16298
!  222. https://gcc.gnu.org/PR17113
!  223. https://gcc.gnu.org/PR14697
!  224. https://gcc.gnu.org/PR15869
!  225. https://gcc.gnu.org/PR16325
!  226. https://gcc.gnu.org/PR16357
!  227. https://gcc.gnu.org/PR16380
!  228. https://gcc.gnu.org/PR16407
!  229. https://gcc.gnu.org/PR16643
!  230. https://gcc.gnu.org/PR15927
!  231. https://gcc.gnu.org/PR15948
!  232. https://gcc.gnu.org/PR17019
!  233. https://gcc.gnu.org/PR16130
!  234. https://gcc.gnu.org/PR16142
!  235. https://gcc.gnu.org/PR16278
!  236. https://gcc.gnu.org/PR16414
!  237. https://gcc.gnu.org/PR16445
!  238. https://gcc.gnu.org/PR16490
!  239. https://gcc.gnu.org/PR16683
!  240. https://gcc.gnu.org/PR16195
!  241. https://gcc.gnu.org/PR16239
!  242. https://gcc.gnu.org/PR16199
!  243. https://gcc.gnu.org/PR16416
!  244. https://gcc.gnu.org/PR16430
!  245. https://gcc.gnu.org/PR16379
!  246. https://gcc.gnu.org/PR17093
!  247. https://gcc.gnu.org/PR17119
!  248. https://gcc.gnu.org/PR15928
!  249. https://gcc.gnu.org/PR16210
!  250. https://gcc.gnu.org/PR15488
!  251. https://gcc.gnu.org/PR16250
!  252. https://gcc.gnu.org/gcc-3.4/changes.html#GCC3.4.3
!  253. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.3
!  254. https://gcc.gnu.org/PR17369
!  255. https://gcc.gnu.org/PR17850
!  256. https://gcc.gnu.org/PR13948
!  257. https://gcc.gnu.org/PR14492
!  258. https://gcc.gnu.org/PR16301
!  259. https://gcc.gnu.org/PR16566
!  260. https://gcc.gnu.org/PR17023
!  261. https://gcc.gnu.org/PR17027
!  262. https://gcc.gnu.org/PR17524
!  263. https://gcc.gnu.org/PR17826
!  264. https://gcc.gnu.org/PR15526
!  265. https://gcc.gnu.org/PR16999
!  266. https://gcc.gnu.org/PR17503
!  267. https://gcc.gnu.org/PR17581
!  268. https://gcc.gnu.org/PR18129
!  269. https://gcc.gnu.org/PR10975
!  270. https://gcc.gnu.org/PR11722
!  271. https://gcc.gnu.org/PR14534
!  272. https://gcc.gnu.org/PR15172
!  273. https://gcc.gnu.org/PR15786
!  274. https://gcc.gnu.org/PR16162
!  275. https://gcc.gnu.org/PR16612
!  276. https://gcc.gnu.org/PR16715
!  277. https://gcc.gnu.org/PR16848
!  278. https://gcc.gnu.org/PR17132
!  279. https://gcc.gnu.org/PR17259
!  280. https://gcc.gnu.org/PR17327
!  281. https://gcc.gnu.org/PR17393
!  282. https://gcc.gnu.org/PR17501
!  283. https://gcc.gnu.org/PR17537
!  284. https://gcc.gnu.org/PR17585
!  285. https://gcc.gnu.org/PR17821
!  286. https://gcc.gnu.org/PR17829
!  287. https://gcc.gnu.org/PR17851
!  288. https://gcc.gnu.org/PR17976
!  289. https://gcc.gnu.org/PR18020
!  290. https://gcc.gnu.org/PR18093
!  291. https://gcc.gnu.org/PR18140
!  292. https://gcc.gnu.org/PR17541
!  293. https://gcc.gnu.org/PR17853
!  294. https://gcc.gnu.org/PR17245
!  295. https://gcc.gnu.org/PR17167
!  296. https://gcc.gnu.org/PR17277
!  297. https://gcc.gnu.org/PR17505
!  298. https://gcc.gnu.org/PR17684
!  299. https://gcc.gnu.org/PR17384
!  300. https://gcc.gnu.org/PR17770
!  301. https://gcc.gnu.org/PR11476
!  302. https://gcc.gnu.org/PR14064
!  303. https://gcc.gnu.org/PR14678
!  304. https://gcc.gnu.org/PR15583
!  305. https://gcc.gnu.org/PR15790
!  306. https://gcc.gnu.org/PR15886
!  307. https://gcc.gnu.org/PR16884
!  308. https://gcc.gnu.org/PR13841
!  309. https://gcc.gnu.org/PR15860
!  310. https://gcc.gnu.org/PR17465
!  311. https://gcc.gnu.org/PR17469
!  312. https://gcc.gnu.org/PR18138
!  313. https://gcc.gnu.org/PR15498
!  314. https://gcc.gnu.org/PR15747
!  315. https://gcc.gnu.org/PR16406
!  316. https://gcc.gnu.org/gcc-3.4/changes.html#GCC3.4.4
!  317. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.4
!  318. https://gcc.gnu.org/gcc-3.4/changes.html#GCC3.4.5
!  319. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.5
!  320. https://gcc.gnu.org/PR24688
!  321. https://gcc.gnu.org/PR17188
!  322. https://gcc.gnu.org/PR20187
!  323. https://gcc.gnu.org/PR21873
!  324. https://gcc.gnu.org/PR21899
!  325. https://gcc.gnu.org/PR22061
!  326. https://gcc.gnu.org/PR22208
!  327. https://gcc.gnu.org/PR22458
!  328. https://gcc.gnu.org/PR22589
!  329. https://gcc.gnu.org/PR24101
!  330. https://gcc.gnu.org/PR10611
!  331. https://gcc.gnu.org/PR13377
!  332. https://gcc.gnu.org/PR16002
!  333. https://gcc.gnu.org/PR17413
!  334. https://gcc.gnu.org/PR17609
!  335. https://gcc.gnu.org/PR17618
!  336. https://gcc.gnu.org/PR18124
!  337. https://gcc.gnu.org/PR18155
!  338. https://gcc.gnu.org/PR18177
!  339. https://gcc.gnu.org/PR18368
!  340. https://gcc.gnu.org/PR18378
!  341. https://gcc.gnu.org/PR18466
!  342. https://gcc.gnu.org/PR18512
!  343. https://gcc.gnu.org/PR18545
!  344. https://gcc.gnu.org/PR18738
!  345. https://gcc.gnu.org/PR18803
!  346. https://gcc.gnu.org/PR19004
!  347. https://gcc.gnu.org/PR19208
!  348. https://gcc.gnu.org/PR19253
!  349. https://gcc.gnu.org/PR19608
!  350. https://gcc.gnu.org/PR19884
!  351. https://gcc.gnu.org/PR20153
!  352. https://gcc.gnu.org/PR20563
!  353. https://gcc.gnu.org/PR20789
!  354. https://gcc.gnu.org/PR21336
!  355. https://gcc.gnu.org/PR21768
!  356. https://gcc.gnu.org/PR21853
!  357. https://gcc.gnu.org/PR21903
!  358. https://gcc.gnu.org/PR21983
!  359. https://gcc.gnu.org/PR21987
!  360. https://gcc.gnu.org/PR22153
!  361. https://gcc.gnu.org/PR22172
!  362. https://gcc.gnu.org/PR21286
!  363. https://gcc.gnu.org/PR22233
!  364. https://gcc.gnu.org/PR22508
!  365. https://gcc.gnu.org/PR22545
!  366. https://gcc.gnu.org/PR23528
!  367. https://gcc.gnu.org/PR23550
!  368. https://gcc.gnu.org/PR23586
!  369. https://gcc.gnu.org/PR23624
!  370. https://gcc.gnu.org/PR23639
!  371. https://gcc.gnu.org/PR23797
!  372. https://gcc.gnu.org/PR23965
!  373. https://gcc.gnu.org/PR24052
!  374. https://gcc.gnu.org/PR24580
!  375. https://gcc.gnu.org/PR24267
!  376. https://gcc.gnu.org/PR17810
!  377. https://gcc.gnu.org/PR17860
!  378. https://gcc.gnu.org/PR21709
!  379. https://gcc.gnu.org/PR21964
!  380. https://gcc.gnu.org/PR22167
!  381. https://gcc.gnu.org/PR22619
!  382. https://gcc.gnu.org/PR23241
!  383. https://gcc.gnu.org/PR23478
!  384. https://gcc.gnu.org/PR24470
!  385. https://gcc.gnu.org/PR24950
!  386. https://gcc.gnu.org/PR14400
!  387. https://gcc.gnu.org/PR14940
!  388. https://gcc.gnu.org/PR20239
!  389. https://gcc.gnu.org/PR15220
!  390. https://gcc.gnu.org/PR19275
!  391. https://gcc.gnu.org/PR21888
!  392. https://gcc.gnu.org/PR15342
!  393. https://gcc.gnu.org/PR23985
!  394. https://gcc.gnu.org/PR16719
!  395. https://gcc.gnu.org/PR21723
!  396. https://gcc.gnu.org/PR21841
!  397. https://gcc.gnu.org/PR23644
!  398. https://gcc.gnu.org/PR24718
!  399. https://gcc.gnu.org/PR18421
!  400. https://gcc.gnu.org/PR20621
!  401. https://gcc.gnu.org/PR18583
!  402. https://gcc.gnu.org/PR20191
!  403. https://gcc.gnu.org/PR22083
!  404. https://gcc.gnu.org/PR23070
!  405. https://gcc.gnu.org/PR23404
!  406. https://gcc.gnu.org/PR23539
!  407. https://gcc.gnu.org/PR24102
!  408. https://gcc.gnu.org/PR24465
!  409. https://gcc.gnu.org/PR19933
!  410. https://gcc.gnu.org/PR21889
!  411. https://gcc.gnu.org/PR19300
!  412. https://gcc.gnu.org/PR20301
!  413. https://gcc.gnu.org/PR20673
!  414. https://gcc.gnu.org/PR18582
!  415. https://gcc.gnu.org/PR19340
!  416. https://gcc.gnu.org/PR21716
!  417. https://gcc.gnu.org/PR24315
!  418. https://gcc.gnu.org/gcc-3.4/changes.html#GCC3.4.6
!  419. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.6
!  420. https://gcc.gnu.org/onlinedocs/
!  421. mailto:gcc-help@gcc.gnu.org
!  422. mailto:gcc@gcc.gnu.org
!  423. https://gcc.gnu.org/lists.html
!  424. https://www.fsf.org/
!  425. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-3.3/index.html
                               GCC 3.3 Release Series
*************** New Targets and Target Specific Improvem
*** 19026,19032 ****
            + Sibcall optimizations added.
       * The support for H8 Tiny is added to the H8/300 port with -mn.
  
! Obsolete Systems
  
     Support for a number of older systems has been declared obsolete in GCC
     3.3. Unless there is activity to revive them, the next release of GCC
--- 19529,19535 ----
            + Sibcall optimizations added.
       * The support for H8 Tiny is added to the H8/300 port with -mn.
  
! [8]Obsolete Systems
  
     Support for a number of older systems has been declared obsolete in GCC
     3.3. Unless there is activity to revive them, the next release of GCC
*************** GCC 3.3
*** 19128,19446 ****
  
      bootstrap failures
  
!      * [8]10140 cross compiler build failures: missing __mempcpy (DUP:
!        [9]10198,[10]10338)
  
      Internal compiler errors (multi-platform)
  
!      * [11]3581 large string causes segmentation fault in cc1
!      * [12]4382 __builtin_{set,long}jmp with -O3 can crash the compiler
!      * [13]5533 (c++) ICE when processing std::accumulate(begin, end,
         init, invalid_op)
!      * [14]6387 -fpic -gdwarf-2 -g1 combination gives ICE in dwarf2out
!      * [15]6412 (c++) ICE in retrieve_specialization
!      * [16]6620 (c++) partial template specialization causes an ICE
         (segmentation fault)
!      * [17]6663 (c++) ICE with attribute aligned
!      * [18]7068 ICE with incomplete types
!      * [19]7083 (c++) ICE using -gstabs with dodgy class derivation
!      * [20]7647 (c++) ICE when data member has the name of the enclosing
         class
!      * [21]7675 ICE in fixup_var_refs_1
!      * [22]7718 'complex' template instantiation causes ICE
!      * [23]8116 (c++) ICE in member template function
!      * [24]8358 (ada) Ada compiler accesses freed memory, crashes
!      * [25]8511 (c++) ICE: (hopefully) reproducible cc1plus segmentation
         fault
!      * [26]8564 (c++) ICE in find_function_data, in function.c
!      * [27]8660 (c++) template overloading ICE in tsubst_expr, in cp/pt.c
!      * [28]8766 (c++) ICE after failed initialization of static template
         variable
!      * [29]8803 ICE in instantiate_virtual_regs_1, in function.c
!      * [30]8846 (c++) ICE after diagnostic if fr_FR@euro locale is set
!      * [31]8906 (c++) ICE (Segmentation fault) when parsing nested-class
         definition
!      * [32]9216 (c++) ICE on missing template parameter
!      * [33]9261 (c++) ICE in arg_assoc, in cp/decl2.c
!      * [34]9263 (fortran) ICE caused by invalid PARAMETER in implied DO
         loop
!      * [35]9429 (c++) ICE in template instantiation with a pointered new
         operator
!      * [36]9516 Internal error when using a big array
!      * [37]9600 (c++) ICE with typedefs in template class
!      * [38]9629 (c++) virtual inheritance segfault
!      * [39]9672 (c++) ICE: Error reporting routines re-entered
!      * [40]9749 (c++) ICE in write_expression on invalid function
         prototype
!      * [41]9794 (fortran) ICE: floating point exception during constant
         folding
!      * [42]9829 (c++) Missing colon in nested namespace usage causes ICE
!      * [43]9916 (c++) ICE with noreturn function in ?: statement
!      * [44]9936 ICE with local function and variable-length 2d array
!      * [45]10262 (c++) cc1plus crashes with large generated code
!      * [46]10278 (c++) ICE in parser for invalid code
!      * [47]10446 (c++) ICE on definition of nonexistent member function of
         nested class in a class template
!      * [48]10451 (c++) ICE in grokdeclarator on spurious mutable
         declaration
!      * [49]10506 (c++) ICE in build_new at cp/init.c with
         -fkeep-inline-functions and multiple inheritance
!      * [50]10549 (c++) ICE in store_bit_field on bitfields that exceed the
         precision of the declared type
  
      Optimization bugs
  
!      * [51]2001 Inordinately long compile times in reload CSE regs
!      * [52]2391 Exponential compilation time explosion in combine
!      * [53]2960 Duplicate loop conditions even with -Os
!      * [54]4046 redundant conditional branch
!      * [55]6405 Loop-unrolling related performance regressions
!      * [56]6798 very long compile time with large case-statement
!      * [57]6871 const objects shouldn't be moved to .bss
!      * [58]6909 problem w/ -Os on modified loop-2c.c test case
!      * [59]7189 gcc -O2 -Wall does not print ``control reaches end of
         non-void function'' warning
!      * [60]7642 optimization problem with signbit()
!      * [61]8634 incorrect code for inlining of memcpy under -O2
!      * [62]8750 Cygwin prolog generation erroneously emitting __alloca as
         regular function call
  
      C front end
  
!      * [63]2161 long if-else cascade overflows parser stack
!      * [64]4319 short accepted on typedef'd char
!      * [65]8602 incorrect line numbers in warning messages when using
         inline functions
!      * [66]9177 -fdump-translation-unit: C front end deletes function_decl
         AST nodes and breaks debugging dumps
!      * [67]9853 miscompilation of non-constant structure initializer
  
      c++ compiler and library
  
!      * [68]45 legal template specialization code is rejected (DUP:
!        [69]3784)
!      * [70]764 lookup failure: friend operator and dereferencing a pointer
!        and templates (DUP: [71]5116)
!      * [72]2862 gcc accepts invalid explicit instantiation syntax (DUP:
         2863)
!      * [73]3663 G++ doesn't check access control during template
         instantiation
!      * [74]3797 gcc fails to emit explicit specialization of a template
         member
!      * [75]3948 Two destructors are called when no copy destructor is
         defined (ABI change)
!      * [76]4137 Conversion operator within template is not accepted
!      * [77]4361 bogus ambiguity taking the address of a member template
!      * [78]4802 g++ accepts illegal template code (access to private
!        member; DUP: [79]5837)
!      * [80]4803 inline function is used but never defined, and g++ does
         not object
!      * [81]5094 Partial specialization cannot be friend?
!      * [82]5730 complex<double>::norm() -- huge slowdown from egcs-2.91.66
!      * [83]6713 Regression wrt 3.0.4: g++ -O2 leads to seg fault at run
         time
!      * [84]7015 certain __asm__ constructs rejected
!      * [85]7086 compile time regression (quadratic behavior in
         fixup_var_refs)
!      * [86]7099 G++ doesn't set the noreturn attribute on std::exit and
         std::abort
!      * [87]7247 copy constructor missing when inlining enabled (invalid
         optimization?)
!      * [88]7441 string array initialization compilation time regression
         from seconds to minutes
!      * [89]7768 __PRETTY_FUNCTION__ for template destructor is wrong
!      * [90]7804 bad printing of floating point constant in warning message
!      * [91]8099 Friend classes and template specializations
!      * [92]8117 member function pointers and multiple inheritance
!      * [93]8205 using declaration and multiple inheritance
!      * [94]8645 unnecessary non-zero checks in stl_tree.h
!      * [95]8724 explicit destructor call for incomplete class allowed
!      * [96]8805 compile time regression with many member variables
!      * [97]8691 -O3 and -fno-implicit-templates are incompatible
!      * [98]8700 unhelpful error message for binding temp to reference
!      * [99]8724 explicit destructor call for incomplete class allowed
!      * [100]8949 numeric_limits<>::denorm_min() and is_iec559 problems
!      * [101]9016 Failure to consistently constant fold "constant" C++
         objects
!      * [102]9053 g++ confused about ambiguity of overloaded function
         templates
!      * [103]9152 undefined virtual thunks
!      * [104]9182 basic_filebuf<> does not report errors in codecvt<>::out
!      * [105]9297 data corruption due to codegen bug (when copying.)
!      * [106]9318 i/ostream::operator>>/<<(streambuf*) broken
!      * [107]9320 Incorrect usage of traits_type::int_type in stdio_filebuf
!      * [108]9400 bogus -Wshadow warning: shadowed declaration of this in
         local classes
!      * [109]9424 i/ostream::operator>>/<<(streambuf*) drops characters
!      * [110]9425 filebuf::pbackfail broken (DUP: [111]9439)
!      * [112]9474 GCC freezes in compiling a weird code mixing <iostream>
         and <iostream.h>
!      * [113]9548 Incorrect results from setf(ios::fixed) and precision(-1)
!        [114][DR 231]
!      * [115]9555 ostream inserters fail to set badbit on exception
!      * [116]9561 ostream inserters rethrow exception of wrong type
!      * [117]9563 ostream::sentry returns true after a failed preparation
!      * [118]9582 one-definition rule violation in std::allocator
!      * [119]9622 __PRETTY_FUNCTION__ incorrect in template destructors
!      * [120]9683 bug in initialization chains for static const variables
         from template classes
!      * [121]9791 -Woverloaded-virtual reports hiding of destructor
!      * [122]9817 collate::compare doesn't handle nul characters
!      * [123]9825 filebuf::sputbackc breaks sbumpc
!      * [124]9826 operator>>(basic_istream, basic_string) fails to compile
         with custom traits
!      * [125]9924 Multiple using statements for builtin functions not
         allowed
!      * [126]9946 destructor is not called for temporary object
!      * [127]9964 filebuf::close() sometimes fails to close file
!      * [128]9988 filebuf::overflow writes EOF to file
!      * [129]10033 optimization breaks polymorphic references w/ typeid
         operator
!      * [130]10097 filebuf::underflow drops characters
!      * [131]10132 filebuf destructor can throw exceptions
!      * [132]10180 gcc fails to warn about non-inlined function
!      * [133]10199 method parametrized by template does not work everywhere
!      * [134]10300 use of array-new (nothrow) in segfaults on NULL return
!      * [135]10427 Stack corruption with variable-length automatic arrays
         and virtual destructors
!      * [136]10503 Compilation never stops in fixed_type_or_null
  
      Objective-C
  
!      * [137]5956 selectors aren't matched properly when added to the
         selector table
  
      Fortran compiler and library
  
!      * [138]1832 list directed i/o overflow hangs, -fbounds-check doesn't
         detect
!      * [139]3924 g77 generates code that is rejected by GAS if COFF debug
         info requested
!      * [140]5634 doc: explain that configure --prefix=~/... does not work
!      * [141]6367 multiple repeat counts confuse namelist read into array
!      * [142]6491 Logical operations error on logicals when using
         -fugly-logint
!      * [143]6742 Generation of C++ Prototype for FORTRAN and extern "C"
!      * [144]7113 Failure of g77.f-torture/execute/f90-intrinsic-bit.f -Os
         on irix6.5
!      * [145]7236 OPEN(...,RECL=nnn,...) without ACCESS='DIRECT' should
         assume a direct access file
!      * [146]7278 g77 "bug"; the executable misbehaves (with -O2
         -fno-automatic)
!      * [147]7384 DATE_AND_TIME milliseconds field inactive on Windows
!      * [148]7388 Incorrect output with 0-based array of characters
!      * [149]8587 Double complex zero ** double precision number -> NaN
         instead of zero
!      * [150]9038 -ffixed-line-length-none -x f77-cpp-input gives: Warning:
         unknown register name line-length-none
!      * [151]10197 Direct access files not unformatted by default
  
      Java compiler and library
  
!      * [152]6005 gcj fails to build rhug on alpha
!      * [153]6389 System.getProperty("") should always throw an
         IllegalArgumentException
!      * [154]6576 java.util.ResourceBundle.getResource ignores locale
!      * [155]6652 new java.io.File("").getCanonicalFile() throws exception
!      * [156]7060 getMethod() doesn't search super interface
!      * [157]7073 bytecode interpreter gives wrong answer for interface
         getSuperclass()
!      * [158]7180 possible bug in
         javax.naming.spi.NamingManager.getPlusPath()
!      * [159]7416 java.security startup refs "GNU libgcj.security"
!      * [160]7570 Runtime.exec with null envp: child doesn't inherit parent
!        env (DUP: [161]7578)
!      * [162]7611 Internal error while compiling libjava with -O
!      * [163]7709 NullPointerException in _Jv_ResolvePoolEntry
!      * [164]7766 ZipInputStream.available returns 0 immediately after
         construction
!      * [165]7785 Calendar.getTimeInMillis/setTimeInMillis should be public
!      * [166]7786 TimeZone.getDSTSavings() from JDK1.4 not implemented
!      * [167]8142 '$' in class names vs. dlopen 'dynamic string tokens'
!      * [168]8234 ZipInputStream chokes when InputStream.read() returns
         small chunks
!      * [169]8415 reflection bug: exception info for Method
!      * [170]8481 java.Random.nextInt(int) may return negative
!      * [171]8593 Error reading GZIPped files with BufferedReader
!      * [172]8759 java.beans.Introspector has no flushCaches() or
         flushFromCaches() methods
!      * [173]8997 spin() calls Thread.sleep
!      * [174]9253 on win32, java.io.File.listFiles("C:\\") returns pwd
         instead of the root content of C:
!      * [175]9254 java::lang::Object::wait(), threads-win32.cc returns
         wrong return codes
!      * [176]9271 Severe bias in java.security.SecureRandom
  
      Ada compiler and library
  
!      * [177]6767 make gnatlib-shared fails on -laddr2line
!      * [178]9911 gnatmake fails to link when GCC configured with
         --with-sjlj-exceptions=yes
!      * [179]10020 Can't bootstrap gcc on AIX with Ada enabled
!      * [180]10546 Ada tasking not working on Red Hat 9
  
      preprocessor
  
!      * [181]7029 preprocessor should ignore #warning with -M
  
      ARM-specific
  
!      * [182]2903 [arm] Optimization bug with long long arithmetic
!      * [183]7873 arm-linux-gcc fails when assigning address to a bit field
  
      FreeBSD-specific
  
!      * [184]7680 float functions undefined in math.h/cmath with #define
         _XOPEN_SOURCE
  
      HP-UX or HP-PA-specific
  
!      * [185]8705 [HP-PA] ICE in emit_move_insn_1, in expr.c
!      * [186]9986 [HP-UX] Incorrect transformation of fputs_unlocked to
         fputc_unlocked
!      * [187]10056 [HP-PA] ICE at -O2 when building c++ code from doxygen
  
      m68hc11-specific
  
!      * [188]6744 Bad assembler code generated: reference to pseudo
         register z
!      * [189]7361 Internal compiler error in reload_cse_simplify_operands,
         in reload1.c
  
      MIPS-specific
  
!      * [190]9496 [mips-linux] bug in optimizer?
  
      PowerPC-specific
  
!      * [191]7067 -Os with -mcpu=powerpc optimizes for speed (?) instead of
         space
!      * [192]8480 reload ICEs for LAPACK code on powerpc64-linux
!      * [193]8784 [AIX] Internal compiler error in simplify_gen_subreg
!      * [194]10315 [powerpc] ICE: in extract_insn, in recog.c
  
      SPARC-specific
  
!      * [195]10267 (documentation) Wrong build instructions for
         *-*-solaris2*
  
      x86-specific (Intel/AMD)
  
!      * [196]7916 ICE in instantiate_virtual_register_1
!      * [197]7926 (c++) i486 instructions in header files make c++ programs
         crash on i386
!      * [198]8555 ICE in gen_split_1231
!      * [199]8994 ICE with -O -march=pentium4
!      * [200]9426 ICE with -fssa -funroll-loops -fprofile-arcs
!      * [201]9806 ICE in inline assembly with -fPIC flag
!      * [202]10077 gcc -msse2 generates movd to move dwords between xmm
         regs
!      * [203]10233 64-bit comparison only comparing bottom 32-bits
!      * [204]10286 type-punning doesn't work with __m64 and -O
!      * [205]10308 [x86] ICE with -O -fgcse or -O2
       __________________________________________________________________
  
! GCC 3.3.1
  
    Bug Fixes
  
--- 19631,19949 ----
  
      bootstrap failures
  
!      * [9]10140 cross compiler build failures: missing __mempcpy (DUP:
!        [10]10198,[11]10338)
  
      Internal compiler errors (multi-platform)
  
!      * [12]3581 large string causes segmentation fault in cc1
!      * [13]4382 __builtin_{set,long}jmp with -O3 can crash the compiler
!      * [14]5533 (c++) ICE when processing std::accumulate(begin, end,
         init, invalid_op)
!      * [15]6387 -fpic -gdwarf-2 -g1 combination gives ICE in dwarf2out
!      * [16]6412 (c++) ICE in retrieve_specialization
!      * [17]6620 (c++) partial template specialization causes an ICE
         (segmentation fault)
!      * [18]6663 (c++) ICE with attribute aligned
!      * [19]7068 ICE with incomplete types
!      * [20]7083 (c++) ICE using -gstabs with dodgy class derivation
!      * [21]7647 (c++) ICE when data member has the name of the enclosing
         class
!      * [22]7675 ICE in fixup_var_refs_1
!      * [23]7718 'complex' template instantiation causes ICE
!      * [24]8116 (c++) ICE in member template function
!      * [25]8358 (ada) Ada compiler accesses freed memory, crashes
!      * [26]8511 (c++) ICE: (hopefully) reproducible cc1plus segmentation
         fault
!      * [27]8564 (c++) ICE in find_function_data, in function.c
!      * [28]8660 (c++) template overloading ICE in tsubst_expr, in cp/pt.c
!      * [29]8766 (c++) ICE after failed initialization of static template
         variable
!      * [30]8803 ICE in instantiate_virtual_regs_1, in function.c
!      * [31]8846 (c++) ICE after diagnostic if fr_FR@euro locale is set
!      * [32]8906 (c++) ICE (Segmentation fault) when parsing nested-class
         definition
!      * [33]9216 (c++) ICE on missing template parameter
!      * [34]9261 (c++) ICE in arg_assoc, in cp/decl2.c
!      * [35]9263 (fortran) ICE caused by invalid PARAMETER in implied DO
         loop
!      * [36]9429 (c++) ICE in template instantiation with a pointered new
         operator
!      * [37]9516 Internal error when using a big array
!      * [38]9600 (c++) ICE with typedefs in template class
!      * [39]9629 (c++) virtual inheritance segfault
!      * [40]9672 (c++) ICE: Error reporting routines re-entered
!      * [41]9749 (c++) ICE in write_expression on invalid function
         prototype
!      * [42]9794 (fortran) ICE: floating point exception during constant
         folding
!      * [43]9829 (c++) Missing colon in nested namespace usage causes ICE
!      * [44]9916 (c++) ICE with noreturn function in ?: statement
!      * [45]9936 ICE with local function and variable-length 2d array
!      * [46]10262 (c++) cc1plus crashes with large generated code
!      * [47]10278 (c++) ICE in parser for invalid code
!      * [48]10446 (c++) ICE on definition of nonexistent member function of
         nested class in a class template
!      * [49]10451 (c++) ICE in grokdeclarator on spurious mutable
         declaration
!      * [50]10506 (c++) ICE in build_new at cp/init.c with
         -fkeep-inline-functions and multiple inheritance
!      * [51]10549 (c++) ICE in store_bit_field on bitfields that exceed the
         precision of the declared type
  
      Optimization bugs
  
!      * [52]2001 Inordinately long compile times in reload CSE regs
!      * [53]2391 Exponential compilation time explosion in combine
!      * [54]2960 Duplicate loop conditions even with -Os
!      * [55]4046 redundant conditional branch
!      * [56]6405 Loop-unrolling related performance regressions
!      * [57]6798 very long compile time with large case-statement
!      * [58]6871 const objects shouldn't be moved to .bss
!      * [59]6909 problem w/ -Os on modified loop-2c.c test case
!      * [60]7189 gcc -O2 -Wall does not print ``control reaches end of
         non-void function'' warning
!      * [61]7642 optimization problem with signbit()
!      * [62]8634 incorrect code for inlining of memcpy under -O2
!      * [63]8750 Cygwin prolog generation erroneously emitting __alloca as
         regular function call
  
      C front end
  
!      * [64]2161 long if-else cascade overflows parser stack
!      * [65]4319 short accepted on typedef'd char
!      * [66]8602 incorrect line numbers in warning messages when using
         inline functions
!      * [67]9177 -fdump-translation-unit: C front end deletes function_decl
         AST nodes and breaks debugging dumps
!      * [68]9853 miscompilation of non-constant structure initializer
  
      c++ compiler and library
  
!      * [69]45 legal template specialization code is rejected (DUP:
!        [70]3784)
!      * [71]764 lookup failure: friend operator and dereferencing a pointer
!        and templates (DUP: [72]5116)
!      * [73]2862 gcc accepts invalid explicit instantiation syntax (DUP:
         2863)
!      * [74]3663 G++ doesn't check access control during template
         instantiation
!      * [75]3797 gcc fails to emit explicit specialization of a template
         member
!      * [76]3948 Two destructors are called when no copy destructor is
         defined (ABI change)
!      * [77]4137 Conversion operator within template is not accepted
!      * [78]4361 bogus ambiguity taking the address of a member template
!      * [79]4802 g++ accepts illegal template code (access to private
!        member; DUP: [80]5837)
!      * [81]4803 inline function is used but never defined, and g++ does
         not object
!      * [82]5094 Partial specialization cannot be friend?
!      * [83]5730 complex<double>::norm() -- huge slowdown from egcs-2.91.66
!      * [84]6713 Regression wrt 3.0.4: g++ -O2 leads to seg fault at run
         time
!      * [85]7015 certain __asm__ constructs rejected
!      * [86]7086 compile time regression (quadratic behavior in
         fixup_var_refs)
!      * [87]7099 G++ doesn't set the noreturn attribute on std::exit and
         std::abort
!      * [88]7247 copy constructor missing when inlining enabled (invalid
         optimization?)
!      * [89]7441 string array initialization compilation time regression
         from seconds to minutes
!      * [90]7768 __PRETTY_FUNCTION__ for template destructor is wrong
!      * [91]7804 bad printing of floating point constant in warning message
!      * [92]8099 Friend classes and template specializations
!      * [93]8117 member function pointers and multiple inheritance
!      * [94]8205 using declaration and multiple inheritance
!      * [95]8645 unnecessary non-zero checks in stl_tree.h
!      * [96]8724 explicit destructor call for incomplete class allowed
!      * [97]8805 compile time regression with many member variables
!      * [98]8691 -O3 and -fno-implicit-templates are incompatible
!      * [99]8700 unhelpful error message for binding temp to reference
!      * [100]8724 explicit destructor call for incomplete class allowed
!      * [101]8949 numeric_limits<>::denorm_min() and is_iec559 problems
!      * [102]9016 Failure to consistently constant fold "constant" C++
         objects
!      * [103]9053 g++ confused about ambiguity of overloaded function
         templates
!      * [104]9152 undefined virtual thunks
!      * [105]9182 basic_filebuf<> does not report errors in codecvt<>::out
!      * [106]9297 data corruption due to codegen bug (when copying.)
!      * [107]9318 i/ostream::operator>>/<<(streambuf*) broken
!      * [108]9320 Incorrect usage of traits_type::int_type in stdio_filebuf
!      * [109]9400 bogus -Wshadow warning: shadowed declaration of this in
         local classes
!      * [110]9424 i/ostream::operator>>/<<(streambuf*) drops characters
!      * [111]9425 filebuf::pbackfail broken (DUP: [112]9439)
!      * [113]9474 GCC freezes in compiling a weird code mixing <iostream>
         and <iostream.h>
!      * [114]9548 Incorrect results from setf(ios::fixed) and precision(-1)
!        [115][DR 231]
!      * [116]9555 ostream inserters fail to set badbit on exception
!      * [117]9561 ostream inserters rethrow exception of wrong type
!      * [118]9563 ostream::sentry returns true after a failed preparation
!      * [119]9582 one-definition rule violation in std::allocator
!      * [120]9622 __PRETTY_FUNCTION__ incorrect in template destructors
!      * [121]9683 bug in initialization chains for static const variables
         from template classes
!      * [122]9791 -Woverloaded-virtual reports hiding of destructor
!      * [123]9817 collate::compare doesn't handle nul characters
!      * [124]9825 filebuf::sputbackc breaks sbumpc
!      * [125]9826 operator>>(basic_istream, basic_string) fails to compile
         with custom traits
!      * [126]9924 Multiple using statements for builtin functions not
         allowed
!      * [127]9946 destructor is not called for temporary object
!      * [128]9964 filebuf::close() sometimes fails to close file
!      * [129]9988 filebuf::overflow writes EOF to file
!      * [130]10033 optimization breaks polymorphic references w/ typeid
         operator
!      * [131]10097 filebuf::underflow drops characters
!      * [132]10132 filebuf destructor can throw exceptions
!      * [133]10180 gcc fails to warn about non-inlined function
!      * [134]10199 method parametrized by template does not work everywhere
!      * [135]10300 use of array-new (nothrow) in segfaults on NULL return
!      * [136]10427 Stack corruption with variable-length automatic arrays
         and virtual destructors
!      * [137]10503 Compilation never stops in fixed_type_or_null
  
      Objective-C
  
!      * [138]5956 selectors aren't matched properly when added to the
         selector table
  
      Fortran compiler and library
  
!      * [139]1832 list directed i/o overflow hangs, -fbounds-check doesn't
         detect
!      * [140]3924 g77 generates code that is rejected by GAS if COFF debug
         info requested
!      * [141]5634 doc: explain that configure --prefix=~/... does not work
!      * [142]6367 multiple repeat counts confuse namelist read into array
!      * [143]6491 Logical operations error on logicals when using
         -fugly-logint
!      * [144]6742 Generation of C++ Prototype for FORTRAN and extern "C"
!      * [145]7113 Failure of g77.f-torture/execute/f90-intrinsic-bit.f -Os
         on irix6.5
!      * [146]7236 OPEN(...,RECL=nnn,...) without ACCESS='DIRECT' should
         assume a direct access file
!      * [147]7278 g77 "bug"; the executable misbehaves (with -O2
         -fno-automatic)
!      * [148]7384 DATE_AND_TIME milliseconds field inactive on Windows
!      * [149]7388 Incorrect output with 0-based array of characters
!      * [150]8587 Double complex zero ** double precision number -> NaN
         instead of zero
!      * [151]9038 -ffixed-line-length-none -x f77-cpp-input gives: Warning:
         unknown register name line-length-none
!      * [152]10197 Direct access files not unformatted by default
  
      Java compiler and library
  
!      * [153]6005 gcj fails to build rhug on alpha
!      * [154]6389 System.getProperty("") should always throw an
         IllegalArgumentException
!      * [155]6576 java.util.ResourceBundle.getResource ignores locale
!      * [156]6652 new java.io.File("").getCanonicalFile() throws exception
!      * [157]7060 getMethod() doesn't search super interface
!      * [158]7073 bytecode interpreter gives wrong answer for interface
         getSuperclass()
!      * [159]7180 possible bug in
         javax.naming.spi.NamingManager.getPlusPath()
!      * [160]7416 java.security startup refs "GNU libgcj.security"
!      * [161]7570 Runtime.exec with null envp: child doesn't inherit parent
!        env (DUP: [162]7578)
!      * [163]7611 Internal error while compiling libjava with -O
!      * [164]7709 NullPointerException in _Jv_ResolvePoolEntry
!      * [165]7766 ZipInputStream.available returns 0 immediately after
         construction
!      * [166]7785 Calendar.getTimeInMillis/setTimeInMillis should be public
!      * [167]7786 TimeZone.getDSTSavings() from JDK1.4 not implemented
!      * [168]8142 '$' in class names vs. dlopen 'dynamic string tokens'
!      * [169]8234 ZipInputStream chokes when InputStream.read() returns
         small chunks
!      * [170]8415 reflection bug: exception info for Method
!      * [171]8481 java.Random.nextInt(int) may return negative
!      * [172]8593 Error reading GZIPped files with BufferedReader
!      * [173]8759 java.beans.Introspector has no flushCaches() or
         flushFromCaches() methods
!      * [174]8997 spin() calls Thread.sleep
!      * [175]9253 on win32, java.io.File.listFiles("C:\\") returns pwd
         instead of the root content of C:
!      * [176]9254 java::lang::Object::wait(), threads-win32.cc returns
         wrong return codes
!      * [177]9271 Severe bias in java.security.SecureRandom
  
      Ada compiler and library
  
!      * [178]6767 make gnatlib-shared fails on -laddr2line
!      * [179]9911 gnatmake fails to link when GCC configured with
         --with-sjlj-exceptions=yes
!      * [180]10020 Can't bootstrap gcc on AIX with Ada enabled
!      * [181]10546 Ada tasking not working on Red Hat 9
  
      preprocessor
  
!      * [182]7029 preprocessor should ignore #warning with -M
  
      ARM-specific
  
!      * [183]2903 [arm] Optimization bug with long long arithmetic
!      * [184]7873 arm-linux-gcc fails when assigning address to a bit field
  
      FreeBSD-specific
  
!      * [185]7680 float functions undefined in math.h/cmath with #define
         _XOPEN_SOURCE
  
      HP-UX or HP-PA-specific
  
!      * [186]8705 [HP-PA] ICE in emit_move_insn_1, in expr.c
!      * [187]9986 [HP-UX] Incorrect transformation of fputs_unlocked to
         fputc_unlocked
!      * [188]10056 [HP-PA] ICE at -O2 when building c++ code from doxygen
  
      m68hc11-specific
  
!      * [189]6744 Bad assembler code generated: reference to pseudo
         register z
!      * [190]7361 Internal compiler error in reload_cse_simplify_operands,
         in reload1.c
  
      MIPS-specific
  
!      * [191]9496 [mips-linux] bug in optimizer?
  
      PowerPC-specific
  
!      * [192]7067 -Os with -mcpu=powerpc optimizes for speed (?) instead of
         space
!      * [193]8480 reload ICEs for LAPACK code on powerpc64-linux
!      * [194]8784 [AIX] Internal compiler error in simplify_gen_subreg
!      * [195]10315 [powerpc] ICE: in extract_insn, in recog.c
  
      SPARC-specific
  
!      * [196]10267 (documentation) Wrong build instructions for
         *-*-solaris2*
  
      x86-specific (Intel/AMD)
  
!      * [197]7916 ICE in instantiate_virtual_register_1
!      * [198]7926 (c++) i486 instructions in header files make c++ programs
         crash on i386
!      * [199]8555 ICE in gen_split_1231
!      * [200]8994 ICE with -O -march=pentium4
!      * [201]9426 ICE with -fssa -funroll-loops -fprofile-arcs
!      * [202]9806 ICE in inline assembly with -fPIC flag
!      * [203]10077 gcc -msse2 generates movd to move dwords between xmm
         regs
!      * [204]10233 64-bit comparison only comparing bottom 32-bits
!      * [205]10286 type-punning doesn't work with __m64 and -O
!      * [206]10308 [x86] ICE with -O -fgcse or -O2
       __________________________________________________________________
  
! [207]GCC 3.3.1
  
    Bug Fixes
  
*************** GCC 3.3.1
*** 19451,19714 ****
  
      Bootstrap failures
  
!      * [206]11272 [Solaris] make bootstrap fails while building libstdc++
  
      Internal compiler errors (multi-platform)
  
!      * [207]5754 ICE on invalid nested template class
!      * [208]6597 ICE in set_mem_alias_set compiling Qt with -O2 on ia64
         and --enable-checking
!      * [209]6949 (c++) ICE in tsubst_decl, in cp/pt.c
!      * [210]7053 (c++) ICE when declaring a function already defined as a
         friend method of a template class
!      * [211]8164 (c++) ICE when using different const expressions as
         template parameter
!      * [212]8384 (c++) ICE in is_base_type, in dwarf2out.c
!      * [213]9559 (c++) ICE with invalid initialization of a static const
!      * [214]9649 (c++) ICE in finish_member_declaration, in cp/semantics.c
         when redeclaring a static member variable
!      * [215]9864 (fortran) ICE in add_abstract_origin_attribute, in
         dwarfout.c with -g -O -finline-functions
!      * [216]10432 (c++) ICE in poplevel, in cp/decl.c
!      * [217]10475 ICE in subreg_highpart_offset for code with long long
!      * [218]10635 (c++) ICE when dereferencing an incomplete type casted
         from a void pointer
!      * [219]10661 (c++) ICE in instantiate_decl, in cp/pt.c while
         instantiating static member variables
!      * [220]10700 ICE in copy_to_mode_reg on 64-bit targets
!      * [221]10712 (c++) ICE in constructor_name_full, in cp/decl2.c
!      * [222]10796 (c++) ICE when defining an enum with two values: -1 and
         MAX_INT_64BIT
!      * [223]10890 ICE in merge_assigned_reloads building Linux 2.4.2x
         sched.c
!      * [224]10939 (c++) ICE with template code
!      * [225]10956 (c++) ICE when specializing a template member function
         of a template class, in tsubst, in cp/pt.c
!      * [226]11041 (c++) ICE: const myclass &x = *x; (when operator*()
         defined)
!      * [227]11059 (c++) ICE with empty union
!      * [228]11083 (c++) ICE in commit_one_edge_insertion, in cfgrtl.c with
         -O2 -fnon-call-exceptions
!      * [229]11105 (c++) ICE in mangle_conv_op_name_for_type
!      * [230]11149 (c++) ICE on error when instantiation with call function
         of a base type
!      * [231]11228 (c++) ICE on new-expression using array operator new and
         default-initialization
!      * [232]11282 (c++) Infinite memory usage after syntax error
!      * [233]11301 (fortran) ICE with -fno-globals
!      * [234]11308 (c++) ICE when using an enum type name as if it were a
         class or namespace
!      * [235]11473 (c++) ICE with -gstabs when empty struct inherits from
         an empty struct
!      * [236]11503 (c++) ICE when instantiating template with ADDR_EXPR
!      * [237]11513 (c++) ICE in push_template_decl_real, in cp/pt.c:
         template member functions
  
      Optimization bugs
  
!      * [238]11198 -O2 -frename-registers generates wrong code (aliasing
         problem)
!      * [239]11304 Wrong code production with -fomit-frame-pointer
!      * [240]11381 volatile memory access optimized away
!      * [241]11536 [strength-reduce] -O2 optimization produces wrong code
!      * [242]11557 constant folding bug generates wrong code
  
      C front end
  
!      * [243]5897 No warning for statement after return
!      * [244]11279 DWARF-2 output mishandles large enums
  
      Preprocessor bugs
  
!      * [245]11022 no warning for non-compatible macro redefinition
  
      C++ compiler and library
  
!      * [246]2330 static_cast<>() to a private base is allowed
!      * [247]5388 Incorrect message "operands to ?: have different types"
!      * [248]5390 Libiberty fails to demangle multi-digit template
         parameters
!      * [249]7877 Incorrect parameter passing to specializations of member
         function templates
!      * [250]9393 Anonymous namespaces and compiling the same file twice
!      * [251]10032 -pedantic converts some errors to warnings
!      * [252]10468 const typeof(x) is non-const, but only in templates
!      * [253]10527 confused error message with "new int()" parameter
         initializer
!      * [254]10679 parameter MIN_INLINE_INSNS is not honored
!      * [255]10682 gcc chokes on a typedef for an enum inside a class
         template
!      * [256]10689 pow(std::complex(0),1/3) returns (nan, nan) instead of
         0.
!      * [257]10845 template member function (with nested template as
         parameter) cannot be called anymore if another unrelated template
         member function is defined
!      * [258]10849 Cannot define an out-of-class specialization of a
         private nested template class
!      * [259]10888 Suppress -Winline warnings for system headers
!      * [260]10929 -Winline warns about functions for which no definition
         is visible
!      * [261]10931 valid conversion static_cast<const unsigned
         int&>(lvalue-of-type-int) is rejected
!      * [262]10940 Bad code with explicit specialization
!      * [263]10968 If member function implicitly instantiated, explicit
         instantiation of class fails to instantiate it
!      * [264]10990 Cannot convert with dynamic_cast<> to a private base
         class from within a member function
!      * [265]11039 Bad interaction between implicit typename deprecation
         and friendship
!      * [266]11062 (libstdc++) avoid __attribute__ ((unused)); say
         "__unused__" instead
!      * [267]11095 C++ iostream manipulator causes segfault when called
         with negative argument
!      * [268]11098 g++ doesn't emit complete debugging information for
         local variables in destructors
!      * [269]11137 GNU/Linux shared library constructors not called unless
         there's one global object
!      * [270]11154 spurious ambiguity report for template class
         specialization
!      * [271]11329 Compiler cannot find user defined implicit typecast
!      * [272]11332 Spurious error with casts in ?: expression
!      * [273]11431 static_cast behavior with subclasses when default
         constructor available
!      * [274]11528 money_get facet does not accept "$.00" as valid
!      * [275]11546 Type lookup problems in out-of-line definition of a
         class doubly nested from a template class
!      * [276]11567 C++ code containing templated member function with same
         name as pure virtual member function results in linking failure
!      * [277]11645 Failure to deal with using and private inheritance
  
      Java compiler and library
  
!      * [278]5179 Qualified static field access doesn't initialize its
         class
!      * [279]8204 gcj -O2 to native reorders certain instructions
         improperly
!      * [280]10838 java.io.ObjectInputStream syntax error
!      * [281]10886 The RMI registry that comes with GCJ does not work
         correctly
!      * [282]11349 JNDI URL context factories not located correctly
  
      x86-specific (Intel/AMD)
  
!      * [283]4823 ICE on inline assembly code
!      * [284]8878 miscompilation with -O and SSE
!      * [285]9815 (c++ library) atomicity.h - fails to compile with -O3
         -masm=intel
!      * [286]10402 (inline assembly) [x86] ICE in merge_assigned_reloads,
         in reload1.c
!      * [287]10504 ICE with SSE2 code and -O3 -mcpu=pentium4 -msse2
!      * [288]10673 ICE for x86-64 on freebsd libc vfprintf.c source
!      * [289]11044 [x86] out of range loop instructions for FP code on K6
!      * [290]11089 ICE: instantiate_virtual_regs_lossage while using SSE
         built-ins
!      * [291]11420 [x86_64] gcc generates invalid asm code when "-O -fPIC"
         is used
  
      SPARC- or Solaris- specific
  
!      * [292]9362 solaris 'as' dies when fed .s and "-gstabs"
!      * [293]10142 [SPARC64] gcc produces wrong code when passing
         structures by value
!      * [294]10663 New configure check aborts with Sun tools.
!      * [295]10835 combinatorial explosion in scheduler on HyperSPARC
!      * [296]10876 ICE in calculate_giv_inc when building KDE
!      * [297]10955 wrong code at -O3 for structure argument in context of
         structure return
!      * [298]11018 -mcpu=ultrasparc busts tar-1.13.25
!      * [299]11556 [sparc64] ICE in gen_reg_rtx() while compiling 2.6.x
         Linux kernel
  
      ia64 specific
  
!      * [300]10907 gcc violates the ia64 ABI (GP must be preserved)
!      * [301]11320 scheduler bug (in machine depended reorganization pass)
!      * [302]11599 bug with conditional and __builtin_prefetch
  
      PowerPC specific
  
!      * [303]9745 [powerpc] gcc mis-compiles libmcrypt (alias problem
         during loop)
!      * [304]10871 error in rs6000_stack_info save_size computation
!      * [305]11440 gcc mis-compiles c++ code (libkhtml) with -O2, -fno-gcse
         cures it
  
      m68k-specific
  
!      * [306]7594 [m68k] ICE on legal code associated with simplify-rtx
!      * [307]10557 [m68k] ICE in subreg_offset_representable_p
!      * [308]11054 [m68k] ICE in reg_overlap_mentioned_p
  
      ARM-specific
  
!      * [309]10834 [arm] GCC 3.3 still generates incorrect instructions for
         functions with __attribute__ ((interrupt ("IRQ")))
!      * [310]10842 [arm] Clobbered link register is copied to pc under
         certain circumstances
!      * [311]11052 [arm] noce_process_if_block() can lose REG_INC notes
!      * [312]11183 [arm] ICE in change_address_1 (3.3) / subreg_hard_regno
         (3.4)
  
      MIPS-specific
  
!      * [313]11084 ICE in propagate_one_insn, in flow.c
  
      SH-specific
  
!      * [314]10331 can't compile c++ part of gcc cross compiler for sh-elf
!      * [315]10413 [SH] ICE in reload_cse_simplify_operands, in reload1.c
!      * [316]11096 i686-linux to sh-linux cross compiler fails to compile
         C++ files
  
      GNU/Linux (or Hurd?) specific
  
!      * [317]2873 Bogus fixinclude of stdio.h from glibc 2.2.3
  
      UnixWare specific
  
!      * [318]3163 configure bug: gcc/aclocal.m4 mmap test fails on UnixWare
         7.1.1
  
      Cygwin (or mingw) specific
  
!      * [319]5287 ICE with dllimport attribute
!      * [320]10148 [MingW/CygWin] Compiler dumps core
  
      DJGPP specific
  
!      * [321]8787 GCC fails to emit .intel_syntax when invoked with
         -masm=intel on DJGPP
  
      Darwin (and MacOS X) specific
  
!      * [322]10900 trampolines crash
  
      Documentation
  
!      * [323]1607 (c++) Format attributes on methods undocumented
!      * [324]4252 Invalid option `-fdump-translation-unit'
!      * [325]4490 Clarify restrictions on -m96bit-long-double,
         -m128bit-long-double
!      * [326]10355 document an issue with regparm attribute on some systems
         (e.g. Solaris)
!      * [327]10726 (fortran) Documentation for function "IDate Intrinsic
         (Unix)" is wrong
!      * [328]10805 document bug in old version of Sun assembler
!      * [329]10815 warn against GNU binutils on AIX
!      * [330]10877 document need for newer binutils on i?86-*-linux-gnu
!      * [331]11280 Manual incorrect with respect to -freorder-blocks
!      * [332]11466 Document -mlittle-endian and its restrictions for the
         sparc64 port
  
      Testsuite bugs (compiler itself is not affected)
  
!      * [333]10737 newer bison causes g++.dg/parse/crash2.C to incorrectly
         report failure
!      * [334]10810 gcc-3.3 fails make check: buffer overrun in
         test_demangle.c
       __________________________________________________________________
  
! GCC 3.3.2
  
    Bug Fixes
  
--- 19954,20217 ----
  
      Bootstrap failures
  
!      * [208]11272 [Solaris] make bootstrap fails while building libstdc++
  
      Internal compiler errors (multi-platform)
  
!      * [209]5754 ICE on invalid nested template class
!      * [210]6597 ICE in set_mem_alias_set compiling Qt with -O2 on ia64
         and --enable-checking
!      * [211]6949 (c++) ICE in tsubst_decl, in cp/pt.c
!      * [212]7053 (c++) ICE when declaring a function already defined as a
         friend method of a template class
!      * [213]8164 (c++) ICE when using different const expressions as
         template parameter
!      * [214]8384 (c++) ICE in is_base_type, in dwarf2out.c
!      * [215]9559 (c++) ICE with invalid initialization of a static const
!      * [216]9649 (c++) ICE in finish_member_declaration, in cp/semantics.c
         when redeclaring a static member variable
!      * [217]9864 (fortran) ICE in add_abstract_origin_attribute, in
         dwarfout.c with -g -O -finline-functions
!      * [218]10432 (c++) ICE in poplevel, in cp/decl.c
!      * [219]10475 ICE in subreg_highpart_offset for code with long long
!      * [220]10635 (c++) ICE when dereferencing an incomplete type casted
         from a void pointer
!      * [221]10661 (c++) ICE in instantiate_decl, in cp/pt.c while
         instantiating static member variables
!      * [222]10700 ICE in copy_to_mode_reg on 64-bit targets
!      * [223]10712 (c++) ICE in constructor_name_full, in cp/decl2.c
!      * [224]10796 (c++) ICE when defining an enum with two values: -1 and
         MAX_INT_64BIT
!      * [225]10890 ICE in merge_assigned_reloads building Linux 2.4.2x
         sched.c
!      * [226]10939 (c++) ICE with template code
!      * [227]10956 (c++) ICE when specializing a template member function
         of a template class, in tsubst, in cp/pt.c
!      * [228]11041 (c++) ICE: const myclass &x = *x; (when operator*()
         defined)
!      * [229]11059 (c++) ICE with empty union
!      * [230]11083 (c++) ICE in commit_one_edge_insertion, in cfgrtl.c with
         -O2 -fnon-call-exceptions
!      * [231]11105 (c++) ICE in mangle_conv_op_name_for_type
!      * [232]11149 (c++) ICE on error when instantiation with call function
         of a base type
!      * [233]11228 (c++) ICE on new-expression using array operator new and
         default-initialization
!      * [234]11282 (c++) Infinite memory usage after syntax error
!      * [235]11301 (fortran) ICE with -fno-globals
!      * [236]11308 (c++) ICE when using an enum type name as if it were a
         class or namespace
!      * [237]11473 (c++) ICE with -gstabs when empty struct inherits from
         an empty struct
!      * [238]11503 (c++) ICE when instantiating template with ADDR_EXPR
!      * [239]11513 (c++) ICE in push_template_decl_real, in cp/pt.c:
         template member functions
  
      Optimization bugs
  
!      * [240]11198 -O2 -frename-registers generates wrong code (aliasing
         problem)
!      * [241]11304 Wrong code production with -fomit-frame-pointer
!      * [242]11381 volatile memory access optimized away
!      * [243]11536 [strength-reduce] -O2 optimization produces wrong code
!      * [244]11557 constant folding bug generates wrong code
  
      C front end
  
!      * [245]5897 No warning for statement after return
!      * [246]11279 DWARF-2 output mishandles large enums
  
      Preprocessor bugs
  
!      * [247]11022 no warning for non-compatible macro redefinition
  
      C++ compiler and library
  
!      * [248]2330 static_cast<>() to a private base is allowed
!      * [249]5388 Incorrect message "operands to ?: have different types"
!      * [250]5390 Libiberty fails to demangle multi-digit template
         parameters
!      * [251]7877 Incorrect parameter passing to specializations of member
         function templates
!      * [252]9393 Anonymous namespaces and compiling the same file twice
!      * [253]10032 -pedantic converts some errors to warnings
!      * [254]10468 const typeof(x) is non-const, but only in templates
!      * [255]10527 confused error message with "new int()" parameter
         initializer
!      * [256]10679 parameter MIN_INLINE_INSNS is not honored
!      * [257]10682 gcc chokes on a typedef for an enum inside a class
         template
!      * [258]10689 pow(std::complex(0),1/3) returns (nan, nan) instead of
         0.
!      * [259]10845 template member function (with nested template as
         parameter) cannot be called anymore if another unrelated template
         member function is defined
!      * [260]10849 Cannot define an out-of-class specialization of a
         private nested template class
!      * [261]10888 Suppress -Winline warnings for system headers
!      * [262]10929 -Winline warns about functions for which no definition
         is visible
!      * [263]10931 valid conversion static_cast<const unsigned
         int&>(lvalue-of-type-int) is rejected
!      * [264]10940 Bad code with explicit specialization
!      * [265]10968 If member function implicitly instantiated, explicit
         instantiation of class fails to instantiate it
!      * [266]10990 Cannot convert with dynamic_cast<> to a private base
         class from within a member function
!      * [267]11039 Bad interaction between implicit typename deprecation
         and friendship
!      * [268]11062 (libstdc++) avoid __attribute__ ((unused)); say
         "__unused__" instead
!      * [269]11095 C++ iostream manipulator causes segfault when called
         with negative argument
!      * [270]11098 g++ doesn't emit complete debugging information for
         local variables in destructors
!      * [271]11137 GNU/Linux shared library constructors not called unless
         there's one global object
!      * [272]11154 spurious ambiguity report for template class
         specialization
!      * [273]11329 Compiler cannot find user defined implicit typecast
!      * [274]11332 Spurious error with casts in ?: expression
!      * [275]11431 static_cast behavior with subclasses when default
         constructor available
!      * [276]11528 money_get facet does not accept "$.00" as valid
!      * [277]11546 Type lookup problems in out-of-line definition of a
         class doubly nested from a template class
!      * [278]11567 C++ code containing templated member function with same
         name as pure virtual member function results in linking failure
!      * [279]11645 Failure to deal with using and private inheritance
  
      Java compiler and library
  
!      * [280]5179 Qualified static field access doesn't initialize its
         class
!      * [281]8204 gcj -O2 to native reorders certain instructions
         improperly
!      * [282]10838 java.io.ObjectInputStream syntax error
!      * [283]10886 The RMI registry that comes with GCJ does not work
         correctly
!      * [284]11349 JNDI URL context factories not located correctly
  
      x86-specific (Intel/AMD)
  
!      * [285]4823 ICE on inline assembly code
!      * [286]8878 miscompilation with -O and SSE
!      * [287]9815 (c++ library) atomicity.h - fails to compile with -O3
         -masm=intel
!      * [288]10402 (inline assembly) [x86] ICE in merge_assigned_reloads,
         in reload1.c
!      * [289]10504 ICE with SSE2 code and -O3 -mcpu=pentium4 -msse2
!      * [290]10673 ICE for x86-64 on freebsd libc vfprintf.c source
!      * [291]11044 [x86] out of range loop instructions for FP code on K6
!      * [292]11089 ICE: instantiate_virtual_regs_lossage while using SSE
         built-ins
!      * [293]11420 [x86_64] gcc generates invalid asm code when "-O -fPIC"
         is used
  
      SPARC- or Solaris- specific
  
!      * [294]9362 solaris 'as' dies when fed .s and "-gstabs"
!      * [295]10142 [SPARC64] gcc produces wrong code when passing
         structures by value
!      * [296]10663 New configure check aborts with Sun tools.
!      * [297]10835 combinatorial explosion in scheduler on HyperSPARC
!      * [298]10876 ICE in calculate_giv_inc when building KDE
!      * [299]10955 wrong code at -O3 for structure argument in context of
         structure return
!      * [300]11018 -mcpu=ultrasparc busts tar-1.13.25
!      * [301]11556 [sparc64] ICE in gen_reg_rtx() while compiling 2.6.x
         Linux kernel
  
      ia64 specific
  
!      * [302]10907 gcc violates the ia64 ABI (GP must be preserved)
!      * [303]11320 scheduler bug (in machine depended reorganization pass)
!      * [304]11599 bug with conditional and __builtin_prefetch
  
      PowerPC specific
  
!      * [305]9745 [powerpc] gcc mis-compiles libmcrypt (alias problem
         during loop)
!      * [306]10871 error in rs6000_stack_info save_size computation
!      * [307]11440 gcc mis-compiles c++ code (libkhtml) with -O2, -fno-gcse
         cures it
  
      m68k-specific
  
!      * [308]7594 [m68k] ICE on legal code associated with simplify-rtx
!      * [309]10557 [m68k] ICE in subreg_offset_representable_p
!      * [310]11054 [m68k] ICE in reg_overlap_mentioned_p
  
      ARM-specific
  
!      * [311]10834 [arm] GCC 3.3 still generates incorrect instructions for
         functions with __attribute__ ((interrupt ("IRQ")))
!      * [312]10842 [arm] Clobbered link register is copied to pc under
         certain circumstances
!      * [313]11052 [arm] noce_process_if_block() can lose REG_INC notes
!      * [314]11183 [arm] ICE in change_address_1 (3.3) / subreg_hard_regno
         (3.4)
  
      MIPS-specific
  
!      * [315]11084 ICE in propagate_one_insn, in flow.c
  
      SH-specific
  
!      * [316]10331 can't compile c++ part of gcc cross compiler for sh-elf
!      * [317]10413 [SH] ICE in reload_cse_simplify_operands, in reload1.c
!      * [318]11096 i686-linux to sh-linux cross compiler fails to compile
         C++ files
  
      GNU/Linux (or Hurd?) specific
  
!      * [319]2873 Bogus fixinclude of stdio.h from glibc 2.2.3
  
      UnixWare specific
  
!      * [320]3163 configure bug: gcc/aclocal.m4 mmap test fails on UnixWare
         7.1.1
  
      Cygwin (or mingw) specific
  
!      * [321]5287 ICE with dllimport attribute
!      * [322]10148 [MingW/CygWin] Compiler dumps core
  
      DJGPP specific
  
!      * [323]8787 GCC fails to emit .intel_syntax when invoked with
         -masm=intel on DJGPP
  
      Darwin (and MacOS X) specific
  
!      * [324]10900 trampolines crash
  
      Documentation
  
!      * [325]1607 (c++) Format attributes on methods undocumented
!      * [326]4252 Invalid option `-fdump-translation-unit'
!      * [327]4490 Clarify restrictions on -m96bit-long-double,
         -m128bit-long-double
!      * [328]10355 document an issue with regparm attribute on some systems
         (e.g. Solaris)
!      * [329]10726 (fortran) Documentation for function "IDate Intrinsic
         (Unix)" is wrong
!      * [330]10805 document bug in old version of Sun assembler
!      * [331]10815 warn against GNU binutils on AIX
!      * [332]10877 document need for newer binutils on i?86-*-linux-gnu
!      * [333]11280 Manual incorrect with respect to -freorder-blocks
!      * [334]11466 Document -mlittle-endian and its restrictions for the
         sparc64 port
  
      Testsuite bugs (compiler itself is not affected)
  
!      * [335]10737 newer bison causes g++.dg/parse/crash2.C to incorrectly
         report failure
!      * [336]10810 gcc-3.3 fails make check: buffer overrun in
         test_demangle.c
       __________________________________________________________________
  
! [337]GCC 3.3.2
  
    Bug Fixes
  
*************** GCC 3.3.2
*** 19719,19873 ****
  
      Bootstrap failures and problems
  
!      * [335]8336 [SCO5] bootstrap config still tries to use COFF options
!      * [336]9330 [alpha-osf] Bootstrap failure on Compaq Tru64 with
         --enable-threads=posix
!      * [337]9631 [hppa64-linux] gcc-3.3 fails to bootstrap
!      * [338]9877 fixincludes makes a bad sys/byteorder.h on svr5 (UnixWare
         7.1.1)
!      * [339]11687 xstormy16-elf build fails in libf2c
!      * [340]12263 [SGI IRIX] bootstrap fails during compile of
         libf2c/libI77/backspace.c
!      * [341]12490 buffer overflow in scan-decls.c (during Solaris 9
         fix-header processing)
  
      Internal compiler errors (multi-platform)
  
!      * [342]7277 Casting integers to vector types causes ICE
!      * [343]7939 (c++) ICE on invalid function template specialization
!      * [344]11063 (c++) ICE on parsing initialization list of const array
         member
!      * [345]11207 ICE with negative index in array element designator
!      * [346]11522 (fortran) g77 dwarf-2 ICE in
         add_abstract_origin_attribute
!      * [347]11595 (c++) ICE on duplicate label definition
!      * [348]11646 (c++) ICE in commit_one_edge_insertion with
         -fnon-call-exceptions -fgcse -O
!      * [349]11665 ICE in struct initializer when taking address
!      * [350]11852 (c++) ICE with bad struct initializer.
!      * [351]11878 (c++) ICE in cp_expr_size
!      * [352]11883 ICE with any -O on mercury-generated C code
!      * [353]11991 (c++) ICE in cxx_incomplete_type_diagnostic, in
         cp/typeck2.c when applying typeid operator to template template
         parameter
!      * [354]12146 ICE in lookup_template_function, in cp/pt.c
!      * [355]12215 ICE in make_label_edge with -fnon-call-exceptions
         -fno-gcse -O2
!      * [356]12369 (c++) ICE with templates and friends
!      * [357]12446 ICE in emit_move_insn on complicated array reference
!      * [358]12510 ICE in final_scan_insn
!      * [359]12544 ICE with large parameters used in nested functions
  
      C and optimization bugs
  
!      * [360]9862 spurious warnings with -W -finline-functions
!      * [361]10962 lookup_field is a linear search on a linked list (can be
         slow if large struct)
!      * [362]11370 -Wunreachable-code gives false complaints
!      * [363]11637 invalid assembly with -fnon-call-exceptions
!      * [364]11885 Problem with bitfields in packed structs
!      * [365]12082 Inappropriate unreachable code warnings
!      * [366]12180 Inline optimization fails for variadic function
!      * [367]12340 loop unroller + gcse produces wrong code
  
      C++ compiler and library
  
!      * [368]3907 nested template parameter collides with member name
!      * [369]5293 confusing message when binding a temporary to a reference
!      * [370]5296 [DR115] Pointers to functions and to template functions
         behave differently in deduction
!      * [371]7939 ICE on function template specialization
!      * [372]8656 Unable to assign function with __attribute__ and pointer
         return type to an appropriate variable
!      * [373]10147 Confusing error message for invalid template function
         argument
!      * [374]11400 std::search_n() makes assumptions about Size parameter
!      * [375]11409 issues with using declarations, overloading, and
         built-in functions
!      * [376]11740 ctype<wchar_t>::do_is(mask, wchar_t) doesn't handle
         multiple bits in mask
!      * [377]11786 operator() call on variable in other namespace not
         recognized
!      * [378]11867 static_cast ignores ambiguity
!      * [379]11928 bug with conversion operators that are typedefs
!      * [380]12114 Uninitialized memory accessed in dtor
!      * [381]12163 static_cast + explicit constructor regression
!      * [382]12181 Wrong code with comma operator and c++
!      * [383]12236 regparm and fastcall messes up parameters
!      * [384]12266 incorrect instantiation of unneeded template during
         overload resolution
!      * [385]12296 istream::peek() doesn't set eofbit
!      * [386]12298 [sjlj exceptions] Stack unwind destroys
         not-yet-constructed object
!      * [387]12369 ICE with templates and friends
!      * [388]12337 apparently infinite loop in g++
!      * [389]12344 stdcall attribute ignored if function returns a pointer
!      * [390]12451 missing(late) class forward declaration in cxxabi.h
!      * [391]12486 g++ accepts invalid use of a qualified name
  
      x86 specific (Intel/AMD)
  
!      * [392]8869 [x86 MMX] ICE with const variable optimization and MMX
         builtins
!      * [393]9786 ICE in fixup_abnormal_edges with -fnon-call-exceptions
         -O2
!      * [394]11689 g++3.3 emits un-assembleable code for k6 architecture
!      * [395]12116 [k6] Invalid assembly output values with X-MAME code
!      * [396]12070 ICE converting between double and long double with
         -msoft-float
  
      ia64-specific
  
!      * [397]11184 [ia64 hpux] ICE on __builtin_apply building libobjc
!      * [398]11535 __builtin_return_address may not work on ia64
!      * [399]11693 [ia64] ICE in gen_nop_type
!      * [400]12224 [ia64] Thread-local storage doesn't work
  
      PowerPC-specific
  
!      * [401]11087 [powerpc64-linux] GCC miscompiles raid1.c from linux
         kernel
!      * [402]11319 loop miscompiled on ppc32
!      * [403]11949 ICE Compiler segfault with ffmpeg -maltivec code
  
      SPARC-specific
  
!      * [404]11662 wrong code for expr. with cast to long long and
         exclusive or
!      * [405]11965 invalid assembler code for a shift < 32 operation
!      * [406]12301 (c++) stack corruption when a returned expression throws
         an exception
  
      Alpha-specific
  
!      * [407]11717 [alpha-linux] unrecognizable insn compiling for.c of
         kernel 2.4.22-pre8
  
      HPUX-specific
  
!      * [408]11313 problem with #pragma weak and static inline functions
!      * [409]11712 __STDC_EXT__ not defined for C++ by default anymore?
  
      Solaris specific
  
!      * [410]12166 Profiled programs crash if PROFDIR is set
  
      Solaris-x86 specific
  
!      * [411]12101 i386 Solaris no longer works with GNU as?
  
      Miscellaneous embedded target-specific bugs
  
!      * [412]10988 [m32r-elf] wrong blockmove code with -O3
!      * [413]11805 [h8300-unknown-coff] [H8300] ICE for simple code with
         -O2
!      * [414]11902 [sh4] spec file improperly inserts rpath even when none
         needed
!      * [415]11903 [sh4] -pthread fails to link due to error in spec file
         on sh4
       __________________________________________________________________
  
! GCC 3.3.3
  
    Minor features
  
--- 20222,20376 ----
  
      Bootstrap failures and problems
  
!      * [338]8336 [SCO5] bootstrap config still tries to use COFF options
!      * [339]9330 [alpha-osf] Bootstrap failure on Compaq Tru64 with
         --enable-threads=posix
!      * [340]9631 [hppa64-linux] gcc-3.3 fails to bootstrap
!      * [341]9877 fixincludes makes a bad sys/byteorder.h on svr5 (UnixWare
         7.1.1)
!      * [342]11687 xstormy16-elf build fails in libf2c
!      * [343]12263 [SGI IRIX] bootstrap fails during compile of
         libf2c/libI77/backspace.c
!      * [344]12490 buffer overflow in scan-decls.c (during Solaris 9
         fix-header processing)
  
      Internal compiler errors (multi-platform)
  
!      * [345]7277 Casting integers to vector types causes ICE
!      * [346]7939 (c++) ICE on invalid function template specialization
!      * [347]11063 (c++) ICE on parsing initialization list of const array
         member
!      * [348]11207 ICE with negative index in array element designator
!      * [349]11522 (fortran) g77 dwarf-2 ICE in
         add_abstract_origin_attribute
!      * [350]11595 (c++) ICE on duplicate label definition
!      * [351]11646 (c++) ICE in commit_one_edge_insertion with
         -fnon-call-exceptions -fgcse -O
!      * [352]11665 ICE in struct initializer when taking address
!      * [353]11852 (c++) ICE with bad struct initializer.
!      * [354]11878 (c++) ICE in cp_expr_size
!      * [355]11883 ICE with any -O on mercury-generated C code
!      * [356]11991 (c++) ICE in cxx_incomplete_type_diagnostic, in
         cp/typeck2.c when applying typeid operator to template template
         parameter
!      * [357]12146 ICE in lookup_template_function, in cp/pt.c
!      * [358]12215 ICE in make_label_edge with -fnon-call-exceptions
         -fno-gcse -O2
!      * [359]12369 (c++) ICE with templates and friends
!      * [360]12446 ICE in emit_move_insn on complicated array reference
!      * [361]12510 ICE in final_scan_insn
!      * [362]12544 ICE with large parameters used in nested functions
  
      C and optimization bugs
  
!      * [363]9862 spurious warnings with -W -finline-functions
!      * [364]10962 lookup_field is a linear search on a linked list (can be
         slow if large struct)
!      * [365]11370 -Wunreachable-code gives false complaints
!      * [366]11637 invalid assembly with -fnon-call-exceptions
!      * [367]11885 Problem with bitfields in packed structs
!      * [368]12082 Inappropriate unreachable code warnings
!      * [369]12180 Inline optimization fails for variadic function
!      * [370]12340 loop unroller + gcse produces wrong code
  
      C++ compiler and library
  
!      * [371]3907 nested template parameter collides with member name
!      * [372]5293 confusing message when binding a temporary to a reference
!      * [373]5296 [DR115] Pointers to functions and to template functions
         behave differently in deduction
!      * [374]7939 ICE on function template specialization
!      * [375]8656 Unable to assign function with __attribute__ and pointer
         return type to an appropriate variable
!      * [376]10147 Confusing error message for invalid template function
         argument
!      * [377]11400 std::search_n() makes assumptions about Size parameter
!      * [378]11409 issues with using declarations, overloading, and
         built-in functions
!      * [379]11740 ctype<wchar_t>::do_is(mask, wchar_t) doesn't handle
         multiple bits in mask
!      * [380]11786 operator() call on variable in other namespace not
         recognized
!      * [381]11867 static_cast ignores ambiguity
!      * [382]11928 bug with conversion operators that are typedefs
!      * [383]12114 Uninitialized memory accessed in dtor
!      * [384]12163 static_cast + explicit constructor regression
!      * [385]12181 Wrong code with comma operator and c++
!      * [386]12236 regparm and fastcall messes up parameters
!      * [387]12266 incorrect instantiation of unneeded template during
         overload resolution
!      * [388]12296 istream::peek() doesn't set eofbit
!      * [389]12298 [sjlj exceptions] Stack unwind destroys
         not-yet-constructed object
!      * [390]12369 ICE with templates and friends
!      * [391]12337 apparently infinite loop in g++
!      * [392]12344 stdcall attribute ignored if function returns a pointer
!      * [393]12451 missing(late) class forward declaration in cxxabi.h
!      * [394]12486 g++ accepts invalid use of a qualified name
  
      x86 specific (Intel/AMD)
  
!      * [395]8869 [x86 MMX] ICE with const variable optimization and MMX
         builtins
!      * [396]9786 ICE in fixup_abnormal_edges with -fnon-call-exceptions
         -O2
!      * [397]11689 g++3.3 emits un-assembleable code for k6 architecture
!      * [398]12116 [k6] Invalid assembly output values with X-MAME code
!      * [399]12070 ICE converting between double and long double with
         -msoft-float
  
      ia64-specific
  
!      * [400]11184 [ia64 hpux] ICE on __builtin_apply building libobjc
!      * [401]11535 __builtin_return_address may not work on ia64
!      * [402]11693 [ia64] ICE in gen_nop_type
!      * [403]12224 [ia64] Thread-local storage doesn't work
  
      PowerPC-specific
  
!      * [404]11087 [powerpc64-linux] GCC miscompiles raid1.c from linux
         kernel
!      * [405]11319 loop miscompiled on ppc32
!      * [406]11949 ICE Compiler segfault with ffmpeg -maltivec code
  
      SPARC-specific
  
!      * [407]11662 wrong code for expr. with cast to long long and
         exclusive or
!      * [408]11965 invalid assembler code for a shift < 32 operation
!      * [409]12301 (c++) stack corruption when a returned expression throws
         an exception
  
      Alpha-specific
  
!      * [410]11717 [alpha-linux] unrecognizable insn compiling for.c of
         kernel 2.4.22-pre8
  
      HPUX-specific
  
!      * [411]11313 problem with #pragma weak and static inline functions
!      * [412]11712 __STDC_EXT__ not defined for C++ by default anymore?
  
      Solaris specific
  
!      * [413]12166 Profiled programs crash if PROFDIR is set
  
      Solaris-x86 specific
  
!      * [414]12101 i386 Solaris no longer works with GNU as?
  
      Miscellaneous embedded target-specific bugs
  
!      * [415]10988 [m32r-elf] wrong blockmove code with -O3
!      * [416]11805 [h8300-unknown-coff] [H8300] ICE for simple code with
         -O2
!      * [417]11902 [sh4] spec file improperly inserts rpath even when none
         needed
!      * [418]11903 [sh4] -pthread fails to link due to error in spec file
         on sh4
       __________________________________________________________________
  
! [419]GCC 3.3.3
  
    Minor features
  
*************** GCC 3.3.3
*** 19887,19945 ****
  
      Bootstrap failures and issues
  
!      * [416]11890 Building cross gcc-3.3.1 for sparc-sun-solaris2.6 fails
!      * [417]12399 boehm-gc fails (when building a cross compiler): libtool
         unable to infer tagged configuration
!      * [418]13068 mklibgcc.in doesn't handle multi-level multilib
         subdirectories properly
  
      Internal compiler errors (multi-platform)
  
!      * [419]10060 ICE (stack overflow) on huge file (300k lines) due to
         recursive behaviour of copy_rtx_if_shared, in emit_rtl.c
!      * [420]10555 (c++) ICE on undefined template argument
!      * [421]10706 (c++) ICE in mangle_class_name_for_template
!      * [422]11496 (fortran) error in flow_loops_find when -funroll-loops
         active
!      * [423]11741 ICE in pre_insert_copy_insn, in gcse.c
!      * [424]12440 GCC crashes during compilation of quicktime4linux 2.0.0
!      * [425]12632 (fortran) -fbounds-check ICE
!      * [426]12712 (c++) ICE on short legit C++ code fragment with gcc
         3.3.2
!      * [427]12726 (c++) ICE (segfault) on trivial code
!      * [428]12890 (c++) ICE on compilation of class with throwing method
!      * [429]12900 (c++) ICE in rtl_verify_flow_info_1
!      * [430]13060 (fortran) ICE in fixup_var_refs_1, in function.c on
         correct code with -O2 -fno-force-mem
!      * [431]13289 (c++) ICE in regenerate_decl_from_template on recursive
         template
!      * [432]13318 ICE: floating point exception in the loop optimizer
!      * [433]13392 (c++) ICE in convert_from_eh_region_ranges_1, in
         except.c
!      * [434]13574 (c++) invalid array default initializer in class lets
         gcc consume all memory and die
!      * [435]13475 ICE on SIMD variables with partial value initialization
!      * [436]13797 (c++) ICE on invalid template parameter
!      * [437]13824 (java) gcj SEGV with simple .java program
  
      C and optimization bugs
  
!      * [438]8776 loop invariants are not removed (most likely)
!      * [439]10339 [sparc,ppc,ppc64] Invalid optimization: replacing
         strncmp by memcmp
!      * [440]11350 undefined labels with -Os -fPIC
!      * [441]12826 Optimizer removes reference through volatile pointer
!      * [442]12500 stabs debug info: void no longer a predefined / builtin
         type
!      * [443]12941 builtin-bitops-1.c miscompilation (latent bug)
!      * [444]12953 tree inliner bug (in inline_forbidden_p) and fix
!      * [445]13041 linux-2.6/sound/core/oss/rate.c miscompiled
!      * [446]13507 spurious printf format warning
!      * [447]13382 Type information for const pointer disappears during
         optimization.
!      * [448]13394 noreturn attribute ignored on recursive invokation
!      * [449]13400 Compiled code crashes storing to read-only location
!      * [450]13521 Endless loop in calculate_global_regs_live
  
      C++ compiler and library
  
--- 20390,20448 ----
  
      Bootstrap failures and issues
  
!      * [420]11890 Building cross gcc-3.3.1 for sparc-sun-solaris2.6 fails
!      * [421]12399 boehm-gc fails (when building a cross compiler): libtool
         unable to infer tagged configuration
!      * [422]13068 mklibgcc.in doesn't handle multi-level multilib
         subdirectories properly
  
      Internal compiler errors (multi-platform)
  
!      * [423]10060 ICE (stack overflow) on huge file (300k lines) due to
         recursive behaviour of copy_rtx_if_shared, in emit_rtl.c
!      * [424]10555 (c++) ICE on undefined template argument
!      * [425]10706 (c++) ICE in mangle_class_name_for_template
!      * [426]11496 (fortran) error in flow_loops_find when -funroll-loops
         active
!      * [427]11741 ICE in pre_insert_copy_insn, in gcse.c
!      * [428]12440 GCC crashes during compilation of quicktime4linux 2.0.0
!      * [429]12632 (fortran) -fbounds-check ICE
!      * [430]12712 (c++) ICE on short legit C++ code fragment with gcc
         3.3.2
!      * [431]12726 (c++) ICE (segfault) on trivial code
!      * [432]12890 (c++) ICE on compilation of class with throwing method
!      * [433]12900 (c++) ICE in rtl_verify_flow_info_1
!      * [434]13060 (fortran) ICE in fixup_var_refs_1, in function.c on
         correct code with -O2 -fno-force-mem
!      * [435]13289 (c++) ICE in regenerate_decl_from_template on recursive
         template
!      * [436]13318 ICE: floating point exception in the loop optimizer
!      * [437]13392 (c++) ICE in convert_from_eh_region_ranges_1, in
         except.c
!      * [438]13574 (c++) invalid array default initializer in class lets
         gcc consume all memory and die
!      * [439]13475 ICE on SIMD variables with partial value initialization
!      * [440]13797 (c++) ICE on invalid template parameter
!      * [441]13824 (java) gcj SEGV with simple .java program
  
      C and optimization bugs
  
!      * [442]8776 loop invariants are not removed (most likely)
!      * [443]10339 [sparc,ppc,ppc64] Invalid optimization: replacing
         strncmp by memcmp
!      * [444]11350 undefined labels with -Os -fPIC
!      * [445]12826 Optimizer removes reference through volatile pointer
!      * [446]12500 stabs debug info: void no longer a predefined / builtin
         type
!      * [447]12941 builtin-bitops-1.c miscompilation (latent bug)
!      * [448]12953 tree inliner bug (in inline_forbidden_p) and fix
!      * [449]13041 linux-2.6/sound/core/oss/rate.c miscompiled
!      * [450]13507 spurious printf format warning
!      * [451]13382 Type information for const pointer disappears during
         optimization.
!      * [452]13394 noreturn attribute ignored on recursive invokation
!      * [453]13400 Compiled code crashes storing to read-only location
!      * [454]13521 Endless loop in calculate_global_regs_live
  
      C++ compiler and library
  
*************** GCC 3.3.3
*** 19947,20176 ****
     that the ISO C++ standards committee has made concerning several defect
     reports (DRs). Links in the list below point to detailed discussion of
     the relevant defect report.
!      * [451]2094 unimplemented: use of `ptrmem_cst' in template type
         unification
!      * [452]2294 using declaration confusion
!      * [453]5050 template instantiation depth exceeds limit: recursion
         problem?
!      * [454]9371 Bad exception handling in
         i/ostream::operator>>/<<(streambuf*)
!      * [455]9546 bad exception handling in ostream members
!      * [456]10081 basic_ios::_M_cache_locale leaves NULL members in the
         face of unknown locales
!      * [457]10093 [458][DR 61] Setting failbit in exceptions doesn't work
!      * [459]10095 istream::operator>>(int&) sets ios::badbit when
         ios::failbit is set.
!      * [460]11554 Warning about reordering of initializers doesn't mention
         location of constructor
!      * [461]12297 istream::sentry::sentry() handles eof() incorrectly.
!      * [462]12352 Exception safety problems in src/localename.cc
!      * [463]12438 Memory leak in locale::combine()
!      * [464]12540 Memory leak in locale::locale(const char*)
!      * [465]12594 DRs [466]60 [TC] and [467]63 [TC] not implemented
!      * [468]12657 Resolution of [469]DR 292 (WP) still unimplemented
!      * [470]12696 memory eating infinite loop in diagnostics (error
         recovery problem)
!      * [471]12815 Code compiled with optimization behaves unexpectedly
!      * [472]12862 Conflicts between typedefs/enums and namespace member
         declarations
!      * [473]12926 Wrong value after assignment in initialize list using
         bit-fields
!      * [474]12967 Resolution of [475]DR 300 [WP] still unimplemented
!      * [476]12971 Resolution of [477]DR 328 [WP] still unimplemented
!      * [478]13007 basic_streambuf::pubimbue, imbue wrong
!      * [479]13009 Implicitly-defined assignment operator writes to wrong
         memory
!      * [480]13057 regparm attribute not applied to destructor
!      * [481]13070 -Wformat option ignored in g++
!      * [482]13081 forward template declarations in <complex> let inlining
         fail
!      * [483]13239 Assertion does not seem to work correctly anymore
!      * [484]13262 "xxx is private within this context" when initializing a
         self-contained template class
!      * [485]13290 simple typo in concept checking for std::generate_n
!      * [486]13323 Template code does not compile in presence of typedef
!      * [487]13369 __verify_grouping (and __add_grouping?) not correct
!      * [488]13371 infinite loop with packed struct and inlining
!      * [489]13445 Template argument replacement "dereferences" a typedef
!      * [490]13461 Fails to access protected-ctor from public constant
!      * [491]13462 Non-standard-conforming type set::pointer
!      * [492]13478 gcc uses wrong constructor to initialize a const
         reference
!      * [493]13544 "conflicting types" for enums in different scopes
!      * [494]13650 string::compare should not (always) use
         traits_type::length()
!      * [495]13683 bogus warning about passing non-PODs through ellipsis
!      * [496]13688 Derived class is denied access to protected base class
         member class
!      * [497]13774 Member variable cleared in virtual multiple inheritance
         class
!      * [498]13884 Protect sstream.tcc from extern template use
  
      Java compiler and library
  
!      * [499]10746 [win32] garbage collection crash in GCJ
  
      Objective-C compiler and library
  
!      * [500]11433 Crash due to dereferencing null pointer when querying
         protocol
  
      Fortran compiler and library
  
!      * [501]12633 logical expression gives incorrect result with
         -fugly-logint option
!      * [502]13037 [gcse-lm] g77 generates incorrect code
!      * [503]13213 Hex constant problem when compiling with -fugly-logint
         and -ftypeless-boz
  
      x86-specific (Intel/AMD)
  
!      * [504]4490 ICE with -m128bit-long-double
!      * [505]12292 [x86_64] ICE: RTL check: expected code `const_int', have
         `reg' in make_field_assignment, in combine.c
!      * [506]12441 ICE: can't find a register to spill
!      * [507]12943 array static-init failure under -fpic, -fPIC
!      * [508]13608 Incorrect code with -O3 -ffast-math
  
      PowerPC-specific
  
!      * [509]11598 testcase gcc.dg/20020118-1.c fails runtime check of
         __attribute__((aligned(16)))
!      * [510]11793 ICE in extract_insn, in recog.c (const_vector's)
!      * [511]12467 vmsumubm emitted when vmsummbm appropriate (typo in
         altivec.md)
!      * [512]12537 g++ generates writeable text sections
  
      SPARC-specific
  
!      * [513]12496 wrong result for __atomic_add(&value, -1) when using -O0
         -m64
!      * [514]12865 mprotect call to make trampoline executable may fail
!      * [515]13354 ICE in sparc_emit_set_const32
  
      ARM-specific
  
!      * [516]10467 [arm] ICE in pre_insert_copy_insn,
  
      ia64-specific
  
!      * [517]11226 ICE passing struct arg with two floats
!      * [518]11227 ICE for _Complex float, _Complex long double args
!      * [519]12644 GCC 3.3.2 fails to compile glibc on ia64
!      * [520]13149 build gcc-3.3.2 1305 error:unrecognizable insn
       * Various fixes for libunwind
  
      Alpha-specific
  
!      * [521]12654 Incorrect comparison code generated for Alpha
!      * [522]12965 SEGV+ICE in cc1plus on alpha-linux with -O2
!      * [523]13031 ICE (unrecognizable insn) when building gnome-libs-1.4.2
  
      HPPA-specific
  
!      * [524]11634 [hppa] ICE in verify_local_live_at_start, in flow.c
!      * [525]12158 [hppa] compilation does not terminate at -O1
  
      S390-specific
  
!      * [526]11992 Wrong built-in code for memcmp with length 1<<24: only
         (1<<24)-1 possible for CLCL-Instruction
  
      SH-specific
  
!      * [527]9365 segfault in gen_far_branch (config/sh/sh.c)
!      * [528]10392 optimizer generates faulty array indexing
!      * [529]11322 SH profiler outputs multiple definitions of symbol
!      * [530]13069 gcc/config/sh/rtems.h broken
!      * [531]13302 Putting a va_list in a struct causes seg fault
!      * [532]13585 Incorrect optimization of call to sfunc
       * Fix inappropriately exported libgcc functions from the shared
         library
  
      Other embedded target specific
  
!      * [533]8916 [mcore] unsigned char assign gets hosed.
!      * [534]11576 [h8300] ICE in change_address_1, in emit-rtl.c
!      * [535]13122 [h8300] local variable gets corrupted by function call
         when -fomit-frame-pointer is given
!      * [536]13256 [cris] strict_low_part mistreated in delay slots
!      * [537]13373 [mcore] optimization with -frerun-cse-after-loop
         -fexpensive-optimizations produces wrong code on mcore
  
      GNU HURD-specific
  
!      * [538]12561 gcc/config/t-gnu needs updating to work with
         --with-sysroot
  
      Tru64 Unix specific
  
!      * [539]6243 testsuite fails almost all tests due to no libintl in
         LD_LIBRARY_PATH during test.
!      * [540]11397 weak aliases broken on Tru64 UNIX
  
      AIX-specific
  
!      * [541]12505 build failure due to defines of uchar in cpphash.h and
         sys/types.h
!      * [542]13150 WEAK symbols not exported by collect2
  
      IRIX-specific
  
!      * [543]12666 fixincludes problem on IRIX 6.5.19m
  
      Solaris-specific
  
!      * [544]12969 Including sys/byteorder.h breaks configure checks
  
      Testsuite problems (compiler is not affected)
  
!      * [545]10819 testsuite creates CR+LF on compiler version lines in
         test summary files
!      * [546]11612 abi_check not finding correct libgcc_s.so.1
  
      Miscellaneous
  
!      * [547]13211 using -###, incorrect warnings about unused linker file
         are produced
       __________________________________________________________________
  
! GCC 3.3.4
  
!    This is the [548]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 3.3.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
       __________________________________________________________________
  
! GCC 3.3.5
  
!    This is the [549]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 3.3.5 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
       __________________________________________________________________
  
! GCC 3.3.6
  
!    This is the [550]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 3.3.6 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [551]GCC manuals. If that fails, the
!     [552]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [553]gcc@gcc.gnu.org. All of [554]our lists have public
      archives.
  
!    Copyright (C) [555]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [556]maintained by the GCC team. Last modified
!    2023-01-19.
  
  References
  
--- 20450,20679 ----
     that the ISO C++ standards committee has made concerning several defect
     reports (DRs). Links in the list below point to detailed discussion of
     the relevant defect report.
!      * [455]2094 unimplemented: use of `ptrmem_cst' in template type
         unification
!      * [456]2294 using declaration confusion
!      * [457]5050 template instantiation depth exceeds limit: recursion
         problem?
!      * [458]9371 Bad exception handling in
         i/ostream::operator>>/<<(streambuf*)
!      * [459]9546 bad exception handling in ostream members
!      * [460]10081 basic_ios::_M_cache_locale leaves NULL members in the
         face of unknown locales
!      * [461]10093 [462][DR 61] Setting failbit in exceptions doesn't work
!      * [463]10095 istream::operator>>(int&) sets ios::badbit when
         ios::failbit is set.
!      * [464]11554 Warning about reordering of initializers doesn't mention
         location of constructor
!      * [465]12297 istream::sentry::sentry() handles eof() incorrectly.
!      * [466]12352 Exception safety problems in src/localename.cc
!      * [467]12438 Memory leak in locale::combine()
!      * [468]12540 Memory leak in locale::locale(const char*)
!      * [469]12594 DRs [470]60 [TC] and [471]63 [TC] not implemented
!      * [472]12657 Resolution of [473]DR 292 (WP) still unimplemented
!      * [474]12696 memory eating infinite loop in diagnostics (error
         recovery problem)
!      * [475]12815 Code compiled with optimization behaves unexpectedly
!      * [476]12862 Conflicts between typedefs/enums and namespace member
         declarations
!      * [477]12926 Wrong value after assignment in initialize list using
         bit-fields
!      * [478]12967 Resolution of [479]DR 300 [WP] still unimplemented
!      * [480]12971 Resolution of [481]DR 328 [WP] still unimplemented
!      * [482]13007 basic_streambuf::pubimbue, imbue wrong
!      * [483]13009 Implicitly-defined assignment operator writes to wrong
         memory
!      * [484]13057 regparm attribute not applied to destructor
!      * [485]13070 -Wformat option ignored in g++
!      * [486]13081 forward template declarations in <complex> let inlining
         fail
!      * [487]13239 Assertion does not seem to work correctly anymore
!      * [488]13262 "xxx is private within this context" when initializing a
         self-contained template class
!      * [489]13290 simple typo in concept checking for std::generate_n
!      * [490]13323 Template code does not compile in presence of typedef
!      * [491]13369 __verify_grouping (and __add_grouping?) not correct
!      * [492]13371 infinite loop with packed struct and inlining
!      * [493]13445 Template argument replacement "dereferences" a typedef
!      * [494]13461 Fails to access protected-ctor from public constant
!      * [495]13462 Non-standard-conforming type set::pointer
!      * [496]13478 gcc uses wrong constructor to initialize a const
         reference
!      * [497]13544 "conflicting types" for enums in different scopes
!      * [498]13650 string::compare should not (always) use
         traits_type::length()
!      * [499]13683 bogus warning about passing non-PODs through ellipsis
!      * [500]13688 Derived class is denied access to protected base class
         member class
!      * [501]13774 Member variable cleared in virtual multiple inheritance
         class
!      * [502]13884 Protect sstream.tcc from extern template use
  
      Java compiler and library
  
!      * [503]10746 [win32] garbage collection crash in GCJ
  
      Objective-C compiler and library
  
!      * [504]11433 Crash due to dereferencing null pointer when querying
         protocol
  
      Fortran compiler and library
  
!      * [505]12633 logical expression gives incorrect result with
         -fugly-logint option
!      * [506]13037 [gcse-lm] g77 generates incorrect code
!      * [507]13213 Hex constant problem when compiling with -fugly-logint
         and -ftypeless-boz
  
      x86-specific (Intel/AMD)
  
!      * [508]4490 ICE with -m128bit-long-double
!      * [509]12292 [x86_64] ICE: RTL check: expected code `const_int', have
         `reg' in make_field_assignment, in combine.c
!      * [510]12441 ICE: can't find a register to spill
!      * [511]12943 array static-init failure under -fpic, -fPIC
!      * [512]13608 Incorrect code with -O3 -ffast-math
  
      PowerPC-specific
  
!      * [513]11598 testcase gcc.dg/20020118-1.c fails runtime check of
         __attribute__((aligned(16)))
!      * [514]11793 ICE in extract_insn, in recog.c (const_vector's)
!      * [515]12467 vmsumubm emitted when vmsummbm appropriate (typo in
         altivec.md)
!      * [516]12537 g++ generates writeable text sections
  
      SPARC-specific
  
!      * [517]12496 wrong result for __atomic_add(&value, -1) when using -O0
         -m64
!      * [518]12865 mprotect call to make trampoline executable may fail
!      * [519]13354 ICE in sparc_emit_set_const32
  
      ARM-specific
  
!      * [520]10467 [arm] ICE in pre_insert_copy_insn,
  
      ia64-specific
  
!      * [521]11226 ICE passing struct arg with two floats
!      * [522]11227 ICE for _Complex float, _Complex long double args
!      * [523]12644 GCC 3.3.2 fails to compile glibc on ia64
!      * [524]13149 build gcc-3.3.2 1305 error:unrecognizable insn
       * Various fixes for libunwind
  
      Alpha-specific
  
!      * [525]12654 Incorrect comparison code generated for Alpha
!      * [526]12965 SEGV+ICE in cc1plus on alpha-linux with -O2
!      * [527]13031 ICE (unrecognizable insn) when building gnome-libs-1.4.2
  
      HPPA-specific
  
!      * [528]11634 [hppa] ICE in verify_local_live_at_start, in flow.c
!      * [529]12158 [hppa] compilation does not terminate at -O1
  
      S390-specific
  
!      * [530]11992 Wrong built-in code for memcmp with length 1<<24: only
         (1<<24)-1 possible for CLCL-Instruction
  
      SH-specific
  
!      * [531]9365 segfault in gen_far_branch (config/sh/sh.c)
!      * [532]10392 optimizer generates faulty array indexing
!      * [533]11322 SH profiler outputs multiple definitions of symbol
!      * [534]13069 gcc/config/sh/rtems.h broken
!      * [535]13302 Putting a va_list in a struct causes seg fault
!      * [536]13585 Incorrect optimization of call to sfunc
       * Fix inappropriately exported libgcc functions from the shared
         library
  
      Other embedded target specific
  
!      * [537]8916 [mcore] unsigned char assign gets hosed.
!      * [538]11576 [h8300] ICE in change_address_1, in emit-rtl.c
!      * [539]13122 [h8300] local variable gets corrupted by function call
         when -fomit-frame-pointer is given
!      * [540]13256 [cris] strict_low_part mistreated in delay slots
!      * [541]13373 [mcore] optimization with -frerun-cse-after-loop
         -fexpensive-optimizations produces wrong code on mcore
  
      GNU HURD-specific
  
!      * [542]12561 gcc/config/t-gnu needs updating to work with
         --with-sysroot
  
      Tru64 Unix specific
  
!      * [543]6243 testsuite fails almost all tests due to no libintl in
         LD_LIBRARY_PATH during test.
!      * [544]11397 weak aliases broken on Tru64 UNIX
  
      AIX-specific
  
!      * [545]12505 build failure due to defines of uchar in cpphash.h and
         sys/types.h
!      * [546]13150 WEAK symbols not exported by collect2
  
      IRIX-specific
  
!      * [547]12666 fixincludes problem on IRIX 6.5.19m
  
      Solaris-specific
  
!      * [548]12969 Including sys/byteorder.h breaks configure checks
  
      Testsuite problems (compiler is not affected)
  
!      * [549]10819 testsuite creates CR+LF on compiler version lines in
         test summary files
!      * [550]11612 abi_check not finding correct libgcc_s.so.1
  
      Miscellaneous
  
!      * [551]13211 using -###, incorrect warnings about unused linker file
         are produced
       __________________________________________________________________
  
! [552]GCC 3.3.4
  
!    This is the [553]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 3.3.4 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
       __________________________________________________________________
  
! [554]GCC 3.3.5
  
!    This is the [555]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 3.3.5 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
       __________________________________________________________________
  
! [556]GCC 3.3.6
  
!    This is the [557]list of problem reports (PRs) from GCC's bug tracking
     system that are known to be fixed in the 3.3.6 release. This list might
     not be complete (that is, it is possible that some PRs that have been
     fixed are not listed here).
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [558]GCC manuals. If that fails, the
!     [559]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [560]gcc@gcc.gnu.org. All of [561]our lists have public
      archives.
  
!    Copyright (C) [562]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [563]maintained by the GCC team. Last modified
!    2025-01-31.
  
  References
  
*************** References
*** 20181,20735 ****
     5. https://gcc.gnu.org/news/dfa.html
     6. https://gcc.gnu.org/c99status.html
     7. https://gcc.gnu.org/onlinedocs/gcc-3.3.6/g77/News.html
!    8. https://gcc.gnu.org/PR10140
!    9. https://gcc.gnu.org/PR10198
!   10. https://gcc.gnu.org/PR10338
!   11. https://gcc.gnu.org/PR3581
!   12. https://gcc.gnu.org/PR4382
!   13. https://gcc.gnu.org/PR5533
!   14. https://gcc.gnu.org/PR6387
!   15. https://gcc.gnu.org/PR6412
!   16. https://gcc.gnu.org/PR6620
!   17. https://gcc.gnu.org/PR6663
!   18. https://gcc.gnu.org/PR7068
!   19. https://gcc.gnu.org/PR7083
!   20. https://gcc.gnu.org/PR7647
!   21. https://gcc.gnu.org/PR7675
!   22. https://gcc.gnu.org/PR7718
!   23. https://gcc.gnu.org/PR8116
!   24. https://gcc.gnu.org/PR8358
!   25. https://gcc.gnu.org/PR8511
!   26. https://gcc.gnu.org/PR8564
!   27. https://gcc.gnu.org/PR8660
!   28. https://gcc.gnu.org/PR8766
!   29. https://gcc.gnu.org/PR8803
!   30. https://gcc.gnu.org/PR8846
!   31. https://gcc.gnu.org/PR8906
!   32. https://gcc.gnu.org/PR9216
!   33. https://gcc.gnu.org/PR9261
!   34. https://gcc.gnu.org/PR9263
!   35. https://gcc.gnu.org/PR9429
!   36. https://gcc.gnu.org/PR9516
!   37. https://gcc.gnu.org/PR9600
!   38. https://gcc.gnu.org/PR9629
!   39. https://gcc.gnu.org/PR9672
!   40. https://gcc.gnu.org/PR9749
!   41. https://gcc.gnu.org/PR9794
!   42. https://gcc.gnu.org/PR9829
!   43. https://gcc.gnu.org/PR9916
!   44. https://gcc.gnu.org/PR9936
!   45. https://gcc.gnu.org/PR10262
!   46. https://gcc.gnu.org/PR10278
!   47. https://gcc.gnu.org/PR10446
!   48. https://gcc.gnu.org/PR10451
!   49. https://gcc.gnu.org/PR10506
!   50. https://gcc.gnu.org/PR10549
!   51. https://gcc.gnu.org/PR2001
!   52. https://gcc.gnu.org/PR2391
!   53. https://gcc.gnu.org/PR2960
!   54. https://gcc.gnu.org/PR4046
!   55. https://gcc.gnu.org/PR6405
!   56. https://gcc.gnu.org/PR6798
!   57. https://gcc.gnu.org/PR6871
!   58. https://gcc.gnu.org/PR6909
!   59. https://gcc.gnu.org/PR7189
!   60. https://gcc.gnu.org/PR7642
!   61. https://gcc.gnu.org/PR8634
!   62. https://gcc.gnu.org/PR8750
!   63. https://gcc.gnu.org/PR2161
!   64. https://gcc.gnu.org/PR4319
!   65. https://gcc.gnu.org/PR8602
!   66. https://gcc.gnu.org/PR9177
!   67. https://gcc.gnu.org/PR9853
!   68. https://gcc.gnu.org/PR45
!   69. https://gcc.gnu.org/PR3784
!   70. https://gcc.gnu.org/PR764
!   71. https://gcc.gnu.org/PR5116
!   72. https://gcc.gnu.org/PR2862
!   73. https://gcc.gnu.org/PR3663
!   74. https://gcc.gnu.org/PR3797
!   75. https://gcc.gnu.org/PR3948
!   76. https://gcc.gnu.org/PR4137
!   77. https://gcc.gnu.org/PR4361
!   78. https://gcc.gnu.org/PR4802
!   79. https://gcc.gnu.org/PR5837
!   80. https://gcc.gnu.org/PR4803
!   81. https://gcc.gnu.org/PR5094
!   82. https://gcc.gnu.org/PR5730
!   83. https://gcc.gnu.org/PR6713
!   84. https://gcc.gnu.org/PR7015
!   85. https://gcc.gnu.org/PR7086
!   86. https://gcc.gnu.org/PR7099
!   87. https://gcc.gnu.org/PR7247
!   88. https://gcc.gnu.org/PR7441
!   89. https://gcc.gnu.org/PR7768
!   90. https://gcc.gnu.org/PR7804
!   91. https://gcc.gnu.org/PR8099
!   92. https://gcc.gnu.org/PR8117
!   93. https://gcc.gnu.org/PR8205
!   94. https://gcc.gnu.org/PR8645
!   95. https://gcc.gnu.org/PR8724
!   96. https://gcc.gnu.org/PR8805
!   97. https://gcc.gnu.org/PR8691
!   98. https://gcc.gnu.org/PR8700
!   99. https://gcc.gnu.org/PR8724
!  100. https://gcc.gnu.org/PR8949
!  101. https://gcc.gnu.org/PR9016
!  102. https://gcc.gnu.org/PR9053
!  103. https://gcc.gnu.org/PR9152
!  104. https://gcc.gnu.org/PR9182
!  105. https://gcc.gnu.org/PR9297
!  106. https://gcc.gnu.org/PR9318
!  107. https://gcc.gnu.org/PR9320
!  108. https://gcc.gnu.org/PR9400
!  109. https://gcc.gnu.org/PR9424
!  110. https://gcc.gnu.org/PR9425
!  111. https://gcc.gnu.org/PR9439
!  112. https://gcc.gnu.org/PR9474
!  113. https://gcc.gnu.org/PR9548
!  114. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#231
!  115. https://gcc.gnu.org/PR9555
!  116. https://gcc.gnu.org/PR9561
!  117. https://gcc.gnu.org/PR9563
!  118. https://gcc.gnu.org/PR9582
!  119. https://gcc.gnu.org/PR9622
!  120. https://gcc.gnu.org/PR9683
!  121. https://gcc.gnu.org/PR9791
!  122. https://gcc.gnu.org/PR9817
!  123. https://gcc.gnu.org/PR9825
!  124. https://gcc.gnu.org/PR9826
!  125. https://gcc.gnu.org/PR9924
!  126. https://gcc.gnu.org/PR9946
!  127. https://gcc.gnu.org/PR9964
!  128. https://gcc.gnu.org/PR9988
!  129. https://gcc.gnu.org/PR10033
!  130. https://gcc.gnu.org/PR10097
!  131. https://gcc.gnu.org/PR10132
!  132. https://gcc.gnu.org/PR10180
!  133. https://gcc.gnu.org/PR10199
!  134. https://gcc.gnu.org/PR10300
!  135. https://gcc.gnu.org/PR10427
!  136. https://gcc.gnu.org/PR10503
!  137. https://gcc.gnu.org/PR5956
!  138. https://gcc.gnu.org/PR1832
!  139. https://gcc.gnu.org/PR3924
!  140. https://gcc.gnu.org/PR5634
!  141. https://gcc.gnu.org/PR6367
!  142. https://gcc.gnu.org/PR6491
!  143. https://gcc.gnu.org/PR6742
!  144. https://gcc.gnu.org/PR7113
!  145. https://gcc.gnu.org/PR7236
!  146. https://gcc.gnu.org/PR7278
!  147. https://gcc.gnu.org/PR7384
!  148. https://gcc.gnu.org/PR7388
!  149. https://gcc.gnu.org/PR8587
!  150. https://gcc.gnu.org/PR9038
!  151. https://gcc.gnu.org/PR10197
!  152. https://gcc.gnu.org/PR6005
!  153. https://gcc.gnu.org/PR6389
!  154. https://gcc.gnu.org/PR6576
!  155. https://gcc.gnu.org/PR6652
!  156. https://gcc.gnu.org/PR7060
!  157. https://gcc.gnu.org/PR7073
!  158. https://gcc.gnu.org/PR7180
!  159. https://gcc.gnu.org/PR7416
!  160. https://gcc.gnu.org/PR7570
!  161. https://gcc.gnu.org/PR7578
!  162. https://gcc.gnu.org/PR7611
!  163. https://gcc.gnu.org/PR7709
!  164. https://gcc.gnu.org/PR7766
!  165. https://gcc.gnu.org/PR7785
!  166. https://gcc.gnu.org/PR7786
!  167. https://gcc.gnu.org/PR8142
!  168. https://gcc.gnu.org/PR8234
!  169. https://gcc.gnu.org/PR8415
!  170. https://gcc.gnu.org/PR8481
!  171. https://gcc.gnu.org/PR8593
!  172. https://gcc.gnu.org/PR8759
!  173. https://gcc.gnu.org/PR8997
!  174. https://gcc.gnu.org/PR9253
!  175. https://gcc.gnu.org/PR9254
!  176. https://gcc.gnu.org/PR9271
!  177. https://gcc.gnu.org/PR6767
!  178. https://gcc.gnu.org/PR9911
!  179. https://gcc.gnu.org/PR10020
!  180. https://gcc.gnu.org/PR10546
!  181. https://gcc.gnu.org/PR7029
!  182. https://gcc.gnu.org/PR2903
!  183. https://gcc.gnu.org/PR7873
!  184. https://gcc.gnu.org/PR7680
!  185. https://gcc.gnu.org/PR8705
!  186. https://gcc.gnu.org/PR9986
!  187. https://gcc.gnu.org/PR10056
!  188. https://gcc.gnu.org/PR6744
!  189. https://gcc.gnu.org/PR7361
!  190. https://gcc.gnu.org/PR9496
!  191. https://gcc.gnu.org/PR7067
!  192. https://gcc.gnu.org/PR8480
!  193. https://gcc.gnu.org/PR8784
!  194. https://gcc.gnu.org/PR10315
!  195. https://gcc.gnu.org/PR10267
!  196. https://gcc.gnu.org/PR7916
!  197. https://gcc.gnu.org/PR7926
!  198. https://gcc.gnu.org/PR8555
!  199. https://gcc.gnu.org/PR8994
!  200. https://gcc.gnu.org/PR9426
!  201. https://gcc.gnu.org/PR9806
!  202. https://gcc.gnu.org/PR10077
!  203. https://gcc.gnu.org/PR10233
!  204. https://gcc.gnu.org/PR10286
!  205. https://gcc.gnu.org/PR10308
!  206. https://gcc.gnu.org/PR11272
!  207. https://gcc.gnu.org/PR5754
!  208. https://gcc.gnu.org/PR6597
!  209. https://gcc.gnu.org/PR6949
!  210. https://gcc.gnu.org/PR7053
!  211. https://gcc.gnu.org/PR8164
!  212. https://gcc.gnu.org/PR8384
!  213. https://gcc.gnu.org/PR9559
!  214. https://gcc.gnu.org/PR9649
!  215. https://gcc.gnu.org/PR9864
!  216. https://gcc.gnu.org/PR10432
!  217. https://gcc.gnu.org/PR10475
!  218. https://gcc.gnu.org/PR10635
!  219. https://gcc.gnu.org/PR10661
!  220. https://gcc.gnu.org/PR10700
!  221. https://gcc.gnu.org/PR10712
!  222. https://gcc.gnu.org/PR10796
!  223. https://gcc.gnu.org/PR10890
!  224. https://gcc.gnu.org/PR10939
!  225. https://gcc.gnu.org/PR10956
!  226. https://gcc.gnu.org/PR11041
!  227. https://gcc.gnu.org/PR11059
!  228. https://gcc.gnu.org/PR11083
!  229. https://gcc.gnu.org/PR11105
!  230. https://gcc.gnu.org/PR11149
!  231. https://gcc.gnu.org/PR11228
!  232. https://gcc.gnu.org/PR11282
!  233. https://gcc.gnu.org/PR11301
!  234. https://gcc.gnu.org/PR11308
!  235. https://gcc.gnu.org/PR11473
!  236. https://gcc.gnu.org/PR11503
!  237. https://gcc.gnu.org/PR11513
!  238. https://gcc.gnu.org/PR11198
!  239. https://gcc.gnu.org/PR11304
!  240. https://gcc.gnu.org/PR11381
!  241. https://gcc.gnu.org/PR11536
!  242. https://gcc.gnu.org/PR11557
!  243. https://gcc.gnu.org/PR5897
!  244. https://gcc.gnu.org/PR11279
!  245. https://gcc.gnu.org/PR11022
!  246. https://gcc.gnu.org/PR2330
!  247. https://gcc.gnu.org/PR5388
!  248. https://gcc.gnu.org/PR5390
!  249. https://gcc.gnu.org/PR7877
!  250. https://gcc.gnu.org/PR9393
!  251. https://gcc.gnu.org/PR10032
!  252. https://gcc.gnu.org/PR10468
!  253. https://gcc.gnu.org/PR10527
!  254. https://gcc.gnu.org/PR10679
!  255. https://gcc.gnu.org/PR10682
!  256. https://gcc.gnu.org/PR10689
!  257. https://gcc.gnu.org/PR10845
!  258. https://gcc.gnu.org/PR10849
!  259. https://gcc.gnu.org/PR10888
!  260. https://gcc.gnu.org/PR10929
!  261. https://gcc.gnu.org/PR10931
!  262. https://gcc.gnu.org/PR10940
!  263. https://gcc.gnu.org/PR10968
!  264. https://gcc.gnu.org/PR10990
!  265. https://gcc.gnu.org/PR11039
!  266. https://gcc.gnu.org/PR11062
!  267. https://gcc.gnu.org/PR11095
!  268. https://gcc.gnu.org/PR11098
!  269. https://gcc.gnu.org/PR11137
!  270. https://gcc.gnu.org/PR11154
!  271. https://gcc.gnu.org/PR11329
!  272. https://gcc.gnu.org/PR11332
!  273. https://gcc.gnu.org/PR11431
!  274. https://gcc.gnu.org/PR11528
!  275. https://gcc.gnu.org/PR11546
!  276. https://gcc.gnu.org/PR11567
!  277. https://gcc.gnu.org/PR11645
!  278. https://gcc.gnu.org/PR5179
!  279. https://gcc.gnu.org/PR8204
!  280. https://gcc.gnu.org/PR10838
!  281. https://gcc.gnu.org/PR10886
!  282. https://gcc.gnu.org/PR11349
!  283. https://gcc.gnu.org/PR4823
!  284. https://gcc.gnu.org/PR8878
!  285. https://gcc.gnu.org/PR9815
!  286. https://gcc.gnu.org/PR10402
!  287. https://gcc.gnu.org/PR10504
!  288. https://gcc.gnu.org/PR10673
!  289. https://gcc.gnu.org/PR11044
!  290. https://gcc.gnu.org/PR11089
!  291. https://gcc.gnu.org/PR11420
!  292. https://gcc.gnu.org/PR9362
!  293. https://gcc.gnu.org/PR10142
!  294. https://gcc.gnu.org/PR10663
!  295. https://gcc.gnu.org/PR10835
!  296. https://gcc.gnu.org/PR10876
!  297. https://gcc.gnu.org/PR10955
!  298. https://gcc.gnu.org/PR11018
!  299. https://gcc.gnu.org/PR11556
!  300. https://gcc.gnu.org/PR10907
!  301. https://gcc.gnu.org/PR11320
!  302. https://gcc.gnu.org/PR11599
!  303. https://gcc.gnu.org/PR9745
!  304. https://gcc.gnu.org/PR10871
!  305. https://gcc.gnu.org/PR11440
!  306. https://gcc.gnu.org/PR7594
!  307. https://gcc.gnu.org/PR10557
!  308. https://gcc.gnu.org/PR11054
!  309. https://gcc.gnu.org/PR10834
!  310. https://gcc.gnu.org/PR10842
!  311. https://gcc.gnu.org/PR11052
!  312. https://gcc.gnu.org/PR11183
!  313. https://gcc.gnu.org/PR11084
!  314. https://gcc.gnu.org/PR10331
!  315. https://gcc.gnu.org/PR10413
!  316. https://gcc.gnu.org/PR11096
!  317. https://gcc.gnu.org/PR2873
!  318. https://gcc.gnu.org/PR3163
!  319. https://gcc.gnu.org/PR5287
!  320. https://gcc.gnu.org/PR10148
!  321. https://gcc.gnu.org/PR8787
!  322. https://gcc.gnu.org/PR10900
!  323. https://gcc.gnu.org/PR1607
!  324. https://gcc.gnu.org/PR4252
!  325. https://gcc.gnu.org/PR4490
!  326. https://gcc.gnu.org/PR10355
!  327. https://gcc.gnu.org/PR10726
!  328. https://gcc.gnu.org/PR10805
!  329. https://gcc.gnu.org/PR10815
!  330. https://gcc.gnu.org/PR10877
!  331. https://gcc.gnu.org/PR11280
!  332. https://gcc.gnu.org/PR11466
!  333. https://gcc.gnu.org/PR10737
!  334. https://gcc.gnu.org/PR10810
!  335. https://gcc.gnu.org/PR8336
!  336. https://gcc.gnu.org/PR9330
!  337. https://gcc.gnu.org/PR9631
!  338. https://gcc.gnu.org/PR9877
!  339. https://gcc.gnu.org/PR11687
!  340. https://gcc.gnu.org/PR12263
!  341. https://gcc.gnu.org/PR12490
!  342. https://gcc.gnu.org/PR7277
!  343. https://gcc.gnu.org/PR7939
!  344. https://gcc.gnu.org/PR11063
!  345. https://gcc.gnu.org/PR11207
!  346. https://gcc.gnu.org/PR11522
!  347. https://gcc.gnu.org/PR11595
!  348. https://gcc.gnu.org/PR11646
!  349. https://gcc.gnu.org/PR11665
!  350. https://gcc.gnu.org/PR11852
!  351. https://gcc.gnu.org/PR11878
!  352. https://gcc.gnu.org/PR11883
!  353. https://gcc.gnu.org/PR11991
!  354. https://gcc.gnu.org/PR12146
!  355. https://gcc.gnu.org/PR12215
!  356. https://gcc.gnu.org/PR12369
!  357. https://gcc.gnu.org/PR12446
!  358. https://gcc.gnu.org/PR12510
!  359. https://gcc.gnu.org/PR12544
!  360. https://gcc.gnu.org/PR9862
!  361. https://gcc.gnu.org/PR10962
!  362. https://gcc.gnu.org/PR11370
!  363. https://gcc.gnu.org/PR11637
!  364. https://gcc.gnu.org/PR11885
!  365. https://gcc.gnu.org/PR12082
!  366. https://gcc.gnu.org/PR12180
!  367. https://gcc.gnu.org/PR12340
!  368. https://gcc.gnu.org/PR3907
!  369. https://gcc.gnu.org/PR5293
!  370. https://gcc.gnu.org/PR5296
!  371. https://gcc.gnu.org/PR7939
!  372. https://gcc.gnu.org/PR8656
!  373. https://gcc.gnu.org/PR10147
!  374. https://gcc.gnu.org/PR11400
!  375. https://gcc.gnu.org/PR11409
!  376. https://gcc.gnu.org/PR11740
!  377. https://gcc.gnu.org/PR11786
!  378. https://gcc.gnu.org/PR11867
!  379. https://gcc.gnu.org/PR11928
!  380. https://gcc.gnu.org/PR12114
!  381. https://gcc.gnu.org/PR12163
!  382. https://gcc.gnu.org/PR12181
!  383. https://gcc.gnu.org/PR12236
!  384. https://gcc.gnu.org/PR12266
!  385. https://gcc.gnu.org/PR12296
!  386. https://gcc.gnu.org/PR12298
!  387. https://gcc.gnu.org/PR12369
!  388. https://gcc.gnu.org/PR12337
!  389. https://gcc.gnu.org/PR12344
!  390. https://gcc.gnu.org/PR12451
!  391. https://gcc.gnu.org/PR12486
!  392. https://gcc.gnu.org/PR8869
!  393. https://gcc.gnu.org/PR9786
!  394. https://gcc.gnu.org/PR11689
!  395. https://gcc.gnu.org/PR12116
!  396. https://gcc.gnu.org/PR12070
!  397. https://gcc.gnu.org/PR11184
!  398. https://gcc.gnu.org/PR11535
!  399. https://gcc.gnu.org/PR11693
!  400. https://gcc.gnu.org/PR12224
!  401. https://gcc.gnu.org/PR11087
!  402. https://gcc.gnu.org/PR11319
!  403. https://gcc.gnu.org/PR11949
!  404. https://gcc.gnu.org/PR11662
!  405. https://gcc.gnu.org/PR11965
!  406. https://gcc.gnu.org/PR12301
!  407. https://gcc.gnu.org/PR11717
!  408. https://gcc.gnu.org/PR11313
!  409. https://gcc.gnu.org/PR11712
!  410. https://gcc.gnu.org/PR12166
!  411. https://gcc.gnu.org/PR12101
!  412. https://gcc.gnu.org/PR10988
!  413. https://gcc.gnu.org/PR11805
!  414. https://gcc.gnu.org/PR11902
!  415. https://gcc.gnu.org/PR11903
!  416. https://gcc.gnu.org/PR11890
!  417. https://gcc.gnu.org/PR12399
!  418. https://gcc.gnu.org/PR13068
!  419. https://gcc.gnu.org/PR10060
!  420. https://gcc.gnu.org/PR10555
!  421. https://gcc.gnu.org/PR10706
!  422. https://gcc.gnu.org/PR11496
!  423. https://gcc.gnu.org/PR11741
!  424. https://gcc.gnu.org/PR12440
!  425. https://gcc.gnu.org/PR12632
!  426. https://gcc.gnu.org/PR12712
!  427. https://gcc.gnu.org/PR12726
!  428. https://gcc.gnu.org/PR12890
!  429. https://gcc.gnu.org/PR12900
!  430. https://gcc.gnu.org/PR13060
!  431. https://gcc.gnu.org/PR13289
!  432. https://gcc.gnu.org/PR13318
!  433. https://gcc.gnu.org/PR13392
!  434. https://gcc.gnu.org/PR13574
!  435. https://gcc.gnu.org/PR13475
!  436. https://gcc.gnu.org/PR13797
!  437. https://gcc.gnu.org/PR13824
!  438. https://gcc.gnu.org/PR8776
!  439. https://gcc.gnu.org/PR10339
!  440. https://gcc.gnu.org/PR11350
!  441. https://gcc.gnu.org/PR12826
!  442. https://gcc.gnu.org/PR12500
!  443. https://gcc.gnu.org/PR12941
!  444. https://gcc.gnu.org/PR12953
!  445. https://gcc.gnu.org/PR13041
!  446. https://gcc.gnu.org/PR13507
!  447. https://gcc.gnu.org/PR13382
!  448. https://gcc.gnu.org/PR13394
!  449. https://gcc.gnu.org/PR13400
!  450. https://gcc.gnu.org/PR13521
!  451. https://gcc.gnu.org/PR2094
!  452. https://gcc.gnu.org/PR2294
!  453. https://gcc.gnu.org/PR5050
!  454. https://gcc.gnu.org/PR9371
!  455. https://gcc.gnu.org/PR9546
!  456. https://gcc.gnu.org/PR10081
!  457. https://gcc.gnu.org/PR10093
!  458. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#61
!  459. https://gcc.gnu.org/PR10095
!  460. https://gcc.gnu.org/PR11554
!  461. https://gcc.gnu.org/PR12297
!  462. https://gcc.gnu.org/PR12352
!  463. https://gcc.gnu.org/PR12438
!  464. https://gcc.gnu.org/PR12540
!  465. https://gcc.gnu.org/PR12594
!  466. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#60
!  467. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#63
!  468. https://gcc.gnu.org/PR12657
!  469. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#292
!  470. https://gcc.gnu.org/PR12696
!  471. https://gcc.gnu.org/PR12815
!  472. https://gcc.gnu.org/PR12862
!  473. https://gcc.gnu.org/PR12926
!  474. https://gcc.gnu.org/PR12967
!  475. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html
!  476. https://gcc.gnu.org/PR12971
!  477. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#328
!  478. https://gcc.gnu.org/PR13007
!  479. https://gcc.gnu.org/PR13009
!  480. https://gcc.gnu.org/PR13057
!  481. https://gcc.gnu.org/PR13070
!  482. https://gcc.gnu.org/PR13081
!  483. https://gcc.gnu.org/PR13239
!  484. https://gcc.gnu.org/PR13262
!  485. https://gcc.gnu.org/PR13290
!  486. https://gcc.gnu.org/PR13323
!  487. https://gcc.gnu.org/PR13369
!  488. https://gcc.gnu.org/PR13371
!  489. https://gcc.gnu.org/PR13445
!  490. https://gcc.gnu.org/PR13461
!  491. https://gcc.gnu.org/PR13462
!  492. https://gcc.gnu.org/PR13478
!  493. https://gcc.gnu.org/PR13544
!  494. https://gcc.gnu.org/PR13650
!  495. https://gcc.gnu.org/PR13683
!  496. https://gcc.gnu.org/PR13688
!  497. https://gcc.gnu.org/PR13774
!  498. https://gcc.gnu.org/PR13884
!  499. https://gcc.gnu.org/PR10746
!  500. https://gcc.gnu.org/PR11433
!  501. https://gcc.gnu.org/PR12633
!  502. https://gcc.gnu.org/PR13037
!  503. https://gcc.gnu.org/PR13213
!  504. https://gcc.gnu.org/PR4490
!  505. https://gcc.gnu.org/PR12292
!  506. https://gcc.gnu.org/PR12441
!  507. https://gcc.gnu.org/PR12943
!  508. https://gcc.gnu.org/PR13608
!  509. https://gcc.gnu.org/PR11598
!  510. https://gcc.gnu.org/PR11793
!  511. https://gcc.gnu.org/PR12467
!  512. https://gcc.gnu.org/PR12537
!  513. https://gcc.gnu.org/PR12496
!  514. https://gcc.gnu.org/PR12865
!  515. https://gcc.gnu.org/PR13354
!  516. https://gcc.gnu.org/PR10467
!  517. https://gcc.gnu.org/PR11226
!  518. https://gcc.gnu.org/PR11227
!  519. https://gcc.gnu.org/PR12644
!  520. https://gcc.gnu.org/PR13149
!  521. https://gcc.gnu.org/PR12654
!  522. https://gcc.gnu.org/PR12965
!  523. https://gcc.gnu.org/PR13031
!  524. https://gcc.gnu.org/PR11634
!  525. https://gcc.gnu.org/PR12158
!  526. https://gcc.gnu.org/PR11992
!  527. https://gcc.gnu.org/PR9365
!  528. https://gcc.gnu.org/PR10392
!  529. https://gcc.gnu.org/PR11322
!  530. https://gcc.gnu.org/PR13069
!  531. https://gcc.gnu.org/PR13302
!  532. https://gcc.gnu.org/PR13585
!  533. https://gcc.gnu.org/PR8916
!  534. https://gcc.gnu.org/PR11576
!  535. https://gcc.gnu.org/PR13122
!  536. https://gcc.gnu.org/PR13256
!  537. https://gcc.gnu.org/PR13373
!  538. https://gcc.gnu.org/PR12561
!  539. https://gcc.gnu.org/PR6243
!  540. https://gcc.gnu.org/PR11397
!  541. https://gcc.gnu.org/PR12505
!  542. https://gcc.gnu.org/PR13150
!  543. https://gcc.gnu.org/PR12666
!  544. https://gcc.gnu.org/PR12969
!  545. https://gcc.gnu.org/PR10819
!  546. https://gcc.gnu.org/PR11612
!  547. https://gcc.gnu.org/PR13211
!  548. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.3.4
!  549. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.3.5
!  550. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.3.6
!  551. https://gcc.gnu.org/onlinedocs/
!  552. mailto:gcc-help@gcc.gnu.org
!  553. mailto:gcc@gcc.gnu.org
!  554. https://gcc.gnu.org/lists.html
!  555. https://www.fsf.org/
!  556. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-3.2/index.html
                               GCC 3.2 Release Series
--- 20684,21245 ----
     5. https://gcc.gnu.org/news/dfa.html
     6. https://gcc.gnu.org/c99status.html
     7. https://gcc.gnu.org/onlinedocs/gcc-3.3.6/g77/News.html
!    8. https://gcc.gnu.org/gcc-3.3/changes.html#obsolete_systems
!    9. https://gcc.gnu.org/PR10140
!   10. https://gcc.gnu.org/PR10198
!   11. https://gcc.gnu.org/PR10338
!   12. https://gcc.gnu.org/PR3581
!   13. https://gcc.gnu.org/PR4382
!   14. https://gcc.gnu.org/PR5533
!   15. https://gcc.gnu.org/PR6387
!   16. https://gcc.gnu.org/PR6412
!   17. https://gcc.gnu.org/PR6620
!   18. https://gcc.gnu.org/PR6663
!   19. https://gcc.gnu.org/PR7068
!   20. https://gcc.gnu.org/PR7083
!   21. https://gcc.gnu.org/PR7647
!   22. https://gcc.gnu.org/PR7675
!   23. https://gcc.gnu.org/PR7718
!   24. https://gcc.gnu.org/PR8116
!   25. https://gcc.gnu.org/PR8358
!   26. https://gcc.gnu.org/PR8511
!   27. https://gcc.gnu.org/PR8564
!   28. https://gcc.gnu.org/PR8660
!   29. https://gcc.gnu.org/PR8766
!   30. https://gcc.gnu.org/PR8803
!   31. https://gcc.gnu.org/PR8846
!   32. https://gcc.gnu.org/PR8906
!   33. https://gcc.gnu.org/PR9216
!   34. https://gcc.gnu.org/PR9261
!   35. https://gcc.gnu.org/PR9263
!   36. https://gcc.gnu.org/PR9429
!   37. https://gcc.gnu.org/PR9516
!   38. https://gcc.gnu.org/PR9600
!   39. https://gcc.gnu.org/PR9629
!   40. https://gcc.gnu.org/PR9672
!   41. https://gcc.gnu.org/PR9749
!   42. https://gcc.gnu.org/PR9794
!   43. https://gcc.gnu.org/PR9829
!   44. https://gcc.gnu.org/PR9916
!   45. https://gcc.gnu.org/PR9936
!   46. https://gcc.gnu.org/PR10262
!   47. https://gcc.gnu.org/PR10278
!   48. https://gcc.gnu.org/PR10446
!   49. https://gcc.gnu.org/PR10451
!   50. https://gcc.gnu.org/PR10506
!   51. https://gcc.gnu.org/PR10549
!   52. https://gcc.gnu.org/PR2001
!   53. https://gcc.gnu.org/PR2391
!   54. https://gcc.gnu.org/PR2960
!   55. https://gcc.gnu.org/PR4046
!   56. https://gcc.gnu.org/PR6405
!   57. https://gcc.gnu.org/PR6798
!   58. https://gcc.gnu.org/PR6871
!   59. https://gcc.gnu.org/PR6909
!   60. https://gcc.gnu.org/PR7189
!   61. https://gcc.gnu.org/PR7642
!   62. https://gcc.gnu.org/PR8634
!   63. https://gcc.gnu.org/PR8750
!   64. https://gcc.gnu.org/PR2161
!   65. https://gcc.gnu.org/PR4319
!   66. https://gcc.gnu.org/PR8602
!   67. https://gcc.gnu.org/PR9177
!   68. https://gcc.gnu.org/PR9853
!   69. https://gcc.gnu.org/PR45
!   70. https://gcc.gnu.org/PR3784
!   71. https://gcc.gnu.org/PR764
!   72. https://gcc.gnu.org/PR5116
!   73. https://gcc.gnu.org/PR2862
!   74. https://gcc.gnu.org/PR3663
!   75. https://gcc.gnu.org/PR3797
!   76. https://gcc.gnu.org/PR3948
!   77. https://gcc.gnu.org/PR4137
!   78. https://gcc.gnu.org/PR4361
!   79. https://gcc.gnu.org/PR4802
!   80. https://gcc.gnu.org/PR5837
!   81. https://gcc.gnu.org/PR4803
!   82. https://gcc.gnu.org/PR5094
!   83. https://gcc.gnu.org/PR5730
!   84. https://gcc.gnu.org/PR6713
!   85. https://gcc.gnu.org/PR7015
!   86. https://gcc.gnu.org/PR7086
!   87. https://gcc.gnu.org/PR7099
!   88. https://gcc.gnu.org/PR7247
!   89. https://gcc.gnu.org/PR7441
!   90. https://gcc.gnu.org/PR7768
!   91. https://gcc.gnu.org/PR7804
!   92. https://gcc.gnu.org/PR8099
!   93. https://gcc.gnu.org/PR8117
!   94. https://gcc.gnu.org/PR8205
!   95. https://gcc.gnu.org/PR8645
!   96. https://gcc.gnu.org/PR8724
!   97. https://gcc.gnu.org/PR8805
!   98. https://gcc.gnu.org/PR8691
!   99. https://gcc.gnu.org/PR8700
!  100. https://gcc.gnu.org/PR8724
!  101. https://gcc.gnu.org/PR8949
!  102. https://gcc.gnu.org/PR9016
!  103. https://gcc.gnu.org/PR9053
!  104. https://gcc.gnu.org/PR9152
!  105. https://gcc.gnu.org/PR9182
!  106. https://gcc.gnu.org/PR9297
!  107. https://gcc.gnu.org/PR9318
!  108. https://gcc.gnu.org/PR9320
!  109. https://gcc.gnu.org/PR9400
!  110. https://gcc.gnu.org/PR9424
!  111. https://gcc.gnu.org/PR9425
!  112. https://gcc.gnu.org/PR9439
!  113. https://gcc.gnu.org/PR9474
!  114. https://gcc.gnu.org/PR9548
!  115. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#231
!  116. https://gcc.gnu.org/PR9555
!  117. https://gcc.gnu.org/PR9561
!  118. https://gcc.gnu.org/PR9563
!  119. https://gcc.gnu.org/PR9582
!  120. https://gcc.gnu.org/PR9622
!  121. https://gcc.gnu.org/PR9683
!  122. https://gcc.gnu.org/PR9791
!  123. https://gcc.gnu.org/PR9817
!  124. https://gcc.gnu.org/PR9825
!  125. https://gcc.gnu.org/PR9826
!  126. https://gcc.gnu.org/PR9924
!  127. https://gcc.gnu.org/PR9946
!  128. https://gcc.gnu.org/PR9964
!  129. https://gcc.gnu.org/PR9988
!  130. https://gcc.gnu.org/PR10033
!  131. https://gcc.gnu.org/PR10097
!  132. https://gcc.gnu.org/PR10132
!  133. https://gcc.gnu.org/PR10180
!  134. https://gcc.gnu.org/PR10199
!  135. https://gcc.gnu.org/PR10300
!  136. https://gcc.gnu.org/PR10427
!  137. https://gcc.gnu.org/PR10503
!  138. https://gcc.gnu.org/PR5956
!  139. https://gcc.gnu.org/PR1832
!  140. https://gcc.gnu.org/PR3924
!  141. https://gcc.gnu.org/PR5634
!  142. https://gcc.gnu.org/PR6367
!  143. https://gcc.gnu.org/PR6491
!  144. https://gcc.gnu.org/PR6742
!  145. https://gcc.gnu.org/PR7113
!  146. https://gcc.gnu.org/PR7236
!  147. https://gcc.gnu.org/PR7278
!  148. https://gcc.gnu.org/PR7384
!  149. https://gcc.gnu.org/PR7388
!  150. https://gcc.gnu.org/PR8587
!  151. https://gcc.gnu.org/PR9038
!  152. https://gcc.gnu.org/PR10197
!  153. https://gcc.gnu.org/PR6005
!  154. https://gcc.gnu.org/PR6389
!  155. https://gcc.gnu.org/PR6576
!  156. https://gcc.gnu.org/PR6652
!  157. https://gcc.gnu.org/PR7060
!  158. https://gcc.gnu.org/PR7073
!  159. https://gcc.gnu.org/PR7180
!  160. https://gcc.gnu.org/PR7416
!  161. https://gcc.gnu.org/PR7570
!  162. https://gcc.gnu.org/PR7578
!  163. https://gcc.gnu.org/PR7611
!  164. https://gcc.gnu.org/PR7709
!  165. https://gcc.gnu.org/PR7766
!  166. https://gcc.gnu.org/PR7785
!  167. https://gcc.gnu.org/PR7786
!  168. https://gcc.gnu.org/PR8142
!  169. https://gcc.gnu.org/PR8234
!  170. https://gcc.gnu.org/PR8415
!  171. https://gcc.gnu.org/PR8481
!  172. https://gcc.gnu.org/PR8593
!  173. https://gcc.gnu.org/PR8759
!  174. https://gcc.gnu.org/PR8997
!  175. https://gcc.gnu.org/PR9253
!  176. https://gcc.gnu.org/PR9254
!  177. https://gcc.gnu.org/PR9271
!  178. https://gcc.gnu.org/PR6767
!  179. https://gcc.gnu.org/PR9911
!  180. https://gcc.gnu.org/PR10020
!  181. https://gcc.gnu.org/PR10546
!  182. https://gcc.gnu.org/PR7029
!  183. https://gcc.gnu.org/PR2903
!  184. https://gcc.gnu.org/PR7873
!  185. https://gcc.gnu.org/PR7680
!  186. https://gcc.gnu.org/PR8705
!  187. https://gcc.gnu.org/PR9986
!  188. https://gcc.gnu.org/PR10056
!  189. https://gcc.gnu.org/PR6744
!  190. https://gcc.gnu.org/PR7361
!  191. https://gcc.gnu.org/PR9496
!  192. https://gcc.gnu.org/PR7067
!  193. https://gcc.gnu.org/PR8480
!  194. https://gcc.gnu.org/PR8784
!  195. https://gcc.gnu.org/PR10315
!  196. https://gcc.gnu.org/PR10267
!  197. https://gcc.gnu.org/PR7916
!  198. https://gcc.gnu.org/PR7926
!  199. https://gcc.gnu.org/PR8555
!  200. https://gcc.gnu.org/PR8994
!  201. https://gcc.gnu.org/PR9426
!  202. https://gcc.gnu.org/PR9806
!  203. https://gcc.gnu.org/PR10077
!  204. https://gcc.gnu.org/PR10233
!  205. https://gcc.gnu.org/PR10286
!  206. https://gcc.gnu.org/PR10308
!  207. https://gcc.gnu.org/gcc-3.3/changes.html#GCC3.3.1
!  208. https://gcc.gnu.org/PR11272
!  209. https://gcc.gnu.org/PR5754
!  210. https://gcc.gnu.org/PR6597
!  211. https://gcc.gnu.org/PR6949
!  212. https://gcc.gnu.org/PR7053
!  213. https://gcc.gnu.org/PR8164
!  214. https://gcc.gnu.org/PR8384
!  215. https://gcc.gnu.org/PR9559
!  216. https://gcc.gnu.org/PR9649
!  217. https://gcc.gnu.org/PR9864
!  218. https://gcc.gnu.org/PR10432
!  219. https://gcc.gnu.org/PR10475
!  220. https://gcc.gnu.org/PR10635
!  221. https://gcc.gnu.org/PR10661
!  222. https://gcc.gnu.org/PR10700
!  223. https://gcc.gnu.org/PR10712
!  224. https://gcc.gnu.org/PR10796
!  225. https://gcc.gnu.org/PR10890
!  226. https://gcc.gnu.org/PR10939
!  227. https://gcc.gnu.org/PR10956
!  228. https://gcc.gnu.org/PR11041
!  229. https://gcc.gnu.org/PR11059
!  230. https://gcc.gnu.org/PR11083
!  231. https://gcc.gnu.org/PR11105
!  232. https://gcc.gnu.org/PR11149
!  233. https://gcc.gnu.org/PR11228
!  234. https://gcc.gnu.org/PR11282
!  235. https://gcc.gnu.org/PR11301
!  236. https://gcc.gnu.org/PR11308
!  237. https://gcc.gnu.org/PR11473
!  238. https://gcc.gnu.org/PR11503
!  239. https://gcc.gnu.org/PR11513
!  240. https://gcc.gnu.org/PR11198
!  241. https://gcc.gnu.org/PR11304
!  242. https://gcc.gnu.org/PR11381
!  243. https://gcc.gnu.org/PR11536
!  244. https://gcc.gnu.org/PR11557
!  245. https://gcc.gnu.org/PR5897
!  246. https://gcc.gnu.org/PR11279
!  247. https://gcc.gnu.org/PR11022
!  248. https://gcc.gnu.org/PR2330
!  249. https://gcc.gnu.org/PR5388
!  250. https://gcc.gnu.org/PR5390
!  251. https://gcc.gnu.org/PR7877
!  252. https://gcc.gnu.org/PR9393
!  253. https://gcc.gnu.org/PR10032
!  254. https://gcc.gnu.org/PR10468
!  255. https://gcc.gnu.org/PR10527
!  256. https://gcc.gnu.org/PR10679
!  257. https://gcc.gnu.org/PR10682
!  258. https://gcc.gnu.org/PR10689
!  259. https://gcc.gnu.org/PR10845
!  260. https://gcc.gnu.org/PR10849
!  261. https://gcc.gnu.org/PR10888
!  262. https://gcc.gnu.org/PR10929
!  263. https://gcc.gnu.org/PR10931
!  264. https://gcc.gnu.org/PR10940
!  265. https://gcc.gnu.org/PR10968
!  266. https://gcc.gnu.org/PR10990
!  267. https://gcc.gnu.org/PR11039
!  268. https://gcc.gnu.org/PR11062
!  269. https://gcc.gnu.org/PR11095
!  270. https://gcc.gnu.org/PR11098
!  271. https://gcc.gnu.org/PR11137
!  272. https://gcc.gnu.org/PR11154
!  273. https://gcc.gnu.org/PR11329
!  274. https://gcc.gnu.org/PR11332
!  275. https://gcc.gnu.org/PR11431
!  276. https://gcc.gnu.org/PR11528
!  277. https://gcc.gnu.org/PR11546
!  278. https://gcc.gnu.org/PR11567
!  279. https://gcc.gnu.org/PR11645
!  280. https://gcc.gnu.org/PR5179
!  281. https://gcc.gnu.org/PR8204
!  282. https://gcc.gnu.org/PR10838
!  283. https://gcc.gnu.org/PR10886
!  284. https://gcc.gnu.org/PR11349
!  285. https://gcc.gnu.org/PR4823
!  286. https://gcc.gnu.org/PR8878
!  287. https://gcc.gnu.org/PR9815
!  288. https://gcc.gnu.org/PR10402
!  289. https://gcc.gnu.org/PR10504
!  290. https://gcc.gnu.org/PR10673
!  291. https://gcc.gnu.org/PR11044
!  292. https://gcc.gnu.org/PR11089
!  293. https://gcc.gnu.org/PR11420
!  294. https://gcc.gnu.org/PR9362
!  295. https://gcc.gnu.org/PR10142
!  296. https://gcc.gnu.org/PR10663
!  297. https://gcc.gnu.org/PR10835
!  298. https://gcc.gnu.org/PR10876
!  299. https://gcc.gnu.org/PR10955
!  300. https://gcc.gnu.org/PR11018
!  301. https://gcc.gnu.org/PR11556
!  302. https://gcc.gnu.org/PR10907
!  303. https://gcc.gnu.org/PR11320
!  304. https://gcc.gnu.org/PR11599
!  305. https://gcc.gnu.org/PR9745
!  306. https://gcc.gnu.org/PR10871
!  307. https://gcc.gnu.org/PR11440
!  308. https://gcc.gnu.org/PR7594
!  309. https://gcc.gnu.org/PR10557
!  310. https://gcc.gnu.org/PR11054
!  311. https://gcc.gnu.org/PR10834
!  312. https://gcc.gnu.org/PR10842
!  313. https://gcc.gnu.org/PR11052
!  314. https://gcc.gnu.org/PR11183
!  315. https://gcc.gnu.org/PR11084
!  316. https://gcc.gnu.org/PR10331
!  317. https://gcc.gnu.org/PR10413
!  318. https://gcc.gnu.org/PR11096
!  319. https://gcc.gnu.org/PR2873
!  320. https://gcc.gnu.org/PR3163
!  321. https://gcc.gnu.org/PR5287
!  322. https://gcc.gnu.org/PR10148
!  323. https://gcc.gnu.org/PR8787
!  324. https://gcc.gnu.org/PR10900
!  325. https://gcc.gnu.org/PR1607
!  326. https://gcc.gnu.org/PR4252
!  327. https://gcc.gnu.org/PR4490
!  328. https://gcc.gnu.org/PR10355
!  329. https://gcc.gnu.org/PR10726
!  330. https://gcc.gnu.org/PR10805
!  331. https://gcc.gnu.org/PR10815
!  332. https://gcc.gnu.org/PR10877
!  333. https://gcc.gnu.org/PR11280
!  334. https://gcc.gnu.org/PR11466
!  335. https://gcc.gnu.org/PR10737
!  336. https://gcc.gnu.org/PR10810
!  337. https://gcc.gnu.org/gcc-3.3/changes.html#GCC3.3.2
!  338. https://gcc.gnu.org/PR8336
!  339. https://gcc.gnu.org/PR9330
!  340. https://gcc.gnu.org/PR9631
!  341. https://gcc.gnu.org/PR9877
!  342. https://gcc.gnu.org/PR11687
!  343. https://gcc.gnu.org/PR12263
!  344. https://gcc.gnu.org/PR12490
!  345. https://gcc.gnu.org/PR7277
!  346. https://gcc.gnu.org/PR7939
!  347. https://gcc.gnu.org/PR11063
!  348. https://gcc.gnu.org/PR11207
!  349. https://gcc.gnu.org/PR11522
!  350. https://gcc.gnu.org/PR11595
!  351. https://gcc.gnu.org/PR11646
!  352. https://gcc.gnu.org/PR11665
!  353. https://gcc.gnu.org/PR11852
!  354. https://gcc.gnu.org/PR11878
!  355. https://gcc.gnu.org/PR11883
!  356. https://gcc.gnu.org/PR11991
!  357. https://gcc.gnu.org/PR12146
!  358. https://gcc.gnu.org/PR12215
!  359. https://gcc.gnu.org/PR12369
!  360. https://gcc.gnu.org/PR12446
!  361. https://gcc.gnu.org/PR12510
!  362. https://gcc.gnu.org/PR12544
!  363. https://gcc.gnu.org/PR9862
!  364. https://gcc.gnu.org/PR10962
!  365. https://gcc.gnu.org/PR11370
!  366. https://gcc.gnu.org/PR11637
!  367. https://gcc.gnu.org/PR11885
!  368. https://gcc.gnu.org/PR12082
!  369. https://gcc.gnu.org/PR12180
!  370. https://gcc.gnu.org/PR12340
!  371. https://gcc.gnu.org/PR3907
!  372. https://gcc.gnu.org/PR5293
!  373. https://gcc.gnu.org/PR5296
!  374. https://gcc.gnu.org/PR7939
!  375. https://gcc.gnu.org/PR8656
!  376. https://gcc.gnu.org/PR10147
!  377. https://gcc.gnu.org/PR11400
!  378. https://gcc.gnu.org/PR11409
!  379. https://gcc.gnu.org/PR11740
!  380. https://gcc.gnu.org/PR11786
!  381. https://gcc.gnu.org/PR11867
!  382. https://gcc.gnu.org/PR11928
!  383. https://gcc.gnu.org/PR12114
!  384. https://gcc.gnu.org/PR12163
!  385. https://gcc.gnu.org/PR12181
!  386. https://gcc.gnu.org/PR12236
!  387. https://gcc.gnu.org/PR12266
!  388. https://gcc.gnu.org/PR12296
!  389. https://gcc.gnu.org/PR12298
!  390. https://gcc.gnu.org/PR12369
!  391. https://gcc.gnu.org/PR12337
!  392. https://gcc.gnu.org/PR12344
!  393. https://gcc.gnu.org/PR12451
!  394. https://gcc.gnu.org/PR12486
!  395. https://gcc.gnu.org/PR8869
!  396. https://gcc.gnu.org/PR9786
!  397. https://gcc.gnu.org/PR11689
!  398. https://gcc.gnu.org/PR12116
!  399. https://gcc.gnu.org/PR12070
!  400. https://gcc.gnu.org/PR11184
!  401. https://gcc.gnu.org/PR11535
!  402. https://gcc.gnu.org/PR11693
!  403. https://gcc.gnu.org/PR12224
!  404. https://gcc.gnu.org/PR11087
!  405. https://gcc.gnu.org/PR11319
!  406. https://gcc.gnu.org/PR11949
!  407. https://gcc.gnu.org/PR11662
!  408. https://gcc.gnu.org/PR11965
!  409. https://gcc.gnu.org/PR12301
!  410. https://gcc.gnu.org/PR11717
!  411. https://gcc.gnu.org/PR11313
!  412. https://gcc.gnu.org/PR11712
!  413. https://gcc.gnu.org/PR12166
!  414. https://gcc.gnu.org/PR12101
!  415. https://gcc.gnu.org/PR10988
!  416. https://gcc.gnu.org/PR11805
!  417. https://gcc.gnu.org/PR11902
!  418. https://gcc.gnu.org/PR11903
!  419. https://gcc.gnu.org/gcc-3.3/changes.html#GCC3.3.3
!  420. https://gcc.gnu.org/PR11890
!  421. https://gcc.gnu.org/PR12399
!  422. https://gcc.gnu.org/PR13068
!  423. https://gcc.gnu.org/PR10060
!  424. https://gcc.gnu.org/PR10555
!  425. https://gcc.gnu.org/PR10706
!  426. https://gcc.gnu.org/PR11496
!  427. https://gcc.gnu.org/PR11741
!  428. https://gcc.gnu.org/PR12440
!  429. https://gcc.gnu.org/PR12632
!  430. https://gcc.gnu.org/PR12712
!  431. https://gcc.gnu.org/PR12726
!  432. https://gcc.gnu.org/PR12890
!  433. https://gcc.gnu.org/PR12900
!  434. https://gcc.gnu.org/PR13060
!  435. https://gcc.gnu.org/PR13289
!  436. https://gcc.gnu.org/PR13318
!  437. https://gcc.gnu.org/PR13392
!  438. https://gcc.gnu.org/PR13574
!  439. https://gcc.gnu.org/PR13475
!  440. https://gcc.gnu.org/PR13797
!  441. https://gcc.gnu.org/PR13824
!  442. https://gcc.gnu.org/PR8776
!  443. https://gcc.gnu.org/PR10339
!  444. https://gcc.gnu.org/PR11350
!  445. https://gcc.gnu.org/PR12826
!  446. https://gcc.gnu.org/PR12500
!  447. https://gcc.gnu.org/PR12941
!  448. https://gcc.gnu.org/PR12953
!  449. https://gcc.gnu.org/PR13041
!  450. https://gcc.gnu.org/PR13507
!  451. https://gcc.gnu.org/PR13382
!  452. https://gcc.gnu.org/PR13394
!  453. https://gcc.gnu.org/PR13400
!  454. https://gcc.gnu.org/PR13521
!  455. https://gcc.gnu.org/PR2094
!  456. https://gcc.gnu.org/PR2294
!  457. https://gcc.gnu.org/PR5050
!  458. https://gcc.gnu.org/PR9371
!  459. https://gcc.gnu.org/PR9546
!  460. https://gcc.gnu.org/PR10081
!  461. https://gcc.gnu.org/PR10093
!  462. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#61
!  463. https://gcc.gnu.org/PR10095
!  464. https://gcc.gnu.org/PR11554
!  465. https://gcc.gnu.org/PR12297
!  466. https://gcc.gnu.org/PR12352
!  467. https://gcc.gnu.org/PR12438
!  468. https://gcc.gnu.org/PR12540
!  469. https://gcc.gnu.org/PR12594
!  470. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#60
!  471. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#63
!  472. https://gcc.gnu.org/PR12657
!  473. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#292
!  474. https://gcc.gnu.org/PR12696
!  475. https://gcc.gnu.org/PR12815
!  476. https://gcc.gnu.org/PR12862
!  477. https://gcc.gnu.org/PR12926
!  478. https://gcc.gnu.org/PR12967
!  479. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html
!  480. https://gcc.gnu.org/PR12971
!  481. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#328
!  482. https://gcc.gnu.org/PR13007
!  483. https://gcc.gnu.org/PR13009
!  484. https://gcc.gnu.org/PR13057
!  485. https://gcc.gnu.org/PR13070
!  486. https://gcc.gnu.org/PR13081
!  487. https://gcc.gnu.org/PR13239
!  488. https://gcc.gnu.org/PR13262
!  489. https://gcc.gnu.org/PR13290
!  490. https://gcc.gnu.org/PR13323
!  491. https://gcc.gnu.org/PR13369
!  492. https://gcc.gnu.org/PR13371
!  493. https://gcc.gnu.org/PR13445
!  494. https://gcc.gnu.org/PR13461
!  495. https://gcc.gnu.org/PR13462
!  496. https://gcc.gnu.org/PR13478
!  497. https://gcc.gnu.org/PR13544
!  498. https://gcc.gnu.org/PR13650
!  499. https://gcc.gnu.org/PR13683
!  500. https://gcc.gnu.org/PR13688
!  501. https://gcc.gnu.org/PR13774
!  502. https://gcc.gnu.org/PR13884
!  503. https://gcc.gnu.org/PR10746
!  504. https://gcc.gnu.org/PR11433
!  505. https://gcc.gnu.org/PR12633
!  506. https://gcc.gnu.org/PR13037
!  507. https://gcc.gnu.org/PR13213
!  508. https://gcc.gnu.org/PR4490
!  509. https://gcc.gnu.org/PR12292
!  510. https://gcc.gnu.org/PR12441
!  511. https://gcc.gnu.org/PR12943
!  512. https://gcc.gnu.org/PR13608
!  513. https://gcc.gnu.org/PR11598
!  514. https://gcc.gnu.org/PR11793
!  515. https://gcc.gnu.org/PR12467
!  516. https://gcc.gnu.org/PR12537
!  517. https://gcc.gnu.org/PR12496
!  518. https://gcc.gnu.org/PR12865
!  519. https://gcc.gnu.org/PR13354
!  520. https://gcc.gnu.org/PR10467
!  521. https://gcc.gnu.org/PR11226
!  522. https://gcc.gnu.org/PR11227
!  523. https://gcc.gnu.org/PR12644
!  524. https://gcc.gnu.org/PR13149
!  525. https://gcc.gnu.org/PR12654
!  526. https://gcc.gnu.org/PR12965
!  527. https://gcc.gnu.org/PR13031
!  528. https://gcc.gnu.org/PR11634
!  529. https://gcc.gnu.org/PR12158
!  530. https://gcc.gnu.org/PR11992
!  531. https://gcc.gnu.org/PR9365
!  532. https://gcc.gnu.org/PR10392
!  533. https://gcc.gnu.org/PR11322
!  534. https://gcc.gnu.org/PR13069
!  535. https://gcc.gnu.org/PR13302
!  536. https://gcc.gnu.org/PR13585
!  537. https://gcc.gnu.org/PR8916
!  538. https://gcc.gnu.org/PR11576
!  539. https://gcc.gnu.org/PR13122
!  540. https://gcc.gnu.org/PR13256
!  541. https://gcc.gnu.org/PR13373
!  542. https://gcc.gnu.org/PR12561
!  543. https://gcc.gnu.org/PR6243
!  544. https://gcc.gnu.org/PR11397
!  545. https://gcc.gnu.org/PR12505
!  546. https://gcc.gnu.org/PR13150
!  547. https://gcc.gnu.org/PR12666
!  548. https://gcc.gnu.org/PR12969
!  549. https://gcc.gnu.org/PR10819
!  550. https://gcc.gnu.org/PR11612
!  551. https://gcc.gnu.org/PR13211
!  552. https://gcc.gnu.org/gcc-3.3/changes.html#GCC3.3.4
!  553. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.3.4
!  554. https://gcc.gnu.org/gcc-3.3/changes.html#GCC3.3.5
!  555. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.3.5
!  556. https://gcc.gnu.org/gcc-3.3/changes.html#GCC3.3.6
!  557. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.3.6
!  558. https://gcc.gnu.org/onlinedocs/
!  559. mailto:gcc-help@gcc.gnu.org
!  560. mailto:gcc@gcc.gnu.org
!  561. https://gcc.gnu.org/lists.html
!  562. https://www.fsf.org/
!  563. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-3.2/index.html
                               GCC 3.2 Release Series
*************** Caveats and New Features
*** 20863,20869 ****
  
      C++
  
!      * GCC 3.2 fixed serveral differences between the C++ ABI implemented
         in GCC and the multi-vendor standard, but more have been found
         since the release. 3.2.1 adds a new warning, -Wabi, to warn about
         code which is affected by these bugs. We will fix these bugs in
--- 21373,21379 ----
  
      C++
  
!      * GCC 3.2 fixed several differences between the C++ ABI implemented
         in GCC and the multi-vendor standard, but more have been found
         since the release. 3.2.1 adds a new warning, -Wabi, to warn about
         code which is affected by these bugs. We will fix these bugs in
*************** Caveats and New Features
*** 20892,20898 ****
       * Fixed prefetch code generation
       __________________________________________________________________
  
! GCC 3.2.3
  
     3.2.3 is a bug fix release only; there are no new features that were
     not present in GCC 3.2.2.
--- 21402,21408 ----
       * Fixed prefetch code generation
       __________________________________________________________________
  
! [4]GCC 3.2.3
  
     3.2.3 is a bug fix release only; there are no new features that were
     not present in GCC 3.2.2.
*************** GCC 3.2.3
*** 20907,21030 ****
  
      Internal Compiler Errors (multi-platform)
  
!      * [4]3782: (c++) -quiet -fstats produces a segmentation fault in
         cc1plus
!      * [5]6440: (c++) template specializations cause ICE
!      * [6]7050: (c++) ICE on: (i ? get_string() : throw)
!      * [7]7741: ICE on conflicting types (make_decl_rtl in varasm.c)
!      * [8]7982: (c++) ICE due to infinite recursion (using STL set)
!      * [9]8068: exceedingly high (infinite) memory usage
!      * [10]8178: ICE with __builtin_ffs
!      * [11]8396: ICE in copy_to_mode_reg, in explow.c
!      * [12]8674: (c++) ICE in cp_expr_size, in cp/cp-lang.c
!      * [13]9768: ICE when optimizing inline code at -O2
!      * [14]9798: (c++) Infinite recursion (segfault) in
         cp/decl.c:push_using_directive with recursive using directives
!      * [15]9799: mismatching structure initializer with nested flexible
         array member: ICE
!      * [16]9928: ICE on duplicate enum declaration
!      * [17]10114: ICE in mem_loc_descriptor, in dwarf2out.c (affects
         sparc, alpha)
!      * [18]10352: ICE in find_reloads_toplev
!      * [19]10336: ICE with -Wunreachable-code
  
      C/optimizer bugs:
  
!      * [20]8224: Incorrect joining of signed and unsigned division
!      * [21]8613: -O2 produces wrong code with builtin strlen and
         postincrements
!      * [22]8828: gcc reports some code is unreachable when it is not
!      * [23]9226: GCSE breaking argument passing
!      * [24]9853: miscompilation of non-constant structure initializer
!      * [25]9797: C99-style struct initializers are miscompiled
!      * [26]9967: Some standard C function calls should not be replaced
         when optimizing for size
!      * [27]10116: ce2: invalid merge of join_bb in the context of switch
         statements
!      * [28]10171: wrong code for inlined function
!      * [29]10175: -Wunreachable-code doesn't work for single lines
  
      C++ compiler and library:
  
!      * [30]8316: Confusing diagnostic for code that misuses conversion
         operators
!      * [31]9169: filebuf output fails if codecvt<>::out returns noconv
!      * [32]9420: incomplete type incorrectly reported
!      * [33]9459: typeof in return type specification of template not
         supported
!      * [34]9507: filebuf::open handles ios_base::ate incorrectly
!      * [35]9538: Out-of-bounds memory access in streambuf::sputbackc
!      * [36]9602: Total confusion about template/friend/virtual/abstract
!      * [37]9993: destructor not called for local object created within and
         returned from infinite loop
!      * [38]10167: ieee_1003.1-2001 locale specialisations on a glibc-2.3.2
         system
  
      Java compiler and library:
  
!      * [39]9652: libgcj build fails on irix6.5.1[78]
!      * [40]10144: gas on solaris complains about bad .stabs lines for
         java, native as unaffected
  
      x86-specific (Intel/AMD):
  
!      * [41]8746: gcc miscompiles Linux kernel ppa driver on x86
!      * [42]9888: -mcpu=k6 -Os produces out of range loop instructions
!      * [43]9638: Cross-build for target i386-elf and i586-pc-linux-gnu
         failed
!      * [44]9954: Cross-build for target i586-pc-linux-gnu (--with-newlib)
         failed
  
      SPARC-specific:
  
!      * [45]7784: [Sparc] ICE in extract_insn, in recog.c
!      * [46]7796: sparc extra failure with -m64 on execute/930921-1.c in
         unroll.c
!      * [47]8281: ICE when compiling with -O2 -fPIC for Ultrasparc
!      * [48]8366: [Sparc] C testsuite failure with -m64 -fpic -O in
         execute/loop-2d.c
!      * [49]8726: gcc -O2 miscompiles Samba 2.2.7 on 32-bit sparc
!      * [50]9414: Scheduling bug on Ultrasparc
!      * [51]10067: GCC-3.2.2 outputs invalid asm on sparc64
  
      m68k-specific:
  
!      * [52]7248: broken "inclusive or" code
!      * [53]8343: m68k-elf/rtems ICE at instantiate_virtual_regs_1
  
      PowerPC-specific:
  
!      * [54]9732: Wrong code with -O2 -fPIC
!      * [55]10073: ICE: powerpc cannot split insn
  
      Alpha-specific:
  
!      * [56]7702: optimization problem on a DEC alpha under OSF1
!      * [57]9671: gcc.3.2.2 does not build on a HP Tru64 Unix v5.1B system
  
      HP-specific:
  
!      * [58]8694: <string> breaks <ctype.h> on HP-UX 10.20 (DUP: 9275)
!      * [59]9953: (ada) gcc 3.2.x can't build 3.3-branch ada on HP-UX 10
         (missing symbol)
!      * [60]10271: Floating point args don't get reloaded across function
         calls with -O2
  
      MIPS specific:
  
!      * [61]6362: mips-irix6 gcc-3.1 C testsuite failure with -mips4 in
         compile/920501-4.c
  
      CRIS specific:
  
!      * [62]10377: gcc-3.2.2 creates bad assembler code for cris
  
      Miscellaneous and minor bugs:
  
!      * [63]6955: collect2 says "core dumped" when there is no core
       __________________________________________________________________
  
! GCC 3.2.2
  
     Beginning with 3.2.2, GCC's Makefile suite supports redirection of make
     install by means of the DESTDIR variable. Parts of the GCC tree have
--- 21417,21540 ----
  
      Internal Compiler Errors (multi-platform)
  
!      * [5]3782: (c++) -quiet -fstats produces a segmentation fault in
         cc1plus
!      * [6]6440: (c++) template specializations cause ICE
!      * [7]7050: (c++) ICE on: (i ? get_string() : throw)
!      * [8]7741: ICE on conflicting types (make_decl_rtl in varasm.c)
!      * [9]7982: (c++) ICE due to infinite recursion (using STL set)
!      * [10]8068: exceedingly high (infinite) memory usage
!      * [11]8178: ICE with __builtin_ffs
!      * [12]8396: ICE in copy_to_mode_reg, in explow.c
!      * [13]8674: (c++) ICE in cp_expr_size, in cp/cp-lang.c
!      * [14]9768: ICE when optimizing inline code at -O2
!      * [15]9798: (c++) Infinite recursion (segfault) in
         cp/decl.c:push_using_directive with recursive using directives
!      * [16]9799: mismatching structure initializer with nested flexible
         array member: ICE
!      * [17]9928: ICE on duplicate enum declaration
!      * [18]10114: ICE in mem_loc_descriptor, in dwarf2out.c (affects
         sparc, alpha)
!      * [19]10352: ICE in find_reloads_toplev
!      * [20]10336: ICE with -Wunreachable-code
  
      C/optimizer bugs:
  
!      * [21]8224: Incorrect joining of signed and unsigned division
!      * [22]8613: -O2 produces wrong code with builtin strlen and
         postincrements
!      * [23]8828: gcc reports some code is unreachable when it is not
!      * [24]9226: GCSE breaking argument passing
!      * [25]9853: miscompilation of non-constant structure initializer
!      * [26]9797: C99-style struct initializers are miscompiled
!      * [27]9967: Some standard C function calls should not be replaced
         when optimizing for size
!      * [28]10116: ce2: invalid merge of join_bb in the context of switch
         statements
!      * [29]10171: wrong code for inlined function
!      * [30]10175: -Wunreachable-code doesn't work for single lines
  
      C++ compiler and library:
  
!      * [31]8316: Confusing diagnostic for code that misuses conversion
         operators
!      * [32]9169: filebuf output fails if codecvt<>::out returns noconv
!      * [33]9420: incomplete type incorrectly reported
!      * [34]9459: typeof in return type specification of template not
         supported
!      * [35]9507: filebuf::open handles ios_base::ate incorrectly
!      * [36]9538: Out-of-bounds memory access in streambuf::sputbackc
!      * [37]9602: Total confusion about template/friend/virtual/abstract
!      * [38]9993: destructor not called for local object created within and
         returned from infinite loop
!      * [39]10167: ieee_1003.1-2001 locale specialisations on a glibc-2.3.2
         system
  
      Java compiler and library:
  
!      * [40]9652: libgcj build fails on irix6.5.1[78]
!      * [41]10144: gas on solaris complains about bad .stabs lines for
         java, native as unaffected
  
      x86-specific (Intel/AMD):
  
!      * [42]8746: gcc miscompiles Linux kernel ppa driver on x86
!      * [43]9888: -mcpu=k6 -Os produces out of range loop instructions
!      * [44]9638: Cross-build for target i386-elf and i586-pc-linux-gnu
         failed
!      * [45]9954: Cross-build for target i586-pc-linux-gnu (--with-newlib)
         failed
  
      SPARC-specific:
  
!      * [46]7784: [Sparc] ICE in extract_insn, in recog.c
!      * [47]7796: sparc extra failure with -m64 on execute/930921-1.c in
         unroll.c
!      * [48]8281: ICE when compiling with -O2 -fPIC for Ultrasparc
!      * [49]8366: [Sparc] C testsuite failure with -m64 -fpic -O in
         execute/loop-2d.c
!      * [50]8726: gcc -O2 miscompiles Samba 2.2.7 on 32-bit sparc
!      * [51]9414: Scheduling bug on Ultrasparc
!      * [52]10067: GCC-3.2.2 outputs invalid asm on sparc64
  
      m68k-specific:
  
!      * [53]7248: broken "inclusive or" code
!      * [54]8343: m68k-elf/rtems ICE at instantiate_virtual_regs_1
  
      PowerPC-specific:
  
!      * [55]9732: Wrong code with -O2 -fPIC
!      * [56]10073: ICE: powerpc cannot split insn
  
      Alpha-specific:
  
!      * [57]7702: optimization problem on a DEC alpha under OSF1
!      * [58]9671: gcc.3.2.2 does not build on a HP Tru64 Unix v5.1B system
  
      HP-specific:
  
!      * [59]8694: <string> breaks <ctype.h> on HP-UX 10.20 (DUP: 9275)
!      * [60]9953: (ada) gcc 3.2.x can't build 3.3-branch ada on HP-UX 10
         (missing symbol)
!      * [61]10271: Floating point args don't get reloaded across function
         calls with -O2
  
      MIPS specific:
  
!      * [62]6362: mips-irix6 gcc-3.1 C testsuite failure with -mips4 in
         compile/920501-4.c
  
      CRIS specific:
  
!      * [63]10377: gcc-3.2.2 creates bad assembler code for cris
  
      Miscellaneous and minor bugs:
  
!      * [64]6955: collect2 says "core dumped" when there is no core
       __________________________________________________________________
  
! [65]GCC 3.2.2
  
     Beginning with 3.2.2, GCC's Makefile suite supports redirection of make
     install by means of the DESTDIR variable. Parts of the GCC tree have
*************** GCC 3.2.2
*** 21051,21173 ****
  
      Internal Compiler Errors (multi-platform)
  
!      * [64]5919: (c++) ICE when passing variable array to template
         function
!      * [65]7129: (c++) ICE with min/max assignment operators (<?= and >?=)
!      * [66]7507: ICE with -O2 when address of called function is a
         complicated expression
!      * [67]7622: ICE with nested inline functions if function's address is
         taken
!      * [68]7681: (fortran) ICE in compensate_edge, in reg-stack.c (also PR
!        [69]9258)
!      * [70]8031: (c++) ICE in code comparing typeids and casting from
         virtual base
!      * [71]8275: ICE in simplify_subreg
!      * [72]8332: (c++) builtin strlen/template interaction causes ICE
!      * [73]8372: (c++) ICE on explicit call of destructor
!      * [74]8439: (c, not c++) empty struct causes ICE
!      * [75]8442: (c++) ICE with nested template classes
!      * [76]8518: ICE when compiling mplayer ("extern inline" issue)
!      * [77]8615: (c++) ICE with out-of-range character constant template
         argument
!      * [78]8663: (c++) ICE in cp_expr_size, at cp-lang.c:307
!      * [79]8799: (c++) ICE: error reporting routines re-entered
!      * [80]9328: (c++) ICE with typeof(X) for overloaded X
!      * [81]9465: (preprocessor) cpp -traditional ICE on null bytes
  
      C++ (compiler and library) bugs
  
!      * [82]47: scoping in nested classes is broken
!      * [83]6745: problems with iostream rdbuf() member function
!      * [84]8214: conversion from const char* const to char* sometimes
         accepted illegally
!      * [85]8493: builtin strlen and overload resolution (same bug as
!        [86]8332)
!      * [87]8503: strange behaviour of function types
!      * [88]8727: compiler confused by inheritance from an anonymous struct
!      * [89]7445: poor performance of std::locale::classic() in
         multi-threaded applications
!      * [90]8230: mishandling of overflow in vector<T>::resize
!      * [91]8399: sync_with_stdio(false) breaks unformatted input
!      * [92]8662: illegal access of private member of unnamed class is
         accepted
!      * [93]8707: "make distclean" fails in libstdc++-v3 directory
!      * [94]8708: __USE_MALLOC doesn't work
!      * [95]8790: Use of non-thread-safe strtok in src/localename.cc
!      * [96]8887: Bug in date formats with --enable-clocale=generic
!      * [97]9076: Call Frame Instructions are not handled correctly during
         unwind operation
!      * [98]9151: std::setprecision limited to 16 digits when outputting a
         double to a stream
!      * [99]9168: codecvt<char, char, mbstate_t> overwrites output buffers
!      * [100]9269: libstdc++ headers: explicit specialization of function
         must precede its first use
!      * [101]9322: return value of basic_streambuf<>::getloc affected by
         locale::global
!      * [102]9433: segfault in runtime support for dynamic_cast
  
      C and optimizer bugs
  
!      * [103]8032: GCC incorrectly initializes static structs that have
         flexible arrays
!      * [104]8639: simple arithmetic expression broken
!      * [105]8794: optimization improperly eliminates certain expressions
!      * [106]8832: traditional "asm volatile" code is illegally optimized
!      * [107]8988: loop optimizer bug: with -O2, code is generated that
         segfaults (found on i386, bug present for all platforms)
!      * [108]9492: structure copy clobbers subsequent stores to structure
  
      Objective-C bugs
  
!      * [109]9267: Objective-C parser won't build with newer bison versions
         (e.g. 1.875)
  
      Ada bugs
  
!      * [110]8344: Ada build problem due to conflict between gcc/final.o,
         gcc/ada/final.o
  
      Preprocessor bugs
  
!      * [111]8524: _Pragma within macros is improperly expanded
!      * [112]8880: __WCHAR_TYPE__ macro incorrectly set to "long int" with
         -fshort-wchar
  
      ARM-specific
  
!      * [113]9090: arm ICE with >= -O2; regression from gcc-2.95
  
      x86-specific (Intel/AMD)
  
!      * [114]8588: ICE in extract_insn, at recog.c:NNNN (shift instruction)
!      * [115]8599: loop unroll bug with -march=k6-3
!      * [116]9506: ABI breakage in structure return (affects BSD and
         Cygwin, but not GNU/Linux)
  
      FreeBSD 5.0 specific
  
!      * [117]9484: GCC 3.2.1 Bootstrap failure on FreeBSD 5.0
  
      RTEMS-specific
  
!      * [118]9292: hppa1.1-rtems configurery problems
!      * [119]9293: [m68k-elf/rtems] config/m68k/t-crtstuff bug
!      * [120]9295: [mips-rtems] config/mips/rtems.h init/fini issue
!      * [121]9296: gthr-rtems regression
!      * [122]9316: powerpc-rtems: extending multilibs
  
      HP-PA specific
  
!      * [123]9493: ICE with -O2 when building a simple function
  
      Documentation
  
!      * [124]7341: hyperlink to gcov in GCC documentation doesn't work
!      * [125]8947: Please add a warning about "-malign-double" in docs
!      * [126]7448, [127]8882: typo cleanups
       __________________________________________________________________
  
! GCC 3.2.1
  
     3.2.1 adds a new warning, -Wabi. This option warns when GNU C++
     generates code that is known not to be binary-compatible with the
--- 21561,21683 ----
  
      Internal Compiler Errors (multi-platform)
  
!      * [66]5919: (c++) ICE when passing variable array to template
         function
!      * [67]7129: (c++) ICE with min/max assignment operators (<?= and >?=)
!      * [68]7507: ICE with -O2 when address of called function is a
         complicated expression
!      * [69]7622: ICE with nested inline functions if function's address is
         taken
!      * [70]7681: (fortran) ICE in compensate_edge, in reg-stack.c (also PR
!        [71]9258)
!      * [72]8031: (c++) ICE in code comparing typeids and casting from
         virtual base
!      * [73]8275: ICE in simplify_subreg
!      * [74]8332: (c++) builtin strlen/template interaction causes ICE
!      * [75]8372: (c++) ICE on explicit call of destructor
!      * [76]8439: (c, not c++) empty struct causes ICE
!      * [77]8442: (c++) ICE with nested template classes
!      * [78]8518: ICE when compiling mplayer ("extern inline" issue)
!      * [79]8615: (c++) ICE with out-of-range character constant template
         argument
!      * [80]8663: (c++) ICE in cp_expr_size, at cp-lang.c:307
!      * [81]8799: (c++) ICE: error reporting routines re-entered
!      * [82]9328: (c++) ICE with typeof(X) for overloaded X
!      * [83]9465: (preprocessor) cpp -traditional ICE on null bytes
  
      C++ (compiler and library) bugs
  
!      * [84]47: scoping in nested classes is broken
!      * [85]6745: problems with iostream rdbuf() member function
!      * [86]8214: conversion from const char* const to char* sometimes
         accepted illegally
!      * [87]8493: builtin strlen and overload resolution (same bug as
!        [88]8332)
!      * [89]8503: strange behaviour of function types
!      * [90]8727: compiler confused by inheritance from an anonymous struct
!      * [91]7445: poor performance of std::locale::classic() in
         multi-threaded applications
!      * [92]8230: mishandling of overflow in vector<T>::resize
!      * [93]8399: sync_with_stdio(false) breaks unformatted input
!      * [94]8662: illegal access of private member of unnamed class is
         accepted
!      * [95]8707: "make distclean" fails in libstdc++-v3 directory
!      * [96]8708: __USE_MALLOC doesn't work
!      * [97]8790: Use of non-thread-safe strtok in src/localename.cc
!      * [98]8887: Bug in date formats with --enable-clocale=generic
!      * [99]9076: Call Frame Instructions are not handled correctly during
         unwind operation
!      * [100]9151: std::setprecision limited to 16 digits when outputting a
         double to a stream
!      * [101]9168: codecvt<char, char, mbstate_t> overwrites output buffers
!      * [102]9269: libstdc++ headers: explicit specialization of function
         must precede its first use
!      * [103]9322: return value of basic_streambuf<>::getloc affected by
         locale::global
!      * [104]9433: segfault in runtime support for dynamic_cast
  
      C and optimizer bugs
  
!      * [105]8032: GCC incorrectly initializes static structs that have
         flexible arrays
!      * [106]8639: simple arithmetic expression broken
!      * [107]8794: optimization improperly eliminates certain expressions
!      * [108]8832: traditional "asm volatile" code is illegally optimized
!      * [109]8988: loop optimizer bug: with -O2, code is generated that
         segfaults (found on i386, bug present for all platforms)
!      * [110]9492: structure copy clobbers subsequent stores to structure
  
      Objective-C bugs
  
!      * [111]9267: Objective-C parser won't build with newer bison versions
         (e.g. 1.875)
  
      Ada bugs
  
!      * [112]8344: Ada build problem due to conflict between gcc/final.o,
         gcc/ada/final.o
  
      Preprocessor bugs
  
!      * [113]8524: _Pragma within macros is improperly expanded
!      * [114]8880: __WCHAR_TYPE__ macro incorrectly set to "long int" with
         -fshort-wchar
  
      ARM-specific
  
!      * [115]9090: arm ICE with >= -O2; regression from gcc-2.95
  
      x86-specific (Intel/AMD)
  
!      * [116]8588: ICE in extract_insn, at recog.c:NNNN (shift instruction)
!      * [117]8599: loop unroll bug with -march=k6-3
!      * [118]9506: ABI breakage in structure return (affects BSD and
         Cygwin, but not GNU/Linux)
  
      FreeBSD 5.0 specific
  
!      * [119]9484: GCC 3.2.1 Bootstrap failure on FreeBSD 5.0
  
      RTEMS-specific
  
!      * [120]9292: hppa1.1-rtems configurery problems
!      * [121]9293: [m68k-elf/rtems] config/m68k/t-crtstuff bug
!      * [122]9295: [mips-rtems] config/mips/rtems.h init/fini issue
!      * [123]9296: gthr-rtems regression
!      * [124]9316: powerpc-rtems: extending multilibs
  
      HP-PA specific
  
!      * [125]9493: ICE with -O2 when building a simple function
  
      Documentation
  
!      * [126]7341: hyperlink to gcov in GCC documentation doesn't work
!      * [127]8947: Please add a warning about "-malign-double" in docs
!      * [128]7448, [129]8882: typo cleanups
       __________________________________________________________________
  
! [130]GCC 3.2.1
  
     3.2.1 adds a new warning, -Wabi. This option warns when GNU C++
     generates code that is known not to be binary-compatible with the
*************** GCC 3.2.1
*** 21182,21188 ****
     the new warning there are no new features that were not present in GCC
     3.2.
  
!    In addition, the previous fix for [128]PR 7445 (poor performance of
     std::locale::classic() in multi-threaded applications) was reverted
     ("unfixed"), because the "fix" was not thread-safe.
  
--- 21692,21698 ----
     the new warning there are no new features that were not present in GCC
     3.2.
  
!    In addition, the previous fix for [131]PR 7445 (poor performance of
     std::locale::classic() in multi-threaded applications) was reverted
     ("unfixed"), because the "fix" was not thread-safe.
  
*************** GCC 3.2.1
*** 21197,21379 ****
  
      Internal Compiler Errors (multi-platform)
  
!      * [129]2521: (c++) ICE in build_ptrmemfunc, in cp/typeck.c
!      * [130]5661: (c++) ICE instantiating template on array of unknown
         size (bad code)
!      * [131]6419: (c++) ICE in make_decl_rtl for "longest" attribute on
         64-bit platforms
!      * [132]6994: (c++) ICE in find_function_data
!      * [133]7150: preprocessor: GCC -dM -E gives an ICE
!      * [134]7160: ICE when optimizing branches without a return value
!      * [135]7228: (c++) ICE when using member template and template
         function
!      * [136]7266: (c++) ICE with -pedantic on missing typename
!      * [137]7353: ICE from use of "Naming Types" extension, see above
!      * [138]7411: ICE in instantiate_virtual_regs_1, in function.c
!      * [139]7478: (c++) ICE on static_cast inside template
!      * [140]7526: preprocessor core dump when _Pragma implies #pragma
         dependency
!      * [141]7721: (c++) ICE on simple (but incorrect) template ([142]7803
         is a duplicate)
!      * [143]7754: (c++) ICE on union with template parameter
!      * [144]7788: (c++) redeclaring a definition as an incomplete class
         causes ICE
!      * [145]8031: (c++) ICE in comptypes, in cp/typeck.c
!      * [146]8055: preprocessor dies with SIG11 when building FreeBSD
         kernel
!      * [147]8067: (c++) ICE due to mishandling of __FUNCTION__ and related
         variables
!      * [148]8134: (c++) ICE in force_store_init_value on legal code
!      * [149]8149: (c++) ICE on incomplete type
!      * [150]8160: (c++) ICE in build_modify_expr, in cp/typeck.c: array
         initialization
  
      C++ (compiler and library) bugs
  
!      * [151]5607: No pointer adjustment in covariant return types
!      * [152]6579: Infinite loop with statement expressions in member
         initialization
!      * [153]6803: Default copy constructor bug in GCC 3.1
!      * [154]7176: g++ confused by friend and static member with same name
!      * [155]7188: Segfault with template class and recursive (incorrect)
         initializer list
!      * [156]7306: Regression: GCC 3.x fails to compile code with virtual
         inheritance if a method has a variable number of arguments
!      * [157]7461: ctype<char>::classic_table() returns offset array on
         Cygwin
!      * [158]7524: f(const float arg[3]) fails
!      * [159]7584: Erroneous ambiguous base error on using declaration
!      * [160]7676: Member template overloading problem
!      * [161]7679: infinite loop when a right parenthesis is missing
!      * [162]7811: default locale not taken from environment
!      * [163]7961: compare( char *) implemented incorrectly in
         basic_string<>
!      * [164]8071: basic_ostream::operator<<(streambuf*) loops forever if
!        streambuf::underflow() leaves gptr() NULL (dups: [165]8127,
!        [166]6745)
!      * [167]8096: deque::at() throws std::range_error instead of
         std::out_of_range
!      * [168]8127: cout << cin.rdbuf() infinite loop
!      * [169]8218: Excessively large memory consumed for classes with large
         array members
!      * [170]8287: GCC 3.2: Destructor called for non-constructed local
         object
!      * [171]8347: empty vector range used in string construction causes
         core dump
!      * [172]8348: fail() flag is set in istringstream when eof() flag is
         set
!      * [173]8391: regression: infinite loop in cp/decl2.c(finish_file)
  
      C and optimizer bugs
  
!      * [174]6627: -fno-align-functions doesn't seem to disable function
         alignment
!      * [175]6631: life_analysis misoptimizes code to initialize fields of
         a structure
!      * [176]7102: unsigned char division results in floating exception
!      * [177]7120: Run once loop should *always* be unrolled
         (pessimization)
!      * [178]7209: Bug involving array referencing and ?: operator
!      * [179]7515: invalid inlining of global function with -O3
!      * [180]7814: incorrect scheduling for glibc-2.2.92 strcpy test
!      * [181]8467: bug in sibling call optimization
  
      Preprocessor bugs
  
!      * [182]4890: incorrect line markers from the traditional preprocessor
!      * [183]7357: -M option omits system headers files (making it the same
         as -MM)
!      * [184]7358: Changes to Sun's make Dependencies
!      * [185]7602: C++ header files found in CPLUS_INCLUDE_PATH treated as
         C headers
!      * [186]7862: Interrupting GCC -MD removes .d file but not .o
!      * [187]8190: Failed compilation deletes -MD dependency file
!      * [188]8524: _Pragma within macro is improperly expanded
  
      x86 specific (Intel/AMD)
  
!      * [189]5351: (i686-only) function pass-by-value structure copy
!        corrupts stack ([190]7591 is a duplicate)
!      * [191]6845, [192]7034, [193]7124, [194]7174: ICE's with
         -march=pentium3/pentium2/athlon (these are all the same underlying
         bug, in MMX register use)
!      * [195]7134, [196]7375, [197]7390: ICE with -march=athlon (maybe same
         as above?)
!      * [198]6890: xmmintrin.h, _MM_TRANSPOSE4_PS is broken
!      * [199]6981: wrong code in 64-bit manipulation on x86
!      * [200]7242: GCC -mcpu=pentium[23] doesn't define __tune_pentiumpro__
         macro
!      * [201]7396: ix86: cmpgt_ss, cmpge_ss, cmpngt_ss, and cmpnge_ss SSE
         intrinsics are broken
!      * [202]7630: GCC 3.2 breaks on Mozilla 1.0's JS sources with
         -march=pentium4
!      * [203]7693: Typo in i386 mmintrin.h header
!      * [204]7723: ICE - Pentium3 sse - GCC 3.2
!      * [205]7951: ICE on -march=pentium4 -O2 -mfpmath=sse
!      * [206]8146: (i686 only) gcc 3.2 miscompiles gcc 2.95.3
  
      PowerPC specific
  
!      * [207]5967: GCC bug when profiling nested functions on powerpc
!      * [208]6984: wrong code generated with -O2, -O3, -Os for do-while
         loop on PowerPC
!      * [209]7114: PowerPC: ICE building strcoll.op from glibc-2.2.5
!      * [210]7130: miscompiled code for GCC-3.1 on
         powerpc-unknown-linux-gnu with -funroll-all-loops
!      * [211]7133: PowerPC ICE: unrecognizable insn
!      * [212]7380: ICE in extract_insn, at recog.c:2148
!      * [213]8252: ICE on Altivec code with optimization turned on
!      * [214]8451: Altivec ICE in GCC 3.2
  
      HP/PA specific
  
!      * [215]7250: __ashrdi3 returns wrong value on 32 bit hppa
  
      SPARC specific
  
!      * [216]6668: when using --disable-multilib, libgcc_s.so is installed
         in the wrong place on sparc-solaris
!      * [217]7151: ICE when compiling for UltraSPARC
!      * [218]7335: SPARC: ICE in verify_wide_reg (flow.c:557) with long
         double and -O1
!      * [219]7842: [REGRESSION] SPARC code gen bug
  
      ARM specific
  
!      * [220]7856: [arm] invalid offset in constant pool reference
!      * [221]7967: optimization produces wrong code (ARM)
  
      Alpha specific
  
!      * [222]7374: __builtin_fabsl broken on alpha
  
      IBM s390 specific
  
!      * [223]7370: ICE in fixup_var_refs_1 on s390x
!      * [224]7409: loop optimization bug on s390x-linux-gnu
!      * [225]8232: s390x: ICE when using bcmp with int length argument
  
      SCO specific
  
!      * [226]7623: SCO OpenServer build fails with machmode.def: undefined
         symbol: BITS_PER_UNIT
  
      m68k/Coldfire specific
  
!      * [227]8314: crtbegin, crtend need to be multilib'ed for this
         platform
  
      Documentation
  
!      * [228]761: Document some undocumented options
!      * [229]5610: Fix documentation about invoking SSE instructions
         (-mfpmath=sse)
!      * [230]7484: List -Wmissing-declarations as C-only option
!      * [231]7531: -mcmodel not documented for x86-64
!      * [232]8120: Update documentation of bad use of ##
       __________________________________________________________________
  
! GCC 3.2
  
     3.2 is a small bug fix release, but there is a change to the
     application binary interface (ABI), hence the change to the second part
--- 21707,21889 ----
  
      Internal Compiler Errors (multi-platform)
  
!      * [132]2521: (c++) ICE in build_ptrmemfunc, in cp/typeck.c
!      * [133]5661: (c++) ICE instantiating template on array of unknown
         size (bad code)
!      * [134]6419: (c++) ICE in make_decl_rtl for "longest" attribute on
         64-bit platforms
!      * [135]6994: (c++) ICE in find_function_data
!      * [136]7150: preprocessor: GCC -dM -E gives an ICE
!      * [137]7160: ICE when optimizing branches without a return value
!      * [138]7228: (c++) ICE when using member template and template
         function
!      * [139]7266: (c++) ICE with -pedantic on missing typename
!      * [140]7353: ICE from use of "Naming Types" extension, see above
!      * [141]7411: ICE in instantiate_virtual_regs_1, in function.c
!      * [142]7478: (c++) ICE on static_cast inside template
!      * [143]7526: preprocessor core dump when _Pragma implies #pragma
         dependency
!      * [144]7721: (c++) ICE on simple (but incorrect) template ([145]7803
         is a duplicate)
!      * [146]7754: (c++) ICE on union with template parameter
!      * [147]7788: (c++) redeclaring a definition as an incomplete class
         causes ICE
!      * [148]8031: (c++) ICE in comptypes, in cp/typeck.c
!      * [149]8055: preprocessor dies with SIG11 when building FreeBSD
         kernel
!      * [150]8067: (c++) ICE due to mishandling of __FUNCTION__ and related
         variables
!      * [151]8134: (c++) ICE in force_store_init_value on legal code
!      * [152]8149: (c++) ICE on incomplete type
!      * [153]8160: (c++) ICE in build_modify_expr, in cp/typeck.c: array
         initialization
  
      C++ (compiler and library) bugs
  
!      * [154]5607: No pointer adjustment in covariant return types
!      * [155]6579: Infinite loop with statement expressions in member
         initialization
!      * [156]6803: Default copy constructor bug in GCC 3.1
!      * [157]7176: g++ confused by friend and static member with same name
!      * [158]7188: Segfault with template class and recursive (incorrect)
         initializer list
!      * [159]7306: Regression: GCC 3.x fails to compile code with virtual
         inheritance if a method has a variable number of arguments
!      * [160]7461: ctype<char>::classic_table() returns offset array on
         Cygwin
!      * [161]7524: f(const float arg[3]) fails
!      * [162]7584: Erroneous ambiguous base error on using declaration
!      * [163]7676: Member template overloading problem
!      * [164]7679: infinite loop when a right parenthesis is missing
!      * [165]7811: default locale not taken from environment
!      * [166]7961: compare( char *) implemented incorrectly in
         basic_string<>
!      * [167]8071: basic_ostream::operator<<(streambuf*) loops forever if
!        streambuf::underflow() leaves gptr() NULL (dups: [168]8127,
!        [169]6745)
!      * [170]8096: deque::at() throws std::range_error instead of
         std::out_of_range
!      * [171]8127: cout << cin.rdbuf() infinite loop
!      * [172]8218: Excessively large memory consumed for classes with large
         array members
!      * [173]8287: GCC 3.2: Destructor called for non-constructed local
         object
!      * [174]8347: empty vector range used in string construction causes
         core dump
!      * [175]8348: fail() flag is set in istringstream when eof() flag is
         set
!      * [176]8391: regression: infinite loop in cp/decl2.c(finish_file)
  
      C and optimizer bugs
  
!      * [177]6627: -fno-align-functions doesn't seem to disable function
         alignment
!      * [178]6631: life_analysis misoptimizes code to initialize fields of
         a structure
!      * [179]7102: unsigned char division results in floating exception
!      * [180]7120: Run once loop should *always* be unrolled
         (pessimization)
!      * [181]7209: Bug involving array referencing and ?: operator
!      * [182]7515: invalid inlining of global function with -O3
!      * [183]7814: incorrect scheduling for glibc-2.2.92 strcpy test
!      * [184]8467: bug in sibling call optimization
  
      Preprocessor bugs
  
!      * [185]4890: incorrect line markers from the traditional preprocessor
!      * [186]7357: -M option omits system headers files (making it the same
         as -MM)
!      * [187]7358: Changes to Sun's make Dependencies
!      * [188]7602: C++ header files found in CPLUS_INCLUDE_PATH treated as
         C headers
!      * [189]7862: Interrupting GCC -MD removes .d file but not .o
!      * [190]8190: Failed compilation deletes -MD dependency file
!      * [191]8524: _Pragma within macro is improperly expanded
  
      x86 specific (Intel/AMD)
  
!      * [192]5351: (i686-only) function pass-by-value structure copy
!        corrupts stack ([193]7591 is a duplicate)
!      * [194]6845, [195]7034, [196]7124, [197]7174: ICE's with
         -march=pentium3/pentium2/athlon (these are all the same underlying
         bug, in MMX register use)
!      * [198]7134, [199]7375, [200]7390: ICE with -march=athlon (maybe same
         as above?)
!      * [201]6890: xmmintrin.h, _MM_TRANSPOSE4_PS is broken
!      * [202]6981: wrong code in 64-bit manipulation on x86
!      * [203]7242: GCC -mcpu=pentium[23] doesn't define __tune_pentiumpro__
         macro
!      * [204]7396: ix86: cmpgt_ss, cmpge_ss, cmpngt_ss, and cmpnge_ss SSE
         intrinsics are broken
!      * [205]7630: GCC 3.2 breaks on Mozilla 1.0's JS sources with
         -march=pentium4
!      * [206]7693: Typo in i386 mmintrin.h header
!      * [207]7723: ICE - Pentium3 sse - GCC 3.2
!      * [208]7951: ICE on -march=pentium4 -O2 -mfpmath=sse
!      * [209]8146: (i686 only) gcc 3.2 miscompiles gcc 2.95.3
  
      PowerPC specific
  
!      * [210]5967: GCC bug when profiling nested functions on powerpc
!      * [211]6984: wrong code generated with -O2, -O3, -Os for do-while
         loop on PowerPC
!      * [212]7114: PowerPC: ICE building strcoll.op from glibc-2.2.5
!      * [213]7130: miscompiled code for GCC-3.1 on
         powerpc-unknown-linux-gnu with -funroll-all-loops
!      * [214]7133: PowerPC ICE: unrecognizable insn
!      * [215]7380: ICE in extract_insn, at recog.c:2148
!      * [216]8252: ICE on Altivec code with optimization turned on
!      * [217]8451: Altivec ICE in GCC 3.2
  
      HP/PA specific
  
!      * [218]7250: __ashrdi3 returns wrong value on 32 bit hppa
  
      SPARC specific
  
!      * [219]6668: when using --disable-multilib, libgcc_s.so is installed
         in the wrong place on sparc-solaris
!      * [220]7151: ICE when compiling for UltraSPARC
!      * [221]7335: SPARC: ICE in verify_wide_reg (flow.c:557) with long
         double and -O1
!      * [222]7842: [REGRESSION] SPARC code gen bug
  
      ARM specific
  
!      * [223]7856: [arm] invalid offset in constant pool reference
!      * [224]7967: optimization produces wrong code (ARM)
  
      Alpha specific
  
!      * [225]7374: __builtin_fabsl broken on alpha
  
      IBM s390 specific
  
!      * [226]7370: ICE in fixup_var_refs_1 on s390x
!      * [227]7409: loop optimization bug on s390x-linux-gnu
!      * [228]8232: s390x: ICE when using bcmp with int length argument
  
      SCO specific
  
!      * [229]7623: SCO OpenServer build fails with machmode.def: undefined
         symbol: BITS_PER_UNIT
  
      m68k/Coldfire specific
  
!      * [230]8314: crtbegin, crtend need to be multilib'ed for this
         platform
  
      Documentation
  
!      * [231]761: Document some undocumented options
!      * [232]5610: Fix documentation about invoking SSE instructions
         (-mfpmath=sse)
!      * [233]7484: List -Wmissing-declarations as C-only option
!      * [234]7531: -mcmodel not documented for x86-64
!      * [235]8120: Update documentation of bad use of ##
       __________________________________________________________________
  
! [236]GCC 3.2
  
     3.2 is a small bug fix release, but there is a change to the
     application binary interface (ABI), hence the change to the second part
*************** GCC 3.2
*** 21387,21681 ****
  
      C++
  
!      * [233]7320: g++ 3.2 relocation problem
!      * [234]7470: vtable: virtual function pointers not in declaration
         order
  
      libstdc++
  
!      * [235]6410: Trouble with non-ASCII monetary symbols and wchar_t
!      * [236]6503, [237]6642, [238]7186: Problems with comparing or
         subtracting various types of const and non-const iterators
!      * [239]7216: ambiguity with basic_iostream::traits_type
!      * [240]7220: problem with basic_istream::ignore(0,delimiter)
!      * [241]7222: locale::operator==() doesn't work on std::locale("")
!      * [242]7286: placement operator delete issue
!      * [243]7442: cxxabi.h does not match the C++ ABI
!      * [244]7445: poor performance of std::locale::classic() in
         multi-threaded applications
  
      x86-64 specific
  
!      * [245]7291: off-by-one in generated inline bzero code for x86-64
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [246]GCC manuals. If that fails, the
!     [247]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [248]gcc@gcc.gnu.org. All of [249]our lists have public
      archives.
  
!    Copyright (C) [250]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [251]maintained by the GCC team. Last modified
!    2022-10-26.
  
  References
  
     1. https://gcc.gnu.org/gcc-3.2/changes.html#3.2.3
     2. https://gcc.gnu.org/gcc-3.1/changes.html
     3. https://gcc.gnu.org/gcc-3.2/c++-abi.html
!    4. https://gcc.gnu.org/PR3782
!    5. https://gcc.gnu.org/PR6440
!    6. https://gcc.gnu.org/PR7050
!    7. https://gcc.gnu.org/PR7741
!    8. https://gcc.gnu.org/PR7982
!    9. https://gcc.gnu.org/PR8068
!   10. https://gcc.gnu.org/PR8178
!   11. https://gcc.gnu.org/PR8396
!   12. https://gcc.gnu.org/PR8674
!   13. https://gcc.gnu.org/PR9768
!   14. https://gcc.gnu.org/PR9798
!   15. https://gcc.gnu.org/PR9799
!   16. https://gcc.gnu.org/PR9928
!   17. https://gcc.gnu.org/PR10114
!   18. https://gcc.gnu.org/PR10352
!   19. https://gcc.gnu.org/PR10336
!   20. https://gcc.gnu.org/PR8224
!   21. https://gcc.gnu.org/PR8613
!   22. https://gcc.gnu.org/PR8828
!   23. https://gcc.gnu.org/PR9226
!   24. https://gcc.gnu.org/PR9853
!   25. https://gcc.gnu.org/PR9797
!   26. https://gcc.gnu.org/PR9967
!   27. https://gcc.gnu.org/PR10116
!   28. https://gcc.gnu.org/PR10171
!   29. https://gcc.gnu.org/PR10175
!   30. https://gcc.gnu.org/PR8316
!   31. https://gcc.gnu.org/PR9169
!   32. https://gcc.gnu.org/PR9420
!   33. https://gcc.gnu.org/PR9459
!   34. https://gcc.gnu.org/PR9507
!   35. https://gcc.gnu.org/PR9538
!   36. https://gcc.gnu.org/PR9602
!   37. https://gcc.gnu.org/PR9993
!   38. https://gcc.gnu.org/PR10167
!   39. https://gcc.gnu.org/PR9652
!   40. https://gcc.gnu.org/PR10144
!   41. https://gcc.gnu.org/PR8746
!   42. https://gcc.gnu.org/PR9888
!   43. https://gcc.gnu.org/PR9638
!   44. https://gcc.gnu.org/PR9954
!   45. https://gcc.gnu.org/PR7784
!   46. https://gcc.gnu.org/PR7796
!   47. https://gcc.gnu.org/PR8281
!   48. https://gcc.gnu.org/PR8366
!   49. https://gcc.gnu.org/PR8726
!   50. https://gcc.gnu.org/PR9414
!   51. https://gcc.gnu.org/PR10067
!   52. https://gcc.gnu.org/PR7248
!   53. https://gcc.gnu.org/PR8343
!   54. https://gcc.gnu.org/PR9732
!   55. https://gcc.gnu.org/PR10073
!   56. https://gcc.gnu.org/PR7702
!   57. https://gcc.gnu.org/PR9671
!   58. https://gcc.gnu.org/PR8694
!   59. https://gcc.gnu.org/PR9953
!   60. https://gcc.gnu.org/PR10271
!   61. https://gcc.gnu.org/PR6362
!   62. https://gcc.gnu.org/PR10377
!   63. https://gcc.gnu.org/PR6955
!   64. https://gcc.gnu.org/PR5919
!   65. https://gcc.gnu.org/PR7129
!   66. https://gcc.gnu.org/PR7507
!   67. https://gcc.gnu.org/PR7622
!   68. https://gcc.gnu.org/PR7681
!   69. https://gcc.gnu.org/PR9528
!   70. https://gcc.gnu.org/PR8031
!   71. https://gcc.gnu.org/PR8275
!   72. https://gcc.gnu.org/PR8332
!   73. https://gcc.gnu.org/PR8372
!   74. https://gcc.gnu.org/PR8439
!   75. https://gcc.gnu.org/PR8442
!   76. https://gcc.gnu.org/PR8518
!   77. https://gcc.gnu.org/PR8615
!   78. https://gcc.gnu.org/PR8663
!   79. https://gcc.gnu.org/PR8799
!   80. https://gcc.gnu.org/PR9328
!   81. https://gcc.gnu.org/PR9465
!   82. https://gcc.gnu.org/PR47
!   83. https://gcc.gnu.org/PR6745
!   84. https://gcc.gnu.org/PR8214
!   85. https://gcc.gnu.org/PR8493
!   86. https://gcc.gnu.org/PR8332
!   87. https://gcc.gnu.org/PR8503
!   88. https://gcc.gnu.org/PR8727
!   89. https://gcc.gnu.org/PR7445
!   90. https://gcc.gnu.org/PR8230
!   91. https://gcc.gnu.org/PR8399
!   92. https://gcc.gnu.org/PR8662
!   93. https://gcc.gnu.org/PR8707
!   94. https://gcc.gnu.org/PR8708
!   95. https://gcc.gnu.org/PR8790
!   96. https://gcc.gnu.org/PR8887
!   97. https://gcc.gnu.org/PR9076
!   98. https://gcc.gnu.org/PR9151
!   99. https://gcc.gnu.org/PR9168
!  100. https://gcc.gnu.org/PR9269
!  101. https://gcc.gnu.org/PR9322
!  102. https://gcc.gnu.org/PR9433
!  103. https://gcc.gnu.org/PR8032
!  104. https://gcc.gnu.org/PR8639
!  105. https://gcc.gnu.org/PR8794
!  106. https://gcc.gnu.org/PR8832
!  107. https://gcc.gnu.org/PR8988
!  108. https://gcc.gnu.org/PR9492
!  109. https://gcc.gnu.org/PR9267
!  110. https://gcc.gnu.org/PR8344
!  111. https://gcc.gnu.org/PR8524
!  112. https://gcc.gnu.org/PR8880
!  113. https://gcc.gnu.org/PR9090
!  114. https://gcc.gnu.org/PR8588
!  115. https://gcc.gnu.org/PR8599
!  116. https://gcc.gnu.org/PR9506
!  117. https://gcc.gnu.org/PR9484
!  118. https://gcc.gnu.org/PR9292
!  119. https://gcc.gnu.org/PR9293
!  120. https://gcc.gnu.org/PR9295
!  121. https://gcc.gnu.org/PR9296
!  122. https://gcc.gnu.org/PR9316
!  123. https://gcc.gnu.org/PR9493
!  124. https://gcc.gnu.org/PR7341
!  125. https://gcc.gnu.org/PR8947
!  126. https://gcc.gnu.org/PR7448
!  127. https://gcc.gnu.org/PR8882
!  128. https://gcc.gnu.org/PR7445
!  129. https://gcc.gnu.org/PR2521
!  130. https://gcc.gnu.org/PR5661
!  131. https://gcc.gnu.org/PR6419
!  132. https://gcc.gnu.org/PR6994
!  133. https://gcc.gnu.org/PR7150
!  134. https://gcc.gnu.org/PR7160
!  135. https://gcc.gnu.org/PR7228
!  136. https://gcc.gnu.org/PR7266
!  137. https://gcc.gnu.org/PR7353
!  138. https://gcc.gnu.org/PR7411
!  139. https://gcc.gnu.org/PR7478
!  140. https://gcc.gnu.org/PR7526
!  141. https://gcc.gnu.org/PR7721
!  142. https://gcc.gnu.org/PR7803
!  143. https://gcc.gnu.org/PR7754
!  144. https://gcc.gnu.org/PR7788
!  145. https://gcc.gnu.org/PR8031
!  146. https://gcc.gnu.org/PR8055
!  147. https://gcc.gnu.org/PR8067
!  148. https://gcc.gnu.org/PR8134
!  149. https://gcc.gnu.org/PR8149
!  150. https://gcc.gnu.org/PR8160
!  151. https://gcc.gnu.org/PR5607
!  152. https://gcc.gnu.org/PR6579
!  153. https://gcc.gnu.org/PR6803
!  154. https://gcc.gnu.org/PR7176
!  155. https://gcc.gnu.org/PR7188
!  156. https://gcc.gnu.org/PR7306
!  157. https://gcc.gnu.org/PR7461
!  158. https://gcc.gnu.org/PR7524
!  159. https://gcc.gnu.org/PR7584
!  160. https://gcc.gnu.org/PR7676
!  161. https://gcc.gnu.org/PR7679
!  162. https://gcc.gnu.org/PR7811
!  163. https://gcc.gnu.org/PR7961
!  164. https://gcc.gnu.org/PR8071
!  165. https://gcc.gnu.org/PR8127
!  166. https://gcc.gnu.org/PR6745
!  167. https://gcc.gnu.org/PR8096
   168. https://gcc.gnu.org/PR8127
!  169. https://gcc.gnu.org/PR8218
!  170. https://gcc.gnu.org/PR8287
!  171. https://gcc.gnu.org/PR8347
!  172. https://gcc.gnu.org/PR8348
!  173. https://gcc.gnu.org/PR8391
!  174. https://gcc.gnu.org/PR6627
!  175. https://gcc.gnu.org/PR6631
!  176. https://gcc.gnu.org/PR7102
!  177. https://gcc.gnu.org/PR7120
!  178. https://gcc.gnu.org/PR7209
!  179. https://gcc.gnu.org/PR7515
!  180. https://gcc.gnu.org/PR7814
!  181. https://gcc.gnu.org/PR8467
!  182. https://gcc.gnu.org/PR4890
!  183. https://gcc.gnu.org/PR7357
!  184. https://gcc.gnu.org/PR7358
!  185. https://gcc.gnu.org/PR7602
!  186. https://gcc.gnu.org/PR7862
!  187. https://gcc.gnu.org/PR8190
!  188. https://gcc.gnu.org/PR8524
!  189. https://gcc.gnu.org/PR5351
!  190. https://gcc.gnu.org/PR7591
!  191. https://gcc.gnu.org/PR6845
!  192. https://gcc.gnu.org/PR7034
!  193. https://gcc.gnu.org/PR7124
!  194. https://gcc.gnu.org/PR7174
!  195. https://gcc.gnu.org/PR7134
!  196. https://gcc.gnu.org/PR7375
!  197. https://gcc.gnu.org/PR7390
!  198. https://gcc.gnu.org/PR6890
!  199. https://gcc.gnu.org/PR6981
!  200. https://gcc.gnu.org/PR7242
!  201. https://gcc.gnu.org/PR7396
!  202. https://gcc.gnu.org/PR7630
!  203. https://gcc.gnu.org/PR7693
!  204. https://gcc.gnu.org/PR7723
!  205. https://gcc.gnu.org/PR7951
!  206. https://gcc.gnu.org/PR8146
!  207. https://gcc.gnu.org/PR5967
!  208. https://gcc.gnu.org/PR6984
!  209. https://gcc.gnu.org/PR7114
!  210. https://gcc.gnu.org/PR7130
!  211. https://gcc.gnu.org/PR7133
!  212. https://gcc.gnu.org/PR7380
!  213. https://gcc.gnu.org/PR8252
!  214. https://gcc.gnu.org/PR8451
!  215. https://gcc.gnu.org/PR7250
!  216. https://gcc.gnu.org/PR6668
!  217. https://gcc.gnu.org/PR7151
!  218. https://gcc.gnu.org/PR7335
!  219. https://gcc.gnu.org/PR7842
!  220. https://gcc.gnu.org/PR7856
!  221. https://gcc.gnu.org/PR7967
!  222. https://gcc.gnu.org/PR7374
!  223. https://gcc.gnu.org/PR7370
!  224. https://gcc.gnu.org/PR7409
!  225. https://gcc.gnu.org/PR8232
!  226. https://gcc.gnu.org/PR7623
!  227. https://gcc.gnu.org/PR8314
!  228. https://gcc.gnu.org/PR761
!  229. https://gcc.gnu.org/PR5610
!  230. https://gcc.gnu.org/PR7484
!  231. https://gcc.gnu.org/PR7531
!  232. https://gcc.gnu.org/PR8120
!  233. https://gcc.gnu.org/PR7320
!  234. https://gcc.gnu.org/PR7470
!  235. https://gcc.gnu.org/PR6410
!  236. https://gcc.gnu.org/PR6503
!  237. https://gcc.gnu.org/PR6642
!  238. https://gcc.gnu.org/PR7186
!  239. https://gcc.gnu.org/PR7216
!  240. https://gcc.gnu.org/PR7220
!  241. https://gcc.gnu.org/PR7222
!  242. https://gcc.gnu.org/PR7286
!  243. https://gcc.gnu.org/PR7442
!  244. https://gcc.gnu.org/PR7445
!  245. https://gcc.gnu.org/PR7291
!  246. https://gcc.gnu.org/onlinedocs/
!  247. mailto:gcc-help@gcc.gnu.org
!  248. mailto:gcc@gcc.gnu.org
!  249. https://gcc.gnu.org/lists.html
!  250. https://www.fsf.org/
!  251. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-3.1/index.html
                                      GCC 3.1
--- 21897,22195 ----
  
      C++
  
!      * [237]7320: g++ 3.2 relocation problem
!      * [238]7470: vtable: virtual function pointers not in declaration
         order
  
      libstdc++
  
!      * [239]6410: Trouble with non-ASCII monetary symbols and wchar_t
!      * [240]6503, [241]6642, [242]7186: Problems with comparing or
         subtracting various types of const and non-const iterators
!      * [243]7216: ambiguity with basic_iostream::traits_type
!      * [244]7220: problem with basic_istream::ignore(0,delimiter)
!      * [245]7222: locale::operator==() doesn't work on std::locale("")
!      * [246]7286: placement operator delete issue
!      * [247]7442: cxxabi.h does not match the C++ ABI
!      * [248]7445: poor performance of std::locale::classic() in
         multi-threaded applications
  
      x86-64 specific
  
!      * [249]7291: off-by-one in generated inline bzero code for x86-64
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [250]GCC manuals. If that fails, the
!     [251]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [252]gcc@gcc.gnu.org. All of [253]our lists have public
      archives.
  
!    Copyright (C) [254]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [255]maintained by the GCC team. Last modified
!    2025-04-08.
  
  References
  
     1. https://gcc.gnu.org/gcc-3.2/changes.html#3.2.3
     2. https://gcc.gnu.org/gcc-3.1/changes.html
     3. https://gcc.gnu.org/gcc-3.2/c++-abi.html
!    4. https://gcc.gnu.org/gcc-3.2/changes.html#GCC3.2.3
!    5. https://gcc.gnu.org/PR3782
!    6. https://gcc.gnu.org/PR6440
!    7. https://gcc.gnu.org/PR7050
!    8. https://gcc.gnu.org/PR7741
!    9. https://gcc.gnu.org/PR7982
!   10. https://gcc.gnu.org/PR8068
!   11. https://gcc.gnu.org/PR8178
!   12. https://gcc.gnu.org/PR8396
!   13. https://gcc.gnu.org/PR8674
!   14. https://gcc.gnu.org/PR9768
!   15. https://gcc.gnu.org/PR9798
!   16. https://gcc.gnu.org/PR9799
!   17. https://gcc.gnu.org/PR9928
!   18. https://gcc.gnu.org/PR10114
!   19. https://gcc.gnu.org/PR10352
!   20. https://gcc.gnu.org/PR10336
!   21. https://gcc.gnu.org/PR8224
!   22. https://gcc.gnu.org/PR8613
!   23. https://gcc.gnu.org/PR8828
!   24. https://gcc.gnu.org/PR9226
!   25. https://gcc.gnu.org/PR9853
!   26. https://gcc.gnu.org/PR9797
!   27. https://gcc.gnu.org/PR9967
!   28. https://gcc.gnu.org/PR10116
!   29. https://gcc.gnu.org/PR10171
!   30. https://gcc.gnu.org/PR10175
!   31. https://gcc.gnu.org/PR8316
!   32. https://gcc.gnu.org/PR9169
!   33. https://gcc.gnu.org/PR9420
!   34. https://gcc.gnu.org/PR9459
!   35. https://gcc.gnu.org/PR9507
!   36. https://gcc.gnu.org/PR9538
!   37. https://gcc.gnu.org/PR9602
!   38. https://gcc.gnu.org/PR9993
!   39. https://gcc.gnu.org/PR10167
!   40. https://gcc.gnu.org/PR9652
!   41. https://gcc.gnu.org/PR10144
!   42. https://gcc.gnu.org/PR8746
!   43. https://gcc.gnu.org/PR9888
!   44. https://gcc.gnu.org/PR9638
!   45. https://gcc.gnu.org/PR9954
!   46. https://gcc.gnu.org/PR7784
!   47. https://gcc.gnu.org/PR7796
!   48. https://gcc.gnu.org/PR8281
!   49. https://gcc.gnu.org/PR8366
!   50. https://gcc.gnu.org/PR8726
!   51. https://gcc.gnu.org/PR9414
!   52. https://gcc.gnu.org/PR10067
!   53. https://gcc.gnu.org/PR7248
!   54. https://gcc.gnu.org/PR8343
!   55. https://gcc.gnu.org/PR9732
!   56. https://gcc.gnu.org/PR10073
!   57. https://gcc.gnu.org/PR7702
!   58. https://gcc.gnu.org/PR9671
!   59. https://gcc.gnu.org/PR8694
!   60. https://gcc.gnu.org/PR9953
!   61. https://gcc.gnu.org/PR10271
!   62. https://gcc.gnu.org/PR6362
!   63. https://gcc.gnu.org/PR10377
!   64. https://gcc.gnu.org/PR6955
!   65. https://gcc.gnu.org/gcc-3.2/changes.html#GCC3.2.2
!   66. https://gcc.gnu.org/PR5919
!   67. https://gcc.gnu.org/PR7129
!   68. https://gcc.gnu.org/PR7507
!   69. https://gcc.gnu.org/PR7622
!   70. https://gcc.gnu.org/PR7681
!   71. https://gcc.gnu.org/PR9528
!   72. https://gcc.gnu.org/PR8031
!   73. https://gcc.gnu.org/PR8275
!   74. https://gcc.gnu.org/PR8332
!   75. https://gcc.gnu.org/PR8372
!   76. https://gcc.gnu.org/PR8439
!   77. https://gcc.gnu.org/PR8442
!   78. https://gcc.gnu.org/PR8518
!   79. https://gcc.gnu.org/PR8615
!   80. https://gcc.gnu.org/PR8663
!   81. https://gcc.gnu.org/PR8799
!   82. https://gcc.gnu.org/PR9328
!   83. https://gcc.gnu.org/PR9465
!   84. https://gcc.gnu.org/PR47
!   85. https://gcc.gnu.org/PR6745
!   86. https://gcc.gnu.org/PR8214
!   87. https://gcc.gnu.org/PR8493
!   88. https://gcc.gnu.org/PR8332
!   89. https://gcc.gnu.org/PR8503
!   90. https://gcc.gnu.org/PR8727
!   91. https://gcc.gnu.org/PR7445
!   92. https://gcc.gnu.org/PR8230
!   93. https://gcc.gnu.org/PR8399
!   94. https://gcc.gnu.org/PR8662
!   95. https://gcc.gnu.org/PR8707
!   96. https://gcc.gnu.org/PR8708
!   97. https://gcc.gnu.org/PR8790
!   98. https://gcc.gnu.org/PR8887
!   99. https://gcc.gnu.org/PR9076
!  100. https://gcc.gnu.org/PR9151
!  101. https://gcc.gnu.org/PR9168
!  102. https://gcc.gnu.org/PR9269
!  103. https://gcc.gnu.org/PR9322
!  104. https://gcc.gnu.org/PR9433
!  105. https://gcc.gnu.org/PR8032
!  106. https://gcc.gnu.org/PR8639
!  107. https://gcc.gnu.org/PR8794
!  108. https://gcc.gnu.org/PR8832
!  109. https://gcc.gnu.org/PR8988
!  110. https://gcc.gnu.org/PR9492
!  111. https://gcc.gnu.org/PR9267
!  112. https://gcc.gnu.org/PR8344
!  113. https://gcc.gnu.org/PR8524
!  114. https://gcc.gnu.org/PR8880
!  115. https://gcc.gnu.org/PR9090
!  116. https://gcc.gnu.org/PR8588
!  117. https://gcc.gnu.org/PR8599
!  118. https://gcc.gnu.org/PR9506
!  119. https://gcc.gnu.org/PR9484
!  120. https://gcc.gnu.org/PR9292
!  121. https://gcc.gnu.org/PR9293
!  122. https://gcc.gnu.org/PR9295
!  123. https://gcc.gnu.org/PR9296
!  124. https://gcc.gnu.org/PR9316
!  125. https://gcc.gnu.org/PR9493
!  126. https://gcc.gnu.org/PR7341
!  127. https://gcc.gnu.org/PR8947
!  128. https://gcc.gnu.org/PR7448
!  129. https://gcc.gnu.org/PR8882
!  130. https://gcc.gnu.org/gcc-3.2/changes.html#GCC3.2.1
!  131. https://gcc.gnu.org/PR7445
!  132. https://gcc.gnu.org/PR2521
!  133. https://gcc.gnu.org/PR5661
!  134. https://gcc.gnu.org/PR6419
!  135. https://gcc.gnu.org/PR6994
!  136. https://gcc.gnu.org/PR7150
!  137. https://gcc.gnu.org/PR7160
!  138. https://gcc.gnu.org/PR7228
!  139. https://gcc.gnu.org/PR7266
!  140. https://gcc.gnu.org/PR7353
!  141. https://gcc.gnu.org/PR7411
!  142. https://gcc.gnu.org/PR7478
!  143. https://gcc.gnu.org/PR7526
!  144. https://gcc.gnu.org/PR7721
!  145. https://gcc.gnu.org/PR7803
!  146. https://gcc.gnu.org/PR7754
!  147. https://gcc.gnu.org/PR7788
!  148. https://gcc.gnu.org/PR8031
!  149. https://gcc.gnu.org/PR8055
!  150. https://gcc.gnu.org/PR8067
!  151. https://gcc.gnu.org/PR8134
!  152. https://gcc.gnu.org/PR8149
!  153. https://gcc.gnu.org/PR8160
!  154. https://gcc.gnu.org/PR5607
!  155. https://gcc.gnu.org/PR6579
!  156. https://gcc.gnu.org/PR6803
!  157. https://gcc.gnu.org/PR7176
!  158. https://gcc.gnu.org/PR7188
!  159. https://gcc.gnu.org/PR7306
!  160. https://gcc.gnu.org/PR7461
!  161. https://gcc.gnu.org/PR7524
!  162. https://gcc.gnu.org/PR7584
!  163. https://gcc.gnu.org/PR7676
!  164. https://gcc.gnu.org/PR7679
!  165. https://gcc.gnu.org/PR7811
!  166. https://gcc.gnu.org/PR7961
!  167. https://gcc.gnu.org/PR8071
   168. https://gcc.gnu.org/PR8127
!  169. https://gcc.gnu.org/PR6745
!  170. https://gcc.gnu.org/PR8096
!  171. https://gcc.gnu.org/PR8127
!  172. https://gcc.gnu.org/PR8218
!  173. https://gcc.gnu.org/PR8287
!  174. https://gcc.gnu.org/PR8347
!  175. https://gcc.gnu.org/PR8348
!  176. https://gcc.gnu.org/PR8391
!  177. https://gcc.gnu.org/PR6627
!  178. https://gcc.gnu.org/PR6631
!  179. https://gcc.gnu.org/PR7102
!  180. https://gcc.gnu.org/PR7120
!  181. https://gcc.gnu.org/PR7209
!  182. https://gcc.gnu.org/PR7515
!  183. https://gcc.gnu.org/PR7814
!  184. https://gcc.gnu.org/PR8467
!  185. https://gcc.gnu.org/PR4890
!  186. https://gcc.gnu.org/PR7357
!  187. https://gcc.gnu.org/PR7358
!  188. https://gcc.gnu.org/PR7602
!  189. https://gcc.gnu.org/PR7862
!  190. https://gcc.gnu.org/PR8190
!  191. https://gcc.gnu.org/PR8524
!  192. https://gcc.gnu.org/PR5351
!  193. https://gcc.gnu.org/PR7591
!  194. https://gcc.gnu.org/PR6845
!  195. https://gcc.gnu.org/PR7034
!  196. https://gcc.gnu.org/PR7124
!  197. https://gcc.gnu.org/PR7174
!  198. https://gcc.gnu.org/PR7134
!  199. https://gcc.gnu.org/PR7375
!  200. https://gcc.gnu.org/PR7390
!  201. https://gcc.gnu.org/PR6890
!  202. https://gcc.gnu.org/PR6981
!  203. https://gcc.gnu.org/PR7242
!  204. https://gcc.gnu.org/PR7396
!  205. https://gcc.gnu.org/PR7630
!  206. https://gcc.gnu.org/PR7693
!  207. https://gcc.gnu.org/PR7723
!  208. https://gcc.gnu.org/PR7951
!  209. https://gcc.gnu.org/PR8146
!  210. https://gcc.gnu.org/PR5967
!  211. https://gcc.gnu.org/PR6984
!  212. https://gcc.gnu.org/PR7114
!  213. https://gcc.gnu.org/PR7130
!  214. https://gcc.gnu.org/PR7133
!  215. https://gcc.gnu.org/PR7380
!  216. https://gcc.gnu.org/PR8252
!  217. https://gcc.gnu.org/PR8451
!  218. https://gcc.gnu.org/PR7250
!  219. https://gcc.gnu.org/PR6668
!  220. https://gcc.gnu.org/PR7151
!  221. https://gcc.gnu.org/PR7335
!  222. https://gcc.gnu.org/PR7842
!  223. https://gcc.gnu.org/PR7856
!  224. https://gcc.gnu.org/PR7967
!  225. https://gcc.gnu.org/PR7374
!  226. https://gcc.gnu.org/PR7370
!  227. https://gcc.gnu.org/PR7409
!  228. https://gcc.gnu.org/PR8232
!  229. https://gcc.gnu.org/PR7623
!  230. https://gcc.gnu.org/PR8314
!  231. https://gcc.gnu.org/PR761
!  232. https://gcc.gnu.org/PR5610
!  233. https://gcc.gnu.org/PR7484
!  234. https://gcc.gnu.org/PR7531
!  235. https://gcc.gnu.org/PR8120
!  236. https://gcc.gnu.org/gcc-3.2/changes.html#GCC3.2
!  237. https://gcc.gnu.org/PR7320
!  238. https://gcc.gnu.org/PR7470
!  239. https://gcc.gnu.org/PR6410
!  240. https://gcc.gnu.org/PR6503
!  241. https://gcc.gnu.org/PR6642
!  242. https://gcc.gnu.org/PR7186
!  243. https://gcc.gnu.org/PR7216
!  244. https://gcc.gnu.org/PR7220
!  245. https://gcc.gnu.org/PR7222
!  246. https://gcc.gnu.org/PR7286
!  247. https://gcc.gnu.org/PR7442
!  248. https://gcc.gnu.org/PR7445
!  249. https://gcc.gnu.org/PR7291
!  250. https://gcc.gnu.org/onlinedocs/
!  251. mailto:gcc-help@gcc.gnu.org
!  252. mailto:gcc@gcc.gnu.org
!  253. https://gcc.gnu.org/lists.html
!  254. https://www.fsf.org/
!  255. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-3.1/index.html
                                      GCC 3.1
*************** http://gcc.gnu.org/gcc-3.1/index.html
*** 21684,21748 ****
  
     July 27, 2002
  
!    The [1]GNU project and the GCC developers are pleased to announce the
     release of GCC 3.1.1.
  
     The links below still apply to GCC 3.1.1.
  
     May 15, 2002
  
!    The [2]GNU project and the GCC developers are pleased to announce the
     release of GCC 3.1.
  
     GCC used to stand for the GNU C Compiler, but since the compiler
     supports several other languages aside from C, it now stands for the
     GNU Compiler Collection.
  
!    A list of [3]successful builds is updated as new information becomes
     available.
  
     The GCC developers would like to thank the numerous people that have
!    contributed [4]new features, improvements, bug fixes, and other changes
!    as well as test results to GCC. This [5]amazing group of volunteers is
     what makes GCC successful.
  
!    For additional information about GCC please refer to the [6]GCC project
!    web site or contact the [7]GCC development mailing list.
  
!    To obtain GCC please use [8]our mirror sites, or our CVS server.
       __________________________________________________________________
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [9]GCC manuals. If that fails, the
!     [10]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [11]gcc@gcc.gnu.org. All of [12]our lists have public
      archives.
  
!    Copyright (C) [13]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [14]maintained by the GCC team. Last modified
!    2022-10-26.
  
  References
  
!    1. http://www.gnu.org/
!    2. http://www.gnu.org/
!    3. https://gcc.gnu.org/gcc-3.1/buildstat.html
!    4. https://gcc.gnu.org/gcc-3.1/changes.html
!    5. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
!    6. https://gcc.gnu.org/index.html
!    7. mailto:gcc@gcc.gnu.org
!    8. https://gcc.gnu.org/mirrors.html
!    9. https://gcc.gnu.org/onlinedocs/
!   10. mailto:gcc-help@gcc.gnu.org
!   11. mailto:gcc@gcc.gnu.org
!   12. https://gcc.gnu.org/lists.html
!   13. https://www.fsf.org/
!   14. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-3.1/changes.html
                               GCC 3.1 Release Series
--- 22198,22261 ----
  
     July 27, 2002
  
!    The GNU project and the GCC developers are pleased to announce the
     release of GCC 3.1.1.
  
     The links below still apply to GCC 3.1.1.
  
     May 15, 2002
  
!    The [1]GNU project and the GCC developers are pleased to announce the
     release of GCC 3.1.
  
     GCC used to stand for the GNU C Compiler, but since the compiler
     supports several other languages aside from C, it now stands for the
     GNU Compiler Collection.
  
!    A list of [2]successful builds is updated as new information becomes
     available.
  
     The GCC developers would like to thank the numerous people that have
!    contributed [3]new features, improvements, bug fixes, and other changes
!    as well as test results to GCC. This [4]amazing group of volunteers is
     what makes GCC successful.
  
!    For additional information about GCC please refer to the [5]GCC project
!    web site or contact the [6]GCC development mailing list.
  
!    To obtain GCC please use [7]our mirror sites, or our CVS server.
       __________________________________________________________________
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [8]GCC manuals. If that fails, the
!     [9]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [10]gcc@gcc.gnu.org. All of [11]our lists have public
      archives.
  
!    Copyright (C) [12]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [13]maintained by the GCC team. Last modified
!    2024-07-04.
  
  References
  
!    1. https://www.gnu.org/
!    2. https://gcc.gnu.org/gcc-3.1/buildstat.html
!    3. https://gcc.gnu.org/gcc-3.1/changes.html
!    4. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
!    5. https://gcc.gnu.org/index.html
!    6. mailto:gcc@gcc.gnu.org
!    7. https://gcc.gnu.org/mirrors.html
!    8. https://gcc.gnu.org/onlinedocs/
!    9. mailto:gcc-help@gcc.gnu.org
!   10. mailto:gcc@gcc.gnu.org
!   11. https://gcc.gnu.org/lists.html
!   12. https://www.fsf.org/
!   13. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-3.1/changes.html
                               GCC 3.1 Release Series
*************** New Targets and Target Specific Improvem
*** 21978,21984 ****
         to stabilize for 3.2. The support is written to conform to
         Motorola's AltiVec specs. See -maltivec.
  
! Obsolete Systems
  
     Support for a number of older systems has been declared obsolete in GCC
     3.1. Unless there is activity to revive them, the next release of GCC
--- 22491,22497 ----
         to stabilize for 3.2. The support is written to conform to
         Motorola's AltiVec specs. See -maltivec.
  
! [8]Obsolete Systems
  
     Support for a number of older systems has been declared obsolete in GCC
     3.1. Unless there is activity to revive them, the next release of GCC
*************** Documentation improvements
*** 22067,22084 ****
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [8]GCC manuals. If that fails, the
!     [9]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [10]gcc@gcc.gnu.org. All of [11]our lists have public
      archives.
  
!    Copyright (C) [12]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [13]maintained by the GCC team. Last modified
!    2022-10-26.
  
  References
  
--- 22580,22597 ----
  
  
      For questions related to the use of GCC, please consult these web
!     pages and the [9]GCC manuals. If that fails, the
!     [10]gcc-help@gcc.gnu.org mailing list might help. Comments on these
      web pages and the development of GCC are welcome on our developer
!     list at [11]gcc@gcc.gnu.org. All of [12]our lists have public
      archives.
  
!    Copyright (C) [13]Free Software Foundation, Inc. Verbatim copying and
     distribution of this entire article is permitted in any medium,
     provided this notice is preserved.
  
!    These pages are [14]maintained by the GCC team. Last modified
!    2025-01-31.
  
  References
  
*************** References
*** 22089,22100 ****
     5. https://gcc.gnu.org/onlinedocs/libstdc++/faq.html
     6. https://gcc.gnu.org/onlinedocs/gcc-3.1.1/g77/News.html
     7. https://www.adacore.com/
!    8. https://gcc.gnu.org/onlinedocs/
!    9. mailto:gcc-help@gcc.gnu.org
!   10. mailto:gcc@gcc.gnu.org
!   11. https://gcc.gnu.org/lists.html
!   12. https://www.fsf.org/
!   13. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-3.0/index.html
                                     GCC 3.0.4
--- 22602,22614 ----
     5. https://gcc.gnu.org/onlinedocs/libstdc++/faq.html
     6. https://gcc.gnu.org/onlinedocs/gcc-3.1.1/g77/News.html
     7. https://www.adacore.com/
!    8. https://gcc.gnu.org/gcc-3.1/changes.html#obsolete_systems
!    9. https://gcc.gnu.org/onlinedocs/
!   10. mailto:gcc-help@gcc.gnu.org
!   11. mailto:gcc@gcc.gnu.org
!   12. https://gcc.gnu.org/lists.html
!   13. https://www.fsf.org/
!   14. https://gcc.gnu.org/about.html
  ======================================================================
  http://gcc.gnu.org/gcc-3.0/index.html
                                     GCC 3.0.4
*************** Previous 3.0.x Releases
*** 22151,22161 ****
     provided this notice is preserved.
  
     These pages are [14]maintained by the GCC team. Last modified
!    2022-10-26.
  
  References
  
!    1. http://www.gnu.org/
     2. https://gcc.gnu.org/gcc-3.0/features.html
     3. https://gcc.gnu.org/gcc-3.0/buildstat.html
     4. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
--- 22665,22675 ----
     provided this notice is preserved.
  
     These pages are [14]maintained by the GCC team. Last modified
!    2024-07-04.
  
  References
  
!    1. https://www.gnu.org/
     2. https://gcc.gnu.org/gcc-3.0/features.html
     3. https://gcc.gnu.org/gcc-3.0/buildstat.html
     4. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
diff -Nrcpad gcc-13.3.0/c++tools/ChangeLog gcc-13.4.0/c++tools/ChangeLog
*** gcc-13.3.0/c++tools/ChangeLog	Tue May 21 07:47:37 2024
--- gcc-13.4.0/c++tools/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/config/ChangeLog gcc-13.4.0/config/ChangeLog
*** gcc-13.3.0/config/ChangeLog	Tue May 21 07:47:37 2024
--- gcc-13.4.0/config/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/contrib/ChangeLog gcc-13.4.0/contrib/ChangeLog
*** gcc-13.3.0/contrib/ChangeLog	Tue May 21 07:47:37 2024
--- gcc-13.4.0/contrib/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/contrib/header-tools/ChangeLog gcc-13.4.0/contrib/header-tools/ChangeLog
*** gcc-13.3.0/contrib/header-tools/ChangeLog	Tue May 21 07:47:37 2024
--- gcc-13.4.0/contrib/header-tools/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/contrib/reghunt/ChangeLog gcc-13.4.0/contrib/reghunt/ChangeLog
*** gcc-13.3.0/contrib/reghunt/ChangeLog	Tue May 21 07:47:37 2024
--- gcc-13.4.0/contrib/reghunt/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/contrib/regression/ChangeLog gcc-13.4.0/contrib/regression/ChangeLog
*** gcc-13.3.0/contrib/regression/ChangeLog	Tue May 21 07:47:37 2024
--- gcc-13.4.0/contrib/regression/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/fixincludes/ChangeLog gcc-13.4.0/fixincludes/ChangeLog
*** gcc-13.3.0/fixincludes/ChangeLog	Tue May 21 07:47:37 2024
--- gcc-13.4.0/fixincludes/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,16 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
+ 2025-05-28  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-06-27  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
+ 
+ 	* fixincl.x: Regenerate.
+ 	* inclhack.def (apple_local_stdio_fn_deprecation): Also apply to
+ 	_stdio.h.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/fixincludes/fixincl.x gcc-13.4.0/fixincludes/fixincl.x
*** gcc-13.3.0/fixincludes/fixincl.x	Tue May 21 07:47:37 2024
--- gcc-13.4.0/fixincludes/fixincl.x	Thu Jun  5 16:02:57 2025
***************
*** 2,12 ****
   *
   * DO NOT EDIT THIS FILE   (fixincl.x)
   *
!  * It has been AutoGen-ed  December 11, 2023 at 02:50:24 PM by AutoGen 5.18.16
   * From the definitions    inclhack.def
   * and the template file   fixincl
   */
! /* DO NOT SVN-MERGE THIS FILE, EITHER Mon Dec 11 14:50:24 CET 2023
   *
   * You must regenerate it.  Use the ./genfixes script.
   *
--- 2,12 ----
   *
   * DO NOT EDIT THIS FILE   (fixincl.x)
   *
!  * It has been AutoGen-ed  May 27, 2025 at 10:40:20 AM by AutoGen 5.18.16
   * From the definitions    inclhack.def
   * and the template file   fixincl
   */
! /* DO NOT SVN-MERGE THIS FILE, EITHER Tue May 27 10:40:20 BST 2025
   *
   * You must regenerate it.  Use the ./genfixes script.
   *
*************** tSCC zApple_Local_Stdio_Fn_DeprecationNa
*** 2619,2625 ****
   *  File name selection pattern
   */
  tSCC zApple_Local_Stdio_Fn_DeprecationList[] =
!   "stdio.h\0";
  /*
   *  Machine/OS name selection pattern
   */
--- 2619,2625 ----
   *  File name selection pattern
   */
  tSCC zApple_Local_Stdio_Fn_DeprecationList[] =
!   "stdio.h\0_stdio.h\0";
  /*
   *  Machine/OS name selection pattern
   */
diff -Nrcpad gcc-13.3.0/fixincludes/inclhack.def gcc-13.4.0/fixincludes/inclhack.def
*** gcc-13.3.0/fixincludes/inclhack.def	Tue May 21 07:47:37 2024
--- gcc-13.4.0/fixincludes/inclhack.def	Thu Jun  5 16:02:57 2025
*************** fix = {
*** 1273,1278 ****
--- 1273,1279 ----
      hackname  = apple_local_stdio_fn_deprecation;
      mach      = "*-*-*darwin2*";
      files     = stdio.h;
+     files     = _stdio.h;
      select    = "__deprecated_msg([^\n]*)$";
      c_fix     = format;
      c_fix_arg = "#if defined(__APPLE_LOCAL_DEPRECATIONS)\n"
diff -Nrcpad gcc-13.3.0/gcc/BASE-VER gcc-13.4.0/gcc/BASE-VER
*** gcc-13.3.0/gcc/BASE-VER	Tue May 21 07:47:37 2024
--- gcc-13.4.0/gcc/BASE-VER	Thu Jun  5 16:03:57 2025
***************
*** 1 ****
! 13.3.0
--- 1 ----
! 13.4.0
diff -Nrcpad gcc-13.3.0/gcc/ChangeLog gcc-13.4.0/gcc/ChangeLog
*** gcc-13.3.0/gcc/ChangeLog	Tue May 21 07:47:37 2024
--- gcc-13.4.0/gcc/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,2873 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
+ 2025-05-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-04-17  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/119834
+ 	* config/s390/s390.md (define_split after *cpymem_short): Use
+ 	(clobber (match_scratch N)) instead of (clobber (scratch)).  Use
+ 	(match_dup 4) and operands[4] instead of (match_dup 3) and operands[3]
+ 	in the last of those.
+ 	(define_split after *clrmem_short): Use (clobber (match_scratch N))
+ 	instead of (clobber (scratch)).
+ 	(define_split after *cmpmem_short): Likewise.
+ 
+ 2025-05-30  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	Revert:
+ 	2025-05-29  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	PR rtl-optimization/99015
+ 	* lra-constraints.cc (enough_allocatable_hard_regs_p): Extract
+ 	from in_class_p.
+ 	(in_class_p): Use it with added conditions.
+ 	(process_alt_operands): Try to change class too.
+ 	(curr_insn_transform): Pass true to in_class_p for reg operand
+ 	win.  Spill pseudo only used in the insn if the corresponding
+ 	operand does not require hard register anymore.
+ 
+ 2025-05-29  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	PR rtl-optimization/99015
+ 	* lra-constraints.cc (enough_allocatable_hard_regs_p): Extract
+ 	from in_class_p.
+ 	(in_class_p): Use it with added conditions.
+ 	(process_alt_operands): Try to change class too.
+ 	(curr_insn_transform): Pass true to in_class_p for reg operand
+ 	win.  Spill pseudo only used in the insn if the corresponding
+ 	operand does not require hard register anymore.
+ 
+ 2025-05-28  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	Backported from master:
+ 	2025-05-14  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR tree-optimization/111873
+ 	* tree-sra.cc (sra_modify_expr): When processing a load which has
+ 	a type-incompatible replacement, do not store the contents of the
+ 	replacement into the original aggregate when that aggregate is
+ 	const.
+ 
+ 2025-05-28  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	Backported from master:
+ 	2025-04-15  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* configure: Regenerate.
+ 	* configure.ac: Recognise PROJECT:ld-mmmm.nn.aa as an identifier
+ 	for Darwin's static linker.
+ 
+ 2025-05-28  Iain Sandoe  <iain@sandoe.co.uk>
+ 	    Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR target/119172
+ 	* config.in: Regenerate.
+ 	* config/darwin.h (DARWIN_PLATFORM_ID): Add the option to
+ 	use -macos_version_min where available.
+ 	* configure: Regenerate.
+ 	* configure.ac: Check for ld64 support of -macos_version_min.
+ 
+ 2025-05-28  Andreas Krebbel  <krebbel@linux.ibm.com>
+ 
+ 	Backported from master:
+ 	2024-04-23  Andreas Krebbel  <krebbel@linux.ibm.com>
+ 
+ 	PR target/114676
+ 	* config/s390/s390-c.cc (s390_expand_overloaded_builtin): Use a
+ 	MEM_REF with an addend of type ptr_type_node.
+ 
+ 2025-05-26  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-02-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/118623
+ 	* config/i386/i386.md (*bt<mode>): Represent bt as
+ 	compare:CCC of const0_rtx and zero_extract rather than
+ 	zero_extract and const0_rtx.
+ 	(*jcc_bt<mode>): Likewise.  Use LTU and GEU as flags test
+ 	instead of EQ and NE.
+ 	(*jcc_bt<mode>_1): Likewise.
+ 	(*jcc_bt<mode>_mask): Likewise.
+ 	(*jcc_bt<mode>_mask_1): Likewise.
+ 	(Help combine recognize bt followed by cmov splitter): Likewise.
+ 	(*bt<mode>_setcqi): Likewise.
+ 	(*bt<mode>_setncqi): Likewise.
+ 	(*bt<mode>_setnc<mode>): Likewise.
+ 
+ 2025-05-26  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-02-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/118819
+ 	* alias.cc (memrefs_conflict_p): Perform arithmetics on c, xsize and
+ 	ysize in poly_offset_int and return -1 if it is not representable in
+ 	poly_int64.
+ 
+ 2025-05-26  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-02-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/117239
+ 	* cselib.cc (cselib_init): Remove spurious closing paren in
+ 	the #ifdef STACK_ADDRESS_OFFSET specific code.
+ 
+ 2025-05-26  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-02-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/117239
+ 	* cselib.cc: Include predict.h.
+ 	(callmem): Change type from rtx to rtx[2].
+ 	(cselib_preserve_only_values): Use callmem[0] rather than callmem.
+ 	(cselib_invalidate_mem): Optimize and don't try to invalidate
+ 	for the mem_rtx == callmem[1] case MEMs which clearly can't be
+ 	below the stack pointer.
+ 	(cselib_process_insn): Use callmem[0] rather than callmem.
+ 	For const/pure calls also call cselib_invalidate_mem (callmem[1])
+ 	in !ACCUMULATE_OUTGOING_ARGS or cfun->calls_alloca functions.
+ 	(cselib_init): Initialize callmem[0] rather than callmem and also
+ 	initialize callmem[1].
+ 
+ 2025-05-26  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-11-28  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/117358
+ 	* gimple-fold.cc (gimple_fold_builtin_memory_op): Punt if stmt has no
+ 	vdef in ssa form.
+ 	(gimple_fold_builtin_bcmp): Punt if stmt has no vuse in ssa form.
+ 	(gimple_fold_builtin_bcopy): Punt if stmt has no vdef in ssa form.
+ 	(gimple_fold_builtin_bzero): Likewise.
+ 	(gimple_fold_builtin_memset): Likewise.  Use return false instead of
+ 	return NULL_TREE.
+ 	(gimple_fold_builtin_strcpy): Punt if stmt has no vdef in ssa form.
+ 	(gimple_fold_builtin_strncpy): Likewise.
+ 	(gimple_fold_builtin_strchr): Punt if stmt has no vuse in ssa form.
+ 	(gimple_fold_builtin_strstr): Likewise.
+ 	(gimple_fold_builtin_strcat): Punt if stmt has no vdef in ssa form.
+ 	(gimple_fold_builtin_strcat_chk): Likewise.
+ 	(gimple_fold_builtin_strncat): Likewise.
+ 	(gimple_fold_builtin_strncat_chk): Likewise.
+ 	(gimple_fold_builtin_string_compare): Likewise.
+ 	(gimple_fold_builtin_fputs): Likewise.
+ 	(gimple_fold_builtin_memory_chk): Likewise.
+ 	(gimple_fold_builtin_stxcpy_chk): Likewise.
+ 	(gimple_fold_builtin_stxncpy_chk): Likewise.
+ 	(gimple_fold_builtin_stpcpy): Likewise.
+ 	(gimple_fold_builtin_snprintf_chk): Likewise.
+ 	(gimple_fold_builtin_sprintf_chk): Likewise.
+ 	(gimple_fold_builtin_sprintf): Likewise.
+ 	(gimple_fold_builtin_snprintf): Likewise.
+ 	(gimple_fold_builtin_fprintf): Likewise.
+ 	(gimple_fold_builtin_printf): Likewise.
+ 	(gimple_fold_builtin_realloc): Likewise.
+ 
+ 2025-05-26  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-12-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/113994
+ 	PR rtl-optimization/116799
+ 	* loop-doloop.cc: Include targhooks.h.
+ 	(doloop_optimize): Also punt on intersection of modified
+ 	with df_get_live_in (desc->out_edge->dest).
+ 	(doloop_optimize_loops): Call df_analyze.  Use
+ 	LI_ONLY_INNERMOST or LI_FROM_INNERMOST instead of 0 as
+ 	second loops_list argument.
+ 
+ 2025-05-26  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-02-06  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR sanitizer/110676
+ 	* gimple-fold.cc (gimple_fold_builtin_strlen): For -fsanitize=address
+ 	reset maxlen to sizetype maximum.
+ 
+ 2025-05-26  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2025-05-14  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	* config/s390/vector.md: Fix tf_to_fprx2 by using vlr instead of
+ 	ldr.
+ 
+ 2025-05-26  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	Backported from master:
+ 	2024-06-24  Roger Sayle  <roger@nextmovesoftware.com>
+ 		    Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/113673
+ 	* gimple-ssa-store-merging.cc (find_bswap_or_nop_load): Make static.
+ 	(find_bswap_or_nop_1): Avoid transformations (load merging) when
+ 	stmt_can_throw_internal indicates that a statement can trap.
+ 
+ 2025-05-26  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	Backported from master:
+ 	2024-07-29  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	PR ipa/116055
+ 	* ipa-modref.cc (analyze_function): Do not ICE when flags regress.
+ 
+ 2025-05-26  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-04-01  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/119534
+ 	* tree-vect-stmts.cc (get_load_store_type): Reject
+ 	VECTOR_BOOLEAN_TYPE_P offset vector type for emulated gathers.
+ 
+ 2025-05-26  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-02-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/98845
+ 	* tree-ssa-tail-merge.cc (stmt_local_def): Consider a
+ 	def with no uses not local.
+ 
+ 2025-05-26  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-03-06  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/119119
+ 	* gimplify.cc (is_gimple_mem_rhs_or_call): All empty CTORs
+ 	are OK when not a register type.
+ 
+ 2025-05-26  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-03-03  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/119057
+ 	* tree-vect-loop.cc (check_reduction_path): Add argument
+ 	specifying whether we're analyzing the inner loop of a
+ 	double reduction.  Do not allow extra uses outside of the
+ 	double reduction cycle in this case.
+ 	(vect_is_simple_reduction): Adjust.
+ 
+ 2025-05-26  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-01-08  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/117979
+ 	* tree-ssa-dce.cc (make_forwarders_with_degenerate_phis):
+ 	Properly update the irreducible region state.
+ 
+ 2025-05-26  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-04-14  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/119778
+ 	* tree-inline.cc (copy_edges_for_bb): Mark calls that are
+ 	source of abnormal edges as altering control-flow.
+ 
+ 2025-05-26  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-04-10  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/119706
+ 	* gimple-expr.cc (is_gimple_mem_ref_addr): Also allow
+ 	POLY_INT_CST.
+ 
+ 2025-05-26  Kyle Huey  <me@kylehuey.com>
+ 
+ 	Backported from master:
+ 	2025-05-14  Kyle Huey  <me@kylehuey.com>
+ 
+ 	* dwarf2out.cc (resolve_addr_in_expr): Propagate dtprel into the address
+ 	table when appropriate.
+ 
+ 2025-05-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-04-22  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/119327
+ 	* config/rs6000/rs6000.cc (rs6000_can_inline_p): Ignore also
+ 	OPTION_MASK_SAVE_TOC_INDIRECT differences.
+ 
+ 2025-05-15  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/117287
+ 	* Makefile.in (IBJS): Add tree-assume.o
+ 	* gimple-range-fold.cc (class fur_edge): Relocate to...
+ 	* gimple-range-fold.h (class fur_edge): Here.
+ 	* gimple-range.cc (assume_query::assume_range_p): Remove.
+ 	(assume_query::range_of_expr): Remove.
+ 	(assume_query::assume_query): Move to tree-assume.cc.
+ 	(assume_query::~assume_query): Remove.
+ 	(assume_query::calculate_op): Move to tree-assume.cc.
+ 	(assume_query::calculate_phi): Likewise.
+ 	(assume_query::check_taken_edge): Remove.
+ 	(assume_query::calculate_stmt): Move to tree-assume.cc.
+ 	(assume_query::dump): Remove.
+ 	* gimple-range.h (class assume_query): Move to tree-assume.cc
+ 	* tree-assume.cc: New
+ 	* tree-vrp.cc (struct pass_data_assumptions): Move to tree-assume.cc.
+ 	(class pass_assumptions): Likewise.
+ 	(make_pass_assumptions): Likewise.
+ 
+ 2025-05-13  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	Backported from master:
+ 	2025-05-06  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR ipa/119852
+ 	* cgraphclones.cc (dump_callgraph_transformation): Document the
+ 	function.  Do not dump if suffix is NULL.
+ 
+ 2025-05-13  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	Backported from master:
+ 	2025-05-06  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	* doc/invoke.texi (Developer Options): Document -fdump-ipa-clones.
+ 
+ 2025-05-12  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	Backported from master:
+ 	2025-01-12  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR middle-end/118411
+ 	* final.cc (get_attr_length_1): Handle asm for CALL_INSN
+ 	and JUMP_INSNs.
+ 
+ 2025-05-09  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2025-04-24  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR target/119610
+ 	* config/aarch64/aarch64.cc (aarch64_allocate_and_probe_stack_space):
+ 	Add a bytes_below_sp parameter and use it to calculate the CFA
+ 	offsets.  Attach the first SVE CFA note to the move into the
+ 	associated temporary register.
+ 	(aarch64_allocate_and_probe_stack_space): Update calls accordingly.
+ 	Start out with bytes_per_sp set to the frame size and decrement
+ 	it after each allocation.
+ 
+ 2025-05-07  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-03-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR debug/101533
+ 	* dwarf2out.cc (gen_type_die_with_usage): When we have
+ 	output the typedef already do nothing for a typedef variant.
+ 	Do not set TREE_ASM_WRITTEN on the type.
+ 
+ 2025-05-07  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-07-31  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/101478
+ 	* gimplify.cc (gimplify_addr_expr): Check we still have an
+ 	ADDR_EXPR before calling recompute_tree_invariant_for_addr_expr.
+ 
+ 2025-05-07  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-02-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/87984
+ 	* tree-ssa-dom.cc (dom_opt_dom_walker::optimize_stmt): Do
+ 	not perform redundant store elimination to hard register
+ 	variables.
+ 	* tree-ssa-sccvn.cc (eliminate_dom_walker::eliminate_stmt):
+ 	Likewise.
+ 
+ 2025-05-07  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-02-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/66279
+ 	* gimplify.cc (gimplify_asm_expr): Copy TREE_PURPOSE before
+ 	rewriting it for "+" processing.
+ 
+ 2025-05-07  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2023-08-24  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/111125
+ 	* tree-vect-slp.cc (vect_slp_function): Split at novector
+ 	loop entry, do not push blocks in novector loops.
+ 
+ 2025-05-05  John David Anglin  <danglin@gcc.gnu.org>
+ 
+ 	* config/pa/pa-linux.h (NEED_INDICATE_EXEC_STACK): Define to 1.
+ 
+ 2025-04-30  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2025-04-30  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	* config/avr/avr.md (xload_<mode>_libgcc): Clobber R21, Z.
+ 
+ 2025-04-29  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	Backported from master:
+ 	2025-04-07  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR tree-optimization/118924
+ 	* tree-sra.cc (create_total_scalarization_access): Set
+ 	grp_same_access_path flag to zero.
+ 
+ 2025-04-29  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	Backported from master:
+ 	2025-04-07  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR tree-optimization/118924
+ 	* tree-ssa-alias-compare.h (types_equal_for_same_type_for_tbaa_p):
+ 	Declare.
+ 	* tree-ssa-alias.cc: Include ipa-utils.h.
+ 	(types_equal_for_same_type_for_tbaa_p): New public overloaded variant.
+ 	* tree-sra.cc: Include tree-ssa-alias-compare.h.
+ 	(create_access): Initialzie grp_same_access_path to true.
+ 	(build_accesses_from_assign): Detect tbaa hazards and clear
+ 	grp_same_access_path fields of involved accesses when they occur.
+ 	(sort_and_splice_var_accesses): Take previous values of
+ 	grp_same_access_path into account.
+ 
+ 2025-04-29  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	Backported from master:
+ 	2025-04-29  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/x86-tune.def (X86_TUNE_DEST_FALSE_DEP_FOR_GLC):
+ 	Remove other processor except for GLC since this one is only
+ 	for GLC.
+ 
+ 2025-04-24  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2025-04-10  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR tree-optimization/119399
+ 	* tree-data-ref.cc (create_waw_or_war_checks): Use a MINUS_EXPR
+ 	on two converted pointers, rather than converting a POINTER_DIFF_EXPR
+ 	on the pointers.
+ 
+ 2025-04-24  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2025-03-07  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR tree-optimization/116125
+ 	* tree-vect-data-refs.cc (vect_prune_runtime_alias_test_list): Make
+ 	the dr_with_seg_len alignment fields describe tha access sizes as
+ 	well as the pointer alignment.
+ 	* tree-data-ref.cc (create_intersect_range_checks): Don't compensate
+ 	for invalid alignment fields here.
+ 
+ 2025-04-24  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2025-03-21  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	PR target/119235
+ 	* config/s390/s390.cc (s390_hard_regno_mode_ok): Accept only
+ 	Pmode for registers AP/FP/RA.
+ 
+ 2025-04-23  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	Backported from master:
+ 	2025-03-11  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	* tree-ssa-alias.cc (ao_compare::compare_ao_refs): Fix a
+ 	copy-and-paste error.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-04-14  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/119785
+ 	* expmed.cc (init_expmed): Always pass QImode rather than mode to
+ 	set_src_cost passed to set_zero_cost.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-04-14  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR driver/119727
+ 	* configure.ac (HOST_HAS_PERSONALITY_ADDR_NO_RANDOMIZE): New check.
+ 	* gcc.cc: Include sys/personality.h if
+ 	HOST_HAS_PERSONALITY_ADDR_NO_RANDOMIZE is defined.
+ 	(try_generate_repro): Call
+ 	personality (personality (0xffffffffU) | ADDR_NO_RANDOMIZE)
+ 	if HOST_HAS_PERSONALITY_ADDR_NO_RANDOMIZE is defined.
+ 	* config.in: Regenerate.
+ 	* configure: Regenerate.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-04-12  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR driver/119727
+ 	* gcc.cc (files_equal_p): Rewritten using fopen/fgets/fclose instead
+ 	of open/fstat/read/close.  At the start of lines, ignore lowercase
+ 	hexadecimal addresses followed by space.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-04-04  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR lto/119625
+ 	* lto-opts.cc (lto_write_options): If neither flag_pic nor
+ 	flag_pie are set, check first for flag_pie and only later
+ 	for flag_pic rather than the other way around, use a temporary
+ 	variable.  If flag_cf_protection is not set, don't append anything
+ 	if flag_cf_protection is none of CF_{NONE,FULL,BRANCH,RETURN} and
+ 	use a temporary variable.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-04-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/119291
+ 	* combine.cc (try_combine): For splitting of PARALLEL with
+ 	2 independent SETs into i2 and i3 sets check reg_used_between_p
+ 	of the SET_DESTs rather than just modified_between_p.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-03-22  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* gimplify.cc (warn_switch_unreachable_and_auto_init_r): Add missing
+ 	space in the middle of diagnostics.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-03-12  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/119204
+ 	PR middle-end/119219
+ 	* builtins.cc (fold_builtin_2): Pass type as another argument
+ 	to fold_builtin_strspn and fold_builtin_strcspn.
+ 	(fold_builtin_strspn): Add type argument, use it instead of
+ 	size_type_node.
+ 	(fold_builtin_strcspn): Add type argument, use it instead of
+ 	TREE_TYPE (expr).
+ 
+ 2025-04-23  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-03-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/119204
+ 	* builtins.cc (fold_builtin_strcspn): Preserve the original
+ 	expression type.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-03-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/119183
+ 	* tree.cc (skip_simple_arithmetic): If first operand of binary
+ 	expr is TREE_CONSTANT or TREE_READONLY with no side-effects, call
+ 	tree_invariant_p on that operand first instead of on the second.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-02-26  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/114870
+ 	* ginclude/stddef.h (__STDC_VERSION_STDDEF_H__, unreachable): Don't
+ 	redefine multiple times if stddef.h is first included without __need_*
+ 	defines and later with them.  Move nullptr_t and unreachable and
+ 	__STDC_VERSION_STDDEF_H__ definitions into the same
+ 	defined (__STDC_VERSION__) && __STDC_VERSION__ > 201710L #if block.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-02-24  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/118915
+ 	* tree-ssa-reassoc.cc (optimize_range_tests_to_bit_test): For
+ 	highj == NULL_TREE use TYPE_MAX_VALUE (TREE_TYPE (lowj)) rather
+ 	than TYPE_MAX_VALUE (type).
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-02-08  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/118776
+ 	* config/i386/sse.md (<code><mode>3_mask): Use VI1248_AVX512VLBW
+ 	iterator rather than VI48_AVX512VL.
+ 	(<mask_codefor><code><mode>3<mask_name>): Rename to ...
+ 	(*avx512bw_<code><mode>3<mask_name>): ... this.  Use
+ 	nonimmediate_operand rather than register_operand predicate and %v
+ 	rather than v constraint for operand 1 and adjust condition to reject
+ 	MEMs in both operand 1 and 2.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-01-31  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR ipa/117432
+ 	* ipa-icf-gimple.cc (func_checker::compare_asm_inputs_outputs):
+ 	Also return_false if operands have incompatible types.
+ 	(func_checker::compare_gimple_call): Check fntype1 vs. fntype2
+ 	compatibility for all non-internal calls and assume fntype1 and
+ 	fntype2 are non-NULL for those.  For calls to non-prototyped
+ 	calls or for stdarg_p functions after the last named argument (if any)
+ 	check type compatibility of call arguments.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-01-31  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/118689
+ 	PR modula2/115032
+ 	* tree-ssa-loop-niter.cc (build_cltz_expr): Return NULL_TREE if fn is
+ 	NULL and use_ifn is false.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-01-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/114877
+ 	* builtins.cc (fold_builtin_frexp): Handle rvc_nan and rvc_inf cases
+ 	like rvc_zero, return passed in arg and set *exp = 0.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-12-14  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/118024
+ 	* gimple-ssa-warn-access.cc (matching_alloc_calls_p): Walk malloc
+ 	attributes of alloc_decl and dealloc_decl in separate loops rather
+ 	than in lock-step.  Use common_deallocs.contains rather than
+ 	common_deallocs.add in the second loop.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-12-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/117095
+ 	* cse.cc (cse_extended_basic_block): Don't call record_jump_equiv
+ 	if multiple_sets (insn).
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-12-09  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR sanitizer/117960
+ 	* doc/invoke.texi (fsanitize=hwaddress): Clarify on which targets
+ 	it is supported.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-11-28  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/117642
+ 	* doc/extend.texi: Remove documentation of warning for unimplemented
+ 	__sync_* operations, such warning has never been implemented.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-11-26  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/102674
+ 	* builtins.cc (fold_builtin_fpclassify): Use real_from_string3 rather
+ 	than real_from_string.  Use "1E%d" format string rather than "0x1p%d"
+ 	for decimal float minimum.  Formatting fixes.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-11-26  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/43374
+ 	* real.cc (get_max_float): Handle decimal float.
+ 	* builtins.cc (fold_builtin_interclass_mathfn): Use
+ 	real_from_string3 rather than real_from_string.  Use
+ 	"1E%d" format string rather than "0x1p%d" for decimal
+ 	float minimum.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-11-21  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/94589
+ 	PR tree-optimization/117612
+ 	* tree-ssa-phiopt.cc (spaceship_replacement): Fix up
+ 	a pasto in check when arg1 is 2.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-11-06  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/117439
+ 	* gimple-ssa-store-merging.cc (encode_tree_to_bitpos): For
+ 	empty_ctor_p use !sub_byte_op_p even if bitlen doesn't have an
+ 	integral mode.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-10-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/117296
+ 	* function.cc (assign_parms): Call do_pending_stack_adjust.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-10-25  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/117249
+ 	* tree-ssa-structalias.cc (insert_vi_for_tree): Move put calls out of
+ 	gcc_assert.
+ 	* lto-cgraph.cc (lto_symtab_encoder_delete_node): Likewise.
+ 	* gimple-ssa-strength-reduction.cc (get_alternative_base,
+ 	add_cand_for_stmt): Likewise.
+ 	* tree-eh.cc (add_stmt_to_eh_lp_fn): Likewise.
+ 	* except.cc (duplicate_eh_regions_1): Likewise.
+ 	* tree-ssa-reassoc.cc (insert_operand_rank): Likewise.
+ 	* config/nvptx/nvptx.cc (nvptx_expand_call): Use == rather than = in
+ 	gcc_assert.
+ 	* opts-common.cc (jobserver_info::disconnect): Call close outside of
+ 	gcc_assert and only check result in it.
+ 	(jobserver_info::return_token): Call write outside of gcc_assert and
+ 	only check result in it.
+ 	* genautomata.cc (output_default_latencies): Move j++ side-effect
+ 	outside of gcc_assert.
+ 	* tree-ssa-loop-ivopts.cc (get_alias_ptr_type_for_ptr_address): Use
+ 	== rather than = in gcc_assert.
+ 	* cgraph.cc (symbol_table::create_edge): Move ++edges_max_uid
+ 	side-effect outside of gcc_assert.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-10-24  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR sanitizer/117209
+ 	* asan.cc (maybe_cast_to_ptrmode): Formatting fix.
+ 	(build_check_stmt): Don't copy *iter into gsi, perform all
+ 	the updates on iter directly.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-09-20  Uros Bizjak  <ubizjak@gmail.com>
+ 		    Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/116738
+ 	* config/i386/subst.md (mask_scalar_operand_arg34,
+ 	mask_scalar_expand_op3, round_saeonly_scalar_mask_arg3): New
+ 	subst attributes.
+ 	* config/i386/sse.md
+ 	(<sse>_vm<code><mode>3<mask_scalar_name><round_saeonly_scalar_name>):
+ 	Change from define_insn to define_expand, rename the old define_insn
+ 	to ...
+ 	(*<sse>_vm<code><mode>3<mask_scalar_name><round_saeonly_scalar_name>):
+ 	... this.
+ 	(<sse>_ieee_vm<ieee_maxmin><mode>3<mask_scalar_name><round_saeonly_scalar_name>):
+ 	New define_insn.
+ 
+ 2025-04-15  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	Backported from master:
+ 	2024-08-20  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR tree-optimization/116412
+ 	* gimple-match-head.cc (gimple_extract): Return false if op0
+ 	was not a SSA name nor a min invariant for REALPART_EXPR/IMAGPART_EXPR/VCE
+ 	and BIT_FIELD_REF.
+ 
+ 2025-04-15  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	Backported from master:
+ 	2025-03-16  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR middle-end/113546
+ 	* tree-cfg.cc (first_non_label_stmt): Rename to ...
+ 	(first_non_label_nondebug_stmt): This and use gsi_start_nondebug_after_labels_bb.
+ 	(assign_discriminators): Update call to first_non_label_nondebug_stmt.
+ 
+ 2025-04-15  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	Backported from master:
+ 	2025-03-09  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR tree-optimization/118922
+ 	* tree-ssa-phiopt.cc (value_replacement): Set empty_or_with_defined_p
+ 	to false when there is phi nodes for the middle bb.
+ 
+ 2025-04-15  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	Backported from master:
+ 	2024-12-04  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR tree-optimization/117243
+ 	PR tree-optimization/116749
+ 	* tree-ssa-phiopt.cc (replace_phi_edge_with_variable): Reset loop
+ 	estimates if the cond_block was an exit to a loop.
+ 
+ 2025-04-15  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	Backported from master:
+ 	2024-10-02  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR tree-optimization/116922
+ 	* gimple-ssa-backprop.cc (remove_unused_var): Handle phi
+ 	nodes correctly.
+ 
+ 2025-04-15  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	Backported from master:
+ 	2024-10-28  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR middle-end/111285
+ 	* tree-vect-generic.cc (do_unop): Use a signed type for the
+ 	operand if the operation was ABSU_EXPR.
+ 
+ 2025-04-13  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-04-09  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR rtl-optimization/119689
+ 	PR rtl-optimization/115568
+ 	* lra-remat.cc (create_cands): Use prev_nonnote_nondebug_insn
+ 	to check whether insn2 is directly before insn.
+ 
+ 2025-04-13  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-02-05  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	PR rtl-optimization/115568
+ 	* lra-remat.cc (create_cands): Check that output reload insn is
+ 	adjacent to given insn.  Update a comment.
+ 
+ 2025-04-11  Alex Coplan  <alex.coplan@arm.com>
+ 
+ 	Backported from master:
+ 	2025-03-12  Alex Coplan  <alex.coplan@arm.com>
+ 
+ 	PR rtl-optimization/116564
+ 	* df-problems.cc (df_simulate_defs): For partial defs, mark the
+ 	register live (treat it as a RMW operation).
+ 
+ 2025-04-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-03-07  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/119145
+ 	* tree-vectorizer.cc (try_vectorize_loop_1): Avoid BB
+ 	vectorizing an if-converted loop body when there's a .MASK_CALL
+ 	in the loop body.
+ 
+ 2025-04-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-01-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/117424
+ 	* tree-eh.cc (tree_could_trap_p): Verify the base is
+ 	fully contained within a decl.
+ 
+ 2025-04-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-02-04  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/117113
+ 	* gimple-loop-jam.cc (unroll_jam_possible_p): Detect when
+ 	we cannot handle virtual SSA update.
+ 
+ 2025-04-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-10-01  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/116906
+ 	* tree-ssa-pre.cc (prune_clobbered_mems): Add clean_traps
+ 	argument.
+ 	(compute_antic_aux): Direct prune_clobbered_mems to prune
+ 	all traps when any MAX solution was involved in the ANTIC
+ 	computation.
+ 	(compute_partial_antic_aux): Adjust.
+ 
+ 2025-04-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-03-06  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR lto/114501
+ 	* ipa-free-lang-data.cc (find_decls_types_r): Explicitly
+ 	handle CONSTRUCTORs as walk_tree handling of those is
+ 	incomplete.
+ 
+ 2025-04-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-01-30  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/114052
+ 	* tree-ssa-loop-niter.cc (maybe_lower_iteration_bound): Check
+ 	for infinite subloops we might not exit.
+ 
+ 2025-04-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-02-04  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR lto/113207
+ 	* ipa-free-lang-data.cc (free_lang_data_in_type): First drop
+ 	const/volatile qualifiers from function argument types,
+ 	then build a simplified type.
+ 
+ 2025-04-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-01-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/112859
+ 	* tree-loop-distribution.cc
+ 	(loop_distribution::pg_add_dependence_edges): Add comment.
+ 
+ 2025-04-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-01-27  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/112859
+ 	PR tree-optimization/115347
+ 	* tree-loop-distribution.cc
+ 	(loop_distribution::pg_add_dependence_edges): For a zero
+ 	distance vector still make sure to not have an inner
+ 	loop with zero distance.
+ 
+ 2025-04-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-02-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR ipa/111245
+ 	* ipa-modref.cc (modref_access_analysis::analyze_store): Do
+ 	not guard the check of whether the stmt could throw by
+ 	cfun->can_throw_non_call_exceptions.
+ 
+ 2025-04-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-05-17  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/115110
+ 	* tree-ssa-alias.cc (view_converted_memref_p): Fix.
+ 
+ 2025-04-11  Jin Ma  <jinma@linux.alibaba.com>
+ 
+ 	Backported from master:
+ 	2025-04-02  Jin Ma  <jinma@linux.alibaba.com>
+ 
+ 	* config/riscv/bitmanip.md: The optimization can only be applied if
+ 	the high bit of operands[3] is set to 1.
+ 
+ 2025-04-08  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	Backported from master:
+ 	2025-03-07  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR ipa/118318
+ 	* ipa-cp.cc (adjust_clone_incoming_counts): Add a compatible_p check.
+ 
+ 2025-04-01  Andrew Carlotti  <andrew.carlotti@arm.com>
+ 
+ 	* config/aarch64/aarch64.cc
+ 	(aarch64_expand_epilogue): Use TARGET_PAUTH.
+ 	* config/aarch64/aarch64.md: Update comment.
+ 	(cherry-picked from commit 20385cb92cbd4a1934661ab97a162c1e25935836)
+ 
+ 2025-03-31  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-03-11  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* doc/extend.texi (Common Variable Attributes): Fix grammar in
+ 	final sentence of -ftrivial-auto-var-init description.
+ 
+ 2025-03-23  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2025-03-23  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	* config/avr/avr-mcus.def: Add AVR32SD20, AVR32SD28, AVR32SD32,
+ 	AVR64SD28, AVR64SD32, AVR64SD48.
+ 	* doc/avr-mmcu.texi: Rebuild.
+ 
+ 2025-03-21  Jason Merrill  <jason@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-03-21  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/114992
+ 	* multiple_target.cc (create_dispatcher_calls):
+ 	remove_from_same_comdat_group before add_to_same_comdat_group.
+ 
+ 2025-03-11  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	Backported from master:
+ 	2025-02-28  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR ipa/118243
+ 	* ipa-sra.cc (pull_accesses_from_callee): New parameters
+ 	caller_ipcp_ts and param_idx.  Check that scalar pulled accesses would
+ 	not clash with a known IPA-CP aggregate constant.
+ 	(param_splitting_across_edge): Pass IPA-CP transformation summary and
+ 	caller parameter index to pull_accesses_from_callee.
+ 
+ 2025-03-07  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	Backported from master:
+ 	2025-03-07  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	PR target/115485
+ 	* config/arm/arm.cc (require_pic_register): Fix typos in
+ 	comment. Handle fixed arm_pic_register.
+ 
+ 2025-03-05  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-03-03  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR rtl-optimization/118739
+ 	* combine.cc (distribute_notes) <case REG_UNUSED>: Correct the
+ 	logic when the register is used by I3.
+ 
+ 2025-03-05  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2025-03-04  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR tree-optimization/118976
+ 	* fold-const.cc (const_unop): Use ~ rather than - for BIT_NOT_EXPR.
+ 	* config/aarch64/aarch64.cc (aarch64_test_sve_folding): New function.
+ 	(aarch64_run_selftests): Run it.
+ 
+ 2025-03-05  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2024-10-14  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR target/116999
+ 	PR target/117045
+ 	* config/aarch64/aarch64-sve-builtins-base.cc
+ 	(svwhilelx_impl::fold): Check for WHILELTs of the minimum value
+ 	and WHILELEs of the maximum value.  Fold them to all-false and
+ 	all-true respectively.
+ 
+ 2025-03-05  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2024-08-21  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR testsuite/116238
+ 	* config/aarch64/aarch64.cc (aarch64_hard_regno_caller_save_mode):
+ 	Only return SImode if we can convert to and from it.
+ 
+ 2025-03-02  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	PR target/116720
+ 	* config/riscv/thead.cc (th_mempair_operands_p): Test for
+ 	aligned memory after swapping operands.  Simplify test for
+ 	first memory access as well.
+ 
+ 2025-02-27  Haochen Jiang  <haochen.jiang@intel.com>
+ 
+ 	* config/i386/x86-tune.def
+ 	(X86_TUNE_DEST_FALSE_DEP_FOR_GLC): Add GNR, GNR-D.
+ 	(X86_TUNE_AVOID_256FMA_CHAINS): Ditto.
+ 	(X86_TUNE_AVX512_MOVE_BY_PIECES): Ditto.
+ 	(X86_TUNE_AVX512_STORE_BY_PIECES): Ditto.
+ 
+ 2025-02-26  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2025-02-13  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	PR target/118835
+ 	* config/s390/s390.cc (s390_valid_shift_count): Reject shift
+ 	count operands which do not trivially fit the scheme of
+ 	address operands.
+ 
+ 2025-02-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-12-10  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/117912
+ 	* tree-ssa-sccvn.cc (copy_reference_ops_from_ref): For addresses
+ 	of zero-sized components do not set ->off if the object size pass
+ 	didn't run.
+ 	For OOB ARRAY_REF accesses in address expressions avoid setting
+ 	->off if the object size pass didn't run.
+ 	(valueize_refs_1): Likewise.
+ 
+ 2025-02-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-09-30  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/116850
+ 	* gimple-ssa-isolate-paths.cc (bb_split_points): New global.
+ 	(insert_trap): Delay BB splitting if post-doms are computed.
+ 	(find_explicit_erroneous_behavior): Process delayed BB
+ 	splitting after releasing post dominators.
+ 	(gimple_ssa_isolate_erroneous_paths): Do not free post-dom
+ 	info here.
+ 
+ 2025-02-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-07-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/115641
+ 	* fold-const.cc (decode_field_reference): If the inner
+ 	reference isn't something we can take the address of, fail.
+ 
+ 2025-02-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-02-03  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/118717
+ 	* tree-ssa-phiopt.cc (cond_if_else_store_replacement_1):
+ 	Do not common stores referencing abnormal SSA names.
+ 	* tree-ssa-sink.cc (sink_common_stores_to_bb): Likewise.
+ 
+ 2025-02-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-01-13  Richard Biener  <rguenther@suse.de>
+ 		    Stefan Schulze Frielinghaus  <stefansf@linux.ibm.com>
+ 
+ 	PR tree-optimization/117119
+ 	* tree-data-ref.cc (initialize_matrix_A): Check whether
+ 	an INTEGER_CST fits in HWI, otherwise return chrec_dont_know.
+ 
+ 2025-02-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-05-07  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/114921
+ 	* tree-vect-stmts.cc (vectorizable_assignment): Use
+ 	tree_nop_conversion_p to identify converts we can vectorize
+ 	with a simple assignment.
+ 
+ 2025-02-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-05-03  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/114921
+ 	* tree-vect-stmts.cc (vectorizable_assignment): Require
+ 	same vector component modes for input and output for
+ 	CONVERT_EXPR_CODE_P.
+ 
+ 2025-02-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-02-07  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR jit/118780
+ 	* system.h: Check INCLUDE_DLFCN_H for including dlfcn.h instead
+ 	of ENABLE_PLUGIN.
+ 	* plugin.cc: Define INCLUDE_DLFCN_H.
+ 
+ 2025-02-17  Andreas Tobler  <andreast@gcc.gnu.org>
+ 
+ 	* config/freebsd-spec.h: Change fbsd-lib-spec for FreeBSD > 13,
+ 	do not link against profiled system libraries if -pg is invoked.
+ 	Add a define to note about this change.
+ 	* config/aarch64/aarch64-freebsd.h: Use the note to inform if
+ 	-pg is invoked on FreeBSD > 13.
+ 	* config/arm/freebsd.h: Likewise.
+ 	* config/i386/freebsd.h: Likewise.
+ 	* config/i386/freebsd64.h: Likewise.
+ 	* config/riscv/freebsd.h: Likewise.
+ 	* config/rs6000/freebsd64.h: Likewise.
+ 	* config/rs6000/sysv4.h: Likeise.
+ 
+ 2025-02-12  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR target/118800
+ 	* config/aarch64/driver-aarch64.cc (DEFAULT_CPU): Use generic instead of
+ 	generic-armv8-a.
+ 	(aarch64_cpu_data): Add generic.
+ 
+ 2025-02-11  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-02-11  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/118825
+ 	* config/i386/i386.h (ASM_OUTPUT_SYMBOL_REF): Replace x with
+ 	SYM.
+ 
+ 2025-02-05  Sebastian Huber  <sebastian.huber@embedded-brains.de>
+ 
+ 	Backported from master:
+ 	2025-02-05  Sebastian Huber  <sebastian.huber@embedded-brains.de>
+ 
+ 	* config/arm/t-rtems: Add Cortex-M33 multilib.
+ 
+ 2025-02-03  Lewis Hyatt  <lhyatt@gmail.com>
+ 
+ 	PR middle-end/115913
+ 	* optc-save-gen.awk (cl_optimization_compare): Skip options with
+ 	CL_WARNING flag.
+ 
+ 2025-01-28  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	Backported from master:
+ 	2025-01-16  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR target/110901
+ 	* config/aarch64/aarch64.h (MCPU_TO_MARCH_SPEC): Don't override if
+ 	march is set.
+ 
+ 2025-01-28  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	Backported from master:
+ 	2025-01-16  Tamar Christina  <tamar.christina@arm.com>
+ 		    Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR target/113257
+ 	* config/aarch64/driver-aarch64.cc (get_cpu_from_id, DEFAULT_CPU): New.
+ 	(host_detect_local_cpu): Use it.
+ 
+ 2025-01-28  Ilya Leoshkevich  <iii@linux.ibm.com>
+ 
+ 	Backported from master:
+ 	2025-01-26  Ilya Leoshkevich  <iii@linux.ibm.com>
+ 
+ 	* asan.cc (asan_emit_stack_protection): Always zero the flag
+ 	unless it is cleared by the __asan_stack_free_N() libcall.
+ 
+ 2025-01-24  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	Backported from master:
+ 	2025-01-16  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-builtin.cc (rs6000_expand_builtin): Return
+ 	const0_rtx when there is an error.
+ 
+ 2025-01-24  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	Backported from master:
+ 	2025-01-16  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-builtin.cc (rs6000_expand_builtin): Use correct
+ 	array size for the loop limit.
+ 	* config/rs6000/rs6000-builtins.def: Fix field size for PMASK operand.
+ 
+ 2025-01-23  John David Anglin  <danglin@gcc.gnu.org>
+ 
+ 	* config/pa/pa32-regs.h (ADDITIONAL_REGISTER_NAMES): Change
+ 	register 86 name to "%fr31L".
+ 
+ 2025-01-20  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/118067
+ 	* config/i386/i386.md (*movdi_internal):
+ 	Disable alternatives from/to mask registers without AVX512BW.
+ 	(*movsi_internal): Ditto.
+ 
+ 2025-01-17  Eugene Rozenfeld  <erozen@microsoft.com>
+ 
+ 	Backported from master:
+ 	2025-01-16  Eugene Rozenfeld  <erozen@microsoft.com>
+ 
+ 	PR gcov-profile/116743
+ 	* auto-profile.cc (afdo_annotate_cfg): Fix mismatch between the call graph node count
+ 	and the entry block count.
+ 
+ 2025-01-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-11-20  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/117574
+ 	* tree-ssa-loop-niter.cc (number_of_iterations_lt_to_ne):
+ 	Use the obvious may_be_zero condition.
+ 
+ 2025-01-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-11-12  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/117417
+ 	* tree-ssa-forwprop.cc (pass_forwprop::execute): Avoid
+ 	decomposing BIT_FIELD_REF complex load.
+ 
+ 2025-01-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-10-29  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/117333
+ 	* tree-data-ref.cc (dr_may_alias_p): Guard against NULL
+ 	access size.
+ 
+ 2025-01-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-10-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/117307
+ 	* tree-vect-data-refs.cc (vect_analyze_data_ref_accesses):
+ 	Properly compute STMT_VINFO_SLP_VECT_ONLY.  Set it on all
+ 	parts of a split group.
+ 
+ 2025-01-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-10-22  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/117254
+ 	* gimple-ssa-warn-access.cc (maybe_warn_nonstring_arg):
+ 	Check the array domain max is constant before using it.
+ 
+ 2025-01-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-10-12  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/117104
+ 	* match.pd ((cmp:c (minmax:c @0 @1) @0) -> (out @0 @1)): Properly
+ 	guard the vector case.
+ 
+ 2025-01-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-10-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/117086
+ 	* match.pd ((op (vec_cond ...) ..) -> (vec_cond ...)): Add
+ 	missing checks for VECTOR_TYPE_P (type).
+ 
+ 2025-01-16  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-10-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/116891
+ 	* match.pd ((negate (fmas@3 @0 @1 @2)) -> (IFN_FNMS @0 @1 @2)):
+ 	Only enable for !HONOR_SIGN_DEPENDENT_ROUNDING.
+ 	((negate (IFN_FMS@3 @0 @1 @2)) -> (IFN_FNMA @0 @1 @2)): Likewise.
+ 	((negate (IFN_FNMA@3 @0 @1 @2)) -> (IFN_FMS @0 @1 @2)): Likewise.
+ 
+ 2025-01-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-10-14  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/116891
+ 	* match.pd ((negate (IFN_FNMS@3 @0 @1 @2)) -> (IFN_FMA @0 @1 @2)):
+ 	Only enable for !HONOR_SIGN_DEPENDENT_ROUNDING.
+ 
+ 2025-01-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-09-19  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/116768
+ 	* tree-data-ref.cc (build_classic_dist_vector_1): Revert
+ 	PR101009 change.
+ 	* tree-chrec.cc (eq_evolutions_p): Make sure (sizetype)1
+ 	and (int)1 compare equal.
+ 
+ 2025-01-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-10-13  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/116481
+ 	* pointer-query.cc (build_printable_array_type):
+ 	Build an array types with function or method element type
+ 	manually to avoid bogus diagnostic.
+ 
+ 2025-01-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-08-21  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/116380
+ 	* tree-loop-distribution.cc (copy_loop_before): Handle
+ 	out-of-loop defs appropriately.
+ 
+ 2025-01-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-10-14  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/116290
+ 	* tree-loop-distribution.cc (determine_reduction_stmt_1): PHIs
+ 	have no debug variants.  Start with first non-debug real stmt.
+ 	* tree-ssa-loop-ivopts.cc (find_givs_in_bb): Do not analyze
+ 	debug stmts.
+ 
+ 2025-01-12  Jan Hubicka  <jh@suse.cz>
+ 
+ 	Backported from master:
+ 	2024-09-04  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* config/i386/x86-tune-costs.h (znver5_cost): Update instruction
+ 	costs.
+ 
+ 2025-01-10  Sam James  <sam@gentoo.org>
+ 
+ 	* doc/cpp.texi (Common Predefined Macros): Fix syntax.
+ 
+ 2025-01-07  Jan Hubicka  <jh@suse.cz>
+ 
+ 	Backported from master:
+ 	2024-09-03  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* config/i386/i386.cc (ix86_reassociation_width): Update for Znver5.
+ 	* config/i386/x86-tune-costs.h (znver5_costs): Update reassociation
+ 	widths.
+ 
+ 2025-01-07  Jan Hubicka  <jh@suse.cz>
+ 
+ 	Backported from master:
+ 	2024-09-03  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* config/i386/i386.h (TARGET_FUSE_MOV_AND_ALU): New tune.
+ 	* config/i386/x86-tune-sched.cc (ix86_issue_rate): Updat for znver5.
+ 	(ix86_adjust_cost): Add TODO about znver5 memory latency.
+ 	(ix86_fuse_mov_alu_p): New.
+ 	(ix86_macro_fusion_pair_p): Use it.
+ 	* config/i386/x86-tune.def (X86_TUNE_FUSE_ALU_AND_BRANCH): Add ZNVER5.
+ 	(X86_TUNE_FUSE_MOV_AND_ALU): New tune;
+ 
+ 2024-12-05  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2024-12-05  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/64242
+ 	* config/avr/avr.md (nonlocal_goto): Don't restore
+ 	hard_frame_pointer_rtx directly, but copy it to local
+ 	register, and only set hard_frame_pointer_rtx from it
+ 	after emit_stack_restore().
+ 
+ 2024-12-02  Andre Vieira  <andre.simoesdiasvieira@arm.com>
+ 
+ 	Backported from master:
+ 	2024-12-02  Andre Vieira  <andre.simoesdiasvieira@arm.com>
+ 
+ 	* config/arm/arm_mve.h: Add Runtime Library Exception.
+ 	* config/arm/arm_mve_types.h: Likewise.
+ 
+ 2024-11-26  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	Backported from master:
+ 	2024-11-25  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/117562
+ 	* config/i386/sse.md (vec_unpacks_hi_v4sf): Initialize
+ 	operands[2] with CONST0_RTX.
+ 
+ 2024-11-23  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2024-11-23  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/117744
+ 	* config/avr/avr.cc (out_movqi_r_mr): Fix code when a load
+ 	only partially clobbers an address register due to
+ 	changing the address register temporally to accommodate for
+ 	faked addressing modes.
+ 
+ 2024-11-19  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	Backported from master:
+ 	2024-11-18  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/117357
+ 	* config/i386/i386.md (*rsqrtsf2_sse):
+ 	Also enable for !TARGET_SSE_MATH.
+ 
+ 2024-11-19  Andre Vieira  <andre.simoesdiasvieira@arm.com>
+ 
+ 	Backported from master:
+ 	2024-10-14  Andre Vieira  <andre.simoesdiasvieira@arm.com>
+ 		    Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR middle-end/116997
+ 	* fold-const.cc (fold_ternary_loc): Fix BIT_INSERT_EXPR constant folding
+ 	for BYTES_BIG_ENDIAN targets.
+ 
+ 2024-11-18  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2024-11-18  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/117659
+ 	* config/avr/avr.cc (avr_out_ashlpsi3) [case 16]: Use %A1 as
+ 	input (instead of bogus %A0).
+ 
+ 2024-11-16  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2024-11-16  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/117500
+ 	* config/avr/avr.cc (avr_print_operand) [code = 'i']: Use
+ 	output_operand_lossage on bad operands instead of fatal_insn.
+ 
+ 2024-11-15  John David Anglin  <danglin@gcc.gnu.org>
+ 
+ 	PR target/117564
+ 	* config/pa/pa.md: Fix typos in 32-bit SFmode peephole2 patterns.
+ 
+ 2024-11-15  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR tree-optimization/117142
+ 	* tree-sra.cc (scan_function): Disqualify any candidate passed to
+ 	a function returning twice.
+ 
+ 2024-11-13  John David Anglin  <danglin@gcc.gnu.org>
+ 
+ 	PR target/117525
+ 	* config/pa/pa.md (fix_truncsfsi2): Remove inner `fix:SF`.
+ 	(fix_truncdfsi2, fix_truncsfdi2, fix_truncdfdi2,
+ 	fixuns_truncsfsi2, fixuns_truncdfsi2, fixuns_truncsfdi2,
+ 	fixuns_truncdfdi2): Likewise.
+ 
+ 2024-11-13  Hu, Lin1  <lin1.hu@intel.com>
+ 
+ 	Backported from master:
+ 	2024-11-13  Hu, Lin1  <lin1.hu@intel.com>
+ 
+ 	PR target/117418
+ 	* config/i386/i386-expand.cc (ix86_expand_builtin): Convert
+ 	pointer's mode according to Pmode.
+ 
+ 2024-11-12  John David Anglin  <danglin@gcc.gnu.org>
+ 
+ 	* config/pa/pa.md (decrement_and_branch_until_zero): Fix
+ 	constraint.
+ 
+ 2024-11-04  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/117398
+ 	* gimple-range-edge.cc (gimple_outgoing_range::calc_switch_ranges):
+ 	Check for VARYING and don't call invert () on it.
+ 
+ 2024-11-01  Haochen Jiang  <haochen.jiang@intel.com>
+ 
+ 	* config/i386/cmpccxaddintrin.h (_cmpccxadd_epi32): Do not do
+ 	type conversion for pointer.
+ 	(_cmpccxadd_epi64): Ditto.
+ 
+ 2024-10-30  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	Backported from master:
+ 	2024-10-30  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/117318
+ 	* config/i386/sse.md (*avx512vl_<code>v2div2qi2_mask_store_1):
+ 	Rename to ..
+ 	(avx512vl_<code>v2div2qi2_mask_store_1): .. this.
+ 	(avx512vl_<code>v2div2qi2_mask_store_2): Change to
+ 	define_expand.
+ 	(*avx512vl_<code><mode>v4qi2_mask_store_1): Rename to ..
+ 	(avx512vl_<code><mode>v4qi2_mask_store_1): .. this.
+ 	(avx512vl_<code><mode>v4qi2_mask_store_2): Change to
+ 	define_expand.
+ 	(*avx512vl_<code><mode>v8qi2_mask_store_1): Rename to ..
+ 	(avx512vl_<code><mode>v8qi2_mask_store_1): .. this.
+ 	(avx512vl_<code><mode>v8qi2_mask_store_2): Change to
+ 	define_expand.
+ 	(*avx512vl_<code><mode>v4hi2_mask_store_1): Rename to ..
+ 	(avx512vl_<code><mode>v4hi2_mask_store_1): .. this.
+ 	(avx512vl_<code><mode>v4hi2_mask_store_2): Change to
+ 	define_expand.
+ 	(*avx512vl_<code>v2div2hi2_mask_store_1): Rename to ..
+ 	(avx512vl_<code>v2div2hi2_mask_store_1): .. this.
+ 	(avx512vl_<code>v2div2hi2_mask_store_2): Change to
+ 	define_expand.
+ 	(*avx512vl_<code>v2div2si2_mask_store_1): Rename to ..
+ 	(avx512vl_<code>v2div2si2_mask_store_1): .. this.
+ 	(avx512vl_<code>v2div2si2_mask_store_2): Change to
+ 	define_expand.
+ 	(*avx512f_<code>v8div16qi2_mask_store_1): Rename to ..
+ 	(avx512f_<code>v8div16qi2_mask_store_1): .. this.
+ 	(avx512f_<code>v8div16qi2_mask_store_2): Change to
+ 	define_expand.
+ 
+ 2024-10-29  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR rtl-optimization/117327
+ 	* reorg.cc (find_end_label): Do not return a dangling label at the
+ 	end of the function and adjust commentary.
+ 
+ 2024-10-29  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	Backported from master:
+ 	2024-08-23  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	PR target/116415
+ 	* config/rs6000/rs6000.h (TI_OR_PTI_MODE): New define.
+ 	* config/rs6000/rs6000-p8swap.cc (rs6000_analyze_swaps): Use it to
+ 	handle PTImode identically to TImode.
+ 
+ 2024-10-23  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	Backported from master:
+ 	2024-10-23  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/117240
+ 	* config/i386/i386-builtin.def: Add avx/avx512f to vaes
+ 	ymm/zmm builtins.
+ 
+ 2024-10-22  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	Backported from master:
+ 	2024-09-06  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR ipa/115815
+ 	* cgraph.cc (cgraph_node_cannot_be_local_p_1): Also check
+ 	DECL_STATIC_CONSTRUCTOR and DECL_STATIC_DESTRUCTOR.
+ 	* ipa-visibility.cc (non_local_p): Likewise.
+ 	(cgraph_node::local_p): Delete extraneous line of tabs.
+ 
+ 2024-10-21  Jeevitha  <jeevitha@linux.ibm.com>
+ 
+ 	Backported from master:
+ 	2024-10-21  Jeevitha  <jeevitha@linux.ibm.com>
+ 
+ 	* config/rs6000/amo.h (enum _AMO_LD): Correct the function code for
+ 	_AMO_LD_DEC_BOUNDED.
+ 
+ 2024-10-21  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	Backported from master:
+ 	2024-10-21  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/117159
+ 	* config/i386/sse.md
+ 	(*<avx512>_cmp<V48H_AVX512VL:mode>3_zero_extend<SWI248x:mode>):
+ 	Change from define_insn_and_split to define_insn.
+ 	(*<avx512>_cmp<VI12_AVX512VL:mode>3_zero_extend<SWI248x:mode>):
+ 	Ditto.
+ 	(*<avx512>_ucmp<VI12_AVX512VL:mode>3_zero_extend<SWI248x:mode>):
+ 	Ditto.
+ 	(*<avx512>_ucmp<VI48_AVX512VL:mode>3_zero_extend<SWI248x:mode>):
+ 	Ditto.
+ 	(*<avx512>_cmp<V48H_AVX512VL:mode>3_zero_extend<SWI248x:mode>_2):
+ 	Split to the zero_extend pattern.
+ 	(*<avx512>_cmp<VI12_AVX512VL:mode>3_zero_extend<SWI248x:mode>_2):
+ 	Ditto.
+ 	(*<avx512>_ucmp<VI12_AVX512VL:mode>3_zero_extend<SWI248x:mode>_2):
+ 	Ditto.
+ 	(*<avx512>_ucmp<VI48_AVX512VL:mode>3_zero_extend<SWI248x:mode>_2):
+ 	Ditto.
+ 
+ 2024-10-16  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	Backported from master:
+ 	2024-10-15  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/117116
+ 	* config/i386/i386-expand.cc (expand_vector_set): Force "val"
+ 	into a register before VEC_MERGE/VEC_DUPLICATE RTX is generated
+ 	if it doesn't satisfy nonimmediate_operand predicate.
+ 
+ 2024-10-16  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	Backported from master:
+ 	2024-10-10  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/i386.cc (ix86_vector_costs::ix86_vector_costs):
+ 	Add new member m_num_avx256_vec_perm.
+ 	(ix86_vector_costs::add_stmt_cost): Record 256-bit vec_perm.
+ 	(ix86_vector_costs::finish_cost): Prevent vectorization for
+ 	TAREGT_AVX256_AVOID_VEC_PERM when there's 256-bit vec_perm
+ 	instruction.
+ 	* config/i386/i386.h (TARGET_AVX256_AVOID_VEC_PERM): New
+ 	Macro.
+ 	* config/i386/x86-tune.def (X86_TUNE_AVX256_SPLIT_REGS): Add
+ 	m_CORE_ATOM.
+ 	(X86_TUNE_AVX256_AVOID_VEC_PERM): New tune.
+ 
+ 2024-10-16  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	Backported from master:
+ 	2024-10-10  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/i386-expand.cc (ix86_expand_sse_movcc): Guard
+ 	instruction blendv generation under new tune.
+ 	* config/i386/i386.h (TARGET_SSE_MOVCC_USE_BLENDV): New Macro.
+ 	* config/i386/x86-tune.def (X86_TUNE_SSE_MOVCC_USE_BLENDV):
+ 	New tune.
+ 
+ 2024-10-15  Victor Do Nascimento  <victor.donascimento@arm.com>
+ 
+ 	* tree-if-conv.cc (predicate_statements): Fix handling of
+ 	predicated function calls.
+ 
+ 2024-10-14  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	Backported from master:
+ 	2023-05-23  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	PR tree-optimization/109934
+ 	* value-range.cc (irange::invert): Remove buggy special case.
+ 
+ 2024-10-14  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	Backported from master:
+ 	2023-05-23  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	PR tree-optimization/109920
+ 	* value-range.h (RESIZABLE>::~int_range): Use delete[].
+ 
+ 2024-10-14  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	Backported from master:
+ 	2024-07-22  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	PR ipa/109985
+ 	* ipa-modref.cc (modref_summary::useful_p): Fix handling of ECF_NOVOPS.
+ 	(modref_access_analysis::process_fnspec): Likevise.
+ 	(modref_access_analysis::analyze_call): Likevise.
+ 	(propagate_unknown_call): Likevise.
+ 	(modref_propagate_in_scc): Likevise.
+ 	(modref_propagate_flags_in_scc): Likewise.
+ 	(ipa_merge_modref_summary_after_inlining): Likewise.
+ 
+ 2024-10-14  Jan Hubicka  <jh@suse.cz>
+ 
+ 	Backported from master:
+ 	2024-05-16  Jan Hubicka  <jh@suse.cz>
+ 
+ 	PR ipa/113787
+ 	* ipa-fnsummary.cc (points_to_local_or_readonly_memory_p): Do not
+ 	look into TARGET_MEM_REFS with constant opreand 0.
+ 
+ 2024-10-14  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	Backported from master:
+ 	2024-07-22  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	PR ipa/115033
+ 	* ipa-modref.cc (modref_eaf_analysis::analyze_ssa_name): Fix checking of
+ 	EAF flags when analysing values dereferenced as function parameters.
+ 
+ 2024-10-14  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	Backported from master:
+ 	2024-07-22  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	PR ipa/114207
+ 	* ipa-prop.cc (unadjusted_ptr_and_unit_offset): Fix accounting of offsets in ADDR_EXPR.
+ 
+ 2024-10-14  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	Backported from master:
+ 	2024-07-22  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	PR ipa/111613
+ 	* ipa-modref.cc (analyze_parms): Do not preserve EAF_NO_DIRECT_READ and
+ 	EAF_NO_INDIRECT_READ from past flags.
+ 
+ 2024-10-05  John David Anglin  <danglin@gcc.gnu.org>
+ 
+ 	* config/pa/pa.md: Fix indirect_got constraint.
+ 
+ 2024-10-04  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	Backported from master:
+ 	2024-10-04  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/116962
+ 	* config/i386/i386.cc (ix86_stack_protect_runtime_enabled_p): New
+ 	function.
+ 	(TARGET_STACK_PROTECT_RUNTIME_ENABLED_P): New.
+ 
+ 2024-10-02  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-09-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/116585
+ 	* tree-data-ref.cc (split_constant_offset_1): When either
+ 	operand is subject to abnormal coalescing do no further
+ 	processing.
+ 
+ 2024-09-30  Jan Hubicka  <jh@suse.cz>
+ 
+ 	Backported from master:
+ 	2024-09-03  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* config/i386/x86-tune.def (X86_TUNE_USE_GATHER_2PARTS): Disable for
+ 	ZNVER5.
+ 	(X86_TUNE_USE_SCATTER_2PARTS): Disable for ZNVER5.
+ 	(X86_TUNE_USE_GATHER_4PARTS): Disable for ZNVER5.
+ 	(X86_TUNE_USE_SCATTER_4PARTS): Disable for ZNVER5.
+ 	(X86_TUNE_USE_GATHER_8PARTS): Disable for ZNVER5.
+ 	(X86_TUNE_USE_SCATTER_8PARTS): Disable for ZNVER5.
+ 
+ 2024-09-29  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* config/i386/x86-tune.def (X86_TUNE_AVOID_256FMA_CHAINS): Re-add m_ZNVER4
+ 	accidentally removed during znver5 merge.
+ 
+ 2024-09-29  Jan Hubicka  <jh@suse.cz>
+ 
+ 	Backported from master:
+ 	2024-09-03  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* config/i386/x86-tune.def (X86_TUNE_AVOID_128FMA_CHAINS): Enable for
+ 	znver5.
+ 	(X86_TUNE_AVOID_256FMA_CHAINS): Likewise.
+ 	(X86_TUNE_AVOID_512FMA_CHAINS): Likewise.
+ 
+ 2024-09-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-07-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	* config/i386/x86-tune-costs.h (znver5_cost): Update unaligned
+ 	load and store cost from the aligned costs.
+ 
+ 2024-09-28  Jan Hubicka  <jh@suse.cz>
+ 
+ 	Backported from master:
+ 	2024-03-18  Jan Hubicka  <jh@suse.cz>
+ 		    Karthiban Anbazhagan  <Karthiban.Anbazhagan@amd.com>
+ 
+ 	* common/config/i386/cpuinfo.h (get_amd_cpu): Recognize znver5.
+ 	* common/config/i386/i386-common.cc (processor_names): Add znver5.
+ 	(processor_alias_table): Likewise.
+ 	* common/config/i386/i386-cpuinfo.h (processor_types): Add new zen
+ 	family.
+ 	(processor_subtypes): Add znver5.
+ 	* config.gcc (x86_64-*-* |...): Likewise.
+ 	* config/i386/driver-i386.cc (host_detect_local_cpu): Let
+ 	march=native detect znver5 cpu's.
+ 	* config/i386/i386-c.cc (ix86_target_macros_internal): Add
+ 	znver5.
+ 	* config/i386/i386-options.cc (m_ZNVER5): New definition
+ 	(processor_cost_table): Add znver5.
+ 	* config/i386/i386.cc (ix86_reassociation_width): Likewise.
+ 	* config/i386/i386.h (processor_type): Add PROCESSOR_ZNVER5
+ 	(PTA_ZNVER5): New definition.
+ 	* config/i386/i386.md (define_attr "cpu"): Add znver5.
+ 	(Scheduling descriptions) Add znver5.md.
+ 	* config/i386/x86-tune-costs.h (znver5_cost): New definition.
+ 	* config/i386/x86-tune-sched.cc (ix86_issue_rate): Add znver5.
+ 	(ix86_adjust_cost): Likewise.
+ 	* config/i386/x86-tune.def (avx512_move_by_pieces): Add m_ZNVER5.
+ 	(avx512_store_by_pieces): Add m_ZNVER5.
+ 	* doc/extend.texi: Add znver5.
+ 	* doc/invoke.texi: Likewise.
+ 	* config/i386/znver4.md: Rename to zn4zn5.md; combine znver4 and znver5 Scheduler.
+ 	* config/i386/zn4zn5.md: New file.
+ 
+ 2024-09-28  Jan Hubicka  <jh@suse.cz>
+ 
+ 	Backported from master:
+ 	2024-05-14  Jan Hubicka  <jh@suse.cz>
+ 
+ 	PR ipa/113291
+ 	* ipa-inline.cc (enum can_inline_edge_by_limits_flags): New enum.
+ 	(can_inline_edge_by_limits_p): Take flags instead of multiple bools; add flag
+ 	for forcing inlinie limits.
+ 	(can_early_inline_edge_p): Update.
+ 	(want_inline_self_recursive_call_p): Update; use FORCE_LIMITS mode.
+ 	(check_callers): Update.
+ 	(update_caller_keys): Update.
+ 	(update_callee_keys): Update.
+ 	(recursive_inlining): Update.
+ 	(add_new_edges_to_heap): Update.
+ 	(speculation_useful_p): Update.
+ 	(inline_small_functions): Clear DECL_DISREGARD_INLINE_LIMITS on self recursion.
+ 	(flatten_function): Update.
+ 	(inline_to_all_callers_1): Update.
+ 
+ 2024-09-28  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	Backported from master:
+ 	2024-09-25  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/116839
+ 	* config/i386/i386.cc (ix86_rewrite_tls_address_1): Make it
+ 	static.  Return if TLS address is thread register plus an integer
+ 	register.
+ 
+ 2024-09-27  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-09-13  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	PR target/115860
+ 	* config/s390/s390.cc (print_operand): Remove operand specifier
+ 	%V.
+ 	* config/s390/s390.md (UNSPEC_TF_TO_FPRX2): New.
+ 	* config/s390/vector.md (*tf_to_fprx2_0): Remove.
+ 	(*tf_to_fprx2_1): Remove.
+ 	(tf_to_fprx2): New.
+ 
+ 2024-09-27  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-09-13  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	* config/s390/s390.cc (s390_mem_constraint): Check displacement
+ 	for AQ and AR constraints.
+ 
+ 2024-09-22  John David Anglin  <danglin@gcc.gnu.org>
+ 
+ 	* config/pa/pa.h (GENERAL_REGNO_P): Define.
+ 	* config/pa/pa.md: Add SImode and SFmode peephole2
+ 	patterns to generate loads and stores with long
+ 	displacements.
+ 
+ 2024-09-20  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* ipa-modref.cc (modref_eaf_analysis::analyze_ssa_name): Always
+ 	process both the load and the store of a memory copy operation.
+ 
+ 2024-09-20  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-09-12  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	* config/s390/s390-protos.h (s390_gen_lowpart_subreg): Remove.
+ 	* config/s390/s390.cc (s390_gen_lowpart_subreg): Remove.
+ 	(s390_expand_insv): Use adjust_address() and emit a
+ 	strict_low_part only in case of a natural subreg.
+ 	* config/s390/s390.md: Use gen_lowpart() instead of
+ 	s390_gen_lowpart_subreg().
+ 
+ 2024-09-19  Haochen Jiang  <haochen.jiang@intel.com>
+ 
+ 	* doc/invoke.texi: Add corei7, corei7-avx, core-avx-i,
+ 	core-avx2, atom, slm and emerarldrapids. Reorder the -march
+ 	documentation by splitting them into date-to-now products, P-core,
+ 	E-core and Xeon Phi. Refine the product names in documentation.
+ 
+ 2024-09-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-07-24  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/116057
+ 	* tree-ssa-ccp.cc (likely_value): Also walk CTORs in stmt
+ 	operands to look for constants.
+ 
+ 2024-09-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-07-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/115841
+ 	* tree-vect-loop.cc (vect_transform_cycle_phi): Correctly
+ 	place the partial vector reduction for the accumulator
+ 	re-use when the main loop cannot be skipped but the
+ 	epilogue can.
+ 
+ 2024-09-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-06-30  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/115701
+ 	* tree-ssanames.cc (maybe_duplicate_ssa_info_at_copy):
+ 	Only copy info from within the same BB.
+ 
+ 2024-09-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-06-30  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/115701
+ 	* tree-ssanames.h (maybe_duplicate_ssa_info_at_copy): Declare.
+ 	* tree-ssanames.cc (maybe_duplicate_ssa_info_at_copy): New
+ 	function, split out from ...
+ 	* tree-ssa-copy.cc (fini_copy_prop): ... here.
+ 	* tree-ssa-sccvn.cc (eliminate_dom_walker::eliminate_stmt): ...
+ 	and here.
+ 
+ 2024-09-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-07-01  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/115694
+ 	* tree-ssa-forwprop.cc (pass_forwprop::execute): Check the
+ 	store is complex before rewriting it.
+ 
+ 2024-09-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-06-27  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/115669
+ 	* tree-vect-slp.cc (vect_build_slp_tree_2): Do not reassociate
+ 	chains that participate in a reduction.
+ 
+ 2024-09-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-06-26  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/115646
+ 	* tree-call-cdce.cc (check_pow): Check for bit_sz values
+ 	as allowed by transform.
+ 
+ 2024-09-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-05-31  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/115278
+ 	* tree-if-conv.cc (ifcvt_local_dce): Do not DSE volatile stores.
+ 
+ 2024-09-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-05-23  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/115197
+ 	* tree-loop-distribution.cc (copy_loop_before): Constant PHI
+ 	args remain the same.
+ 
+ 2024-09-15  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	Backported from master:
+ 	2024-09-08  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/116621
+ 	* config/i386/i386.cc (ix86_gimplify_va_arg): Don't use temp for
+ 	a PARALLEL BLKmode container of an EXPR_LIST expression in a
+ 	TImode register.
+ 
+ 2024-09-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-08-09  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/116287
+ 	* config/i386/i386.cc (ix86_fold_builtin) <case IX86_BUILTIN_BEXTR32>:
+ 	When folding into zero without checking whether first argument is
+ 	constant, use omit_one_operand.
+ 	(ix86_fold_builtin) <case IX86_BUILTIN_BZHI32>: Likewise.
+ 
+ 2024-09-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-07-23  Jakub Jelinek  <jakub@redhat.com>
+ 		    Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR tree-optimization/116034
+ 	* tree-ssa.cc (maybe_rewrite_mem_ref_base): Only use IMAGPART_EXPR
+ 	if MEM_REF offset is equal to element type size.
+ 
+ 2024-09-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-07-17  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/115527
+ 	* gimple-fold.cc (clear_padding_flush): Introduce endsize
+ 	variable and use it instead of wordsize when comparing it against
+ 	nonzero_last.
+ 	(clear_padding_type): Increment off by sz.
+ 
+ 2024-09-09  Haochen Jiang  <haochen.jiang@intel.com>
+ 
+ 	PR target/116617
+ 	* doc/invoke.texi: Add meteorlake, raptorlake and lunarlake.
+ 
+ 2024-09-05  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	Backported from master:
+ 	2024-09-03  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR ipa/116410
+ 	* ipa-modref.cc (analyze_parms): Always analyze function parameter
+ 	for LTO.
+ 
+ 2024-09-05  Tejas Belagod  <tejas.belagod@arm.com>
+ 
+ 	Backported from master:
+ 	2024-02-16  Tejas Belagod  <tejas.belagod@arm.com>
+ 
+ 	PR target/113780
+ 	* config/arm/arm.cc (arm_function_ok_for_sibcall): Don't allow tailcalls
+ 	for indirect calls with 4 or more arguments in pac-enabled functions.
+ 
+ 2024-09-03  Haochen Jiang  <haochen.jiang@intel.com>
+ 
+ 	* config/i386/avx512fp16intrin.h
+ 	(_mm512_mask_fpclass_ph_mask): Correct mask type to __mmask32.
+ 	(_mm512_fpclass_ph_mask): Ditto.
+ 
+ 2024-09-03  Vineet Gupta  <vineetg@rivosinc.com>
+ 
+ 	* config/riscv/riscv.cc (riscv_promote_function_mode): Fix mode
+ 	returned for libcall case.
+ 
+ 2024-09-02  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	Backported from master:
+ 	2024-08-30  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/116512
+ 	* config/i386/i386.cc (ix86_check_avx_upper_register): Iterate
+ 	subrtx to scan for avx upper register.
+ 	(ix86_check_avx_upper_stores): Inline old
+ 	ix86_check_avx_upper_register.
+ 	(ix86_avx_u128_mode_needed): Ditto, and replace
+ 	FOR_EACH_SUBRTX with call to new
+ 	ix86_check_avx_upper_register.
+ 
+ 2024-08-22  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	Backported from master:
+ 	2024-08-22  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/i386-options.cc (ix86_option_override_internal):
+ 	set ix86_{move_max,store_max} to PVW_AVX256 when TARGET_AVX
+ 	instead of PVW_AVX128.
+ 
+ 2024-08-19  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	Backported from master:
+ 	2024-07-22  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	PR ipa/115277
+ 	* ipa-icf-gimple.cc (func_checker::compare_loops): compare loop
+ 	bounds.
+ 
+ 2024-08-18  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2024-08-18  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/116407
+ 	* config/avr/avr-protos.h (avr_jump_mode): Add an int argument.
+ 	* config/avr/avr.cc (avr_jump_mode): Add an int argument to increase
+ 	the computed jump offset of backwards branches.
+ 	* config/avr/avr.md (*dec-and-branchhi!=-1, *dec-and-branchsi!=-1):
+ 	Increase the jump offset used by avr_jump_mode() as needed.
+ 
+ 2024-08-16  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2024-04-05  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR target/114603
+ 	* config/aarch64/aarch64-sve.md (@aarch64_pred_cnot<mode>): Replace
+ 	with...
+ 	(@aarch64_ptrue_cnot<mode>): ...this, requiring operand 1 to be
+ 	a ptrue.
+ 	(*cnot<mode>): Require operand 1 to be a ptrue.
+ 	* config/aarch64/aarch64-sve-builtins-base.cc (svcnot_impl::expand):
+ 	Use aarch64_ptrue_cnot<mode> for _x operations that are predicated
+ 	with a ptrue.  Represent other _x operations as fully-defined _m
+ 	operations.
+ 
+ 2024-08-16  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2024-04-08  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR target/114607
+ 	* config/aarch64/aarch64-sve-builtins-base.cc
+ 	(svusdot_impl::expand): Fix botched attempt to swap the operands
+ 	for svsudot.
+ 
+ 2024-08-12  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	Backported from master:
+ 	2024-07-30  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/116043
+ 	* config/i386/constraints.md (Bk): Refine to
+ 	define_special_memory_constraint.
+ 
+ 2024-08-06  John David Anglin  <danglin@gcc.gnu.org>
+ 
+ 	PR target/113384
+ 	* config/pa/pa.cc (hppa_legitimize_address): Add check to
+ 	ensure constant is an integral multiple of shift the value.
+ 
+ 2024-08-06  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	Backported from master:
+ 	2024-08-06  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR target/116189
+ 	* config/sh/sh.cc (sh_recog_treg_set_expr): Don't call make_insn_raw,
+ 	make the insn with a fake uid.
+ 
+ 2024-07-30  Haochen Jiang  <haochen.jiang@intel.com>
+ 
+ 	* config/i386/prfchiintrin.h
+ 	(_m_prefetchit0): Add macro for non-optimized option.
+ 	(_m_prefetchit1): Ditto.
+ 
+ 2024-07-29  Haochen Jiang  <haochen.jiang@intel.com>
+ 
+ 	* config/i386/avx512dqintrin.h (_mm_reduce_round_sd): Use
+ 	_mm_setzero_pd instead of _mm_avx512_setzero_pd.
+ 	(_mm_reduce_round_ss): Use _mm_setzero_ps instead of
+ 	_mm_avx512_setzero_ps.
+ 
+ 2024-07-29  Haochen Jiang  <haochen.jiang@intel.com>
+ 
+ 	* config/i386/avx512dqintrin.h
+ 	(_mm_mask_fpclass_ss_mask): Correct operand order.
+ 	(_mm_mask_fpclass_sd_mask): Ditto.
+ 	(_mm256_maskz_reduce_round_ss): Use __builtin_ia32_reducess_mask_round
+ 	instead of __builtin_ia32_reducesd_mask_round.
+ 	(_mm_reduce_round_sd): Use -1 as mask since it is non-mask.
+ 	(_mm_reduce_round_ss): Ditto.
+ 	* config/i386/avx512vlbwintrin.h
+ 	(_mm256_mask_alignr_epi8): Correct operand usage.
+ 	(_mm_mask_alignr_epi8): Ditto.
+ 	* config/i386/avx512vlintrin.h (_mm_mask_alignr_epi64): Ditto.
+ 
+ 2024-07-24  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	Backported from master:
+ 	2024-07-17  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	PR target/114759
+ 	* config/rs6000/rs6000.cc (rs6000_option_override_internal): Disallow
+ 	CPUs and ABIs that do no support the ROP protection insns.
+ 	* config/rs6000/rs6000-logue.cc (rs6000_stack_info): Remove now
+ 	unneeded tests.
+ 	(rs6000_emit_prologue): Likewise.
+ 	Remove unneeded gcc_assert.
+ 	(rs6000_emit_epilogue): Likewise.
+ 	* config/rs6000/rs6000.md: Likewise.
+ 
+ 2024-07-24  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	Backported from master:
+ 	2024-07-17  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	PR target/114759
+ 	* config/rs6000/rs6000-logue.cc (rs6000_stack_info): Use TARGET_POWER8.
+ 	(rs6000_emit_prologue): Likewise.
+ 	* config/rs6000/rs6000.md (hashchk): Likewise.
+ 	(hashst): Likewise.
+ 	Fix whitespace.
+ 
+ 2024-07-24  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	Backported from master:
+ 	2024-06-17  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	PR target/115389
+ 	* config/rs6000/rs6000-logue.cc (rs6000_stack_info): Compute
+ 	rop_hash_save_offset for non-Altivec compiles.
+ 
+ 2024-07-24  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	Backported from master:
+ 	2024-06-08  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-logue.cc (rs6000_stack_info): Update comment.
+ 
+ 2024-07-23  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-07-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/115843
+ 	* config/i386/x86-tune-costs.h (znver4_cost): Update unaligned
+ 	load and store cost from the aligned costs.
+ 
+ 2024-07-23  Haochen Jiang  <haochen.jiang@intel.com>
+ 
+ 	* config/i386/i386.md (prefetchi): Change to %a.
+ 
+ 2024-07-22  Maciej W. Rozycki  <macro@orcam.me.uk>
+ 
+ 	Backported from master:
+ 	2024-06-29  Maciej W. Rozycki  <macro@orcam.me.uk>
+ 
+ 	PR rtl-optimization/115565
+ 	* cse.cc (record_jump_cond): Use INT_MIN rather than -1 for
+ 	`comparison_qty' if !REG_P.
+ 
+ 2024-07-20  Siddhesh Poyarekar  <siddhesh@gotplt.org>
+ 
+ 	Backported from master:
+ 	2024-07-20  Siddhesh Poyarekar  <siddhesh@gotplt.org>
+ 
+ 	* opt-suggestions.cc
+ 	(option_proposer::build_option_suggestions): Pull OPTB
+ 	definition out of the innermost loop.
+ 
+ 2024-07-20  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	* config/s390/3931.md (vlbr, vstbr, vrepi): Remove.
+ 	* config/s390/s390.md (xdee): Add FPRX2 mapping.
+ 	* config/s390/vector.md (bhfgq): Add TF mapping.
+ 
+ 2024-07-20  René Rebe  <rene@exactcode.de>
+ 
+ 	Backported from master:
+ 	2024-07-18  René Rebe  <rene@exactcode.de>
+ 		    Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	PR target/97367
+ 	* config/rs6000/rs6000.cc (rs6000_machine_from_flags): Do not consider
+ 	OPTION_MASK_ALTIVEC.
+ 	(emit_asm_machine): For Altivec compiles, emit a ".machine altivec".
+ 
+ 2024-07-19  LIU Hao  <lh_mouse@126.com>
+ 
+ 	Backported from master:
+ 	2024-07-18  LIU Hao  <lh_mouse@126.com>
+ 
+ 	PR rtl-optimization/115049
+ 	* varasm.cc (decl_binds_to_current_def_p): Add a check for COMDAT
+ 	declarations too, like weak ones.
+ 
+ 2024-07-17  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	Backported from master:
+ 	2024-07-17  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/115526
+ 	* config/alpha/alpha.md (movdi_er_high_g): Add cannot_copy attribute.
+ 	(movdi_er_tlsgd): Ditto.
+ 	(movdi_er_tlsldm): Ditto.
+ 	(call_value_osf_<tls>): Ditto.
+ 
+ 2024-07-16  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-07-12  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	* config/s390/vector.md (mov<mode>): Fix output template for
+ 	movv1qi.
+ 
+ 2024-07-16  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-07-12  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	* config/s390/s390.md (*icjump_64): Allow raw CC comparisons,
+ 	i.e., any constant integer between 0 and 15 for CC comparisons.
+ 
+ 2024-07-16  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	Backported from master:
+ 	2024-07-15  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	PR target/113719
+ 	* config/i386/i386-options.cc (ix86_option_override_internal):
+ 	Move flag_omit_frame_pointer final overrider...
+ 	(ix86_recompute_optlev_based_flags): ... here.
+ 
+ 2024-07-16  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	Backported from master:
+ 	2024-07-03  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	PR target/113719
+ 	* config/i386/i386-options.cc
+ 	(ix86_override_options_after_change_1): Add opts and opts_set
+ 	parms, operate on them, after factoring out of...
+ 	(ix86_override_options_after_change): ... this.  Restore calls
+ 	of ix86_default_align and ix86_recompute_optlev_based_flags.
+ 	(ix86_option_override_internal): Call the factored-out bits.
+ 
+ 2024-07-15  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	Backported from master:
+ 	2024-07-15  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/115872
+ 	* tree-ssa-ccp.cc (convert_atomic_bit_not): Remove use_stmt after use_nop_stmt is removed.
+ 	(optimize_atomic_bit_test_and): Ditto.
+ 
+ 2024-07-13  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	Backported from master:
+ 	2024-07-12  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	PR target/115752
+ 	* config/loongarch/loongarch.cc
+ 	(loongarch_hard_regno_mode_ok_uncached): Replace
+ 	UNITS_PER_FPVALUE with UNITS_PER_HWFPVALUE.
+ 	* config/loongarch/loongarch.h (UNITS_PER_FPVALUE): Delete.
+ 
+ 2024-07-11  Andre Vieira  <andre.simoesdiasvieira@arm.com>
+ 
+ 	Backported from master:
+ 	2024-07-11  Andre Vieira  <andre.simoesdiasvieira@arm.com>
+ 
+ 	PR target/115611
+ 	* config/arm/mve.md (mve_vec_setv2di_internal): Fix printing of input
+ 	scalar register pair when lane = 1.
+ 
+ 2024-07-10  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	Backported from master:
+ 	2024-07-10  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR middle-end/115836
+ 	* expmed.cc (emit_store_flag_1): Move calculation of
+ 	scode just before its only usage site.
+ 
+ 2024-07-05  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2024-07-05  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/87376
+ 	* config/avr/avr-dimode.md: Use "nop_general_operand" instead
+ 	of "general_operand" as predicate for all input operands.
+ 
+ 2024-07-04  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	Backported from master:
+ 	2024-07-03  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR target/115475
+ 	* config/aarch64/aarch64-c.cc (aarch64_update_cpp_builtins):
+ 	Define __ARM_FEATURE_SVE_BF16 for TARGET_SVE_BF16.
+ 
+ 2024-07-04  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	Backported from master:
+ 	2024-07-03  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR target/115457
+ 	* config/aarch64/aarch64-c.cc (aarch64_update_cpp_builtins):
+ 	Define __ARM_FEATURE_BF16 for TARGET_BF16_FP.
+ 
+ 2024-07-03  John David Anglin  <danglin@gcc.gnu.org>
+ 
+ 	PR target/115691
+ 	* config/pa/pa.md: Remove incorrect xmpyu patterns.
+ 
+ 2024-07-03  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2024-07-03  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/98762
+ 	* config/avr/avr.cc (avr_out_movqi_r_mr_reg_disp_tiny): Properly
+ 	restore the base register when it is partially clobbered.
+ 
+ 2024-07-03  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	Backported from master:
+ 	2024-06-26  Kewen Lin  <linkw@linux.ibm.com>
+ 		    Xionghu Luo  <xionghuluo@tencent.com>
+ 
+ 	PR target/106069
+ 	PR target/115355
+ 	* config/rs6000/altivec.md (altivec_vmrghh_direct): Rename to ...
+ 	(altivec_vmrghh_direct_be): ... this.  Add condition BYTES_BIG_ENDIAN.
+ 	(altivec_vmrghh_direct_le): New define_insn.
+ 	(altivec_vmrglh_direct): Rename to ...
+ 	(altivec_vmrglh_direct_be): ... this.  Add condition BYTES_BIG_ENDIAN.
+ 	(altivec_vmrglh_direct_le): New define_insn.
+ 	(altivec_vmrghh): Adjust by calling gen_altivec_vmrghh_direct_be
+ 	for BE and gen_altivec_vmrglh_direct_le for LE.
+ 	(altivec_vmrglh): Adjust by calling gen_altivec_vmrglh_direct_be
+ 	for BE and gen_altivec_vmrghh_direct_le for LE.
+ 	(vec_widen_umult_hi_v16qi): Adjust the call to
+ 	gen_altivec_vmrghh_direct by gen_altivec_vmrghh for BE
+ 	and by gen_altivec_vmrglh for LE.
+ 	(vec_widen_smult_hi_v16qi): Likewise.
+ 	(vec_widen_umult_lo_v16qi): Adjust the call to
+ 	gen_altivec_vmrglh_direct by gen_altivec_vmrglh for BE
+ 	and by gen_altivec_vmrghh for LE.
+ 	(vec_widen_smult_lo_v16qi): Likewise.
+ 	* config/rs6000/rs6000.cc (altivec_expand_vec_perm_const): Replace
+ 	CODE_FOR_altivec_vmrghh_direct by
+ 	CODE_FOR_altivec_vmrghh_direct_be for BE and
+ 	CODE_FOR_altivec_vmrghh_direct_le for LE.  And replace
+ 	CODE_FOR_altivec_vmrglh_direct by
+ 	CODE_FOR_altivec_vmrglh_direct_be for BE and
+ 	CODE_FOR_altivec_vmrglh_direct_le for LE.
+ 
+ 2024-07-03  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	Backported from master:
+ 	2024-06-26  Kewen Lin  <linkw@linux.ibm.com>
+ 		    Xionghu Luo  <xionghuluo@tencent.com>
+ 
+ 	PR target/106069
+ 	PR target/115355
+ 	* config/rs6000/altivec.md (altivec_vmrghb_direct): Rename to ...
+ 	(altivec_vmrghb_direct_be): ... this.  Add condition BYTES_BIG_ENDIAN.
+ 	(altivec_vmrghb_direct_le): New define_insn.
+ 	(altivec_vmrglb_direct): Rename to ...
+ 	(altivec_vmrglb_direct_be): ... this.  Add condition BYTES_BIG_ENDIAN.
+ 	(altivec_vmrglb_direct_le): New define_insn.
+ 	(altivec_vmrghb): Adjust by calling gen_altivec_vmrghb_direct_be
+ 	for BE and gen_altivec_vmrglb_direct_le for LE.
+ 	(altivec_vmrglb): Adjust by calling gen_altivec_vmrglb_direct_be
+ 	for BE and gen_altivec_vmrghb_direct_le for LE.
+ 	* config/rs6000/rs6000.cc (altivec_expand_vec_perm_const): Replace
+ 	CODE_FOR_altivec_vmrghb_direct by
+ 	CODE_FOR_altivec_vmrghb_direct_be for BE and
+ 	CODE_FOR_altivec_vmrghb_direct_le for LE.  And replace
+ 	CODE_FOR_altivec_vmrglb_direct by
+ 	CODE_FOR_altivec_vmrglb_direct_be for BE and
+ 	CODE_FOR_altivec_vmrglb_direct_le for LE.
+ 
+ 2024-07-01  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2024-07-01  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/88236
+ 	PR target/115726
+ 	* config/avr/avr.md (mov<mode>) [avr_mem_memx_p]: Expand in such a
+ 	way that the destination does not overlap with any hard register
+ 	clobbered / used by xload8qi_A resp. xload<mode>_A.
+ 	* config/avr/avr.cc (avr_out_xload): Avoid early-clobber
+ 	situation for Z by executing just one load when the output register
+ 	overlaps with Z.
+ 
+ 2024-06-28  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	Backported from master:
+ 	2024-06-21  Kewen Lin  <linkw@linux.ibm.com>
+ 		    Xionghu Luo  <xionghuluo@tencent.com>
+ 
+ 	PR target/106069
+ 	PR target/115355
+ 	* config/rs6000/altivec.md (altivec_vmrghw_direct_<VSX_W:mode>): Rename
+ 	to ...
+ 	(altivec_vmrghw_direct_<VSX_W:mode>_be): ... this.  Add the condition
+ 	BYTES_BIG_ENDIAN.
+ 	(altivec_vmrghw_direct_<VSX_W:mode>_le): New define_insn.
+ 	(altivec_vmrglw_direct_<VSX_W:mode>): Rename to ...
+ 	(altivec_vmrglw_direct_<VSX_W:mode>_be): ... this.  Add the condition
+ 	BYTES_BIG_ENDIAN.
+ 	(altivec_vmrglw_direct_<VSX_W:mode>_le): New define_insn.
+ 	(altivec_vmrghw): Adjust by calling gen_altivec_vmrghw_direct_v4si_be
+ 	for BE and gen_altivec_vmrglw_direct_v4si_le for LE.
+ 	(altivec_vmrglw): Adjust by calling gen_altivec_vmrglw_direct_v4si_be
+ 	for BE and gen_altivec_vmrghw_direct_v4si_le for LE.
+ 	(vec_widen_umult_hi_v8hi): Adjust the call to
+ 	gen_altivec_vmrghw_direct_v4si by gen_altivec_vmrghw for BE
+ 	and by gen_altivec_vmrglw for LE.
+ 	(vec_widen_smult_hi_v8hi): Likewise.
+ 	(vec_widen_umult_lo_v8hi): Adjust the call to
+ 	gen_altivec_vmrglw_direct_v4si by gen_altivec_vmrglw for BE
+ 	and by gen_altivec_vmrghw for LE
+ 	(vec_widen_smult_lo_v8hi): Likewise.
+ 	* config/rs6000/rs6000.cc (altivec_expand_vec_perm_const): Replace
+ 	CODE_FOR_altivec_vmrghw_direct_v4si by
+ 	CODE_FOR_altivec_vmrghw_direct_v4si_be for BE and
+ 	CODE_FOR_altivec_vmrghw_direct_v4si_le for LE.  And replace
+ 	CODE_FOR_altivec_vmrglw_direct_v4si by
+ 	CODE_FOR_altivec_vmrglw_direct_v4si_be for BE and
+ 	CODE_FOR_altivec_vmrglw_direct_v4si_le for LE.
+ 	* config/rs6000/vsx.md (vsx_xxmrghw_<VSX_W:mode>): Adjust by calling
+ 	gen_altivec_vmrghw_direct_v4si_be for BE and
+ 	gen_altivec_vmrglw_direct_v4si_le for LE.
+ 	(vsx_xxmrglw_<VSX_W:mode>): Adjust by calling
+ 	gen_altivec_vmrglw_direct_v4si_be for BE and
+ 	gen_altivec_vmrghw_direct_v4si_le for LE.
+ 
+ 2024-06-27  Wilco Dijkstra  <wilco.dijkstra@arm.com>
+ 
+ 	Backported from master:
+ 	2023-11-30  Wilco Dijkstra  <wilco.dijkstra@arm.com>
+ 
+ 	PR target/103100
+ 	* config/aarch64/aarch64.md (cpymemdi): Remove pattern condition.
+ 	(setmemdi): Likewise.
+ 	* config/aarch64/aarch64.cc (aarch64_expand_cpymem): Support
+ 	strict-align.  Cleanup condition for using MOPS.
+ 	(aarch64_expand_setmem): Likewise.
+ 
+ 2024-06-27  Andrew Carlotti  <andrew.carlotti@arm.com>
+ 
+ 	Backported from master:
+ 	2023-12-16  Andrew Carlotti  <andrew.carlotti@arm.com>
+ 
+ 	PR target/115618
+ 	* common/config/aarch64/aarch64-common.cc
+ 	(aarch64_get_extension_string_for_isa_flags): Fix generation of
+ 	the "+nocrypto" extension.
+ 	* config/aarch64/aarch64.h (AARCH64_ISA_CRYPTO): Remove.
+ 	(TARGET_CRYPTO): Remove.
+ 	* config/aarch64/aarch64-c.cc (aarch64_update_cpp_builtins):
+ 	Don't use TARGET_CRYPTO.
+ 
+ 2024-06-27  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	* config/aarch64/aarch64-cores.def (grace): New entry.
+ 	* config/aarch64/aarch64-tune.md: Regenerate.
+ 	* doc/invoke.texi (AArch64 Options): Document the above.
+ 
+ 2024-06-24  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	Backported from master:
+ 	2024-05-29  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	PR target/114846
+ 	* config/rs6000/rs6000-logue.cc (rs6000_emit_epilogue): As
+ 	EPILOGUE_TYPE_EH_RETURN would be passed as epilogue_type directly
+ 	now, adjust the relevant handlings on it.
+ 	* config/rs6000/rs6000.md (eh_return expander): Append by calling
+ 	gen_eh_return_internal and emit_barrier.
+ 	(eh_return_internal): New define_insn_and_split, call function
+ 	rs6000_emit_epilogue with epilogue type EPILOGUE_TYPE_EH_RETURN.
+ 
+ 2024-06-20  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-06-17  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR driver/115440
+ 	* opts-common.cc (add_misspelling_candidates): If opt1 is non-NULL,
+ 	add a space and opt1 to the alternative suggestion text.
+ 
+ 2024-06-12  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	Backported from master:
+ 	2024-06-12  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 		    Yvan ROUX  <yvan.roux@foss.st.com>
+ 
+ 	PR target/115253
+ 	* config/arm/arm.cc (cmse_nonsecure_call_inline_register_clear):
+ 	Sign extend for Thumb1.
+ 	(thumb1_expand_prologue): Add zero/sign extend.
+ 
+ 2024-06-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-06-04  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/115337
+ 	* fold-const.cc (tree_call_nonnegative_warnv_p) <CASE_CFN_CLZ>:
+ 	If fn is CFN_CLZ, use CLZ_DEFINED_VALUE_AT.
+ 
+ 2024-06-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-06-04  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/108789
+ 	* builtins.cc (fold_builtin_arith_overflow): For ovf_only,
+ 	don't call save_expr and don't build REALPART_EXPR, otherwise
+ 	set TREE_SIDE_EFFECTS on call before calling save_expr.
+ 
+ 2024-06-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-06-04  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* doc/invoke.texi (lujiazui): Clarify that while the CPUs do support
+ 	AVX and F16C, -march=lujiazui actually doesn't enable those.
+ 
+ 2024-06-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-06-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/115324
+ 	* config/rs6000/rs6000-gen-builtins.cc (write_decls): Remove
+ 	GTY markup from struct bifdata and struct ovlddata and remove their
+ 	fntype members.  Change next member in struct ovlddata and
+ 	first_instance member of struct ovldrecord to have int type rather
+ 	than struct ovlddata *.  Remove GTY markup from rs6000_builtin_info
+ 	and rs6000_instance_info arrays, declare new
+ 	rs6000_builtin_info_fntype and rs6000_instance_info_fntype arrays,
+ 	which have GTY markup.
+ 	(write_bif_static_init): Adjust for the above changes.
+ 	(write_ovld_static_init): Likewise.
+ 	(write_init_bif_table): Likewise.
+ 	(write_init_ovld_table): Likewise.
+ 	* config/rs6000/rs6000-builtin.cc (rs6000_init_builtins): Likewise.
+ 	* config/rs6000/rs6000-c.cc (find_instance): Likewise.  Make static.
+ 	(altivec_resolve_overloaded_builtin): Adjust for the above changes.
+ 
+ 2024-06-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-05-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/114902
+ 	PR rtl-optimization/115092
+ 	* combine.cc (simplify_compare_const): Don't optimize
+ 	GE op0 SIGNED_MIN or LT op0 SIGNED_MIN into NE op0 const0_rtx or
+ 	EQ op0 const0_rtx.
+ 
+ 2024-06-07  Jan Hubicka  <jh@suse.cz>
+ 
+ 	Backported from master:
+ 	2023-12-29  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* config/i386/x86-tune.def (X86_TUNE_AVOID_128FMA_CHAINS,
+ 	X86_TUNE_AVOID_256FMA_CHAINS): Enable for znver4 and Core.
+ 
+ 2024-06-03  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	Backported from master:
+ 	2024-05-31  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/115297
+ 	* config/alpha/alpha.md (<any_divmod:code>si3): Wrap DImode
+ 	operands 3 and 4 with truncate:SI RTX.
+ 	(*divmodsi_internal_er): Ditto for operands 1 and 2.
+ 	(*divmodsi_internal_er_1): Ditto.
+ 	(*divmodsi_internal): Ditto.
+ 	* config/alpha/constraints.md ("b"): Correct register
+ 	number in the description.
+ 
+ 2024-06-01  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2024-06-01  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR tree-optimization/115307
+ 	* config/avr/avr.md (SFDF): New mode iterator.
+ 	(isinf<mode>2) [sf, df]: New expanders.
+ 
+ 2024-05-31  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2024-01-29  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR target/113281
+ 	* tree-vect-patterns.cc (vect_recog_over_widening_pattern): Remove
+ 	workaround for right shifts.
+ 	(vect_truncatable_operation_p): Handle NEGATE_EXPR and BIT_NOT_EXPR.
+ 	(vect_determine_precisions_from_range): Be more selective about
+ 	which codes can be narrowed based on their input and output ranges.
+ 	For shifts, require at least one more bit of precision than the
+ 	maximum shift amount.
+ 
+ 2024-05-31  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2024-05-24  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR tree-optimization/115192
+ 	* tree-data-ref.cc (create_intersect_range_checks): Take the
+ 	alignment of the access sizes into account.
+ 
+ 2024-05-31  Hongyu Wang  <hongyu.wang@intel.com>
+ 
+ 	Backported from master:
+ 	2024-05-29  Hongyu Wang  <hongyu.wang@intel.com>
+ 
+ 	PR target/113719
+ 	* config/i386/i386-options.cc (ix86_override_options_after_change):
+ 	Remove call to ix86_default_align and
+ 	ix86_recompute_optlev_based_flags.
+ 	(ix86_option_override_internal): Call ix86_default_align and
+ 	ix86_recompute_optlev_based_flags.
+ 
+ 2024-05-30  YunQiang Su  <syq@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-05-29  YunQiang Su  <syq@gcc.gnu.org>
+ 
+ 	* config/mips/mips.cc(mips16_gp_pseudo_reg): Mark
+ 	MIPS16_PIC_TEMP and MIPS_PROLOGUE_TEMP clobbered.
+ 	(mips_emit_call_insn): Mark MIPS16_PIC_TEMP and
+ 	MIPS_PROLOGUE_TEMP clobbered if MIPS16 and CALL_CLOBBERED_GP.
+ 
+ 2024-05-22  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-05-22  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/115152
+ 	* tree-ssa-strlen.cc (strlen_pass::count_nonzero_bytes_addr): If
+ 	!si->full_string_p, clear *nulterm and set maxlen to nbytes.
+ 
+ 2024-05-22  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-05-22  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR sanitizer/115172
+ 	* ubsan.cc (instrument_bool_enum_load): If rhs is not in generic
+ 	address space, use qualified version of utype with the right
+ 	address space.  Formatting fix.
+ 
+ 2024-05-21  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	Backported from master:
+ 	2024-05-20  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR tree-optimization/115143
+ 	* tree-ssa-phiopt.cc (minmax_replacement): Check for empty
+ 	phi nodes for middle bbs for the case where middle bb is not empty.
+ 
+ 2024-05-21  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	Backported from master:
+ 	2024-05-21  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR tree-optimization/115154
+ 	* match.pd (convert (mult zero_one_valued_p@1 INTEGER_CST@2)): Disable
+ 	for 1bit signed types.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/gcc/DATESTAMP gcc-13.4.0/gcc/DATESTAMP
*** gcc-13.3.0/gcc/DATESTAMP	Tue May 21 07:47:37 2024
--- gcc-13.4.0/gcc/DATESTAMP	Thu Jun  5 16:02:58 2025
***************
*** 1 ****
! 20240521
--- 1 ----
! 20250605
diff -Nrcpad gcc-13.3.0/gcc/Makefile.in gcc-13.4.0/gcc/Makefile.in
*** gcc-13.3.0/gcc/Makefile.in	Tue May 21 07:47:37 2024
--- gcc-13.4.0/gcc/Makefile.in	Thu Jun  5 16:02:58 2025
*************** OBJS = \
*** 1633,1638 ****
--- 1633,1639 ----
  	ubsan.o \
  	sanopt.o \
  	sancov.o \
+ 	tree-assume.o \
  	tree-call-cdce.o \
  	tree-cfg.o \
  	tree-cfgcleanup.o \
diff -Nrcpad gcc-13.3.0/gcc/ada/ChangeLog gcc-13.4.0/gcc/ada/ChangeLog
*** gcc-13.3.0/gcc/ada/ChangeLog	Tue May 21 07:47:37 2024
--- gcc-13.4.0/gcc/ada/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,164 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
+ 2025-04-30  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/112958
+ 	* Makefile.rtl (LIBGNAT_TARGET_PAIRS) [x86 FreeBSD]: Add specific
+ 	version of s-dorepr.adb.
+ 	* libgnat/s-dorepr__freebsd.adb: New file.
+ 
+ 2025-04-04  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* libgnat/a-ngcoar.adb (Eigensystem): Adjust notation and fix the
+ 	layout of the real symmetric matrix in the main comment.  Adjust
+ 	the layout of the associated code accordingly and correctly turn
+ 	the 2Nx1 real vectors into Nx1 complex ones.
+ 	(Eigenvalues): Minor similar tweaks.
+ 	* libgnat/a-ngrear.adb (Jacobi): Minor tweaks in the main comment.
+ 	Adjust notation and corresponding parameter names of functions.
+ 	Fix call to Unit_Matrix routine.  Adjust the comment describing
+ 	the various kinds of iterations to match the implementation.
+ 
+ 2025-03-19  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/decl.cc (gnat_to_gnu_entity) <E_Record_Subtype>: Set
+ 	the may_alias attribute if a specific GCC type is built.
+ 
+ 2025-03-19  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gen_il-gen-gen_nodes.adb (N_Formal_Package_Declaration): Use
+ 	N_Declaration instead of Node_Kind as ancestor.
+ 	* sem_ch12.adb (Get_Formal_Entity): Remove obsolete alternative.
+ 	(Instantiate_Formal_Package): Take into account the abbreviated
+ 	instances in the main loop running over the actuals of the local
+ 	package created for the formal package.
+ 
+ 2025-02-01  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/118712
+ 	* sem_warn.adb (Check_References): Deal with small adjustments of
+ 	references.
+ 
+ 2025-01-06  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* exp_aggr.adb (Two_Pass_Aggregate_Expansion): Use the base type of
+ 	the index type to find the type used to compute the length.
+ 
+ 2025-01-05  Estevan Castilho (Tevo)  <estevan.cps@gmail.com>
+ 
+ 	* libgnarl/s-taprop__dummy.adb: Remove use clause for
+ 	System.Parameters.
+ 	(Unlock): Remove Global_Lock formal parameter.
+ 	(Write_Lock): Likewise.
+ 
+ 2024-12-16  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/trans.cc (get_atomic_access): Deal specifically with
+ 	nodes that are both Atomic and Volatile_Full_Access in Ada 2012.
+ 
+ 2024-12-12  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/117996
+ 	* libgnat/a-ngrear.adb (Jacobi): Remove default value for
+ 	Compute_Vectors formal parameter.
+ 	(Sort_Eigensystem): Add Compute_Vectors formal parameter.  Do not
+ 	modify the Vectors if Compute_Vectors is False.
+ 	(Eigensystem): Pass True as Compute_Vectors to Sort_Eigensystem.
+ 	(Eigenvalues): Pass False as Compute_Vectors to Sort_Eigensystem.
+ 
+ 2024-11-26  Arsen Arsenović  <arsen@aarsen.me>
+ 
+ 	Backported from master:
+ 	2024-08-19  Arsen Arsenović  <arsen@aarsen.me>
+ 
+ 	PR ada/115917
+ 	* gnatvsn.ads: Add note about the duplication of this value in
+ 	version.c.
+ 	* version.c (VER_LEN_MAX): Define to the same value as
+ 	Gnatvsn.Ver_Len_Max.
+ 	(gnat_version_string): Use VER_LEN_MAX as bound.
+ 
+ 2024-11-12  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/117328
+ 	* exp_aggr.adb (Two_Pass_Aggregate_Expansion): Use a type sized
+ 	from the index type to compute the length.  Simplify and remove
+ 	useless calls to New_Copy_Tree for this computation.
+ 
+ 2024-11-12  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/113868
+ 	* par-ch6.adb (P_Subprogram) <Scan_Body_Or_Expression_Function>:
+ 	Add delta aggregate alongside the other forms of aggregates.
+ 
+ 2024-11-04  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* checks.adb (Selected_Length_Checks.Get_E_Length): For a
+ 	component of a record with discriminants and if the expression is
+ 	a selected component, try to build an actual subtype from its
+ 	prefix instead of from the discriminal.
+ 
+ 2024-10-25  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/116551
+ 	* gcc-interface/trans.cc (node_is_atomic) <N_Identifier>: Return
+ 	false if the type of the entity is an unconstrained array type.
+ 	(node_is_volatile_full_access) <N_Identifier>: Likewise.
+ 
+ 2024-10-14  Steve Baird  <baird@adacore.com>
+ 
+ 	PR ada/114593
+ 	* sem_res.adb (Valid_Conversion): Test In_Instance instead of
+ 	In_Instance_Body.
+ 
+ 2024-10-09  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/115535
+ 	* exp_put_image.adb: Remove clauses for Sem_Aux.
+ 
+ 2024-10-08  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* exp_aggr.ads (Is_Two_Pass_Aggregate): New function declaration.
+ 	* exp_aggr.adb (Is_Two_Pass_Aggregate): New function body.
+ 	(Expand_Array_Aggregate): Call Is_Two_Pass_Aggregate to detect the
+ 	aggregates that need the 2-pass expansion.
+ 	* exp_ch3.adb (Expand_Freeze_Array_Type): In the anonymous array
+ 	case, build the initialization procedure if the initial value in
+ 	the object declaration is a 2-pass aggregate.
+ 
+ 2024-10-08  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/115535
+ 	* exp_put_image.adb (Build_Elementary_Put_Image_Call): Use the size
+ 	of the underlying type to find the support type.
+ 
+ 2024-10-08  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/114640
+ 	* exp_util.adb (Find_Hook_Context): For a node present within a
+ 	conditional expression, do not return an N_Elsif_Part node.
+ 
+ 2024-10-08  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/114636
+ 	* sem_ch12.adb (Check_Formal_Package_Instance): For a defaulted
+ 	formal discrete type, skip the generated implicit base type.
+ 
+ 2024-06-10  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/114708
+ 	* exp_util.adb (Finalize_Address): Add guard for incomplete types.
+ 
+ 2024-06-10  Javier Miranda  <miranda@adacore.com>
+ 
+ 	* sem_ch6.adb (Might_Need_BIP_Task_Actuals): Add support
+ 	for access-to-subprogram parameter types.
+ 	* exp_ch6.adb (Add_Task_Actuals_To_Build_In_Place_Call):
+ 	Add dummy BIP parameters to access-to-subprogram types
+ 	that may reference a function that has BIP parameters.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/gcc/ada/Makefile.rtl gcc-13.4.0/gcc/ada/Makefile.rtl
*** gcc-13.3.0/gcc/ada/Makefile.rtl	Tue May 21 07:47:37 2024
--- gcc-13.4.0/gcc/ada/Makefile.rtl	Thu Jun  5 16:02:58 2025
*************** ifeq ($(strip $(filter-out %86 freebsd%,
*** 1721,1726 ****
--- 1721,1727 ----
    $(TRASYM_DWARF_UNIX_PAIRS) \
    $(ATOMICS_TARGET_PAIRS) \
    $(X86_TARGET_PAIRS) \
+   s-dorepr.adb<libgnat/s-dorepr__freebsd.adb \
    system.ads<libgnat/system-freebsd.ads
  
    GNATLIB_SHARED = gnatlib-shared-dual
diff -Nrcpad gcc-13.3.0/gcc/ada/checks.adb gcc-13.4.0/gcc/ada/checks.adb
*** gcc-13.3.0/gcc/ada/checks.adb	Tue May 21 07:47:37 2024
--- gcc-13.4.0/gcc/ada/checks.adb	Thu Jun  5 16:02:58 2025
*************** package body Checks is
*** 9779,9785 ****
           if Ekind (Scope (E)) = E_Record_Type
             and then Has_Discriminants (Scope (E))
           then
!             N := Build_Discriminal_Subtype_Of_Component (E);
  
              if Present (N) then
                 Insert_Action (Expr, N);
--- 9779,9793 ----
           if Ekind (Scope (E)) = E_Record_Type
             and then Has_Discriminants (Scope (E))
           then
!             --  If the expression is a selected component, in other words,
!             --  has a prefix, then build an actual subtype from the prefix.
!             --  Otherwise, build an actual subtype from the discriminal.
! 
!             if Nkind (Expr) = N_Selected_Component then
!                N := Build_Actual_Subtype_Of_Component (E, Expr);
!             else
!                N := Build_Discriminal_Subtype_Of_Component (E);
!             end if;
  
              if Present (N) then
                 Insert_Action (Expr, N);
diff -Nrcpad gcc-13.3.0/gcc/ada/exp_aggr.adb gcc-13.4.0/gcc/ada/exp_aggr.adb
*** gcc-13.3.0/gcc/ada/exp_aggr.adb	Tue May 21 07:47:37 2024
--- gcc-13.4.0/gcc/ada/exp_aggr.adb	Thu Jun  5 16:02:58 2025
*************** package body Exp_Aggr is
*** 6480,6486 ****
--- 6480,6490 ----
           Comp_Type  : constant Entity_Id := Etype (N);
           Index_Id   : constant Entity_Id := Make_Temporary (Loc, 'I', N);
           Index_Type : constant Entity_Id := Etype (First_Index (Etype (N)));
+          Index_Base : constant Entity_Id := Base_Type (Index_Type);
           Size_Id    : constant Entity_Id := Make_Temporary (Loc, 'I', N);
+          Size_Type  : constant Entity_Id :=
+                         Integer_Type_For
+                           (Esize (Index_Base), Is_Unsigned_Type (Index_Base));
           TmpE       : constant Entity_Id := Make_Temporary (Loc, 'A', N);
  
           Assoc    : Node_Id := First (Component_Associations (N));
*************** package body Exp_Aggr is
*** 6496,6502 ****
           Size_Expr_Code := New_List (
             Make_Object_Declaration (Loc,
               Defining_Identifier => Size_Id,
!              Object_Definition   => New_Occurrence_Of (Standard_Integer, Loc),
               Expression          => Make_Integer_Literal (Loc, 0)));
  
           --  First pass: execute the iterators to count the number of elements
--- 6500,6506 ----
           Size_Expr_Code := New_List (
             Make_Object_Declaration (Loc,
               Defining_Identifier => Size_Id,
!              Object_Definition   => New_Occurrence_Of (Size_Type, Loc),
               Expression          => Make_Integer_Literal (Loc, 0)));
  
           --  First pass: execute the iterators to count the number of elements
*************** package body Exp_Aggr is
*** 6523,6554 ****
  
           Insert_Actions (N, Size_Expr_Code);
  
!          --  Build a constrained subtype with the calculated length
!          --  and declare the proper bounded aggregate object.
           --  The index type is some discrete type, so the bounds of the
!          --  constructed array are computed as T'Val (T'Pos (ineger bound));
  
           declare
              Pos_Lo : constant Node_Id :=
                Make_Attribute_Reference (Loc,
!                 Prefix => New_Occurrence_Of (Index_Type, Loc),
                  Attribute_Name => Name_Pos,
!                 Expressions => New_List (
                    Make_Attribute_Reference (Loc,
                      Prefix => New_Occurrence_Of (Index_Type, Loc),
                      Attribute_Name => Name_First)));
  
              Aggr_Lo : constant Node_Id :=
                 Make_Attribute_Reference (Loc,
!                  Prefix => New_Occurrence_Of (Index_Type, Loc),
!                  Attribute_Name => Name_Val,
!                  Expressions => New_List (New_Copy_Tree (Pos_Lo)));
  
!             --  Hi = Index_type'Pos (Lo + Size -1).
  
              Pos_Hi : constant Node_Id :=
                 Make_Op_Add (Loc,
!                  Left_Opnd => New_Copy_Tree (Pos_Lo),
                   Right_Opnd =>
                     Make_Op_Subtract (Loc,
                       Left_Opnd  => New_Occurrence_Of (Size_Id, Loc),
--- 6527,6561 ----
  
           Insert_Actions (N, Size_Expr_Code);
  
!          --  Build a constrained subtype with the bounds deduced from
!          --  the size computed above and declare the aggregate object.
           --  The index type is some discrete type, so the bounds of the
!          --  constrained subtype are computed as T'Val (integer bounds).
  
           declare
+             --  Pos_Lo := Index_Type'Pos (Index_Type'First)
+ 
              Pos_Lo : constant Node_Id :=
                Make_Attribute_Reference (Loc,
!                 Prefix         => New_Occurrence_Of (Index_Type, Loc),
                  Attribute_Name => Name_Pos,
!                 Expressions    => New_List (
                    Make_Attribute_Reference (Loc,
                      Prefix => New_Occurrence_Of (Index_Type, Loc),
                      Attribute_Name => Name_First)));
  
+             --  Corresponding index value, i.e. Index_Type'First
+ 
              Aggr_Lo : constant Node_Id :=
                 Make_Attribute_Reference (Loc,
!                  Prefix         => New_Occurrence_Of (Index_Type, Loc),
!                  Attribute_Name => Name_First);
  
!             --  Pos_Hi := Pos_Lo + Size - 1
  
              Pos_Hi : constant Node_Id :=
                 Make_Op_Add (Loc,
!                  Left_Opnd  => Pos_Lo,
                   Right_Opnd =>
                     Make_Op_Subtract (Loc,
                       Left_Opnd  => New_Occurrence_Of (Size_Id, Loc),
*************** package body Exp_Aggr is
*** 6560,6566 ****
                 Make_Attribute_Reference (Loc,
                   Prefix => New_Occurrence_Of (Index_Type, Loc),
                   Attribute_Name => Name_Val,
!                  Expressions => New_List (New_Copy_Tree (Pos_Hi)));
  
              SubE : constant Entity_Id := Make_Temporary (Loc, 'T');
              SubD : constant Node_Id :=
--- 6567,6573 ----
                 Make_Attribute_Reference (Loc,
                   Prefix => New_Occurrence_Of (Index_Type, Loc),
                   Attribute_Name => Name_Val,
!                  Expressions    => New_List (Pos_Hi));
  
              SubE : constant Entity_Id := Make_Temporary (Loc, 'T');
              SubD : constant Node_Id :=
*************** package body Exp_Aggr is
*** 6583,6588 ****
--- 6590,6596 ----
                   Make_Object_Declaration (Loc,
                     Defining_Identifier => TmpE,
                     Object_Definition   => New_Occurrence_Of (SubE, Loc));
+ 
           begin
              Insert_Actions (N, New_List (SubD, TmpD));
           end;
*************** package body Exp_Aggr is
*** 6684,6695 ****
        then
           return;
  
!       elsif Present (Component_Associations (N))
!         and then Nkind (First (Component_Associations (N))) =
!                  N_Iterated_Component_Association
!         and then
!           Present (Iterator_Specification (First (Component_Associations (N))))
!       then
           Two_Pass_Aggregate_Expansion (N);
           return;
  
--- 6692,6698 ----
        then
           return;
  
!       elsif Is_Two_Pass_Aggregate (N) then
           Two_Pass_Aggregate_Expansion (N);
           return;
  
*************** package body Exp_Aggr is
*** 9227,9232 ****
--- 9230,9250 ----
          and then C in Uint_1 | Uint_2 | Uint_4; -- False if No_Uint
     end Is_Two_Dim_Packed_Array;
  
+    ---------------------------
+    -- Is_Two_Pass_Aggregate --
+    ---------------------------
+ 
+    function Is_Two_Pass_Aggregate (N : Node_Id) return Boolean is
+    begin
+       return Nkind (N) = N_Aggregate
+         and then Present (Component_Associations (N))
+         and then Nkind (First (Component_Associations (N))) =
+                    N_Iterated_Component_Association
+         and then
+           Present
+             (Iterator_Specification (First (Component_Associations (N))));
+    end Is_Two_Pass_Aggregate;
+ 
     --------------------
     -- Late_Expansion --
     --------------------
diff -Nrcpad gcc-13.3.0/gcc/ada/exp_aggr.ads gcc-13.4.0/gcc/ada/exp_aggr.ads
*** gcc-13.3.0/gcc/ada/exp_aggr.ads	Tue May 21 07:47:37 2024
--- gcc-13.4.0/gcc/ada/exp_aggr.ads	Thu Jun  5 16:02:58 2025
*************** package Exp_Aggr is
*** 35,40 ****
--- 35,44 ----
     --  Returns True if N is an aggregate of some kind whose Expansion_Delayed
     --  flag is set (see sinfo for meaning of flag).
  
+    function Is_Two_Pass_Aggregate (N : Node_Id) return Boolean;
+    --  Return True if N is an aggregate that is to be expanded in two passes.
+    --  This is the case if it consists only of iterated associations.
+ 
     procedure Convert_Aggr_In_Object_Decl (N : Node_Id);
     --  N is a N_Object_Declaration with an expression which must be an
     --  N_Aggregate or N_Extension_Aggregate with Expansion_Delayed.
diff -Nrcpad gcc-13.3.0/gcc/ada/exp_ch3.adb gcc-13.4.0/gcc/ada/exp_ch3.adb
*** gcc-13.3.0/gcc/ada/exp_ch3.adb	Tue May 21 07:47:37 2024
--- gcc-13.4.0/gcc/ada/exp_ch3.adb	Thu Jun  5 16:02:58 2025
*************** package body Exp_Ch3 is
*** 4896,4912 ****
  
           if No (Init_Proc (Base)) then
  
!             --  If this is an anonymous array created for a declaration with
!             --  an initial value, its init_proc will never be called. The
              --  initial value itself may have been expanded into assignments,
!             --  in which case the object declaration is carries the
!             --  No_Initialization flag.
  
              if Is_Itype (Base)
                and then Nkind (Associated_Node_For_Itype (Base)) =
                                                      N_Object_Declaration
                and then
!                 (Present (Expression (Associated_Node_For_Itype (Base)))
                    or else No_Initialization (Associated_Node_For_Itype (Base)))
              then
                 null;
--- 4896,4917 ----
  
           if No (Init_Proc (Base)) then
  
!             --  If this is an anonymous array built for an object declaration
!             --  with an initial value, its Init_Proc will never be called. The
              --  initial value itself may have been expanded into assignments,
!             --  in which case the declaration has the No_Initialization flag.
!             --  The exception is when the initial value is a 2-pass aggregate,
!             --  because the special expansion used for it creates a temporary
!             --  that needs a fully-fledged initialization.
  
              if Is_Itype (Base)
                and then Nkind (Associated_Node_For_Itype (Base)) =
                                                      N_Object_Declaration
                and then
!                 ((Present (Expression (Associated_Node_For_Itype (Base)))
!                     and then not
!                       Is_Two_Pass_Aggregate
!                         (Expression (Associated_Node_For_Itype (Base))))
                    or else No_Initialization (Associated_Node_For_Itype (Base)))
              then
                 null;
diff -Nrcpad gcc-13.3.0/gcc/ada/exp_ch6.adb gcc-13.4.0/gcc/ada/exp_ch6.adb
*** gcc-13.3.0/gcc/ada/exp_ch6.adb	Tue May 21 07:47:37 2024
--- gcc-13.4.0/gcc/ada/exp_ch6.adb	Thu Jun  5 16:02:58 2025
*************** package body Exp_Ch6 is
*** 640,654 ****
        Master_Formal : Node_Id;
  
     begin
        --  No such extra parameters are needed if there are no tasks
  
        if not Needs_BIP_Task_Actuals (Function_Id) then
  
           --  However we must add dummy extra actuals if the function is
!          --  a dispatching operation that inherited these extra formals.
  
!          if Is_Dispatching_Operation (Function_Id)
!            and then Has_BIP_Extra_Formal (Function_Id, BIP_Task_Master)
           then
              Master_Formal :=
                Build_In_Place_Formal (Function_Id, BIP_Task_Master);
--- 640,659 ----
        Master_Formal : Node_Id;
  
     begin
+       pragma Assert (Ekind (Function_Id) in E_Function
+                                           | E_Subprogram_Type);
+ 
        --  No such extra parameters are needed if there are no tasks
  
        if not Needs_BIP_Task_Actuals (Function_Id) then
  
           --  However we must add dummy extra actuals if the function is
!          --  a dispatching operation that inherited these extra formals
!          --  or an access-to-subprogram type that requires these extra
!          --  actuals.
  
!          if Has_BIP_Extra_Formal (Function_Id, BIP_Task_Master,
!               Must_Be_Frozen => False)
           then
              Master_Formal :=
                Build_In_Place_Formal (Function_Id, BIP_Task_Master);
diff -Nrcpad gcc-13.3.0/gcc/ada/exp_put_image.adb gcc-13.4.0/gcc/ada/exp_put_image.adb
*** gcc-13.3.0/gcc/ada/exp_put_image.adb	Tue May 21 07:47:37 2024
--- gcc-13.4.0/gcc/ada/exp_put_image.adb	Thu Jun  5 16:02:58 2025
*************** with Nlists;         use Nlists;
*** 37,43 ****
  with Nmake;          use Nmake;
  with Opt;            use Opt;
  with Rtsfind;        use Rtsfind;
- with Sem_Aux;        use Sem_Aux;
  with Sem_Util;       use Sem_Util;
  with Sinfo;          use Sinfo;
  with Sinfo.Nodes;    use Sinfo.Nodes;
--- 37,42 ----
*************** package body Exp_Put_Image is
*** 293,302 ****
        Loc     : constant Source_Ptr := Sloc (N);
        P_Type  : constant Entity_Id  := Entity (Prefix (N));
        U_Type  : constant Entity_Id  := Underlying_Type (P_Type);
-       FST     : constant Entity_Id  := First_Subtype (U_Type);
        Sink    : constant Node_Id    := First (Expressions (N));
        Item    : constant Node_Id    := Next (Sink);
!       P_Size  : constant Uint       := Esize (FST);
        Lib_RE  : RE_Id;
  
     begin
--- 292,300 ----
        Loc     : constant Source_Ptr := Sloc (N);
        P_Type  : constant Entity_Id  := Entity (Prefix (N));
        U_Type  : constant Entity_Id  := Underlying_Type (P_Type);
        Sink    : constant Node_Id    := First (Expressions (N));
        Item    : constant Node_Id    := Next (Sink);
!       P_Size  : constant Uint       := Esize (U_Type);
        Lib_RE  : RE_Id;
  
     begin
diff -Nrcpad gcc-13.3.0/gcc/ada/exp_util.adb gcc-13.4.0/gcc/ada/exp_util.adb
*** gcc-13.3.0/gcc/ada/exp_util.adb	Tue May 21 07:47:37 2024
--- gcc-13.4.0/gcc/ada/exp_util.adb	Thu Jun  5 16:02:58 2025
*************** package body Exp_Util is
*** 6013,6018 ****
--- 6013,6024 ----
  
        Utyp := Underlying_Type (Base_Type (Utyp));
  
+       --  Handle incomplete types
+ 
+       if No (Utyp) then
+          return Empty;
+       end if;
+ 
        --  Deal with untagged derivation of private views. If the parent is
        --  now known to be protected, the finalization routine is the one
        --  defined on the corresponding record of the ancestor (corresponding
*************** package body Exp_Util is
*** 6480,6485 ****
--- 6486,6492 ----
                                          | N_Aggregate
                                          | N_Delta_Aggregate
                                          | N_Extension_Aggregate
+                                         | N_Elsif_Part
                and then Nkind (Parent (Par)) not in N_Function_Call
                                                   | N_Procedure_Call_Statement
                                                   | N_Entry_Call_Statement
diff -Nrcpad gcc-13.3.0/gcc/ada/gcc-interface/decl.cc gcc-13.4.0/gcc/ada/gcc-interface/decl.cc
*** gcc-13.3.0/gcc/ada/gcc-interface/decl.cc	Tue May 21 07:47:37 2024
--- gcc-13.4.0/gcc/ada/gcc-interface/decl.cc	Thu Jun  5 16:02:58 2025
*************** gnat_to_gnu_entity (Entity_Id gnat_entit
*** 3511,3516 ****
--- 3511,3524 ----
  	      TYPE_PACKED (gnu_type) = TYPE_PACKED (gnu_base_type);
  	      TYPE_REVERSE_STORAGE_ORDER (gnu_type)
  		= Reverse_Storage_Order (gnat_entity);
+ 
+ 	      /* Do the same for subtypes as for the base type, since pointers
+ 		 to them may symmetrically also point to the latter.  */
+ 	      prepend_one_attribute
+ 		(&attr_list, ATTR_MACHINE_ATTRIBUTE,
+ 		 get_identifier ("may_alias"), NULL_TREE,
+ 		 gnat_entity);
+ 
  	      process_attributes (&gnu_type, &attr_list, true, gnat_entity);
  
  	      /* Set the size, alignment and alias set of the type to match
diff -Nrcpad gcc-13.3.0/gcc/ada/gcc-interface/trans.cc gcc-13.4.0/gcc/ada/gcc-interface/trans.cc
*** gcc-13.3.0/gcc/ada/gcc-interface/trans.cc	Tue May 21 07:47:37 2024
--- gcc-13.4.0/gcc/ada/gcc-interface/trans.cc	Thu Jun  5 16:02:58 2025
*************** node_is_atomic (Node_Id gnat_node)
*** 4193,4199 ****
--- 4193,4202 ----
        if (!Is_Object (gnat_entity))
  	break;
        return Is_Atomic (gnat_entity)
+ 	     /* Disregard the flag on unconstrained arrays or simple constants
+ 		since we cannot or need not generate an atomic access.  */
  	     || (Is_Atomic (Etype (gnat_entity))
+ 		 && Ekind (Etype (gnat_entity)) != E_Array_Type
  		 && !simple_constant_p (gnat_entity));
  
      case N_Selected_Component:
*************** node_is_volatile_full_access (Node_Id gn
*** 4233,4239 ****
--- 4236,4245 ----
        if (!Is_Object (gnat_entity))
  	break;
        return Is_Volatile_Full_Access (gnat_entity)
+ 	     /* Disregard the flag on unconstrained arrays or simple constants
+ 		since we cannot or need not generate a full access.  */
  	     || (Is_Volatile_Full_Access (Etype (gnat_entity))
+ 		 && Ekind (Etype (gnat_entity)) != E_Array_Type
  		 && !simple_constant_p (gnat_entity));
  
      case N_Selected_Component:
*************** get_atomic_access (Node_Id gnat_node, at
*** 4314,4322 ****
      gnat_node = Expression (gnat_node);
  
    /* Up to Ada 2012, for Atomic itself, only reads and updates of the object as
!      a whole require atomic access (RM C.6(15)).  But, starting with Ada 2022,
!      reads of or writes to a nonatomic subcomponent of the object also require
!      atomic access (RM C.6(19)).  */
    if (node_is_atomic (gnat_node))
      {
        bool as_a_whole = true;
--- 4320,4328 ----
      gnat_node = Expression (gnat_node);
  
    /* Up to Ada 2012, for Atomic itself, only reads and updates of the object as
!      a whole require atomic access (RM C.6(15)), unless the object is also VFA.
!      But, starting with Ada 2022, reads of or writes to nonatomic subcomponents
!      of the object also require atomic access (RM C.6(19)).  */
    if (node_is_atomic (gnat_node))
      {
        bool as_a_whole = true;
*************** get_atomic_access (Node_Id gnat_node, at
*** 4325,4331 ****
        for (gnat_temp = gnat_node, gnat_parent = Parent (gnat_temp);
  	   node_is_component (gnat_parent) && Prefix (gnat_parent) == gnat_temp;
  	   gnat_temp = gnat_parent, gnat_parent = Parent (gnat_temp))
! 	if (Ada_Version < Ada_2022 || node_is_atomic (gnat_parent))
  	  goto not_atomic;
  	else
  	  as_a_whole = false;
--- 4331,4339 ----
        for (gnat_temp = gnat_node, gnat_parent = Parent (gnat_temp);
  	   node_is_component (gnat_parent) && Prefix (gnat_parent) == gnat_temp;
  	   gnat_temp = gnat_parent, gnat_parent = Parent (gnat_temp))
! 	if (Ada_Version < Ada_2022
! 	    ? !node_is_volatile_full_access (gnat_node)
! 	    : node_is_atomic (gnat_parent))
  	  goto not_atomic;
  	else
  	  as_a_whole = false;
diff -Nrcpad gcc-13.3.0/gcc/ada/gen_il-gen-gen_nodes.adb gcc-13.4.0/gcc/ada/gen_il-gen-gen_nodes.adb
*** gcc-13.3.0/gcc/ada/gen_il-gen-gen_nodes.adb	Tue May 21 07:47:37 2024
--- gcc-13.4.0/gcc/ada/gen_il-gen-gen_nodes.adb	Thu Jun  5 16:02:58 2025
*************** begin -- Gen_IL.Gen.Gen_Nodes
*** 1393,1399 ****
  
     Cc (N_Formal_Ordinary_Fixed_Point_Definition, Node_Kind);
  
!    Cc (N_Formal_Package_Declaration, Node_Kind,
         (Sy (Defining_Identifier, Node_Id),
          Sy (Name, Node_Id, Default_Empty),
          Sy (Generic_Associations, List_Id, Default_No_List),
--- 1393,1399 ----
  
     Cc (N_Formal_Ordinary_Fixed_Point_Definition, Node_Kind);
  
!    Cc (N_Formal_Package_Declaration, N_Declaration,
         (Sy (Defining_Identifier, Node_Id),
          Sy (Name, Node_Id, Default_Empty),
          Sy (Generic_Associations, List_Id, Default_No_List),
diff -Nrcpad gcc-13.3.0/gcc/ada/gnatvsn.ads gcc-13.4.0/gcc/ada/gnatvsn.ads
*** gcc-13.3.0/gcc/ada/gnatvsn.ads	Tue May 21 07:47:37 2024
--- gcc-13.4.0/gcc/ada/gnatvsn.ads	Thu Jun  5 16:02:58 2025
*************** package Gnatvsn is
*** 83,89 ****
     --  space to store any possible version string value for checks. This
     --  value should never be decreased in the future, but it would be
     --  OK to increase it if absolutely necessary. If it is increased,
!    --  be sure to increase GNAT.Compiler.Version.Ver_Len_Max as well.
  
     Ver_Prefix : constant String := "GNAT Version: ";
     --  Prefix generated by binder. If it is changed, be sure to change
--- 83,90 ----
     --  space to store any possible version string value for checks. This
     --  value should never be decreased in the future, but it would be
     --  OK to increase it if absolutely necessary. If it is increased,
!    --  be sure to increase GNAT.Compiler.Version.Ver_Len_Max, and to update
!    --  the VER_LEN_MAX define in version.c as well.
  
     Ver_Prefix : constant String := "GNAT Version: ";
     --  Prefix generated by binder. If it is changed, be sure to change
diff -Nrcpad gcc-13.3.0/gcc/ada/libgnarl/s-taprop__dummy.adb gcc-13.4.0/gcc/ada/libgnarl/s-taprop__dummy.adb
*** gcc-13.3.0/gcc/ada/libgnarl/s-taprop__dummy.adb	Tue May 21 07:47:37 2024
--- gcc-13.4.0/gcc/ada/libgnarl/s-taprop__dummy.adb	Thu Jun  5 16:02:58 2025
***************
*** 37,43 ****
  package body System.Task_Primitives.Operations is
  
     use System.Tasking;
-    use System.Parameters;
  
     pragma Warnings (Off);
     --  Turn off warnings since so many unreferenced parameters
--- 37,42 ----
*************** package body System.Task_Primitives.Oper
*** 480,489 ****
        null;
     end Unlock;
  
!    procedure Unlock
!      (L           : not null access RTS_Lock;
!       Global_Lock : Boolean := False)
!    is
     begin
        null;
     end Unlock;
--- 479,485 ----
        null;
     end Unlock;
  
!    procedure Unlock (L : not null access RTS_Lock) is
     begin
        null;
     end Unlock;
*************** package body System.Task_Primitives.Oper
*** 522,531 ****
        Ceiling_Violation := False;
     end Write_Lock;
  
!    procedure Write_Lock
!      (L           : not null access RTS_Lock;
!       Global_Lock : Boolean := False)
!    is
     begin
        null;
     end Write_Lock;
--- 518,524 ----
        Ceiling_Violation := False;
     end Write_Lock;
  
!    procedure Write_Lock (L : not null access RTS_Lock) is
     begin
        null;
     end Write_Lock;
diff -Nrcpad gcc-13.3.0/gcc/ada/libgnat/a-ngcoar.adb gcc-13.4.0/gcc/ada/libgnat/a-ngcoar.adb
*** gcc-13.3.0/gcc/ada/libgnat/a-ngcoar.adb	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/ada/libgnat/a-ngcoar.adb	Thu Jun  5 16:02:58 2025
*************** package body Ada.Numerics.Generic_Comple
*** 1058,1076 ****
     is
        N : constant Natural := Length (A);
  
!       --  For a Hermitian matrix C, we convert the eigenvalue problem to a
!       --  real symmetric one: if C = A + i * B, then the (N, N) complex
        --  eigenvalue problem:
!       --     (A + i * B) * (u + i * v) = Lambda * (u + i * v)
        --
        --  is equivalent to the (2 * N, 2 * N) real eigenvalue problem:
-       --     [  A, B ] [ u ] = Lambda * [ u ]
-       --     [ -B, A ] [ v ]            [ v ]
        --
!       --  Note that the (2 * N, 2 * N) matrix above is symmetric, as
!       --  Transpose (A) = A and Transpose (B) = -B if C is Hermitian.
  
!       --  We solve this eigensystem using the real-valued algorithms. The final
        --  result will have every eigenvalue twice, so in the sorted output we
        --  just pick every second value, with associated eigenvector u + i * v.
  
--- 1058,1078 ----
     is
        N : constant Natural := Length (A);
  
!       --  For a Hermitian matrix A, we convert the eigenvalue problem to a
!       --  real symmetric one: if A = X + i * Y, then the (N, N) complex
        --  eigenvalue problem:
!       --
!       --     (X + i * Y) * (u + i * v) = Lambda * (u + i * v)
        --
        --  is equivalent to the (2 * N, 2 * N) real eigenvalue problem:
        --
!       --     [ X, -Y ] [ u ] = Lambda * [ u ]
!       --     [ Y,  X ] [ v ]            [ v ]
!       --
!       --  Note that the (2 * N, 2 * N) matrix M above is symmetric, because
!       --  Transpose (X) = X and Transpose (Y) = -Y as A is Hermitian.
  
!       --  We solve this eigensystem using the real-valued algorithm. The final
        --  result will have every eigenvalue twice, so in the sorted output we
        --  just pick every second value, with associated eigenvector u + i * v.
  
*************** package body Ada.Numerics.Generic_Comple
*** 1085,1094 ****
                 C : constant Complex :=
                   (A (A'First (1) + (J - 1), A'First (2) + (K - 1)));
              begin
!                M (J, K) := Re (C);
!                M (J + N, K + N) := Re (C);
!                M (J + N, K) := Im (C);
!                M (J, K + N) := -Im (C);
              end;
           end loop;
        end loop;
--- 1087,1094 ----
                 C : constant Complex :=
                   (A (A'First (1) + (J - 1), A'First (2) + (K - 1)));
              begin
!                M (J,     K) := Re (C); M (J,     K + N) := -Im (C);
!                M (J + N, K) := Im (C); M (J + N, K + N) := Re (C);
              end;
           end loop;
        end loop;
*************** package body Ada.Numerics.Generic_Comple
*** 1103,1112 ****
  
              for K in 1 .. N loop
                 declare
!                   Row : constant Integer := Vectors'First (2) + (K - 1);
                 begin
!                   Vectors (Row, Col)
!                      := (Vecs (J * 2, Col), Vecs (J * 2, Col + N));
                 end;
              end loop;
           end;
--- 1103,1111 ----
  
              for K in 1 .. N loop
                 declare
!                   Row : constant Integer := Vectors'First (1) + (K - 1);
                 begin
!                   Vectors (Row, Col) := (Vecs (K, 2 * J), Vecs (K + N, 2 * J));
                 end;
              end loop;
           end;
*************** package body Ada.Numerics.Generic_Comple
*** 1118,1130 ****
     -----------------
  
     function Eigenvalues (A : Complex_Matrix) return Real_Vector is
-       --  See Eigensystem for a description of the algorithm
- 
        N : constant Natural := Length (A);
!       R : Real_Vector (A'Range (1));
  
        M    : Real_Matrix (1 .. 2 * N, 1 .. 2 * N);
        Vals : Real_Vector (1 .. 2 * N);
     begin
        for J in 1 .. N loop
           for K in 1 .. N loop
--- 1117,1130 ----
     -----------------
  
     function Eigenvalues (A : Complex_Matrix) return Real_Vector is
        N : constant Natural := Length (A);
! 
!       --  See Eigensystem for a description of the algorithm
  
        M    : Real_Matrix (1 .. 2 * N, 1 .. 2 * N);
+       R    : Real_Vector (A'Range (1));
        Vals : Real_Vector (1 .. 2 * N);
+ 
     begin
        for J in 1 .. N loop
           for K in 1 .. N loop
*************** package body Ada.Numerics.Generic_Comple
*** 1132,1141 ****
                 C : constant Complex :=
                   (A (A'First (1) + (J - 1), A'First (2) + (K - 1)));
              begin
!                M (J, K) := Re (C);
!                M (J + N, K + N) := Re (C);
!                M (J + N, K) := Im (C);
!                M (J, K + N) := -Im (C);
              end;
           end loop;
        end loop;
--- 1132,1139 ----
                 C : constant Complex :=
                   (A (A'First (1) + (J - 1), A'First (2) + (K - 1)));
              begin
!                M (J,     K) := Re (C); M (J,     K + N) := -Im (C);
!                M (J + N, K) := Im (C); M (J + N, K + N) := Re (C);
              end;
           end loop;
        end loop;
diff -Nrcpad gcc-13.3.0/gcc/ada/libgnat/a-ngrear.adb gcc-13.4.0/gcc/ada/libgnat/a-ngrear.adb
*** gcc-13.3.0/gcc/ada/libgnat/a-ngrear.adb	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/ada/libgnat/a-ngrear.adb	Thu Jun  5 16:02:58 2025
*************** package body Ada.Numerics.Generic_Real_A
*** 85,91 ****
  
     function Is_Symmetric (A : Real_Matrix) return Boolean is
       (Transpose (A) = A);
!    --  Return True iff A is symmetric, see RM G.3.1 (90).
  
     function Is_Tiny (Value, Compared_To : Real) return Boolean is
       (abs Compared_To + 100.0 * abs (Value) = abs Compared_To);
--- 85,91 ----
  
     function Is_Symmetric (A : Real_Matrix) return Boolean is
       (Transpose (A) = A);
!    --  Return True iff A is symmetric, see RM G.3.1 (90)
  
     function Is_Tiny (Value, Compared_To : Real) return Boolean is
       (abs Compared_To + 100.0 * abs (Value) = abs Compared_To);
*************** package body Ada.Numerics.Generic_Real_A
*** 96,102 ****
       (A               : Real_Matrix;
        Values          : out Real_Vector;
        Vectors         : out Real_Matrix;
!       Compute_Vectors : Boolean := True);
     --  Perform Jacobi's eigensystem algorithm on real symmetric matrix A
  
     function Length is new Square_Matrix_Length (Real'Base, Real_Matrix);
--- 96,102 ----
       (A               : Real_Matrix;
        Values          : out Real_Vector;
        Vectors         : out Real_Matrix;
!       Compute_Vectors : Boolean);
     --  Perform Jacobi's eigensystem algorithm on real symmetric matrix A
  
     function Length is new Square_Matrix_Length (Real'Base, Real_Matrix);
*************** package body Ada.Numerics.Generic_Real_A
*** 104,114 ****
     --  not a square matrix, and otherwise returns its length.
  
     procedure Rotate (X, Y : in out Real; Sin, Tau : Real);
!    --  Perform a Givens rotation
  
     procedure Sort_Eigensystem
!      (Values  : in out Real_Vector;
!       Vectors : in out Real_Matrix);
     --  Sort Values and associated Vectors by decreasing absolute value
  
     procedure Swap (Left, Right : in out Real);
--- 104,115 ----
     --  not a square matrix, and otherwise returns its length.
  
     procedure Rotate (X, Y : in out Real; Sin, Tau : Real);
!    --  Perform a Givens rotation of angle Theta given by sin and sin/(1 + cos)
  
     procedure Sort_Eigensystem
!      (Values          : in out Real_Vector;
!       Vectors         : in out Real_Matrix;
!       Compute_Vectors : Boolean);
     --  Sort Values and associated Vectors by decreasing absolute value
  
     procedure Swap (Left, Right : in out Real);
*************** package body Ada.Numerics.Generic_Real_A
*** 486,492 ****
     is
     begin
        Jacobi (A, Values, Vectors, Compute_Vectors => True);
!       Sort_Eigensystem (Values, Vectors);
     end Eigensystem;
  
     -----------------
--- 487,493 ----
     is
     begin
        Jacobi (A, Values, Vectors, Compute_Vectors => True);
!       Sort_Eigensystem (Values, Vectors, Compute_Vectors => True);
     end Eigensystem;
  
     -----------------
*************** package body Ada.Numerics.Generic_Real_A
*** 500,506 ****
              Vectors : Real_Matrix (1 .. 0, 1 .. 0);
           begin
              Jacobi (A, Values, Vectors, Compute_Vectors => False);
!             Sort_Eigensystem (Values, Vectors);
           end;
        end return;
     end Eigenvalues;
--- 501,507 ----
              Vectors : Real_Matrix (1 .. 0, 1 .. 0);
           begin
              Jacobi (A, Values, Vectors, Compute_Vectors => False);
!             Sort_Eigensystem (Values, Vectors, Compute_Vectors => False);
           end;
        end return;
     end Eigenvalues;
*************** package body Ada.Numerics.Generic_Real_A
*** 522,536 ****
       (A               : Real_Matrix;
        Values          : out Real_Vector;
        Vectors         : out Real_Matrix;
!       Compute_Vectors : Boolean := True)
     is
!       --  This subprogram uses Carl Gustav Jacob Jacobi's iterative method
!       --  for computing eigenvalues and eigenvectors and is based on
        --  Rutishauser's implementation.
  
        --  The given real symmetric matrix is transformed iteratively to
        --  diagonal form through a sequence of appropriately chosen elementary
!       --  orthogonal transformations, called Jacobi rotations here.
  
        --  The Jacobi method produces a systematic decrease of the sum of the
        --  squares of off-diagonal elements. Convergence to zero is quadratic,
--- 523,537 ----
       (A               : Real_Matrix;
        Values          : out Real_Vector;
        Vectors         : out Real_Matrix;
!       Compute_Vectors : Boolean)
     is
!       --  This subprogram uses Carl Gustav Jacob Jacobi's cyclic iterative
!       --  method for computing eigenvalues and eigenvectors and is based on
        --  Rutishauser's implementation.
  
        --  The given real symmetric matrix is transformed iteratively to
        --  diagonal form through a sequence of appropriately chosen elementary
!       --  orthogonal transformations, called Jacobi rotations.
  
        --  The Jacobi method produces a systematic decrease of the sum of the
        --  squares of off-diagonal elements. Convergence to zero is quadratic,
*************** package body Ada.Numerics.Generic_Real_A
*** 541,581 ****
        --  best choice here, even though for large matrices other methods will
        --  be significantly more efficient in both time and space.
  
!       --  While the eigensystem computations are absolutely foolproof for all
        --  real symmetric matrices, in presence of invalid values, or similar
!       --  exceptional situations it might not. In such cases the results cannot
!       --  be trusted and Constraint_Error is raised.
  
        --  Note: this implementation needs temporary storage for 2 * N + N**2
        --        values of type Real.
  
!       Max_Iterations  : constant := 50;
!       N               : constant Natural := Length (A);
  
        subtype Square_Matrix is Real_Matrix (1 .. N, 1 .. N);
  
!       --  In order to annihilate the M (Row, Col) element, the
!       --  rotation parameters Cos and Sin are computed as
!       --  follows:
  
!       --    Theta = Cot (2.0 * Phi)
!       --          = (Diag (Col) - Diag (Row)) / (2.0 * M (Row, Col))
  
!       --  Then Tan (Phi) as the smaller root (in modulus) of
  
!       --    T**2 + 2 * T * Theta = 1 (or 0.5 / Theta, if Theta is large)
  
!       function Compute_Tan (Theta : Real) return Real is
!          (Real'Copy_Sign (1.0 / (abs Theta + Sqrt (1.0 + Theta**2)), Theta));
  
        function Compute_Tan (P, H : Real) return Real is
!          (if Is_Tiny (P, Compared_To => H) then P / H
!           else Compute_Tan (Theta => H / (2.0 * P)));
        pragma Annotate
          (CodePeer, False_Positive, "divide by zero", "H, P /= 0");
  
        function Sum_Strict_Upper (M : Square_Matrix) return Real;
!       --  Return the sum of all elements in the strict upper triangle of M
  
        ----------------------
        -- Sum_Strict_Upper --
--- 542,585 ----
        --  best choice here, even though for large matrices other methods will
        --  be significantly more efficient in both time and space.
  
!       --  While the eigensystem computation is absolutely foolproof for all
        --  real symmetric matrices, in presence of invalid values, or similar
!       --  exceptional situations, it may not be. In such cases, the results
!       --  cannot be trusted and Constraint_Error is raised.
  
        --  Note: this implementation needs temporary storage for 2 * N + N**2
        --        values of type Real.
  
!       Max_Iterations : constant := 50;
!       N              : constant Natural := Length (A);
  
        subtype Square_Matrix is Real_Matrix (1 .. N, 1 .. N);
  
!       --  In order to annihilate the M (Row, Col) element, the rotation angle
!       --  Theta is chosen as follows:
  
!       --   Cot (2.0 * Theta) = (Diag (Col) - Diag (Row)) / (2.0 * M (Row, Col))
  
!       --  If C = Cot (2.0 * Theta), then Tan (Theta) is computed as the smaller
!       --  root (in modulus) of:
  
!       --    X**2 + 2 * C * X - 1 = 0
  
!       --  or else as 0.5 / C, if C is large.
! 
!       function Compute_Tan (C : Real) return Real is
!         (Real'Copy_Sign (1.0 / (abs C + Sqrt (1.0 + C**2)), C));
  
        function Compute_Tan (P, H : Real) return Real is
!         (if Is_Tiny (P, Compared_To => H)
!          then P / H
!          else Compute_Tan (C => H / (2.0 * P)));
        pragma Annotate
          (CodePeer, False_Positive, "divide by zero", "H, P /= 0");
  
        function Sum_Strict_Upper (M : Square_Matrix) return Real;
!       --  Return the sum of the absolute value of all the elements in the
!       --  strict upper triangle of M.
  
        ----------------------
        -- Sum_Strict_Upper --
*************** package body Ada.Numerics.Generic_Real_A
*** 594,604 ****
           return Sum;
        end Sum_Strict_Upper;
  
        M         : Square_Matrix := A; --  Work space for solving eigensystem
-       Threshold : Real;
-       Sum       : Real;
        Diag      : Real_Vector (1 .. N);
        Diag_Adj  : Real_Vector (1 .. N);
  
        --  The vector Diag_Adj indicates the amount of change in each value,
        --  while Diag tracks the value itself and Values holds the values as
--- 598,610 ----
           return Sum;
        end Sum_Strict_Upper;
  
+       --  Local variables
+ 
        M         : Square_Matrix := A; --  Work space for solving eigensystem
        Diag      : Real_Vector (1 .. N);
        Diag_Adj  : Real_Vector (1 .. N);
+       Sum       : Real;
+       Threshold : Real;
  
        --  The vector Diag_Adj indicates the amount of change in each value,
        --  while Diag tracks the value itself and Values holds the values as
*************** package body Ada.Numerics.Generic_Real_A
*** 620,641 ****
           raise Constraint_Error with "matrix not symmetric";
        end if;
  
        --  Note: Only the locally declared matrix M and vectors (Diag, Diag_Adj)
        --        have lower bound equal to 1. The Vectors matrix may have
        --        different bounds, so take care indexing elements. Assignment
        --        as a whole is fine as sliding is automatic in that case.
  
!       Vectors := (if not Compute_Vectors then [1 .. 0 => [1 .. 0 => 0.0]]
!                   else Unit_Matrix (Vectors'Length (1), Vectors'Length (2)));
!       Values := Diagonal (M);
  
        Sweep : for Iteration in 1 .. Max_Iterations loop
  
!          --  The first three iterations, perform rotation for any non-zero
!          --  element. After this, rotate only for those that are not much
!          --  smaller than the average off-diagnal element. After the fifth
!          --  iteration, additionally zero out off-diagonal elements that are
!          --  very small compared to elements on the diagonal with the same
           --  column or row index.
  
           Sum := Sum_Strict_Upper (M);
--- 626,649 ----
           raise Constraint_Error with "matrix not symmetric";
        end if;
  
+       Values := Diagonal (M);
+ 
        --  Note: Only the locally declared matrix M and vectors (Diag, Diag_Adj)
        --        have lower bound equal to 1. The Vectors matrix may have
        --        different bounds, so take care indexing elements. Assignment
        --        as a whole is fine as sliding is automatic in that case.
  
!       Vectors := (if Compute_Vectors
!                   then Unit_Matrix (N)
!                   else [1 .. 0 => [1 .. 0 => 0.0]]);
  
        Sweep : for Iteration in 1 .. Max_Iterations loop
  
!          --  During the first three iterations, perform the rotation only for
!          --  elements that are not much smaller than the average off-diagonal
!          --  element. After this, rotate for any non-zero elements. After the
!          --  fifth iteration, additionally zero out off-diagonal elements that
!          --  are very small compared to elements on the diagonal with the same
           --  column or row index.
  
           Sum := Sum_Strict_Upper (M);
*************** package body Ada.Numerics.Generic_Real_A
*** 644,651 ****
  
           Threshold := (if Iteration < 4 then 0.2 * Sum / Real (N**2) else 0.0);
  
!          --  Iterate over all off-diagonal elements, rotating any that have
!          --  an absolute value that exceeds the threshold.
  
           Diag := Values;
           Diag_Adj := [others => 0.0]; -- Accumulates adjustments to Diag
--- 652,659 ----
  
           Threshold := (if Iteration < 4 then 0.2 * Sum / Real (N**2) else 0.0);
  
!          --  Iterate over all off-diagonal elements, rotating any that have an
!          --  absolute value that exceeds the threshold.
  
           Diag := Values;
           Diag_Adj := [others => 0.0]; -- Accumulates adjustments to Diag
*************** package body Ada.Numerics.Generic_Real_A
*** 653,663 ****
           for Row in 1 .. N - 1 loop
              for Col in Row + 1 .. N loop
  
!                --  If, before the rotation M (Row, Col) is tiny compared to
                 --  Diag (Row) and Diag (Col), rotation is skipped. This is
                 --  meaningful, as it produces no larger error than would be
                 --  produced anyhow if the rotation had been performed.
!                --  Suppress this optimization in the first four sweeps, so
                 --  that this procedure can be used for computing eigenvectors
                 --  of perturbed diagonal matrices.
  
--- 661,671 ----
           for Row in 1 .. N - 1 loop
              for Col in Row + 1 .. N loop
  
!                --  If, before the rotation, M (Row, Col) is tiny compared to
                 --  Diag (Row) and Diag (Col), rotation is skipped. This is
                 --  meaningful, as it produces no larger error than would be
                 --  produced anyhow if the rotation had been performed.
!                --  Suppress this optimization in the first four iterations, so
                 --  that this procedure can be used for computing eigenvectors
                 --  of perturbed diagonal matrices.
  
*************** package body Ada.Numerics.Generic_Real_A
*** 669,676 ****
  
                 elsif abs M (Row, Col) > Threshold then
                    Perform_Rotation : declare
!                      Tan : constant Real := Compute_Tan (M (Row, Col),
!                                                Diag (Col) - Diag (Row));
                       Cos : constant Real := 1.0 / Sqrt (1.0 + Tan**2);
                       Sin : constant Real := Tan * Cos;
                       Tau : constant Real := Sin / (1.0 + Cos);
--- 677,684 ----
  
                 elsif abs M (Row, Col) > Threshold then
                    Perform_Rotation : declare
!                      Tan : constant Real :=
!                        Compute_Tan (M (Row, Col), Diag (Col) - Diag (Row));
                       Cos : constant Real := 1.0 / Sqrt (1.0 + Tan**2);
                       Sin : constant Real := Tan * Cos;
                       Tau : constant Real := Sin / (1.0 + Cos);
*************** package body Ada.Numerics.Generic_Real_A
*** 709,715 ****
           Values := Values + Diag_Adj;
        end loop Sweep;
  
!       --  All normal matrices with valid values should converge perfectly.
  
        if Sum /= 0.0 then
           raise Constraint_Error with "eigensystem solution does not converge";
--- 717,723 ----
           Values := Values + Diag_Adj;
        end loop Sweep;
  
!       --  All normal matrices with valid values should converge perfectly
  
        if Sum /= 0.0 then
           raise Constraint_Error with "eigensystem solution does not converge";
*************** package body Ada.Numerics.Generic_Real_A
*** 731,738 ****
     ----------------------
  
     procedure Sort_Eigensystem
!      (Values  : in out Real_Vector;
!       Vectors : in out Real_Matrix)
     is
        procedure Swap (Left, Right : Integer);
        --  Swap Values (Left) with Values (Right), and also swap the
--- 739,747 ----
     ----------------------
  
     procedure Sort_Eigensystem
!      (Values          : in out Real_Vector;
!       Vectors         : in out Real_Matrix;
!       Compute_Vectors : Boolean)
     is
        procedure Swap (Left, Right : Integer);
        --  Swap Values (Left) with Values (Right), and also swap the
*************** package body Ada.Numerics.Generic_Real_A
*** 748,755 ****
        procedure Swap (Left, Right : Integer) is
        begin
           Swap (Values (Left), Values (Right));
!          Swap_Column (Vectors, Left - Values'First + Vectors'First (2),
!                                Right - Values'First + Vectors'First (2));
        end Swap;
  
     begin
--- 757,766 ----
        procedure Swap (Left, Right : Integer) is
        begin
           Swap (Values (Left), Values (Right));
!          if Compute_Vectors then
!             Swap_Column (Vectors, Left - Values'First + Vectors'First (2),
!                                   Right - Values'First + Vectors'First (2));
!          end if;
        end Swap;
  
     begin
diff -Nrcpad gcc-13.3.0/gcc/ada/libgnat/s-dorepr__freebsd.adb gcc-13.4.0/gcc/ada/libgnat/s-dorepr__freebsd.adb
*** gcc-13.3.0/gcc/ada/libgnat/s-dorepr__freebsd.adb	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/ada/libgnat/s-dorepr__freebsd.adb	Thu Jun  5 16:02:58 2025
***************
*** 0 ****
--- 1,172 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --            S Y S T E M . D O U B L E _ R E A L . P R O D U C T           --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --            Copyright (C) 2021-2025, Free Software Foundation, Inc.       --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- As a special exception 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the x86/FreeBSD version of the separate package body
+ 
+ with Interfaces; use Interfaces;
+ 
+ separate (System.Double_Real)
+ 
+ package body Product is
+ 
+    procedure Split (N : Num; Hi : out Num; Lo : out Num);
+    --  Compute high part and low part of N
+ 
+    -----------
+    -- Split --
+    -----------
+ 
+    --  We use a bit manipulation algorithm instead of Veltkamp's splitting
+    --  because it is faster and has the property that the magnitude of the
+    --  high part is never larger than that of the input number, which will
+    --  avoid spurious overflows in the Two_Prod algorithm.
+ 
+    --  See the recent paper by Claude-Pierre Jeannerod, Jean-Michel Muller
+    --  and Paul Zimmermann: On various ways to split a floating-point number
+    --  ARITH 2018 - 25th IEEE Symposium on Computer Arithmetic, Jun 2018,
+    --  Amherst (MA), United States, pages 53-60.
+ 
+    procedure Split (N : Num; Hi : out Num; Lo : out Num) is
+       X : Num;
+ 
+    begin
+       --  Spill the input into the appropriate (maybe larger) bit container,
+       --  mask out the low bits and reload the modified value.
+ 
+       case Num'Machine_Mantissa is
+          when 24 =>
+             declare
+                Rep32 : aliased Interfaces.Unsigned_32;
+                Temp  : Num := N with Address => Rep32'Address;
+                pragma Annotate (CodePeer, Modified, Rep32);
+ 
+             begin
+                --  Mask out the low 12 bits
+ 
+                Rep32 := Rep32 and 16#FFFFF000#;
+ 
+                X := Temp;
+             end;
+ 
+          when 53 =>
+             declare
+                Rep64 : aliased array (1 .. 2) of Interfaces.Unsigned_64;
+                Temp  : Num := N with Address => Rep64'Address;
+                pragma Annotate (CodePeer, Modified, Rep64);
+ 
+             begin
+                --  Mask out the low 27 bits
+ 
+                Rep64 (1) := Rep64 (1) and 16#FFFFFFFFF8000000#;
+ 
+                X := Temp;
+             end;
+ 
+          when 64 =>
+             declare
+                Rep80 : aliased array (1 .. 2) of Interfaces.Unsigned_64;
+                Temp  : Num := N with Address => Rep80'Address;
+                pragma Annotate (CodePeer, Modified, Rep80);
+ 
+             begin
+                --  Mask out the low 32 bits
+ 
+                if System.Default_Bit_Order = High_Order_First then
+                   Rep80 (1) := Rep80 (1) and 16#FFFFFFFFFFFF0000#;
+                   Rep80 (2) := Rep80 (2) and 16#0000FFFFFFFFFFFF#;
+                else
+                   Rep80 (1) := Rep80 (1) and 16#FFFFFFFF00000000#;
+                end if;
+ 
+                X := Temp;
+             end;
+ 
+          when others =>
+             raise Program_Error;
+       end case;
+ 
+       --  Deal with denormalized numbers
+ 
+       if X = 0.0 then
+          Hi := N;
+          Lo := 0.0;
+       else
+          Hi := X;
+          Lo := N - X;
+       end if;
+    end Split;
+ 
+    --------------
+    -- Two_Prod --
+    --------------
+ 
+    function Two_Prod (A, B : Num) return Double_T is
+       P : constant Num := A * B;
+ 
+       Ahi, Alo, Bhi, Blo, E : Num;
+ 
+    begin
+       if Is_Infinity (P) or else Is_Zero (P) then
+          return (P, 0.0);
+ 
+       else
+          Split (A, Ahi, Alo);
+          Split (B, Bhi, Blo);
+ 
+          E := ((Ahi * Bhi - P) + Ahi * Blo + Alo * Bhi) + Alo * Blo;
+ 
+          return (P, E);
+       end if;
+    end Two_Prod;
+ 
+    -------------
+    -- Two_Sqr --
+    -------------
+ 
+    function Two_Sqr (A : Num) return Double_T is
+       Q : constant Num := A * A;
+ 
+       Hi, Lo, E : Num;
+ 
+    begin
+       if Is_Infinity (Q) or else Is_Zero (Q) then
+          return (Q, 0.0);
+ 
+       else
+          Split (A, Hi, Lo);
+ 
+          E := ((Hi * Hi - Q) + 2.0 * Hi * Lo) + Lo * Lo;
+ 
+          return (Q, E);
+       end if;
+    end Two_Sqr;
+ 
+ end Product;
diff -Nrcpad gcc-13.3.0/gcc/ada/par-ch6.adb gcc-13.4.0/gcc/ada/par-ch6.adb
*** gcc-13.3.0/gcc/ada/par-ch6.adb	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/ada/par-ch6.adb	Thu Jun  5 16:02:58 2025
*************** package body Ch6 is
*** 884,889 ****
--- 884,890 ----
  
                       if not (Paren_Count (Expr) /= 0
                                or else Nkind (Expr) in N_Aggregate
+                                                     | N_Delta_Aggregate
                                                      | N_Extension_Aggregate
                                                      | N_Quantified_Expression)
                       then
diff -Nrcpad gcc-13.3.0/gcc/ada/sem_ch12.adb gcc-13.4.0/gcc/ada/sem_ch12.adb
*** gcc-13.3.0/gcc/ada/sem_ch12.adb	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/ada/sem_ch12.adb	Thu Jun  5 16:02:58 2025
*************** package body Sem_Ch12 is
*** 6693,6700 ****
           then
              --  If the formal is a tagged type the corresponding class-wide
              --  type has been generated as well, and it must be skipped.
  
!             if Is_Type (E2) and then Is_Tagged_Type (E2) then
                 Next_Entity (E2);
              end if;
  
--- 6693,6704 ----
           then
              --  If the formal is a tagged type the corresponding class-wide
              --  type has been generated as well, and it must be skipped.
+             --  Likewise, for a formal discrete type, the base type has been
+             --  generated as well (see Analyze_Formal_Discrete_Type).
  
!             if Is_Type (E2)
!               and then (Is_Tagged_Type (E2) or else Is_Enumeration_Type (E2))
!             then
                 Next_Entity (E2);
              end if;
  
*************** package body Sem_Ch12 is
*** 10542,10547 ****
--- 10546,10552 ----
  
        function Get_Formal_Entity (N : Node_Id) return Entity_Id is
           Kind : constant Node_Kind := Nkind (Original_Node (N));
+ 
        begin
           case Kind is
              when N_Formal_Object_Declaration =>
*************** package body Sem_Ch12 is
*** 10556,10564 ****
              when N_Formal_Package_Declaration =>
                 return Defining_Identifier (Original_Node (N));
  
-             when N_Generic_Package_Declaration =>
-                return Defining_Identifier (Original_Node (N));
- 
              --  All other declarations are introduced by semantic analysis and
              --  have no match in the actual.
  
--- 10561,10566 ----
*************** package body Sem_Ch12 is
*** 10797,10802 ****
--- 10799,10824 ----
                    end if;
  
                    Next_Non_Pragma (Formal_Node);
+ 
+                   --  If the actual of the local package created for the formal
+                   --  is itself an instantiated formal package, then it could
+                   --  have given rise to additional declarations, see the code
+                   --  dealing with conformance checking below.
+ 
+                   if Nkind (Actual_Of_Formal) = N_Package_Renaming_Declaration
+                     and then Requires_Conformance_Checking
+                                (Declaration_Node
+                                  (Associated_Formal_Package
+                                    (Defining_Entity (Actual_Of_Formal))))
+                   then
+                      Next (Actual_Of_Formal);
+                      pragma Assert
+                        (Nkind (Actual_Of_Formal) = N_Package_Declaration);
+                      Next (Actual_Of_Formal);
+                      pragma Assert
+                        (Nkind (Actual_Of_Formal) = N_Package_Instantiation);
+                   end if;
+ 
                    Next (Actual_Of_Formal);
  
                    --  A formal subprogram may be overloaded, so advance in
*************** package body Sem_Ch12 is
*** 10852,10862 ****
           --  checking, because it contains formal declarations for those
           --  defaulted parameters, and those should not reach the back-end.
  
           if Requires_Conformance_Checking (Formal) then
              declare
                 I_Pack : constant Entity_Id := Make_Temporary (Loc, 'P');
! 
!                I_Nam : Node_Id;
  
              begin
                 Set_Is_Internal (I_Pack);
--- 10874,10887 ----
           --  checking, because it contains formal declarations for those
           --  defaulted parameters, and those should not reach the back-end.
  
+          --  This processing needs to be synchronized with the pattern matching
+          --  done in the main loop of the above block that starts with the test
+          --  on Requires_Conformance_Checking.
+ 
           if Requires_Conformance_Checking (Formal) then
              declare
                 I_Pack : constant Entity_Id := Make_Temporary (Loc, 'P');
!                I_Nam  : Node_Id;
  
              begin
                 Set_Is_Internal (I_Pack);
diff -Nrcpad gcc-13.3.0/gcc/ada/sem_ch6.adb gcc-13.4.0/gcc/ada/sem_ch6.adb
*** gcc-13.3.0/gcc/ada/sem_ch6.adb	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/ada/sem_ch6.adb	Thu Jun  5 16:02:58 2025
*************** package body Sem_Ch6 is
*** 8588,8596 ****
        --  Determines if E has its extra formals
  
        function Might_Need_BIP_Task_Actuals (E : Entity_Id) return Boolean;
!       --  Determines if E is a dispatching primitive returning a limited tagged
!       --  type object since some descendant might return an object with tasks
!       --  (and therefore need the BIP task extra actuals).
  
        function Needs_Accessibility_Check_Extra
          (E      : Entity_Id;
--- 8588,8599 ----
        --  Determines if E has its extra formals
  
        function Might_Need_BIP_Task_Actuals (E : Entity_Id) return Boolean;
!       --  Determines if E is a function or an access to a function returning a
!       --  limited tagged type object. On dispatching primitives this predicate
!       --  is used to determine if some descendant of the function might return
!       --  an object with tasks (and therefore need the BIP task extra actuals).
!       --  On access-to-subprogram types it is used to determine if the target
!       --  function might return an object with tasks.
  
        function Needs_Accessibility_Check_Extra
          (E      : Entity_Id;
*************** package body Sem_Ch6 is
*** 8711,8719 ****
  
           Func_Typ := Root_Type (Underlying_Type (Etype (Subp_Id)));
  
!          return Ekind (Subp_Id) = E_Function
             and then not Has_Foreign_Convention (Func_Typ)
-            and then Is_Dispatching_Operation (Subp_Id)
             and then Is_Tagged_Type (Func_Typ)
             and then Is_Limited_Type (Func_Typ)
             and then not Has_Aspect (Func_Typ, Aspect_No_Task_Parts);
--- 8714,8721 ----
  
           Func_Typ := Root_Type (Underlying_Type (Etype (Subp_Id)));
  
!          return Ekind (Subp_Id) in E_Function | E_Subprogram_Type
             and then not Has_Foreign_Convention (Func_Typ)
             and then Is_Tagged_Type (Func_Typ)
             and then Is_Limited_Type (Func_Typ)
             and then not Has_Aspect (Func_Typ, Aspect_No_Task_Parts);
diff -Nrcpad gcc-13.3.0/gcc/ada/sem_res.adb gcc-13.4.0/gcc/ada/sem_res.adb
*** gcc-13.3.0/gcc/ada/sem_res.adb	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/ada/sem_res.adb	Thu Jun  5 16:02:58 2025
*************** package body Sem_Res is
*** 14672,14678 ****
  
        --  If it was legal in the generic, it's legal in the instance
  
!       elsif In_Instance_Body then
           return True;
  
        --  If both are tagged types, check legality of view conversions
--- 14672,14678 ----
  
        --  If it was legal in the generic, it's legal in the instance
  
!       elsif In_Instance then
           return True;
  
        --  If both are tagged types, check legality of view conversions
diff -Nrcpad gcc-13.3.0/gcc/ada/sem_warn.adb gcc-13.4.0/gcc/ada/sem_warn.adb
*** gcc-13.3.0/gcc/ada/sem_warn.adb	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/ada/sem_warn.adb	Thu Jun  5 16:02:58 2025
*************** package body Sem_Warn is
*** 1192,1197 ****
--- 1192,1201 ----
                    UR := Unset_Reference (E1);
                 end if;
  
+                --  Protect again small adjustments of reference
+ 
+                UR := Unqual_Conv (UR);
+ 
                 --  Special processing for access types
  
                 if Present (UR) and then Is_Access_Type (E1T) then
diff -Nrcpad gcc-13.3.0/gcc/ada/version.c gcc-13.4.0/gcc/ada/version.c
*** gcc-13.3.0/gcc/ada/version.c	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/ada/version.c	Thu Jun  5 16:02:58 2025
***************
*** 31,34 ****
  
  #include "version.h"
  
! char gnat_version_string[] = version_string;
--- 31,37 ----
  
  #include "version.h"
  
! /* Logically a reference to Gnatvsn.Ver_Len_Max.  Please keep in sync.  */
! #define VER_LEN_MAX 256
! 
! char gnat_version_string[VER_LEN_MAX] = version_string;
diff -Nrcpad gcc-13.3.0/gcc/alias.cc gcc-13.4.0/gcc/alias.cc
*** gcc-13.3.0/gcc/alias.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/alias.cc	Thu Jun  5 16:02:58 2025
*************** memrefs_conflict_p (poly_int64 xsize, rt
*** 2603,2621 ****
  	    return memrefs_conflict_p (xsize, x1, ysize, y1, c);
  	  if (poly_int_rtx_p (x1, &cx1))
  	    {
  	      if (poly_int_rtx_p (y1, &cy1))
! 		return memrefs_conflict_p (xsize, x0, ysize, y0,
! 					   c - cx1 + cy1);
  	      else
! 		return memrefs_conflict_p (xsize, x0, ysize, y, c - cx1);
  	    }
  	  else if (poly_int_rtx_p (y1, &cy1))
! 	    return memrefs_conflict_p (xsize, x, ysize, y0, c + cy1);
  
  	  return -1;
  	}
        else if (poly_int_rtx_p (x1, &cx1))
! 	return memrefs_conflict_p (xsize, x0, ysize, y, c - cx1);
      }
    else if (GET_CODE (y) == PLUS)
      {
--- 2603,2641 ----
  	    return memrefs_conflict_p (xsize, x1, ysize, y1, c);
  	  if (poly_int_rtx_p (x1, &cx1))
  	    {
+ 	      poly_offset_int co = c;
+ 	      co -= cx1;
  	      if (poly_int_rtx_p (y1, &cy1))
! 		{
! 		  co += cy1;
! 		  if (!co.to_shwi (&c))
! 		    return -1;
! 		  return memrefs_conflict_p (xsize, x0, ysize, y0, c);
! 		}
! 	      else if (!co.to_shwi (&c))
! 		return -1;
  	      else
! 		return memrefs_conflict_p (xsize, x0, ysize, y, c);
  	    }
  	  else if (poly_int_rtx_p (y1, &cy1))
! 	    {
! 	      poly_offset_int co = c;
! 	      co += cy1;
! 	      if (!co.to_shwi (&c))
! 		return -1;
! 	      return memrefs_conflict_p (xsize, x, ysize, y0, c);
! 	    }
  
  	  return -1;
  	}
        else if (poly_int_rtx_p (x1, &cx1))
! 	{
! 	  poly_offset_int co = c;
! 	  co -= cx1;
! 	  if (!co.to_shwi (&c))
! 	    return -1;
! 	  return memrefs_conflict_p (xsize, x0, ysize, y, c);
! 	}
      }
    else if (GET_CODE (y) == PLUS)
      {
*************** memrefs_conflict_p (poly_int64 xsize, rt
*** 2631,2637 ****
  
        poly_int64 cy1;
        if (poly_int_rtx_p (y1, &cy1))
! 	return memrefs_conflict_p (xsize, x, ysize, y0, c + cy1);
        else
  	return -1;
      }
--- 2651,2663 ----
  
        poly_int64 cy1;
        if (poly_int_rtx_p (y1, &cy1))
! 	{
! 	  poly_offset_int co = c;
! 	  co += cy1;
! 	  if (!co.to_shwi (&c))
! 	    return -1;
! 	  return memrefs_conflict_p (xsize, x, ysize, y0, c);
! 	}
        else
  	return -1;
      }
*************** memrefs_conflict_p (poly_int64 xsize, rt
*** 2684,2691 ****
  	  if (maybe_gt (xsize, 0))
  	    xsize = -xsize;
  	  if (maybe_ne (xsize, 0))
! 	    xsize += sc + 1;
! 	  c -= sc + 1;
  	  return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
  				     ysize, y, c);
  	}
--- 2710,2725 ----
  	  if (maybe_gt (xsize, 0))
  	    xsize = -xsize;
  	  if (maybe_ne (xsize, 0))
! 	    {
! 	      poly_offset_int xsizeo = xsize;
! 	      xsizeo += sc + 1;
! 	      if (!xsizeo.to_shwi (&xsize))
! 		return -1;
! 	    }
! 	  poly_offset_int co = c;
! 	  co -= sc + 1;
! 	  if (!co.to_shwi (&c))
! 	    return -1;
  	  return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
  				     ysize, y, c);
  	}
*************** memrefs_conflict_p (poly_int64 xsize, rt
*** 2699,2706 ****
  	  if (maybe_gt (ysize, 0))
  	    ysize = -ysize;
  	  if (maybe_ne (ysize, 0))
! 	    ysize += sc + 1;
! 	  c += sc + 1;
  	  return memrefs_conflict_p (xsize, x,
  				     ysize, canon_rtx (XEXP (y, 0)), c);
  	}
--- 2733,2748 ----
  	  if (maybe_gt (ysize, 0))
  	    ysize = -ysize;
  	  if (maybe_ne (ysize, 0))
! 	    {
! 	      poly_offset_int ysizeo = ysize;
! 	      ysizeo += sc + 1;
! 	      if (!ysizeo.to_shwi (&ysize))
! 		return -1;
! 	    }
! 	  poly_offset_int co = c;
! 	  co += sc + 1;
! 	  if (!co.to_shwi (&c))
! 	    return -1;
  	  return memrefs_conflict_p (xsize, x,
  				     ysize, canon_rtx (XEXP (y, 0)), c);
  	}
*************** memrefs_conflict_p (poly_int64 xsize, rt
*** 2711,2717 ****
        poly_int64 cx, cy;
        if (poly_int_rtx_p (x, &cx) && poly_int_rtx_p (y, &cy))
  	{
! 	  c += cy - cx;
  	  return offset_overlap_p (c, xsize, ysize);
  	}
  
--- 2753,2763 ----
        poly_int64 cx, cy;
        if (poly_int_rtx_p (x, &cx) && poly_int_rtx_p (y, &cy))
  	{
! 	  poly_offset_int co = c;
! 	  co += cy;
! 	  co -= cx;
! 	  if (!co.to_shwi (&c))
! 	    return -1;
  	  return offset_overlap_p (c, xsize, ysize);
  	}
  
diff -Nrcpad gcc-13.3.0/gcc/analyzer/ChangeLog gcc-13.4.0/gcc/analyzer/ChangeLog
*** gcc-13.3.0/gcc/analyzer/ChangeLog	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/analyzer/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/gcc/asan.cc gcc-13.4.0/gcc/asan.cc
*** gcc-13.3.0/gcc/asan.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/asan.cc	Thu Jun  5 16:02:58 2025
*************** asan_emit_stack_protection (rtx base, rt
*** 2097,2124 ****
        mem = adjust_address (mem, VOIDmode, base_align_bias);
        emit_move_insn (mem, gen_int_mode (ASAN_STACK_RETIRED_MAGIC, ptr_mode));
        unsigned HOST_WIDE_INT sz = asan_frame_size >> ASAN_SHADOW_SHIFT;
        if (use_after_return_class < 5
  	  && can_store_by_pieces (sz, builtin_memset_read_str, &c,
  				  BITS_PER_UNIT, true))
! 	{
! 	  /* Emit:
! 	       memset(ShadowBase, kAsanStackAfterReturnMagic, ShadowSize);
! 	       **SavedFlagPtr(FakeStack, class_id) = 0
! 	  */
! 	  store_by_pieces (shadow_mem, sz, builtin_memset_read_str, &c,
! 			   BITS_PER_UNIT, true, RETURN_BEGIN);
! 
! 	  unsigned HOST_WIDE_INT offset
! 	    = (1 << (use_after_return_class + 6));
! 	  offset -= GET_MODE_SIZE (ptr_mode);
! 	  mem = gen_rtx_MEM (ptr_mode, base);
! 	  mem = adjust_address (mem, ptr_mode, offset);
! 	  rtx addr = gen_reg_rtx (ptr_mode);
! 	  emit_move_insn (addr, mem);
! 	  addr = convert_memory_address (Pmode, addr);
! 	  mem = gen_rtx_MEM (QImode, addr);
! 	  emit_move_insn (mem, const0_rtx);
! 	}
        else if (use_after_return_class >= 5
  	       || !set_storage_via_setmem (shadow_mem,
  					   GEN_INT (sz),
--- 2097,2109 ----
        mem = adjust_address (mem, VOIDmode, base_align_bias);
        emit_move_insn (mem, gen_int_mode (ASAN_STACK_RETIRED_MAGIC, ptr_mode));
        unsigned HOST_WIDE_INT sz = asan_frame_size >> ASAN_SHADOW_SHIFT;
+       bool asan_stack_free_emitted_p = false;
        if (use_after_return_class < 5
  	  && can_store_by_pieces (sz, builtin_memset_read_str, &c,
  				  BITS_PER_UNIT, true))
! 	/* Emit memset (ShadowBase, kAsanStackAfterReturnMagic, ShadowSize).  */
! 	store_by_pieces (shadow_mem, sz, builtin_memset_read_str, &c,
! 			 BITS_PER_UNIT, true, RETURN_BEGIN);
        else if (use_after_return_class >= 5
  	       || !set_storage_via_setmem (shadow_mem,
  					   GEN_INT (sz),
*************** asan_emit_stack_protection (rtx base, rt
*** 2135,2140 ****
--- 2120,2139 ----
  			     GEN_INT (asan_frame_size + base_align_bias),
  			     TYPE_MODE (pointer_sized_int_node),
  			     orig_addr, ptr_mode);
+ 	  asan_stack_free_emitted_p = true;
+ 	}
+       if (!asan_stack_free_emitted_p)
+ 	{
+ 	  /* Emit **SavedFlagPtr (FakeStack, class_id) = 0.  */
+ 	  unsigned HOST_WIDE_INT offset = (1 << (use_after_return_class + 6));
+ 	  offset -= GET_MODE_SIZE (ptr_mode);
+ 	  mem = gen_rtx_MEM (ptr_mode, base);
+ 	  mem = adjust_address (mem, ptr_mode, offset);
+ 	  rtx addr = gen_reg_rtx (ptr_mode);
+ 	  emit_move_insn (addr, mem);
+ 	  addr = convert_memory_address (Pmode, addr);
+ 	  mem = gen_rtx_MEM (QImode, addr);
+ 	  emit_move_insn (mem, const0_rtx);
  	}
        lab = gen_label_rtx ();
        emit_jump (lab);
*************** maybe_cast_to_ptrmode (location_t loc, t
*** 2607,2613 ****
    if (ptrofftype_p (len))
      return len;
    gimple *g = gimple_build_assign (make_ssa_name (pointer_sized_int_node),
! 				  NOP_EXPR, len);
    gimple_set_location (g, loc);
    if (before_p)
      gsi_safe_insert_before (iter, g);
--- 2606,2612 ----
    if (ptrofftype_p (len))
      return len;
    gimple *g = gimple_build_assign (make_ssa_name (pointer_sized_int_node),
! 				   NOP_EXPR, len);
    gimple_set_location (g, loc);
    if (before_p)
      gsi_safe_insert_before (iter, g);
*************** build_check_stmt (location_t loc, tree b
*** 2641,2656 ****
  		  bool is_non_zero_len, bool before_p, bool is_store,
  		  bool is_scalar_access, unsigned int align = 0)
  {
-   gimple_stmt_iterator gsi = *iter;
    gimple *g;
  
    gcc_assert (!(size_in_bytes > 0 && !is_non_zero_len));
    gcc_assert (size_in_bytes == -1 || size_in_bytes >= 1);
  
-   gsi = *iter;
- 
    base = unshare_expr (base);
!   base = maybe_create_ssa_name (loc, base, &gsi, before_p);
  
    if (len)
      {
--- 2640,2652 ----
  		  bool is_non_zero_len, bool before_p, bool is_store,
  		  bool is_scalar_access, unsigned int align = 0)
  {
    gimple *g;
  
    gcc_assert (!(size_in_bytes > 0 && !is_non_zero_len));
    gcc_assert (size_in_bytes == -1 || size_in_bytes >= 1);
  
    base = unshare_expr (base);
!   base = maybe_create_ssa_name (loc, base, iter, before_p);
  
    if (len)
      {
*************** build_check_stmt (location_t loc, tree b
*** 2701,2712 ****
  						 align / BITS_PER_UNIT));
    gimple_set_location (g, loc);
    if (before_p)
!     gsi_safe_insert_before (&gsi, g);
    else
      {
!       gsi_insert_after (&gsi, g, GSI_NEW_STMT);
!       gsi_next (&gsi);
!       *iter = gsi;
      }
  }
  
--- 2697,2707 ----
  						 align / BITS_PER_UNIT));
    gimple_set_location (g, loc);
    if (before_p)
!     gsi_safe_insert_before (iter, g);
    else
      {
!       gsi_insert_after (iter, g, GSI_NEW_STMT);
!       gsi_next (iter);
      }
  }
  
diff -Nrcpad gcc-13.3.0/gcc/auto-profile.cc gcc-13.4.0/gcc/auto-profile.cc
*** gcc-13.3.0/gcc/auto-profile.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/auto-profile.cc	Thu Jun  5 16:02:58 2025
*************** afdo_annotate_cfg (const stmt_set &promo
*** 1536,1543 ****
  
    if (s == NULL)
      return;
-   cgraph_node::get (current_function_decl)->count
-      = profile_count::from_gcov_type (s->head_count ()).afdo ();
    ENTRY_BLOCK_PTR_FOR_FN (cfun)->count
       = profile_count::from_gcov_type (s->head_count ()).afdo ();
    EXIT_BLOCK_PTR_FOR_FN (cfun)->count = profile_count::zero ().afdo ();
--- 1536,1541 ----
*************** afdo_annotate_cfg (const stmt_set &promo
*** 1576,1581 ****
--- 1574,1581 ----
        /* Calculate, propagate count and probability information on CFG.  */
        afdo_calculate_branch_prob (&annotated_bb);
      }
+   cgraph_node::get(current_function_decl)->count
+       = ENTRY_BLOCK_PTR_FOR_FN(cfun)->count;
    update_max_bb_count ();
    profile_status_for_fn (cfun) = PROFILE_READ;
    if (flag_value_profile_transformations)
diff -Nrcpad gcc-13.3.0/gcc/builtins.cc gcc-13.4.0/gcc/builtins.cc
*** gcc-13.3.0/gcc/builtins.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/builtins.cc	Thu Jun  5 16:02:58 2025
*************** static tree fold_builtin_unordered_cmp (
*** 174,181 ****
  static tree fold_builtin_varargs (location_t, tree, tree*, int);
  
  static tree fold_builtin_strpbrk (location_t, tree, tree, tree, tree);
! static tree fold_builtin_strspn (location_t, tree, tree, tree);
! static tree fold_builtin_strcspn (location_t, tree, tree, tree);
  
  static rtx expand_builtin_object_size (tree);
  static rtx expand_builtin_memory_chk (tree, rtx, machine_mode,
--- 174,181 ----
  static tree fold_builtin_varargs (location_t, tree, tree*, int);
  
  static tree fold_builtin_strpbrk (location_t, tree, tree, tree, tree);
! static tree fold_builtin_strspn (location_t, tree, tree, tree, tree);
! static tree fold_builtin_strcspn (location_t, tree, tree, tree, tree);
  
  static rtx expand_builtin_object_size (tree);
  static rtx expand_builtin_memory_chk (tree, rtx, machine_mode,
*************** fold_builtin_frexp (location_t loc, tree
*** 8976,8989 ****
        switch (value->cl)
        {
        case rvc_zero:
  	/* For +-0, return (*exp = 0, +-0).  */
  	exp = integer_zero_node;
  	frac = arg0;
  	break;
-       case rvc_nan:
-       case rvc_inf:
- 	/* For +-NaN or +-Inf, *exp is unspecified, return arg0.  */
- 	return omit_one_operand_loc (loc, rettype, arg0, arg1);
        case rvc_normal:
  	{
  	  /* Since the frexp function always expects base 2, and in
--- 8976,8991 ----
        switch (value->cl)
        {
        case rvc_zero:
+       case rvc_nan:
+       case rvc_inf:
  	/* For +-0, return (*exp = 0, +-0).  */
+ 	/* For +-NaN or +-Inf, *exp is unspecified, but something should
+ 	   be stored there so that it isn't read from uninitialized object.
+ 	   As glibc and newlib store *exp = 0 for +-Inf/NaN, storing
+ 	   0 here as well is easiest.  */
  	exp = integer_zero_node;
  	frac = arg0;
  	break;
        case rvc_normal:
  	{
  	  /* Since the frexp function always expects base 2, and in
*************** fold_builtin_interclass_mathfn (location
*** 9111,9117 ****
  	    arg = fold_build1_loc (loc, NOP_EXPR, type, arg);
  	  }
  	get_max_float (REAL_MODE_FORMAT (mode), buf, sizeof (buf), false);
! 	real_from_string (&r, buf);
  	result = build_call_expr (isgr_fn, 2,
  				  fold_build1_loc (loc, ABS_EXPR, type, arg),
  				  build_real (type, r));
--- 9113,9119 ----
  	    arg = fold_build1_loc (loc, NOP_EXPR, type, arg);
  	  }
  	get_max_float (REAL_MODE_FORMAT (mode), buf, sizeof (buf), false);
! 	real_from_string3 (&r, buf, mode);
  	result = build_call_expr (isgr_fn, 2,
  				  fold_build1_loc (loc, ABS_EXPR, type, arg),
  				  build_real (type, r));
*************** fold_builtin_interclass_mathfn (location
*** 9135,9141 ****
  	    arg = fold_build1_loc (loc, NOP_EXPR, type, arg);
  	  }
  	get_max_float (REAL_MODE_FORMAT (mode), buf, sizeof (buf), false);
! 	real_from_string (&r, buf);
  	result = build_call_expr (isle_fn, 2,
  				  fold_build1_loc (loc, ABS_EXPR, type, arg),
  				  build_real (type, r));
--- 9137,9143 ----
  	    arg = fold_build1_loc (loc, NOP_EXPR, type, arg);
  	  }
  	get_max_float (REAL_MODE_FORMAT (mode), buf, sizeof (buf), false);
! 	real_from_string3 (&r, buf, mode);
  	result = build_call_expr (isle_fn, 2,
  				  fold_build1_loc (loc, ABS_EXPR, type, arg),
  				  build_real (type, r));
*************** fold_builtin_interclass_mathfn (location
*** 9174,9182 ****
  	arg = fold_build1_loc (loc, ABS_EXPR, type, arg);
  
  	get_max_float (REAL_MODE_FORMAT (mode), buf, sizeof (buf), false);
! 	real_from_string (&rmax, buf);
! 	sprintf (buf, "0x1p%d", REAL_MODE_FORMAT (orig_mode)->emin - 1);
! 	real_from_string (&rmin, buf);
  	max_exp = build_real (type, rmax);
  	min_exp = build_real (type, rmin);
  
--- 9176,9187 ----
  	arg = fold_build1_loc (loc, ABS_EXPR, type, arg);
  
  	get_max_float (REAL_MODE_FORMAT (mode), buf, sizeof (buf), false);
! 	real_from_string3 (&rmax, buf, mode);
! 	if (DECIMAL_FLOAT_MODE_P (mode))
! 	  sprintf (buf, "1E%d", REAL_MODE_FORMAT (orig_mode)->emin - 1);
! 	else
! 	  sprintf (buf, "0x1p%d", REAL_MODE_FORMAT (orig_mode)->emin - 1);
! 	real_from_string3 (&rmin, buf, orig_mode);
  	max_exp = build_real (type, rmax);
  	min_exp = build_real (type, rmin);
  
*************** fold_builtin_fpclassify (location_t loc,
*** 9365,9392 ****
  	     (x == 0 ? FP_ZERO : FP_SUBNORMAL))).  */
  
    tmp = fold_build2_loc (loc, EQ_EXPR, integer_type_node, arg,
! 		     build_real (type, dconst0));
    res = fold_build3_loc (loc, COND_EXPR, integer_type_node,
! 		     tmp, fp_zero, fp_subnormal);
  
!   sprintf (buf, "0x1p%d", REAL_MODE_FORMAT (mode)->emin - 1);
!   real_from_string (&r, buf);
    tmp = fold_build2_loc (loc, GE_EXPR, integer_type_node,
! 		     arg, build_real (type, r));
!   res = fold_build3_loc (loc, COND_EXPR, integer_type_node, tmp, fp_normal, res);
  
    if (tree_expr_maybe_infinite_p (arg))
      {
        tmp = fold_build2_loc (loc, EQ_EXPR, integer_type_node, arg,
! 			 build_real (type, dconstinf));
        res = fold_build3_loc (loc, COND_EXPR, integer_type_node, tmp,
! 			 fp_infinite, res);
      }
  
    if (tree_expr_maybe_nan_p (arg))
      {
        tmp = fold_build2_loc (loc, ORDERED_EXPR, integer_type_node, arg, arg);
!       res = fold_build3_loc (loc, COND_EXPR, integer_type_node, tmp, res, fp_nan);
      }
  
    return res;
--- 9370,9402 ----
  	     (x == 0 ? FP_ZERO : FP_SUBNORMAL))).  */
  
    tmp = fold_build2_loc (loc, EQ_EXPR, integer_type_node, arg,
! 			 build_real (type, dconst0));
    res = fold_build3_loc (loc, COND_EXPR, integer_type_node,
! 			 tmp, fp_zero, fp_subnormal);
  
!   if (DECIMAL_FLOAT_MODE_P (mode))
!     sprintf (buf, "1E%d", REAL_MODE_FORMAT (mode)->emin - 1);
!   else
!     sprintf (buf, "0x1p%d", REAL_MODE_FORMAT (mode)->emin - 1);
!   real_from_string3 (&r, buf, mode);
    tmp = fold_build2_loc (loc, GE_EXPR, integer_type_node,
! 			 arg, build_real (type, r));
!   res = fold_build3_loc (loc, COND_EXPR, integer_type_node, tmp,
! 			 fp_normal, res);
  
    if (tree_expr_maybe_infinite_p (arg))
      {
        tmp = fold_build2_loc (loc, EQ_EXPR, integer_type_node, arg,
! 			     build_real (type, dconstinf));
        res = fold_build3_loc (loc, COND_EXPR, integer_type_node, tmp,
! 			     fp_infinite, res);
      }
  
    if (tree_expr_maybe_nan_p (arg))
      {
        tmp = fold_build2_loc (loc, ORDERED_EXPR, integer_type_node, arg, arg);
!       res = fold_build3_loc (loc, COND_EXPR, integer_type_node, tmp,
! 			     res, fp_nan);
      }
  
    return res;
*************** fold_builtin_arith_overflow (location_t
*** 9539,9545 ****
        tree ctype = build_complex_type (type);
        tree call = build_call_expr_internal_loc (loc, ifn, ctype, 2,
  						arg0, arg1);
!       tree tgt = save_expr (call);
        intres = build1_loc (loc, REALPART_EXPR, type, tgt);
        ovfres = build1_loc (loc, IMAGPART_EXPR, type, tgt);
        ovfres = fold_convert_loc (loc, boolean_type_node, ovfres);
--- 9549,9569 ----
        tree ctype = build_complex_type (type);
        tree call = build_call_expr_internal_loc (loc, ifn, ctype, 2,
  						arg0, arg1);
!       tree tgt;
!       if (ovf_only)
! 	{
! 	  tgt = call;
! 	  intres = NULL_TREE;
! 	}
!       else
! 	{
! 	  /* Force SAVE_EXPR even for calls which satisfy tree_invariant_p_1,
! 	     as while the call itself is const, the REALPART_EXPR store is
! 	     certainly not.  And in any case, we want just one call,
! 	     not multiple and trying to CSE them later.  */
! 	  TREE_SIDE_EFFECTS (call) = 1;
! 	  tgt = save_expr (call);
! 	}
        intres = build1_loc (loc, REALPART_EXPR, type, tgt);
        ovfres = build1_loc (loc, IMAGPART_EXPR, type, tgt);
        ovfres = fold_convert_loc (loc, boolean_type_node, ovfres);
*************** fold_builtin_2 (location_t loc, tree exp
*** 9801,9810 ****
        return fold_builtin_modf (loc, arg0, arg1, type);
  
      case BUILT_IN_STRSPN:
!       return fold_builtin_strspn (loc, expr, arg0, arg1);
  
      case BUILT_IN_STRCSPN:
!       return fold_builtin_strcspn (loc, expr, arg0, arg1);
  
      case BUILT_IN_STRPBRK:
        return fold_builtin_strpbrk (loc, expr, arg0, arg1, type);
--- 9825,9834 ----
        return fold_builtin_modf (loc, arg0, arg1, type);
  
      case BUILT_IN_STRSPN:
!       return fold_builtin_strspn (loc, expr, arg0, arg1, type);
  
      case BUILT_IN_STRCSPN:
!       return fold_builtin_strcspn (loc, expr, arg0, arg1, type);
  
      case BUILT_IN_STRPBRK:
        return fold_builtin_strpbrk (loc, expr, arg0, arg1, type);
*************** fold_builtin_strpbrk (location_t loc, tr
*** 10298,10304 ****
     form of the builtin function call.  */
  
  static tree
! fold_builtin_strspn (location_t loc, tree expr, tree s1, tree s2)
  {
    if (!validate_arg (s1, POINTER_TYPE)
        || !validate_arg (s2, POINTER_TYPE))
--- 10322,10328 ----
     form of the builtin function call.  */
  
  static tree
! fold_builtin_strspn (location_t loc, tree expr, tree s1, tree s2, tree type)
  {
    if (!validate_arg (s1, POINTER_TYPE)
        || !validate_arg (s2, POINTER_TYPE))
*************** fold_builtin_strspn (location_t loc, tre
*** 10314,10321 ****
    if ((p1 && *p1 == '\0') || (p2 && *p2 == '\0'))
      /* Evaluate and ignore both arguments in case either one has
         side-effects.  */
!     return omit_two_operands_loc (loc, size_type_node, size_zero_node,
! 				  s1, s2);
    return NULL_TREE;
  }
  
--- 10338,10344 ----
    if ((p1 && *p1 == '\0') || (p2 && *p2 == '\0'))
      /* Evaluate and ignore both arguments in case either one has
         side-effects.  */
!     return omit_two_operands_loc (loc, type, size_zero_node, s1, s2);
    return NULL_TREE;
  }
  
*************** fold_builtin_strspn (location_t loc, tre
*** 10338,10344 ****
     form of the builtin function call.  */
  
  static tree
! fold_builtin_strcspn (location_t loc, tree expr, tree s1, tree s2)
  {
    if (!validate_arg (s1, POINTER_TYPE)
        || !validate_arg (s2, POINTER_TYPE))
--- 10361,10367 ----
     form of the builtin function call.  */
  
  static tree
! fold_builtin_strcspn (location_t loc, tree expr, tree s1, tree s2, tree type)
  {
    if (!validate_arg (s1, POINTER_TYPE)
        || !validate_arg (s2, POINTER_TYPE))
*************** fold_builtin_strcspn (location_t loc, tr
*** 10354,10361 ****
      {
        /* Evaluate and ignore argument s2 in case it has
  	 side-effects.  */
!       return omit_one_operand_loc (loc, size_type_node,
! 				   size_zero_node, s2);
      }
  
    /* If the second argument is "", return __builtin_strlen(s1).  */
--- 10377,10383 ----
      {
        /* Evaluate and ignore argument s2 in case it has
  	 side-effects.  */
!       return omit_one_operand_loc (loc, type, size_zero_node, s2);
      }
  
    /* If the second argument is "", return __builtin_strlen(s1).  */
*************** fold_builtin_strcspn (location_t loc, tr
*** 10369,10375 ****
        if (!fn)
  	return NULL_TREE;
  
!       return build_call_expr_loc (loc, fn, 1, s1);
      }
    return NULL_TREE;
  }
--- 10391,10398 ----
        if (!fn)
  	return NULL_TREE;
  
!       return fold_convert_loc (loc, type,
! 			       build_call_expr_loc (loc, fn, 1, s1));
      }
    return NULL_TREE;
  }
diff -Nrcpad gcc-13.3.0/gcc/c/ChangeLog gcc-13.4.0/gcc/c/ChangeLog
*** gcc-13.3.0/gcc/c/ChangeLog	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/c/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,46 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-04-02  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/119582
+ 	* c-typeck.cc (pointer_diff, build_binary_op): Call c_fully_fold on
+ 	__sanitizer_ptr_sub or __sanitizer_ptr_cmp arguments.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-02-25  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/119000
+ 	* c-parser.cc (c_parser_omp_atomic): For omp write call
+ 	default_function_array_read_conversion on the rhs expression.
+ 	Merge the two adjacent if (code == NOP_EXPR) blocks.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-11-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/117745
+ 	* c-parser.cc (c_parser_sizeof_expression): If type_name is NULL,
+ 	just expr.set_error () and goto sizeof_expr instead of doing error
+ 	recovery manually.
+ 
+ 2024-06-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-06-06  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/114493
+ 	* c-decl.cc (c_fixup_may_alias): New function.
+ 	(finish_struct): Call it if "may_alias" attribute is
+ 	specified.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/gcc/c/c-decl.cc gcc-13.4.0/gcc/c/c-decl.cc
*** gcc-13.3.0/gcc/c/c-decl.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/c/c-decl.cc	Thu Jun  5 16:02:58 2025
*************** is_flexible_array_member_p (bool is_last
*** 9115,9120 ****
--- 9115,9131 ----
  }
  
  
+ /* TYPE is a struct or union that we're applying may_alias to after the body is
+    parsed.  Fixup any POINTER_TO types.  */
+ 
+ static void
+ c_fixup_may_alias (tree type)
+ {
+   for (tree t = TYPE_POINTER_TO (type); t; t = TYPE_NEXT_PTR_TO (t))
+     for (tree v = TYPE_MAIN_VARIANT (t); v; v = TYPE_NEXT_VARIANT (v))
+       TYPE_REF_CAN_ALIAS_ALL (v) = true;
+ }
+ 
  /* Fill in the fields of a RECORD_TYPE or UNION_TYPE node, T.
     LOC is the location of the RECORD_TYPE or UNION_TYPE's definition.
     FIELDLIST is a chain of FIELD_DECL nodes for the fields.
*************** finish_struct (location_t loc, tree t, t
*** 9409,9414 ****
--- 9420,9429 ----
        warning_at (loc, 0, "union cannot be made transparent");
      }
  
+   if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (t)))
+     for (x = TYPE_MAIN_VARIANT (t); x; x = TYPE_NEXT_VARIANT (x))
+       c_fixup_may_alias (x);
+ 
    tree incomplete_vars = C_TYPE_INCOMPLETE_VARS (TYPE_MAIN_VARIANT (t));
    for (x = TYPE_MAIN_VARIANT (t); x; x = TYPE_NEXT_VARIANT (x))
      {
diff -Nrcpad gcc-13.3.0/gcc/c/c-parser.cc gcc-13.4.0/gcc/c/c-parser.cc
*** gcc-13.3.0/gcc/c/c-parser.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/c/c-parser.cc	Thu Jun  5 16:02:58 2025
*************** c_parser_sizeof_expression (c_parser *pa
*** 8872,8884 ****
        finish = parser->tokens_buf[0].location;
        if (type_name == NULL)
  	{
! 	  struct c_expr ret;
! 	  c_inhibit_evaluation_warnings--;
! 	  in_sizeof--;
! 	  ret.set_error ();
! 	  ret.original_code = ERROR_MARK;
! 	  ret.original_type = NULL;
! 	  return ret;
  	}
        if (c_parser_next_token_is (parser, CPP_OPEN_BRACE))
  	{
--- 8872,8882 ----
        finish = parser->tokens_buf[0].location;
        if (type_name == NULL)
  	{
! 	  /* Let c_expr_sizeof_expr call pop_maybe_used and fill in c_expr
! 	     for parsing error; the parsing of the expression could have
! 	     called record_maybe_used_decl.  */
! 	  expr.set_error ();
! 	  goto sizeof_expr;
  	}
        if (c_parser_next_token_is (parser, CPP_OPEN_BRACE))
  	{
*************** c_parser_omp_atomic (location_t loc, c_p
*** 19271,19279 ****
  	goto saw_error;
        if (code == NOP_EXPR)
  	{
! 	  lhs = c_parser_expression (parser).value;
! 	  lhs = c_fully_fold (lhs, false, NULL);
! 	  if (lhs == error_mark_node)
  	    goto saw_error;
  	}
        else
--- 19269,19284 ----
  	goto saw_error;
        if (code == NOP_EXPR)
  	{
! 	  eloc = c_parser_peek_token (parser)->location;
! 	  expr = c_parser_expression (parser);
! 	  expr = default_function_array_read_conversion (eloc, expr);
! 	  /* atomic write is represented by OMP_ATOMIC with NOP_EXPR
! 	     opcode.  */
! 	  code = OMP_ATOMIC;
! 	  lhs = v;
! 	  v = NULL_TREE;
! 	  rhs = c_fully_fold (expr.value, false, NULL);
! 	  if (rhs == error_mark_node)
  	    goto saw_error;
  	}
        else
*************** c_parser_omp_atomic (location_t loc, c_p
*** 19286,19300 ****
  	  if (non_lvalue_p)
  	    lhs = non_lvalue (lhs);
  	}
-       if (code == NOP_EXPR)
- 	{
- 	  /* atomic write is represented by OMP_ATOMIC with NOP_EXPR
- 	     opcode.  */
- 	  code = OMP_ATOMIC;
- 	  rhs = lhs;
- 	  lhs = v;
- 	  v = NULL_TREE;
- 	}
        goto done;
      case OMP_ATOMIC_CAPTURE_NEW:
        if (c_parser_next_token_is (parser, CPP_OPEN_BRACE))
--- 19291,19296 ----
diff -Nrcpad gcc-13.3.0/gcc/c/c-typeck.cc gcc-13.4.0/gcc/c/c-typeck.cc
*** gcc-13.3.0/gcc/c/c-typeck.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/c/c-typeck.cc	Thu Jun  5 16:02:58 2025
*************** pointer_diff (location_t loc, tree op0,
*** 4141,4148 ****
    if (current_function_decl != NULL_TREE
        && sanitize_flags_p (SANITIZE_POINTER_SUBTRACT))
      {
!       op0 = save_expr (op0);
!       op1 = save_expr (op1);
  
        tree tt = builtin_decl_explicit (BUILT_IN_ASAN_POINTER_SUBTRACT);
        *instrument_expr = build_call_expr_loc (loc, tt, 2, op0, op1);
--- 4141,4148 ----
    if (current_function_decl != NULL_TREE
        && sanitize_flags_p (SANITIZE_POINTER_SUBTRACT))
      {
!       op0 = save_expr (c_fully_fold (op0, false, NULL));
!       op1 = save_expr (c_fully_fold (op1, false, NULL));
  
        tree tt = builtin_decl_explicit (BUILT_IN_ASAN_POINTER_SUBTRACT);
        *instrument_expr = build_call_expr_loc (loc, tt, 2, op0, op1);
*************** build_binary_op (location_t location, en
*** 12967,12974 ****
  	  && current_function_decl != NULL_TREE
  	  && sanitize_flags_p (SANITIZE_POINTER_COMPARE))
  	{
! 	  op0 = save_expr (op0);
! 	  op1 = save_expr (op1);
  
  	  tree tt = builtin_decl_explicit (BUILT_IN_ASAN_POINTER_COMPARE);
  	  instrument_expr = build_call_expr_loc (location, tt, 2, op0, op1);
--- 12967,12974 ----
  	  && current_function_decl != NULL_TREE
  	  && sanitize_flags_p (SANITIZE_POINTER_COMPARE))
  	{
! 	  op0 = save_expr (c_fully_fold (op0, false, NULL));
! 	  op1 = save_expr (c_fully_fold (op1, false, NULL));
  
  	  tree tt = builtin_decl_explicit (BUILT_IN_ASAN_POINTER_COMPARE);
  	  instrument_expr = build_call_expr_loc (location, tt, 2, op0, op1);
diff -Nrcpad gcc-13.3.0/gcc/c-family/ChangeLog gcc-13.4.0/gcc/c-family/ChangeLog
*** gcc-13.3.0/gcc/c-family/ChangeLog	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/c-family/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,47 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-11-26  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/43374
+ 	* c-cppbuiltin.cc (builtin_define_decimal_float_constants): Use
+ 	get_max_float.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-10-22  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/117230
+ 	* c-warn.cc (sizeof_pointer_memaccess_warning): Only compare
+ 	TYPE_PRECISION of TREE_TYPE (type) to precision of char if
+ 	TREE_TYPE (type) is integral type.
+ 
+ 2025-03-13  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/119265
+ 	* c-ada-spec.cc (dump_ada_node) <INTEGER_TYPE>: Deal with typedefs
+ 	of unsigned __int128.
+ 
+ 2024-10-01  Jason Merrill  <jason@redhat.com>
+ 
+ 	* c-cppbuiltin.cc (c_cpp_builtins): Don't define __cpp_concepts
+ 	before C++17.
+ 
+ 2024-06-17  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-06-17  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/115290
+ 	* c-warn.cc (do_warn_array_compare): Use %E rather than %D for
+ 	printing op0 and op1; if those operands aren't decls, also print
+ 	parens around them.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/gcc/c-family/c-ada-spec.cc gcc-13.4.0/gcc/c-family/c-ada-spec.cc
*** gcc-13.3.0/gcc/c-family/c-ada-spec.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/c-family/c-ada-spec.cc	Thu Jun  5 16:02:58 2025
*************** dump_ada_node (pretty_printer *buffer, t
*** 2190,2197 ****
      case BOOLEAN_TYPE:
        if (TYPE_NAME (node)
  	  && !(TREE_CODE (TYPE_NAME (node)) == TYPE_DECL
! 	       && !strcmp (IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (node))),
! 			   "__int128")))
  	{
  	  if (TREE_CODE (TYPE_NAME (node)) == IDENTIFIER_NODE)
  	    pp_ada_tree_identifier (buffer, TYPE_NAME (node), node,
--- 2190,2197 ----
      case BOOLEAN_TYPE:
        if (TYPE_NAME (node)
  	  && !(TREE_CODE (TYPE_NAME (node)) == TYPE_DECL
! 	       && !strncmp (IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (node))),
! 			   "__int128", 8)))
  	{
  	  if (TREE_CODE (TYPE_NAME (node)) == IDENTIFIER_NODE)
  	    pp_ada_tree_identifier (buffer, TYPE_NAME (node), node,
diff -Nrcpad gcc-13.3.0/gcc/c-family/c-cppbuiltin.cc gcc-13.4.0/gcc/c-family/c-cppbuiltin.cc
*** gcc-13.3.0/gcc/c-family/c-cppbuiltin.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/c-family/c-cppbuiltin.cc	Thu Jun  5 16:02:58 2025
*************** builtin_define_decimal_float_constants (
*** 357,373 ****
  
    /* Compute the maximum representable value.  */
    sprintf (name, "__%s_MAX__", name_prefix);
!   p = buf;
!   for (digits = fmt->p; digits; digits--)
!     {
!       *p++ = '9';
!       if (digits == fmt->p)
! 	*p++ = '.';
!     }
!   *p = 0;
!   /* fmt->p plus 1, to account for the decimal point and fmt->emax
!      minus 1 because the digits are nines, not 1.0.  */
!   sprintf (&buf[fmt->p + 1], "E%d%s", fmt->emax - 1, suffix);
    builtin_define_with_value (name, buf, 0);
  
    /* Compute epsilon (the difference between 1 and least value greater
--- 357,364 ----
  
    /* Compute the maximum representable value.  */
    sprintf (name, "__%s_MAX__", name_prefix);
!   get_max_float (fmt, buf, sizeof (buf) - strlen (suffix), false);
!   strcat (buf, suffix);
    builtin_define_with_value (name, buf, 0);
  
    /* Compute epsilon (the difference between 1 and least value greater
*************** c_cpp_builtins (cpp_reader *pfile)
*** 1083,1092 ****
  	}
        if (flag_concepts)
          {
! 	  if (cxx_dialect >= cxx20)
! 	    cpp_define (pfile, "__cpp_concepts=202002L");
!           else
              cpp_define (pfile, "__cpp_concepts=201507L");
          }
        if (flag_contracts)
  	{
--- 1074,1083 ----
  	}
        if (flag_concepts)
          {
! 	  if (flag_concepts_ts && cxx_dialect < cxx20)
              cpp_define (pfile, "__cpp_concepts=201507L");
+ 	  else if (cxx_dialect > cxx14)
+ 	    cpp_define (pfile, "__cpp_concepts=202002L");
          }
        if (flag_contracts)
  	{
diff -Nrcpad gcc-13.3.0/gcc/c-family/c-warn.cc gcc-13.4.0/gcc/c-family/c-warn.cc
*** gcc-13.3.0/gcc/c-family/c-warn.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/c-family/c-warn.cc	Thu Jun  5 16:02:58 2025
*************** sizeof_pointer_memaccess_warning (locati
*** 944,951 ****
  			"argument to %<sizeof%> in %qD call is the same "
  			"expression as the destination; did you mean to "
  			"remove the addressof?", callee);
! 	  else if ((TYPE_PRECISION (TREE_TYPE (type))
! 		    == TYPE_PRECISION (char_type_node))
  		   || strop)
  	    warning_at (loc, OPT_Wsizeof_pointer_memaccess,
  			"argument to %<sizeof%> in %qD call is the same "
--- 944,952 ----
  			"argument to %<sizeof%> in %qD call is the same "
  			"expression as the destination; did you mean to "
  			"remove the addressof?", callee);
! 	  else if ((INTEGRAL_TYPE_P (TREE_TYPE (type))
! 		    && (TYPE_PRECISION (TREE_TYPE (type))
! 			== TYPE_PRECISION (char_type_node)))
  		   || strop)
  	    warning_at (loc, OPT_Wsizeof_pointer_memaccess,
  			"argument to %<sizeof%> in %qD call is the same "
*************** sizeof_pointer_memaccess_warning (locati
*** 984,991 ****
  			"argument to %<sizeof%> in %qD call is the same "
  			"expression as the source; did you mean to "
  			"remove the addressof?", callee);
! 	  else if ((TYPE_PRECISION (TREE_TYPE (type))
! 		    == TYPE_PRECISION (char_type_node))
  		   || strop)
  	    warning_at (loc, OPT_Wsizeof_pointer_memaccess,
  			"argument to %<sizeof%> in %qD call is the same "
--- 985,993 ----
  			"argument to %<sizeof%> in %qD call is the same "
  			"expression as the source; did you mean to "
  			"remove the addressof?", callee);
! 	  else if ((INTEGRAL_TYPE_P (TREE_TYPE (type))
! 		    && (TYPE_PRECISION (TREE_TYPE (type))
! 			== TYPE_PRECISION (char_type_node)))
  		   || strop)
  	    warning_at (loc, OPT_Wsizeof_pointer_memaccess,
  			"argument to %<sizeof%> in %qD call is the same "
*************** sizeof_pointer_memaccess_warning (locati
*** 1024,1031 ****
  			"argument to %<sizeof%> in %qD call is the same "
  			"expression as the first source; did you mean to "
  			"remove the addressof?", callee);
! 	  else if ((TYPE_PRECISION (TREE_TYPE (type))
! 		    == TYPE_PRECISION (char_type_node))
  		   || strop)
  	    warning_at (loc, OPT_Wsizeof_pointer_memaccess,
  			"argument to %<sizeof%> in %qD call is the same "
--- 1026,1034 ----
  			"argument to %<sizeof%> in %qD call is the same "
  			"expression as the first source; did you mean to "
  			"remove the addressof?", callee);
! 	  else if ((INTEGRAL_TYPE_P (TREE_TYPE (type))
! 		    && (TYPE_PRECISION (TREE_TYPE (type))
! 			== TYPE_PRECISION (char_type_node)))
  		   || strop)
  	    warning_at (loc, OPT_Wsizeof_pointer_memaccess,
  			"argument to %<sizeof%> in %qD call is the same "
*************** sizeof_pointer_memaccess_warning (locati
*** 1064,1071 ****
  			"argument to %<sizeof%> in %qD call is the same "
  			"expression as the second source; did you mean to "
  			"remove the addressof?", callee);
! 	  else if ((TYPE_PRECISION (TREE_TYPE (type))
! 		    == TYPE_PRECISION (char_type_node))
  		   || strop)
  	    warning_at (loc, OPT_Wsizeof_pointer_memaccess,
  			"argument to %<sizeof%> in %qD call is the same "
--- 1067,1075 ----
  			"argument to %<sizeof%> in %qD call is the same "
  			"expression as the second source; did you mean to "
  			"remove the addressof?", callee);
! 	  else if ((INTEGRAL_TYPE_P (TREE_TYPE (type))
! 		    && (TYPE_PRECISION (TREE_TYPE (type))
! 			== TYPE_PRECISION (char_type_node)))
  		   || strop)
  	    warning_at (loc, OPT_Wsizeof_pointer_memaccess,
  			"argument to %<sizeof%> in %qD call is the same "
*************** do_warn_array_compare (location_t locati
*** 3827,3837 ****
        /* C doesn't allow +arr.  */
        if (c_dialect_cxx ())
  	inform (location, "use unary %<+%> which decays operands to pointers "
! 		"or %<&%D[0] %s &%D[0]%> to compare the addresses",
! 		op0, op_symbol_code (code), op1);
        else
! 	inform (location, "use %<&%D[0] %s &%D[0]%> to compare the addresses",
! 		op0, op_symbol_code (code), op1);
      }
  }
  
--- 3831,3846 ----
        /* C doesn't allow +arr.  */
        if (c_dialect_cxx ())
  	inform (location, "use unary %<+%> which decays operands to pointers "
! 		"or %<&%s%E%s[0] %s &%s%E%s[0]%> to compare the addresses",
! 		DECL_P (op0) ? "" : "(", op0, DECL_P (op0) ? "" : ")",
! 		op_symbol_code (code),
! 		DECL_P (op1) ? "" : "(", op1, DECL_P (op1) ? "" : ")");
        else
! 	inform (location,
! 		"use %<&%s%E%s[0] %s &%s%E%s[0]%> to compare the addresses",
! 		DECL_P (op0) ? "" : "(", op0, DECL_P (op0) ? "" : ")",
! 		op_symbol_code (code),
! 		DECL_P (op1) ? "" : "(", op1, DECL_P (op1) ? "" : ")");
      }
  }
  
diff -Nrcpad gcc-13.3.0/gcc/cgraph.cc gcc-13.4.0/gcc/cgraph.cc
*** gcc-13.3.0/gcc/cgraph.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/cgraph.cc	Thu Jun  5 16:02:58 2025
*************** symbol_table::create_edge (cgraph_node *
*** 892,898 ****
    edge->m_summary_id = -1;
    edges_count++;
  
!   gcc_assert (++edges_max_uid != 0);
    edge->m_uid = edges_max_uid;
    edge->aux = NULL;
    edge->caller = caller;
--- 892,899 ----
    edge->m_summary_id = -1;
    edges_count++;
  
!   ++edges_max_uid;
!   gcc_assert (edges_max_uid != 0);
    edge->m_uid = edges_max_uid;
    edge->aux = NULL;
    edge->caller = caller;
*************** cgraph_node_cannot_be_local_p_1 (cgraph_
*** 2433,2439 ****
  		&& !node->forced_by_abi
  		&& !node->used_from_object_file_p ()
  		&& !node->same_comdat_group)
! 	       || !node->externally_visible));
  }
  
  /* Return true if cgraph_node can be made local for API change.
--- 2434,2442 ----
  		&& !node->forced_by_abi
  		&& !node->used_from_object_file_p ()
  		&& !node->same_comdat_group)
! 	       || !node->externally_visible)
! 	   && !DECL_STATIC_CONSTRUCTOR (node->decl)
! 	   && !DECL_STATIC_DESTRUCTOR (node->decl));
  }
  
  /* Return true if cgraph_node can be made local for API change.
diff -Nrcpad gcc-13.3.0/gcc/cgraphclones.cc gcc-13.4.0/gcc/cgraphclones.cc
*** gcc-13.3.0/gcc/cgraphclones.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/cgraphclones.cc	Thu Jun  5 16:02:58 2025
*************** cgraph_node::expand_all_artificial_thunk
*** 304,315 ****
        e = e->next_caller;
  }
  
  void
  dump_callgraph_transformation (const cgraph_node *original,
  			       const cgraph_node *clone,
  			       const char *suffix)
  {
!   if (symtab->ipa_clones_dump_file)
      {
        fprintf (symtab->ipa_clones_dump_file,
  	       "Callgraph clone;%s;%d;%s;%d;%d;%s;%d;%s;%d;%d;%s\n",
--- 304,323 ----
        e = e->next_caller;
  }
  
+ /* Dump information about creation of a call graph node clone to the dump file
+    created by the -fdump-ipa-clones option.  ORIGINAL is the function being
+    cloned, CLONE is the new clone.  SUFFIX is a string that helps identify the
+    reason for cloning, often it is the suffix used by a particular IPA pass to
+    create unique function names.  SUFFIX can be NULL and in that case the
+    dumping will not take place, which must be the case only for helper clones
+    which will never be emitted to the output.  */
+ 
  void
  dump_callgraph_transformation (const cgraph_node *original,
  			       const cgraph_node *clone,
  			       const char *suffix)
  {
!   if (suffix && symtab->ipa_clones_dump_file)
      {
        fprintf (symtab->ipa_clones_dump_file,
  	       "Callgraph clone;%s;%d;%s;%d;%d;%s;%d;%s;%d;%d;%s\n",
diff -Nrcpad gcc-13.3.0/gcc/combine.cc gcc-13.4.0/gcc/combine.cc
*** gcc-13.3.0/gcc/combine.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/combine.cc	Thu Jun  5 16:02:58 2025
*************** try_combine (rtx_insn *i3, rtx_insn *i2,
*** 3988,4005 ****
        rtx set1 = XVECEXP (newpat, 0, 1);
  
        /* Normally, it doesn't matter which of the two is done first, but
! 	 one which uses any regs/memory set in between i2 and i3 can't
! 	 be first.  The PARALLEL might also have been pre-existing in i3,
! 	 so we need to make sure that we won't wrongly hoist a SET to i2
! 	 that would conflict with a death note present in there, or would
! 	 have its dest modified between i2 and i3.  */
        if (!modified_between_p (SET_SRC (set1), i2, i3)
  	  && !(REG_P (SET_DEST (set1))
  	       && find_reg_note (i2, REG_DEAD, SET_DEST (set1)))
  	  && !(GET_CODE (SET_DEST (set1)) == SUBREG
  	       && find_reg_note (i2, REG_DEAD,
  				 SUBREG_REG (SET_DEST (set1))))
! 	  && !modified_between_p (SET_DEST (set1), i2, i3)
  	  /* If I3 is a jump, ensure that set0 is a jump so that
  	     we do not create invalid RTL.  */
  	  && (!JUMP_P (i3) || SET_DEST (set0) == pc_rtx)
--- 3988,4006 ----
        rtx set1 = XVECEXP (newpat, 0, 1);
  
        /* Normally, it doesn't matter which of the two is done first, but
! 	 one which uses any regs/memory set or used in between i2 and i3
! 	 can't be first.  The PARALLEL might also have been pre-existing
! 	 in i3, so we need to make sure that we won't wrongly hoist a SET
! 	 to i2 that would conflict with a death note present in there, or
! 	 would have its dest modified or used between i2 and i3.  */
        if (!modified_between_p (SET_SRC (set1), i2, i3)
  	  && !(REG_P (SET_DEST (set1))
  	       && find_reg_note (i2, REG_DEAD, SET_DEST (set1)))
  	  && !(GET_CODE (SET_DEST (set1)) == SUBREG
  	       && find_reg_note (i2, REG_DEAD,
  				 SUBREG_REG (SET_DEST (set1))))
! 	  && SET_DEST (set1) != pc_rtx
! 	  && !reg_used_between_p (SET_DEST (set1), i2, i3)
  	  /* If I3 is a jump, ensure that set0 is a jump so that
  	     we do not create invalid RTL.  */
  	  && (!JUMP_P (i3) || SET_DEST (set0) == pc_rtx)
*************** try_combine (rtx_insn *i3, rtx_insn *i2,
*** 4014,4020 ****
  	       && !(GET_CODE (SET_DEST (set0)) == SUBREG
  		    && find_reg_note (i2, REG_DEAD,
  				      SUBREG_REG (SET_DEST (set0))))
! 	       && !modified_between_p (SET_DEST (set0), i2, i3)
  	       /* If I3 is a jump, ensure that set1 is a jump so that
  		  we do not create invalid RTL.  */
  	       && (!JUMP_P (i3) || SET_DEST (set1) == pc_rtx)
--- 4015,4022 ----
  	       && !(GET_CODE (SET_DEST (set0)) == SUBREG
  		    && find_reg_note (i2, REG_DEAD,
  				      SUBREG_REG (SET_DEST (set0))))
! 	       && SET_DEST (set0) != pc_rtx
! 	       && !reg_used_between_p (SET_DEST (set0), i2, i3)
  	       /* If I3 is a jump, ensure that set1 is a jump so that
  		  we do not create invalid RTL.  */
  	       && (!JUMP_P (i3) || SET_DEST (set1) == pc_rtx)
*************** simplify_compare_const (enum rtx_code co
*** 11801,11808 ****
       `and'ed with that bit), we can replace this with a comparison
       with zero.  */
    if (const_op
!       && (code == EQ || code == NE || code == GE || code == GEU
! 	  || code == LT || code == LTU)
        && is_a <scalar_int_mode> (mode, &int_mode)
        && GET_MODE_PRECISION (int_mode) - 1 < HOST_BITS_PER_WIDE_INT
        && pow2p_hwi (const_op & GET_MODE_MASK (int_mode))
--- 11803,11812 ----
       `and'ed with that bit), we can replace this with a comparison
       with zero.  */
    if (const_op
!       && (code == EQ || code == NE || code == GEU || code == LTU
! 	  /* This optimization is incorrect for signed >= INT_MIN or
! 	     < INT_MIN, those are always true or always false.  */
! 	  || ((code == GE || code == LT) && const_op > 0))
        && is_a <scalar_int_mode> (mode, &int_mode)
        && GET_MODE_PRECISION (int_mode) - 1 < HOST_BITS_PER_WIDE_INT
        && pow2p_hwi (const_op & GET_MODE_MASK (int_mode))
*************** distribute_notes (rtx notes, rtx_insn *f
*** 14336,14349 ****
  	  /* Otherwise, if this register is used by I3, then this register
  	     now dies here, so we must put a REG_DEAD note here unless there
  	     is one already.  */
! 	  else if (reg_referenced_p (XEXP (note, 0), PATTERN (i3))
! 		   && ! (REG_P (XEXP (note, 0))
! 			 ? find_regno_note (i3, REG_DEAD,
! 					    REGNO (XEXP (note, 0)))
! 			 : find_reg_note (i3, REG_DEAD, XEXP (note, 0))))
  	    {
! 	      PUT_REG_NOTE_KIND (note, REG_DEAD);
! 	      place = i3;
  	    }
  
  	  /* A SET or CLOBBER of the REG_UNUSED reg has been removed,
--- 14340,14354 ----
  	  /* Otherwise, if this register is used by I3, then this register
  	     now dies here, so we must put a REG_DEAD note here unless there
  	     is one already.  */
! 	  else if (reg_referenced_p (XEXP (note, 0), PATTERN (i3)))
  	    {
! 	      if (! (REG_P (XEXP (note, 0))
! 		     ? find_regno_note (i3, REG_DEAD, REGNO (XEXP (note, 0)))
! 		     : find_reg_note (i3, REG_DEAD, XEXP (note, 0))))
! 		{
! 		  PUT_REG_NOTE_KIND (note, REG_DEAD);
! 		  place = i3;
! 		}
  	    }
  
  	  /* A SET or CLOBBER of the REG_UNUSED reg has been removed,
diff -Nrcpad gcc-13.3.0/gcc/common/config/aarch64/aarch64-common.cc gcc-13.4.0/gcc/common/config/aarch64/aarch64-common.cc
*** gcc-13.3.0/gcc/common/config/aarch64/aarch64-common.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/common/config/aarch64/aarch64-common.cc	Thu Jun  5 16:02:58 2025
*************** aarch64_get_extension_string_for_isa_fla
*** 310,315 ****
--- 310,316 ----
       But in order to make the output more readable, it seems better
       to add the strings in definition order.  */
    aarch64_feature_flags added = 0;
+   auto flags_crypto = AARCH64_FL_AES | AARCH64_FL_SHA2;
    for (unsigned int i = ARRAY_SIZE (all_extensions); i-- > 0; )
      {
        auto &opt = all_extensions[i];
*************** aarch64_get_extension_string_for_isa_fla
*** 319,325 ****
  	 per-feature crypto flags.  */
        auto flags = opt.flag_canonical;
        if (flags == AARCH64_FL_CRYPTO)
! 	flags = AARCH64_FL_AES | AARCH64_FL_SHA2;
  
        if ((flags & isa_flags & (explicit_flags | ~current_flags)) == flags)
  	{
--- 320,326 ----
  	 per-feature crypto flags.  */
        auto flags = opt.flag_canonical;
        if (flags == AARCH64_FL_CRYPTO)
! 	flags = flags_crypto;
  
        if ((flags & isa_flags & (explicit_flags | ~current_flags)) == flags)
  	{
*************** aarch64_get_extension_string_for_isa_fla
*** 338,351 ****
       not have an HWCAPs then it shouldn't be taken into account for feature
       detection because one way or another we can't tell if it's available
       or not.  */
    for (auto &opt : all_extensions)
!     if (opt.native_detect_p
! 	&& (opt.flag_canonical & current_flags & ~isa_flags))
!       {
! 	current_flags &= ~opt.flags_off;
! 	outstr += "+no";
! 	outstr += opt.name;
!       }
  
    return outstr;
  }
--- 339,370 ----
       not have an HWCAPs then it shouldn't be taken into account for feature
       detection because one way or another we can't tell if it's available
       or not.  */
+ 
    for (auto &opt : all_extensions)
!     {
!       auto flags = opt.flag_canonical;
!       /* As a special case, don't emit "+noaes" or "+nosha2" when we could emit
! 	 "+nocrypto" instead, in order to support assemblers that predate the
! 	 separate per-feature crypto flags.  Only allow "+nocrypto" when "sm4"
! 	 is not already enabled (to avoid dependending on whether "+nocrypto"
! 	 also disables "sm4").  */
!       if (flags & flags_crypto
! 	  && (flags_crypto & current_flags & ~isa_flags) == flags_crypto
! 	  && !(current_flags & AARCH64_FL_SM4))
! 	  continue;
! 
!       if (flags == AARCH64_FL_CRYPTO)
! 	/* If either crypto flag needs removing here, then both do.  */
! 	flags = flags_crypto;
! 
!       if (opt.native_detect_p
! 	  && (flags & current_flags & ~isa_flags))
! 	{
! 	  current_flags &= ~opt.flags_off;
! 	  outstr += "+no";
! 	  outstr += opt.name;
! 	}
!     }
  
    return outstr;
  }
diff -Nrcpad gcc-13.3.0/gcc/common/config/i386/cpuinfo.h gcc-13.4.0/gcc/common/config/i386/cpuinfo.h
*** gcc-13.3.0/gcc/common/config/i386/cpuinfo.h	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/common/config/i386/cpuinfo.h	Thu Jun  5 16:02:58 2025
*************** get_amd_cpu (struct __processor_model *c
*** 310,315 ****
--- 310,331 ----
  	  cpu_model->__cpu_subtype = AMDFAM19H_ZNVER3;
  	}
        break;
+     case 0x1a:
+       cpu_model->__cpu_type = AMDFAM1AH;
+       if (model <= 0x77)
+ 	{
+ 	  cpu = "znver5";
+ 	  CHECK___builtin_cpu_is ("znver5");
+ 	  cpu_model->__cpu_subtype = AMDFAM1AH_ZNVER5;
+ 	}
+       else if (has_cpu_feature (cpu_model, cpu_features2,
+ 				FEATURE_AVX512VP2INTERSECT))
+ 	{
+ 	  cpu = "znver5";
+ 	  CHECK___builtin_cpu_is ("znver5");
+ 	  cpu_model->__cpu_subtype = AMDFAM1AH_ZNVER5;
+ 	}
+       break;
      default:
        break;
      }
diff -Nrcpad gcc-13.3.0/gcc/common/config/i386/i386-common.cc gcc-13.4.0/gcc/common/config/i386/i386-common.cc
*** gcc-13.3.0/gcc/common/config/i386/i386-common.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/common/config/i386/i386-common.cc	Thu Jun  5 16:02:58 2025
*************** const char *const processor_names[] =
*** 1983,1989 ****
    "znver1",
    "znver2",
    "znver3",
!   "znver4"
  };
  
  /* Guarantee that the array is aligned with enum processor_type.  */
--- 1983,1990 ----
    "znver1",
    "znver2",
    "znver3",
!   "znver4",
!   "znver5"
  };
  
  /* Guarantee that the array is aligned with enum processor_type.  */
*************** const pta processor_alias_table[] =
*** 2243,2248 ****
--- 2244,2252 ----
    {"znver4", PROCESSOR_ZNVER4, CPU_ZNVER4,
      PTA_ZNVER4,
      M_CPU_SUBTYPE (AMDFAM19H_ZNVER4), P_PROC_AVX512F},
+   {"znver5", PROCESSOR_ZNVER5, CPU_ZNVER5,
+     PTA_ZNVER5,
+     M_CPU_SUBTYPE (AMDFAM1AH_ZNVER5), P_PROC_AVX512F},
    {"btver1", PROCESSOR_BTVER1, CPU_GENERIC,
      PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
        | PTA_SSSE3 | PTA_SSE4A | PTA_ABM | PTA_CX16 | PTA_PRFCHW
diff -Nrcpad gcc-13.3.0/gcc/common/config/i386/i386-cpuinfo.h gcc-13.4.0/gcc/common/config/i386/i386-cpuinfo.h
*** gcc-13.3.0/gcc/common/config/i386/i386-cpuinfo.h	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/common/config/i386/i386-cpuinfo.h	Thu Jun  5 16:02:58 2025
*************** enum processor_types
*** 62,67 ****
--- 62,68 ----
    ZHAOXIN_FAM7H,
    INTEL_SIERRAFOREST,
    INTEL_GRANDRIDGE,
+   AMDFAM1AH,
    CPU_TYPE_MAX,
    BUILTIN_CPU_TYPE_MAX = CPU_TYPE_MAX
  };
*************** enum processor_subtypes
*** 99,104 ****
--- 100,106 ----
    AMDFAM19H_ZNVER4,
    INTEL_COREI7_GRANITERAPIDS,
    INTEL_COREI7_GRANITERAPIDS_D,
+   AMDFAM1AH_ZNVER5,
    CPU_SUBTYPE_MAX
  };
  
diff -Nrcpad gcc-13.3.0/gcc/config/aarch64/aarch64-c.cc gcc-13.4.0/gcc/config/aarch64/aarch64-c.cc
*** gcc-13.3.0/gcc/config/aarch64/aarch64-c.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/aarch64/aarch64-c.cc	Thu Jun  5 16:02:58 2025
*************** aarch64_update_cpp_builtins (cpp_reader
*** 139,145 ****
    aarch64_def_or_undef (TARGET_ILP32, "_ILP32", pfile);
    aarch64_def_or_undef (TARGET_ILP32, "__ILP32__", pfile);
  
!   aarch64_def_or_undef (TARGET_CRYPTO, "__ARM_FEATURE_CRYPTO", pfile);
    aarch64_def_or_undef (TARGET_SIMD_RDMA, "__ARM_FEATURE_QRDMX", pfile);
    aarch64_def_or_undef (TARGET_SVE, "__ARM_FEATURE_SVE", pfile);
    cpp_undef (pfile, "__ARM_FEATURE_SVE_BITS");
--- 139,145 ----
    aarch64_def_or_undef (TARGET_ILP32, "_ILP32", pfile);
    aarch64_def_or_undef (TARGET_ILP32, "__ILP32__", pfile);
  
!   aarch64_def_or_undef (TARGET_AES && TARGET_SHA2, "__ARM_FEATURE_CRYPTO", pfile);
    aarch64_def_or_undef (TARGET_SIMD_RDMA, "__ARM_FEATURE_QRDMX", pfile);
    aarch64_def_or_undef (TARGET_SVE, "__ARM_FEATURE_SVE", pfile);
    cpp_undef (pfile, "__ARM_FEATURE_SVE_BITS");
*************** aarch64_update_cpp_builtins (cpp_reader
*** 202,207 ****
--- 202,212 ----
  			"__ARM_FEATURE_BF16_VECTOR_ARITHMETIC", pfile);
    aarch64_def_or_undef (TARGET_BF16_FP,
  			"__ARM_FEATURE_BF16_SCALAR_ARITHMETIC", pfile);
+   aarch64_def_or_undef (TARGET_BF16_FP,
+ 			"__ARM_FEATURE_BF16", pfile);
+   aarch64_def_or_undef (TARGET_SVE_BF16,
+ 			"__ARM_FEATURE_SVE_BF16", pfile);
+ 
    aarch64_def_or_undef (TARGET_LS64,
  			"__ARM_FEATURE_LS64", pfile);
    aarch64_def_or_undef (AARCH64_ISA_RCPC, "__ARM_FEATURE_RCPC", pfile);
diff -Nrcpad gcc-13.3.0/gcc/config/aarch64/aarch64-cores.def gcc-13.4.0/gcc/config/aarch64/aarch64-cores.def
*** gcc-13.3.0/gcc/config/aarch64/aarch64-cores.def	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/aarch64/aarch64-cores.def	Thu Jun  5 16:02:58 2025
*************** AARCH64_CORE("neoverse-n2", neoversen2,
*** 182,187 ****
--- 182,189 ----
  AARCH64_CORE("cobalt-100",   cobalt100, cortexa57, V9A, (I8MM, BF16, SVE2_BITPERM, RNG, MEMTAG, PROFILE), neoversen2, 0x6d, 0xd49, -1)
  
  AARCH64_CORE("neoverse-v2", neoversev2, cortexa57, V9A, (I8MM, BF16, SVE2_BITPERM, RNG, MEMTAG, PROFILE), neoversev2, 0x41, 0xd4f, -1)
+ AARCH64_CORE("grace", grace, cortexa57, V9A, (I8MM, BF16, CRYPTO, SVE2_BITPERM, SVE2_AES, SVE2_SHA3, SVE2_SM4, PROFILE), neoversev2, 0x41, 0xd4f, -1)
+ 
  AARCH64_CORE("demeter", demeter, cortexa57, V9A, (I8MM, BF16, SVE2_BITPERM, RNG, MEMTAG, PROFILE), neoversev2, 0x41, 0xd4f, -1)
  
  #undef AARCH64_CORE
diff -Nrcpad gcc-13.3.0/gcc/config/aarch64/aarch64-freebsd.h gcc-13.4.0/gcc/config/aarch64/aarch64-freebsd.h
*** gcc-13.3.0/gcc/config/aarch64/aarch64-freebsd.h	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/aarch64/aarch64-freebsd.h	Thu Jun  5 16:02:58 2025
***************
*** 35,40 ****
--- 35,41 ----
  #undef  FBSD_TARGET_LINK_SPEC
  #define FBSD_TARGET_LINK_SPEC "                                 \
      %{p:%nconsider using `-pg' instead of `-p' with gprof (1)}  \
+     " FBSD_LINK_PG_NOTE "					\
      %{v:-V}                                                     \
      %{assert*} %{R*} %{rpath*} %{defsym*}                       \
      %{shared:-Bshareable %{h*} %{soname*}}                      \
diff -Nrcpad gcc-13.3.0/gcc/config/aarch64/aarch64-sve-builtins-base.cc gcc-13.4.0/gcc/config/aarch64/aarch64-sve-builtins-base.cc
*** gcc-13.3.0/gcc/config/aarch64/aarch64-sve-builtins-base.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/aarch64/aarch64-sve-builtins-base.cc	Thu Jun  5 16:02:58 2025
*************** public:
*** 496,510 ****
    expand (function_expander &e) const override
    {
      machine_mode mode = e.vector_mode (0);
!     if (e.pred == PRED_x)
!       {
! 	/* The pattern for CNOT includes an UNSPEC_PRED_Z, so needs
! 	   a ptrue hint.  */
! 	e.add_ptrue_hint (0, e.gp_mode (0));
! 	return e.use_pred_x_insn (code_for_aarch64_pred_cnot (mode));
!       }
  
!     return e.use_cond_insn (code_for_cond_cnot (mode), 0);
    }
  };
  
--- 496,517 ----
    expand (function_expander &e) const override
    {
      machine_mode mode = e.vector_mode (0);
!     machine_mode pred_mode = e.gp_mode (0);
!     /* The underlying _x pattern is effectively:
  
! 	 dst = src == 0 ? 1 : 0
! 
!        rather than an UNSPEC_PRED_X.  Using this form allows autovec
!        constructs to be matched by combine, but it means that the
!        predicate on the src == 0 comparison must be all-true.
! 
!        For simplicity, represent other _x operations as fully-defined _m
!        operations rather than using a separate bespoke pattern.  */
!     if (e.pred == PRED_x
! 	&& gen_lowpart (pred_mode, e.args[0]) == CONSTM1_RTX (pred_mode))
!       return e.use_pred_x_insn (code_for_aarch64_ptrue_cnot (mode));
!     return e.use_cond_insn (code_for_cond_cnot (mode),
! 			    e.pred == PRED_x ? 1 : 0);
    }
  };
  
*************** public:
*** 2403,2409 ****
         version) is through the USDOT instruction but with the second and third
         inputs swapped.  */
      if (m_su)
!       e.rotate_inputs_left (1, 2);
      /* The ACLE function has the same order requirements as for svdot.
         While there's no requirement for the RTL pattern to have the same sort
         of order as that for <sur>dot_prod, it's easier to read.
--- 2410,2416 ----
         version) is through the USDOT instruction but with the second and third
         inputs swapped.  */
      if (m_su)
!       e.rotate_inputs_left (1, 3);
      /* The ACLE function has the same order requirements as for svdot.
         While there's no requirement for the RTL pattern to have the same sort
         of order as that for <sur>dot_prod, it's easier to read.
*************** public:
*** 2449,2455 ****
      : while_comparison (unspec_for_sint, unspec_for_uint), m_eq_p (eq_p)
    {}
  
!   /* Try to fold a call by treating its arguments as constants of type T.  */
    template<typename T>
    gimple *
    fold_type (gimple_folder &f) const
--- 2456,2464 ----
      : while_comparison (unspec_for_sint, unspec_for_uint), m_eq_p (eq_p)
    {}
  
!   /* Try to fold a call by treating its arguments as constants of type T.
!      We have already filtered out the degenerate cases of X .LT. MIN
!      and X .LE. MAX.  */
    template<typename T>
    gimple *
    fold_type (gimple_folder &f) const
*************** public:
*** 2502,2507 ****
--- 2511,2523 ----
    gimple *
    fold (gimple_folder &f) const override
    {
+     /* Filter out cases where the condition is always true or always false.  */
+     tree arg1 = gimple_call_arg (f.call, 1);
+     if (!m_eq_p && operand_equal_p (arg1, TYPE_MIN_VALUE (TREE_TYPE (arg1))))
+       return f.fold_to_pfalse ();
+     if (m_eq_p && operand_equal_p (arg1, TYPE_MAX_VALUE (TREE_TYPE (arg1))))
+       return f.fold_to_ptrue ();
+ 
      if (f.type_suffix (1).unsigned_p)
        return fold_type<poly_uint64> (f);
      else
diff -Nrcpad gcc-13.3.0/gcc/config/aarch64/aarch64-sve.md gcc-13.4.0/gcc/config/aarch64/aarch64-sve.md
*** gcc-13.3.0/gcc/config/aarch64/aarch64-sve.md	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/aarch64/aarch64-sve.md	Thu Jun  5 16:02:58 2025
***************
*** 3225,3248 ****
  ;; - CNOT
  ;; -------------------------------------------------------------------------
  
! ;; Predicated logical inverse.
! (define_expand "@aarch64_pred_cnot<mode>"
    [(set (match_operand:SVE_FULL_I 0 "register_operand")
  	(unspec:SVE_FULL_I
  	  [(unspec:<VPRED>
  	     [(match_operand:<VPRED> 1 "register_operand")
! 	      (match_operand:SI 2 "aarch64_sve_ptrue_flag")
  	      (eq:<VPRED>
! 		(match_operand:SVE_FULL_I 3 "register_operand")
! 		(match_dup 4))]
  	     UNSPEC_PRED_Z)
! 	   (match_dup 5)
! 	   (match_dup 4)]
  	  UNSPEC_SEL))]
    "TARGET_SVE"
    {
!     operands[4] = CONST0_RTX (<MODE>mode);
!     operands[5] = CONST1_RTX (<MODE>mode);
    }
  )
  
--- 3225,3248 ----
  ;; - CNOT
  ;; -------------------------------------------------------------------------
  
! ;; Logical inverse, predicated with a ptrue.
! (define_expand "@aarch64_ptrue_cnot<mode>"
    [(set (match_operand:SVE_FULL_I 0 "register_operand")
  	(unspec:SVE_FULL_I
  	  [(unspec:<VPRED>
  	     [(match_operand:<VPRED> 1 "register_operand")
! 	      (const_int SVE_KNOWN_PTRUE)
  	      (eq:<VPRED>
! 		(match_operand:SVE_FULL_I 2 "register_operand")
! 		(match_dup 3))]
  	     UNSPEC_PRED_Z)
! 	   (match_dup 4)
! 	   (match_dup 3)]
  	  UNSPEC_SEL))]
    "TARGET_SVE"
    {
!     operands[3] = CONST0_RTX (<MODE>mode);
!     operands[4] = CONST1_RTX (<MODE>mode);
    }
  )
  
***************
*** 3251,3257 ****
  	(unspec:SVE_I
  	  [(unspec:<VPRED>
  	     [(match_operand:<VPRED> 1 "register_operand" "Upl, Upl")
! 	      (match_operand:SI 5 "aarch64_sve_ptrue_flag")
  	      (eq:<VPRED>
  		(match_operand:SVE_I 2 "register_operand" "0, w")
  		(match_operand:SVE_I 3 "aarch64_simd_imm_zero"))]
--- 3251,3257 ----
  	(unspec:SVE_I
  	  [(unspec:<VPRED>
  	     [(match_operand:<VPRED> 1 "register_operand" "Upl, Upl")
! 	      (const_int SVE_KNOWN_PTRUE)
  	      (eq:<VPRED>
  		(match_operand:SVE_I 2 "register_operand" "0, w")
  		(match_operand:SVE_I 3 "aarch64_simd_imm_zero"))]
diff -Nrcpad gcc-13.3.0/gcc/config/aarch64/aarch64-tune.md gcc-13.4.0/gcc/config/aarch64/aarch64-tune.md
*** gcc-13.3.0/gcc/config/aarch64/aarch64-tune.md	Tue May 21 07:49:00 2024
--- gcc-13.4.0/gcc/config/aarch64/aarch64-tune.md	Thu Jun  5 16:05:01 2025
***************
*** 1,5 ****
  ;; -*- buffer-read-only: t -*-
  ;; Generated automatically by gentune.sh from aarch64-cores.def
  (define_attr "tune"
! 	"cortexa34,cortexa35,cortexa53,cortexa57,cortexa72,cortexa73,thunderx,thunderxt88p1,thunderxt88,octeontx,octeontxt81,octeontxt83,thunderxt81,thunderxt83,ampere1,ampere1a,emag,xgene1,falkor,qdf24xx,exynosm1,phecda,thunderx2t99p1,vulcan,thunderx2t99,cortexa55,cortexa75,cortexa76,cortexa76ae,cortexa77,cortexa78,cortexa78ae,cortexa78c,cortexa65,cortexa65ae,cortexx1,cortexx1c,neoversen1,ares,neoversee1,octeontx2,octeontx2t98,octeontx2t96,octeontx2t93,octeontx2f95,octeontx2f95n,octeontx2f95mm,a64fx,tsv110,thunderx3t110,neoversev1,zeus,neoverse512tvb,saphira,cortexa57cortexa53,cortexa72cortexa53,cortexa73cortexa35,cortexa73cortexa53,cortexa75cortexa55,cortexa76cortexa55,cortexr82,cortexa510,cortexa710,cortexa715,cortexx2,cortexx3,neoversen2,cobalt100,neoversev2,demeter"
  	(const (symbol_ref "((enum attr_tune) aarch64_tune)")))
--- 1,5 ----
  ;; -*- buffer-read-only: t -*-
  ;; Generated automatically by gentune.sh from aarch64-cores.def
  (define_attr "tune"
! 	"cortexa34,cortexa35,cortexa53,cortexa57,cortexa72,cortexa73,thunderx,thunderxt88p1,thunderxt88,octeontx,octeontxt81,octeontxt83,thunderxt81,thunderxt83,ampere1,ampere1a,emag,xgene1,falkor,qdf24xx,exynosm1,phecda,thunderx2t99p1,vulcan,thunderx2t99,cortexa55,cortexa75,cortexa76,cortexa76ae,cortexa77,cortexa78,cortexa78ae,cortexa78c,cortexa65,cortexa65ae,cortexx1,cortexx1c,neoversen1,ares,neoversee1,octeontx2,octeontx2t98,octeontx2t96,octeontx2t93,octeontx2f95,octeontx2f95n,octeontx2f95mm,a64fx,tsv110,thunderx3t110,neoversev1,zeus,neoverse512tvb,saphira,cortexa57cortexa53,cortexa72cortexa53,cortexa73cortexa35,cortexa73cortexa53,cortexa75cortexa55,cortexa76cortexa55,cortexr82,cortexa510,cortexa710,cortexa715,cortexx2,cortexx3,neoversen2,cobalt100,neoversev2,grace,demeter"
  	(const (symbol_ref "((enum attr_tune) aarch64_tune)")))
diff -Nrcpad gcc-13.3.0/gcc/config/aarch64/aarch64.cc gcc-13.4.0/gcc/config/aarch64/aarch64.cc
*** gcc-13.3.0/gcc/config/aarch64/aarch64.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/aarch64/aarch64.cc	Thu Jun  5 16:02:58 2025
*************** aarch64_hard_regno_caller_save_mode (uns
*** 4168,4177 ****
       unnecessarily significant.  */
    if (PR_REGNUM_P (regno))
      return mode;
!   if (known_ge (GET_MODE_SIZE (mode), 4))
!     return mode;
!   else
      return SImode;
  }
  
  /* Return true if I's bits are consecutive ones from the MSB.  */
--- 4168,4178 ----
       unnecessarily significant.  */
    if (PR_REGNUM_P (regno))
      return mode;
!   if (known_lt (GET_MODE_SIZE (mode), 4)
!       && REG_CAN_CHANGE_MODE_P (regno, mode, SImode)
!       && REG_CAN_CHANGE_MODE_P (regno, SImode, mode))
      return SImode;
+   return mode;
  }
  
  /* Return true if I's bits are consecutive ones from the MSB.  */
*************** aarch64_stack_clash_protection_alloca_pr
*** 9706,9718 ****
  
  
  /* Allocate POLY_SIZE bytes of stack space using TEMP1 and TEMP2 as scratch
!    registers.  If POLY_SIZE is not large enough to require a probe this function
!    will only adjust the stack.  When allocating the stack space
!    FRAME_RELATED_P is then used to indicate if the allocation is frame related.
!    FINAL_ADJUSTMENT_P indicates whether we are allocating the area below
!    the saved registers.  If we are then we ensure that any allocation
!    larger than the ABI defined buffer needs a probe so that the
!    invariant of having a 1KB buffer is maintained.
  
     We emit barriers after each stack adjustment to prevent optimizations from
     breaking the invariant that we never drop the stack more than a page.  This
--- 9707,9722 ----
  
  
  /* Allocate POLY_SIZE bytes of stack space using TEMP1 and TEMP2 as scratch
!    registers, given that the stack pointer is currently BYTES_BELOW_SP bytes
!    above the bottom of the static frame.
! 
!    If POLY_SIZE is not large enough to require a probe this function will only
!    adjust the stack.  When allocating the stack space FRAME_RELATED_P is then
!    used to indicate if the allocation is frame related.  FINAL_ADJUSTMENT_P
!    indicates whether we are allocating the area below the saved registers.
!    If we are then we ensure that any allocation larger than the ABI defined
!    buffer needs a probe so that the invariant of having a 1KB buffer is
!    maintained.
  
     We emit barriers after each stack adjustment to prevent optimizations from
     breaking the invariant that we never drop the stack more than a page.  This
*************** aarch64_stack_clash_protection_alloca_pr
*** 9725,9730 ****
--- 9729,9735 ----
  static void
  aarch64_allocate_and_probe_stack_space (rtx temp1, rtx temp2,
  					poly_int64 poly_size,
+ 					poly_int64 bytes_below_sp,
  					bool frame_related_p,
  					bool final_adjustment_p)
  {
*************** aarch64_allocate_and_probe_stack_space (
*** 9785,9792 ****
        aarch64_add_offset (Pmode, temp1, CONST0_RTX (Pmode),
  			  poly_size, temp1, temp2, false, true);
  
!       rtx_insn *insn = get_last_insn ();
! 
        if (frame_related_p)
  	{
  	  /* This is done to provide unwinding information for the stack
--- 9790,9797 ----
        aarch64_add_offset (Pmode, temp1, CONST0_RTX (Pmode),
  			  poly_size, temp1, temp2, false, true);
  
!       auto initial_cfa_offset = frame.frame_size - bytes_below_sp;
!       auto final_cfa_offset = initial_cfa_offset + poly_size;
        if (frame_related_p)
  	{
  	  /* This is done to provide unwinding information for the stack
*************** aarch64_allocate_and_probe_stack_space (
*** 9796,9823 ****
  	     The tie will expand to nothing but the optimizers will not touch
  	     the instruction.  */
  	  rtx stack_ptr_copy = gen_rtx_REG (Pmode, STACK_CLASH_SVE_CFA_REGNUM);
! 	  emit_move_insn (stack_ptr_copy, stack_pointer_rtx);
  	  emit_insn (gen_stack_tie (stack_ptr_copy, stack_pointer_rtx));
  
  	  /* We want the CFA independent of the stack pointer for the
  	     duration of the loop.  */
! 	  add_reg_note (insn, REG_CFA_DEF_CFA, stack_ptr_copy);
  	  RTX_FRAME_RELATED_P (insn) = 1;
  	}
  
        rtx probe_const = gen_int_mode (min_probe_threshold, Pmode);
        rtx guard_const = gen_int_mode (guard_size, Pmode);
  
!       insn = emit_insn (gen_probe_sve_stack_clash (Pmode, stack_pointer_rtx,
! 						   stack_pointer_rtx, temp1,
! 						   probe_const, guard_const));
  
        /* Now reset the CFA register if needed.  */
        if (frame_related_p)
  	{
  	  add_reg_note (insn, REG_CFA_DEF_CFA,
! 			gen_rtx_PLUS (Pmode, stack_pointer_rtx,
! 				      gen_int_mode (poly_size, Pmode)));
  	  RTX_FRAME_RELATED_P (insn) = 1;
  	}
  
--- 9801,9831 ----
  	     The tie will expand to nothing but the optimizers will not touch
  	     the instruction.  */
  	  rtx stack_ptr_copy = gen_rtx_REG (Pmode, STACK_CLASH_SVE_CFA_REGNUM);
! 	  auto *insn = emit_move_insn (stack_ptr_copy, stack_pointer_rtx);
  	  emit_insn (gen_stack_tie (stack_ptr_copy, stack_pointer_rtx));
  
  	  /* We want the CFA independent of the stack pointer for the
  	     duration of the loop.  */
! 	  add_reg_note (insn, REG_CFA_DEF_CFA,
! 			plus_constant (Pmode, stack_ptr_copy,
! 				       initial_cfa_offset));
  	  RTX_FRAME_RELATED_P (insn) = 1;
  	}
  
        rtx probe_const = gen_int_mode (min_probe_threshold, Pmode);
        rtx guard_const = gen_int_mode (guard_size, Pmode);
  
!       auto *insn
! 	= emit_insn (gen_probe_sve_stack_clash (Pmode, stack_pointer_rtx,
! 						stack_pointer_rtx, temp1,
! 						probe_const, guard_const));
  
        /* Now reset the CFA register if needed.  */
        if (frame_related_p)
  	{
  	  add_reg_note (insn, REG_CFA_DEF_CFA,
! 			plus_constant (Pmode, stack_pointer_rtx,
! 				       final_cfa_offset));
  	  RTX_FRAME_RELATED_P (insn) = 1;
  	}
  
*************** aarch64_allocate_and_probe_stack_space (
*** 9863,9874 ****
  	 We can determine which allocation we are doing by looking at
  	 the value of FRAME_RELATED_P since the final allocations are not
  	 frame related.  */
        if (frame_related_p)
  	{
  	  /* We want the CFA independent of the stack pointer for the
  	     duration of the loop.  */
  	  add_reg_note (insn, REG_CFA_DEF_CFA,
! 			plus_constant (Pmode, temp1, rounded_size));
  	  RTX_FRAME_RELATED_P (insn) = 1;
  	}
  
--- 9871,9883 ----
  	 We can determine which allocation we are doing by looking at
  	 the value of FRAME_RELATED_P since the final allocations are not
  	 frame related.  */
+       auto cfa_offset = frame.frame_size - (bytes_below_sp - rounded_size);
        if (frame_related_p)
  	{
  	  /* We want the CFA independent of the stack pointer for the
  	     duration of the loop.  */
  	  add_reg_note (insn, REG_CFA_DEF_CFA,
! 			plus_constant (Pmode, temp1, cfa_offset));
  	  RTX_FRAME_RELATED_P (insn) = 1;
  	}
  
*************** aarch64_allocate_and_probe_stack_space (
*** 9890,9896 ****
        if (frame_related_p)
  	{
  	  add_reg_note (insn, REG_CFA_DEF_CFA,
! 			plus_constant (Pmode, stack_pointer_rtx, rounded_size));
  	  RTX_FRAME_RELATED_P (insn) = 1;
  	}
  
--- 9899,9905 ----
        if (frame_related_p)
  	{
  	  add_reg_note (insn, REG_CFA_DEF_CFA,
! 			plus_constant (Pmode, stack_pointer_rtx, cfa_offset));
  	  RTX_FRAME_RELATED_P (insn) = 1;
  	}
  
*************** aarch64_expand_prologue (void)
*** 10106,10122 ****
       code below does not handle it for -fstack-clash-protection.  */
    gcc_assert (known_eq (initial_adjust, 0) || callee_adjust == 0);
  
    /* Will only probe if the initial adjustment is larger than the guard
       less the amount of the guard reserved for use by the caller's
       outgoing args.  */
    aarch64_allocate_and_probe_stack_space (tmp0_rtx, tmp1_rtx, initial_adjust,
! 					  true, false);
  
    if (callee_adjust != 0)
!     aarch64_push_regs (reg1, reg2, callee_adjust);
! 
!   /* The offset of the current SP from the bottom of the static frame.  */
!   poly_int64 bytes_below_sp = frame_size - initial_adjust - callee_adjust;
  
    if (emit_frame_chain)
      {
--- 10115,10135 ----
       code below does not handle it for -fstack-clash-protection.  */
    gcc_assert (known_eq (initial_adjust, 0) || callee_adjust == 0);
  
+   /* The offset of the current SP from the bottom of the static frame.  */
+   poly_int64 bytes_below_sp = frame_size;
+ 
    /* Will only probe if the initial adjustment is larger than the guard
       less the amount of the guard reserved for use by the caller's
       outgoing args.  */
    aarch64_allocate_and_probe_stack_space (tmp0_rtx, tmp1_rtx, initial_adjust,
! 					  bytes_below_sp, true, false);
!   bytes_below_sp -= initial_adjust;
  
    if (callee_adjust != 0)
!     {
!       aarch64_push_regs (reg1, reg2, callee_adjust);
!       bytes_below_sp -= callee_adjust;
!     }
  
    if (emit_frame_chain)
      {
*************** aarch64_expand_prologue (void)
*** 10178,10183 ****
--- 10191,10197 ----
  		  || known_eq (initial_adjust, 0));
        aarch64_allocate_and_probe_stack_space (tmp1_rtx, tmp0_rtx,
  					      sve_callee_adjust,
+ 					      bytes_below_sp,
  					      !frame_pointer_needed, false);
        bytes_below_sp -= sve_callee_adjust;
      }
*************** aarch64_expand_prologue (void)
*** 10189,10197 ****
  
    /* We may need to probe the final adjustment if it is larger than the guard
       that is assumed by the called.  */
-   gcc_assert (known_eq (bytes_below_sp, final_adjust));
    aarch64_allocate_and_probe_stack_space (tmp1_rtx, tmp0_rtx, final_adjust,
  					  !frame_pointer_needed, true);
    if (emit_frame_chain && maybe_ne (final_adjust, 0))
      emit_insn (gen_stack_tie (stack_pointer_rtx, hard_frame_pointer_rtx));
  }
--- 10203,10213 ----
  
    /* We may need to probe the final adjustment if it is larger than the guard
       that is assumed by the called.  */
    aarch64_allocate_and_probe_stack_space (tmp1_rtx, tmp0_rtx, final_adjust,
+ 					  bytes_below_sp,
  					  !frame_pointer_needed, true);
+   bytes_below_sp -= final_adjust;
+   gcc_assert (known_eq (bytes_below_sp, 0));
    if (emit_frame_chain && maybe_ne (final_adjust, 0))
      emit_insn (gen_stack_tie (stack_pointer_rtx, hard_frame_pointer_rtx));
  }
*************** aarch64_expand_epilogue (bool for_sibcal
*** 10362,10373 ****
  	1) Sibcalls don't return in a normal way, so if we're about to call one
  	   we must authenticate.
  
! 	2) The RETAA instruction is not available before ARMv8.3-A, so if we are
! 	   generating code for !TARGET_ARMV8_3 we can't use it and must
  	   explicitly authenticate.
      */
    if (aarch64_return_address_signing_enabled ()
!       && (for_sibcall || !TARGET_ARMV8_3))
      {
        switch (aarch_ra_sign_key)
  	{
--- 10378,10389 ----
  	1) Sibcalls don't return in a normal way, so if we're about to call one
  	   we must authenticate.
  
! 	2) The RETAA instruction is not available without FEAT_PAuth, so if we
! 	   are generating code for !TARGET_PAUTH we can't use it and must
  	   explicitly authenticate.
      */
    if (aarch64_return_address_signing_enabled ()
!       && (for_sibcall || !TARGET_PAUTH))
      {
        switch (aarch_ra_sign_key)
  	{
*************** aarch64_expand_cpymem (rtx *operands)
*** 24897,24923 ****
    int mode_bits;
    rtx dst = operands[0];
    rtx src = operands[1];
    rtx base;
    machine_mode cur_mode = BLKmode;
  
!   /* Variable-sized memcpy can go through the MOPS expansion if available.  */
!   if (!CONST_INT_P (operands[2]))
      return aarch64_expand_cpymem_mops (operands);
  
!   unsigned HOST_WIDE_INT size = INTVAL (operands[2]);
! 
!   /* Try to inline up to 256 bytes or use the MOPS threshold if available.  */
!   unsigned HOST_WIDE_INT max_copy_size
!     = TARGET_MOPS ? aarch64_mops_memcpy_size_threshold : 256;
  
!   bool size_p = optimize_function_for_size_p (cfun);
  
!   /* Large constant-sized cpymem should go through MOPS when possible.
!      It should be a win even for size optimization in the general case.
!      For speed optimization the choice between MOPS and the SIMD sequence
!      depends on the size of the copy, rather than number of instructions,
!      alignment etc.  */
!   if (size > max_copy_size)
      return aarch64_expand_cpymem_mops (operands);
  
    int copy_bits = 256;
--- 24913,24935 ----
    int mode_bits;
    rtx dst = operands[0];
    rtx src = operands[1];
+   unsigned align = UINTVAL (operands[3]);
    rtx base;
    machine_mode cur_mode = BLKmode;
+   bool size_p = optimize_function_for_size_p (cfun);
  
!   /* Variable-sized or strict-align copies may use the MOPS expansion.  */
!   if (!CONST_INT_P (operands[2]) || (STRICT_ALIGNMENT && align < 16))
      return aarch64_expand_cpymem_mops (operands);
  
!   unsigned HOST_WIDE_INT size = UINTVAL (operands[2]);
  
!   /* Try to inline up to 256 bytes.  */
!   unsigned max_copy_size = 256;
!   unsigned mops_threshold = aarch64_mops_memcpy_size_threshold;
  
!   /* Large copies use MOPS when available or a library call.  */
!   if (size > max_copy_size || (TARGET_MOPS && size > mops_threshold))
      return aarch64_expand_cpymem_mops (operands);
  
    int copy_bits = 256;
*************** aarch64_expand_setmem (rtx *operands)
*** 25081,25092 ****
    unsigned HOST_WIDE_INT len;
    rtx dst = operands[0];
    rtx val = operands[2], src;
    rtx base;
    machine_mode cur_mode = BLKmode, next_mode;
  
!   /* If we don't have SIMD registers or the size is variable use the MOPS
!      inlined sequence if possible.  */
!   if (!CONST_INT_P (operands[1]) || !TARGET_SIMD)
      return aarch64_expand_setmem_mops (operands);
  
    bool size_p = optimize_function_for_size_p (cfun);
--- 25093,25105 ----
    unsigned HOST_WIDE_INT len;
    rtx dst = operands[0];
    rtx val = operands[2], src;
+   unsigned align = UINTVAL (operands[3]);
    rtx base;
    machine_mode cur_mode = BLKmode, next_mode;
  
!   /* Variable-sized or strict-align memset may use the MOPS expansion.  */
!   if (!CONST_INT_P (operands[1]) || !TARGET_SIMD
!       || (STRICT_ALIGNMENT && align < 16))
      return aarch64_expand_setmem_mops (operands);
  
    bool size_p = optimize_function_for_size_p (cfun);
*************** aarch64_expand_setmem (rtx *operands)
*** 25094,25103 ****
    /* Default the maximum to 256-bytes when considering only libcall vs
       SIMD broadcast sequence.  */
    unsigned max_set_size = 256;
  
!   len = INTVAL (operands[1]);
!   if (len > max_set_size && !TARGET_MOPS)
!     return false;
  
    int cst_val = !!(CONST_INT_P (val) && (INTVAL (val) != 0));
    /* The MOPS sequence takes:
--- 25107,25119 ----
    /* Default the maximum to 256-bytes when considering only libcall vs
       SIMD broadcast sequence.  */
    unsigned max_set_size = 256;
+   unsigned mops_threshold = aarch64_mops_memset_size_threshold;
  
!   len = UINTVAL (operands[1]);
! 
!   /* Large memset uses MOPS when available or a library call.  */
!   if (len > max_set_size || (TARGET_MOPS && len > mops_threshold))
!     return aarch64_expand_setmem_mops (operands);
  
    int cst_val = !!(CONST_INT_P (val) && (INTVAL (val) != 0));
    /* The MOPS sequence takes:
*************** aarch64_expand_setmem (rtx *operands)
*** 25110,25121 ****
       the arguments + 1 for the call.  */
    unsigned libcall_cost = 4;
  
-   /* Upper bound check.  For large constant-sized setmem use the MOPS sequence
-      when available.  */
-   if (TARGET_MOPS
-       && len >= (unsigned HOST_WIDE_INT) aarch64_mops_memset_size_threshold)
-     return aarch64_expand_setmem_mops (operands);
- 
    /* Attempt a sequence with a vector broadcast followed by stores.
       Count the number of operations involved to see if it's worth it
       against the alternatives.  A simple counter simd_ops on the
--- 25126,25131 ----
*************** aarch64_expand_setmem (rtx *operands)
*** 25157,25166 ****
        simd_ops++;
        n -= mode_bits;
  
!       /* Do certain trailing copies as overlapping if it's going to be
! 	 cheaper.  i.e. less instructions to do so.  For instance doing a 15
! 	 byte copy it's more efficient to do two overlapping 8 byte copies than
! 	 8 + 4 + 2 + 1.  Only do this when -mstrict-align is not supplied.  */
        if (n > 0 && n < copy_limit / 2 && !STRICT_ALIGNMENT)
  	{
  	  next_mode = smallest_mode_for_size (n, MODE_INT);
--- 25167,25174 ----
        simd_ops++;
        n -= mode_bits;
  
!       /* Emit trailing writes using overlapping unaligned accesses
! 	(when !STRICT_ALIGNMENT) - this is smaller and faster.  */
        if (n > 0 && n < copy_limit / 2 && !STRICT_ALIGNMENT)
  	{
  	  next_mode = smallest_mode_for_size (n, MODE_INT);
*************** aarch64_test_fractional_cost ()
*** 27646,27651 ****
--- 27654,27669 ----
    ASSERT_EQ (cf (1, 2).as_double (), 0.5);
  }
  
+ /* Test SVE arithmetic folding.  */
+ 
+ static void
+ aarch64_test_sve_folding ()
+ {
+   tree res = fold_unary (BIT_NOT_EXPR, ssizetype,
+ 			 ssize_int (poly_int64 (1, 1)));
+   ASSERT_TRUE (operand_equal_p (res, ssize_int (poly_int64 (-2, -1))));
+ }
+ 
  /* Run all target-specific selftests.  */
  
  static void
*************** aarch64_run_selftests (void)
*** 27653,27658 ****
--- 27671,27677 ----
  {
    aarch64_test_loading_full_dump ();
    aarch64_test_fractional_cost ();
+   aarch64_test_sve_folding ();
  }
  
  } // namespace selftest
diff -Nrcpad gcc-13.3.0/gcc/config/aarch64/aarch64.h gcc-13.4.0/gcc/config/aarch64/aarch64.h
*** gcc-13.3.0/gcc/config/aarch64/aarch64.h	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/aarch64/aarch64.h	Thu Jun  5 16:02:58 2025
*************** enum class aarch64_feature : unsigned ch
*** 177,186 ****
  
  #endif
  
! /* Macros to test ISA flags.  */
  
  #define AARCH64_ISA_CRC            (aarch64_isa_flags & AARCH64_FL_CRC)
- #define AARCH64_ISA_CRYPTO         (aarch64_isa_flags & AARCH64_FL_CRYPTO)
  #define AARCH64_ISA_FP             (aarch64_isa_flags & AARCH64_FL_FP)
  #define AARCH64_ISA_SIMD           (aarch64_isa_flags & AARCH64_FL_SIMD)
  #define AARCH64_ISA_LSE		   (aarch64_isa_flags & AARCH64_FL_LSE)
--- 177,189 ----
  
  #endif
  
! /* Macros to test ISA flags.
! 
!    There is intentionally no macro for AARCH64_FL_CRYPTO, since this flag bit
!    is not always set when its constituent features are present.
!    Check (TARGET_AES && TARGET_SHA2) instead.  */
  
  #define AARCH64_ISA_CRC            (aarch64_isa_flags & AARCH64_FL_CRC)
  #define AARCH64_ISA_FP             (aarch64_isa_flags & AARCH64_FL_FP)
  #define AARCH64_ISA_SIMD           (aarch64_isa_flags & AARCH64_FL_SIMD)
  #define AARCH64_ISA_LSE		   (aarch64_isa_flags & AARCH64_FL_LSE)
*************** enum class aarch64_feature : unsigned ch
*** 224,232 ****
  #define AARCH64_ISA_CSSC	   (aarch64_isa_flags & AARCH64_FL_CSSC)
  #define AARCH64_ISA_RCPC           (aarch64_isa_flags & AARCH64_FL_RCPC)
  
- /* Crypto is an optional extension to AdvSIMD.  */
- #define TARGET_CRYPTO (AARCH64_ISA_CRYPTO)
- 
  /* SHA2 is an optional extension to AdvSIMD.  */
  #define TARGET_SHA2 (AARCH64_ISA_SHA2)
  
--- 227,232 ----
*************** extern const char *host_detect_local_cpu
*** 1233,1239 ****
    CONFIG_TUNE_SPEC
  
  #define MCPU_TO_MARCH_SPEC \
!    " %{mcpu=*:-march=%:rewrite_mcpu(%{mcpu=*:%*})}"
  
  extern const char *aarch64_rewrite_mcpu (int argc, const char **argv);
  #define MCPU_TO_MARCH_SPEC_FUNCTIONS \
--- 1233,1239 ----
    CONFIG_TUNE_SPEC
  
  #define MCPU_TO_MARCH_SPEC \
!    "%{!march=*:%{mcpu=*:-march=%:rewrite_mcpu(%{mcpu=*:%*})}}"
  
  extern const char *aarch64_rewrite_mcpu (int argc, const char **argv);
  #define MCPU_TO_MARCH_SPEC_FUNCTIONS \
diff -Nrcpad gcc-13.3.0/gcc/config/aarch64/aarch64.md gcc-13.4.0/gcc/config/aarch64/aarch64.md
*** gcc-13.3.0/gcc/config/aarch64/aarch64.md	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/aarch64/aarch64.md	Thu Jun  5 16:02:58 2025
***************
*** 1659,1665 ****
     (match_operand:BLK 1 "memory_operand")
     (match_operand:DI 2 "general_operand")
     (match_operand:DI 3 "immediate_operand")]
!    "!STRICT_ALIGNMENT || TARGET_MOPS"
  {
    if (aarch64_expand_cpymem (operands))
      DONE;
--- 1659,1665 ----
     (match_operand:BLK 1 "memory_operand")
     (match_operand:DI 2 "general_operand")
     (match_operand:DI 3 "immediate_operand")]
!    ""
  {
    if (aarch64_expand_cpymem (operands))
      DONE;
***************
*** 1756,1762 ****
          (match_operand:QI  2 "nonmemory_operand")) ;; Value
     (use (match_operand:DI  1 "general_operand")) ;; Length
     (match_operand          3 "immediate_operand")] ;; Align
!  "TARGET_SIMD || TARGET_MOPS"
   {
    if (aarch64_expand_setmem (operands))
      DONE;
--- 1756,1762 ----
          (match_operand:QI  2 "nonmemory_operand")) ;; Value
     (use (match_operand:DI  1 "general_operand")) ;; Length
     (match_operand          3 "immediate_operand")] ;; Align
!  ""
   {
    if (aarch64_expand_setmem (operands))
      DONE;
***************
*** 7280,7290 ****
    [(set_attr "type" "f_cvtf2i")]
  )
  
! ;; Pointer authentication patterns are always provided.  In architecture
! ;; revisions prior to ARMv8.3-A these HINT instructions operate as NOPs.
  ;; This lets the user write portable software which authenticates pointers
! ;; when run on something which implements ARMv8.3-A, and which runs
! ;; correctly, but does not authenticate pointers, where ARMv8.3-A is not
  ;; implemented.
  
  ;; Signing/Authenticating R30 using SP as the salt.
--- 7280,7290 ----
    [(set_attr "type" "f_cvtf2i")]
  )
  
! ;; Pointer authentication patterns are always provided.  On targets that
! ;; don't implement FEAT_PAuth these HINT instructions operate as NOPs.
  ;; This lets the user write portable software which authenticates pointers
! ;; when run on something which implements FEAT_PAuth, and which runs
! ;; correctly, but does not authenticate pointers, where FEAT_PAuth is not
  ;; implemented.
  
  ;; Signing/Authenticating R30 using SP as the salt.
diff -Nrcpad gcc-13.3.0/gcc/config/aarch64/driver-aarch64.cc gcc-13.4.0/gcc/config/aarch64/driver-aarch64.cc
*** gcc-13.3.0/gcc/config/aarch64/driver-aarch64.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/aarch64/driver-aarch64.cc	Thu Jun  5 16:02:58 2025
*************** struct aarch64_core_data
*** 60,65 ****
--- 60,66 ----
  #define ALL_VARIANTS ((unsigned)-1)
  /* Default architecture to use if -mcpu=native did not detect a known CPU.  */
  #define DEFAULT_ARCH "8A"
+ #define DEFAULT_CPU "generic"
  
  #define AARCH64_CORE(CORE_NAME, CORE_IDENT, SCHED, ARCH, FLAGS, COSTS, IMP, PART, VARIANT) \
    { CORE_NAME, #ARCH, IMP, PART, VARIANT, feature_deps::cpu_##CORE_IDENT },
*************** struct aarch64_core_data
*** 67,72 ****
--- 68,74 ----
  static CONSTEXPR const aarch64_core_data aarch64_cpu_data[] =
  {
  #include "aarch64-cores.def"
+   { "generic", "armv8-a", 0, 0, ALL_VARIANTS, 0},
    { NULL, NULL, INVALID_IMP, INVALID_CORE, ALL_VARIANTS, 0 }
  };
  
*************** get_arch_from_id (const char* id)
*** 106,111 ****
--- 108,126 ----
    return NULL;
  }
  
+ /* Return an aarch64_core_data for the cpu described
+    by ID, or NULL if ID describes something we don't know about.  */
+ 
+ static const aarch64_core_data *
+ get_cpu_from_id (const char* name)
+ {
+   for (unsigned i = 0; aarch64_cpu_data[i].name != NULL; i++)
+     if (strcmp (name, aarch64_cpu_data[i].name) == 0)
+       return &aarch64_cpu_data[i];
+ 
+   return NULL;
+ }
+ 
  /* Check wether the CORE array is the same as the big.LITTLE BL_CORE.
     For an example CORE={0xd08, 0xd03} and
     BL_CORE=AARCH64_BIG_LITTLE (0xd08, 0xd03) will return true.  */
*************** host_detect_local_cpu (int argc, const c
*** 394,411 ****
                  || variants[0] == aarch64_cpu_data[i].variant))
  	  break;
  
!       if (aarch64_cpu_data[i].name == NULL)
! 	{
! 	  auto arch_info = get_arch_from_id (DEFAULT_ARCH);
! 
! 	  gcc_assert (arch_info);
! 
! 	  res = concat ("-march=", arch_info->name, NULL);
! 	  default_flags = arch_info->flags;
! 	}
!       else if (arch)
  	{
! 	  const char *arch_id = aarch64_cpu_data[i].arch;
  	  auto arch_info = get_arch_from_id (arch_id);
  
  	  /* We got some arch indentifier that's not in aarch64-arches.def?  */
--- 409,419 ----
                  || variants[0] == aarch64_cpu_data[i].variant))
  	  break;
  
!       if (arch)
  	{
! 	  const char *arch_id = (aarch64_cpu_data[i].name
! 				 ? aarch64_cpu_data[i].arch
! 				 : DEFAULT_ARCH);
  	  auto arch_info = get_arch_from_id (arch_id);
  
  	  /* We got some arch indentifier that's not in aarch64-arches.def?  */
*************** host_detect_local_cpu (int argc, const c
*** 415,426 ****
  	  res = concat ("-march=", arch_info->name, NULL);
  	  default_flags = arch_info->flags;
  	}
!       else
  	{
! 	  default_flags = aarch64_cpu_data[i].flags;
  	  res = concat ("-m",
  			cpu ? "cpu" : "tune", "=",
! 			aarch64_cpu_data[i].name,
  			NULL);
  	}
      }
--- 423,437 ----
  	  res = concat ("-march=", arch_info->name, NULL);
  	  default_flags = arch_info->flags;
  	}
!       else if (cpu || aarch64_cpu_data[i].name)
  	{
! 	  auto cpu_info = (aarch64_cpu_data[i].name
! 			   ? &aarch64_cpu_data[i]
! 			   : get_cpu_from_id (DEFAULT_CPU));
! 	  default_flags = cpu_info->flags;
  	  res = concat ("-m",
  			cpu ? "cpu" : "tune", "=",
! 			cpu_info->name,
  			NULL);
  	}
      }
*************** host_detect_local_cpu (int argc, const c
*** 440,445 ****
--- 451,470 ----
  	      break;
  	    }
  	}
+ 
+       /* On big.LITTLE if we find any unknown CPUs we can still pick arch
+ 	 features as the cores should have the same features.  So just pick
+ 	 the feature flags from any of the cpus.  */
+       if (cpu && aarch64_cpu_data[i].name == NULL)
+ 	{
+ 	  auto cpu_info = get_cpu_from_id (DEFAULT_CPU);
+ 
+ 	  gcc_assert (cpu_info);
+ 
+ 	  res = concat ("-mcpu=", cpu_info->name, NULL);
+ 	  default_flags = cpu_info->flags;
+ 	}
+ 
        if (!res)
  	goto not_found;
      }
diff -Nrcpad gcc-13.3.0/gcc/config/alpha/alpha.md gcc-13.4.0/gcc/config/alpha/alpha.md
*** gcc-13.3.0/gcc/config/alpha/alpha.md	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/alpha/alpha.md	Thu Jun  5 16:02:58 2025
***************
*** 756,762 ****
  	(sign_extend:DI (match_operand:SI 2 "nonimmediate_operand")))
     (parallel [(set (match_dup 5)
  		   (sign_extend:DI
! 		    (any_divmod:SI (match_dup 3) (match_dup 4))))
  	      (clobber (reg:DI 23))
  	      (clobber (reg:DI 28))])
     (set (match_operand:SI 0 "nonimmediate_operand")
--- 756,763 ----
  	(sign_extend:DI (match_operand:SI 2 "nonimmediate_operand")))
     (parallel [(set (match_dup 5)
  		   (sign_extend:DI
! 		    (any_divmod:SI (truncate:SI (match_dup 3))
! 				   (truncate:SI (match_dup 4)))))
  	      (clobber (reg:DI 23))
  	      (clobber (reg:DI 28))])
     (set (match_operand:SI 0 "nonimmediate_operand")
***************
*** 782,790 ****
  
  (define_insn_and_split "*divmodsi_internal_er"
    [(set (match_operand:DI 0 "register_operand" "=c")
! 	(sign_extend:DI (match_operator:SI 3 "divmod_operator"
! 			[(match_operand:DI 1 "register_operand" "a")
! 			 (match_operand:DI 2 "register_operand" "b")])))
     (clobber (reg:DI 23))
     (clobber (reg:DI 28))]
    "TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF"
--- 783,792 ----
  
  (define_insn_and_split "*divmodsi_internal_er"
    [(set (match_operand:DI 0 "register_operand" "=c")
! 	(sign_extend:DI
! 	 (match_operator:SI 3 "divmod_operator"
! 	  [(truncate:SI (match_operand:DI 1 "register_operand" "a"))
! 	   (truncate:SI (match_operand:DI 2 "register_operand" "b"))])))
     (clobber (reg:DI 23))
     (clobber (reg:DI 28))]
    "TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF"
***************
*** 826,833 ****
  (define_insn "*divmodsi_internal_er_1"
    [(set (match_operand:DI 0 "register_operand" "=c")
  	(sign_extend:DI (match_operator:SI 3 "divmod_operator"
!                         [(match_operand:DI 1 "register_operand" "a")
!                          (match_operand:DI 2 "register_operand" "b")])))
     (use (match_operand:DI 4 "register_operand" "c"))
     (use (match_operand 5 "const_int_operand"))
     (clobber (reg:DI 23))
--- 828,835 ----
  (define_insn "*divmodsi_internal_er_1"
    [(set (match_operand:DI 0 "register_operand" "=c")
  	(sign_extend:DI (match_operator:SI 3 "divmod_operator"
! 	 [(truncate:SI (match_operand:DI 1 "register_operand" "a"))
! 	  (truncate:SI (match_operand:DI 2 "register_operand" "b"))])))
     (use (match_operand:DI 4 "register_operand" "c"))
     (use (match_operand 5 "const_int_operand"))
     (clobber (reg:DI 23))
***************
*** 839,847 ****
  
  (define_insn "*divmodsi_internal"
    [(set (match_operand:DI 0 "register_operand" "=c")
! 	(sign_extend:DI (match_operator:SI 3 "divmod_operator"
! 			[(match_operand:DI 1 "register_operand" "a")
! 			 (match_operand:DI 2 "register_operand" "b")])))
     (clobber (reg:DI 23))
     (clobber (reg:DI 28))]
    "TARGET_ABI_OSF"
--- 841,850 ----
  
  (define_insn "*divmodsi_internal"
    [(set (match_operand:DI 0 "register_operand" "=c")
! 	(sign_extend:DI
! 	 (match_operator:SI 3 "divmod_operator"
! 	  [(truncate:SI (match_operand:DI 1 "register_operand" "a"))
! 	   (truncate:SI (match_operand:DI 2 "register_operand" "b"))])))
     (clobber (reg:DI 23))
     (clobber (reg:DI 28))]
    "TARGET_ABI_OSF"
***************
*** 3930,3936 ****
    else
      return "ldq %0,%2(%1)\t\t!literal!%3";
  }
!   [(set_attr "type" "ldsym")])
  
  (define_split
    [(set (match_operand:DI 0 "register_operand")
--- 3933,3940 ----
    else
      return "ldq %0,%2(%1)\t\t!literal!%3";
  }
!   [(set_attr "type" "ldsym")
!    (set_attr "cannot_copy" "true")])
  
  (define_split
    [(set (match_operand:DI 0 "register_operand")
***************
*** 3954,3960 ****
      return "lda %0,%2(%1)\t\t!tlsgd";
    else
      return "lda %0,%2(%1)\t\t!tlsgd!%3";
! })
  
  (define_insn "movdi_er_tlsldm"
    [(set (match_operand:DI 0 "register_operand" "=r")
--- 3958,3965 ----
      return "lda %0,%2(%1)\t\t!tlsgd";
    else
      return "lda %0,%2(%1)\t\t!tlsgd!%3";
! }
!   [(set_attr "cannot_copy" "true")])
  
  (define_insn "movdi_er_tlsldm"
    [(set (match_operand:DI 0 "register_operand" "=r")
***************
*** 3967,3973 ****
      return "lda %0,%&(%1)\t\t!tlsldm";
    else
      return "lda %0,%&(%1)\t\t!tlsldm!%2";
! })
  
  (define_insn "*movdi_er_gotdtp"
    [(set (match_operand:DI 0 "register_operand" "=r")
--- 3972,3979 ----
      return "lda %0,%&(%1)\t\t!tlsldm";
    else
      return "lda %0,%&(%1)\t\t!tlsldm!%2";
! }
!   [(set_attr "cannot_copy" "true")])
  
  (define_insn "*movdi_er_gotdtp"
    [(set (match_operand:DI 0 "register_operand" "=r")
***************
*** 5936,5941 ****
--- 5942,5948 ----
    "HAVE_AS_TLS"
    "ldq $27,%1($29)\t\t!literal!%2\;jsr $26,($27),%1\t\t!lituse_<tls>!%2\;ldah $29,0($26)\t\t!gpdisp!%*\;lda $29,0($29)\t\t!gpdisp!%*"
    [(set_attr "type" "jsr")
+    (set_attr "cannot_copy" "true")
     (set_attr "length" "16")])
  
  ;; We must use peep2 instead of a split because we need accurate life
diff -Nrcpad gcc-13.3.0/gcc/config/alpha/constraints.md gcc-13.4.0/gcc/config/alpha/constraints.md
*** gcc-13.3.0/gcc/config/alpha/constraints.md	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/alpha/constraints.md	Thu Jun  5 16:02:58 2025
***************
*** 27,33 ****
   "General register 24, input to division routine")
  
  (define_register_constraint "b" "R25_REG"
!  "General register 24, input to division routine")
  
  (define_register_constraint "c" "R27_REG"
   "General register 27, function call address")
--- 27,33 ----
   "General register 24, input to division routine")
  
  (define_register_constraint "b" "R25_REG"
!  "General register 25, input to division routine")
  
  (define_register_constraint "c" "R27_REG"
   "General register 27, function call address")
diff -Nrcpad gcc-13.3.0/gcc/config/arm/arm.cc gcc-13.4.0/gcc/config/arm/arm.cc
*** gcc-13.3.0/gcc/config/arm/arm.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/arm/arm.cc	Thu Jun  5 16:02:58 2025
*************** arm_function_ok_for_sibcall (tree decl,
*** 7947,7956 ****
        && DECL_WEAK (decl))
      return false;
  
!   /* We cannot do a tailcall for an indirect call by descriptor if all the
!      argument registers are used because the only register left to load the
!      address is IP and it will already contain the static chain.  */
!   if (!decl && CALL_EXPR_BY_DESCRIPTOR (exp) && !flag_trampolines)
      {
        tree fntype = TREE_TYPE (TREE_TYPE (CALL_EXPR_FN (exp)));
        CUMULATIVE_ARGS cum;
--- 7947,7959 ----
        && DECL_WEAK (decl))
      return false;
  
!   /* We cannot tailcall an indirect call by descriptor if all the call-clobbered
!      general registers are live (r0-r3 and ip).  This can happen when:
!       - IP contains the static chain, or
!       - IP is needed for validating the PAC signature.  */
!   if (!decl
!       && ((CALL_EXPR_BY_DESCRIPTOR (exp) && !flag_trampolines)
! 	  || arm_current_function_pac_enabled_p()))
      {
        tree fntype = TREE_TYPE (TREE_TYPE (CALL_EXPR_FN (exp)));
        CUMULATIVE_ARGS cum;
*************** legitimate_pic_operand_p (rtx x)
*** 7997,8004 ****
  
  /* Record that the current function needs a PIC register.  If PIC_REG is null,
     a new pseudo is allocated as PIC register, otherwise PIC_REG is used.  In
!    both case cfun->machine->pic_reg is initialized if we have not already done
!    so.  COMPUTE_NOW decide whether and where to set the PIC register.  If true,
     PIC register is reloaded in the current position of the instruction stream
     irregardless of whether it was loaded before.  Otherwise, it is only loaded
     if not already done so (crtl->uses_pic_offset_table is null).  Note that
--- 8000,8007 ----
  
  /* Record that the current function needs a PIC register.  If PIC_REG is null,
     a new pseudo is allocated as PIC register, otherwise PIC_REG is used.  In
!    both cases cfun->machine->pic_reg is initialized if we have not already done
!    so.  COMPUTE_NOW decides whether and where to set the PIC register.  If true,
     PIC register is reloaded in the current position of the instruction stream
     irregardless of whether it was loaded before.  Otherwise, it is only loaded
     if not already done so (crtl->uses_pic_offset_table is null).  Note that
*************** require_pic_register (rtx pic_reg, bool
*** 8018,8023 ****
--- 8021,8027 ----
    if (!crtl->uses_pic_offset_table || compute_now)
      {
        gcc_assert (can_create_pseudo_p ()
+ 		  || (arm_pic_register != INVALID_REGNUM)
  		  || (pic_reg != NULL_RTX
  		      && REG_P (pic_reg)
  		      && GET_MODE (pic_reg) == Pmode));
*************** cmse_nonsecure_call_inline_register_clea
*** 19143,19159 ****
  	      || TREE_CODE (ret_type) == BOOLEAN_TYPE)
  	      && known_lt (GET_MODE_SIZE (TYPE_MODE (ret_type)), 4))
  	    {
! 	      machine_mode ret_mode = TYPE_MODE (ret_type);
  	      rtx extend;
  	      if (TYPE_UNSIGNED (ret_type))
! 		extend = gen_rtx_ZERO_EXTEND (SImode,
! 					      gen_rtx_REG (ret_mode, R0_REGNUM));
  	      else
! 		extend = gen_rtx_SIGN_EXTEND (SImode,
! 					      gen_rtx_REG (ret_mode, R0_REGNUM));
! 	      emit_insn_after (gen_rtx_SET (gen_rtx_REG (SImode, R0_REGNUM),
! 					     extend), insn);
! 
  	    }
  
  
--- 19147,19171 ----
  	      || TREE_CODE (ret_type) == BOOLEAN_TYPE)
  	      && known_lt (GET_MODE_SIZE (TYPE_MODE (ret_type)), 4))
  	    {
! 	      rtx ret_reg = gen_rtx_REG (TYPE_MODE (ret_type), R0_REGNUM);
! 	      rtx si_reg = gen_rtx_REG (SImode, R0_REGNUM);
  	      rtx extend;
  	      if (TYPE_UNSIGNED (ret_type))
! 		extend = gen_rtx_SET (si_reg, gen_rtx_ZERO_EXTEND (SImode,
! 								   ret_reg));
  	      else
! 		{
! 		  /* Signed-extension is a special case because of
! 		     thumb1_extendhisi2.  */
! 		  if (TARGET_THUMB1
! 		      && known_eq (GET_MODE_SIZE (TYPE_MODE (ret_type)), 2))
! 		    extend = gen_thumb1_extendhisi2 (si_reg, ret_reg);
! 		  else
! 		    extend = gen_rtx_SET (si_reg,
! 					  gen_rtx_SIGN_EXTEND (SImode,
! 							       ret_reg));
! 		}
! 	      emit_insn_after (extend, insn);
  	    }
  
  
*************** thumb1_expand_prologue (void)
*** 27172,27177 ****
--- 27184,27241 ----
    live_regs_mask = offsets->saved_regs_mask;
    lr_needs_saving = live_regs_mask & (1 << LR_REGNUM);
  
+   /* The AAPCS requires the callee to widen integral types narrower
+      than 32 bits to the full width of the register; but when handling
+      calls to non-secure space, we cannot trust the callee to have
+      correctly done so.  So forcibly re-widen the result here.  */
+   if (IS_CMSE_ENTRY (func_type))
+     {
+       function_args_iterator args_iter;
+       CUMULATIVE_ARGS args_so_far_v;
+       cumulative_args_t args_so_far;
+       bool first_param = true;
+       tree arg_type;
+       tree fndecl = current_function_decl;
+       tree fntype = TREE_TYPE (fndecl);
+       arm_init_cumulative_args (&args_so_far_v, fntype, NULL_RTX, fndecl);
+       args_so_far = pack_cumulative_args (&args_so_far_v);
+       FOREACH_FUNCTION_ARGS (fntype, arg_type, args_iter)
+ 	{
+ 	  rtx arg_rtx;
+ 
+ 	  if (VOID_TYPE_P (arg_type))
+ 	    break;
+ 
+ 	  function_arg_info arg (arg_type, /*named=*/true);
+ 	  if (!first_param)
+ 	    /* We should advance after processing the argument and pass
+ 	       the argument we're advancing past.  */
+ 	    arm_function_arg_advance (args_so_far, arg);
+ 	  first_param = false;
+ 	  arg_rtx = arm_function_arg (args_so_far, arg);
+ 	  gcc_assert (REG_P (arg_rtx));
+ 	  if ((TREE_CODE (arg_type) == INTEGER_TYPE
+ 	      || TREE_CODE (arg_type) == ENUMERAL_TYPE
+ 	      || TREE_CODE (arg_type) == BOOLEAN_TYPE)
+ 	      && known_lt (GET_MODE_SIZE (GET_MODE (arg_rtx)), 4))
+ 	    {
+ 	      rtx res_reg = gen_rtx_REG (SImode, REGNO (arg_rtx));
+ 	      if (TYPE_UNSIGNED (arg_type))
+ 		emit_set_insn (res_reg, gen_rtx_ZERO_EXTEND (SImode, arg_rtx));
+ 	      else
+ 		{
+ 		  /* Signed-extension is a special case because of
+ 		     thumb1_extendhisi2.  */
+ 		  if (known_eq (GET_MODE_SIZE (GET_MODE (arg_rtx)), 2))
+ 		    emit_insn (gen_thumb1_extendhisi2 (res_reg, arg_rtx));
+ 		  else
+ 		    emit_set_insn (res_reg,
+ 				   gen_rtx_SIGN_EXTEND (SImode, arg_rtx));
+ 		}
+ 	    }
+ 	}
+     }
+ 
    /* Extract a mask of the ones we can give to the Thumb's push instruction.  */
    l_mask = live_regs_mask & 0x40ff;
    /* Then count how many other high registers will need to be pushed.  */
diff -Nrcpad gcc-13.3.0/gcc/config/arm/arm_mve.h gcc-13.4.0/gcc/config/arm/arm_mve.h
*** gcc-13.3.0/gcc/config/arm/arm_mve.h	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/arm/arm_mve.h	Thu Jun  5 16:02:58 2025
***************
*** 15,20 ****
--- 15,24 ----
     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
     along with GCC; see the file COPYING3.  If not see
     <http://www.gnu.org/licenses/>.  */
diff -Nrcpad gcc-13.3.0/gcc/config/arm/arm_mve_types.h gcc-13.4.0/gcc/config/arm/arm_mve_types.h
*** gcc-13.3.0/gcc/config/arm/arm_mve_types.h	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/arm/arm_mve_types.h	Thu Jun  5 16:02:58 2025
***************
*** 15,20 ****
--- 15,24 ----
     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
     along with GCC; see the file COPYING3.  If not see
     <http://www.gnu.org/licenses/>.  */
diff -Nrcpad gcc-13.3.0/gcc/config/arm/freebsd.h gcc-13.4.0/gcc/config/arm/freebsd.h
*** gcc-13.3.0/gcc/config/arm/freebsd.h	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/arm/freebsd.h	Thu Jun  5 16:02:58 2025
***************
*** 47,52 ****
--- 47,53 ----
  #undef	LINK_SPEC
  #define LINK_SPEC "							\
    %{p:%nconsider using `-pg' instead of `-p' with gprof (1)}		\
+   " FBSD_LINK_PG_NOTE "							\
    %{v:-V}								\
    %{assert*} %{R*} %{rpath*} %{defsym*}					\
    %{shared:-Bshareable %{h*} %{soname*}}				\
diff -Nrcpad gcc-13.3.0/gcc/config/arm/mve.md gcc-13.4.0/gcc/config/arm/mve.md
*** gcc-13.3.0/gcc/config/arm/mve.md	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/arm/mve.md	Thu Jun  5 16:02:58 2025
***************
*** 10166,10172 ****
    if (elt == 0)
     return "vmov\t%e0, %Q1, %R1";
    else
!    return "vmov\t%f0, %J1, %K1";
  }
   [(set_attr "type" "mve_move")])
  
--- 10166,10172 ----
    if (elt == 0)
     return "vmov\t%e0, %Q1, %R1";
    else
!    return "vmov\t%f0, %Q1, %R1";
  }
   [(set_attr "type" "mve_move")])
  
diff -Nrcpad gcc-13.3.0/gcc/config/arm/t-rtems gcc-13.4.0/gcc/config/arm/t-rtems
*** gcc-13.3.0/gcc/config/arm/t-rtems	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/arm/t-rtems	Thu Jun  5 16:02:58 2025
*************** MULTILIB_DIRNAMES	+= eb
*** 17,24 ****
  MULTILIB_OPTIONS	+= mthumb
  MULTILIB_DIRNAMES	+= thumb
  
! MULTILIB_OPTIONS	+= march=armv5te+fp/march=armv6-m/march=armv7-a/march=armv7-a+simd/march=armv7-r/march=armv7-r+fp/mcpu=cortex-r52/mcpu=cortex-m3/mcpu=cortex-m4/mcpu=cortex-m4+nofp/mcpu=cortex-m7
! MULTILIB_DIRNAMES	+= armv5te+fp       armv6-m       armv7-a       armv7-a+simd       armv7-r       armv7-r+fp       cortex-r52      cortex-m3      cortex-m4      cortex-m4+nofp      cortex-m7
  
  MULTILIB_OPTIONS	+= mfloat-abi=hard
  MULTILIB_DIRNAMES	+= hard
--- 17,24 ----
  MULTILIB_OPTIONS	+= mthumb
  MULTILIB_DIRNAMES	+= thumb
  
! MULTILIB_OPTIONS	+= march=armv5te+fp/march=armv6-m/march=armv7-a/march=armv7-a+simd/march=armv7-r/march=armv7-r+fp/mcpu=cortex-r52/mcpu=cortex-m3/mcpu=cortex-m33/mcpu=cortex-m4/mcpu=cortex-m4+nofp/mcpu=cortex-m7
! MULTILIB_DIRNAMES	+= armv5te+fp       armv6-m       armv7-a       armv7-a+simd       armv7-r       armv7-r+fp       cortex-r52      cortex-m3      cortex-m33      cortex-m4      cortex-m4+nofp      cortex-m7
  
  MULTILIB_OPTIONS	+= mfloat-abi=hard
  MULTILIB_DIRNAMES	+= hard
*************** MULTILIB_REQUIRED	+= mthumb/march=armv7-
*** 33,38 ****
--- 33,39 ----
  MULTILIB_REQUIRED	+= mthumb/march=armv7-r
  MULTILIB_REQUIRED	+= mthumb/mcpu=cortex-r52/mfloat-abi=hard
  MULTILIB_REQUIRED	+= mthumb/mcpu=cortex-m3
+ MULTILIB_REQUIRED	+= mthumb/mcpu=cortex-m33
  MULTILIB_REQUIRED	+= mthumb/mcpu=cortex-m4/mfloat-abi=hard
  MULTILIB_REQUIRED	+= mthumb/mcpu=cortex-m4+nofp
  MULTILIB_REQUIRED	+= mthumb/mcpu=cortex-m7/mfloat-abi=hard
diff -Nrcpad gcc-13.3.0/gcc/config/avr/avr-dimode.md gcc-13.4.0/gcc/config/avr/avr-dimode.md
*** gcc-13.3.0/gcc/config/avr/avr-dimode.md	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/avr/avr-dimode.md	Thu Jun  5 16:02:58 2025
***************
*** 62,69 ****
  ;; "addta3" "adduta3"
  (define_expand "add<mode>3"
    [(parallel [(match_operand:ALL8 0 "general_operand" "")
!               (match_operand:ALL8 1 "general_operand" "")
!               (match_operand:ALL8 2 "general_operand" "")])]
    "avr_have_dimode"
    {
      rtx acc_a = gen_rtx_REG (<MODE>mode, ACC_A);
--- 62,69 ----
  ;; "addta3" "adduta3"
  (define_expand "add<mode>3"
    [(parallel [(match_operand:ALL8 0 "general_operand" "")
!               (match_operand:ALL8 1 "nop_general_operand")
!               (match_operand:ALL8 2 "nop_general_operand")])]
    "avr_have_dimode"
    {
      rtx acc_a = gen_rtx_REG (<MODE>mode, ACC_A);
***************
*** 178,185 ****
  ;; "subta3" "subuta3"
  (define_expand "sub<mode>3"
    [(parallel [(match_operand:ALL8 0 "general_operand" "")
!               (match_operand:ALL8 1 "general_operand" "")
!               (match_operand:ALL8 2 "general_operand" "")])]
    "avr_have_dimode"
    {
      rtx acc_a = gen_rtx_REG (<MODE>mode, ACC_A);
--- 178,185 ----
  ;; "subta3" "subuta3"
  (define_expand "sub<mode>3"
    [(parallel [(match_operand:ALL8 0 "general_operand" "")
!               (match_operand:ALL8 1 "nop_general_operand")
!               (match_operand:ALL8 2 "nop_general_operand")])]
    "avr_have_dimode"
    {
      rtx acc_a = gen_rtx_REG (<MODE>mode, ACC_A);
***************
*** 259,266 ****
  
  (define_expand "<code_stdname><mode>3"
    [(set (match_operand:ALL8S 0 "general_operand" "")
!         (ss_addsub:ALL8S (match_operand:ALL8S 1 "general_operand" "")
!                          (match_operand:ALL8S 2 "general_operand" "")))]
    "avr_have_dimode"
    {
      rtx acc_a = gen_rtx_REG (<MODE>mode, ACC_A);
--- 259,266 ----
  
  (define_expand "<code_stdname><mode>3"
    [(set (match_operand:ALL8S 0 "general_operand" "")
!         (ss_addsub:ALL8S (match_operand:ALL8S 1 "nop_general_operand")
!                          (match_operand:ALL8S 2 "nop_general_operand")))]
    "avr_have_dimode"
    {
      rtx acc_a = gen_rtx_REG (<MODE>mode, ACC_A);
***************
*** 332,339 ****
  
  (define_expand "<code_stdname><mode>3"
    [(set (match_operand:ALL8U 0 "general_operand" "")
!         (us_addsub:ALL8U (match_operand:ALL8U 1 "general_operand" "")
!                          (match_operand:ALL8U 2 "general_operand" "")))]
    "avr_have_dimode"
    {
      rtx acc_a = gen_rtx_REG (<MODE>mode, ACC_A);
--- 332,339 ----
  
  (define_expand "<code_stdname><mode>3"
    [(set (match_operand:ALL8U 0 "general_operand" "")
!         (us_addsub:ALL8U (match_operand:ALL8U 1 "nop_general_operand")
!                          (match_operand:ALL8U 2 "nop_general_operand")))]
    "avr_have_dimode"
    {
      rtx acc_a = gen_rtx_REG (<MODE>mode, ACC_A);
***************
*** 405,411 ****
  
  (define_expand "negdi2"
    [(parallel [(match_operand:DI 0 "general_operand" "")
!               (match_operand:DI 1 "general_operand" "")])]
    "avr_have_dimode"
    {
      rtx acc_a = gen_rtx_REG (DImode, ACC_A);
--- 405,411 ----
  
  (define_expand "negdi2"
    [(parallel [(match_operand:DI 0 "general_operand" "")
!               (match_operand:DI 1 "nop_general_operand")])]
    "avr_have_dimode"
    {
      rtx acc_a = gen_rtx_REG (DImode, ACC_A);
***************
*** 602,609 ****
  ;; "ashluta3"  "ashruta3"  "lshruta3"  "rotluta3"
  (define_expand "<code_stdname><mode>3"
    [(parallel [(match_operand:ALL8 0 "general_operand" "")
!               (di_shifts:ALL8 (match_operand:ALL8 1 "general_operand" "")
!                               (match_operand:QI 2 "general_operand" ""))])]
    "avr_have_dimode"
    {
      rtx acc_a = gen_rtx_REG (<MODE>mode, ACC_A);
--- 602,609 ----
  ;; "ashluta3"  "ashruta3"  "lshruta3"  "rotluta3"
  (define_expand "<code_stdname><mode>3"
    [(parallel [(match_operand:ALL8 0 "general_operand" "")
!               (di_shifts:ALL8 (match_operand:ALL8 1 "nop_general_operand")
!                               (match_operand:QI 2 "nop_general_operand"))])]
    "avr_have_dimode"
    {
      rtx acc_a = gen_rtx_REG (<MODE>mode, ACC_A);
***************
*** 648,655 ****
  ;; "mulsidi3"
  (define_expand "<extend_u>mulsidi3"
    [(parallel [(match_operand:DI 0 "register_operand" "")
!               (match_operand:SI 1 "general_operand" "")
!               (match_operand:SI 2 "general_operand" "")
                ;; Just to mention the iterator 
                (clobber (any_extend:SI (match_dup 1)))])]
    "avr_have_dimode
--- 648,655 ----
  ;; "mulsidi3"
  (define_expand "<extend_u>mulsidi3"
    [(parallel [(match_operand:DI 0 "register_operand" "")
!               (match_operand:SI 1 "nop_general_operand")
!               (match_operand:SI 2 "nop_general_operand")
                ;; Just to mention the iterator 
                (clobber (any_extend:SI (match_dup 1)))])]
    "avr_have_dimode
diff -Nrcpad gcc-13.3.0/gcc/config/avr/avr-mcus.def gcc-13.4.0/gcc/config/avr/avr-mcus.def
*** gcc-13.3.0/gcc/config/avr/avr-mcus.def	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/avr/avr-mcus.def	Thu Jun  5 16:02:58 2025
*************** AVR_MCU ("avr64du32",        ARCH_AVRXME
*** 326,331 ****
--- 326,334 ----
  AVR_MCU ("avr64ea28",        ARCH_AVRXMEGA2, AVR_ISA_NONE, "__AVR_AVR64EA28__",    0x6800, 0x0, 0x10000, 0)
  AVR_MCU ("avr64ea32",        ARCH_AVRXMEGA2, AVR_ISA_NONE, "__AVR_AVR64EA32__",    0x6800, 0x0, 0x10000, 0)
  AVR_MCU ("avr64ea48",        ARCH_AVRXMEGA2, AVR_ISA_NONE, "__AVR_AVR64EA48__",    0x6800, 0x0, 0x10000, 0)
+ AVR_MCU ("avr64sd28",        ARCH_AVRXMEGA2, AVR_ISA_NONE, "__AVR_AVR64SD28__",    0x6000, 0x0, 0x10000, 0)
+ AVR_MCU ("avr64sd32",        ARCH_AVRXMEGA2, AVR_ISA_NONE, "__AVR_AVR64SD32__",    0x6000, 0x0, 0x10000, 0)
+ AVR_MCU ("avr64sd48",        ARCH_AVRXMEGA2, AVR_ISA_NONE, "__AVR_AVR64SD48__",    0x6000, 0x0, 0x10000, 0)
  /* Xmega, Flash + RAM < 64K, flash visible in RAM address space */
  AVR_MCU ("avrxmega3",        ARCH_AVRXMEGA3, AVR_ISA_NONE,  NULL,                  0x3f00, 0x0, 0x8000, 0)
  AVR_MCU ("attiny202",        ARCH_AVRXMEGA3, AVR_ISA_RCALL, "__AVR_ATtiny202__",   0x3f80, 0x0, 0x800,  0x8000)
*************** AVR_MCU ("avr16ea48",        ARCH_AVRXME
*** 407,412 ****
--- 410,418 ----
  AVR_MCU ("avr32ea28",        ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR32EA28__",   0x7000, 0x0, 0x8000, 0x8000)
  AVR_MCU ("avr32ea32",        ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR32EA32__",   0x7000, 0x0, 0x8000, 0x8000)
  AVR_MCU ("avr32ea48",        ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR32EA48__",   0x7000, 0x0, 0x8000, 0x8000)
+ AVR_MCU ("avr32sd20",        ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR32SD20__",   0x7000, 0x0, 0x8000, 0x8000)
+ AVR_MCU ("avr32sd28",        ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR32SD28__",   0x7000, 0x0, 0x8000, 0x8000)
+ AVR_MCU ("avr32sd32",        ARCH_AVRXMEGA3, AVR_ISA_NONE,  "__AVR_AVR32SD32__",   0x7000, 0x0, 0x8000, 0x8000)
  /* Xmega, 64K < Flash <= 128K, RAM <= 64K */
  AVR_MCU ("avrxmega4",        ARCH_AVRXMEGA4, AVR_ISA_NONE, NULL,                   0x2000, 0x0, 0x11000, 0)
  AVR_MCU ("atxmega64a3",      ARCH_AVRXMEGA4, AVR_ISA_NONE, "__AVR_ATxmega64A3__",  0x2000, 0x0, 0x11000, 0)
diff -Nrcpad gcc-13.3.0/gcc/config/avr/avr-protos.h gcc-13.4.0/gcc/config/avr/avr-protos.h
*** gcc-13.3.0/gcc/config/avr/avr-protos.h	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/avr/avr-protos.h	Thu Jun  5 16:02:58 2025
*************** extern const char* avr_out_lpm (rtx_insn
*** 108,114 ****
  extern void avr_notice_update_cc (rtx body, rtx_insn *insn);
  extern int reg_unused_after (rtx_insn *insn, rtx reg);
  extern int _reg_unused_after (rtx_insn *insn, rtx reg);
! extern int avr_jump_mode (rtx x, rtx_insn *insn);
  extern int test_hard_reg_class (enum reg_class rclass, rtx x);
  extern int jump_over_one_insn_p (rtx_insn *insn, rtx dest);
  
--- 108,114 ----
  extern void avr_notice_update_cc (rtx body, rtx_insn *insn);
  extern int reg_unused_after (rtx_insn *insn, rtx reg);
  extern int _reg_unused_after (rtx_insn *insn, rtx reg);
! extern int avr_jump_mode (rtx x, rtx_insn *insn, int = 0);
  extern int test_hard_reg_class (enum reg_class rclass, rtx x);
  extern int jump_over_one_insn_p (rtx_insn *insn, rtx dest);
  
diff -Nrcpad gcc-13.3.0/gcc/config/avr/avr.cc gcc-13.4.0/gcc/config/avr/avr.cc
*** gcc-13.3.0/gcc/config/avr/avr.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/avr/avr.cc	Thu Jun  5 16:02:58 2025
*************** avr_print_operand (FILE *file, rtx x, in
*** 3209,3214 ****
--- 3209,3277 ----
        rtx op = XEXP (XEXP (x, 0), 0);
        fprintf (file, "%s", reg_names[REGNO (op) + ij]);
      }
+   else if (code == 'i')
+     {
+       const int sfr0 = avr_arch->sfr_offset;
+       bool lossage_p = false;
+ 
+       switch (GET_CODE (x))
+ 	{
+ 	default:
+ 	  lossage_p = true;
+ 	  break;
+ 
+ 	case CONST_INT:
+ 	  {
+ 	    const auto ival = INTVAL (x);
+ 
+ 	    if (io_address_operand (x, VOIDmode))
+ 	      {
+ 		if (AVR_HAVE_RAMPZ && ival == avr_addr.rampz)
+ 		  fprintf (file, "__RAMPZ__");
+ 		else if (AVR_HAVE_RAMPY && ival == avr_addr.rampy)
+ 		  fprintf (file, "__RAMPY__");
+ 		else if (AVR_HAVE_RAMPX && ival == avr_addr.rampx)
+ 		  fprintf (file, "__RAMPX__");
+ 		else if (AVR_HAVE_RAMPD && ival == avr_addr.rampd)
+ 		  fprintf (file, "__RAMPD__");
+ 		else if ((AVR_XMEGA || AVR_TINY) && ival == avr_addr.ccp)
+ 		  fprintf (file, "__CCP__");
+ 		else if (ival == avr_addr.sreg)   fprintf (file, "__SREG__");
+ 		else if (ival == avr_addr.sp_l)   fprintf (file, "__SP_L__");
+ 		else if (ival == avr_addr.sp_h)   fprintf (file, "__SP_H__");
+ 		else
+ 		  fprintf (file, HOST_WIDE_INT_PRINT_HEX, ival - sfr0);
+ 	      }
+ 	    else
+ 	      output_operand_lossage
+ 		("bad I/O address 0x" HOST_WIDE_INT_PRINT_HEX_PURE
+ 		 " outside of valid range [0x%x, 0x%x] for %%i operand",
+ 		 ival, sfr0, sfr0 + 0x3f);
+ 	  }
+ 	  break; // CONST_INT
+ 
+ 	case MEM:
+ 	  if (io_address_operand (XEXP (x, 0), VOIDmode))
+ 	    avr_print_operand (file, XEXP (x, 0), 'i');
+ 	  else
+ 	    lossage_p = true;
+ 	  break;
+ 
+ 	case SYMBOL_REF:
+ 	  if (io_address_operand (x, VOIDmode))
+ 	    {
+ 	      rtx addr = plus_constant (HImode, x, -sfr0);
+ 	      avr_print_operand_address (file, VOIDmode, addr);
+ 	    }
+ 	  else
+ 	    lossage_p = true;
+ 	  break;
+ 	} // switch code
+ 
+       if (lossage_p)
+ 	output_operand_lossage ("%s operand cannot be used as %%i I/O "
+ 				"address operand", rtx_name[GET_CODE (x)]);
+     } // code = i
    else if (REG_P (x))
      {
        if (x == zero_reg_rtx)
*************** avr_print_operand (FILE *file, rtx x, in
*** 3220,3253 ****
      }
    else if (CONST_INT_P (x))
      {
!       HOST_WIDE_INT ival = INTVAL (x);
! 
!       if ('i' != code)
!         fprintf (file, HOST_WIDE_INT_PRINT_DEC, ival + abcd);
!       else if (low_io_address_operand (x, VOIDmode)
!                || high_io_address_operand (x, VOIDmode))
!         {
!           if (AVR_HAVE_RAMPZ && ival == avr_addr.rampz)
!             fprintf (file, "__RAMPZ__");
!           else if (AVR_HAVE_RAMPY && ival == avr_addr.rampy)
!             fprintf (file, "__RAMPY__");
!           else if (AVR_HAVE_RAMPX && ival == avr_addr.rampx)
!             fprintf (file, "__RAMPX__");
!           else if (AVR_HAVE_RAMPD && ival == avr_addr.rampd)
!             fprintf (file, "__RAMPD__");
!           else if ((AVR_XMEGA || AVR_TINY) && ival == avr_addr.ccp)
!             fprintf (file, "__CCP__");
!           else if (ival == avr_addr.sreg)   fprintf (file, "__SREG__");
!           else if (ival == avr_addr.sp_l)   fprintf (file, "__SP_L__");
!           else if (ival == avr_addr.sp_h)   fprintf (file, "__SP_H__");
!           else
!             {
!               fprintf (file, HOST_WIDE_INT_PRINT_HEX,
!                        ival - avr_arch->sfr_offset);
!             }
!         }
!       else
!         fatal_insn ("bad address, not an I/O address:", x);
      }
    else if (MEM_P (x))
      {
--- 3283,3289 ----
      }
    else if (CONST_INT_P (x))
      {
!       fprintf (file, HOST_WIDE_INT_PRINT_DEC, INTVAL (x) + abcd);
      }
    else if (MEM_P (x))
      {
*************** avr_print_operand (FILE *file, rtx x, in
*** 3267,3276 ****
                }
            output_addr_const (file, addr);
          }
-       else if (code == 'i')
-         {
-           avr_print_operand (file, addr, 'i');
-         }
        else if (code == 'o')
          {
            if (GET_CODE (addr) != PLUS)
--- 3303,3308 ----
*************** avr_print_operand (FILE *file, rtx x, in
*** 3308,3321 ****
        else
          avr_print_operand_address (file, VOIDmode, addr);
      }
-   else if (code == 'i')
-     {
-       if (SYMBOL_REF_P (x) && (SYMBOL_REF_FLAGS (x) & SYMBOL_FLAG_IO))
- 	avr_print_operand_address
- 	  (file, VOIDmode, plus_constant (HImode, x, -avr_arch->sfr_offset));
-       else
- 	fatal_insn ("bad address, not an I/O address:", x);
-     }
    else if (code == 'x')
      {
        /* Constant progmem address - like used in jmp or call */
--- 3340,3345 ----
*************** avr_use_by_pieces_infrastructure_p (unsi
*** 3388,3406 ****
  /* Choose mode for jump insn:
     1 - relative jump in range -63 <= x <= 62 ;
     2 - relative jump in range -2046 <= x <= 2045 ;
!    3 - absolute jump (only for ATmega[16]03).  */
  
  int
! avr_jump_mode (rtx x, rtx_insn *insn)
  {
    int dest_addr = INSN_ADDRESSES (INSN_UID (GET_CODE (x) == LABEL_REF
                                              ? XEXP (x, 0) : x));
    int cur_addr = INSN_ADDRESSES (INSN_UID (insn));
    int jump_distance = cur_addr - dest_addr;
  
!   if (IN_RANGE (jump_distance, -63, 62))
      return 1;
!   else if (IN_RANGE (jump_distance, -2046, 2045))
      return 2;
    else if (AVR_HAVE_JMP_CALL)
      return 3;
--- 3412,3433 ----
  /* Choose mode for jump insn:
     1 - relative jump in range -63 <= x <= 62 ;
     2 - relative jump in range -2046 <= x <= 2045 ;
!    3 - absolute jump (only when we have JMP / CALL).
! 
!    When jumping backwards, assume the jump offset is EXTRA words
!    bigger than inferred from insn addresses.  */
  
  int
! avr_jump_mode (rtx x, rtx_insn *insn, int extra)
  {
    int dest_addr = INSN_ADDRESSES (INSN_UID (GET_CODE (x) == LABEL_REF
                                              ? XEXP (x, 0) : x));
    int cur_addr = INSN_ADDRESSES (INSN_UID (insn));
    int jump_distance = cur_addr - dest_addr;
  
!   if (IN_RANGE (jump_distance, -63, 62 - extra))
      return 1;
!   else if (IN_RANGE (jump_distance, -2046, 2045 - extra))
      return 2;
    else if (AVR_HAVE_JMP_CALL)
      return 3;
*************** avr_out_xload (rtx_insn *insn ATTRIBUTE_
*** 4093,4099 ****
    xop[2] = lpm_addr_reg_rtx;
    xop[3] = AVR_HAVE_LPMX ? op[0] : lpm_reg_rtx;
  
!   avr_asm_len (AVR_HAVE_LPMX ? "lpm %3,%a2" : "lpm", xop, plen, -1);
  
    avr_asm_len ("sbrc %1,7" CR_TAB
                 "ld %3,%a2", xop, plen, 2);
--- 4120,4132 ----
    xop[2] = lpm_addr_reg_rtx;
    xop[3] = AVR_HAVE_LPMX ? op[0] : lpm_reg_rtx;
  
!   if (plen)
!     *plen = 0;
! 
!   if (reg_overlap_mentioned_p (xop[3], lpm_addr_reg_rtx))
!     avr_asm_len ("sbrs %1,7", xop, plen, 1);
! 
!   avr_asm_len (AVR_HAVE_LPMX ? "lpm %3,%a2" : "lpm", xop, plen, 1);
  
    avr_asm_len ("sbrc %1,7" CR_TAB
                 "ld %3,%a2", xop, plen, 2);
*************** avr_out_movqi_r_mr_reg_disp_tiny (rtx_in
*** 4239,4251 ****
    rtx dest = op[0];
    rtx src = op[1];
    rtx x = XEXP (src, 0);
  
!   avr_asm_len (TINY_ADIW (%I1, %J1, %o1) CR_TAB
!                "ld %0,%b1" , op, plen, -3);
  
!   if (!reg_overlap_mentioned_p (dest, XEXP (x, 0))
!       && !reg_unused_after (insn, XEXP (x, 0)))
!     avr_asm_len (TINY_SBIW (%I1, %J1, %o1), op, plen, 2);
  
    return "";
  }
--- 4272,4301 ----
    rtx dest = op[0];
    rtx src = op[1];
    rtx x = XEXP (src, 0);
+   rtx base = XEXP (x, 0);
  
!   if (plen)
!     *plen = 0;
  
!   if (!reg_overlap_mentioned_p (dest, base))
!     {
!       avr_asm_len (TINY_ADIW (%I1, %J1, %o1) CR_TAB
! 		   "ld %0,%b1", op, plen, 3);
!       if (!reg_unused_after (insn, base))
! 	avr_asm_len (TINY_SBIW (%I1, %J1, %o1), op, plen, 2);
!     }
!   else
!     {
!       // PR98762: The base register overlaps dest and is only partly clobbered.
!       rtx base2 = all_regs_rtx[1 ^ REGNO (dest)];
! 
!       if (!reg_unused_after (insn, base2))
! 	avr_asm_len ("mov __tmp_reg__,%0", &base2, plen, 1);
!       avr_asm_len (TINY_ADIW (%I1, %J1, %o1) CR_TAB
! 		   "ld %0,%b1", op, plen, 3);
!       if (!reg_unused_after (insn, base2))
! 	avr_asm_len ("mov %0,__tmp_reg__", &base2, plen, 1);
!     }
  
    return "";
  }
*************** out_movqi_r_mr (rtx_insn *insn, rtx op[]
*** 4271,4310 ****
      {
        /* memory access by reg+disp */
  
-       int disp = INTVAL (XEXP (x, 1));
- 
        if (AVR_TINY)
          return avr_out_movqi_r_mr_reg_disp_tiny (insn, op, plen);
  
        if (disp - GET_MODE_SIZE (GET_MODE (src)) >= 63)
!         {
!           if (REGNO (XEXP (x, 0)) != REG_Y)
!             fatal_insn ("incorrect insn:",insn);
  
!           if (disp <= 63 + MAX_LD_OFFSET (GET_MODE (src)))
!             return avr_asm_len ("adiw r28,%o1-63" CR_TAB
!                                 "ldd %0,Y+63"     CR_TAB
!                                 "sbiw r28,%o1-63", op, plen, -3);
  
!           return avr_asm_len ("subi r28,lo8(-%o1)" CR_TAB
!                               "sbci r29,hi8(-%o1)" CR_TAB
!                               "ld %0,Y"            CR_TAB
!                               "subi r28,lo8(%o1)"  CR_TAB
!                               "sbci r29,hi8(%o1)", op, plen, -5);
!         }
        else if (REGNO (XEXP (x, 0)) == REG_X)
          {
            /* This is a paranoid case LEGITIMIZE_RELOAD_ADDRESS must exclude
               it but I have this situation with extremal optimizing options.  */
  
!           avr_asm_len ("adiw r26,%o1" CR_TAB
!                        "ld %0,X", op, plen, -2);
  
!           if (!reg_overlap_mentioned_p (dest, XEXP (x, 0))
!               && !reg_unused_after (insn, XEXP (x, 0)))
!             {
!               avr_asm_len ("sbiw r26,%o1", op, plen, 1);
!             }
  
            return "";
          }
--- 4321,4386 ----
      {
        /* memory access by reg+disp */
  
        if (AVR_TINY)
          return avr_out_movqi_r_mr_reg_disp_tiny (insn, op, plen);
  
+       if (plen)
+ 	*plen = 0;
+ 
+       int disp = INTVAL (XEXP (x, 1));
+       rtx base = XEXP (x, 0);
+       rtx base2 = all_regs_rtx[1 ^ REGNO (dest)];
+       bool partial_clobber = (reg_overlap_mentioned_p (dest, base)
+ 			      && ! reg_unused_after (insn, base2));
+ 
        if (disp - GET_MODE_SIZE (GET_MODE (src)) >= 63)
! 	{
! 	  // PR117744: The base register overlaps dest and is
! 	  // only partially clobbered.
! 	  if (partial_clobber)
! 	    avr_asm_len ("mov __tmp_reg__,%0", &base2, plen, 1);
  
! 	  if (REGNO (XEXP (x, 0)) != REG_Y)
! 	    fatal_insn ("incorrect insn:",insn);
  
! 	  if (disp <= 63 + MAX_LD_OFFSET (GET_MODE (src)))
! 	    avr_asm_len ("adiw r28,%o1-63" CR_TAB
! 			 "ldd %0,Y+63"     CR_TAB
! 			 "sbiw r28,%o1-63", op, plen, 3);
! 	  else
! 	    avr_asm_len ("subi r28,lo8(-%o1)" CR_TAB
! 			 "sbci r29,hi8(-%o1)" CR_TAB
! 			 "ld %0,Y"            CR_TAB
! 			 "subi r28,lo8(%o1)"  CR_TAB
! 			 "sbci r29,hi8(%o1)", op, plen, 5);
! 
! 	  if (partial_clobber)
! 	    avr_asm_len ("mov __tmp_reg__,%0", &base2, plen, 1);
! 
! 	  return "";
! 	}
        else if (REGNO (XEXP (x, 0)) == REG_X)
          {
            /* This is a paranoid case LEGITIMIZE_RELOAD_ADDRESS must exclude
               it but I have this situation with extremal optimizing options.  */
  
! 	  // PR117744: The base register overlaps dest and is
! 	  // only partially clobbered.
! 	  bool clobber_r26 = (partial_clobber
! 			      && REGNO (base) == (REGNO (base) & ~1));
! 	  if (partial_clobber
! 	      && ! clobber_r26)
! 	    avr_asm_len ("mov __tmp_reg__,%0", &base2, plen, 1);
  
! 	  avr_asm_len ("adiw r26,%o1" CR_TAB
! 		       "ld %0,X", op, plen, 2);
! 
! 	  if (clobber_r26)
! 	    avr_asm_len ("subi r26,lo8(%o1)", op, plen, 1);
! 	  else if (partial_clobber)
! 	    avr_asm_len ("mov %0,__tmp_reg__", &base2, plen, 1);
! 	  else if (! reg_unused_after (insn, base))
! 	    avr_asm_len ("sbiw r26,%o1", op, plen, 1);
  
            return "";
          }
*************** avr_out_ashlpsi3 (rtx_insn *insn, rtx *o
*** 7047,7053 ****
              int reg1 = REGNO (op[1]);
  
              if (reg0 + 2 != reg1)
!               avr_asm_len ("mov %C0,%A0", op, plen, 1);
  
              return avr_asm_len ("clr %B0"  CR_TAB
                                  "clr %A0", op, plen, 2);
--- 7123,7129 ----
              int reg1 = REGNO (op[1]);
  
              if (reg0 + 2 != reg1)
!               avr_asm_len ("mov %C0,%A1", op, plen, 1);
  
              return avr_asm_len ("clr %B0"  CR_TAB
                                  "clr %A0", op, plen, 2);
diff -Nrcpad gcc-13.3.0/gcc/config/avr/avr.md gcc-13.4.0/gcc/config/avr/avr.md
*** gcc-13.3.0/gcc/config/avr/avr.md	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/avr/avr.md	Thu Jun  5 16:02:58 2025
***************
*** 285,290 ****
--- 285,292 ----
  (define_mode_iterator SPLIT34 [SI SF PSI
                                 SQ USQ SA USA])
  
+ (define_mode_iterator SFDF [SF DF])
+ 
  ;; Define code iterators
  ;; Define two incarnations so that we can build the cartesian product.
  (define_code_iterator any_extend  [sign_extend zero_extend])
***************
*** 382,390 ****
  
      emit_clobber (gen_rtx_MEM (BLKmode, hard_frame_pointer_rtx));
  
!     emit_move_insn (hard_frame_pointer_rtx, r_fp);
      emit_stack_restore (SAVE_NONLOCAL, r_sp);
  
      emit_use (hard_frame_pointer_rtx);
      emit_use (stack_pointer_rtx);
  
--- 384,397 ----
  
      emit_clobber (gen_rtx_MEM (BLKmode, hard_frame_pointer_rtx));
  
!     // PR64242: When r_sp is located in the frame, we must not
!     // change FP prior to reading r_sp.  Hence copy r_fp to a
!     // local register (and hope that reload won't spill it).
!     rtx r_fp_reg = copy_to_reg (r_fp);
      emit_stack_restore (SAVE_NONLOCAL, r_sp);
  
+     emit_move_insn (hard_frame_pointer_rtx, r_fp_reg);
+ 
      emit_use (hard_frame_pointer_rtx);
      emit_use (stack_pointer_rtx);
  
***************
*** 650,661 ****
--- 657,672 ----
    [(parallel [(set (reg:MOVMODE 22)
                (mem:MOVMODE (lo_sum:PSI (reg:QI 21)
                                         (reg:HI REG_Z))))
+               (clobber (reg:QI 21))
+               (clobber (reg:HI REG_Z))
                (clobber (reg:CC REG_CC))])])
  
  (define_insn "*xload_<mode>_libgcc"
    [(set (reg:MOVMODE 22)
          (mem:MOVMODE (lo_sum:PSI (reg:QI 21)
                                   (reg:HI REG_Z))))
+    (clobber (reg:QI 21))
+    (clobber (reg:HI REG_Z))
     (clobber (reg:CC REG_CC))]
    "avr_xload_libgcc_p (<MODE>mode)
     && reload_completed"
***************
*** 716,727 ****
          if (!REG_P (addr))
            src = replace_equiv_address (src, copy_to_mode_reg (PSImode, addr));
  
          if (!avr_xload_libgcc_p (<MODE>mode))
            /* ; No <mode> here because gen_xload8<mode>_A only iterates over ALL1.
               ; insn-emit does not depend on the mode, it's all about operands.  */
!           emit_insn (gen_xload8qi_A (dest, src));
          else
!           emit_insn (gen_xload<mode>_A (dest, src));
  
          DONE;
        }
--- 727,752 ----
          if (!REG_P (addr))
            src = replace_equiv_address (src, copy_to_mode_reg (PSImode, addr));
  
+         rtx dest2 = reg_overlap_mentioned_p (dest, lpm_addr_reg_rtx)
+           ? gen_reg_rtx (<MODE>mode)
+           : dest;
+ 
          if (!avr_xload_libgcc_p (<MODE>mode))
            /* ; No <mode> here because gen_xload8<mode>_A only iterates over ALL1.
               ; insn-emit does not depend on the mode, it's all about operands.  */
!           emit_insn (gen_xload8qi_A (dest2, src));
          else
!           {
!             rtx reg_22 = gen_rtx_REG (<MODE>mode, 22);
!             if (reg_overlap_mentioned_p (dest2, reg_22)
!                 || reg_overlap_mentioned_p (dest2, all_regs_rtx[21]))
!               dest2 = gen_reg_rtx (<MODE>mode);
! 
!             emit_insn (gen_xload<mode>_A (dest2, src));
!           }
! 
!         if (dest2 != dest)
!           emit_move_insn (dest, dest2);
  
          DONE;
        }
***************
*** 7609,7616 ****
                        (pc)))]
    "dead_or_set_regno_p (insn, REG_CC)"
    {
-     const char *op;
-     int jump_mode;
      if (avr_adiw_reg_p (operands[0]))
        output_asm_insn ("sbiw %0,1" CR_TAB
                         "sbc %C0,__zero_reg__" CR_TAB
--- 7634,7639 ----
***************
*** 7621,7628 ****
                         "sbc %C0,__zero_reg__" CR_TAB
                         "sbc %D0,__zero_reg__", operands);
  
!     jump_mode = avr_jump_mode (operands[2], insn);
!     op = ((EQ == <CODE>) ^ (jump_mode == 1)) ? "brcc" : "brcs";
      operands[1] = gen_rtx_CONST_STRING (VOIDmode, op);
  
      switch (jump_mode)
--- 7644,7651 ----
                         "sbc %C0,__zero_reg__" CR_TAB
                         "sbc %D0,__zero_reg__", operands);
  
!     int jump_mode = avr_jump_mode (operands[2], insn, 3 - avr_adiw_reg_p (operands[0]));
!     const char *op = ((EQ == <CODE>) ^ (jump_mode == 1)) ? "brcc" : "brcs";
      operands[1] = gen_rtx_CONST_STRING (VOIDmode, op);
  
      switch (jump_mode)
***************
*** 7652,7667 ****
                        (pc)))]
    "dead_or_set_regno_p (insn, REG_CC)"
    {
-     const char *op;
-     int jump_mode;
      if (avr_adiw_reg_p (operands[0]))
        output_asm_insn ("sbiw %0,1", operands);
      else
        output_asm_insn ("subi %A0,1" CR_TAB
                         "sbc %B0,__zero_reg__", operands);
  
!     jump_mode = avr_jump_mode (operands[2], insn);
!     op = ((EQ == <CODE>) ^ (jump_mode == 1)) ? "brcc" : "brcs";
      operands[1] = gen_rtx_CONST_STRING (VOIDmode, op);
  
      switch (jump_mode)
--- 7675,7688 ----
                        (pc)))]
    "dead_or_set_regno_p (insn, REG_CC)"
    {
      if (avr_adiw_reg_p (operands[0]))
        output_asm_insn ("sbiw %0,1", operands);
      else
        output_asm_insn ("subi %A0,1" CR_TAB
                         "sbc %B0,__zero_reg__", operands);
  
!     int jump_mode = avr_jump_mode (operands[2], insn, 1 - avr_adiw_reg_p (operands[0]));
!     const char *op = ((EQ == <CODE>) ^ (jump_mode == 1)) ? "brcc" : "brcs";
      operands[1] = gen_rtx_CONST_STRING (VOIDmode, op);
  
      switch (jump_mode)
***************
*** 7693,7708 ****
                        (pc)))]
    "dead_or_set_regno_p (insn, REG_CC)"
    {
-     const char *op;
-     int jump_mode;
      if (avr_adiw_reg_p (operands[0]))
        output_asm_insn ("sbiw %0,1", operands);
      else
        output_asm_insn ("subi %A0,1" CR_TAB
                         "sbc %B0,__zero_reg__", operands);
  
!     jump_mode = avr_jump_mode (operands[2], insn);
!     op = ((EQ == <CODE>) ^ (jump_mode == 1)) ? "brcc" : "brcs";
      operands[1] = gen_rtx_CONST_STRING (VOIDmode, op);
  
      switch (jump_mode)
--- 7714,7727 ----
                        (pc)))]
    "dead_or_set_regno_p (insn, REG_CC)"
    {
      if (avr_adiw_reg_p (operands[0]))
        output_asm_insn ("sbiw %0,1", operands);
      else
        output_asm_insn ("subi %A0,1" CR_TAB
                         "sbc %B0,__zero_reg__", operands);
  
!     int jump_mode = avr_jump_mode (operands[2], insn, 1 - avr_adiw_reg_p (operands[0]));
!     const char *op = ((EQ == <CODE>) ^ (jump_mode == 1)) ? "brcc" : "brcs";
      operands[1] = gen_rtx_CONST_STRING (VOIDmode, op);
  
      switch (jump_mode)
***************
*** 7734,7747 ****
                        (pc)))]
    "dead_or_set_regno_p (insn, REG_CC)"
    {
-     const char *op;
-     int jump_mode;
      output_asm_insn ("ldi %3,1"   CR_TAB
                       "sub %A0,%3" CR_TAB
                       "sbc %B0,__zero_reg__", operands);
  
!     jump_mode = avr_jump_mode (operands[2], insn);
!     op = ((EQ == <CODE>) ^ (jump_mode == 1)) ? "brcc" : "brcs";
      operands[1] = gen_rtx_CONST_STRING (VOIDmode, op);
  
      switch (jump_mode)
--- 7753,7764 ----
                        (pc)))]
    "dead_or_set_regno_p (insn, REG_CC)"
    {
      output_asm_insn ("ldi %3,1"   CR_TAB
                       "sub %A0,%3" CR_TAB
                       "sbc %B0,__zero_reg__", operands);
  
!     int jump_mode = avr_jump_mode (operands[2], insn, 2);
!     const char *op = ((EQ == <CODE>) ^ (jump_mode == 1)) ? "brcc" : "brcs";
      operands[1] = gen_rtx_CONST_STRING (VOIDmode, op);
  
      switch (jump_mode)
***************
*** 9780,9785 ****
--- 9797,9816 ----
      operands[4] = GEN_INT (bitno % 8);
    })
  
+ 
+ ;; Work around PR115307: Early passes expand isinf/f/l to a bloat.
+ ;; These passes do not consider costs, and there is no way to
+ ;; hook in or otherwise disable the generated bloat.
+ 
+ ;; isinfsf2  isinfdf2
+ (define_expand "isinf<mode>2"
+   [(parallel [(match_operand:HI 0)
+               (match_operand:SFDF 1)])]
+   ""
+   {
+     FAIL;
+   })
+ 
  
  ;; Fixed-point instructions
  (include "avr-fixed.md")
diff -Nrcpad gcc-13.3.0/gcc/config/darwin.h gcc-13.4.0/gcc/config/darwin.h
*** gcc-13.3.0/gcc/config/darwin.h	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/darwin.h	Thu Jun  5 16:02:58 2025
*************** extern GTY(()) int darwin_ms_struct;
*** 276,287 ****
  #define DARWIN_RDYNAMIC "%{rdynamic:%nrdynamic is not supported}"
  #endif
  
! #if LD64_HAS_PLATFORM_VERSION
! #define DARWIN_PLATFORM_ID \
!   "%{mmacosx-version-min=*: -platform_version macos %* 0.0} "
  #else
! #define DARWIN_PLATFORM_ID \
    "%{mmacosx-version-min=*:-macosx_version_min %*} "
  #endif
  
  /* Code built with mdynamic-no-pic does not support PIE/PIC, so  we disallow
--- 276,292 ----
  #define DARWIN_RDYNAMIC "%{rdynamic:%nrdynamic is not supported}"
  #endif
  
! #if LD64_HAS_MACOS_VERSION_MIN
! # define DARWIN_PLATFORM_ID \
!   "%{mmacosx-version-min=*:-macos_version_min %*} "
  #else
! # if LD64_HAS_PLATFORM_VERSION
! #  define DARWIN_PLATFORM_ID \
!   "%{mmacosx-version-min=*: -platform_version macos %* 0.0} "
! # else
! #  define DARWIN_PLATFORM_ID \
    "%{mmacosx-version-min=*:-macosx_version_min %*} "
+ # endif
  #endif
  
  /* Code built with mdynamic-no-pic does not support PIE/PIC, so  we disallow
diff -Nrcpad gcc-13.3.0/gcc/config/freebsd-spec.h gcc-13.4.0/gcc/config/freebsd-spec.h
*** gcc-13.3.0/gcc/config/freebsd-spec.h	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/freebsd-spec.h	Thu Jun  5 16:02:58 2025
*************** see the files COPYING3 and COPYING.RUNTI
*** 92,110 ****
     libc, depending on whether we're doing profiling or need threads support.
     (similar to the default, except no -lg, and no -p).  */
  
  #ifdef FBSD_NO_THREADS
  #define FBSD_LIB_SPEC "							\
    %{pthread: %eThe -pthread option is only supported on FreeBSD when gcc \
  is built with the --enable-threads configure-time option.}		\
    %{!shared:								\
!     %{!pg: -lc}								\
!     %{pg:  -lc_p}							\
    }"
  #else
  #define FBSD_LIB_SPEC "							\
    %{!shared:								\
!     %{!pg: %{pthread:-lpthread} -lc}					\
!     %{pg:  %{pthread:-lpthread_p} -lc_p}				\
    }									\
    %{shared:								\
      %{pthread:-lpthread} -lc						\
--- 92,120 ----
     libc, depending on whether we're doing profiling or need threads support.
     (similar to the default, except no -lg, and no -p).  */
  
+ #if FBSD_MAJOR < 14
+ #define FBSD_LINK_PG_NOTHREADS	"%{!pg: -lc}  %{pg: -lc_p}"
+ #define FBSD_LINK_PG_THREADS	"%{!pg: %{pthread:-lpthread} -lc} " 	\
+ 				"%{pg: %{pthread:-lpthread} -lc_p}"
+ #define FBSD_LINK_PG_NOTE ""
+ #else
+ #define FBSD_LINK_PG_NOTHREADS "%{-lc} "
+ #define FBSD_LINK_PG_THREADS   "%{pthread:-lpthread} -lc "
+ #define FBSD_LINK_PG_NOTE "%{pg:%nFreeBSD no longer provides profiled "\
+ 			  "system libraries}"
+ #endif
+ 
  #ifdef FBSD_NO_THREADS
  #define FBSD_LIB_SPEC "							\
    %{pthread: %eThe -pthread option is only supported on FreeBSD when gcc \
  is built with the --enable-threads configure-time option.}		\
    %{!shared:								\
!     " FBSD_LINK_PG_NOTHREADS "						\
    }"
  #else
  #define FBSD_LIB_SPEC "							\
    %{!shared:								\
!     " FBSD_LINK_PG_THREADS "						\
    }									\
    %{shared:								\
      %{pthread:-lpthread} -lc						\
diff -Nrcpad gcc-13.3.0/gcc/config/i386/avx512dqintrin.h gcc-13.4.0/gcc/config/i386/avx512dqintrin.h
*** gcc-13.3.0/gcc/config/i386/avx512dqintrin.h	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/i386/avx512dqintrin.h	Thu Jun  5 16:02:58 2025
*************** _mm512_fpclass_ps_mask (__m512 __A, cons
*** 2800,2810 ****
    ((__mmask8) __builtin_ia32_fpclasssd_mask ((__v2df) (__m128d) (X),	\
  					     (int) (C), (__mmask8) (-1))) \
  
! #define _mm_mask_fpclass_ss_mask(X, C, U)				\
    ((__mmask8) __builtin_ia32_fpclassss_mask ((__v4sf) (__m128) (X),	\
  					     (int) (C), (__mmask8) (U)))
  
! #define _mm_mask_fpclass_sd_mask(X, C, U)				\
    ((__mmask8) __builtin_ia32_fpclasssd_mask ((__v2df) (__m128d) (X),	\
  					     (int) (C), (__mmask8) (U)))
  
--- 2800,2810 ----
    ((__mmask8) __builtin_ia32_fpclasssd_mask ((__v2df) (__m128d) (X),	\
  					     (int) (C), (__mmask8) (-1))) \
  
! #define _mm_mask_fpclass_ss_mask(U, X, C)				\
    ((__mmask8) __builtin_ia32_fpclassss_mask ((__v4sf) (__m128) (X),	\
  					     (int) (C), (__mmask8) (U)))
  
! #define _mm_mask_fpclass_sd_mask(U, X, C)				\
    ((__mmask8) __builtin_ia32_fpclasssd_mask ((__v2df) (__m128d) (X),	\
  					     (int) (C), (__mmask8) (U)))
  
*************** _mm512_fpclass_ps_mask (__m512 __A, cons
*** 2839,2846 ****
      (__mmask8)(U)))
  
  #define _mm_reduce_round_sd(A, B, C, R)				       \
!   ((__m128d) __builtin_ia32_reducesd_round ((__v2df)(__m128d)(A),      \
!     (__v2df)(__m128d)(B), (int)(C), (__mmask8)(U), (int)(R)))
  
  #define _mm_mask_reduce_round_sd(W, U, A, B, C, R)		       \
    ((__m128d) __builtin_ia32_reducesd_mask_round ((__v2df)(__m128d)(A), \
--- 2839,2847 ----
      (__mmask8)(U)))
  
  #define _mm_reduce_round_sd(A, B, C, R)				       \
!   ((__m128d) __builtin_ia32_reducesd_mask_round ((__v2df)(__m128d)(A), \
!     (__v2df)(__m128d)(B), (int)(C), (__v2df) _mm_setzero_pd (),	       \
!     (__mmask8)(-1), (int)(R)))
  
  #define _mm_mask_reduce_round_sd(W, U, A, B, C, R)		       \
    ((__m128d) __builtin_ia32_reducesd_mask_round ((__v2df)(__m128d)(A), \
*************** _mm512_fpclass_ps_mask (__m512 __A, cons
*** 2867,2874 ****
      (__mmask8)(U)))
  
  #define _mm_reduce_round_ss(A, B, C, R)				       \
!   ((__m128) __builtin_ia32_reducess_round ((__v4sf)(__m128)(A),	       \
!     (__v4sf)(__m128)(B), (int)(C), (__mmask8)(U), (int)(R)))
  
  #define _mm_mask_reduce_round_ss(W, U, A, B, C, R)		       \
    ((__m128) __builtin_ia32_reducess_mask_round ((__v4sf)(__m128)(A),   \
--- 2868,2876 ----
      (__mmask8)(U)))
  
  #define _mm_reduce_round_ss(A, B, C, R)				       \
!   ((__m128) __builtin_ia32_reducess_mask_round ((__v4sf)(__m128)(A),   \
!     (__v4sf)(__m128)(B), (int)(C), (__v4sf) _mm_setzero_ps (),	       \
!     (__mmask8)(-1), (int)(R)))
  
  #define _mm_mask_reduce_round_ss(W, U, A, B, C, R)		       \
    ((__m128) __builtin_ia32_reducess_mask_round ((__v4sf)(__m128)(A),   \
*************** _mm512_fpclass_ps_mask (__m512 __A, cons
*** 2876,2882 ****
      (__mmask8)(U), (int)(R)))
  
  #define _mm_maskz_reduce_round_ss(U, A, B, C, R)		       \
!   ((__m128) __builtin_ia32_reducesd_mask_round ((__v4sf)(__m128)(A),   \
      (__v4sf)(__m128)(B), (int)(C), (__v4sf) _mm_setzero_ps (),	       \
      (__mmask8)(U), (int)(R)))
  
--- 2878,2884 ----
      (__mmask8)(U), (int)(R)))
  
  #define _mm_maskz_reduce_round_ss(U, A, B, C, R)		       \
!   ((__m128) __builtin_ia32_reducess_mask_round ((__v4sf)(__m128)(A),   \
      (__v4sf)(__m128)(B), (int)(C), (__v4sf) _mm_setzero_ps (),	       \
      (__mmask8)(U), (int)(R)))
  
diff -Nrcpad gcc-13.3.0/gcc/config/i386/avx512fp16intrin.h gcc-13.4.0/gcc/config/i386/avx512fp16intrin.h
*** gcc-13.3.0/gcc/config/i386/avx512fp16intrin.h	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/i386/avx512fp16intrin.h	Thu Jun  5 16:02:58 2025
*************** _mm512_fpclass_ph_mask (__m512h __A, con
*** 2322,2332 ****
  #else
  #define _mm512_mask_fpclass_ph_mask(u, x, c)				\
    ((__mmask32) __builtin_ia32_fpclassph512_mask ((__v32hf) (__m512h) (x), \
! 						 (int) (c),(__mmask8)(u)))
  
  #define _mm512_fpclass_ph_mask(x, c)                                    \
    ((__mmask32) __builtin_ia32_fpclassph512_mask ((__v32hf) (__m512h) (x), \
! 						 (int) (c),(__mmask8)-1))
  #endif /* __OPIMTIZE__ */
  
  /* Intrinsics vgetexpph, vgetexpsh.  */
--- 2322,2332 ----
  #else
  #define _mm512_mask_fpclass_ph_mask(u, x, c)				\
    ((__mmask32) __builtin_ia32_fpclassph512_mask ((__v32hf) (__m512h) (x), \
! 						 (int) (c),(__mmask32)(u)))
  
  #define _mm512_fpclass_ph_mask(x, c)                                    \
    ((__mmask32) __builtin_ia32_fpclassph512_mask ((__v32hf) (__m512h) (x), \
! 						 (int) (c),(__mmask32)-1))
  #endif /* __OPIMTIZE__ */
  
  /* Intrinsics vgetexpph, vgetexpsh.  */
diff -Nrcpad gcc-13.3.0/gcc/config/i386/avx512vlbwintrin.h gcc-13.4.0/gcc/config/i386/avx512vlbwintrin.h
*** gcc-13.3.0/gcc/config/i386/avx512vlbwintrin.h	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/i386/avx512vlbwintrin.h	Thu Jun  5 16:02:58 2025
*************** _mm_maskz_slli_epi16 (__mmask8 __U, __m1
*** 1839,1845 ****
  #define _mm256_mask_alignr_epi8(W, U, X, Y, N)					    \
    ((__m256i) __builtin_ia32_palignr256_mask ((__v4di)(__m256i)(X),		    \
  					    (__v4di)(__m256i)(Y), (int)((N) * 8),   \
! 					    (__v4di)(__m256i)(X), (__mmask32)(U)))
  
  #define _mm256_mask_srli_epi16(W, U, A, B)                              \
    ((__m256i) __builtin_ia32_psrlwi256_mask ((__v16hi)(__m256i)(A),      \
--- 1839,1845 ----
  #define _mm256_mask_alignr_epi8(W, U, X, Y, N)					    \
    ((__m256i) __builtin_ia32_palignr256_mask ((__v4di)(__m256i)(X),		    \
  					    (__v4di)(__m256i)(Y), (int)((N) * 8),   \
! 					    (__v4di)(__m256i)(W), (__mmask32)(U)))
  
  #define _mm256_mask_srli_epi16(W, U, A, B)                              \
    ((__m256i) __builtin_ia32_psrlwi256_mask ((__v16hi)(__m256i)(A),      \
*************** _mm_maskz_slli_epi16 (__mmask8 __U, __m1
*** 1922,1928 ****
  #define _mm_mask_alignr_epi8(W, U, X, Y, N)					    \
    ((__m128i) __builtin_ia32_palignr128_mask ((__v2di)(__m128i)(X),		    \
  					    (__v2di)(__m128i)(Y), (int)((N) * 8),   \
! 					    (__v2di)(__m128i)(X), (__mmask16)(U)))
  
  #define _mm_maskz_alignr_epi8(U, X, Y, N)					    \
    ((__m128i) __builtin_ia32_palignr128_mask ((__v2di)(__m128i)(X),		    \
--- 1922,1928 ----
  #define _mm_mask_alignr_epi8(W, U, X, Y, N)					    \
    ((__m128i) __builtin_ia32_palignr128_mask ((__v2di)(__m128i)(X),		    \
  					    (__v2di)(__m128i)(Y), (int)((N) * 8),   \
! 					    (__v2di)(__m128i)(W), (__mmask16)(U)))
  
  #define _mm_maskz_alignr_epi8(U, X, Y, N)					    \
    ((__m128i) __builtin_ia32_palignr128_mask ((__v2di)(__m128i)(X),		    \
diff -Nrcpad gcc-13.3.0/gcc/config/i386/avx512vlintrin.h gcc-13.4.0/gcc/config/i386/avx512vlintrin.h
*** gcc-13.3.0/gcc/config/i386/avx512vlintrin.h	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/i386/avx512vlintrin.h	Thu Jun  5 16:02:58 2025
*************** _mm256_permutex_pd (__m256d __X, const i
*** 13609,13615 ****
  
  #define _mm_mask_alignr_epi64(W, U, X, Y, C)                                \
      ((__m128i)__builtin_ia32_alignq128_mask ((__v2di)(__m128i)(X),          \
!         (__v2di)(__m128i)(Y), (int)(C), (__v2di)(__m128i)(X), (__mmask8)-1))
  
  #define _mm_maskz_alignr_epi64(U, X, Y, C)                                  \
      ((__m128i)__builtin_ia32_alignq128_mask ((__v2di)(__m128i)(X),          \
--- 13609,13615 ----
  
  #define _mm_mask_alignr_epi64(W, U, X, Y, C)                                \
      ((__m128i)__builtin_ia32_alignq128_mask ((__v2di)(__m128i)(X),          \
!         (__v2di)(__m128i)(Y), (int)(C), (__v2di)(__m128i)(W), (__mmask8)(U)))
  
  #define _mm_maskz_alignr_epi64(U, X, Y, C)                                  \
      ((__m128i)__builtin_ia32_alignq128_mask ((__v2di)(__m128i)(X),          \
diff -Nrcpad gcc-13.3.0/gcc/config/i386/cmpccxaddintrin.h gcc-13.4.0/gcc/config/i386/cmpccxaddintrin.h
*** gcc-13.3.0/gcc/config/i386/cmpccxaddintrin.h	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/i386/cmpccxaddintrin.h	Thu Jun  5 16:02:58 2025
*************** _cmpccxadd_epi64 (long long *__A, long l
*** 72,82 ****
  }
  #else
  #define _cmpccxadd_epi32(A,B,C,D) \
!   __builtin_ia32_cmpccxadd ((int *) (A), (int) (B), (int) (C), \
  			    (_CMPCCX_ENUM) (D))
  #define _cmpccxadd_epi64(A,B,C,D) \
!   __builtin_ia32_cmpccxadd64 ((long long *) (A), (long long) (B), \
! 			      (long long) (C), (_CMPCCX_ENUM) (D))
  #endif
  
  #ifdef __DISABLE_CMPCCXADD__
--- 72,82 ----
  }
  #else
  #define _cmpccxadd_epi32(A,B,C,D) \
!   __builtin_ia32_cmpccxadd ((A), (int) (B), (int) (C), \
  			    (_CMPCCX_ENUM) (D))
  #define _cmpccxadd_epi64(A,B,C,D) \
!   __builtin_ia32_cmpccxadd64 ((A), (long long) (B), (long long) (C), \
! 			      (_CMPCCX_ENUM) (D))
  #endif
  
  #ifdef __DISABLE_CMPCCXADD__
diff -Nrcpad gcc-13.3.0/gcc/config/i386/constraints.md gcc-13.4.0/gcc/config/i386/constraints.md
*** gcc-13.3.0/gcc/config/i386/constraints.md	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/i386/constraints.md	Thu Jun  5 16:02:58 2025
***************
*** 190,196 ****
    (and (match_operand 0 "memory_operand")
         (match_test "constant_address_p (XEXP (op, 0))")))
  
! (define_memory_constraint "Bk"
    "@internal TLS address that allows insn using non-integer registers."
    (and (match_operand 0 "memory_operand")
         (not (match_test "ix86_gpr_tls_address_pattern_p (op)"))))
--- 190,196 ----
    (and (match_operand 0 "memory_operand")
         (match_test "constant_address_p (XEXP (op, 0))")))
  
! (define_special_memory_constraint "Bk"
    "@internal TLS address that allows insn using non-integer registers."
    (and (match_operand 0 "memory_operand")
         (not (match_test "ix86_gpr_tls_address_pattern_p (op)"))))
diff -Nrcpad gcc-13.3.0/gcc/config/i386/driver-i386.cc gcc-13.4.0/gcc/config/i386/driver-i386.cc
*** gcc-13.3.0/gcc/config/i386/driver-i386.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/i386/driver-i386.cc	Thu Jun  5 16:02:58 2025
*************** const char *host_detect_local_cpu (int a
*** 465,470 ****
--- 465,472 ----
  	processor = PROCESSOR_GEODE;
        else if (has_feature (FEATURE_MOVBE) && family == 22)
  	processor = PROCESSOR_BTVER2;
+       else if (has_feature (FEATURE_AVX512VP2INTERSECT))
+ 	processor = PROCESSOR_ZNVER5;
        else if (has_feature (FEATURE_AVX512F))
  	processor = PROCESSOR_ZNVER4;
        else if (has_feature (FEATURE_VAES))
*************** const char *host_detect_local_cpu (int a
*** 793,798 ****
--- 795,803 ----
      case PROCESSOR_ZNVER4:
        cpu = "znver4";
        break;
+     case PROCESSOR_ZNVER5:
+       cpu = "znver5";
+       break;
      case PROCESSOR_BTVER1:
        cpu = "btver1";
        break;
diff -Nrcpad gcc-13.3.0/gcc/config/i386/freebsd.h gcc-13.4.0/gcc/config/i386/freebsd.h
*** gcc-13.3.0/gcc/config/i386/freebsd.h	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/i386/freebsd.h	Thu Jun  5 16:02:58 2025
*************** along with GCC; see the file COPYING3.
*** 80,85 ****
--- 80,86 ----
  #undef	LINK_SPEC
  #define LINK_SPEC "\
    %{p:%nconsider using '-pg' instead of '-p' with gprof(1)} \
+   " FBSD_LINK_PG_NOTE " \
    %{v:-V} \
    %{assert*} %{R*} %{rpath*} %{defsym*} \
    %{shared:-Bshareable %{h*} %{soname*}} \
diff -Nrcpad gcc-13.3.0/gcc/config/i386/freebsd64.h gcc-13.4.0/gcc/config/i386/freebsd64.h
*** gcc-13.3.0/gcc/config/i386/freebsd64.h	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/i386/freebsd64.h	Thu Jun  5 16:02:58 2025
*************** along with GCC; see the file COPYING3.
*** 33,38 ****
--- 33,39 ----
  #define LINK_SPEC "\
    %{m32:-m elf_i386_fbsd}%{!m32:-m elf_x86_64_fbsd} \
    %{p:%nconsider using '-pg' instead of '-p' with gprof(1)} \
+   " FBSD_LINK_PG_NOTE " \
    %{v:-V} \
    %{assert*} %{R*} %{rpath*} %{defsym*} \
    %{shared:-Bshareable %{h*} %{soname*}} \
diff -Nrcpad gcc-13.3.0/gcc/config/i386/i386-builtin.def gcc-13.4.0/gcc/config/i386/i386-builtin.def
*** gcc-13.3.0/gcc/config/i386/i386-builtin.def	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/i386/i386-builtin.def	Thu Jun  5 16:02:58 2025
*************** BDESC (0, OPTION_MASK_ISA2_RDPID, CODE_F
*** 2802,2818 ****
  
  /* VAES.  */
  BDESC (OPTION_MASK_ISA_AVX512VL, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesdec_v16qi, "__builtin_ia32_vaesdec_v16qi", IX86_BUILTIN_VAESDEC16, UNKNOWN, (int) V16QI_FTYPE_V16QI_V16QI)
! BDESC (0, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesdec_v32qi, "__builtin_ia32_vaesdec_v32qi", IX86_BUILTIN_VAESDEC32, UNKNOWN, (int) V32QI_FTYPE_V32QI_V32QI)
! BDESC (0, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesdec_v64qi, "__builtin_ia32_vaesdec_v64qi", IX86_BUILTIN_VAESDEC64, UNKNOWN, (int) V64QI_FTYPE_V64QI_V64QI)
  BDESC (OPTION_MASK_ISA_AVX512VL, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesdeclast_v16qi, "__builtin_ia32_vaesdeclast_v16qi", IX86_BUILTIN_VAESDECLAST16, UNKNOWN, (int) V16QI_FTYPE_V16QI_V16QI)
! BDESC (0, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesdeclast_v32qi, "__builtin_ia32_vaesdeclast_v32qi", IX86_BUILTIN_VAESDECLAST32, UNKNOWN, (int) V32QI_FTYPE_V32QI_V32QI)
! BDESC (0, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesdeclast_v64qi, "__builtin_ia32_vaesdeclast_v64qi", IX86_BUILTIN_VAESDECLAST64, UNKNOWN, (int) V64QI_FTYPE_V64QI_V64QI)
  BDESC (OPTION_MASK_ISA_AVX512VL, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesenc_v16qi, "__builtin_ia32_vaesenc_v16qi", IX86_BUILTIN_VAESENC16, UNKNOWN, (int) V16QI_FTYPE_V16QI_V16QI)
! BDESC (0, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesenc_v32qi, "__builtin_ia32_vaesenc_v32qi", IX86_BUILTIN_VAESENC32, UNKNOWN, (int) V32QI_FTYPE_V32QI_V32QI)
! BDESC (0, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesenc_v64qi, "__builtin_ia32_vaesenc_v64qi", IX86_BUILTIN_VAESENC64, UNKNOWN, (int) V64QI_FTYPE_V64QI_V64QI)
  BDESC (OPTION_MASK_ISA_AVX512VL, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesenclast_v16qi, "__builtin_ia32_vaesenclast_v16qi", IX86_BUILTIN_VAESENCLAST16, UNKNOWN, (int) V16QI_FTYPE_V16QI_V16QI)
! BDESC (0, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesenclast_v32qi, "__builtin_ia32_vaesenclast_v32qi", IX86_BUILTIN_VAESENCLAST32, UNKNOWN, (int) V32QI_FTYPE_V32QI_V32QI)
! BDESC (0, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesenclast_v64qi, "__builtin_ia32_vaesenclast_v64qi", IX86_BUILTIN_VAESENCLAST64, UNKNOWN, (int) V64QI_FTYPE_V64QI_V64QI)
  
  /* BF16 */
  BDESC (0, OPTION_MASK_ISA2_AVX512BF16, CODE_FOR_avx512f_cvtne2ps2bf16_v32bf, "__builtin_ia32_cvtne2ps2bf16_v32bf", IX86_BUILTIN_CVTNE2PS2BF16_V32BF, UNKNOWN, (int) V32BF_FTYPE_V16SF_V16SF)
--- 2802,2818 ----
  
  /* VAES.  */
  BDESC (OPTION_MASK_ISA_AVX512VL, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesdec_v16qi, "__builtin_ia32_vaesdec_v16qi", IX86_BUILTIN_VAESDEC16, UNKNOWN, (int) V16QI_FTYPE_V16QI_V16QI)
! BDESC (OPTION_MASK_ISA_AVX, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesdec_v32qi, "__builtin_ia32_vaesdec_v32qi", IX86_BUILTIN_VAESDEC32, UNKNOWN, (int) V32QI_FTYPE_V32QI_V32QI)
! BDESC (OPTION_MASK_ISA_AVX512F, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesdec_v64qi, "__builtin_ia32_vaesdec_v64qi", IX86_BUILTIN_VAESDEC64, UNKNOWN, (int) V64QI_FTYPE_V64QI_V64QI)
  BDESC (OPTION_MASK_ISA_AVX512VL, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesdeclast_v16qi, "__builtin_ia32_vaesdeclast_v16qi", IX86_BUILTIN_VAESDECLAST16, UNKNOWN, (int) V16QI_FTYPE_V16QI_V16QI)
! BDESC (OPTION_MASK_ISA_AVX, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesdeclast_v32qi, "__builtin_ia32_vaesdeclast_v32qi", IX86_BUILTIN_VAESDECLAST32, UNKNOWN, (int) V32QI_FTYPE_V32QI_V32QI)
! BDESC (OPTION_MASK_ISA_AVX512F, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesdeclast_v64qi, "__builtin_ia32_vaesdeclast_v64qi", IX86_BUILTIN_VAESDECLAST64, UNKNOWN, (int) V64QI_FTYPE_V64QI_V64QI)
  BDESC (OPTION_MASK_ISA_AVX512VL, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesenc_v16qi, "__builtin_ia32_vaesenc_v16qi", IX86_BUILTIN_VAESENC16, UNKNOWN, (int) V16QI_FTYPE_V16QI_V16QI)
! BDESC (OPTION_MASK_ISA_AVX, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesenc_v32qi, "__builtin_ia32_vaesenc_v32qi", IX86_BUILTIN_VAESENC32, UNKNOWN, (int) V32QI_FTYPE_V32QI_V32QI)
! BDESC (OPTION_MASK_ISA_AVX512F, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesenc_v64qi, "__builtin_ia32_vaesenc_v64qi", IX86_BUILTIN_VAESENC64, UNKNOWN, (int) V64QI_FTYPE_V64QI_V64QI)
  BDESC (OPTION_MASK_ISA_AVX512VL, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesenclast_v16qi, "__builtin_ia32_vaesenclast_v16qi", IX86_BUILTIN_VAESENCLAST16, UNKNOWN, (int) V16QI_FTYPE_V16QI_V16QI)
! BDESC (OPTION_MASK_ISA_AVX, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesenclast_v32qi, "__builtin_ia32_vaesenclast_v32qi", IX86_BUILTIN_VAESENCLAST32, UNKNOWN, (int) V32QI_FTYPE_V32QI_V32QI)
! BDESC (OPTION_MASK_ISA_AVX512F, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesenclast_v64qi, "__builtin_ia32_vaesenclast_v64qi", IX86_BUILTIN_VAESENCLAST64, UNKNOWN, (int) V64QI_FTYPE_V64QI_V64QI)
  
  /* BF16 */
  BDESC (0, OPTION_MASK_ISA2_AVX512BF16, CODE_FOR_avx512f_cvtne2ps2bf16_v32bf, "__builtin_ia32_cvtne2ps2bf16_v32bf", IX86_BUILTIN_CVTNE2PS2BF16_V32BF, UNKNOWN, (int) V32BF_FTYPE_V16SF_V16SF)
diff -Nrcpad gcc-13.3.0/gcc/config/i386/i386-c.cc gcc-13.4.0/gcc/config/i386/i386-c.cc
*** gcc-13.3.0/gcc/config/i386/i386-c.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/i386/i386-c.cc	Thu Jun  5 16:02:58 2025
*************** ix86_target_macros_internal (HOST_WIDE_I
*** 136,141 ****
--- 136,145 ----
        def_or_undef (parse_in, "__znver4");
        def_or_undef (parse_in, "__znver4__");
        break;
+     case PROCESSOR_ZNVER5:
+       def_or_undef (parse_in, "__znver5");
+       def_or_undef (parse_in, "__znver5__");
+       break;
      case PROCESSOR_BTVER1:
        def_or_undef (parse_in, "__btver1");
        def_or_undef (parse_in, "__btver1__");
*************** ix86_target_macros_internal (HOST_WIDE_I
*** 353,358 ****
--- 357,365 ----
      case PROCESSOR_ZNVER4:
        def_or_undef (parse_in, "__tune_znver4__");
        break;
+     case PROCESSOR_ZNVER5:
+       def_or_undef (parse_in, "__tune_znver5__");
+       break;
      case PROCESSOR_BTVER1:
        def_or_undef (parse_in, "__tune_btver1__");
        break;
diff -Nrcpad gcc-13.3.0/gcc/config/i386/i386-expand.cc gcc-13.4.0/gcc/config/i386/i386-expand.cc
*** gcc-13.3.0/gcc/config/i386/i386-expand.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/i386/i386-expand.cc	Thu Jun  5 16:02:58 2025
*************** ix86_expand_sse_movcc (rtx dest, rtx cmp
*** 4116,4144 ****
    switch (mode)
      {
      case E_V2SFmode:
!       if (TARGET_SSE4_1)
  	gen = gen_mmx_blendvps;
        break;
      case E_V4SFmode:
!       if (TARGET_SSE4_1)
  	gen = gen_sse4_1_blendvps;
        break;
      case E_V2DFmode:
!       if (TARGET_SSE4_1)
  	gen = gen_sse4_1_blendvpd;
        break;
      case E_SFmode:
!       if (TARGET_SSE4_1)
  	gen = gen_sse4_1_blendvss;
        break;
      case E_DFmode:
!       if (TARGET_SSE4_1)
  	gen = gen_sse4_1_blendvsd;
        break;
      case E_V8QImode:
      case E_V4HImode:
      case E_V2SImode:
!       if (TARGET_SSE4_1)
  	{
  	  gen = gen_mmx_pblendvb_v8qi;
  	  blend_mode = V8QImode;
--- 4116,4144 ----
    switch (mode)
      {
      case E_V2SFmode:
!       if (TARGET_SSE_MOVCC_USE_BLENDV && TARGET_SSE4_1)
  	gen = gen_mmx_blendvps;
        break;
      case E_V4SFmode:
!       if (TARGET_SSE_MOVCC_USE_BLENDV && TARGET_SSE4_1)
  	gen = gen_sse4_1_blendvps;
        break;
      case E_V2DFmode:
!       if (TARGET_SSE_MOVCC_USE_BLENDV && TARGET_SSE4_1)
  	gen = gen_sse4_1_blendvpd;
        break;
      case E_SFmode:
!       if (TARGET_SSE_MOVCC_USE_BLENDV && TARGET_SSE4_1)
  	gen = gen_sse4_1_blendvss;
        break;
      case E_DFmode:
!       if (TARGET_SSE_MOVCC_USE_BLENDV && TARGET_SSE4_1)
  	gen = gen_sse4_1_blendvsd;
        break;
      case E_V8QImode:
      case E_V4HImode:
      case E_V2SImode:
!       if (TARGET_SSE_MOVCC_USE_BLENDV && TARGET_SSE4_1)
  	{
  	  gen = gen_mmx_pblendvb_v8qi;
  	  blend_mode = V8QImode;
*************** ix86_expand_sse_movcc (rtx dest, rtx cmp
*** 4146,4159 ****
        break;
      case E_V4QImode:
      case E_V2HImode:
!       if (TARGET_SSE4_1)
  	{
  	  gen = gen_mmx_pblendvb_v4qi;
  	  blend_mode = V4QImode;
  	}
        break;
      case E_V2QImode:
!       if (TARGET_SSE4_1)
  	gen = gen_mmx_pblendvb_v2qi;
        break;
      case E_V16QImode:
--- 4146,4159 ----
        break;
      case E_V4QImode:
      case E_V2HImode:
!       if (TARGET_SSE_MOVCC_USE_BLENDV && TARGET_SSE4_1)
  	{
  	  gen = gen_mmx_pblendvb_v4qi;
  	  blend_mode = V4QImode;
  	}
        break;
      case E_V2QImode:
!       if (TARGET_SSE_MOVCC_USE_BLENDV && TARGET_SSE4_1)
  	gen = gen_mmx_pblendvb_v2qi;
        break;
      case E_V16QImode:
*************** ix86_expand_sse_movcc (rtx dest, rtx cmp
*** 4163,4180 ****
      case E_V4SImode:
      case E_V2DImode:
      case E_V1TImode:
!       if (TARGET_SSE4_1)
  	{
  	  gen = gen_sse4_1_pblendvb;
  	  blend_mode = V16QImode;
  	}
        break;
      case E_V8SFmode:
!       if (TARGET_AVX)
  	gen = gen_avx_blendvps256;
        break;
      case E_V4DFmode:
!       if (TARGET_AVX)
  	gen = gen_avx_blendvpd256;
        break;
      case E_V32QImode:
--- 4163,4180 ----
      case E_V4SImode:
      case E_V2DImode:
      case E_V1TImode:
!       if (TARGET_SSE_MOVCC_USE_BLENDV && TARGET_SSE4_1)
  	{
  	  gen = gen_sse4_1_pblendvb;
  	  blend_mode = V16QImode;
  	}
        break;
      case E_V8SFmode:
!       if (TARGET_AVX && TARGET_SSE_MOVCC_USE_BLENDV)
  	gen = gen_avx_blendvps256;
        break;
      case E_V4DFmode:
!       if (TARGET_AVX && TARGET_SSE_MOVCC_USE_BLENDV)
  	gen = gen_avx_blendvpd256;
        break;
      case E_V32QImode:
*************** ix86_expand_sse_movcc (rtx dest, rtx cmp
*** 4183,4189 ****
      case E_V16BFmode:
      case E_V8SImode:
      case E_V4DImode:
!       if (TARGET_AVX2)
  	{
  	  gen = gen_avx2_pblendvb;
  	  blend_mode = V32QImode;
--- 4183,4189 ----
      case E_V16BFmode:
      case E_V8SImode:
      case E_V4DImode:
!       if (TARGET_AVX2 && TARGET_SSE_MOVCC_USE_BLENDV)
  	{
  	  gen = gen_avx2_pblendvb;
  	  blend_mode = V32QImode;
*************** ix86_expand_builtin (tree exp, rtx targe
*** 13096,13101 ****
--- 13096,13104 ----
        op1 = expand_normal (arg1);
        op2 = expand_normal (arg2);
  
+       if (GET_MODE (op1) != Pmode)
+ 	op1 = convert_to_mode (Pmode, op1, 1);
+ 
        if (!address_operand (op2, VOIDmode))
  	{
  	  op2 = convert_memory_address (Pmode, op2);
*************** ix86_expand_builtin (tree exp, rtx targe
*** 13131,13136 ****
--- 13134,13142 ----
        emit_label (ok_label);
        emit_insn (gen_rtx_SET (target, pat));
  
+       if (GET_MODE (op0) != Pmode)
+ 	op0 = convert_to_mode (Pmode, op0, 1);
+ 
        for (i = 0; i < 8; i++)
  	{
  	  op = gen_rtx_MEM (V2DImode,
*************** ix86_expand_builtin (tree exp, rtx targe
*** 13155,13160 ****
--- 13161,13169 ----
  	if (!REG_P (op0))
  	  op0 = copy_to_mode_reg (SImode, op0);
  
+ 	if (GET_MODE (op2) != Pmode)
+ 	  op2 = convert_to_mode (Pmode, op2, 1);
+ 
  	op = gen_rtx_REG (V2DImode, GET_SSE_REGNO (0));
  	emit_move_insn (op, op1);
  
*************** ix86_expand_builtin (tree exp, rtx targe
*** 13192,13197 ****
--- 13201,13209 ----
  	if (!REG_P (op0))
  	  op0 = copy_to_mode_reg (SImode, op0);
  
+ 	if (GET_MODE (op3) != Pmode)
+ 	  op3 = convert_to_mode (Pmode, op3, 1);
+ 
  	/* Force to use xmm0, xmm1 for keylow, keyhi*/
  	op = gen_rtx_REG (V2DImode, GET_SSE_REGNO (0));
  	emit_move_insn (op, op1);
*************** quarter:
*** 17096,17101 ****
--- 17108,17115 ----
    else if (use_vec_merge)
      {
  do_vec_merge:
+       if (!nonimmediate_operand (val, inner_mode))
+ 	val = force_reg (inner_mode, val);
        tmp = gen_rtx_VEC_DUPLICATE (mode, val);
        tmp = gen_rtx_VEC_MERGE (mode, tmp, target,
  			       GEN_INT (HOST_WIDE_INT_1U << elt));
diff -Nrcpad gcc-13.3.0/gcc/config/i386/i386-options.cc gcc-13.4.0/gcc/config/i386/i386-options.cc
*** gcc-13.3.0/gcc/config/i386/i386-options.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/i386/i386-options.cc	Thu Jun  5 16:02:58 2025
*************** along with GCC; see the file COPYING3.
*** 165,175 ****
  #define m_ZNVER2 (HOST_WIDE_INT_1U<<PROCESSOR_ZNVER2)
  #define m_ZNVER3 (HOST_WIDE_INT_1U<<PROCESSOR_ZNVER3)
  #define m_ZNVER4 (HOST_WIDE_INT_1U<<PROCESSOR_ZNVER4)
  #define m_BTVER1 (HOST_WIDE_INT_1U<<PROCESSOR_BTVER1)
  #define m_BTVER2 (HOST_WIDE_INT_1U<<PROCESSOR_BTVER2)
  #define m_BDVER	(m_BDVER1 | m_BDVER2 | m_BDVER3 | m_BDVER4)
  #define m_BTVER (m_BTVER1 | m_BTVER2)
! #define m_ZNVER	(m_ZNVER1 | m_ZNVER2 | m_ZNVER3 | m_ZNVER4)
  #define m_AMD_MULTIPLE (m_ATHLON_K8 | m_AMDFAM10 | m_BDVER | m_BTVER \
  			| m_ZNVER)
  
--- 165,176 ----
  #define m_ZNVER2 (HOST_WIDE_INT_1U<<PROCESSOR_ZNVER2)
  #define m_ZNVER3 (HOST_WIDE_INT_1U<<PROCESSOR_ZNVER3)
  #define m_ZNVER4 (HOST_WIDE_INT_1U<<PROCESSOR_ZNVER4)
+ #define m_ZNVER5 (HOST_WIDE_INT_1U<<PROCESSOR_ZNVER5)
  #define m_BTVER1 (HOST_WIDE_INT_1U<<PROCESSOR_BTVER1)
  #define m_BTVER2 (HOST_WIDE_INT_1U<<PROCESSOR_BTVER2)
  #define m_BDVER	(m_BDVER1 | m_BDVER2 | m_BDVER3 | m_BDVER4)
  #define m_BTVER (m_BTVER1 | m_BTVER2)
! #define m_ZNVER (m_ZNVER1 | m_ZNVER2 | m_ZNVER3 | m_ZNVER4 | m_ZNVER5)
  #define m_AMD_MULTIPLE (m_ATHLON_K8 | m_AMDFAM10 | m_BDVER | m_BTVER \
  			| m_ZNVER)
  
*************** static const struct processor_costs *pro
*** 790,796 ****
    &znver1_cost,
    &znver2_cost,
    &znver3_cost,
!   &znver4_cost
  };
  
  /* Guarantee that the array is aligned with enum processor_type.  */
--- 791,798 ----
    &znver1_cost,
    &znver2_cost,
    &znver3_cost,
!   &znver4_cost,
!   &znver5_cost
  };
  
  /* Guarantee that the array is aligned with enum processor_type.  */
*************** ix86_recompute_optlev_based_flags (struc
*** 1868,1911 ****
  	    opts->x_flag_pcc_struct_return = DEFAULT_PCC_STRUCT_RETURN;
  	}
      }
  }
  
! /* Implement TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE hook.  */
  
! void
! ix86_override_options_after_change (void)
  {
!   /* Default align_* from the processor table.  */
!   ix86_default_align (&global_options);
! 
!   ix86_recompute_optlev_based_flags (&global_options, &global_options_set);
  
    /* Disable unrolling small loops when there's explicit
       -f{,no}unroll-loop.  */
!   if ((OPTION_SET_P (flag_unroll_loops))
!      || (OPTION_SET_P (flag_unroll_all_loops)
! 	 && flag_unroll_all_loops))
      {
!       if (!OPTION_SET_P (ix86_unroll_only_small_loops))
! 	ix86_unroll_only_small_loops = 0;
        /* Re-enable -frename-registers and -fweb if funroll-loops
  	 enabled.  */
!       if (!OPTION_SET_P (flag_web))
! 	flag_web = flag_unroll_loops;
!       if (!OPTION_SET_P (flag_rename_registers))
! 	flag_rename_registers = flag_unroll_loops;
        /* -fcunroll-grow-size default follws -f[no]-unroll-loops.  */
!       if (!OPTION_SET_P (flag_cunroll_grow_size))
! 	flag_cunroll_grow_size = flag_unroll_loops
! 				 || flag_peel_loops
! 				 || optimize >= 3;
      }
    else
      {
!       if (!OPTION_SET_P (flag_cunroll_grow_size))
! 	flag_cunroll_grow_size = flag_peel_loops || optimize >= 3;
      }
  
  }
  
  /* Clear stack slot assignments remembered from previous functions.
--- 1870,1935 ----
  	    opts->x_flag_pcc_struct_return = DEFAULT_PCC_STRUCT_RETURN;
  	}
      }
+ 
+   /* Keep nonleaf frame pointers.  */
+   if (opts->x_flag_omit_frame_pointer)
+     opts->x_target_flags &= ~MASK_OMIT_LEAF_FRAME_POINTER;
+   else if (TARGET_OMIT_LEAF_FRAME_POINTER_P (opts->x_target_flags))
+     opts->x_flag_omit_frame_pointer = 1;
  }
  
! /* Implement part of TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE hook.  */
  
! static void
! ix86_override_options_after_change_1 (struct gcc_options *opts,
! 				      struct gcc_options *opts_set)
  {
! #define OPTS_SET_P(OPTION) opts_set->x_ ## OPTION
! #define OPTS(OPTION) opts->x_ ## OPTION
  
    /* Disable unrolling small loops when there's explicit
       -f{,no}unroll-loop.  */
!   if ((OPTS_SET_P (flag_unroll_loops))
!      || (OPTS_SET_P (flag_unroll_all_loops)
! 	 && OPTS (flag_unroll_all_loops)))
      {
!       if (!OPTS_SET_P (ix86_unroll_only_small_loops))
! 	OPTS (ix86_unroll_only_small_loops) = 0;
        /* Re-enable -frename-registers and -fweb if funroll-loops
  	 enabled.  */
!       if (!OPTS_SET_P (flag_web))
! 	OPTS (flag_web) = OPTS (flag_unroll_loops);
!       if (!OPTS_SET_P (flag_rename_registers))
! 	OPTS (flag_rename_registers) = OPTS (flag_unroll_loops);
        /* -fcunroll-grow-size default follws -f[no]-unroll-loops.  */
!       if (!OPTS_SET_P (flag_cunroll_grow_size))
! 	OPTS (flag_cunroll_grow_size)
! 	  = (OPTS (flag_unroll_loops)
! 	     || OPTS (flag_peel_loops)
! 	     || OPTS (optimize) >= 3);
      }
    else
      {
!       if (!OPTS_SET_P (flag_cunroll_grow_size))
! 	OPTS (flag_cunroll_grow_size)
! 	  = (OPTS (flag_peel_loops)
! 	     || OPTS (optimize) >= 3);
      }
  
+ #undef OPTS
+ #undef OPTS_SET_P
+ }
+ 
+ /* Implement TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE hook.  */
+ 
+ void
+ ix86_override_options_after_change (void)
+ {
+   ix86_default_align (&global_options);
+ 
+   ix86_recompute_optlev_based_flags (&global_options, &global_options_set);
+ 
+   ix86_override_options_after_change_1 (&global_options, &global_options_set);
  }
  
  /* Clear stack slot assignments remembered from previous functions.
*************** ix86_option_override_internal (bool main
*** 2420,2426 ****
  
    set_ix86_tune_features (opts, ix86_tune, opts->x_ix86_dump_tunes);
  
!   ix86_override_options_after_change ();
  
    ix86_tune_cost = processor_cost_table[ix86_tune];
    /* TODO: ix86_cost should be chosen at instruction or function granuality
--- 2444,2452 ----
  
    set_ix86_tune_features (opts, ix86_tune, opts->x_ix86_dump_tunes);
  
!   ix86_recompute_optlev_based_flags (opts, opts_set);
! 
!   ix86_override_options_after_change_1 (opts, opts_set);
  
    ix86_tune_cost = processor_cost_table[ix86_tune];
    /* TODO: ix86_cost should be chosen at instruction or function granuality
*************** ix86_option_override_internal (bool main
*** 2451,2456 ****
--- 2477,2485 ----
        || TARGET_64BIT_P (opts->x_ix86_isa_flags))
      opts->x_ix86_regparm = REGPARM_MAX;
  
+   /* Default align_* from the processor table.  */
+   ix86_default_align (&global_options);
+ 
    /* Provide default for -mbranch-cost= value.  */
    SET_OPTION_IF_UNSET (opts, opts_set, ix86_branch_cost,
  		       ix86_tune_cost->branch_cost);
*************** ix86_option_override_internal (bool main
*** 2488,2499 ****
          opts->x_target_flags |= MASK_NO_RED_ZONE;
      }
  
-   /* Keep nonleaf frame pointers.  */
-   if (opts->x_flag_omit_frame_pointer)
-     opts->x_target_flags &= ~MASK_OMIT_LEAF_FRAME_POINTER;
-   else if (TARGET_OMIT_LEAF_FRAME_POINTER_P (opts->x_target_flags))
-     opts->x_flag_omit_frame_pointer = 1;
- 
    /* If we're doing fast math, we don't care about comparison order
       wrt NaNs.  This lets us use a shorter comparison sequence.  */
    if (opts->x_flag_finite_math_only)
--- 2517,2522 ----
*************** ix86_option_override_internal (bool main
*** 2819,2824 ****
--- 2842,2850 ----
  	    {
  	      if (TARGET_AVX512F_P (opts->x_ix86_isa_flags))
  		opts->x_ix86_move_max = PVW_AVX512;
+ 	      /* Align with vectorizer to avoid potential STLF issue.  */
+ 	      else if (TARGET_AVX_P (opts->x_ix86_isa_flags))
+ 		opts->x_ix86_move_max = PVW_AVX256;
  	      else
  		opts->x_ix86_move_max = PVW_AVX128;
  	    }
*************** ix86_option_override_internal (bool main
*** 2840,2845 ****
--- 2866,2874 ----
  	    {
  	      if (TARGET_AVX512F_P (opts->x_ix86_isa_flags))
  		opts->x_ix86_store_max = PVW_AVX512;
+ 	      /* Align with vectorizer to avoid potential STLF issue.  */
+ 	      else if (TARGET_AVX_P (opts->x_ix86_isa_flags))
+ 		opts->x_ix86_store_max = PVW_AVX256;
  	      else
  		opts->x_ix86_store_max = PVW_AVX128;
  	    }
diff -Nrcpad gcc-13.3.0/gcc/config/i386/i386.cc gcc-13.4.0/gcc/config/i386/i386.cc
*** gcc-13.3.0/gcc/config/i386/i386.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/i386/i386.cc	Thu Jun  5 16:02:58 2025
*************** ix86_gimplify_va_arg (tree valist, tree
*** 4814,4826 ****
  
        examine_argument (nat_mode, type, 0, &needed_intregs, &needed_sseregs);
  
!       need_temp = (!REG_P (container)
  		   && ((needed_intregs && TYPE_ALIGN (type) > 64)
  		       || TYPE_ALIGN (type) > 128));
  
        /* In case we are passing structure, verify that it is consecutive block
           on the register save area.  If not we need to do moves.  */
!       if (!need_temp && !REG_P (container))
  	{
  	  /* Verify that all registers are strictly consecutive  */
  	  if (SSE_REGNO_P (REGNO (XEXP (XVECEXP (container, 0, 0), 0))))
--- 4814,4844 ----
  
        examine_argument (nat_mode, type, 0, &needed_intregs, &needed_sseregs);
  
!       bool container_in_reg = false;
!       if (REG_P (container))
! 	container_in_reg = true;
!       else if (GET_CODE (container) == PARALLEL
! 	       && GET_MODE (container) == BLKmode
! 	       && XVECLEN (container, 0) == 1)
! 	{
! 	  /* Check if it is a PARALLEL BLKmode container of an EXPR_LIST
! 	     expression in a TImode register.  In this case, temp isn't
! 	     needed.  Otherwise, the TImode variable will be put in the
! 	     GPR save area which guarantees only 8-byte alignment.   */
! 	  rtx x = XVECEXP (container, 0, 0);
! 	  if (GET_CODE (x) == EXPR_LIST
! 	      && REG_P (XEXP (x, 0))
! 	      && XEXP (x, 1) == const0_rtx)
! 	    container_in_reg = true;
! 	}
! 
!       need_temp = (!container_in_reg
  		   && ((needed_intregs && TYPE_ALIGN (type) > 64)
  		       || TYPE_ALIGN (type) > 128));
  
        /* In case we are passing structure, verify that it is consecutive block
           on the register save area.  If not we need to do moves.  */
!       if (!need_temp && !container_in_reg)
  	{
  	  /* Verify that all registers are strictly consecutive  */
  	  if (SSE_REGNO_P (REGNO (XEXP (XVECEXP (container, 0, 0), 0))))
*************** ix86_tls_address_pattern_p (rtx op)
*** 11834,11840 ****
  }
  
  /* Rewrite *LOC so that it refers to a default TLS address space.  */
! void
  ix86_rewrite_tls_address_1 (rtx *loc)
  {
    subrtx_ptr_iterator::array_type array;
--- 11852,11858 ----
  }
  
  /* Rewrite *LOC so that it refers to a default TLS address space.  */
! static void
  ix86_rewrite_tls_address_1 (rtx *loc)
  {
    subrtx_ptr_iterator::array_type array;
*************** ix86_rewrite_tls_address_1 (rtx *loc)
*** 11856,11861 ****
--- 11874,11886 ----
  		  if (GET_CODE (u) == UNSPEC
  		      && XINT (u, 1) == UNSPEC_TP)
  		    {
+ 		      /* NB: Since address override only applies to the
+ 			 (reg32) part in fs:(reg32), return if address
+ 			 override is used.  */
+ 		      if (Pmode != word_mode
+ 			  && REG_P (XEXP (*x, 1 - i)))
+ 			return;
+ 
  		      addr_space_t as = DEFAULT_TLS_SEG_REG;
  
  		      *x = XEXP (*x, 1 - i);
*************** ix86_dirflag_mode_needed (rtx_insn *insn
*** 14432,14440 ****
  static bool
  ix86_check_avx_upper_register (const_rtx exp)
  {
!   return (SSE_REG_P (exp)
! 	  && !EXT_REX_SSE_REG_P (exp)
! 	  && GET_MODE_BITSIZE (GET_MODE (exp)) > 128);
  }
  
  /* Check if a 256bit or 512bit AVX register is referenced in stores.   */
--- 14457,14475 ----
  static bool
  ix86_check_avx_upper_register (const_rtx exp)
  {
!   /* construct_container may return a parallel with expr_list
!      which contains the real reg and mode  */
!   subrtx_iterator::array_type array;
!   FOR_EACH_SUBRTX (iter, array, exp, NONCONST)
!     {
!       const_rtx x = *iter;
!       if (SSE_REG_P (x)
! 	  && !EXT_REX_SSE_REG_P (x)
! 	  && GET_MODE_BITSIZE (GET_MODE (x)) > 128)
! 	return true;
!     }
! 
!   return false;
  }
  
  /* Check if a 256bit or 512bit AVX register is referenced in stores.   */
*************** ix86_check_avx_upper_register (const_rtx
*** 14442,14448 ****
  static void
  ix86_check_avx_upper_stores (rtx dest, const_rtx, void *data)
  {
!   if (ix86_check_avx_upper_register (dest))
      {
        bool *used = (bool *) data;
        *used = true;
--- 14477,14485 ----
  static void
  ix86_check_avx_upper_stores (rtx dest, const_rtx, void *data)
  {
!   if (SSE_REG_P (dest)
!       && !EXT_REX_SSE_REG_P (dest)
!       && GET_MODE_BITSIZE (GET_MODE (dest)) > 128)
      {
        bool *used = (bool *) data;
        *used = true;
*************** ix86_avx_u128_mode_needed (rtx_insn *ins
*** 14500,14513 ****
        return AVX_U128_CLEAN;
      }
  
-   subrtx_iterator::array_type array;
- 
    rtx set = single_set (insn);
    if (set)
      {
        rtx dest = SET_DEST (set);
        rtx src = SET_SRC (set);
!       if (ix86_check_avx_upper_register (dest))
  	{
  	  /* This is an YMM/ZMM load.  Return AVX_U128_DIRTY if the
  	     source isn't zero.  */
--- 14537,14550 ----
        return AVX_U128_CLEAN;
      }
  
    rtx set = single_set (insn);
    if (set)
      {
        rtx dest = SET_DEST (set);
        rtx src = SET_SRC (set);
!       if (SSE_REG_P (dest)
! 	  && !EXT_REX_SSE_REG_P (dest)
! 	  && GET_MODE_BITSIZE (GET_MODE (dest)) > 128)
  	{
  	  /* This is an YMM/ZMM load.  Return AVX_U128_DIRTY if the
  	     source isn't zero.  */
*************** ix86_avx_u128_mode_needed (rtx_insn *ins
*** 14518,14526 ****
  	}
        else
  	{
! 	  FOR_EACH_SUBRTX (iter, array, src, NONCONST)
! 	    if (ix86_check_avx_upper_register (*iter))
! 	      return AVX_U128_DIRTY;
  	}
  
        /* This isn't YMM/ZMM load/store.  */
--- 14555,14562 ----
  	}
        else
  	{
! 	  if (ix86_check_avx_upper_register (src))
! 	    return AVX_U128_DIRTY;
  	}
  
        /* This isn't YMM/ZMM load/store.  */
*************** ix86_avx_u128_mode_needed (rtx_insn *ins
*** 14531,14539 ****
       Hardware changes state only when a 256bit register is written to,
       but we need to prevent the compiler from moving optimal insertion
       point above eventual read from 256bit or 512 bit register.  */
!   FOR_EACH_SUBRTX (iter, array, PATTERN (insn), NONCONST)
!     if (ix86_check_avx_upper_register (*iter))
!       return AVX_U128_DIRTY;
  
    return AVX_U128_ANY;
  }
--- 14567,14574 ----
       Hardware changes state only when a 256bit register is written to,
       but we need to prevent the compiler from moving optimal insertion
       point above eventual read from 256bit or 512 bit register.  */
!   if (ix86_check_avx_upper_register (PATTERN (insn)))
!     return AVX_U128_DIRTY;
  
    return AVX_U128_ANY;
  }
*************** ix86_fold_builtin (tree fndecl, int n_ar
*** 18044,18052 ****
  	      unsigned int prec = TYPE_PRECISION (TREE_TYPE (args[0]));
  	      unsigned int start = tree_to_uhwi (args[1]);
  	      unsigned int len = (start & 0xff00) >> 8;
  	      start &= 0xff;
  	      if (start >= prec || len == 0)
! 		res = 0;
  	      else if (!tree_fits_uhwi_p (args[0]))
  		break;
  	      else
--- 18079,18089 ----
  	      unsigned int prec = TYPE_PRECISION (TREE_TYPE (args[0]));
  	      unsigned int start = tree_to_uhwi (args[1]);
  	      unsigned int len = (start & 0xff00) >> 8;
+ 	      tree lhs_type = TREE_TYPE (TREE_TYPE (fndecl));
  	      start &= 0xff;
  	      if (start >= prec || len == 0)
! 		return omit_one_operand (lhs_type, build_zero_cst (lhs_type),
! 					 args[0]);
  	      else if (!tree_fits_uhwi_p (args[0]))
  		break;
  	      else
*************** ix86_fold_builtin (tree fndecl, int n_ar
*** 18055,18061 ****
  		len = prec;
  	      if (len < HOST_BITS_PER_WIDE_INT)
  		res &= (HOST_WIDE_INT_1U << len) - 1;
! 	      return build_int_cstu (TREE_TYPE (TREE_TYPE (fndecl)), res);
  	    }
  	  break;
  
--- 18092,18098 ----
  		len = prec;
  	      if (len < HOST_BITS_PER_WIDE_INT)
  		res &= (HOST_WIDE_INT_1U << len) - 1;
! 	      return build_int_cstu (lhs_type, res);
  	    }
  	  break;
  
*************** ix86_fold_builtin (tree fndecl, int n_ar
*** 18065,18079 ****
  	  if (tree_fits_uhwi_p (args[1]))
  	    {
  	      unsigned int idx = tree_to_uhwi (args[1]) & 0xff;
  	      if (idx >= TYPE_PRECISION (TREE_TYPE (args[0])))
  		return args[0];
  	      if (idx == 0)
! 		return build_int_cst (TREE_TYPE (TREE_TYPE (fndecl)), 0);
  	      if (!tree_fits_uhwi_p (args[0]))
  		break;
  	      unsigned HOST_WIDE_INT res = tree_to_uhwi (args[0]);
  	      res &= ~(HOST_WIDE_INT_M1U << idx);
! 	      return build_int_cstu (TREE_TYPE (TREE_TYPE (fndecl)), res);
  	    }
  	  break;
  
--- 18102,18118 ----
  	  if (tree_fits_uhwi_p (args[1]))
  	    {
  	      unsigned int idx = tree_to_uhwi (args[1]) & 0xff;
+ 	      tree lhs_type = TREE_TYPE (TREE_TYPE (fndecl));
  	      if (idx >= TYPE_PRECISION (TREE_TYPE (args[0])))
  		return args[0];
  	      if (idx == 0)
! 		return omit_one_operand (lhs_type, build_zero_cst (lhs_type),
! 					 args[0]);
  	      if (!tree_fits_uhwi_p (args[0]))
  		break;
  	      unsigned HOST_WIDE_INT res = tree_to_uhwi (args[0]);
  	      res &= ~(HOST_WIDE_INT_M1U << idx);
! 	      return build_int_cstu (lhs_type, res);
  	    }
  	  break;
  
*************** ix86_stack_protect_guard (void)
*** 22944,22949 ****
--- 22983,22995 ----
    return default_stack_protect_guard ();
  }
  
+ static bool
+ ix86_stack_protect_runtime_enabled_p (void)
+ {
+   /* Naked functions should not enable stack protector.  */
+   return !ix86_function_naked (current_function_decl);
+ }
+ 
  /* For 32-bit code we can save PIC register setup by using
     __stack_chk_fail_local hidden function instead of calling
     __stack_chk_fail directly.  64-bit code doesn't need to setup any PIC
*************** ix86_reassociation_width (unsigned int o
*** 23216,23227 ****
        if (width == 1)
  	return 1;
  
!       /* Integer vector instructions execute in FP unit
  	 and can execute 3 additions and one multiplication per cycle.  */
        if ((ix86_tune == PROCESSOR_ZNVER1 || ix86_tune == PROCESSOR_ZNVER2
  	   || ix86_tune == PROCESSOR_ZNVER3 || ix86_tune == PROCESSOR_ZNVER4)
     	  && INTEGRAL_MODE_P (mode) && op != PLUS && op != MINUS)
  	return 1;
  
        /* Account for targets that splits wide vectors into multiple parts.  */
        if (TARGET_AVX512_SPLIT_REGS && GET_MODE_BITSIZE (mode) > 256)
--- 23262,23278 ----
        if (width == 1)
  	return 1;
  
!       /* Znver1-4 Integer vector instructions execute in FP unit
  	 and can execute 3 additions and one multiplication per cycle.  */
        if ((ix86_tune == PROCESSOR_ZNVER1 || ix86_tune == PROCESSOR_ZNVER2
  	   || ix86_tune == PROCESSOR_ZNVER3 || ix86_tune == PROCESSOR_ZNVER4)
     	  && INTEGRAL_MODE_P (mode) && op != PLUS && op != MINUS)
  	return 1;
+       /* Znver5 can do 2 integer multiplications per cycle with latency
+ 	 of 3.  */
+       if (ix86_tune == PROCESSOR_ZNVER5
+ 	  && INTEGRAL_MODE_P (mode) && op != PLUS && op != MINUS)
+ 	width = 6;
  
        /* Account for targets that splits wide vectors into multiple parts.  */
        if (TARGET_AVX512_SPLIT_REGS && GET_MODE_BITSIZE (mode) > 256)
*************** ix86_vector_costs::add_stmt_cost (int co
*** 23699,23704 ****
--- 23750,23760 ----
    if (stmt_cost == -1)
      stmt_cost = ix86_builtin_vectorization_cost (kind, vectype, misalign);
  
+   if (kind == vec_perm && vectype
+       && GET_MODE_SIZE (TYPE_MODE (vectype)) == 32
+       && TARGET_AVX256_AVOID_VEC_PERM)
+     stmt_cost += 1000;
+ 
    /* Penalize DFmode vector operations for Bonnell.  */
    if (TARGET_CPU_P (BONNELL) && kind == vector_stmt
        && vectype && GET_MODE_INNER (TYPE_MODE (vectype)) == DFmode)
*************** ix86_libgcc_floating_mode_supported_p
*** 25067,25072 ****
--- 25123,25132 ----
  #undef TARGET_STACK_PROTECT_GUARD
  #define TARGET_STACK_PROTECT_GUARD ix86_stack_protect_guard
  
+ #undef TARGET_STACK_PROTECT_RUNTIME_ENABLED_P
+ #define TARGET_STACK_PROTECT_RUNTIME_ENABLED_P \
+   ix86_stack_protect_runtime_enabled_p
+ 
  #if !TARGET_MACHO
  #undef TARGET_STACK_PROTECT_FAIL
  #define TARGET_STACK_PROTECT_FAIL ix86_stack_protect_fail
diff -Nrcpad gcc-13.3.0/gcc/config/i386/i386.h gcc-13.4.0/gcc/config/i386/i386.h
*** gcc-13.3.0/gcc/config/i386/i386.h	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/i386/i386.h	Thu Jun  5 16:02:58 2025
*************** extern unsigned char ix86_tune_features[
*** 418,423 ****
--- 418,425 ----
  	ix86_tune_features[X86_TUNE_FUSE_CMP_AND_BRANCH_SOFLAGS]
  #define TARGET_FUSE_ALU_AND_BRANCH \
  	ix86_tune_features[X86_TUNE_FUSE_ALU_AND_BRANCH]
+ #define TARGET_FUSE_MOV_AND_ALU \
+ 	ix86_tune_features[X86_TUNE_FUSE_MOV_AND_ALU]
  #define TARGET_OPT_AGU ix86_tune_features[X86_TUNE_OPT_AGU]
  #define TARGET_AVOID_LEA_FOR_ADDR \
  	ix86_tune_features[X86_TUNE_AVOID_LEA_FOR_ADDR]
*************** extern unsigned char ix86_tune_features[
*** 425,430 ****
--- 427,434 ----
  	ix86_tune_features[X86_TUNE_SOFTWARE_PREFETCHING_BENEFICIAL]
  #define TARGET_AVX256_SPLIT_REGS \
  	ix86_tune_features[X86_TUNE_AVX256_SPLIT_REGS]
+ #define TARGET_AVX256_AVOID_VEC_PERM \
+ 	ix86_tune_features[X86_TUNE_AVX256_AVOID_VEC_PERM]
  #define TARGET_AVX512_SPLIT_REGS \
  	ix86_tune_features[X86_TUNE_AVX512_SPLIT_REGS]
  #define TARGET_GENERAL_REGS_SSE_SPILL \
*************** extern unsigned char ix86_tune_features[
*** 448,453 ****
--- 452,459 ----
  	ix86_tune_features[X86_TUNE_V2DF_REDUCTION_PREFER_HADDPD]
  #define TARGET_DEST_FALSE_DEP_FOR_GLC \
  	ix86_tune_features[X86_TUNE_DEST_FALSE_DEP_FOR_GLC]
+ #define TARGET_SSE_MOVCC_USE_BLENDV \
+ 	ix86_tune_features[X86_TUNE_SSE_MOVCC_USE_BLENDV]
  
  /* Feature tests against the various architecture variations.  */
  enum ix86_arch_indices {
*************** extern int const svr4_debugger_register_
*** 2175,2181 ****
  #define ASM_OUTPUT_SYMBOL_REF(FILE, SYM) \
    do {							\
      const char *name					\
!       = assemble_name_resolve (XSTR (x, 0));		\
      /* In -masm=att wrap identifiers that start with $	\
         into parens.  */					\
      if (ASSEMBLER_DIALECT == ASM_ATT			\
--- 2181,2187 ----
  #define ASM_OUTPUT_SYMBOL_REF(FILE, SYM) \
    do {							\
      const char *name					\
!       = assemble_name_resolve (XSTR (SYM, 0));		\
      /* In -masm=att wrap identifiers that start with $	\
         into parens.  */					\
      if (ASSEMBLER_DIALECT == ASM_ATT			\
*************** enum processor_type
*** 2269,2274 ****
--- 2275,2281 ----
    PROCESSOR_ZNVER2,
    PROCESSOR_ZNVER3,
    PROCESSOR_ZNVER4,
+   PROCESSOR_ZNVER5,
    PROCESSOR_max
  };
  
*************** constexpr wide_int_bitmask PTA_ZNVER4 =
*** 2383,2388 ****
--- 2390,2397 ----
    | PTA_AVX512IFMA | PTA_AVX512CD | PTA_AVX512BW | PTA_AVX512VL
    | PTA_AVX512BF16 | PTA_AVX512VBMI | PTA_AVX512VBMI2 | PTA_GFNI
    | PTA_AVX512VNNI | PTA_AVX512BITALG | PTA_AVX512VPOPCNTDQ;
+ constexpr wide_int_bitmask PTA_ZNVER5 = PTA_ZNVER4 | PTA_AVXVNNI
+   | PTA_MOVDIRI | PTA_MOVDIR64B | PTA_AVX512VP2INTERSECT | PTA_PREFETCHI;
  
  #ifndef GENERATOR_FILE
  
diff -Nrcpad gcc-13.3.0/gcc/config/i386/i386.md gcc-13.4.0/gcc/config/i386/i386.md
*** gcc-13.3.0/gcc/config/i386/i386.md	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/i386/i386.md	Thu Jun  5 16:02:58 2025
***************
*** 483,489 ****
  ;; Processor type.
  (define_attr "cpu" "none,pentium,pentiumpro,geode,k6,athlon,k8,core2,nehalem,
  		    atom,slm,glm,haswell,generic,lujiazui,amdfam10,bdver1,
! 		    bdver2,bdver3,bdver4,btver2,znver1,znver2,znver3,znver4"
    (const (symbol_ref "ix86_schedule")))
  
  ;; A basic instruction type.  Refinements due to arguments to be
--- 483,489 ----
  ;; Processor type.
  (define_attr "cpu" "none,pentium,pentiumpro,geode,k6,athlon,k8,core2,nehalem,
  		    atom,slm,glm,haswell,generic,lujiazui,amdfam10,bdver1,
! 		    bdver2,bdver3,bdver4,btver2,znver1,znver2,znver3,znver4,znver5"
    (const (symbol_ref "ix86_schedule")))
  
  ;; A basic instruction type.  Refinements due to arguments to be
***************
*** 1327,1333 ****
  (include "bdver3.md")
  (include "btver2.md")
  (include "znver.md")
! (include "znver4.md")
  (include "geode.md")
  (include "atom.md")
  (include "slm.md")
--- 1327,1333 ----
  (include "bdver3.md")
  (include "btver2.md")
  (include "znver.md")
! (include "zn4zn5.md")
  (include "geode.md")
  (include "atom.md")
  (include "slm.md")
***************
*** 2337,2343 ****
    [(set (match_operand:DI 0 "nonimmediate_operand"
      "=r  ,o  ,r,r  ,r,m ,*y,*y,?*y,?m,?r,?*y,?v,?v,?v,m ,m,?r ,?*Yd,?r,?v,?*y,?*x,*k,*k  ,*r,*m,*k")
  	(match_operand:DI 1 "general_operand"
!     "riFo,riF,Z,rem,i,re,C ,*y,Bk ,*y,*y,r  ,C ,?v,Bk,?v,v,*Yd,r   ,?v,r  ,*x ,*y ,*r,*kBk,*k,*k,CBC"))]
    "!(MEM_P (operands[0]) && MEM_P (operands[1]))
     && ix86_hardreg_mov_ok (operands[0], operands[1])"
  {
--- 2337,2343 ----
    [(set (match_operand:DI 0 "nonimmediate_operand"
      "=r  ,o  ,r,r  ,r,m ,*y,*y,?*y,?m,?r,?*y,?v,?v,?v,m ,m,?r ,?*Yd,?r,?v,?*y,?*x,*k,*k  ,*r,*m,*k")
  	(match_operand:DI 1 "general_operand"
!     "riFo,riF,Z,rem,i,re,C ,*y,Bk ,*y,*y,r  ,C ,?v,Bk,?v,v,*Yd,r   ,?v,r ,*x ,*y ,*r,*kBk,*k,*k,CBC"))]
    "!(MEM_P (operands[0]) && MEM_P (operands[1]))
     && ix86_hardreg_mov_ok (operands[0], operands[1])"
  {
***************
*** 2399,2410 ****
    [(set (attr "isa")
       (cond [(eq_attr "alternative" "0,1,17,18")
  	      (const_string "nox64")
! 	    (eq_attr "alternative" "2,3,4,5,10,11,23,25")
  	      (const_string "x64")
  	    (eq_attr "alternative" "19,20")
  	      (const_string "x64_sse2")
  	    (eq_attr "alternative" "21,22")
  	      (const_string "sse2")
  	   ]
  	   (const_string "*")))
     (set (attr "type")
--- 2399,2414 ----
    [(set (attr "isa")
       (cond [(eq_attr "alternative" "0,1,17,18")
  	      (const_string "nox64")
! 	    (eq_attr "alternative" "2,3,4,5,10,11")
  	      (const_string "x64")
  	    (eq_attr "alternative" "19,20")
  	      (const_string "x64_sse2")
  	    (eq_attr "alternative" "21,22")
  	      (const_string "sse2")
+ 	    (eq_attr "alternative" "23,25")
+ 	      (const_string "x64_avx512bw")
+ 	    (eq_attr "alternative" "24,26,27")
+ 	      (const_string "avx512bw")
  	   ]
  	   (const_string "*")))
     (set (attr "type")
***************
*** 2561,2567 ****
    [(set (match_operand:SI 0 "nonimmediate_operand"
      "=r,m ,*y,*y,?*y,?m,?r,?*y,?v,?v,?v,m ,?r,?v,*k,*k  ,*rm,*k")
  	(match_operand:SI 1 "general_operand"
!     "g ,re,C ,*y,Bk ,*y,*y,r  ,C ,?v,Bk,?v,?v,r  ,*r,*kBk,*k ,CBC"))]
    "!(MEM_P (operands[0]) && MEM_P (operands[1]))
     && ix86_hardreg_mov_ok (operands[0], operands[1])"
  {
--- 2565,2571 ----
    [(set (match_operand:SI 0 "nonimmediate_operand"
      "=r,m ,*y,*y,?*y,?m,?r,?*y,?v,?v,?v,m ,?r,?v,*k,*k  ,*rm,*k")
  	(match_operand:SI 1 "general_operand"
!     "g ,re,C ,*y,Bk ,*y,*y,r  ,C ,?v,Bk,?v,?v,r ,*r,*kBk,*k ,CBC"))]
    "!(MEM_P (operands[0]) && MEM_P (operands[1]))
     && ix86_hardreg_mov_ok (operands[0], operands[1])"
  {
***************
*** 2615,2620 ****
--- 2619,2626 ----
    [(set (attr "isa")
       (cond [(eq_attr "alternative" "12,13")
  	      (const_string "sse2")
+ 	    (eq_attr "alternative" "14,15,16,17")
+ 	      (const_string "avx512bw")
  	   ]
  	   (const_string "*")))
     (set (attr "type")
***************
*** 15166,15176 ****
  (define_insn "*bt<mode>"
    [(set (reg:CCC FLAGS_REG)
  	(compare:CCC
  	  (zero_extract:SWI48
  	    (match_operand:SWI48 0 "nonimmediate_operand" "r,m")
  	    (const_int 1)
! 	    (match_operand:SI 1 "nonmemory_operand" "r<S>,<S>"))
! 	  (const_int 0)))]
    ""
  {
    switch (get_attr_mode (insn))
--- 15172,15182 ----
  (define_insn "*bt<mode>"
    [(set (reg:CCC FLAGS_REG)
  	(compare:CCC
+ 	  (const_int 0)
  	  (zero_extract:SWI48
  	    (match_operand:SWI48 0 "nonimmediate_operand" "r,m")
  	    (const_int 1)
! 	    (match_operand:SI 1 "nonmemory_operand" "r<S>,<S>"))))]
    ""
  {
    switch (get_attr_mode (insn))
***************
*** 15216,15233 ****
    "&& 1"
    [(set (reg:CCC FLAGS_REG)
  	(compare:CCC
  	  (zero_extract:SWI48
  	    (match_dup 1)
  	    (const_int 1)
! 	    (match_dup 2))
! 	  (const_int 0)))
     (set (pc)
  	(if_then_else (match_op_dup 0 [(reg:CCC FLAGS_REG) (const_int 0)])
  		      (label_ref (match_dup 3))
  		      (pc)))]
  {
    operands[0] = shallow_copy_rtx (operands[0]);
!   PUT_CODE (operands[0], reverse_condition (GET_CODE (operands[0])));
  })
  
  (define_insn_and_split "*jcc_bt<mode>_1"
--- 15222,15239 ----
    "&& 1"
    [(set (reg:CCC FLAGS_REG)
  	(compare:CCC
+ 	  (const_int 0)
  	  (zero_extract:SWI48
  	    (match_dup 1)
  	    (const_int 1)
! 	    (match_dup 2))))
     (set (pc)
  	(if_then_else (match_op_dup 0 [(reg:CCC FLAGS_REG) (const_int 0)])
  		      (label_ref (match_dup 3))
  		      (pc)))]
  {
    operands[0] = shallow_copy_rtx (operands[0]);
!   PUT_CODE (operands[0], GET_CODE (operands[0]) == NE ? LTU : GEU);
  })
  
  (define_insn_and_split "*jcc_bt<mode>_1"
***************
*** 15248,15258 ****
    "&& 1"
    [(set (reg:CCC FLAGS_REG)
  	(compare:CCC
  	  (zero_extract:SWI48
  	    (match_dup 1)
  	    (const_int 1)
! 	    (match_dup 2))
! 	  (const_int 0)))
     (set (pc)
  	(if_then_else (match_op_dup 0 [(reg:CCC FLAGS_REG) (const_int 0)])
  		      (label_ref (match_dup 3))
--- 15254,15264 ----
    "&& 1"
    [(set (reg:CCC FLAGS_REG)
  	(compare:CCC
+ 	  (const_int 0)
  	  (zero_extract:SWI48
  	    (match_dup 1)
  	    (const_int 1)
! 	    (match_dup 2))))
     (set (pc)
  	(if_then_else (match_op_dup 0 [(reg:CCC FLAGS_REG) (const_int 0)])
  		      (label_ref (match_dup 3))
***************
*** 15260,15266 ****
  {
    operands[2] = lowpart_subreg (SImode, operands[2], QImode);
    operands[0] = shallow_copy_rtx (operands[0]);
!   PUT_CODE (operands[0], reverse_condition (GET_CODE (operands[0])));
  })
  
  ;; Avoid useless masking of bit offset operand.
--- 15266,15272 ----
  {
    operands[2] = lowpart_subreg (SImode, operands[2], QImode);
    operands[0] = shallow_copy_rtx (operands[0]);
!   PUT_CODE (operands[0], GET_CODE (operands[0]) == NE ? LTU : GEU);
  })
  
  ;; Avoid useless masking of bit offset operand.
***************
*** 15285,15302 ****
    "&& 1"
    [(set (reg:CCC FLAGS_REG)
  	(compare:CCC
  	  (zero_extract:SWI48
  	    (match_dup 1)
  	    (const_int 1)
! 	    (match_dup 2))
! 	  (const_int 0)))
     (set (pc)
  	(if_then_else (match_op_dup 0 [(reg:CCC FLAGS_REG) (const_int 0)])
  		      (label_ref (match_dup 4))
  		      (pc)))]
  {
    operands[0] = shallow_copy_rtx (operands[0]);
!   PUT_CODE (operands[0], reverse_condition (GET_CODE (operands[0])));
  })
  
  (define_insn_and_split "*jcc_bt<mode>_mask_1"
--- 15291,15308 ----
    "&& 1"
    [(set (reg:CCC FLAGS_REG)
  	(compare:CCC
+ 	  (const_int 0)
  	  (zero_extract:SWI48
  	    (match_dup 1)
  	    (const_int 1)
! 	    (match_dup 2))))
     (set (pc)
  	(if_then_else (match_op_dup 0 [(reg:CCC FLAGS_REG) (const_int 0)])
  		      (label_ref (match_dup 4))
  		      (pc)))]
  {
    operands[0] = shallow_copy_rtx (operands[0]);
!   PUT_CODE (operands[0], GET_CODE (operands[0]) == NE ? LTU : GEU);
  })
  
  (define_insn_and_split "*jcc_bt<mode>_mask_1"
***************
*** 15322,15332 ****
    "&& 1"
    [(set (reg:CCC FLAGS_REG)
  	(compare:CCC
  	  (zero_extract:SWI48
  	    (match_dup 1)
  	    (const_int 1)
! 	    (match_dup 2))
! 	  (const_int 0)))
     (set (pc)
  	(if_then_else (match_op_dup 0 [(reg:CCC FLAGS_REG) (const_int 0)])
  		      (label_ref (match_dup 4))
--- 15328,15338 ----
    "&& 1"
    [(set (reg:CCC FLAGS_REG)
  	(compare:CCC
+ 	  (const_int 0)
  	  (zero_extract:SWI48
  	    (match_dup 1)
  	    (const_int 1)
! 	    (match_dup 2))))
     (set (pc)
  	(if_then_else (match_op_dup 0 [(reg:CCC FLAGS_REG) (const_int 0)])
  		      (label_ref (match_dup 4))
***************
*** 15335,15341 ****
    operands[2] = force_reg (GET_MODE (operands[2]), operands[2]);
    operands[2] = gen_lowpart (SImode, operands[2]);
    operands[0] = shallow_copy_rtx (operands[0]);
!   PUT_CODE (operands[0], reverse_condition (GET_CODE (operands[0])));
  })
  
  ;; Help combine recognize bt followed by cmov
--- 15341,15347 ----
    operands[2] = force_reg (GET_MODE (operands[2]), operands[2]);
    operands[2] = gen_lowpart (SImode, operands[2]);
    operands[0] = shallow_copy_rtx (operands[0]);
!   PUT_CODE (operands[0], GET_CODE (operands[0]) == NE ? LTU : GEU);
  })
  
  ;; Help combine recognize bt followed by cmov
***************
*** 15355,15364 ****
     && ix86_pre_reload_split ()"
    [(set (reg:CCC FLAGS_REG)
  	(compare:CCC
! 	 (zero_extract:SWI48 (match_dup 1) (const_int 1) (match_dup 2))
! 	 (const_int 0)))
     (set (match_dup 0)
! 	(if_then_else:SWI248 (eq (reg:CCC FLAGS_REG) (const_int 0))
  			     (match_dup 3)
  			     (match_dup 4)))]
  {
--- 15361,15370 ----
     && ix86_pre_reload_split ()"
    [(set (reg:CCC FLAGS_REG)
  	(compare:CCC
! 	 (const_int 0)
! 	 (zero_extract:SWI48 (match_dup 1) (const_int 1) (match_dup 2))))
     (set (match_dup 0)
! 	(if_then_else:SWI248 (ltu (reg:CCC FLAGS_REG) (const_int 0))
  			     (match_dup 3)
  			     (match_dup 4)))]
  {
***************
*** 15380,15389 ****
    "&& 1"
    [(set (reg:CCC FLAGS_REG)
          (compare:CCC
!          (zero_extract:SWI48 (match_dup 1) (const_int 1) (match_dup 2))
!          (const_int 0)))
     (set (match_dup 0)
!         (eq:QI (reg:CCC FLAGS_REG) (const_int 0)))]
  {
    operands[2] = lowpart_subreg (SImode, operands[2], QImode);
  })
--- 15386,15395 ----
    "&& 1"
    [(set (reg:CCC FLAGS_REG)
          (compare:CCC
! 	 (const_int 0)
! 	 (zero_extract:SWI48 (match_dup 1) (const_int 1) (match_dup 2))))
     (set (match_dup 0)
!         (ltu:QI (reg:CCC FLAGS_REG) (const_int 0)))]
  {
    operands[2] = lowpart_subreg (SImode, operands[2], QImode);
  })
***************
*** 15403,15412 ****
    "&& 1"
    [(set (reg:CCC FLAGS_REG)
          (compare:CCC
!          (zero_extract:SWI48 (match_dup 1) (const_int 1) (match_dup 2))
!          (const_int 0)))
     (set (match_dup 0)
!         (ne:QI (reg:CCC FLAGS_REG) (const_int 0)))]
  {
    operands[2] = lowpart_subreg (SImode, operands[2], QImode);
  })
--- 15409,15418 ----
    "&& 1"
    [(set (reg:CCC FLAGS_REG)
          (compare:CCC
! 	 (const_int 0)
! 	 (zero_extract:SWI48 (match_dup 1) (const_int 1) (match_dup 2))))
     (set (match_dup 0)
!         (geu:QI (reg:CCC FLAGS_REG) (const_int 0)))]
  {
    operands[2] = lowpart_subreg (SImode, operands[2], QImode);
  })
***************
*** 15424,15433 ****
    "&& 1"
    [(set (reg:CCC FLAGS_REG)
          (compare:CCC
!          (zero_extract:SWI48 (match_dup 1) (const_int 1) (match_dup 2))
!          (const_int 0)))
     (set (match_dup 3)
!         (ne:QI (reg:CCC FLAGS_REG) (const_int 0)))
     (set (match_dup 0) (zero_extend:SWI48 (match_dup 3)))]
  {
    operands[2] = lowpart_subreg (SImode, operands[2], QImode);
--- 15430,15439 ----
    "&& 1"
    [(set (reg:CCC FLAGS_REG)
          (compare:CCC
! 	 (const_int 0)
! 	 (zero_extract:SWI48 (match_dup 1) (const_int 1) (match_dup 2))))
     (set (match_dup 3)
! 	(geu:QI (reg:CCC FLAGS_REG) (const_int 0)))
     (set (match_dup 0) (zero_extend:SWI48 (match_dup 3)))]
  {
    operands[2] = lowpart_subreg (SImode, operands[2], QImode);
***************
*** 19371,19377 ****
    [(set (match_operand:SF 0 "register_operand" "=x,x,x")
  	(unspec:SF [(match_operand:SF 1 "nonimmediate_operand" "0,x,m")]
  		   UNSPEC_RSQRT))]
!   "TARGET_SSE && TARGET_SSE_MATH"
    "@
     %vrsqrtss\t{%d1, %0|%0, %d1}
     %vrsqrtss\t{%d1, %0|%0, %d1}
--- 19377,19383 ----
    [(set (match_operand:SF 0 "register_operand" "=x,x,x")
  	(unspec:SF [(match_operand:SF 1 "nonimmediate_operand" "0,x,m")]
  		   UNSPEC_RSQRT))]
!   "TARGET_SSE"
    "@
     %vrsqrtss\t{%d1, %0|%0, %d1}
     %vrsqrtss\t{%d1, %0|%0, %d1}
***************
*** 24291,24297 ****
    "TARGET_PREFETCHI && TARGET_64BIT"
  {
    static const char * const patterns[2] = {
!     "prefetchit1\t%0", "prefetchit0\t%0"
    };
  
    int locality = INTVAL (operands[1]);
--- 24297,24303 ----
    "TARGET_PREFETCHI && TARGET_64BIT"
  {
    static const char * const patterns[2] = {
!     "prefetchit1\t%a0", "prefetchit0\t%a0"
    };
  
    int locality = INTVAL (operands[1]);
diff -Nrcpad gcc-13.3.0/gcc/config/i386/prfchiintrin.h gcc-13.4.0/gcc/config/i386/prfchiintrin.h
*** gcc-13.3.0/gcc/config/i386/prfchiintrin.h	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/i386/prfchiintrin.h	Thu Jun  5 16:02:58 2025
***************
*** 37,42 ****
--- 37,43 ----
  #define __DISABLE_PREFETCHI__
  #endif /* __PREFETCHI__ */
  
+ #ifdef __OPTIMIZE__
  extern __inline void
  __attribute__((__gnu_inline__, __always_inline__, __artificial__))
  _m_prefetchit0 (void* __P)
*************** _m_prefetchit1 (void* __P)
*** 50,55 ****
--- 51,64 ----
  {
    __builtin_ia32_prefetchi (__P, 2);
  }
+ #else
+ #define _m_prefetchit0(P)	\
+   __builtin_ia32_prefetchi(P, 3);
+ 
+ #define _m_prefetchit1(P)	\
+   __builtin_ia32_prefetchi(P, 2);
+ 
+ #endif
  
  #ifdef __DISABLE_PREFETCHI__
  #undef __DISABLE_PREFETCHI__
diff -Nrcpad gcc-13.3.0/gcc/config/i386/sse.md gcc-13.4.0/gcc/config/i386/sse.md
*** gcc-13.3.0/gcc/config/i386/sse.md	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/i386/sse.md	Thu Jun  5 16:02:58 2025
***************
*** 2925,2931 ****
  	   (const_string "*")))
     (set_attr "mode" "<ssescalarmode>")])
  
! (define_insn "<sse>_vm<code><mode>3<mask_scalar_name><round_saeonly_scalar_name>"
    [(set (match_operand:VFH_128 0 "register_operand" "=x,v")
  	(vec_merge:VFH_128
  	  (smaxmin:VFH_128
--- 2925,2951 ----
  	   (const_string "*")))
     (set_attr "mode" "<ssescalarmode>")])
  
! (define_expand "<sse>_vm<code><mode>3<mask_scalar_name><round_saeonly_scalar_name>"
!   [(set (match_operand:VFH_128 0 "register_operand")
! 	(vec_merge:VFH_128
! 	  (smaxmin:VFH_128
! 	    (match_operand:VFH_128 1 "register_operand")
! 	    (match_operand:VFH_128 2 "nonimmediate_operand"))
! 	 (match_dup 1)
! 	 (const_int 1)))]
!   "TARGET_SSE"
! {
!   if (!flag_finite_math_only || flag_signed_zeros)
!     {
!       emit_insn (gen_<sse>_ieee_vm<maxmin_float><mode>3<mask_scalar_name><round_saeonly_scalar_name>
! 		 (operands[0], operands[1], operands[2]
! 		  <mask_scalar_operand_arg34>
! 		  <round_saeonly_scalar_mask_arg3>));
!       DONE;
!     }
! })
! 
! (define_insn "*<sse>_vm<code><mode>3<mask_scalar_name><round_saeonly_scalar_name>"
    [(set (match_operand:VFH_128 0 "register_operand" "=x,v")
  	(vec_merge:VFH_128
  	  (smaxmin:VFH_128
***************
*** 2943,2948 ****
--- 2963,2987 ----
     (set_attr "prefix" "<round_saeonly_scalar_prefix>")
     (set_attr "mode" "<ssescalarmode>")])
  
+ (define_insn "<sse>_ieee_vm<ieee_maxmin><mode>3<mask_scalar_name><round_saeonly_scalar_name>"
+   [(set (match_operand:VFH_128 0 "register_operand" "=x,v")
+ 	(vec_merge:VFH_128
+ 	  (unspec:VFH_128
+ 	    [(match_operand:VFH_128 1 "register_operand" "0,v")
+ 	     (match_operand:VFH_128 2 "nonimmediate_operand" "xm,<round_saeonly_scalar_constraint>")]
+ 	    IEEE_MAXMIN)
+ 	 (match_dup 1)
+ 	 (const_int 1)))]
+   "TARGET_SSE"
+   "@
+    <ieee_maxmin><ssescalarmodesuffix>\t{%2, %0|%0, %<iptr>2}
+    v<ieee_maxmin><ssescalarmodesuffix>\t{<round_saeonly_scalar_mask_op3>%2, %1, %0<mask_scalar_operand3>|%0<mask_scalar_operand3>, %1, %<iptr>2<round_saeonly_scalar_mask_op3>}"
+   [(set_attr "isa" "noavx,avx")
+    (set_attr "type" "sse")
+    (set_attr "btver2_sse_attr" "maxmin")
+    (set_attr "prefix" "<round_saeonly_scalar_prefix>")
+    (set_attr "mode" "<ssescalarmode>")])
+ 
  (define_mode_attr addsub_cst [(V4DF "5") (V2DF "1")
                                (V4SF "5") (V8SF "85")])
  
***************
*** 3783,3814 ****
  
  ;; Since vpcmpd implicitly clear the upper bits of dest, transform
  ;; vpcmpd + zero_extend to vpcmpd since the instruction
! (define_insn_and_split "*<avx512>_cmp<V48H_AVX512VL:mode>3_zero_extend<SWI248x:mode>"
!   [(set (match_operand:SWI248x 0 "register_operand")
  	(zero_extend:SWI248x
  	  (unspec:<V48H_AVX512VL:avx512fmaskmode>
! 	    [(match_operand:V48H_AVX512VL 1 "nonimmediate_operand")
! 	     (match_operand:V48H_AVX512VL 2 "nonimmediate_operand")
! 	     (match_operand:SI 3 "const_0_to_7_operand")]
  	    UNSPEC_PCMP)))]
    "TARGET_AVX512F
     && (!VALID_MASK_AVX512BW_MODE (<SWI248x:MODE>mode) || TARGET_AVX512BW)
-    && ix86_pre_reload_split ()
     && (GET_MODE_NUNITS (<V48H_AVX512VL:MODE>mode)
        < GET_MODE_PRECISION (<SWI248x:MODE>mode))"
!   "#"
!   "&& 1"
!   [(set (match_dup 0)
! 	(unspec:<V48H_AVX512VL:avx512fmaskmode>
! 	  [(match_dup 1)
! 	   (match_dup 2)
! 	   (match_dup 3)]
! 	  UNSPEC_PCMP))]
! {
!   operands[1] = force_reg (<V48H_AVX512VL:MODE>mode, operands[1]);
!   operands[0] = lowpart_subreg (<V48H_AVX512VL:avx512fmaskmode>mode,
! 				 operands[0], <SWI248x:MODE>mode);
! }
    [(set_attr "type" "ssecmp")
     (set_attr "length_immediate" "1")
     (set_attr "prefix" "evex")
--- 3822,3840 ----
  
  ;; Since vpcmpd implicitly clear the upper bits of dest, transform
  ;; vpcmpd + zero_extend to vpcmpd since the instruction
! (define_insn "*<avx512>_cmp<V48H_AVX512VL:mode>3_zero_extend<SWI248x:mode>"
!   [(set (match_operand:SWI248x 0 "register_operand" "=k")
  	(zero_extend:SWI248x
  	  (unspec:<V48H_AVX512VL:avx512fmaskmode>
! 	    [(match_operand:V48H_AVX512VL 1 "nonimmediate_operand" "v")
! 	     (match_operand:V48H_AVX512VL 2 "nonimmediate_operand" "vm")
! 	     (match_operand:SI 3 "const_0_to_7_operand" "n")]
  	    UNSPEC_PCMP)))]
    "TARGET_AVX512F
     && (!VALID_MASK_AVX512BW_MODE (<SWI248x:MODE>mode) || TARGET_AVX512BW)
     && (GET_MODE_NUNITS (<V48H_AVX512VL:MODE>mode)
        < GET_MODE_PRECISION (<SWI248x:MODE>mode))"
!   "v<ssecmpintprefix>cmp<ssemodesuffix>\t{%3, %2, %1, %0|%0, %1, %2, %3}"
    [(set_attr "type" "ssecmp")
     (set_attr "length_immediate" "1")
     (set_attr "prefix" "evex")
***************
*** 3836,3856 ****
    "#"
    "&& 1"
    [(set (match_dup 0)
! 	(unspec:<V48H_AVX512VL:avx512fmaskmode>
! 	  [(match_dup 1)
! 	   (match_dup 2)
! 	   (match_dup 3)]
! 	  UNSPEC_PCMP))
!    (set (match_dup 4) (match_dup 0))]
  {
!   operands[1] = force_reg (<V48H_AVX512VL:MODE>mode, operands[1]);
!   operands[0] = lowpart_subreg (<V48H_AVX512VL:avx512fmaskmode>mode,
  				operands[0], <SWI248x:MODE>mode);
! }
!   [(set_attr "type" "ssecmp")
!    (set_attr "length_immediate" "1")
!    (set_attr "prefix" "evex")
!    (set_attr "mode" "<V48H_AVX512VL:sseinsnmode>")])
  
  (define_insn_and_split "*<avx512>_cmp<mode>3"
    [(set (match_operand:<avx512fmaskmode> 0 "register_operand")
--- 3862,3883 ----
    "#"
    "&& 1"
    [(set (match_dup 0)
!     (zero_extend:SWI248x
! 	  (unspec:<V48H_AVX512VL:avx512fmaskmode>
! 	    [(match_dup 1)
! 	     (match_dup 2)
! 	     (match_dup 3)]
! 	    UNSPEC_PCMP)))
!    (set (match_dup 4) (match_dup 5))]
  {
!   operands[5] = lowpart_subreg (<V48H_AVX512VL:avx512fmaskmode>mode,
  				operands[0], <SWI248x:MODE>mode);
!   if (SUBREG_P (operands[5]))
!     {
!       SUBREG_PROMOTED_VAR_P (operands[5]) = 1;
!       SUBREG_PROMOTED_SET (operands[5], 1);
!     }
! })
  
  (define_insn_and_split "*<avx512>_cmp<mode>3"
    [(set (match_operand:<avx512fmaskmode> 0 "register_operand")
***************
*** 3885,3915 ****
     (set_attr "prefix" "evex")
     (set_attr "mode" "<sseinsnmode>")])
  
! (define_insn_and_split "*<avx512>_cmp<VI12_AVX512VL:mode>3_zero_extend<SWI248x:mode>"
!   [(set (match_operand:SWI248x 0 "register_operand")
  	(zero_extend:SWI248x
  	  (unspec:<VI12_AVX512VL:avx512fmaskmode>
! 	    [(match_operand:VI12_AVX512VL 1 "nonimmediate_operand")
! 	     (match_operand:VI12_AVX512VL 2 "nonimmediate_operand")
! 	     (match_operand:SI 3 "const_0_to_7_operand")]
  	    UNSPEC_PCMP)))]
    "TARGET_AVX512BW
!   && ix86_pre_reload_split ()
!   && (GET_MODE_NUNITS (<VI12_AVX512VL:MODE>mode)
!       < GET_MODE_PRECISION (<SWI248x:MODE>mode))"
!   "#"
!   "&& 1"
!   [(set (match_dup 0)
! 	(unspec:<VI12_AVX512VL:avx512fmaskmode>
! 	  [(match_dup 1)
! 	   (match_dup 2)
! 	   (match_dup 3)]
! 	  UNSPEC_PCMP))]
! {
!   operands[1] = force_reg (<VI12_AVX512VL:MODE>mode, operands[1]);
!   operands[0] = lowpart_subreg (<VI12_AVX512VL:avx512fmaskmode>mode,
! 				operands[0], <SWI248x:MODE>mode);
! }
    [(set_attr "type" "ssecmp")
     (set_attr "length_immediate" "1")
     (set_attr "prefix" "evex")
--- 3912,3929 ----
     (set_attr "prefix" "evex")
     (set_attr "mode" "<sseinsnmode>")])
  
! (define_insn "*<avx512>_cmp<VI12_AVX512VL:mode>3_zero_extend<SWI248x:mode>"
!   [(set (match_operand:SWI248x 0 "register_operand" "=k")
  	(zero_extend:SWI248x
  	  (unspec:<VI12_AVX512VL:avx512fmaskmode>
! 	    [(match_operand:VI12_AVX512VL 1 "nonimmediate_operand" "v")
! 	     (match_operand:VI12_AVX512VL 2 "nonimmediate_operand" "vm")
! 	     (match_operand:SI 3 "const_0_to_7_operand" "n")]
  	    UNSPEC_PCMP)))]
    "TARGET_AVX512BW
!    && (GET_MODE_NUNITS (<VI12_AVX512VL:MODE>mode)
!        < GET_MODE_PRECISION (<SWI248x:MODE>mode))"
!   "vpcmp<ssemodesuffix>\t{%3, %2, %1, %0|%0, %1, %2, %3}"
    [(set_attr "type" "ssecmp")
     (set_attr "length_immediate" "1")
     (set_attr "prefix" "evex")
***************
*** 3936,3951 ****
    "#"
    "&& 1"
    [(set (match_dup 0)
! 	(unspec:<VI12_AVX512VL:avx512fmaskmode>
! 	  [(match_dup 1)
! 	   (match_dup 2)
! 	   (match_dup 3)]
! 	  UNSPEC_PCMP))
!    (set (match_dup 4) (match_dup 0))]
  {
!   operands[1] = force_reg (<VI12_AVX512VL:MODE>mode, operands[1]);
!   operands[0] = lowpart_subreg (<VI12_AVX512VL:avx512fmaskmode>mode,
  				operands[0], <SWI248x:MODE>mode);
  }
    [(set_attr "type" "ssecmp")
     (set_attr "length_immediate" "1")
--- 3950,3970 ----
    "#"
    "&& 1"
    [(set (match_dup 0)
! 	(zero_extend:SWI248x
! 	  (unspec:<VI12_AVX512VL:avx512fmaskmode>
! 	   [(match_dup 1)
! 		(match_dup 2)
! 		(match_dup 3)]
! 	   UNSPEC_PCMP)))
!    (set (match_dup 4) (match_dup 5))]
  {
!   operands[5] = lowpart_subreg (<VI12_AVX512VL:avx512fmaskmode>mode,
  				operands[0], <SWI248x:MODE>mode);
+   if (SUBREG_P (operands[5]))
+     {
+       SUBREG_PROMOTED_VAR_P (operands[5]) = 1;
+       SUBREG_PROMOTED_SET (operands[5], 1);
+     }
  }
    [(set_attr "type" "ssecmp")
     (set_attr "length_immediate" "1")
***************
*** 4004,4034 ****
     (set_attr "prefix" "evex")
     (set_attr "mode" "<sseinsnmode>")])
  
! (define_insn_and_split "*<avx512>_ucmp<VI12_AVX512VL:mode>3_zero_extend<SWI248x:mode>"
!   [(set (match_operand:SWI248x 0 "register_operand")
  	(zero_extend:SWI248x
  	  (unspec:<VI12_AVX512VL:avx512fmaskmode>
! 	    [(match_operand:VI12_AVX512VL 1 "nonimmediate_operand")
! 	     (match_operand:VI12_AVX512VL 2 "nonimmediate_operand")
! 	     (match_operand:SI 3 "const_0_to_7_operand")]
  	    UNSPEC_UNSIGNED_PCMP)))]
    "TARGET_AVX512BW
-   && ix86_pre_reload_split ()
    && (GET_MODE_NUNITS (<VI12_AVX512VL:MODE>mode)
        < GET_MODE_PRECISION (<SWI248x:MODE>mode))"
!   "#"
!   "&& 1"
!   [(set (match_dup 0)
! 	(unspec:<VI12_AVX512VL:avx512fmaskmode>
! 	  [(match_dup 1)
! 	   (match_dup 2)
! 	   (match_dup 3)]
! 	  UNSPEC_UNSIGNED_PCMP))]
! {
!   operands[1] = force_reg (<VI12_AVX512VL:MODE>mode, operands[1]);
!   operands[0] = lowpart_subreg (<VI12_AVX512VL:avx512fmaskmode>mode,
! 				operands[0], <SWI248x:MODE>mode);
! }
    [(set_attr "type" "ssecmp")
     (set_attr "length_immediate" "1")
     (set_attr "prefix" "evex")
--- 4023,4040 ----
     (set_attr "prefix" "evex")
     (set_attr "mode" "<sseinsnmode>")])
  
! (define_insn "*<avx512>_ucmp<VI12_AVX512VL:mode>3_zero_extend<SWI248x:mode>"
!   [(set (match_operand:SWI248x 0 "register_operand" "=k")
  	(zero_extend:SWI248x
  	  (unspec:<VI12_AVX512VL:avx512fmaskmode>
! 	    [(match_operand:VI12_AVX512VL 1 "nonimmediate_operand" "v")
! 	     (match_operand:VI12_AVX512VL 2 "nonimmediate_operand" "vm")
! 	     (match_operand:SI 3 "const_0_to_7_operand" "n")]
  	    UNSPEC_UNSIGNED_PCMP)))]
    "TARGET_AVX512BW
    && (GET_MODE_NUNITS (<VI12_AVX512VL:MODE>mode)
        < GET_MODE_PRECISION (<SWI248x:MODE>mode))"
!   "vpcmpu<ssemodesuffix>\t{%3, %2, %1, %0|%0, %1, %2, %3}"
    [(set_attr "type" "ssecmp")
     (set_attr "length_immediate" "1")
     (set_attr "prefix" "evex")
***************
*** 4056,4071 ****
    "#"
    "&& 1"
    [(set (match_dup 0)
! 	(unspec:<VI12_AVX512VL:avx512fmaskmode>
! 	  [(match_dup 1)
! 	   (match_dup 2)
! 	   (match_dup 3)]
! 	  UNSPEC_UNSIGNED_PCMP))
!    (set (match_dup 4) (match_dup 0))]
  {
!   operands[1] = force_reg (<VI12_AVX512VL:MODE>mode, operands[1]);
!   operands[0] = lowpart_subreg (<VI12_AVX512VL:avx512fmaskmode>mode,
  				operands[0], <SWI248x:MODE>mode);
  }
    [(set_attr "type" "ssecmp")
     (set_attr "length_immediate" "1")
--- 4062,4082 ----
    "#"
    "&& 1"
    [(set (match_dup 0)
! 	(zero_extend:SWI248x
! 	 (unspec:<VI12_AVX512VL:avx512fmaskmode>
! 	   [(match_dup 1)
! 		(match_dup 2)
! 		(match_dup 3)]
! 	   UNSPEC_UNSIGNED_PCMP)))
!    (set (match_dup 4) (match_dup 5))]
  {
!   operands[5] = lowpart_subreg (<VI12_AVX512VL:avx512fmaskmode>mode,
  				operands[0], <SWI248x:MODE>mode);
+   if (SUBREG_P (operands[5]))
+     {
+       SUBREG_PROMOTED_VAR_P (operands[5]) = 1;
+       SUBREG_PROMOTED_SET (operands[5], 1);
+     }
  }
    [(set_attr "type" "ssecmp")
     (set_attr "length_immediate" "1")
***************
*** 4102,4133 ****
     (set_attr "prefix" "evex")
     (set_attr "mode" "<sseinsnmode>")])
  
! (define_insn_and_split "*<avx512>_ucmp<VI48_AVX512VL:mode>3_zero_extend<SWI248x:mode>"
!   [(set (match_operand:SWI248x 0 "register_operand")
  	(zero_extend:SWI248x
  	  (unspec:<VI48_AVX512VL:avx512fmaskmode>
! 	    [(match_operand:VI48_AVX512VL 1 "nonimmediate_operand")
! 	     (match_operand:VI48_AVX512VL 2 "nonimmediate_operand")
! 	     (match_operand:SI 3 "const_0_to_7_operand")]
  	    UNSPEC_UNSIGNED_PCMP)))]
    "TARGET_AVX512F
     && (!VALID_MASK_AVX512BW_MODE (<SWI248x:MODE>mode) || TARGET_AVX512BW)
-    && ix86_pre_reload_split ()
     && (GET_MODE_NUNITS (<VI48_AVX512VL:MODE>mode)
        < GET_MODE_PRECISION (<SWI248x:MODE>mode))"
!   "#"
!   "&& 1"
!   [(set (match_dup 0)
! 	(unspec:<VI48_AVX512VL:avx512fmaskmode>
! 	  [(match_dup 1)
! 	   (match_dup 2)
! 	   (match_dup 3)]
! 	  UNSPEC_UNSIGNED_PCMP))]
! {
!   operands[1] = force_reg (<VI48_AVX512VL:MODE>mode, operands[1]);
!   operands[0] = lowpart_subreg (<VI48_AVX512VL:avx512fmaskmode>mode,
! 				operands[0], <SWI248x:MODE>mode);
! }
    [(set_attr "type" "ssecmp")
     (set_attr "length_immediate" "1")
     (set_attr "prefix" "evex")
--- 4113,4131 ----
     (set_attr "prefix" "evex")
     (set_attr "mode" "<sseinsnmode>")])
  
! (define_insn "*<avx512>_ucmp<VI48_AVX512VL:mode>3_zero_extend<SWI248x:mode>"
!   [(set (match_operand:SWI248x 0 "register_operand" "=k")
  	(zero_extend:SWI248x
  	  (unspec:<VI48_AVX512VL:avx512fmaskmode>
! 	    [(match_operand:VI48_AVX512VL 1 "nonimmediate_operand" "v")
! 	     (match_operand:VI48_AVX512VL 2 "nonimmediate_operand" "vm")
! 	     (match_operand:SI 3 "const_0_to_7_operand" "n")]
  	    UNSPEC_UNSIGNED_PCMP)))]
    "TARGET_AVX512F
     && (!VALID_MASK_AVX512BW_MODE (<SWI248x:MODE>mode) || TARGET_AVX512BW)
     && (GET_MODE_NUNITS (<VI48_AVX512VL:MODE>mode)
        < GET_MODE_PRECISION (<SWI248x:MODE>mode))"
!   "vpcmpu<ssemodesuffix>\t{%3, %2, %1, %0|%0, %1, %2, %3}"
    [(set_attr "type" "ssecmp")
     (set_attr "length_immediate" "1")
     (set_attr "prefix" "evex")
***************
*** 4155,4170 ****
    "#"
    "&& 1"
    [(set (match_dup 0)
! 	(unspec:<VI48_AVX512VL:avx512fmaskmode>
! 	  [(match_dup 1)
! 	   (match_dup 2)
! 	   (match_dup 3)]
! 	  UNSPEC_UNSIGNED_PCMP))
!    (set (match_dup 4) (match_dup 0))]
  {
!   operands[1] = force_reg (<VI48_AVX512VL:MODE>mode, operands[1]);
!   operands[0] = lowpart_subreg (<VI48_AVX512VL:avx512fmaskmode>mode,
  				operands[0], <SWI248x:MODE>mode);
  }
    [(set_attr "type" "ssecmp")
     (set_attr "length_immediate" "1")
--- 4153,4173 ----
    "#"
    "&& 1"
    [(set (match_dup 0)
! 	(zero_extend:SWI248x
! 	 (unspec:<VI48_AVX512VL:avx512fmaskmode>
! 	   [(match_dup 1)
! 		(match_dup 2)
! 		(match_dup 3)]
! 	   UNSPEC_UNSIGNED_PCMP)))
!    (set (match_dup 4) (match_dup 5))]
  {
!   operands[5] = lowpart_subreg (<VI48_AVX512VL:avx512fmaskmode>mode,
  				operands[0], <SWI248x:MODE>mode);
+   if (SUBREG_P (operands[5]))
+     {
+       SUBREG_PROMOTED_VAR_P (operands[5]) = 1;
+       SUBREG_PROMOTED_SET (operands[5], 1);
+     }
  }
    [(set_attr "type" "ssecmp")
     (set_attr "length_immediate" "1")
***************
*** 9285,9291 ****
         (match_dup 2)
         (parallel [(const_int 0) (const_int 1)]))))]
    "TARGET_SSE2"
!   "operands[2] = gen_reg_rtx (V4SFmode);")
  
  (define_expand "vec_unpacks_hi_v8sf"
    [(set (match_dup 2)
--- 9288,9297 ----
         (match_dup 2)
         (parallel [(const_int 0) (const_int 1)]))))]
    "TARGET_SSE2"
! {
!   operands[2] = gen_reg_rtx (V4SFmode);
!   emit_move_insn (operands[2], CONST0_RTX (V4SFmode));
! })
  
  (define_expand "vec_unpacks_hi_v8sf"
    [(set (match_dup 2)
***************
*** 14074,14080 ****
     (set_attr "prefix" "evex")
     (set_attr "mode" "TI")])
  
! (define_insn "*avx512vl_<code>v2div2qi2_mask_store_1"
    [(set (match_operand:V2QI 0 "memory_operand" "=m")
  	  (vec_merge:V2QI
  	    (any_truncate:V2QI
--- 14080,14086 ----
     (set_attr "prefix" "evex")
     (set_attr "mode" "TI")])
  
! (define_insn "avx512vl_<code>v2div2qi2_mask_store_1"
    [(set (match_operand:V2QI 0 "memory_operand" "=m")
  	  (vec_merge:V2QI
  	    (any_truncate:V2QI
***************
*** 14088,14115 ****
     (set_attr "prefix" "evex")
     (set_attr "mode" "TI")])
  
! (define_insn_and_split "avx512vl_<code>v2div2qi2_mask_store_2"
!   [(set (match_operand:HI 0 "memory_operand")
! 	(subreg:HI
! 	  (vec_merge:V2QI
! 	    (any_truncate:V2QI
! 	      (match_operand:V2DI 1 "register_operand"))
! 	    (vec_select:V2QI
! 	      (subreg:V4QI
! 		(vec_concat:V2HI
! 		  (match_dup 0)
! 		  (const_int 0)) 0)
! 	      (parallel [(const_int 0) (const_int 1)]))
! 	    (match_operand:QI 2 "register_operand")) 0))]
!   "TARGET_AVX512VL && ix86_pre_reload_split ()"
!   "#"
!   "&& 1"
!   [(set (match_dup 0)
! 	(vec_merge:V2QI
! 	  (any_truncate:V2QI (match_dup 1))
! 	  (match_dup 0)
! 	  (match_dup 2)))]
!   "operands[0] = adjust_address_nv (operands[0], V2QImode, 0);")
  
  (define_insn "*avx512vl_<code><mode>v4qi2_store_1"
    [(set (match_operand:V4QI 0 "memory_operand" "=m")
--- 14094,14112 ----
     (set_attr "prefix" "evex")
     (set_attr "mode" "TI")])
  
! (define_expand "avx512vl_<code>v2div2qi2_mask_store_2"
!   [(match_operand:HI 0 "memory_operand")
!    (any_truncate:V2QI
!      (match_operand:V2DI 1 "register_operand"))
!    (match_operand:QI 2 "register_operand")]
!   "TARGET_AVX512VL"
! {
!   operands[0] = adjust_address_nv (operands[0], V2QImode, 0);
!   emit_insn (gen_avx512vl_<code>v2div2qi2_mask_store_1 (operands[0],
! 							operands[1],
! 							operands[2]));
!   DONE;
! })
  
  (define_insn "*avx512vl_<code><mode>v4qi2_store_1"
    [(set (match_operand:V4QI 0 "memory_operand" "=m")
***************
*** 14178,14184 ****
     (set_attr "prefix" "evex")
     (set_attr "mode" "TI")])
  
! (define_insn "*avx512vl_<code><mode>v4qi2_mask_store_1"
    [(set (match_operand:V4QI 0 "memory_operand" "=m")
  	(vec_merge:V4QI
  	  (any_truncate:V4QI
--- 14175,14181 ----
     (set_attr "prefix" "evex")
     (set_attr "mode" "TI")])
  
! (define_insn "avx512vl_<code><mode>v4qi2_mask_store_1"
    [(set (match_operand:V4QI 0 "memory_operand" "=m")
  	(vec_merge:V4QI
  	  (any_truncate:V4QI
***************
*** 14192,14220 ****
     (set_attr "prefix" "evex")
     (set_attr "mode" "TI")])
  
! (define_insn_and_split "avx512vl_<code><mode>v4qi2_mask_store_2"
!   [(set (match_operand:SI 0 "memory_operand")
! 	(subreg:SI
! 	  (vec_merge:V4QI
! 	    (any_truncate:V4QI
! 	      (match_operand:VI4_128_8_256 1 "register_operand"))
! 	    (vec_select:V4QI
! 	      (subreg:V8QI
! 		(vec_concat:V2SI
! 		  (match_dup 0)
! 		  (const_int 0)) 0)
! 	      (parallel [(const_int 0) (const_int 1)
! 			 (const_int 2) (const_int 3)]))
! 	    (match_operand:QI 2 "register_operand")) 0))]
!   "TARGET_AVX512VL && ix86_pre_reload_split ()"
!   "#"
!   "&& 1"
!   [(set (match_dup 0)
! 	(vec_merge:V4QI
! 	  (any_truncate:V4QI (match_dup 1))
! 	  (match_dup 0)
! 	  (match_dup 2)))]
!   "operands[0] = adjust_address_nv (operands[0], V4QImode, 0);")
  
  (define_mode_iterator VI2_128_BW_4_256
    [(V8HI "TARGET_AVX512BW") V8SI])
--- 14189,14207 ----
     (set_attr "prefix" "evex")
     (set_attr "mode" "TI")])
  
! (define_expand "avx512vl_<code><mode>v4qi2_mask_store_2"
!   [(match_operand:SI 0 "memory_operand")
!    (any_truncate:V4QI
!      (match_operand:VI4_128_8_256 1 "register_operand"))
!    (match_operand:QI 2 "register_operand")]
!   "TARGET_AVX512VL"
! {
!   operands[0] = adjust_address_nv (operands[0], V4QImode, 0);
!   emit_insn (gen_avx512vl_<code><mode>v4qi2_mask_store_1 (operands[0],
! 							  operands[1],
! 							  operands[2]));
!   DONE;
! })
  
  (define_mode_iterator VI2_128_BW_4_256
    [(V8HI "TARGET_AVX512BW") V8SI])
***************
*** 14286,14292 ****
     (set_attr "prefix" "evex")
     (set_attr "mode" "TI")])
  
! (define_insn "*avx512vl_<code><mode>v8qi2_mask_store_1"
    [(set (match_operand:V8QI 0 "memory_operand" "=m")
  	(vec_merge:V8QI
  	  (any_truncate:V8QI
--- 14273,14279 ----
     (set_attr "prefix" "evex")
     (set_attr "mode" "TI")])
  
! (define_insn "avx512vl_<code><mode>v8qi2_mask_store_1"
    [(set (match_operand:V8QI 0 "memory_operand" "=m")
  	(vec_merge:V8QI
  	  (any_truncate:V8QI
***************
*** 14300,14330 ****
     (set_attr "prefix" "evex")
     (set_attr "mode" "TI")])
  
! (define_insn_and_split "avx512vl_<code><mode>v8qi2_mask_store_2"
!   [(set (match_operand:DI 0 "memory_operand")
! 	(subreg:DI
! 	  (vec_merge:V8QI
! 	    (any_truncate:V8QI
! 	      (match_operand:VI2_128_BW_4_256 1 "register_operand"))
! 	    (vec_select:V8QI
! 	      (subreg:V16QI
! 		(vec_concat:V2DI
! 		  (match_dup 0)
! 		  (const_int 0)) 0)
! 	      (parallel [(const_int 0) (const_int 1)
! 			 (const_int 2) (const_int 3)
! 			 (const_int 4) (const_int 5)
! 			 (const_int 6) (const_int 7)]))
! 	    (match_operand:QI 2 "register_operand")) 0))]
!   "TARGET_AVX512VL && ix86_pre_reload_split ()"
!   "#"
!   "&& 1"
!   [(set (match_dup 0)
! 	(vec_merge:V8QI
! 	  (any_truncate:V8QI (match_dup 1))
! 	  (match_dup 0)
! 	  (match_dup 2)))]
!   "operands[0] = adjust_address_nv (operands[0], V8QImode, 0);")
  
  (define_mode_iterator PMOV_SRC_MODE_4 [V4DI V2DI V4SI])
  (define_mode_attr pmov_dst_4
--- 14287,14305 ----
     (set_attr "prefix" "evex")
     (set_attr "mode" "TI")])
  
! (define_expand "avx512vl_<code><mode>v8qi2_mask_store_2"
!   [(match_operand:DI 0 "memory_operand")
!    (any_truncate:V8QI
!      (match_operand:VI2_128_BW_4_256 1 "register_operand"))
!    (match_operand:QI 2 "register_operand")]
!   "TARGET_AVX512VL"
! {
!   operands[0] = adjust_address_nv (operands[0], V8QImode, 0);
!   emit_insn (gen_avx512vl_<code><mode>v8qi2_mask_store_1 (operands[0],
! 							  operands[1],
! 							  operands[2]));
!   DONE;
! })
  
  (define_mode_iterator PMOV_SRC_MODE_4 [V4DI V2DI V4SI])
  (define_mode_attr pmov_dst_4
***************
*** 14446,14452 ****
     (set_attr "prefix" "evex")
     (set_attr "mode" "TI")])
  
! (define_insn "*avx512vl_<code><mode>v4hi2_mask_store_1"
    [(set (match_operand:V4HI 0 "memory_operand" "=m")
  	(vec_merge:V4HI
  	  (any_truncate:V4HI
--- 14421,14427 ----
     (set_attr "prefix" "evex")
     (set_attr "mode" "TI")])
  
! (define_insn "avx512vl_<code><mode>v4hi2_mask_store_1"
    [(set (match_operand:V4HI 0 "memory_operand" "=m")
  	(vec_merge:V4HI
  	  (any_truncate:V4HI
***************
*** 14464,14493 ****
     (set_attr "prefix" "evex")
     (set_attr "mode" "TI")])
  
! (define_insn_and_split "avx512vl_<code><mode>v4hi2_mask_store_2"
!   [(set (match_operand:DI 0 "memory_operand")
! 	(subreg:DI
! 	  (vec_merge:V4HI
! 	    (any_truncate:V4HI
! 	      (match_operand:VI4_128_8_256 1 "register_operand"))
! 	    (vec_select:V4HI
! 	      (subreg:V8HI
! 		(vec_concat:V2DI
! 		  (match_dup 0)
! 		  (const_int 0)) 0)
! 	      (parallel [(const_int 0) (const_int 1)
! 			 (const_int 2) (const_int 3)]))
! 	    (match_operand:QI 2 "register_operand")) 0))]
!   "TARGET_AVX512VL && ix86_pre_reload_split ()"
!   "#"
!   "&& 1"
!   [(set (match_dup 0)
! 	(vec_merge:V4HI
! 	  (any_truncate:V4HI (match_dup 1))
! 	  (match_dup 0)
! 	  (match_dup 2)))]
!   "operands[0] = adjust_address_nv (operands[0], V4HImode, 0);")
! 
  
  (define_insn "*avx512vl_<code>v2div2hi2_store_1"
    [(set (match_operand:V2HI 0 "memory_operand" "=m")
--- 14439,14457 ----
     (set_attr "prefix" "evex")
     (set_attr "mode" "TI")])
  
! (define_expand "avx512vl_<code><mode>v4hi2_mask_store_2"
!   [(match_operand:DI 0 "memory_operand")
!    (any_truncate:V4HI
!      (match_operand:VI4_128_8_256 1 "register_operand"))
!    (match_operand:QI 2 "register_operand")]
!   "TARGET_AVX512VL"
! {
!   operands[0] = adjust_address_nv (operands[0], V4HImode, 0);
!   emit_insn (gen_avx512vl_<code><mode>v4hi2_mask_store_1 (operands[0],
! 							  operands[1],
! 							  operands[2]));
!   DONE;
! })
  
  (define_insn "*avx512vl_<code>v2div2hi2_store_1"
    [(set (match_operand:V2HI 0 "memory_operand" "=m")
***************
*** 14548,14554 ****
     (set_attr "prefix" "evex")
     (set_attr "mode" "TI")])
  
! (define_insn "*avx512vl_<code>v2div2hi2_mask_store_1"
    [(set (match_operand:V2HI 0 "memory_operand" "=m")
  	(vec_merge:V2HI
  	  (any_truncate:V2HI
--- 14512,14518 ----
     (set_attr "prefix" "evex")
     (set_attr "mode" "TI")])
  
! (define_insn "avx512vl_<code>v2div2hi2_mask_store_1"
    [(set (match_operand:V2HI 0 "memory_operand" "=m")
  	(vec_merge:V2HI
  	  (any_truncate:V2HI
***************
*** 14562,14589 ****
     (set_attr "prefix" "evex")
     (set_attr "mode" "TI")])
  
! (define_insn_and_split "avx512vl_<code>v2div2hi2_mask_store_2"
!   [(set (match_operand:SI 0 "memory_operand")
! 	(subreg:SI
! 	  (vec_merge:V2HI
! 	    (any_truncate:V2HI
! 	      (match_operand:V2DI 1 "register_operand"))
! 	    (vec_select:V2HI
! 	      (subreg:V4HI
! 		(vec_concat:V2SI
! 		  (match_dup 0)
! 		  (const_int 0)) 0)
! 	      (parallel [(const_int 0) (const_int 1)]))
! 	    (match_operand:QI 2 "register_operand")) 0))]
!   "TARGET_AVX512VL && ix86_pre_reload_split ()"
!   "#"
!   "&& 1"
!   [(set (match_dup 0)
! 	(vec_merge:V2HI
! 	  (any_truncate:V2HI (match_dup 1))
! 	  (match_dup 0)
! 	  (match_dup 2)))]
!   "operands[0] = adjust_address_nv (operands[0], V2HImode, 0);")
  
  (define_expand "truncv2div2si2"
    [(set (match_operand:V2SI 0 "register_operand")
--- 14526,14544 ----
     (set_attr "prefix" "evex")
     (set_attr "mode" "TI")])
  
! (define_expand "avx512vl_<code>v2div2hi2_mask_store_2"
!   [(match_operand:SI 0 "memory_operand")
!    (any_truncate:V2HI
!     (match_operand:V2DI 1 "register_operand"))
!    (match_operand:QI 2 "register_operand")]
!   "TARGET_AVX512VL"
! {
!   operands[0] = adjust_address_nv (operands[0], V2HImode, 0);
!   emit_insn (gen_avx512vl_<code>v2div2hi2_mask_store_1 (operands[0],
! 							operands[1],
! 							operands[2]));
!   DONE;
! })
  
  (define_expand "truncv2div2si2"
    [(set (match_operand:V2SI 0 "register_operand")
***************
*** 14691,14697 ****
     (set_attr "prefix" "evex")
     (set_attr "mode" "TI")])
  
! (define_insn "*avx512vl_<code>v2div2si2_mask_store_1"
    [(set (match_operand:V2SI 0 "memory_operand" "=m")
  	(vec_merge:V2SI
  	  (any_truncate:V2SI
--- 14646,14652 ----
     (set_attr "prefix" "evex")
     (set_attr "mode" "TI")])
  
! (define_insn "avx512vl_<code>v2div2si2_mask_store_1"
    [(set (match_operand:V2SI 0 "memory_operand" "=m")
  	(vec_merge:V2SI
  	  (any_truncate:V2SI
***************
*** 14705,14732 ****
     (set_attr "prefix" "evex")
     (set_attr "mode" "TI")])
  
! (define_insn_and_split "avx512vl_<code>v2div2si2_mask_store_2"
!   [(set (match_operand:DI 0 "memory_operand")
! 	(subreg:DI
! 	  (vec_merge:V2SI
! 	    (any_truncate:V2SI
! 	      (match_operand:V2DI 1 "register_operand"))
! 	    (vec_select:V2SI
! 	      (subreg:V4SI
! 		(vec_concat:V2DI
! 		  (match_dup 0)
! 		  (const_int 0)) 0)
! 	      (parallel [(const_int 0) (const_int 1)]))
! 	    (match_operand:QI 2 "register_operand")) 0))]
!   "TARGET_AVX512VL && ix86_pre_reload_split ()"
!   "#"
!   "&& 1"
!   [(set (match_dup 0)
!   	(vec_merge:V2SI
! 	  (any_truncate:V2SI (match_dup 1))
! 	  (match_dup 0)
! 	  (match_dup 2)))]
!   "operands[0] = adjust_address_nv (operands[0], V2SImode, 0);")
  
  (define_expand "truncv8div8qi2"
    [(set (match_operand:V8QI 0 "register_operand")
--- 14660,14678 ----
     (set_attr "prefix" "evex")
     (set_attr "mode" "TI")])
  
! (define_expand "avx512vl_<code>v2div2si2_mask_store_2"
!   [(match_operand:DI 0 "memory_operand")
!    (any_truncate:V2SI
!     (match_operand:V2DI 1 "register_operand"))
!    (match_operand:QI 2 "register_operand")]
!   "TARGET_AVX512VL"
! {
!   operands[0] = adjust_address_nv (operands[0], V2SImode, 0);
!   emit_insn (gen_avx512vl_<code>v2div2si2_mask_store_1 (operands[0],
! 							operands[1],
! 							operands[2]));
!   DONE;
! })
  
  (define_expand "truncv8div8qi2"
    [(set (match_operand:V8QI 0 "register_operand")
***************
*** 14825,14831 ****
     (set_attr "prefix" "evex")
     (set_attr "mode" "TI")])
  
! (define_insn "*avx512f_<code>v8div16qi2_mask_store_1"
    [(set (match_operand:V8QI 0 "memory_operand" "=m")
  	(vec_merge:V8QI
  	  (any_truncate:V8QI
--- 14771,14777 ----
     (set_attr "prefix" "evex")
     (set_attr "mode" "TI")])
  
! (define_insn "avx512f_<code>v8div16qi2_mask_store_1"
    [(set (match_operand:V8QI 0 "memory_operand" "=m")
  	(vec_merge:V8QI
  	  (any_truncate:V8QI
***************
*** 14839,14869 ****
     (set_attr "prefix" "evex")
     (set_attr "mode" "TI")])
  
! (define_insn_and_split "avx512f_<code>v8div16qi2_mask_store_2"
!   [(set (match_operand:DI 0 "memory_operand")
! 	(subreg:DI
! 	  (vec_merge:V8QI
! 	  (any_truncate:V8QI
! 	    (match_operand:V8DI 1 "register_operand"))
! 	  (vec_select:V8QI
! 	    (subreg:V16QI
! 	      (vec_concat:V2DI
! 		(match_dup 0)
! 		(const_int 0)) 0)
! 	    (parallel [(const_int 0) (const_int 1)
! 		       (const_int 2) (const_int 3)
! 		       (const_int 4) (const_int 5)
! 		       (const_int 6) (const_int 7)]))
! 	  (match_operand:QI 2 "register_operand")) 0))]
!   "TARGET_AVX512F && ix86_pre_reload_split ()"
!   "#"
!   "&& 1"
!   [(set (match_dup 0)
! 	(vec_merge:V8QI
! 	  (any_truncate:V8QI (match_dup 1))
! 	  (match_dup 0)
! 	  (match_dup 2)))]
!   "operands[0] = adjust_address_nv (operands[0], V8QImode, 0);")
  
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;
--- 14785,14803 ----
     (set_attr "prefix" "evex")
     (set_attr "mode" "TI")])
  
! (define_expand "avx512f_<code>v8div16qi2_mask_store_2"
!   [(match_operand:DI 0 "memory_operand")
!    (any_truncate:V8QI
!     (match_operand:V8DI 1 "register_operand"))
!    (match_operand:QI 2 "register_operand")]
!   "TARGET_AVX512F"
! {
!   operands[0] = adjust_address_nv (operands[0], V8QImode, 0);
!   emit_insn (gen_avx512f_<code>v8div16qi2_mask_store_1 (operands[0],
! 							operands[1],
! 							operands[2]));
!   DONE;
! })
  
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;
***************
*** 16267,16278 ****
  })
  
  (define_expand "<code><mode>3_mask"
!   [(set (match_operand:VI48_AVX512VL 0 "register_operand")
! 	(vec_merge:VI48_AVX512VL
! 	  (maxmin:VI48_AVX512VL
! 	    (match_operand:VI48_AVX512VL 1 "nonimmediate_operand")
! 	    (match_operand:VI48_AVX512VL 2 "nonimmediate_operand"))
! 	  (match_operand:VI48_AVX512VL 3 "nonimm_or_0_operand")
  	  (match_operand:<avx512fmaskmode> 4 "register_operand")))]
    "TARGET_AVX512F"
    "ix86_fixup_binary_operands_no_copy (<CODE>, <MODE>mode, operands);")
--- 16201,16212 ----
  })
  
  (define_expand "<code><mode>3_mask"
!   [(set (match_operand:VI1248_AVX512VLBW 0 "register_operand")
! 	(vec_merge:VI1248_AVX512VLBW
! 	  (maxmin:VI1248_AVX512VLBW
! 	    (match_operand:VI1248_AVX512VLBW 1 "nonimmediate_operand")
! 	    (match_operand:VI1248_AVX512VLBW 2 "nonimmediate_operand"))
! 	  (match_operand:VI1248_AVX512VLBW 3 "nonimm_or_0_operand")
  	  (match_operand:<avx512fmaskmode> 4 "register_operand")))]
    "TARGET_AVX512F"
    "ix86_fixup_binary_operands_no_copy (<CODE>, <MODE>mode, operands);")
***************
*** 16289,16300 ****
     (set_attr "prefix" "maybe_evex")
     (set_attr "mode" "<sseinsnmode>")])
  
! (define_insn "<mask_codefor><code><mode>3<mask_name>"
    [(set (match_operand:VI12_AVX512VL 0 "register_operand" "=v")
          (maxmin:VI12_AVX512VL
!           (match_operand:VI12_AVX512VL 1 "register_operand" "v")
            (match_operand:VI12_AVX512VL 2 "nonimmediate_operand" "vm")))]
!   "TARGET_AVX512BW"
    "vp<maxmin_int><ssemodesuffix>\t{%2, %1, %0<mask_operand3>|%0<mask_operand3>, %1, %2}"
    [(set_attr "type" "sseiadd")
     (set_attr "prefix" "evex")
--- 16223,16234 ----
     (set_attr "prefix" "maybe_evex")
     (set_attr "mode" "<sseinsnmode>")])
  
! (define_insn "*avx512bw_<code><mode>3<mask_name>"
    [(set (match_operand:VI12_AVX512VL 0 "register_operand" "=v")
          (maxmin:VI12_AVX512VL
!           (match_operand:VI12_AVX512VL 1 "nonimmediate_operand" "%v")
            (match_operand:VI12_AVX512VL 2 "nonimmediate_operand" "vm")))]
!   "TARGET_AVX512BW && !(MEM_P (operands[1]) && MEM_P (operands[2]))"
    "vp<maxmin_int><ssemodesuffix>\t{%2, %1, %0<mask_operand3>|%0<mask_operand3>, %1, %2}"
    [(set_attr "type" "sseiadd")
     (set_attr "prefix" "evex")
diff -Nrcpad gcc-13.3.0/gcc/config/i386/subst.md gcc-13.4.0/gcc/config/i386/subst.md
*** gcc-13.3.0/gcc/config/i386/subst.md	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/i386/subst.md	Thu Jun  5 16:02:58 2025
***************
*** 345,350 ****
--- 345,352 ----
  (define_subst_attr "mask_scalarcz_operand4" "mask_scalarcz" "" "%{%5%}%N4")
  (define_subst_attr "mask_scalar4_dest_false_dep_for_glc_cond" "mask_scalar" "1" "operands[4] == CONST0_RTX(<MODE>mode)")
  (define_subst_attr "mask_scalarc_dest_false_dep_for_glc_cond" "mask_scalarc" "1" "operands[3] == CONST0_RTX(V8HFmode)")
+ (define_subst_attr "mask_scalar_operand_arg34" "mask_scalar" "" ", operands[3], operands[4]")
+ (define_subst_attr "mask_scalar_expand_op3" "mask_scalar" "3" "5")
  
  (define_subst "mask_scalar"
    [(set (match_operand:SUBST_V 0)
***************
*** 452,457 ****
--- 454,460 ----
  (define_subst_attr "round_saeonly_scalar_constraint" "round_saeonly_scalar" "vm" "v")
  (define_subst_attr "round_saeonly_scalar_prefix" "round_saeonly_scalar" "vex" "evex")
  (define_subst_attr "round_saeonly_scalar_nimm_predicate" "round_saeonly_scalar" "nonimmediate_operand" "register_operand")
+ (define_subst_attr "round_saeonly_scalar_mask_arg3" "round_saeonly_scalar" "" ", operands[<mask_scalar_expand_op3>]")
  
  (define_subst "round_saeonly_scalar"
    [(set (match_operand:SUBST_V 0)
diff -Nrcpad gcc-13.3.0/gcc/config/i386/x86-tune-costs.h gcc-13.4.0/gcc/config/i386/x86-tune-costs.h
*** gcc-13.3.0/gcc/config/i386/x86-tune-costs.h	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/i386/x86-tune-costs.h	Thu Jun  5 16:02:58 2025
*************** struct processor_costs znver4_cost = {
*** 1924,1931 ****
  					   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, 6, 6, 6},			/* cost of unaligned loads.  */
!   {8, 8, 8, 8, 8},			/* cost of unaligned stores.  */
    2, 2, 2,				/* cost of moving XMM,YMM,ZMM
  					   register.  */
    6,					/* cost of moving SSE register to integer.  */
--- 1924,1931 ----
  					   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, 2,				/* cost of moving XMM,YMM,ZMM
  					   register.  */
    6,					/* cost of moving SSE register to integer.  */
*************** struct processor_costs znver4_cost = {
*** 1977,1982 ****
--- 1977,2135 ----
    znver2_memcpy,
    znver2_memset,
    COSTS_N_INSNS (4),			/* cond_taken_branch_cost.  */
+   COSTS_N_INSNS (2),			/* cond_not_taken_branch_cost.  */
+   "16",					/* Loop alignment.  */
+   "16",					/* Jump alignment.  */
+   "0:0:8",				/* Label alignment.  */
+   "16",					/* Func alignment.  */
+   4,					/* Small unroll limit.  */
+   2,					/* Small unroll factor.  */
+ };
+ 
+ /* This table currently replicates znver4_cost table. */
+ struct processor_costs znver5_cost = {
+   {
+   /* Start of register allocator costs.  integer->integer move cost is 2. */
+ 
+   /* reg-reg moves are done by renaming and thus they are even cheaper than
+      1 cycle.  Because reg-reg move cost is 2 and following tables correspond
+      to doubles of latencies, we do not model this correctly.  It does not
+      seem to make practical difference to bump prices up even more.  */
+   6,					/* cost for loading QImode using
+ 					   movzbl.  */
+   {6, 6, 6},				/* cost of loading integer registers
+ 					   in QImode, HImode and SImode.
+ 					   Relative to reg-reg move (2).  */
+   {8, 8, 8},				/* cost of storing integer
+ 					   registers.  */
+   2,					/* cost of reg,reg fld/fst.  */
+   {14, 14, 17},				/* cost of loading fp registers
+ 					   in SFmode, DFmode and XFmode.  */
+   {12, 12, 16},				/* cost of storing fp registers
+ 					   in SFmode, DFmode and XFmode.  */
+   2,					/* cost of moving MMX register.  */
+   {6, 6},				/* cost of loading MMX registers
+ 					   in SImode and DImode.  */
+   {8, 8},				/* cost of storing MMX registers
+ 					   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.  */
+   8, 8,					/* mask->integer and integer->mask moves */
+   {6, 6, 6},				/* cost of loading mask register
+ 					   in QImode, HImode, SImode.  */
+   {8, 8, 8},				/* cost if storing mask register
+ 					   in QImode, HImode, SImode.  */
+   2,					/* cost of moving mask register.  */
+   /* End of register allocator costs.  */
+   },
+ 
+   COSTS_N_INSNS (1),			/* cost of an add instruction.  */
+   /* TODO: Lea with 3 components has cost 2.  */
+   COSTS_N_INSNS (1),			/* cost of a lea instruction.  */
+   COSTS_N_INSNS (1),			/* variable shift costs.  */
+   COSTS_N_INSNS (1),			/* constant shift costs.  */
+   /* mul has latency 3, executes in 3 integer units.  */
+   {COSTS_N_INSNS (3),			/* cost of starting multiply for QI.  */
+    COSTS_N_INSNS (3),			/* 				 HI.  */
+    COSTS_N_INSNS (3),			/*				 SI.  */
+    COSTS_N_INSNS (3),			/*				 DI.  */
+    COSTS_N_INSNS (3)},			/*			other.  */
+   0,					/* cost of multiply per each bit
+ 					   set.  */
+   /* integer divide has latency of 8 cycles
+      plus 1 for every 9 bits of quotient.  */
+   {COSTS_N_INSNS (10),			/* cost of a divide/mod for QI.  */
+    COSTS_N_INSNS (11),			/* 			    HI.  */
+    COSTS_N_INSNS (13),			/*			    SI.  */
+    COSTS_N_INSNS (16),			/*			    DI.  */
+    COSTS_N_INSNS (16)},			/*			    other.  */
+   COSTS_N_INSNS (1),			/* cost of movsx.  */
+   COSTS_N_INSNS (1),			/* cost of movzx.  */
+   15,					/* "large" insn.  */
+   9,					/* MOVE_RATIO.  */
+   6,					/* CLEAR_RATIO */
+   {6, 6, 6},				/* cost of loading integer registers
+ 					   in QImode, HImode and SImode.
+ 					   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, 2,				/* cost of moving XMM,YMM,ZMM
+ 					   register.  */
+   6,					/* cost of moving SSE register to integer.  */
+ 
+   /* TODO: gather and scatter instructions are currently disabled in
+      x86-tune.def.  In some cases they are however a win, see PR116582
+      We however need good cost model for them.  */
+   14, 10,				/* Gather load static, per_elt.  */
+   14, 20,				/* Gather store static, per_elt.  */
+   48,					/* size of l1 cache.  */
+   1024,					/* size of l2 cache.  */
+   64,					/* size of prefetch block.  */
+   /* New AMD processors never drop prefetches; if they cannot be performed
+      immediately, they are queued.  We set number of simultaneous prefetches
+      to a large constant to reflect this (it probably is not a good idea not
+      to limit number of prefetches at all, as their execution also takes some
+      time).  */
+   100,					/* number of parallel prefetches.  */
+   3,					/* Branch cost.  */
+   /* TODO x87 latencies are still based on znver4.
+      Probably not very important these days.  */
+   COSTS_N_INSNS (7),			/* cost of FADD and FSUB insns.  */
+   COSTS_N_INSNS (7),			/* cost of FMUL instruction.  */
+   /* Latency of fdiv is 8-15.  */
+   COSTS_N_INSNS (15),			/* cost of FDIV instruction.  */
+   COSTS_N_INSNS (1),			/* cost of FABS instruction.  */
+   COSTS_N_INSNS (1),			/* cost of FCHS instruction.  */
+   /* Latency of fsqrt is 4-10.  */
+   COSTS_N_INSNS (25),			/* cost of FSQRT instruction.  */
+ 
+   /* SSE instructions have typical throughput 4 and latency 1.  */
+   COSTS_N_INSNS (1),			/* cost of cheap SSE instruction.  */
+   /* ADDSS has throughput 2 and latency 2
+      (in some cases when source is another addition).  */
+   COSTS_N_INSNS (2),			/* cost of ADDSS/SD SUBSS/SD insns.  */
+   /* MULSS has throughput 2 and latency 3.  */
+   COSTS_N_INSNS (3),			/* cost of MULSS instruction.  */
+   COSTS_N_INSNS (3),			/* cost of MULSD instruction.  */
+   /* FMA had throughput 2 and latency 4.  */
+   COSTS_N_INSNS (4),			/* cost of FMA SS instruction.  */
+   COSTS_N_INSNS (4),			/* cost of FMA SD instruction.  */
+   /* DIVSS has throughtput 0.4 and latency 10.  */
+   COSTS_N_INSNS (10),			/* cost of DIVSS instruction.  */
+   /* DIVSD has throughtput 0.25 and latency 13.  */
+   COSTS_N_INSNS (13),			/* cost of DIVSD instruction.  */
+   /* DIVSD has throughtput 0.22 and latency 14.  */
+   COSTS_N_INSNS (14),			/* cost of SQRTSS instruction.  */
+   /* DIVSD has throughtput 0.13 and latency 20.  */
+   COSTS_N_INSNS (20),			/* cost of SQRTSD instruction.  */
+   /* Zen5 can execute:
+       - integer ops: 6 per cycle, at most 3 multiplications.
+ 	latency 1 for additions, 3 for multiplications (pipelined)
+ 
+ 	Setting width of 9 for multiplication is probably excessive
+ 	for register pressure.
+       - fp ops: 2 additions per cycle, latency 2-3
+ 		2 multiplicaitons per cycle, latency 3
+       - vector intger ops: 4 additions, latency 1
+ 			   2 multiplications, latency 4
+ 	We increase width to 6 for multiplications
+ 	in ix86_reassociation_width.  */
+   6, 6, 4, 6,				/* reassoc int, fp, vec_int, vec_fp.  */
+   znver2_memcpy,
+   znver2_memset,
+   COSTS_N_INSNS (4),			/* cond_taken_branch_cost.  */
    COSTS_N_INSNS (2),			/* cond_not_taken_branch_cost.  */
    "16",					/* Loop alignment.  */
    "16",					/* Jump alignment.  */
diff -Nrcpad gcc-13.3.0/gcc/config/i386/x86-tune-sched.cc gcc-13.4.0/gcc/config/i386/x86-tune-sched.cc
*** gcc-13.3.0/gcc/config/i386/x86-tune-sched.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/i386/x86-tune-sched.cc	Thu Jun  5 16:02:58 2025
*************** ix86_issue_rate (void)
*** 69,74 ****
--- 69,75 ----
      case PROCESSOR_ZNVER2:
      case PROCESSOR_ZNVER3:
      case PROCESSOR_ZNVER4:
+     case PROCESSOR_ZNVER5:
      case PROCESSOR_CORE2:
      case PROCESSOR_NEHALEM:
      case PROCESSOR_SANDYBRIDGE:
*************** ix86_adjust_cost (rtx_insn *insn, int de
*** 417,422 ****
--- 418,424 ----
      case PROCESSOR_ZNVER2:
      case PROCESSOR_ZNVER3:
      case PROCESSOR_ZNVER4:
+     case PROCESSOR_ZNVER5:
        /* Stack engine allows to execute push&pop instructions in parall.  */
        if ((insn_type == TYPE_PUSH || insn_type == TYPE_POP)
  	  && (dep_insn_type == TYPE_PUSH || dep_insn_type == TYPE_POP))
*************** ix86_adjust_cost (rtx_insn *insn, int de
*** 433,438 ****
--- 435,442 ----
  	  enum attr_unit unit = get_attr_unit (insn);
  	  int loadcost;
  
+ 	  /* TODO: On znver5 complex addressing modes have
+ 	     greater latency.  */
  	  if (unit == UNIT_INTEGER || unit == UNIT_UNKNOWN)
  	    loadcost = 4;
  	  else
*************** ix86_macro_fusion_p ()
*** 538,543 ****
--- 542,601 ----
    return TARGET_FUSE_CMP_AND_BRANCH;
  }
  
+ static bool
+ ix86_fuse_mov_alu_p (rtx_insn *mov, rtx_insn *alu)
+ {
+   /* Validate mov:
+       - It should be reg-reg move with opcode 0x89 or 0x8B.  */
+   rtx set1 = PATTERN (mov);
+   if (GET_CODE (set1) != SET
+       || !GENERAL_REG_P (SET_SRC (set1))
+       || !GENERAL_REG_P (SET_DEST (set1)))
+     return false;
+   rtx reg = SET_DEST (set1);
+   /*  - it should have 0x89 or 0x8B opcode.  */
+   if (!INTEGRAL_MODE_P (GET_MODE (reg))
+       || GET_MODE_SIZE (GET_MODE (reg)) < 2
+       || GET_MODE_SIZE (GET_MODE (reg)) > 8)
+     return false;
+   /* Validate ALU.  */
+   if (GET_CODE (PATTERN (alu)) != PARALLEL)
+     return false;
+   rtx set2 = XVECEXP (PATTERN (alu), 0, 0);
+   if (GET_CODE (set2) != SET)
+     return false;
+   /* Match one of:
+      ADD ADC AND XOR OR SUB SBB INC DEC NOT SAL SHL SHR SAR
+      We also may add insn attribute to handle some of sporadic
+      case we output those with different RTX expressions.  */
+ 
+   if (GET_CODE (SET_SRC (set2)) != PLUS
+       && GET_CODE (SET_SRC (set2)) != MINUS
+       && GET_CODE (SET_SRC (set2)) != XOR
+       && GET_CODE (SET_SRC (set2)) != AND
+       && GET_CODE (SET_SRC (set2)) != IOR
+       && GET_CODE (SET_SRC (set2)) != NOT
+       && GET_CODE (SET_SRC (set2)) != ASHIFT
+       && GET_CODE (SET_SRC (set2)) != ASHIFTRT
+       && GET_CODE (SET_SRC (set2)) != LSHIFTRT)
+     return false;
+   rtx op0 = XEXP (SET_SRC (set2), 0);
+   rtx op1 = GET_CODE (SET_SRC (set2)) != NOT ? XEXP (SET_SRC (set2), 1) : NULL;
+   /* One of operands should be register.  */
+   if (op1 && (!REG_P (op0) || REGNO (op0) != REGNO (reg)))
+     std::swap (op0, op1);
+   if (!REG_P (op0) || REGNO (op1) != REGNO (reg))
+     return false;
+   if (op1
+       && !REG_P (op1)
+       && !x86_64_immediate_operand (op1, VOIDmode))
+     return false;
+   /* Only one of two paramters must be move destination.  */
+   if (op1 && REG_P (op1) && REGNO (op1) == REGNO (reg))
+     return false;
+   return true;
+ }
+ 
  /* Check whether current microarchitecture support macro fusion
     for insn pair "CONDGEN + CONDJMP". Refer to
     "Intel Architectures Optimization Reference Manual". */
*************** ix86_macro_fusion_p ()
*** 545,550 ****
--- 603,611 ----
  bool
  ix86_macro_fusion_pair_p (rtx_insn *condgen, rtx_insn *condjmp)
  {
+   if (TARGET_FUSE_MOV_AND_ALU
+       && ix86_fuse_mov_alu_p (condgen, condjmp))
+     return true;
    rtx src, dest;
    enum rtx_code ccode;
    rtx compare_set = NULL_RTX, test_if, cond;
diff -Nrcpad gcc-13.3.0/gcc/config/i386/x86-tune.def gcc-13.4.0/gcc/config/i386/x86-tune.def
*** gcc-13.3.0/gcc/config/i386/x86-tune.def	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/i386/x86-tune.def	Thu Jun  5 16:02:58 2025
*************** DEF_TUNE (X86_TUNE_SSE_PARTIAL_REG_CONVE
*** 87,94 ****
     several insns to break false dependency on the dest register for GLC
     micro-architecture.  */
  DEF_TUNE (X86_TUNE_DEST_FALSE_DEP_FOR_GLC,
! 	  "dest_false_dep_for_glc", m_SAPPHIRERAPIDS | m_ALDERLAKE
! 	  | m_CORE_ATOM)
  
  /* X86_TUNE_SSE_SPLIT_REGS: Set for machines where the type and dependencies
     are resolved on SSE register parts instead of whole registers, so we may
--- 87,93 ----
     several insns to break false dependency on the dest register for GLC
     micro-architecture.  */
  DEF_TUNE (X86_TUNE_DEST_FALSE_DEP_FOR_GLC,
! 	  "dest_false_dep_for_glc", m_SAPPHIRERAPIDS | m_ALDERLAKE)
  
  /* X86_TUNE_SSE_SPLIT_REGS: Set for machines where the type and dependencies
     are resolved on SSE register parts instead of whole registers, so we may
*************** DEF_TUNE (X86_TUNE_FUSE_CMP_AND_BRANCH_S
*** 145,152 ****
     jump instruction when the alu instruction produces the CCFLAG consumed by
     the conditional jump instruction. */
  DEF_TUNE (X86_TUNE_FUSE_ALU_AND_BRANCH, "fuse_alu_and_branch",
! 		  m_SANDYBRIDGE | m_CORE_AVX2 | m_LUJIAZUI | m_GENERIC)
  
  
  /*****************************************************************************/
  /* Function prologue, epilogue and function calling sequences.               */
--- 144,155 ----
     jump instruction when the alu instruction produces the CCFLAG consumed by
     the conditional jump instruction. */
  DEF_TUNE (X86_TUNE_FUSE_ALU_AND_BRANCH, "fuse_alu_and_branch",
! 		  m_SANDYBRIDGE | m_CORE_AVX2 | m_LUJIAZUI | m_GENERIC | m_ZNVER5)
  
+ /* X86_TUNE_FUSE_MOV_AND_ALU: mov and alu in case mov is reg-reg mov
+    and the destination is used by alu.  alu must be one of
+    ADD, ADC, AND, XOR, OR, SUB, SBB, INC, DEC, NOT, SAL, SHL, SHR, SAR.  */
+ DEF_TUNE (X86_TUNE_FUSE_MOV_AND_ALU, "fuse_mov_and_alu", m_ZNVER5)
  
  /*****************************************************************************/
  /* Function prologue, epilogue and function calling sequences.               */
*************** DEF_TUNE (X86_TUNE_AVOID_4BYTE_PREFIXES,
*** 481,534 ****
  /* X86_TUNE_USE_GATHER_2PARTS: Use gather instructions for vectors with 2
     elements.  */
  DEF_TUNE (X86_TUNE_USE_GATHER_2PARTS, "use_gather_2parts",
! 	  ~(m_ZNVER1 | m_ZNVER2 | m_ZNVER3 | m_ZNVER4 | m_ALDERLAKE
  	    | m_CORE_ATOM | m_GENERIC | m_GDS))
  
  /* X86_TUNE_USE_SCATTER_2PARTS: Use scater instructions for vectors with 2
     elements.  */
  DEF_TUNE (X86_TUNE_USE_SCATTER_2PARTS, "use_scatter_2parts",
! 	  ~(m_ZNVER4))
  
  /* X86_TUNE_USE_GATHER_4PARTS: Use gather instructions for vectors with 4
     elements.  */
  DEF_TUNE (X86_TUNE_USE_GATHER_4PARTS, "use_gather_4parts",
! 	  ~(m_ZNVER1 | m_ZNVER2 | m_ZNVER3 | m_ZNVER4 | m_ALDERLAKE
  	    | m_CORE_ATOM | m_GENERIC | m_GDS))
  
  /* X86_TUNE_USE_SCATTER_4PARTS: Use scater instructions for vectors with 4
     elements.  */
  DEF_TUNE (X86_TUNE_USE_SCATTER_4PARTS, "use_scatter_4parts",
! 	  ~(m_ZNVER4))
  
  /* X86_TUNE_USE_GATHER: Use gather instructions for vectors with 8 or more
     elements.  */
  DEF_TUNE (X86_TUNE_USE_GATHER_8PARTS, "use_gather_8parts",
! 	  ~(m_ZNVER1 | m_ZNVER2 | m_ZNVER4 | m_ALDERLAKE
  	    | m_CORE_ATOM | m_GENERIC | m_GDS))
  
  /* X86_TUNE_USE_SCATTER: Use scater instructions for vectors with 8 or more
     elements.  */
  DEF_TUNE (X86_TUNE_USE_SCATTER_8PARTS, "use_scatter_8parts",
! 	  ~(m_ZNVER4))
  
  /* X86_TUNE_AVOID_128FMA_CHAINS: Avoid creating loops with tight 128bit or
     smaller FMA chain.  */
! DEF_TUNE (X86_TUNE_AVOID_128FMA_CHAINS, "avoid_fma_chains", m_ZNVER1 | m_ZNVER2 | m_ZNVER3)
  
  /* X86_TUNE_AVOID_256FMA_CHAINS: Avoid creating loops with tight 256bit or
     smaller FMA chain.  */
! DEF_TUNE (X86_TUNE_AVOID_256FMA_CHAINS, "avoid_fma256_chains", m_ZNVER2 | m_ZNVER3
! 	  | m_ALDERLAKE | m_SAPPHIRERAPIDS | m_CORE_ATOM)
  
  /* X86_TUNE_AVOID_512FMA_CHAINS: Avoid creating loops with tight 512bit or
     smaller FMA chain.  */
! DEF_TUNE (X86_TUNE_AVOID_512FMA_CHAINS, "avoid_fma512_chains", m_NONE)
  
  /* X86_TUNE_V2DF_REDUCTION_PREFER_PHADDPD: Prefer haddpd
     for v2df vector reduction.  */
  DEF_TUNE (X86_TUNE_V2DF_REDUCTION_PREFER_HADDPD,
  	  "v2df_reduction_prefer_haddpd", m_NONE)
  
  /*****************************************************************************/
  /* AVX instruction selection tuning (some of SSE flags affects AVX, too)     */
  /*****************************************************************************/
--- 484,547 ----
  /* X86_TUNE_USE_GATHER_2PARTS: Use gather instructions for vectors with 2
     elements.  */
  DEF_TUNE (X86_TUNE_USE_GATHER_2PARTS, "use_gather_2parts",
! 	  ~(m_ZNVER | m_ALDERLAKE
  	    | m_CORE_ATOM | m_GENERIC | m_GDS))
  
  /* X86_TUNE_USE_SCATTER_2PARTS: Use scater instructions for vectors with 2
     elements.  */
  DEF_TUNE (X86_TUNE_USE_SCATTER_2PARTS, "use_scatter_2parts",
! 	  ~(m_ZNVER4 | m_ZNVER5))
  
  /* X86_TUNE_USE_GATHER_4PARTS: Use gather instructions for vectors with 4
     elements.  */
  DEF_TUNE (X86_TUNE_USE_GATHER_4PARTS, "use_gather_4parts",
! 	  ~(m_ZNVER | m_ALDERLAKE
  	    | m_CORE_ATOM | m_GENERIC | m_GDS))
  
  /* X86_TUNE_USE_SCATTER_4PARTS: Use scater instructions for vectors with 4
     elements.  */
  DEF_TUNE (X86_TUNE_USE_SCATTER_4PARTS, "use_scatter_4parts",
! 	  ~(m_ZNVER4 | m_ZNVER5))
  
  /* X86_TUNE_USE_GATHER: Use gather instructions for vectors with 8 or more
     elements.  */
  DEF_TUNE (X86_TUNE_USE_GATHER_8PARTS, "use_gather_8parts",
! 	  ~(m_ZNVER1 | m_ZNVER2 | m_ZNVER4 | m_ZNVER5 | m_ALDERLAKE
  	    | m_CORE_ATOM | m_GENERIC | m_GDS))
  
  /* X86_TUNE_USE_SCATTER: Use scater instructions for vectors with 8 or more
     elements.  */
  DEF_TUNE (X86_TUNE_USE_SCATTER_8PARTS, "use_scatter_8parts",
! 	  ~(m_ZNVER4 | m_ZNVER5))
  
  /* X86_TUNE_AVOID_128FMA_CHAINS: Avoid creating loops with tight 128bit or
     smaller FMA chain.  */
! DEF_TUNE (X86_TUNE_AVOID_128FMA_CHAINS, "avoid_fma_chains", m_ZNVER)
  
  /* X86_TUNE_AVOID_256FMA_CHAINS: Avoid creating loops with tight 256bit or
     smaller FMA chain.  */
! DEF_TUNE (X86_TUNE_AVOID_256FMA_CHAINS, "avoid_fma256_chains",
! 	  m_ZNVER2 | m_ZNVER3 | m_ALDERLAKE | m_SAPPHIRERAPIDS
! 	  | m_GRANITERAPIDS | m_GRANITERAPIDS_D | m_CORE_ATOM | m_GENERIC
! 	  | m_ZNVER4 | m_ZNVER5)
  
  /* X86_TUNE_AVOID_512FMA_CHAINS: Avoid creating loops with tight 512bit or
     smaller FMA chain.  */
! DEF_TUNE (X86_TUNE_AVOID_512FMA_CHAINS, "avoid_fma512_chains", m_ZNVER5)
  
  /* X86_TUNE_V2DF_REDUCTION_PREFER_PHADDPD: Prefer haddpd
     for v2df vector reduction.  */
  DEF_TUNE (X86_TUNE_V2DF_REDUCTION_PREFER_HADDPD,
  	  "v2df_reduction_prefer_haddpd", m_NONE)
  
+ /* X86_TUNE_SSE_MOVCC_USE_BLENDV: Prefer blendv instructions to
+    3-instruction sequence (op1 & mask) | (op2 & ~mask)
+    for vector condition move.
+    For Crestmont, 4-operand vex blendv instructions come from MSROM
+    which is slow.  */
+ DEF_TUNE (X86_TUNE_SSE_MOVCC_USE_BLENDV,
+ 	  "sse_movcc_use_blendv", ~m_CORE_ATOM)
+ 
  /*****************************************************************************/
  /* AVX instruction selection tuning (some of SSE flags affects AVX, too)     */
  /*****************************************************************************/
*************** DEF_TUNE (X86_TUNE_AVX256_UNALIGNED_STOR
*** 545,551 ****
  
  /* X86_TUNE_AVX256_SPLIT_REGS: if true, AVX256 ops are split into two AVX128 ops.  */
  DEF_TUNE (X86_TUNE_AVX256_SPLIT_REGS, "avx256_split_regs",m_BDVER | m_BTVER2
! 	  | m_ZNVER1)
  
  /* X86_TUNE_AVX128_OPTIMAL: Enable 128-bit AVX instruction generation for
     the auto-vectorizer.  */
--- 558,564 ----
  
  /* X86_TUNE_AVX256_SPLIT_REGS: if true, AVX256 ops are split into two AVX128 ops.  */
  DEF_TUNE (X86_TUNE_AVX256_SPLIT_REGS, "avx256_split_regs",m_BDVER | m_BTVER2
! 	  | m_ZNVER1 | m_CORE_ATOM)
  
  /* X86_TUNE_AVX128_OPTIMAL: Enable 128-bit AVX instruction generation for
     the auto-vectorizer.  */
*************** DEF_TUNE (X86_TUNE_AVX128_OPTIMAL, "avx1
*** 556,561 ****
--- 569,579 ----
     instructions in the auto-vectorizer.  */
  DEF_TUNE (X86_TUNE_AVX256_OPTIMAL, "avx256_optimal", m_CORE_AVX512)
  
+ /* X86_TUNE_AVX256_AVOID_VEC_PERM: Avoid using 256-bit cross-lane
+    vector permutation instructions in the auto-vectorizer.  */
+ DEF_TUNE (X86_TUNE_AVX256_AVOID_VEC_PERM,
+ 	 "avx256_avoid_vec_perm", m_CORE_ATOM)
+ 
  /* X86_TUNE_AVX256_SPLIT_REGS: if true, AVX512 ops are split into two AVX256 ops.  */
  DEF_TUNE (X86_TUNE_AVX512_SPLIT_REGS, "avx512_split_regs", m_ZNVER4)
  
*************** DEF_TUNE (X86_TUNE_AVX256_STORE_BY_PIECE
*** 572,583 ****
  /* X86_TUNE_AVX512_MOVE_BY_PIECES: Optimize move_by_pieces with 512-bit
     AVX instructions.  */
  DEF_TUNE (X86_TUNE_AVX512_MOVE_BY_PIECES, "avx512_move_by_pieces",
! 	  m_SAPPHIRERAPIDS | m_ZNVER4)
  
  /* X86_TUNE_AVX512_STORE_BY_PIECES: Optimize store_by_pieces with 512-bit
     AVX instructions.  */
  DEF_TUNE (X86_TUNE_AVX512_STORE_BY_PIECES, "avx512_store_by_pieces",
! 	  m_SAPPHIRERAPIDS | m_ZNVER4)
  
  /*****************************************************************************/
  /*****************************************************************************/
--- 590,603 ----
  /* X86_TUNE_AVX512_MOVE_BY_PIECES: Optimize move_by_pieces with 512-bit
     AVX instructions.  */
  DEF_TUNE (X86_TUNE_AVX512_MOVE_BY_PIECES, "avx512_move_by_pieces",
! 	  m_SAPPHIRERAPIDS | m_GRANITERAPIDS | m_GRANITERAPIDS_D
! 	  | m_ZNVER4 | m_ZNVER5)
  
  /* X86_TUNE_AVX512_STORE_BY_PIECES: Optimize store_by_pieces with 512-bit
     AVX instructions.  */
  DEF_TUNE (X86_TUNE_AVX512_STORE_BY_PIECES, "avx512_store_by_pieces",
! 	  m_SAPPHIRERAPIDS | m_GRANITERAPIDS | m_GRANITERAPIDS_D
! 	  | m_ZNVER4 | m_ZNVER5)
  
  /*****************************************************************************/
  /*****************************************************************************/
diff -Nrcpad gcc-13.3.0/gcc/config/i386/zn4zn5.md gcc-13.4.0/gcc/config/i386/zn4zn5.md
*** gcc-13.3.0/gcc/config/i386/zn4zn5.md	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/config/i386/zn4zn5.md	Thu Jun  5 16:02:58 2025
***************
*** 0 ****
--- 1,1785 ----
+ ;; Copyright (C) 2012-2024 Free Software Foundation, Inc.
+ ;;
+ ;; This file is part of GCC.
+ ;;
+ ;; GCC is free software; you can redistribute it and/or modify
+ ;; it under the terms of the GNU General Public License as published by
+ ;; the Free Software Foundation; either version 3, or (at your option)
+ ;; any later version.
+ ;;
+ ;; GCC is distributed in the hope that it will be useful,
+ ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+ ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ ;; GNU General Public License for more details.
+ ;;
+ ;; You should have received a copy of the GNU General Public License
+ ;; along with GCC; see the file COPYING3.  If not see
+ ;; <http://www.gnu.org/licenses/>.
+ ;;
+ 
+ 
+ (define_attr "znver4_decode" "direct,vector,double"
+   (const_string "direct"))
+ 
+ ;; AMD znver4 and znver5 Scheduling
+ ;; Modeling automatons for zen decoders, integer execution pipes,
+ ;; AGU pipes, branch, floating point execution and fp store units.
+ (define_automaton "znver4, znver4_ieu, znver4_idiv, znver4_fdiv, znver4_agu, znver4_fpu, znver4_fp_store")
+ 
+ ;; Decoders unit has 4 decoders and all of them can decode fast path
+ ;; and vector type instructions.
+ (define_cpu_unit "znver4-decode0" "znver4")
+ (define_cpu_unit "znver4-decode1" "znver4")
+ (define_cpu_unit "znver4-decode2" "znver4")
+ (define_cpu_unit "znver4-decode3" "znver4")
+ 
+ ;; Currently blocking all decoders for vector path instructions as
+ ;; they are dispatched separetely as microcode sequence.
+ (define_reservation "znver4-vector" "znver4-decode0+znver4-decode1+znver4-decode2+znver4-decode3")
+ 
+ ;; Direct instructions can be issued to any of the four decoders.
+ (define_reservation "znver4-direct" "znver4-decode0|znver4-decode1|znver4-decode2|znver4-decode3")
+ 
+ ;; Fix me: Need to revisit this later to simulate fast path double behavior.
+ (define_reservation "znver4-double" "znver4-direct")
+ 
+ 
+ ;; Integer unit 4 ALU pipes in znver4 6 ALU pipes in znver5.
+ (define_cpu_unit "znver4-ieu0" "znver4_ieu")
+ (define_cpu_unit "znver4-ieu1" "znver4_ieu")
+ (define_cpu_unit "znver4-ieu2" "znver4_ieu")
+ (define_cpu_unit "znver4-ieu3" "znver4_ieu")
+ (define_cpu_unit "znver5-ieu4" "znver4_ieu")
+ (define_cpu_unit "znver5-ieu5" "znver4_ieu")
+ 
+ ;; Znver4 has an additional branch unit.
+ (define_cpu_unit "znver4-bru0" "znver4_ieu")
+ 
+ (define_reservation "znver4-ieu" "znver4-ieu0|znver4-ieu1|znver4-ieu2|znver4-ieu3")
+ (define_reservation "znver5-ieu" "znver4-ieu0|znver4-ieu1|znver4-ieu2|znver4-ieu3|znver5-ieu4|znver5-ieu5")
+ 
+ ;; 3 AGU pipes in znver4 and 4 AGU pipes in znver5
+ (define_cpu_unit "znver4-agu0" "znver4_agu")
+ (define_cpu_unit "znver4-agu1" "znver4_agu")
+ (define_cpu_unit "znver4-agu2" "znver4_agu")
+ (define_cpu_unit "znver5-agu3" "znver4_agu")
+ 
+ (define_reservation "znver4-agu-reserve" "znver4-agu0|znver4-agu1|znver4-agu2")
+ (define_reservation "znver5-agu-reserve" "znver4-agu0|znver4-agu1|znver4-agu2|znver5-agu3")
+ 
+ ;; Load is 4 cycles. We do not model reservation of load unit.
+ (define_reservation "znver4-load" "znver4-agu-reserve")
+ (define_reservation "znver4-store" "znver4-agu-reserve")
+ (define_reservation "znver5-load" "znver5-agu-reserve")
+ (define_reservation "znver5-store" "znver5-agu-reserve")
+ 
+ ;; vectorpath (microcoded) instructions are single issue instructions.
+ ;; So, they occupy all the integer units.
+ ;; This is used for both Znver4 and Znver5, since reserving extra units not used otherwise
+ ;; is harmless.
+ (define_reservation "znver4-ivector" "znver4-ieu0+znver4-ieu1
+ 				      +znver4-ieu2+znver4-ieu3+znver5-ieu4+znver5-ieu5+znver4-bru0
+ 				      +znver4-agu0+znver4-agu1+znver4-agu2+znver5-agu3")
+ 
+ ;; Floating point unit 4 FP pipes in znver4 and znver5.
+ (define_cpu_unit "znver4-fpu0" "znver4_fpu")
+ (define_cpu_unit "znver4-fpu1" "znver4_fpu")
+ (define_cpu_unit "znver4-fpu2" "znver4_fpu")
+ (define_cpu_unit "znver4-fpu3" "znver4_fpu")
+ 
+ (define_reservation "znver4-fpu" "znver4-fpu0|znver4-fpu1|znver4-fpu2|znver4-fpu3")
+ 
+ ;; DIV units
+ (define_cpu_unit "znver4-idiv" "znver4_idiv")
+ (define_cpu_unit "znver4-fdiv" "znver4_fdiv")
+ 
+ ;; Separate fp store and fp-to-int store. Although there are 2 store pipes, the
+ ;; throughput is limited to only one per cycle.
+ (define_cpu_unit "znver4-fp-store" "znver4_fp_store")
+ 
+ ;; Floating point store unit 2 FP pipes in znver5.
+ (define_cpu_unit "znver5-fp-store0" "znver4_fp_store")
+ (define_cpu_unit "znver5-fp-store1" "znver4_fp_store")
+ 
+ ;; This is used for both Znver4 and Znver5, since reserving extra units not used otherwise
+ ;; is harmless.
+ (define_reservation "znver4-fvector" "znver4-fpu0+znver4-fpu1
+ 				      +znver4-fpu2+znver4-fpu3+znver5-fp-store0+znver5-fp-store1
+ 				      +znver4-agu0+znver4-agu1+znver4-agu2+znver5-agu3")
+ 
+ (define_reservation "znver5-fp-store256" "znver5-fp-store0|znver5-fp-store1")
+ (define_reservation "znver5-fp-store-512" "znver5-fp-store0+znver5-fp-store1")
+ 
+ 
+ ;; Integer Instructions
+ ;; Move instructions
+ ;; XCHG
+ (define_insn_reservation "znver4_imov_double" 1
+ 			(and (eq_attr "cpu" "znver4")
+ 				 (and (eq_attr "znver1_decode" "double")
+ 				  (and (eq_attr "type" "imov")
+ 				   (eq_attr "memory" "none"))))
+ 			 "znver4-double,znver4-ieu")
+ 
+ (define_insn_reservation "znver5_imov_double" 1
+ 			(and (eq_attr "cpu" "znver5")
+ 				 (and (eq_attr "znver1_decode" "double")
+ 				  (and (eq_attr "type" "imov")
+ 				   (eq_attr "memory" "none"))))
+ 			 "znver4-double,znver5-ieu")
+ 
+ (define_insn_reservation "znver4_imov_double_load" 5
+ 			(and (eq_attr "cpu" "znver4")
+ 				 (and (eq_attr "znver1_decode" "double")
+ 				  (and (eq_attr "type" "imov")
+ 				   (eq_attr "memory" "load"))))
+ 			 "znver4-double,znver4-load,znver4-ieu")
+ 
+ (define_insn_reservation "znver5_imov_double_load" 5
+ 			(and (eq_attr "cpu" "znver5")
+ 				 (and (eq_attr "znver1_decode" "double")
+ 				  (and (eq_attr "type" "imov")
+ 				   (eq_attr "memory" "load"))))
+ 			 "znver4-double,znver5-load,znver5-ieu")
+ 
+ ;; imov, imovx
+ (define_insn_reservation "znver4_imov" 1
+             (and (eq_attr "cpu" "znver4")
+ 				 (and (eq_attr "type" "imov,imovx")
+ 				  (eq_attr "memory" "none")))
+              "znver4-direct,znver4-ieu")
+ 
+ (define_insn_reservation "znver5_imov" 1
+             (and (eq_attr "cpu" "znver5")
+ 				 (and (eq_attr "type" "imov,imovx")
+ 				  (eq_attr "memory" "none")))
+              "znver4-direct,znver5-ieu")
+ 
+ (define_insn_reservation "znver4_imov_load" 5
+ 			(and (eq_attr "cpu" "znver4")
+ 				 (and (eq_attr "type" "imov,imovx")
+ 				  (eq_attr "memory" "load")))
+ 			 "znver4-direct,znver4-load,znver4-ieu")
+ 
+ (define_insn_reservation "znver5_imov_load" 5
+ 			(and (eq_attr "cpu" "znver5")
+ 				 (and (eq_attr "type" "imov,imovx")
+ 				  (eq_attr "memory" "load")))
+ 			 "znver4-direct,znver5-load,znver5-ieu")
+ 
+ ;; Push Instruction
+ (define_insn_reservation "znver4_push" 1
+ 			(and (eq_attr "cpu" "znver4")
+ 			     (and (eq_attr "type" "push")
+ 				  (eq_attr "memory" "store")))
+ 			 "znver4-direct,znver4-store")
+ 
+ (define_insn_reservation "znver5_push" 1
+ 			(and (eq_attr "cpu" "znver5")
+ 			     (and (eq_attr "type" "push")
+ 				  (eq_attr "memory" "store")))
+ 			 "znver4-direct,znver5-store")
+ 
+ (define_insn_reservation "znver4_push_mem" 5
+ 			(and (eq_attr "cpu" "znver4")
+ 				 (and (eq_attr "type" "push")
+ 				  (eq_attr "memory" "both")))
+ 			 "znver4-direct,znver4-load,znver4-store")
+ 
+ (define_insn_reservation "znver5_push_mem" 5
+ 			(and (eq_attr "cpu" "znver5")
+ 				 (and (eq_attr "type" "push")
+ 				  (eq_attr "memory" "both")))
+ 			 "znver4-direct,znver5-load,znver5-store")
+ 
+ ;; Pop instruction
+ (define_insn_reservation "znver4_pop" 4
+ 			(and (eq_attr "cpu" "znver4")
+ 			     (and (eq_attr "type" "pop")
+ 				  (eq_attr "memory" "load")))
+ 			 "znver4-direct,znver4-load")
+ 
+ (define_insn_reservation "znver5_pop" 4
+ 			(and (eq_attr "cpu" "znver5")
+ 			     (and (eq_attr "type" "pop")
+ 				  (eq_attr "memory" "load")))
+ 			 "znver4-direct,znver5-load")
+ 
+ (define_insn_reservation "znver4_pop_mem" 5
+             (and (eq_attr "cpu" "znver4")
+                  (and (eq_attr "type" "pop")
+                   (eq_attr "memory" "both")))
+              "znver4-direct,znver4-load,znver4-store")
+ 
+ (define_insn_reservation "znver5_pop_mem" 5
+             (and (eq_attr "cpu" "znver5")
+                  (and (eq_attr "type" "pop")
+                   (eq_attr "memory" "both")))
+              "znver4-direct,znver5-load,znver5-store")
+ 
+ ;; Integer Instructions or General instructions
+ ;; Multiplications
+ (define_insn_reservation "znver4_imul" 3
+ 			(and (eq_attr "cpu" "znver4,znver5")
+ 			     (and (eq_attr "type" "imul")
+ 				  (eq_attr "memory" "none")))
+ 			 "znver4-direct,znver4-ieu1")
+ 
+ (define_insn_reservation "znver4_imul_load" 7
+ 			(and (eq_attr "cpu" "znver4")
+ 			     (and (eq_attr "type" "imul")
+ 				  (eq_attr "memory" "load")))
+ 			 "znver4-direct,znver4-load,znver4-ieu1")
+ 
+ (define_insn_reservation "znver5_imul_load" 7
+ 			(and (eq_attr "cpu" "znver5")
+ 			     (and (eq_attr "type" "imul")
+ 				  (eq_attr "memory" "load")))
+ 			 "znver4-direct,znver5-load,znver4-ieu1")
+ 
+ ;; Divisions
+ (define_insn_reservation "znver4_idiv_DI" 18
+ 			 (and (eq_attr "cpu" "znver4,znver5")
+ 			      (and (eq_attr "type" "idiv")
+ 				   (and (eq_attr "mode" "DI")
+ 					(eq_attr "memory" "none"))))
+ 			 "znver4-double,znver4-idiv*10")
+ 
+ (define_insn_reservation "znver4_idiv_SI" 12
+ 			 (and (eq_attr "cpu" "znver4,znver5")
+ 			      (and (eq_attr "type" "idiv")
+ 				   (and (eq_attr "mode" "SI")
+ 					(eq_attr "memory" "none"))))
+ 			 "znver4-double,znver4-idiv*6")
+ 
+ (define_insn_reservation "znver4_idiv_HI" 10
+ 			 (and (eq_attr "cpu" "znver4,znver5")
+ 			      (and (eq_attr "type" "idiv")
+ 				   (and (eq_attr "mode" "HI")
+ 					(eq_attr "memory" "none"))))
+ 			 "znver4-double,znver4-idiv*4")
+ 
+ (define_insn_reservation "znver4_idiv_QI" 9
+ 			 (and (eq_attr "cpu" "znver4,znver5")
+ 			      (and (eq_attr "type" "idiv")
+ 				   (and (eq_attr "mode" "QI")
+ 					(eq_attr "memory" "none"))))
+ 			 "znver4-double,znver4-idiv*4")
+ 
+ (define_insn_reservation "znver4_idiv_DI_load" 22
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "idiv")
+ 				   (and (eq_attr "mode" "DI")
+ 					(eq_attr "memory" "load"))))
+ 			 "znver4-double,znver4-load,znver4-idiv*10")
+ 
+ (define_insn_reservation "znver5_idiv_DI_load" 22
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "idiv")
+ 				   (and (eq_attr "mode" "DI")
+ 					(eq_attr "memory" "load"))))
+ 			 "znver4-double,znver5-load,znver4-idiv*10")
+ 
+ (define_insn_reservation "znver4_idiv_SI_load" 16
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "idiv")
+ 				   (and (eq_attr "mode" "SI")
+ 					(eq_attr "memory" "load"))))
+ 			 "znver4-double,znver4-load,znver4-idiv*6")
+ 
+ (define_insn_reservation "znver5_idiv_SI_load" 16
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "idiv")
+ 				   (and (eq_attr "mode" "SI")
+ 					(eq_attr "memory" "load"))))
+ 			 "znver4-double,znver5-load,znver4-idiv*6")
+ 
+ (define_insn_reservation "znver4_idiv_HI_load" 14
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "idiv")
+ 				   (and (eq_attr "mode" "HI")
+ 					(eq_attr "memory" "load"))))
+ 			 "znver4-double,znver4-load,znver4-idiv*4")
+ 
+ (define_insn_reservation "znver5_idiv_HI_load" 14
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "idiv")
+ 				   (and (eq_attr "mode" "HI")
+ 					(eq_attr "memory" "load"))))
+ 			 "znver4-double,znver5-load,znver4-idiv*4")
+ 
+ (define_insn_reservation "znver4_idiv_QI_load" 13
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "idiv")
+ 				   (and (eq_attr "mode" "QI")
+ 					(eq_attr "memory" "load"))))
+ 			 "znver4-double,znver4-load,znver4-idiv*4")
+ 
+ (define_insn_reservation "znver5_idiv_QI_load" 13
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "idiv")
+ 				   (and (eq_attr "mode" "QI")
+ 					(eq_attr "memory" "load"))))
+ 			 "znver4-double,znver5-load,znver4-idiv*4")
+ 
+ ;; INTEGER/GENERAL Instructions
+ (define_insn_reservation "znver4_insn" 1
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "alu,alu1,negnot,rotate1,ishift1,test,incdec,icmp")
+ 				   (eq_attr "memory" "none,unknown")))
+ 			 "znver4-direct,znver4-ieu")
+ 
+ (define_insn_reservation "znver5_insn" 1
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "alu,alu1,negnot,rotate1,ishift1,test,incdec,icmp")
+ 				   (eq_attr "memory" "none,unknown")))
+ 			 "znver4-direct,znver5-ieu")
+ 
+ (define_insn_reservation "znver4_insn_load" 5
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "alu,alu1,negnot,rotate1,ishift1,test,incdec,icmp")
+ 				   (eq_attr "memory" "load")))
+ 			 "znver4-direct,znver4-load,znver4-ieu")
+ 
+ (define_insn_reservation "znver5_insn_load" 5
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "alu,alu1,negnot,rotate1,ishift1,test,incdec,icmp")
+ 				   (eq_attr "memory" "load")))
+ 			 "znver4-direct,znver5-load,znver5-ieu")
+ 
+ (define_insn_reservation "znver4_insn2" 1
+ 			 (and (eq_attr "cpu" "znver4,znver5")
+ 			      (and (eq_attr "type" "icmov,setcc")
+ 				   (eq_attr "memory" "none,unknown")))
+ 			 "znver4-direct,znver4-ieu0|znver4-ieu3")
+ 
+ (define_insn_reservation "znver4_insn2_load" 5
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "icmov,setcc")
+ 				   (eq_attr "memory" "load")))
+ 			 "znver4-direct,znver4-load,znver4-ieu0|znver4-ieu3")
+ 
+ (define_insn_reservation "znver5_insn2_load" 5
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "icmov,setcc")
+ 				   (eq_attr "memory" "load")))
+ 			 "znver4-direct,znver5-load,znver4-ieu0|znver4-ieu3")
+ 
+ (define_insn_reservation "znver4_rotate" 1
+ 			 (and (eq_attr "cpu" "znver4,znver5")
+ 			      (and (eq_attr "type" "rotate")
+ 				   (eq_attr "memory" "none,unknown")))
+ 			 "znver4-direct,znver4-ieu1|znver4-ieu2")
+ 
+ (define_insn_reservation "znver4_rotate_load" 5
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "rotate")
+ 				   (eq_attr "memory" "load")))
+ 			 "znver4-direct,znver4-load,znver4-ieu1|znver4-ieu2")
+ 
+ (define_insn_reservation "znver5_rotate_load" 5
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "rotate")
+ 				   (eq_attr "memory" "load")))
+ 			 "znver4-direct,znver5-load,znver4-ieu1|znver4-ieu2")
+ 
+ (define_insn_reservation "znver4_insn_store" 1
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "alu,alu1,negnot,rotate1,ishift1,test,incdec,icmp")
+ 				   (eq_attr "memory" "store")))
+ 			 "znver4-direct,znver4-ieu,znver4-store")
+ 
+ (define_insn_reservation "znver5_insn_store" 1
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "alu,alu1,negnot,rotate1,ishift1,test,incdec,icmp")
+ 				   (eq_attr "memory" "store")))
+ 			 "znver4-direct,znver4-ieu,znver5-store")
+ 
+ (define_insn_reservation "znver4_insn2_store" 1
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "icmov,setcc")
+ 				   (eq_attr "memory" "store")))
+ 			 "znver4-direct,znver4-ieu0|znver4-ieu3,znver4-store")
+ 
+ (define_insn_reservation "znver5_insn2_store" 1
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "icmov,setcc")
+ 				   (eq_attr "memory" "store")))
+ 			 "znver4-direct,znver4-ieu0|znver4-ieu3,znver5-store")
+ 
+ (define_insn_reservation "znver4_rotate_store" 1
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "rotate")
+ 				   (eq_attr "memory" "store")))
+ 			 "znver4-direct,znver4-ieu1|znver4-ieu2,znver4-store")
+ 
+ (define_insn_reservation "znver5_rotate_store" 1
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "rotate")
+ 				   (eq_attr "memory" "store")))
+ 			 "znver4-direct,znver4-ieu1|znver4-ieu2,znver5-store")
+ 
+ ;; alu1 instructions
+ (define_insn_reservation "znver4_alu1_vector" 3
+ 			 (and (eq_attr "cpu" "znver4,znver5")
+ 			      (and (eq_attr "znver1_decode" "vector")
+ 				   (and (eq_attr "type" "alu1")
+ 					(eq_attr "memory" "none,unknown"))))
+ 			 "znver4-vector,znver4-ivector*3")
+ 
+ (define_insn_reservation "znver4_alu1_vector_load" 7
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "znver1_decode" "vector")
+ 				   (and (eq_attr "type" "alu1")
+ 					(eq_attr "memory" "load"))))
+ 			 "znver4-vector,znver4-load,znver4-ivector*3")
+ 
+ (define_insn_reservation "znver5_alu1_vector_load" 7
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "znver1_decode" "vector")
+ 				   (and (eq_attr "type" "alu1")
+ 					(eq_attr "memory" "load"))))
+ 			 "znver4-vector,znver5-load,znver4-ivector*3")
+ 
+ ;; Call Instruction
+ (define_insn_reservation "znver4_call" 1
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (eq_attr "type" "call,callv"))
+ 			 "znver4-double,znver4-ieu0|znver4-bru0,znver4-store")
+ 
+ (define_insn_reservation "znver5_call" 1
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (eq_attr "type" "call,callv"))
+ 			 "znver4-double,znver4-ieu0|znver4-bru0,znver5-store")
+ 
+ ;; Branches
+ (define_insn_reservation "znver4_branch" 1
+ 			 (and (eq_attr "cpu" "znver4,znver5")
+ 			      (and (eq_attr "type" "ibr")
+ 					(eq_attr "memory" "none")))
+ 			  "znver4-direct,znver4-ieu0|znver4-bru0")
+ 
+ (define_insn_reservation "znver4_branch_load" 5
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "ibr")
+ 					(eq_attr "memory" "load")))
+ 			  "znver4-direct,znver4-load,znver4-ieu0|znver4-bru0")
+ 
+ (define_insn_reservation "znver5_branch_load" 5
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "ibr")
+ 					(eq_attr "memory" "load")))
+ 			  "znver4-direct,znver5-load,znver4-ieu0|znver4-bru0")
+ 
+ (define_insn_reservation "znver4_branch_vector" 2
+ 			 (and (eq_attr "cpu" "znver4,znver5")
+ 			      (and (eq_attr "type" "ibr")
+ 					(eq_attr "memory" "none,unknown")))
+ 			  "znver4-vector,znver4-ivector*2")
+ 
+ (define_insn_reservation "znver4_branch_vector_load" 6
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "ibr")
+ 					(eq_attr "memory" "load")))
+ 			  "znver4-vector,znver4-load,znver4-ivector*2")
+ 
+ (define_insn_reservation "znver5_branch_vector_load" 6
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "ibr")
+ 					(eq_attr "memory" "load")))
+ 			  "znver4-vector,znver5-load,znver4-ivector*2")
+ 
+ ;; LEA instruction with simple addressing
+ (define_insn_reservation "znver4_lea" 1
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (eq_attr "type" "lea"))
+ 			 "znver4-direct,znver4-ieu")
+ 
+ (define_insn_reservation "znver5_lea" 1
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (eq_attr "type" "lea"))
+ 			 "znver4-direct,znver5-ieu")
+ ;; Leave
+ (define_insn_reservation "znver4_leave" 1
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (eq_attr "type" "leave"))
+ 			 "znver4-double,znver4-ieu,znver4-store")
+ 
+ (define_insn_reservation "znver5_leave" 1
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (eq_attr "type" "leave"))
+ 			 "znver4-double,znver5-ieu,znver5-store")
+ 
+ ;; STR and ISHIFT are microcoded.
+ (define_insn_reservation "znver4_str" 3
+ 			 (and (eq_attr "cpu" "znver4,znver5")
+ 			      (and (eq_attr "type" "str")
+ 				   (eq_attr "memory" "none")))
+ 			 "znver4-vector,znver4-ivector*3")
+ 
+ (define_insn_reservation "znver4_str_load" 7
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "str")
+ 				   (eq_attr "memory" "load")))
+ 			 "znver4-vector,znver4-load,znver4-ivector*3")
+ 
+ (define_insn_reservation "znver5_str_load" 7
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "str")
+ 				   (eq_attr "memory" "load")))
+ 			 "znver4-vector,znver5-load,znver4-ivector*3")
+ 
+ (define_insn_reservation "znver4_ishift" 2
+ 			 (and (eq_attr "cpu" "znver4,znver5")
+ 			      (and (eq_attr "type" "ishift")
+ 				   (eq_attr "memory" "none")))
+ 			 "znver4-vector,znver4-ivector*2")
+ 
+ (define_insn_reservation "znver4_ishift_load" 6
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "ishift")
+ 				   (eq_attr "memory" "load")))
+ 			 "znver4-vector,znver4-load,znver4-ivector*2")
+ 
+ (define_insn_reservation "znver5_ishift_load" 6
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "ishift")
+ 				   (eq_attr "memory" "load")))
+ 			 "znver4-vector,znver5-load,znver4-ivector*2")
+ 
+ ;; Other vector type
+ (define_insn_reservation "znver4_ieu_vector" 5
+ 			 (and (eq_attr "cpu" "znver4,znver5")
+ 			      (and (eq_attr "type" "other,multi")
+ 				   (eq_attr "memory" "none,unknown")))
+ 			 "znver4-vector,znver4-ivector*5")
+ 
+ (define_insn_reservation "znver4_ieu_vector_load" 9
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "other,multi")
+ 				   (eq_attr "memory" "load")))
+ 			 "znver4-vector,znver4-load,znver4-ivector*5")
+ 
+ (define_insn_reservation "znver5_ieu_vector_load" 9
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "other,multi")
+ 				   (eq_attr "memory" "load")))
+ 			 "znver4-vector,znver5-load,znver4-ivector*5")
+ 
+ ;; Floating Point
+ ;; FP movs
+ (define_insn_reservation "znver4_fp_cmov" 4
+ 			 (and (eq_attr "cpu" "znver4,znver5")
+ 			      (eq_attr "type" "fcmov"))
+ 			 "znver4-vector,znver4-fvector*3")
+ 
+ (define_insn_reservation "znver4_fp_mov_direct" 1
+ 			 (and (eq_attr "cpu" "znver4,znver5")
+ 			      (eq_attr "type" "fmov"))
+ 			 "znver4-direct,znver4-fpu0|znver4-fpu1")
+ 
+ ;;FLD
+ (define_insn_reservation "znver4_fp_mov_direct_load" 6
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "znver1_decode" "direct")
+ 				   (and (eq_attr "type" "fmov")
+ 					(eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu1")
+ 
+ (define_insn_reservation "znver5_fp_mov_direct_load" 6
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "znver1_decode" "direct")
+ 				   (and (eq_attr "type" "fmov")
+ 					(eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver5-load,znver4-fpu0|znver4-fpu1")
+ 
+ ;;FST
+ (define_insn_reservation "znver4_fp_mov_direct_store" 6
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "znver1_decode" "direct")
+ 				   (and (eq_attr "type" "fmov")
+ 					(eq_attr "memory" "store"))))
+ 			 "znver4-direct,znver4-fpu0|znver4-fpu1,znver4-fp-store")
+ 
+ (define_insn_reservation "znver5_fp_mov_direct_store" 6
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "znver1_decode" "direct")
+ 				   (and (eq_attr "type" "fmov")
+ 					(eq_attr "memory" "store"))))
+ 			 "znver4-direct,znver4-fpu0|znver4-fpu1,znver5-fp-store256")
+ 
+ ;;FILD
+ (define_insn_reservation "znver4_fp_mov_double_load" 13
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "znver1_decode" "double")
+ 				   (and (eq_attr "type" "fmov")
+ 					(eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver4-load,znver4-fpu1")
+ 
+ (define_insn_reservation "znver5_fp_mov_double_load" 13
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "znver1_decode" "double")
+ 				   (and (eq_attr "type" "fmov")
+ 					(eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver5-load,znver4-fpu1")
+ 
+ ;;FIST
+ (define_insn_reservation "znver4_fp_mov_double_store" 7
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "znver1_decode" "double")
+ 				   (and (eq_attr "type" "fmov")
+ 					(eq_attr "memory" "store"))))
+ 			 "znver4-double,znver4-fpu1,znver4-fp-store")
+ 
+ (define_insn_reservation "znver5_fp_mov_double_store" 7
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "znver1_decode" "double")
+ 				   (and (eq_attr "type" "fmov")
+ 					(eq_attr "memory" "store"))))
+ 			 "znver4-double,znver4-fpu1,znver5-fp-store256")
+ 
+ ;; FSQRT
+ (define_insn_reservation "znver4_fsqrt" 22
+ 			 (and (eq_attr "cpu" "znver4,znver5")
+ 			      (and (eq_attr "type" "fpspc")
+ 				   (and (eq_attr "mode" "XF")
+ 					(eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fdiv*10")
+ 
+ ;; FPSPC instructions
+ (define_insn_reservation "znver4_fp_spc" 6
+ 			 (and (eq_attr "cpu" "znver4,znver5")
+ 			      (and (eq_attr "type" "fpspc")
+ 				   (eq_attr "memory" "none")))
+ 			 "znver4-vector,znver4-fvector*6")
+ 
+ (define_insn_reservation "znver4_fp_insn_vector" 6
+ 			 (and (eq_attr "cpu" "znver4,znver5")
+ 			      (and (eq_attr "znver1_decode" "vector")
+ 				   (eq_attr "type" "mmxcvt,sselog1,ssemov")))
+ 			 "znver4-vector,znver4-fvector*6")
+ 
+ ;; FADD, FSUB, FMUL
+ (define_insn_reservation "znver4_fp_op_mul" 7
+ 			 (and (eq_attr "cpu" "znver4,znver5")
+ 			      (and (eq_attr "type" "fop,fmul")
+ 				   (eq_attr "memory" "none")))
+ 			 "znver4-direct,znver4-fpu0")
+ 
+ (define_insn_reservation "znver4_fp_op_mul_load" 12
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "fop,fmul")
+ 				   (eq_attr "memory" "load")))
+ 			 "znver4-direct,znver4-load,znver4-fpu0")
+ 
+ (define_insn_reservation "znver5_fp_op_mul_load" 12
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "fop,fmul")
+ 				   (eq_attr "memory" "load")))
+ 			 "znver4-direct,znver5-load,znver4-fpu0")
+ ;; FDIV
+ (define_insn_reservation "znver4_fp_div" 15
+ 			 (and (eq_attr "cpu" "znver4,znver5")
+ 			      (and (eq_attr "type" "fdiv")
+ 				   (eq_attr "memory" "none")))
+ 			 "znver4-direct,znver4-fdiv*6")
+ 
+ (define_insn_reservation "znver4_fp_div_load" 20
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "fdiv")
+ 				   (eq_attr "memory" "load")))
+ 			 "znver4-direct,znver4-load,znver4-fdiv*6")
+ 
+ (define_insn_reservation "znver5_fp_div_load" 20
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "fdiv")
+ 				   (eq_attr "memory" "load")))
+ 			 "znver4-direct,znver5-load,znver4-fdiv*6")
+ 
+ (define_insn_reservation "znver4_fp_idiv_load" 24
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "fdiv")
+ 				   (and (eq_attr "fp_int_src" "true")
+ 					(eq_attr "memory" "load"))))
+ 			 "znver4-double,znver4-load,znver4-fdiv*6")
+ 
+ (define_insn_reservation "znver5_fp_idiv_load" 24
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "fdiv")
+ 				   (and (eq_attr "fp_int_src" "true")
+ 					(eq_attr "memory" "load"))))
+ 			 "znver4-double,znver5-load,znver4-fdiv*6")
+ 
+ ;; FABS, FCHS
+ (define_insn_reservation "znver4_fp_fsgn" 1
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (eq_attr "type" "fsgn"))
+ 			 "znver4-direct,znver4-fpu0|znver4-fpu1")
+ 
+ (define_insn_reservation "znver5_fp_fsgn" 1
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (eq_attr "type" "fsgn"))
+ 			 "znver4-direct,znver4-fpu1|znver4-fpu2")
+ 
+ ;; FCMP
+ (define_insn_reservation "znver4_fp_fcmp" 3
+ 			 (and (eq_attr "cpu" "znver4,znver5")
+ 			      (and (eq_attr "type" "fcmp")
+ 				   (eq_attr "memory" "none")))
+ 			 "znver4-direct,znver4-fpu1")
+ 
+ (define_insn_reservation "znver4_fp_fcmp_double" 4
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "fcmp")
+ 				   (and (eq_attr "znver1_decode" "double")
+ 					(eq_attr "memory" "none"))))
+ 			 "znver4-double,znver4-fpu1,znver4-fpu2")
+ 
+ (define_insn_reservation "znver5_fp_fcmp_double" 4
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "fcmp")
+ 				   (and (eq_attr "znver1_decode" "double")
+ 					(eq_attr "memory" "none"))))
+ 			 "znver4-double,znver4-fpu1,znver5-fp-store256")
+ 
+ ;; MMX, SSE, SSEn.n instructions
+ (define_insn_reservation "znver4_fp_mmx	" 1
+ 			 (and (eq_attr "cpu" "znver4,znver5")
+ 			      (eq_attr "type" "mmx"))
+ 			 "znver4-direct,znver4-fpu1|znver4-fpu2")
+ 
+ (define_insn_reservation "znver4_mmx_add_cmp" 1
+ 			 (and (eq_attr "cpu" "znver4,znver5")
+ 			      (and (eq_attr "type" "mmxadd,mmxcmp")
+ 				   (eq_attr "memory" "none")))
+ 			 "znver4-direct,znver4-fpu")
+ 
+ (define_insn_reservation "znver4_mmx_add_cmp_load" 6
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "mmxadd,mmxcmp")
+ 				   (eq_attr "memory" "load")))
+ 			 "znver4-direct,znver4-load,znver4-fpu")
+ 
+ (define_insn_reservation "znver5_mmx_add_cmp_load" 6
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "mmxadd,mmxcmp")
+ 				   (eq_attr "memory" "load")))
+ 			 "znver4-direct,znver5-load,znver4-fpu")
+ 
+ (define_insn_reservation "znver4_mmx_insn" 1
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "mmxcvt,sseshuf,sseshuf1,mmxshft")
+ 				   (eq_attr "memory" "none")))
+ 			 "znver4-direct,znver4-fpu1|znver4-fpu2")
+ 
+ (define_insn_reservation "znver5_mmx_insn" 1
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "mmxcvt,sseshuf,sseshuf1,mmxshft")
+ 				   (eq_attr "memory" "none")))
+ 			 "znver4-direct,znver4-fpu0|znver4-fpu1|znver4-fpu2|znver4-fpu3")
+ 
+ (define_insn_reservation "znver4_mmx_insn_load" 6
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "mmxcvt,sseshuf,sseshuf1,mmxshft")
+ 				   (eq_attr "memory" "load")))
+ 			 "znver4-direct,znver4-load,znver4-fpu1|znver4-fpu2")
+ 
+ (define_insn_reservation "znver5_mmx_insn_load" 6
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "mmxcvt,sseshuf,sseshuf1,mmxshft")
+ 				   (eq_attr "memory" "load")))
+ 			 "znver4-direct,znver5-load,znver4-fpu0|znver4-fpu1|znver4-fpu2|znver4-fpu3")
+ 
+ (define_insn_reservation "znver4_mmx_mov" 1
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "mmxmov")
+ 				   (eq_attr "memory" "store")))
+ 			 "znver4-direct,znver4-fp-store")
+ 
+ (define_insn_reservation "znver5_mmx_mov" 1
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "mmxmov")
+ 				   (eq_attr "memory" "store")))
+ 			 "znver4-direct,znver5-fp-store256")
+ 
+ (define_insn_reservation "znver4_mmx_mov_load" 6
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "mmxmov")
+ 				   (eq_attr "memory" "both")))
+ 			 "znver4-direct,znver4-load,znver4-fp-store")
+ 
+ (define_insn_reservation "znver5_mmx_mov_load" 6
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "mmxmov")
+ 				   (eq_attr "memory" "both")))
+ 			 "znver4-direct,znver5-load,znver5-fp-store256")
+ 
+ (define_insn_reservation "znver4_mmx_mul" 3
+ 			 (and (eq_attr "cpu" "znver4,znver5")
+ 			      (and (eq_attr "type" "mmxmul")
+ 				   (eq_attr "memory" "none")))
+ 			  "znver4-direct,znver4-fpu0|znver4-fpu3")
+ 
+ (define_insn_reservation "znver4_mmx_mul_load" 8
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "mmxmul")
+ 				   (eq_attr "memory" "load")))
+ 			  "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu3")
+ 
+ (define_insn_reservation "znver5_mmx_mul_load" 8
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "mmxmul")
+ 				   (eq_attr "memory" "load")))
+ 			  "znver4-direct,znver5-load,znver4-fpu0|znver4-fpu3")
+ 
+ ;; AVX instructions
+ (define_insn_reservation "znver4_sse_log" 1
+ 			 (and (eq_attr "cpu" "znver4,znver5")
+ 			      (and (eq_attr "type" "sselog")
+ 				   (and (eq_attr "mode" "V4SF,V8SF,V2DF,V4DF,QI,HI,SI,DI,TI,OI")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fpu")
+ 
+ (define_insn_reservation "znver4_sse_log_load" 6
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "sselog")
+ 				   (and (eq_attr "mode" "V4SF,V8SF,V2DF,V4DF,QI,HI,SI,DI,TI,OI")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver4-load,znver4-fpu")
+ 
+ (define_insn_reservation "znver5_sse_log_load" 6
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "sselog")
+ 				   (and (eq_attr "mode" "V4SF,V8SF,V2DF,V4DF,QI,HI,SI,DI,TI,OI")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver5-load,znver4-fpu")
+ 
+ (define_insn_reservation "znver4_sse_log1" 1
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "sselog1")
+ 				   (and (eq_attr "mode" "V4SF,V8SF,V2DF,V4DF,QI,HI,SI,DI,TI,OI")
+ 				    (eq_attr "memory" "store"))))
+ 			 "znver4-direct,znver4-fpu1|znver4-fpu2,znver4-fp-store")
+ 
+ (define_insn_reservation "znver5_sse_log1" 1
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "sselog1")
+ 				   (and (eq_attr "mode" "V4SF,V8SF,V2DF,V4DF,QI,HI,SI,DI,TI,OI")
+ 				    (eq_attr "memory" "store"))))
+ 			 "znver4-direct,znver4-fpu1|znver4-fpu2,znver5-fp-store256")
+ 
+ (define_insn_reservation "znver4_sse_log1_load" 6
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "sselog1")
+ 				   (and (eq_attr "mode" "V4SF,V8SF,V2DF,V4DF,QI,HI,SI,DI,TI,OI")
+ 				    (eq_attr "memory" "both"))))
+ 			 "znver4-direct,znver4-load,znver4-fpu1|znver4-fpu2,znver4-fp-store")
+ 
+ (define_insn_reservation "znver5_sse_log1_load" 6
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "sselog1")
+ 				   (and (eq_attr "mode" "V4SF,V8SF,V2DF,V4DF,QI,HI,SI,DI,TI,OI")
+ 				    (eq_attr "memory" "both"))))
+ 			 "znver4-direct,znver5-load,znver4-fpu1|znver4-fpu2,znver5-fp-store256")
+ 
+ (define_insn_reservation "znver4_sse_comi" 1
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "ssecomi")
+ 				   (eq_attr "memory" "store")))
+ 			 "znver4-double,znver4-fpu2|znver4-fpu3,znver4-fp-store")
+ 
+ (define_insn_reservation "znver5_sse_comi" 1
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "ssecomi")
+ 				   (eq_attr "memory" "store")))
+ 			 "znver4-double,znver4-fpu2|znver4-fpu3,znver5-fp-store256")
+ 
+ (define_insn_reservation "znver4_sse_comi_load" 6
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "ssecomi")
+ 				   (eq_attr "memory" "both")))
+ 			 "znver4-double,znver4-load,znver4-fpu2|znver4-fpu3,znver4-fp-store")
+ 
+ (define_insn_reservation "znver5_sse_comi_load" 6
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "ssecomi")
+ 				   (eq_attr "memory" "both")))
+ 			 "znver4-double,znver5-load,znver4-fpu2|znver4-fpu3,znver5-fp-store256")
+ 
+ (define_insn_reservation "znver4_sse_test" 1
+ 			 (and (eq_attr "cpu" "znver4,znver5")
+ 			      (and (eq_attr "prefix_extra" "1")
+ 				   (and (eq_attr "type" "ssecomi")
+ 					(eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fpu1|znver4-fpu2")
+ 
+ (define_insn_reservation "znver4_sse_test_load" 6
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "prefix_extra" "1")
+ 				   (and (eq_attr "type" "ssecomi")
+ 					(eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver4-load,znver4-fpu1|znver4-fpu2")
+ 
+ (define_insn_reservation "znver5_sse_test_load" 6
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "prefix_extra" "1")
+ 				   (and (eq_attr "type" "ssecomi")
+ 					(eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver5-load,znver4-fpu1|znver4-fpu2")
+ 
+ (define_insn_reservation "znver4_sse_imul" 3
+ 			 (and (eq_attr "cpu" "znver4,znver5")
+ 			      (and (eq_attr "type" "sseimul")
+ 				   (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fpu0|znver4-fpu3")
+ 
+ (define_insn_reservation "znver4_sse_imul_load" 8
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "sseimul")
+ 				   (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu1")
+ 
+ (define_insn_reservation "znver5_sse_imul_load" 8
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "sseimul")
+ 				   (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver5-load,znver4-fpu0|znver4-fpu1")
+ 
+ (define_insn_reservation "znver4_sse_mov" 1
+ 			 (and (eq_attr "cpu" "znver4,znver5")
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fpu1|znver4-fpu2")
+ 
+ (define_insn_reservation "znver4_sse_mov_load" 6
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver4-load,znver4-fpu1|znver4-fpu2")
+ 
+ (define_insn_reservation "znver5_sse_mov_load" 6
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver5-load,znver4-fpu1|znver4-fpu2")
+ 
+ (define_insn_reservation "znver4_sse_mov_store" 1
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI")
+ 				    (eq_attr "memory" "store"))))
+ 			 "znver4-direct,znver4-fpu1|znver4-fpu2,znver4-fp-store")
+ 
+ (define_insn_reservation "znver5_sse_mov_store" 1
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI")
+ 				    (eq_attr "memory" "store"))))
+ 			 "znver4-direct,znver4-fpu1|znver4-fpu2,znver5-fp-store256")
+ 
+ (define_insn_reservation "znver4_sse_mov_fp" 1
+ 			 (and (eq_attr "cpu" "znver4,znver5")
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (and (eq_attr "mode" "V16SF,V8DF,V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fpu")
+ 
+ (define_insn_reservation "znver4_sse_mov_fp_load" 6
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (and (eq_attr "mode" "V16SF,V8DF,V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver4-load,znver4-fpu")
+ 
+ (define_insn_reservation "znver5_sse_mov_fp_load" 6
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (and (eq_attr "mode" "V16SF,V8DF,V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver5-load,znver4-fpu")
+ 
+ (define_insn_reservation "znver4_sse_mov_fp_store" 1
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (and (eq_attr "mode" "V16SF,V8DF,V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF")
+ 				    (eq_attr "memory" "store"))))
+ 			 "znver4-direct,znver4-fp-store")
+ 
+ (define_insn_reservation "znver5_sse_mov_fp_store" 1
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF")
+ 				    (eq_attr "memory" "store"))))
+ 			 "znver4-direct,znver5-fp-store256")
+ 
+ (define_insn_reservation "znver5_sse_mov_fp_store_512" 1
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (and (eq_attr "mode" "V16SF,V8DF")
+ 				    (eq_attr "memory" "store"))))
+ 			 "znver4-direct,znver5-fp-store-512")
+ 
+ (define_insn_reservation "znver4_sse_add" 3
+ 			 (and (eq_attr "cpu" "znver4,znver5")
+ 			      (and (eq_attr "type" "sseadd")
+ 				   (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fpu2|znver4-fpu3")
+ 
+ (define_insn_reservation "znver4_sse_add_load" 8
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "sseadd")
+ 				   (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver4-load,znver4-fpu2|znver4-fpu3")
+ 
+ (define_insn_reservation "znver5_sse_add_load" 8
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "sseadd")
+ 				   (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver5-load,znver4-fpu2|znver4-fpu3")
+ 
+ (define_insn_reservation "znver4_sse_add1" 4
+ 			 (and (eq_attr "cpu" "znver4,znver5")
+ 			      (and (eq_attr "type" "sseadd1")
+ 				   (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-vector,znver4-fvector*2")
+ 
+ (define_insn_reservation "znver4_sse_add1_load" 9
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "sseadd1")
+ 				   (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-vector,znver4-load,znver4-fvector*2")
+ 
+ (define_insn_reservation "znver5_sse_add1_load" 9
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "sseadd1")
+ 				   (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-vector,znver5-load,znver4-fvector*2")
+ 
+ (define_insn_reservation "znver4_sse_iadd" 1
+ 			 (and (eq_attr "cpu" "znver4,znver5")
+ 			      (and (eq_attr "type" "sseiadd")
+ 				   (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fpu")
+ 
+ (define_insn_reservation "znver4_sse_iadd_load" 6
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "sseiadd")
+ 				   (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver4-load,znver4-fpu")
+ 
+ (define_insn_reservation "znver5_sse_iadd_load" 6
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "sseiadd")
+ 				   (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver5-load,znver4-fpu")
+ 
+ (define_insn_reservation "znver4_sse_mul" 3
+ 			 (and (eq_attr "cpu" "znver4,znver5")
+ 			      (and (eq_attr "type" "ssemul")
+ 				   (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fpu0|znver4-fpu1")
+ 
+ (define_insn_reservation "znver4_sse_mul_load" 8
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "ssemul")
+ 				   (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu1")
+ 
+ (define_insn_reservation "znver5_sse_mul_load" 8
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "ssemul")
+ 				   (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver5-load,znver4-fpu0|znver4-fpu1")
+ 
+ (define_insn_reservation "znver4_sse_div_pd" 13
+ 			 (and (eq_attr "cpu" "znver4,znver5")
+ 			      (and (eq_attr "type" "ssediv")
+ 				   (and (eq_attr "mode" "V4DF,V2DF,V1DF")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fdiv*5")
+ 
+ (define_insn_reservation "znver4_sse_div_ps" 10
+ 			 (and (eq_attr "cpu" "znver4,znver5")
+ 			      (and (eq_attr "type" "ssediv")
+ 				   (and (eq_attr "mode" "V8SF,V4SF,V2SF,SF")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fdiv*3")
+ 
+ (define_insn_reservation "znver4_sse_div_pd_load" 18
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "ssediv")
+ 				   (and (eq_attr "mode" "V4DF,V2DF,V1DF")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver4-load,znver4-fdiv*5")
+ 
+ (define_insn_reservation "znver5_sse_div_pd_load" 18
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "ssediv")
+ 				   (and (eq_attr "mode" "V4DF,V2DF,V1DF")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver5-load,znver4-fdiv*5")
+ 
+ (define_insn_reservation "znver4_sse_div_ps_load" 15
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "ssediv")
+ 				   (and (eq_attr "mode" "V8SF,V4SF,V2SF,SF")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver4-load,znver4-fdiv*3")
+ 
+ (define_insn_reservation "znver5_sse_div_ps_load" 15
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "ssediv")
+ 				   (and (eq_attr "mode" "V8SF,V4SF,V2SF,SF")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver5-load,znver4-fdiv*3")
+ 
+ (define_insn_reservation "znver4_sse_cmp_avx" 1
+ 			 (and (eq_attr "cpu" "znver4,znver5")
+ 			      (and (eq_attr "type" "ssecmp")
+ 				   (and (eq_attr "prefix" "vex")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fpu0|znver4-fpu1")
+ 
+ (define_insn_reservation "znver4_sse_cmp_avx_load" 6
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "ssecmp")
+ 				   (and (eq_attr "prefix" "vex")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu1")
+ 
+ (define_insn_reservation "znver5_sse_cmp_avx_load" 6
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "ssecmp")
+ 				   (and (eq_attr "prefix" "vex")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver5-load,znver4-fpu0|znver4-fpu1")
+ 
+ (define_insn_reservation "znver4_sse_comi_avx" 1
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "ssecomi")
+ 				   (eq_attr "memory" "store")))
+ 			 "znver4-direct,znver4-fpu2+znver4-fpu3,znver4-fp-store")
+ 
+ (define_insn_reservation "znver5_sse_comi_avx" 1
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "ssecomi")
+ 				   (eq_attr "memory" "store")))
+ 			 "znver4-direct,znver4-fpu2+znver4-fpu3,znver5-fp-store256")
+ 
+ (define_insn_reservation "znver4_sse_comi_avx_load" 6
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "ssecomi")
+ 				   (eq_attr "memory" "both")))
+ 			 "znver4-direct,znver4-load,znver4-fpu2+znver4-fpu3,znver4-fp-store")
+ 
+ (define_insn_reservation "znver5_sse_comi_avx_load" 6
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "ssecomi")
+ 				   (eq_attr "memory" "both")))
+ 			 "znver4-direct,znver5-load,znver4-fpu2+znver4-fpu3,znver5-fp-store256")
+ 
+ (define_insn_reservation "znver4_sse_cvt" 3
+ 			 (and (eq_attr "cpu" "znver4,znver5")
+ 			      (and (eq_attr "type" "ssecvt")
+ 				   (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fpu2|znver4-fpu3")
+ 
+ (define_insn_reservation "znver4_sse_cvt_load" 8
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "ssecvt")
+ 				   (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver4-load,znver4-fpu2|znver4-fpu3")
+ 
+ (define_insn_reservation "znver5_sse_cvt_load" 8
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "ssecvt")
+ 				   (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver5-load,znver4-fpu2|znver4-fpu3")
+ 
+ (define_insn_reservation "znver4_sse_icvt" 3
+ 			 (and (eq_attr "cpu" "znver4,znver5")
+ 			      (and (eq_attr "type" "ssecvt")
+ 				   (and (eq_attr "mode" "SI")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fpu2|znver4-fpu3")
+ 
+ (define_insn_reservation "znver4_sse_icvt_store" 4
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "ssecvt")
+ 				   (and (eq_attr "mode" "SI")
+ 				    (eq_attr "memory" "store"))))
+ 			 "znver4-double,znver4-fpu2|znver4-fpu3,znver4-fp-store")
+ 
+ (define_insn_reservation "znver5_sse_icvt_store" 4
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "ssecvt")
+ 				   (and (eq_attr "mode" "SI")
+ 				    (eq_attr "memory" "store"))))
+ 			 "znver4-double,znver4-fpu2|znver4-fpu3,znver5-fp-store256")
+ 
+ (define_insn_reservation "znver4_sse_shuf" 1
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "sseshuf")
+ 				   (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fpu1|znver4-fpu2")
+ 
+ (define_insn_reservation "znver5_sse_shuf" 1
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "sseshuf")
+ 				   (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fpu1|znver4-fpu2|znver4-fpu3")
+ 
+ (define_insn_reservation "znver4_sse_shuf_load" 6
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "sseshuf")
+ 				   (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver4-load,znver4-fpu")
+ 
+ (define_insn_reservation "znver5_sse_shuf_load" 6
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "sseshuf")
+ 				   (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver5-load,znver4-fpu")
+ 
+ (define_insn_reservation "znver4_sse_ishuf" 3
+ 			 (and (eq_attr "cpu" "znver4,znver5")
+ 			      (and (eq_attr "type" "sseshuf")
+ 				   (and (eq_attr "mode" "OI")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fpu1|znver4-fpu2")
+ 
+ (define_insn_reservation "znver4_sse_ishuf_load" 8
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "sseshuf")
+ 				   (and (eq_attr "mode" "OI")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver4-load,znver4-fpu1|znver4-fpu2")
+ 
+ (define_insn_reservation "znver5_sse_ishuf_load" 8
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "sseshuf")
+ 				   (and (eq_attr "mode" "OI")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver5-load,znver4-fpu1|znver4-fpu2")
+ 
+ ;; AVX512 instructions
+ (define_insn_reservation "znver4_sse_log_evex" 1
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "sselog")
+ 				   (and (eq_attr "mode" "V16SF,V8DF,XI")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fpu0*2|znver4-fpu1*2|znver4-fpu2*2|znver4-fpu3*2")
+ 
+ (define_insn_reservation "znver5_sse_log_evex" 1
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "sselog")
+ 				   (and (eq_attr "mode" "V16SF,V8DF,XI")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fpu0|znver4-fpu1|znver4-fpu2|znver4-fpu3")
+ 
+ (define_insn_reservation "znver4_sse_log_evex_load" 7
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "sselog")
+ 				   (and (eq_attr "mode" "V16SF,V8DF,XI")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2|znver4-fpu2*2|znver4-fpu3*2")
+ 
+ (define_insn_reservation "znver5_sse_log_evex_load" 7
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "sselog")
+ 				   (and (eq_attr "mode" "V16SF,V8DF,XI")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver5-load,znver4-fpu0|znver4-fpu1|znver4-fpu2|znver4-fpu3")
+ 
+ (define_insn_reservation "znver4_sse_log1_evex" 1
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "sselog1")
+ 				   (and (eq_attr "mode" "V16SF,V8DF,XI")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fpu1*2|znver4-fpu2*2,znver4-fp-store")
+ 
+ (define_insn_reservation "znver5_sse_log1_evex" 1
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "sselog1")
+ 				   (and (eq_attr "mode" "V16SF,V8DF,XI")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fpu1|znver4-fpu2,znver5-fp-store-512")
+ 
+ (define_insn_reservation "znver4_sse_log1_evex_load" 7
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "sselog1")
+ 				   (and (eq_attr "mode" "V16SF,V8DF,XI")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver4-load,znver4-fpu1*2|znver4-fpu2*2,znver4-fp-store")
+ 
+ (define_insn_reservation "znver5_sse_log1_evex_load" 7
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "sselog1")
+ 				   (and (eq_attr "mode" "V16SF,V8DF,XI")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver5-load,znver4-fpu1|znver4-fpu2,znver5-fp-store-512")
+ 
+ (define_insn_reservation "znver4_sse_mul_evex" 3
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "ssemul")
+ 				   (and (eq_attr "mode" "V16SF,V8DF")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fpu0*2|znver4-fpu1*2")
+ 
+ (define_insn_reservation "znver5_sse_mul_evex" 3
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "ssemul")
+ 				   (and (eq_attr "mode" "V16SF,V8DF")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fpu0|znver4-fpu1")
+ 
+ (define_insn_reservation "znver4_sse_mul_evex_load" 9
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "ssemul")
+ 				   (and (eq_attr "mode" "V16SF,V8DF")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2")
+ 
+ (define_insn_reservation "znver5_sse_mul_evex_load" 9
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "ssemul")
+ 				   (and (eq_attr "mode" "V16SF,V8DF")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu1")
+ 
+ (define_insn_reservation "znver4_sse_imul_evex" 3
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "sseimul")
+ 				   (and (eq_attr "mode" "XI")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fpu0*2|znver4-fpu3*2")
+ 
+ (define_insn_reservation "znver5_sse_imul_evex" 3
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "sseimul")
+ 				   (and (eq_attr "mode" "XI")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fpu0|znver4-fpu3")
+ 
+ (define_insn_reservation "znver4_sse_imul_evex_load" 9
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "sseimul")
+ 				   (and (eq_attr "mode" "XI")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2")
+ 
+ (define_insn_reservation "znver5_sse_imul_evex_load" 9
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "sseimul")
+ 				   (and (eq_attr "mode" "XI")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu1")
+ 
+ (define_insn_reservation "znver4_sse_mov_evex" 4
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (and (eq_attr "mode" "XI")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fpu1*2|znver4-fpu2*2")
+ 
+ (define_insn_reservation "znver5_sse_mov_evex" 2
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (and (eq_attr "mode" "XI")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fpu1|znver4-fpu2")
+ 
+ (define_insn_reservation "znver4_sse_mov_evex_load" 10
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (and (eq_attr "mode" "XI")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver4-load,znver4-fpu1*2|znver4-fpu2*2")
+ 
+ (define_insn_reservation "znver5_sse_mov_evex_load" 8
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (and (eq_attr "mode" "XI")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver4-load,znver4-fpu1|znver4-fpu2")
+ 
+ (define_insn_reservation "znver4_sse_mov_evex_store" 5
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (and (eq_attr "mode" "XI")
+ 				    (eq_attr "memory" "store"))))
+ 			 "znver4-direct,znver4-fpu1*2|znver4-fpu2*2,znver4-fp-store")
+ 
+ (define_insn_reservation "znver5_sse_mov_evex_store" 3
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (and (eq_attr "mode" "XI")
+ 				    (eq_attr "memory" "store"))))
+ 			 "znver4-direct,znver4-fpu1|znver4-fpu2,znver5-fp-store-512")
+ 
+ (define_insn_reservation "znver4_sse_add_evex" 3
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "sseadd")
+ 				   (and (eq_attr "mode" "V16SF,V8DF")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fpu2*2|znver4-fpu3*2")
+ 
+ (define_insn_reservation "znver5_sse_add_evex" 2
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "sseadd")
+ 				   (and (eq_attr "mode" "V16SF,V8DF")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fpu2|znver4-fpu3")
+ 
+ (define_insn_reservation "znver4_sse_add_evex_load" 9
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "sseadd")
+ 				   (and (eq_attr "mode" "V16SF,V8DF")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver4-load,znver4-fpu2*2|znver4-fpu3*2")
+ 
+ (define_insn_reservation "znver5_sse_add_evex_load" 8
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "sseadd")
+ 				   (and (eq_attr "mode" "V16SF,V8DF")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver4-load,znver4-fpu2|znver4-fpu3")
+ 
+ (define_insn_reservation "znver4_sse_iadd_evex" 1
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "sseiadd")
+ 				   (and (eq_attr "mode" "XI")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fpu0*2|znver4-fpu1*2|znver4-fpu2*2|znver4-fpu3*2")
+ 
+ (define_insn_reservation "znver5_sse_iadd_evex" 1
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "sseiadd")
+ 				   (and (eq_attr "mode" "XI")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fpu0|znver4-fpu1|znver4-fpu2|znver4-fpu3")
+ 
+ (define_insn_reservation "znver4_sse_iadd_evex_load" 7
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "sseiadd")
+ 				   (and (eq_attr "mode" "XI")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2|znver4-fpu2*2|znver4-fpu3*2")
+ 
+ (define_insn_reservation "znver5_sse_iadd_evex_load" 7
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "sseiadd")
+ 				   (and (eq_attr "mode" "XI")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu1|znver4-fpu2|znver4-fpu3")
+ 
+ (define_insn_reservation "znver4_sse_div_pd_evex" 13
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "ssediv")
+ 				   (and (eq_attr "mode" "V8DF")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fdiv*9")
+ 
+ (define_insn_reservation "znver5_sse_div_pd_evex" 13
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "ssediv")
+ 				   (and (eq_attr "mode" "V8DF")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fdiv*9")
+ 
+ (define_insn_reservation "znver4_sse_div_ps_evex" 10
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "ssediv")
+ 				   (and (eq_attr "mode" "V16SF")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fdiv*6")
+ 
+ (define_insn_reservation "znver5_sse_div_ps_evex" 10
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "ssediv")
+ 				   (and (eq_attr "mode" "V16SF")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fdiv*6")
+ 
+ (define_insn_reservation "znver4_sse_div_pd_evex_load" 19
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "ssediv")
+ 				   (and (eq_attr "mode" "V8DF")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver4-load,znver4-fdiv*9")
+ 
+ (define_insn_reservation "znver5_sse_div_pd_evex_load" 19
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "ssediv")
+ 				   (and (eq_attr "mode" "V8DF")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver5-load,znver4-fdiv*9")
+ 
+ (define_insn_reservation "znver4_sse_div_ps_evex_load" 16
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "ssediv")
+ 				   (and (eq_attr "mode" "V16SF")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver4-load,znver4-fdiv*6")
+ 
+ (define_insn_reservation "znver5_sse_div_ps_evex_load" 16
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "ssediv")
+ 				   (and (eq_attr "mode" "V16SF")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver5-load,znver4-fdiv*6")
+ 
+ (define_insn_reservation "znver4_sse_cmp_avx128" 3
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "ssecmp")
+ 				   (and (eq_attr "mode" "V4SF,V2DF,V2SF,V1DF,SF")
+ 				    (and (eq_attr "prefix" "evex")
+ 					 (eq_attr "memory" "none")))))
+ 			 "znver4-direct,znver4-fpu0*2|znver4-fpu1*2")
+ 
+ (define_insn_reservation "znver5_sse_cmp_avx128" 3
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "ssecmp")
+ 				   (and (eq_attr "mode" "V4SF,V2DF,V2SF,V1DF,SF")
+ 				    (and (eq_attr "prefix" "evex")
+ 					 (eq_attr "memory" "none")))))
+ 			 "znver4-direct,znver4-fpu1|znver4-fpu2")
+ 
+ (define_insn_reservation "znver4_sse_cmp_avx128_load" 9
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "ssecmp")
+ 				   (and (eq_attr "mode" "V4SF,V2DF,V2SF,V1DF,SF")
+ 				    (and (eq_attr "prefix" "evex")
+ 					 (eq_attr "memory" "load")))))
+ 			 "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2")
+ 
+ (define_insn_reservation "znver5_sse_cmp_avx128_load" 9
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "ssecmp")
+ 				   (and (eq_attr "mode" "V4SF,V2DF,V2SF,V1DF,SF")
+ 				    (and (eq_attr "prefix" "evex")
+ 					 (eq_attr "memory" "load")))))
+ 			 "znver4-direct,znver5-load,znver4-fpu1|znver4-fpu2")
+ 
+ (define_insn_reservation "znver4_sse_cmp_avx256" 4
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "ssecmp")
+ 				   (and (eq_attr "mode" "V8SF,V4DF")
+ 				    (and (eq_attr "prefix" "evex")
+ 					 (eq_attr "memory" "none")))))
+ 			 "znver4-direct,znver4-fpu0*2|znver4-fpu1*2")
+ 
+ (define_insn_reservation "znver5_sse_cmp_avx256" 4
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "ssecmp")
+ 				   (and (eq_attr "mode" "V8SF,V4DF")
+ 				    (and (eq_attr "prefix" "evex")
+ 					 (eq_attr "memory" "none")))))
+ 			 "znver4-direct,znver4-fpu1|znver4-fpu2")
+ 
+ (define_insn_reservation "znver4_sse_cmp_avx256_load" 10
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "ssecmp")
+ 				   (and (eq_attr "mode" "V8SF,V4DF")
+ 				    (and (eq_attr "prefix" "evex")
+ 					 (eq_attr "memory" "load")))))
+ 			 "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2")
+ 
+ (define_insn_reservation "znver5_sse_cmp_avx256_load" 10
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "ssecmp")
+ 				   (and (eq_attr "mode" "V8SF,V4DF")
+ 				    (and (eq_attr "prefix" "evex")
+ 					 (eq_attr "memory" "load")))))
+ 			 "znver4-direct,znver5-load,znver4-fpu1|znver4-fpu2")
+ 
+ (define_insn_reservation "znver4_sse_cmp_avx512" 5
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "ssecmp")
+ 				   (and (eq_attr "mode" "V16SF,V8DF")
+ 				    (and (eq_attr "prefix" "evex")
+ 					 (eq_attr "memory" "none")))))
+ 			 "znver4-direct,znver4-fpu0*2|znver4-fpu1*2")
+ 
+ (define_insn_reservation "znver5_sse_cmp_avx512" 5
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "ssecmp")
+ 				   (and (eq_attr "mode" "V16SF,V8DF")
+ 				    (and (eq_attr "prefix" "evex")
+ 					 (eq_attr "memory" "none")))))
+ 			 "znver4-direct,znver4-fpu1|znver4-fpu2")
+ 
+ (define_insn_reservation "znver4_sse_cmp_avx512_load" 11
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "ssecmp")
+ 				   (and (eq_attr "mode" "V16SF,V8DF")
+ 				    (and (eq_attr "prefix" "evex")
+ 					 (eq_attr "memory" "load")))))
+ 			 "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2")
+ 
+ (define_insn_reservation "znver5_sse_cmp_avx512_load" 11
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "ssecmp")
+ 				   (and (eq_attr "mode" "V16SF,V8DF")
+ 				    (and (eq_attr "prefix" "evex")
+ 					 (eq_attr "memory" "load")))))
+ 			 "znver4-direct,znver5-load,znver4-fpu1|znver4-fpu2")
+ 
+ (define_insn_reservation "znver4_sse_cvt_evex" 6
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "ssecvt")
+ 				   (and (eq_attr "mode" "V16SF,V8DF")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fpu1*2|znver4-fpu2*2,znver4-fpu2*2|znver4-fpu3*2")
+ 
+ (define_insn_reservation "znver5_sse_cvt_evex" 6
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "ssecvt")
+ 				   (and (eq_attr "mode" "V16SF,V8DF")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fpu1|znver4-fpu2,znver4-fpu2|znver4-fpu3")
+ 
+ (define_insn_reservation "znver4_sse_cvt_evex_load" 12
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "ssecvt")
+ 				   (and (eq_attr "mode" "V16SF,V8DF")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver4-load,znver4-fpu1*2|znver4-fpu2*2,znver4-fpu2*2|znver4-fpu3*2")
+ 
+ (define_insn_reservation "znver5_sse_cvt_evex_load" 12
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "ssecvt")
+ 				   (and (eq_attr "mode" "V16SF,V8DF")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver5-load,znver4-fpu1|znver4-fpu2,znver4-fpu2|znver4-fpu3")
+ 
+ (define_insn_reservation "znver4_sse_shuf_evex" 1
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "sseshuf")
+ 				   (and (eq_attr "mode" "V16SF,V8DF")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fpu0*2|znver4-fpu1*2|znver4-fpu2*2|znver4-fpu3*2")
+ 
+ (define_insn_reservation "znver5_sse_shuf_evex" 1
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "sseshuf")
+ 				   (and (eq_attr "mode" "V16SF,V8DF")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fpu0|znver4-fpu1|znver4-fpu2|znver4-fpu3")
+ 
+ (define_insn_reservation "znver4_sse_shuf_evex_load" 7
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "sseshuf")
+ 				   (and (eq_attr "mode" "V16SF,V8DF")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2|znver4-fpu2*2|znver4-fpu3*2")
+ 
+ (define_insn_reservation "znver5_sse_shuf_evex_load" 7
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "sseshuf")
+ 				   (and (eq_attr "mode" "V16SF,V8DF")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver5-load,znver4-fpu0|znver4-fpu1|znver4-fpu2|znver4-fpu3")
+ 
+ (define_insn_reservation "znver4_sse_ishuf_evex" 4
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "sseshuf")
+ 				   (and (eq_attr "mode" "XI")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fpu1*2|znver4-fpu2*2")
+ 
+ (define_insn_reservation "znver5_sse_ishuf_evex" 5
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "sseshuf")
+ 				   (and (eq_attr "mode" "XI")
+ 				    (eq_attr "memory" "none"))))
+ 			 "znver4-direct,znver4-fpu1|znver4-fpu2")
+ 
+ (define_insn_reservation "znver4_sse_ishuf_evex_load" 10
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "sseshuf")
+ 				   (and (eq_attr "mode" "XI")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver4-load,znver4-fpu1*2|znver4-fpu2*2")
+ 
+ (define_insn_reservation "znver5_sse_ishuf_evex_load" 10
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "sseshuf")
+ 				   (and (eq_attr "mode" "XI")
+ 				    (eq_attr "memory" "load"))))
+ 			 "znver4-direct,znver5-load,znver4-fpu1|znver4-fpu2")
+ 
+ (define_insn_reservation "znver4_sse_muladd" 4
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "ssemuladd")
+ 				   (eq_attr "memory" "none")))
+ 			 "znver4-direct,znver4-fpu0*2|znver4-fpu1*2")
+ 
+ (define_insn_reservation "znver5_sse_muladd" 4
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "ssemuladd")
+ 				   (eq_attr "memory" "none")))
+ 			 "znver4-direct,znver4-fpu0|znver4-fpu1")
+ 
+ (define_insn_reservation "znver4_sse_muladd_load" 10
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "sseshuf")
+ 				   (eq_attr "memory" "load")))
+ 			 "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2")
+ 
+ (define_insn_reservation "znver5_sse_muladd_load" 10
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "sseshuf")
+ 				   (eq_attr "memory" "load")))
+ 			 "znver4-direct,znver5-load,znver4-fpu1|znver4-fpu2")
+ 
+ ;; AVX512 mask instructions
+ 
+ (define_insn_reservation "znver4_sse_mskmov" 2
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "mskmov")
+ 				   (eq_attr "memory" "none")))
+ 			 "znver4-direct,znver4-fpu0*2|znver4-fpu1*2")
+ 
+ (define_insn_reservation "znver5_sse_mskmov" 2
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "mskmov")
+ 				   (eq_attr "memory" "none")))
+ 			 "znver4-direct,znver4-fpu0|znver4-fpu1")
+ 
+ (define_insn_reservation "znver4_sse_msklog" 1
+ 			 (and (eq_attr "cpu" "znver4")
+ 			      (and (eq_attr "type" "msklog")
+ 				   (eq_attr "memory" "none")))
+ 			 "znver4-direct,znver4-fpu2*2|znver4-fpu3*2")
+ 
+ (define_insn_reservation "znver5_sse_msklog" 1
+ 			 (and (eq_attr "cpu" "znver5")
+ 			      (and (eq_attr "type" "msklog")
+ 				   (eq_attr "memory" "none")))
+ 			 "znver4-direct,znver4-fpu0|znver4-fpu3")
diff -Nrcpad gcc-13.3.0/gcc/config/i386/znver4.md gcc-13.4.0/gcc/config/i386/znver4.md
*** gcc-13.3.0/gcc/config/i386/znver4.md	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/i386/znver4.md	Thu Jan  1 00:00:00 1970
***************
*** 1,1068 ****
- ;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
- ;;
- ;; This file is part of GCC.
- ;;
- ;; GCC is free software; you can redistribute it and/or modify
- ;; it under the terms of the GNU General Public License as published by
- ;; the Free Software Foundation; either version 3, or (at your option)
- ;; any later version.
- ;;
- ;; GCC is distributed in the hope that it will be useful,
- ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
- ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- ;; GNU General Public License for more details.
- ;;
- ;; You should have received a copy of the GNU General Public License
- ;; along with GCC; see the file COPYING3.  If not see
- ;; <http://www.gnu.org/licenses/>.
- ;;
- 
- 
- (define_attr "znver4_decode" "direct,vector,double"
-   (const_string "direct"))
- 
- ;; AMD znver4 Scheduling
- ;; Modeling automatons for zen decoders, integer execution pipes,
- ;; AGU pipes, branch, floating point execution and fp store units.
- (define_automaton "znver4, znver4_ieu, znver4_idiv, znver4_fdiv, znver4_agu, znver4_fpu, znver4_fp_store")
- 
- ;; Decoders unit has 4 decoders and all of them can decode fast path
- ;; and vector type instructions.
- (define_cpu_unit "znver4-decode0" "znver4")
- (define_cpu_unit "znver4-decode1" "znver4")
- (define_cpu_unit "znver4-decode2" "znver4")
- (define_cpu_unit "znver4-decode3" "znver4")
- 
- ;; Currently blocking all decoders for vector path instructions as
- ;; they are dispatched separetely as microcode sequence.
- (define_reservation "znver4-vector" "znver4-decode0+znver4-decode1+znver4-decode2+znver4-decode3")
- 
- ;; Direct instructions can be issued to any of the four decoders.
- (define_reservation "znver4-direct" "znver4-decode0|znver4-decode1|znver4-decode2|znver4-decode3")
- 
- ;; Fix me: Need to revisit this later to simulate fast path double behavior.
- (define_reservation "znver4-double" "znver4-direct")
- 
- 
- ;; Integer unit 4 ALU pipes.
- (define_cpu_unit "znver4-ieu0" "znver4_ieu")
- (define_cpu_unit "znver4-ieu1" "znver4_ieu")
- (define_cpu_unit "znver4-ieu2" "znver4_ieu")
- (define_cpu_unit "znver4-ieu3" "znver4_ieu")
- ;; Znver4 has an additional branch unit.
- (define_cpu_unit "znver4-bru0" "znver4_ieu")
- (define_reservation "znver4-ieu" "znver4-ieu0|znver4-ieu1|znver4-ieu2|znver4-ieu3")
- 
- ;; 3 AGU pipes in znver4
- (define_cpu_unit "znver4-agu0" "znver4_agu")
- (define_cpu_unit "znver4-agu1" "znver4_agu")
- (define_cpu_unit "znver4-agu2" "znver4_agu")
- (define_reservation "znver4-agu-reserve" "znver4-agu0|znver4-agu1|znver4-agu2")
- 
- ;; Load is 4 cycles. We do not model reservation of load unit.
- (define_reservation "znver4-load" "znver4-agu-reserve")
- (define_reservation "znver4-store" "znver4-agu-reserve")
- 
- ;; vectorpath (microcoded) instructions are single issue instructions.
- ;; So, they occupy all the integer units.
- (define_reservation "znver4-ivector" "znver4-ieu0+znver4-ieu1
- 				      +znver4-ieu2+znver4-ieu3+znver4-bru0
- 				      +znver4-agu0+znver4-agu1+znver4-agu2")
- 
- ;; Floating point unit 4 FP pipes.
- (define_cpu_unit "znver4-fpu0" "znver4_fpu")
- (define_cpu_unit "znver4-fpu1" "znver4_fpu")
- (define_cpu_unit "znver4-fpu2" "znver4_fpu")
- (define_cpu_unit "znver4-fpu3" "znver4_fpu")
- 
- (define_reservation "znver4-fpu" "znver4-fpu0|znver4-fpu1|znver4-fpu2|znver4-fpu3")
- 
- (define_reservation "znver4-fvector" "znver4-fpu0+znver4-fpu1
- 				      +znver4-fpu2+znver4-fpu3
- 				      +znver4-agu0+znver4-agu1+znver4-agu2")
- 
- ;; DIV units
- (define_cpu_unit "znver4-idiv" "znver4_idiv")
- (define_cpu_unit "znver4-fdiv" "znver4_fdiv")
- 
- ;; Separate fp store and fp-to-int store. Although there are 2 store pipes, the
- ;; throughput is limited to only one per cycle.
- (define_cpu_unit "znver4-fp-store" "znver4_fp_store")
- 
- 
- ;; Integer Instructions
- ;; Move instructions
- ;; XCHG
- (define_insn_reservation "znver4_imov_double" 1
- 			(and (eq_attr "cpu" "znver4")
- 				 (and (eq_attr "znver1_decode" "double")
- 				  (and (eq_attr "type" "imov")
- 				   (eq_attr "memory" "none"))))
- 			 "znver4-double,znver4-ieu")
- 
- (define_insn_reservation "znver4_imov_double_load" 5
- 			(and (eq_attr "cpu" "znver4")
- 				 (and (eq_attr "znver1_decode" "double")
- 				  (and (eq_attr "type" "imov")
- 				   (eq_attr "memory" "load"))))
- 			 "znver4-double,znver4-load,znver4-ieu")
- 
- ;; imov, imovx
- (define_insn_reservation "znver4_imov" 1
-             (and (eq_attr "cpu" "znver4")
- 				 (and (eq_attr "type" "imov,imovx")
- 				  (eq_attr "memory" "none")))
-              "znver4-direct,znver4-ieu")
- 
- (define_insn_reservation "znver4_imov_load" 5
- 			(and (eq_attr "cpu" "znver4")
- 				 (and (eq_attr "type" "imov,imovx")
- 				  (eq_attr "memory" "load")))
- 			 "znver4-direct,znver4-load,znver4-ieu")
- 
- ;; Push Instruction
- (define_insn_reservation "znver4_push" 1
- 			(and (eq_attr "cpu" "znver4")
- 			     (and (eq_attr "type" "push")
- 				  (eq_attr "memory" "store")))
- 			 "znver4-direct,znver4-store")
- 
- (define_insn_reservation "znver4_push_mem" 5
- 			(and (eq_attr "cpu" "znver4")
- 				 (and (eq_attr "type" "push")
- 				  (eq_attr "memory" "both")))
- 			 "znver4-direct,znver4-load,znver4-store")
- 
- ;; Pop instruction
- (define_insn_reservation "znver4_pop" 4
- 			(and (eq_attr "cpu" "znver4")
- 			     (and (eq_attr "type" "pop")
- 				  (eq_attr "memory" "load")))
- 			 "znver4-direct,znver4-load")
- 
- (define_insn_reservation "znver4_pop_mem" 5
-             (and (eq_attr "cpu" "znver4")
-                  (and (eq_attr "type" "pop")
-                   (eq_attr "memory" "both")))
-              "znver4-direct,znver4-load,znver4-store")
- 
- ;; Integer Instructions or General instructions
- ;; Multiplications
- (define_insn_reservation "znver4_imul" 3
- 			(and (eq_attr "cpu" "znver4")
- 			     (and (eq_attr "type" "imul")
- 				  (eq_attr "memory" "none")))
- 			 "znver4-direct,znver4-ieu1")
- 
- (define_insn_reservation "znver4_imul_load" 7
- 			(and (eq_attr "cpu" "znver4")
- 			     (and (eq_attr "type" "imul")
- 				  (eq_attr "memory" "load")))
- 			 "znver4-direct,znver4-load,znver4-ieu1")
- 
- ;; Divisions
- (define_insn_reservation "znver4_idiv_DI" 18
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "idiv")
- 				   (and (eq_attr "mode" "DI")
- 					(eq_attr "memory" "none"))))
- 			 "znver4-double,znver4-idiv*10")
- 
- (define_insn_reservation "znver4_idiv_SI" 12
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "idiv")
- 				   (and (eq_attr "mode" "SI")
- 					(eq_attr "memory" "none"))))
- 			 "znver4-double,znver4-idiv*6")
- 
- (define_insn_reservation "znver4_idiv_HI" 10
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "idiv")
- 				   (and (eq_attr "mode" "HI")
- 					(eq_attr "memory" "none"))))
- 			 "znver4-double,znver4-idiv*4")
- 
- (define_insn_reservation "znver4_idiv_QI" 9
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "idiv")
- 				   (and (eq_attr "mode" "QI")
- 					(eq_attr "memory" "none"))))
- 			 "znver4-double,znver4-idiv*4")
- 
- (define_insn_reservation "znver4_idiv_DI_load" 22
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "idiv")
- 				   (and (eq_attr "mode" "DI")
- 					(eq_attr "memory" "load"))))
- 			 "znver4-double,znver4-load,znver4-idiv*10")
- 
- (define_insn_reservation "znver4_idiv_SI_load" 16
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "idiv")
- 				   (and (eq_attr "mode" "SI")
- 					(eq_attr "memory" "load"))))
- 			 "znver4-double,znver4-load,znver4-idiv*6")
- 
- (define_insn_reservation "znver4_idiv_HI_load" 14
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "idiv")
- 				   (and (eq_attr "mode" "HI")
- 					(eq_attr "memory" "load"))))
- 			 "znver4-double,znver4-load,znver4-idiv*4")
- 
- (define_insn_reservation "znver4_idiv_QI_load" 13
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "idiv")
- 				   (and (eq_attr "mode" "QI")
- 					(eq_attr "memory" "load"))))
- 			 "znver4-double,znver4-load,znver4-idiv*4")
- 
- ;; INTEGER/GENERAL Instructions
- (define_insn_reservation "znver4_insn" 1
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "alu,alu1,negnot,rotate1,ishift1,test,incdec,icmp")
- 				   (eq_attr "memory" "none,unknown")))
- 			 "znver4-direct,znver4-ieu")
- 
- (define_insn_reservation "znver4_insn_load" 5
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "alu,alu1,negnot,rotate1,ishift1,test,incdec,icmp")
- 				   (eq_attr "memory" "load")))
- 			 "znver4-direct,znver4-load,znver4-ieu")
- 
- (define_insn_reservation "znver4_insn2" 1
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "icmov,setcc")
- 				   (eq_attr "memory" "none,unknown")))
- 			 "znver4-direct,znver4-ieu0|znver4-ieu3")
- 
- (define_insn_reservation "znver4_insn2_load" 5
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "icmov,setcc")
- 				   (eq_attr "memory" "load")))
- 			 "znver4-direct,znver4-load,znver4-ieu0|znver4-ieu3")
- 
- (define_insn_reservation "znver4_rotate" 1
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "rotate")
- 				   (eq_attr "memory" "none,unknown")))
- 			 "znver4-direct,znver4-ieu1|znver4-ieu2")
- 
- (define_insn_reservation "znver4_rotate_load" 5
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "rotate")
- 				   (eq_attr "memory" "load")))
- 			 "znver4-direct,znver4-load,znver4-ieu1|znver4-ieu2")
- 
- (define_insn_reservation "znver4_insn_store" 1
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "alu,alu1,negnot,rotate1,ishift1,test,incdec,icmp")
- 				   (eq_attr "memory" "store")))
- 			 "znver4-direct,znver4-ieu,znver4-store")
- 
- (define_insn_reservation "znver4_insn2_store" 1
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "icmov,setcc")
- 				   (eq_attr "memory" "store")))
- 			 "znver4-direct,znver4-ieu0|znver4-ieu3,znver4-store")
- 
- (define_insn_reservation "znver4_rotate_store" 1
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "rotate")
- 				   (eq_attr "memory" "store")))
- 			 "znver4-direct,znver4-ieu1|znver4-ieu2,znver4-store")
- 
- ;; alu1 instructions
- (define_insn_reservation "znver4_alu1_vector" 3
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "znver1_decode" "vector")
- 				   (and (eq_attr "type" "alu1")
- 					(eq_attr "memory" "none,unknown"))))
- 			 "znver4-vector,znver4-ivector*3")
- 
- (define_insn_reservation "znver4_alu1_vector_load" 7
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "znver1_decode" "vector")
- 				   (and (eq_attr "type" "alu1")
- 					(eq_attr "memory" "load"))))
- 			 "znver4-vector,znver4-load,znver4-ivector*3")
- 
- ;; Call Instruction
- (define_insn_reservation "znver4_call" 1
- 			 (and (eq_attr "cpu" "znver4")
- 			      (eq_attr "type" "call,callv"))
- 			 "znver4-double,znver4-ieu0|znver4-bru0,znver4-store")
- 
- ;; Branches
- (define_insn_reservation "znver4_branch" 1
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ibr")
- 					(eq_attr "memory" "none")))
- 			  "znver4-direct,znver4-ieu0|znver4-bru0")
- 
- (define_insn_reservation "znver4_branch_load" 5
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ibr")
- 					(eq_attr "memory" "load")))
- 			  "znver4-direct,znver4-load,znver4-ieu0|znver4-bru0")
- 
- (define_insn_reservation "znver4_branch_vector" 2
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ibr")
- 					(eq_attr "memory" "none,unknown")))
- 			  "znver4-vector,znver4-ivector*2")
- 
- (define_insn_reservation "znver4_branch_vector_load" 6
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ibr")
- 					(eq_attr "memory" "load")))
- 			  "znver4-vector,znver4-load,znver4-ivector*2")
- 
- ;; LEA instruction with simple addressing
- (define_insn_reservation "znver4_lea" 1
- 			 (and (eq_attr "cpu" "znver4")
- 			      (eq_attr "type" "lea"))
- 			 "znver4-direct,znver4-ieu")
- 
- ;; Leave
- (define_insn_reservation "znver4_leave" 1
- 			 (and (eq_attr "cpu" "znver4")
- 			      (eq_attr "type" "leave"))
- 			 "znver4-double,znver4-ieu,znver4-store")
- 
- ;; STR and ISHIFT are microcoded.
- (define_insn_reservation "znver4_str" 3
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "str")
- 				   (eq_attr "memory" "none")))
- 			 "znver4-vector,znver4-ivector*3")
- 
- (define_insn_reservation "znver4_str_load" 7
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "str")
- 				   (eq_attr "memory" "load")))
- 			 "znver4-vector,znver4-load,znver4-ivector*3")
- 
- (define_insn_reservation "znver4_ishift" 2
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ishift")
- 				   (eq_attr "memory" "none")))
- 			 "znver4-vector,znver4-ivector*2")
- 
- (define_insn_reservation "znver4_ishift_load" 6
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ishift")
- 				   (eq_attr "memory" "load")))
- 			 "znver4-vector,znver4-load,znver4-ivector*2")
- 
- ;; Other vector type
- (define_insn_reservation "znver4_ieu_vector" 5
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "other,multi")
- 				   (eq_attr "memory" "none,unknown")))
- 			 "znver4-vector,znver4-ivector*5")
- 
- (define_insn_reservation "znver4_ieu_vector_load" 9
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "other,multi")
- 				   (eq_attr "memory" "load")))
- 			 "znver4-vector,znver4-load,znver4-ivector*5")
- 
- ;; Floating Point
- ;; FP movs
- (define_insn_reservation "znver4_fp_cmov" 4
- 			 (and (eq_attr "cpu" "znver4")
- 			      (eq_attr "type" "fcmov"))
- 			 "znver4-vector,znver4-fvector*3")
- 
- (define_insn_reservation "znver4_fp_mov_direct" 1
- 			 (and (eq_attr "cpu" "znver4")
- 			      (eq_attr "type" "fmov"))
- 			 "znver4-direct,znver4-fpu0|znver4-fpu1")
- 
- ;;FLD
- (define_insn_reservation "znver4_fp_mov_direct_load" 6
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "znver1_decode" "direct")
- 				   (and (eq_attr "type" "fmov")
- 					(eq_attr "memory" "load"))))
- 			 "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu1")
- 
- ;;FST
- (define_insn_reservation "znver4_fp_mov_direct_store" 6
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "znver1_decode" "direct")
- 				   (and (eq_attr "type" "fmov")
- 					(eq_attr "memory" "store"))))
- 			 "znver4-direct,znver4-fpu0|znver4-fpu1,znver4-fp-store")
- 
- ;;FILD
- (define_insn_reservation "znver4_fp_mov_double_load" 13
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "znver1_decode" "double")
- 				   (and (eq_attr "type" "fmov")
- 					(eq_attr "memory" "load"))))
- 			 "znver4-direct,znver4-load,znver4-fpu1")
- 
- ;;FIST
- (define_insn_reservation "znver4_fp_mov_double_store" 7
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "znver1_decode" "double")
- 				   (and (eq_attr "type" "fmov")
- 					(eq_attr "memory" "store"))))
- 			 "znver4-double,znver4-fpu1,znver4-fp-store")
- 
- ;; FSQRT
- (define_insn_reservation "znver4_fsqrt" 22
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "fpspc")
- 				   (and (eq_attr "mode" "XF")
- 					(eq_attr "memory" "none"))))
- 			 "znver4-direct,znver4-fdiv*10")
- 
- ;; FPSPC instructions
- (define_insn_reservation "znver4_fp_spc" 6
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "fpspc")
- 				   (eq_attr "memory" "none")))
- 			 "znver4-vector,znver4-fvector*6")
- 
- (define_insn_reservation "znver4_fp_insn_vector" 6
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "znver1_decode" "vector")
- 				   (eq_attr "type" "mmxcvt,sselog1,ssemov")))
- 			 "znver4-vector,znver4-fvector*6")
- 
- ;; FADD, FSUB, FMUL
- (define_insn_reservation "znver4_fp_op_mul" 7
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "fop,fmul")
- 				   (eq_attr "memory" "none")))
- 			 "znver4-direct,znver4-fpu0")
- 
- (define_insn_reservation "znver4_fp_op_mul_load" 12
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "fop,fmul")
- 				   (eq_attr "memory" "load")))
- 			 "znver4-direct,znver4-load,znver4-fpu0")
- 
- ;; FDIV
- (define_insn_reservation "znver4_fp_div" 15
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "fdiv")
- 				   (eq_attr "memory" "none")))
- 			 "znver4-direct,znver4-fdiv*6")
- 
- (define_insn_reservation "znver4_fp_div_load" 20
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "fdiv")
- 				   (eq_attr "memory" "load")))
- 			 "znver4-direct,znver4-load,znver4-fdiv*6")
- 
- (define_insn_reservation "znver4_fp_idiv_load" 24
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "fdiv")
- 				   (and (eq_attr "fp_int_src" "true")
- 					(eq_attr "memory" "load"))))
- 			 "znver4-double,znver4-load,znver4-fdiv*6")
- 
- ;; FABS, FCHS
- (define_insn_reservation "znver4_fp_fsgn" 1
- 			 (and (eq_attr "cpu" "znver4")
- 			      (eq_attr "type" "fsgn"))
- 			 "znver4-direct,znver4-fpu0|znver4-fpu1")
- 
- ;; FCMP
- (define_insn_reservation "znver4_fp_fcmp" 3
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "fcmp")
- 				   (eq_attr "memory" "none")))
- 			 "znver4-direct,znver4-fpu1")
- 
- (define_insn_reservation "znver4_fp_fcmp_double" 4
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "fcmp")
- 				   (and (eq_attr "znver1_decode" "double")
- 					(eq_attr "memory" "none"))))
- 			 "znver4-double,znver4-fpu1,znver4-fpu2")
- 
- ;; MMX, SSE, SSEn.n instructions
- (define_insn_reservation "znver4_fp_mmx	" 1
- 			 (and (eq_attr "cpu" "znver4")
- 			      (eq_attr "type" "mmx"))
- 			 "znver4-direct,znver4-fpu1|znver4-fpu2")
- 
- (define_insn_reservation "znver4_mmx_add_cmp" 1
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "mmxadd,mmxcmp")
- 				   (eq_attr "memory" "none")))
- 			 "znver4-direct,znver4-fpu")
- 
- (define_insn_reservation "znver4_mmx_add_cmp_load" 6
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "mmxadd,mmxcmp")
- 				   (eq_attr "memory" "load")))
- 			 "znver4-direct,znver4-load,znver4-fpu")
- 
- (define_insn_reservation "znver4_mmx_insn" 1
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "mmxcvt,sseshuf,sseshuf1,mmxshft")
- 				   (eq_attr "memory" "none")))
- 			 "znver4-direct,znver4-fpu1|znver4-fpu2")
- 
- (define_insn_reservation "znver4_mmx_insn_load" 6
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "mmxcvt,sseshuf,sseshuf1,mmxshft")
- 				   (eq_attr "memory" "load")))
- 			 "znver4-direct,znver4-load,znver4-fpu1|znver4-fpu2")
- 
- (define_insn_reservation "znver4_mmx_mov" 1
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "mmxmov")
- 				   (eq_attr "memory" "store")))
- 			 "znver4-direct,znver4-fp-store")
- 
- (define_insn_reservation "znver4_mmx_mov_load" 6
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "mmxmov")
- 				   (eq_attr "memory" "both")))
- 			 "znver4-direct,znver4-load,znver4-fp-store")
- 
- (define_insn_reservation "znver4_mmx_mul" 3
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "mmxmul")
- 				   (eq_attr "memory" "none")))
- 			  "znver4-direct,znver4-fpu0|znver4-fpu3")
- 
- (define_insn_reservation "znver4_mmx_mul_load" 8
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "mmxmul")
- 				   (eq_attr "memory" "load")))
- 			  "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu3")
- 
- ;; AVX instructions
- (define_insn_reservation "znver4_sse_log" 1
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "sselog")
- 				   (and (eq_attr "mode" "V4SF,V8SF,V2DF,V4DF,QI,HI,SI,DI,TI,OI")
- 				    (eq_attr "memory" "none"))))
- 			 "znver4-direct,znver4-fpu")
- 
- (define_insn_reservation "znver4_sse_log_load" 6
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "sselog")
- 				   (and (eq_attr "mode" "V4SF,V8SF,V2DF,V4DF,QI,HI,SI,DI,TI,OI")
- 				    (eq_attr "memory" "load"))))
- 			 "znver4-direct,znver4-load,znver4-fpu")
- 
- (define_insn_reservation "znver4_sse_log1" 1
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "sselog1")
- 				   (and (eq_attr "mode" "V4SF,V8SF,V2DF,V4DF,QI,HI,SI,DI,TI,OI")
- 				    (eq_attr "memory" "store"))))
- 			 "znver4-direct,znver4-fpu1|znver4-fpu2,znver4-fp-store")
- 
- (define_insn_reservation "znver4_sse_log1_load" 6
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "sselog1")
- 				   (and (eq_attr "mode" "V4SF,V8SF,V2DF,V4DF,QI,HI,SI,DI,TI,OI")
- 				    (eq_attr "memory" "both"))))
- 			 "znver4-direct,znver4-load,znver4-fpu1|znver4-fpu2,znver4-fp-store")
- 
- (define_insn_reservation "znver4_sse_comi" 1
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssecomi")
- 				   (eq_attr "memory" "store")))
- 			 "znver4-double,znver4-fpu2|znver4-fpu3,znver4-fp-store")
- 
- (define_insn_reservation "znver4_sse_comi_load" 6
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssecomi")
- 				   (eq_attr "memory" "both")))
- 			 "znver4-double,znver4-load,znver4-fpu2|znver4-fpu3,znver4-fp-store")
- 
- (define_insn_reservation "znver4_sse_test" 1
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "prefix_extra" "1")
- 				   (and (eq_attr "type" "ssecomi")
- 					(eq_attr "memory" "none"))))
- 			 "znver4-direct,znver4-fpu1|znver4-fpu2")
- 
- (define_insn_reservation "znver4_sse_test_load" 6
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "prefix_extra" "1")
- 				   (and (eq_attr "type" "ssecomi")
- 					(eq_attr "memory" "load"))))
- 			 "znver4-direct,znver4-load,znver4-fpu1|znver4-fpu2")
- 
- (define_insn_reservation "znver4_sse_imul" 3
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "sseimul")
- 				   (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI")
- 				    (eq_attr "memory" "none"))))
- 			 "znver4-direct,znver4-fpu0|znver4-fpu3")
- 
- (define_insn_reservation "znver4_sse_imul_load" 8
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "sseimul")
- 				   (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI")
- 				    (eq_attr "memory" "load"))))
- 			 "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu1")
- 
- (define_insn_reservation "znver4_sse_mov" 1
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssemov")
- 				   (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI")
- 				    (eq_attr "memory" "none"))))
- 			 "znver4-direct,znver4-fpu1|znver4-fpu2")
- 
- (define_insn_reservation "znver4_sse_mov_load" 6
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssemov")
- 				   (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI")
- 				    (eq_attr "memory" "load"))))
- 			 "znver4-direct,znver4-load,znver4-fpu1|znver4-fpu2")
- 
- (define_insn_reservation "znver4_sse_mov_store" 1
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssemov")
- 				   (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI")
- 				    (eq_attr "memory" "store"))))
- 			 "znver4-direct,znver4-fpu1|znver4-fpu2,znver4-fp-store")
- 
- (define_insn_reservation "znver4_sse_mov_fp" 1
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssemov")
- 				   (and (eq_attr "mode" "V16SF,V8DF,V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF")
- 				    (eq_attr "memory" "none"))))
- 			 "znver4-direct,znver4-fpu")
- 
- (define_insn_reservation "znver4_sse_mov_fp_load" 6
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssemov")
- 				   (and (eq_attr "mode" "V16SF,V8DF,V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF")
- 				    (eq_attr "memory" "load"))))
- 			 "znver4-direct,znver4-load,znver4-fpu")
- 
- (define_insn_reservation "znver4_sse_mov_fp_store" 1
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssemov")
- 				   (and (eq_attr "mode" "V16SF,V8DF,V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF")
- 				    (eq_attr "memory" "store"))))
- 			 "znver4-direct,znver4-fp-store")
- 
- (define_insn_reservation "znver4_sse_add" 3
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "sseadd")
- 				   (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF")
- 				    (eq_attr "memory" "none"))))
- 			 "znver4-direct,znver4-fpu2|znver4-fpu3")
- 
- (define_insn_reservation "znver4_sse_add_load" 8
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "sseadd")
- 				   (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF")
- 				    (eq_attr "memory" "load"))))
- 			 "znver4-direct,znver4-load,znver4-fpu2|znver4-fpu3")
- 
- (define_insn_reservation "znver4_sse_add1" 4
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "sseadd1")
- 				   (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF")
- 				    (eq_attr "memory" "none"))))
- 			 "znver4-vector,znver4-fvector*2")
- 
- (define_insn_reservation "znver4_sse_add1_load" 9
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "sseadd1")
- 				   (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF")
- 				    (eq_attr "memory" "load"))))
- 			 "znver4-vector,znver4-load,znver4-fvector*2")
- 
- (define_insn_reservation "znver4_sse_iadd" 1
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "sseiadd")
- 				   (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI")
- 				    (eq_attr "memory" "none"))))
- 			 "znver4-direct,znver4-fpu")
- 
- (define_insn_reservation "znver4_sse_iadd_load" 6
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "sseiadd")
- 				   (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI")
- 				    (eq_attr "memory" "load"))))
- 			 "znver4-direct,znver4-load,znver4-fpu")
- 
- (define_insn_reservation "znver4_sse_mul" 3
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssemul")
- 				   (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF")
- 				    (eq_attr "memory" "none"))))
- 			 "znver4-direct,znver4-fpu0|znver4-fpu1")
- 
- (define_insn_reservation "znver4_sse_mul_load" 8
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssemul")
- 				   (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF")
- 				    (eq_attr "memory" "load"))))
- 			 "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu1")
- 
- (define_insn_reservation "znver4_sse_div_pd" 13
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssediv")
- 				   (and (eq_attr "mode" "V4DF,V2DF,V1DF")
- 				    (eq_attr "memory" "none"))))
- 			 "znver4-direct,znver4-fdiv*5")
- 
- (define_insn_reservation "znver4_sse_div_ps" 10
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssediv")
- 				   (and (eq_attr "mode" "V8SF,V4SF,V2SF,SF")
- 				    (eq_attr "memory" "none"))))
- 			 "znver4-direct,znver4-fdiv*3")
- 
- (define_insn_reservation "znver4_sse_div_pd_load" 18
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssediv")
- 				   (and (eq_attr "mode" "V4DF,V2DF,V1DF")
- 				    (eq_attr "memory" "load"))))
- 			 "znver4-direct,znver4-load,znver4-fdiv*5")
- 
- (define_insn_reservation "znver4_sse_div_ps_load" 15
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssediv")
- 				   (and (eq_attr "mode" "V8SF,V4SF,V2SF,SF")
- 				    (eq_attr "memory" "load"))))
- 			 "znver4-direct,znver4-load,znver4-fdiv*3")
- 
- (define_insn_reservation "znver4_sse_cmp_avx" 1
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssecmp")
- 				   (and (eq_attr "prefix" "vex")
- 				    (eq_attr "memory" "none"))))
- 			 "znver4-direct,znver4-fpu0|znver4-fpu1")
- 
- (define_insn_reservation "znver4_sse_cmp_avx_load" 6
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssecmp")
- 				   (and (eq_attr "prefix" "vex")
- 				    (eq_attr "memory" "load"))))
- 			 "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu1")
- 
- (define_insn_reservation "znver4_sse_comi_avx" 1
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssecomi")
- 				   (eq_attr "memory" "store")))
- 			 "znver4-direct,znver4-fpu2+znver4-fpu3,znver4-fp-store")
- 
- (define_insn_reservation "znver4_sse_comi_avx_load" 6
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssecomi")
- 				   (eq_attr "memory" "both")))
- 			 "znver4-direct,znver4-load,znver4-fpu2+znver4-fpu3,znver4-fp-store")
- 
- (define_insn_reservation "znver4_sse_cvt" 3
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssecvt")
- 				   (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF")
- 				    (eq_attr "memory" "none"))))
- 			 "znver4-direct,znver4-fpu2|znver4-fpu3")
- 
- (define_insn_reservation "znver4_sse_cvt_load" 8
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssecvt")
- 				   (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF")
- 				    (eq_attr "memory" "load"))))
- 			 "znver4-direct,znver4-load,znver4-fpu2|znver4-fpu3")
- 
- (define_insn_reservation "znver4_sse_icvt" 3
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssecvt")
- 				   (and (eq_attr "mode" "SI")
- 				    (eq_attr "memory" "none"))))
- 			 "znver4-direct,znver4-fpu2|znver4-fpu3")
- 
- (define_insn_reservation "znver4_sse_icvt_store" 4
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssecvt")
- 				   (and (eq_attr "mode" "SI")
- 				    (eq_attr "memory" "store"))))
- 			 "znver4-double,znver4-fpu2|znver4-fpu3,znver4-fp-store")
- 
- (define_insn_reservation "znver4_sse_shuf" 1
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "sseshuf")
- 				   (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF")
- 				    (eq_attr "memory" "none"))))
- 			 "znver4-direct,znver4-fpu1|znver4-fpu2")
- 
- (define_insn_reservation "znver4_sse_shuf_load" 6
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "sseshuf")
- 				   (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF")
- 				    (eq_attr "memory" "load"))))
- 			 "znver4-direct,znver4-load,znver4-fpu")
- 
- (define_insn_reservation "znver4_sse_ishuf" 3
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "sseshuf")
- 				   (and (eq_attr "mode" "OI")
- 				    (eq_attr "memory" "none"))))
- 			 "znver4-direct,znver4-fpu1|znver4-fpu2")
- 
- (define_insn_reservation "znver4_sse_ishuf_load" 8
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "sseshuf")
- 				   (and (eq_attr "mode" "OI")
- 				    (eq_attr "memory" "load"))))
- 			 "znver4-direct,znver4-load,znver4-fpu1|znver4-fpu2")
- 
- ;; AVX512 instructions
- (define_insn_reservation "znver4_sse_log_evex" 1
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "sselog")
- 				   (and (eq_attr "mode" "V16SF,V8DF,XI")
- 				    (eq_attr "memory" "none"))))
- 			 "znver4-direct,znver4-fpu0*2|znver4-fpu1*2|znver4-fpu2*2|znver4-fpu3*2")
- 
- (define_insn_reservation "znver4_sse_log_evex_load" 7
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "sselog")
- 				   (and (eq_attr "mode" "V16SF,V8DF,XI")
- 				    (eq_attr "memory" "load"))))
- 			 "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2|znver4-fpu2*2|znver4-fpu3*2")
- 
- (define_insn_reservation "znver4_sse_log1_evex" 1
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "sselog1")
- 				   (and (eq_attr "mode" "V16SF,V8DF,XI")
- 				    (eq_attr "memory" "none"))))
- 			 "znver4-direct,znver4-fpu1*2|znver4-fpu2*2,znver4-fp-store")
- 
- (define_insn_reservation "znver4_sse_log1_evex_load" 7
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "sselog1")
- 				   (and (eq_attr "mode" "V16SF,V8DF,XI")
- 				    (eq_attr "memory" "load"))))
- 			 "znver4-direct,znver4-load,znver4-fpu1*2|znver4-fpu2*2,znver4-fp-store")
- 
- (define_insn_reservation "znver4_sse_mul_evex" 3
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssemul")
- 				   (and (eq_attr "mode" "V16SF,V8DF")
- 				    (eq_attr "memory" "none"))))
- 			 "znver4-direct,znver4-fpu0*2|znver4-fpu1*2")
- 
- (define_insn_reservation "znver4_sse_mul_evex_load" 9
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssemul")
- 				   (and (eq_attr "mode" "V16SF,V8DF")
- 				    (eq_attr "memory" "load"))))
- 			 "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2")
- 
- (define_insn_reservation "znver4_sse_imul_evex" 3
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "sseimul")
- 				   (and (eq_attr "mode" "XI")
- 				    (eq_attr "memory" "none"))))
- 			 "znver4-direct,znver4-fpu0*2|znver4-fpu3*2")
- 
- (define_insn_reservation "znver4_sse_imul_evex_load" 9
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "sseimul")
- 				   (and (eq_attr "mode" "XI")
- 				    (eq_attr "memory" "load"))))
- 			 "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2")
- 
- (define_insn_reservation "znver4_sse_mov_evex" 4
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssemov")
- 				   (and (eq_attr "mode" "XI")
- 				    (eq_attr "memory" "none"))))
- 			 "znver4-direct,znver4-fpu1*2|znver4-fpu2*2")
- 
- (define_insn_reservation "znver4_sse_mov_evex_load" 10
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssemov")
- 				   (and (eq_attr "mode" "XI")
- 				    (eq_attr "memory" "load"))))
- 			 "znver4-direct,znver4-load,znver4-fpu1*2|znver4-fpu2*2")
- 
- (define_insn_reservation "znver4_sse_mov_evex_store" 5
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssemov")
- 				   (and (eq_attr "mode" "XI")
- 				    (eq_attr "memory" "store"))))
- 			 "znver4-direct,znver4-fpu1*2|znver4-fpu2*2,znver4-fp-store")
- 
- (define_insn_reservation "znver4_sse_add_evex" 3
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "sseadd")
- 				   (and (eq_attr "mode" "V16SF,V8DF")
- 				    (eq_attr "memory" "none"))))
- 			 "znver4-direct,znver4-fpu2*2|znver4-fpu3*2")
- 
- (define_insn_reservation "znver4_sse_add_evex_load" 9
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "sseadd")
- 				   (and (eq_attr "mode" "V16SF,V8DF")
- 				    (eq_attr "memory" "load"))))
- 			 "znver4-direct,znver4-load,znver4-fpu2*2|znver4-fpu3*2")
- 
- (define_insn_reservation "znver4_sse_iadd_evex" 1
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "sseiadd")
- 				   (and (eq_attr "mode" "XI")
- 				    (eq_attr "memory" "none"))))
- 			 "znver4-direct,znver4-fpu0*2|znver4-fpu1*2|znver4-fpu2*2|znver4-fpu3*2")
- 
- (define_insn_reservation "znver4_sse_iadd_evex_load" 7
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "sseiadd")
- 				   (and (eq_attr "mode" "XI")
- 				    (eq_attr "memory" "load"))))
- 			 "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2|znver4-fpu2*2|znver4-fpu3*2")
- 
- (define_insn_reservation "znver4_sse_div_pd_evex" 13
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssediv")
- 				   (and (eq_attr "mode" "V8DF")
- 				    (eq_attr "memory" "none"))))
- 			 "znver4-direct,znver4-fdiv*9")
- 
- (define_insn_reservation "znver4_sse_div_ps_evex" 10
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssediv")
- 				   (and (eq_attr "mode" "V16SF")
- 				    (eq_attr "memory" "none"))))
- 			 "znver4-direct,znver4-fdiv*6")
- 
- (define_insn_reservation "znver4_sse_div_pd_evex_load" 19
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssediv")
- 				   (and (eq_attr "mode" "V8DF")
- 				    (eq_attr "memory" "load"))))
- 			 "znver4-direct,znver4-load,znver4-fdiv*9")
- 
- (define_insn_reservation "znver4_sse_div_ps_evex_load" 16
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssediv")
- 				   (and (eq_attr "mode" "V16SF")
- 				    (eq_attr "memory" "load"))))
- 			 "znver4-direct,znver4-load,znver4-fdiv*6")
- 
- (define_insn_reservation "znver4_sse_cmp_avx128" 3
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssecmp")
- 				   (and (eq_attr "mode" "V4SF,V2DF,V2SF,V1DF,SF")
- 				    (and (eq_attr "prefix" "evex")
- 					 (eq_attr "memory" "none")))))
- 			 "znver4-direct,znver4-fpu0*2|znver4-fpu1*2")
- 
- (define_insn_reservation "znver4_sse_cmp_avx128_load" 9
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssecmp")
- 				   (and (eq_attr "mode" "V4SF,V2DF,V2SF,V1DF,SF")
- 				    (and (eq_attr "prefix" "evex")
- 					 (eq_attr "memory" "load")))))
- 			 "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2")
- 
- (define_insn_reservation "znver4_sse_cmp_avx256" 4
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssecmp")
- 				   (and (eq_attr "mode" "V8SF,V4DF")
- 				    (and (eq_attr "prefix" "evex")
- 					 (eq_attr "memory" "none")))))
- 			 "znver4-direct,znver4-fpu0*2|znver4-fpu1*2")
- 
- (define_insn_reservation "znver4_sse_cmp_avx256_load" 10
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssecmp")
- 				   (and (eq_attr "mode" "V8SF,V4DF")
- 				    (and (eq_attr "prefix" "evex")
- 					 (eq_attr "memory" "load")))))
- 			 "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2")
- 
- (define_insn_reservation "znver4_sse_cmp_avx512" 5
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssecmp")
- 				   (and (eq_attr "mode" "V16SF,V8DF")
- 				    (and (eq_attr "prefix" "evex")
- 					 (eq_attr "memory" "none")))))
- 			 "znver4-direct,znver4-fpu0*2|znver4-fpu1*2")
- 
- (define_insn_reservation "znver4_sse_cmp_avx512_load" 11
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssecmp")
- 				   (and (eq_attr "mode" "V16SF,V8DF")
- 				    (and (eq_attr "prefix" "evex")
- 					 (eq_attr "memory" "load")))))
- 			 "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2")
- 
- (define_insn_reservation "znver4_sse_cvt_evex" 6
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssecvt")
- 				   (and (eq_attr "mode" "V16SF,V8DF")
- 				    (eq_attr "memory" "none"))))
- 			 "znver4-direct,znver4-fpu1*2|znver4-fpu2*2,znver4-fpu2*2|znver4-fpu3*2")
- 
- (define_insn_reservation "znver4_sse_cvt_evex_load" 12
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssecvt")
- 				   (and (eq_attr "mode" "V16SF,V8DF")
- 				    (eq_attr "memory" "load"))))
- 			 "znver4-direct,znver4-load,znver4-fpu1*2|znver4-fpu2*2,znver4-fpu2*2|znver4-fpu3*2")
- 
- (define_insn_reservation "znver4_sse_shuf_evex" 1
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "sseshuf")
- 				   (and (eq_attr "mode" "V16SF,V8DF")
- 				    (eq_attr "memory" "none"))))
- 			 "znver4-direct,znver4-fpu0*2|znver4-fpu1*2|znver4-fpu2*2|znver4-fpu3*2")
- 
- (define_insn_reservation "znver4_sse_shuf_evex_load" 7
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "sseshuf")
- 				   (and (eq_attr "mode" "V16SF,V8DF")
- 				    (eq_attr "memory" "load"))))
- 			 "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2|znver4-fpu2*2|znver4-fpu3*2")
- 
- (define_insn_reservation "znver4_sse_ishuf_evex" 4
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "sseshuf")
- 				   (and (eq_attr "mode" "XI")
- 				    (eq_attr "memory" "none"))))
- 			 "znver4-direct,znver4-fpu1*2|znver4-fpu2*2")
- 
- (define_insn_reservation "znver4_sse_ishuf_evex_load" 10
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "sseshuf")
- 				   (and (eq_attr "mode" "XI")
- 				    (eq_attr "memory" "load"))))
- 			 "znver4-direct,znver4-load,znver4-fpu1*2|znver4-fpu2*2")
- 
- (define_insn_reservation "znver4_sse_muladd" 4
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "ssemuladd")
- 				   (eq_attr "memory" "none")))
- 			 "znver4-direct,znver4-fpu0*2|znver4-fpu1*2")
- 
- (define_insn_reservation "znver4_sse_muladd_load" 10
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "sseshuf")
- 				   (eq_attr "memory" "load")))
- 			 "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2")
- 
- ;; AVX512 mask instructions
- 
- (define_insn_reservation "znver4_sse_mskmov" 2
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "mskmov")
- 				   (eq_attr "memory" "none")))
- 			 "znver4-direct,znver4-fpu0*2|znver4-fpu1*2")
- 
- (define_insn_reservation "znver4_sse_msklog" 1
- 			 (and (eq_attr "cpu" "znver4")
- 			      (and (eq_attr "type" "msklog")
- 				   (eq_attr "memory" "none")))
- 			 "znver4-direct,znver4-fpu2*2|znver4-fpu3*2")
--- 0 ----
diff -Nrcpad gcc-13.3.0/gcc/config/loongarch/loongarch.cc gcc-13.4.0/gcc/config/loongarch/loongarch.cc
*** gcc-13.3.0/gcc/config/loongarch/loongarch.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/loongarch/loongarch.cc	Thu Jun  5 16:02:58 2025
*************** loongarch_hard_regno_mode_ok_uncached (u
*** 5491,5497 ****
        if (mclass == MODE_FLOAT
  	  || mclass == MODE_COMPLEX_FLOAT
  	  || mclass == MODE_VECTOR_FLOAT)
! 	return size <= UNITS_PER_FPVALUE;
  
        /* Allow integer modes that fit into a single register.  We need
  	 to put integers into FPRs when using instructions like CVT
--- 5491,5497 ----
        if (mclass == MODE_FLOAT
  	  || mclass == MODE_COMPLEX_FLOAT
  	  || mclass == MODE_VECTOR_FLOAT)
! 	return size <= UNITS_PER_HWFPVALUE;
  
        /* Allow integer modes that fit into a single register.  We need
  	 to put integers into FPRs when using instructions like CVT
diff -Nrcpad gcc-13.3.0/gcc/config/loongarch/loongarch.h gcc-13.4.0/gcc/config/loongarch/loongarch.h
*** gcc-13.3.0/gcc/config/loongarch/loongarch.h	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/loongarch/loongarch.h	Thu Jun  5 16:02:58 2025
*************** along with GCC; see the file COPYING3.
*** 202,214 ****
  #define UNITS_PER_HWFPVALUE \
    (TARGET_SOFT_FLOAT ? 0 : UNITS_PER_FPREG)
  
- /* The largest size of value that can be held in floating-point
-    registers.  */
- #define UNITS_PER_FPVALUE \
-   (TARGET_SOFT_FLOAT ? 0 \
-    : TARGET_SINGLE_FLOAT ? UNITS_PER_FPREG \
- 			 : LONG_DOUBLE_TYPE_SIZE / BITS_PER_UNIT)
- 
  /* The number of bytes in a double.  */
  #define UNITS_PER_DOUBLE (TYPE_PRECISION (double_type_node) / BITS_PER_UNIT)
  
--- 202,207 ----
diff -Nrcpad gcc-13.3.0/gcc/config/mips/mips.cc gcc-13.4.0/gcc/config/mips/mips.cc
*** gcc-13.3.0/gcc/config/mips/mips.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/mips/mips.cc	Thu Jun  5 16:02:58 2025
*************** mips_emit_call_insn (rtx pattern, rtx or
*** 3140,3145 ****
--- 3140,3148 ----
      {
        rtx post_call_tmp_reg = gen_rtx_REG (word_mode, POST_CALL_TMP_REG);
        clobber_reg (&CALL_INSN_FUNCTION_USAGE (insn), post_call_tmp_reg);
+       clobber_reg (&CALL_INSN_FUNCTION_USAGE (insn), MIPS16_PIC_TEMP);
+       clobber_reg (&CALL_INSN_FUNCTION_USAGE (insn),
+ 			MIPS_PROLOGUE_TEMP (word_mode));
      }
  
    return insn;
*************** mips16_gp_pseudo_reg (void)
*** 3236,3242 ****
        rtx set = gen_load_const_gp (cfun->machine->mips16_gp_pseudo_rtx);
        rtx_insn *insn = emit_insn_after (set, scan);
        INSN_LOCATION (insn) = 0;
! 
        pop_topmost_sequence ();
      }
  
--- 3239,3251 ----
        rtx set = gen_load_const_gp (cfun->machine->mips16_gp_pseudo_rtx);
        rtx_insn *insn = emit_insn_after (set, scan);
        INSN_LOCATION (insn) = 0;
!       /* NewABI support hasn't been implement.  NewABI should generate RTL
! 	 sequence instead of ASM sequence directly.  */
!       if (mips_current_loadgp_style () == LOADGP_OLDABI)
! 	{
! 	  emit_clobber (MIPS16_PIC_TEMP);
! 	  emit_clobber (MIPS_PROLOGUE_TEMP (Pmode));
! 	}
        pop_topmost_sequence ();
      }
  
diff -Nrcpad gcc-13.3.0/gcc/config/nvptx/nvptx.cc gcc-13.4.0/gcc/config/nvptx/nvptx.cc
*** gcc-13.3.0/gcc/config/nvptx/nvptx.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/nvptx/nvptx.cc	Thu Jun  5 16:02:58 2025
*************** nvptx_expand_call (rtx retval, rtx addre
*** 1899,1905 ****
    if (varargs)
      XVECEXP (pat, 0, vec_pos++) = gen_rtx_USE (VOIDmode, varargs);
  
!   gcc_assert (vec_pos = XVECLEN (pat, 0));
  
    nvptx_emit_forking (parallel, true);
    emit_call_insn (pat);
--- 1899,1905 ----
    if (varargs)
      XVECEXP (pat, 0, vec_pos++) = gen_rtx_USE (VOIDmode, varargs);
  
!   gcc_assert (vec_pos == XVECLEN (pat, 0));
  
    nvptx_emit_forking (parallel, true);
    emit_call_insn (pat);
diff -Nrcpad gcc-13.3.0/gcc/config/pa/pa-linux.h gcc-13.4.0/gcc/config/pa/pa-linux.h
*** gcc-13.3.0/gcc/config/pa/pa-linux.h	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/pa/pa-linux.h	Thu Jun  5 16:02:58 2025
*************** along with GCC; see the file COPYING3.
*** 144,151 ****
  #define HAVE_sync_compare_and_swapsi 1
  #define HAVE_sync_compare_and_swapdi 1
  
! /* It's not possible to enable GNU_stack notes since the kernel needs
!    an executable stack for signal returns and syscall restarts.  */
  
  #undef NEED_INDICATE_EXEC_STACK
! #define NEED_INDICATE_EXEC_STACK 0
--- 144,150 ----
  #define HAVE_sync_compare_and_swapsi 1
  #define HAVE_sync_compare_and_swapdi 1
  
! /* Enable GNU stack notes.  */
  
  #undef NEED_INDICATE_EXEC_STACK
! #define NEED_INDICATE_EXEC_STACK 1
diff -Nrcpad gcc-13.3.0/gcc/config/pa/pa.cc gcc-13.4.0/gcc/config/pa/pa.cc
*** gcc-13.3.0/gcc/config/pa/pa.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/pa/pa.cc	Thu Jun  5 16:02:58 2025
*************** hppa_legitimize_address (rtx x, rtx oldx
*** 1263,1268 ****
--- 1263,1269 ----
        /* If the index adds a large constant, try to scale the
  	 constant so that it can be loaded with only one insn.  */
        if (GET_CODE (XEXP (idx, 1)) == CONST_INT
+ 	  && INTVAL (XEXP (idx, 1)) % (1 << shift_val) == 0
  	  && VAL_14_BITS_P (INTVAL (XEXP (idx, 1))
  			    / INTVAL (XEXP (XEXP (idx, 0), 1)))
  	  && INTVAL (XEXP (idx, 1)) % INTVAL (XEXP (XEXP (idx, 0), 1)) == 0)
diff -Nrcpad gcc-13.3.0/gcc/config/pa/pa.h gcc-13.4.0/gcc/config/pa/pa.h
*** gcc-13.3.0/gcc/config/pa/pa.h	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/pa/pa.h	Thu Jun  5 16:02:58 2025
*************** extern rtx hppa_pic_save_rtx (void);
*** 475,480 ****
--- 475,483 ----
  #define INDEX_REG_CLASS GENERAL_REGS
  #define BASE_REG_CLASS GENERAL_REGS
  
+ /* True if register is a general register.  */
+ #define GENERAL_REGNO_P(N) ((N) >= 1 && (N) <= 31)
+ 
  #define FP_REG_CLASS_P(CLASS) \
    ((CLASS) == FP_REGS || (CLASS) == FPUPPER_REGS)
  
diff -Nrcpad gcc-13.3.0/gcc/config/pa/pa.md gcc-13.4.0/gcc/config/pa/pa.md
*** gcc-13.3.0/gcc/config/pa/pa.md	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/pa/pa.md	Thu Jun  5 16:02:58 2025
***************
*** 2270,2275 ****
--- 2270,2327 ----
     (set_attr "pa_combine_type" "addmove")
     (set_attr "length" "4")])
  
+ ; Rewrite RTL using a REG+D store.  This will allow the insn that
+ ; computes the address to be deleted if the register it sets is dead.
+ (define_peephole2
+   [(set (match_operand:SI 0 "register_operand" "")
+ 	(plus:SI (match_operand:SI 1 "register_operand" "")
+ 		 (match_operand:SI 2 "const_int_operand" "")))
+    (set (mem:SI (match_dup 0))
+ 	(match_operand:SI 3 "register_operand" ""))]
+   "!TARGET_64BIT
+    && !INT14_OK_STRICT
+    && GENERAL_REGNO_P (REGNO (operands[0]))
+    && GENERAL_REGNO_P (REGNO (operands[3]))
+    && REGNO (operands[0]) != REGNO (operands[3])
+    && base14_operand (operands[2], E_SImode)"
+   [(set (mem:SI (plus:SI (match_dup 1) (match_dup 2))) (match_dup 3))
+    (set (match_dup 0) (plus:SI (match_dup 1) (match_dup 2)))]
+   "")
+ 
+ ; Rewrite RTL using a REG+D load.  This will allow the insn that
+ ; computes the address to be deleted if the register it sets is dead.
+ (define_peephole2
+   [(set (match_operand:SI 0 "register_operand" "")
+ 	(plus:SI (match_operand:SI 1 "register_operand" "")
+ 		 (match_operand:SI 2 "const_int_operand" "")))
+    (set (match_operand:SI 3 "register_operand" "")
+ 	(mem:SI (match_dup 0)))]
+   "!TARGET_64BIT
+    && !INT14_OK_STRICT
+    && GENERAL_REGNO_P (REGNO (operands[0]))
+    && GENERAL_REGNO_P (REGNO (operands[3]))
+    && REGNO (operands[0]) != REGNO (operands[3])
+    && REGNO (operands[1]) != REGNO (operands[3])
+    && base14_operand (operands[2], E_SImode)"
+   [(set (match_dup 3) (mem:SI (plus:SI (match_dup 1) (match_dup 2))))
+    (set (match_dup 0) (plus:SI (match_dup 1) (match_dup 2)))]
+   "")
+ 
+ (define_peephole2
+   [(set (match_operand:SI 0 "register_operand" "")
+ 	(plus:SI (match_operand:SI 1 "register_operand" "")
+ 		 (match_operand:SI 2 "const_int_operand" "")))
+    (set (match_operand:SI 3 "register_operand" "")
+ 	(mem:SI (match_dup 0)))]
+   "!TARGET_64BIT
+    && !INT14_OK_STRICT
+    && GENERAL_REGNO_P (REGNO (operands[0]))
+    && GENERAL_REGNO_P (REGNO (operands[3]))
+    && REGNO (operands[0]) == REGNO (operands[3])
+    && base14_operand (operands[2], E_SImode)"
+   [(set (match_dup 3) (mem:SI (plus:SI (match_dup 1) (match_dup 2))))]
+   "")
+ 
  ; Rewrite RTL using an indexed store.  This will allow the insn that
  ; computes the address to be deleted if the register it sets is dead.
  (define_peephole2
***************
*** 4499,4504 ****
--- 4551,4604 ----
  
  (define_peephole2
    [(set (match_operand:SI 0 "register_operand" "")
+ 	(plus:SI (match_operand:SI 1 "register_operand" "")
+ 		 (match_operand:SI 2 "const_int_operand" "")))
+    (set (mem:SF (match_dup 0))
+ 	(match_operand:SF 3 "register_operand" ""))]
+   "!TARGET_64BIT
+    && !INT14_OK_STRICT
+    && GENERAL_REGNO_P (REGNO (operands[0]))
+    && GENERAL_REGNO_P (REGNO (operands[3]))
+    && REGNO (operands[0]) != REGNO (operands[3])
+    && base14_operand (operands[2], E_SImode)"
+   [(set (mem:SF (plus:SI (match_dup 1) (match_dup 2))) (match_dup 3))
+    (set (match_dup 0) (plus:SI (match_dup 1) (match_dup 2)))]
+   "")
+ 
+ (define_peephole2
+   [(set (match_operand:SI 0 "register_operand" "")
+ 	(plus:SI (match_operand:SI 1 "register_operand" "")
+ 		 (match_operand:SI 2 "const_int_operand" "")))
+    (set (match_operand:SF 3 "register_operand" "")
+ 	(mem:SF (match_dup 0)))]
+   "!TARGET_64BIT
+    && !INT14_OK_STRICT
+    && GENERAL_REGNO_P (REGNO (operands[0]))
+    && GENERAL_REGNO_P (REGNO (operands[3]))
+    && REGNO (operands[0]) != REGNO (operands[3])
+    && REGNO (operands[1]) != REGNO (operands[3])
+    && base14_operand (operands[2], E_SImode)"
+   [(set (match_dup 3) (mem:SF (plus:SI (match_dup 1) (match_dup 2))))
+    (set (match_dup 0) (plus:SI (match_dup 1) (match_dup 2)))]
+   "")
+ 
+ (define_peephole2
+   [(set (match_operand:SI 0 "register_operand" "")
+ 	(plus:SI (match_operand:SI 1 "register_operand" "")
+ 		 (match_operand:SI 2 "const_int_operand" "")))
+    (set (match_operand:SF 3 "register_operand" "")
+ 	(mem:SF (match_dup 0)))]
+   "!TARGET_64BIT
+    && !INT14_OK_STRICT
+    && GENERAL_REGNO_P (REGNO (operands[0]))
+    && GENERAL_REGNO_P (REGNO (operands[3]))
+    && REGNO (operands[0]) == REGNO (operands[3])
+    && base14_operand (operands[2], E_SImode)"
+   [(set (match_dup 3) (mem:SF (plus:SI (match_dup 1) (match_dup 2))))]
+   "")
+ 
+ (define_peephole2
+   [(set (match_operand:SI 0 "register_operand" "")
  	(plus:SI (ashift:SI (match_operand:SI 1 "register_operand" "")
  			    (const_int 2))
  		 (match_operand:SI 2 "register_operand" "")))
***************
*** 4908,4914 ****
  
  (define_insn "fix_truncsfsi2"
    [(set (match_operand:SI 0 "register_operand" "=f")
! 	(fix:SI (fix:SF (match_operand:SF 1 "register_operand" "f"))))]
    "! TARGET_SOFT_FLOAT"
    "{fcnvfxt,sgl,sgl|fcnv,t,sgl,w} %1,%0"
    [(set_attr "type" "fpalu")
--- 5008,5014 ----
  
  (define_insn "fix_truncsfsi2"
    [(set (match_operand:SI 0 "register_operand" "=f")
! 	(fix:SI (match_operand:SF 1 "register_operand" "f")))]
    "! TARGET_SOFT_FLOAT"
    "{fcnvfxt,sgl,sgl|fcnv,t,sgl,w} %1,%0"
    [(set_attr "type" "fpalu")
***************
*** 4916,4922 ****
  
  (define_insn "fix_truncdfsi2"
    [(set (match_operand:SI 0 "register_operand" "=f")
! 	(fix:SI (fix:DF (match_operand:DF 1 "register_operand" "f"))))]
    "! TARGET_SOFT_FLOAT"
    "{fcnvfxt,dbl,sgl|fcnv,t,dbl,w} %1,%0"
    [(set_attr "type" "fpalu")
--- 5016,5022 ----
  
  (define_insn "fix_truncdfsi2"
    [(set (match_operand:SI 0 "register_operand" "=f")
! 	(fix:SI (match_operand:DF 1 "register_operand" "f")))]
    "! TARGET_SOFT_FLOAT"
    "{fcnvfxt,dbl,sgl|fcnv,t,dbl,w} %1,%0"
    [(set_attr "type" "fpalu")
***************
*** 4924,4930 ****
  
  (define_insn "fix_truncsfdi2"
    [(set (match_operand:DI 0 "register_operand" "=f")
! 	(fix:DI (fix:SF (match_operand:SF 1 "register_operand" "f"))))]
    "TARGET_PA_11 && ! TARGET_SOFT_FLOAT"
    "{fcnvfxt,sgl,dbl|fcnv,t,sgl,dw} %1,%0"
    [(set_attr "type" "fpalu")
--- 5024,5030 ----
  
  (define_insn "fix_truncsfdi2"
    [(set (match_operand:DI 0 "register_operand" "=f")
! 	(fix:DI (match_operand:SF 1 "register_operand" "f")))]
    "TARGET_PA_11 && ! TARGET_SOFT_FLOAT"
    "{fcnvfxt,sgl,dbl|fcnv,t,sgl,dw} %1,%0"
    [(set_attr "type" "fpalu")
***************
*** 4932,4938 ****
  
  (define_insn "fix_truncdfdi2"
    [(set (match_operand:DI 0 "register_operand" "=f")
! 	(fix:DI (fix:DF (match_operand:DF 1 "register_operand" "f"))))]
    "TARGET_PA_11 && ! TARGET_SOFT_FLOAT"
    "{fcnvfxt,dbl,dbl|fcnv,t,dbl,dw} %1,%0"
    [(set_attr "type" "fpalu")
--- 5032,5038 ----
  
  (define_insn "fix_truncdfdi2"
    [(set (match_operand:DI 0 "register_operand" "=f")
! 	(fix:DI (match_operand:DF 1 "register_operand" "f")))]
    "TARGET_PA_11 && ! TARGET_SOFT_FLOAT"
    "{fcnvfxt,dbl,dbl|fcnv,t,dbl,dw} %1,%0"
    [(set_attr "type" "fpalu")
***************
*** 4972,4978 ****
  
  (define_insn "fixuns_truncsfsi2"
    [(set (match_operand:SI 0 "register_operand" "=f")
! 	(unsigned_fix:SI (fix:SF (match_operand:SF 1 "register_operand" "f"))))]
    "! TARGET_SOFT_FLOAT && TARGET_PA_20"
    "fcnv,t,sgl,uw %1,%0"
    [(set_attr "type" "fpalu")
--- 5072,5078 ----
  
  (define_insn "fixuns_truncsfsi2"
    [(set (match_operand:SI 0 "register_operand" "=f")
! 	(unsigned_fix:SI (match_operand:SF 1 "register_operand" "f")))]
    "! TARGET_SOFT_FLOAT && TARGET_PA_20"
    "fcnv,t,sgl,uw %1,%0"
    [(set_attr "type" "fpalu")
***************
*** 4980,4986 ****
  
  (define_insn "fixuns_truncdfsi2"
    [(set (match_operand:SI 0 "register_operand" "=f")
! 	(unsigned_fix:SI (fix:DF (match_operand:DF 1 "register_operand" "f"))))]
    "! TARGET_SOFT_FLOAT && TARGET_PA_20"
    "fcnv,t,dbl,uw %1,%0"
    [(set_attr "type" "fpalu")
--- 5080,5086 ----
  
  (define_insn "fixuns_truncdfsi2"
    [(set (match_operand:SI 0 "register_operand" "=f")
! 	(unsigned_fix:SI (match_operand:DF 1 "register_operand" "f")))]
    "! TARGET_SOFT_FLOAT && TARGET_PA_20"
    "fcnv,t,dbl,uw %1,%0"
    [(set_attr "type" "fpalu")
***************
*** 4988,4994 ****
  
  (define_insn "fixuns_truncsfdi2"
    [(set (match_operand:DI 0 "register_operand" "=f")
! 	(unsigned_fix:DI (fix:SF (match_operand:SF 1 "register_operand" "f"))))]
    "! TARGET_SOFT_FLOAT && TARGET_PA_20"
    "fcnv,t,sgl,udw %1,%0"
    [(set_attr "type" "fpalu")
--- 5088,5094 ----
  
  (define_insn "fixuns_truncsfdi2"
    [(set (match_operand:DI 0 "register_operand" "=f")
! 	(unsigned_fix:DI (match_operand:SF 1 "register_operand" "f")))]
    "! TARGET_SOFT_FLOAT && TARGET_PA_20"
    "fcnv,t,sgl,udw %1,%0"
    [(set_attr "type" "fpalu")
***************
*** 4996,5002 ****
  
  (define_insn "fixuns_truncdfdi2"
    [(set (match_operand:DI 0 "register_operand" "=f")
! 	(unsigned_fix:DI (fix:DF (match_operand:DF 1 "register_operand" "f"))))]
    "! TARGET_SOFT_FLOAT && TARGET_PA_20"
    "fcnv,t,dbl,udw %1,%0"
    [(set_attr "type" "fpalu")
--- 5096,5102 ----
  
  (define_insn "fixuns_truncdfdi2"
    [(set (match_operand:DI 0 "register_operand" "=f")
! 	(unsigned_fix:DI (match_operand:DF 1 "register_operand" "f")))]
    "! TARGET_SOFT_FLOAT && TARGET_PA_20"
    "fcnv,t,dbl,udw %1,%0"
    [(set_attr "type" "fpalu")
***************
*** 5494,5517 ****
     (set_attr "length" "4")])
  
  (define_insn ""
-   [(set (match_operand:DI 0 "register_operand" "=f")
- 	(mult:DI (zero_extend:DI (match_operand:SI 1 "register_operand" "f"))
- 		 (match_operand:DI 2 "uint32_operand" "f")))]
-   "TARGET_PA_11 && ! TARGET_SOFT_FLOAT && ! TARGET_SOFT_MULT && !TARGET_64BIT"
-   "xmpyu %1,%R2,%0"
-   [(set_attr "type" "fpmuldbl")
-    (set_attr "length" "4")])
- 
- (define_insn ""
-   [(set (match_operand:DI 0 "register_operand" "=f")
- 	(mult:DI (zero_extend:DI (match_operand:SI 1 "register_operand" "f"))
- 		 (match_operand:DI 2 "uint32_operand" "f")))]
-   "TARGET_PA_11 && ! TARGET_SOFT_FLOAT && ! TARGET_SOFT_MULT && TARGET_64BIT"
-   "xmpyu %1,%2R,%0"
-   [(set_attr "type" "fpmuldbl")
-    (set_attr "length" "4")])
- 
- (define_insn ""
    [(set (reg:SI 29) (mult:SI (reg:SI 26) (reg:SI 25)))
     (clobber (match_operand:SI 0 "register_operand" "=a"))
     (clobber (reg:SI 26))
--- 5594,5599 ----
***************
*** 7334,7340 ****
  })
  
  (define_insn "indirect_goto"
!   [(unspec [(match_operand 0 "register_operand" "=r")] UNSPEC_GOTO)]
    "GET_MODE (operands[0]) == word_mode"
    "bv%* %%r0(%0)"
    [(set_attr "type" "branch")
--- 7416,7422 ----
  })
  
  (define_insn "indirect_goto"
!   [(unspec [(match_operand 0 "register_operand" "r")] UNSPEC_GOTO)]
    "GET_MODE (operands[0]) == word_mode"
    "bv%* %%r0(%0)"
    [(set_attr "type" "branch")
*************** add,l %2,%3,%3\;bv,n %%r0(%3)"
*** 9469,9475 ****
  	  (pc)))
     (set (match_dup 0)
  	(plus:SI (match_dup 0) (match_dup 1)))
!    (clobber (match_scratch:SI 4 "=X,r,r"))]
    ""
    "* return pa_output_dbra (operands, insn, which_alternative); "
  ;; Do not expect to understand this the first time through.
--- 9551,9557 ----
  	  (pc)))
     (set (match_dup 0)
  	(plus:SI (match_dup 0) (match_dup 1)))
!    (clobber (match_scratch:SI 4 "=X,r,&r"))]
    ""
    "* return pa_output_dbra (operands, insn, which_alternative); "
  ;; Do not expect to understand this the first time through.
diff -Nrcpad gcc-13.3.0/gcc/config/pa/pa32-regs.h gcc-13.4.0/gcc/config/pa/pa32-regs.h
*** gcc-13.3.0/gcc/config/pa/pa32-regs.h	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/pa/pa32-regs.h	Thu Jun  5 16:02:58 2025
*************** enum reg_class { NO_REGS, R1_REGS, GENER
*** 344,350 ****
   {"%fr16L",56}, {"%fr17L",58}, {"%fr18L",60}, {"%fr19L",62},		\
   {"%fr20L",64}, {"%fr21L",66}, {"%fr22L",68}, {"%fr23L",70},		\
   {"%fr24L",72}, {"%fr25L",74}, {"%fr26L",76}, {"%fr27L",78},		\
!  {"%fr28L",80}, {"%fr29L",82}, {"%fr30L",84}, {"%fr31R",86},		\
   {"%cr11",88}}
  
  #define FP_SAVED_REG_LAST 66
--- 344,350 ----
   {"%fr16L",56}, {"%fr17L",58}, {"%fr18L",60}, {"%fr19L",62},		\
   {"%fr20L",64}, {"%fr21L",66}, {"%fr22L",68}, {"%fr23L",70},		\
   {"%fr24L",72}, {"%fr25L",74}, {"%fr26L",76}, {"%fr27L",78},		\
!  {"%fr28L",80}, {"%fr29L",82}, {"%fr30L",84}, {"%fr31L",86},		\
   {"%cr11",88}}
  
  #define FP_SAVED_REG_LAST 66
diff -Nrcpad gcc-13.3.0/gcc/config/riscv/bitmanip.md gcc-13.4.0/gcc/config/riscv/bitmanip.md
*** gcc-13.3.0/gcc/config/riscv/bitmanip.md	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/riscv/bitmanip.md	Thu Jun  5 16:02:58 2025
***************
*** 80,86 ****
  						    (match_operand:DI 3 "consecutive_bits_operand")) 0)
  				 (subreg:SI (match_operand:DI 4 "register_operand") 0))))]
    "TARGET_64BIT && TARGET_ZBA
!    && riscv_shamt_matches_mask_p (INTVAL (operands[2]), INTVAL (operands[3]))"
    [(set (match_dup 0) (plus:DI (ashift:DI (match_dup 1) (match_dup 2)) (match_dup 4)))
     (set (match_dup 0) (zero_extend:DI (subreg:SI (match_dup 0) 0)))])
  
--- 80,88 ----
  						    (match_operand:DI 3 "consecutive_bits_operand")) 0)
  				 (subreg:SI (match_operand:DI 4 "register_operand") 0))))]
    "TARGET_64BIT && TARGET_ZBA
!    && riscv_shamt_matches_mask_p (INTVAL (operands[2]), INTVAL (operands[3]))
!    /* Ensure the mask includes all the bits in SImode.  */
!    && ((INTVAL (operands[3]) & (HOST_WIDE_INT_1U << 31)) != 0)"
    [(set (match_dup 0) (plus:DI (ashift:DI (match_dup 1) (match_dup 2)) (match_dup 4)))
     (set (match_dup 0) (zero_extend:DI (subreg:SI (match_dup 0) 0)))])
  
diff -Nrcpad gcc-13.3.0/gcc/config/riscv/freebsd.h gcc-13.4.0/gcc/config/riscv/freebsd.h
*** gcc-13.3.0/gcc/config/riscv/freebsd.h	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/riscv/freebsd.h	Thu Jun  5 16:02:58 2025
*************** along with GCC; see the file COPYING3.
*** 42,47 ****
--- 42,48 ----
  #define LINK_SPEC "						\
    -melf" XLEN_SPEC DEFAULT_ENDIAN_SPEC "riscv			\
    %{p:%nconsider using `-pg' instead of `-p' with gprof (1)}	\
+   " FBSD_LINK_PG_NOTES "						\
    %{v:-V}							\
    %{assert*} %{R*} %{rpath*} %{defsym*}				\
    %{mbig-endian:-EB}						\
diff -Nrcpad gcc-13.3.0/gcc/config/riscv/riscv.cc gcc-13.4.0/gcc/config/riscv/riscv.cc
*** gcc-13.3.0/gcc/config/riscv/riscv.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/riscv/riscv.cc	Thu Jun  5 16:02:58 2025
*************** riscv_promote_function_mode (const_tree
*** 6794,6802 ****
      return promote_mode (type, mode, punsignedp);
  
    unsignedp = *punsignedp;
!   PROMOTE_MODE (as_a <scalar_mode> (mode), unsignedp, type);
    *punsignedp = unsignedp;
!   return mode;
  }
  
  /* Implement TARGET_MACHINE_DEPENDENT_REORG.  */
--- 6794,6803 ----
      return promote_mode (type, mode, punsignedp);
  
    unsignedp = *punsignedp;
!   scalar_mode smode = as_a <scalar_mode> (mode);
!   PROMOTE_MODE (smode, unsignedp, type);
    *punsignedp = unsignedp;
!   return smode;
  }
  
  /* Implement TARGET_MACHINE_DEPENDENT_REORG.  */
diff -Nrcpad gcc-13.3.0/gcc/config/riscv/thead.cc gcc-13.4.0/gcc/config/riscv/thead.cc
*** gcc-13.3.0/gcc/config/riscv/thead.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/riscv/thead.cc	Thu Jun  5 16:02:58 2025
*************** th_mempair_operands_p (rtx operands[4],
*** 313,331 ****
    if (MEM_VOLATILE_P (mem_1) || MEM_VOLATILE_P (mem_2))
      return false;
  
-   /* If we have slow unaligned access, we only accept aligned memory.  */
-   if (riscv_slow_unaligned_access_p
-       && known_lt (MEM_ALIGN (mem_1), GET_MODE_SIZE (mode) * BITS_PER_UNIT))
-     return false;
  
    /* Check if the addresses are in the form of [base+offset].  */
    bool reversed = false;
    if (!th_mempair_check_consecutive_mems (mode, &mem_1, &mem_2, &reversed))
      return false;
  
    /* The first memory accesses must be a mempair operand.  */
!   if ((!reversed && !th_mempair_operand_p (mem_1, mode))
!       || (reversed && !th_mempair_operand_p (mem_2, mode)))
      return false;
  
    /* The operands must be of the same size.  */
--- 313,339 ----
    if (MEM_VOLATILE_P (mem_1) || MEM_VOLATILE_P (mem_2))
      return false;
  
  
    /* Check if the addresses are in the form of [base+offset].  */
    bool reversed = false;
    if (!th_mempair_check_consecutive_mems (mode, &mem_1, &mem_2, &reversed))
      return false;
  
+   /* If necessary, reverse the local copy of the operands to simplify	
+      testing of alignments and mempair operand.  */
+   if (reversed)
+     {
+       std::swap (mem_1, mem_2);
+       std::swap (reg_1, reg_2);
+     }
+ 
+   /* If we have slow unaligned access, we only accept aligned memory.  */
+   if (riscv_slow_unaligned_access_p
+       && known_lt (MEM_ALIGN (mem_1), GET_MODE_SIZE (mode) * BITS_PER_UNIT))
+     return false;
+ 
    /* The first memory accesses must be a mempair operand.  */
!   if (!th_mempair_operand_p (mem_1, mode))
      return false;
  
    /* The operands must be of the same size.  */
diff -Nrcpad gcc-13.3.0/gcc/config/rs6000/altivec.md gcc-13.4.0/gcc/config/rs6000/altivec.md
*** gcc-13.3.0/gcc/config/rs6000/altivec.md	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/rs6000/altivec.md	Thu Jun  5 16:02:58 2025
***************
*** 1152,1166 ****
     (use (match_operand:V16QI 2 "register_operand"))]
    "TARGET_ALTIVEC"
  {
!   rtx (*fun) (rtx, rtx, rtx) = BYTES_BIG_ENDIAN ? gen_altivec_vmrghb_direct
! 						: gen_altivec_vmrglb_direct;
!   if (!BYTES_BIG_ENDIAN)
!     std::swap (operands[1], operands[2]);
!   emit_insn (fun (operands[0], operands[1], operands[2]));
    DONE;
  })
  
! (define_insn "altivec_vmrghb_direct"
    [(set (match_operand:V16QI 0 "register_operand" "=v")
  	(vec_select:V16QI
  	  (vec_concat:V32QI
--- 1152,1167 ----
     (use (match_operand:V16QI 2 "register_operand"))]
    "TARGET_ALTIVEC"
  {
!   if (BYTES_BIG_ENDIAN)
!     emit_insn (
!       gen_altivec_vmrghb_direct_be (operands[0], operands[1], operands[2]));
!   else
!     emit_insn (
!       gen_altivec_vmrglb_direct_le (operands[0], operands[2], operands[1]));
    DONE;
  })
  
! (define_insn "altivec_vmrghb_direct_be"
    [(set (match_operand:V16QI 0 "register_operand" "=v")
  	(vec_select:V16QI
  	  (vec_concat:V32QI
***************
*** 1174,1180 ****
  		     (const_int 5) (const_int 21)
  		     (const_int 6) (const_int 22)
  		     (const_int 7) (const_int 23)])))]
!   "TARGET_ALTIVEC"
    "vmrghb %0,%1,%2"
    [(set_attr "type" "vecperm")])
  
--- 1175,1199 ----
  		     (const_int 5) (const_int 21)
  		     (const_int 6) (const_int 22)
  		     (const_int 7) (const_int 23)])))]
!   "TARGET_ALTIVEC && BYTES_BIG_ENDIAN"
!   "vmrghb %0,%1,%2"
!   [(set_attr "type" "vecperm")])
! 
! (define_insn "altivec_vmrghb_direct_le"
!   [(set (match_operand:V16QI 0 "register_operand" "=v")
! 	(vec_select:V16QI
! 	  (vec_concat:V32QI
! 	    (match_operand:V16QI 2 "register_operand" "v")
! 	    (match_operand:V16QI 1 "register_operand" "v"))
! 	  (parallel [(const_int  8) (const_int 24)
! 		     (const_int  9) (const_int 25)
! 		     (const_int 10) (const_int 26)
! 		     (const_int 11) (const_int 27)
! 		     (const_int 12) (const_int 28)
! 		     (const_int 13) (const_int 29)
! 		     (const_int 14) (const_int 30)
! 		     (const_int 15) (const_int 31)])))]
!   "TARGET_ALTIVEC && !BYTES_BIG_ENDIAN"
    "vmrghb %0,%1,%2"
    [(set_attr "type" "vecperm")])
  
***************
*** 1184,1200 ****
     (use (match_operand:V8HI 2 "register_operand"))]
    "TARGET_ALTIVEC"
  {
!   rtx (*fun) (rtx, rtx, rtx) = BYTES_BIG_ENDIAN ? gen_altivec_vmrghh_direct
! 						: gen_altivec_vmrglh_direct;
!   if (!BYTES_BIG_ENDIAN)
!     std::swap (operands[1], operands[2]);
!   emit_insn (fun (operands[0], operands[1], operands[2]));
    DONE;
  })
  
! (define_insn "altivec_vmrghh_direct"
    [(set (match_operand:V8HI 0 "register_operand" "=v")
!         (vec_select:V8HI
  	  (vec_concat:V16HI
  	    (match_operand:V8HI 1 "register_operand" "v")
  	    (match_operand:V8HI 2 "register_operand" "v"))
--- 1203,1220 ----
     (use (match_operand:V8HI 2 "register_operand"))]
    "TARGET_ALTIVEC"
  {
!   if (BYTES_BIG_ENDIAN)
!     emit_insn (
!       gen_altivec_vmrghh_direct_be (operands[0], operands[1], operands[2]));
!   else
!     emit_insn (
!       gen_altivec_vmrglh_direct_le (operands[0], operands[2], operands[1]));
    DONE;
  })
  
! (define_insn "altivec_vmrghh_direct_be"
    [(set (match_operand:V8HI 0 "register_operand" "=v")
! 	(vec_select:V8HI
  	  (vec_concat:V16HI
  	    (match_operand:V8HI 1 "register_operand" "v")
  	    (match_operand:V8HI 2 "register_operand" "v"))
***************
*** 1202,1208 ****
  		     (const_int 1) (const_int 9)
  		     (const_int 2) (const_int 10)
  		     (const_int 3) (const_int 11)])))]
!   "TARGET_ALTIVEC"
    "vmrghh %0,%1,%2"
    [(set_attr "type" "vecperm")])
  
--- 1222,1242 ----
  		     (const_int 1) (const_int 9)
  		     (const_int 2) (const_int 10)
  		     (const_int 3) (const_int 11)])))]
!   "TARGET_ALTIVEC && BYTES_BIG_ENDIAN"
!   "vmrghh %0,%1,%2"
!   [(set_attr "type" "vecperm")])
! 
! (define_insn "altivec_vmrghh_direct_le"
!   [(set (match_operand:V8HI 0 "register_operand" "=v")
!         (vec_select:V8HI
! 	  (vec_concat:V16HI
! 	    (match_operand:V8HI 2 "register_operand" "v")
! 	    (match_operand:V8HI 1 "register_operand" "v"))
! 	  (parallel [(const_int 4) (const_int 12)
! 		     (const_int 5) (const_int 13)
! 		     (const_int 6) (const_int 14)
! 		     (const_int 7) (const_int 15)])))]
!   "TARGET_ALTIVEC && !BYTES_BIG_ENDIAN"
    "vmrghh %0,%1,%2"
    [(set_attr "type" "vecperm")])
  
***************
*** 1212,1227 ****
     (use (match_operand:V4SI 2 "register_operand"))]
    "VECTOR_MEM_ALTIVEC_P (V4SImode)"
  {
!   rtx (*fun) (rtx, rtx, rtx);
!   fun = BYTES_BIG_ENDIAN ? gen_altivec_vmrghw_direct_v4si
! 			 : gen_altivec_vmrglw_direct_v4si;
!   if (!BYTES_BIG_ENDIAN)
!     std::swap (operands[1], operands[2]);
!   emit_insn (fun (operands[0], operands[1], operands[2]));
    DONE;
  })
  
! (define_insn "altivec_vmrghw_direct_<mode>"
    [(set (match_operand:VSX_W 0 "register_operand" "=wa,v")
  	(vec_select:VSX_W
  	  (vec_concat:<VS_double>
--- 1246,1263 ----
     (use (match_operand:V4SI 2 "register_operand"))]
    "VECTOR_MEM_ALTIVEC_P (V4SImode)"
  {
!   if (BYTES_BIG_ENDIAN)
!     emit_insn (gen_altivec_vmrghw_direct_v4si_be (operands[0],
! 						  operands[1],
! 						  operands[2]));
!   else
!     emit_insn (gen_altivec_vmrglw_direct_v4si_le (operands[0],
! 						  operands[2],
! 						  operands[1]));
    DONE;
  })
  
! (define_insn "altivec_vmrghw_direct_<mode>_be"
    [(set (match_operand:VSX_W 0 "register_operand" "=wa,v")
  	(vec_select:VSX_W
  	  (vec_concat:<VS_double>
***************
*** 1229,1235 ****
  	    (match_operand:VSX_W 2 "register_operand" "wa,v"))
  	  (parallel [(const_int 0) (const_int 4)
  		     (const_int 1) (const_int 5)])))]
!   "TARGET_ALTIVEC"
    "@
     xxmrghw %x0,%x1,%x2
     vmrghw %0,%1,%2"
--- 1265,1285 ----
  	    (match_operand:VSX_W 2 "register_operand" "wa,v"))
  	  (parallel [(const_int 0) (const_int 4)
  		     (const_int 1) (const_int 5)])))]
!   "TARGET_ALTIVEC && BYTES_BIG_ENDIAN"
!   "@
!    xxmrghw %x0,%x1,%x2
!    vmrghw %0,%1,%2"
!   [(set_attr "type" "vecperm")])
! 
! (define_insn "altivec_vmrghw_direct_<mode>_le"
!   [(set (match_operand:VSX_W 0 "register_operand" "=wa,v")
! 	(vec_select:VSX_W
! 	  (vec_concat:<VS_double>
! 	    (match_operand:VSX_W 2 "register_operand" "wa,v")
! 	    (match_operand:VSX_W 1 "register_operand" "wa,v"))
! 	  (parallel [(const_int 2) (const_int 6)
! 		     (const_int 3) (const_int 7)])))]
!   "TARGET_ALTIVEC && !BYTES_BIG_ENDIAN"
    "@
     xxmrghw %x0,%x1,%x2
     vmrghw %0,%1,%2"
***************
*** 1258,1272 ****
     (use (match_operand:V16QI 2 "register_operand"))]
    "TARGET_ALTIVEC"
  {
!   rtx (*fun) (rtx, rtx, rtx) = BYTES_BIG_ENDIAN ? gen_altivec_vmrglb_direct
! 						: gen_altivec_vmrghb_direct;
!   if (!BYTES_BIG_ENDIAN)
!     std::swap (operands[1], operands[2]);
!   emit_insn (fun (operands[0], operands[1], operands[2]));
    DONE;
  })
  
! (define_insn "altivec_vmrglb_direct"
    [(set (match_operand:V16QI 0 "register_operand" "=v")
  	(vec_select:V16QI
  	  (vec_concat:V32QI
--- 1308,1323 ----
     (use (match_operand:V16QI 2 "register_operand"))]
    "TARGET_ALTIVEC"
  {
!   if (BYTES_BIG_ENDIAN)
!     emit_insn (
!       gen_altivec_vmrglb_direct_be (operands[0], operands[1], operands[2]));
!   else
!     emit_insn (
!       gen_altivec_vmrghb_direct_le (operands[0], operands[2], operands[1]));
    DONE;
  })
  
! (define_insn "altivec_vmrglb_direct_be"
    [(set (match_operand:V16QI 0 "register_operand" "=v")
  	(vec_select:V16QI
  	  (vec_concat:V32QI
***************
*** 1280,1286 ****
  		     (const_int 13) (const_int 29)
  		     (const_int 14) (const_int 30)
  		     (const_int 15) (const_int 31)])))]
!   "TARGET_ALTIVEC"
    "vmrglb %0,%1,%2"
    [(set_attr "type" "vecperm")])
  
--- 1331,1355 ----
  		     (const_int 13) (const_int 29)
  		     (const_int 14) (const_int 30)
  		     (const_int 15) (const_int 31)])))]
!   "TARGET_ALTIVEC && BYTES_BIG_ENDIAN"
!   "vmrglb %0,%1,%2"
!   [(set_attr "type" "vecperm")])
! 
! (define_insn "altivec_vmrglb_direct_le"
!   [(set (match_operand:V16QI 0 "register_operand" "=v")
! 	(vec_select:V16QI
! 	  (vec_concat:V32QI
! 	    (match_operand:V16QI 2 "register_operand" "v")
! 	    (match_operand:V16QI 1 "register_operand" "v"))
! 	  (parallel [(const_int 0) (const_int 16)
! 		     (const_int 1) (const_int 17)
! 		     (const_int 2) (const_int 18)
! 		     (const_int 3) (const_int 19)
! 		     (const_int 4) (const_int 20)
! 		     (const_int 5) (const_int 21)
! 		     (const_int 6) (const_int 22)
! 		     (const_int 7) (const_int 23)])))]
!   "TARGET_ALTIVEC && !BYTES_BIG_ENDIAN"
    "vmrglb %0,%1,%2"
    [(set_attr "type" "vecperm")])
  
***************
*** 1290,1304 ****
     (use (match_operand:V8HI 2 "register_operand"))]
    "TARGET_ALTIVEC"
  {
!   rtx (*fun) (rtx, rtx, rtx) = BYTES_BIG_ENDIAN ? gen_altivec_vmrglh_direct
! 						: gen_altivec_vmrghh_direct;
!   if (!BYTES_BIG_ENDIAN)
!     std::swap (operands[1], operands[2]);
!   emit_insn (fun (operands[0], operands[1], operands[2]));
    DONE;
  })
  
! (define_insn "altivec_vmrglh_direct"
    [(set (match_operand:V8HI 0 "register_operand" "=v")
          (vec_select:V8HI
  	  (vec_concat:V16HI
--- 1359,1374 ----
     (use (match_operand:V8HI 2 "register_operand"))]
    "TARGET_ALTIVEC"
  {
!   if (BYTES_BIG_ENDIAN)
!     emit_insn (
!       gen_altivec_vmrglh_direct_be (operands[0], operands[1], operands[2]));
!   else
!     emit_insn (
!       gen_altivec_vmrghh_direct_le (operands[0], operands[2], operands[1]));
    DONE;
  })
  
! (define_insn "altivec_vmrglh_direct_be"
    [(set (match_operand:V8HI 0 "register_operand" "=v")
          (vec_select:V8HI
  	  (vec_concat:V16HI
***************
*** 1308,1314 ****
  		     (const_int 5) (const_int 13)
  		     (const_int 6) (const_int 14)
  		     (const_int 7) (const_int 15)])))]
!   "TARGET_ALTIVEC"
    "vmrglh %0,%1,%2"
    [(set_attr "type" "vecperm")])
  
--- 1378,1398 ----
  		     (const_int 5) (const_int 13)
  		     (const_int 6) (const_int 14)
  		     (const_int 7) (const_int 15)])))]
!   "TARGET_ALTIVEC && BYTES_BIG_ENDIAN"
!   "vmrglh %0,%1,%2"
!   [(set_attr "type" "vecperm")])
! 
! (define_insn "altivec_vmrglh_direct_le"
!   [(set (match_operand:V8HI 0 "register_operand" "=v")
! 	(vec_select:V8HI
! 	  (vec_concat:V16HI
! 	    (match_operand:V8HI 2 "register_operand" "v")
! 	    (match_operand:V8HI 1 "register_operand" "v"))
! 	  (parallel [(const_int 0) (const_int 8)
! 		     (const_int 1) (const_int 9)
! 		     (const_int 2) (const_int 10)
! 		     (const_int 3) (const_int 11)])))]
!   "TARGET_ALTIVEC && !BYTES_BIG_ENDIAN"
    "vmrglh %0,%1,%2"
    [(set_attr "type" "vecperm")])
  
***************
*** 1318,1333 ****
     (use (match_operand:V4SI 2 "register_operand"))]
    "VECTOR_MEM_ALTIVEC_P (V4SImode)"
  {
!   rtx (*fun) (rtx, rtx, rtx);
!   fun = BYTES_BIG_ENDIAN ? gen_altivec_vmrglw_direct_v4si
! 			 : gen_altivec_vmrghw_direct_v4si;
!   if (!BYTES_BIG_ENDIAN)
!     std::swap (operands[1], operands[2]);
!   emit_insn (fun (operands[0], operands[1], operands[2]));
    DONE;
  })
  
! (define_insn "altivec_vmrglw_direct_<mode>"
    [(set (match_operand:VSX_W 0 "register_operand" "=wa,v")
  	(vec_select:VSX_W
  	  (vec_concat:<VS_double>
--- 1402,1419 ----
     (use (match_operand:V4SI 2 "register_operand"))]
    "VECTOR_MEM_ALTIVEC_P (V4SImode)"
  {
!   if (BYTES_BIG_ENDIAN)
!     emit_insn (gen_altivec_vmrglw_direct_v4si_be (operands[0],
! 						  operands[1],
! 						  operands[2]));
!   else
!     emit_insn (gen_altivec_vmrghw_direct_v4si_le (operands[0],
! 						  operands[2],
! 						  operands[1]));
    DONE;
  })
  
! (define_insn "altivec_vmrglw_direct_<mode>_be"
    [(set (match_operand:VSX_W 0 "register_operand" "=wa,v")
  	(vec_select:VSX_W
  	  (vec_concat:<VS_double>
***************
*** 1335,1341 ****
  	    (match_operand:VSX_W 2 "register_operand" "wa,v"))
  	  (parallel [(const_int 2) (const_int 6)
  		     (const_int 3) (const_int 7)])))]
!   "TARGET_ALTIVEC"
    "@
     xxmrglw %x0,%x1,%x2
     vmrglw %0,%1,%2"
--- 1421,1441 ----
  	    (match_operand:VSX_W 2 "register_operand" "wa,v"))
  	  (parallel [(const_int 2) (const_int 6)
  		     (const_int 3) (const_int 7)])))]
!   "TARGET_ALTIVEC && BYTES_BIG_ENDIAN"
!   "@
!    xxmrglw %x0,%x1,%x2
!    vmrglw %0,%1,%2"
!   [(set_attr "type" "vecperm")])
! 
! (define_insn "altivec_vmrglw_direct_<mode>_le"
!   [(set (match_operand:VSX_W 0 "register_operand" "=wa,v")
! 	(vec_select:VSX_W
! 	  (vec_concat:<VS_double>
! 	    (match_operand:VSX_W 2 "register_operand" "wa,v")
! 	    (match_operand:VSX_W 1 "register_operand" "wa,v"))
! 	  (parallel [(const_int 0) (const_int 4)
! 		     (const_int 1) (const_int 5)])))]
!   "TARGET_ALTIVEC && !BYTES_BIG_ENDIAN"
    "@
     xxmrglw %x0,%x1,%x2
     vmrglw %0,%1,%2"
***************
*** 3707,3719 ****
      {
        emit_insn (gen_altivec_vmuleub (ve, operands[1], operands[2]));
        emit_insn (gen_altivec_vmuloub (vo, operands[1], operands[2]));
!       emit_insn (gen_altivec_vmrghh_direct (operands[0], ve, vo));
      }
    else
      {
        emit_insn (gen_altivec_vmuloub (ve, operands[1], operands[2]));
        emit_insn (gen_altivec_vmuleub (vo, operands[1], operands[2]));
!       emit_insn (gen_altivec_vmrghh_direct (operands[0], vo, ve));
      }
    DONE;
  })
--- 3807,3819 ----
      {
        emit_insn (gen_altivec_vmuleub (ve, operands[1], operands[2]));
        emit_insn (gen_altivec_vmuloub (vo, operands[1], operands[2]));
!       emit_insn (gen_altivec_vmrghh (operands[0], ve, vo));
      }
    else
      {
        emit_insn (gen_altivec_vmuloub (ve, operands[1], operands[2]));
        emit_insn (gen_altivec_vmuleub (vo, operands[1], operands[2]));
!       emit_insn (gen_altivec_vmrglh (operands[0], ve, vo));
      }
    DONE;
  })
***************
*** 3732,3744 ****
      {
        emit_insn (gen_altivec_vmuleub (ve, operands[1], operands[2]));
        emit_insn (gen_altivec_vmuloub (vo, operands[1], operands[2]));
!       emit_insn (gen_altivec_vmrglh_direct (operands[0], ve, vo));
      }
    else
      {
        emit_insn (gen_altivec_vmuloub (ve, operands[1], operands[2]));
        emit_insn (gen_altivec_vmuleub (vo, operands[1], operands[2]));
!       emit_insn (gen_altivec_vmrglh_direct (operands[0], vo, ve));
      }
    DONE;
  })
--- 3832,3844 ----
      {
        emit_insn (gen_altivec_vmuleub (ve, operands[1], operands[2]));
        emit_insn (gen_altivec_vmuloub (vo, operands[1], operands[2]));
!       emit_insn (gen_altivec_vmrglh (operands[0], ve, vo));
      }
    else
      {
        emit_insn (gen_altivec_vmuloub (ve, operands[1], operands[2]));
        emit_insn (gen_altivec_vmuleub (vo, operands[1], operands[2]));
!       emit_insn (gen_altivec_vmrghh (operands[0], ve, vo));
      }
    DONE;
  })
***************
*** 3757,3769 ****
      {
        emit_insn (gen_altivec_vmulesb (ve, operands[1], operands[2]));
        emit_insn (gen_altivec_vmulosb (vo, operands[1], operands[2]));
!       emit_insn (gen_altivec_vmrghh_direct (operands[0], ve, vo));
      }
    else
      {
        emit_insn (gen_altivec_vmulosb (ve, operands[1], operands[2]));
        emit_insn (gen_altivec_vmulesb (vo, operands[1], operands[2]));
!       emit_insn (gen_altivec_vmrghh_direct (operands[0], vo, ve));
      }
    DONE;
  })
--- 3857,3869 ----
      {
        emit_insn (gen_altivec_vmulesb (ve, operands[1], operands[2]));
        emit_insn (gen_altivec_vmulosb (vo, operands[1], operands[2]));
!       emit_insn (gen_altivec_vmrghh (operands[0], ve, vo));
      }
    else
      {
        emit_insn (gen_altivec_vmulosb (ve, operands[1], operands[2]));
        emit_insn (gen_altivec_vmulesb (vo, operands[1], operands[2]));
!       emit_insn (gen_altivec_vmrglh (operands[0], ve, vo));
      }
    DONE;
  })
***************
*** 3782,3794 ****
      {
        emit_insn (gen_altivec_vmulesb (ve, operands[1], operands[2]));
        emit_insn (gen_altivec_vmulosb (vo, operands[1], operands[2]));
!       emit_insn (gen_altivec_vmrglh_direct (operands[0], ve, vo));
      }
    else
      {
        emit_insn (gen_altivec_vmulosb (ve, operands[1], operands[2]));
        emit_insn (gen_altivec_vmulesb (vo, operands[1], operands[2]));
!       emit_insn (gen_altivec_vmrglh_direct (operands[0], vo, ve));
      }
    DONE;
  })
--- 3882,3894 ----
      {
        emit_insn (gen_altivec_vmulesb (ve, operands[1], operands[2]));
        emit_insn (gen_altivec_vmulosb (vo, operands[1], operands[2]));
!       emit_insn (gen_altivec_vmrglh (operands[0], ve, vo));
      }
    else
      {
        emit_insn (gen_altivec_vmulosb (ve, operands[1], operands[2]));
        emit_insn (gen_altivec_vmulesb (vo, operands[1], operands[2]));
!       emit_insn (gen_altivec_vmrghh (operands[0], ve, vo));
      }
    DONE;
  })
***************
*** 3807,3819 ****
      {
        emit_insn (gen_altivec_vmuleuh (ve, operands[1], operands[2]));
        emit_insn (gen_altivec_vmulouh (vo, operands[1], operands[2]));
!       emit_insn (gen_altivec_vmrghw_direct_v4si (operands[0], ve, vo));
      }
    else
      {
        emit_insn (gen_altivec_vmulouh (ve, operands[1], operands[2]));
        emit_insn (gen_altivec_vmuleuh (vo, operands[1], operands[2]));
!       emit_insn (gen_altivec_vmrghw_direct_v4si (operands[0], vo, ve));
      }
    DONE;
  })
--- 3907,3919 ----
      {
        emit_insn (gen_altivec_vmuleuh (ve, operands[1], operands[2]));
        emit_insn (gen_altivec_vmulouh (vo, operands[1], operands[2]));
!       emit_insn (gen_altivec_vmrghw (operands[0], ve, vo));
      }
    else
      {
        emit_insn (gen_altivec_vmulouh (ve, operands[1], operands[2]));
        emit_insn (gen_altivec_vmuleuh (vo, operands[1], operands[2]));
!       emit_insn (gen_altivec_vmrglw (operands[0], ve, vo));
      }
    DONE;
  })
***************
*** 3832,3844 ****
      {
        emit_insn (gen_altivec_vmuleuh (ve, operands[1], operands[2]));
        emit_insn (gen_altivec_vmulouh (vo, operands[1], operands[2]));
!       emit_insn (gen_altivec_vmrglw_direct_v4si (operands[0], ve, vo));
      }
    else
      {
        emit_insn (gen_altivec_vmulouh (ve, operands[1], operands[2]));
        emit_insn (gen_altivec_vmuleuh (vo, operands[1], operands[2]));
!       emit_insn (gen_altivec_vmrglw_direct_v4si (operands[0], vo, ve));
      }
    DONE;
  })
--- 3932,3944 ----
      {
        emit_insn (gen_altivec_vmuleuh (ve, operands[1], operands[2]));
        emit_insn (gen_altivec_vmulouh (vo, operands[1], operands[2]));
!       emit_insn (gen_altivec_vmrglw (operands[0], ve, vo));
      }
    else
      {
        emit_insn (gen_altivec_vmulouh (ve, operands[1], operands[2]));
        emit_insn (gen_altivec_vmuleuh (vo, operands[1], operands[2]));
!       emit_insn (gen_altivec_vmrghw (operands[0], ve, vo));
      }
    DONE;
  })
***************
*** 3857,3869 ****
      {
        emit_insn (gen_altivec_vmulesh (ve, operands[1], operands[2]));
        emit_insn (gen_altivec_vmulosh (vo, operands[1], operands[2]));
!       emit_insn (gen_altivec_vmrghw_direct_v4si (operands[0], ve, vo));
      }
    else
      {
        emit_insn (gen_altivec_vmulosh (ve, operands[1], operands[2]));
        emit_insn (gen_altivec_vmulesh (vo, operands[1], operands[2]));
!       emit_insn (gen_altivec_vmrghw_direct_v4si (operands[0], vo, ve));
      }
    DONE;
  })
--- 3957,3969 ----
      {
        emit_insn (gen_altivec_vmulesh (ve, operands[1], operands[2]));
        emit_insn (gen_altivec_vmulosh (vo, operands[1], operands[2]));
!       emit_insn (gen_altivec_vmrghw (operands[0], ve, vo));
      }
    else
      {
        emit_insn (gen_altivec_vmulosh (ve, operands[1], operands[2]));
        emit_insn (gen_altivec_vmulesh (vo, operands[1], operands[2]));
!       emit_insn (gen_altivec_vmrglw (operands[0], ve, vo));
      }
    DONE;
  })
***************
*** 3882,3894 ****
      {
        emit_insn (gen_altivec_vmulesh (ve, operands[1], operands[2]));
        emit_insn (gen_altivec_vmulosh (vo, operands[1], operands[2]));
!       emit_insn (gen_altivec_vmrglw_direct_v4si (operands[0], ve, vo));
      }
    else
      {
        emit_insn (gen_altivec_vmulosh (ve, operands[1], operands[2]));
        emit_insn (gen_altivec_vmulesh (vo, operands[1], operands[2]));
!       emit_insn (gen_altivec_vmrglw_direct_v4si (operands[0], vo, ve));
      }
    DONE;
  })
--- 3982,3994 ----
      {
        emit_insn (gen_altivec_vmulesh (ve, operands[1], operands[2]));
        emit_insn (gen_altivec_vmulosh (vo, operands[1], operands[2]));
!       emit_insn (gen_altivec_vmrglw (operands[0], ve, vo));
      }
    else
      {
        emit_insn (gen_altivec_vmulosh (ve, operands[1], operands[2]));
        emit_insn (gen_altivec_vmulesh (vo, operands[1], operands[2]));
!       emit_insn (gen_altivec_vmrghw (operands[0], ve, vo));
      }
    DONE;
  })
diff -Nrcpad gcc-13.3.0/gcc/config/rs6000/amo.h gcc-13.4.0/gcc/config/rs6000/amo.h
*** gcc-13.3.0/gcc/config/rs6000/amo.h	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/rs6000/amo.h	Thu Jun  5 16:02:58 2025
*************** enum _AMO_LD {
*** 46,52 ****
    _AMO_LD_CS_NE		= 0x10,		/* Compare and Swap Not Equal.  */
    _AMO_LD_INC_BOUNDED	= 0x18,		/* Fetch and Increment Bounded.  */
    _AMO_LD_INC_EQUAL	= 0x19,		/* Fetch and Increment Equal.  */
!   _AMO_LD_DEC_BOUNDED	= 0x1A		/* Fetch and Decrement Bounded.  */
  };
  
  /* Implementation of the simple LWAT/LDAT operations that take one register and
--- 46,52 ----
    _AMO_LD_CS_NE		= 0x10,		/* Compare and Swap Not Equal.  */
    _AMO_LD_INC_BOUNDED	= 0x18,		/* Fetch and Increment Bounded.  */
    _AMO_LD_INC_EQUAL	= 0x19,		/* Fetch and Increment Equal.  */
!   _AMO_LD_DEC_BOUNDED	= 0x1C		/* Fetch and Decrement Bounded.  */
  };
  
  /* Implementation of the simple LWAT/LDAT operations that take one register and
diff -Nrcpad gcc-13.3.0/gcc/config/rs6000/freebsd64.h gcc-13.4.0/gcc/config/rs6000/freebsd64.h
*** gcc-13.3.0/gcc/config/rs6000/freebsd64.h	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/rs6000/freebsd64.h	Thu Jun  5 16:02:58 2025
*************** extern int dot_symbols;
*** 112,117 ****
--- 112,118 ----
  
  #define LINK_OS_FREEBSD_SPEC_DEF "\
    %{p:%nconsider using `-pg' instead of `-p' with gprof(1)} \
+   " FBSD_LINK_PG_NOTE " \
    %{v:-V} \
    %{assert*} %{R*} %{rpath*} %{defsym*} \
    %{shared:-Bshareable %{h*} %{soname*}} \
diff -Nrcpad gcc-13.3.0/gcc/config/rs6000/rs6000-builtin.cc gcc-13.4.0/gcc/config/rs6000/rs6000-builtin.cc
*** gcc-13.3.0/gcc/config/rs6000/rs6000-builtin.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/rs6000/rs6000-builtin.cc	Thu Jun  5 16:02:58 2025
*************** rs6000_init_builtins (void)
*** 845,851 ****
  	  enum rs6000_gen_builtins fn_code = (enum rs6000_gen_builtins) i;
  	  if (!rs6000_builtin_is_supported (fn_code))
  	    continue;
! 	  tree fntype = rs6000_builtin_info[i].fntype;
  	  tree t = TREE_TYPE (fntype);
  	  fprintf (stderr, "%s %s (", rs6000_type_string (t),
  		   rs6000_builtin_info[i].bifname);
--- 845,851 ----
  	  enum rs6000_gen_builtins fn_code = (enum rs6000_gen_builtins) i;
  	  if (!rs6000_builtin_is_supported (fn_code))
  	    continue;
! 	  tree fntype = rs6000_builtin_info_fntype[i];
  	  tree t = TREE_TYPE (fntype);
  	  fprintf (stderr, "%s %s (", rs6000_type_string (t),
  		   rs6000_builtin_info[i].bifname);
*************** rs6000_expand_builtin (tree exp, rtx tar
*** 3534,3540 ****
      }
  
    /* Check for restricted constant arguments.  */
!   for (int i = 0; i < 2; i++)
      {
        switch (bifaddr->restr[i])
  	{
--- 3534,3540 ----
      }
  
    /* Check for restricted constant arguments.  */
!   for (size_t i = 0; i < ARRAY_SIZE (bifaddr->restr); i++)
      {
        switch (bifaddr->restr[i])
  	{
*************** rs6000_expand_builtin (tree exp, rtx tar
*** 3552,3558 ****
  		error ("argument %d must be a literal between 0 and %d,"
  		       " inclusive",
  		       bifaddr->restr_opnd[i], p);
! 		return CONST0_RTX (mode[0]);
  	      }
  	    break;
  	  }
--- 3552,3558 ----
  		error ("argument %d must be a literal between 0 and %d,"
  		       " inclusive",
  		       bifaddr->restr_opnd[i], p);
! 		return const0_rtx;
  	      }
  	    break;
  	  }
*************** rs6000_expand_builtin (tree exp, rtx tar
*** 3569,3575 ****
  		       " inclusive",
  		       bifaddr->restr_opnd[i], bifaddr->restr_val1[i],
  		       bifaddr->restr_val2[i]);
! 		return CONST0_RTX (mode[0]);
  	      }
  	    break;
  	  }
--- 3569,3575 ----
  		       " inclusive",
  		       bifaddr->restr_opnd[i], bifaddr->restr_val1[i],
  		       bifaddr->restr_val2[i]);
! 		return const0_rtx;
  	      }
  	    break;
  	  }
*************** rs6000_expand_builtin (tree exp, rtx tar
*** 3586,3592 ****
  		       "between %d and %d, inclusive",
  		       bifaddr->restr_opnd[i], bifaddr->restr_val1[i],
  		       bifaddr->restr_val2[i]);
! 		return CONST0_RTX (mode[0]);
  	      }
  	    break;
  	  }
--- 3586,3592 ----
  		       "between %d and %d, inclusive",
  		       bifaddr->restr_opnd[i], bifaddr->restr_val1[i],
  		       bifaddr->restr_val2[i]);
! 		return const0_rtx;
  	      }
  	    break;
  	  }
*************** rs6000_expand_builtin (tree exp, rtx tar
*** 3602,3608 ****
  		       "literal %d",
  		       bifaddr->restr_opnd[i], bifaddr->restr_val1[i],
  		       bifaddr->restr_val2[i]);
! 		return CONST0_RTX (mode[0]);
  	      }
  	    break;
  	  }
--- 3602,3608 ----
  		       "literal %d",
  		       bifaddr->restr_opnd[i], bifaddr->restr_val1[i],
  		       bifaddr->restr_val2[i]);
! 		return const0_rtx;
  	      }
  	    break;
  	  }
diff -Nrcpad gcc-13.3.0/gcc/config/rs6000/rs6000-builtins.def gcc-13.4.0/gcc/config/rs6000/rs6000-builtins.def
*** gcc-13.3.0/gcc/config/rs6000/rs6000-builtins.def	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/rs6000/rs6000-builtins.def	Thu Jun  5 16:02:58 2025
***************
*** 3862,3872 ****
      PMXVI4GER8_INTERNAL mma_pmxvi4ger8 {mma}
  
    void __builtin_mma_pmxvi4ger8pp (v512 *, vuc, vuc, const int<4>, \
!                                    const int<4>, const int<4>);
      PMXVI4GER8PP nothing {mma,quad,mmaint}
  
    v512 __builtin_mma_pmxvi4ger8pp_internal (v512, vuc, vuc, const int<4>, \
!                                             const int<4>, const int<4>);
      PMXVI4GER8PP_INTERNAL mma_pmxvi4ger8pp {mma,quad}
  
    void __builtin_mma_pmxvi8ger4 (v512 *, vuc, vuc, const int<4>, \
--- 3862,3872 ----
      PMXVI4GER8_INTERNAL mma_pmxvi4ger8 {mma}
  
    void __builtin_mma_pmxvi4ger8pp (v512 *, vuc, vuc, const int<4>, \
!                                    const int<4>, const int<8>);
      PMXVI4GER8PP nothing {mma,quad,mmaint}
  
    v512 __builtin_mma_pmxvi4ger8pp_internal (v512, vuc, vuc, const int<4>, \
!                                             const int<4>, const int<8>);
      PMXVI4GER8PP_INTERNAL mma_pmxvi4ger8pp {mma,quad}
  
    void __builtin_mma_pmxvi8ger4 (v512 *, vuc, vuc, const int<4>, \
diff -Nrcpad gcc-13.3.0/gcc/config/rs6000/rs6000-c.cc gcc-13.4.0/gcc/config/rs6000/rs6000-c.cc
*** gcc-13.3.0/gcc/config/rs6000/rs6000-c.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/rs6000/rs6000-c.cc	Thu Jun  5 16:02:58 2025
*************** resolve_vec_step (resolution *res, vec<t
*** 1658,1691 ****
     UNSUPPORTED_BUILTIN to true.  If we don't match, return error_mark_node
     and leave UNSUPPORTED_BUILTIN alone.  */
  
! tree
! find_instance (bool *unsupported_builtin, ovlddata **instance,
  	       rs6000_gen_builtins instance_code,
  	       rs6000_gen_builtins fcode,
  	       tree *types, tree *args)
  {
!   while (*instance && (*instance)->bifid != instance_code)
!     *instance = (*instance)->next;
  
!   ovlddata *inst = *instance;
!   gcc_assert (inst != NULL);
    /* It is possible for an instance to require a data type that isn't
!      defined on this target, in which case inst->fntype will be NULL.  */
!   if (!inst->fntype)
      return error_mark_node;
!   tree fntype = rs6000_builtin_info[inst->bifid].fntype;
    tree parmtype0 = TREE_VALUE (TYPE_ARG_TYPES (fntype));
    tree parmtype1 = TREE_VALUE (TREE_CHAIN (TYPE_ARG_TYPES (fntype)));
  
    if (rs6000_builtin_type_compatible (types[0], parmtype0)
        && rs6000_builtin_type_compatible (types[1], parmtype1))
      {
!       if (rs6000_builtin_decl (inst->bifid, false) != error_mark_node
! 	  && rs6000_builtin_is_supported (inst->bifid))
  	{
! 	  tree ret_type = TREE_TYPE (inst->fntype);
  	  return altivec_build_resolved_builtin (args, 2, fntype, ret_type,
! 						 inst->bifid, fcode);
  	}
        else
  	*unsupported_builtin = true;
--- 1658,1694 ----
     UNSUPPORTED_BUILTIN to true.  If we don't match, return error_mark_node
     and leave UNSUPPORTED_BUILTIN alone.  */
  
! static tree
! find_instance (bool *unsupported_builtin, int *instance,
  	       rs6000_gen_builtins instance_code,
  	       rs6000_gen_builtins fcode,
  	       tree *types, tree *args)
  {
!   while (*instance != -1
! 	 && rs6000_instance_info[*instance].bifid != instance_code)
!     *instance = rs6000_instance_info[*instance].next;
  
!   int inst = *instance;
!   gcc_assert (inst != -1);
    /* It is possible for an instance to require a data type that isn't
!      defined on this target, in which case rs6000_instance_info_fntype[inst]
!      will be NULL.  */
!   if (!rs6000_instance_info_fntype[inst])
      return error_mark_node;
!   rs6000_gen_builtins bifid = rs6000_instance_info[inst].bifid;
!   tree fntype = rs6000_builtin_info_fntype[bifid];
    tree parmtype0 = TREE_VALUE (TYPE_ARG_TYPES (fntype));
    tree parmtype1 = TREE_VALUE (TREE_CHAIN (TYPE_ARG_TYPES (fntype)));
  
    if (rs6000_builtin_type_compatible (types[0], parmtype0)
        && rs6000_builtin_type_compatible (types[1], parmtype1))
      {
!       if (rs6000_builtin_decl (bifid, false) != error_mark_node
! 	  && rs6000_builtin_is_supported (bifid))
  	{
! 	  tree ret_type = TREE_TYPE (rs6000_instance_info_fntype[inst]);
  	  return altivec_build_resolved_builtin (args, 2, fntype, ret_type,
! 						 bifid, fcode);
  	}
        else
  	*unsupported_builtin = true;
*************** altivec_resolve_overloaded_builtin (loca
*** 1868,1878 ****
    bool unsupported_builtin = false;
    rs6000_gen_builtins instance_code;
    bool supported = false;
!   ovlddata *instance = rs6000_overload_info[adj_fcode].first_instance;
!   gcc_assert (instance != NULL);
  
    /* Functions with no arguments can have only one overloaded instance.  */
!   gcc_assert (nargs > 0 || !instance->next);
  
    /* Standard overload processing involves determining whether an instance
       exists that is type-compatible with the overloaded function call.  In
--- 1871,1881 ----
    bool unsupported_builtin = false;
    rs6000_gen_builtins instance_code;
    bool supported = false;
!   int instance = rs6000_overload_info[adj_fcode].first_instance;
!   gcc_assert (instance != -1);
  
    /* Functions with no arguments can have only one overloaded instance.  */
!   gcc_assert (nargs > 0 || rs6000_instance_info[instance].next == -1);
  
    /* Standard overload processing involves determining whether an instance
       exists that is type-compatible with the overloaded function call.  In
*************** altivec_resolve_overloaded_builtin (loca
*** 1946,1961 ****
        /* Standard overload processing.  Look for an instance with compatible
  	 parameter types.  If it is supported in the current context, resolve
  	 the overloaded call to that instance.  */
!       for (; instance != NULL; instance = instance->next)
  	{
  	  /* It is possible for an instance to require a data type that isn't
! 	     defined on this target, in which case instance->fntype will be
  	     NULL.  */
! 	  if (!instance->fntype)
  	    continue;
  
  	  bool mismatch = false;
! 	  tree nextparm = TYPE_ARG_TYPES (instance->fntype);
  
  	  for (unsigned int arg_i = 0;
  	       arg_i < nargs && nextparm != NULL;
--- 1949,1966 ----
        /* Standard overload processing.  Look for an instance with compatible
  	 parameter types.  If it is supported in the current context, resolve
  	 the overloaded call to that instance.  */
!       for (; instance != -1; instance = rs6000_instance_info[instance].next)
  	{
+ 	  tree fntype = rs6000_instance_info_fntype[instance];
+ 	  rs6000_gen_builtins bifid = rs6000_instance_info[instance].bifid;
  	  /* It is possible for an instance to require a data type that isn't
! 	     defined on this target, in which case fntype will be
  	     NULL.  */
! 	  if (!fntype)
  	    continue;
  
  	  bool mismatch = false;
! 	  tree nextparm = TYPE_ARG_TYPES (fntype);
  
  	  for (unsigned int arg_i = 0;
  	       arg_i < nargs && nextparm != NULL;
*************** altivec_resolve_overloaded_builtin (loca
*** 1973,1987 ****
  	  if (mismatch)
  	    continue;
  
! 	  supported = rs6000_builtin_is_supported (instance->bifid);
! 	  if (rs6000_builtin_decl (instance->bifid, false) != error_mark_node
  	      && supported)
  	    {
! 	      tree fntype = rs6000_builtin_info[instance->bifid].fntype;
! 	      tree ret_type = TREE_TYPE (instance->fntype);
  	      return altivec_build_resolved_builtin (args, nargs, fntype,
! 						     ret_type, instance->bifid,
! 						     fcode);
  	    }
  	  else
  	    {
--- 1978,1991 ----
  	  if (mismatch)
  	    continue;
  
! 	  supported = rs6000_builtin_is_supported (bifid);
! 	  if (rs6000_builtin_decl (bifid, false) != error_mark_node
  	      && supported)
  	    {
! 	      tree ret_type = TREE_TYPE (fntype);
! 	      fntype = rs6000_builtin_info_fntype[bifid];
  	      return altivec_build_resolved_builtin (args, nargs, fntype,
! 						     ret_type, bifid, fcode);
  	    }
  	  else
  	    {
*************** altivec_resolve_overloaded_builtin (loca
*** 1998,2009 ****
  	{
  	  /* Indicate that the instantiation of the overloaded builtin
  	     name is not available with the target flags in effect.  */
! 	  rs6000_gen_builtins fcode = (rs6000_gen_builtins) instance->bifid;
  	  rs6000_invalid_builtin (fcode);
  	  /* Provide clarity of the relationship between the overload
  	     and the instantiation.  */
! 	  const char *internal_name
! 	    = rs6000_builtin_info[instance->bifid].bifname;
  	  rich_location richloc (line_table, input_location);
  	  inform (&richloc,
  		  "overloaded builtin %qs is implemented by builtin %qs",
--- 2002,2013 ----
  	{
  	  /* Indicate that the instantiation of the overloaded builtin
  	     name is not available with the target flags in effect.  */
! 	  rs6000_gen_builtins bifid = rs6000_instance_info[instance].bifid;
! 	  rs6000_gen_builtins fcode = (rs6000_gen_builtins) bifid;
  	  rs6000_invalid_builtin (fcode);
  	  /* Provide clarity of the relationship between the overload
  	     and the instantiation.  */
! 	  const char *internal_name = rs6000_builtin_info[bifid].bifname;
  	  rich_location richloc (line_table, input_location);
  	  inform (&richloc,
  		  "overloaded builtin %qs is implemented by builtin %qs",
diff -Nrcpad gcc-13.3.0/gcc/config/rs6000/rs6000-gen-builtins.cc gcc-13.4.0/gcc/config/rs6000/rs6000-gen-builtins.cc
*** gcc-13.3.0/gcc/config/rs6000/rs6000-gen-builtins.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/rs6000/rs6000-gen-builtins.cc	Thu Jun  5 16:02:58 2025
*************** write_decls (void)
*** 2261,2280 ****
    fprintf (header_file, "};\n\n");
  
    fprintf (header_file, "#define PPC_MAXRESTROPNDS 3\n");
!   fprintf (header_file, "struct GTY(()) bifdata\n");
    fprintf (header_file, "{\n");
!   fprintf (header_file, "  const char *GTY((skip(\"\"))) bifname;\n");
!   fprintf (header_file, "  bif_enable GTY((skip(\"\"))) enable;\n");
!   fprintf (header_file, "  tree fntype;\n");
!   fprintf (header_file, "  insn_code GTY((skip(\"\"))) icode;\n");
!   fprintf (header_file, "  int  nargs;\n");
!   fprintf (header_file, "  int  bifattrs;\n");
!   fprintf (header_file, "  int  restr_opnd[PPC_MAXRESTROPNDS];\n");
!   fprintf (header_file, "  restriction GTY((skip(\"\"))) restr[PPC_MAXRESTROPNDS];\n");
!   fprintf (header_file, "  int  restr_val1[PPC_MAXRESTROPNDS];\n");
!   fprintf (header_file, "  int  restr_val2[PPC_MAXRESTROPNDS];\n");
!   fprintf (header_file, "  const char *GTY((skip(\"\"))) attr_string;\n");
!   fprintf (header_file, "  rs6000_gen_builtins GTY((skip(\"\"))) assoc_bif;\n");
    fprintf (header_file, "};\n\n");
  
    fprintf (header_file, "#define bif_init_bit\t\t(0x00000001)\n");
--- 2261,2279 ----
    fprintf (header_file, "};\n\n");
  
    fprintf (header_file, "#define PPC_MAXRESTROPNDS 3\n");
!   fprintf (header_file, "struct bifdata\n");
    fprintf (header_file, "{\n");
!   fprintf (header_file, "  const char *bifname;\n");
!   fprintf (header_file, "  bif_enable enable;\n");
!   fprintf (header_file, "  insn_code icode;\n");
!   fprintf (header_file, "  int nargs;\n");
!   fprintf (header_file, "  int bifattrs;\n");
!   fprintf (header_file, "  int restr_opnd[PPC_MAXRESTROPNDS];\n");
!   fprintf (header_file, "  restriction restr[PPC_MAXRESTROPNDS];\n");
!   fprintf (header_file, "  int restr_val1[PPC_MAXRESTROPNDS];\n");
!   fprintf (header_file, "  int restr_val2[PPC_MAXRESTROPNDS];\n");
!   fprintf (header_file, "  const char *attr_string;\n");
!   fprintf (header_file, "  rs6000_gen_builtins assoc_bif;\n");
    fprintf (header_file, "};\n\n");
  
    fprintf (header_file, "#define bif_init_bit\t\t(0x00000001)\n");
*************** write_decls (void)
*** 2353,2376 ****
    fprintf (header_file, "\n");
  
    fprintf (header_file,
! 	   "extern GTY(()) bifdata rs6000_builtin_info[RS6000_BIF_MAX];\n\n");
  
!   fprintf (header_file, "struct GTY(()) ovlddata\n");
    fprintf (header_file, "{\n");
!   fprintf (header_file, "  const char *GTY((skip(\"\"))) bifname;\n");
!   fprintf (header_file, "  rs6000_gen_builtins GTY((skip(\"\"))) bifid;\n");
!   fprintf (header_file, "  tree fntype;\n");
!   fprintf (header_file, "  ovlddata *GTY((skip(\"\"))) next;\n");
    fprintf (header_file, "};\n\n");
  
    fprintf (header_file, "struct ovldrecord\n");
    fprintf (header_file, "{\n");
    fprintf (header_file, "  const char *ovld_name;\n");
!   fprintf (header_file, "  ovlddata *first_instance;\n");
    fprintf (header_file, "};\n\n");
  
    fprintf (header_file,
! 	   "extern GTY(()) ovlddata rs6000_instance_info[RS6000_INST_MAX];\n");
    fprintf (header_file, "extern ovldrecord rs6000_overload_info[];\n\n");
  
    fprintf (header_file, "extern void rs6000_init_generated_builtins ();\n\n");
--- 2352,2379 ----
    fprintf (header_file, "\n");
  
    fprintf (header_file,
! 	   "extern bifdata rs6000_builtin_info[RS6000_BIF_MAX];\n\n");
  
!   fprintf (header_file,
! 	   "extern GTY(()) tree rs6000_builtin_info_fntype[RS6000_BIF_MAX];\n\n");
! 
!   fprintf (header_file, "struct ovlddata\n");
    fprintf (header_file, "{\n");
!   fprintf (header_file, "  const char *bifname;\n");
!   fprintf (header_file, "  rs6000_gen_builtins bifid;\n");
!   fprintf (header_file, "  int next;\n");
    fprintf (header_file, "};\n\n");
  
    fprintf (header_file, "struct ovldrecord\n");
    fprintf (header_file, "{\n");
    fprintf (header_file, "  const char *ovld_name;\n");
!   fprintf (header_file, "  int first_instance;\n");
    fprintf (header_file, "};\n\n");
  
    fprintf (header_file,
! 	   "extern ovlddata rs6000_instance_info[RS6000_INST_MAX];\n");
!   fprintf (header_file, "extern GTY(()) tree "
! 	   "rs6000_instance_info_fntype[RS6000_INST_MAX];\n");
    fprintf (header_file, "extern ovldrecord rs6000_overload_info[];\n\n");
  
    fprintf (header_file, "extern void rs6000_init_generated_builtins ();\n\n");
*************** write_bif_static_init (void)
*** 2481,2487 ****
    fprintf (init_file, "bifdata rs6000_builtin_info[RS6000_BIF_MAX] =\n");
    fprintf (init_file, "  {\n");
    fprintf (init_file, "    { /* RS6000_BIF_NONE: */\n");
!   fprintf (init_file, "      \"\", ENB_ALWAYS, 0, CODE_FOR_nothing, 0,\n");
    fprintf (init_file, "      0, {0, 0, 0}, {RES_NONE, RES_NONE, RES_NONE},\n");
    fprintf (init_file, "      {0, 0, 0}, {0, 0, 0}, \"\", RS6000_BIF_NONE\n");
    fprintf (init_file, "    },\n");
--- 2484,2490 ----
    fprintf (init_file, "bifdata rs6000_builtin_info[RS6000_BIF_MAX] =\n");
    fprintf (init_file, "  {\n");
    fprintf (init_file, "    { /* RS6000_BIF_NONE: */\n");
!   fprintf (init_file, "      \"\", ENB_ALWAYS, CODE_FOR_nothing, 0,\n");
    fprintf (init_file, "      0, {0, 0, 0}, {RES_NONE, RES_NONE, RES_NONE},\n");
    fprintf (init_file, "      {0, 0, 0}, {0, 0, 0}, \"\", RS6000_BIF_NONE\n");
    fprintf (init_file, "    },\n");
*************** write_bif_static_init (void)
*** 2493,2500 ****
  	       bifp->proto.bifname);
        fprintf (init_file, "      /* enable*/\t%s,\n",
  	       enable_string[bifp->stanza]);
-       /* Type must be instantiated at run time.  */
-       fprintf (init_file, "      /* fntype */\t0,\n");
        fprintf (init_file, "      /* icode */\tCODE_FOR_%s,\n",
  	       bifp->patname);
        fprintf (init_file, "      /* nargs */\t%d,\n",
--- 2496,2501 ----
*************** write_bif_static_init (void)
*** 2586,2591 ****
--- 2587,2594 ----
        fprintf (init_file, "    },\n");
      }
    fprintf (init_file, "  };\n\n");
+ 
+   fprintf (init_file, "tree rs6000_builtin_info_fntype[RS6000_BIF_MAX];\n\n");
  }
  
  /* Write the decls and initializers for rs6000_overload_info[] and
*************** write_ovld_static_init (void)
*** 2598,2604 ****
  	   "- RS6000_OVLD_NONE] =\n");
    fprintf (init_file, "  {\n");
    fprintf (init_file, "    { /* RS6000_OVLD_NONE: */\n");
!   fprintf (init_file, "      \"\", NULL\n");
    fprintf (init_file, "    },\n");
    for (int i = 0; i <= curr_ovld_stanza; i++)
      {
--- 2601,2607 ----
  	   "- RS6000_OVLD_NONE] =\n");
    fprintf (init_file, "  {\n");
    fprintf (init_file, "    { /* RS6000_OVLD_NONE: */\n");
!   fprintf (init_file, "      \"\", -1\n");
    fprintf (init_file, "    },\n");
    for (int i = 0; i <= curr_ovld_stanza; i++)
      {
*************** write_ovld_static_init (void)
*** 2607,2613 ****
        fprintf (init_file, "      /* ovld_name */\t\"%s\",\n",
  	       ovld_stanzas[i].intern_name);
        /* First-instance must currently be instantiated at run time.  */
!       fprintf (init_file, "      /* first_instance */\tNULL\n");
        fprintf (init_file, "    },\n");
      }
    fprintf (init_file, "  };\n\n");
--- 2610,2616 ----
        fprintf (init_file, "      /* ovld_name */\t\"%s\",\n",
  	       ovld_stanzas[i].intern_name);
        /* First-instance must currently be instantiated at run time.  */
!       fprintf (init_file, "      /* first_instance */\t-1\n");
        fprintf (init_file, "    },\n");
      }
    fprintf (init_file, "  };\n\n");
*************** write_ovld_static_init (void)
*** 2615,2621 ****
    fprintf (init_file, "ovlddata rs6000_instance_info[RS6000_INST_MAX] =\n");
    fprintf (init_file, "  {\n");
    fprintf (init_file, "    { /* RS6000_INST_NONE: */\n");
!   fprintf (init_file, "      \"\", RS6000_BIF_NONE, NULL_TREE, NULL\n");
    fprintf (init_file, "    },\n");
    for (int i = 0; i <= curr_ovld; i++)
      {
--- 2618,2624 ----
    fprintf (init_file, "ovlddata rs6000_instance_info[RS6000_INST_MAX] =\n");
    fprintf (init_file, "  {\n");
    fprintf (init_file, "    { /* RS6000_INST_NONE: */\n");
!   fprintf (init_file, "      \"\", RS6000_BIF_NONE, -1\n");
    fprintf (init_file, "    },\n");
    for (int i = 0; i <= curr_ovld; i++)
      {
*************** write_ovld_static_init (void)
*** 2625,2643 ****
  	       ovlds[i].proto.bifname);
        fprintf (init_file, "      /* bifid */\tRS6000_BIF_%s,\n",
  	       ovlds[i].bif_id_name);
-       /* Type must be instantiated at run time.  */
-       fprintf (init_file, "      /* fntype */\t0,\n");
        fprintf (init_file, "      /* next */\t");
        if (i < curr_ovld
  	  && !strcmp (ovlds[i+1].proto.bifname, ovlds[i].proto.bifname))
  	fprintf (init_file,
! 		 "&rs6000_instance_info[RS6000_INST_%s]\n",
  		 ovlds[i+1].ovld_id_name);
        else
! 	fprintf (init_file, "NULL\n");
        fprintf (init_file, "    },\n");
      }
    fprintf (init_file, "  };\n\n");
  }
  
  /* Write code to initialize the built-in function table.  */
--- 2628,2647 ----
  	       ovlds[i].proto.bifname);
        fprintf (init_file, "      /* bifid */\tRS6000_BIF_%s,\n",
  	       ovlds[i].bif_id_name);
        fprintf (init_file, "      /* next */\t");
        if (i < curr_ovld
  	  && !strcmp (ovlds[i+1].proto.bifname, ovlds[i].proto.bifname))
  	fprintf (init_file,
! 		 "RS6000_INST_%s\n",
  		 ovlds[i+1].ovld_id_name);
        else
! 	fprintf (init_file, "-1\n");
        fprintf (init_file, "    },\n");
      }
    fprintf (init_file, "  };\n\n");
+ 
+   fprintf (init_file,
+ 	   "tree rs6000_instance_info_fntype[RS6000_INST_MAX];\n\n");
  }
  
  /* Write code to initialize the built-in function table.  */
*************** write_init_bif_table (void)
*** 2647,2653 ****
    for (int i = 0; i <= curr_bif; i++)
      {
        fprintf (init_file,
! 	       "  rs6000_builtin_info[RS6000_BIF_%s].fntype"
  	       "\n    = %s;\n",
  	       bifs[i].idname, bifs[i].fndecl);
  
--- 2651,2657 ----
    for (int i = 0; i <= curr_bif; i++)
      {
        fprintf (init_file,
! 	       "  rs6000_builtin_info_fntype[RS6000_BIF_%s]"
  	       "\n    = %s;\n",
  	       bifs[i].idname, bifs[i].fndecl);
  
*************** write_init_ovld_table (void)
*** 2736,2742 ****
    for (int i = 0; i <= curr_ovld; i++)
      {
        fprintf (init_file,
! 	       "  rs6000_instance_info[RS6000_INST_%s].fntype"
  	       "\n    = %s;\n",
  	       ovlds[i].ovld_id_name, ovlds[i].fndecl);
  
--- 2740,2746 ----
    for (int i = 0; i <= curr_ovld; i++)
      {
        fprintf (init_file,
! 	       "  rs6000_instance_info_fntype[RS6000_INST_%s]"
  	       "\n    = %s;\n",
  	       ovlds[i].ovld_id_name, ovlds[i].fndecl);
  
*************** write_init_ovld_table (void)
*** 2793,2799 ****
  		   ".first_instance\n",
  		   stanza->stanza_id);
  	  fprintf (init_file,
! 		   "    = &rs6000_instance_info[RS6000_INST_%s];\n\n",
  		   ovlds[i].ovld_id_name);
  	}
      }
--- 2797,2803 ----
  		   ".first_instance\n",
  		   stanza->stanza_id);
  	  fprintf (init_file,
! 		   "    = RS6000_INST_%s;\n\n",
  		   ovlds[i].ovld_id_name);
  	}
      }
diff -Nrcpad gcc-13.3.0/gcc/config/rs6000/rs6000-logue.cc gcc-13.4.0/gcc/config/rs6000/rs6000-logue.cc
*** gcc-13.3.0/gcc/config/rs6000/rs6000-logue.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/rs6000/rs6000-logue.cc	Thu Jun  5 16:02:58 2025
*************** rs6000_savres_strategy (rs6000_stack_t *
*** 591,611 ****
  		+---------------------------------------+
  		| Parameter save area (+padding*) (P)	|  32
  		+---------------------------------------+
! 		| Optional ROP hash slot (R)		|  32+P
  		+---------------------------------------+
! 		| Alloca space (A)			|  32+P+R
  		+---------------------------------------+
! 		| Local variable space (L)		|  32+P+R+A
  		+---------------------------------------+
! 		| Save area for AltiVec registers (W)	|  32+P+R+A+L
  		+---------------------------------------+
! 		| AltiVec alignment padding (Y)		|  32+P+R+A+L+W
  		+---------------------------------------+
! 		| Save area for GP registers (G)	|  32+P+R+A+L+W+Y
  		+---------------------------------------+
! 		| Save area for FP registers (F)	|  32+P+R+A+L+W+Y+G
  		+---------------------------------------+
! 	old SP->| back chain to caller's caller		|  32+P+R+A+L+W+Y+G+F
  		+---------------------------------------+
  
       * If the alloca area is present, the parameter save area is
--- 591,611 ----
  		+---------------------------------------+
  		| Parameter save area (+padding*) (P)	|  32
  		+---------------------------------------+
! 		| Alloca space (A)			|  32+P
  		+---------------------------------------+
! 		| Local variable space (L)		|  32+P+A
  		+---------------------------------------+
! 		| Optional ROP hash slot (R)		|  32+P+A+L
  		+---------------------------------------+
! 		| Save area for AltiVec registers (W)	|  32+P+A+L+R
  		+---------------------------------------+
! 		| AltiVec alignment padding (Y)		|  32+P+A+L+R+W
  		+---------------------------------------+
! 		| Save area for GP registers (G)	|  32+P+A+L+R+W+Y
  		+---------------------------------------+
! 		| Save area for FP registers (F)	|  32+P+A+L+R+W+Y+G
  		+---------------------------------------+
! 	old SP->| back chain to caller's caller		|  32+P+A+L+R+W+Y+G+F
  		+---------------------------------------+
  
       * If the alloca area is present, the parameter save area is
*************** rs6000_stack_info (void)
*** 716,732 ****
    info->calls_p = (!crtl->is_leaf || cfun->machine->ra_needs_full_frame);
    info->rop_hash_size = 0;
  
!   if (TARGET_POWER10
!       && info->calls_p
!       && DEFAULT_ABI == ABI_ELFv2
!       && rs6000_rop_protect)
      info->rop_hash_size = 8;
-   else if (rs6000_rop_protect && DEFAULT_ABI != ABI_ELFv2)
-     {
-       /* We can't check this in rs6000_option_override_internal since
- 	 DEFAULT_ABI isn't established yet.  */
-       error ("%qs requires the ELFv2 ABI", "-mrop-protect");
-     }
  
    /* Determine if we need to save the condition code registers.  */
    if (save_reg_p (CR2_REGNO)
--- 716,726 ----
    info->calls_p = (!crtl->is_leaf || cfun->machine->ra_needs_full_frame);
    info->rop_hash_size = 0;
  
!   /* If we want ROP protection and this function makes a call, indicate
!      we need to create a stack slot to save the hashed return address in.  */
!   if (rs6000_rop_protect
!       && info->calls_p)
      info->rop_hash_size = 8;
  
    /* Determine if we need to save the condition code registers.  */
    if (save_reg_p (CR2_REGNO)
*************** rs6000_stack_info (void)
*** 817,833 ****
  	  gcc_assert (info->altivec_size == 0
  		      || info->altivec_save_offset % 16 == 0);
  
- 	  /* Adjust for AltiVec case.  */
- 	  info->ehrd_offset = info->altivec_save_offset - ehrd_size;
- 
  	  /* Adjust for ROP protection.  */
  	  info->rop_hash_save_offset
  	    = info->altivec_save_offset - info->rop_hash_size;
- 	  info->ehrd_offset -= info->rop_hash_size;
  	}
        else
! 	info->ehrd_offset = info->gp_save_offset - ehrd_size;
  
        info->ehcr_offset = info->ehrd_offset - ehcr_size;
        info->cr_save_offset = reg_size; /* first word when 64-bit.  */
        info->lr_save_offset = 2*reg_size;
--- 811,826 ----
  	  gcc_assert (info->altivec_size == 0
  		      || info->altivec_save_offset % 16 == 0);
  
  	  /* Adjust for ROP protection.  */
  	  info->rop_hash_save_offset
  	    = info->altivec_save_offset - info->rop_hash_size;
  	}
        else
! 	  /* Adjust for ROP protection.  */
! 	  info->rop_hash_save_offset
! 	    = info->gp_save_offset - info->rop_hash_size;
  
+       info->ehrd_offset = info->rop_hash_save_offset - ehrd_size;
        info->ehcr_offset = info->ehrd_offset - ehcr_size;
        info->cr_save_offset = reg_size; /* first word when 64-bit.  */
        info->lr_save_offset = 2*reg_size;
*************** rs6000_emit_prologue (void)
*** 3276,3284 ****
    /* NOTE: The hashst isn't needed if we're going to do a sibcall,
       but there's no way to know that here.  Harmless except for
       performance, of course.  */
!   if (TARGET_POWER10 && rs6000_rop_protect && info->rop_hash_size != 0)
      {
-       gcc_assert (DEFAULT_ABI == ABI_ELFv2);
        rtx stack_ptr = gen_rtx_REG (Pmode, STACK_POINTER_REGNUM);
        rtx addr = gen_rtx_PLUS (Pmode, stack_ptr,
  			       GEN_INT (info->rop_hash_save_offset));
--- 3269,3276 ----
    /* NOTE: The hashst isn't needed if we're going to do a sibcall,
       but there's no way to know that here.  Harmless except for
       performance, of course.  */
!   if (info->rop_hash_size)
      {
        rtx stack_ptr = gen_rtx_REG (Pmode, STACK_POINTER_REGNUM);
        rtx addr = gen_rtx_PLUS (Pmode, stack_ptr,
  			       GEN_INT (info->rop_hash_save_offset));
*************** rs6000_emit_epilogue (enum epilogue_type
*** 4311,4319 ****
  
    rs6000_stack_t *info = rs6000_stack_info ();
  
-   if (epilogue_type == EPILOGUE_TYPE_NORMAL && crtl->calls_eh_return)
-     epilogue_type = EPILOGUE_TYPE_EH_RETURN;
- 
    int strategy = info->savres_strategy;
    bool using_load_multiple = !!(strategy & REST_MULTIPLE);
    bool restoring_GPRs_inline = !!(strategy & REST_INLINE_GPRS);
--- 4303,4308 ----
*************** rs6000_emit_epilogue (enum epilogue_type
*** 4791,4797 ****
  
    /* In the ELFv2 ABI we need to restore all call-saved CR fields from
       *separate* slots if the routine calls __builtin_eh_return, so
!      that they can be independently restored by the unwinder.  */
    if (DEFAULT_ABI == ABI_ELFv2 && crtl->calls_eh_return)
      {
        int i, cr_off = info->ehcr_offset;
--- 4780,4788 ----
  
    /* In the ELFv2 ABI we need to restore all call-saved CR fields from
       *separate* slots if the routine calls __builtin_eh_return, so
!      that they can be independently restored by the unwinder.  Since
!      it is for CR fields restoring, it should be done for any epilogue
!      types (not EPILOGUE_TYPE_EH_RETURN specific).  */
    if (DEFAULT_ABI == ABI_ELFv2 && crtl->calls_eh_return)
      {
        int i, cr_off = info->ehcr_offset;
*************** rs6000_emit_epilogue (enum epilogue_type
*** 5056,5067 ****
  
    /* The ROP hash check must occur after the stack pointer is restored
       (since the hash involves r1), and is not performed for a sibcall.  */
!   if (TARGET_POWER10
!       && rs6000_rop_protect
!       && info->rop_hash_size != 0
        && epilogue_type != EPILOGUE_TYPE_SIBCALL)
      {
-       gcc_assert (DEFAULT_ABI == ABI_ELFv2);
        rtx stack_ptr = gen_rtx_REG (Pmode, STACK_POINTER_REGNUM);
        rtx addr = gen_rtx_PLUS (Pmode, stack_ptr,
  			       GEN_INT (info->rop_hash_save_offset));
--- 5047,5055 ----
  
    /* The ROP hash check must occur after the stack pointer is restored
       (since the hash involves r1), and is not performed for a sibcall.  */
!   if (info->rop_hash_size
        && epilogue_type != EPILOGUE_TYPE_SIBCALL)
      {
        rtx stack_ptr = gen_rtx_REG (Pmode, STACK_POINTER_REGNUM);
        rtx addr = gen_rtx_PLUS (Pmode, stack_ptr,
  			       GEN_INT (info->rop_hash_save_offset));
diff -Nrcpad gcc-13.3.0/gcc/config/rs6000/rs6000-p8swap.cc gcc-13.4.0/gcc/config/rs6000/rs6000-p8swap.cc
*** gcc-13.3.0/gcc/config/rs6000/rs6000-p8swap.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/rs6000/rs6000-p8swap.cc	Thu Jun  5 16:02:58 2025
*************** rs6000_analyze_swaps (function *fun)
*** 2469,2478 ****
  		    mode = V4SImode;
  		}
  
! 	      if (ALTIVEC_OR_VSX_VECTOR_MODE (mode) || mode == TImode)
  		{
  		  insn_entry[uid].is_relevant = 1;
! 		  if (mode == TImode || mode == V1TImode
  		      || FLOAT128_VECTOR_P (mode))
  		    insn_entry[uid].is_128_int = 1;
  		  if (DF_REF_INSN_INFO (mention))
--- 2469,2478 ----
  		    mode = V4SImode;
  		}
  
! 	      if (ALTIVEC_OR_VSX_VECTOR_MODE (mode) || TI_OR_PTI_MODE (mode))
  		{
  		  insn_entry[uid].is_relevant = 1;
! 		  if (TI_OR_PTI_MODE (mode) || mode == V1TImode
  		      || FLOAT128_VECTOR_P (mode))
  		    insn_entry[uid].is_128_int = 1;
  		  if (DF_REF_INSN_INFO (mention))
*************** rs6000_analyze_swaps (function *fun)
*** 2497,2506 ****
  		  && ALTIVEC_OR_VSX_VECTOR_MODE (GET_MODE (SET_DEST (insn))))
  		mode = GET_MODE (SET_DEST (insn));
  
! 	      if (ALTIVEC_OR_VSX_VECTOR_MODE (mode) || mode == TImode)
  		{
  		  insn_entry[uid].is_relevant = 1;
! 		  if (mode == TImode || mode == V1TImode
  		      || FLOAT128_VECTOR_P (mode))
  		    insn_entry[uid].is_128_int = 1;
  		  if (DF_REF_INSN_INFO (mention))
--- 2497,2506 ----
  		  && ALTIVEC_OR_VSX_VECTOR_MODE (GET_MODE (SET_DEST (insn))))
  		mode = GET_MODE (SET_DEST (insn));
  
! 	      if (ALTIVEC_OR_VSX_VECTOR_MODE (mode) || TI_OR_PTI_MODE (mode))
  		{
  		  insn_entry[uid].is_relevant = 1;
! 		  if (TI_OR_PTI_MODE (mode) || mode == V1TImode
  		      || FLOAT128_VECTOR_P (mode))
  		    insn_entry[uid].is_128_int = 1;
  		  if (DF_REF_INSN_INFO (mention))
diff -Nrcpad gcc-13.3.0/gcc/config/rs6000/rs6000.cc gcc-13.4.0/gcc/config/rs6000/rs6000.cc
*** gcc-13.3.0/gcc/config/rs6000/rs6000.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/rs6000/rs6000.cc	Thu Jun  5 16:02:58 2025
*************** rs6000_option_override_internal (bool gl
*** 4850,4855 ****
--- 4850,4867 ----
  	}
      }
  
+   /* We only support ROP protection on certain targets.  */
+   if (rs6000_rop_protect)
+     {
+       /* Disallow CPU targets we don't support.  */
+       if (!TARGET_POWER8)
+ 	error ("%<-mrop-protect%> requires %<-mcpu=power8%> or later");
+ 
+       /* Disallow ABI targets we don't support.  */
+       if (DEFAULT_ABI != ABI_ELFv2)
+ 	error ("%<-mrop-protect%> requires the ELFv2 ABI");
+     }
+ 
    /* Initialize all of the registers.  */
    rs6000_init_hard_regno_mode_ok (global_init_p);
  
*************** rs6000_machine_from_flags (void)
*** 5894,5900 ****
    HOST_WIDE_INT flags = rs6000_isa_flags;
  
    /* Disable the flags that should never influence the .machine selection.  */
!   flags &= ~(OPTION_MASK_PPC_GFXOPT | OPTION_MASK_PPC_GPOPT | OPTION_MASK_ISEL);
  
    if ((flags & (ISA_3_1_MASKS_SERVER & ~ISA_3_0_MASKS_SERVER)) != 0)
      return "power10";
--- 5906,5913 ----
    HOST_WIDE_INT flags = rs6000_isa_flags;
  
    /* Disable the flags that should never influence the .machine selection.  */
!   flags &= ~(OPTION_MASK_PPC_GFXOPT | OPTION_MASK_PPC_GPOPT | OPTION_MASK_ISEL
! 	     | OPTION_MASK_ALTIVEC);
  
    if ((flags & (ISA_3_1_MASKS_SERVER & ~ISA_3_0_MASKS_SERVER)) != 0)
      return "power10";
*************** void
*** 5919,5924 ****
--- 5932,5939 ----
  emit_asm_machine (void)
  {
    fprintf (asm_out_file, "\t.machine %s\n", rs6000_machine);
+   if (TARGET_ALTIVEC)
+     fprintf (asm_out_file, "\t.machine altivec\n");
  }
  #endif
  
*************** altivec_expand_vec_perm_const (rtx targe
*** 23166,23193 ****
       CODE_FOR_altivec_vpkuwum_direct,
       {2, 3, 6, 7, 10, 11, 14, 15, 18, 19, 22, 23, 26, 27, 30, 31}},
      {OPTION_MASK_ALTIVEC,
!      BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrghb_direct
! 		      : CODE_FOR_altivec_vmrglb_direct,
       {0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23}},
      {OPTION_MASK_ALTIVEC,
!      BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrghh_direct
! 		      : CODE_FOR_altivec_vmrglh_direct,
       {0, 1, 16, 17, 2, 3, 18, 19, 4, 5, 20, 21, 6, 7, 22, 23}},
      {OPTION_MASK_ALTIVEC,
!      BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrghw_direct_v4si
! 		      : CODE_FOR_altivec_vmrglw_direct_v4si,
       {0, 1, 2, 3, 16, 17, 18, 19, 4, 5, 6, 7, 20, 21, 22, 23}},
      {OPTION_MASK_ALTIVEC,
!      BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrglb_direct
! 		      : CODE_FOR_altivec_vmrghb_direct,
       {8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31}},
      {OPTION_MASK_ALTIVEC,
!      BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrglh_direct
! 		      : CODE_FOR_altivec_vmrghh_direct,
       {8, 9, 24, 25, 10, 11, 26, 27, 12, 13, 28, 29, 14, 15, 30, 31}},
      {OPTION_MASK_ALTIVEC,
!      BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrglw_direct_v4si
! 		      : CODE_FOR_altivec_vmrghw_direct_v4si,
       {8, 9, 10, 11, 24, 25, 26, 27, 12, 13, 14, 15, 28, 29, 30, 31}},
      {OPTION_MASK_P8_VECTOR,
       BYTES_BIG_ENDIAN ? CODE_FOR_p8_vmrgew_v4sf_direct
--- 23181,23208 ----
       CODE_FOR_altivec_vpkuwum_direct,
       {2, 3, 6, 7, 10, 11, 14, 15, 18, 19, 22, 23, 26, 27, 30, 31}},
      {OPTION_MASK_ALTIVEC,
!      BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrghb_direct_be
! 		      : CODE_FOR_altivec_vmrglb_direct_le,
       {0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23}},
      {OPTION_MASK_ALTIVEC,
!      BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrghh_direct_be
! 		      : CODE_FOR_altivec_vmrglh_direct_le,
       {0, 1, 16, 17, 2, 3, 18, 19, 4, 5, 20, 21, 6, 7, 22, 23}},
      {OPTION_MASK_ALTIVEC,
!      BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrghw_direct_v4si_be
! 		      : CODE_FOR_altivec_vmrglw_direct_v4si_le,
       {0, 1, 2, 3, 16, 17, 18, 19, 4, 5, 6, 7, 20, 21, 22, 23}},
      {OPTION_MASK_ALTIVEC,
!      BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrglb_direct_be
! 		      : CODE_FOR_altivec_vmrghb_direct_le,
       {8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31}},
      {OPTION_MASK_ALTIVEC,
!      BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrglh_direct_be
! 		      : CODE_FOR_altivec_vmrghh_direct_le,
       {8, 9, 24, 25, 10, 11, 26, 27, 12, 13, 28, 29, 14, 15, 30, 31}},
      {OPTION_MASK_ALTIVEC,
!      BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrglw_direct_v4si_be
! 		      : CODE_FOR_altivec_vmrghw_direct_v4si_le,
       {8, 9, 10, 11, 24, 25, 26, 27, 12, 13, 14, 15, 28, 29, 30, 31}},
      {OPTION_MASK_P8_VECTOR,
       BYTES_BIG_ENDIAN ? CODE_FOR_p8_vmrgew_v4sf_direct
*************** rs6000_can_inline_p (tree caller, tree c
*** 25470,25479 ****
  	}
      }
  
!   /* Ignore -mpower8-fusion and -mpower10-fusion options for inlining
!      purposes.  */
!   callee_isa &= ~(OPTION_MASK_P8_FUSION | OPTION_MASK_P10_FUSION);
!   explicit_isa &= ~(OPTION_MASK_P8_FUSION | OPTION_MASK_P10_FUSION);
  
    /* The callee's options must be a subset of the caller's options, i.e.
       a vsx function may inline an altivec function, but a no-vsx function
--- 25485,25497 ----
  	}
      }
  
!   /* Ignore -mpower8-fusion, -mpower10-fusion and -msave-toc-indirect options
!      for inlining purposes.  */
!   HOST_WIDE_INT ignored_isas = (OPTION_MASK_P8_FUSION
! 				| OPTION_MASK_P10_FUSION
! 				| OPTION_MASK_SAVE_TOC_INDIRECT);
!   callee_isa &= ~ignored_isas;
!   explicit_isa &= ~ignored_isas;
  
    /* The callee's options must be a subset of the caller's options, i.e.
       a vsx function may inline an altivec function, but a no-vsx function
diff -Nrcpad gcc-13.3.0/gcc/config/rs6000/rs6000.h gcc-13.4.0/gcc/config/rs6000/rs6000.h
*** gcc-13.3.0/gcc/config/rs6000/rs6000.h	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/rs6000/rs6000.h	Thu Jun  5 16:02:58 2025
*************** enum data_align { align_abi, align_opt,
*** 1008,1013 ****
--- 1008,1015 ----
    (ALTIVEC_VECTOR_MODE (MODE) || VSX_VECTOR_MODE (MODE)			\
     || (MODE) == V2DImode || (MODE) == V1TImode)
  
+ #define TI_OR_PTI_MODE(mode) ((mode) == TImode || (mode) == PTImode)
+ 
  /* Post-reload, we can't use any new AltiVec registers, as we already
     emitted the vrsave mask.  */
  
diff -Nrcpad gcc-13.3.0/gcc/config/rs6000/rs6000.md gcc-13.4.0/gcc/config/rs6000/rs6000.md
*** gcc-13.3.0/gcc/config/rs6000/rs6000.md	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/rs6000/rs6000.md	Thu Jun  5 16:02:58 2025
***************
*** 14147,14152 ****
--- 14147,14154 ----
    ""
  {
    emit_insn (gen_eh_set_lr (Pmode, operands[0]));
+   emit_jump_insn (gen_eh_return_internal ());
+   emit_barrier ();
    DONE;
  })
  
***************
*** 14163,14168 ****
--- 14165,14183 ----
    DONE;
  })
  
+ (define_insn_and_split "eh_return_internal"
+   [(eh_return)]
+   ""
+   "#"
+   "epilogue_completed"
+   [(const_int 0)]
+ {
+   if (!TARGET_SCHED_PROLOG)
+     emit_insn (gen_blockage ());
+   rs6000_emit_epilogue (EPILOGUE_TYPE_EH_RETURN);
+   DONE;
+ })
+ 
  (define_insn "prefetch"
    [(prefetch (match_operand 0 "indexed_or_indirect_address" "a")
  	     (match_operand:SI 1 "const_int_operand" "n")
***************
*** 15650,15658 ****
  
  (define_insn "hashst"
    [(set (match_operand:DI 0 "simple_offsettable_mem_operand" "=m")
!         (unspec_volatile:DI [(match_operand:DI 1 "int_reg_operand" "r")]
  			    UNSPEC_HASHST))]
!   "TARGET_POWER10 && rs6000_rop_protect"
  {
    static char templ[32];
    const char *p = rs6000_privileged ? "p" : "";
--- 15665,15673 ----
  
  (define_insn "hashst"
    [(set (match_operand:DI 0 "simple_offsettable_mem_operand" "=m")
! 	(unspec_volatile:DI [(match_operand:DI 1 "int_reg_operand" "r")]
  			    UNSPEC_HASHST))]
!   "rs6000_rop_protect"
  {
    static char templ[32];
    const char *p = rs6000_privileged ? "p" : "";
***************
*** 15665,15671 ****
    [(unspec_volatile [(match_operand:DI 0 "int_reg_operand" "r")
  		     (match_operand:DI 1 "simple_offsettable_mem_operand" "m")]
  		    UNSPEC_HASHCHK)]
!   "TARGET_POWER10 && rs6000_rop_protect"
  {
    static char templ[32];
    const char *p = rs6000_privileged ? "p" : "";
--- 15680,15686 ----
    [(unspec_volatile [(match_operand:DI 0 "int_reg_operand" "r")
  		     (match_operand:DI 1 "simple_offsettable_mem_operand" "m")]
  		    UNSPEC_HASHCHK)]
!   "rs6000_rop_protect"
  {
    static char templ[32];
    const char *p = rs6000_privileged ? "p" : "";
diff -Nrcpad gcc-13.3.0/gcc/config/rs6000/sysv4.h gcc-13.4.0/gcc/config/rs6000/sysv4.h
*** gcc-13.3.0/gcc/config/rs6000/sysv4.h	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/rs6000/sysv4.h	Thu Jun  5 16:02:58 2025
*************** GNU_USER_TARGET_CC1_SPEC
*** 748,753 ****
--- 748,754 ----
  
  #define LINK_OS_FREEBSD_SPEC "\
    %{p:%nconsider using '-pg' instead of '-p' with gprof(1)} \
+   " FBSD_LINK_PG_NOTE " \
    %{v:-V} \
    %{assert*} %{R*} %{rpath*} %{defsym*} \
    %{shared:-Bshareable %{h*} %{soname*}} \
diff -Nrcpad gcc-13.3.0/gcc/config/rs6000/vsx.md gcc-13.4.0/gcc/config/rs6000/vsx.md
*** gcc-13.3.0/gcc/config/rs6000/vsx.md	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/rs6000/vsx.md	Thu Jun  5 16:02:58 2025
***************
*** 4683,4694 ****
  		     (const_int 1) (const_int 5)])))]
    "VECTOR_MEM_VSX_P (<MODE>mode)"
  {
!   rtx (*fun) (rtx, rtx, rtx);
!   fun = BYTES_BIG_ENDIAN ? gen_altivec_vmrghw_direct_<mode>
! 			 : gen_altivec_vmrglw_direct_<mode>;
!   if (!BYTES_BIG_ENDIAN)
!     std::swap (operands[1], operands[2]);
!   emit_insn (fun (operands[0], operands[1], operands[2]));
    DONE;
  }
    [(set_attr "type" "vecperm")])
--- 4683,4696 ----
  		     (const_int 1) (const_int 5)])))]
    "VECTOR_MEM_VSX_P (<MODE>mode)"
  {
!   if (BYTES_BIG_ENDIAN)
!     emit_insn (gen_altivec_vmrghw_direct_v4si_be (operands[0],
! 						  operands[1],
! 						  operands[2]));
!   else
!     emit_insn (gen_altivec_vmrglw_direct_v4si_le (operands[0],
! 						  operands[2],
! 						  operands[1]));
    DONE;
  }
    [(set_attr "type" "vecperm")])
***************
*** 4703,4714 ****
  		     (const_int 3) (const_int 7)])))]
    "VECTOR_MEM_VSX_P (<MODE>mode)"
  {
!   rtx (*fun) (rtx, rtx, rtx);
!   fun = BYTES_BIG_ENDIAN ? gen_altivec_vmrglw_direct_<mode>
! 			 : gen_altivec_vmrghw_direct_<mode>;
!   if (!BYTES_BIG_ENDIAN)
!     std::swap (operands[1], operands[2]);
!   emit_insn (fun (operands[0], operands[1], operands[2]));
    DONE;
  }
    [(set_attr "type" "vecperm")])
--- 4705,4718 ----
  		     (const_int 3) (const_int 7)])))]
    "VECTOR_MEM_VSX_P (<MODE>mode)"
  {
!   if (BYTES_BIG_ENDIAN)
!     emit_insn (gen_altivec_vmrglw_direct_v4si_be (operands[0],
! 						  operands[1],
! 						  operands[2]));
!   else
!     emit_insn (gen_altivec_vmrghw_direct_v4si_le (operands[0],
! 						  operands[2],
! 						  operands[1]));
    DONE;
  }
    [(set_attr "type" "vecperm")])
diff -Nrcpad gcc-13.3.0/gcc/config/s390/3931.md gcc-13.4.0/gcc/config/s390/3931.md
*** gcc-13.3.0/gcc/config/s390/3931.md	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/s390/3931.md	Thu Jun  5 16:02:58 2025
*************** vlvgg,
*** 404,410 ****
  vlvgh,
  vlvgp,
  vst,
- vstbr,
  vstbrf,
  vstbrg,
  vstbrh,
--- 404,409 ----
*************** tm,
*** 627,633 ****
  tmy,
  vl,
  vlbb,
- vlbr,
  vlbrf,
  vlbrg,
  vlbrh,
--- 626,631 ----
*************** vlreph,
*** 661,667 ****
  vlrl,
  vlrlr,
  vst,
- vstbr,
  vstbrf,
  vstbrg,
  vstbrh,
--- 659,664 ----
*************** vrepb,
*** 1077,1083 ****
  vrepf,
  vrepg,
  vreph,
- vrepi,
  vrepib,
  vrepif,
  vrepig,
--- 1074,1079 ----
*************** vrepb,
*** 1930,1936 ****
  vrepf,
  vrepg,
  vreph,
- vrepi,
  vrepib,
  vrepif,
  vrepig,
--- 1926,1931 ----
*************** vistrfs,
*** 2156,2162 ****
  vistrhs,
  vl,
  vlbb,
- vlbr,
  vlbrf,
  vlbrg,
  vlbrh,
--- 2151,2156 ----
*************** tbegin,
*** 2248,2254 ****
  tbeginc,
  tend,
  vst,
- vstbr,
  vstbrf,
  vstbrg,
  vstbrh,
--- 2242,2247 ----
diff -Nrcpad gcc-13.3.0/gcc/config/s390/s390-c.cc gcc-13.4.0/gcc/config/s390/s390-c.cc
*** gcc-13.3.0/gcc/config/s390/s390-c.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/s390/s390-c.cc	Thu Jun  5 16:02:58 2025
*************** s390_expand_overloaded_builtin (location
*** 497,507 ****
  	/* Build a vector type with the alignment of the source
  	   location in order to enable correct alignment hints to be
  	   generated for vl.  */
! 	tree mem_type = build_aligned_type (return_type,
! 					    TYPE_ALIGN (TREE_TYPE (TREE_TYPE ((*arglist)[1]))));
  	return build2 (MEM_REF, mem_type,
  		       fold_build_pointer_plus ((*arglist)[1], (*arglist)[0]),
! 		       build_int_cst (TREE_TYPE ((*arglist)[1]), 0));
        }
      case S390_OVERLOADED_BUILTIN_s390_vec_xst:
      case S390_OVERLOADED_BUILTIN_s390_vec_xstd2:
--- 497,507 ----
  	/* Build a vector type with the alignment of the source
  	   location in order to enable correct alignment hints to be
  	   generated for vl.  */
! 	unsigned align = TYPE_ALIGN (TREE_TYPE (TREE_TYPE ((*arglist)[1])));
! 	tree mem_type = build_aligned_type (return_type, align);
  	return build2 (MEM_REF, mem_type,
  		       fold_build_pointer_plus ((*arglist)[1], (*arglist)[0]),
! 		       build_int_cst (ptr_type_node, 0));
        }
      case S390_OVERLOADED_BUILTIN_s390_vec_xst:
      case S390_OVERLOADED_BUILTIN_s390_vec_xstd2:
*************** s390_expand_overloaded_builtin (location
*** 510,520 ****
  	/* Build a vector type with the alignment of the target
  	   location in order to enable correct alignment hints to be
  	   generated for vst.  */
! 	tree mem_type = build_aligned_type (TREE_TYPE((*arglist)[0]),
! 					    TYPE_ALIGN (TREE_TYPE (TREE_TYPE ((*arglist)[2]))));
  	return build2 (MODIFY_EXPR, mem_type,
! 		       build1 (INDIRECT_REF, mem_type,
! 			       fold_build_pointer_plus ((*arglist)[2], (*arglist)[1])),
  		       (*arglist)[0]);
        }
      case S390_OVERLOADED_BUILTIN_s390_vec_load_pair:
--- 510,522 ----
  	/* Build a vector type with the alignment of the target
  	   location in order to enable correct alignment hints to be
  	   generated for vst.  */
! 	unsigned align = TYPE_ALIGN (TREE_TYPE (TREE_TYPE ((*arglist)[2])));
! 	tree mem_type = build_aligned_type (TREE_TYPE ((*arglist)[0]), align);
  	return build2 (MODIFY_EXPR, mem_type,
! 		       build2 (MEM_REF, mem_type,
! 			       fold_build_pointer_plus ((*arglist)[2],
! 							(*arglist)[1]),
! 			       build_int_cst (ptr_type_node, 0)),
  		       (*arglist)[0]);
        }
      case S390_OVERLOADED_BUILTIN_s390_vec_load_pair:
diff -Nrcpad gcc-13.3.0/gcc/config/s390/s390-protos.h gcc-13.4.0/gcc/config/s390/s390-protos.h
*** gcc-13.3.0/gcc/config/s390/s390-protos.h	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/s390/s390-protos.h	Thu Jun  5 16:02:58 2025
*************** extern void s390_set_has_landing_pad_p (
*** 50,56 ****
  extern bool s390_hard_regno_rename_ok (unsigned int, unsigned int);
  extern int s390_class_max_nregs (enum reg_class, machine_mode);
  extern bool s390_return_addr_from_memory(void);
- extern rtx s390_gen_lowpart_subreg (machine_mode, rtx);
  extern bool s390_fma_allowed_p (machine_mode);
  #if S390_USE_TARGET_ATTRIBUTE
  extern tree s390_valid_target_attribute_tree (tree args,
--- 50,55 ----
diff -Nrcpad gcc-13.3.0/gcc/config/s390/s390.cc gcc-13.4.0/gcc/config/s390/s390.cc
*** gcc-13.3.0/gcc/config/s390/s390.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/s390/s390.cc	Thu Jun  5 16:02:58 2025
*************** s390_return_addr_from_memory ()
*** 505,535 ****
    return cfun_gpr_save_slot(RETURN_REGNUM) == SAVE_SLOT_STACK;
  }
  
- /* Generate a SUBREG for the MODE lowpart of EXPR.
- 
-    In contrast to gen_lowpart it will always return a SUBREG
-    expression.  This is useful to generate STRICT_LOW_PART
-    expressions.  */
- rtx
- s390_gen_lowpart_subreg (machine_mode mode, rtx expr)
- {
-   rtx lowpart = gen_lowpart (mode, expr);
- 
-   /* There might be no SUBREG in case it could be applied to the hard
-      REG rtx or it could be folded with a paradoxical subreg.  Bring
-      it back.  */
-   if (!SUBREG_P (lowpart))
-     {
-       machine_mode reg_mode = TARGET_ZARCH ? DImode : SImode;
-       gcc_assert (REG_P (lowpart));
-       lowpart = gen_lowpart_SUBREG (mode,
- 				    gen_rtx_REG (reg_mode,
- 						 REGNO (lowpart)));
-     }
- 
-   return lowpart;
- }
- 
  /* Return nonzero if it's OK to use fused multiply-add for MODE.  */
  bool
  s390_fma_allowed_p (machine_mode mode)
--- 505,510 ----
*************** s390_valid_shift_count (rtx op, HOST_WID
*** 3289,3314 ****
  
    /* Check for an and with proper constant.  */
    if (GET_CODE (op) == AND)
!   {
!     rtx op1 = XEXP (op, 0);
!     rtx imm = XEXP (op, 1);
  
!     if (GET_CODE (op1) == SUBREG && subreg_lowpart_p (op1))
!       op1 = XEXP (op1, 0);
  
!     if (!(register_operand (op1, GET_MODE (op1)) || GET_CODE (op1) == PLUS))
!       return false;
  
!     if (!immediate_operand (imm, GET_MODE (imm)))
!       return false;
  
!     HOST_WIDE_INT val = INTVAL (imm);
!     if (implicit_mask > 0
! 	&& (val & implicit_mask) != implicit_mask)
!       return false;
  
!     op = op1;
!   }
  
    /* Check the rest.  */
    return s390_decompose_addrstyle_without_index (op, NULL, NULL);
--- 3264,3294 ----
  
    /* Check for an and with proper constant.  */
    if (GET_CODE (op) == AND)
!     {
!       rtx op1 = XEXP (op, 0);
!       rtx imm = XEXP (op, 1);
  
!       if (GET_CODE (op1) == SUBREG && subreg_lowpart_p (op1))
! 	op1 = XEXP (op1, 0);
  
!       if (!(register_operand (op1, GET_MODE (op1)) || GET_CODE (op1) == PLUS))
! 	return false;
  
!       /* Accept only CONST_INT as immediates, i.e., reject shift count operands
! 	 which do not trivially fit the scheme of address operands.  Especially
! 	 since strip_address_mutations() expects expressions of the form
! 	 (and ... (const_int ...)) and fails for
! 	 (and ... (const_wide_int ...)).  */
!       if (!const_int_operand (imm, GET_MODE (imm)))
! 	return false;
  
!       HOST_WIDE_INT val = INTVAL (imm);
!       if (implicit_mask > 0
! 	  && (val & implicit_mask) != implicit_mask)
! 	return false;
  
!       op = op1;
!     }
  
    /* Check the rest.  */
    return s390_decompose_addrstyle_without_index (op, NULL, NULL);
*************** s390_mem_constraint (const char *str, rt
*** 3478,3483 ****
--- 3458,3475 ----
        if ((reload_completed || reload_in_progress)
  	  ? !offsettable_memref_p (op) : !offsettable_nonstrict_memref_p (op))
  	return 0;
+       /* offsettable_memref_p ensures only that any positive offset added to
+ 	 the address forms a valid general address.  For AQ and AR constraints
+ 	 we also have to verify that the resulting displacement after adding
+ 	 any positive offset less than the size of the object being referenced
+ 	 is still valid.  */
+       if (str[1] == 'Q' || str[1] == 'R')
+ 	{
+ 	  int o = GET_MODE_SIZE (GET_MODE (op)) - 1;
+ 	  rtx tmp = adjust_address (op, QImode, o);
+ 	  if (!s390_check_qrst_address (str[1], XEXP (tmp, 0), true))
+ 	    return 0;
+ 	}
        return s390_check_qrst_address (str[1], XEXP (op, 0), true);
      case 'B':
        /* Check for non-literal-pool variants of memory constraints.  */
*************** s390_expand_insv (rtx dest, rtx op1, rtx
*** 6639,6653 ****
        /* Emit a strict_low_part pattern if possible.  */
        if (smode_bsize == bitsize && bitpos == mode_bsize - smode_bsize)
  	{
! 	  rtx low_dest = s390_gen_lowpart_subreg (smode, dest);
! 	  rtx low_src = gen_lowpart (smode, src);
! 
! 	  switch (smode)
  	    {
! 	    case E_QImode: emit_insn (gen_movstrictqi (low_dest, low_src)); return true;
! 	    case E_HImode: emit_insn (gen_movstricthi (low_dest, low_src)); return true;
! 	    case E_SImode: emit_insn (gen_movstrictsi (low_dest, low_src)); return true;
! 	    default: break;
  	    }
  	}
  
--- 6631,6651 ----
        /* Emit a strict_low_part pattern if possible.  */
        if (smode_bsize == bitsize && bitpos == mode_bsize - smode_bsize)
  	{
! 	  rtx low_dest = gen_lowpart (smode, dest);
! 	  if (SUBREG_P (low_dest) && !paradoxical_subreg_p (low_dest))
  	    {
! 	      poly_int64 offset = GET_MODE_SIZE (mode) - GET_MODE_SIZE (smode);
! 	      rtx low_src = adjust_address (src, smode, offset);
! 	      switch (smode)
! 		{
! 		case E_QImode: emit_insn (gen_movstrictqi (low_dest, low_src));
! 			       return true;
! 		case E_HImode: emit_insn (gen_movstricthi (low_dest, low_src));
! 			       return true;
! 		case E_SImode: emit_insn (gen_movstrictsi (low_dest, low_src));
! 			       return true;
! 		default: break;
! 		}
  	    }
  	}
  
*************** print_operand_address (FILE *file, rtx a
*** 8129,8135 ****
  	 CONST_VECTOR: Generate a bitmask for vgbm instruction.
      'x': print integer X as if it's an unsigned halfword.
      'v': print register number as vector register (v1 instead of f1).
-     'V': print the second word of a TFmode operand as vector register.
  */
  
  void
--- 8127,8132 ----
*************** print_operand (FILE *file, rtx x, int co
*** 8322,8334 ****
      case REG:
        /* Print FP regs as fx instead of vx when they are accessed
  	 through non-vector mode.  */
!       if ((code == 'v' || code == 'V')
  	  || VECTOR_NOFP_REG_P (x)
  	  || (FP_REG_P (x) && VECTOR_MODE_P (GET_MODE (x)))
  	  || (VECTOR_REG_P (x)
  	      && (GET_MODE_SIZE (GET_MODE (x)) /
  		  s390_class_max_nregs (FP_REGS, GET_MODE (x))) > 8))
! 	fprintf (file, "%%v%s", reg_names[REGNO (x) + (code == 'V')] + 2);
        else
  	fprintf (file, "%s", reg_names[REGNO (x)]);
        break;
--- 8319,8331 ----
      case REG:
        /* Print FP regs as fx instead of vx when they are accessed
  	 through non-vector mode.  */
!       if (code == 'v'
  	  || VECTOR_NOFP_REG_P (x)
  	  || (FP_REG_P (x) && VECTOR_MODE_P (GET_MODE (x)))
  	  || (VECTOR_REG_P (x)
  	      && (GET_MODE_SIZE (GET_MODE (x)) /
  		  s390_class_max_nregs (FP_REGS, GET_MODE (x))) > 8))
! 	fprintf (file, "%%v%s", reg_names[REGNO (x)] + 2);
        else
  	fprintf (file, "%s", reg_names[REGNO (x)]);
        break;
*************** s390_hard_regno_mode_ok (unsigned int re
*** 10598,10605 ****
  	}
        break;
      case ADDR_REGS:
!       if (FRAME_REGNO_P (regno) && mode == Pmode)
! 	return true;
  
        /* fallthrough */
      case GENERAL_REGS:
--- 10595,10602 ----
  	}
        break;
      case ADDR_REGS:
!       if (FRAME_REGNO_P (regno))
! 	return mode == Pmode;
  
        /* fallthrough */
      case GENERAL_REGS:
diff -Nrcpad gcc-13.3.0/gcc/config/s390/s390.md gcc-13.4.0/gcc/config/s390/s390.md
*** gcc-13.3.0/gcc/config/s390/s390.md	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/s390/s390.md	Thu Jun  5 16:02:58 2025
***************
*** 243,248 ****
--- 243,250 ----
  
     UNSPEC_VEC_ELTSWAP
  
+    UNSPEC_TF_TO_FPRX2
+ 
     UNSPEC_NNPA_VCLFNHS_V8HI
     UNSPEC_NNPA_VCLFNLS_V8HI
     UNSPEC_NNPA_VCRNFS_V8HI
***************
*** 744,750 ****
  ;; In FP templates, a <dee> in "m<dee><bt>r" will expand to "mx<bt>r" in
  ;; TF/TDmode, "md<bt>r" in DF/DDmode, "mee<bt>r" in SFmode and "me<bt>r in
  ;; SDmode.
! (define_mode_attr xdee [(TF "x") (DF "d") (SF "ee") (TD "x") (DD "d") (SD "e")])
  
  ;; The decimal floating point variants of add, sub, div and mul support 3
  ;; fp register operands.  The following attributes allow to merge the bfp and
--- 746,752 ----
  ;; In FP templates, a <dee> in "m<dee><bt>r" will expand to "mx<bt>r" in
  ;; TF/TDmode, "md<bt>r" in DF/DDmode, "mee<bt>r" in SFmode and "me<bt>r in
  ;; SDmode.
! (define_mode_attr xdee [(TF "x") (FPRX2 "x") (DF "d") (SF "ee") (TD "x") (DD "d") (SD "e")])
  
  ;; The decimal floating point variants of add, sub, div and mul support 3
  ;; fp register operands.  The following attributes allow to merge the bfp and
***************
*** 1970,1981 ****
    "TARGET_ZARCH"
    "#"
    "&& reload_completed"
!   [(set (match_dup 2) (match_dup 4))
     (set (match_dup 0) (ashift:DI (match_dup 0) (const_int 32)))
!    (set (strict_low_part (match_dup 3)) (match_dup 5))]
    "operands[2] = gen_lowpart (SImode, operands[0]);
!    operands[3] = s390_gen_lowpart_subreg (SImode, operands[0]);
!    s390_split_access_reg (operands[1], &operands[5], &operands[4]);")
  
  ; Splitters for storing TLS pointer to %a0:DI.
  
--- 1972,1982 ----
    "TARGET_ZARCH"
    "#"
    "&& reload_completed"
!   [(set (match_dup 2) (match_dup 3))
     (set (match_dup 0) (ashift:DI (match_dup 0) (const_int 32)))
!    (set (strict_low_part (match_dup 2)) (match_dup 4))]
    "operands[2] = gen_lowpart (SImode, operands[0]);
!    s390_split_access_reg (operands[1], &operands[4], &operands[3]);")
  
  ; Splitters for storing TLS pointer to %a0:DI.
  
***************
*** 3380,3386 ****
          (match_operand:BLK 1 "memory_operand" ""))
     (use (match_operand 2 "const_int_operand" ""))
     (use (match_operand 3 "immediate_operand" ""))
!    (clobber (scratch))]
    "reload_completed"
    [(parallel
      [(set (match_dup 0) (match_dup 1))
--- 3381,3387 ----
          (match_operand:BLK 1 "memory_operand" ""))
     (use (match_operand 2 "const_int_operand" ""))
     (use (match_operand 3 "immediate_operand" ""))
!    (clobber (match_scratch 4))]
    "reload_completed"
    [(parallel
      [(set (match_dup 0) (match_dup 1))
***************
*** 3392,3398 ****
          (match_operand:BLK 1 "memory_operand" ""))
     (use (match_operand 2 "register_operand" ""))
     (use (match_operand 3 "memory_operand" ""))
!    (clobber (scratch))]
    "reload_completed"
    [(parallel
      [(unspec [(match_dup 2) (match_dup 3)
--- 3393,3399 ----
          (match_operand:BLK 1 "memory_operand" ""))
     (use (match_operand 2 "register_operand" ""))
     (use (match_operand 3 "memory_operand" ""))
!    (clobber (match_scratch 4))]
    "reload_completed"
    [(parallel
      [(unspec [(match_dup 2) (match_dup 3)
***************
*** 3406,3419 ****
          (match_operand:BLK 1 "memory_operand" ""))
     (use (match_operand 2 "register_operand" ""))
     (use (const:BLK (unspec:BLK [(const_int 0)] UNSPEC_INSN)))
!    (clobber (scratch))]
    "TARGET_Z10 && reload_completed"
    [(parallel
      [(unspec [(match_dup 2) (const_int 0)
!               (label_ref (match_dup 3))] UNSPEC_EXECUTE)
       (set (match_dup 0) (match_dup 1))
       (use (const_int 1))])]
!   "operands[3] = gen_label_rtx ();")
  
  (define_split
    [(set (match_operand:BLK 0 "memory_operand" "")
--- 3407,3420 ----
          (match_operand:BLK 1 "memory_operand" ""))
     (use (match_operand 2 "register_operand" ""))
     (use (const:BLK (unspec:BLK [(const_int 0)] UNSPEC_INSN)))
!    (clobber (match_scratch 3))]
    "TARGET_Z10 && reload_completed"
    [(parallel
      [(unspec [(match_dup 2) (const_int 0)
! 	      (label_ref (match_dup 4))] UNSPEC_EXECUTE)
       (set (match_dup 0) (match_dup 1))
       (use (const_int 1))])]
!   "operands[4] = gen_label_rtx ();")
  
  (define_split
    [(set (match_operand:BLK 0 "memory_operand" "")
***************
*** 3594,3600 ****
          (const_int 0))
     (use (match_operand 1 "const_int_operand" ""))
     (use (match_operand 2 "immediate_operand" ""))
!    (clobber (scratch))
     (clobber (reg:CC CC_REGNUM))]
    "reload_completed"
    [(parallel
--- 3595,3601 ----
          (const_int 0))
     (use (match_operand 1 "const_int_operand" ""))
     (use (match_operand 2 "immediate_operand" ""))
!    (clobber (match_scratch 3))
     (clobber (reg:CC CC_REGNUM))]
    "reload_completed"
    [(parallel
***************
*** 3608,3614 ****
          (const_int 0))
     (use (match_operand 1 "register_operand" ""))
     (use (match_operand 2 "memory_operand" ""))
!    (clobber (scratch))
     (clobber (reg:CC CC_REGNUM))]
    "reload_completed"
    [(parallel
--- 3609,3615 ----
          (const_int 0))
     (use (match_operand 1 "register_operand" ""))
     (use (match_operand 2 "memory_operand" ""))
!    (clobber (match_scratch 3))
     (clobber (reg:CC CC_REGNUM))]
    "reload_completed"
    [(parallel
***************
*** 3624,3630 ****
          (const_int 0))
     (use (match_operand 1 "register_operand" ""))
     (use (const:BLK (unspec:BLK [(const_int 0)] UNSPEC_INSN)))
!    (clobber (scratch))
     (clobber (reg:CC CC_REGNUM))]
    "TARGET_Z10 && reload_completed"
    [(parallel
--- 3625,3631 ----
          (const_int 0))
     (use (match_operand 1 "register_operand" ""))
     (use (const:BLK (unspec:BLK [(const_int 0)] UNSPEC_INSN)))
!    (clobber (match_scratch 2))
     (clobber (reg:CC CC_REGNUM))]
    "TARGET_Z10 && reload_completed"
    [(parallel
***************
*** 3789,3795 ****
                       (match_operand:BLK 1 "memory_operand" "")))
     (use (match_operand 2 "const_int_operand" ""))
     (use (match_operand 3 "immediate_operand" ""))
!    (clobber (scratch))]
    "reload_completed"
    [(parallel
      [(set (reg:CCU CC_REGNUM) (compare:CCU (match_dup 0) (match_dup 1)))
--- 3790,3796 ----
                       (match_operand:BLK 1 "memory_operand" "")))
     (use (match_operand 2 "const_int_operand" ""))
     (use (match_operand 3 "immediate_operand" ""))
!    (clobber (match_scratch 4))]
    "reload_completed"
    [(parallel
      [(set (reg:CCU CC_REGNUM) (compare:CCU (match_dup 0) (match_dup 1)))
***************
*** 3802,3808 ****
                       (match_operand:BLK 1 "memory_operand" "")))
     (use (match_operand 2 "register_operand" ""))
     (use (match_operand 3 "memory_operand" ""))
!    (clobber (scratch))]
    "reload_completed"
    [(parallel
      [(unspec [(match_dup 2) (match_dup 3)
--- 3803,3809 ----
                       (match_operand:BLK 1 "memory_operand" "")))
     (use (match_operand 2 "register_operand" ""))
     (use (match_operand 3 "memory_operand" ""))
!    (clobber (match_scratch 4))]
    "reload_completed"
    [(parallel
      [(unspec [(match_dup 2) (match_dup 3)
***************
*** 3817,3823 ****
                       (match_operand:BLK 1 "memory_operand" "")))
     (use (match_operand 2 "register_operand" ""))
     (use (const:BLK (unspec:BLK [(const_int 0)] UNSPEC_INSN)))
!    (clobber (scratch))]
    "TARGET_Z10 && reload_completed"
    [(parallel
      [(unspec [(match_dup 2) (const_int 0)
--- 3818,3824 ----
                       (match_operand:BLK 1 "memory_operand" "")))
     (use (match_operand 2 "register_operand" ""))
     (use (const:BLK (unspec:BLK [(const_int 0)] UNSPEC_INSN)))
!    (clobber (match_scratch 3))]
    "TARGET_Z10 && reload_completed"
    [(parallel
      [(unspec [(match_dup 2) (const_int 0)
***************
*** 5012,5018 ****
     (parallel
      [(set (strict_low_part (match_dup 2)) (match_dup 1))
       (clobber (reg:CC CC_REGNUM))])]
!   "operands[2] = s390_gen_lowpart_subreg (HImode, operands[0]);")
  
  (define_insn_and_split "*zero_extendqisi2_31"
    [(set (match_operand:SI 0 "register_operand" "=&d")
--- 5013,5019 ----
     (parallel
      [(set (strict_low_part (match_dup 2)) (match_dup 1))
       (clobber (reg:CC CC_REGNUM))])]
!   "operands[2] = gen_lowpart (HImode, operands[0]);")
  
  (define_insn_and_split "*zero_extendqisi2_31"
    [(set (match_operand:SI 0 "register_operand" "=&d")
***************
*** 5022,5028 ****
    "&& reload_completed"
    [(set (match_dup 0) (const_int 0))
     (set (strict_low_part (match_dup 2)) (match_dup 1))]
!   "operands[2] = s390_gen_lowpart_subreg (QImode, operands[0]);")
  
  ;
  ; zero_extendqihi2 instruction pattern(s).
--- 5023,5029 ----
    "&& reload_completed"
    [(set (match_dup 0) (const_int 0))
     (set (strict_low_part (match_dup 2)) (match_dup 1))]
!   "operands[2] = gen_lowpart (QImode, operands[0]);")
  
  ;
  ; zero_extendqihi2 instruction pattern(s).
***************
*** 5054,5060 ****
    "&& reload_completed"
    [(set (match_dup 0) (const_int 0))
     (set (strict_low_part (match_dup 2)) (match_dup 1))]
!   "operands[2] = s390_gen_lowpart_subreg (QImode, operands[0]);")
  
  ;
  ; fixuns_trunc(dd|td|sf|df|tf)(si|di)2 expander
--- 5055,5061 ----
    "&& reload_completed"
    [(set (match_dup 0) (const_int 0))
     (set (strict_low_part (match_dup 2)) (match_dup 1))]
!   "operands[2] = gen_lowpart (QImode, operands[0]);")
  
  ;
  ; fixuns_trunc(dd|td|sf|df|tf)(si|di)2 expander
***************
*** 9480,9486 ****
  (define_insn "*icjump_64"
    [(set (pc)
          (if_then_else
!           (match_operator 1 "s390_comparison" [(reg CC_REGNUM) (const_int 0)])
            (pc)
            (label_ref (match_operand 0 "" ""))))]
    ""
--- 9481,9488 ----
  (define_insn "*icjump_64"
    [(set (pc)
          (if_then_else
!           (match_operator 1 "s390_comparison" [(reg CC_REGNUM)
! 					       (match_operand 2 "const_int_operand" "")])
            (pc)
            (label_ref (match_operand 0 "" ""))))]
    ""
diff -Nrcpad gcc-13.3.0/gcc/config/s390/vector.md gcc-13.4.0/gcc/config/s390/vector.md
*** gcc-13.3.0/gcc/config/s390/vector.md	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/s390/vector.md	Thu Jun  5 16:02:58 2025
***************
*** 134,140 ****
  			(V1TI "q") (TI "q")
  			(V1SF "f") (V2SF "f") (V4SF "f")
  			(V1DF "g") (V2DF "g")
! 			(V1TF "q")])
  
  ; This is for vmalhw. It gets an 'w' attached to avoid confusion with
  ; multiply and add logical high vmalh.
--- 134,140 ----
  			(V1TI "q") (TI "q")
  			(V1SF "f") (V2SF "f") (V4SF "f")
  			(V1DF "g") (V2DF "g")
! 			(V1TF "q") (TF "q")])
  
  ; This is for vmalhw. It gets an 'w' attached to avoid confusion with
  ; multiply and add logical high vmalh.
***************
*** 359,366 ****
     lr\t%0,%1
     mvi\t%0,0
     mviy\t%0,0
!    mvi\t%0,-1
!    mviy\t%0,-1
     lhi\t%0,0
     lhi\t%0,-1
     llc\t%0,%1
--- 359,366 ----
     lr\t%0,%1
     mvi\t%0,0
     mviy\t%0,0
!    mvi\t%0,255
!    mviy\t%0,255
     lhi\t%0,0
     lhi\t%0,-1
     llc\t%0,%1
***************
*** 915,950 ****
    "vmrlg\t%0,%1,%2";
    [(set_attr "op_type" "VRR")])
  
! 
! (define_insn "*tf_to_fprx2_0"
!   [(set (subreg:DF (match_operand:FPRX2 0 "nonimmediate_operand" "+f") 0)
! 	(subreg:DF (match_operand:TF    1 "general_operand"       "v") 0))]
!   "TARGET_VXE"
!   ; M4 == 1 corresponds to %v0[0] = %v1[0]; %v0[1] = %v0[1];
!   "vpdi\t%v0,%v1,%v0,1"
!   [(set_attr "op_type" "VRR")])
! 
! (define_insn "*tf_to_fprx2_1"
!   [(set (subreg:DF (match_operand:FPRX2 0 "nonimmediate_operand" "+f") 8)
! 	(subreg:DF (match_operand:TF    1 "general_operand"       "v") 8))]
!   "TARGET_VXE"
!   ; M4 == 5 corresponds to %V0[0] = %v1[1]; %V0[1] = %V0[1];
!   "vpdi\t%V0,%v1,%V0,5"
!   [(set_attr "op_type" "VRR")])
! 
! (define_insn_and_split "tf_to_fprx2"
!   [(set (match_operand:FPRX2            0 "nonimmediate_operand" "=f,f")
! 	(subreg:FPRX2 (match_operand:TF 1 "general_operand"       "v,AR") 0))]
    "TARGET_VXE"
-   "#"
-   "!(MEM_P (operands[1]) && MEM_VOLATILE_P (operands[1]))"
-   [(set (match_dup 2) (match_dup 3))
-    (set (match_dup 4) (match_dup 5))]
  {
!   operands[2] = simplify_gen_subreg (DFmode, operands[0], FPRX2mode, 0);
!   operands[3] = simplify_gen_subreg (DFmode, operands[1], TFmode, 0);
!   operands[4] = simplify_gen_subreg (DFmode, operands[0], FPRX2mode, 8);
!   operands[5] = simplify_gen_subreg (DFmode, operands[1], TFmode, 8);
  })
  
  
--- 915,959 ----
    "vmrlg\t%0,%1,%2";
    [(set_attr "op_type" "VRR")])
  
! (define_insn "tf_to_fprx2"
!   [(set (match_operand:FPRX2             0 "register_operand" "=f,f ,f")
! 	(unspec:FPRX2 [(match_operand:TF 1 "general_operand"   "v,AR,AT")]
! 		      UNSPEC_TF_TO_FPRX2))]
    "TARGET_VXE"
  {
!   char buf[64];
!   const char *reg_pair = reg_names[REGNO (operands[0]) + 1];
!   switch (which_alternative)
!     {
!     case 0:
!       if (REGNO (operands[0]) == REGNO (operands[1]))
! 	{
! 	  reg_pair += 2;  // get rid of prefix %f
! 	  snprintf (buf, sizeof (buf), "vpdi\t%%%%v%s,%%v1,%%%%v%s,5", reg_pair, reg_pair);
! 	  output_asm_insn (buf, operands);
! 	  return "";
! 	}
!       else
! 	{
! 	  reg_pair += 2;  // get rid of prefix %f
! 	  snprintf (buf, sizeof (buf), "vlr\t%%v0,%%v1;vpdi\t%%%%v%s,%%v1,%%%%v%s,5", reg_pair, reg_pair);
! 	  output_asm_insn (buf, operands);
! 	  return "";
! 	}
!     case 1:
!       {
! 	snprintf (buf, sizeof (buf), "ld\t%%f0,%%1;ld\t%%%s,8+%%1", reg_pair);
! 	output_asm_insn (buf, operands);
! 	return "";
!       }
!     case 2:
!       {
! 	snprintf (buf, sizeof (buf), "ldy\t%%f0,%%1;ldy\t%%%s,8+%%1", reg_pair);
! 	output_asm_insn (buf, operands);
! 	return "";
!       }
!     default: gcc_unreachable ();
!     }
  })
  
  
***************
*** 2580,2588 ****
  ; There is no instruction for rounding an extended BFP operand in a VR into
  ; a signed integer, therefore copy it into a FPR pair first.
  (define_expand "fix_trunctf<mode>2_vr"
!   [(set (subreg:DF (match_dup 2) 0)
! 	(subreg:DF (match_operand:TF 1 "register_operand" "") 0))
!    (set (subreg:DF (match_dup 2) 8) (subreg:DF (match_dup 1) 8))
     (parallel [(set (match_operand:GPR 0 "register_operand" "")
  		   (fix:GPR (match_dup 2)))
  	      (unspec:GPR [(const_int BFP_RND_TOWARD_0)] UNSPEC_ROUND)
--- 2589,2596 ----
  ; There is no instruction for rounding an extended BFP operand in a VR into
  ; a signed integer, therefore copy it into a FPR pair first.
  (define_expand "fix_trunctf<mode>2_vr"
!   [(set (match_dup 2)
! 	(unspec:FPRX2 [(match_operand:TF 1 "register_operand")] UNSPEC_TF_TO_FPRX2))
     (parallel [(set (match_operand:GPR 0 "register_operand" "")
  		   (fix:GPR (match_dup 2)))
  	      (unspec:GPR [(const_int BFP_RND_TOWARD_0)] UNSPEC_ROUND)
***************
*** 2614,2622 ****
  ; There is no instruction for rounding an extended BFP operand in a VR into
  ; an unsigned integer, therefore copy it into a FPR pair first.
  (define_expand "fixuns_trunctf<mode>2_vr"
!   [(set (subreg:DF (match_dup 2) 0)
! 	(subreg:DF (match_operand:TF 1 "register_operand" "") 0))
!    (set (subreg:DF (match_dup 2) 8) (subreg:DF (match_dup 1) 8))
     (parallel [(set (match_operand:GPR 0 "register_operand" "")
  		   (unsigned_fix:GPR (match_dup 2)))
  	      (unspec:GPR [(const_int BFP_RND_TOWARD_0)] UNSPEC_ROUND)
--- 2622,2629 ----
  ; There is no instruction for rounding an extended BFP operand in a VR into
  ; an unsigned integer, therefore copy it into a FPR pair first.
  (define_expand "fixuns_trunctf<mode>2_vr"
!   [(set (match_dup 2)
! 	(unspec:FPRX2 [(match_operand:TF 1 "register_operand")] UNSPEC_TF_TO_FPRX2))
     (parallel [(set (match_operand:GPR 0 "register_operand" "")
  		   (unsigned_fix:GPR (match_dup 2)))
  	      (unspec:GPR [(const_int BFP_RND_TOWARD_0)] UNSPEC_ROUND)
diff -Nrcpad gcc-13.3.0/gcc/config/sh/sh.cc gcc-13.4.0/gcc/config/sh/sh.cc
*** gcc-13.3.0/gcc/config/sh/sh.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config/sh/sh.cc	Thu Jun  5 16:02:58 2025
*************** sh_recog_treg_set_expr (rtx op, machine_
*** 12279,12285 ****
       have to capture its current state and restore it afterwards.  */
    recog_data_d prev_recog_data = recog_data;
  
!   rtx_insn* i = make_insn_raw (gen_rtx_SET (get_t_reg_rtx (), op));
    SET_PREV_INSN (i) = NULL;
    SET_NEXT_INSN (i) = NULL;
  
--- 12279,12295 ----
       have to capture its current state and restore it afterwards.  */
    recog_data_d prev_recog_data = recog_data;
  
!   /* Note we can't use insn_raw here since that increases the uid
!      and could cause debug compare differences; this insn never leaves
!      this function so create a dummy one. */
!   rtx_insn* i = as_a <rtx_insn *> (rtx_alloc (INSN));
! 
!   INSN_UID (i) = 1;
!   PATTERN (i) = gen_rtx_SET (get_t_reg_rtx (), op);
!   INSN_CODE (i) = -1;
!   REG_NOTES (i) = NULL;
!   INSN_LOCATION (i) = curr_insn_location ();
!   BLOCK_FOR_INSN (i) = NULL;
    SET_PREV_INSN (i) = NULL;
    SET_NEXT_INSN (i) = NULL;
  
diff -Nrcpad gcc-13.3.0/gcc/config.gcc gcc-13.4.0/gcc/config.gcc
*** gcc-13.3.0/gcc/config.gcc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/config.gcc	Thu Jun  5 16:02:58 2025
*************** c7 esther"
*** 675,683 ****
  # 64-bit x86 processors supported by --with-arch=.  Each processor
  # MUST be separated by exactly one space.
  x86_64_archs="amdfam10 athlon64 athlon64-sse3 barcelona bdver1 bdver2 \
! bdver3 bdver4 znver1 znver2 znver3 znver4 btver1 btver2 k8 k8-sse3 opteron \
! opteron-sse3 nocona core2 corei7 corei7-avx core-avx-i core-avx2 atom \
! slm nehalem westmere sandybridge ivybridge haswell broadwell bonnell \
  silvermont knl knm skylake-avx512 cannonlake icelake-client icelake-server \
  skylake goldmont goldmont-plus tremont cascadelake tigerlake cooperlake \
  sapphirerapids alderlake rocketlake eden-x2 nano nano-1000 nano-2000 nano-3000 \
--- 675,683 ----
  # 64-bit x86 processors supported by --with-arch=.  Each processor
  # MUST be separated by exactly one space.
  x86_64_archs="amdfam10 athlon64 athlon64-sse3 barcelona bdver1 bdver2 \
! bdver3 bdver4 znver1 znver2 znver3 znver4 znver5 btver1 btver2 k8 k8-sse3 \
! opteron opteron-sse3 nocona core2 corei7 corei7-avx core-avx-i core-avx2 \
! atom slm nehalem westmere sandybridge ivybridge haswell broadwell bonnell \
  silvermont knl knm skylake-avx512 cannonlake icelake-client icelake-server \
  skylake goldmont goldmont-plus tremont cascadelake tigerlake cooperlake \
  sapphirerapids alderlake rocketlake eden-x2 nano nano-1000 nano-2000 nano-3000 \
*************** case ${target} in
*** 3681,3686 ****
--- 3681,3690 ----
  	arch=znver4
  	cpu=znver4
  	;;
+       znver5-*)
+ 	arch=znver5
+ 	cpu=znver5
+ 	;;
        bdver4-*)
          arch=bdver4
          cpu=bdver4
*************** case ${target} in
*** 3814,3819 ****
--- 3818,3827 ----
  	arch=znver4
  	cpu=znver4
  	;;
+       znver5-*)
+ 	arch=znver5
+ 	cpu=znver5
+ 	;;
        bdver4-*)
          arch=bdver4
          cpu=bdver4
diff -Nrcpad gcc-13.3.0/gcc/config.in gcc-13.4.0/gcc/config.in
*** gcc-13.3.0/gcc/config.in	Tue May 21 07:49:00 2024
--- gcc-13.4.0/gcc/config.in	Thu Jun  5 16:05:01 2025
***************
*** 2183,2188 ****
--- 2183,2195 ----
  #endif
  
  
+ /* Define if personality and ADDR_NO_RANDOMIZE are declared in
+    sys/personality.h. */
+ #ifndef USED_FOR_TARGET
+ #undef HOST_HAS_PERSONALITY_ADDR_NO_RANDOMIZE
+ #endif
+ 
+ 
  /* Define which stat syscall is able to handle 64bit indodes. */
  #ifndef USED_FOR_TARGET
  #undef HOST_STAT_FOR_64BIT_INODES
***************
*** 2207,2212 ****
--- 2214,2225 ----
  #endif
  
  
+ /* Define to 1 if ld64 supports '-macos_version_min'. */
+ #ifndef USED_FOR_TARGET
+ #undef LD64_HAS_MACOS_VERSION_MIN
+ #endif
+ 
+ 
  /* Define to 1 if ld64 supports '-platform_version'. */
  #ifndef USED_FOR_TARGET
  #undef LD64_HAS_PLATFORM_VERSION
diff -Nrcpad gcc-13.3.0/gcc/configure gcc-13.4.0/gcc/configure
*** gcc-13.3.0/gcc/configure	Tue May 21 07:49:00 2024
--- gcc-13.4.0/gcc/configure	Thu Jun  5 16:05:01 2025
*************** if test x"${DEFAULT_LINKER+set}" = x"set
*** 3896,3902 ****
      as_fn_error $? "cannot execute: $DEFAULT_LINKER: check --with-ld or env. var. DEFAULT_LINKER" "$LINENO" 5
    elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep GNU > /dev/null; then
      gnu_ld_flag=yes
!   elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep ld64- > /dev/null; then
      ld64_flag=yes
    fi
  
--- 3896,3902 ----
      as_fn_error $? "cannot execute: $DEFAULT_LINKER: check --with-ld or env. var. DEFAULT_LINKER" "$LINENO" 5
    elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep GNU > /dev/null; then
      gnu_ld_flag=yes
!   elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep 'PROJECT:ld\(64\)*-' > /dev/null; then
      ld64_flag=yes
    fi
  
*************** $as_echo "#define HOST_HAS_O_NONBLOCK 1"
*** 12623,12628 ****
--- 12623,12664 ----
  
  fi
  
+ # Check if personality and ADDR_NO_RANDOMIZE are declared
+ # in sys/personality.h
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for personality ADDR_NO_RANDOMIZE" >&5
+ $as_echo_n "checking for personality ADDR_NO_RANDOMIZE... " >&6; }
+ if ${ac_cv_personality_addr_no_randomize+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+ 
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ 
+ #include <sys/personality.h>
+ int
+ main ()
+ {
+ 
+ personality (personality (0xffffffffU) | ADDR_NO_RANDOMIZE);
+   ;
+   return 0;
+ }
+ _ACEOF
+ if ac_fn_cxx_try_compile "$LINENO"; then :
+   ac_cv_personality_addr_no_randomize=yes
+ else
+   ac_cv_personality_addr_no_randomize=no
+ fi
+ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_personality_addr_no_randomize" >&5
+ $as_echo "$ac_cv_personality_addr_no_randomize" >&6; }
+ if test $ac_cv_personality_addr_no_randomize = yes; then
+ 
+ $as_echo "#define HOST_HAS_PERSONALITY_ADDR_NO_RANDOMIZE 1" >>confdefs.h
+ 
+ fi
+ 
  
  # C++ Modules would like some networking features to provide the mapping
  # server.  You can still use modules without them though.
*************** else
*** 19871,19877 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 19874 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 19907,19913 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 19910 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** else
*** 19977,19983 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 19980 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 20013,20019 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 20016 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** if test x"$ld64_flag" = x"yes"; then
*** 30638,30643 ****
--- 30674,30680 ----
    # Set defaults for possibly untestable items.
    gcc_cv_ld64_export_dynamic=0
    gcc_cv_ld64_platform_version=0
+   gcc_cv_ld64_macos_version_min=0
  
    if test "$build" = "$host"; then
      darwin_try_test=1
*************** $as_echo "$gcc_cv_ld64_major" >&6; }
*** 30666,30679 ****
      fi
      if test "$gcc_cv_ld64_major" -ge 512; then
        gcc_cv_ld64_platform_version=1
      fi
    elif test -x "$gcc_cv_ld" -a "$darwin_try_test" -eq 1; then
      # If the version was not specified, try to find it.
      { $as_echo "$as_me:${as_lineno-$LINENO}: checking linker version" >&5
  $as_echo_n "checking linker version... " >&6; }
      if test x"${gcc_cv_ld64_version}" = x; then
!       gcc_cv_ld64_version=`$gcc_cv_ld -v 2>&1 | $EGREP 'ld64|dyld' \
!       | sed -e 's/.*ld64-//' -e 's/.*dyld-//'| awk '{print $1}'`
      fi
      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld64_version" >&5
  $as_echo "$gcc_cv_ld64_version" >&6; }
--- 30703,30718 ----
      fi
      if test "$gcc_cv_ld64_major" -ge 512; then
        gcc_cv_ld64_platform_version=1
+       gcc_cv_ld64_macos_version_min=1
      fi
    elif test -x "$gcc_cv_ld" -a "$darwin_try_test" -eq 1; then
      # If the version was not specified, try to find it.
      { $as_echo "$as_me:${as_lineno-$LINENO}: checking linker version" >&5
  $as_echo_n "checking linker version... " >&6; }
      if test x"${gcc_cv_ld64_version}" = x; then
!       gcc_cv_ld64_version=`$gcc_cv_ld -v 2>&1 | $EGREP 'ld64|dyld|PROJECT:ld' \
!       | sed -e 's/.*ld64-//' -e 's/.*dyld-//' -e 's/.*PROJECT:ld-//' \
!       | awk '{print $1}'`
      fi
      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld64_version" >&5
  $as_echo "$gcc_cv_ld64_version" >&6; }
*************** $as_echo_n "checking linker for -platfor
*** 30695,30700 ****
--- 30734,30748 ----
      fi
      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld64_platform_version" >&5
  $as_echo "$gcc_cv_ld64_platform_version" >&6; }
+ 
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking linker for -macos_version_min" >&5
+ $as_echo_n "checking linker for -macos_version_min... " >&6; }
+     gcc_cv_ld64_macos_version_min=1
+     if $gcc_cv_ld -macos_version_min 10.5 < /dev/null 2>&1 | grep 'unknown option' > /dev/null; then
+       gcc_cv_ld64_macos_version_min=0
+     fi
+     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld64_macos_version_min" >&5
+ $as_echo "$gcc_cv_ld64_macos_version_min" >&6; }
    fi
  
    if test x"${gcc_cv_ld64_version}" != x; then
*************** cat >>confdefs.h <<_ACEOF
*** 30716,30721 ****
--- 30764,30775 ----
  #define LD64_HAS_PLATFORM_VERSION $gcc_cv_ld64_platform_version
  _ACEOF
  
+ 
+ 
+ cat >>confdefs.h <<_ACEOF
+ #define LD64_HAS_MACOS_VERSION_MIN $gcc_cv_ld64_macos_version_min
+ _ACEOF
+ 
  fi
  
  if test x"$dsymutil_flag" = x"yes"; then
diff -Nrcpad gcc-13.3.0/gcc/configure.ac gcc-13.4.0/gcc/configure.ac
*** gcc-13.3.0/gcc/configure.ac	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/configure.ac	Thu Jun  5 16:02:58 2025
*************** if test x"${DEFAULT_LINKER+set}" = x"set
*** 358,364 ****
      AC_MSG_ERROR([cannot execute: $DEFAULT_LINKER: check --with-ld or env. var. DEFAULT_LINKER])
    elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep GNU > /dev/null; then
      gnu_ld_flag=yes
!   elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep ld64- > /dev/null; then
      ld64_flag=yes
    fi
    AC_DEFINE_UNQUOTED(DEFAULT_LINKER,"$DEFAULT_LINKER",
--- 358,364 ----
      AC_MSG_ERROR([cannot execute: $DEFAULT_LINKER: check --with-ld or env. var. DEFAULT_LINKER])
    elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep GNU > /dev/null; then
      gnu_ld_flag=yes
!   elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep 'PROJECT:ld\(64\)*-' > /dev/null; then
      ld64_flag=yes
    fi
    AC_DEFINE_UNQUOTED(DEFAULT_LINKER,"$DEFAULT_LINKER",
*************** if test $ac_cv_have_decl_O_NONBLOCK = ye
*** 1766,1771 ****
--- 1766,1786 ----
    [Define if O_NONBLOCK supported by fcntl.])
  fi
  
+ # Check if personality and ADDR_NO_RANDOMIZE are declared
+ # in sys/personality.h
+ AC_CACHE_CHECK(for personality ADDR_NO_RANDOMIZE,
+ 	       ac_cv_personality_addr_no_randomize, [
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+ #include <sys/personality.h>]], [[
+ personality (personality (0xffffffffU) | ADDR_NO_RANDOMIZE);]])],
+ [ac_cv_personality_addr_no_randomize=yes],
+ [ac_cv_personality_addr_no_randomize=no])])
+ if test $ac_cv_personality_addr_no_randomize = yes; then
+   AC_DEFINE(HOST_HAS_PERSONALITY_ADDR_NO_RANDOMIZE, 1,
+   [Define if personality and ADDR_NO_RANDOMIZE are declared in
+ sys/personality.h.])
+ fi
+ 
  
  # C++ Modules would like some networking features to provide the mapping
  # server.  You can still use modules without them though.
*************** if test x"$ld64_flag" = x"yes"; then
*** 6273,6278 ****
--- 6288,6294 ----
    # Set defaults for possibly untestable items.
    gcc_cv_ld64_export_dynamic=0
    gcc_cv_ld64_platform_version=0
+   gcc_cv_ld64_macos_version_min=0
  
    if test "$build" = "$host"; then
      darwin_try_test=1
*************** if test x"$ld64_flag" = x"yes"; then
*** 6299,6311 ****
      fi
      if test "$gcc_cv_ld64_major" -ge 512; then
        gcc_cv_ld64_platform_version=1
      fi
    elif test -x "$gcc_cv_ld" -a "$darwin_try_test" -eq 1; then
      # If the version was not specified, try to find it.
      AC_MSG_CHECKING(linker version)
      if test x"${gcc_cv_ld64_version}" = x; then
!       gcc_cv_ld64_version=`$gcc_cv_ld -v 2>&1 | $EGREP 'ld64|dyld' \
!       | sed -e 's/.*ld64-//' -e 's/.*dyld-//'| awk '{print $1}'`
      fi
      AC_MSG_RESULT($gcc_cv_ld64_version)
  
--- 6315,6329 ----
      fi
      if test "$gcc_cv_ld64_major" -ge 512; then
        gcc_cv_ld64_platform_version=1
+       gcc_cv_ld64_macos_version_min=1
      fi
    elif test -x "$gcc_cv_ld" -a "$darwin_try_test" -eq 1; then
      # If the version was not specified, try to find it.
      AC_MSG_CHECKING(linker version)
      if test x"${gcc_cv_ld64_version}" = x; then
!       gcc_cv_ld64_version=`$gcc_cv_ld -v 2>&1 | $EGREP 'ld64|dyld|PROJECT:ld' \
!       | sed -e 's/.*ld64-//' -e 's/.*dyld-//' -e 's/.*PROJECT:ld-//' \
!       | awk '{print $1}'`
      fi
      AC_MSG_RESULT($gcc_cv_ld64_version)
  
*************** if test x"$ld64_flag" = x"yes"; then
*** 6322,6327 ****
--- 6340,6352 ----
        gcc_cv_ld64_platform_version=0
      fi
      AC_MSG_RESULT($gcc_cv_ld64_platform_version)
+ 
+     AC_MSG_CHECKING(linker for -macos_version_min)
+     gcc_cv_ld64_macos_version_min=1
+     if $gcc_cv_ld -macos_version_min 10.5 < /dev/null 2>&1 | grep 'unknown option' > /dev/null; then
+       gcc_cv_ld64_macos_version_min=0
+     fi
+     AC_MSG_RESULT($gcc_cv_ld64_macos_version_min)
    fi
  
    if test x"${gcc_cv_ld64_version}" != x; then
*************** if test x"$ld64_flag" = x"yes"; then
*** 6334,6339 ****
--- 6359,6367 ----
  
    AC_DEFINE_UNQUOTED(LD64_HAS_PLATFORM_VERSION, $gcc_cv_ld64_platform_version,
    [Define to 1 if ld64 supports '-platform_version'.])
+ 
+   AC_DEFINE_UNQUOTED(LD64_HAS_MACOS_VERSION_MIN, $gcc_cv_ld64_macos_version_min,
+   [Define to 1 if ld64 supports '-macos_version_min'.])
  fi
  
  if test x"$dsymutil_flag" = x"yes"; then
diff -Nrcpad gcc-13.3.0/gcc/cp/ChangeLog gcc-13.4.0/gcc/cp/ChangeLog
*** gcc-13.3.0/gcc/cp/ChangeLog	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/cp/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,587 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
+ 2025-05-27  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-06-25  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/115358
+ 	* decl2.cc (mark_used): Call maybe_instantiate_decl for an array
+ 	variable with unknown bound.
+ 	* semantics.cc (finish_decltype_type): Remove now redundant
+ 	handling of array variables with unknown bound.
+ 	* typeck.cc (cxx_sizeof_expr): Likewise.
+ 
+ 2025-05-27  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-01-09  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/117792
+ 	* pt.cc (type_dependent_expression_p): Consider the dependence
+ 	of the address of each template argument of a function
+ 	template-id.
+ 
+ 2025-05-27  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-03-18  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/119233
+ 	* pt.cc (mark_template_arguments_used): Also handle member
+ 	function pointers.
+ 
+ 2025-05-27  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-06-28  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/106760
+ 	* call.cc (add_candidates): Relax test for adding a candidate
+ 	to 'bad_cands' to also accept an uninstantiated template candidate
+ 	that has no missing conversions.
+ 
+ 2025-05-27  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-07-23  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/115656
+ 	* constraint.cc (weakly_subsumes): Pass in_decl=tmpl to
+ 	get_normalized_constraints_from_info.  Rename to ...
+ 	(ttp_subsumes): ... this.
+ 	* cp-tree.h (weakly_subsumes): Rename to ...
+ 	(ttp_subsumes): ... this.
+ 	* pt.cc (is_compatible_template_arg): Adjust after renaming.
+ 
+ 2025-05-27  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-09-12  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/116418
+ 	* tree.cc (strip_typedefs_expr) <case STATEMENT_LIST>: Replace
+ 	this error path with ...
+ 	<case STMT_EXPR>: ... this, returning the original tree.
+ 
+ 2025-05-27  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-01-09  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/118060
+ 	* constraint.cc (tsubst_valid_expression_requirement): Don't
+ 	check convert_to_void during partial substitution.
+ 
+ 2025-05-27  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-08-15  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/116320
+ 	* semantics.cc (check_accessibility_of_qualified_id): Try
+ 	currently_open_class when using the object type as the
+ 	effective qualifying type.
+ 
+ 2025-05-26  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-02-28  Jakub Jelinek  <jakub@redhat.com>
+ 		    Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/113976
+ 	* decl.cc (grokdeclarator): Don't call cp_apply_type_quals_to_decl
+ 	on DECL_TEMPLATE_INSTANTIATED VAR_DECLs.
+ 
+ 2025-05-26  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-09-12  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/116636
+ 	* method.cc: Include decl.h.
+ 	(use_thunk): Temporarily change deprecated_state to
+ 	UNAVAILABLE_DEPRECATED_SUPPRESS.
+ 
+ 2025-05-26  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-09-05  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/116606
+ 	* decl2.cc (mark_vtable_entries): Temporarily override deprecated_state to
+ 	UNAVAILABLE_DEPRECATED_SUPPRESS.  Remove a warning_sentinel.
+ 
+ 2025-05-26  Jason Merrill  <jason@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-04-16  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/116954
+ 	* contracts.cc (remove_contract_attributes): Preserve flags
+ 	on the attribute list.
+ 
+ 2025-05-07  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-02-03  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR c++/79786
+ 	* rtti.cc (emit_tinfo_decl): Fix DATA_ABI_ALIGNMENT invocation.
+ 
+ 2025-04-23  Jason Merrill  <jason@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-04-16  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/114772
+ 	PR c++/101180
+ 	* pt.cc (apply_late_template_attributes): Also override
+ 	target_option_current_node.
+ 
+ 2025-04-23  Jason Merrill  <jason@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-04-15  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/111075
+ 	* constexpr.cc (cxx_eval_call_expression): Allow trivial
+ 	call from a thunk.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-03-06  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/98533
+ 	PR c++/119123
+ 	* parser.cc (cp_parser_class_specifier): Update TYPE_FIELDS of
+ 	variant types in case cp_parser_late_parsing_default_args etc. change
+ 	TYPE_FIELDS on the main variant.  Add switch_to_class lambda and
+ 	use it to simplify repeated class switching code.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-02-28  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/119045
+ 	* constexpr.cc (cxx_eval_store_expression) <case REALPART_EXPR>:
+ 	Assert that refs->is_empty () rather than probe == target.
+ 	(cxx_eval_store_expression) <case IMAGPART_EXPR>: Likewise.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-02-07  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/118763
+ 	* init.cc (build_new_1): Don't set CLEANUP_EH_ONLY.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-02-07  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/118661
+ 	* constexpr.cc (potential_constant_expression_1): Don't diagnose
+ 	lvalue-to-rvalue conversion of volatile lvalue if it has NULLPTR_TYPE.
+ 	* decl2.cc (decl_maybe_constant_var_p): Return true for constexpr
+ 	decls with NULLPTR_TYPE even if they are volatile.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-01-25  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/117827
+ 	* init.cc (build_new_1): Pass address of a make_tree_vector ()
+ 	initialized gc tree vector to build_vec_init and append
+ 	build_disable_temp_cleanup to init_expr from it.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/118509
+ 	* typeck.cc (get_member_function_from_ptrfunc): Wrap force_target_expr
+ 	with save_expr.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-01-08  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/117825
+ 	* typeck.cc (cp_build_function_call_vec): Don't call
+ 	check_function_arguments if complain doesn't have tf_warning bit set.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-12-17  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/116108
+ 	* decl.cc (grokdeclarator): Pass TYYPE_MAIN_VARIANT (type)
+ 	rather than type to same_type_p when checking if the non-static
+ 	data member doesn't have current class type.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-11-08  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/117317
+ 	* semantics.cc (emit_associated_thunks): Do nothing for
+ 	!DECL_INTERFACE_KNOWN && DECL_DEFER_OUTPUT fns.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-10-24  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/117259
+ 	* typeck.cc (get_member_function_from_ptrfunc): Use force_target_expr
+ 	rather than save_expr for instance_ptr and function.  Don't call it
+ 	for TREE_CONSTANT.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-09-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/116678
+ 	* optimize.cc: Include decl.h.
+ 	(maybe_thunk_body): Temporarily change deprecated_state to
+ 	UNAVAILABLE_DEPRECATED_SUPPRESS.
+ 
+ 2025-04-14  Simon Martin  <simon@nasilyan.com>
+ 
+ 	Backported from master:
+ 	2025-03-25  Simon Martin  <simon@nasilyan.com>
+ 
+ 	PR c++/114525
+ 	* typeck2.cc (build_m_component_ref): Call cp_build_addr_expr
+ 	instead of build_address.
+ 
+ 2025-03-25  Simon Martin  <simon@nasilyan.com>
+ 
+ 	Backported from master:
+ 	2025-03-06  Simon Martin  <simon@nasilyan.com>
+ 
+ 	PR c++/117504
+ 	* call.cc (perform_implicit_conversion_flags): Don't call
+ 	mark_{l,r}value_use.
+ 
+ 2025-03-24  Simon Martin  <simon@nasilyan.com>
+ 
+ 	Backported from master:
+ 	2024-09-14  Simon Martin  <simon@nasilyan.com>
+ 
+ 	PR c++/116681
+ 	* name-lookup.cc (qualified_namespace_lookup): Use an
+ 	auto_cond_timer instead of using timevar_start and timevar_stop.
+ 
+ 2025-03-21  Simon Martin  <simon@nasilyan.com>
+ 
+ 	Backported from master:
+ 	2025-03-20  Simon Martin  <simon@nasilyan.com>
+ 
+ 	PR c++/114292
+ 	* tree.cc (cp_walk_subtrees): Walk the type of DECL_EXPR
+ 	declarations, as well as the TYPE_{MIN,MAX}_VALUE of
+ 	INTEGER_TYPEs for template declarations.
+ 
+ 2025-03-18  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-03-18  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/118104
+ 	* pt.cc (use_pack_expansion_extra_args_p): Remove an assert.
+ 
+ 2025-03-12  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-03-12  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/119134
+ 	* pt.cc (check_for_bare_parameter_packs): Check DECL_CONTEXT.
+ 
+ 2025-01-29  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-01-14  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/118047
+ 	PR c++/118355
+ 	* typeck2.cc (massage_init_elt): Call fold_non_dependent_init
+ 	unless for a CONSTRUCTOR in a template.
+ 
+ 2025-01-24  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-01-24  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/117153
+ 	* decl2.cc (build_anon_union_vars): Use FIELD for the second operand
+ 	of a COMPONENT_REF.
+ 
+ 2025-01-19  Simon Martin  <simon@nasilyan.com>
+ 
+ 	Backported from master:
+ 	2025-01-17  Simon Martin  <simon@nasilyan.com>
+ 
+ 	PR c++/118255
+ 	* name-lookup.cc (pushdecl): Don't call check_template_shadow
+ 	for hidden bindings.
+ 
+ 2025-01-17  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-01-17  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	PR c++/118147
+ 	* parser.cc (cp_parser_cache_defarg): Don't error when
+ 	CPP_PRAGMA_EOL.
+ 
+ 2025-01-17  Simon Martin  <simon@nasilyan.com>
+ 
+ 	Backported from master:
+ 	2025-01-16  Simon Martin  <simon@nasilyan.com>
+ 
+ 	PR c++/117775
+ 	* decl.cc (fold_sizeof_expr): Make sure the folded result has
+ 	type size_type_node.
+ 
+ 2025-01-10  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/110031
+ 	* pt.cc (lookup_and_finish_template_variable): Pass complain to
+ 	mark_used.
+ 
+ 2025-01-10  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/114349
+ 	* name-lookup.cc (maybe_push_to_top_level): For a non-lambda,
+ 	don't push to top level if decl_function_context is non-null.
+ 	* pt.cc (maybe_instantiate_noexcept): Use maybe_push_to_top_level.
+ 
+ 2025-01-10  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-05-15  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/114854
+ 	* call.cc (convert_like_internal) <case ck_user>: Don't set
+ 	TARGET_EXPR_DIRECT_INIT_P.
+ 
+ 2025-01-10  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-04-12  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/109966
+ 	* typeck2.cc (potential_prvalue_result_of): Remove.
+ 	(replace_placeholders_for_class_temp_r): Check TARGET_EXPR_ELIDING_P.
+ 	Use a pset.  Don't replace_placeholders in TARGET_EXPRs that initialize
+ 	a function argument.
+ 
+ 2025-01-10  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-09-30  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/109859
+ 	* parser.cc (cp_parser_lambda_declarator_opt): Temporarily clear
+ 	local_variables_forbidden_p.
+ 	(cp_parser_placeholder_type_specifier): Turn an assert into an
+ 	error.
+ 
+ 2025-01-10  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2023-05-10  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/109680
+ 	* method.cc (build_trait_object): New.
+ 	(assignable_expr): Use it.
+ 	(ref_xes_from_temporary): Likewise.
+ 	(is_convertible_helper): Likewise.  Check FUNC_OR_METHOD_TYPE_P.
+ 
+ 2025-01-10  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-12-17  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/117985
+ 	* init.cc (build_vec_init): Pop CLEANUP_FLAGS if we're not
+ 	generating the loop.
+ 
+ 2025-01-10  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-02-17  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/113158
+ 	* search.cc (maybe_check_overriding_exception_spec): Defer checking
+ 	when a noexcept couldn't be instantiated & evaluated to false/true.
+ 
+ 2025-01-10  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-04-05  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/111132
+ 	* constexpr.cc (get_function_named_in_call): Use
+ 	cp_get_fndecl_from_callee.
+ 	* cvt.cc (cp_get_fndecl_from_callee): If there's a
+ 	DECL_LOCAL_DECL_ALIAS, use it.
+ 
+ 2025-01-10  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-09-10  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/116369
+ 	* call.cc (set_up_extended_ref_temp): Don't mark a temporary
+ 	TREE_READONLY if its type is TYPE_HAS_MUTABLE_P.
+ 
+ 2025-01-10  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2023-07-25  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/110382
+ 	* constexpr.cc (cxx_eval_array_reference): Create a new constructor
+ 	only when we don't already have a matching one.  Clear the object
+ 	when the type is non-scalar.
+ 
+ 2025-01-10  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-08-19  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/115657
+ 	* decl.cc (build_enumerator): Call maybe_fold_non_dependent_expr
+ 	instead of fold_non_dependent_expr.
+ 
+ 2025-01-10  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2023-07-20  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/110114
+ 	* call.cc (implicit_conversion_1): Return early if the type isn't
+ 	complete.
+ 
+ 2025-01-10  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-07-18  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/115476
+ 	* semantics.cc (finish_trait_expr)
+ 	<case CPTK_HAS_UNIQUE_OBJ_REPRESENTATIONS>: Move below to call
+ 	check_trait_type with kind==2.
+ 
+ 2024-12-13  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-08-28  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/116424
+ 	* typeck2.cc (process_init_constructor_record): Move the clearing of
+ 	TARGET_EXPR_ELIDING_P down.
+ 
+ 2024-12-05  Simon Martin  <simon@nasilyan.com>
+ 
+ 	Backported from master:
+ 	2024-12-04  Simon Martin  <simon@nasilyan.com>
+ 
+ 	PR c++/117615
+ 	* constexpr.cc (cxx_eval_constant_expression): Don't reject
+ 	INTEGER_CSTs with type POINTER_TYPE to METHOD_TYPE.
+ 
+ 2024-11-21  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/116731
+ 	* parser.cc (warn_for_range_copy): Check if TYPE is trivially
+ 	constructible, not copyable.
+ 
+ 2024-11-06  Simon Martin  <simon@nasilyan.com>
+ 
+ 	Backported from master:
+ 	2024-11-05  Simon Martin  <simon@nasilyan.com>
+ 
+ 	PR c++/117158
+ 	* typeck.cc (cp_build_array_ref): Only wrap array expression
+ 	into a SAVE_EXPR at template instantiation time.
+ 
+ 2024-09-17  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-09-17  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/116676
+ 	* constexpr.cc (maybe_warn_about_constant_value): Check DECL_NAME.
+ 
+ 2024-09-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-09-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/116449
+ 	* typeck.cc (get_member_function_from_ptrfunc): Use save_expr
+ 	on instance_ptr and function even if it doesn't have side-effects,
+ 	as long as it isn't a decl.
+ 
+ 2024-08-09  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/113063
+ 	PR c++/116289
+ 	* method.cc (synthesize_method): Use cp_evaluated.
+ 
+ 2024-06-17  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-06-17  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/111343
+ 	PR c++/115511
+ 	* typeck.cc (cp_compare_floating_point_conversion_ranks): If an
+ 	extended floating point type mv1 has same set of values as more
+ 	than one standard floating point type and mv2 is float, return 2.
+ 
+ 2024-05-24  Jason Merrill  <jason@redhat.com>
+ 
+ 	Backported from master:
+ 	2023-09-22  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/111529
+ 	* parser.cc (cp_parser_lambda_declarator_opt): Don't suggest
+ 	-std=c++14 for lambda templates.
+ 	* pt.cc (tsubst_expr): Move ANNOTATE_EXPR handling...
+ 	(tsubst_copy_and_build): ...here.
+ 
+ 2024-05-24  Jason Merrill  <jason@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-01-25  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/113598
+ 	* init.cc (build_vec_init): Don't use {} for PMF.
+ 
+ 2024-05-21  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-05-21  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/107800
+ 	* cxxapi-data.csv <to_address>: Change dialect to cxx20.
+ 	* std-name-hint.gperf: Regenerate.
+ 	* std-name-hint.h: Regenerate.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/gcc/cp/call.cc gcc-13.4.0/gcc/cp/call.cc
*** gcc-13.3.0/gcc/cp/call.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/cp/call.cc	Thu Jun  5 16:02:58 2025
*************** implicit_conversion_1 (tree to, tree fro
*** 2058,2072 ****
    complain &= ~tf_error;
  
    /* Call reshape_init early to remove redundant braces.  */
!   if (expr && BRACE_ENCLOSED_INITIALIZER_P (expr)
!       && CLASS_TYPE_P (to)
!       && COMPLETE_TYPE_P (complete_type (to))
!       && !CLASSTYPE_NON_AGGREGATE (to))
      {
!       expr = reshape_init (to, expr, complain);
!       if (expr == error_mark_node)
! 	return NULL;
!       from = TREE_TYPE (expr);
      }
  
    if (TYPE_REF_P (to))
--- 2058,2075 ----
    complain &= ~tf_error;
  
    /* Call reshape_init early to remove redundant braces.  */
!   if (expr && BRACE_ENCLOSED_INITIALIZER_P (expr) && CLASS_TYPE_P (to))
      {
!       to = complete_type (to);
!       if (!COMPLETE_TYPE_P (to))
! 	return nullptr;
!       if (!CLASSTYPE_NON_AGGREGATE (to))
! 	{
! 	  expr = reshape_init (to, expr, complain);
! 	  if (expr == error_mark_node)
! 	    return nullptr;
! 	  from = TREE_TYPE (expr);
! 	}
      }
  
    if (TYPE_REF_P (to))
*************** add_candidates (tree fns, tree first_arg
*** 6645,6651 ****
  
        if (cand->viable == -1
  	  && shortcut_bad_convs
! 	  && missing_conversion_p (cand))
  	{
  	  /* This candidate has been tentatively marked non-strictly viable,
  	     and we didn't compute all argument conversions for it (having
--- 6648,6655 ----
  
        if (cand->viable == -1
  	  && shortcut_bad_convs
! 	  && (missing_conversion_p (cand)
! 	      || TREE_CODE (cand->fn) == TEMPLATE_DECL))
  	{
  	  /* This candidate has been tentatively marked non-strictly viable,
  	     and we didn't compute all argument conversions for it (having
*************** convert_like_internal (conversion *convs
*** 8472,8487 ****
  	    && TYPE_HAS_DEFAULT_CONSTRUCTOR (totype)
  	    && !processing_template_decl)
  	  {
- 	    bool direct = CONSTRUCTOR_IS_DIRECT_INIT (expr);
  	    if (abstract_virtuals_error (NULL_TREE, totype, complain))
  	      return error_mark_node;
  	    expr = build_value_init (totype, complain);
  	    expr = get_target_expr (expr, complain);
  	    if (expr != error_mark_node)
! 	      {
! 		TARGET_EXPR_LIST_INIT_P (expr) = true;
! 		TARGET_EXPR_DIRECT_INIT_P (expr) = direct;
! 	      }
  	    return expr;
  	  }
  
--- 8476,8487 ----
  	    && TYPE_HAS_DEFAULT_CONSTRUCTOR (totype)
  	    && !processing_template_decl)
  	  {
  	    if (abstract_virtuals_error (NULL_TREE, totype, complain))
  	      return error_mark_node;
  	    expr = build_value_init (totype, complain);
  	    expr = get_target_expr (expr, complain);
  	    if (expr != error_mark_node)
! 	      TARGET_EXPR_LIST_INIT_P (expr) = true;
  	    return expr;
  	  }
  
*************** perform_implicit_conversion_flags (tree
*** 13404,13414 ****
    void *p;
    location_t loc = cp_expr_loc_or_input_loc (expr);
  
-   if (TYPE_REF_P (type))
-     expr = mark_lvalue_use (expr);
-   else
-     expr = mark_rvalue_use (expr);
- 
    if (error_operand_p (expr))
      return error_mark_node;
  
--- 13404,13409 ----
*************** set_up_extended_ref_temp (tree decl, tre
*** 13647,13653 ****
    init = cp_fully_fold (init);
    if (TREE_CONSTANT (init))
      {
!       if (literal_type_p (type) && CP_TYPE_CONST_NON_VOLATILE_P (type))
  	{
  	  /* 5.19 says that a constant expression can include an
  	     lvalue-rvalue conversion applied to "a glvalue of literal type
--- 13642,13650 ----
    init = cp_fully_fold (init);
    if (TREE_CONSTANT (init))
      {
!       if (literal_type_p (type)
! 	  && CP_TYPE_CONST_NON_VOLATILE_P (type)
! 	  && !TYPE_HAS_MUTABLE_P (type))
  	{
  	  /* 5.19 says that a constant expression can include an
  	     lvalue-rvalue conversion applied to "a glvalue of literal type
diff -Nrcpad gcc-13.3.0/gcc/cp/constexpr.cc gcc-13.4.0/gcc/cp/constexpr.cc
*** gcc-13.3.0/gcc/cp/constexpr.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/cp/constexpr.cc	Thu Jun  5 16:02:58 2025
*************** build_constexpr_constructor_member_initi
*** 702,717 ****
  
  /* We have an expression tree T that represents a call, either CALL_EXPR
     or AGGR_INIT_EXPR.  If the call is lexically to a named function,
!    retrun the _DECL for that function.  */
  
  static tree
  get_function_named_in_call (tree t)
  {
!   tree fun = cp_get_callee (t);
!   if (fun && TREE_CODE (fun) == ADDR_EXPR
!       && TREE_CODE (TREE_OPERAND (fun, 0)) == FUNCTION_DECL)
!     fun = TREE_OPERAND (fun, 0);
!   return fun;
  }
  
  /* Subroutine of check_constexpr_fundef.  BODY is the body of a function
--- 702,715 ----
  
  /* We have an expression tree T that represents a call, either CALL_EXPR
     or AGGR_INIT_EXPR.  If the call is lexically to a named function,
!    return the _DECL for that function.  */
  
  static tree
  get_function_named_in_call (tree t)
  {
!   tree callee = cp_get_callee (t);
!   tree fun = cp_get_fndecl_from_callee (callee, /*fold*/false);
!   return fun ? fun : callee;
  }
  
  /* Subroutine of check_constexpr_fundef.  BODY is the body of a function
*************** cxx_eval_call_expression (const constexp
*** 2883,2888 ****
--- 2881,2889 ----
       we can only get a trivial function here with -fno-elide-constructors.  */
    gcc_checking_assert (!trivial_fn_p (fun)
  		       || !flag_elide_constructors
+ 		       /* Or it's a call from maybe_thunk_body (111075).  */
+ 		       || (TREE_CODE (t) == CALL_EXPR ? CALL_FROM_THUNK_P (t)
+ 			   : AGGR_INIT_FROM_THUNK_P (t))
  		       /* We don't elide constructors when processing
  			  a noexcept-expression.  */
  		       || cp_noexcept_operand);
*************** cxx_eval_array_reference (const constexp
*** 4301,4315 ****
    else
      val = build_value_init (elem_type, tf_warning_or_error);
  
!   if (!SCALAR_TYPE_P (elem_type))
      {
        new_ctx = *ctx;
        new_ctx.ctor = build_constructor (elem_type, NULL);
        ctx = &new_ctx;
      }
    t = cxx_eval_constant_expression (ctx, val, lval, non_constant_p,
  				    overflow_p);
!   if (!SCALAR_TYPE_P (elem_type) && t != ctx->ctor)
      free_constructor (ctx->ctor);
    return t;
  }
--- 4302,4325 ----
    else
      val = build_value_init (elem_type, tf_warning_or_error);
  
!   /* Create a new constructor only if we don't already have a suitable one.  */
!   const bool new_ctor = (!SCALAR_TYPE_P (elem_type)
! 			 && (!ctx->ctor
! 			     || !same_type_ignoring_top_level_qualifiers_p
! 				  (elem_type, TREE_TYPE (ctx->ctor))));
!   if (new_ctor)
      {
        new_ctx = *ctx;
+       /* We clear the object here.  We used to replace it with T, but that
+ 	 caused problems (101371, 108158); and anyway, T is the initializer,
+ 	 not the target object.  */
+       new_ctx.object = NULL_TREE;
        new_ctx.ctor = build_constructor (elem_type, NULL);
        ctx = &new_ctx;
      }
    t = cxx_eval_constant_expression (ctx, val, lval, non_constant_p,
  				    overflow_p);
!   if (new_ctor && t != ctx->ctor)
      free_constructor (ctx->ctor);
    return t;
  }
*************** cxx_eval_store_expression (const constex
*** 6000,6013 ****
  	  break;
  
  	case REALPART_EXPR:
! 	  gcc_assert (probe == target);
  	  vec_safe_push (refs, probe);
  	  vec_safe_push (refs, TREE_TYPE (probe));
  	  probe = TREE_OPERAND (probe, 0);
  	  break;
  
  	case IMAGPART_EXPR:
! 	  gcc_assert (probe == target);
  	  vec_safe_push (refs, probe);
  	  vec_safe_push (refs, TREE_TYPE (probe));
  	  probe = TREE_OPERAND (probe, 0);
--- 6010,6023 ----
  	  break;
  
  	case REALPART_EXPR:
! 	  gcc_assert (refs->is_empty ());
  	  vec_safe_push (refs, probe);
  	  vec_safe_push (refs, TREE_TYPE (probe));
  	  probe = TREE_OPERAND (probe, 0);
  	  break;
  
  	case IMAGPART_EXPR:
! 	  gcc_assert (refs->is_empty ());
  	  vec_safe_push (refs, probe);
  	  vec_safe_push (refs, TREE_TYPE (probe));
  	  probe = TREE_OPERAND (probe, 0);
*************** maybe_warn_about_constant_value (locatio
*** 6835,6840 ****
--- 6845,6851 ----
        && warn_interference_size
        && !OPTION_SET_P (param_destruct_interfere_size)
        && DECL_CONTEXT (decl) == std_node
+       && DECL_NAME (decl)
        && id_equal (DECL_NAME (decl), "hardware_destructive_interference_size")
        && (LOCATION_FILE (input_location) != main_input_filename
  	  || module_exporting_p ())
*************** cxx_eval_constant_expression (const cons
*** 7777,7782 ****
--- 7788,7799 ----
  		    return t;
  		  }
  	      }
+ 	    else if (TYPE_PTR_P (type)
+ 		    && TREE_CODE (TREE_TYPE (type)) == METHOD_TYPE)
+ 	      /* INTEGER_CST with pointer-to-method type is only used
+ 		 for a virtual method in a pointer to member function.
+ 		 Don't reject those.  */
+ 	      ;
  	    else
  	      {
  		/* This detects for example:
*************** potential_constant_expression_1 (tree t,
*** 9061,9067 ****
         available, so we don't bother with switch tracking.  */
      return true;
  
!   if (TREE_THIS_VOLATILE (t) && want_rval)
      {
        if (flags & tf_error)
  	constexpr_error (loc, fundef_p, "lvalue-to-rvalue conversion of "
--- 9078,9085 ----
         available, so we don't bother with switch tracking.  */
      return true;
  
!   if (TREE_THIS_VOLATILE (t) && want_rval
!       && !NULLPTR_TYPE_P (TREE_TYPE (t)))
      {
        if (flags & tf_error)
  	constexpr_error (loc, fundef_p, "lvalue-to-rvalue conversion of "
diff -Nrcpad gcc-13.3.0/gcc/cp/constraint.cc gcc-13.4.0/gcc/cp/constraint.cc
*** gcc-13.3.0/gcc/cp/constraint.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/cp/constraint.cc	Thu Jun  5 16:02:58 2025
*************** tsubst_valid_expression_requirement (tre
*** 2001,2007 ****
  {
    tsubst_flags_t quiet = info.complain & ~tf_warning_or_error;
    tree r = tsubst_expr (t, args, quiet, info.in_decl);
!   if (convert_to_void (r, ICV_STATEMENT, quiet) != error_mark_node)
      return r;
  
    if (info.diagnose_unsatisfaction_p ())
--- 2001,2009 ----
  {
    tsubst_flags_t quiet = info.complain & ~tf_warning_or_error;
    tree r = tsubst_expr (t, args, quiet, info.in_decl);
!   if (r != error_mark_node
!       && (processing_template_decl
! 	  || convert_to_void (r, ICV_STATEMENT, quiet) != error_mark_node))
      return r;
  
    if (info.diagnose_unsatisfaction_p ())
*************** strictly_subsumes (tree ci, tree tmpl)
*** 3611,3623 ****
    return subsumes (n1, n2) && !subsumes (n2, n1);
  }
  
! /* Returns true when the constraints in CI subsume the
!    associated constraints of TMPL.  */
  
  bool
! weakly_subsumes (tree ci, tree tmpl)
  {
!   tree n1 = get_normalized_constraints_from_info (ci, NULL_TREE);
    tree n2 = get_normalized_constraints_from_decl (tmpl);
  
    return subsumes (n1, n2);
--- 3613,3626 ----
    return subsumes (n1, n2) && !subsumes (n2, n1);
  }
  
! /* Returns true when the template template parameter constraints in CI
!    subsume the associated constraints of the template template argument
!    TMPL.  */
  
  bool
! ttp_subsumes (tree ci, tree tmpl)
  {
!   tree n1 = get_normalized_constraints_from_info (ci, tmpl);
    tree n2 = get_normalized_constraints_from_decl (tmpl);
  
    return subsumes (n1, n2);
diff -Nrcpad gcc-13.3.0/gcc/cp/contracts.cc gcc-13.4.0/gcc/cp/contracts.cc
*** gcc-13.3.0/gcc/cp/contracts.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/cp/contracts.cc	Thu Jun  5 16:02:58 2025
*************** cp_contract_assertion_p (const_tree attr
*** 869,878 ****
  void
  remove_contract_attributes (tree fndecl)
  {
    tree list = NULL_TREE;
    for (tree p = DECL_ATTRIBUTES (fndecl); p; p = TREE_CHAIN (p))
      if (!cxx_contract_attribute_p (p))
!       list = tree_cons (TREE_PURPOSE (p), TREE_VALUE (p), list);
    DECL_ATTRIBUTES (fndecl) = nreverse (list);
  }
  
--- 869,885 ----
  void
  remove_contract_attributes (tree fndecl)
  {
+   if (!flag_contracts)
+     return;
+ 
    tree list = NULL_TREE;
    for (tree p = DECL_ATTRIBUTES (fndecl); p; p = TREE_CHAIN (p))
      if (!cxx_contract_attribute_p (p))
!       {
! 	tree nl = copy_node (p);
! 	TREE_CHAIN (nl) = list;
! 	list = nl;
!       }
    DECL_ATTRIBUTES (fndecl) = nreverse (list);
  }
  
diff -Nrcpad gcc-13.3.0/gcc/cp/cp-tree.h gcc-13.4.0/gcc/cp/cp-tree.h
*** gcc-13.3.0/gcc/cp/cp-tree.h	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/cp/cp-tree.h	Thu Jun  5 16:02:58 2025
*************** extern tree find_template_parameters		(t
*** 8399,8405 ****
  extern bool equivalent_constraints              (tree, tree);
  extern bool equivalently_constrained            (tree, tree);
  extern bool strictly_subsumes			(tree, tree);
! extern bool weakly_subsumes			(tree, tree);
  extern int more_constrained                     (tree, tree);
  extern bool at_least_as_constrained             (tree, tree);
  extern bool constraints_equivalent_p            (tree, tree);
--- 8399,8405 ----
  extern bool equivalent_constraints              (tree, tree);
  extern bool equivalently_constrained            (tree, tree);
  extern bool strictly_subsumes			(tree, tree);
! extern bool ttp_subsumes			(tree, tree);
  extern int more_constrained                     (tree, tree);
  extern bool at_least_as_constrained             (tree, tree);
  extern bool constraints_equivalent_p            (tree, tree);
diff -Nrcpad gcc-13.3.0/gcc/cp/cvt.cc gcc-13.4.0/gcc/cp/cvt.cc
*** gcc-13.3.0/gcc/cp/cvt.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/cp/cvt.cc	Thu Jun  5 16:02:58 2025
*************** cp_get_fndecl_from_callee (tree fn, bool
*** 1001,1008 ****
  {
    if (fn == NULL_TREE)
      return fn;
    if (TREE_CODE (fn) == FUNCTION_DECL)
!     return fn;
    tree type = TREE_TYPE (fn);
    if (type == NULL_TREE || !INDIRECT_TYPE_P (type))
      return NULL_TREE;
--- 1001,1022 ----
  {
    if (fn == NULL_TREE)
      return fn;
+ 
+   /* We evaluate constexpr functions on the original, pre-genericization
+      bodies.  So block-scope extern declarations have not been mapped to
+      declarations in outer scopes.  Use the namespace-scope declaration,
+      if any, so that retrieve_constexpr_fundef can find it (PR111132).  */
+   auto fn_or_local_alias = [] (tree f)
+     {
+       if (DECL_LOCAL_DECL_P (f))
+ 	if (tree alias = DECL_LOCAL_DECL_ALIAS (f))
+ 	  if (alias != error_mark_node)
+ 	    return alias;
+       return f;
+     };
+ 
    if (TREE_CODE (fn) == FUNCTION_DECL)
!     return fn_or_local_alias (fn);
    tree type = TREE_TYPE (fn);
    if (type == NULL_TREE || !INDIRECT_TYPE_P (type))
      return NULL_TREE;
*************** cp_get_fndecl_from_callee (tree fn, bool
*** 1013,1019 ****
        || TREE_CODE (fn) == FDESC_EXPR)
      fn = TREE_OPERAND (fn, 0);
    if (TREE_CODE (fn) == FUNCTION_DECL)
!     return fn;
    return NULL_TREE;
  }
  
--- 1027,1033 ----
        || TREE_CODE (fn) == FDESC_EXPR)
      fn = TREE_OPERAND (fn, 0);
    if (TREE_CODE (fn) == FUNCTION_DECL)
!     return fn_or_local_alias (fn);
    return NULL_TREE;
  }
  
diff -Nrcpad gcc-13.3.0/gcc/cp/cxxapi-data.csv gcc-13.4.0/gcc/cp/cxxapi-data.csv
*** gcc-13.3.0/gcc/cp/cxxapi-data.csv	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/cp/cxxapi-data.csv	Thu Jun  5 16:02:58 2025
***************
*** 460,466 ****
  # unimplemented <mdspan>,default_accessor,1,no
  # unimplemented <mdspan>,mdspan,1,cxx23
  <memory>,pointer_traits,1,cxx11
! <memory>,to_address,1,cxx11
  <memory>,align,1,cxx11
  <memory>,assume_aligned,1,cxx20
  <memory>,allocator_arg_t,1,cxx11
--- 460,466 ----
  # unimplemented <mdspan>,default_accessor,1,no
  # unimplemented <mdspan>,mdspan,1,cxx23
  <memory>,pointer_traits,1,cxx11
! <memory>,to_address,1,cxx20
  <memory>,align,1,cxx11
  <memory>,assume_aligned,1,cxx20
  <memory>,allocator_arg_t,1,cxx11
diff -Nrcpad gcc-13.3.0/gcc/cp/decl.cc gcc-13.4.0/gcc/cp/decl.cc
*** gcc-13.3.0/gcc/cp/decl.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/cp/decl.cc	Thu Jun  5 16:02:58 2025
*************** fold_sizeof_expr (tree t)
*** 11210,11215 ****
--- 11210,11216 ----
  				    false, false);
    if (r == error_mark_node)
      r = size_one_node;
+   r = cp_fold_convert (size_type_node, r);
    return r;
  }
  
*************** grokdeclarator (const cp_declarator *dec
*** 14361,14367 ****
  	  }
  	else if (!staticp
  		 && ((current_class_type
! 		      && same_type_p (type, current_class_type))
  		     || (!dependent_type_p (type)
  			 && !COMPLETE_TYPE_P (complete_type (type))
  			 && (!complete_or_array_type_p (type)
--- 14362,14369 ----
  	  }
  	else if (!staticp
  		 && ((current_class_type
! 		      && same_type_p (TYPE_MAIN_VARIANT (type),
! 				      current_class_type))
  		     || (!dependent_type_p (type)
  			 && !COMPLETE_TYPE_P (complete_type (type))
  			 && (!complete_or_array_type_p (type)
*************** grokdeclarator (const cp_declarator *dec
*** 14856,14862 ****
      /* Record constancy and volatility on the DECL itself .  There's
         no need to do this when processing a template; we'll do this
         for the instantiated declaration based on the type of DECL.  */
!     if (!processing_template_decl)
        cp_apply_type_quals_to_decl (type_quals, decl);
  
      return decl;
--- 14858,14869 ----
      /* Record constancy and volatility on the DECL itself .  There's
         no need to do this when processing a template; we'll do this
         for the instantiated declaration based on the type of DECL.  */
!     if (!processing_template_decl
! 	/* Don't do it for instantiated variable templates either,
! 	   cp_apply_type_quals_to_decl should have been called on it
! 	   already and might have been overridden in cp_finish_decl
! 	   if initializer needs runtime initialization.  */
! 	&& (!VAR_P (decl) || !DECL_TEMPLATE_INSTANTIATED (decl)))
        cp_apply_type_quals_to_decl (type_quals, decl);
  
      return decl;
*************** build_enumerator (tree name, tree value,
*** 16905,16913 ****
    tree type;
  
    /* scalar_constant_value will pull out this expression, so make sure
!      it's folded as appropriate.  */
    if (processing_template_decl)
!     value = fold_non_dependent_expr (value);
  
    /* If the VALUE was erroneous, pretend it wasn't there; that will
       result in the enum being assigned the next value in sequence.  */
--- 16912,16926 ----
    tree type;
  
    /* scalar_constant_value will pull out this expression, so make sure
!      it's folded as appropriate.
! 
!      Creating a TARGET_EXPR in a template breaks when substituting, and
!      here we would create it for instance when using a class prvalue with
!      a user-defined conversion function.  So don't use such a tree.  We
!      instantiate VALUE here to get errors about bad enumerators even in
!      a template that does not get instantiated.  */
    if (processing_template_decl)
!     value = maybe_fold_non_dependent_expr (value);
  
    /* If the VALUE was erroneous, pretend it wasn't there; that will
       result in the enum being assigned the next value in sequence.  */
diff -Nrcpad gcc-13.3.0/gcc/cp/decl2.cc gcc-13.4.0/gcc/cp/decl2.cc
*** gcc-13.3.0/gcc/cp/decl2.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/cp/decl2.cc	Thu Jun  5 16:02:58 2025
*************** build_anon_union_vars (tree type, tree o
*** 1854,1860 ****
  
        if (processing_template_decl)
  	ref = build_min_nt_loc (UNKNOWN_LOCATION, COMPONENT_REF, object,
! 				DECL_NAME (field), NULL_TREE);
        else
  	ref = build_class_member_access_expr (object, field, NULL_TREE,
  					      false, tf_warning_or_error);
--- 1854,1860 ----
  
        if (processing_template_decl)
  	ref = build_min_nt_loc (UNKNOWN_LOCATION, COMPONENT_REF, object,
! 				field, NULL_TREE);
        else
  	ref = build_class_member_access_expr (object, field, NULL_TREE,
  					      false, tf_warning_or_error);
*************** static void
*** 2075,2081 ****
  mark_vtable_entries (tree decl, vec<tree> &consteval_vtables)
  {
    /* It's OK for the vtable to refer to deprecated virtual functions.  */
!   warning_sentinel w(warn_deprecated_decl);
  
    bool consteval_seen = false;
  
--- 2075,2082 ----
  mark_vtable_entries (tree decl, vec<tree> &consteval_vtables)
  {
    /* It's OK for the vtable to refer to deprecated virtual functions.  */
!   auto du = make_temp_override (deprecated_state,
! 				UNAVAILABLE_DEPRECATED_SUPPRESS);
  
    bool consteval_seen = false;
  
*************** decl_maybe_constant_var_p (tree decl)
*** 4521,4527 ****
    tree type = TREE_TYPE (decl);
    if (!VAR_P (decl))
      return false;
!   if (DECL_DECLARED_CONSTEXPR_P (decl) && !TREE_THIS_VOLATILE (decl))
      return true;
    if (DECL_HAS_VALUE_EXPR_P (decl))
      /* A proxy isn't constant.  */
--- 4522,4529 ----
    tree type = TREE_TYPE (decl);
    if (!VAR_P (decl))
      return false;
!   if (DECL_DECLARED_CONSTEXPR_P (decl)
!       && (!TREE_THIS_VOLATILE (decl) || NULLPTR_TYPE_P (type)))
      return true;
    if (DECL_HAS_VALUE_EXPR_P (decl))
      /* A proxy isn't constant.  */
*************** mark_used (tree decl, tsubst_flags_t com
*** 5791,5796 ****
--- 5793,5800 ----
       find out its type.  For OpenMP user defined reductions, we need them
       instantiated for reduction clauses which inline them by hand directly.  */
    if (undeduced_auto_decl (decl)
+       || (VAR_P (decl)
+ 	  && VAR_HAD_UNKNOWN_BOUND (decl))
        || (TREE_CODE (decl) == FUNCTION_DECL
  	  && DECL_OMP_DECLARE_REDUCTION_P (decl)))
      maybe_instantiate_decl (decl);
diff -Nrcpad gcc-13.3.0/gcc/cp/init.cc gcc-13.4.0/gcc/cp/init.cc
*** gcc-13.3.0/gcc/cp/init.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/cp/init.cc	Thu Jun  5 16:02:58 2025
*************** build_new_1 (vec<tree, va_gc> **placemen
*** 3663,3668 ****
--- 3663,3673 ----
                  error ("parenthesized initializer in array new");
  	      return error_mark_node;
              }
+ 
+ 	  /* Collect flags for disabling subobject cleanups once the complete
+ 	     object is fully constructed.  */
+ 	  vec<tree, va_gc> *flags = make_tree_vector ();
+ 
  	  init_expr
  	    = build_vec_init (data_addr,
  			      cp_build_binary_op (input_location,
*************** build_new_1 (vec<tree, va_gc> **placemen
*** 3672,3678 ****
  			      vecinit,
  			      explicit_value_init_p,
  			      /*from_array=*/0,
!                               complain);
  	}
        else
  	{
--- 3677,3704 ----
  			      vecinit,
  			      explicit_value_init_p,
  			      /*from_array=*/0,
! 			      complain,
! 			      &flags);
! 
! 	  for (tree f : flags)
! 	    {
! 	      /* See maybe_push_temp_cleanup.  */
! 	      tree d = f;
! 	      tree i = boolean_false_node;
! 	      if (TREE_CODE (f) == TREE_LIST)
! 		{
! 		  /* To disable a build_vec_init cleanup, set
! 		     iterator = maxindex.  */
! 		  d = TREE_PURPOSE (f);
! 		  i = TREE_VALUE (f);
! 		  ggc_free (f);
! 		}
! 	      tree cl = build2 (MODIFY_EXPR, TREE_TYPE (d), d, i);
! 	      cl = convert_to_void (cl, ICV_STATEMENT, complain);
! 	      init_expr = build2 (COMPOUND_EXPR, void_type_node,
! 				  init_expr, cl);
! 	    }
! 	  release_tree_vector (flags);
  	}
        else
  	{
*************** build_new_1 (vec<tree, va_gc> **placemen
*** 3781,3787 ****
  	  tree end, sentry, begin;
  
  	  begin = get_target_expr (boolean_true_node);
- 	  CLEANUP_EH_ONLY (begin) = 1;
  
  	  sentry = TARGET_EXPR_SLOT (begin);
  
--- 3807,3812 ----
*************** build_vec_init (tree base, tree maxindex
*** 4859,4865 ****
  	 But for non-classes, that's the same as value-initialization.  */
        if (empty_list)
  	{
! 	  if (cxx_dialect >= cxx11 && AGGREGATE_TYPE_P (type))
  	    {
  	      init = build_constructor (init_list_type_node, NULL);
  	    }
--- 4884,4892 ----
  	 But for non-classes, that's the same as value-initialization.  */
        if (empty_list)
  	{
! 	  if (cxx_dialect >= cxx11
! 	      && (CLASS_TYPE_P (type)
! 		  || TREE_CODE (type) == ARRAY_TYPE))
  	    {
  	      init = build_constructor (init_list_type_node, NULL);
  	    }
*************** build_vec_init (tree base, tree maxindex
*** 5017,5022 ****
--- 5044,5058 ----
      {
        if (!saw_non_const)
  	{
+ 	  /* If we're not generating the loop, we don't need to reset the
+ 	     iterator.  */
+ 	  if (cleanup_flags
+ 	      && !vec_safe_is_empty (*cleanup_flags))
+ 	    {
+ 	      auto l = (*cleanup_flags)->last ();
+ 	      gcc_assert (TREE_PURPOSE (l) == iterator);
+ 	      (*cleanup_flags)->pop ();
+ 	    }
  	  tree const_init = build_constructor (atype, const_vec);
  	  return build2 (INIT_EXPR, atype, obase, const_init);
  	}
diff -Nrcpad gcc-13.3.0/gcc/cp/method.cc gcc-13.4.0/gcc/cp/method.cc
*** gcc-13.3.0/gcc/cp/method.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/cp/method.cc	Thu Jun  5 16:02:58 2025
*************** along with GCC; see the file COPYING3.
*** 26,31 ****
--- 26,32 ----
  #include "coretypes.h"
  #include "target.h"
  #include "cp-tree.h"
+ #include "decl.h"
  #include "stringpool.h"
  #include "cgraph.h"
  #include "varasm.h"
*************** use_thunk (tree thunk_fndecl, bool emit_
*** 283,288 ****
--- 284,294 ----
    /* Thunks are always addressable; they only appear in vtables.  */
    TREE_ADDRESSABLE (thunk_fndecl) = 1;
  
+   /* Don't diagnose deprecated or unavailable functions just because they
+      have thunks emitted for them.  */
+   auto du = make_temp_override (deprecated_state,
+                                 UNAVAILABLE_DEPRECATED_SUPPRESS);
+ 
    /* Figure out what function is being thunked to.  It's referenced in
       this translation unit.  */
    TREE_ADDRESSABLE (function) = 1;
*************** synthesize_method (tree fndecl)
*** 1797,1802 ****
--- 1803,1809 ----
       it now.  */
    push_deferring_access_checks (dk_no_deferred);
  
+   cp_evaluated ev;
    if (! context)
      push_to_top_level ();
    else if (nested)
*************** build_stub_object (tree reftype)
*** 1906,1911 ****
--- 1913,1939 ----
    return convert_from_reference (stub);
  }
  
+ /* Build a std::declval<TYPE>() expression and return it.  */
+ 
+ tree
+ build_trait_object (tree type)
+ {
+   /* TYPE can't be a function with cv-/ref-qualifiers: std::declval is
+      defined as
+ 
+        template<class T>
+        typename std::add_rvalue_reference<T>::type declval() noexcept;
+ 
+      and std::add_rvalue_reference yields T when T is a function with
+      cv- or ref-qualifiers, making the definition ill-formed.  */
+   if (FUNC_OR_METHOD_TYPE_P (type)
+       && (type_memfn_quals (type) != TYPE_UNQUALIFIED
+ 	  || type_memfn_rqual (type) != REF_QUAL_NONE))
+     return error_mark_node;
+ 
+   return build_stub_object (type);
+ }
+ 
  /* Determine which function will be called when looking up NAME in TYPE,
     called with a single ARGTYPE argument, or no argument if ARGTYPE is
     null.  FLAGS and COMPLAIN are as for build_new_method_call.
*************** static tree
*** 2054,2061 ****
  assignable_expr (tree to, tree from)
  {
    cp_unevaluated cp_uneval_guard;
!   to = build_stub_object (to);
!   from = build_stub_object (from);
    tree r = cp_build_modify_expr (input_location, to, NOP_EXPR, from, tf_none);
    return r;
  }
--- 2082,2089 ----
  assignable_expr (tree to, tree from)
  {
    cp_unevaluated cp_uneval_guard;
!   to = build_trait_object (to);
!   from = build_trait_object (from);
    tree r = cp_build_modify_expr (input_location, to, NOP_EXPR, from, tf_none);
    return r;
  }
*************** ref_xes_from_temporary (tree to, tree fr
*** 2234,2240 ****
      return false;
    /* We don't check is_constructible<T, U>: if T isn't constructible
       from U, we won't be able to create a conversion.  */
!   tree val = build_stub_object (from);
    if (!TYPE_REF_P (from) && TREE_CODE (from) != FUNCTION_TYPE)
      val = CLASS_TYPE_P (from) ? force_rvalue (val, tf_none) : rvalue (val);
    return ref_conv_binds_to_temporary (to, val, direct_init_p).is_true ();
--- 2262,2270 ----
      return false;
    /* We don't check is_constructible<T, U>: if T isn't constructible
       from U, we won't be able to create a conversion.  */
!   tree val = build_trait_object (from);
!   if (val == error_mark_node)
!     return false;
    if (!TYPE_REF_P (from) && TREE_CODE (from) != FUNCTION_TYPE)
      val = CLASS_TYPE_P (from) ? force_rvalue (val, tf_none) : rvalue (val);
    return ref_conv_binds_to_temporary (to, val, direct_init_p).is_true ();
*************** is_convertible_helper (tree from, tree t
*** 2249,2255 ****
    if (VOID_TYPE_P (from) && VOID_TYPE_P (to))
      return integer_one_node;
    cp_unevaluated u;
!   tree expr = build_stub_object (from);
    deferring_access_check_sentinel acs (dk_no_deferred);
    return perform_implicit_conversion (to, expr, tf_none);
  }
--- 2279,2293 ----
    if (VOID_TYPE_P (from) && VOID_TYPE_P (to))
      return integer_one_node;
    cp_unevaluated u;
!   tree expr = build_trait_object (from);
!   /* std::is_{,nothrow_}convertible test whether the imaginary function
!      definition
! 
!        To test() { return std::declval<From>(); }
! 
!      is well-formed.  A function can't return a function.  */
!   if (FUNC_OR_METHOD_TYPE_P (to) || expr == error_mark_node)
!     return error_mark_node;
    deferring_access_check_sentinel acs (dk_no_deferred);
    return perform_implicit_conversion (to, expr, tf_none);
  }
diff -Nrcpad gcc-13.3.0/gcc/cp/name-lookup.cc gcc-13.4.0/gcc/cp/name-lookup.cc
*** gcc-13.3.0/gcc/cp/name-lookup.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/cp/name-lookup.cc	Thu Jun  5 16:02:58 2025
*************** pushdecl (tree decl, bool hiding)
*** 3743,3749 ****
        if (old && anticipated_builtin_p (old))
  	old = OVL_CHAIN (old);
  
!       check_template_shadow (decl);
  
        if (DECL_DECLARES_FUNCTION_P (decl))
  	{
--- 3743,3752 ----
        if (old && anticipated_builtin_p (old))
  	old = OVL_CHAIN (old);
  
!       if (hiding)
! 	; /* Hidden bindings don't shadow anything.  */
!       else
! 	check_template_shadow (decl);
  
        if (DECL_DECLARES_FUNCTION_P (decl))
  	{
*************** tree lookup_qualified_name (tree t, cons
*** 6915,6924 ****
  static bool
  qualified_namespace_lookup (tree scope, name_lookup *lookup)
  {
!   timevar_start (TV_NAME_LOOKUP);
    query_oracle (lookup->name);
    bool found = lookup->search_qualified (ORIGINAL_NAMESPACE (scope));
-   timevar_stop (TV_NAME_LOOKUP);
    return found;
  }
  
--- 6918,6926 ----
  static bool
  qualified_namespace_lookup (tree scope, name_lookup *lookup)
  {
!   auto_cond_timevar tv (TV_NAME_LOOKUP);
    query_oracle (lookup->name);
    bool found = lookup->search_qualified (ORIGINAL_NAMESPACE (scope));
    return found;
  }
  
*************** maybe_push_to_top_level (tree d)
*** 8244,8253 ****
  {
    /* Push if D isn't function-local, or is a lambda function, for which name
       resolution is already done.  */
!   bool push_to_top
!     = !(current_function_decl
! 	&& !LAMBDA_FUNCTION_P (d)
! 	&& decl_function_context (d) == current_function_decl);
  
    if (push_to_top)
      push_to_top_level ();
--- 8246,8258 ----
  {
    /* Push if D isn't function-local, or is a lambda function, for which name
       resolution is already done.  */
!   const bool push_to_top
!     = (LAMBDA_FUNCTION_P (d)
!        || (TREE_CODE (d) == TYPE_DECL
! 	   && TREE_TYPE (d)
! 	   && LAMBDA_TYPE_P (TREE_TYPE (d)))
!        || !current_function_decl
!        || !decl_function_context (d));
  
    if (push_to_top)
      push_to_top_level ();
diff -Nrcpad gcc-13.3.0/gcc/cp/optimize.cc gcc-13.4.0/gcc/cp/optimize.cc
*** gcc-13.3.0/gcc/cp/optimize.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/cp/optimize.cc	Thu Jun  5 16:02:58 2025
*************** along with GCC; see the file COPYING3.
*** 23,28 ****
--- 23,29 ----
  #include "coretypes.h"
  #include "target.h"
  #include "cp-tree.h"
+ #include "decl.h"
  #include "stringpool.h"
  #include "cgraph.h"
  #include "debug.h"
*************** maybe_thunk_body (tree fn, bool force)
*** 288,293 ****
--- 289,299 ----
    if (ctor_omit_inherited_parms (fns[0]))
      return 0;
  
+   /* Don't diagnose deprecated or unavailable cdtors just because they
+      have thunks emitted for them.  */
+   auto du = make_temp_override (deprecated_state,
+ 				UNAVAILABLE_DEPRECATED_SUPPRESS);
+ 
    DECL_ABSTRACT_P (fn) = false;
    if (!DECL_WEAK (fn))
      {
diff -Nrcpad gcc-13.3.0/gcc/cp/parser.cc gcc-13.4.0/gcc/cp/parser.cc
*** gcc-13.3.0/gcc/cp/parser.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/cp/parser.cc	Thu Jun  5 16:02:58 2025
*************** cp_parser_lambda_declarator_opt (cp_pars
*** 11558,11572 ****
       an opening angle if present.  */
    if (cp_lexer_next_token_is (parser->lexer, CPP_LESS))
      {
!       if (cxx_dialect < cxx14)
! 	pedwarn (parser->lexer->next_token->location, OPT_Wc__14_extensions,
! 		 "lambda templates are only available with "
! 		 "%<-std=c++14%> or %<-std=gnu++14%>");
!       else if (pedantic && cxx_dialect < cxx20)
  	pedwarn (parser->lexer->next_token->location, OPT_Wc__20_extensions,
  		 "lambda templates are only available with "
  		 "%<-std=c++20%> or %<-std=gnu++20%>");
  
        cp_lexer_consume_token (parser->lexer);
  
        template_param_list = cp_parser_template_parameter_list (parser);
--- 11558,11574 ----
       an opening angle if present.  */
    if (cp_lexer_next_token_is (parser->lexer, CPP_LESS))
      {
!       if (cxx_dialect < cxx20
! 	  && (pedantic || cxx_dialect < cxx14))
  	pedwarn (parser->lexer->next_token->location, OPT_Wc__20_extensions,
  		 "lambda templates are only available with "
  		 "%<-std=c++20%> or %<-std=gnu++20%>");
  
+       /* Even though the whole lambda may be a default argument, its
+ 	 template-parameter-list is a context where it's OK to create
+ 	 new parameters.  */
+       auto lvf = make_temp_override (parser->local_variables_forbidden_p, 0u);
+ 
        cp_lexer_consume_token (parser->lexer);
  
        template_param_list = cp_parser_template_parameter_list (parser);
*************** warn_for_range_copy (tree decl, tree exp
*** 13854,13864 ****
    else if (!CP_TYPE_CONST_P (type))
      return;
  
!   /* Since small trivially copyable types are cheap to copy, we suppress the
!      warning for them.  64B is a common size of a cache line.  */
    if (TREE_CODE (TYPE_SIZE_UNIT (type)) != INTEGER_CST
        || (tree_to_uhwi (TYPE_SIZE_UNIT (type)) <= 64
! 	  && trivially_copyable_p (type)))
      return;
  
    /* If we can initialize a reference directly, suggest that to avoid the
--- 13856,13867 ----
    else if (!CP_TYPE_CONST_P (type))
      return;
  
!   /* Since small trivially constructible types are cheap to construct, we
!      suppress the warning for them.  64B is a common size of a cache line.  */
!   tree list = build_tree_list (NULL_TREE, TREE_TYPE (expr));
    if (TREE_CODE (TYPE_SIZE_UNIT (type)) != INTEGER_CST
        || (tree_to_uhwi (TYPE_SIZE_UNIT (type)) <= 64
! 	  && is_trivially_xible (INIT_EXPR, type, list)))
      return;
  
    /* If we can initialize a reference directly, suggest that to avoid the
*************** cp_parser_placeholder_type_specifier (cp
*** 20206,20213 ****
        /* In a default argument we may not be creating new parameters.  */
        if (parser->local_variables_forbidden_p & LOCAL_VARS_FORBIDDEN)
  	{
! 	  /* If this assert turns out to be false, do error() instead.  */
! 	  gcc_assert (tentative);
  	  return error_mark_node;
  	}
        return build_constrained_parameter (con, proto, args);
--- 20209,20216 ----
        /* In a default argument we may not be creating new parameters.  */
        if (parser->local_variables_forbidden_p & LOCAL_VARS_FORBIDDEN)
  	{
! 	  if (!tentative)
! 	    error_at (loc, "invalid use of concept-name %qD", con);
  	  return error_mark_node;
  	}
        return build_constrained_parameter (con, proto, args);
*************** cp_parser_class_specifier (cp_parser* pa
*** 26341,26346 ****
--- 26344,26350 ----
      {
        tree decl;
        tree class_type = NULL_TREE;
+       tree class_type_fields = NULL_TREE;
        tree pushed_scope = NULL_TREE;
        unsigned ix;
        cp_default_arg_entry *e;
*************** cp_parser_class_specifier (cp_parser* pa
*** 26354,26359 ****
--- 26358,26390 ----
  	  vec_safe_truncate (unparsed_funs_with_definitions, 0);
  	}
  
+       auto switch_to_class = [&] (tree t)
+ 	{
+ 	  if (class_type != t)
+ 	    {
+ 	      /* cp_parser_late_parsing_default_args etc. could have changed
+ 		 TYPE_FIELDS (class_type), propagate that to all variants.  */
+ 	      if (class_type
+ 		  && RECORD_OR_UNION_TYPE_P (class_type)
+ 		  && TYPE_FIELDS (class_type) != class_type_fields)
+ 		for (tree variant = TYPE_NEXT_VARIANT (class_type);
+ 		     variant; variant = TYPE_NEXT_VARIANT (variant))
+ 		  TYPE_FIELDS (variant) = TYPE_FIELDS (class_type);
+ 	      if (pushed_scope)
+ 		pop_scope (pushed_scope);
+ 	      class_type = t;
+ 	      class_type_fields = NULL_TREE;
+ 	      if (t)
+ 		{
+ 		  if (RECORD_OR_UNION_TYPE_P (class_type))
+ 		    class_type_fields = TYPE_FIELDS (class_type);
+ 		  pushed_scope = push_scope (class_type);
+ 		}
+ 	      else
+ 		pushed_scope = NULL_TREE;
+ 	    }
+ 	};
+ 
        /* In a first pass, parse default arguments to the functions.
  	 Then, in a second pass, parse the bodies of the functions.
  	 This two-phased approach handles cases like:
*************** cp_parser_class_specifier (cp_parser* pa
*** 26369,26381 ****
  	  decl = e->decl;
  	  /* If there are default arguments that have not yet been processed,
  	     take care of them now.  */
! 	  if (class_type != e->class_type)
! 	    {
! 	      if (pushed_scope)
! 		pop_scope (pushed_scope);
! 	      class_type = e->class_type;
! 	      pushed_scope = push_scope (class_type);
! 	    }
  	  /* Make sure that any template parameters are in scope.  */
  	  maybe_begin_member_template_processing (decl);
  	  /* Parse the default argument expressions.  */
--- 26400,26406 ----
  	  decl = e->decl;
  	  /* If there are default arguments that have not yet been processed,
  	     take care of them now.  */
! 	  switch_to_class (e->class_type);
  	  /* Make sure that any template parameters are in scope.  */
  	  maybe_begin_member_template_processing (decl);
  	  /* Parse the default argument expressions.  */
*************** cp_parser_class_specifier (cp_parser* pa
*** 26391,26403 ****
        FOR_EACH_VEC_SAFE_ELT (unparsed_noexcepts, ix, decl)
  	{
  	  tree ctx = DECL_CONTEXT (decl);
! 	  if (class_type != ctx)
! 	    {
! 	      if (pushed_scope)
! 		pop_scope (pushed_scope);
! 	      class_type = ctx;
! 	      pushed_scope = push_scope (class_type);
! 	    }
  
  	  tree def_parse = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl));
  	  def_parse = TREE_PURPOSE (def_parse);
--- 26416,26422 ----
        FOR_EACH_VEC_SAFE_ELT (unparsed_noexcepts, ix, decl)
  	{
  	  tree ctx = DECL_CONTEXT (decl);
! 	  switch_to_class (ctx);
  
  	  tree def_parse = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl));
  	  def_parse = TREE_PURPOSE (def_parse);
*************** cp_parser_class_specifier (cp_parser* pa
*** 26453,26465 ****
        FOR_EACH_VEC_SAFE_ELT (unparsed_nsdmis, ix, decl)
  	{
  	  tree ctx = type_context_for_name_lookup (decl);
! 	  if (class_type != ctx)
! 	    {
! 	      if (pushed_scope)
! 		pop_scope (pushed_scope);
! 	      class_type = ctx;
! 	      pushed_scope = push_scope (class_type);
! 	    }
  	  inject_this_parameter (class_type, TYPE_UNQUALIFIED);
  	  cp_parser_late_parsing_nsdmi (parser, decl);
  	}
--- 26472,26478 ----
        FOR_EACH_VEC_SAFE_ELT (unparsed_nsdmis, ix, decl)
  	{
  	  tree ctx = type_context_for_name_lookup (decl);
! 	  switch_to_class (ctx);
  	  inject_this_parameter (class_type, TYPE_UNQUALIFIED);
  	  cp_parser_late_parsing_nsdmi (parser, decl);
  	}
*************** cp_parser_class_specifier (cp_parser* pa
*** 26469,26481 ****
        FOR_EACH_VEC_SAFE_ELT (unparsed_contracts, ix, decl)
  	{
  	  tree ctx = DECL_CONTEXT (decl);
! 	  if (class_type != ctx)
! 	    {
! 	      if (pushed_scope)
! 		pop_scope (pushed_scope);
! 	      class_type = ctx;
! 	      pushed_scope = push_scope (class_type);
! 	    }
  
  	  temp_override<tree> cfd(current_function_decl, decl);
  
--- 26482,26488 ----
        FOR_EACH_VEC_SAFE_ELT (unparsed_contracts, ix, decl)
  	{
  	  tree ctx = DECL_CONTEXT (decl);
! 	  switch_to_class (ctx);
  
  	  temp_override<tree> cfd(current_function_decl, decl);
  
*************** cp_parser_class_specifier (cp_parser* pa
*** 26516,26523 ****
  
        current_class_ptr = NULL_TREE;
        current_class_ref = NULL_TREE;
!       if (pushed_scope)
! 	pop_scope (pushed_scope);
  
        /* Now parse the body of the functions.  */
        if (flag_openmp)
--- 26523,26529 ----
  
        current_class_ptr = NULL_TREE;
        current_class_ref = NULL_TREE;
!       switch_to_class (NULL_TREE);
  
        /* Now parse the body of the functions.  */
        if (flag_openmp)
*************** cp_parser_cache_defarg (cp_parser *parse
*** 34946,34952 ****
  
  	  /* If we run out of tokens, issue an error message.  */
  	case CPP_EOF:
- 	case CPP_PRAGMA_EOL:
  	  error_at (token->location, "file ends in default argument");
  	  return error_mark_node;
  
--- 34952,34957 ----
diff -Nrcpad gcc-13.3.0/gcc/cp/pt.cc gcc-13.4.0/gcc/cp/pt.cc
*** gcc-13.3.0/gcc/cp/pt.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/cp/pt.cc	Thu Jun  5 16:02:58 2025
*************** check_for_bare_parameter_packs (tree t,
*** 4334,4339 ****
--- 4334,4340 ----
  	tree pack = TREE_VALUE (parameter_packs);
  	if (is_capture_proxy (pack)
  	    || (TREE_CODE (pack) == PARM_DECL
+ 		&& DECL_CONTEXT (pack)
  		&& DECL_CONTEXT (DECL_CONTEXT (pack)) == lam))
  	  break;
        }
*************** is_compatible_template_arg (tree parm, t
*** 8390,8396 ****
          return false;
      }
  
!   return weakly_subsumes (parm_cons, arg);
  }
  
  // Convert a placeholder argument into a binding to the original
--- 8391,8397 ----
          return false;
      }
  
!   return ttp_subsumes (parm_cons, arg);
  }
  
  // Convert a placeholder argument into a binding to the original
*************** lookup_and_finish_template_variable (tre
*** 10427,10433 ****
       deduction to work.  */
    complain &= ~tf_partial;
    var = finish_template_variable (var, complain);
!   mark_used (var);
    return convert_from_reference (var);
  }
  
--- 10428,10434 ----
       deduction to work.  */
    complain &= ~tf_partial;
    var = finish_template_variable (var, complain);
!   mark_used (var, complain);
    return convert_from_reference (var);
  }
  
*************** apply_late_template_attributes (tree *de
*** 12070,12075 ****
--- 12071,12078 ----
    auto o4 = make_temp_override (scope_chain->omp_declare_target_attribute,
  				NULL);
    auto o5 = make_temp_override (scope_chain->omp_begin_assumes, NULL);
+   auto o6 = make_temp_override (target_option_current_node,
+ 				target_option_default_node);
  
    cplus_decl_attributes (decl_p, late_attrs, attr_flags);
  
*************** use_pack_expansion_extra_args_p (tree t,
*** 12819,12825 ****
  
        if (has_expansion_arg && has_non_expansion_arg)
  	{
! 	  gcc_checking_assert (false);
  	  return true;
  	}
      }
--- 12822,12837 ----
  
        if (has_expansion_arg && has_non_expansion_arg)
  	{
! 	  /* We can get here with:
! 
! 	      template <class... Ts> struct X {
! 		template <class... Us> using Y = Z<void(Ts, Us)...>;
! 	      };
! 	      template <class A, class... P>
! 	      using foo = X<int, int>::Y<A, P...>;
! 
! 	     where we compare int and A and then the second int and P...,
! 	     whose expansion-ness doesn't match, but that's OK.  */
  	  return true;
  	}
      }
*************** tsubst_expr (tree t, tree args, tsubst_f
*** 19926,19938 ****
  				    templated_operator_saved_lookups (t),
  				    complain));
  
-     case ANNOTATE_EXPR:
-       tmp = RECUR (TREE_OPERAND (t, 0));
-       RETURN (build3_loc (EXPR_LOCATION (t), ANNOTATE_EXPR,
- 			  TREE_TYPE (tmp), tmp,
- 			  RECUR (TREE_OPERAND (t, 1)),
- 			  RECUR (TREE_OPERAND (t, 2))));
- 
      case PREDICT_EXPR:
        RETURN (add_stmt (copy_node (t)));
  
--- 19938,19943 ----
*************** tsubst_copy_and_build (tree t,
*** 21862,21867 ****
--- 21867,21879 ----
  	RETURN (op);
        }
  
+     case ANNOTATE_EXPR:
+       op1 = RECUR (TREE_OPERAND (t, 0));
+       RETURN (build3_loc (EXPR_LOCATION (t), ANNOTATE_EXPR,
+ 			  TREE_TYPE (op1), op1,
+ 			  RECUR (TREE_OPERAND (t, 1)),
+ 			  RECUR (TREE_OPERAND (t, 2))));
+ 
      default:
        /* Handle Objective-C++ constructs, if appropriate.  */
        {
*************** mark_template_arguments_used (tree tmpl,
*** 22007,22012 ****
--- 22019,22030 ----
  	      gcc_checking_assert (ok || seen_error ());
  	    }
  	}
+       /* A member function pointer.  */
+       else if (TREE_CODE (arg) == PTRMEM_CST)
+ 	{
+ 	  bool ok = mark_used (PTRMEM_CST_MEMBER (arg), tf_none);
+ 	  gcc_checking_assert (ok || seen_error ());
+ 	}
        /* A class NTTP argument.  */
        else if (VAR_P (arg)
  	       && DECL_NTTP_OBJECT_P (arg))
*************** maybe_instantiate_noexcept (tree fn, tsu
*** 26772,26778 ****
  	}
        else if (push_tinst_level (fn))
  	{
! 	  push_to_top_level ();
  	  push_access_scope (fn);
  	  push_deferring_access_checks (dk_no_deferred);
  	  input_location = DECL_SOURCE_LOCATION (fn);
--- 26790,26796 ----
  	}
        else if (push_tinst_level (fn))
  	{
! 	  const bool push_to_top = maybe_push_to_top_level (fn);
  	  push_access_scope (fn);
  	  push_deferring_access_checks (dk_no_deferred);
  	  input_location = DECL_SOURCE_LOCATION (fn);
*************** maybe_instantiate_noexcept (tree fn, tsu
*** 26809,26815 ****
  	  pop_deferring_access_checks ();
  	  pop_access_scope (fn);
  	  pop_tinst_level ();
! 	  pop_from_top_level ();
  	}
        else
  	spec = noexcept_false_spec;
--- 26827,26833 ----
  	  pop_deferring_access_checks ();
  	  pop_access_scope (fn);
  	  pop_tinst_level ();
! 	  maybe_pop_from_top_level (push_to_top);
  	}
        else
  	spec = noexcept_false_spec;
*************** type_dependent_expression_p (tree expres
*** 28494,28502 ****
  
        if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
  	{
! 	  if (any_dependent_template_arguments_p
! 	      (TREE_OPERAND (expression, 1)))
  	    return true;
  	  expression = TREE_OPERAND (expression, 0);
  	  if (identifier_p (expression))
  	    return true;
--- 28512,28526 ----
  
        if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
  	{
! 	  tree args = TREE_OPERAND (expression, 1);
! 	  if (any_dependent_template_arguments_p (args))
  	    return true;
+ 	  /* Arguments of a function template-id aren't necessarily coerced
+ 	     yet so we must conservatively assume that the address (and not
+ 	     just value) of the argument matters as per [temp.dep.temp]/3.  */
+ 	  for (tree arg : tree_vec_range (args))
+ 	    if (has_value_dependent_address (arg))
+ 	      return true;
  	  expression = TREE_OPERAND (expression, 0);
  	  if (identifier_p (expression))
  	    return true;
diff -Nrcpad gcc-13.3.0/gcc/cp/rtti.cc gcc-13.4.0/gcc/cp/rtti.cc
*** gcc-13.3.0/gcc/cp/rtti.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/cp/rtti.cc	Thu Jun  5 16:02:58 2025
*************** emit_tinfo_decl (tree decl)
*** 1739,1745 ****
        /* Avoid targets optionally bumping up the alignment to improve
  	 vector instruction accesses, tinfo are never accessed this way.  */
  #ifdef DATA_ABI_ALIGNMENT
!       SET_DECL_ALIGN (decl, DATA_ABI_ALIGNMENT (decl, TYPE_ALIGN (TREE_TYPE (decl))));
        DECL_USER_ALIGN (decl) = true;
  #endif
        return true;
--- 1739,1746 ----
        /* Avoid targets optionally bumping up the alignment to improve
  	 vector instruction accesses, tinfo are never accessed this way.  */
  #ifdef DATA_ABI_ALIGNMENT
!       SET_DECL_ALIGN (decl, DATA_ABI_ALIGNMENT (TREE_TYPE (decl),
! 						TYPE_ALIGN (TREE_TYPE (decl))));
        DECL_USER_ALIGN (decl) = true;
  #endif
        return true;
diff -Nrcpad gcc-13.3.0/gcc/cp/search.cc gcc-13.4.0/gcc/cp/search.cc
*** gcc-13.3.0/gcc/cp/search.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/cp/search.cc	Thu Jun  5 16:02:58 2025
*************** maybe_check_overriding_exception_spec (t
*** 1928,1933 ****
--- 1928,1944 ----
        || UNPARSED_NOEXCEPT_SPEC_P (over_throw))
      return true;
  
+   /* We also have to defer checking when we're in a template and couldn't
+      instantiate & evaluate the noexcept to true/false.  */
+   if (processing_template_decl)
+     if ((base_throw
+ 	 && base_throw != noexcept_true_spec
+ 	 && base_throw != noexcept_false_spec)
+ 	|| (over_throw
+ 	    && over_throw != noexcept_true_spec
+ 	    && over_throw != noexcept_false_spec))
+       return true;
+ 
    if (!comp_except_specs (base_throw, over_throw, ce_derived))
      {
        auto_diagnostic_group d;
diff -Nrcpad gcc-13.3.0/gcc/cp/semantics.cc gcc-13.4.0/gcc/cp/semantics.cc
*** gcc-13.3.0/gcc/cp/semantics.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/cp/semantics.cc	Thu Jun  5 16:02:58 2025
*************** check_accessibility_of_qualified_id (tre
*** 2313,2321 ****
  	 OBJECT_TYPE.  */
        && CLASS_TYPE_P (object_type)
        && DERIVED_FROM_P (scope, object_type))
!     /* If we are processing a `->' or `.' expression, use the type of the
!        left-hand side.  */
!     qualifying_type = object_type;
    else if (nested_name_specifier)
      {
        /* If the reference is to a non-static member of the
--- 2313,2326 ----
  	 OBJECT_TYPE.  */
        && CLASS_TYPE_P (object_type)
        && DERIVED_FROM_P (scope, object_type))
!     {
!       /* If we are processing a `->' or `.' expression, use the type of the
! 	 left-hand side.  */
!       if (tree open = currently_open_class (object_type))
! 	qualifying_type = open;
!       else
! 	qualifying_type = object_type;
!     }
    else if (nested_name_specifier)
      {
        /* If the reference is to a non-static member of the
*************** emit_associated_thunks (tree fn)
*** 4766,4772 ****
       enabling you to output all the thunks with the function itself.  */
    if (DECL_VIRTUAL_P (fn)
        /* Do not emit thunks for extern template instantiations.  */
!       && ! DECL_REALLY_EXTERN (fn))
      {
        tree thunk;
  
--- 4771,4780 ----
       enabling you to output all the thunks with the function itself.  */
    if (DECL_VIRTUAL_P (fn)
        /* Do not emit thunks for extern template instantiations.  */
!       && ! DECL_REALLY_EXTERN (fn)
!       /* Do not emit thunks for tentative decls, those will be processed
! 	 again at_eof if really needed.  */
!       && (DECL_INTERFACE_KNOWN (fn) || !DECL_DEFER_OUTPUT (fn)))
      {
        tree thunk;
  
*************** finish_decltype_type (tree expr, bool id
*** 11435,11447 ****
        return error_mark_node;
      }
  
-   /* To get the size of a static data member declared as an array of
-      unknown bound, we need to instantiate it.  */
-   if (VAR_P (expr)
-       && VAR_HAD_UNKNOWN_BOUND (expr)
-       && DECL_TEMPLATE_INSTANTIATION (expr))
-     instantiate_decl (expr, /*defer_ok*/true, /*expl_inst_mem*/false);
- 
    if (id_expression_or_member_access_p)
      {
        /* If e is an id-expression or a class member access (5.2.5
--- 11443,11448 ----
*************** finish_trait_expr (location_t loc, cp_tr
*** 12246,12252 ****
      case CPTK_HAS_NOTHROW_COPY:
      case CPTK_HAS_TRIVIAL_COPY:
      case CPTK_HAS_TRIVIAL_DESTRUCTOR:
-     case CPTK_HAS_UNIQUE_OBJ_REPRESENTATIONS:
        if (!check_trait_type (type1))
  	return error_mark_node;
        break;
--- 12247,12252 ----
*************** finish_trait_expr (location_t loc, cp_tr
*** 12256,12261 ****
--- 12256,12262 ----
      case CPTK_IS_STD_LAYOUT:
      case CPTK_IS_TRIVIAL:
      case CPTK_IS_TRIVIALLY_COPYABLE:
+     case CPTK_HAS_UNIQUE_OBJ_REPRESENTATIONS:
        if (!check_trait_type (type1, /* kind = */ 2))
  	return error_mark_node;
        break;
diff -Nrcpad gcc-13.3.0/gcc/cp/std-name-hint.gperf gcc-13.4.0/gcc/cp/std-name-hint.gperf
*** gcc-13.3.0/gcc/cp/std-name-hint.gperf	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/cp/std-name-hint.gperf	Thu Jun  5 16:02:58 2025
*************** pointer_traits, "<memory>", cxx11
*** 220,226 ****
  reinterpret_pointer_cast, "<memory>", cxx17
  shared_ptr, "<memory>", cxx11
  static_pointer_cast, "<memory>", cxx11
! to_address, "<memory>", cxx11
  uninitialized_construct_using_allocator, "<memory>", cxx20
  unique_ptr, "<memory>", cxx11
  uses_allocator, "<memory>", cxx11
--- 220,226 ----
  reinterpret_pointer_cast, "<memory>", cxx17
  shared_ptr, "<memory>", cxx11
  static_pointer_cast, "<memory>", cxx11
! to_address, "<memory>", cxx20
  uninitialized_construct_using_allocator, "<memory>", cxx20
  unique_ptr, "<memory>", cxx11
  uses_allocator, "<memory>", cxx11
diff -Nrcpad gcc-13.3.0/gcc/cp/std-name-hint.h gcc-13.4.0/gcc/cp/std-name-hint.h
*** gcc-13.3.0/gcc/cp/std-name-hint.h	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/cp/std-name-hint.h	Thu Jun  5 16:02:58 2025
*************** std_name_hint_lookup::find (const char *
*** 291,297 ****
  #line 472 "std-name-hint.gperf"
        {"variant_npos", "<variant>", cxx17},
  #line 223 "std-name-hint.gperf"
!       {"to_address", "<memory>", cxx11},
  #line 460 "std-name-hint.gperf"
        {"pair", "<utility>", cxx98},
  #line 269 "std-name-hint.gperf"
--- 291,297 ----
  #line 472 "std-name-hint.gperf"
        {"variant_npos", "<variant>", cxx17},
  #line 223 "std-name-hint.gperf"
!       {"to_address", "<memory>", cxx20},
  #line 460 "std-name-hint.gperf"
        {"pair", "<utility>", cxx98},
  #line 269 "std-name-hint.gperf"
diff -Nrcpad gcc-13.3.0/gcc/cp/tree.cc gcc-13.4.0/gcc/cp/tree.cc
*** gcc-13.3.0/gcc/cp/tree.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/cp/tree.cc	Thu Jun  5 16:02:58 2025
*************** strip_typedefs_expr (tree t, bool *remov
*** 2023,2034 ****
        }
  
      case LAMBDA_EXPR:
        return t;
  
-     case STATEMENT_LIST:
-       error ("statement-expression in a constant expression");
-       return error_mark_node;
- 
      default:
        break;
      }
--- 2023,2031 ----
        }
  
      case LAMBDA_EXPR:
+     case STMT_EXPR:
        return t;
  
      default:
        break;
      }
*************** cp_walk_subtrees (tree *tp, int *walk_su
*** 5663,5668 ****
--- 5660,5666 ----
  		  && !TREE_STATIC (TREE_OPERAND (*tp, 0)))))
  	{
  	  tree decl = TREE_OPERAND (*tp, 0);
+ 	  WALK_SUBTREE (TREE_TYPE (decl));
  	  WALK_SUBTREE (DECL_INITIAL (decl));
  	  WALK_SUBTREE (DECL_SIZE (decl));
  	  WALK_SUBTREE (DECL_SIZE_UNIT (decl));
*************** cp_walk_subtrees (tree *tp, int *walk_su
*** 5713,5718 ****
--- 5711,5725 ----
        WALK_SUBTREE (STATIC_ASSERT_MESSAGE (*tp));
        break;
  
+     case INTEGER_TYPE:
+       if (processing_template_decl)
+ 	{
+ 	  /* Removed from walk_type_fields in r119481.  */
+ 	  WALK_SUBTREE (TYPE_MIN_VALUE (*tp));
+ 	  WALK_SUBTREE (TYPE_MAX_VALUE (*tp));
+ 	}
+       break;
+ 
      default:
        return NULL_TREE;
      }
diff -Nrcpad gcc-13.3.0/gcc/cp/typeck.cc gcc-13.4.0/gcc/cp/typeck.cc
*** gcc-13.3.0/gcc/cp/typeck.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/cp/typeck.cc	Thu Jun  5 16:02:58 2025
*************** cp_compare_floating_point_conversion_ran
*** 393,398 ****
--- 393,401 ----
       has higher rank.  */
    if (cnt > 1 && mv2 == long_double_type_node)
      return -2;
+   /* And similarly if t2 is float, t2 has lower rank.  */
+   if (cnt > 1 && mv2 == float_type_node)
+     return 2;
    /* Otherwise, they have equal rank, but extended types
       (other than std::bfloat16_t) have higher subrank.
       std::bfloat16_t shouldn't have equal rank to any standard
*************** cxx_sizeof_expr (location_t loc, tree e,
*** 2125,2137 ****
    location_t e_loc = cp_expr_loc_or_loc (e, loc);
    STRIP_ANY_LOCATION_WRAPPER (e);
  
-   /* To get the size of a static data member declared as an array of
-      unknown bound, we need to instantiate it.  */
-   if (VAR_P (e)
-       && VAR_HAD_UNKNOWN_BOUND (e)
-       && DECL_TEMPLATE_INSTANTIATION (e))
-     instantiate_decl (e, /*defer_ok*/true, /*expl_inst_mem*/false);
- 
    if (TREE_CODE (e) == PARM_DECL
        && DECL_ARRAY_PARAMETER_P (e)
        && (complain & tf_warning))
--- 2128,2133 ----
*************** cp_build_array_ref (location_t loc, tree
*** 4073,4079 ****
      tree ar = cp_default_conversion (array, complain);
      tree ind = cp_default_conversion (idx, complain);
  
!     if (!first && flag_strong_eval_order == 2 && TREE_SIDE_EFFECTS (ind))
        ar = first = save_expr (ar);
  
      /* Put the integer in IND to simplify error checking.  */
--- 4069,4076 ----
      tree ar = cp_default_conversion (array, complain);
      tree ind = cp_default_conversion (idx, complain);
  
!     if (!processing_template_decl
! 	&& !first && flag_strong_eval_order == 2 && TREE_SIDE_EFFECTS (ind))
        ar = first = save_expr (ar);
  
      /* Put the integer in IND to simplify error checking.  */
*************** get_member_function_from_ptrfunc (tree *
*** 4175,4185 ****
        if (!nonvirtual && is_dummy_object (instance_ptr))
  	nonvirtual = true;
  
!       if (TREE_SIDE_EFFECTS (instance_ptr))
! 	instance_ptr = instance_save_expr = save_expr (instance_ptr);
  
!       if (TREE_SIDE_EFFECTS (function))
! 	function = save_expr (function);
  
        /* Start by extracting all the information from the PMF itself.  */
        e3 = pfn_from_ptrmemfunc (function);
--- 4172,4199 ----
        if (!nonvirtual && is_dummy_object (instance_ptr))
  	nonvirtual = true;
  
!       /* Use force_target_expr even when instance_ptr doesn't have
! 	 side-effects, unless it is a simple decl or constant, so
! 	 that we don't ubsan instrument the expression multiple times.
! 	 Don't use save_expr, as save_expr can avoid building a SAVE_EXPR
! 	 and building a SAVE_EXPR manually can be optimized away during
! 	 cp_fold.  See PR116449 and PR117259.  */
!       if (TREE_SIDE_EFFECTS (instance_ptr)
! 	  || (!nonvirtual
! 	      && !DECL_P (instance_ptr)
! 	      && !TREE_CONSTANT (instance_ptr)))
! 	instance_ptr = instance_save_expr
! 	  = save_expr (force_target_expr (TREE_TYPE (instance_ptr),
! 					  instance_ptr, complain));
  
!       /* See above comment.  */
!       if (TREE_SIDE_EFFECTS (function)
! 	  || (!nonvirtual
! 	      && !DECL_P (function)
! 	      && !TREE_CONSTANT (function)))
! 	function
! 	  = save_expr (force_target_expr (TREE_TYPE (function), function,
! 					  complain));
  
        /* Start by extracting all the information from the PMF itself.  */
        e3 = pfn_from_ptrmemfunc (function);
*************** cp_build_function_call_vec (tree functio
*** 4452,4459 ****
  
    /* Check for errors in format strings and inappropriately
       null parameters.  */
!   bool warned_p = check_function_arguments (input_location, fndecl, fntype,
! 					    nargs, argarray, NULL);
  
    ret = build_cxx_call (function, nargs, argarray, complain, orig_fndecl);
  
--- 4466,4475 ----
  
    /* Check for errors in format strings and inappropriately
       null parameters.  */
!   bool warned_p
!     = ((complain & tf_warning)
!        && check_function_arguments (input_location, fndecl, fntype,
! 				    nargs, argarray, NULL));
  
    ret = build_cxx_call (function, nargs, argarray, complain, orig_fndecl);
  
diff -Nrcpad gcc-13.3.0/gcc/cp/typeck2.cc gcc-13.4.0/gcc/cp/typeck2.cc
*** gcc-13.3.0/gcc/cp/typeck2.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/cp/typeck2.cc	Thu Jun  5 16:02:58 2025
*************** digest_init_flags (tree type, tree init,
*** 1396,1436 ****
    return digest_init_r (type, init, 0, flags, complain);
  }
  
- /* Return true if SUBOB initializes the same object as FULL_EXPR.
-    For instance:
- 
-      A a = A{};		      // initializer
-      A a = (A{});	      // initializer
-      A a = (1, A{});	      // initializer
-      A a = true ? A{} : A{};  // initializer
-      auto x = A{}.x;	      // temporary materialization
-      auto x = foo(A{});	      // temporary materialization
- 
-    FULL_EXPR is the whole expression, SUBOB is its TARGET_EXPR subobject.  */
- 
- static bool
- potential_prvalue_result_of (tree subob, tree full_expr)
- {
-   if (subob == full_expr)
-     return true;
-   else if (TREE_CODE (full_expr) == TARGET_EXPR)
-     {
-       tree init = TARGET_EXPR_INITIAL (full_expr);
-       if (TREE_CODE (init) == COND_EXPR)
- 	return (potential_prvalue_result_of (subob, TREE_OPERAND (init, 1))
- 		|| potential_prvalue_result_of (subob, TREE_OPERAND (init, 2)));
-       else if (TREE_CODE (init) == COMPOUND_EXPR)
- 	return potential_prvalue_result_of (subob, TREE_OPERAND (init, 1));
-       /* ??? I don't know if this can be hit.  */
-       else if (TREE_CODE (init) == PAREN_EXPR)
- 	{
- 	  gcc_checking_assert (false);
- 	  return potential_prvalue_result_of (subob, TREE_OPERAND (init, 0));
- 	}
-     }
-   return false;
- }
- 
  /* Callback to replace PLACEHOLDER_EXPRs in a TARGET_EXPR (which isn't used
     in the context of guaranteed copy elision).  */
  
--- 1396,1401 ----
*************** static tree
*** 1438,1448 ****
  replace_placeholders_for_class_temp_r (tree *tp, int *, void *data)
  {
    tree t = *tp;
!   tree full_expr = *static_cast<tree *>(data);
  
    /* We're looking for a TARGET_EXPR nested in the whole expression.  */
    if (TREE_CODE (t) == TARGET_EXPR
!       && !potential_prvalue_result_of (t, full_expr))
      {
        tree init = TARGET_EXPR_INITIAL (t);
        while (TREE_CODE (init) == COMPOUND_EXPR)
--- 1403,1415 ----
  replace_placeholders_for_class_temp_r (tree *tp, int *, void *data)
  {
    tree t = *tp;
!   auto pset = static_cast<hash_set<tree> *>(data);
  
    /* We're looking for a TARGET_EXPR nested in the whole expression.  */
    if (TREE_CODE (t) == TARGET_EXPR
!       /* That serves as temporary materialization, not an initializer.  */
!       && !TARGET_EXPR_ELIDING_P (t)
!       && !pset->add (t))
      {
        tree init = TARGET_EXPR_INITIAL (t);
        while (TREE_CODE (init) == COMPOUND_EXPR)
*************** replace_placeholders_for_class_temp_r (t
*** 1457,1462 ****
--- 1424,1439 ----
  	  gcc_checking_assert (!find_placeholders (init));
  	}
      }
+   /* TARGET_EXPRs initializing function arguments are not marked as eliding,
+      even though gimplify_arg drops them on the floor.  Don't go replacing
+      placeholders in them.  */
+   else if (TREE_CODE (t) == CALL_EXPR || TREE_CODE (t) == AGGR_INIT_EXPR)
+     for (int i = 0; i < call_expr_nargs (t); ++i)
+       {
+ 	tree arg = get_nth_callarg (t, i);
+ 	if (TREE_CODE (arg) == TARGET_EXPR && !TARGET_EXPR_ELIDING_P (arg))
+ 	  pset->add (arg);
+       }
  
    return NULL_TREE;
  }
*************** digest_nsdmi_init (tree decl, tree init,
*** 1504,1511 ****
       temporary materialization does not occur when initializing an object
       from a prvalue of the same type, therefore we must not replace the
       placeholder with a temporary object so that it can be elided.  */
!   cp_walk_tree (&init, replace_placeholders_for_class_temp_r, &init,
! 		nullptr);
  
    return init;
  }
--- 1481,1488 ----
       temporary materialization does not occur when initializing an object
       from a prvalue of the same type, therefore we must not replace the
       placeholder with a temporary object so that it can be elided.  */
!   hash_set<tree> pset;
!   cp_walk_tree (&init, replace_placeholders_for_class_temp_r, &pset, nullptr);
  
    return init;
  }
*************** massage_init_elt (tree type, tree init,
*** 1551,1560 ****
      new_flags |= LOOKUP_AGGREGATE_PAREN_INIT;
    init = digest_init_r (type, init, nested ? 2 : 1, new_flags, complain);
    /* When we defer constant folding within a statement, we may want to
!      defer this folding as well.  Don't call this on CONSTRUCTORs because
!      their elements have already been folded, and we must avoid folding
!      the result of get_nsdmi.  */
!   if (TREE_CODE (init) != CONSTRUCTOR)
      {
        tree t = fold_non_dependent_init (init, complain);
        if (TREE_CONSTANT (t))
--- 1528,1537 ----
      new_flags |= LOOKUP_AGGREGATE_PAREN_INIT;
    init = digest_init_r (type, init, nested ? 2 : 1, new_flags, complain);
    /* When we defer constant folding within a statement, we may want to
!      defer this folding as well.  Don't call this on CONSTRUCTORs in
!      a template because their elements have already been folded, and
!      we must avoid folding the result of get_nsdmi.  */
!   if (!(processing_template_decl && TREE_CODE (init) == CONSTRUCTOR))
      {
        tree t = fold_non_dependent_init (init, complain);
        if (TREE_CONSTANT (t))
*************** process_init_constructor_record (tree ty
*** 1789,1801 ****
  	    {
  	      gcc_assert (ce->value);
  	      next = massage_init_elt (fldtype, next, nested, flags, complain);
- 	      /* We can't actually elide the temporary when initializing a
- 		 potentially-overlapping field from a function that returns by
- 		 value.  */
- 	      if (ce->index
- 		  && TREE_CODE (next) == TARGET_EXPR
- 		  && unsafe_copy_elision_p (ce->index, next))
- 		TARGET_EXPR_ELIDING_P (next) = false;
  	      ++idx;
  	    }
  	}
--- 1766,1771 ----
*************** process_init_constructor_record (tree ty
*** 1887,1892 ****
--- 1857,1869 ----
  	    }
  	}
  
+       /* We can't actually elide the temporary when initializing a
+ 	 potentially-overlapping field from a function that returns by
+ 	 value.  */
+       if (TREE_CODE (next) == TARGET_EXPR
+ 	  && unsafe_copy_elision_p (field, next))
+ 	TARGET_EXPR_ELIDING_P (next) = false;
+ 
        if (is_empty_field (field)
  	  && !TREE_SIDE_EFFECTS (next))
  	/* Don't add trivial initialization of an empty base/field to the
*************** build_m_component_ref (tree datum, tree
*** 2362,2368 ****
  				      (cp_type_quals (type)
  				       | cp_type_quals (TREE_TYPE (datum))));
  
!       datum = build_address (datum);
  
        /* Convert object to the correct base.  */
        if (binfo)
--- 2339,2345 ----
  				      (cp_type_quals (type)
  				       | cp_type_quals (TREE_TYPE (datum))));
  
!       datum = cp_build_addr_expr (datum, complain);
  
        /* Convert object to the correct base.  */
        if (binfo)
diff -Nrcpad gcc-13.3.0/gcc/cse.cc gcc-13.4.0/gcc/cse.cc
*** gcc-13.3.0/gcc/cse.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/cse.cc	Thu Jun  5 16:02:58 2025
*************** static int next_qty;
*** 239,245 ****
     the constant being compared against, or zero if the comparison
     is not against a constant.  `comparison_qty' holds the quantity
     being compared against when the result is known.  If the comparison
!    is not with a register, `comparison_qty' is -1.  */
  
  struct qty_table_elem
  {
--- 239,245 ----
     the constant being compared against, or zero if the comparison
     is not against a constant.  `comparison_qty' holds the quantity
     being compared against when the result is known.  If the comparison
!    is not with a register, `comparison_qty' is INT_MIN.  */
  
  struct qty_table_elem
  {
*************** record_jump_cond (enum rtx_code code, ma
*** 4068,4074 ****
        else
  	{
  	  ent->comparison_const = op1;
! 	  ent->comparison_qty = -1;
  	}
  
        return;
--- 4068,4074 ----
        else
  	{
  	  ent->comparison_const = op1;
! 	  ent->comparison_qty = INT_MIN;
  	}
  
        return;
*************** cse_extended_basic_block (struct cse_bas
*** 6612,6618 ****
  	  && EDGE_COUNT (bb->succs) == 2
  	  && JUMP_P (insn)
  	  && single_set (insn)
! 	  && any_condjump_p (insn))
  	{
  	  basic_block next_bb = ebb_data->path[path_entry + 1].bb;
  	  bool taken = (next_bb == BRANCH_EDGE (bb)->dest);
--- 6612,6626 ----
  	  && EDGE_COUNT (bb->succs) == 2
  	  && JUMP_P (insn)
  	  && single_set (insn)
! 	  && any_condjump_p (insn)
! 	  /* single_set may return non-NULL even for multiple sets
! 	     if there are REG_UNUSED notes.  record_jump_equiv only
! 	     looks at pc_set and doesn't consider other sets that
! 	     could affect the value, and the recorded equivalence
! 	     can extend the lifetime of the compared REG, so use
! 	     also !multiple_sets check to verify it is exactly one
! 	     set.  */
! 	  && !multiple_sets (insn))
  	{
  	  basic_block next_bb = ebb_data->path[path_entry + 1].bb;
  	  bool taken = (next_bb == BRANCH_EDGE (bb)->dest);
diff -Nrcpad gcc-13.3.0/gcc/cselib.cc gcc-13.4.0/gcc/cselib.cc
*** gcc-13.3.0/gcc/cselib.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/cselib.cc	Thu Jun  5 16:02:58 2025
*************** along with GCC; see the file COPYING3.
*** 33,38 ****
--- 33,39 ----
  #include "cselib.h"
  #include "function-abi.h"
  #include "alias.h"
+ #include "predict.h"
  
  /* A list of cselib_val structures.  */
  struct elt_list
*************** static unsigned int *used_regs;
*** 248,255 ****
  static unsigned int n_used_regs;
  
  /* We pass this to cselib_invalidate_mem to invalidate all of
!    memory for a non-const call instruction.  */
! static GTY(()) rtx callmem;
  
  /* Set by discard_useless_locs if it deleted the last location of any
     value.  */
--- 249,257 ----
  static unsigned int n_used_regs;
  
  /* We pass this to cselib_invalidate_mem to invalidate all of
!    memory for a non-const call instruction and memory below stack pointer
!    for const/pure calls.  */
! static GTY(()) rtx callmem[2];
  
  /* Set by discard_useless_locs if it deleted the last location of any
     value.  */
*************** cselib_preserve_only_values (void)
*** 803,809 ****
    for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
      cselib_invalidate_regno (i, reg_raw_mode[i]);
  
!   cselib_invalidate_mem (callmem);
  
    remove_useless_values ();
  
--- 805,811 ----
    for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
      cselib_invalidate_regno (i, reg_raw_mode[i]);
  
!   cselib_invalidate_mem (callmem[0]);
  
    remove_useless_values ();
  
*************** cselib_invalidate_mem (rtx mem_rtx)
*** 2595,2600 ****
--- 2597,2604 ----
        struct elt_loc_list **p = &v->locs;
        bool had_locs = v->locs != NULL;
        rtx_insn *setting_insn = v->locs ? v->locs->setting_insn : NULL;
+       rtx sp_base = NULL_RTX;
+       HOST_WIDE_INT sp_off = 0;
  
        while (*p)
  	{
*************** cselib_invalidate_mem (rtx mem_rtx)
*** 2609,2614 ****
--- 2613,2726 ----
  	      p = &(*p)->next;
  	      continue;
  	    }
+ 
+ 	  /* When invalidating memory below the stack pointer for const/pure
+ 	     calls and alloca/VLAs aren't used, attempt to optimize.  Values
+ 	     stored into area sometimes below the stack pointer shouldn't be
+ 	     addressable and should be stored just through stack pointer
+ 	     derived expressions, so don't invalidate MEMs not using stack
+ 	     derived addresses, or if the MEMs clearly aren't below the stack
+ 	     pointer.  This isn't a fully conservative approach, the hope is
+ 	     that invalidating more MEMs than this isn't actually needed.  */
+ 	  if (mem_rtx == callmem[1]
+ 	      && num_mems < param_max_cselib_memory_locations
+ 	      && GET_CODE (XEXP (x, 0)) == VALUE
+ 	      && !cfun->calls_alloca)
+ 	    {
+ 	      cselib_val *v2 = CSELIB_VAL_PTR (XEXP (x, 0));
+ 	      rtx x_base = NULL_RTX;
+ 	      HOST_WIDE_INT x_off = 0;
+ 	      if (SP_DERIVED_VALUE_P (v2->val_rtx))
+ 		x_base = v2->val_rtx;
+ 	      else
+ 		for (struct elt_loc_list *l = v2->locs; l; l = l->next)
+ 		  if (GET_CODE (l->loc) == PLUS
+ 		      && GET_CODE (XEXP (l->loc, 0)) == VALUE
+ 		      && SP_DERIVED_VALUE_P (XEXP (l->loc, 0))
+ 		      && CONST_INT_P (XEXP (l->loc, 1)))
+ 		    {
+ 		      x_base = XEXP (l->loc, 0);
+ 		      x_off = INTVAL (XEXP (l->loc, 1));
+ 		      break;
+ 		    }
+ 	      /* If x_base is NULL here, don't invalidate x as its address
+ 		 isn't derived from sp such that it could be in outgoing
+ 		 argument area of some call in !ACCUMULATE_OUTGOING_ARGS
+ 		 function.  */
+ 	      if (x_base)
+ 		{
+ 		  if (sp_base == NULL_RTX)
+ 		    {
+ 		      if (cselib_val *v3
+ 			  = cselib_lookup_1 (stack_pointer_rtx, Pmode, 0,
+ 					     VOIDmode))
+ 			{
+ 			  if (SP_DERIVED_VALUE_P (v3->val_rtx))
+ 			    sp_base = v3->val_rtx;
+ 			  else
+ 			    for (struct elt_loc_list *l = v3->locs;
+ 				 l; l = l->next)
+ 			      if (GET_CODE (l->loc) == PLUS
+ 				  && GET_CODE (XEXP (l->loc, 0)) == VALUE
+ 				  && SP_DERIVED_VALUE_P (XEXP (l->loc, 0))
+ 				  && CONST_INT_P (XEXP (l->loc, 1)))
+ 				{
+ 				  sp_base = XEXP (l->loc, 0);
+ 				  sp_off = INTVAL (XEXP (l->loc, 1));
+ 				  break;
+ 				}
+ 			}
+ 		      if (sp_base == NULL_RTX)
+ 			sp_base = pc_rtx;
+ 		    }
+ 		  /* Otherwise, if x_base and sp_base are the same,
+ 		     we know that x_base + x_off is the x's address and
+ 		     sp_base + sp_off is current value of stack pointer,
+ 		     so try to determine if x is certainly not below stack
+ 		     pointer.  */
+ 		  if (sp_base == x_base)
+ 		    {
+ 		      if (STACK_GROWS_DOWNWARD)
+ 			{
+ 			  HOST_WIDE_INT off = sp_off;
+ #ifdef STACK_ADDRESS_OFFSET
+ 			  /* On SPARC take stack pointer bias into account as
+ 			     well.  */
+ 			  off += (STACK_ADDRESS_OFFSET
+ 				  - FIRST_PARM_OFFSET (current_function_decl));
+ #endif
+ 			  if (x_off >= off)
+ 			    /* x is at or above the current stack pointer,
+ 			       no need to invalidate it.  */
+ 			    x_base = NULL_RTX;
+ 			}
+ 		      else
+ 			{
+ 			  HOST_WIDE_INT sz;
+ 			  enum machine_mode mode = GET_MODE (x);
+ 			  if ((MEM_SIZE_KNOWN_P (x)
+ 			       && MEM_SIZE (x).is_constant (&sz))
+ 			      || (mode != BLKmode
+ 				  && GET_MODE_SIZE (mode).is_constant (&sz)))
+ 			    if (x_off < sp_off
+ 				&& ((HOST_WIDE_INT) ((unsigned HOST_WIDE_INT)
+ 						     x_off + sz) <= sp_off))
+ 			      /* x's end is below or at the current stack
+ 				 pointer in !STACK_GROWS_DOWNWARD target,
+ 				 no need to invalidate it.  */
+ 			      x_base = NULL_RTX;
+ 			 }
+ 		    }
+ 		}
+ 	      if (x_base == NULL_RTX)
+ 		{
+ 		  has_mem = true;
+ 		  num_mems++;
+ 		  p = &(*p)->next;
+ 		  continue;
+ 		}
+ 	    }
+ 
  	  if (num_mems < param_max_cselib_memory_locations
  	      && ! canon_anti_dependence (x, false, mem_rtx,
  					  GET_MODE (mem_rtx), mem_addr))
*************** cselib_process_insn (rtx_insn *insn)
*** 3161,3174 ****
  	 as if they were regular functions.  */
        if (RTL_LOOPING_CONST_OR_PURE_CALL_P (insn)
  	  || !(RTL_CONST_OR_PURE_CALL_P (insn)))
! 	cselib_invalidate_mem (callmem);
        else
! 	/* For const/pure calls, invalidate any argument slots because
! 	   they are owned by the callee.  */
! 	for (x = CALL_INSN_FUNCTION_USAGE (insn); x; x = XEXP (x, 1))
! 	  if (GET_CODE (XEXP (x, 0)) == USE
! 	      && MEM_P (XEXP (XEXP (x, 0), 0)))
! 	    cselib_invalidate_mem (XEXP (XEXP (x, 0), 0));
      }
  
    cselib_record_sets (insn);
--- 3273,3296 ----
  	 as if they were regular functions.  */
        if (RTL_LOOPING_CONST_OR_PURE_CALL_P (insn)
  	  || !(RTL_CONST_OR_PURE_CALL_P (insn)))
! 	cselib_invalidate_mem (callmem[0]);
        else
! 	{
! 	  /* For const/pure calls, invalidate any argument slots because
! 	     they are owned by the callee.  */
! 	  for (x = CALL_INSN_FUNCTION_USAGE (insn); x; x = XEXP (x, 1))
! 	    if (GET_CODE (XEXP (x, 0)) == USE
! 		&& MEM_P (XEXP (XEXP (x, 0), 0)))
! 	      cselib_invalidate_mem (XEXP (XEXP (x, 0), 0));
! 	  /* And invalidate memory below the stack (or above for
! 	     !STACK_GROWS_DOWNWARD), as even const/pure call can invalidate
! 	     that.  Do this only if !ACCUMULATE_OUTGOING_ARGS or if
! 	     cfun->calls_alloca, otherwise the stack pointer shouldn't be
! 	     changing in the middle of the function and nothing should be
! 	     stored below the stack pointer.  */
! 	  if (!ACCUMULATE_OUTGOING_ARGS || cfun->calls_alloca)
! 	    cselib_invalidate_mem (callmem[1]);
! 	}
      }
  
    cselib_record_sets (insn);
*************** cselib_init (int record_what)
*** 3221,3228 ****
  
    /* (mem:BLK (scratch)) is a special mechanism to conflict with everything,
       see canon_true_dependence.  This is only created once.  */
!   if (! callmem)
!     callmem = gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (VOIDmode));
  
    cselib_nregs = max_reg_num ();
  
--- 3343,3373 ----
  
    /* (mem:BLK (scratch)) is a special mechanism to conflict with everything,
       see canon_true_dependence.  This is only created once.  */
!   if (! callmem[0])
!     callmem[0] = gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (VOIDmode));
!   /* Similarly create a MEM representing roughly everything below
!      the stack for STACK_GROWS_DOWNWARD targets or everything above
!      it otherwise.  Do this only when !ACCUMULATE_OUTGOING_ARGS or
!      if cfun->calls_alloca, otherwise the stack pointer shouldn't be
!      changing in the middle of the function and nothing should be stored
!      below the stack pointer.  */
!   if (!callmem[1] && (!ACCUMULATE_OUTGOING_ARGS || cfun->calls_alloca))
!     {
!       if (STACK_GROWS_DOWNWARD)
! 	{
! 	  unsigned HOST_WIDE_INT off = -(GET_MODE_MASK (Pmode) >> 1);
! #ifdef STACK_ADDRESS_OFFSET
! 	  /* On SPARC take stack pointer bias into account as well.  */
! 	  off += (STACK_ADDRESS_OFFSET
! 		  - FIRST_PARM_OFFSET (current_function_decl));
! #endif
! 	  callmem[1] = plus_constant (Pmode, stack_pointer_rtx, off);
! 	}
!       else
! 	callmem[1] = stack_pointer_rtx;
!       callmem[1] = gen_rtx_MEM (BLKmode, callmem[1]);
!       set_mem_size (callmem[1], GET_MODE_MASK (Pmode) >> 1);
!     }
  
    cselib_nregs = max_reg_num ();
  
diff -Nrcpad gcc-13.3.0/gcc/d/ChangeLog gcc-13.4.0/gcc/d/ChangeLog
*** gcc-13.3.0/gcc/d/ChangeLog	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/d/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,117 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
+ 2025-04-23  Arsen Arsenović  <arsen@aarsen.me>
+ 
+ 	Backported from master:
+ 	2025-01-29  Arsen Arsenović  <arsen@aarsen.me>
+ 		    Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR d/118477
+ 	* Make-lang.in (DCOMPILE, DPOSTCOMPILE): Use $(basename $(@F))
+ 	instead of $(*F).
+ 
+ 2025-04-20  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2025-04-15  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/119826
+ 	* types.cc (TypeVisitor::visit (TypeEnum *)): Propagate flags of main
+ 	enum types to all forward-referenced variants.
+ 
+ 2025-04-20  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2025-04-15  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/119817
+ 	* imports.cc (ImportVisitor::visit (OverloadSet *)): Don't push
+ 	NULL_TREE to vector of import symbols.
+ 
+ 2025-04-20  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2025-04-09  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/118309
+ 	* modules.cc: Include debug.h
+ 	(d_finish_compilation): Call debug_hooks->type_decl on all TYPE_DECLs.
+ 	* types.cc: Remove toplev.h include.
+ 	(finish_aggregate_type): Don't call rest_of_type_compilation or
+ 	rest_of_decl_compilation on type.
+ 	(TypeVisitor::visit (TypeEnum *)): Likewise.
+ 
+ 2025-03-31  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2025-03-31  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/117002
+ 	* decl.cc (aggregate_initializer_decl): Set explicit decl alignment of
+ 	class instance.
+ 	* expr.cc (ExprVisitor::visit (NewExp *)): Likewise.
+ 	* types.cc (TypeVisitor::visit (TypeClass *)): Mark the record type of
+ 	classes as packed.
+ 
+ 2025-03-23  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2025-03-23  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/117621
+ 	* types.cc (finish_aggregate_type): Propagate TYPE_PACKED to variants.
+ 
+ 2025-03-11  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2025-03-11  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/119139
+ 	* decl.cc (get_symbol_decl): Don't set TREE_READONLY for __result
+ 	declarations.
+ 
+ 2025-03-02  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2025-02-28  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/116961
+ 	* d-codegen.cc (build_float_cst): Change new_value type from real_t to
+ 	real_value.
+ 	* d-ctfloat.cc (CTFloat::fabs): Default initialize the return value.
+ 	(CTFloat::ldexp): Likewise.
+ 	(CTFloat::parse): Likewise.
+ 	* d-longdouble.cc (longdouble::add): Likewise.
+ 	(longdouble::sub): Likewise.
+ 	(longdouble::mul): Likewise.
+ 	(longdouble::div): Likewise.
+ 	(longdouble::mod): Likewise.
+ 	(longdouble::neg): Likewise.
+ 	* d-port.cc (Port::isFloat32LiteralOutOfRange): Likewise.
+ 	(Port::isFloat64LiteralOutOfRange): Likewise.
+ 
+ 2025-01-21  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2024-04-19  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/111650
+ 	* decl.cc (get_fndecl_arguments): Move generation of frame type to ...
+ 	(DeclVisitor::visit (FuncDeclaration *)): ... here, after the call to
+ 	build_closure.
+ 
+ 2025-01-20  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2025-01-20  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/114434
+ 	* expr.cc (ExprVisitor::visit (PtrExp *)): Get the offset as a
+ 	dinteger_t rather than a size_t.
+ 	(ExprVisitor::visit (SymOffExp *)): Likewise.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/gcc/d/Make-lang.in gcc-13.4.0/gcc/d/Make-lang.in
*** gcc-13.3.0/gcc/d/Make-lang.in	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/d/Make-lang.in	Thu Jun  5 16:02:58 2025
*************** ALL_DFLAGS = $(DFLAGS-$@) $(GDCFLAGS) -f
*** 65,72 ****
  	$(WARN_DFLAGS)
  
  DCOMPILE.base = $(GDC) $(NO_PIE_CFLAGS) -c $(ALL_DFLAGS) -o $@
! DCOMPILE = $(DCOMPILE.base) -MT $@ -MMD -MP -MF $(@D)/$(DEPDIR)/$(*F).TPo
! DPOSTCOMPILE = @mv $(@D)/$(DEPDIR)/$(*F).TPo $(@D)/$(DEPDIR)/$(*F).Po
  DLINKER = $(GDC) $(NO_PIE_FLAG) -lstdc++
  
  # Like LINKER, but use a mutex for serializing front end links.
--- 65,72 ----
  	$(WARN_DFLAGS)
  
  DCOMPILE.base = $(GDC) $(NO_PIE_CFLAGS) -c $(ALL_DFLAGS) -o $@
! DCOMPILE = $(DCOMPILE.base) -MT $@ -MMD -MP -MF $(@D)/$(DEPDIR)/$(basename $(@F)).TPo
! DPOSTCOMPILE = @mv $(@D)/$(DEPDIR)/$(basename $(@F)).TPo $(@D)/$(DEPDIR)/$(basename $(@F)).Po
  DLINKER = $(GDC) $(NO_PIE_FLAG) -lstdc++
  
  # Like LINKER, but use a mutex for serializing front end links.
diff -Nrcpad gcc-13.3.0/gcc/d/d-codegen.cc gcc-13.4.0/gcc/d/d-codegen.cc
*** gcc-13.3.0/gcc/d/d-codegen.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/d/d-codegen.cc	Thu Jun  5 16:02:58 2025
*************** build_integer_cst (dinteger_t value, tre
*** 246,260 ****
  tree
  build_float_cst (const real_t &value, Type *totype)
  {
!   real_t new_value;
    TypeBasic *tb = totype->isTypeBasic ();
  
    gcc_assert (tb != NULL);
  
    tree type_node = build_ctype (tb);
!   real_convert (&new_value.rv (), TYPE_MODE (type_node), &value.rv ());
  
!   return build_real (type_node, new_value.rv ());
  }
  
  /* Returns the .length component from the D dynamic array EXP.  */
--- 246,260 ----
  tree
  build_float_cst (const real_t &value, Type *totype)
  {
!   real_value new_value;
    TypeBasic *tb = totype->isTypeBasic ();
  
    gcc_assert (tb != NULL);
  
    tree type_node = build_ctype (tb);
!   real_convert (&new_value, TYPE_MODE (type_node), &value.rv ());
  
!   return build_real (type_node, new_value);
  }
  
  /* Returns the .length component from the D dynamic array EXP.  */
diff -Nrcpad gcc-13.3.0/gcc/d/d-ctfloat.cc gcc-13.4.0/gcc/d/d-ctfloat.cc
*** gcc-13.3.0/gcc/d/d-ctfloat.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/d/d-ctfloat.cc	Thu Jun  5 16:02:58 2025
*************** along with GCC; see the file COPYING3.
*** 33,39 ****
  real_t
  CTFloat::fabs (real_t r)
  {
!   real_t x;
    real_arithmetic (&x.rv (), ABS_EXPR, &r.rv (), NULL);
    return x.normalize ();
  }
--- 33,39 ----
  real_t
  CTFloat::fabs (real_t r)
  {
!   real_t x = {};
    real_arithmetic (&x.rv (), ABS_EXPR, &r.rv (), NULL);
    return x.normalize ();
  }
*************** CTFloat::fabs (real_t r)
*** 43,49 ****
  real_t
  CTFloat::ldexp (real_t r, int exp)
  {
!   real_t x;
    real_ldexp (&x.rv (), &r.rv (), exp);
    return x.normalize ();
  }
--- 43,49 ----
  real_t
  CTFloat::ldexp (real_t r, int exp)
  {
!   real_t x = {};
    real_ldexp (&x.rv (), &r.rv (), exp);
    return x.normalize ();
  }
*************** CTFloat::isInfinity (real_t r)
*** 87,93 ****
  real_t
  CTFloat::parse (const char *buffer, bool &overflow)
  {
!   real_t r;
    real_from_string3 (&r.rv (), buffer, TYPE_MODE (long_double_type_node));
  
    /* Front-end checks overflow to see if the value is representable.  */
--- 87,93 ----
  real_t
  CTFloat::parse (const char *buffer, bool &overflow)
  {
!   real_t r = {};
    real_from_string3 (&r.rv (), buffer, TYPE_MODE (long_double_type_node));
  
    /* Front-end checks overflow to see if the value is representable.  */
diff -Nrcpad gcc-13.3.0/gcc/d/d-longdouble.cc gcc-13.4.0/gcc/d/d-longdouble.cc
*** gcc-13.3.0/gcc/d/d-longdouble.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/d/d-longdouble.cc	Thu Jun  5 16:02:58 2025
*************** longdouble::to_bool (void) const
*** 113,119 ****
  longdouble
  longdouble::add (const longdouble &r) const
  {
!   longdouble x;
    real_arithmetic (&x.rv (), PLUS_EXPR, &this->rv (), &r.rv ());
    return x.normalize ();
  }
--- 113,119 ----
  longdouble
  longdouble::add (const longdouble &r) const
  {
!   longdouble x = {};
    real_arithmetic (&x.rv (), PLUS_EXPR, &this->rv (), &r.rv ());
    return x.normalize ();
  }
*************** longdouble::add (const longdouble &r) co
*** 121,127 ****
  longdouble
  longdouble::sub (const longdouble &r) const
  {
!   longdouble x;
    real_arithmetic (&x.rv (), MINUS_EXPR, &this->rv (), &r.rv ());
    return x.normalize ();
  }
--- 121,127 ----
  longdouble
  longdouble::sub (const longdouble &r) const
  {
!   longdouble x = {};
    real_arithmetic (&x.rv (), MINUS_EXPR, &this->rv (), &r.rv ());
    return x.normalize ();
  }
*************** longdouble::sub (const longdouble &r) co
*** 129,135 ****
  longdouble
  longdouble::mul (const longdouble &r) const
  {
!   longdouble x;
    real_arithmetic (&x.rv (), MULT_EXPR, &this->rv (), &r.rv ());
    return x.normalize ();
  }
--- 129,135 ----
  longdouble
  longdouble::mul (const longdouble &r) const
  {
!   longdouble x = {};
    real_arithmetic (&x.rv (), MULT_EXPR, &this->rv (), &r.rv ());
    return x.normalize ();
  }
*************** longdouble::mul (const longdouble &r) co
*** 137,143 ****
  longdouble
  longdouble::div (const longdouble &r) const
  {
!   longdouble x;
    real_arithmetic (&x.rv (), RDIV_EXPR, &this->rv (), &r.rv ());
    return x.normalize ();
  }
--- 137,143 ----
  longdouble
  longdouble::div (const longdouble &r) const
  {
!   longdouble x = {};
    real_arithmetic (&x.rv (), RDIV_EXPR, &this->rv (), &r.rv ());
    return x.normalize ();
  }
*************** longdouble::div (const longdouble &r) co
*** 145,151 ****
  longdouble
  longdouble::mod (const longdouble &r) const
  {
!   longdouble x;
    real_value q;
  
    if (r.rv ().cl == rvc_zero || REAL_VALUE_ISINF (this->rv ()))
--- 145,151 ----
  longdouble
  longdouble::mod (const longdouble &r) const
  {
!   longdouble x = {};
    real_value q;
  
    if (r.rv ().cl == rvc_zero || REAL_VALUE_ISINF (this->rv ()))
*************** longdouble::mod (const longdouble &r) co
*** 172,178 ****
  longdouble
  longdouble::neg (void) const
  {
!   longdouble x;
    real_arithmetic (&x.rv (), NEGATE_EXPR, &this->rv (), NULL);
    return x.normalize ();
  }
--- 172,178 ----
  longdouble
  longdouble::neg (void) const
  {
!   longdouble x = {};
    real_arithmetic (&x.rv (), NEGATE_EXPR, &this->rv (), NULL);
    return x.normalize ();
  }
diff -Nrcpad gcc-13.3.0/gcc/d/d-port.cc gcc-13.4.0/gcc/d/d-port.cc
*** gcc-13.3.0/gcc/d/d-port.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/d/d-port.cc	Thu Jun  5 16:02:58 2025
*************** Port::strupr (char *s)
*** 74,80 ****
  bool
  Port::isFloat32LiteralOutOfRange (const char *buffer)
  {
!   real_t r;
  
    real_from_string3 (&r.rv (), buffer, TYPE_MODE (float_type_node));
  
--- 74,80 ----
  bool
  Port::isFloat32LiteralOutOfRange (const char *buffer)
  {
!   real_t r = {};
  
    real_from_string3 (&r.rv (), buffer, TYPE_MODE (float_type_node));
  
*************** Port::isFloat32LiteralOutOfRange (const
*** 87,93 ****
  bool
  Port::isFloat64LiteralOutOfRange (const char *buffer)
  {
!   real_t r;
  
    real_from_string3 (&r.rv (), buffer, TYPE_MODE (double_type_node));
  
--- 87,93 ----
  bool
  Port::isFloat64LiteralOutOfRange (const char *buffer)
  {
!   real_t r = {};
  
    real_from_string3 (&r.rv (), buffer, TYPE_MODE (double_type_node));
  
diff -Nrcpad gcc-13.3.0/gcc/d/decl.cc gcc-13.4.0/gcc/d/decl.cc
*** gcc-13.3.0/gcc/d/decl.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/d/decl.cc	Thu Jun  5 16:02:58 2025
*************** get_fndecl_arguments (FuncDeclaration *d
*** 163,178 ****
  	  tree parm_decl = get_symbol_decl (decl->vthis);
  	  DECL_ARTIFICIAL (parm_decl) = 1;
  	  TREE_READONLY (parm_decl) = 1;
- 
- 	  if (decl->vthis->type == Type::tvoidptr)
- 	    {
- 	      /* Replace generic pointer with back-end closure type
- 		 (this wins for gdb).  */
- 	      tree frame_type = FRAMEINFO_TYPE (get_frameinfo (decl));
- 	      gcc_assert (frame_type != NULL_TREE);
- 	      TREE_TYPE (parm_decl) = build_pointer_type (frame_type);
- 	    }
- 
  	  param_list = chainon (param_list, parm_decl);
  	}
  
--- 163,168 ----
*************** public:
*** 1060,1065 ****
--- 1050,1065 ----
      /* May change cfun->static_chain.  */
      build_closure (d);
  
+     /* Replace generic pointer with back-end closure type
+        (this wins for gdb).  */
+     if (d->vthis && d->vthis->type == Type::tvoidptr)
+       {
+ 	tree frame_type = FRAMEINFO_TYPE (get_frameinfo (d));
+ 	gcc_assert (frame_type != NULL_TREE);
+ 	tree parm_decl = get_symbol_decl (d->vthis);
+ 	TREE_TYPE (parm_decl) = build_pointer_type (frame_type);
+       }
+ 
      if (d->vresult)
        declare_local_var (d->vresult);
  
*************** get_symbol_decl (Declaration *decl)
*** 1313,1319 ****
        /* `const` applies to data that cannot be changed by the const reference
  	 to that data. It may, however, be changed by another reference to that
  	 same data.  */
!       if (vd->isConst () && !vd->isDataseg ())
  	TREE_READONLY (decl->csym) = 1;
      }
  
--- 1313,1319 ----
        /* `const` applies to data that cannot be changed by the const reference
  	 to that data. It may, however, be changed by another reference to that
  	 same data.  */
!       if (vd->isConst () && !vd->isResult () && !vd->isDataseg ())
  	TREE_READONLY (decl->csym) = 1;
      }
  
*************** aggregate_initializer_decl (AggregateDec
*** 2382,2387 ****
--- 2382,2393 ----
        SET_DECL_ALIGN (sinit, sd->alignment.get () * BITS_PER_UNIT);
        DECL_USER_ALIGN (sinit) = true;
      }
+   else if (sd == NULL)
+     {
+       /* Alignment of class is determined its biggest field alignment.  */
+       SET_DECL_ALIGN (sinit, decl->alignsize * BITS_PER_UNIT);
+       DECL_USER_ALIGN (sinit) = true;
+     }
  
    decl->sinit = sinit;
    return sinit;
diff -Nrcpad gcc-13.3.0/gcc/d/expr.cc gcc-13.4.0/gcc/d/expr.cc
*** gcc-13.3.0/gcc/d/expr.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/d/expr.cc	Thu Jun  5 16:02:58 2025
*************** public:
*** 1513,1519 ****
    void visit (PtrExp *e) final override
    {
      Type *tnext = NULL;
!     size_t offset;
      tree result;
  
      if (e->e1->op == EXP::add)
--- 1513,1519 ----
    void visit (PtrExp *e) final override
    {
      Type *tnext = NULL;
!     dinteger_t offset;
      tree result;
  
      if (e->e1->op == EXP::add)
*************** public:
*** 2091,2097 ****
    void visit (SymOffExp *e) final override
    {
      /* Build the address and offset of the symbol.  */
!     size_t soffset = e->isSymOffExp ()->offset;
      tree result = get_decl_tree (e->var);
      TREE_USED (result) = 1;
  
--- 2091,2097 ----
    void visit (SymOffExp *e) final override
    {
      /* Build the address and offset of the symbol.  */
!     dinteger_t soffset = e->isSymOffExp ()->offset;
      tree result = get_decl_tree (e->var);
      TREE_USED (result) = 1;
  
*************** public:
*** 2261,2266 ****
--- 2261,2268 ----
  	       storage class, then the instance is allocated on the stack
  	       rather than the heap or using the class specific allocator.  */
  	    tree var = build_local_temp (TREE_TYPE (type));
+ 	    SET_DECL_ALIGN (var, cd->alignsize * BITS_PER_UNIT);
+ 	    DECL_USER_ALIGN (var) = 1;
  	    new_call = build_nop (type, build_address (var));
  	    setup_exp = modify_expr (var, aggregate_initializer_decl (cd));
  	  }
diff -Nrcpad gcc-13.3.0/gcc/d/imports.cc gcc-13.4.0/gcc/d/imports.cc
*** gcc-13.3.0/gcc/d/imports.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/d/imports.cc	Thu Jun  5 16:02:58 2025
*************** public:
*** 182,188 ****
      vec_alloc (tset, d->a.length);
  
      for (size_t i = 0; i < d->a.length; i++)
!       vec_safe_push (tset, build_import_decl (d->a[i]));
  
      this->result_ = build_tree_list_vec (tset);
      tset->truncate (0);
--- 182,192 ----
      vec_alloc (tset, d->a.length);
  
      for (size_t i = 0; i < d->a.length; i++)
!       {
! 	tree overload = build_import_decl (d->a[i]);
! 	if (overload != NULL_TREE)
! 	  vec_safe_push (tset, overload);
!       }
  
      this->result_ = build_tree_list_vec (tset);
      tset->truncate (0);
diff -Nrcpad gcc-13.3.0/gcc/d/modules.cc gcc-13.4.0/gcc/d/modules.cc
*** gcc-13.3.0/gcc/d/modules.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/d/modules.cc	Thu Jun  5 16:02:58 2025
*************** along with GCC; see the file COPYING3.
*** 30,35 ****
--- 30,36 ----
  #include "function.h"
  #include "cgraph.h"
  #include "stor-layout.h"
+ #include "debug.h"
  #include "toplev.h"
  #include "target.h"
  #include "common/common-target.h"
*************** d_finish_compilation (tree *vec, int len
*** 908,913 ****
--- 909,922 ----
    /* Complete all generated thunks.  */
    symtab->process_same_body_aliases ();
  
+   /* Output debug information for all type declarations in this unit.  */
+   for (int i = 0; i < len; i++)
+     {
+       tree decl = vec[i];
+       if (TREE_CODE (decl) == TYPE_DECL)
+ 	debug_hooks->type_decl (decl, false);
+     }
+ 
    /* Process all file scopes in this compilation, and the external_scope,
       through wrapup_global_declarations.  */
    for (int i = 0; i < len; i++)
diff -Nrcpad gcc-13.3.0/gcc/d/types.cc gcc-13.4.0/gcc/d/types.cc
*** gcc-13.3.0/gcc/d/types.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/d/types.cc	Thu Jun  5 16:02:58 2025
*************** along with GCC; see the file COPYING3.
*** 33,39 ****
  #include "langhooks.h"
  #include "tm.h"
  #include "function.h"
- #include "toplev.h"
  #include "target.h"
  #include "stringpool.h"
  #include "stor-layout.h"
--- 33,38 ----
*************** finish_aggregate_type (unsigned structsi
*** 704,721 ****
        TYPE_LANG_SPECIFIC (t) = TYPE_LANG_SPECIFIC (type);
        TYPE_SIZE (t) = TYPE_SIZE (type);
        TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (type);
!       TYPE_PACKED (type) = TYPE_PACKED (type);
        SET_TYPE_ALIGN (t, TYPE_ALIGN (type));
        TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (type);
      }
  
!   /* Finish debugging output for this type.  */
!   rest_of_type_compilation (type, TYPE_FILE_SCOPE_P (type));
    finish_incomplete_fields (type);
- 
-   /* Finish processing of TYPE_DECL.  */
-   rest_of_decl_compilation (TYPE_NAME (type),
- 			    DECL_FILE_SCOPE_P (TYPE_NAME (type)), 0);
  }
  
  /* Returns true if the class or struct type TYPE has already been layed out by
--- 703,715 ----
        TYPE_LANG_SPECIFIC (t) = TYPE_LANG_SPECIFIC (type);
        TYPE_SIZE (t) = TYPE_SIZE (type);
        TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (type);
!       TYPE_PACKED (t) = TYPE_PACKED (type);
        SET_TYPE_ALIGN (t, TYPE_ALIGN (type));
        TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (type);
      }
  
!   /* Complete any other forward-referenced fields of this aggregate type.  */
    finish_incomplete_fields (type);
  }
  
  /* Returns true if the class or struct type TYPE has already been layed out by
*************** public:
*** 1185,1197 ****
  
  	layout_type (t->ctype);
  
! 	/* Finish debugging output for this type.  */
! 	rest_of_type_compilation (t->ctype, TYPE_FILE_SCOPE_P (t->ctype));
! 	finish_incomplete_fields (t->ctype);
  
! 	/* Finish processing of TYPE_DECL.  */
! 	rest_of_decl_compilation (TYPE_NAME (t->ctype),
! 				  DECL_FILE_SCOPE_P (TYPE_NAME (t->ctype)), 0);
        }
    }
  
--- 1179,1206 ----
  
  	layout_type (t->ctype);
  
! 	/* Fix up all forward-referenced variants of this enum type.  */
! 	for (tree v = TYPE_MAIN_VARIANT (t->ctype); v;
! 	     v = TYPE_NEXT_VARIANT (v))
! 	  {
! 	    if (v == t->ctype)
! 	      continue;
  
! 	    TYPE_VALUES (v) = TYPE_VALUES (t->ctype);
! 	    TYPE_LANG_SPECIFIC (v) = TYPE_LANG_SPECIFIC (t->ctype);
! 	    TYPE_MIN_VALUE (v) = TYPE_MIN_VALUE (t->ctype);
! 	    TYPE_MAX_VALUE (v) = TYPE_MAX_VALUE (t->ctype);
! 	    TYPE_UNSIGNED (v) = TYPE_UNSIGNED (t->ctype);
! 	    TYPE_SIZE (v) = TYPE_SIZE (t->ctype);
! 	    TYPE_SIZE_UNIT (v) = TYPE_SIZE_UNIT (t->ctype);
! 	    SET_TYPE_MODE (v, TYPE_MODE (t->ctype));
! 	    TYPE_PRECISION (v) = TYPE_PRECISION (t->ctype);
! 	    SET_TYPE_ALIGN (v, TYPE_ALIGN (t->ctype));
! 	    TYPE_USER_ALIGN (v) = TYPE_USER_ALIGN (t->ctype);
! 	  }
! 
! 	/* Complete forward-referenced fields of this enum type.  */
! 	finish_incomplete_fields (t->ctype);
        }
    }
  
*************** public:
*** 1278,1284 ****
      build_type_decl (basetype, t->sym);
      set_visibility_for_decl (basetype, t->sym);
      apply_user_attributes (t->sym, basetype);
!     finish_aggregate_type (t->sym->structsize, t->sym->alignsize, basetype);
  
      /* Classes only live in memory, so always set the TREE_ADDRESSABLE bit.  */
      for (tree tv = basetype; tv != NULL_TREE; tv = TYPE_NEXT_VARIANT (tv))
--- 1287,1294 ----
      build_type_decl (basetype, t->sym);
      set_visibility_for_decl (basetype, t->sym);
      apply_user_attributes (t->sym, basetype);
!     /* The underlying record type of classes are packed.  */
!     finish_aggregate_type (t->sym->structsize, 1, basetype);
  
      /* Classes only live in memory, so always set the TREE_ADDRESSABLE bit.  */
      for (tree tv = basetype; tv != NULL_TREE; tv = TYPE_NEXT_VARIANT (tv))
diff -Nrcpad gcc-13.3.0/gcc/df-problems.cc gcc-13.4.0/gcc/df-problems.cc
*** gcc-13.3.0/gcc/df-problems.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/df-problems.cc	Thu Jun  5 16:02:58 2025
*************** df_simulate_defs (rtx_insn *insn, bitmap
*** 3855,3863 ****
      {
        unsigned int dregno = DF_REF_REGNO (def);
  
!       /* If the def is to only part of the reg, it does
! 	 not kill the other defs that reach here.  */
!       if (!(DF_REF_FLAGS (def) & (DF_REF_PARTIAL | DF_REF_CONDITIONAL)))
  	bitmap_clear_bit (live, dregno);
      }
  }
--- 3855,3865 ----
      {
        unsigned int dregno = DF_REF_REGNO (def);
  
!       /* If the def is to only part of the reg, model it as a RMW operation
! 	 by marking it live.  It only kills the reg if it is a complete def.  */
!       if (DF_REF_FLAGS (def) & (DF_REF_PARTIAL | DF_REF_CONDITIONAL))
! 	bitmap_set_bit (live, dregno);
!       else
  	bitmap_clear_bit (live, dregno);
      }
  }
diff -Nrcpad gcc-13.3.0/gcc/doc/avr-mmcu.texi gcc-13.4.0/gcc/doc/avr-mmcu.texi
*** gcc-13.3.0/gcc/doc/avr-mmcu.texi	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/doc/avr-mmcu.texi	Thu Jun  5 16:02:58 2025
***************
*** 50,60 ****
  
  @item avrxmega2
  ``XMEGA'' devices with more than 8@tie{}KiB and up to 64@tie{}KiB of program memory.
! @*@var{mcu}@tie{}= @code{atxmega8e5}, @code{atxmega16a4}, @code{atxmega16a4u}, @code{atxmega16c4}, @code{atxmega16d4}, @code{atxmega16e5}, @code{atxmega32a4}, @code{atxmega32a4u}, @code{atxmega32c3}, @code{atxmega32c4}, @code{atxmega32d3}, @code{atxmega32d4}, @code{atxmega32e5}, @code{avr64da28}, @code{avr64da32}, @code{avr64da48}, @code{avr64da64}, @code{avr64db28}, @code{avr64db32}, @code{avr64db48}, @code{avr64db64}, @code{avr64dd14}, @code{avr64dd20}, @code{avr64dd28}, @code{avr64dd32}, @code{avr64du28}, @code{avr64du32}, @code{avr64ea28}, @code{avr64ea32}, @code{avr64ea48}.
  
  @item avrxmega3
  ``XMEGA'' devices with up to 64@tie{}KiB of combined program memory and RAM, and with program memory visible in the RAM address space.
! @*@var{mcu}@tie{}= @code{attiny202}, @code{attiny204}, @code{attiny212}, @code{attiny214}, @code{attiny402}, @code{attiny404}, @code{attiny406}, @code{attiny412}, @code{attiny414}, @code{attiny416}, @code{attiny416auto}, @code{attiny417}, @code{attiny424}, @code{attiny426}, @code{attiny427}, @code{attiny804}, @code{attiny806}, @code{attiny807}, @code{attiny814}, @code{attiny816}, @code{attiny817}, @code{attiny824}, @code{attiny826}, @code{attiny827}, @code{attiny1604}, @code{attiny1606}, @code{attiny1607}, @code{attiny1614}, @code{attiny1616}, @code{attiny1617}, @code{attiny1624}, @code{attiny1626}, @code{attiny1627}, @code{attiny3214}, @code{attiny3216}, @code{attiny3217}, @code{attiny3224}, @code{attiny3226}, @code{attiny3227}, @code{atmega808}, @code{atmega809}, @code{atmega1608}, @code{atmega1609}, @code{atmega3208}, @code{atmega3209}, @code{atmega4808}, @code{atmega4809}, @code{avr16dd14}, @code{avr16dd20}, @code{avr16dd28}, @code{avr16dd32}, @code{avr16du14}, @code{avr16du20}, @code{avr16du28}, @code{avr16du32}, @code{avr16ea28}, @code{avr16ea32}, @code{avr16ea48}, @code{avr16eb14}, @code{avr16eb20}, @code{avr16eb28}, @code{avr16eb32}, @code{avr32da28}, @code{avr32da32}, @code{avr32da48}, @code{avr32db28}, @code{avr32db32}, @code{avr32db48}, @code{avr32dd14}, @code{avr32dd20}, @code{avr32dd28}, @code{avr32dd32}, @code{avr32du14}, @code{avr32du20}, @code{avr32du28}, @code{avr32du32}, @code{avr32ea28}, @code{avr32ea32}, @code{avr32ea48}.
  
  @item avrxmega4
  ``XMEGA'' devices with more than 64@tie{}KiB and up to 128@tie{}KiB of program memory.
--- 50,60 ----
  
  @item avrxmega2
  ``XMEGA'' devices with more than 8@tie{}KiB and up to 64@tie{}KiB of program memory.
! @*@var{mcu}@tie{}= @code{atxmega8e5}, @code{atxmega16a4}, @code{atxmega16a4u}, @code{atxmega16c4}, @code{atxmega16d4}, @code{atxmega16e5}, @code{atxmega32a4}, @code{atxmega32a4u}, @code{atxmega32c3}, @code{atxmega32c4}, @code{atxmega32d3}, @code{atxmega32d4}, @code{atxmega32e5}, @code{avr64da28}, @code{avr64da32}, @code{avr64da48}, @code{avr64da64}, @code{avr64db28}, @code{avr64db32}, @code{avr64db48}, @code{avr64db64}, @code{avr64dd14}, @code{avr64dd20}, @code{avr64dd28}, @code{avr64dd32}, @code{avr64du28}, @code{avr64du32}, @code{avr64ea28}, @code{avr64ea32}, @code{avr64ea48}, @code{avr64sd28}, @code{avr64sd32}, @code{avr64sd48}.
  
  @item avrxmega3
  ``XMEGA'' devices with up to 64@tie{}KiB of combined program memory and RAM, and with program memory visible in the RAM address space.
! @*@var{mcu}@tie{}= @code{attiny202}, @code{attiny204}, @code{attiny212}, @code{attiny214}, @code{attiny402}, @code{attiny404}, @code{attiny406}, @code{attiny412}, @code{attiny414}, @code{attiny416}, @code{attiny416auto}, @code{attiny417}, @code{attiny424}, @code{attiny426}, @code{attiny427}, @code{attiny804}, @code{attiny806}, @code{attiny807}, @code{attiny814}, @code{attiny816}, @code{attiny817}, @code{attiny824}, @code{attiny826}, @code{attiny827}, @code{attiny1604}, @code{attiny1606}, @code{attiny1607}, @code{attiny1614}, @code{attiny1616}, @code{attiny1617}, @code{attiny1624}, @code{attiny1626}, @code{attiny1627}, @code{attiny3214}, @code{attiny3216}, @code{attiny3217}, @code{attiny3224}, @code{attiny3226}, @code{attiny3227}, @code{atmega808}, @code{atmega809}, @code{atmega1608}, @code{atmega1609}, @code{atmega3208}, @code{atmega3209}, @code{atmega4808}, @code{atmega4809}, @code{avr16dd14}, @code{avr16dd20}, @code{avr16dd28}, @code{avr16dd32}, @code{avr16du14}, @code{avr16du20}, @code{avr16du28}, @code{avr16du32}, @code{avr16ea28}, @code{avr16ea32}, @code{avr16ea48}, @code{avr16eb14}, @code{avr16eb20}, @code{avr16eb28}, @code{avr16eb32}, @code{avr32da28}, @code{avr32da32}, @code{avr32da48}, @code{avr32db28}, @code{avr32db32}, @code{avr32db48}, @code{avr32dd14}, @code{avr32dd20}, @code{avr32dd28}, @code{avr32dd32}, @code{avr32du14}, @code{avr32du20}, @code{avr32du28}, @code{avr32du32}, @code{avr32ea28}, @code{avr32ea32}, @code{avr32ea48}, @code{avr32sd20}, @code{avr32sd28}, @code{avr32sd32}.
  
  @item avrxmega4
  ``XMEGA'' devices with more than 64@tie{}KiB and up to 128@tie{}KiB of program memory.
diff -Nrcpad gcc-13.3.0/gcc/doc/cpp.1 gcc-13.4.0/gcc/doc/cpp.1
*** gcc-13.3.0/gcc/doc/cpp.1	Tue May 21 07:50:34 2024
--- gcc-13.4.0/gcc/doc/cpp.1	Thu Jun  5 16:06:29 2025
***************
*** 133,139 ****
  .\" ========================================================================
  .\"
  .IX Title "CPP 1"
! .TH CPP 1 "2024-05-21" "gcc-13.3.0" "GNU"
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
--- 133,139 ----
  .\" ========================================================================
  .\"
  .IX Title "CPP 1"
! .TH CPP 1 "2025-06-05" "gcc-13.4.0" "GNU"
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
diff -Nrcpad gcc-13.3.0/gcc/doc/cpp.info gcc-13.4.0/gcc/doc/cpp.info
*** gcc-13.3.0/gcc/doc/cpp.info	Tue May 21 08:05:49 2024
--- gcc-13.4.0/gcc/doc/cpp.info	Thu Jun  5 16:21:56 2025
*************** double underscores.
*** 1764,1770 ****
            #if __GNUC__ > 3 || \
                (__GNUC__ == 3 && (__GNUC_MINOR__ > 2 || \
                                   (__GNUC_MINOR__ == 2 && \
!                                   __GNUC_PATCHLEVEL__ > 0))
  
       Another approach is to use the predefined macros to calculate a
       single number, then compare that against a threshold:
--- 1764,1770 ----
            #if __GNUC__ > 3 || \
                (__GNUC__ == 3 && (__GNUC_MINOR__ > 2 || \
                                   (__GNUC_MINOR__ == 2 && \
!                                   __GNUC_PATCHLEVEL__ > 0)))
  
       Another approach is to use the predefined macros to calculate a
       single number, then compare that against a threshold:
*************** Node: Variadic Macros59129
*** 5573,5628 ****
  Node: Predefined Macros64081
  Node: Standard Predefined Macros64669
  Node: Common Predefined Macros71043
! Node: System-specific Predefined Macros93678
! Node: C++ Named Operators95701
! Node: Undefining and Redefining Macros96665
! Node: Directives Within Macro Arguments98763
! Node: Macro Pitfalls99704
! Node: Misnesting100237
! Node: Operator Precedence Problems101349
! Node: Swallowing the Semicolon103215
! Node: Duplication of Side Effects105238
! Node: Self-Referential Macros107421
! Node: Argument Prescan109830
! Node: Newlines in Arguments113581
! Node: Conditionals114532
! Node: Conditional Uses116228
! Node: Conditional Syntax117586
! Node: Ifdef118008
! Node: If121165
! Node: Defined123469
! Node: Else124862
! Node: Elif125432
! Node: __has_attribute126745
! Node: __has_cpp_attribute128339
! Node: __has_c_attribute129229
! Node: __has_builtin130002
! Node: __has_include131135
! Node: Deleted Code132724
! Node: Diagnostics133971
! Node: Line Control135520
! Node: Pragmas137798
! Node: Other Directives142310
! Node: Preprocessor Output143360
! Node: Traditional Mode146513
! Node: Traditional lexical analysis147650
! Node: Traditional macros150153
! Node: Traditional miscellany153950
! Node: Traditional warnings154946
! Node: Implementation Details157143
! Node: Implementation-defined behavior157706
! Ref: Identifier characters158456
! Node: Implementation limits161505
! Node: Obsolete Features164178
! Node: Invocation167022
! Ref: dashMF173057
! Ref: fdollars-in-identifiers177719
! Ref: Wtrigraphs191990
! Node: Environment Variables194045
! Node: GNU Free Documentation License197736
! Node: Index of Directives222886
! Node: Option Index225185
! Node: Concept Index231287
  
  End Tag Table
  
--- 5573,5628 ----
  Node: Predefined Macros64081
  Node: Standard Predefined Macros64669
  Node: Common Predefined Macros71043
! Node: System-specific Predefined Macros93679
! Node: C++ Named Operators95702
! Node: Undefining and Redefining Macros96666
! Node: Directives Within Macro Arguments98764
! Node: Macro Pitfalls99705
! Node: Misnesting100238
! Node: Operator Precedence Problems101350
! Node: Swallowing the Semicolon103216
! Node: Duplication of Side Effects105239
! Node: Self-Referential Macros107422
! Node: Argument Prescan109831
! Node: Newlines in Arguments113582
! Node: Conditionals114533
! Node: Conditional Uses116229
! Node: Conditional Syntax117587
! Node: Ifdef118009
! Node: If121166
! Node: Defined123470
! Node: Else124863
! Node: Elif125433
! Node: __has_attribute126746
! Node: __has_cpp_attribute128340
! Node: __has_c_attribute129230
! Node: __has_builtin130003
! Node: __has_include131136
! Node: Deleted Code132725
! Node: Diagnostics133972
! Node: Line Control135521
! Node: Pragmas137799
! Node: Other Directives142311
! Node: Preprocessor Output143361
! Node: Traditional Mode146514
! Node: Traditional lexical analysis147651
! Node: Traditional macros150154
! Node: Traditional miscellany153951
! Node: Traditional warnings154947
! Node: Implementation Details157144
! Node: Implementation-defined behavior157707
! Ref: Identifier characters158457
! Node: Implementation limits161506
! Node: Obsolete Features164179
! Node: Invocation167023
! Ref: dashMF173058
! Ref: fdollars-in-identifiers177720
! Ref: Wtrigraphs191991
! Node: Environment Variables194046
! Node: GNU Free Documentation License197737
! Node: Index of Directives222887
! Node: Option Index225186
! Node: Concept Index231288
  
  End Tag Table
  
diff -Nrcpad gcc-13.3.0/gcc/doc/cpp.texi gcc-13.4.0/gcc/doc/cpp.texi
*** gcc-13.3.0/gcc/doc/cpp.texi	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/doc/cpp.texi	Thu Jun  5 16:02:58 2025
*************** like this:
*** 1970,1976 ****
  #if __GNUC__ > 3 || \
      (__GNUC__ == 3 && (__GNUC_MINOR__ > 2 || \
                         (__GNUC_MINOR__ == 2 && \
!                         __GNUC_PATCHLEVEL__ > 0))
  @end smallexample
  
  @noindent
--- 1970,1976 ----
  #if __GNUC__ > 3 || \
      (__GNUC__ == 3 && (__GNUC_MINOR__ > 2 || \
                         (__GNUC_MINOR__ == 2 && \
!                         __GNUC_PATCHLEVEL__ > 0)))
  @end smallexample
  
  @noindent
diff -Nrcpad gcc-13.3.0/gcc/doc/extend.texi gcc-13.4.0/gcc/doc/extend.texi
*** gcc-13.3.0/gcc/doc/extend.texi	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/doc/extend.texi	Thu Jun  5 16:02:58 2025
*************** to be excluded from such automatical ini
*** 7789,7795 ****
  overhead.
  
  This attribute has no effect when the option @code{-ftrivial-auto-var-init}
! does not present.
  
  @cindex @code{vector_size} variable attribute
  @item vector_size (@var{bytes})
--- 7789,7795 ----
  overhead.
  
  This attribute has no effect when the option @code{-ftrivial-auto-var-init}
! is not present.
  
  @cindex @code{vector_size} variable attribute
  @item vector_size (@var{bytes})
*************** builtins (@pxref{__atomic Builtins}).  T
*** 12283,12298 ****
  code which should use the @samp{__atomic} builtins instead.
  
  Not all operations are supported by all target processors.  If a particular
! operation cannot be implemented on the target processor, a warning is
! generated and a call to an external function is generated.  The external
! function carries the same name as the built-in version,
! with an additional suffix
  @samp{_@var{n}} where @var{n} is the size of the data type.
  
- @c ??? Should we have a mechanism to suppress this warning?  This is almost
- @c useful for implementing the operation under the control of an external
- @c mutex.
- 
  In most cases, these built-in functions are considered a @dfn{full barrier}.
  That is,
  no memory operand is moved across the operation, either forward or
--- 12283,12293 ----
  code which should use the @samp{__atomic} builtins instead.
  
  Not all operations are supported by all target processors.  If a particular
! operation cannot be implemented on the target processor, a call to an
! external function is generated.  The external function carries the same name
! as the built-in version, with an additional suffix
  @samp{_@var{n}} where @var{n} is the size of the data type.
  
  In most cases, these built-in functions are considered a @dfn{full barrier}.
  That is,
  no memory operand is moved across the operation, either forward or
*************** AMD Family 19h Zen version 3.
*** 22060,22065 ****
--- 22055,22063 ----
  
  @item znver4
  AMD Family 19h Zen version 4.
+ 
+ @item znver5
+ AMD Family 1ah Zen version 5.
  @end table
  
  Here is an example:
diff -Nrcpad gcc-13.3.0/gcc/doc/fsf-funding.7 gcc-13.4.0/gcc/doc/fsf-funding.7
*** gcc-13.3.0/gcc/doc/fsf-funding.7	Tue May 21 07:50:34 2024
--- gcc-13.4.0/gcc/doc/fsf-funding.7	Thu Jun  5 16:06:29 2025
***************
*** 133,139 ****
  .\" ========================================================================
  .\"
  .IX Title "FSF-FUNDING 7"
! .TH FSF-FUNDING 7 "2024-05-21" "gcc-13.3.0" "GNU"
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
--- 133,139 ----
  .\" ========================================================================
  .\"
  .IX Title "FSF-FUNDING 7"
! .TH FSF-FUNDING 7 "2025-06-05" "gcc-13.4.0" "GNU"
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
diff -Nrcpad gcc-13.3.0/gcc/doc/g++.1 gcc-13.4.0/gcc/doc/g++.1
*** gcc-13.3.0/gcc/doc/g++.1	Tue May 21 08:05:50 2024
--- gcc-13.4.0/gcc/doc/g++.1	Thu Jun  5 16:21:57 2025
***************
*** 133,139 ****
  .\" ========================================================================
  .\"
  .IX Title "GCC 1"
! .TH GCC 1 "2024-05-21" "gcc-13.3.0" "GNU"
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
--- 133,139 ----
  .\" ========================================================================
  .\"
  .IX Title "GCC 1"
! .TH GCC 1 "2025-06-05" "gcc-13.4.0" "GNU"
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
*************** the available options are shown at start
*** 15697,15704 ****
  <\fBhttps://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run\-time\-flags\fR>
  for a list of supported options.
  The option cannot be combined with \fB\-fsanitize=thread\fR or
! \&\fB\-fsanitize=hwaddress\fR.  Note that the only target
! \&\fB\-fsanitize=hwaddress\fR is currently supported on is AArch64.
  .Sp
  To get more accurate stack traces, it is possible to use options such as
  \&\fB\-O0\fR, \fB\-O1\fR, or \fB\-Og\fR (which, for instance, prevent
--- 15697,15706 ----
  <\fBhttps://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run\-time\-flags\fR>
  for a list of supported options.
  The option cannot be combined with \fB\-fsanitize=thread\fR or
! \&\fB\-fsanitize=hwaddress\fR.  Note that the only targets
! \&\fB\-fsanitize=hwaddress\fR is currently supported on are x86\-64
! (only with \f(CW\*(C`\-mlam=u48\*(C'\fR or \f(CW\*(C`\-mlam=u57\*(C'\fR options) and AArch64,
! in both cases only in ABIs with 64\-bit pointers.
  .Sp
  To get more accurate stack traces, it is possible to use options such as
  \&\fB\-O0\fR, \fB\-O1\fR, or \fB\-Og\fR (which, for instance, prevent
*************** By default, the dump will contain messag
*** 18540,18545 ****
--- 18542,18632 ----
  optimizations (equivalent to \fB\-optimized\fR) together with
  low-level details about the analysis.
  .RE
+ .IP "\fB\-fdump\-ipa\-clones\fR" 4
+ .IX Item "-fdump-ipa-clones"
+ Create a dump file containing information about creation of call graph
+ node clones and removals of call graph nodes during inter-procedural
+ optimizations and transformations.  Its main intended use is that tools
+ that create live-patches can determine the set of functions that need to
+ be live-patched to completely replace a particular function (see
+ \&\fB\-flive\-patching\fR).  The file name is generated by appending
+ suffix \f(CW\*(C`ipa\-clones\*(C'\fR to the source file name, and the file is
+ created in the same directory as the output file.  Each entry in the
+ file is on a separate line containing semicolon separated fields.
+ .Sp
+ In the case of call graph clone creation, the individual fields are:
+ .RS 4
+ .IP "1." 4
+ .IX Item "1."
+ String \f(CW\*(C`Callgraph clone\*(C'\fR.
+ .IP "2." 4
+ .IX Item "2."
+ Name of the function being cloned as it is presented to the assembler.
+ .IP "3." 4
+ .IX Item "3."
+ A number that uniquely represents the function being cloned in the call
+ graph.  Note that the number is unique only within a compilation unit or
+ within whole-program analysis but is likely to be different in the two
+ phases.
+ .IP "4." 4
+ .IX Item "4."
+ The file name of the source file where the function is defined.
+ .IP "5." 4
+ .IX Item "5."
+ The line on which the function definition is located.
+ .IP "6." 4
+ .IX Item "6."
+ The column where the function definition is located.
+ .IP "7." 4
+ .IX Item "7."
+ Name of the new function clone as it is presented to the assembler.
+ .IP "8." 4
+ .IX Item "8."
+ A number that uniquely represents the new function clone in the call
+ graph.  Note that the number is unique only within a compilation unit or
+ within whole-program analysis but is likely to be different in the two
+ phases.
+ .IP "9." 4
+ .IX Item "9."
+ The file name of the source file where the source code location of the
+ new clone points to.
+ .IP "10." 4
+ .IX Item "10."
+ The line to which the source code location of the new clone points to.
+ .IP "11." 4
+ .IX Item "11."
+ The column to which the source code location of the new clone points to.
+ .IP "12." 4
+ .IX Item "12."
+ A string that determines the reason for cloning.
+ .RE
+ .RS 4
+ .Sp
+ In the case of call graph clone removal, the individual fields are:
+ .IP "1." 4
+ .IX Item "1."
+ String \f(CW\*(C`Callgraph removal\*(C'\fR.
+ .IP "2." 4
+ .IX Item "2."
+ Name of the function being removed as it would be presented to the assembler.
+ .IP "3." 4
+ .IX Item "3."
+ A number that uniquely represents the function being cloned in the call
+ graph.  Note that the number is unique only within a compilation unit or
+ within whole-program analysis but is likely to be different in the two
+ phases.
+ .IP "4." 4
+ .IX Item "4."
+ The file name of the source file where the function is defined.
+ .IP "5." 4
+ .IX Item "5."
+ The line on which the function definition is located.
+ .IP "6." 4
+ .IX Item "6."
+ The column where the function definition is located.
+ .RE
+ .RS 4
+ .RE
  .IP "\fB\-fdump\-lang\fR" 4
  .IX Item "-fdump-lang"
  Dump language-specific information.  The file name is made by appending
*************** performance of the code.  Permissible va
*** 19610,19617 ****
  \&\fBcortex\-a78\fR, \fBcortex\-a78ae\fR, \fBcortex\-a78c\fR,
  \&\fBares\fR, \fBexynos\-m1\fR, \fBemag\fR, \fBfalkor\fR,
  \&\fBneoverse\-512tvb\fR, \fBneoverse\-e1\fR, \fBneoverse\-n1\fR,
! \&\fBneoverse\-n2\fR, \fBneoverse\-v1\fR, \fBneoverse\-v2\fR, \fBqdf24xx\fR,
! \&\fBsaphira\fR, \fBphecda\fR, \fBxgene1\fR, \fBvulcan\fR,
  \&\fBocteontx\fR, \fBocteontx81\fR,  \fBocteontx83\fR,
  \&\fBocteontx2\fR, \fBocteontx2t98\fR, \fBocteontx2t96\fR
  \&\fBocteontx2t93\fR, \fBocteontx2f95\fR, \fBocteontx2f95n\fR,
--- 19697,19704 ----
  \&\fBcortex\-a78\fR, \fBcortex\-a78ae\fR, \fBcortex\-a78c\fR,
  \&\fBares\fR, \fBexynos\-m1\fR, \fBemag\fR, \fBfalkor\fR,
  \&\fBneoverse\-512tvb\fR, \fBneoverse\-e1\fR, \fBneoverse\-n1\fR,
! \&\fBneoverse\-n2\fR, \fBneoverse\-v1\fR, \fBneoverse\-v2\fR, \fBgrace\fR,
! \&\fBqdf24xx\fR, \fBsaphira\fR, \fBphecda\fR, \fBxgene1\fR, \fBvulcan\fR,
  \&\fBocteontx\fR, \fBocteontx81\fR,  \fBocteontx83\fR,
  \&\fBocteontx2\fR, \fBocteontx2t98\fR, \fBocteontx2t96\fR
  \&\fBocteontx2t93\fR, \fBocteontx2f95\fR, \fBocteontx2f95n\fR,
*************** from the hardware manufacturer.
*** 22053,22064 ****
  .el .IP "\f(CWavrxmega2\fR" 4
  .IX Item "avrxmega2"
  \&\*(L"\s-1XMEGA\*(R"\s0 devices with more than 8 KiB and up to 64 KiB of program memory.
! \&\fImcu\fR = \f(CW\*(C`atxmega8e5\*(C'\fR, \f(CW\*(C`atxmega16a4\*(C'\fR, \f(CW\*(C`atxmega16a4u\*(C'\fR, \f(CW\*(C`atxmega16c4\*(C'\fR, \f(CW\*(C`atxmega16d4\*(C'\fR, \f(CW\*(C`atxmega16e5\*(C'\fR, \f(CW\*(C`atxmega32a4\*(C'\fR, \f(CW\*(C`atxmega32a4u\*(C'\fR, \f(CW\*(C`atxmega32c3\*(C'\fR, \f(CW\*(C`atxmega32c4\*(C'\fR, \f(CW\*(C`atxmega32d3\*(C'\fR, \f(CW\*(C`atxmega32d4\*(C'\fR, \f(CW\*(C`atxmega32e5\*(C'\fR, \f(CW\*(C`avr64da28\*(C'\fR, \f(CW\*(C`avr64da32\*(C'\fR, \f(CW\*(C`avr64da48\*(C'\fR, \f(CW\*(C`avr64da64\*(C'\fR, \f(CW\*(C`avr64db28\*(C'\fR, \f(CW\*(C`avr64db32\*(C'\fR, \f(CW\*(C`avr64db48\*(C'\fR, \f(CW\*(C`avr64db64\*(C'\fR, \f(CW\*(C`avr64dd14\*(C'\fR, \f(CW\*(C`avr64dd20\*(C'\fR, \f(CW\*(C`avr64dd28\*(C'\fR, \f(CW\*(C`avr64dd32\*(C'\fR, \f(CW\*(C`avr64du28\*(C'\fR, \f(CW\*(C`avr64du32\*(C'\fR, \f(CW\*(C`avr64ea28\*(C'\fR, \f(CW\*(C`avr64ea32\*(C'\fR, \f(CW\*(C`avr64ea48\*(C'\fR.
  .ie n .IP """avrxmega3""" 4
  .el .IP "\f(CWavrxmega3\fR" 4
  .IX Item "avrxmega3"
  \&\*(L"\s-1XMEGA\*(R"\s0 devices with up to 64 KiB of combined program memory and \s-1RAM,\s0 and with program memory visible in the \s-1RAM\s0 address space.
! \&\fImcu\fR = \f(CW\*(C`attiny202\*(C'\fR, \f(CW\*(C`attiny204\*(C'\fR, \f(CW\*(C`attiny212\*(C'\fR, \f(CW\*(C`attiny214\*(C'\fR, \f(CW\*(C`attiny402\*(C'\fR, \f(CW\*(C`attiny404\*(C'\fR, \f(CW\*(C`attiny406\*(C'\fR, \f(CW\*(C`attiny412\*(C'\fR, \f(CW\*(C`attiny414\*(C'\fR, \f(CW\*(C`attiny416\*(C'\fR, \f(CW\*(C`attiny416auto\*(C'\fR, \f(CW\*(C`attiny417\*(C'\fR, \f(CW\*(C`attiny424\*(C'\fR, \f(CW\*(C`attiny426\*(C'\fR, \f(CW\*(C`attiny427\*(C'\fR, \f(CW\*(C`attiny804\*(C'\fR, \f(CW\*(C`attiny806\*(C'\fR, \f(CW\*(C`attiny807\*(C'\fR, \f(CW\*(C`attiny814\*(C'\fR, \f(CW\*(C`attiny816\*(C'\fR, \f(CW\*(C`attiny817\*(C'\fR, \f(CW\*(C`attiny824\*(C'\fR, \f(CW\*(C`attiny826\*(C'\fR, \f(CW\*(C`attiny827\*(C'\fR, \f(CW\*(C`attiny1604\*(C'\fR, \f(CW\*(C`attiny1606\*(C'\fR, \f(CW\*(C`attiny1607\*(C'\fR, \f(CW\*(C`attiny1614\*(C'\fR, \f(CW\*(C`attiny1616\*(C'\fR, \f(CW\*(C`attiny1617\*(C'\fR, \f(CW\*(C`attiny1624\*(C'\fR, \f(CW\*(C`attiny1626\*(C'\fR, \f(CW\*(C`attiny1627\*(C'\fR, \f(CW\*(C`attiny3214\*(C'\fR, \f(CW\*(C`attiny3216\*(C'\fR, \f(CW\*(C`attiny3217\*(C'\fR, \f(CW\*(C`attiny3224\*(C'\fR, \f(CW\*(C`attiny3226\*(C'\fR, \f(CW\*(C`attiny3227\*(C'\fR, \f(CW\*(C`atmega808\*(C'\fR, \f(CW\*(C`atmega809\*(C'\fR, \f(CW\*(C`atmega1608\*(C'\fR, \f(CW\*(C`atmega1609\*(C'\fR, \f(CW\*(C`atmega3208\*(C'\fR, \f(CW\*(C`atmega3209\*(C'\fR, \f(CW\*(C`atmega4808\*(C'\fR, \f(CW\*(C`atmega4809\*(C'\fR, \f(CW\*(C`avr16dd14\*(C'\fR, \f(CW\*(C`avr16dd20\*(C'\fR, \f(CW\*(C`avr16dd28\*(C'\fR, \f(CW\*(C`avr16dd32\*(C'\fR, \f(CW\*(C`avr16du14\*(C'\fR, \f(CW\*(C`avr16du20\*(C'\fR, \f(CW\*(C`avr16du28\*(C'\fR, \f(CW\*(C`avr16du32\*(C'\fR, \f(CW\*(C`avr16ea28\*(C'\fR, \f(CW\*(C`avr16ea32\*(C'\fR, \f(CW\*(C`avr16ea48\*(C'\fR, \f(CW\*(C`avr16eb14\*(C'\fR, \f(CW\*(C`avr16eb20\*(C'\fR, \f(CW\*(C`avr16eb28\*(C'\fR, \f(CW\*(C`avr16eb32\*(C'\fR, \f(CW\*(C`avr32da28\*(C'\fR, \f(CW\*(C`avr32da32\*(C'\fR, \f(CW\*(C`avr32da48\*(C'\fR, \f(CW\*(C`avr32db28\*(C'\fR, \f(CW\*(C`avr32db32\*(C'\fR, \f(CW\*(C`avr32db48\*(C'\fR, \f(CW\*(C`avr32dd14\*(C'\fR, \f(CW\*(C`avr32dd20\*(C'\fR, \f(CW\*(C`avr32dd28\*(C'\fR, \f(CW\*(C`avr32dd32\*(C'\fR, \f(CW\*(C`avr32du14\*(C'\fR, \f(CW\*(C`avr32du20\*(C'\fR, \f(CW\*(C`avr32du28\*(C'\fR, \f(CW\*(C`avr32du32\*(C'\fR, \f(CW\*(C`avr32ea28\*(C'\fR, \f(CW\*(C`avr32ea32\*(C'\fR, \f(CW\*(C`avr32ea48\*(C'\fR.
  .ie n .IP """avrxmega4""" 4
  .el .IP "\f(CWavrxmega4\fR" 4
  .IX Item "avrxmega4"
--- 22140,22151 ----
  .el .IP "\f(CWavrxmega2\fR" 4
  .IX Item "avrxmega2"
  \&\*(L"\s-1XMEGA\*(R"\s0 devices with more than 8 KiB and up to 64 KiB of program memory.
! \&\fImcu\fR = \f(CW\*(C`atxmega8e5\*(C'\fR, \f(CW\*(C`atxmega16a4\*(C'\fR, \f(CW\*(C`atxmega16a4u\*(C'\fR, \f(CW\*(C`atxmega16c4\*(C'\fR, \f(CW\*(C`atxmega16d4\*(C'\fR, \f(CW\*(C`atxmega16e5\*(C'\fR, \f(CW\*(C`atxmega32a4\*(C'\fR, \f(CW\*(C`atxmega32a4u\*(C'\fR, \f(CW\*(C`atxmega32c3\*(C'\fR, \f(CW\*(C`atxmega32c4\*(C'\fR, \f(CW\*(C`atxmega32d3\*(C'\fR, \f(CW\*(C`atxmega32d4\*(C'\fR, \f(CW\*(C`atxmega32e5\*(C'\fR, \f(CW\*(C`avr64da28\*(C'\fR, \f(CW\*(C`avr64da32\*(C'\fR, \f(CW\*(C`avr64da48\*(C'\fR, \f(CW\*(C`avr64da64\*(C'\fR, \f(CW\*(C`avr64db28\*(C'\fR, \f(CW\*(C`avr64db32\*(C'\fR, \f(CW\*(C`avr64db48\*(C'\fR, \f(CW\*(C`avr64db64\*(C'\fR, \f(CW\*(C`avr64dd14\*(C'\fR, \f(CW\*(C`avr64dd20\*(C'\fR, \f(CW\*(C`avr64dd28\*(C'\fR, \f(CW\*(C`avr64dd32\*(C'\fR, \f(CW\*(C`avr64du28\*(C'\fR, \f(CW\*(C`avr64du32\*(C'\fR, \f(CW\*(C`avr64ea28\*(C'\fR, \f(CW\*(C`avr64ea32\*(C'\fR, \f(CW\*(C`avr64ea48\*(C'\fR, \f(CW\*(C`avr64sd28\*(C'\fR, \f(CW\*(C`avr64sd32\*(C'\fR, \f(CW\*(C`avr64sd48\*(C'\fR.
  .ie n .IP """avrxmega3""" 4
  .el .IP "\f(CWavrxmega3\fR" 4
  .IX Item "avrxmega3"
  \&\*(L"\s-1XMEGA\*(R"\s0 devices with up to 64 KiB of combined program memory and \s-1RAM,\s0 and with program memory visible in the \s-1RAM\s0 address space.
! \&\fImcu\fR = \f(CW\*(C`attiny202\*(C'\fR, \f(CW\*(C`attiny204\*(C'\fR, \f(CW\*(C`attiny212\*(C'\fR, \f(CW\*(C`attiny214\*(C'\fR, \f(CW\*(C`attiny402\*(C'\fR, \f(CW\*(C`attiny404\*(C'\fR, \f(CW\*(C`attiny406\*(C'\fR, \f(CW\*(C`attiny412\*(C'\fR, \f(CW\*(C`attiny414\*(C'\fR, \f(CW\*(C`attiny416\*(C'\fR, \f(CW\*(C`attiny416auto\*(C'\fR, \f(CW\*(C`attiny417\*(C'\fR, \f(CW\*(C`attiny424\*(C'\fR, \f(CW\*(C`attiny426\*(C'\fR, \f(CW\*(C`attiny427\*(C'\fR, \f(CW\*(C`attiny804\*(C'\fR, \f(CW\*(C`attiny806\*(C'\fR, \f(CW\*(C`attiny807\*(C'\fR, \f(CW\*(C`attiny814\*(C'\fR, \f(CW\*(C`attiny816\*(C'\fR, \f(CW\*(C`attiny817\*(C'\fR, \f(CW\*(C`attiny824\*(C'\fR, \f(CW\*(C`attiny826\*(C'\fR, \f(CW\*(C`attiny827\*(C'\fR, \f(CW\*(C`attiny1604\*(C'\fR, \f(CW\*(C`attiny1606\*(C'\fR, \f(CW\*(C`attiny1607\*(C'\fR, \f(CW\*(C`attiny1614\*(C'\fR, \f(CW\*(C`attiny1616\*(C'\fR, \f(CW\*(C`attiny1617\*(C'\fR, \f(CW\*(C`attiny1624\*(C'\fR, \f(CW\*(C`attiny1626\*(C'\fR, \f(CW\*(C`attiny1627\*(C'\fR, \f(CW\*(C`attiny3214\*(C'\fR, \f(CW\*(C`attiny3216\*(C'\fR, \f(CW\*(C`attiny3217\*(C'\fR, \f(CW\*(C`attiny3224\*(C'\fR, \f(CW\*(C`attiny3226\*(C'\fR, \f(CW\*(C`attiny3227\*(C'\fR, \f(CW\*(C`atmega808\*(C'\fR, \f(CW\*(C`atmega809\*(C'\fR, \f(CW\*(C`atmega1608\*(C'\fR, \f(CW\*(C`atmega1609\*(C'\fR, \f(CW\*(C`atmega3208\*(C'\fR, \f(CW\*(C`atmega3209\*(C'\fR, \f(CW\*(C`atmega4808\*(C'\fR, \f(CW\*(C`atmega4809\*(C'\fR, \f(CW\*(C`avr16dd14\*(C'\fR, \f(CW\*(C`avr16dd20\*(C'\fR, \f(CW\*(C`avr16dd28\*(C'\fR, \f(CW\*(C`avr16dd32\*(C'\fR, \f(CW\*(C`avr16du14\*(C'\fR, \f(CW\*(C`avr16du20\*(C'\fR, \f(CW\*(C`avr16du28\*(C'\fR, \f(CW\*(C`avr16du32\*(C'\fR, \f(CW\*(C`avr16ea28\*(C'\fR, \f(CW\*(C`avr16ea32\*(C'\fR, \f(CW\*(C`avr16ea48\*(C'\fR, \f(CW\*(C`avr16eb14\*(C'\fR, \f(CW\*(C`avr16eb20\*(C'\fR, \f(CW\*(C`avr16eb28\*(C'\fR, \f(CW\*(C`avr16eb32\*(C'\fR, \f(CW\*(C`avr32da28\*(C'\fR, \f(CW\*(C`avr32da32\*(C'\fR, \f(CW\*(C`avr32da48\*(C'\fR, \f(CW\*(C`avr32db28\*(C'\fR, \f(CW\*(C`avr32db32\*(C'\fR, \f(CW\*(C`avr32db48\*(C'\fR, \f(CW\*(C`avr32dd14\*(C'\fR, \f(CW\*(C`avr32dd20\*(C'\fR, \f(CW\*(C`avr32dd28\*(C'\fR, \f(CW\*(C`avr32dd32\*(C'\fR, \f(CW\*(C`avr32du14\*(C'\fR, \f(CW\*(C`avr32du20\*(C'\fR, \f(CW\*(C`avr32du28\*(C'\fR, \f(CW\*(C`avr32du32\*(C'\fR, \f(CW\*(C`avr32ea28\*(C'\fR, \f(CW\*(C`avr32ea32\*(C'\fR, \f(CW\*(C`avr32ea48\*(C'\fR, \f(CW\*(C`avr32sd20\*(C'\fR, \f(CW\*(C`avr32sd28\*(C'\fR, \f(CW\*(C`avr32sd32\*(C'\fR.
  .ie n .IP """avrxmega4""" 4
  .el .IP "\f(CWavrxmega4\fR" 4
  .IX Item "avrxmega4"
*************** Intel Core 2 \s-1CPU\s0 with 64\-bit ext
*** 31389,31394 ****
--- 31476,31485 ----
  SAHF\s0 and \s-1FXSR\s0 instruction set support.
  .IP "\fBnehalem\fR" 4
  .IX Item "nehalem"
+ .PD 0
+ .IP "\fBcorei7\fR" 4
+ .IX Item "corei7"
+ .PD
  Intel Nehalem \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF\s0 and \s-1FXSR\s0 instruction set support.
  .IP "\fBwestmere\fR" 4
*************** Intel Westmere \s-1CPU\s0 with 64\-bit e
*** 31397,31413 ****
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR\s0 and \s-1PCLMUL\s0 instruction set support.
  .IP "\fBsandybridge\fR" 4
  .IX Item "sandybridge"
  Intel Sandy Bridge \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE\s0 and \s-1PCLMUL\s0 instruction set
  support.
  .IP "\fBivybridge\fR" 4
  .IX Item "ivybridge"
  Intel Ivy Bridge \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND\s0
  and F16C instruction set support.
  .IP "\fBhaswell\fR" 4
  .IX Item "haswell"
! Intel Haswell \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE\s0 and \s-1HLE\s0 instruction set support.
  .IP "\fBbroadwell\fR" 4
--- 31488,31516 ----
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR\s0 and \s-1PCLMUL\s0 instruction set support.
  .IP "\fBsandybridge\fR" 4
  .IX Item "sandybridge"
+ .PD 0
+ .IP "\fBcorei7\-avx\fR" 4
+ .IX Item "corei7-avx"
+ .PD
  Intel Sandy Bridge \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE\s0 and \s-1PCLMUL\s0 instruction set
  support.
  .IP "\fBivybridge\fR" 4
  .IX Item "ivybridge"
+ .PD 0
+ .IP "\fBcore-avx-i\fR" 4
+ .IX Item "core-avx-i"
+ .PD
  Intel Ivy Bridge \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND\s0
  and F16C instruction set support.
  .IP "\fBhaswell\fR" 4
  .IX Item "haswell"
! .PD 0
! .IP "\fBcore\-avx2\fR" 4
! .IX Item "core-avx2"
! .PD
! Intel Haswell \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE\s0 and \s-1HLE\s0 instruction set support.
  .IP "\fBbroadwell\fR" 4
*************** Intel Skylake \s-1CPU\s0 with 64\-bit ex
*** 31422,31486 ****
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
  CLFLUSHOPT, XSAVEC, XSAVES\s0 and \s-1SGX\s0 instruction set support.
- .IP "\fBbonnell\fR" 4
- .IX Item "bonnell"
- Intel Bonnell \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3\s0 and \s-1SSSE3\s0
- instruction set support.
- .IP "\fBsilvermont\fR" 4
- .IX Item "silvermont"
- Intel Silvermont \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
- SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW\s0 and \s-1RDRND\s0
- instruction set support.
- .IP "\fBgoldmont\fR" 4
- .IX Item "goldmont"
- Intel Goldmont \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
- SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, SHA,
- RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT\s0 and \s-1FSGSBASE\s0 instruction
- set support.
- .IP "\fBgoldmont-plus\fR" 4
- .IX Item "goldmont-plus"
- Intel Goldmont Plus \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
- SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES,
- SHA, RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE,
- RDPID\s0 and \s-1SGX\s0 instruction set support.
- .IP "\fBtremont\fR" 4
- .IX Item "tremont"
- Intel Tremont \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
- SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, SHA,
- RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE, RDPID,
- SGX, CLWB,\s0 GFNI-SSE, \s-1MOVDIRI, MOVDIR64B, CLDEMOTE\s0 and \s-1WAITPKG\s0 instruction set
- support.
- .IP "\fBsierraforest\fR" 4
- .IX Item "sierraforest"
- Intel Sierra Forest \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
- SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
- XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX,\s0 GFNI-SSE, \s-1CLWB, MOVDIRI,
- MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT,
- PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL,\s0 AVX-VNNI,
- \&\s-1AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, ENQCMD\s0 and \s-1UINTR\s0 instruction set
- support.
- .IP "\fBgrandridge\fR" 4
- .IX Item "grandridge"
- Intel Grand Ridge \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
- SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
- XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX,\s0 GFNI-SSE, \s-1CLWB, MOVDIRI,
- MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT,
- PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL,\s0 AVX-VNNI,
- \&\s-1AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, ENQCMD\s0 and \s-1UINTR\s0 instruction set
- support.
- .IP "\fBknl\fR" 4
- .IX Item "knl"
- Intel Knight's Landing \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
- SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
- RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
- AVX512PF, AVX512ER, AVX512F, AVX512CD\s0 and \s-1PREFETCHWT1\s0 instruction set support.
- .IP "\fBknm\fR" 4
- .IX Item "knm"
- Intel Knights Mill \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
- SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
- RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
- AVX512PF, AVX512ER, AVX512F, AVX512CD\s0 and \s-1PREFETCHWT1, AVX5124VNNIW,
- AVX5124FMAPS\s0 and \s-1AVX512VPOPCNTDQ\s0 instruction set support.
  .IP "\fBskylake\-avx512\fR" 4
  .IX Item "skylake-avx512"
  Intel Skylake Server \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
--- 31525,31530 ----
*************** SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAH
*** 31488,31504 ****
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW,
  AVX512DQ\s0 and \s-1AVX512CD\s0 instruction set support.
  .IP "\fBcannonlake\fR" 4
  .IX Item "cannonlake"
! Intel Cannonlake Server \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2,
  SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL,
  FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX,
  PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
  AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA\s0 and \s-1SHA\s0 instruction set
  support.
  .IP "\fBicelake-client\fR" 4
  .IX Item "icelake-client"
! Intel Icelake Client \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
--- 31532,31562 ----
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW,
  AVX512DQ\s0 and \s-1AVX512CD\s0 instruction set support.
+ .IP "\fBcascadelake\fR" 4
+ .IX Item "cascadelake"
+ Intel Cascade Lake \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
+ SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
+ F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
+ CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ,
+ AVX512CD\s0 and \s-1AVX512VNNI\s0 instruction set support.
  .IP "\fBcannonlake\fR" 4
  .IX Item "cannonlake"
! Intel Cannon Lake Server \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2,
  SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL,
  FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX,
  PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
  AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA\s0 and \s-1SHA\s0 instruction set
  support.
+ .IP "\fBcooperlake\fR" 4
+ .IX Item "cooperlake"
+ Intel Cooper Lake \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
+ SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
+ F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
+ CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ,
+ AVX512CD, AVX512VNNI\s0 and \s-1AVX512BF16\s0 instruction set support.
  .IP "\fBicelake-client\fR" 4
  .IX Item "icelake-client"
! Intel Ice Lake Client \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
*************** AVX512CD, PKU, AVX512VBMI, AVX512IFMA, S
*** 31506,31571 ****
  , VPCLMULQDQ, AVX512BITALG, RDPID\s0 and \s-1AVX512VPOPCNTDQ\s0 instruction set support.
  .IP "\fBicelake-server\fR" 4
  .IX Item "icelake-server"
! Intel Icelake Server \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
  AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2
  , VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD\s0 and \s-1CLWB\s0
  instruction set support.
- .IP "\fBcascadelake\fR" 4
- .IX Item "cascadelake"
- Intel Cascadelake \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
- SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
- F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
- CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ,
- AVX512CD\s0 and \s-1AVX512VNNI\s0 instruction set support.
- .IP "\fBcooperlake\fR" 4
- .IX Item "cooperlake"
- Intel cooperlake \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
- SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
- F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
- CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ,
- AVX512CD, AVX512VNNI\s0 and \s-1AVX512BF16\s0 instruction set support.
  .IP "\fBtigerlake\fR" 4
  .IX Item "tigerlake"
! Intel Tigerlake \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
  CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD
  PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2,
  VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, MOVDIRI, MOVDIR64B, CLWB,
  AVX512VP2INTERSECT\s0 and \s-1KEYLOCKER\s0 instruction set support.
- .IP "\fBsapphirerapids\fR" 4
- .IX Item "sapphirerapids"
- Intel sapphirerapids \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
- SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
- RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
- AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
- AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2,
- VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD, CLWB,
- MOVDIRI, MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, TSXLDTRK,
- UINTR, AMX\-BF16,\s0 AMX-TILE, \s-1AMX\-INT8,\s0 AVX-VNNI, \s-1AVX512\-FP16\s0 and \s-1AVX512BF16\s0
- instruction set support.
- .IP "\fBalderlake\fR" 4
- .IX Item "alderlake"
- Intel Alderlake \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
- SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES,
- XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX,\s0 GFNI-SSE, \s-1CLWB, MOVDIRI, MOVDIR64B,
- CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT, PCONFIG, PKU,
- VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL\s0 and AVX-VNNI instruction set
- support.
  .IP "\fBrocketlake\fR" 4
  .IX Item "rocketlake"
! Intel Rocketlake \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3
! , SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
  CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD
  PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2,
  VPCLMULQDQ, AVX512BITALG, RDPID\s0 and \s-1AVX512VPOPCNTDQ\s0 instruction set support.
  .IP "\fBgraniterapids\fR" 4
  .IX Item "graniterapids"
! Intel graniterapids \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
--- 31564,31625 ----
  , VPCLMULQDQ, AVX512BITALG, RDPID\s0 and \s-1AVX512VPOPCNTDQ\s0 instruction set support.
  .IP "\fBicelake-server\fR" 4
  .IX Item "icelake-server"
! Intel Ice Lake Server \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
  AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2
  , VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD\s0 and \s-1CLWB\s0
  instruction set support.
  .IP "\fBtigerlake\fR" 4
  .IX Item "tigerlake"
! Intel Tiger Lake \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
  CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD
  PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2,
  VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, MOVDIRI, MOVDIR64B, CLWB,
  AVX512VP2INTERSECT\s0 and \s-1KEYLOCKER\s0 instruction set support.
  .IP "\fBrocketlake\fR" 4
  .IX Item "rocketlake"
! Intel Rocket Lake \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
! SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
  CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD
  PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2,
  VPCLMULQDQ, AVX512BITALG, RDPID\s0 and \s-1AVX512VPOPCNTDQ\s0 instruction set support.
+ .IP "\fBalderlake\fR" 4
+ .IX Item "alderlake"
+ .PD 0
+ .IP "\fBraptorlake\fR" 4
+ .IX Item "raptorlake"
+ .IP "\fBmeteorlake\fR" 4
+ .IX Item "meteorlake"
+ .PD
+ Intel Alder Lake/Raptor Lake/Meteor Lake \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX,
+ SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND,
+ XSAVE, XSAVEC, XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX,\s0 GFNI-SSE, \s-1CLWB,
+ MOVDIRI, MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA,
+ LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL\s0 and
+ AVX-VNNI instruction set support.
+ .IP "\fBsapphirerapids\fR" 4
+ .IX Item "sapphirerapids"
+ .PD 0
+ .IP "\fBemeraldrapids\fR" 4
+ .IX Item "emeraldrapids"
+ .PD
+ Intel Sapphire Rapids/Emerald Rapids \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE,
+ SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL,
+ FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX,
+ PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
+ AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES,
+ AVX512VBMI2, VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG,
+ WBNOINVD, CLWB, MOVDIRI, MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG,
+ SERIALIZE, TSXLDTRK, UINTR, AMX\-BF16,\s0 AMX-TILE, \s-1AMX\-INT8,\s0 AVX-VNNI, \s-1AVX512\-FP16\s0
+ and \s-1AVX512BF16\s0 instruction set support.
  .IP "\fBgraniterapids\fR" 4
  .IX Item "graniterapids"
! Intel Granite Rapids \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
*************** UINTR, AMX\-BF16,\s0 AMX-TILE, \s-1AMX\-
*** 31576,31582 ****
  and \s-1PREFETCHI\s0 instruction set support.
  .IP "\fBgraniterapids-d\fR" 4
  .IX Item "graniterapids-d"
! Intel graniterapids D \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
--- 31630,31636 ----
  and \s-1PREFETCHI\s0 instruction set support.
  .IP "\fBgraniterapids-d\fR" 4
  .IX Item "graniterapids-d"
! Intel Granite Rapids D \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
*************** VPCLMULQDQ, AVX512BITALG, RDPID, AVX512V
*** 31585,31590 ****
--- 31639,31711 ----
  MOVDIRI, MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, TSXLDTRK,
  UINTR, AMX\-BF16,\s0 AMX-TILE, \s-1AMX\-INT8,\s0 AVX-VNNI, \s-1AVX512FP16, AVX512BF16, AMX\-FP16,
  PREFETCHI\s0 and AMX-COMPLEX instruction set support.
+ .IP "\fBbonnell\fR" 4
+ .IX Item "bonnell"
+ .PD 0
+ .IP "\fBatom\fR" 4
+ .IX Item "atom"
+ .PD
+ Intel Bonnell \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3\s0 and \s-1SSSE3\s0
+ instruction set support.
+ .IP "\fBsilvermont\fR" 4
+ .IX Item "silvermont"
+ .PD 0
+ .IP "\fBslm\fR" 4
+ .IX Item "slm"
+ .PD
+ Intel Silvermont \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
+ SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW\s0 and \s-1RDRND\s0
+ instruction set support.
+ .IP "\fBgoldmont\fR" 4
+ .IX Item "goldmont"
+ Intel Goldmont \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
+ SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, SHA,
+ RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT\s0 and \s-1FSGSBASE\s0 instruction
+ set support.
+ .IP "\fBgoldmont-plus\fR" 4
+ .IX Item "goldmont-plus"
+ Intel Goldmont Plus \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
+ SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES,
+ SHA, RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE,
+ RDPID\s0 and \s-1SGX\s0 instruction set support.
+ .IP "\fBtremont\fR" 4
+ .IX Item "tremont"
+ Intel Tremont \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
+ SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, SHA,
+ RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE, RDPID,
+ SGX, CLWB,\s0 GFNI-SSE, \s-1MOVDIRI, MOVDIR64B, CLDEMOTE\s0 and \s-1WAITPKG\s0 instruction set
+ support.
+ .IP "\fBsierraforest\fR" 4
+ .IX Item "sierraforest"
+ Intel Sierra Forest \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
+ SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
+ XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX,\s0 GFNI-SSE, \s-1CLWB, MOVDIRI,
+ MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT,
+ PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL,\s0 AVX-VNNI,
+ \&\s-1AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, ENQCMD\s0 and \s-1UINTR\s0 instruction set
+ support.
+ .IP "\fBgrandridge\fR" 4
+ .IX Item "grandridge"
+ Intel Grand Ridge \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
+ SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
+ XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX,\s0 GFNI-SSE, \s-1CLWB, MOVDIRI,
+ MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT,
+ PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL,\s0 AVX-VNNI,
+ \&\s-1AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, ENQCMD\s0 and \s-1UINTR\s0 instruction set
+ support.
+ .IP "\fBknl\fR" 4
+ .IX Item "knl"
+ Intel Knights Landing \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
+ SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
+ RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
+ AVX512PF, AVX512ER, AVX512F, AVX512CD\s0 and \s-1PREFETCHWT1\s0 instruction set support.
+ .IP "\fBknm\fR" 4
+ .IX Item "knm"
+ Intel Knights Mill \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
+ SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
+ RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
+ AVX512PF, AVX512ER, AVX512F, AVX512CD\s0 and \s-1PREFETCHWT1, AVX5124VNNIW,
+ AVX5124FMAPS\s0 and \s-1AVX512VPOPCNTDQ\s0 instruction set support.
  .IP "\fBk6\fR" 4
  .IX Item "k6"
  \&\s-1AMD K6 CPU\s0 with \s-1MMX\s0 instruction set support.
*************** SSSE3, SSE4.1, SSE4.2, ABM, XSAVEC, XSAV
*** 31698,31703 ****
--- 31819,31834 ----
  WBNOINVD, PKU, VPCLMULQDQ, VAES, AVX512F, AVX512DQ, AVX512IFMA, AVX512CD,
  AVX512BW, AVX512VL, AVX512BF16, AVX512VBMI, AVX512VBMI2, AVX512VNNI,
  AVX512BITALG, AVX512VPOPCNTDQ, GFNI\s0 and 64\-bit instruction set extensions.)
+ .IP "\fBznver5\fR" 4
+ .IX Item "znver5"
+ \&\s-1AMD\s0 Family 1ah core based CPUs with x86\-64 instruction set support. (This
+ supersets \s-1BMI, BMI2, CLWB, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED,
+ MWAITX, SHA, CLZERO, AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A,
+ SSSE3, SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, RDPID,
+ WBNOINVD, PKU, VPCLMULQDQ, VAES, AVX512F, AVX512DQ, AVX512IFMA, AVX512CD,
+ AVX512BW, AVX512VL, AVX512BF16, AVX512VBMI, AVX512VBMI2, AVX512VNNI,
+ AVX512BITALG, AVX512VPOPCNTDQ, GFNI, AVXVNNI, MOVDIRI, MOVDIR64B,
+ AVX512VP2INTERSECT, PREFETCHI\s0 and 64\-bit instruction set extensions.)
  .IP "\fBbtver1\fR" 4
  .IX Item "btver1"
  CPUs based on \s-1AMD\s0 Family 14h cores with x86\-64 instruction set support.  (This
*************** instruction set support.
*** 31782,31789 ****
  .IP "\fBlujiazui\fR" 4
  .IX Item "lujiazui"
  \&\s-1ZHAOXIN\s0 lujiazui \s-1CPU\s0 with x86\-64, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
! SSE4.2, AVX, POPCNT, AES, PCLMUL, RDRND, XSAVE, XSAVEOPT, FSGSBASE, CX16,
! ABM, BMI, BMI2, F16C, FXSR, RDSEED\s0 instruction set support.
  .IP "\fBgeode\fR" 4
  .IX Item "geode"
  \&\s-1AMD\s0 Geode embedded processor with \s-1MMX\s0 and 3DNow! instruction set support.
--- 31913,31922 ----
  .IP "\fBlujiazui\fR" 4
  .IX Item "lujiazui"
  \&\s-1ZHAOXIN\s0 lujiazui \s-1CPU\s0 with x86\-64, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
! SSE4.2, POPCNT, AES, PCLMUL, RDRND, XSAVE, XSAVEOPT, FSGSBASE, CX16,
! ABM, BMI, BMI2, FXSR, RDSEED\s0 instruction set support.  While the CPUs
! do support \s-1AVX\s0 and F16C, these aren't enabled by \f(CW\*(C`\-march=lujiazui\*(C'\fR
! for performance reasons.
  .IP "\fBgeode\fR" 4
  .IX Item "geode"
  \&\s-1AMD\s0 Geode embedded processor with \s-1MMX\s0 and 3DNow! instruction set support.
diff -Nrcpad gcc-13.3.0/gcc/doc/gcc.1 gcc-13.4.0/gcc/doc/gcc.1
*** gcc-13.3.0/gcc/doc/gcc.1	Tue May 21 08:05:50 2024
--- gcc-13.4.0/gcc/doc/gcc.1	Thu Jun  5 16:21:57 2025
***************
*** 133,139 ****
  .\" ========================================================================
  .\"
  .IX Title "GCC 1"
! .TH GCC 1 "2024-05-21" "gcc-13.3.0" "GNU"
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
--- 133,139 ----
  .\" ========================================================================
  .\"
  .IX Title "GCC 1"
! .TH GCC 1 "2025-06-05" "gcc-13.4.0" "GNU"
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
*************** the available options are shown at start
*** 15697,15704 ****
  <\fBhttps://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run\-time\-flags\fR>
  for a list of supported options.
  The option cannot be combined with \fB\-fsanitize=thread\fR or
! \&\fB\-fsanitize=hwaddress\fR.  Note that the only target
! \&\fB\-fsanitize=hwaddress\fR is currently supported on is AArch64.
  .Sp
  To get more accurate stack traces, it is possible to use options such as
  \&\fB\-O0\fR, \fB\-O1\fR, or \fB\-Og\fR (which, for instance, prevent
--- 15697,15706 ----
  <\fBhttps://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run\-time\-flags\fR>
  for a list of supported options.
  The option cannot be combined with \fB\-fsanitize=thread\fR or
! \&\fB\-fsanitize=hwaddress\fR.  Note that the only targets
! \&\fB\-fsanitize=hwaddress\fR is currently supported on are x86\-64
! (only with \f(CW\*(C`\-mlam=u48\*(C'\fR or \f(CW\*(C`\-mlam=u57\*(C'\fR options) and AArch64,
! in both cases only in ABIs with 64\-bit pointers.
  .Sp
  To get more accurate stack traces, it is possible to use options such as
  \&\fB\-O0\fR, \fB\-O1\fR, or \fB\-Og\fR (which, for instance, prevent
*************** By default, the dump will contain messag
*** 18540,18545 ****
--- 18542,18632 ----
  optimizations (equivalent to \fB\-optimized\fR) together with
  low-level details about the analysis.
  .RE
+ .IP "\fB\-fdump\-ipa\-clones\fR" 4
+ .IX Item "-fdump-ipa-clones"
+ Create a dump file containing information about creation of call graph
+ node clones and removals of call graph nodes during inter-procedural
+ optimizations and transformations.  Its main intended use is that tools
+ that create live-patches can determine the set of functions that need to
+ be live-patched to completely replace a particular function (see
+ \&\fB\-flive\-patching\fR).  The file name is generated by appending
+ suffix \f(CW\*(C`ipa\-clones\*(C'\fR to the source file name, and the file is
+ created in the same directory as the output file.  Each entry in the
+ file is on a separate line containing semicolon separated fields.
+ .Sp
+ In the case of call graph clone creation, the individual fields are:
+ .RS 4
+ .IP "1." 4
+ .IX Item "1."
+ String \f(CW\*(C`Callgraph clone\*(C'\fR.
+ .IP "2." 4
+ .IX Item "2."
+ Name of the function being cloned as it is presented to the assembler.
+ .IP "3." 4
+ .IX Item "3."
+ A number that uniquely represents the function being cloned in the call
+ graph.  Note that the number is unique only within a compilation unit or
+ within whole-program analysis but is likely to be different in the two
+ phases.
+ .IP "4." 4
+ .IX Item "4."
+ The file name of the source file where the function is defined.
+ .IP "5." 4
+ .IX Item "5."
+ The line on which the function definition is located.
+ .IP "6." 4
+ .IX Item "6."
+ The column where the function definition is located.
+ .IP "7." 4
+ .IX Item "7."
+ Name of the new function clone as it is presented to the assembler.
+ .IP "8." 4
+ .IX Item "8."
+ A number that uniquely represents the new function clone in the call
+ graph.  Note that the number is unique only within a compilation unit or
+ within whole-program analysis but is likely to be different in the two
+ phases.
+ .IP "9." 4
+ .IX Item "9."
+ The file name of the source file where the source code location of the
+ new clone points to.
+ .IP "10." 4
+ .IX Item "10."
+ The line to which the source code location of the new clone points to.
+ .IP "11." 4
+ .IX Item "11."
+ The column to which the source code location of the new clone points to.
+ .IP "12." 4
+ .IX Item "12."
+ A string that determines the reason for cloning.
+ .RE
+ .RS 4
+ .Sp
+ In the case of call graph clone removal, the individual fields are:
+ .IP "1." 4
+ .IX Item "1."
+ String \f(CW\*(C`Callgraph removal\*(C'\fR.
+ .IP "2." 4
+ .IX Item "2."
+ Name of the function being removed as it would be presented to the assembler.
+ .IP "3." 4
+ .IX Item "3."
+ A number that uniquely represents the function being cloned in the call
+ graph.  Note that the number is unique only within a compilation unit or
+ within whole-program analysis but is likely to be different in the two
+ phases.
+ .IP "4." 4
+ .IX Item "4."
+ The file name of the source file where the function is defined.
+ .IP "5." 4
+ .IX Item "5."
+ The line on which the function definition is located.
+ .IP "6." 4
+ .IX Item "6."
+ The column where the function definition is located.
+ .RE
+ .RS 4
+ .RE
  .IP "\fB\-fdump\-lang\fR" 4
  .IX Item "-fdump-lang"
  Dump language-specific information.  The file name is made by appending
*************** performance of the code.  Permissible va
*** 19610,19617 ****
  \&\fBcortex\-a78\fR, \fBcortex\-a78ae\fR, \fBcortex\-a78c\fR,
  \&\fBares\fR, \fBexynos\-m1\fR, \fBemag\fR, \fBfalkor\fR,
  \&\fBneoverse\-512tvb\fR, \fBneoverse\-e1\fR, \fBneoverse\-n1\fR,
! \&\fBneoverse\-n2\fR, \fBneoverse\-v1\fR, \fBneoverse\-v2\fR, \fBqdf24xx\fR,
! \&\fBsaphira\fR, \fBphecda\fR, \fBxgene1\fR, \fBvulcan\fR,
  \&\fBocteontx\fR, \fBocteontx81\fR,  \fBocteontx83\fR,
  \&\fBocteontx2\fR, \fBocteontx2t98\fR, \fBocteontx2t96\fR
  \&\fBocteontx2t93\fR, \fBocteontx2f95\fR, \fBocteontx2f95n\fR,
--- 19697,19704 ----
  \&\fBcortex\-a78\fR, \fBcortex\-a78ae\fR, \fBcortex\-a78c\fR,
  \&\fBares\fR, \fBexynos\-m1\fR, \fBemag\fR, \fBfalkor\fR,
  \&\fBneoverse\-512tvb\fR, \fBneoverse\-e1\fR, \fBneoverse\-n1\fR,
! \&\fBneoverse\-n2\fR, \fBneoverse\-v1\fR, \fBneoverse\-v2\fR, \fBgrace\fR,
! \&\fBqdf24xx\fR, \fBsaphira\fR, \fBphecda\fR, \fBxgene1\fR, \fBvulcan\fR,
  \&\fBocteontx\fR, \fBocteontx81\fR,  \fBocteontx83\fR,
  \&\fBocteontx2\fR, \fBocteontx2t98\fR, \fBocteontx2t96\fR
  \&\fBocteontx2t93\fR, \fBocteontx2f95\fR, \fBocteontx2f95n\fR,
*************** from the hardware manufacturer.
*** 22053,22064 ****
  .el .IP "\f(CWavrxmega2\fR" 4
  .IX Item "avrxmega2"
  \&\*(L"\s-1XMEGA\*(R"\s0 devices with more than 8 KiB and up to 64 KiB of program memory.
! \&\fImcu\fR = \f(CW\*(C`atxmega8e5\*(C'\fR, \f(CW\*(C`atxmega16a4\*(C'\fR, \f(CW\*(C`atxmega16a4u\*(C'\fR, \f(CW\*(C`atxmega16c4\*(C'\fR, \f(CW\*(C`atxmega16d4\*(C'\fR, \f(CW\*(C`atxmega16e5\*(C'\fR, \f(CW\*(C`atxmega32a4\*(C'\fR, \f(CW\*(C`atxmega32a4u\*(C'\fR, \f(CW\*(C`atxmega32c3\*(C'\fR, \f(CW\*(C`atxmega32c4\*(C'\fR, \f(CW\*(C`atxmega32d3\*(C'\fR, \f(CW\*(C`atxmega32d4\*(C'\fR, \f(CW\*(C`atxmega32e5\*(C'\fR, \f(CW\*(C`avr64da28\*(C'\fR, \f(CW\*(C`avr64da32\*(C'\fR, \f(CW\*(C`avr64da48\*(C'\fR, \f(CW\*(C`avr64da64\*(C'\fR, \f(CW\*(C`avr64db28\*(C'\fR, \f(CW\*(C`avr64db32\*(C'\fR, \f(CW\*(C`avr64db48\*(C'\fR, \f(CW\*(C`avr64db64\*(C'\fR, \f(CW\*(C`avr64dd14\*(C'\fR, \f(CW\*(C`avr64dd20\*(C'\fR, \f(CW\*(C`avr64dd28\*(C'\fR, \f(CW\*(C`avr64dd32\*(C'\fR, \f(CW\*(C`avr64du28\*(C'\fR, \f(CW\*(C`avr64du32\*(C'\fR, \f(CW\*(C`avr64ea28\*(C'\fR, \f(CW\*(C`avr64ea32\*(C'\fR, \f(CW\*(C`avr64ea48\*(C'\fR.
  .ie n .IP """avrxmega3""" 4
  .el .IP "\f(CWavrxmega3\fR" 4
  .IX Item "avrxmega3"
  \&\*(L"\s-1XMEGA\*(R"\s0 devices with up to 64 KiB of combined program memory and \s-1RAM,\s0 and with program memory visible in the \s-1RAM\s0 address space.
! \&\fImcu\fR = \f(CW\*(C`attiny202\*(C'\fR, \f(CW\*(C`attiny204\*(C'\fR, \f(CW\*(C`attiny212\*(C'\fR, \f(CW\*(C`attiny214\*(C'\fR, \f(CW\*(C`attiny402\*(C'\fR, \f(CW\*(C`attiny404\*(C'\fR, \f(CW\*(C`attiny406\*(C'\fR, \f(CW\*(C`attiny412\*(C'\fR, \f(CW\*(C`attiny414\*(C'\fR, \f(CW\*(C`attiny416\*(C'\fR, \f(CW\*(C`attiny416auto\*(C'\fR, \f(CW\*(C`attiny417\*(C'\fR, \f(CW\*(C`attiny424\*(C'\fR, \f(CW\*(C`attiny426\*(C'\fR, \f(CW\*(C`attiny427\*(C'\fR, \f(CW\*(C`attiny804\*(C'\fR, \f(CW\*(C`attiny806\*(C'\fR, \f(CW\*(C`attiny807\*(C'\fR, \f(CW\*(C`attiny814\*(C'\fR, \f(CW\*(C`attiny816\*(C'\fR, \f(CW\*(C`attiny817\*(C'\fR, \f(CW\*(C`attiny824\*(C'\fR, \f(CW\*(C`attiny826\*(C'\fR, \f(CW\*(C`attiny827\*(C'\fR, \f(CW\*(C`attiny1604\*(C'\fR, \f(CW\*(C`attiny1606\*(C'\fR, \f(CW\*(C`attiny1607\*(C'\fR, \f(CW\*(C`attiny1614\*(C'\fR, \f(CW\*(C`attiny1616\*(C'\fR, \f(CW\*(C`attiny1617\*(C'\fR, \f(CW\*(C`attiny1624\*(C'\fR, \f(CW\*(C`attiny1626\*(C'\fR, \f(CW\*(C`attiny1627\*(C'\fR, \f(CW\*(C`attiny3214\*(C'\fR, \f(CW\*(C`attiny3216\*(C'\fR, \f(CW\*(C`attiny3217\*(C'\fR, \f(CW\*(C`attiny3224\*(C'\fR, \f(CW\*(C`attiny3226\*(C'\fR, \f(CW\*(C`attiny3227\*(C'\fR, \f(CW\*(C`atmega808\*(C'\fR, \f(CW\*(C`atmega809\*(C'\fR, \f(CW\*(C`atmega1608\*(C'\fR, \f(CW\*(C`atmega1609\*(C'\fR, \f(CW\*(C`atmega3208\*(C'\fR, \f(CW\*(C`atmega3209\*(C'\fR, \f(CW\*(C`atmega4808\*(C'\fR, \f(CW\*(C`atmega4809\*(C'\fR, \f(CW\*(C`avr16dd14\*(C'\fR, \f(CW\*(C`avr16dd20\*(C'\fR, \f(CW\*(C`avr16dd28\*(C'\fR, \f(CW\*(C`avr16dd32\*(C'\fR, \f(CW\*(C`avr16du14\*(C'\fR, \f(CW\*(C`avr16du20\*(C'\fR, \f(CW\*(C`avr16du28\*(C'\fR, \f(CW\*(C`avr16du32\*(C'\fR, \f(CW\*(C`avr16ea28\*(C'\fR, \f(CW\*(C`avr16ea32\*(C'\fR, \f(CW\*(C`avr16ea48\*(C'\fR, \f(CW\*(C`avr16eb14\*(C'\fR, \f(CW\*(C`avr16eb20\*(C'\fR, \f(CW\*(C`avr16eb28\*(C'\fR, \f(CW\*(C`avr16eb32\*(C'\fR, \f(CW\*(C`avr32da28\*(C'\fR, \f(CW\*(C`avr32da32\*(C'\fR, \f(CW\*(C`avr32da48\*(C'\fR, \f(CW\*(C`avr32db28\*(C'\fR, \f(CW\*(C`avr32db32\*(C'\fR, \f(CW\*(C`avr32db48\*(C'\fR, \f(CW\*(C`avr32dd14\*(C'\fR, \f(CW\*(C`avr32dd20\*(C'\fR, \f(CW\*(C`avr32dd28\*(C'\fR, \f(CW\*(C`avr32dd32\*(C'\fR, \f(CW\*(C`avr32du14\*(C'\fR, \f(CW\*(C`avr32du20\*(C'\fR, \f(CW\*(C`avr32du28\*(C'\fR, \f(CW\*(C`avr32du32\*(C'\fR, \f(CW\*(C`avr32ea28\*(C'\fR, \f(CW\*(C`avr32ea32\*(C'\fR, \f(CW\*(C`avr32ea48\*(C'\fR.
  .ie n .IP """avrxmega4""" 4
  .el .IP "\f(CWavrxmega4\fR" 4
  .IX Item "avrxmega4"
--- 22140,22151 ----
  .el .IP "\f(CWavrxmega2\fR" 4
  .IX Item "avrxmega2"
  \&\*(L"\s-1XMEGA\*(R"\s0 devices with more than 8 KiB and up to 64 KiB of program memory.
! \&\fImcu\fR = \f(CW\*(C`atxmega8e5\*(C'\fR, \f(CW\*(C`atxmega16a4\*(C'\fR, \f(CW\*(C`atxmega16a4u\*(C'\fR, \f(CW\*(C`atxmega16c4\*(C'\fR, \f(CW\*(C`atxmega16d4\*(C'\fR, \f(CW\*(C`atxmega16e5\*(C'\fR, \f(CW\*(C`atxmega32a4\*(C'\fR, \f(CW\*(C`atxmega32a4u\*(C'\fR, \f(CW\*(C`atxmega32c3\*(C'\fR, \f(CW\*(C`atxmega32c4\*(C'\fR, \f(CW\*(C`atxmega32d3\*(C'\fR, \f(CW\*(C`atxmega32d4\*(C'\fR, \f(CW\*(C`atxmega32e5\*(C'\fR, \f(CW\*(C`avr64da28\*(C'\fR, \f(CW\*(C`avr64da32\*(C'\fR, \f(CW\*(C`avr64da48\*(C'\fR, \f(CW\*(C`avr64da64\*(C'\fR, \f(CW\*(C`avr64db28\*(C'\fR, \f(CW\*(C`avr64db32\*(C'\fR, \f(CW\*(C`avr64db48\*(C'\fR, \f(CW\*(C`avr64db64\*(C'\fR, \f(CW\*(C`avr64dd14\*(C'\fR, \f(CW\*(C`avr64dd20\*(C'\fR, \f(CW\*(C`avr64dd28\*(C'\fR, \f(CW\*(C`avr64dd32\*(C'\fR, \f(CW\*(C`avr64du28\*(C'\fR, \f(CW\*(C`avr64du32\*(C'\fR, \f(CW\*(C`avr64ea28\*(C'\fR, \f(CW\*(C`avr64ea32\*(C'\fR, \f(CW\*(C`avr64ea48\*(C'\fR, \f(CW\*(C`avr64sd28\*(C'\fR, \f(CW\*(C`avr64sd32\*(C'\fR, \f(CW\*(C`avr64sd48\*(C'\fR.
  .ie n .IP """avrxmega3""" 4
  .el .IP "\f(CWavrxmega3\fR" 4
  .IX Item "avrxmega3"
  \&\*(L"\s-1XMEGA\*(R"\s0 devices with up to 64 KiB of combined program memory and \s-1RAM,\s0 and with program memory visible in the \s-1RAM\s0 address space.
! \&\fImcu\fR = \f(CW\*(C`attiny202\*(C'\fR, \f(CW\*(C`attiny204\*(C'\fR, \f(CW\*(C`attiny212\*(C'\fR, \f(CW\*(C`attiny214\*(C'\fR, \f(CW\*(C`attiny402\*(C'\fR, \f(CW\*(C`attiny404\*(C'\fR, \f(CW\*(C`attiny406\*(C'\fR, \f(CW\*(C`attiny412\*(C'\fR, \f(CW\*(C`attiny414\*(C'\fR, \f(CW\*(C`attiny416\*(C'\fR, \f(CW\*(C`attiny416auto\*(C'\fR, \f(CW\*(C`attiny417\*(C'\fR, \f(CW\*(C`attiny424\*(C'\fR, \f(CW\*(C`attiny426\*(C'\fR, \f(CW\*(C`attiny427\*(C'\fR, \f(CW\*(C`attiny804\*(C'\fR, \f(CW\*(C`attiny806\*(C'\fR, \f(CW\*(C`attiny807\*(C'\fR, \f(CW\*(C`attiny814\*(C'\fR, \f(CW\*(C`attiny816\*(C'\fR, \f(CW\*(C`attiny817\*(C'\fR, \f(CW\*(C`attiny824\*(C'\fR, \f(CW\*(C`attiny826\*(C'\fR, \f(CW\*(C`attiny827\*(C'\fR, \f(CW\*(C`attiny1604\*(C'\fR, \f(CW\*(C`attiny1606\*(C'\fR, \f(CW\*(C`attiny1607\*(C'\fR, \f(CW\*(C`attiny1614\*(C'\fR, \f(CW\*(C`attiny1616\*(C'\fR, \f(CW\*(C`attiny1617\*(C'\fR, \f(CW\*(C`attiny1624\*(C'\fR, \f(CW\*(C`attiny1626\*(C'\fR, \f(CW\*(C`attiny1627\*(C'\fR, \f(CW\*(C`attiny3214\*(C'\fR, \f(CW\*(C`attiny3216\*(C'\fR, \f(CW\*(C`attiny3217\*(C'\fR, \f(CW\*(C`attiny3224\*(C'\fR, \f(CW\*(C`attiny3226\*(C'\fR, \f(CW\*(C`attiny3227\*(C'\fR, \f(CW\*(C`atmega808\*(C'\fR, \f(CW\*(C`atmega809\*(C'\fR, \f(CW\*(C`atmega1608\*(C'\fR, \f(CW\*(C`atmega1609\*(C'\fR, \f(CW\*(C`atmega3208\*(C'\fR, \f(CW\*(C`atmega3209\*(C'\fR, \f(CW\*(C`atmega4808\*(C'\fR, \f(CW\*(C`atmega4809\*(C'\fR, \f(CW\*(C`avr16dd14\*(C'\fR, \f(CW\*(C`avr16dd20\*(C'\fR, \f(CW\*(C`avr16dd28\*(C'\fR, \f(CW\*(C`avr16dd32\*(C'\fR, \f(CW\*(C`avr16du14\*(C'\fR, \f(CW\*(C`avr16du20\*(C'\fR, \f(CW\*(C`avr16du28\*(C'\fR, \f(CW\*(C`avr16du32\*(C'\fR, \f(CW\*(C`avr16ea28\*(C'\fR, \f(CW\*(C`avr16ea32\*(C'\fR, \f(CW\*(C`avr16ea48\*(C'\fR, \f(CW\*(C`avr16eb14\*(C'\fR, \f(CW\*(C`avr16eb20\*(C'\fR, \f(CW\*(C`avr16eb28\*(C'\fR, \f(CW\*(C`avr16eb32\*(C'\fR, \f(CW\*(C`avr32da28\*(C'\fR, \f(CW\*(C`avr32da32\*(C'\fR, \f(CW\*(C`avr32da48\*(C'\fR, \f(CW\*(C`avr32db28\*(C'\fR, \f(CW\*(C`avr32db32\*(C'\fR, \f(CW\*(C`avr32db48\*(C'\fR, \f(CW\*(C`avr32dd14\*(C'\fR, \f(CW\*(C`avr32dd20\*(C'\fR, \f(CW\*(C`avr32dd28\*(C'\fR, \f(CW\*(C`avr32dd32\*(C'\fR, \f(CW\*(C`avr32du14\*(C'\fR, \f(CW\*(C`avr32du20\*(C'\fR, \f(CW\*(C`avr32du28\*(C'\fR, \f(CW\*(C`avr32du32\*(C'\fR, \f(CW\*(C`avr32ea28\*(C'\fR, \f(CW\*(C`avr32ea32\*(C'\fR, \f(CW\*(C`avr32ea48\*(C'\fR, \f(CW\*(C`avr32sd20\*(C'\fR, \f(CW\*(C`avr32sd28\*(C'\fR, \f(CW\*(C`avr32sd32\*(C'\fR.
  .ie n .IP """avrxmega4""" 4
  .el .IP "\f(CWavrxmega4\fR" 4
  .IX Item "avrxmega4"
*************** Intel Core 2 \s-1CPU\s0 with 64\-bit ext
*** 31389,31394 ****
--- 31476,31485 ----
  SAHF\s0 and \s-1FXSR\s0 instruction set support.
  .IP "\fBnehalem\fR" 4
  .IX Item "nehalem"
+ .PD 0
+ .IP "\fBcorei7\fR" 4
+ .IX Item "corei7"
+ .PD
  Intel Nehalem \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF\s0 and \s-1FXSR\s0 instruction set support.
  .IP "\fBwestmere\fR" 4
*************** Intel Westmere \s-1CPU\s0 with 64\-bit e
*** 31397,31413 ****
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR\s0 and \s-1PCLMUL\s0 instruction set support.
  .IP "\fBsandybridge\fR" 4
  .IX Item "sandybridge"
  Intel Sandy Bridge \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE\s0 and \s-1PCLMUL\s0 instruction set
  support.
  .IP "\fBivybridge\fR" 4
  .IX Item "ivybridge"
  Intel Ivy Bridge \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND\s0
  and F16C instruction set support.
  .IP "\fBhaswell\fR" 4
  .IX Item "haswell"
! Intel Haswell \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE\s0 and \s-1HLE\s0 instruction set support.
  .IP "\fBbroadwell\fR" 4
--- 31488,31516 ----
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR\s0 and \s-1PCLMUL\s0 instruction set support.
  .IP "\fBsandybridge\fR" 4
  .IX Item "sandybridge"
+ .PD 0
+ .IP "\fBcorei7\-avx\fR" 4
+ .IX Item "corei7-avx"
+ .PD
  Intel Sandy Bridge \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE\s0 and \s-1PCLMUL\s0 instruction set
  support.
  .IP "\fBivybridge\fR" 4
  .IX Item "ivybridge"
+ .PD 0
+ .IP "\fBcore-avx-i\fR" 4
+ .IX Item "core-avx-i"
+ .PD
  Intel Ivy Bridge \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND\s0
  and F16C instruction set support.
  .IP "\fBhaswell\fR" 4
  .IX Item "haswell"
! .PD 0
! .IP "\fBcore\-avx2\fR" 4
! .IX Item "core-avx2"
! .PD
! Intel Haswell \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE\s0 and \s-1HLE\s0 instruction set support.
  .IP "\fBbroadwell\fR" 4
*************** Intel Skylake \s-1CPU\s0 with 64\-bit ex
*** 31422,31486 ****
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
  CLFLUSHOPT, XSAVEC, XSAVES\s0 and \s-1SGX\s0 instruction set support.
- .IP "\fBbonnell\fR" 4
- .IX Item "bonnell"
- Intel Bonnell \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3\s0 and \s-1SSSE3\s0
- instruction set support.
- .IP "\fBsilvermont\fR" 4
- .IX Item "silvermont"
- Intel Silvermont \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
- SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW\s0 and \s-1RDRND\s0
- instruction set support.
- .IP "\fBgoldmont\fR" 4
- .IX Item "goldmont"
- Intel Goldmont \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
- SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, SHA,
- RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT\s0 and \s-1FSGSBASE\s0 instruction
- set support.
- .IP "\fBgoldmont-plus\fR" 4
- .IX Item "goldmont-plus"
- Intel Goldmont Plus \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
- SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES,
- SHA, RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE,
- RDPID\s0 and \s-1SGX\s0 instruction set support.
- .IP "\fBtremont\fR" 4
- .IX Item "tremont"
- Intel Tremont \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
- SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, SHA,
- RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE, RDPID,
- SGX, CLWB,\s0 GFNI-SSE, \s-1MOVDIRI, MOVDIR64B, CLDEMOTE\s0 and \s-1WAITPKG\s0 instruction set
- support.
- .IP "\fBsierraforest\fR" 4
- .IX Item "sierraforest"
- Intel Sierra Forest \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
- SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
- XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX,\s0 GFNI-SSE, \s-1CLWB, MOVDIRI,
- MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT,
- PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL,\s0 AVX-VNNI,
- \&\s-1AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, ENQCMD\s0 and \s-1UINTR\s0 instruction set
- support.
- .IP "\fBgrandridge\fR" 4
- .IX Item "grandridge"
- Intel Grand Ridge \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
- SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
- XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX,\s0 GFNI-SSE, \s-1CLWB, MOVDIRI,
- MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT,
- PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL,\s0 AVX-VNNI,
- \&\s-1AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, ENQCMD\s0 and \s-1UINTR\s0 instruction set
- support.
- .IP "\fBknl\fR" 4
- .IX Item "knl"
- Intel Knight's Landing \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
- SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
- RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
- AVX512PF, AVX512ER, AVX512F, AVX512CD\s0 and \s-1PREFETCHWT1\s0 instruction set support.
- .IP "\fBknm\fR" 4
- .IX Item "knm"
- Intel Knights Mill \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
- SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
- RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
- AVX512PF, AVX512ER, AVX512F, AVX512CD\s0 and \s-1PREFETCHWT1, AVX5124VNNIW,
- AVX5124FMAPS\s0 and \s-1AVX512VPOPCNTDQ\s0 instruction set support.
  .IP "\fBskylake\-avx512\fR" 4
  .IX Item "skylake-avx512"
  Intel Skylake Server \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
--- 31525,31530 ----
*************** SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAH
*** 31488,31504 ****
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW,
  AVX512DQ\s0 and \s-1AVX512CD\s0 instruction set support.
  .IP "\fBcannonlake\fR" 4
  .IX Item "cannonlake"
! Intel Cannonlake Server \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2,
  SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL,
  FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX,
  PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
  AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA\s0 and \s-1SHA\s0 instruction set
  support.
  .IP "\fBicelake-client\fR" 4
  .IX Item "icelake-client"
! Intel Icelake Client \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
--- 31532,31562 ----
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW,
  AVX512DQ\s0 and \s-1AVX512CD\s0 instruction set support.
+ .IP "\fBcascadelake\fR" 4
+ .IX Item "cascadelake"
+ Intel Cascade Lake \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
+ SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
+ F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
+ CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ,
+ AVX512CD\s0 and \s-1AVX512VNNI\s0 instruction set support.
  .IP "\fBcannonlake\fR" 4
  .IX Item "cannonlake"
! Intel Cannon Lake Server \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2,
  SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL,
  FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX,
  PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
  AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA\s0 and \s-1SHA\s0 instruction set
  support.
+ .IP "\fBcooperlake\fR" 4
+ .IX Item "cooperlake"
+ Intel Cooper Lake \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
+ SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
+ F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
+ CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ,
+ AVX512CD, AVX512VNNI\s0 and \s-1AVX512BF16\s0 instruction set support.
  .IP "\fBicelake-client\fR" 4
  .IX Item "icelake-client"
! Intel Ice Lake Client \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
*************** AVX512CD, PKU, AVX512VBMI, AVX512IFMA, S
*** 31506,31571 ****
  , VPCLMULQDQ, AVX512BITALG, RDPID\s0 and \s-1AVX512VPOPCNTDQ\s0 instruction set support.
  .IP "\fBicelake-server\fR" 4
  .IX Item "icelake-server"
! Intel Icelake Server \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
  AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2
  , VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD\s0 and \s-1CLWB\s0
  instruction set support.
- .IP "\fBcascadelake\fR" 4
- .IX Item "cascadelake"
- Intel Cascadelake \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
- SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
- F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
- CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ,
- AVX512CD\s0 and \s-1AVX512VNNI\s0 instruction set support.
- .IP "\fBcooperlake\fR" 4
- .IX Item "cooperlake"
- Intel cooperlake \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
- SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
- F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
- CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ,
- AVX512CD, AVX512VNNI\s0 and \s-1AVX512BF16\s0 instruction set support.
  .IP "\fBtigerlake\fR" 4
  .IX Item "tigerlake"
! Intel Tigerlake \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
  CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD
  PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2,
  VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, MOVDIRI, MOVDIR64B, CLWB,
  AVX512VP2INTERSECT\s0 and \s-1KEYLOCKER\s0 instruction set support.
- .IP "\fBsapphirerapids\fR" 4
- .IX Item "sapphirerapids"
- Intel sapphirerapids \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
- SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
- RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
- AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
- AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2,
- VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD, CLWB,
- MOVDIRI, MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, TSXLDTRK,
- UINTR, AMX\-BF16,\s0 AMX-TILE, \s-1AMX\-INT8,\s0 AVX-VNNI, \s-1AVX512\-FP16\s0 and \s-1AVX512BF16\s0
- instruction set support.
- .IP "\fBalderlake\fR" 4
- .IX Item "alderlake"
- Intel Alderlake \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
- SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES,
- XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX,\s0 GFNI-SSE, \s-1CLWB, MOVDIRI, MOVDIR64B,
- CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT, PCONFIG, PKU,
- VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL\s0 and AVX-VNNI instruction set
- support.
  .IP "\fBrocketlake\fR" 4
  .IX Item "rocketlake"
! Intel Rocketlake \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3
! , SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
  CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD
  PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2,
  VPCLMULQDQ, AVX512BITALG, RDPID\s0 and \s-1AVX512VPOPCNTDQ\s0 instruction set support.
  .IP "\fBgraniterapids\fR" 4
  .IX Item "graniterapids"
! Intel graniterapids \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
--- 31564,31625 ----
  , VPCLMULQDQ, AVX512BITALG, RDPID\s0 and \s-1AVX512VPOPCNTDQ\s0 instruction set support.
  .IP "\fBicelake-server\fR" 4
  .IX Item "icelake-server"
! Intel Ice Lake Server \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
  AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2
  , VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD\s0 and \s-1CLWB\s0
  instruction set support.
  .IP "\fBtigerlake\fR" 4
  .IX Item "tigerlake"
! Intel Tiger Lake \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
  CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD
  PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2,
  VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, MOVDIRI, MOVDIR64B, CLWB,
  AVX512VP2INTERSECT\s0 and \s-1KEYLOCKER\s0 instruction set support.
  .IP "\fBrocketlake\fR" 4
  .IX Item "rocketlake"
! Intel Rocket Lake \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
! SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
  CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD
  PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2,
  VPCLMULQDQ, AVX512BITALG, RDPID\s0 and \s-1AVX512VPOPCNTDQ\s0 instruction set support.
+ .IP "\fBalderlake\fR" 4
+ .IX Item "alderlake"
+ .PD 0
+ .IP "\fBraptorlake\fR" 4
+ .IX Item "raptorlake"
+ .IP "\fBmeteorlake\fR" 4
+ .IX Item "meteorlake"
+ .PD
+ Intel Alder Lake/Raptor Lake/Meteor Lake \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX,
+ SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND,
+ XSAVE, XSAVEC, XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX,\s0 GFNI-SSE, \s-1CLWB,
+ MOVDIRI, MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA,
+ LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL\s0 and
+ AVX-VNNI instruction set support.
+ .IP "\fBsapphirerapids\fR" 4
+ .IX Item "sapphirerapids"
+ .PD 0
+ .IP "\fBemeraldrapids\fR" 4
+ .IX Item "emeraldrapids"
+ .PD
+ Intel Sapphire Rapids/Emerald Rapids \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE,
+ SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL,
+ FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX,
+ PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
+ AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES,
+ AVX512VBMI2, VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG,
+ WBNOINVD, CLWB, MOVDIRI, MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG,
+ SERIALIZE, TSXLDTRK, UINTR, AMX\-BF16,\s0 AMX-TILE, \s-1AMX\-INT8,\s0 AVX-VNNI, \s-1AVX512\-FP16\s0
+ and \s-1AVX512BF16\s0 instruction set support.
  .IP "\fBgraniterapids\fR" 4
  .IX Item "graniterapids"
! Intel Granite Rapids \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
*************** UINTR, AMX\-BF16,\s0 AMX-TILE, \s-1AMX\-
*** 31576,31582 ****
  and \s-1PREFETCHI\s0 instruction set support.
  .IP "\fBgraniterapids-d\fR" 4
  .IX Item "graniterapids-d"
! Intel graniterapids D \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
--- 31630,31636 ----
  and \s-1PREFETCHI\s0 instruction set support.
  .IP "\fBgraniterapids-d\fR" 4
  .IX Item "graniterapids-d"
! Intel Granite Rapids D \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
*************** VPCLMULQDQ, AVX512BITALG, RDPID, AVX512V
*** 31585,31590 ****
--- 31639,31711 ----
  MOVDIRI, MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, TSXLDTRK,
  UINTR, AMX\-BF16,\s0 AMX-TILE, \s-1AMX\-INT8,\s0 AVX-VNNI, \s-1AVX512FP16, AVX512BF16, AMX\-FP16,
  PREFETCHI\s0 and AMX-COMPLEX instruction set support.
+ .IP "\fBbonnell\fR" 4
+ .IX Item "bonnell"
+ .PD 0
+ .IP "\fBatom\fR" 4
+ .IX Item "atom"
+ .PD
+ Intel Bonnell \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3\s0 and \s-1SSSE3\s0
+ instruction set support.
+ .IP "\fBsilvermont\fR" 4
+ .IX Item "silvermont"
+ .PD 0
+ .IP "\fBslm\fR" 4
+ .IX Item "slm"
+ .PD
+ Intel Silvermont \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
+ SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW\s0 and \s-1RDRND\s0
+ instruction set support.
+ .IP "\fBgoldmont\fR" 4
+ .IX Item "goldmont"
+ Intel Goldmont \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
+ SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, SHA,
+ RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT\s0 and \s-1FSGSBASE\s0 instruction
+ set support.
+ .IP "\fBgoldmont-plus\fR" 4
+ .IX Item "goldmont-plus"
+ Intel Goldmont Plus \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
+ SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES,
+ SHA, RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE,
+ RDPID\s0 and \s-1SGX\s0 instruction set support.
+ .IP "\fBtremont\fR" 4
+ .IX Item "tremont"
+ Intel Tremont \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
+ SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, SHA,
+ RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE, RDPID,
+ SGX, CLWB,\s0 GFNI-SSE, \s-1MOVDIRI, MOVDIR64B, CLDEMOTE\s0 and \s-1WAITPKG\s0 instruction set
+ support.
+ .IP "\fBsierraforest\fR" 4
+ .IX Item "sierraforest"
+ Intel Sierra Forest \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
+ SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
+ XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX,\s0 GFNI-SSE, \s-1CLWB, MOVDIRI,
+ MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT,
+ PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL,\s0 AVX-VNNI,
+ \&\s-1AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, ENQCMD\s0 and \s-1UINTR\s0 instruction set
+ support.
+ .IP "\fBgrandridge\fR" 4
+ .IX Item "grandridge"
+ Intel Grand Ridge \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
+ SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
+ XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX,\s0 GFNI-SSE, \s-1CLWB, MOVDIRI,
+ MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT,
+ PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL,\s0 AVX-VNNI,
+ \&\s-1AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, ENQCMD\s0 and \s-1UINTR\s0 instruction set
+ support.
+ .IP "\fBknl\fR" 4
+ .IX Item "knl"
+ Intel Knights Landing \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
+ SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
+ RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
+ AVX512PF, AVX512ER, AVX512F, AVX512CD\s0 and \s-1PREFETCHWT1\s0 instruction set support.
+ .IP "\fBknm\fR" 4
+ .IX Item "knm"
+ Intel Knights Mill \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
+ SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
+ RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
+ AVX512PF, AVX512ER, AVX512F, AVX512CD\s0 and \s-1PREFETCHWT1, AVX5124VNNIW,
+ AVX5124FMAPS\s0 and \s-1AVX512VPOPCNTDQ\s0 instruction set support.
  .IP "\fBk6\fR" 4
  .IX Item "k6"
  \&\s-1AMD K6 CPU\s0 with \s-1MMX\s0 instruction set support.
*************** SSSE3, SSE4.1, SSE4.2, ABM, XSAVEC, XSAV
*** 31698,31703 ****
--- 31819,31834 ----
  WBNOINVD, PKU, VPCLMULQDQ, VAES, AVX512F, AVX512DQ, AVX512IFMA, AVX512CD,
  AVX512BW, AVX512VL, AVX512BF16, AVX512VBMI, AVX512VBMI2, AVX512VNNI,
  AVX512BITALG, AVX512VPOPCNTDQ, GFNI\s0 and 64\-bit instruction set extensions.)
+ .IP "\fBznver5\fR" 4
+ .IX Item "znver5"
+ \&\s-1AMD\s0 Family 1ah core based CPUs with x86\-64 instruction set support. (This
+ supersets \s-1BMI, BMI2, CLWB, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED,
+ MWAITX, SHA, CLZERO, AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A,
+ SSSE3, SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, RDPID,
+ WBNOINVD, PKU, VPCLMULQDQ, VAES, AVX512F, AVX512DQ, AVX512IFMA, AVX512CD,
+ AVX512BW, AVX512VL, AVX512BF16, AVX512VBMI, AVX512VBMI2, AVX512VNNI,
+ AVX512BITALG, AVX512VPOPCNTDQ, GFNI, AVXVNNI, MOVDIRI, MOVDIR64B,
+ AVX512VP2INTERSECT, PREFETCHI\s0 and 64\-bit instruction set extensions.)
  .IP "\fBbtver1\fR" 4
  .IX Item "btver1"
  CPUs based on \s-1AMD\s0 Family 14h cores with x86\-64 instruction set support.  (This
*************** instruction set support.
*** 31782,31789 ****
  .IP "\fBlujiazui\fR" 4
  .IX Item "lujiazui"
  \&\s-1ZHAOXIN\s0 lujiazui \s-1CPU\s0 with x86\-64, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
! SSE4.2, AVX, POPCNT, AES, PCLMUL, RDRND, XSAVE, XSAVEOPT, FSGSBASE, CX16,
! ABM, BMI, BMI2, F16C, FXSR, RDSEED\s0 instruction set support.
  .IP "\fBgeode\fR" 4
  .IX Item "geode"
  \&\s-1AMD\s0 Geode embedded processor with \s-1MMX\s0 and 3DNow! instruction set support.
--- 31913,31922 ----
  .IP "\fBlujiazui\fR" 4
  .IX Item "lujiazui"
  \&\s-1ZHAOXIN\s0 lujiazui \s-1CPU\s0 with x86\-64, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
! SSE4.2, POPCNT, AES, PCLMUL, RDRND, XSAVE, XSAVEOPT, FSGSBASE, CX16,
! ABM, BMI, BMI2, FXSR, RDSEED\s0 instruction set support.  While the CPUs
! do support \s-1AVX\s0 and F16C, these aren't enabled by \f(CW\*(C`\-march=lujiazui\*(C'\fR
! for performance reasons.
  .IP "\fBgeode\fR" 4
  .IX Item "geode"
  \&\s-1AMD\s0 Geode embedded processor with \s-1MMX\s0 and 3DNow! instruction set support.
diff -Nrcpad gcc-13.3.0/gcc/doc/gcc.info gcc-13.4.0/gcc/doc/gcc.info
*** gcc-13.3.0/gcc/doc/gcc.info	Tue May 21 08:05:57 2024
--- gcc-13.4.0/gcc/doc/gcc.info	Thu Jun  5 16:22:05 2025
*************** Introduction
*** 63,69 ****
  
  This manual documents how to use the GNU compilers, as well as their
  features and incompatibilities, and how to report bugs.  It corresponds
! to the compilers (GCC) version 13.3.0.  The internals of the GNU
  compilers, including how to port them to new targets and some
  information about how to write front ends for new languages, are
  documented in a separate manual.  *Note Introduction: (gccint)Top.
--- 63,69 ----
  
  This manual documents how to use the GNU compilers, as well as their
  features and incompatibilities, and how to report bugs.  It corresponds
! to the compilers (GCC) version 13.4.0.  The internals of the GNU
  compilers, including how to port them to new targets and some
  information about how to write front ends for new languages, are
  documented in a separate manual.  *Note Introduction: (gccint)Top.
*************** program analysis purposes.
*** 15287,15294 ****
       <https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags>
       for a list of supported options.  The option cannot be combined
       with '-fsanitize=thread' or '-fsanitize=hwaddress'.  Note that the
!      only target '-fsanitize=hwaddress' is currently supported on is
!      AArch64.
  
       To get more accurate stack traces, it is possible to use options
       such as '-O0', '-O1', or '-Og' (which, for instance, prevent most
--- 15287,15295 ----
       <https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags>
       for a list of supported options.  The option cannot be combined
       with '-fsanitize=thread' or '-fsanitize=hwaddress'.  Note that the
!      only targets '-fsanitize=hwaddress' is currently supported on are
!      x86-64 (only with '-mlam=u48' or '-mlam=u57' options) and AArch64,
!      in both cases only in ABIs with 64-bit pointers.
  
       To get more accurate stack traces, it is possible to use options
       such as '-O0', '-O1', or '-Og' (which, for instance, prevent most
*************** are created in the directory of the outp
*** 18067,18072 ****
--- 18068,18144 ----
       optimizations (equivalent to '-optimized') together with low-level
       details about the analysis.
  
+ '-fdump-ipa-clones'
+ 
+      Create a dump file containing information about creation of call
+      graph node clones and removals of call graph nodes during
+      inter-procedural optimizations and transformations.  Its main
+      intended use is that tools that create live-patches can determine
+      the set of functions that need to be live-patched to completely
+      replace a particular function (see '-flive-patching').  The file
+      name is generated by appending suffix 'ipa-clones' to the source
+      file name, and the file is created in the same directory as the
+      output file.  Each entry in the file is on a separate line
+      containing semicolon separated fields.
+ 
+      In the case of call graph clone creation, the individual fields
+      are:
+ 
+        1. String 'Callgraph clone'.
+ 
+        2. Name of the function being cloned as it is presented to the
+           assembler.
+ 
+        3. A number that uniquely represents the function being cloned in
+           the call graph.  Note that the number is unique only within a
+           compilation unit or within whole-program analysis but is
+           likely to be different in the two phases.
+ 
+        4. The file name of the source file where the function is
+           defined.
+ 
+        5. The line on which the function definition is located.
+ 
+        6. The column where the function definition is located.
+ 
+        7. Name of the new function clone as it is presented to the
+           assembler.
+ 
+        8. A number that uniquely represents the new function clone in
+           the call graph.  Note that the number is unique only within a
+           compilation unit or within whole-program analysis but is
+           likely to be different in the two phases.
+ 
+        9. The file name of the source file where the source code
+           location of the new clone points to.
+ 
+        10. The line to which the source code location of the new clone
+           points to.
+ 
+        11. The column to which the source code location of the new clone
+           points to.
+ 
+        12. A string that determines the reason for cloning.
+ 
+      In the case of call graph clone removal, the individual fields are:
+ 
+        1. String 'Callgraph removal'.
+ 
+        2. Name of the function being removed as it would be presented to
+           the assembler.
+ 
+        3. A number that uniquely represents the function being cloned in
+           the call graph.  Note that the number is unique only within a
+           compilation unit or within whole-program analysis but is
+           likely to be different in the two phases.
+ 
+        4. The file name of the source file where the function is
+           defined.
+ 
+        5. The line on which the function definition is located.
+ 
+        6. The column where the function definition is located.
+ 
  '-fdump-lang'
       Dump language-specific information.  The file name is made by
       appending '.lang' to the source file name.
*************** These options are defined for AArch64 im
*** 19062,19072 ****
       'cortex-a65ae', 'cortex-a34', 'cortex-a78', 'cortex-a78ae',
       'cortex-a78c', 'ares', 'exynos-m1', 'emag', 'falkor',
       'neoverse-512tvb', 'neoverse-e1', 'neoverse-n1', 'neoverse-n2',
!      'neoverse-v1', 'neoverse-v2', 'qdf24xx', 'saphira', 'phecda',
!      'xgene1', 'vulcan', 'octeontx', 'octeontx81', 'octeontx83',
!      'octeontx2', 'octeontx2t98', 'octeontx2t96' 'octeontx2t93',
!      'octeontx2f95', 'octeontx2f95n', 'octeontx2f95mm', 'a64fx',
!      'thunderx', 'thunderxt88', 'thunderxt88p1', 'thunderxt81',
       'tsv110', 'thunderxt83', 'thunderx2t99', 'thunderx3t110', 'zeus',
       'cortex-a57.cortex-a53', 'cortex-a72.cortex-a53',
       'cortex-a73.cortex-a35', 'cortex-a73.cortex-a53',
--- 19134,19144 ----
       'cortex-a65ae', 'cortex-a34', 'cortex-a78', 'cortex-a78ae',
       'cortex-a78c', 'ares', 'exynos-m1', 'emag', 'falkor',
       'neoverse-512tvb', 'neoverse-e1', 'neoverse-n1', 'neoverse-n2',
!      'neoverse-v1', 'neoverse-v2', 'grace', 'qdf24xx', 'saphira',
!      'phecda', 'xgene1', 'vulcan', 'octeontx', 'octeontx81',
!      'octeontx83', 'octeontx2', 'octeontx2t98', 'octeontx2t96'
!      'octeontx2t93', 'octeontx2f95', 'octeontx2f95n', 'octeontx2f95mm',
!      'a64fx', 'thunderx', 'thunderxt88', 'thunderxt88p1', 'thunderxt81',
       'tsv110', 'thunderxt83', 'thunderx2t99', 'thunderx3t110', 'zeus',
       'cortex-a57.cortex-a53', 'cortex-a72.cortex-a53',
       'cortex-a73.cortex-a35', 'cortex-a73.cortex-a53',
*************** These options are defined for AVR implem
*** 21344,21350 ****
            'avr64da48', 'avr64da64', 'avr64db28', 'avr64db32',
            'avr64db48', 'avr64db64', 'avr64dd14', 'avr64dd20',
            'avr64dd28', 'avr64dd32', 'avr64du28', 'avr64du32',
!           'avr64ea28', 'avr64ea32', 'avr64ea48'.
  
       'avrxmega3'
            "XMEGA" devices with up to 64 KiB of combined program memory
--- 21416,21423 ----
            'avr64da48', 'avr64da64', 'avr64db28', 'avr64db32',
            'avr64db48', 'avr64db64', 'avr64dd14', 'avr64dd20',
            'avr64dd28', 'avr64dd32', 'avr64du28', 'avr64du32',
!           'avr64ea28', 'avr64ea32', 'avr64ea48', 'avr64sd28',
!           'avr64sd32', 'avr64sd48'.
  
       'avrxmega3'
            "XMEGA" devices with up to 64 KiB of combined program memory
*************** These options are defined for AVR implem
*** 21369,21375 ****
            'avr32da48', 'avr32db28', 'avr32db32', 'avr32db48',
            'avr32dd14', 'avr32dd20', 'avr32dd28', 'avr32dd32',
            'avr32du14', 'avr32du20', 'avr32du28', 'avr32du32',
!           'avr32ea28', 'avr32ea32', 'avr32ea48'.
  
       'avrxmega4'
            "XMEGA" devices with more than 64 KiB and up to 128 KiB of
--- 21442,21449 ----
            'avr32da48', 'avr32db28', 'avr32db32', 'avr32db48',
            'avr32dd14', 'avr32dd20', 'avr32dd28', 'avr32dd32',
            'avr32du14', 'avr32du20', 'avr32du28', 'avr32du32',
!           'avr32ea28', 'avr32ea32', 'avr32ea48', 'avr32sd20',
!           'avr32sd28', 'avr32sd32'.
  
       'avrxmega4'
            "XMEGA" devices with more than 64 KiB and up to 128 KiB of
*************** These '-m' options are defined for the x
*** 29542,29547 ****
--- 29616,29622 ----
            SSSE3, CX16, SAHF and FXSR instruction set support.
  
       'nehalem'
+      'corei7'
            Intel Nehalem CPU with 64-bit extensions, MMX, SSE, SSE2,
            SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF and FXSR
            instruction set support.
*************** These '-m' options are defined for the x
*** 29552,29572 ****
            PCLMUL instruction set support.
  
       'sandybridge'
            Intel Sandy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2,
            SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX,
            XSAVE and PCLMUL instruction set support.
  
       'ivybridge'
            Intel Ivy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2,
            SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX,
            XSAVE, PCLMUL, FSGSBASE, RDRND and F16C instruction set
            support.
  
       'haswell'
!           Intel Haswell CPU with 64-bit extensions, MOVBE, MMX, SSE,
!           SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
!           AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
!           LZCNT, FMA, MOVBE and HLE instruction set support.
  
       'broadwell'
            Intel Broadwell CPU with 64-bit extensions, MOVBE, MMX, SSE,
--- 29627,29650 ----
            PCLMUL instruction set support.
  
       'sandybridge'
+      'corei7-avx'
            Intel Sandy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2,
            SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX,
            XSAVE and PCLMUL instruction set support.
  
       'ivybridge'
+      'core-avx-i'
            Intel Ivy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2,
            SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX,
            XSAVE, PCLMUL, FSGSBASE, RDRND and F16C instruction set
            support.
  
       'haswell'
!      'core-avx2'
!           Intel Haswell CPU with 64-bit extensions, MMX, SSE, SSE2,
!           SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX,
!           XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT,
!           FMA, MOVBE and HLE instruction set support.
  
       'broadwell'
            Intel Broadwell CPU with 64-bit extensions, MOVBE, MMX, SSE,
*************** These '-m' options are defined for the x
*** 29582,29592 ****
--- 29660,29804 ----
            LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
            CLFLUSHOPT, XSAVEC, XSAVES and SGX instruction set support.
  
+      'skylake-avx512'
+           Intel Skylake Server CPU with 64-bit extensions, MOVBE, MMX,
+           SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF,
+           FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI,
+           BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
+           CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL,
+           AVX512BW, AVX512DQ and AVX512CD instruction set support.
+ 
+      'cascadelake'
+           Intel Cascade Lake CPU with 64-bit extensions, MMX, SSE, SSE2,
+           SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX,
+           XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT,
+           FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, CLFLUSHOPT,
+           XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW,
+           AVX512DQ, AVX512CD and AVX512VNNI instruction set support.
+ 
+      'cannonlake'
+           Intel Cannon Lake Server CPU with 64-bit extensions, MMX, SSE,
+           SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
+           AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
+           LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
+           CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
+           AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA and SHA
+           instruction set support.
+ 
+      'cooperlake'
+           Intel Cooper Lake CPU with 64-bit extensions, MMX, SSE, SSE2,
+           SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX,
+           XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT,
+           FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, CLFLUSHOPT,
+           XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW,
+           AVX512DQ, AVX512CD, AVX512VNNI and AVX512BF16 instruction set
+           support.
+ 
+      'icelake-client'
+           Intel Ice Lake Client CPU with 64-bit extensions, MMX, SSE,
+           SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
+           AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
+           LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
+           CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
+           AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA,
+           AVX512VNNI, GFNI, VAES, AVX512VBMI2 , VPCLMULQDQ,
+           AVX512BITALG, RDPID and AVX512VPOPCNTDQ instruction set
+           support.
+ 
+      'icelake-server'
+           Intel Ice Lake Server CPU with 64-bit extensions, MMX, SSE,
+           SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
+           AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
+           LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
+           CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
+           AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA,
+           AVX512VNNI, GFNI, VAES, AVX512VBMI2 , VPCLMULQDQ,
+           AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD and
+           CLWB instruction set support.
+ 
+      'tigerlake'
+           Intel Tiger Lake CPU with 64-bit extensions, MMX, SSE, SSE2,
+           SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX,
+           XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT,
+           FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, CLFLUSHOPT,
+           XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
+           AVX512CD PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI,
+           VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG, RDPID,
+           AVX512VPOPCNTDQ, MOVDIRI, MOVDIR64B, CLWB, AVX512VP2INTERSECT
+           and KEYLOCKER instruction set support.
+ 
+      'rocketlake'
+           Intel Rocket Lake CPU with 64-bit extensions, MMX, SSE, SSE2,
+           SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX,
+           XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT,
+           FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, CLFLUSHOPT,
+           XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
+           AVX512CD PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI,
+           VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG, RDPID and
+           AVX512VPOPCNTDQ instruction set support.
+ 
+      'alderlake'
+      'raptorlake'
+      'meteorlake'
+           Intel Alder Lake/Raptor Lake/Meteor Lake CPU with 64-bit
+           extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
+           SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
+           XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE,
+           CLWB, MOVDIRI, MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2,
+           BMI, BMI2, F16C, FMA, LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ,
+           SERIALIZE, HRESET, KL, WIDEKL and AVX-VNNI instruction set
+           support.
+ 
+      'sapphirerapids'
+      'emeraldrapids'
+           Intel Sapphire Rapids/Emerald Rapids CPU with 64-bit
+           extensions, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,
+           POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
+           F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX,
+           PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F,
+           AVX512VL, AVX512BW, AVX512DQ, AVX512CD, PKU, AVX512VBMI,
+           AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2,
+           VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG,
+           WBNOINVD, CLWB, MOVDIRI, MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE,
+           WAITPKG, SERIALIZE, TSXLDTRK, UINTR, AMX-BF16, AMX-TILE,
+           AMX-INT8, AVX-VNNI, AVX512-FP16 and AVX512BF16 instruction set
+           support.
+ 
+      'graniterapids'
+           Intel Granite Rapids CPU with 64-bit extensions, MMX, SSE,
+           SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
+           AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
+           LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
+           CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
+           AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA,
+           AVX512VNNI, GFNI, VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG,
+           RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD, CLWB, MOVDIRI,
+           MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE,
+           TSXLDTRK, UINTR, AMX-BF16, AMX-TILE, AMX-INT8, AVX-VNNI,
+           AVX512-FP16, AVX512BF16, AMX-FP16 and PREFETCHI instruction
+           set support.
+ 
+      'graniterapids-d'
+           Intel Granite Rapids D CPU with 64-bit extensions, MMX, SSE,
+           SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
+           AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
+           LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
+           CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
+           AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA,
+           AVX512VNNI, GFNI, VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG,
+           RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD, CLWB, MOVDIRI,
+           MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE,
+           TSXLDTRK, UINTR, AMX-BF16, AMX-TILE, AMX-INT8, AVX-VNNI,
+           AVX512FP16, AVX512BF16, AMX-FP16, PREFETCHI and AMX-COMPLEX
+           instruction set support.
+ 
       'bonnell'
+      'atom'
            Intel Bonnell CPU with 64-bit extensions, MOVBE, MMX, SSE,
            SSE2, SSE3 and SSSE3 instruction set support.
  
       'silvermont'
+      'slm'
            Intel Silvermont CPU with 64-bit extensions, MOVBE, MMX, SSE,
            SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
            PCLMUL, PREFETCHW and RDRND instruction set support.
*************** These '-m' options are defined for the x
*** 29635,29641 ****
            CMPCCXADD, ENQCMD and UINTR instruction set support.
  
       'knl'
!           Intel Knight's Landing CPU with 64-bit extensions, MOVBE, MMX,
            SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF,
            FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI,
            BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
--- 29847,29853 ----
            CMPCCXADD, ENQCMD and UINTR instruction set support.
  
       'knl'
!           Intel Knights Landing CPU with 64-bit extensions, MOVBE, MMX,
            SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF,
            FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI,
            BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
*************** These '-m' options are defined for the x
*** 29651,29784 ****
            AVX5124VNNIW, AVX5124FMAPS and AVX512VPOPCNTDQ instruction set
            support.
  
-      'skylake-avx512'
-           Intel Skylake Server CPU with 64-bit extensions, MOVBE, MMX,
-           SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF,
-           FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI,
-           BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
-           CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL,
-           AVX512BW, AVX512DQ and AVX512CD instruction set support.
- 
-      'cannonlake'
-           Intel Cannonlake Server CPU with 64-bit extensions, MOVBE,
-           MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16,
-           SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2,
-           BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
-           AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL,
-           AVX512BW, AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA and
-           SHA instruction set support.
- 
-      'icelake-client'
-           Intel Icelake Client CPU with 64-bit extensions, MOVBE, MMX,
-           SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF,
-           FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI,
-           BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
-           CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
-           AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA,
-           AVX512VNNI, GFNI, VAES, AVX512VBMI2 , VPCLMULQDQ,
-           AVX512BITALG, RDPID and AVX512VPOPCNTDQ instruction set
-           support.
- 
-      'icelake-server'
-           Intel Icelake Server CPU with 64-bit extensions, MOVBE, MMX,
-           SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF,
-           FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI,
-           BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
-           CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
-           AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA,
-           AVX512VNNI, GFNI, VAES, AVX512VBMI2 , VPCLMULQDQ,
-           AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD and
-           CLWB instruction set support.
- 
-      'cascadelake'
-           Intel Cascadelake CPU with 64-bit extensions, MOVBE, MMX, SSE,
-           SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
-           AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
-           LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
-           CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL,
-           AVX512BW, AVX512DQ, AVX512CD and AVX512VNNI instruction set
-           support.
- 
-      'cooperlake'
-           Intel cooperlake CPU with 64-bit extensions, MOVBE, MMX, SSE,
-           SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
-           AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
-           LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
-           CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL,
-           AVX512BW, AVX512DQ, AVX512CD, AVX512VNNI and AVX512BF16
-           instruction set support.
- 
-      'tigerlake'
-           Intel Tigerlake CPU with 64-bit extensions, MOVBE, MMX, SSE,
-           SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
-           AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
-           LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
-           CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
-           AVX512DQ, AVX512CD PKU, AVX512VBMI, AVX512IFMA, SHA,
-           AVX512VNNI, GFNI, VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG,
-           RDPID, AVX512VPOPCNTDQ, MOVDIRI, MOVDIR64B, CLWB,
-           AVX512VP2INTERSECT and KEYLOCKER instruction set support.
- 
-      'sapphirerapids'
-           Intel sapphirerapids CPU with 64-bit extensions, MOVBE, MMX,
-           SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF,
-           FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI,
-           BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
-           CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
-           AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA,
-           AVX512VNNI, GFNI, VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG,
-           RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD, CLWB, MOVDIRI,
-           MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE,
-           TSXLDTRK, UINTR, AMX-BF16, AMX-TILE, AMX-INT8, AVX-VNNI,
-           AVX512-FP16 and AVX512BF16 instruction set support.
- 
-      'alderlake'
-           Intel Alderlake CPU with 64-bit extensions, MOVBE, MMX, SSE,
-           SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW,
-           PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, XSAVEOPT, FSGSBASE,
-           PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI, MOVDIR64B,
-           CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA,
-           LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL,
-           WIDEKL and AVX-VNNI instruction set support.
- 
-      'rocketlake'
-           Intel Rocketlake CPU with 64-bit extensions, MOVBE, MMX, SSE,
-           SSE2, SSE3, SSSE3 , SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
-           AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
-           LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
-           CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW,
-           AVX512DQ, AVX512CD PKU, AVX512VBMI, AVX512IFMA, SHA,
-           AVX512VNNI, GFNI, VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG,
-           RDPID and AVX512VPOPCNTDQ instruction set support.
- 
-      'graniterapids'
-           Intel graniterapids CPU with 64-bit extensions, MOVBE, MMX,
-           SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF,
-           FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI,
-           BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
-           CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
-           AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA,
-           AVX512VNNI, GFNI, VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG,
-           RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD, CLWB, MOVDIRI,
-           MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE,
-           TSXLDTRK, UINTR, AMX-BF16, AMX-TILE, AMX-INT8, AVX-VNNI,
-           AVX512-FP16, AVX512BF16, AMX-FP16 and PREFETCHI instruction
-           set support.
- 
-      'graniterapids-d'
-           Intel graniterapids D CPU with 64-bit extensions, MOVBE, MMX,
-           SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF,
-           FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI,
-           BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
-           CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
-           AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA,
-           AVX512VNNI, GFNI, VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG,
-           RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD, CLWB, MOVDIRI,
-           MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE,
-           TSXLDTRK, UINTR, AMX-BF16, AMX-TILE, AMX-INT8, AVX-VNNI,
-           AVX512FP16, AVX512BF16, AMX-FP16, PREFETCHI and AMX-COMPLEX
-           instruction set support.
- 
       'k6'
            AMD K6 CPU with MMX instruction set support.
  
--- 29863,29868 ----
*************** These '-m' options are defined for the x
*** 29881,29886 ****
--- 29965,29983 ----
            AVX512VBMI, AVX512VBMI2, AVX512VNNI, AVX512BITALG,
            AVX512VPOPCNTDQ, GFNI and 64-bit instruction set extensions.)
  
+      'znver5'
+           AMD Family 1ah core based CPUs with x86-64 instruction set
+           support.  (This supersets BMI, BMI2, CLWB, F16C, FMA,
+           FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES,
+           PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
+           SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT,
+           RDPID, WBNOINVD, PKU, VPCLMULQDQ, VAES, AVX512F, AVX512DQ,
+           AVX512IFMA, AVX512CD, AVX512BW, AVX512VL, AVX512BF16,
+           AVX512VBMI, AVX512VBMI2, AVX512VNNI, AVX512BITALG,
+           AVX512VPOPCNTDQ, GFNI, AVXVNNI, MOVDIRI, MOVDIR64B,
+           AVX512VP2INTERSECT, PREFETCHI and 64-bit instruction set
+           extensions.)
+ 
       'btver1'
            CPUs based on AMD Family 14h cores with x86-64 instruction set
            support.  (This supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A,
*************** These '-m' options are defined for the x
*** 29966,29974 ****
  
       'lujiazui'
            ZHAOXIN lujiazui CPU with x86-64, MOVBE, MMX, SSE, SSE2, SSE3,
!           SSSE3, SSE4.1, SSE4.2, AVX, POPCNT, AES, PCLMUL, RDRND, XSAVE,
!           XSAVEOPT, FSGSBASE, CX16, ABM, BMI, BMI2, F16C, FXSR, RDSEED
!           instruction set support.
  
       'geode'
            AMD Geode embedded processor with MMX and 3DNow! instruction
--- 30063,30073 ----
  
       'lujiazui'
            ZHAOXIN lujiazui CPU with x86-64, MOVBE, MMX, SSE, SSE2, SSE3,
!           SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PCLMUL, RDRND, XSAVE,
!           XSAVEOPT, FSGSBASE, CX16, ABM, BMI, BMI2, FXSR, RDSEED
!           instruction set support.  While the CPUs do support AVX and
!           F16C, these aren't enabled by '-march=lujiazui' for
!           performance reasons.
  
       'geode'
            AMD Geode embedded processor with MMX and 3DNow! instruction
*************** The following attributes are supported o
*** 40179,40185 ****
       runtime overhead.
  
       This attribute has no effect when the option
!      '-ftrivial-auto-var-init' does not present.
  
  'vector_size (BYTES)'
       This attribute specifies the vector size for the type of the
--- 40278,40284 ----
       runtime overhead.
  
       This attribute has no effect when the option
!      '-ftrivial-auto-var-init' is not present.
  
  'vector_size (BYTES)'
       This attribute specifies the vector size for the type of the
*************** should use the '__atomic' builtins inste
*** 46624,46632 ****
  
   Not all operations are supported by all target processors.  If a
  particular operation cannot be implemented on the target processor, a
! warning is generated and a call to an external function is generated.
! The external function carries the same name as the built-in version,
! with an additional suffix '_N' where N is the size of the data type.
  
   In most cases, these built-in functions are considered a "full
  barrier".  That is, no memory operand is moved across the operation,
--- 46723,46731 ----
  
   Not all operations are supported by all target processors.  If a
  particular operation cannot be implemented on the target processor, a
! call to an external function is generated.  The external function
! carries the same name as the built-in version, with an additional suffix
! '_N' where N is the size of the data type.
  
   In most cases, these built-in functions are considered a "full
  barrier".  That is, no memory operand is moved across the operation,
*************** to check the target platform type.
*** 55184,55189 ****
--- 55283,55291 ----
       'znver4'
            AMD Family 19h Zen version 4.
  
+      'znver5'
+           AMD Family 1ah Zen version 5.
+ 
       Here is an example:
            if (__builtin_cpu_is ("corei7"))
              {
*************** look up both forms.
*** 64974,64983 ****
  * dumpbase:                              Overall Options.    (line  251)
  * dumpbase-ext:                          Overall Options.    (line  324)
  * dumpdir:                               Overall Options.    (line  352)
! * dumpfullversion:                       Developer Options.  (line 1041)
! * dumpmachine:                           Developer Options.  (line 1029)
! * dumpspecs:                             Developer Options.  (line 1046)
! * dumpversion:                           Developer Options.  (line 1033)
  * dx:                                    Developer Options.  (line  268)
  * dylib_file:                            Darwin Options.     (line  197)
  * dylinker_install_name:                 Darwin Options.     (line  197)
--- 65076,65085 ----
  * dumpbase:                              Overall Options.    (line  251)
  * dumpbase-ext:                          Overall Options.    (line  324)
  * dumpdir:                               Overall Options.    (line  352)
! * dumpfullversion:                       Developer Options.  (line 1112)
! * dumpmachine:                           Developer Options.  (line 1100)
! * dumpspecs:                             Developer Options.  (line 1117)
! * dumpversion:                           Developer Options.  (line 1104)
  * dx:                                    Developer Options.  (line  268)
  * dylib_file:                            Darwin Options.     (line  197)
  * dylinker_install_name:                 Darwin Options.     (line  197)
*************** look up both forms.
*** 65033,65039 ****
  * fanalyzer-undo-inlining:               Static Analyzer Options.
                                                               (line  847)
  * fasan-shadow-offset:                   Instrumentation Options.
!                                                              (line  643)
  * fasm:                                  C Dialect Options.  (line  217)
  * fassociative-math:                     Optimize Options.   (line 2390)
  * fasynchronous-unwind-tables:           Code Gen Options.   (line  158)
--- 65135,65141 ----
  * fanalyzer-undo-inlining:               Static Analyzer Options.
                                                               (line  847)
  * fasan-shadow-offset:                   Instrumentation Options.
!                                                              (line  644)
  * fasm:                                  C Dialect Options.  (line  217)
  * fassociative-math:                     Optimize Options.   (line 2390)
  * fasynchronous-unwind-tables:           Code Gen Options.   (line  158)
*************** look up both forms.
*** 65049,65067 ****
  * fcallgraph-info:                       Developer Options.  (line   32)
  * fcanon-prefix-map:                     Overall Options.    (line  640)
  * fcf-protection:                        Instrumentation Options.
!                                                              (line  738)
  * fchar8_t:                              C++ Dialect Options.
                                                               (line  130)
  * fcheck-new:                            C++ Dialect Options.
                                                               (line  172)
! * fchecking:                             Developer Options.  (line  714)
  * fcode-hoisting:                        Optimize Options.   (line  974)
  * fcombine-stack-adjustments:            Optimize Options.   (line  945)
  * fcommon:                               Code Gen Options.   (line  233)
  * fcommon <1>:                           Common Variable Attributes.
                                                               (line  200)
! * fcompare-debug:                        Developer Options.  (line  787)
! * fcompare-debug-second:                 Developer Options.  (line  813)
  * fcompare-elim:                         Optimize Options.   (line 2195)
  * fconcepts:                             C++ Dialect Options.
                                                               (line  182)
--- 65151,65169 ----
  * fcallgraph-info:                       Developer Options.  (line   32)
  * fcanon-prefix-map:                     Overall Options.    (line  640)
  * fcf-protection:                        Instrumentation Options.
!                                                              (line  739)
  * fchar8_t:                              C++ Dialect Options.
                                                               (line  130)
  * fcheck-new:                            C++ Dialect Options.
                                                               (line  172)
! * fchecking:                             Developer Options.  (line  785)
  * fcode-hoisting:                        Optimize Options.   (line  974)
  * fcombine-stack-adjustments:            Optimize Options.   (line  945)
  * fcommon:                               Code Gen Options.   (line  233)
  * fcommon <1>:                           Common Variable Attributes.
                                                               (line  200)
! * fcompare-debug:                        Developer Options.  (line  858)
! * fcompare-debug-second:                 Developer Options.  (line  884)
  * fcompare-elim:                         Optimize Options.   (line 2195)
  * fconcepts:                             C++ Dialect Options.
                                                               (line  182)
*************** look up both forms.
*** 65105,65112 ****
  * fcx-fortran-rules:                     Optimize Options.   (line 2529)
  * fcx-limited-range:                     Optimize Options.   (line 2517)
  * fdata-sections:                        Optimize Options.   (line 2688)
! * fdbg-cnt:                              Developer Options.  (line  951)
! * fdbg-cnt-list:                         Developer Options.  (line  948)
  * fdce:                                  Optimize Options.   (line  581)
  * fdebug-cpp:                            Preprocessor Options.
                                                               (line  456)
--- 65207,65214 ----
  * fcx-fortran-rules:                     Optimize Options.   (line 2529)
  * fcx-limited-range:                     Optimize Options.   (line 2517)
  * fdata-sections:                        Optimize Options.   (line 2688)
! * fdbg-cnt:                              Developer Options.  (line 1022)
! * fdbg-cnt-list:                         Developer Options.  (line 1019)
  * fdce:                                  Optimize Options.   (line  581)
  * fdebug-cpp:                            Preprocessor Options.
                                                               (line  456)
*************** look up both forms.
*** 65160,65166 ****
                                                               (line  149)
  * fdirectives-only:                      Preprocessor Options.
                                                               (line  204)
! * fdisable-:                             Developer Options.  (line  645)
  * fdollars-in-identifiers:               Preprocessor Options.
                                                               (line  225)
  * fdollars-in-identifiers <1>:           Interoperation.     (line  141)
--- 65262,65268 ----
                                                               (line  149)
  * fdirectives-only:                      Preprocessor Options.
                                                               (line  204)
! * fdisable-:                             Developer Options.  (line  716)
  * fdollars-in-identifiers:               Preprocessor Options.
                                                               (line  225)
  * fdollars-in-identifiers <1>:           Interoperation.     (line  141)
*************** look up both forms.
*** 65187,65200 ****
                                                               (line  964)
  * fdump-debug:                           Developer Options.  (line  272)
  * fdump-earlydebug:                      Developer Options.  (line  276)
! * fdump-final-insns:                     Developer Options.  (line  781)
  * fdump-go-spec:                         Overall Options.    (line  670)
  * fdump-ipa:                             Developer Options.  (line  301)
! * fdump-lang:                            Developer Options.  (line  331)
! * fdump-lang <1>:                        Developer Options.  (line  335)
! * fdump-lang-all:                        Developer Options.  (line  335)
  * fdump-noaddr:                          Developer Options.  (line  280)
! * fdump-passes:                          Developer Options.  (line  363)
  * fdump-rtl-alignments:                  Developer Options.  (line   64)
  * fdump-rtl-all:                         Developer Options.  (line  244)
  * fdump-rtl-asmcons:                     Developer Options.  (line   67)
--- 65289,65303 ----
                                                               (line  964)
  * fdump-debug:                           Developer Options.  (line  272)
  * fdump-earlydebug:                      Developer Options.  (line  276)
! * fdump-final-insns:                     Developer Options.  (line  852)
  * fdump-go-spec:                         Overall Options.    (line  670)
  * fdump-ipa:                             Developer Options.  (line  301)
! * fdump-ipa-clones:                      Developer Options.  (line  331)
! * fdump-lang:                            Developer Options.  (line  402)
! * fdump-lang <1>:                        Developer Options.  (line  406)
! * fdump-lang-all:                        Developer Options.  (line  406)
  * fdump-noaddr:                          Developer Options.  (line  280)
! * fdump-passes:                          Developer Options.  (line  434)
  * fdump-rtl-alignments:                  Developer Options.  (line   64)
  * fdump-rtl-all:                         Developer Options.  (line  244)
  * fdump-rtl-asmcons:                     Developer Options.  (line   67)
*************** look up both forms.
*** 65263,65271 ****
  * fdump-rtl-vartrack:                    Developer Options.  (line  228)
  * fdump-rtl-vregs:                       Developer Options.  (line  231)
  * fdump-rtl-web:                         Developer Options.  (line  234)
! * fdump-statistics:                      Developer Options.  (line  367)
! * fdump-tree:                            Developer Options.  (line  377)
! * fdump-tree-all:                        Developer Options.  (line  377)
  * fdump-unnumbered:                      Developer Options.  (line  290)
  * fdump-unnumbered-links:                Developer Options.  (line  296)
  * fdwarf2-cfi-asm:                       Debugging Options.  (line  409)
--- 65366,65374 ----
  * fdump-rtl-vartrack:                    Developer Options.  (line  228)
  * fdump-rtl-vregs:                       Developer Options.  (line  231)
  * fdump-rtl-web:                         Developer Options.  (line  234)
! * fdump-statistics:                      Developer Options.  (line  438)
! * fdump-tree:                            Developer Options.  (line  448)
! * fdump-tree-all:                        Developer Options.  (line  448)
  * fdump-unnumbered:                      Developer Options.  (line  290)
  * fdump-unnumbered-links:                Developer Options.  (line  296)
  * fdwarf2-cfi-asm:                       Debugging Options.  (line  409)
*************** look up both forms.
*** 65280,65286 ****
  * femit-struct-debug-baseonly:           Debugging Options.  (line  340)
  * femit-struct-debug-detailed:           Debugging Options.  (line  367)
  * femit-struct-debug-reduced:            Debugging Options.  (line  353)
! * fenable-:                              Developer Options.  (line  645)
  * fenforce-eh-specs:                     C++ Dialect Options.
                                                               (line  319)
  * fexceptions:                           Code Gen Options.   (line  118)
--- 65383,65389 ----
  * femit-struct-debug-baseonly:           Debugging Options.  (line  340)
  * femit-struct-debug-detailed:           Debugging Options.  (line  367)
  * femit-struct-debug-reduced:            Debugging Options.  (line  353)
! * fenable-:                              Developer Options.  (line  716)
  * fenforce-eh-specs:                     C++ Dialect Options.
                                                               (line  319)
  * fexceptions:                           Code Gen Options.   (line  118)
*************** look up both forms.
*** 65331,65339 ****
  * fgraphite-identity:                    Optimize Options.   (line 1264)
  * fguess-branch-probability:             Optimize Options.   (line 1606)
  * fharden-compares:                      Instrumentation Options.
!                                                              (line  771)
  * fharden-conditional-branches:          Instrumentation Options.
!                                                              (line  780)
  * fhoist-adjacent-loads:                 Optimize Options.   (line 1004)
  * fhosted:                               C Dialect Options.  (line  321)
  * fident:                                Code Gen Options.   (line  254)
--- 65434,65442 ----
  * fgraphite-identity:                    Optimize Options.   (line 1264)
  * fguess-branch-probability:             Optimize Options.   (line 1606)
  * fharden-compares:                      Instrumentation Options.
!                                                              (line  772)
  * fharden-conditional-branches:          Instrumentation Options.
!                                                              (line  781)
  * fhoist-adjacent-loads:                 Optimize Options.   (line 1004)
  * fhosted:                               C Dialect Options.  (line  321)
  * fident:                                Code Gen Options.   (line  254)
*************** look up both forms.
*** 65359,65373 ****
  * finput-charset:                        Preprocessor Options.
                                                               (line  287)
  * finstrument-functions:                 Instrumentation Options.
!                                                              (line  957)
  * finstrument-functions <1>:             Common Function Attributes.
                                                               (line  852)
  * finstrument-functions-exclude-file-list: Instrumentation Options.
!                                                              (line 1009)
  * finstrument-functions-exclude-function-list: Instrumentation Options.
!                                                              (line 1030)
  * finstrument-functions-once:            Instrumentation Options.
!                                                              (line  993)
  * fipa-bit-cp:                           Optimize Options.   (line 1071)
  * fipa-cp:                               Optimize Options.   (line 1052)
  * fipa-cp-clone:                         Optimize Options.   (line 1061)
--- 65462,65476 ----
  * finput-charset:                        Preprocessor Options.
                                                               (line  287)
  * finstrument-functions:                 Instrumentation Options.
!                                                              (line  958)
  * finstrument-functions <1>:             Common Function Attributes.
                                                               (line  852)
  * finstrument-functions-exclude-file-list: Instrumentation Options.
!                                                              (line 1010)
  * finstrument-functions-exclude-function-list: Instrumentation Options.
!                                                              (line 1031)
  * finstrument-functions-once:            Instrumentation Options.
!                                                              (line  994)
  * fipa-bit-cp:                           Optimize Options.   (line 1071)
  * fipa-cp:                               Optimize Options.   (line 1052)
  * fipa-cp-clone:                         Optimize Options.   (line 1061)
*************** look up both forms.
*** 65389,65395 ****
  * fira-region:                           Optimize Options.   (line  702)
  * fira-share-save-slots:                 Optimize Options.   (line  738)
  * fira-share-spill-slots:                Optimize Options.   (line  744)
! * fira-verbose:                          Developer Options.  (line  850)
  * fisolate-erroneous-paths-attribute:    Optimize Options.   (line 1164)
  * fisolate-erroneous-paths-dereference:  Optimize Options.   (line 1156)
  * fivar-visibility:                      Objective-C and Objective-C++ Dialect Options.
--- 65492,65498 ----
  * fira-region:                           Optimize Options.   (line  702)
  * fira-share-save-slots:                 Optimize Options.   (line  738)
  * fira-share-spill-slots:                Optimize Options.   (line  744)
! * fira-verbose:                          Developer Options.  (line  921)
  * fisolate-erroneous-paths-attribute:    Optimize Options.   (line 1164)
  * fisolate-erroneous-paths-dereference:  Optimize Options.   (line 1156)
  * fivar-visibility:                      Objective-C and Objective-C++ Dialect Options.
*************** look up both forms.
*** 65428,65443 ****
  * flto:                                  Optimize Options.   (line 1911)
  * flto-compression-level:                Optimize Options.   (line 2143)
  * flto-partition:                        Optimize Options.   (line 2129)
! * flto-report:                           Developer Options.  (line  856)
! * flto-report-wpa:                       Developer Options.  (line  864)
  * fmacro-prefix-map:                     Preprocessor Options.
                                                               (line  263)
  * fmath-errno:                           Optimize Options.   (line 2354)
  * fmax-errors:                           Warning Options.    (line   17)
  * fmax-include-depth:                    Preprocessor Options.
                                                               (line  237)
! * fmem-report:                           Developer Options.  (line  868)
! * fmem-report-wpa:                       Developer Options.  (line  872)
  * fmerge-all-constants:                  Optimize Options.   (line  404)
  * fmerge-constants:                      Optimize Options.   (line  394)
  * fmerge-debug-strings:                  Debugging Options.  (line  135)
--- 65531,65546 ----
  * flto:                                  Optimize Options.   (line 1911)
  * flto-compression-level:                Optimize Options.   (line 2143)
  * flto-partition:                        Optimize Options.   (line 2129)
! * flto-report:                           Developer Options.  (line  927)
! * flto-report-wpa:                       Developer Options.  (line  935)
  * fmacro-prefix-map:                     Preprocessor Options.
                                                               (line  263)
  * fmath-errno:                           Optimize Options.   (line 2354)
  * fmax-errors:                           Warning Options.    (line   17)
  * fmax-include-depth:                    Preprocessor Options.
                                                               (line  237)
! * fmem-report:                           Developer Options.  (line  939)
! * fmem-report-wpa:                       Developer Options.  (line  943)
  * fmerge-all-constants:                  Optimize Options.   (line  404)
  * fmerge-constants:                      Optimize Options.   (line  394)
  * fmerge-debug-strings:                  Debugging Options.  (line  135)
*************** look up both forms.
*** 65463,65469 ****
  * fms-extensions <1>:                    C++ Dialect Options.
                                                               (line  427)
  * fms-extensions <2>:                    Unnamed Fields.     (line   36)
! * fmultiflags:                           Developer Options.  (line  881)
  * fnew-inheriting-ctors:                 C++ Dialect Options.
                                                               (line  432)
  * fnew-ttp-matching:                     C++ Dialect Options.
--- 65566,65572 ----
  * fms-extensions <1>:                    C++ Dialect Options.
                                                               (line  427)
  * fms-extensions <2>:                    Unnamed Fields.     (line   36)
! * fmultiflags:                           Developer Options.  (line  952)
  * fnew-inheriting-ctors:                 C++ Dialect Options.
                                                               (line  432)
  * fnew-ttp-matching:                     C++ Dialect Options.
*************** look up both forms.
*** 65507,65517 ****
                                                               (line  233)
  * fno-char8_t:                           C++ Dialect Options.
                                                               (line  130)
! * fno-checking:                          Developer Options.  (line  714)
  * fno-common:                            Code Gen Options.   (line  233)
  * fno-common <1>:                        Common Variable Attributes.
                                                               (line  200)
! * fno-compare-debug:                     Developer Options.  (line  787)
  * fno-debug-types-section:               Debugging Options.  (line  205)
  * fno-default-inline:                    Inline.             (line   68)
  * fno-defer-pop:                         Optimize Options.   (line  228)
--- 65610,65620 ----
                                                               (line  233)
  * fno-char8_t:                           C++ Dialect Options.
                                                               (line  130)
! * fno-checking:                          Developer Options.  (line  785)
  * fno-common:                            Code Gen Options.   (line  233)
  * fno-common <1>:                        Common Variable Attributes.
                                                               (line  200)
! * fno-compare-debug:                     Developer Options.  (line  858)
  * fno-debug-types-section:               Debugging Options.  (line  205)
  * fno-default-inline:                    Inline.             (line   68)
  * fno-defer-pop:                         Optimize Options.   (line  228)
*************** look up both forms.
*** 65590,65600 ****
  * fno-rtti:                              C++ Dialect Options.
                                                               (line  487)
  * fno-sanitize-recover:                  Instrumentation Options.
!                                                              (line  652)
  * fno-sanitize-trap:                     Instrumentation Options.
!                                                              (line  692)
  * fno-sanitize=all:                      Instrumentation Options.
!                                                              (line  637)
  * fno-sched-interblock:                  Optimize Options.   (line  783)
  * fno-sched-spec:                        Optimize Options.   (line  788)
  * fno-set-stack-executable:              x86 Windows Options.
--- 65693,65703 ----
  * fno-rtti:                              C++ Dialect Options.
                                                               (line  487)
  * fno-sanitize-recover:                  Instrumentation Options.
!                                                              (line  653)
  * fno-sanitize-trap:                     Instrumentation Options.
!                                                              (line  693)
  * fno-sanitize=all:                      Instrumentation Options.
!                                                              (line  638)
  * fno-sched-interblock:                  Optimize Options.   (line  783)
  * fno-sched-spec:                        Optimize Options.   (line  788)
  * fno-set-stack-executable:              x86 Windows Options.
*************** look up both forms.
*** 65604,65610 ****
  * fno-signed-bitfields:                  C Dialect Options.  (line  463)
  * fno-signed-zeros:                      Optimize Options.   (line 2429)
  * fno-stack-limit:                       Instrumentation Options.
!                                                              (line  867)
  * fno-strict-flex-arrays:                C Dialect Options.  (line  497)
  * fno-threadsafe-statics:                C++ Dialect Options.
                                                               (line  542)
--- 65707,65713 ----
  * fno-signed-bitfields:                  C Dialect Options.  (line  463)
  * fno-signed-zeros:                      Optimize Options.   (line 2429)
  * fno-stack-limit:                       Instrumentation Options.
!                                                              (line  868)
  * fno-strict-flex-arrays:                C Dialect Options.  (line  497)
  * fno-threadsafe-statics:                C++ Dialect Options.
                                                               (line  542)
*************** look up both forms.
*** 65614,65620 ****
  * fno-use-cxa-get-exception-ptr:         C++ Dialect Options.
                                                               (line  555)
  * fno-var-tracking-assignments:          Debugging Options.  (line  163)
! * fno-var-tracking-assignments-toggle:   Developer Options.  (line  834)
  * fno-weak:                              C++ Dialect Options.
                                                               (line  617)
  * fno-working-directory:                 Preprocessor Options.
--- 65717,65723 ----
  * fno-use-cxa-get-exception-ptr:         C++ Dialect Options.
                                                               (line  555)
  * fno-var-tracking-assignments:          Debugging Options.  (line  163)
! * fno-var-tracking-assignments-toggle:   Developer Options.  (line  905)
  * fno-weak:                              C++ Dialect Options.
                                                               (line  617)
  * fno-working-directory:                 Preprocessor Options.
*************** look up both forms.
*** 65651,65657 ****
  * fopenmp-target-simd-clone:             C Dialect Options.  (line  413)
  * foperator-names:                       C++ Dialect Options.
                                                               (line  461)
! * fopt-info:                             Developer Options.  (line  484)
  * foptimize-sibling-calls:               Optimize Options.   (line  270)
  * foptimize-strlen:                      Optimize Options.   (line  275)
  * foptional-diags:                       C++ Dialect Options.
--- 65754,65760 ----
  * fopenmp-target-simd-clone:             C Dialect Options.  (line  413)
  * foperator-names:                       C++ Dialect Options.
                                                               (line  461)
! * fopt-info:                             Developer Options.  (line  555)
  * foptimize-sibling-calls:               Optimize Options.   (line  270)
  * foptimize-strlen:                      Optimize Options.   (line  275)
  * foptional-diags:                       C++ Dialect Options.
*************** look up both forms.
*** 65661,65667 ****
  * fpack-struct:                          Code Gen Options.   (line  471)
  * fpartial-inlining:                     Optimize Options.   (line 1549)
  * fpatchable-function-entry:             Instrumentation Options.
!                                                              (line 1042)
  * fpcc-struct-return:                    Code Gen Options.   (line  177)
  * fpcc-struct-return <1>:                Incompatibilities.  (line  170)
  * fpch-deps:                             Preprocessor Options.
--- 65764,65770 ----
  * fpack-struct:                          Code Gen Options.   (line  471)
  * fpartial-inlining:                     Optimize Options.   (line 1549)
  * fpatchable-function-entry:             Instrumentation Options.
!                                                              (line 1043)
  * fpcc-struct-return:                    Code Gen Options.   (line  177)
  * fpcc-struct-return <1>:                Incompatibilities.  (line  170)
  * fpch-deps:                             Preprocessor Options.
*************** look up both forms.
*** 65685,65692 ****
  * fplt:                                  Code Gen Options.   (line  398)
  * fplugin:                               Overall Options.    (line  650)
  * fplugin-arg:                           Overall Options.    (line  657)
! * fpost-ipa-mem-report:                  Developer Options.  (line  876)
! * fpre-ipa-mem-report:                   Developer Options.  (line  876)
  * fpredictive-commoning:                 Optimize Options.   (line 1556)
  * fprefetch-loop-arrays:                 Optimize Options.   (line 1564)
  * fpreprocessed:                         Preprocessor Options.
--- 65788,65795 ----
  * fplt:                                  Code Gen Options.   (line  398)
  * fplugin:                               Overall Options.    (line  650)
  * fplugin-arg:                           Overall Options.    (line  657)
! * fpost-ipa-mem-report:                  Developer Options.  (line  947)
! * fpre-ipa-mem-report:                   Developer Options.  (line  947)
  * fpredictive-commoning:                 Optimize Options.   (line 1556)
  * fprefetch-loop-arrays:                 Optimize Options.   (line 1564)
  * fpreprocessed:                         Preprocessor Options.
*************** look up both forms.
*** 65718,65724 ****
  * fprofile-prefix-path:                  Instrumentation Options.
                                                               (line  259)
  * fprofile-reorder-functions:            Optimize Options.   (line 2573)
! * fprofile-report:                       Developer Options.  (line  909)
  * fprofile-reproducible:                 Instrumentation Options.
                                                               (line  314)
  * fprofile-update:                       Instrumentation Options.
--- 65821,65827 ----
  * fprofile-prefix-path:                  Instrumentation Options.
                                                               (line  259)
  * fprofile-reorder-functions:            Optimize Options.   (line 2573)
! * fprofile-report:                       Developer Options.  (line  980)
  * fprofile-reproducible:                 Instrumentation Options.
                                                               (line  314)
  * fprofile-update:                       Instrumentation Options.
*************** look up both forms.
*** 65726,65732 ****
  * fprofile-use:                          Optimize Options.   (line 2236)
  * fprofile-values:                       Optimize Options.   (line 2563)
  * fpu:                                   RX Options.         (line   15)
! * frandom-seed:                          Developer Options.  (line  720)
  * freciprocal-math:                      Optimize Options.   (line 2407)
  * frecord-gcc-switches:                  Code Gen Options.   (line  343)
  * free:                                  Optimize Options.   (line  666)
--- 65829,65835 ----
  * fprofile-use:                          Optimize Options.   (line 2236)
  * fprofile-values:                       Optimize Options.   (line 2563)
  * fpu:                                   RX Options.         (line   15)
! * frandom-seed:                          Developer Options.  (line  791)
  * freciprocal-math:                      Optimize Options.   (line 2407)
  * frecord-gcc-switches:                  Code Gen Options.   (line  343)
  * free:                                  Optimize Options.   (line  666)
*************** look up both forms.
*** 65745,65828 ****
  * frtti:                                 C++ Dialect Options.
                                                               (line  487)
  * fsanitize-address-use-after-scope:     Instrumentation Options.
!                                                              (line  688)
  * fsanitize-coverage=trace-cmp:          Instrumentation Options.
!                                                              (line  725)
  * fsanitize-coverage=trace-pc:           Instrumentation Options.
!                                                              (line  721)
  * fsanitize-recover:                     Instrumentation Options.
!                                                              (line  652)
  * fsanitize-sections:                    Instrumentation Options.
!                                                              (line  648)
  * fsanitize-trap:                        Instrumentation Options.
!                                                              (line  692)
  * fsanitize-undefined-trap-on-error:     Instrumentation Options.
!                                                              (line  717)
  * fsanitize=address:                     Instrumentation Options.
                                                               (line  342)
  * fsanitize=alignment:                   Instrumentation Options.
!                                                              (line  559)
  * fsanitize=bool:                        Instrumentation Options.
!                                                              (line  597)
  * fsanitize=bounds:                      Instrumentation Options.
!                                                              (line  543)
  * fsanitize=bounds-strict:               Instrumentation Options.
!                                                              (line  553)
  * fsanitize=builtin:                     Instrumentation Options.
!                                                              (line  621)
  * fsanitize=enum:                        Instrumentation Options.
!                                                              (line  602)
  * fsanitize=float-cast-overflow:         Instrumentation Options.
!                                                              (line  577)
  * fsanitize=float-divide-by-zero:        Instrumentation Options.
!                                                              (line  571)
  * fsanitize=hwaddress:                   Instrumentation Options.
!                                                              (line  373)
  * fsanitize=integer-divide-by-zero:      Instrumentation Options.
!                                                              (line  506)
  * fsanitize=kernel-address:              Instrumentation Options.
!                                                              (line  369)
  * fsanitize=kernel-hwaddress:            Instrumentation Options.
!                                                              (line  387)
  * fsanitize=leak:                        Instrumentation Options.
!                                                              (line  468)
  * fsanitize=nonnull-attribute:           Instrumentation Options.
!                                                              (line  585)
  * fsanitize=null:                        Instrumentation Options.
!                                                              (line  519)
  * fsanitize=object-size:                 Instrumentation Options.
!                                                              (line  566)
  * fsanitize=pointer-compare:             Instrumentation Options.
!                                                              (line  403)
  * fsanitize=pointer-overflow:            Instrumentation Options.
!                                                              (line  615)
  * fsanitize=pointer-subtract:            Instrumentation Options.
!                                                              (line  413)
  * fsanitize=return:                      Instrumentation Options.
!                                                              (line  527)
  * fsanitize=returns-nonnull-attribute:   Instrumentation Options.
!                                                              (line  591)
  * fsanitize=shadow-call-stack:           Instrumentation Options.
!                                                              (line  423)
  * fsanitize=shift:                       Instrumentation Options.
!                                                              (line  486)
  * fsanitize=shift-base:                  Instrumentation Options.
!                                                              (line  499)
  * fsanitize=shift-exponent:              Instrumentation Options.
!                                                              (line  494)
  * fsanitize=signed-integer-overflow:     Instrumentation Options.
!                                                              (line  533)
  * fsanitize=thread:                      Instrumentation Options.
!                                                              (line  454)
  * fsanitize=undefined:                   Instrumentation Options.
!                                                              (line  478)
  * fsanitize=unreachable:                 Instrumentation Options.
!                                                              (line  509)
  * fsanitize=vla-bound:                   Instrumentation Options.
!                                                              (line  515)
  * fsanitize=vptr:                        Instrumentation Options.
!                                                              (line  608)
! * fsave-optimization-record:             Developer Options.  (line  592)
  * fsched-critical-path-heuristic:        Optimize Options.   (line  848)
  * fsched-dep-count-heuristic:            Optimize Options.   (line  875)
  * fsched-group-heuristic:                Optimize Options.   (line  842)
--- 65848,65931 ----
  * frtti:                                 C++ Dialect Options.
                                                               (line  487)
  * fsanitize-address-use-after-scope:     Instrumentation Options.
!                                                              (line  689)
  * fsanitize-coverage=trace-cmp:          Instrumentation Options.
!                                                              (line  726)
  * fsanitize-coverage=trace-pc:           Instrumentation Options.
!                                                              (line  722)
  * fsanitize-recover:                     Instrumentation Options.
!                                                              (line  653)
  * fsanitize-sections:                    Instrumentation Options.
!                                                              (line  649)
  * fsanitize-trap:                        Instrumentation Options.
!                                                              (line  693)
  * fsanitize-undefined-trap-on-error:     Instrumentation Options.
!                                                              (line  718)
  * fsanitize=address:                     Instrumentation Options.
                                                               (line  342)
  * fsanitize=alignment:                   Instrumentation Options.
!                                                              (line  560)
  * fsanitize=bool:                        Instrumentation Options.
!                                                              (line  598)
  * fsanitize=bounds:                      Instrumentation Options.
!                                                              (line  544)
  * fsanitize=bounds-strict:               Instrumentation Options.
!                                                              (line  554)
  * fsanitize=builtin:                     Instrumentation Options.
!                                                              (line  622)
  * fsanitize=enum:                        Instrumentation Options.
!                                                              (line  603)
  * fsanitize=float-cast-overflow:         Instrumentation Options.
!                                                              (line  578)
  * fsanitize=float-divide-by-zero:        Instrumentation Options.
!                                                              (line  572)
  * fsanitize=hwaddress:                   Instrumentation Options.
!                                                              (line  374)
  * fsanitize=integer-divide-by-zero:      Instrumentation Options.
!                                                              (line  507)
  * fsanitize=kernel-address:              Instrumentation Options.
!                                                              (line  370)
  * fsanitize=kernel-hwaddress:            Instrumentation Options.
!                                                              (line  388)
  * fsanitize=leak:                        Instrumentation Options.
!                                                              (line  469)
  * fsanitize=nonnull-attribute:           Instrumentation Options.
!                                                              (line  586)
  * fsanitize=null:                        Instrumentation Options.
!                                                              (line  520)
  * fsanitize=object-size:                 Instrumentation Options.
!                                                              (line  567)
  * fsanitize=pointer-compare:             Instrumentation Options.
!                                                              (line  404)
  * fsanitize=pointer-overflow:            Instrumentation Options.
!                                                              (line  616)
  * fsanitize=pointer-subtract:            Instrumentation Options.
!                                                              (line  414)
  * fsanitize=return:                      Instrumentation Options.
!                                                              (line  528)
  * fsanitize=returns-nonnull-attribute:   Instrumentation Options.
!                                                              (line  592)
  * fsanitize=shadow-call-stack:           Instrumentation Options.
!                                                              (line  424)
  * fsanitize=shift:                       Instrumentation Options.
!                                                              (line  487)
  * fsanitize=shift-base:                  Instrumentation Options.
!                                                              (line  500)
  * fsanitize=shift-exponent:              Instrumentation Options.
!                                                              (line  495)
  * fsanitize=signed-integer-overflow:     Instrumentation Options.
!                                                              (line  534)
  * fsanitize=thread:                      Instrumentation Options.
!                                                              (line  455)
  * fsanitize=undefined:                   Instrumentation Options.
!                                                              (line  479)
  * fsanitize=unreachable:                 Instrumentation Options.
!                                                              (line  510)
  * fsanitize=vla-bound:                   Instrumentation Options.
!                                                              (line  516)
  * fsanitize=vptr:                        Instrumentation Options.
!                                                              (line  609)
! * fsave-optimization-record:             Developer Options.  (line  663)
  * fsched-critical-path-heuristic:        Optimize Options.   (line  848)
  * fsched-dep-count-heuristic:            Optimize Options.   (line  875)
  * fsched-group-heuristic:                Optimize Options.   (line  842)
*************** look up both forms.
*** 65836,65842 ****
  * fsched-spec-load-dangerous:            Optimize Options.   (line  807)
  * fsched-stalled-insns:                  Optimize Options.   (line  812)
  * fsched-stalled-insns-dep:              Optimize Options.   (line  822)
! * fsched-verbose:                        Developer Options.  (line  632)
  * fsched2-use-superblocks:               Optimize Options.   (line  832)
  * fschedule-fusion:                      Optimize Options.   (line 2602)
  * fschedule-insns:                       Optimize Options.   (line  764)
--- 65939,65945 ----
  * fsched-spec-load-dangerous:            Optimize Options.   (line  807)
  * fsched-stalled-insns:                  Optimize Options.   (line  812)
  * fsched-stalled-insns-dep:              Optimize Options.   (line  822)
! * fsched-verbose:                        Developer Options.  (line  703)
  * fsched2-use-superblocks:               Optimize Options.   (line  832)
  * fschedule-fusion:                      Optimize Options.   (line 2602)
  * fschedule-insns:                       Optimize Options.   (line  764)
*************** look up both forms.
*** 65875,65881 ****
  * fsplit-loops:                          Optimize Options.   (line 2653)
  * fsplit-paths:                          Optimize Options.   (line 1522)
  * fsplit-stack:                          Instrumentation Options.
!                                                              (line  886)
  * fsplit-stack <1>:                      Common Function Attributes.
                                                               (line  907)
  * fsplit-wide-types:                     Optimize Options.   (line  473)
--- 65978,65984 ----
  * fsplit-loops:                          Optimize Options.   (line 2653)
  * fsplit-paths:                          Optimize Options.   (line 1522)
  * fsplit-stack:                          Instrumentation Options.
!                                                              (line  887)
  * fsplit-stack <1>:                      Common Function Attributes.
                                                               (line  907)
  * fsplit-wide-types:                     Optimize Options.   (line  473)
*************** look up both forms.
*** 65884,65907 ****
  * fssa-phiopt:                           Optimize Options.   (line 1194)
  * fsso-struct:                           C Dialect Options.  (line  521)
  * fstack-check:                          Instrumentation Options.
!                                                              (line  812)
  * fstack-clash-protection:               Instrumentation Options.
!                                                              (line  854)
  * fstack-limit-register:                 Instrumentation Options.
!                                                              (line  867)
  * fstack-limit-symbol:                   Instrumentation Options.
!                                                              (line  867)
  * fstack-protector:                      Instrumentation Options.
!                                                              (line  787)
  * fstack-protector-all:                  Instrumentation Options.
!                                                              (line  798)
  * fstack-protector-explicit:             Instrumentation Options.
!                                                              (line  808)
  * fstack-protector-strong:               Instrumentation Options.
!                                                              (line  801)
! * fstack-usage:                          Developer Options.  (line  913)
  * fstack_reuse:                          Code Gen Options.   (line   14)
! * fstats:                                Developer Options.  (line  942)
  * fstdarg-opt:                           Optimize Options.   (line 2718)
  * fstore-merging:                        Optimize Options.   (line 1413)
  * fstrict-aliasing:                      Optimize Options.   (line 1676)
--- 65987,66010 ----
  * fssa-phiopt:                           Optimize Options.   (line 1194)
  * fsso-struct:                           C Dialect Options.  (line  521)
  * fstack-check:                          Instrumentation Options.
!                                                              (line  813)
  * fstack-clash-protection:               Instrumentation Options.
!                                                              (line  855)
  * fstack-limit-register:                 Instrumentation Options.
!                                                              (line  868)
  * fstack-limit-symbol:                   Instrumentation Options.
!                                                              (line  868)
  * fstack-protector:                      Instrumentation Options.
!                                                              (line  788)
  * fstack-protector-all:                  Instrumentation Options.
!                                                              (line  799)
  * fstack-protector-explicit:             Instrumentation Options.
!                                                              (line  809)
  * fstack-protector-strong:               Instrumentation Options.
!                                                              (line  802)
! * fstack-usage:                          Developer Options.  (line  984)
  * fstack_reuse:                          Code Gen Options.   (line   14)
! * fstats:                                Developer Options.  (line 1013)
  * fstdarg-opt:                           Optimize Options.   (line 2718)
  * fstore-merging:                        Optimize Options.   (line 1413)
  * fstrict-aliasing:                      Optimize Options.   (line 1676)
*************** look up both forms.
*** 65926,65933 ****
  * fthread-jumps:                         Optimize Options.   (line  464)
  * fthreadsafe-statics:                   C++ Dialect Options.
                                                               (line  542)
! * ftime-report:                          Developer Options.  (line  842)
! * ftime-report-details:                  Developer Options.  (line  846)
  * ftls-model:                            Code Gen Options.   (line  495)
  * ftoplevel-reorder:                     Optimize Options.   (line 1860)
  * ftracer:                               Optimize Options.   (line 2610)
--- 66029,66036 ----
  * fthread-jumps:                         Optimize Options.   (line  464)
  * fthreadsafe-statics:                   C++ Dialect Options.
                                                               (line  542)
! * ftime-report:                          Developer Options.  (line  913)
! * ftime-report-details:                  Developer Options.  (line  917)
  * ftls-model:                            Code Gen Options.   (line  495)
  * ftoplevel-reorder:                     Optimize Options.   (line 1860)
  * ftracer:                               Optimize Options.   (line 2610)
*************** look up both forms.
*** 65998,66004 ****
  * fuse-linker-plugin:                    Optimize Options.   (line 2154)
  * fvar-tracking:                         Debugging Options.  (line  153)
  * fvar-tracking-assignments:             Debugging Options.  (line  163)
! * fvar-tracking-assignments-toggle:      Developer Options.  (line  834)
  * fvariable-expansion-in-unroller:       Optimize Options.   (line 1541)
  * fvect-cost-model:                      Optimize Options.   (line 1485)
  * fverbose-asm:                          Code Gen Options.   (line  264)
--- 66101,66107 ----
  * fuse-linker-plugin:                    Optimize Options.   (line 2154)
  * fvar-tracking:                         Debugging Options.  (line  153)
  * fvar-tracking-assignments:             Debugging Options.  (line  163)
! * fvar-tracking-assignments-toggle:      Developer Options.  (line  905)
  * fvariable-expansion-in-unroller:       Optimize Options.   (line 1541)
  * fvect-cost-model:                      Optimize Options.   (line 1485)
  * fverbose-asm:                          Code Gen Options.   (line  264)
*************** look up both forms.
*** 66010,66020 ****
                                                               (line  588)
  * fvpt:                                  Optimize Options.   (line 2580)
  * fvtable-verify:                        Instrumentation Options.
!                                                              (line  904)
  * fvtv-counts:                           Instrumentation Options.
!                                                              (line  940)
  * fvtv-debug:                            Instrumentation Options.
!                                                              (line  927)
  * fweak:                                 C++ Dialect Options.
                                                               (line  617)
  * fweb:                                  Optimize Options.   (line 1886)
--- 66113,66123 ----
                                                               (line  588)
  * fvpt:                                  Optimize Options.   (line 2580)
  * fvtable-verify:                        Instrumentation Options.
!                                                              (line  905)
  * fvtv-counts:                           Instrumentation Options.
!                                                              (line  941)
  * fvtv-debug:                            Instrumentation Options.
!                                                              (line  928)
  * fweak:                                 C++ Dialect Options.
                                                               (line  617)
  * fweb:                                  Optimize Options.   (line 1886)
*************** look up both forms.
*** 66068,66074 ****
  * gsplit-dwarf:                          Debugging Options.  (line  174)
  * gstatement-frontiers:                  Debugging Options.  (line  266)
  * gstrict-dwarf:                         Debugging Options.  (line  224)
! * gtoggle:                               Developer Options.  (line  826)
  * gused:                                 Darwin Options.     (line   63)
  * gvariable-location-views:              Debugging Options.  (line  276)
  * gvariable-location-views=incompat5:    Debugging Options.  (line  276)
--- 66171,66177 ----
  * gsplit-dwarf:                          Debugging Options.  (line  174)
  * gstatement-frontiers:                  Debugging Options.  (line  266)
  * gstrict-dwarf:                         Debugging Options.  (line  224)
! * gtoggle:                               Developer Options.  (line  897)
  * gused:                                 Darwin Options.     (line   63)
  * gvariable-location-views:              Debugging Options.  (line  276)
  * gvariable-location-views=incompat5:    Debugging Options.  (line  276)
*************** look up both forms.
*** 66105,66112 ****
                                                               (line   76)
  * m1:                                    SH Options.         (line    8)
  * m10:                                   PDP-11 Options.     (line   28)
! * m128bit-long-double:                   x86 Options.        (line  708)
! * m16:                                   x86 Options.        (line 1623)
  * m16-bit:                               CRIS Options.       (line   59)
  * m16-bit <1>:                           NDS32 Options.      (line   50)
  * m1reg-:                                Adapteva Epiphany Options.
--- 66208,66215 ----
                                                               (line   76)
  * m1:                                    SH Options.         (line    8)
  * m10:                                   PDP-11 Options.     (line   28)
! * m128bit-long-double:                   x86 Options.        (line  733)
! * m16:                                   x86 Options.        (line 1648)
  * m16-bit:                               CRIS Options.       (line   59)
  * m16-bit <1>:                           NDS32 Options.      (line   50)
  * m1reg-:                                Adapteva Epiphany Options.
*************** look up both forms.
*** 66123,66129 ****
  * m32:                                   RS/6000 and PowerPC Options.
                                                               (line  243)
  * m32 <1>:                               SPARC Options.      (line  313)
! * m32 <2>:                               x86 Options.        (line 1623)
  * m32-bit:                               CRIS Options.       (line   59)
  * m32bit-doubles:                        RL78 Options.       (line   71)
  * m32bit-doubles <1>:                    RX Options.         (line    8)
--- 66226,66232 ----
  * m32:                                   RS/6000 and PowerPC Options.
                                                               (line  243)
  * m32 <1>:                               SPARC Options.      (line  313)
! * m32 <2>:                               x86 Options.        (line 1648)
  * m32-bit:                               CRIS Options.       (line   59)
  * m32bit-doubles:                        RL78 Options.       (line   71)
  * m32bit-doubles <1>:                    RX Options.         (line    8)
*************** look up both forms.
*** 66131,66138 ****
  * m32r2:                                 M32R/D Options.     (line    8)
  * m32rx:                                 M32R/D Options.     (line   11)
  * m340:                                  MCore Options.      (line   41)
! * m3dnow:                                x86 Options.        (line  942)
! * m3dnowa:                               x86 Options.        (line  943)
  * m3e:                                   SH Options.         (line   36)
  * m4:                                    SH Options.         (line   50)
  * m4-100:                                SH Options.         (line   53)
--- 66234,66241 ----
  * m32r2:                                 M32R/D Options.     (line    8)
  * m32rx:                                 M32R/D Options.     (line   11)
  * m340:                                  MCore Options.      (line   41)
! * m3dnow:                                x86 Options.        (line  967)
! * m3dnowa:                               x86 Options.        (line  968)
  * m3e:                                   SH Options.         (line   36)
  * m4:                                    SH Options.         (line   50)
  * m4-100:                                SH Options.         (line   53)
*************** look up both forms.
*** 66171,66177 ****
  * m64 <2>:                               S/390 and zSeries Options.
                                                               (line   84)
  * m64 <3>:                               SPARC Options.      (line  313)
! * m64 <4>:                               x86 Options.        (line 1623)
  * m64bit-doubles:                        RL78 Options.       (line   71)
  * m64bit-doubles <1>:                    RX Options.         (line    8)
  * m68000:                                M680x0 Options.     (line   92)
--- 66274,66280 ----
  * m64 <2>:                               S/390 and zSeries Options.
                                                               (line   84)
  * m64 <3>:                               SPARC Options.      (line  313)
! * m64 <4>:                               x86 Options.        (line 1648)
  * m64bit-doubles:                        RL78 Options.       (line   71)
  * m64bit-doubles <1>:                    RX Options.         (line    8)
  * m68000:                                M680x0 Options.     (line   92)
*************** look up both forms.
*** 66184,66193 ****
  * m68060:                                M680x0 Options.     (line  126)
  * m68881:                                M680x0 Options.     (line  193)
  * m8-bit:                                CRIS Options.       (line   59)
! * m80387:                                x86 Options.        (line  656)
! * m8bit-idiv:                            x86 Options.        (line 1527)
  * m8byte-align:                          V850 Options.       (line  168)
! * m96bit-long-double:                    x86 Options.        (line  708)
  * mA6:                                   ARC Options.        (line   23)
  * mA7:                                   ARC Options.        (line   29)
  * mabi:                                  AArch64 Options.    (line    8)
--- 66287,66296 ----
  * m68060:                                M680x0 Options.     (line  126)
  * m68881:                                M680x0 Options.     (line  193)
  * m8-bit:                                CRIS Options.       (line   59)
! * m80387:                                x86 Options.        (line  681)
! * m8bit-idiv:                            x86 Options.        (line 1552)
  * m8byte-align:                          V850 Options.       (line  168)
! * m96bit-long-double:                    x86 Options.        (line  733)
  * mA6:                                   ARC Options.        (line   23)
  * mA7:                                   ARC Options.        (line   29)
  * mabi:                                  AArch64 Options.    (line    8)
*************** look up both forms.
*** 66197,66203 ****
  * mabi <4>:                              RISC-V Options.     (line   16)
  * mabi <5>:                              RS/6000 and PowerPC Options.
                                                               (line  551)
! * mabi <6>:                              x86 Options.        (line 1211)
  * mabi <7>:                              Xtensa Options.     (line  102)
  * mabi=32:                               MIPS Options.       (line  151)
  * mabi=64:                               MIPS Options.       (line  151)
--- 66300,66306 ----
  * mabi <4>:                              RISC-V Options.     (line   16)
  * mabi <5>:                              RS/6000 and PowerPC Options.
                                                               (line  551)
! * mabi <6>:                              x86 Options.        (line 1236)
  * mabi <7>:                              Xtensa Options.     (line  102)
  * mabi=32:                               MIPS Options.       (line  151)
  * mabi=64:                               MIPS Options.       (line  151)
*************** look up both forms.
*** 66217,66239 ****
  * mabi=o64:                              MIPS Options.       (line  151)
  * mabi=windowed:                         Xtensa Options.     (line  114)
  * mabicalls:                             MIPS Options.       (line  190)
! * mabm:                                  x86 Options.        (line  945)
  * mabort-on-noreturn:                    ARM Options.        (line  778)
  * mabs=2008:                             MIPS Options.       (line  298)
  * mabs=legacy:                           MIPS Options.       (line  298)
! * mabsdata:                              AVR Options.        (line  186)
  * mac0:                                  PDP-11 Options.     (line   15)
  * macc-4:                                FRV Options.        (line  138)
  * macc-8:                                FRV Options.        (line  142)
! * maccumulate-args:                      AVR Options.        (line  193)
  * maccumulate-outgoing-args:             SH Options.         (line  313)
! * maccumulate-outgoing-args <1>:         x86 Options.        (line 1265)
! * maddress-mode=long:                    x86 Options.        (line 1677)
! * maddress-mode=short:                   x86 Options.        (line 1682)
  * mads:                                  RS/6000 and PowerPC Options.
                                                               (line  613)
! * madx:                                  x86 Options.        (line  946)
! * maes:                                  x86 Options.        (line  923)
  * maix-struct-return:                    RS/6000 and PowerPC Options.
                                                               (line  544)
  * maix32:                                RS/6000 and PowerPC Options.
--- 66320,66342 ----
  * mabi=o64:                              MIPS Options.       (line  151)
  * mabi=windowed:                         Xtensa Options.     (line  114)
  * mabicalls:                             MIPS Options.       (line  190)
! * mabm:                                  x86 Options.        (line  970)
  * mabort-on-noreturn:                    ARM Options.        (line  778)
  * mabs=2008:                             MIPS Options.       (line  298)
  * mabs=legacy:                           MIPS Options.       (line  298)
! * mabsdata:                              AVR Options.        (line  188)
  * mac0:                                  PDP-11 Options.     (line   15)
  * macc-4:                                FRV Options.        (line  138)
  * macc-8:                                FRV Options.        (line  142)
! * maccumulate-args:                      AVR Options.        (line  195)
  * maccumulate-outgoing-args:             SH Options.         (line  313)
! * maccumulate-outgoing-args <1>:         x86 Options.        (line 1290)
! * maddress-mode=long:                    x86 Options.        (line 1702)
! * maddress-mode=short:                   x86 Options.        (line 1707)
  * mads:                                  RS/6000 and PowerPC Options.
                                                               (line  613)
! * madx:                                  x86 Options.        (line  971)
! * maes:                                  x86 Options.        (line  948)
  * maix-struct-return:                    RS/6000 and PowerPC Options.
                                                               (line  544)
  * maix32:                                RS/6000 and PowerPC Options.
*************** look up both forms.
*** 66243,66250 ****
  * malign-300:                            H8/300 Options.     (line   40)
  * malign-call:                           ARC Options.        (line  441)
  * malign-data:                           RISC-V Options.     (line  178)
! * malign-data <1>:                       x86 Options.        (line  749)
! * malign-double:                         x86 Options.        (line  693)
  * malign-int:                            M680x0 Options.     (line  260)
  * malign-labels:                         FRV Options.        (line  127)
  * malign-loops:                          M32R/D Options.     (line   72)
--- 66346,66353 ----
  * malign-300:                            H8/300 Options.     (line   40)
  * malign-call:                           ARC Options.        (line  441)
  * malign-data:                           RISC-V Options.     (line  178)
! * malign-data <1>:                       x86 Options.        (line  774)
! * malign-double:                         x86 Options.        (line  718)
  * malign-int:                            M680x0 Options.     (line  260)
  * malign-labels:                         FRV Options.        (line  127)
  * malign-loops:                          M32R/D Options.     (line   72)
*************** look up both forms.
*** 66252,66258 ****
                                                               (line  319)
  * malign-power:                          RS/6000 and PowerPC Options.
                                                               (line  319)
! * malign-stringops:                      x86 Options.        (line 1401)
  * malloc-cc:                             FRV Options.        (line   30)
  * mallow-string-insns:                   RX Options.         (line  148)
  * mallregs:                              RL78 Options.       (line   65)
--- 66355,66361 ----
                                                               (line  319)
  * malign-power:                          RS/6000 and PowerPC Options.
                                                               (line  319)
! * malign-stringops:                      x86 Options.        (line 1426)
  * malloc-cc:                             FRV Options.        (line   30)
  * mallow-string-insns:                   RX Options.         (line  148)
  * mallregs:                              RL78 Options.       (line   65)
*************** look up both forms.
*** 66262,66272 ****
  * mam33:                                 MN10300 Options.    (line   16)
  * mam33-2:                               MN10300 Options.    (line   23)
  * mam34:                                 MN10300 Options.    (line   26)
! * mamx-bf16:                             x86 Options.        (line  984)
! * mamx-complex:                          x86 Options.        (line  995)
! * mamx-fp16:                             x86 Options.        (line  992)
! * mamx-int8:                             x86 Options.        (line  983)
! * mamx-tile:                             x86 Options.        (line  982)
  * manchor:                               C-SKY Options.      (line  124)
  * mandroid:                              GNU/Linux Options.  (line   25)
  * mannotate-align:                       ARC Options.        (line  390)
--- 66365,66375 ----
  * mam33:                                 MN10300 Options.    (line   16)
  * mam33-2:                               MN10300 Options.    (line   23)
  * mam34:                                 MN10300 Options.    (line   26)
! * mamx-bf16:                             x86 Options.        (line 1009)
! * mamx-complex:                          x86 Options.        (line 1020)
! * mamx-fp16:                             x86 Options.        (line 1017)
! * mamx-int8:                             x86 Options.        (line 1008)
! * mamx-tile:                             x86 Options.        (line 1007)
  * manchor:                               C-SKY Options.      (line  124)
  * mandroid:                              GNU/Linux Options.  (line   25)
  * mannotate-align:                       ARC Options.        (line  390)
*************** look up both forms.
*** 66303,66309 ****
  * mas100-syntax:                         RX Options.         (line   74)
  * masm-hex:                              MSP430 Options.     (line    8)
  * masm-syntax-unified:                   ARM Options.        (line  958)
! * masm=DIALECT:                          x86 Options.        (line  643)
  * matomic:                               ARC Options.        (line  163)
  * matomic-libcalls:                      HPPA Options.       (line   22)
  * matomic-model=MODEL:                   SH Options.         (line  192)
--- 66406,66412 ----
  * mas100-syntax:                         RX Options.         (line   74)
  * masm-hex:                              MSP430 Options.     (line    8)
  * masm-syntax-unified:                   ARM Options.        (line  958)
! * masm=DIALECT:                          x86 Options.        (line  668)
  * matomic:                               ARC Options.        (line  163)
  * matomic-libcalls:                      HPPA Options.       (line   22)
  * matomic-model=MODEL:                   SH Options.         (line  192)
*************** look up both forms.
*** 66312,66343 ****
  * mauto-pic:                             IA-64 Options.      (line   49)
  * mavoid-indexed-addresses:              RS/6000 and PowerPC Options.
                                                               (line  358)
! * mavx:                                  x86 Options.        (line  911)
! * mavx2:                                 x86 Options.        (line  912)
! * mavx256-split-unaligned-load:          x86 Options.        (line 1535)
! * mavx256-split-unaligned-store:         x86 Options.        (line 1535)
! * mavx5124fmaps:                         x86 Options.        (line  976)
! * mavx5124vnniw:                         x86 Options.        (line  979)
! * mavx512bf16:                           x86 Options.        (line  962)
! * mavx512bitalg:                         x86 Options.        (line  968)
! * mavx512bw:                             x86 Options.        (line  918)
! * mavx512cd:                             x86 Options.        (line  916)
! * mavx512dq:                             x86 Options.        (line  919)
! * mavx512er:                             x86 Options.        (line  915)
! * mavx512f:                              x86 Options.        (line  913)
! * mavx512fp16:                           x86 Options.        (line  963)
! * mavx512ifma:                           x86 Options.        (line  920)
! * mavx512pf:                             x86 Options.        (line  914)
! * mavx512vbmi:                           x86 Options.        (line  921)
! * mavx512vbmi2:                          x86 Options.        (line  961)
! * mavx512vl:                             x86 Options.        (line  917)
! * mavx512vnni:                           x86 Options.        (line  977)
! * mavx512vp2intersect:                   x86 Options.        (line  975)
! * mavx512vpopcntdq:                      x86 Options.        (line  974)
! * mavxifma:                              x86 Options.        (line  988)
! * mavxneconvert:                         x86 Options.        (line  990)
! * mavxvnni:                              x86 Options.        (line  978)
! * mavxvnniint8:                          x86 Options.        (line  989)
  * max-vect-align:                        Adapteva Epiphany Options.
                                                               (line  118)
  * mb:                                    SH Options.         (line  125)
--- 66415,66446 ----
  * mauto-pic:                             IA-64 Options.      (line   49)
  * mavoid-indexed-addresses:              RS/6000 and PowerPC Options.
                                                               (line  358)
! * mavx:                                  x86 Options.        (line  936)
! * mavx2:                                 x86 Options.        (line  937)
! * mavx256-split-unaligned-load:          x86 Options.        (line 1560)
! * mavx256-split-unaligned-store:         x86 Options.        (line 1560)
! * mavx5124fmaps:                         x86 Options.        (line 1001)
! * mavx5124vnniw:                         x86 Options.        (line 1004)
! * mavx512bf16:                           x86 Options.        (line  987)
! * mavx512bitalg:                         x86 Options.        (line  993)
! * mavx512bw:                             x86 Options.        (line  943)
! * mavx512cd:                             x86 Options.        (line  941)
! * mavx512dq:                             x86 Options.        (line  944)
! * mavx512er:                             x86 Options.        (line  940)
! * mavx512f:                              x86 Options.        (line  938)
! * mavx512fp16:                           x86 Options.        (line  988)
! * mavx512ifma:                           x86 Options.        (line  945)
! * mavx512pf:                             x86 Options.        (line  939)
! * mavx512vbmi:                           x86 Options.        (line  946)
! * mavx512vbmi2:                          x86 Options.        (line  986)
! * mavx512vl:                             x86 Options.        (line  942)
! * mavx512vnni:                           x86 Options.        (line 1002)
! * mavx512vp2intersect:                   x86 Options.        (line 1000)
! * mavx512vpopcntdq:                      x86 Options.        (line  999)
! * mavxifma:                              x86 Options.        (line 1013)
! * mavxneconvert:                         x86 Options.        (line 1015)
! * mavxvnni:                              x86 Options.        (line 1003)
! * mavxvnniint8:                          x86 Options.        (line 1014)
  * max-vect-align:                        Adapteva Epiphany Options.
                                                               (line  118)
  * mb:                                    SH Options.         (line  125)
*************** look up both forms.
*** 66379,66390 ****
                                                               (line  699)
  * mblock-move-inline-limit:              RS/6000 and PowerPC Options.
                                                               (line  687)
! * mbmi:                                  x86 Options.        (line  947)
! * mbmi2:                                 x86 Options.        (line  948)
  * mboard:                                OpenRISC Options.   (line    8)
  * mbranch-cost:                          Adapteva Epiphany Options.
                                                               (line   17)
! * mbranch-cost <1>:                      AVR Options.        (line  208)
  * mbranch-cost <2>:                      LoongArch Options.  (line   79)
  * mbranch-cost <3>:                      MIPS Options.       (line  790)
  * mbranch-cost <4>:                      RISC-V Options.     (line    8)
--- 66482,66493 ----
                                                               (line  699)
  * mblock-move-inline-limit:              RS/6000 and PowerPC Options.
                                                               (line  687)
! * mbmi:                                  x86 Options.        (line  972)
! * mbmi2:                                 x86 Options.        (line  973)
  * mboard:                                OpenRISC Options.   (line    8)
  * mbranch-cost:                          Adapteva Epiphany Options.
                                                               (line   17)
! * mbranch-cost <1>:                      AVR Options.        (line  210)
  * mbranch-cost <2>:                      LoongArch Options.  (line   79)
  * mbranch-cost <3>:                      MIPS Options.       (line  790)
  * mbranch-cost <4>:                      RISC-V Options.     (line    8)
*************** look up both forms.
*** 66414,66425 ****
                                                               (line  528)
  * mcall-linux:                           RS/6000 and PowerPC Options.
                                                               (line  524)
! * mcall-ms2sysv-xlogues:                 x86 Options.        (line 1241)
  * mcall-netbsd:                          RS/6000 and PowerPC Options.
                                                               (line  532)
  * mcall-openbsd:                         RS/6000 and PowerPC Options.
                                                               (line  536)
! * mcall-prologues:                       AVR Options.        (line  213)
  * mcall-sysv:                            RS/6000 and PowerPC Options.
                                                               (line  506)
  * mcall-sysv-eabi:                       RS/6000 and PowerPC Options.
--- 66517,66528 ----
                                                               (line  528)
  * mcall-linux:                           RS/6000 and PowerPC Options.
                                                               (line  524)
! * mcall-ms2sysv-xlogues:                 x86 Options.        (line 1266)
  * mcall-netbsd:                          RS/6000 and PowerPC Options.
                                                               (line  532)
  * mcall-openbsd:                         RS/6000 and PowerPC Options.
                                                               (line  536)
! * mcall-prologues:                       AVR Options.        (line  215)
  * mcall-sysv:                            RS/6000 and PowerPC Options.
                                                               (line  506)
  * mcall-sysv-eabi:                       RS/6000 and PowerPC Options.
*************** look up both forms.
*** 66435,66469 ****
  * mcbranch-force-delay-slot:             SH Options.         (line  348)
  * mcc-init:                              CRIS Options.       (line   39)
  * mccrt:                                 C-SKY Options.      (line  153)
! * mcet-switch:                           x86 Options.        (line 1231)
  * mcfv4e:                                M680x0 Options.     (line  169)
  * mcheck-zero-division:                  LoongArch Options.  (line   82)
  * mcheck-zero-division <1>:              MIPS Options.       (line  568)
  * mcix:                                  DEC Alpha Options.  (line  155)
! * mcld:                                  x86 Options.        (line 1049)
! * mcldemote:                             x86 Options.        (line  980)
  * mclear-hwcap:                          Solaris 2 Options.  (line    8)
! * mclflushopt:                           x86 Options.        (line  925)
! * mclwb:                                 x86 Options.        (line  926)
! * mclzero:                               x86 Options.        (line  959)
  * mcmodel:                               NDS32 Options.      (line   66)
  * mcmodel <1>:                           SPARC Options.      (line  319)
! * mcmodel=kernel:                        x86 Options.        (line 1661)
  * mcmodel=large:                         AArch64 Options.    (line   44)
  * mcmodel=large <1>:                     OpenRISC Options.   (line   76)
  * mcmodel=large <2>:                     RS/6000 and PowerPC Options.
                                                               (line  130)
! * mcmodel=large <3>:                     x86 Options.        (line 1673)
  * mcmodel=medany:                        RISC-V Options.     (line  148)
  * mcmodel=medium:                        RS/6000 and PowerPC Options.
                                                               (line  125)
! * mcmodel=medium <1>:                    x86 Options.        (line 1666)
  * mcmodel=medlow:                        RISC-V Options.     (line  141)
  * mcmodel=small:                         AArch64 Options.    (line   38)
  * mcmodel=small <1>:                     OpenRISC Options.   (line   72)
  * mcmodel=small <2>:                     RS/6000 and PowerPC Options.
                                                               (line  121)
! * mcmodel=small <3>:                     x86 Options.        (line 1655)
  * mcmodel=tiny:                          AArch64 Options.    (line   33)
  * mcmov:                                 NDS32 Options.      (line   20)
  * mcmov <1>:                             OpenRISC Options.   (line   44)
--- 66538,66572 ----
  * mcbranch-force-delay-slot:             SH Options.         (line  348)
  * mcc-init:                              CRIS Options.       (line   39)
  * mccrt:                                 C-SKY Options.      (line  153)
! * mcet-switch:                           x86 Options.        (line 1256)
  * mcfv4e:                                M680x0 Options.     (line  169)
  * mcheck-zero-division:                  LoongArch Options.  (line   82)
  * mcheck-zero-division <1>:              MIPS Options.       (line  568)
  * mcix:                                  DEC Alpha Options.  (line  155)
! * mcld:                                  x86 Options.        (line 1074)
! * mcldemote:                             x86 Options.        (line 1005)
  * mclear-hwcap:                          Solaris 2 Options.  (line    8)
! * mclflushopt:                           x86 Options.        (line  950)
! * mclwb:                                 x86 Options.        (line  951)
! * mclzero:                               x86 Options.        (line  984)
  * mcmodel:                               NDS32 Options.      (line   66)
  * mcmodel <1>:                           SPARC Options.      (line  319)
! * mcmodel=kernel:                        x86 Options.        (line 1686)
  * mcmodel=large:                         AArch64 Options.    (line   44)
  * mcmodel=large <1>:                     OpenRISC Options.   (line   76)
  * mcmodel=large <2>:                     RS/6000 and PowerPC Options.
                                                               (line  130)
! * mcmodel=large <3>:                     x86 Options.        (line 1698)
  * mcmodel=medany:                        RISC-V Options.     (line  148)
  * mcmodel=medium:                        RS/6000 and PowerPC Options.
                                                               (line  125)
! * mcmodel=medium <1>:                    x86 Options.        (line 1691)
  * mcmodel=medlow:                        RISC-V Options.     (line  141)
  * mcmodel=small:                         AArch64 Options.    (line   38)
  * mcmodel=small <1>:                     OpenRISC Options.   (line   72)
  * mcmodel=small <2>:                     RS/6000 and PowerPC Options.
                                                               (line  121)
! * mcmodel=small <3>:                     x86 Options.        (line 1680)
  * mcmodel=tiny:                          AArch64 Options.    (line   33)
  * mcmov:                                 NDS32 Options.      (line   20)
  * mcmov <1>:                             OpenRISC Options.   (line   44)
*************** look up both forms.
*** 66471,66477 ****
                                                               (line   22)
  * mcmpb:                                 RS/6000 and PowerPC Options.
                                                               (line   21)
! * mcmpccxadd:                            x86 Options.        (line  991)
  * mcmse:                                 ARM Options.        (line  987)
  * mco-re:                                eBPF Options.       (line   55)
  * mcode-density:                         ARC Options.        (line  171)
--- 66574,66580 ----
                                                               (line   22)
  * mcmpb:                                 RS/6000 and PowerPC Options.
                                                               (line   21)
! * mcmpccxadd:                            x86 Options.        (line 1016)
  * mcmse:                                 ARM Options.        (line  987)
  * mco-re:                                eBPF Options.       (line   55)
  * mcode-density:                         ARC Options.        (line  171)
*************** look up both forms.
*** 66515,66521 ****
  * mcpu <11>:                             RX Options.         (line   29)
  * mcpu <12>:                             SPARC Options.      (line  114)
  * mcpu <13>:                             Visium Options.     (line   32)
! * mcpu <14>:                             x86 Options.        (line  589)
  * mcpu32:                                M680x0 Options.     (line  135)
  * mcpu=:                                 Blackfin Options.   (line    6)
  * mcpu= <1>:                             C-SKY Options.      (line   13)
--- 66618,66624 ----
  * mcpu <11>:                             RX Options.         (line   29)
  * mcpu <12>:                             SPARC Options.      (line  114)
  * mcpu <13>:                             Visium Options.     (line   32)
! * mcpu <14>:                             x86 Options.        (line  614)
  * mcpu32:                                M680x0 Options.     (line  135)
  * mcpu=:                                 Blackfin Options.   (line    6)
  * mcpu= <1>:                             C-SKY Options.      (line   13)
*************** look up both forms.
*** 66523,66529 ****
  * mcpu= <3>:                             MicroBlaze Options. (line   19)
  * mcpu= <4>:                             MSP430 Options.     (line   71)
  * mcrc:                                  MIPS Options.       (line  414)
! * mcrc32:                                x86 Options.        (line 1127)
  * mcrypto:                               RS/6000 and PowerPC Options.
                                                               (line  176)
  * mcsr-check:                            RISC-V Options.     (line  174)
--- 66626,66632 ----
  * mcpu= <3>:                             MicroBlaze Options. (line   19)
  * mcpu= <4>:                             MSP430 Options.     (line   71)
  * mcrc:                                  MIPS Options.       (line  414)
! * mcrc32:                                x86 Options.        (line 1152)
  * mcrypto:                               RS/6000 and PowerPC Options.
                                                               (line  176)
  * mcsr-check:                            RISC-V Options.     (line  174)
*************** look up both forms.
*** 66532,66544 ****
  * mctor-dtor:                            NDS32 Options.      (line   80)
  * mcustom-fpu-cfg:                       Nios II Options.    (line  258)
  * mcustom-INSN:                          Nios II Options.    (line  137)
! * mcx16:                                 x86 Options.        (line 1100)
  * MD:                                    Preprocessor Options.
                                                               (line  171)
  * mdalign:                               SH Options.         (line  131)
  * mdata-align:                           CRIS Options.       (line   47)
  * mdata-region:                          MSP430 Options.     (line  148)
! * mdaz-ftz:                              x86 Options.        (line  837)
  * mdebug:                                M32R/D Options.     (line   68)
  * mdebug <1>:                            S/390 and zSeries Options.
                                                               (line  142)
--- 66635,66647 ----
  * mctor-dtor:                            NDS32 Options.      (line   80)
  * mcustom-fpu-cfg:                       Nios II Options.    (line  258)
  * mcustom-INSN:                          Nios II Options.    (line  137)
! * mcx16:                                 x86 Options.        (line 1125)
  * MD:                                    Preprocessor Options.
                                                               (line  171)
  * mdalign:                               SH Options.         (line  131)
  * mdata-align:                           CRIS Options.       (line   47)
  * mdata-region:                          MSP430 Options.     (line  148)
! * mdaz-ftz:                              x86 Options.        (line  862)
  * mdebug:                                M32R/D Options.     (line   68)
  * mdebug <1>:                            S/390 and zSeries Options.
                                                               (line  142)
*************** look up both forms.
*** 66546,66552 ****
  * mdebug-main=PREFIX:                    VMS Options.        (line   12)
  * mdec-asm:                              PDP-11 Options.     (line   45)
  * mdirect-extern-access:                 LoongArch Options.  (line  154)
! * mdirect-extern-access <1>:             x86 Options.        (line 1693)
  * mdisable-callt:                        V850 Options.       (line   90)
  * mdisable-fpregs:                       HPPA Options.       (line   56)
  * mdisable-indexing:                     HPPA Options.       (line   59)
--- 66649,66655 ----
  * mdebug-main=PREFIX:                    VMS Options.        (line   12)
  * mdec-asm:                              PDP-11 Options.     (line   45)
  * mdirect-extern-access:                 LoongArch Options.  (line  154)
! * mdirect-extern-access <1>:             x86 Options.        (line 1718)
  * mdisable-callt:                        V850 Options.       (line   90)
  * mdisable-fpregs:                       HPPA Options.       (line   56)
  * mdisable-indexing:                     HPPA Options.       (line   59)
*************** look up both forms.
*** 66565,66571 ****
  * mdlmzb:                                RS/6000 and PowerPC Options.
                                                               (line  383)
  * mdmx:                                  MIPS Options.       (line  374)
! * mdouble:                               AVR Options.        (line  217)
  * mdouble <1>:                           FRV Options.        (line   47)
  * mdouble-float:                         C-SKY Options.      (line   56)
  * mdouble-float <1>:                     LoongArch Options.  (line   74)
--- 66668,66674 ----
  * mdlmzb:                                RS/6000 and PowerPC Options.
                                                               (line  383)
  * mdmx:                                  MIPS Options.       (line  374)
! * mdouble:                               AVR Options.        (line  219)
  * mdouble <1>:                           FRV Options.        (line   47)
  * mdouble-float:                         C-SKY Options.      (line   56)
  * mdouble-float <1>:                     LoongArch Options.  (line   74)
*************** look up both forms.
*** 66581,66587 ****
  * mdsp-packa:                            ARC Options.        (line  343)
  * mdspr2:                                MIPS Options.       (line  357)
  * mdsp_packa:                            ARC Options.        (line  623)
! * mdump-tune-features:                   x86 Options.        (line 1031)
  * mdvbf:                                 ARC Options.        (line  348)
  * mdwarf2-asm:                           IA-64 Options.      (line   92)
  * mdword:                                FRV Options.        (line   39)
--- 66684,66690 ----
  * mdsp-packa:                            ARC Options.        (line  343)
  * mdspr2:                                MIPS Options.       (line  357)
  * mdsp_packa:                            ARC Options.        (line  623)
! * mdump-tune-features:                   x86 Options.        (line 1056)
  * mdvbf:                                 ARC Options.        (line  348)
  * mdwarf2-asm:                           IA-64 Options.      (line   92)
  * mdword:                                FRV Options.        (line   39)
*************** look up both forms.
*** 66606,66612 ****
                                                               (line  627)
  * membedded-data:                        MIPS Options.       (line  515)
  * memregs=:                              M32C Options.       (line   20)
! * menqcmd:                               x86 Options.        (line  971)
  * mep:                                   V850 Options.       (line   14)
  * mepsilon:                              MMIX Options.       (line   13)
  * mesa:                                  S/390 and zSeries Options.
--- 66709,66715 ----
                                                               (line  627)
  * membedded-data:                        MIPS Options.       (line  515)
  * memregs=:                              M32C Options.       (line   20)
! * menqcmd:                               x86 Options.        (line  996)
  * mep:                                   V850 Options.       (line   14)
  * mepsilon:                              MMIX Options.       (line   13)
  * mesa:                                  S/390 and zSeries Options.
*************** look up both forms.
*** 66627,66634 ****
  * mextra-l32r-costs:                     Xtensa Options.     (line  123)
  * MF:                                    Preprocessor Options.
                                                               (line  110)
! * mf16c:                                 x86 Options.        (line  930)
! * mfancy-math-387:                       x86 Options.        (line  684)
  * mfast-fp:                              Blackfin Options.   (line  129)
  * mfast-indirect-calls:                  HPPA Options.       (line   64)
  * mfast-sw-div:                          Nios II Options.    (line  113)
--- 66730,66737 ----
  * mextra-l32r-costs:                     Xtensa Options.     (line  123)
  * MF:                                    Preprocessor Options.
                                                               (line  110)
! * mf16c:                                 x86 Options.        (line  955)
! * mfancy-math-387:                       x86 Options.        (line  709)
  * mfast-fp:                              Blackfin Options.   (line  129)
  * mfast-indirect-calls:                  HPPA Options.       (line   64)
  * mfast-sw-div:                          Nios II Options.    (line  113)
*************** look up both forms.
*** 66637,66645 ****
  * mfdivdu:                               C-SKY Options.      (line   62)
  * mfdpic:                                ARM Options.        (line 1010)
  * mfdpic <1>:                            FRV Options.        (line   71)
! * mfentry:                               x86 Options.        (line 1474)
! * mfentry-name:                          x86 Options.        (line 1506)
! * mfentry-section:                       x86 Options.        (line 1510)
  * mfix:                                  DEC Alpha Options.  (line  155)
  * mfix-24k:                              MIPS Options.       (line  645)
  * mfix-and-continue:                     Darwin Options.     (line  109)
--- 66740,66748 ----
  * mfdivdu:                               C-SKY Options.      (line   62)
  * mfdpic:                                ARM Options.        (line 1010)
  * mfdpic <1>:                            FRV Options.        (line   71)
! * mfentry:                               x86 Options.        (line 1499)
! * mfentry-name:                          x86 Options.        (line 1531)
! * mfentry-section:                       x86 Options.        (line 1535)
  * mfix:                                  DEC Alpha Options.  (line  155)
  * mfix-24k:                              MIPS Options.       (line  645)
  * mfix-and-continue:                     Darwin Options.     (line  109)
*************** look up both forms.
*** 66677,66700 ****
  * mflush-func:                           MIPS Options.       (line  780)
  * mflush-func=NAME:                      M32R/D Options.     (line   92)
  * mflush-trap=NUMBER:                    M32R/D Options.     (line   85)
! * mfma:                                  x86 Options.        (line  931)
! * mfma4:                                 x86 Options.        (line  934)
  * mfmaf:                                 SPARC Options.      (line  265)
  * mfmovd:                                SH Options.         (line  147)
! * mforce-indirect-call:                  x86 Options.        (line 1220)
  * mforce-no-pic:                         Xtensa Options.     (line   40)
  * mfp-exceptions:                        MIPS Options.       (line  830)
  * mfp-mode:                              Adapteva Epiphany Options.
                                                               (line   70)
  * mfp-reg:                               DEC Alpha Options.  (line   23)
! * mfp-ret-in-387:                        x86 Options.        (line  674)
  * mfp-rounding-mode:                     DEC Alpha Options.  (line   84)
  * mfp-trap-mode:                         DEC Alpha Options.  (line   62)
  * mfp16-format:                          ARM Options.        (line  756)
  * mfp32:                                 MIPS Options.       (line  257)
  * mfp64:                                 MIPS Options.       (line  260)
  * mfpmath:                               Optimize Options.   (line 2334)
! * mfpmath <1>:                           x86 Options.        (line  592)
  * mfpr-32:                               FRV Options.        (line   14)
  * mfpr-64:                               FRV Options.        (line   18)
  * mfprnd:                                RS/6000 and PowerPC Options.
--- 66780,66803 ----
  * mflush-func:                           MIPS Options.       (line  780)
  * mflush-func=NAME:                      M32R/D Options.     (line   92)
  * mflush-trap=NUMBER:                    M32R/D Options.     (line   85)
! * mfma:                                  x86 Options.        (line  956)
! * mfma4:                                 x86 Options.        (line  959)
  * mfmaf:                                 SPARC Options.      (line  265)
  * mfmovd:                                SH Options.         (line  147)
! * mforce-indirect-call:                  x86 Options.        (line 1245)
  * mforce-no-pic:                         Xtensa Options.     (line   40)
  * mfp-exceptions:                        MIPS Options.       (line  830)
  * mfp-mode:                              Adapteva Epiphany Options.
                                                               (line   70)
  * mfp-reg:                               DEC Alpha Options.  (line   23)
! * mfp-ret-in-387:                        x86 Options.        (line  699)
  * mfp-rounding-mode:                     DEC Alpha Options.  (line   84)
  * mfp-trap-mode:                         DEC Alpha Options.  (line   62)
  * mfp16-format:                          ARM Options.        (line  756)
  * mfp32:                                 MIPS Options.       (line  257)
  * mfp64:                                 MIPS Options.       (line  260)
  * mfpmath:                               Optimize Options.   (line 2334)
! * mfpmath <1>:                           x86 Options.        (line  617)
  * mfpr-32:                               FRV Options.        (line   14)
  * mfpr-64:                               FRV Options.        (line   18)
  * mfprnd:                                RS/6000 and PowerPC Options.
*************** look up both forms.
*** 66707,66725 ****
  * mfpu <5>:                              Visium Options.     (line   17)
  * mfpu=:                                 C-SKY Options.      (line   68)
  * mfpxx:                                 MIPS Options.       (line  263)
! * mfract-convert-truncate:               AVR Options.        (line  281)
  * mframe-header-opt:                     MIPS Options.       (line  891)
  * mfriz:                                 RS/6000 and PowerPC Options.
                                                               (line  868)
  * mfsca:                                 SH Options.         (line  363)
! * mfsgsbase:                             x86 Options.        (line  927)
  * mfsmuld:                               SPARC Options.      (line  272)
  * mfsrra:                                SH Options.         (line  372)
  * mft32b:                                FT32 Options.       (line   22)
  * mfull-regs:                            NDS32 Options.      (line   17)
  * mfull-toc:                             RS/6000 and PowerPC Options.
                                                               (line  252)
! * mfunction-return:                      x86 Options.        (line 1585)
  * mfused-madd:                           IA-64 Options.      (line   86)
  * mfused-madd <1>:                       MIPS Options.       (line  628)
  * mfused-madd <2>:                       RS/6000 and PowerPC Options.
--- 66810,66828 ----
  * mfpu <5>:                              Visium Options.     (line   17)
  * mfpu=:                                 C-SKY Options.      (line   68)
  * mfpxx:                                 MIPS Options.       (line  263)
! * mfract-convert-truncate:               AVR Options.        (line  283)
  * mframe-header-opt:                     MIPS Options.       (line  891)
  * mfriz:                                 RS/6000 and PowerPC Options.
                                                               (line  868)
  * mfsca:                                 SH Options.         (line  363)
! * mfsgsbase:                             x86 Options.        (line  952)
  * mfsmuld:                               SPARC Options.      (line  272)
  * mfsrra:                                SH Options.         (line  372)
  * mft32b:                                FT32 Options.       (line   22)
  * mfull-regs:                            NDS32 Options.      (line   17)
  * mfull-toc:                             RS/6000 and PowerPC Options.
                                                               (line  252)
! * mfunction-return:                      x86 Options.        (line 1610)
  * mfused-madd:                           IA-64 Options.      (line   86)
  * mfused-madd <1>:                       MIPS Options.       (line  628)
  * mfused-madd <2>:                       RS/6000 and PowerPC Options.
*************** look up both forms.
*** 66728,66734 ****
                                                               (line  181)
  * mfused-madd <4>:                       SH Options.         (line  354)
  * mfused-madd <5>:                       Xtensa Options.     (line   17)
! * mfxsr:                                 x86 Options.        (line  950)
  * MG:                                    Preprocessor Options.
                                                               (line  121)
  * mg:                                    VAX Options.        (line   16)
--- 66831,66837 ----
                                                               (line  181)
  * mfused-madd <4>:                       SH Options.         (line  354)
  * mfused-madd <5>:                       Xtensa Options.     (line   17)
! * mfxsr:                                 x86 Options.        (line  975)
  * MG:                                    Preprocessor Options.
                                                               (line  121)
  * mg:                                    VAX Options.        (line   16)
*************** look up both forms.
*** 66736,66747 ****
  * mg13:                                  RL78 Options.       (line   58)
  * mg14:                                  RL78 Options.       (line   58)
  * mgas:                                  HPPA Options.       (line   78)
! * mgas-isr-prologues:                    AVR Options.        (line  226)
  * mgcc-abi:                              V850 Options.       (line  147)
  * mgeneral-regs-only:                    AArch64 Options.    (line   23)
  * mgeneral-regs-only <1>:                ARM Options.        (line   56)
! * mgeneral-regs-only <2>:                x86 Options.        (line 1554)
! * mgfni:                                 x86 Options.        (line  964)
  * mghs:                                  V850 Options.       (line  125)
  * mginv:                                 MIPS Options.       (line  419)
  * mglibc:                                GNU/Linux Options.  (line    8)
--- 66839,66850 ----
  * mg13:                                  RL78 Options.       (line   58)
  * mg14:                                  RL78 Options.       (line   58)
  * mgas:                                  HPPA Options.       (line   78)
! * mgas-isr-prologues:                    AVR Options.        (line  228)
  * mgcc-abi:                              V850 Options.       (line  147)
  * mgeneral-regs-only:                    AArch64 Options.    (line   23)
  * mgeneral-regs-only <1>:                ARM Options.        (line   56)
! * mgeneral-regs-only <2>:                x86 Options.        (line 1579)
! * mgfni:                                 x86 Options.        (line  989)
  * mghs:                                  V850 Options.       (line  125)
  * mginv:                                 MIPS Options.       (line  419)
  * mglibc:                                GNU/Linux Options.  (line    8)
*************** look up both forms.
*** 66783,66800 ****
  * mhard-float <8>:                       SPARC Options.      (line   32)
  * mhard-float <9>:                       V850 Options.       (line  111)
  * mhard-float <10>:                      Visium Options.     (line   17)
! * mhard-float <11>:                      x86 Options.        (line  656)
  * mhard-mul:                             OpenRISC Options.   (line   22)
  * mhard-quad-float:                      SPARC Options.      (line   54)
  * mharden-sls:                           AArch64 Options.    (line  304)
! * mharden-sls <1>:                       x86 Options.        (line 1607)
  * mhardlit:                              MCore Options.      (line    8)
  * mhigh-registers:                       C-SKY Options.      (line  118)
! * mhle:                                  x86 Options.        (line  956)
  * mhotpatch:                             S/390 and zSeries Options.
                                                               (line  217)
  * mhp-ld:                                HPPA Options.       (line   93)
! * mhreset:                               x86 Options.        (line  985)
  * mhtm:                                  RS/6000 and PowerPC Options.
                                                               (line  182)
  * mhtm <1>:                              S/390 and zSeries Options.
--- 66886,66903 ----
  * mhard-float <8>:                       SPARC Options.      (line   32)
  * mhard-float <9>:                       V850 Options.       (line  111)
  * mhard-float <10>:                      Visium Options.     (line   17)
! * mhard-float <11>:                      x86 Options.        (line  681)
  * mhard-mul:                             OpenRISC Options.   (line   22)
  * mhard-quad-float:                      SPARC Options.      (line   54)
  * mharden-sls:                           AArch64 Options.    (line  304)
! * mharden-sls <1>:                       x86 Options.        (line 1632)
  * mhardlit:                              MCore Options.      (line    8)
  * mhigh-registers:                       C-SKY Options.      (line  118)
! * mhle:                                  x86 Options.        (line  981)
  * mhotpatch:                             S/390 and zSeries Options.
                                                               (line  217)
  * mhp-ld:                                HPPA Options.       (line   93)
! * mhreset:                               x86 Options.        (line 1010)
  * mhtm:                                  RS/6000 and PowerPC Options.
                                                               (line  182)
  * mhtm <1>:                              S/390 and zSeries Options.
*************** look up both forms.
*** 66803,66826 ****
  * mhw-mul:                               Nios II Options.    (line  118)
  * mhw-mulx:                              Nios II Options.    (line  118)
  * mhwmult=:                              MSP430 Options.     (line   92)
! * miamcu:                                x86 Options.        (line 1623)
  * micplb:                                Blackfin Options.   (line  174)
  * mid-shared-library:                    Blackfin Options.   (line   77)
  * mid-shared-library <1>:                Blackfin Options.   (line   84)
  * mieee:                                 DEC Alpha Options.  (line   38)
  * mieee <1>:                             SH Options.         (line  163)
  * mieee-conformant:                      DEC Alpha Options.  (line  133)
! * mieee-fp:                              x86 Options.        (line  650)
  * mieee-with-inexact:                    DEC Alpha Options.  (line   51)
  * milp32:                                IA-64 Options.      (line  119)
  * mimadd:                                MIPS Options.       (line  621)
  * mimpure-text:                          Solaris 2 Options.  (line   14)
! * mincoming-stack-boundary:              x86 Options.        (line  877)
  * mindexed-loads:                        ARC Options.        (line  489)
! * mindirect-branch:                      x86 Options.        (line 1566)
! * mindirect-branch-cs-prefix:            x86 Options.        (line 1614)
! * mindirect-branch-register:             x86 Options.        (line 1604)
! * minline-all-stringops:                 x86 Options.        (line 1406)
  * minline-atomics:                       RISC-V Options.     (line  120)
  * minline-float-divide-max-throughput:   IA-64 Options.      (line   57)
  * minline-float-divide-min-latency:      IA-64 Options.      (line   53)
--- 66906,66929 ----
  * mhw-mul:                               Nios II Options.    (line  118)
  * mhw-mulx:                              Nios II Options.    (line  118)
  * mhwmult=:                              MSP430 Options.     (line   92)
! * miamcu:                                x86 Options.        (line 1648)
  * micplb:                                Blackfin Options.   (line  174)
  * mid-shared-library:                    Blackfin Options.   (line   77)
  * mid-shared-library <1>:                Blackfin Options.   (line   84)
  * mieee:                                 DEC Alpha Options.  (line   38)
  * mieee <1>:                             SH Options.         (line  163)
  * mieee-conformant:                      DEC Alpha Options.  (line  133)
! * mieee-fp:                              x86 Options.        (line  675)
  * mieee-with-inexact:                    DEC Alpha Options.  (line   51)
  * milp32:                                IA-64 Options.      (line  119)
  * mimadd:                                MIPS Options.       (line  621)
  * mimpure-text:                          Solaris 2 Options.  (line   14)
! * mincoming-stack-boundary:              x86 Options.        (line  902)
  * mindexed-loads:                        ARC Options.        (line  489)
! * mindirect-branch:                      x86 Options.        (line 1591)
! * mindirect-branch-cs-prefix:            x86 Options.        (line 1639)
! * mindirect-branch-register:             x86 Options.        (line 1629)
! * minline-all-stringops:                 x86 Options.        (line 1431)
  * minline-atomics:                       RISC-V Options.     (line  120)
  * minline-float-divide-max-throughput:   IA-64 Options.      (line   57)
  * minline-float-divide-min-latency:      IA-64 Options.      (line   53)
*************** look up both forms.
*** 66832,66848 ****
  * minline-plt <1>:                       FRV Options.        (line   80)
  * minline-sqrt-max-throughput:           IA-64 Options.      (line   79)
  * minline-sqrt-min-latency:              IA-64 Options.      (line   75)
! * minline-stringops-dynamically:         x86 Options.        (line 1414)
  * minrt:                                 MSP430 Options.     (line  114)
  * minrt <1>:                             PRU Options.        (line    8)
  * minsert-sched-nops:                    RS/6000 and PowerPC Options.
                                                               (line  484)
! * minstrument-return:                    x86 Options.        (line 1494)
  * mint-register:                         RX Options.         (line   99)
  * mint16:                                PDP-11 Options.     (line   31)
  * mint32:                                H8/300 Options.     (line   37)
  * mint32 <1>:                            PDP-11 Options.     (line   35)
! * mint8:                                 AVR Options.        (line  235)
  * minterlink-compressed:                 MIPS Options.       (line  133)
  * minterlink-mips16:                     MIPS Options.       (line  145)
  * mips1:                                 MIPS Options.       (line   79)
--- 66935,66951 ----
  * minline-plt <1>:                       FRV Options.        (line   80)
  * minline-sqrt-max-throughput:           IA-64 Options.      (line   79)
  * minline-sqrt-min-latency:              IA-64 Options.      (line   75)
! * minline-stringops-dynamically:         x86 Options.        (line 1439)
  * minrt:                                 MSP430 Options.     (line  114)
  * minrt <1>:                             PRU Options.        (line    8)
  * minsert-sched-nops:                    RS/6000 and PowerPC Options.
                                                               (line  484)
! * minstrument-return:                    x86 Options.        (line 1519)
  * mint-register:                         RX Options.         (line   99)
  * mint16:                                PDP-11 Options.     (line   31)
  * mint32:                                H8/300 Options.     (line   37)
  * mint32 <1>:                            PDP-11 Options.     (line   35)
! * mint8:                                 AVR Options.        (line  237)
  * minterlink-compressed:                 MIPS Options.       (line  133)
  * minterlink-mips16:                     MIPS Options.       (line  145)
  * mips1:                                 MIPS Options.       (line   79)
*************** look up both forms.
*** 66877,66889 ****
  * mjump-in-delay:                        HPPA Options.       (line  143)
  * mkernel:                               Darwin Options.     (line   89)
  * mkernel <1>:                           eBPF Options.       (line   12)
! * mkl:                                   x86 Options.        (line  985)
  * mknuthdiv:                             MMIX Options.       (line   30)
  * ml:                                    SH Options.         (line  128)
! * mlam:                                  x86 Options.        (line 1710)
  * mlarge:                                MSP430 Options.     (line   81)
  * mlarge-data:                           DEC Alpha Options.  (line  185)
! * mlarge-data-threshold:                 x86 Options.        (line  756)
  * mlarge-text:                           DEC Alpha Options.  (line  203)
  * mleaf-id-shared-library:               Blackfin Options.   (line   88)
  * mleaf-id-shared-library <1>:           Blackfin Options.   (line   94)
--- 66980,66992 ----
  * mjump-in-delay:                        HPPA Options.       (line  143)
  * mkernel:                               Darwin Options.     (line   89)
  * mkernel <1>:                           eBPF Options.       (line   12)
! * mkl:                                   x86 Options.        (line 1010)
  * mknuthdiv:                             MMIX Options.       (line   30)
  * ml:                                    SH Options.         (line  128)
! * mlam:                                  x86 Options.        (line 1735)
  * mlarge:                                MSP430 Options.     (line   81)
  * mlarge-data:                           DEC Alpha Options.  (line  185)
! * mlarge-data-threshold:                 x86 Options.        (line  781)
  * mlarge-text:                           DEC Alpha Options.  (line  203)
  * mleaf-id-shared-library:               Blackfin Options.   (line   88)
  * mleaf-id-shared-library <1>:           Blackfin Options.   (line   94)
*************** look up both forms.
*** 66922,66935 ****
  * mlong-calls <5>:                       HPPA Options.       (line  112)
  * mlong-calls <6>:                       MIPS Options.       (line  607)
  * mlong-calls <7>:                       V850 Options.       (line    8)
! * mlong-double:                          AVR Options.        (line  217)
  * mlong-double-128:                      S/390 and zSeries Options.
                                                               (line   27)
! * mlong-double-128 <1>:                  x86 Options.        (line  733)
  * mlong-double-64:                       S/390 and zSeries Options.
                                                               (line   27)
! * mlong-double-64 <1>:                   x86 Options.        (line  733)
! * mlong-double-80:                       x86 Options.        (line  733)
  * mlong-jump-table-offsets:              M680x0 Options.     (line  339)
  * mlong-jumps:                           V850 Options.       (line  106)
  * mlong-load-store:                      HPPA Options.       (line  138)
--- 67025,67038 ----
  * mlong-calls <5>:                       HPPA Options.       (line  112)
  * mlong-calls <6>:                       MIPS Options.       (line  607)
  * mlong-calls <7>:                       V850 Options.       (line    8)
! * mlong-double:                          AVR Options.        (line  219)
  * mlong-double-128:                      S/390 and zSeries Options.
                                                               (line   27)
! * mlong-double-128 <1>:                  x86 Options.        (line  758)
  * mlong-double-64:                       S/390 and zSeries Options.
                                                               (line   27)
! * mlong-double-64 <1>:                   x86 Options.        (line  758)
! * mlong-double-80:                       x86 Options.        (line  758)
  * mlong-jump-table-offsets:              M680x0 Options.     (line  339)
  * mlong-jumps:                           V850 Options.       (line  106)
  * mlong-load-store:                      HPPA Options.       (line  138)
*************** look up both forms.
*** 66957,66965 ****
  * mlra-priority-compact:                 ARC Options.        (line  502)
  * mlra-priority-noncompact:              ARC Options.        (line  505)
  * mlra-priority-none:                    ARC Options.        (line  499)
! * mlwp:                                  x86 Options.        (line  941)
  * mlxc1-sxc1:                            MIPS Options.       (line  901)
! * mlzcnt:                                x86 Options.        (line  949)
  * MM:                                    Preprocessor Options.
                                                               (line  101)
  * mmac-24:                               ARC Options.        (line  362)
--- 67060,67068 ----
  * mlra-priority-compact:                 ARC Options.        (line  502)
  * mlra-priority-noncompact:              ARC Options.        (line  505)
  * mlra-priority-none:                    ARC Options.        (line  499)
! * mlwp:                                  x86 Options.        (line  966)
  * mlxc1-sxc1:                            MIPS Options.       (line  901)
! * mlzcnt:                                x86 Options.        (line  974)
  * MM:                                    Preprocessor Options.
                                                               (line  101)
  * mmac-24:                               ARC Options.        (line  362)
*************** look up both forms.
*** 66969,66978 ****
  * mmac_d16:                              ARC Options.        (line  632)
  * mmad:                                  MIPS Options.       (line  616)
  * mmadd4:                                MIPS Options.       (line  906)
! * mmain-is-OS_task:                      AVR Options.        (line  241)
  * mmainkernel:                           Nvidia PTX Options. (line   40)
  * mmalloc64:                             VMS Options.        (line   16)
! * mmanual-endbr:                         x86 Options.        (line 1225)
  * mmax:                                  DEC Alpha Options.  (line  155)
  * mmax-constant-size:                    RX Options.         (line   81)
  * mmax-inline-memcpy-size:               LoongArch Options.  (line  117)
--- 67072,67081 ----
  * mmac_d16:                              ARC Options.        (line  632)
  * mmad:                                  MIPS Options.       (line  616)
  * mmadd4:                                MIPS Options.       (line  906)
! * mmain-is-OS_task:                      AVR Options.        (line  243)
  * mmainkernel:                           Nvidia PTX Options. (line   40)
  * mmalloc64:                             VMS Options.        (line   16)
! * mmanual-endbr:                         x86 Options.        (line 1250)
  * mmax:                                  DEC Alpha Options.  (line  155)
  * mmax-constant-size:                    RX Options.         (line   81)
  * mmax-inline-memcpy-size:               LoongArch Options.  (line  117)
*************** look up both forms.
*** 66990,66999 ****
  * mmemcpy:                               LoongArch Options.  (line   98)
  * mmemcpy <1>:                           MicroBlaze Options. (line   12)
  * mmemcpy <2>:                           MIPS Options.       (line  601)
! * mmemcpy-strategy=STRATEGY:             x86 Options.        (line 1436)
  * mmemory-latency:                       DEC Alpha Options.  (line  267)
  * mmemory-model:                         SPARC Options.      (line  347)
! * mmemset-strategy=STRATEGY:             x86 Options.        (line 1448)
  * mmfcrf:                                RS/6000 and PowerPC Options.
                                                               (line   21)
  * mmicromips:                            MIPS Options.       (line  385)
--- 67093,67102 ----
  * mmemcpy:                               LoongArch Options.  (line   98)
  * mmemcpy <1>:                           MicroBlaze Options. (line   12)
  * mmemcpy <2>:                           MIPS Options.       (line  601)
! * mmemcpy-strategy=STRATEGY:             x86 Options.        (line 1461)
  * mmemory-latency:                       DEC Alpha Options.  (line  267)
  * mmemory-model:                         SPARC Options.      (line  347)
! * mmemset-strategy=STRATEGY:             x86 Options.        (line 1473)
  * mmfcrf:                                RS/6000 and PowerPC Options.
                                                               (line   21)
  * mmicromips:                            MIPS Options.       (line  385)
*************** look up both forms.
*** 67003,67020 ****
  * mmixed-code:                           ARC Options.        (line  522)
  * mmma:                                  RS/6000 and PowerPC Options.
                                                               (line  942)
! * mmmx:                                  x86 Options.        (line  902)
  * mmodel=large:                          M32R/D Options.     (line   32)
  * mmodel=medium:                         M32R/D Options.     (line   26)
  * mmodel=small:                          M32R/D Options.     (line   17)
! * mmovbe:                                x86 Options.        (line 1119)
! * mmovdir64b:                            x86 Options.        (line  970)
! * mmovdiri:                              x86 Options.        (line  969)
! * mmove-max:                             x86 Options.        (line 1077)
  * mmp:                                   C-SKY Options.      (line   86)
  * mmpy:                                  ARC Options.        (line  125)
  * mmpy-option:                           ARC Options.        (line  181)
! * mms-bitfields:                         x86 Options.        (line 1280)
  * mmt:                                   MIPS Options.       (line  393)
  * mmul:                                  RL78 Options.       (line   10)
  * mmul-bug-workaround:                   CRIS Options.       (line   28)
--- 67106,67123 ----
  * mmixed-code:                           ARC Options.        (line  522)
  * mmma:                                  RS/6000 and PowerPC Options.
                                                               (line  942)
! * mmmx:                                  x86 Options.        (line  927)
  * mmodel=large:                          M32R/D Options.     (line   32)
  * mmodel=medium:                         M32R/D Options.     (line   26)
  * mmodel=small:                          M32R/D Options.     (line   17)
! * mmovbe:                                x86 Options.        (line 1144)
! * mmovdir64b:                            x86 Options.        (line  995)
! * mmovdiri:                              x86 Options.        (line  994)
! * mmove-max:                             x86 Options.        (line 1102)
  * mmp:                                   C-SKY Options.      (line   86)
  * mmpy:                                  ARC Options.        (line  125)
  * mmpy-option:                           ARC Options.        (line  181)
! * mms-bitfields:                         x86 Options.        (line 1305)
  * mmt:                                   MIPS Options.       (line  393)
  * mmul:                                  RL78 Options.       (line   10)
  * mmul-bug-workaround:                   CRIS Options.       (line   28)
*************** look up both forms.
*** 67036,67048 ****
                                                               (line  136)
  * mmvme:                                 RS/6000 and PowerPC Options.
                                                               (line  608)
! * mmwait:                                x86 Options.        (line 1133)
! * mmwaitx:                               x86 Options.        (line  958)
  * mn:                                    H8/300 Options.     (line   19)
! * mn-flash:                              AVR Options.        (line  643)
  * mnan=2008:                             MIPS Options.       (line  318)
  * mnan=legacy:                           MIPS Options.       (line  318)
! * mneeded:                               x86 Options.        (line 1687)
  * mneon-for-64bits:                      ARM Options.        (line  949)
  * mnested-cond-exec:                     FRV Options.        (line  229)
  * mnewlib:                               OpenRISC Options.   (line   12)
--- 67139,67151 ----
                                                               (line  136)
  * mmvme:                                 RS/6000 and PowerPC Options.
                                                               (line  608)
! * mmwait:                                x86 Options.        (line 1158)
! * mmwaitx:                               x86 Options.        (line  983)
  * mn:                                    H8/300 Options.     (line   19)
! * mn-flash:                              AVR Options.        (line  645)
  * mnan=2008:                             MIPS Options.       (line  318)
  * mnan=legacy:                           MIPS Options.       (line  318)
! * mneeded:                               x86 Options.        (line 1712)
  * mneon-for-64bits:                      ARM Options.        (line  949)
  * mnested-cond-exec:                     FRV Options.        (line  229)
  * mnewlib:                               OpenRISC Options.   (line   12)
*************** look up both forms.
*** 67051,67060 ****
  * mno-8byte-align:                       V850 Options.       (line  168)
  * mno-abicalls:                          MIPS Options.       (line  190)
  * mno-ac0:                               PDP-11 Options.     (line   19)
! * mno-align-double:                      x86 Options.        (line  693)
  * mno-align-int:                         M680x0 Options.     (line  260)
  * mno-align-loops:                       M32R/D Options.     (line   75)
! * mno-align-stringops:                   x86 Options.        (line 1401)
  * mno-allow-string-insns:                RX Options.         (line  148)
  * mno-altivec:                           RS/6000 and PowerPC Options.
                                                               (line  135)
--- 67154,67163 ----
  * mno-8byte-align:                       V850 Options.       (line  168)
  * mno-abicalls:                          MIPS Options.       (line  190)
  * mno-ac0:                               PDP-11 Options.     (line   19)
! * mno-align-double:                      x86 Options.        (line  718)
  * mno-align-int:                         M680x0 Options.     (line  260)
  * mno-align-loops:                       M32R/D Options.     (line   75)
! * mno-align-stringops:                   x86 Options.        (line 1426)
  * mno-allow-string-insns:                RX Options.         (line  148)
  * mno-altivec:                           RS/6000 and PowerPC Options.
                                                               (line  135)
*************** look up both forms.
*** 67078,67084 ****
  * mno-bwx:                               DEC Alpha Options.  (line  155)
  * mno-bypass-cache:                      Nios II Options.    (line  101)
  * mno-cache-volatile:                    Nios II Options.    (line  107)
! * mno-call-ms2sysv-xlogues:              x86 Options.        (line 1241)
  * mno-callgraph-data:                    MCore Options.      (line   29)
  * mno-cbcond:                            SPARC Options.      (line  258)
  * mno-check-zero-division:               MIPS Options.       (line  568)
--- 67181,67187 ----
  * mno-bwx:                               DEC Alpha Options.  (line  155)
  * mno-bypass-cache:                      Nios II Options.    (line  101)
  * mno-cache-volatile:                    Nios II Options.    (line  107)
! * mno-call-ms2sysv-xlogues:              x86 Options.        (line 1266)
  * mno-callgraph-data:                    MCore Options.      (line   29)
  * mno-cbcond:                            SPARC Options.      (line  258)
  * mno-check-zero-division:               MIPS Options.       (line  568)
*************** look up both forms.
*** 67103,67110 ****
  * mno-data-align:                        CRIS Options.       (line   47)
  * mno-debug:                             S/390 and zSeries Options.
                                                               (line  142)
! * mno-default:                           x86 Options.        (line 1045)
! * mno-direct-extern-access:              x86 Options.        (line 1693)
  * mno-direct-extern-access <1>:          x86 Function Attributes.
                                                               (line  744)
  * mno-disable-callt:                     V850 Options.       (line   90)
--- 67206,67213 ----
  * mno-data-align:                        CRIS Options.       (line   47)
  * mno-debug:                             S/390 and zSeries Options.
                                                               (line  142)
! * mno-default:                           x86 Options.        (line 1070)
! * mno-direct-extern-access:              x86 Options.        (line 1718)
  * mno-direct-extern-access <1>:          x86 Function Attributes.
                                                               (line  744)
  * mno-disable-callt:                     V850 Options.       (line   90)
*************** look up both forms.
*** 67134,67140 ****
  * mno-ext-perf2:                         NDS32 Options.      (line   35)
  * mno-ext-string:                        NDS32 Options.      (line   41)
  * mno-extern-sdata:                      MIPS Options.       (line  478)
! * mno-fancy-math-387:                    x86 Options.        (line  684)
  * mno-fast-sw-div:                       Nios II Options.    (line  113)
  * mno-faster-structs:                    SPARC Options.      (line   89)
  * mno-fdpic:                             ARM Options.        (line 1010)
--- 67237,67243 ----
  * mno-ext-perf2:                         NDS32 Options.      (line   35)
  * mno-ext-string:                        NDS32 Options.      (line   41)
  * mno-extern-sdata:                      MIPS Options.       (line  478)
! * mno-fancy-math-387:                    x86 Options.        (line  709)
  * mno-fast-sw-div:                       Nios II Options.    (line  113)
  * mno-faster-structs:                    SPARC Options.      (line   89)
  * mno-fdpic:                             ARM Options.        (line 1010)
*************** look up both forms.
*** 67157,67163 ****
  * mno-fp-in-toc:                         RS/6000 and PowerPC Options.
                                                               (line  252)
  * mno-fp-regs:                           DEC Alpha Options.  (line   23)
! * mno-fp-ret-in-387:                     x86 Options.        (line  674)
  * mno-fprnd:                             RS/6000 and PowerPC Options.
                                                               (line   21)
  * mno-fpu:                               SPARC Options.      (line   37)
--- 67260,67266 ----
  * mno-fp-in-toc:                         RS/6000 and PowerPC Options.
                                                               (line  252)
  * mno-fp-regs:                           DEC Alpha Options.  (line   23)
! * mno-fp-ret-in-387:                     x86 Options.        (line  699)
  * mno-fprnd:                             RS/6000 and PowerPC Options.
                                                               (line   21)
  * mno-fpu:                               SPARC Options.      (line   37)
*************** look up both forms.
*** 67194,67200 ****
  * mno-hw-mulx:                           Nios II Options.    (line  118)
  * mno-id-shared-library:                 Blackfin Options.   (line   84)
  * mno-ieee:                              SH Options.         (line  163)
! * mno-ieee-fp:                           x86 Options.        (line  650)
  * mno-imadd:                             MIPS Options.       (line  621)
  * mno-inline-float-divide:               IA-64 Options.      (line   61)
  * mno-inline-int-divide:                 IA-64 Options.      (line   72)
--- 67297,67303 ----
  * mno-hw-mulx:                           Nios II Options.    (line  118)
  * mno-id-shared-library:                 Blackfin Options.   (line   84)
  * mno-ieee:                              SH Options.         (line  163)
! * mno-ieee-fp:                           x86 Options.        (line  675)
  * mno-imadd:                             MIPS Options.       (line  621)
  * mno-inline-float-divide:               IA-64 Options.      (line   61)
  * mno-inline-int-divide:                 IA-64 Options.      (line   72)
*************** look up both forms.
*** 67203,67209 ****
  * mno-int32:                             PDP-11 Options.     (line   31)
  * mno-interlink-compressed:              MIPS Options.       (line  133)
  * mno-interlink-mips16:                  MIPS Options.       (line  145)
! * mno-interrupts:                        AVR Options.        (line  246)
  * mno-isel:                              RS/6000 and PowerPC Options.
                                                               (line  165)
  * mno-jsr:                               RX Options.         (line  167)
--- 67306,67312 ----
  * mno-int32:                             PDP-11 Options.     (line   31)
  * mno-interlink-compressed:              MIPS Options.       (line  133)
  * mno-interlink-mips16:                  MIPS Options.       (line  145)
! * mno-interrupts:                        AVR Options.        (line  248)
  * mno-isel:                              RS/6000 and PowerPC Options.
                                                               (line  165)
  * mno-jsr:                               RX Options.         (line  167)
*************** look up both forms.
*** 67251,67257 ****
  * Mno-modules:                           Preprocessor Options.
                                                               (line  131)
  * mno-mpy:                               ARC Options.        (line  125)
! * mno-ms-bitfields:                      x86 Options.        (line 1280)
  * mno-mt:                                MIPS Options.       (line  393)
  * mno-mul-bug-workaround:                CRIS Options.       (line   28)
  * mno-muladd:                            FRV Options.        (line   67)
--- 67354,67360 ----
  * Mno-modules:                           Preprocessor Options.
                                                               (line  131)
  * mno-mpy:                               ARC Options.        (line  125)
! * mno-ms-bitfields:                      x86 Options.        (line 1305)
  * mno-mt:                                MIPS Options.       (line  393)
  * mno-mul-bug-workaround:                CRIS Options.       (line   28)
  * mno-muladd:                            FRV Options.        (line   67)
*************** look up both forms.
*** 67306,67319 ****
  * mno-prologue-epilogue:                 CRIS Options.       (line   67)
  * mno-prototype:                         RS/6000 and PowerPC Options.
                                                               (line  591)
! * mno-push-args:                         x86 Options.        (line 1257)
  * mno-quad-memory:                       RS/6000 and PowerPC Options.
                                                               (line  201)
  * mno-quad-memory-atomic:                RS/6000 and PowerPC Options.
                                                               (line  207)
  * mno-readonly-in-sdata:                 RS/6000 and PowerPC Options.
                                                               (line  683)
! * mno-red-zone:                          x86 Options.        (line 1647)
  * mno-register-names:                    IA-64 Options.      (line   35)
  * mno-regnames:                          RS/6000 and PowerPC Options.
                                                               (line  720)
--- 67409,67422 ----
  * mno-prologue-epilogue:                 CRIS Options.       (line   67)
  * mno-prototype:                         RS/6000 and PowerPC Options.
                                                               (line  591)
! * mno-push-args:                         x86 Options.        (line 1282)
  * mno-quad-memory:                       RS/6000 and PowerPC Options.
                                                               (line  201)
  * mno-quad-memory-atomic:                RS/6000 and PowerPC Options.
                                                               (line  207)
  * mno-readonly-in-sdata:                 RS/6000 and PowerPC Options.
                                                               (line  683)
! * mno-red-zone:                          x86 Options.        (line 1672)
  * mno-register-names:                    IA-64 Options.      (line   35)
  * mno-regnames:                          RS/6000 and PowerPC Options.
                                                               (line  720)
*************** look up both forms.
*** 67390,67396 ****
  * mno-unaligned-access <1>:              MIPS Options.       (line  595)
  * mno-unaligned-doubles:                 SPARC Options.      (line   71)
  * mno-uninit-const-in-rodata:            MIPS Options.       (line  523)
! * mno-unroll-only-small-loops:           x86 Options.        (line 1704)
  * mno-update:                            RS/6000 and PowerPC Options.
                                                               (line  348)
  * mno-user-mode:                         SPARC Options.      (line   83)
--- 67493,67499 ----
  * mno-unaligned-access <1>:              MIPS Options.       (line  595)
  * mno-unaligned-doubles:                 SPARC Options.      (line   71)
  * mno-uninit-const-in-rodata:            MIPS Options.       (line  523)
! * mno-unroll-only-small-loops:           x86 Options.        (line 1729)
  * mno-update:                            RS/6000 and PowerPC Options.
                                                               (line  348)
  * mno-user-mode:                         SPARC Options.      (line   83)
*************** look up both forms.
*** 67432,67438 ****
  * mnomacsave:                            SH Options.         (line  159)
  * mnop-fun-dllimport:                    x86 Windows Options.
                                                               (line   21)
! * mnop-mcount:                           x86 Options.        (line 1487)
  * mnopm:                                 FT32 Options.       (line   28)
  * mnops:                                 Adapteva Epiphany Options.
                                                               (line   25)
--- 67535,67541 ----
  * mnomacsave:                            SH Options.         (line  159)
  * mnop-fun-dllimport:                    x86 Windows Options.
                                                               (line   21)
! * mnop-mcount:                           x86 Options.        (line 1512)
  * mnopm:                                 FT32 Options.       (line   28)
  * mnops:                                 Adapteva Epiphany Options.
                                                               (line   25)
*************** look up both forms.
*** 67440,67446 ****
  * modd-spreg:                            MIPS Options.       (line  291)
  * momit-leaf-frame-pointer:              AArch64 Options.    (line   56)
  * momit-leaf-frame-pointer <1>:          Blackfin Options.   (line   42)
! * momit-leaf-frame-pointer <2>:          x86 Options.        (line 1452)
  * mone-byte-bool:                        Darwin Options.     (line   97)
  * moptimize:                             Nvidia PTX Options. (line   44)
  * moptimize-membar:                      FRV Options.        (line  243)
--- 67543,67549 ----
  * modd-spreg:                            MIPS Options.       (line  291)
  * momit-leaf-frame-pointer:              AArch64 Options.    (line   56)
  * momit-leaf-frame-pointer <1>:          Blackfin Options.   (line   42)
! * momit-leaf-frame-pointer <2>:          x86 Options.        (line 1477)
  * mone-byte-bool:                        Darwin Options.     (line   97)
  * moptimize:                             Nvidia PTX Options. (line   44)
  * moptimize-membar:                      FRV Options.        (line  243)
*************** look up both forms.
*** 67458,67468 ****
  * mpadstruct:                            SH Options.         (line  188)
  * mpaired-single:                        MIPS Options.       (line  368)
  * mpc-relative-literal-loads:            AArch64 Options.    (line  276)
! * mpc32:                                 x86 Options.        (line  814)
! * mpc64:                                 x86 Options.        (line  814)
! * mpc80:                                 x86 Options.        (line  814)
! * mpclmul:                               x86 Options.        (line  924)
! * mpconfig:                              x86 Options.        (line  932)
  * mpcrel:                                M680x0 Options.     (line  273)
  * mpcrel <1>:                            RS/6000 and PowerPC Options.
                                                               (line  930)
--- 67561,67571 ----
  * mpadstruct:                            SH Options.         (line  188)
  * mpaired-single:                        MIPS Options.       (line  368)
  * mpc-relative-literal-loads:            AArch64 Options.    (line  276)
! * mpc32:                                 x86 Options.        (line  839)
! * mpc64:                                 x86 Options.        (line  839)
! * mpc80:                                 x86 Options.        (line  839)
! * mpclmul:                               x86 Options.        (line  949)
! * mpconfig:                              x86 Options.        (line  957)
  * mpcrel:                                M680x0 Options.     (line  273)
  * mpcrel <1>:                            RS/6000 and PowerPC Options.
                                                               (line  930)
*************** look up both forms.
*** 67475,67481 ****
  * mpic-data-is-text-relative <1>:        MicroBlaze Options. (line   91)
  * mpic-register:                         ARM Options.        (line  813)
  * mpid:                                  RX Options.         (line  115)
! * mpku:                                  x86 Options.        (line  960)
  * mplt:                                  MIPS Options.       (line  217)
  * mpltseq:                               RS/6000 and PowerPC Options.
                                                               (line  763)
--- 67578,67584 ----
  * mpic-data-is-text-relative <1>:        MicroBlaze Options. (line   91)
  * mpic-register:                         ARM Options.        (line  813)
  * mpid:                                  RX Options.         (line  115)
! * mpku:                                  x86 Options.        (line  985)
  * mplt:                                  MIPS Options.       (line  217)
  * mpltseq:                               RS/6000 and PowerPC Options.
                                                               (line  763)
*************** look up both forms.
*** 67484,67490 ****
                                                               (line  876)
  * mpoke-function-name:                   ARM Options.        (line  828)
  * mpopc:                                 SPARC Options.      (line  279)
! * mpopcnt:                               x86 Options.        (line  944)
  * mpopcntb:                              RS/6000 and PowerPC Options.
                                                               (line   21)
  * mpopcntd:                              RS/6000 and PowerPC Options.
--- 67587,67593 ----
                                                               (line  876)
  * mpoke-function-name:                   ARM Options.        (line  828)
  * mpopc:                                 SPARC Options.      (line  279)
! * mpopcnt:                               x86 Options.        (line  969)
  * mpopcntb:                              RS/6000 and PowerPC Options.
                                                               (line   21)
  * mpopcntd:                              RS/6000 and PowerPC Options.
*************** look up both forms.
*** 67504,67522 ****
                                                               (line   21)
  * mpowerpc64:                            RS/6000 and PowerPC Options.
                                                               (line   21)
! * mprefer-avx128:                        x86 Options.        (line 1069)
  * mprefer-short-insn-regs:               Adapteva Epiphany Options.
                                                               (line   12)
! * mprefer-vector-width:                  x86 Options.        (line 1073)
  * mprefergot:                            SH Options.         (line  267)
  * mpreferred-stack-boundary:             RISC-V Options.     (line  101)
! * mpreferred-stack-boundary <1>:         x86 Options.        (line  856)
! * mprefetchi:                            x86 Options.        (line  993)
! * mprefetchwt1:                          x86 Options.        (line  937)
  * mprefixed:                             RS/6000 and PowerPC Options.
                                                               (line  936)
  * mpretend-cmove:                        SH Options.         (line  382)
! * mprfchw:                               x86 Options.        (line  935)
  * mprint-tune-info:                      ARM Options.        (line  970)
  * mprioritize-restricted-insns:          RS/6000 and PowerPC Options.
                                                               (line  456)
--- 67607,67625 ----
                                                               (line   21)
  * mpowerpc64:                            RS/6000 and PowerPC Options.
                                                               (line   21)
! * mprefer-avx128:                        x86 Options.        (line 1094)
  * mprefer-short-insn-regs:               Adapteva Epiphany Options.
                                                               (line   12)
! * mprefer-vector-width:                  x86 Options.        (line 1098)
  * mprefergot:                            SH Options.         (line  267)
  * mpreferred-stack-boundary:             RISC-V Options.     (line  101)
! * mpreferred-stack-boundary <1>:         x86 Options.        (line  881)
! * mprefetchi:                            x86 Options.        (line 1018)
! * mprefetchwt1:                          x86 Options.        (line  962)
  * mprefixed:                             RS/6000 and PowerPC Options.
                                                               (line  936)
  * mpretend-cmove:                        SH Options.         (line  382)
! * mprfchw:                               x86 Options.        (line  960)
  * mprint-tune-info:                      ARM Options.        (line  970)
  * mprioritize-restricted-insns:          RS/6000 and PowerPC Options.
                                                               (line  456)
*************** look up both forms.
*** 67526,67535 ****
  * mprologue-epilogue:                    CRIS Options.       (line   67)
  * mprototype:                            RS/6000 and PowerPC Options.
                                                               (line  591)
! * mptwrite:                              x86 Options.        (line  928)
  * mptx:                                  Nvidia PTX Options. (line   29)
  * mpure-code:                            ARM Options.        (line  980)
! * mpush-args:                            x86 Options.        (line 1257)
  * mpushpop:                              C-SKY Options.      (line  128)
  * MQ:                                    Preprocessor Options.
                                                               (line  161)
--- 67629,67638 ----
  * mprologue-epilogue:                    CRIS Options.       (line   67)
  * mprototype:                            RS/6000 and PowerPC Options.
                                                               (line  591)
! * mptwrite:                              x86 Options.        (line  953)
  * mptx:                                  Nvidia PTX Options. (line   29)
  * mpure-code:                            ARM Options.        (line  980)
! * mpush-args:                            x86 Options.        (line 1282)
  * mpushpop:                              C-SKY Options.      (line  128)
  * MQ:                                    Preprocessor Options.
                                                               (line  161)
*************** look up both forms.
*** 67540,67570 ****
                                                               (line  207)
  * mr0rel-sec:                            Nios II Options.    (line   75)
  * mr10k-cache-barrier:                   MIPS Options.       (line  719)
! * mraoint:                               x86 Options.        (line  994)
  * mRcq:                                  ARC Options.        (line  529)
  * mRcw:                                  ARC Options.        (line  532)
! * mrdpid:                                x86 Options.        (line  936)
! * mrdrnd:                                x86 Options.        (line  929)
! * mrdseed:                               x86 Options.        (line  938)
  * mreadonly-in-sdata:                    RS/6000 and PowerPC Options.
                                                               (line  683)
  * mrecip:                                RS/6000 and PowerPC Options.
                                                               (line  783)
! * mrecip <1>:                            x86 Options.        (line 1138)
  * mrecip-precision:                      RS/6000 and PowerPC Options.
                                                               (line  840)
  * mrecip=opt:                            RS/6000 and PowerPC Options.
                                                               (line  797)
! * mrecip=opt <1>:                        x86 Options.        (line 1160)
! * mrecord-mcount:                        x86 Options.        (line 1481)
! * mrecord-return:                        x86 Options.        (line 1501)
! * mred-zone:                             x86 Options.        (line 1647)
  * mreduced-regs:                         NDS32 Options.      (line   14)
  * mregister-names:                       IA-64 Options.      (line   35)
  * mregnames:                             RS/6000 and PowerPC Options.
                                                               (line  720)
! * mregparm:                              x86 Options.        (line  786)
! * mrelax:                                AVR Options.        (line  250)
  * mrelax <1>:                            H8/300 Options.     (line    8)
  * mrelax <2>:                            MN10300 Options.    (line   45)
  * mrelax <3>:                            MSP430 Options.     (line   87)
--- 67643,67673 ----
                                                               (line  207)
  * mr0rel-sec:                            Nios II Options.    (line   75)
  * mr10k-cache-barrier:                   MIPS Options.       (line  719)
! * mraoint:                               x86 Options.        (line 1019)
  * mRcq:                                  ARC Options.        (line  529)
  * mRcw:                                  ARC Options.        (line  532)
! * mrdpid:                                x86 Options.        (line  961)
! * mrdrnd:                                x86 Options.        (line  954)
! * mrdseed:                               x86 Options.        (line  963)
  * mreadonly-in-sdata:                    RS/6000 and PowerPC Options.
                                                               (line  683)
  * mrecip:                                RS/6000 and PowerPC Options.
                                                               (line  783)
! * mrecip <1>:                            x86 Options.        (line 1163)
  * mrecip-precision:                      RS/6000 and PowerPC Options.
                                                               (line  840)
  * mrecip=opt:                            RS/6000 and PowerPC Options.
                                                               (line  797)
! * mrecip=opt <1>:                        x86 Options.        (line 1185)
! * mrecord-mcount:                        x86 Options.        (line 1506)
! * mrecord-return:                        x86 Options.        (line 1526)
! * mred-zone:                             x86 Options.        (line 1672)
  * mreduced-regs:                         NDS32 Options.      (line   14)
  * mregister-names:                       IA-64 Options.      (line   35)
  * mregnames:                             RS/6000 and PowerPC Options.
                                                               (line  720)
! * mregparm:                              x86 Options.        (line  811)
! * mrelax:                                AVR Options.        (line  252)
  * mrelax <1>:                            H8/300 Options.     (line    8)
  * mrelax <2>:                            MN10300 Options.    (line   45)
  * mrelax <3>:                            MSP430 Options.     (line   87)
*************** look up both forms.
*** 67573,67579 ****
  * mrelax <6>:                            RX Options.         (line   94)
  * mrelax <7>:                            SH Options.         (line  136)
  * mrelax <8>:                            V850 Options.       (line  101)
! * mrelax-cmpxchg-loop:                   x86 Options.        (line 1559)
  * mrelax-immediate:                      MCore Options.      (line   17)
  * mrelax-pic-calls:                      MIPS Options.       (line  865)
  * mrelocatable:                          RS/6000 and PowerPC Options.
--- 67676,67682 ----
  * mrelax <6>:                            RX Options.         (line   94)
  * mrelax <7>:                            SH Options.         (line  136)
  * mrelax <8>:                            V850 Options.       (line  101)
! * mrelax-cmpxchg-loop:                   x86 Options.        (line 1584)
  * mrelax-immediate:                      MCore Options.      (line   17)
  * mrelax-pic-calls:                      MIPS Options.       (line  865)
  * mrelocatable:                          RS/6000 and PowerPC Options.
*************** look up both forms.
*** 67588,67594 ****
  * mrh850-abi:                            V850 Options.       (line  125)
  * mriscv-attribute:                      RISC-V Options.     (line  169)
  * mrl78:                                 RL78 Options.       (line   58)
! * mrmw:                                  AVR Options.        (line  647)
  * mrop-protect:                          RS/6000 and PowerPC Options.
                                                               (line  947)
  * mror:                                  OpenRISC Options.   (line   48)
--- 67691,67697 ----
  * mrh850-abi:                            V850 Options.       (line  125)
  * mriscv-attribute:                      RISC-V Options.     (line  169)
  * mrl78:                                 RL78 Options.       (line   58)
! * mrmw:                                  AVR Options.        (line  649)
  * mrop-protect:                          RS/6000 and PowerPC Options.
                                                               (line  947)
  * mror:                                  OpenRISC Options.   (line   48)
*************** look up both forms.
*** 67596,67610 ****
  * mround-nearest:                        Adapteva Epiphany Options.
                                                               (line   50)
  * mrtd:                                  M680x0 Options.     (line  236)
! * mrtd <1>:                              x86 Options.        (line  762)
  * mrtd <2>:                              x86 Function Attributes.
                                                               (line    8)
! * mrtm:                                  x86 Options.        (line  955)
  * mrtp:                                  VxWorks Options.    (line   10)
  * mrtsc:                                 ARC Options.        (line  366)
  * ms:                                    H8/300 Options.     (line   16)
  * ms2600:                                H8/300 Options.     (line   23)
! * msahf:                                 x86 Options.        (line 1109)
  * msave-acc-in-interrupts:               RX Options.         (line  108)
  * msave-mduc-in-interrupts:              RL78 Options.       (line   77)
  * msave-restore:                         RISC-V Options.     (line  114)
--- 67699,67713 ----
  * mround-nearest:                        Adapteva Epiphany Options.
                                                               (line   50)
  * mrtd:                                  M680x0 Options.     (line  236)
! * mrtd <1>:                              x86 Options.        (line  787)
  * mrtd <2>:                              x86 Function Attributes.
                                                               (line    8)
! * mrtm:                                  x86 Options.        (line  980)
  * mrtp:                                  VxWorks Options.    (line   10)
  * mrtsc:                                 ARC Options.        (line  366)
  * ms:                                    H8/300 Options.     (line   16)
  * ms2600:                                H8/300 Options.     (line   23)
! * msahf:                                 x86 Options.        (line 1134)
  * msave-acc-in-interrupts:               RX Options.         (line  108)
  * msave-mduc-in-interrupts:              RL78 Options.       (line   77)
  * msave-restore:                         RISC-V Options.     (line  114)
*************** look up both forms.
*** 67659,67677 ****
  * msel-sched-dont-check-control-spec:    IA-64 Options.      (line  206)
  * msep-data:                             Blackfin Options.   (line  106)
  * msep-data <1>:                         Blackfin Options.   (line  112)
! * mserialize:                            x86 Options.        (line  981)
  * mserialize-volatile:                   Xtensa Options.     (line   33)
  * msetlb:                                MN10300 Options.    (line   63)
  * msext:                                 OpenRISC Options.   (line   58)
  * msfimm:                                OpenRISC Options.   (line   62)
! * msgx:                                  x86 Options.        (line  939)
! * msha:                                  x86 Options.        (line  922)
  * mshared-library-id:                    Blackfin Options.   (line   99)
  * mshftimm:                              OpenRISC Options.   (line   67)
  * mshort:                                M680x0 Options.     (line  216)
! * mshort-calls:                          AVR Options.        (line  651)
  * mshorten-memrefs:                      RISC-V Options.     (line  126)
! * mshstk:                                x86 Options.        (line 1123)
  * mside-effects:                         CRIS Options.       (line   43)
  * msign-extend-enabled:                  LM32 Options.       (line   17)
  * msign-return-address:                  AArch64 Options.    (line  283)
--- 67762,67780 ----
  * msel-sched-dont-check-control-spec:    IA-64 Options.      (line  206)
  * msep-data:                             Blackfin Options.   (line  106)
  * msep-data <1>:                         Blackfin Options.   (line  112)
! * mserialize:                            x86 Options.        (line 1006)
  * mserialize-volatile:                   Xtensa Options.     (line   33)
  * msetlb:                                MN10300 Options.    (line   63)
  * msext:                                 OpenRISC Options.   (line   58)
  * msfimm:                                OpenRISC Options.   (line   62)
! * msgx:                                  x86 Options.        (line  964)
! * msha:                                  x86 Options.        (line  947)
  * mshared-library-id:                    Blackfin Options.   (line   99)
  * mshftimm:                              OpenRISC Options.   (line   67)
  * mshort:                                M680x0 Options.     (line  216)
! * mshort-calls:                          AVR Options.        (line  653)
  * mshorten-memrefs:                      RISC-V Options.     (line  126)
! * mshstk:                                x86 Options.        (line 1148)
  * mside-effects:                         CRIS Options.       (line   43)
  * msign-extend-enabled:                  LM32 Options.       (line   17)
  * msign-return-address:                  AArch64 Options.    (line  283)
*************** look up both forms.
*** 67698,67705 ****
                                                               (line  450)
  * msio:                                  HPPA Options.       (line  168)
  * msize-level:                           ARC Options.        (line  535)
! * mskip-bug:                             AVR Options.        (line  657)
! * mskip-rax-setup:                       x86 Options.        (line 1514)
  * mslow-bytes:                           MCore Options.      (line   33)
  * mslow-flash-data:                      ARM Options.        (line  952)
  * msmall:                                MSP430 Options.     (line   84)
--- 67801,67808 ----
                                                               (line  450)
  * msio:                                  HPPA Options.       (line  168)
  * msize-level:                           ARC Options.        (line  535)
! * mskip-bug:                             AVR Options.        (line  659)
! * mskip-rax-setup:                       x86 Options.        (line 1539)
  * mslow-bytes:                           MCore Options.      (line   33)
  * mslow-flash-data:                      ARM Options.        (line  952)
  * msmall:                                MSP430 Options.     (line   84)
*************** look up both forms.
*** 67738,67749 ****
  * msoft-float <13>:                      SPARC Options.      (line   37)
  * msoft-float <14>:                      V850 Options.       (line  111)
  * msoft-float <15>:                      Visium Options.     (line   22)
! * msoft-float <16>:                      x86 Options.        (line  660)
  * msoft-mul:                             OpenRISC Options.   (line   22)
  * msoft-mult:                            HPPA Options.       (line  188)
  * msoft-quad-float:                      SPARC Options.      (line   58)
  * msoft-stack:                           Nvidia PTX Options. (line   48)
! * msp8:                                  AVR Options.        (line  662)
  * mspace:                                V850 Options.       (line   29)
  * mspace-regs:                           HPPA Options.       (line  147)
  * mspecld-anomaly:                       Blackfin Options.   (line   47)
--- 67841,67852 ----
  * msoft-float <13>:                      SPARC Options.      (line   37)
  * msoft-float <14>:                      V850 Options.       (line  111)
  * msoft-float <15>:                      Visium Options.     (line   22)
! * msoft-float <16>:                      x86 Options.        (line  685)
  * msoft-mul:                             OpenRISC Options.   (line   22)
  * msoft-mult:                            HPPA Options.       (line  188)
  * msoft-quad-float:                      SPARC Options.      (line   58)
  * msoft-stack:                           Nvidia PTX Options. (line   48)
! * msp8:                                  AVR Options.        (line  664)
  * mspace:                                V850 Options.       (line   29)
  * mspace-regs:                           HPPA Options.       (line  147)
  * mspecld-anomaly:                       Blackfin Options.   (line   47)
*************** look up both forms.
*** 67760,67775 ****
  * msplit-vecmove-early:                  Adapteva Epiphany Options.
                                                               (line  125)
  * msram-ecc:                             AMD GCN Options.    (line   28)
! * msse:                                  x86 Options.        (line  903)
! * msse2:                                 x86 Options.        (line  904)
! * msse2avx:                              x86 Options.        (line 1469)
! * msse3:                                 x86 Options.        (line  905)
! * msse4:                                 x86 Options.        (line  907)
! * msse4.1:                               x86 Options.        (line  909)
! * msse4.2:                               x86 Options.        (line  910)
! * msse4a:                                x86 Options.        (line  908)
! * msseregparm:                           x86 Options.        (line  797)
! * mssse3:                                x86 Options.        (line  906)
  * mstack-align:                          CRIS Options.       (line   47)
  * mstack-bias:                           SPARC Options.      (line  370)
  * mstack-check-l1:                       Blackfin Options.   (line   73)
--- 67863,67878 ----
  * msplit-vecmove-early:                  Adapteva Epiphany Options.
                                                               (line  125)
  * msram-ecc:                             AMD GCN Options.    (line   28)
! * msse:                                  x86 Options.        (line  928)
! * msse2:                                 x86 Options.        (line  929)
! * msse2avx:                              x86 Options.        (line 1494)
! * msse3:                                 x86 Options.        (line  930)
! * msse4:                                 x86 Options.        (line  932)
! * msse4.1:                               x86 Options.        (line  934)
! * msse4.2:                               x86 Options.        (line  935)
! * msse4a:                                x86 Options.        (line  933)
! * msseregparm:                           x86 Options.        (line  822)
! * mssse3:                                x86 Options.        (line  931)
  * mstack-align:                          CRIS Options.       (line   47)
  * mstack-bias:                           SPARC Options.      (line  370)
  * mstack-check-l1:                       Blackfin Options.   (line   73)
*************** look up both forms.
*** 67783,67819 ****
  * mstack-protector-guard <2>:            RISC-V Options.     (line  193)
  * mstack-protector-guard <3>:            RS/6000 and PowerPC Options.
                                                               (line  912)
! * mstack-protector-guard <4>:            x86 Options.        (line 1539)
  * mstack-protector-guard-offset:         AArch64 Options.    (line   61)
  * mstack-protector-guard-offset <1>:     ARM Options.        (line 1002)
  * mstack-protector-guard-offset <2>:     RISC-V Options.     (line  193)
  * mstack-protector-guard-offset <3>:     RS/6000 and PowerPC Options.
                                                               (line  912)
! * mstack-protector-guard-offset <4>:     x86 Options.        (line 1539)
  * mstack-protector-guard-reg:            AArch64 Options.    (line   61)
  * mstack-protector-guard-reg <1>:        RISC-V Options.     (line  193)
  * mstack-protector-guard-reg <2>:        RS/6000 and PowerPC Options.
                                                               (line  912)
! * mstack-protector-guard-reg <3>:        x86 Options.        (line 1539)
  * mstack-protector-guard-symbol:         RS/6000 and PowerPC Options.
                                                               (line  912)
  * mstack-size:                           AMD GCN Options.    (line   36)
  * mstack-size <1>:                       C-SKY Options.      (line  148)
  * mstack-size <2>:                       S/390 and zSeries Options.
                                                               (line  200)
! * mstackrealign:                         x86 Options.        (line  847)
  * mstd-struct-return:                    SPARC Options.      (line  100)
! * mstore-max:                            x86 Options.        (line 1082)
  * mstrict-align:                         AArch64 Options.    (line   50)
  * mstrict-align <1>:                     LoongArch Options.  (line  107)
  * mstrict-align <2>:                     M680x0 Options.     (line  279)
  * mstrict-align <3>:                     RISC-V Options.     (line  135)
  * mstrict-align <4>:                     RS/6000 and PowerPC Options.
                                                               (line  401)
! * mstrict-X:                             AVR Options.        (line  264)
  * mstring-compare-inline-limit:          RS/6000 and PowerPC Options.
                                                               (line  707)
! * mstringop-strategy=ALG:                x86 Options.        (line 1418)
  * mstructure-size-boundary:              ARM Options.        (line  762)
  * msubxc:                                SPARC Options.      (line  286)
  * msv-mode:                              Visium Options.     (line   51)
--- 67886,67922 ----
  * mstack-protector-guard <2>:            RISC-V Options.     (line  193)
  * mstack-protector-guard <3>:            RS/6000 and PowerPC Options.
                                                               (line  912)
! * mstack-protector-guard <4>:            x86 Options.        (line 1564)
  * mstack-protector-guard-offset:         AArch64 Options.    (line   61)
  * mstack-protector-guard-offset <1>:     ARM Options.        (line 1002)
  * mstack-protector-guard-offset <2>:     RISC-V Options.     (line  193)
  * mstack-protector-guard-offset <3>:     RS/6000 and PowerPC Options.
                                                               (line  912)
! * mstack-protector-guard-offset <4>:     x86 Options.        (line 1564)
  * mstack-protector-guard-reg:            AArch64 Options.    (line   61)
  * mstack-protector-guard-reg <1>:        RISC-V Options.     (line  193)
  * mstack-protector-guard-reg <2>:        RS/6000 and PowerPC Options.
                                                               (line  912)
! * mstack-protector-guard-reg <3>:        x86 Options.        (line 1564)
  * mstack-protector-guard-symbol:         RS/6000 and PowerPC Options.
                                                               (line  912)
  * mstack-size:                           AMD GCN Options.    (line   36)
  * mstack-size <1>:                       C-SKY Options.      (line  148)
  * mstack-size <2>:                       S/390 and zSeries Options.
                                                               (line  200)
! * mstackrealign:                         x86 Options.        (line  872)
  * mstd-struct-return:                    SPARC Options.      (line  100)
! * mstore-max:                            x86 Options.        (line 1107)
  * mstrict-align:                         AArch64 Options.    (line   50)
  * mstrict-align <1>:                     LoongArch Options.  (line  107)
  * mstrict-align <2>:                     M680x0 Options.     (line  279)
  * mstrict-align <3>:                     RISC-V Options.     (line  135)
  * mstrict-align <4>:                     RS/6000 and PowerPC Options.
                                                               (line  401)
! * mstrict-X:                             AVR Options.        (line  266)
  * mstring-compare-inline-limit:          RS/6000 and PowerPC Options.
                                                               (line  707)
! * mstringop-strategy=ALG:                x86 Options.        (line 1443)
  * mstructure-size-boundary:              ARM Options.        (line  762)
  * msubxc:                                SPARC Options.      (line  286)
  * msv-mode:                              Visium Options.     (line   51)
*************** look up both forms.
*** 67830,67853 ****
                                                               (line  146)
  * mtarget-align:                         Xtensa Options.     (line   72)
  * mtas:                                  SH Options.         (line  258)
! * mtbm:                                  x86 Options.        (line  957)
  * mtda:                                  V850 Options.       (line   33)
  * mtelephony:                            ARC Options.        (line  376)
  * mtext-section-literals:                Xtensa Options.     (line   45)
! * mthreads:                              x86 Options.        (line 1273)
  * mthreads <1>:                          x86 Windows Options.
                                                               (line   25)
  * mthumb:                                ARM Options.        (line  849)
  * mthumb-interwork:                      ARM Options.        (line   23)
  * mtiny-printf:                          MSP430 Options.     (line  121)
! * mtiny-stack:                           AVR Options.        (line  278)
  * mTLS:                                  FRV Options.        (line   89)
  * mtls:                                  FRV Options.        (line   93)
  * mtls-dialect:                          ARM Options.        (line  902)
! * mtls-dialect <1>:                      x86 Options.        (line 1251)
  * mtls-dialect=desc:                     AArch64 Options.    (line   76)
  * mtls-dialect=traditional:              AArch64 Options.    (line   80)
! * mtls-direct-seg-refs:                  x86 Options.        (line 1459)
  * mtls-markers:                          RS/6000 and PowerPC Options.
                                                               (line  775)
  * mtls-size:                             AArch64 Options.    (line   84)
--- 67933,67956 ----
                                                               (line  146)
  * mtarget-align:                         Xtensa Options.     (line   72)
  * mtas:                                  SH Options.         (line  258)
! * mtbm:                                  x86 Options.        (line  982)
  * mtda:                                  V850 Options.       (line   33)
  * mtelephony:                            ARC Options.        (line  376)
  * mtext-section-literals:                Xtensa Options.     (line   45)
! * mthreads:                              x86 Options.        (line 1298)
  * mthreads <1>:                          x86 Windows Options.
                                                               (line   25)
  * mthumb:                                ARM Options.        (line  849)
  * mthumb-interwork:                      ARM Options.        (line   23)
  * mtiny-printf:                          MSP430 Options.     (line  121)
! * mtiny-stack:                           AVR Options.        (line  280)
  * mTLS:                                  FRV Options.        (line   89)
  * mtls:                                  FRV Options.        (line   93)
  * mtls-dialect:                          ARM Options.        (line  902)
! * mtls-dialect <1>:                      x86 Options.        (line 1276)
  * mtls-dialect=desc:                     AArch64 Options.    (line   76)
  * mtls-dialect=traditional:              AArch64 Options.    (line   80)
! * mtls-direct-seg-refs:                  x86 Options.        (line 1484)
  * mtls-markers:                          RS/6000 and PowerPC Options.
                                                               (line  775)
  * mtls-size:                             AArch64 Options.    (line   84)
*************** look up both forms.
*** 67868,67874 ****
                                                               (line  540)
  * mtrap-precision:                       DEC Alpha Options.  (line  108)
  * mtrust:                                C-SKY Options.      (line   98)
! * mtsxldtrk:                             x86 Options.        (line  973)
  * mtune:                                 AArch64 Options.    (line  191)
  * mtune <1>:                             AMD GCN Options.    (line    8)
  * mtune <2>:                             ARC Options.        (line  556)
--- 67971,67977 ----
                                                               (line  540)
  * mtrap-precision:                       DEC Alpha Options.  (line  108)
  * mtrust:                                C-SKY Options.      (line   98)
! * mtsxldtrk:                             x86 Options.        (line  998)
  * mtune:                                 AArch64 Options.    (line  191)
  * mtune <1>:                             AMD GCN Options.    (line    8)
  * mtune <2>:                             ARC Options.        (line  556)
*************** look up both forms.
*** 67888,67897 ****
                                                               (line  161)
  * mtune <15>:                            SPARC Options.      (line  198)
  * mtune <16>:                            Visium Options.     (line   46)
! * mtune <17>:                            x86 Options.        (line  535)
! * mtune-ctrl=FEATURE-LIST:               x86 Options.        (line 1036)
  * muclibc:                               GNU/Linux Options.  (line   13)
! * muintr:                                x86 Options.        (line  971)
  * multcost:                              ARC Options.        (line  646)
  * multcost=NUMBER:                       SH Options.         (line  280)
  * multilib-library-pic:                  FRV Options.        (line  109)
--- 67991,68000 ----
                                                               (line  161)
  * mtune <15>:                            SPARC Options.      (line  198)
  * mtune <16>:                            Visium Options.     (line   46)
! * mtune <17>:                            x86 Options.        (line  560)
! * mtune-ctrl=FEATURE-LIST:               x86 Options.        (line 1061)
  * muclibc:                               GNU/Linux Options.  (line   13)
! * muintr:                                x86 Options.        (line  996)
  * multcost:                              ARC Options.        (line  646)
  * multcost=NUMBER:                       SH Options.         (line  280)
  * multilib-library-pic:                  FRV Options.        (line  109)
*************** look up both forms.
*** 67910,67916 ****
  * munix:                                 VAX Options.        (line    8)
  * munix-asm:                             PDP-11 Options.     (line   42)
  * munordered-float:                      OpenRISC Options.   (line   38)
! * munroll-only-small-loops:              x86 Options.        (line 1704)
  * mupdate:                               RS/6000 and PowerPC Options.
                                                               (line  348)
  * muser-enabled:                         LM32 Options.       (line   20)
--- 68013,68019 ----
  * munix:                                 VAX Options.        (line    8)
  * munix-asm:                             PDP-11 Options.     (line   42)
  * munordered-float:                      OpenRISC Options.   (line   38)
! * munroll-only-small-loops:              x86 Options.        (line 1729)
  * mupdate:                               RS/6000 and PowerPC Options.
                                                               (line  348)
  * muser-enabled:                         LM32 Options.       (line   20)
*************** look up both forms.
*** 67927,67940 ****
  * mv850e3v5:                             V850 Options.       (line   51)
  * mv850es:                               V850 Options.       (line   74)
  * mv8plus:                               SPARC Options.      (line  212)
! * mvaes:                                 x86 Options.        (line  965)
  * mvdsp:                                 C-SKY Options.      (line  101)
  * mveclibabi:                            RS/6000 and PowerPC Options.
                                                               (line  850)
! * mveclibabi <1>:                        x86 Options.        (line 1189)
  * mvect-double:                          Adapteva Epiphany Options.
                                                               (line  114)
! * mvect8-ret-in-mem:                     x86 Options.        (line  807)
  * mverbose-cost-dump:                    AArch64 Options.    (line  272)
  * mverbose-cost-dump <1>:                ARM Options.        (line  976)
  * mvirt:                                 MIPS Options.       (line  405)
--- 68030,68043 ----
  * mv850e3v5:                             V850 Options.       (line   51)
  * mv850es:                               V850 Options.       (line   74)
  * mv8plus:                               SPARC Options.      (line  212)
! * mvaes:                                 x86 Options.        (line  990)
  * mvdsp:                                 C-SKY Options.      (line  101)
  * mveclibabi:                            RS/6000 and PowerPC Options.
                                                               (line  850)
! * mveclibabi <1>:                        x86 Options.        (line 1214)
  * mvect-double:                          Adapteva Epiphany Options.
                                                               (line  114)
! * mvect8-ret-in-mem:                     x86 Options.        (line  832)
  * mverbose-cost-dump:                    AArch64 Options.    (line  272)
  * mverbose-cost-dump <1>:                ARM Options.        (line  976)
  * mvirt:                                 MIPS Options.       (line  405)
*************** look up both forms.
*** 67948,67954 ****
  * mvolatile-asm-stop:                    IA-64 Options.      (line   30)
  * mvolatile-cache:                       ARC Options.        (line  433)
  * mvolatile-cache <1>:                   ARC Options.        (line  437)
! * mvpclmulqdq:                           x86 Options.        (line  967)
  * mvr4130-align:                         MIPS Options.       (line  840)
  * mvrsave:                               RS/6000 and PowerPC Options.
                                                               (line  151)
--- 68051,68057 ----
  * mvolatile-asm-stop:                    IA-64 Options.      (line   30)
  * mvolatile-cache:                       ARC Options.        (line  433)
  * mvolatile-cache <1>:                   ARC Options.        (line  437)
! * mvpclmulqdq:                           x86 Options.        (line  992)
  * mvr4130-align:                         MIPS Options.       (line  840)
  * mvrsave:                               RS/6000 and PowerPC Options.
                                                               (line  151)
*************** look up both forms.
*** 67958,67965 ****
                                                               (line  110)
  * mvxworks:                              RS/6000 and PowerPC Options.
                                                               (line  623)
! * mvzeroupper:                           x86 Options.        (line 1063)
! * mwaitpkg:                              x86 Options.        (line  966)
  * mwarn-devices-csv:                     MSP430 Options.     (line  166)
  * mwarn-dynamicstack:                    S/390 and zSeries Options.
                                                               (line  195)
--- 68061,68068 ----
                                                               (line  110)
  * mvxworks:                              RS/6000 and PowerPC Options.
                                                               (line  623)
! * mvzeroupper:                           x86 Options.        (line 1088)
! * mwaitpkg:                              x86 Options.        (line  991)
  * mwarn-devices-csv:                     MSP430 Options.     (line  166)
  * mwarn-dynamicstack:                    S/390 and zSeries Options.
                                                               (line  195)
*************** look up both forms.
*** 67967,67981 ****
                                                               (line  187)
  * mwarn-mcu:                             MSP430 Options.     (line   63)
  * mwarn-multiple-fast-interrupts:        RX Options.         (line  141)
! * mwbnoinvd:                             x86 Options.        (line  933)
  * mwide-bitfields:                       MCore Options.      (line   21)
! * mwidekl:                               x86 Options.        (line  987)
  * mwin32:                                x86 Windows Options.
                                                               (line   34)
  * mwindows:                              x86 Windows Options.
                                                               (line   40)
  * mword-relocations:                     ARM Options.        (line  913)
! * mx32:                                  x86 Options.        (line 1623)
  * mxgot:                                 M680x0 Options.     (line  311)
  * mxgot <1>:                             MIPS Options.       (line  227)
  * mxl-barrel-shift:                      MicroBlaze Options. (line   31)
--- 68070,68084 ----
                                                               (line  187)
  * mwarn-mcu:                             MSP430 Options.     (line   63)
  * mwarn-multiple-fast-interrupts:        RX Options.         (line  141)
! * mwbnoinvd:                             x86 Options.        (line  958)
  * mwide-bitfields:                       MCore Options.      (line   21)
! * mwidekl:                               x86 Options.        (line 1012)
  * mwin32:                                x86 Windows Options.
                                                               (line   34)
  * mwindows:                              x86 Windows Options.
                                                               (line   40)
  * mword-relocations:                     ARM Options.        (line  913)
! * mx32:                                  x86 Options.        (line 1648)
  * mxgot:                                 M680x0 Options.     (line  311)
  * mxgot <1>:                             MIPS Options.       (line  227)
  * mxl-barrel-shift:                      MicroBlaze Options. (line   31)
*************** look up both forms.
*** 67991,68002 ****
  * mxl-soft-mul:                          MicroBlaze Options. (line   25)
  * mxl-stack-check:                       MicroBlaze Options. (line   40)
  * mxnack:                                AMD GCN Options.    (line   43)
! * mxop:                                  x86 Options.        (line  940)
  * mxpa:                                  MIPS Options.       (line  409)
! * mxsave:                                x86 Options.        (line  951)
! * mxsavec:                               x86 Options.        (line  953)
! * mxsaveopt:                             x86 Options.        (line  952)
! * mxsaves:                               x86 Options.        (line  954)
  * mxy:                                   ARC Options.        (line  381)
  * myellowknife:                          RS/6000 and PowerPC Options.
                                                               (line  618)
--- 68094,68105 ----
  * mxl-soft-mul:                          MicroBlaze Options. (line   25)
  * mxl-stack-check:                       MicroBlaze Options. (line   40)
  * mxnack:                                AMD GCN Options.    (line   43)
! * mxop:                                  x86 Options.        (line  965)
  * mxpa:                                  MIPS Options.       (line  409)
! * mxsave:                                x86 Options.        (line  976)
! * mxsavec:                               x86 Options.        (line  978)
! * mxsaveopt:                             x86 Options.        (line  977)
! * mxsaves:                               x86 Options.        (line  979)
  * mxy:                                   ARC Options.        (line  381)
  * myellowknife:                          RS/6000 and PowerPC Options.
                                                               (line  618)
*************** look up both forms.
*** 68007,68013 ****
  * mzero-extend:                          MMIX Options.       (line   24)
  * mzvector:                              S/390 and zSeries Options.
                                                               (line  121)
! * no-80387:                              x86 Options.        (line  660)
  * no-block-ops-unaligned-vsx:            RS/6000 and PowerPC Options.
                                                               (line  957)
  * no-canonical-prefixes:                 Directory Options.  (line  163)
--- 68110,68116 ----
  * mzero-extend:                          MMIX Options.       (line   24)
  * mzvector:                              S/390 and zSeries Options.
                                                               (line  121)
! * no-80387:                              x86 Options.        (line  685)
  * no-block-ops-unaligned-vsx:            RS/6000 and PowerPC Options.
                                                               (line  957)
  * no-canonical-prefixes:                 Directory Options.  (line  163)
*************** look up both forms.
*** 68018,68025 ****
  * noall_load:                            Darwin Options.     (line  197)
  * nocpp:                                 MIPS Options.       (line  641)
  * nodefaultlibs:                         Link Options.       (line  121)
! * nodevicelib:                           AVR Options.        (line  285)
! * nodevicespecs:                         AVR Options.        (line  288)
  * nofixprebinding:                       Darwin Options.     (line  197)
  * nofpu:                                 RX Options.         (line   15)
  * nolibc:                                Link Options.       (line  133)
--- 68121,68128 ----
  * noall_load:                            Darwin Options.     (line  197)
  * nocpp:                                 MIPS Options.       (line  641)
  * nodefaultlibs:                         Link Options.       (line  121)
! * nodevicelib:                           AVR Options.        (line  287)
! * nodevicespecs:                         AVR Options.        (line  290)
  * nofixprebinding:                       Darwin Options.     (line  197)
  * nofpu:                                 RX Options.         (line   15)
  * nolibc:                                Link Options.       (line  133)
*************** look up both forms.
*** 68075,68098 ****
  * plt:                                   RISC-V Options.     (line   11)
  * prebind:                               Darwin Options.     (line  197)
  * prebind_all_twolevel_modules:          Darwin Options.     (line  197)
! * print-file-name:                       Developer Options.  (line  962)
! * print-libgcc-file-name:                Developer Options.  (line  996)
! * print-multi-directory:                 Developer Options.  (line  968)
! * print-multi-lib:                       Developer Options.  (line  973)
! * print-multi-os-directory:              Developer Options.  (line  980)
! * print-multiarch:                       Developer Options.  (line  989)
  * print-objc-runtime-info:               Objective-C and Objective-C++ Dialect Options.
                                                               (line  229)
! * print-prog-name:                       Developer Options.  (line  993)
! * print-search-dirs:                     Developer Options.  (line 1004)
! * print-sysroot:                         Developer Options.  (line 1017)
! * print-sysroot-headers-suffix:          Developer Options.  (line 1024)
  * private_bundle:                        Darwin Options.     (line  197)
  * pthread:                               Preprocessor Options.
                                                               (line   69)
  * pthread <1>:                           Link Options.       (line  197)
  * pthreads:                              Solaris 2 Options.  (line   29)
! * Q:                                     Developer Options.  (line  838)
  * Qn:                                    System V Options.   (line   17)
  * Qy:                                    System V Options.   (line   13)
  * r:                                     Link Options.       (line  204)
--- 68178,68201 ----
  * plt:                                   RISC-V Options.     (line   11)
  * prebind:                               Darwin Options.     (line  197)
  * prebind_all_twolevel_modules:          Darwin Options.     (line  197)
! * print-file-name:                       Developer Options.  (line 1033)
! * print-libgcc-file-name:                Developer Options.  (line 1067)
! * print-multi-directory:                 Developer Options.  (line 1039)
! * print-multi-lib:                       Developer Options.  (line 1044)
! * print-multi-os-directory:              Developer Options.  (line 1051)
! * print-multiarch:                       Developer Options.  (line 1060)
  * print-objc-runtime-info:               Objective-C and Objective-C++ Dialect Options.
                                                               (line  229)
! * print-prog-name:                       Developer Options.  (line 1064)
! * print-search-dirs:                     Developer Options.  (line 1075)
! * print-sysroot:                         Developer Options.  (line 1088)
! * print-sysroot-headers-suffix:          Developer Options.  (line 1095)
  * private_bundle:                        Darwin Options.     (line  197)
  * pthread:                               Preprocessor Options.
                                                               (line   69)
  * pthread <1>:                           Link Options.       (line  197)
  * pthreads:                              Solaris 2 Options.  (line   29)
! * Q:                                     Developer Options.  (line  909)
  * Qn:                                    System V Options.   (line   17)
  * Qy:                                    System V Options.   (line   13)
  * r:                                     Link Options.       (line  204)
*************** look up both forms.
*** 68103,68111 ****
  * S:                                     Overall Options.    (line  175)
  * S <1>:                                 Link Options.       (line   17)
  * s:                                     Link Options.       (line  215)
! * save-temps:                            Developer Options.  (line  734)
! * save-temps=cwd:                        Developer Options.  (line  745)
! * save-temps=obj:                        Developer Options.  (line  748)
  * sectalign:                             Darwin Options.     (line  197)
  * sectcreate:                            Darwin Options.     (line  197)
  * sectobjectsymbols:                     Darwin Options.     (line  197)
--- 68206,68214 ----
  * S:                                     Overall Options.    (line  175)
  * S <1>:                                 Link Options.       (line   17)
  * s:                                     Link Options.       (line  215)
! * save-temps:                            Developer Options.  (line  805)
! * save-temps=cwd:                        Developer Options.  (line  816)
! * save-temps=obj:                        Developer Options.  (line  819)
  * sectalign:                             Darwin Options.     (line  197)
  * sectcreate:                            Darwin Options.     (line  197)
  * sectobjectsymbols:                     Darwin Options.     (line  197)
*************** look up both forms.
*** 68152,68158 ****
  * T:                                     Link Options.       (line  316)
  * target-help:                           Overall Options.    (line  486)
  * threads:                               HPPA Options.       (line  236)
! * time:                                  Developer Options.  (line  754)
  * tno-android-cc:                        GNU/Linux Options.  (line   35)
  * tno-android-ld:                        GNU/Linux Options.  (line   39)
  * traditional:                           Preprocessor Options.
--- 68255,68261 ----
  * T:                                     Link Options.       (line  316)
  * target-help:                           Overall Options.    (line  486)
  * threads:                               HPPA Options.       (line  236)
! * time:                                  Developer Options.  (line  825)
  * tno-android-cc:                        GNU/Linux Options.  (line   35)
  * tno-android-ld:                        GNU/Linux Options.  (line   39)
  * traditional:                           Preprocessor Options.
*************** look up both forms.
*** 68183,68189 ****
  * Wabi-tag:                              C++ Dialect Options.
                                                               (line  668)
  * Wabsolute-value:                       Warning Options.    (line 2430)
! * Waddr-space-convert:                   AVR Options.        (line  303)
  * Waddress:                              Warning Options.    (line 2892)
  * Waddress-of-packed-member:             Warning Options.    (line 2926)
  * Waggregate-return:                     Warning Options.    (line 2954)
--- 68286,68292 ----
  * Wabi-tag:                              C++ Dialect Options.
                                                               (line  668)
  * Wabsolute-value:                       Warning Options.    (line 2430)
! * Waddr-space-convert:                   AVR Options.        (line  305)
  * Waddress:                              Warning Options.    (line 2892)
  * Waddress-of-packed-member:             Warning Options.    (line 2926)
  * Waggregate-return:                     Warning Options.    (line 2954)
*************** look up both forms.
*** 68484,68490 ****
  * Wmissing-prototypes:                   Warning Options.    (line 3039)
  * Wmissing-requires:                     Warning Options.    (line 3089)
  * Wmissing-template-keyword:             Warning Options.    (line 3106)
! * Wmisspelled-isr:                       AVR Options.        (line  308)
  * Wmultichar:                            Warning Options.    (line 3134)
  * Wmultiple-inheritance:                 C++ Dialect Options.
                                                               (line 1277)
--- 68587,68593 ----
  * Wmissing-prototypes:                   Warning Options.    (line 3039)
  * Wmissing-requires:                     Warning Options.    (line 3089)
  * Wmissing-template-keyword:             Warning Options.    (line 3106)
! * Wmisspelled-isr:                       AVR Options.        (line  310)
  * Wmultichar:                            Warning Options.    (line 3134)
  * Wmultiple-inheritance:                 C++ Dialect Options.
                                                               (line 1277)
*************** look up both forms.
*** 68496,68502 ****
  * Wnested-externs:                       Warning Options.    (line 3306)
  * Wno-abi:                               Warning Options.    (line  269)
  * Wno-absolute-value:                    Warning Options.    (line 2430)
! * Wno-addr-space-convert:                AVR Options.        (line  303)
  * Wno-address:                           Warning Options.    (line 2892)
  * Wno-address-of-packed-member:          Warning Options.    (line 2926)
  * Wno-aggregate-return:                  Warning Options.    (line 2954)
--- 68599,68605 ----
  * Wnested-externs:                       Warning Options.    (line 3306)
  * Wno-abi:                               Warning Options.    (line  269)
  * Wno-absolute-value:                    Warning Options.    (line 2430)
! * Wno-addr-space-convert:                AVR Options.        (line  305)
  * Wno-address:                           Warning Options.    (line 2892)
  * Wno-address-of-packed-member:          Warning Options.    (line 2926)
  * Wno-aggregate-return:                  Warning Options.    (line 2954)
*************** look up both forms.
*** 68779,68785 ****
  * Wno-missing-prototypes:                Warning Options.    (line 3039)
  * Wno-missing-requires:                  Warning Options.    (line 3089)
  * Wno-missing-template-keyword:          Warning Options.    (line 3106)
! * Wno-misspelled-isr:                    AVR Options.        (line  308)
  * Wno-multichar:                         Warning Options.    (line 3134)
  * Wno-multiple-inheritance:              C++ Dialect Options.
                                                               (line 1277)
--- 68882,68888 ----
  * Wno-missing-prototypes:                Warning Options.    (line 3039)
  * Wno-missing-requires:                  Warning Options.    (line 3089)
  * Wno-missing-template-keyword:          Warning Options.    (line 3106)
! * Wno-misspelled-isr:                    AVR Options.        (line  310)
  * Wno-multichar:                         Warning Options.    (line 3134)
  * Wno-multiple-inheritance:              C++ Dialect Options.
                                                               (line 1277)
*************** A.2 Concept and Symbol Index
*** 69369,69375 ****
  * __builtin_cpu_supports:                Basic PowerPC Built-in Functions Available on all Configurations.
                                                               (line   70)
  * __builtin_cpu_supports <1>:            x86 Built-in Functions.
!                                                              (line  268)
  * __builtin_ctz:                         Other Builtins.     (line  990)
  * __builtin_ctzl:                        Other Builtins.     (line 1012)
  * __builtin_ctzll:                       Other Builtins.     (line 1035)
--- 69472,69478 ----
  * __builtin_cpu_supports:                Basic PowerPC Built-in Functions Available on all Configurations.
                                                               (line   70)
  * __builtin_cpu_supports <1>:            x86 Built-in Functions.
!                                                              (line  271)
  * __builtin_ctz:                         Other Builtins.     (line  990)
  * __builtin_ctzl:                        Other Builtins.     (line 1012)
  * __builtin_ctzll:                       Other Builtins.     (line 1035)
*************** A.2 Concept and Symbol Index
*** 69411,69457 ****
  * __builtin_huge_valq:                   x86 Built-in Functions.
                                                               (line   49)
  * __builtin_ia32_crc32di:                x86 Built-in Functions.
!                                                              (line  863)
  * __builtin_ia32_crc32hi:                x86 Built-in Functions.
!                                                              (line  855)
  * __builtin_ia32_crc32qi:                x86 Built-in Functions.
!                                                              (line  851)
  * __builtin_ia32_crc32si:                x86 Built-in Functions.
!                                                              (line  859)
  * __builtin_ia32_loadhps:                x86 Built-in Functions.
-                                                              (line  521)
- * __builtin_ia32_loadlps:                x86 Built-in Functions.
                                                               (line  524)
  * __builtin_ia32_loadss:                 x86 Built-in Functions.
!                                                              (line  518)
  * __builtin_ia32_loadups:                x86 Built-in Functions.
!                                                              (line  512)
  * __builtin_ia32_pause:                  x86 Built-in Functions.
                                                               (line   62)
  * __builtin_ia32_pclmulqdq128:           x86 Built-in Functions.
!                                                              (line 1199)
  * __builtin_ia32_storehps:               x86 Built-in Functions.
-                                                              (line  527)
- * __builtin_ia32_storelps:               x86 Built-in Functions.
                                                               (line  530)
  * __builtin_ia32_storeups:               x86 Built-in Functions.
!                                                              (line  515)
  * __builtin_ia32_vec_ext_v16qi:          x86 Built-in Functions.
!                                                              (line  800)
  * __builtin_ia32_vec_ext_v2di:           x86 Built-in Functions.
!                                                              (line  826)
  * __builtin_ia32_vec_ext_v4sf:           x86 Built-in Functions.
!                                                              (line  819)
  * __builtin_ia32_vec_ext_v4si:           x86 Built-in Functions.
!                                                              (line  823)
  * __builtin_ia32_vec_set_v16qi:          x86 Built-in Functions.
!                                                              (line  804)
  * __builtin_ia32_vec_set_v2di:           x86 Built-in Functions.
!                                                              (line  812)
  * __builtin_ia32_vec_set_v4sf:           x86 Built-in Functions.
!                                                              (line  796)
  * __builtin_ia32_vec_set_v4si:           x86 Built-in Functions.
!                                                              (line  808)
  * __builtin_inf:                         Other Builtins.     (line  864)
  * __builtin_infd128:                     Other Builtins.     (line  874)
  * __builtin_infd32:                      Other Builtins.     (line  868)
--- 69514,69560 ----
  * __builtin_huge_valq:                   x86 Built-in Functions.
                                                               (line   49)
  * __builtin_ia32_crc32di:                x86 Built-in Functions.
!                                                              (line  866)
  * __builtin_ia32_crc32hi:                x86 Built-in Functions.
!                                                              (line  858)
  * __builtin_ia32_crc32qi:                x86 Built-in Functions.
!                                                              (line  854)
  * __builtin_ia32_crc32si:                x86 Built-in Functions.
!                                                              (line  862)
  * __builtin_ia32_loadhps:                x86 Built-in Functions.
                                                               (line  524)
+ * __builtin_ia32_loadlps:                x86 Built-in Functions.
+                                                              (line  527)
  * __builtin_ia32_loadss:                 x86 Built-in Functions.
!                                                              (line  521)
  * __builtin_ia32_loadups:                x86 Built-in Functions.
!                                                              (line  515)
  * __builtin_ia32_pause:                  x86 Built-in Functions.
                                                               (line   62)
  * __builtin_ia32_pclmulqdq128:           x86 Built-in Functions.
!                                                              (line 1202)
  * __builtin_ia32_storehps:               x86 Built-in Functions.
                                                               (line  530)
+ * __builtin_ia32_storelps:               x86 Built-in Functions.
+                                                              (line  533)
  * __builtin_ia32_storeups:               x86 Built-in Functions.
!                                                              (line  518)
  * __builtin_ia32_vec_ext_v16qi:          x86 Built-in Functions.
!                                                              (line  803)
  * __builtin_ia32_vec_ext_v2di:           x86 Built-in Functions.
!                                                              (line  829)
  * __builtin_ia32_vec_ext_v4sf:           x86 Built-in Functions.
!                                                              (line  822)
  * __builtin_ia32_vec_ext_v4si:           x86 Built-in Functions.
!                                                              (line  826)
  * __builtin_ia32_vec_set_v16qi:          x86 Built-in Functions.
!                                                              (line  807)
  * __builtin_ia32_vec_set_v2di:           x86 Built-in Functions.
!                                                              (line  815)
  * __builtin_ia32_vec_set_v4sf:           x86 Built-in Functions.
!                                                              (line  799)
  * __builtin_ia32_vec_set_v4si:           x86 Built-in Functions.
!                                                              (line  811)
  * __builtin_inf:                         Other Builtins.     (line  864)
  * __builtin_infd128:                     Other Builtins.     (line  874)
  * __builtin_infd32:                      Other Builtins.     (line  868)
*************** A.2 Concept and Symbol Index
*** 69529,69541 ****
                                                               (line   35)
  * __builtin_popcount:                    Other Builtins.     (line  999)
  * __builtin_popcount <1>:                x86 Built-in Functions.
!                                                              (line  870)
  * __builtin_popcountl:                   Other Builtins.     (line 1019)
  * __builtin_popcountl <1>:               x86 Built-in Functions.
!                                                              (line  873)
  * __builtin_popcountll:                  Other Builtins.     (line 1043)
  * __builtin_popcountll <1>:              x86 Built-in Functions.
!                                                              (line  877)
  * __builtin_powi:                        Other Builtins.     (line 1051)
  * __builtin_powif:                       Other Builtins.     (line 1052)
  * __builtin_powil:                       Other Builtins.     (line 1053)
--- 69632,69644 ----
                                                               (line   35)
  * __builtin_popcount:                    Other Builtins.     (line  999)
  * __builtin_popcount <1>:                x86 Built-in Functions.
!                                                              (line  873)
  * __builtin_popcountl:                   Other Builtins.     (line 1019)
  * __builtin_popcountl <1>:               x86 Built-in Functions.
!                                                              (line  876)
  * __builtin_popcountll:                  Other Builtins.     (line 1043)
  * __builtin_popcountll <1>:              x86 Built-in Functions.
!                                                              (line  880)
  * __builtin_powi:                        Other Builtins.     (line 1051)
  * __builtin_powif:                       Other Builtins.     (line 1052)
  * __builtin_powil:                       Other Builtins.     (line 1053)
*************** A.2 Concept and Symbol Index
*** 70247,70253 ****
                                                               (line    8)
  * eightbit_data variable attribute, H8/300: H8/300 Variable Attributes.
                                                               (line    8)
! * EIND:                                  AVR Options.        (line  315)
  * either function attribute, MSP430:     MSP430 Function Attributes.
                                                               (line   54)
  * either variable attribute, MSP430:     MSP430 Variable Attributes.
--- 70350,70356 ----
                                                               (line    8)
  * eightbit_data variable attribute, H8/300: H8/300 Variable Attributes.
                                                               (line    8)
! * EIND:                                  AVR Options.        (line  317)
  * either function attribute, MSP430:     MSP430 Function Attributes.
                                                               (line   54)
  * either variable attribute, MSP430:     MSP430 Variable Attributes.
*************** A.2 Concept and Symbol Index
*** 71215,71224 ****
  * r fixed-suffix:                        Fixed-Point.        (line    6)
  * R fixed-suffix:                        Fixed-Point.        (line    6)
  * r in constraint:                       Simple Constraints. (line   64)
! * RAMPD:                                 AVR Options.        (line  426)
! * RAMPX:                                 AVR Options.        (line  426)
! * RAMPY:                                 AVR Options.        (line  426)
! * RAMPZ:                                 AVR Options.        (line  426)
  * range1 GCC_COLORS capability:          Diagnostic Message Formatting Options.
                                                               (line  106)
  * range2 GCC_COLORS capability:          Diagnostic Message Formatting Options.
--- 71318,71327 ----
  * r fixed-suffix:                        Fixed-Point.        (line    6)
  * R fixed-suffix:                        Fixed-Point.        (line    6)
  * r in constraint:                       Simple Constraints. (line   64)
! * RAMPD:                                 AVR Options.        (line  428)
! * RAMPX:                                 AVR Options.        (line  428)
! * RAMPY:                                 AVR Options.        (line  428)
! * RAMPZ:                                 AVR Options.        (line  428)
  * range1 GCC_COLORS capability:          Diagnostic Message Formatting Options.
                                                               (line  106)
  * range2 GCC_COLORS capability:          Diagnostic Message Formatting Options.
*************** Node: Debugging Options447396
*** 72123,72539 ****
  Node: Optimize Options467342
  Ref: Type-punning539895
  Node: Instrumentation Options662783
! Node: Preprocessor Options714684
! Ref: dashMF719531
! Ref: fdollars-in-identifiers724193
! Node: Assembler Options737543
! Node: Link Options738234
! Ref: Link Options-Footnote-1755266
! Node: Directory Options755780
! Node: Code Gen Options764183
! Node: Developer Options793056
! Node: Submodel Options835800
! Node: AArch64 Options837520
! Ref: aarch64-feature-modifiers853332
! Node: Adapteva Epiphany Options859004
! Node: AMD GCN Options864956
! Node: ARC Options866685
! Node: ARM Options887689
! Node: AVR Options932452
! Node: Blackfin Options961068
! Node: C6X Options968960
! Node: CRIS Options970503
! Node: C-SKY Options973690
! Node: Darwin Options979417
! Node: DEC Alpha Options987197
! Node: eBPF Options998813
! Node: FR30 Options1001189
! Node: FT32 Options1001749
! Node: FRV Options1002695
! Node: GNU/Linux Options1009459
! Node: H8/300 Options1010840
! Node: HPPA Options1012292
! Node: IA-64 Options1022937
! Node: LM32 Options1031065
! Node: LoongArch Options1031593
! Node: M32C Options1039239
! Node: M32R/D Options1040517
! Node: M680x0 Options1044062
! Node: MCore Options1058217
! Node: MicroBlaze Options1059726
! Node: MIPS Options1062793
! Node: MMIX Options1099769
! Node: MN10300 Options1102246
! Node: Moxie Options1104789
! Node: MSP430 Options1105276
! Node: NDS32 Options1113037
! Node: Nios II Options1115207
! Node: Nvidia PTX Options1128423
! Node: OpenRISC Options1131957
! Node: PDP-11 Options1134711
! Node: PowerPC Options1135959
! Node: PRU Options1136177
! Node: RISC-V Options1138386
! Node: RL78 Options1147123
! Node: RS/6000 and PowerPC Options1150898
! Node: RX Options1192741
! Node: S/390 and zSeries Options1201343
! Node: SH Options1212140
! Node: Solaris 2 Options1227292
! Node: SPARC Options1228530
! Node: System V Options1244182
! Node: V850 Options1245007
! Node: VAX Options1251695
! Node: Visium Options1252387
! Node: VMS Options1254695
! Node: VxWorks Options1255511
! Node: x86 Options1256663
! Node: x86 Windows Options1330683
! Node: Xstormy16 Options1333489
! Node: Xtensa Options1333783
! Node: zSeries Options1340275
! Node: Spec Files1340471
! Node: Environment Variables1366550
! Node: Precompiled Headers1375983
! Node: C++ Modules1382192
! Ref: C++ Modules-Footnote-11387855
! Node: C++ Module Mapper1388108
! Node: C++ Module Preprocessing1393261
! Node: C++ Compiled Module Interface1395090
! Ref: C++ Compiled Module Interface-Footnote-11398474
! Ref: C++ Compiled Module Interface-Footnote-21398563
! Node: C Implementation1398619
! Node: Translation implementation1400310
! Node: Environment implementation1400901
! Node: Identifiers implementation1401455
! Node: Characters implementation1402541
! Node: Integers implementation1406191
! Node: Floating point implementation1408240
! Node: Arrays and pointers implementation1411340
! Ref: Arrays and pointers implementation-Footnote-11412800
! Node: Hints implementation1412926
! Node: Structures unions enumerations and bit-fields implementation1414421
! Node: Qualifiers implementation1416645
! Node: Declarators implementation1418706
! Node: Statements implementation1419047
! Node: Preprocessing directives implementation1419373
! Node: Library functions implementation1421694
! Node: Architecture implementation1422343
! Node: Locale-specific behavior implementation1423988
! Node: C++ Implementation1424293
! Node: Conditionally-supported behavior1425577
! Node: Exception handling1426194
! Node: C Extensions1426602
! Node: Statement Exprs1431825
! Node: Local Labels1437197
! Node: Labels as Values1440170
! Ref: Labels as Values-Footnote-11442697
! Node: Nested Functions1442882
! Node: Nonlocal Gotos1446836
! Node: Constructing Calls1449102
! Node: Typeof1453814
! Node: Conditionals1457743
! Node: __int1281458632
! Node: Long Long1459157
! Node: Complex1460648
! Node: Floating Types1465393
! Node: Half-Precision1468864
! Node: Decimal Float1472332
! Node: Hex Floats1474186
! Node: Fixed-Point1475260
! Node: Named Address Spaces1478518
! Ref: AVR Named Address Spaces1479204
! Node: Zero Length1486503
! Node: Empty Structures1490684
! Node: Variable Length1491090
! Node: Variadic Macros1493808
! Node: Escaped Newlines1496186
! Node: Subscripting1497047
! Node: Pointer Arith1497772
! Node: Variadic Pointer Args1498349
! Node: Pointers to Arrays1499074
! Node: Initializers1499827
! Node: Compound Literals1500328
! Node: Designated Inits1503895
! Node: Case Ranges1507819
! Node: Cast to Union1508500
! Node: Mixed Labels and Declarations1510234
! Node: Function Attributes1510871
! Node: Common Function Attributes1515325
! Ref: Common Function Attributes-Footnote-11593837
! Node: AArch64 Function Attributes1594154
! Node: AMD GCN Function Attributes1600348
! Node: ARC Function Attributes1603401
! Node: ARM Function Attributes1606338
! Node: AVR Function Attributes1611477
! Node: Blackfin Function Attributes1616012
! Node: BPF Function Attributes1618509
! Node: C-SKY Function Attributes1619098
! Node: Epiphany Function Attributes1620394
! Node: H8/300 Function Attributes1623149
! Node: IA-64 Function Attributes1624347
! Node: M32C Function Attributes1625389
! Node: M32R/D Function Attributes1627727
! Node: m68k Function Attributes1629201
! Node: MCORE Function Attributes1630145
! Node: MicroBlaze Function Attributes1630963
! Node: Microsoft Windows Function Attributes1632472
! Node: MIPS Function Attributes1637041
! Node: MSP430 Function Attributes1642904
! Node: NDS32 Function Attributes1646983
! Node: Nios II Function Attributes1649407
! Node: Nvidia PTX Function Attributes1650704
! Node: PowerPC Function Attributes1651319
! Node: RISC-V Function Attributes1658093
! Node: RL78 Function Attributes1659509
! Node: RX Function Attributes1660748
! Node: S/390 Function Attributes1663295
! Node: SH Function Attributes1665123
! Node: Symbian OS Function Attributes1668551
! Node: V850 Function Attributes1668887
! Node: Visium Function Attributes1669432
! Node: x86 Function Attributes1669960
! Node: Xstormy16 Function Attributes1694800
! Node: Variable Attributes1695307
! Node: Common Variable Attributes1696846
! Node: ARC Variable Attributes1720142
! Node: AVR Variable Attributes1720524
! Node: Blackfin Variable Attributes1725643
! Node: H8/300 Variable Attributes1726501
! Node: IA-64 Variable Attributes1727574
! Node: LoongArch Variable Attributes1728328
! Node: M32R/D Variable Attributes1729004
! Node: Microsoft Windows Variable Attributes1729805
! Node: MSP430 Variable Attributes1732261
! Node: Nvidia PTX Variable Attributes1733475
! Node: PowerPC Variable Attributes1734092
! Node: RL78 Variable Attributes1734649
! Node: V850 Variable Attributes1735068
! Node: x86 Variable Attributes1735701
! Node: Xstormy16 Variable Attributes1736757
! Node: Type Attributes1737327
! Node: Common Type Attributes1738991
! Node: ARC Type Attributes1761352
! Node: ARM Type Attributes1761824
! Node: BPF Type Attributes1762606
! Node: PowerPC Type Attributes1763127
! Node: x86 Type Attributes1764116
! Node: Label Attributes1765108
! Node: Enumerator Attributes1767135
! Node: Statement Attributes1768667
! Node: Attribute Syntax1770967
! Node: Function Prototypes1782224
! Node: C++ Comments1784004
! Node: Dollar Signs1784523
! Node: Character Escapes1784988
! Node: Alignment1785272
! Node: Inline1786925
! Node: Volatiles1791742
! Node: Using Assembly Language with C1794641
! Node: Basic Asm1795878
! Node: Extended Asm1801501
! Ref: Volatile1805615
! Ref: AssemblerTemplate1809728
! Ref: OutputOperands1813968
! Ref: FlagOutputOperands1821048
! Ref: InputOperands1823995
! Ref: Clobbers and Scratch Registers1828380
! Ref: GotoLabels1837021
! Ref: GenericOperandmodifiers1840644
! Ref: x86Operandmodifiers1841602
! Ref: x86floatingpointasmoperands1846418
! Ref: msp430Operandmodifiers1849749
! Ref: loongarchOperandmodifiers1851407
! Node: Constraints1851941
! Node: Simple Constraints1853047
! Node: Multi-Alternative1860361
! Node: Modifiers1862036
! Node: Machine Constraints1864835
! Node: Asm Labels1918636
! Node: Explicit Register Variables1920252
! Ref: Explicit Reg Vars1920466
! Node: Global Register Variables1921075
! Ref: Global Reg Vars1921283
! Node: Local Register Variables1926065
! Ref: Local Reg Vars1926285
! Node: Size of an asm1929913
! Node: Alternate Keywords1931391
! Node: Incomplete Enums1932896
! Node: Function Names1933653
! Node: Return Address1935557
! Node: Vector Extensions1940144
! Node: Offsetof1951127
! Node: __sync Builtins1951960
! Node: __atomic Builtins1958915
! Node: Integer Overflow Builtins1972428
! Node: x86 specific memory model extensions for transactional memory1978911
! Node: Object Size Checking1980177
! Node: Other Builtins1987686
! Node: Target Builtins2041244
! Node: AArch64 Built-in Functions2042992
! Node: Alpha Built-in Functions2043688
! Node: Altera Nios II Built-in Functions2046782
! Node: ARC Built-in Functions2051221
! Node: ARC SIMD Built-in Functions2056433
! Node: ARM iWMMXt Built-in Functions2065431
! Node: ARM C Language Extensions (ACLE)2072567
! Node: ARM Floating Point Status and Control Intrinsics2073844
! Node: ARM ARMv8-M Security Extensions2074331
! Node: AVR Built-in Functions2075623
! Node: Blackfin Built-in Functions2079389
! Node: BPF Built-in Functions2080009
! Node: FR-V Built-in Functions2084551
! Node: Argument Types2085420
! Node: Directly-mapped Integer Functions2087251
! Node: Directly-mapped Media Functions2088411
! Node: Raw read/write Functions2096693
! Node: Other Built-in Functions2097601
! Node: LoongArch Base Built-in Functions2098787
! Node: MIPS DSP Built-in Functions2104533
! Node: MIPS Paired-Single Support2117298
! Node: MIPS Loongson Built-in Functions2118797
! Node: Paired-Single Arithmetic2125319
! Node: Paired-Single Built-in Functions2126342
! Node: MIPS-3D Built-in Functions2129009
! Node: MIPS SIMD Architecture (MSA) Support2134403
! Node: MIPS SIMD Architecture Built-in Functions2137243
! Node: Other MIPS Built-in Functions2164097
! Node: MSP430 Built-in Functions2165106
! Node: NDS32 Built-in Functions2166507
! Node: Basic PowerPC Built-in Functions2167805
! Node: Basic PowerPC Built-in Functions Available on all Configurations2168660
! Node: Basic PowerPC Built-in Functions Available on ISA 2.052177170
! Node: Basic PowerPC Built-in Functions Available on ISA 2.062182005
! Node: Basic PowerPC Built-in Functions Available on ISA 2.072184085
! Node: Basic PowerPC Built-in Functions Available on ISA 3.02184939
! Node: Basic PowerPC Built-in Functions Available on ISA 3.12192214
! Node: PowerPC AltiVec/VSX Built-in Functions2196131
! Node: PowerPC AltiVec Built-in Functions on ISA 2.052204200
! Node: PowerPC AltiVec Built-in Functions Available on ISA 2.062229600
! Node: PowerPC AltiVec Built-in Functions Available on ISA 2.072236666
! Node: PowerPC AltiVec Built-in Functions Available on ISA 3.02246476
! Node: PowerPC AltiVec Built-in Functions Available on ISA 3.12262199
! Node: PowerPC Hardware Transactional Memory Built-in Functions2295483
! Node: PowerPC Atomic Memory Operation Functions2304033
! Node: PowerPC Matrix-Multiply Assist Built-in Functions2306596
! Node: PRU Built-in Functions2312721
! Node: RISC-V Built-in Functions2314001
! Node: RISC-V Vector Intrinsics2314659
! Node: RX Built-in Functions2315154
! Node: S/390 System z Built-in Functions2319155
! Node: SH Built-in Functions2324424
! Node: SPARC VIS Built-in Functions2326152
! Node: TI C6X Built-in Functions2334683
! Node: x86 Built-in Functions2335730
! Node: x86 transactional memory intrinsics2402145
! Node: x86 control-flow protection intrinsics2405471
! Node: Target Format Checks2407242
! Node: Solaris Format Checks2407674
! Node: Darwin Format Checks2408100
! Node: Pragmas2409063
! Node: AArch64 Pragmas2409988
! Node: ARM Pragmas2410445
! Node: M32C Pragmas2411072
! Node: PRU Pragmas2412144
! Node: RS/6000 and PowerPC Pragmas2412723
! Node: S/390 Pragmas2413463
! Node: Darwin Pragmas2414029
! Node: Solaris Pragmas2415082
! Node: Symbol-Renaming Pragmas2416246
! Node: Structure-Layout Pragmas2417881
! Node: Weak Pragmas2420161
! Node: Diagnostic Pragmas2420896
! Node: Visibility Pragmas2425647
! Node: Push/Pop Macro Pragmas2426332
! Node: Function Specific Option Pragmas2427305
! Node: Loop-Specific Pragmas2429271
! Node: Unnamed Fields2430871
! Node: Thread-Local2433068
! Node: C99 Thread-Local Edits2435174
! Node: C++98 Thread-Local Edits2437172
! Node: Binary constants2440617
! Node: C++ Extensions2441288
! Node: C++ Volatiles2442918
! Node: Restricted Pointers2445266
! Node: Vague Linkage2446857
! Node: C++ Interface2450480
! Ref: C++ Interface-Footnote-12454277
! Node: Template Instantiation2454415
! Node: Bound member functions2460506
! Node: C++ Attributes2462038
! Node: Function Multiversioning2466110
! Node: Type Traits2467918
! Node: C++ Concepts2475640
! Node: Deprecated Features2477183
! Node: Backwards Compatibility2479008
! Node: Objective-C2480080
! Node: GNU Objective-C runtime API2480687
! Node: Modern GNU Objective-C runtime API2481694
! Node: Traditional GNU Objective-C runtime API2484130
! Node: Executing code before main2484857
! Node: What you can and what you cannot do in +load2487601
! Node: Type encoding2489971
! Node: Legacy type encoding2495337
! Node: @encode2496427
! Node: Method signatures2496972
! Node: Garbage Collection2498964
! Node: Constant string objects2501654
! Node: compatibility_alias2504163
! Node: Exceptions2504888
! Node: Synchronization2507598
! Node: Fast enumeration2508782
! Node: Using fast enumeration2509094
! Node: c99-like fast enumeration syntax2510305
! Node: Fast enumeration details2511008
! Node: Fast enumeration protocol2513348
! Node: Messaging with the GNU Objective-C runtime2516500
! Node: Dynamically registering methods2517872
! Node: Forwarding hook2519563
! Node: Compatibility2522603
! Node: Gcov2529159
! Node: Gcov Intro2529827
! Node: Invoking Gcov2532545
! Node: Gcov and Optimization2555278
! Node: Gcov Data Files2559031
! Node: Cross-profiling2560440
! Node: Freestanding Environments2562328
! Node: Gcov-tool2577191
! Node: Gcov-tool Intro2577616
! Node: Invoking Gcov-tool2579970
! Node: Gcov-dump2583383
! Node: Gcov-dump Intro2583706
! Node: Invoking Gcov-dump2583973
! Node: lto-dump2584706
! Node: lto-dump Intro2585005
! Node: Invoking lto-dump2585255
! Node: Trouble2586351
! Node: Actual Bugs2587768
! Node: Interoperation2588215
! Node: Incompatibilities2595106
! Node: Fixed Headers2603258
! Node: Standard Libraries2604916
! Node: Disappointments2606288
! Node: C++ Misunderstandings2610647
! Node: Static Definitions2611458
! Node: Name lookup2612511
! Ref: Name lookup-Footnote-12617292
! Node: Temporaries2617481
! Node: Copy Assignment2619457
! Node: Non-bugs2621292
! Node: Warnings and Errors2631798
! Node: Bugs2633560
! Node: Bug Criteria2634027
! Node: Bug Reporting2636237
! Node: Service2636455
! Node: Contributing2637276
! Node: Funding2638022
! Node: GNU Project2640512
! Node: Copying2641160
! Node: GNU Free Documentation License2678674
! Node: Contributors2703797
! Node: Indices2744872
! Node: Option Index2745118
! Node: Concept and Symbol Index3051829
  
  End Tag Table
  
--- 72226,72642 ----
  Node: Optimize Options467342
  Ref: Type-punning539895
  Node: Instrumentation Options662783
! Node: Preprocessor Options714798
! Ref: dashMF719645
! Ref: fdollars-in-identifiers724307
! Node: Assembler Options737657
! Node: Link Options738348
! Ref: Link Options-Footnote-1755380
! Node: Directory Options755894
! Node: Code Gen Options764297
! Node: Developer Options793170
! Node: Submodel Options838685
! Node: AArch64 Options840405
! Ref: aarch64-feature-modifiers856226
! Node: Adapteva Epiphany Options861898
! Node: AMD GCN Options867850
! Node: ARC Options869579
! Node: ARM Options890583
! Node: AVR Options935346
! Node: Blackfin Options964060
! Node: C6X Options971952
! Node: CRIS Options973495
! Node: C-SKY Options976682
! Node: Darwin Options982409
! Node: DEC Alpha Options990189
! Node: eBPF Options1001805
! Node: FR30 Options1004181
! Node: FT32 Options1004741
! Node: FRV Options1005687
! Node: GNU/Linux Options1012451
! Node: H8/300 Options1013832
! Node: HPPA Options1015284
! Node: IA-64 Options1025929
! Node: LM32 Options1034057
! Node: LoongArch Options1034585
! Node: M32C Options1042231
! Node: M32R/D Options1043509
! Node: M680x0 Options1047054
! Node: MCore Options1061209
! Node: MicroBlaze Options1062718
! Node: MIPS Options1065785
! Node: MMIX Options1102761
! Node: MN10300 Options1105238
! Node: Moxie Options1107781
! Node: MSP430 Options1108268
! Node: NDS32 Options1116029
! Node: Nios II Options1118199
! Node: Nvidia PTX Options1131415
! Node: OpenRISC Options1134949
! Node: PDP-11 Options1137703
! Node: PowerPC Options1138951
! Node: PRU Options1139169
! Node: RISC-V Options1141378
! Node: RL78 Options1150115
! Node: RS/6000 and PowerPC Options1153890
! Node: RX Options1195733
! Node: S/390 and zSeries Options1204335
! Node: SH Options1215132
! Node: Solaris 2 Options1230284
! Node: SPARC Options1231522
! Node: System V Options1247174
! Node: V850 Options1247999
! Node: VAX Options1254687
! Node: Visium Options1255379
! Node: VMS Options1257687
! Node: VxWorks Options1258503
! Node: x86 Options1259655
! Node: x86 Windows Options1334619
! Node: Xstormy16 Options1337425
! Node: Xtensa Options1337719
! Node: zSeries Options1344211
! Node: Spec Files1344407
! Node: Environment Variables1370486
! Node: Precompiled Headers1379919
! Node: C++ Modules1386128
! Ref: C++ Modules-Footnote-11391791
! Node: C++ Module Mapper1392044
! Node: C++ Module Preprocessing1397197
! Node: C++ Compiled Module Interface1399026
! Ref: C++ Compiled Module Interface-Footnote-11402410
! Ref: C++ Compiled Module Interface-Footnote-21402499
! Node: C Implementation1402555
! Node: Translation implementation1404246
! Node: Environment implementation1404837
! Node: Identifiers implementation1405391
! Node: Characters implementation1406477
! Node: Integers implementation1410127
! Node: Floating point implementation1412176
! Node: Arrays and pointers implementation1415276
! Ref: Arrays and pointers implementation-Footnote-11416736
! Node: Hints implementation1416862
! Node: Structures unions enumerations and bit-fields implementation1418357
! Node: Qualifiers implementation1420581
! Node: Declarators implementation1422642
! Node: Statements implementation1422983
! Node: Preprocessing directives implementation1423309
! Node: Library functions implementation1425630
! Node: Architecture implementation1426279
! Node: Locale-specific behavior implementation1427924
! Node: C++ Implementation1428229
! Node: Conditionally-supported behavior1429513
! Node: Exception handling1430130
! Node: C Extensions1430538
! Node: Statement Exprs1435761
! Node: Local Labels1441133
! Node: Labels as Values1444106
! Ref: Labels as Values-Footnote-11446633
! Node: Nested Functions1446818
! Node: Nonlocal Gotos1450772
! Node: Constructing Calls1453038
! Node: Typeof1457750
! Node: Conditionals1461679
! Node: __int1281462568
! Node: Long Long1463093
! Node: Complex1464584
! Node: Floating Types1469329
! Node: Half-Precision1472800
! Node: Decimal Float1476268
! Node: Hex Floats1478122
! Node: Fixed-Point1479196
! Node: Named Address Spaces1482454
! Ref: AVR Named Address Spaces1483140
! Node: Zero Length1490439
! Node: Empty Structures1494620
! Node: Variable Length1495026
! Node: Variadic Macros1497744
! Node: Escaped Newlines1500122
! Node: Subscripting1500983
! Node: Pointer Arith1501708
! Node: Variadic Pointer Args1502285
! Node: Pointers to Arrays1503010
! Node: Initializers1503763
! Node: Compound Literals1504264
! Node: Designated Inits1507831
! Node: Case Ranges1511755
! Node: Cast to Union1512436
! Node: Mixed Labels and Declarations1514170
! Node: Function Attributes1514807
! Node: Common Function Attributes1519261
! Ref: Common Function Attributes-Footnote-11597773
! Node: AArch64 Function Attributes1598090
! Node: AMD GCN Function Attributes1604284
! Node: ARC Function Attributes1607337
! Node: ARM Function Attributes1610274
! Node: AVR Function Attributes1615413
! Node: Blackfin Function Attributes1619948
! Node: BPF Function Attributes1622445
! Node: C-SKY Function Attributes1623034
! Node: Epiphany Function Attributes1624330
! Node: H8/300 Function Attributes1627085
! Node: IA-64 Function Attributes1628283
! Node: M32C Function Attributes1629325
! Node: M32R/D Function Attributes1631663
! Node: m68k Function Attributes1633137
! Node: MCORE Function Attributes1634081
! Node: MicroBlaze Function Attributes1634899
! Node: Microsoft Windows Function Attributes1636408
! Node: MIPS Function Attributes1640977
! Node: MSP430 Function Attributes1646840
! Node: NDS32 Function Attributes1650919
! Node: Nios II Function Attributes1653343
! Node: Nvidia PTX Function Attributes1654640
! Node: PowerPC Function Attributes1655255
! Node: RISC-V Function Attributes1662029
! Node: RL78 Function Attributes1663445
! Node: RX Function Attributes1664684
! Node: S/390 Function Attributes1667231
! Node: SH Function Attributes1669059
! Node: Symbian OS Function Attributes1672487
! Node: V850 Function Attributes1672823
! Node: Visium Function Attributes1673368
! Node: x86 Function Attributes1673896
! Node: Xstormy16 Function Attributes1698736
! Node: Variable Attributes1699243
! Node: Common Variable Attributes1700782
! Node: ARC Variable Attributes1724076
! Node: AVR Variable Attributes1724458
! Node: Blackfin Variable Attributes1729577
! Node: H8/300 Variable Attributes1730435
! Node: IA-64 Variable Attributes1731508
! Node: LoongArch Variable Attributes1732262
! Node: M32R/D Variable Attributes1732938
! Node: Microsoft Windows Variable Attributes1733739
! Node: MSP430 Variable Attributes1736195
! Node: Nvidia PTX Variable Attributes1737409
! Node: PowerPC Variable Attributes1738026
! Node: RL78 Variable Attributes1738583
! Node: V850 Variable Attributes1739002
! Node: x86 Variable Attributes1739635
! Node: Xstormy16 Variable Attributes1740691
! Node: Type Attributes1741261
! Node: Common Type Attributes1742925
! Node: ARC Type Attributes1765286
! Node: ARM Type Attributes1765758
! Node: BPF Type Attributes1766540
! Node: PowerPC Type Attributes1767061
! Node: x86 Type Attributes1768050
! Node: Label Attributes1769042
! Node: Enumerator Attributes1771069
! Node: Statement Attributes1772601
! Node: Attribute Syntax1774901
! Node: Function Prototypes1786158
! Node: C++ Comments1787938
! Node: Dollar Signs1788457
! Node: Character Escapes1788922
! Node: Alignment1789206
! Node: Inline1790859
! Node: Volatiles1795676
! Node: Using Assembly Language with C1798575
! Node: Basic Asm1799812
! Node: Extended Asm1805435
! Ref: Volatile1809549
! Ref: AssemblerTemplate1813662
! Ref: OutputOperands1817902
! Ref: FlagOutputOperands1824982
! Ref: InputOperands1827929
! Ref: Clobbers and Scratch Registers1832314
! Ref: GotoLabels1840955
! Ref: GenericOperandmodifiers1844578
! Ref: x86Operandmodifiers1845536
! Ref: x86floatingpointasmoperands1850352
! Ref: msp430Operandmodifiers1853683
! Ref: loongarchOperandmodifiers1855341
! Node: Constraints1855875
! Node: Simple Constraints1856981
! Node: Multi-Alternative1864295
! Node: Modifiers1865970
! Node: Machine Constraints1868769
! Node: Asm Labels1922570
! Node: Explicit Register Variables1924186
! Ref: Explicit Reg Vars1924400
! Node: Global Register Variables1925009
! Ref: Global Reg Vars1925217
! Node: Local Register Variables1929999
! Ref: Local Reg Vars1930219
! Node: Size of an asm1933847
! Node: Alternate Keywords1935325
! Node: Incomplete Enums1936830
! Node: Function Names1937587
! Node: Return Address1939491
! Node: Vector Extensions1944078
! Node: Offsetof1955061
! Node: __sync Builtins1955894
! Node: __atomic Builtins1962823
! Node: Integer Overflow Builtins1976336
! Node: x86 specific memory model extensions for transactional memory1982819
! Node: Object Size Checking1984085
! Node: Other Builtins1991594
! Node: Target Builtins2045152
! Node: AArch64 Built-in Functions2046900
! Node: Alpha Built-in Functions2047596
! Node: Altera Nios II Built-in Functions2050690
! Node: ARC Built-in Functions2055129
! Node: ARC SIMD Built-in Functions2060341
! Node: ARM iWMMXt Built-in Functions2069339
! Node: ARM C Language Extensions (ACLE)2076475
! Node: ARM Floating Point Status and Control Intrinsics2077752
! Node: ARM ARMv8-M Security Extensions2078239
! Node: AVR Built-in Functions2079531
! Node: Blackfin Built-in Functions2083297
! Node: BPF Built-in Functions2083917
! Node: FR-V Built-in Functions2088459
! Node: Argument Types2089328
! Node: Directly-mapped Integer Functions2091159
! Node: Directly-mapped Media Functions2092319
! Node: Raw read/write Functions2100601
! Node: Other Built-in Functions2101509
! Node: LoongArch Base Built-in Functions2102695
! Node: MIPS DSP Built-in Functions2108441
! Node: MIPS Paired-Single Support2121206
! Node: MIPS Loongson Built-in Functions2122705
! Node: Paired-Single Arithmetic2129227
! Node: Paired-Single Built-in Functions2130250
! Node: MIPS-3D Built-in Functions2132917
! Node: MIPS SIMD Architecture (MSA) Support2138311
! Node: MIPS SIMD Architecture Built-in Functions2141151
! Node: Other MIPS Built-in Functions2168005
! Node: MSP430 Built-in Functions2169014
! Node: NDS32 Built-in Functions2170415
! Node: Basic PowerPC Built-in Functions2171713
! Node: Basic PowerPC Built-in Functions Available on all Configurations2172568
! Node: Basic PowerPC Built-in Functions Available on ISA 2.052181078
! Node: Basic PowerPC Built-in Functions Available on ISA 2.062185913
! Node: Basic PowerPC Built-in Functions Available on ISA 2.072187993
! Node: Basic PowerPC Built-in Functions Available on ISA 3.02188847
! Node: Basic PowerPC Built-in Functions Available on ISA 3.12196122
! Node: PowerPC AltiVec/VSX Built-in Functions2200039
! Node: PowerPC AltiVec Built-in Functions on ISA 2.052208108
! Node: PowerPC AltiVec Built-in Functions Available on ISA 2.062233508
! Node: PowerPC AltiVec Built-in Functions Available on ISA 2.072240574
! Node: PowerPC AltiVec Built-in Functions Available on ISA 3.02250384
! Node: PowerPC AltiVec Built-in Functions Available on ISA 3.12266107
! Node: PowerPC Hardware Transactional Memory Built-in Functions2299391
! Node: PowerPC Atomic Memory Operation Functions2307941
! Node: PowerPC Matrix-Multiply Assist Built-in Functions2310504
! Node: PRU Built-in Functions2316629
! Node: RISC-V Built-in Functions2317909
! Node: RISC-V Vector Intrinsics2318567
! Node: RX Built-in Functions2319062
! Node: S/390 System z Built-in Functions2323063
! Node: SH Built-in Functions2328332
! Node: SPARC VIS Built-in Functions2330060
! Node: TI C6X Built-in Functions2338591
! Node: x86 Built-in Functions2339638
! Node: x86 transactional memory intrinsics2406108
! Node: x86 control-flow protection intrinsics2409434
! Node: Target Format Checks2411205
! Node: Solaris Format Checks2411637
! Node: Darwin Format Checks2412063
! Node: Pragmas2413026
! Node: AArch64 Pragmas2413951
! Node: ARM Pragmas2414408
! Node: M32C Pragmas2415035
! Node: PRU Pragmas2416107
! Node: RS/6000 and PowerPC Pragmas2416686
! Node: S/390 Pragmas2417426
! Node: Darwin Pragmas2417992
! Node: Solaris Pragmas2419045
! Node: Symbol-Renaming Pragmas2420209
! Node: Structure-Layout Pragmas2421844
! Node: Weak Pragmas2424124
! Node: Diagnostic Pragmas2424859
! Node: Visibility Pragmas2429610
! Node: Push/Pop Macro Pragmas2430295
! Node: Function Specific Option Pragmas2431268
! Node: Loop-Specific Pragmas2433234
! Node: Unnamed Fields2434834
! Node: Thread-Local2437031
! Node: C99 Thread-Local Edits2439137
! Node: C++98 Thread-Local Edits2441135
! Node: Binary constants2444580
! Node: C++ Extensions2445251
! Node: C++ Volatiles2446881
! Node: Restricted Pointers2449229
! Node: Vague Linkage2450820
! Node: C++ Interface2454443
! Ref: C++ Interface-Footnote-12458240
! Node: Template Instantiation2458378
! Node: Bound member functions2464469
! Node: C++ Attributes2466001
! Node: Function Multiversioning2470073
! Node: Type Traits2471881
! Node: C++ Concepts2479603
! Node: Deprecated Features2481146
! Node: Backwards Compatibility2482971
! Node: Objective-C2484043
! Node: GNU Objective-C runtime API2484650
! Node: Modern GNU Objective-C runtime API2485657
! Node: Traditional GNU Objective-C runtime API2488093
! Node: Executing code before main2488820
! Node: What you can and what you cannot do in +load2491564
! Node: Type encoding2493934
! Node: Legacy type encoding2499300
! Node: @encode2500390
! Node: Method signatures2500935
! Node: Garbage Collection2502927
! Node: Constant string objects2505617
! Node: compatibility_alias2508126
! Node: Exceptions2508851
! Node: Synchronization2511561
! Node: Fast enumeration2512745
! Node: Using fast enumeration2513057
! Node: c99-like fast enumeration syntax2514268
! Node: Fast enumeration details2514971
! Node: Fast enumeration protocol2517311
! Node: Messaging with the GNU Objective-C runtime2520463
! Node: Dynamically registering methods2521835
! Node: Forwarding hook2523526
! Node: Compatibility2526566
! Node: Gcov2533122
! Node: Gcov Intro2533790
! Node: Invoking Gcov2536508
! Node: Gcov and Optimization2559241
! Node: Gcov Data Files2562994
! Node: Cross-profiling2564403
! Node: Freestanding Environments2566291
! Node: Gcov-tool2581154
! Node: Gcov-tool Intro2581579
! Node: Invoking Gcov-tool2583933
! Node: Gcov-dump2587346
! Node: Gcov-dump Intro2587669
! Node: Invoking Gcov-dump2587936
! Node: lto-dump2588669
! Node: lto-dump Intro2588968
! Node: Invoking lto-dump2589218
! Node: Trouble2590314
! Node: Actual Bugs2591731
! Node: Interoperation2592178
! Node: Incompatibilities2599069
! Node: Fixed Headers2607221
! Node: Standard Libraries2608879
! Node: Disappointments2610251
! Node: C++ Misunderstandings2614610
! Node: Static Definitions2615421
! Node: Name lookup2616474
! Ref: Name lookup-Footnote-12621255
! Node: Temporaries2621444
! Node: Copy Assignment2623420
! Node: Non-bugs2625255
! Node: Warnings and Errors2635761
! Node: Bugs2637523
! Node: Bug Criteria2637990
! Node: Bug Reporting2640200
! Node: Service2640418
! Node: Contributing2641239
! Node: Funding2641985
! Node: GNU Project2644475
! Node: Copying2645123
! Node: GNU Free Documentation License2682637
! Node: Contributors2707760
! Node: Indices2748835
! Node: Option Index2749081
! Node: Concept and Symbol Index3055865
  
  End Tag Table
  
diff -Nrcpad gcc-13.3.0/gcc/doc/gccgo.1 gcc-13.4.0/gcc/doc/gccgo.1
*** gcc-13.3.0/gcc/doc/gccgo.1	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/doc/gccgo.1	Thu Jun  5 16:30:33 2025
***************
*** 0 ****
--- 1,320 ----
+ .\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.43)
+ .\"
+ .\" Standard preamble:
+ .\" ========================================================================
+ .de Sp \" Vertical space (when we can't use .PP)
+ .if t .sp .5v
+ .if n .sp
+ ..
+ .de Vb \" Begin verbatim text
+ .ft CW
+ .nf
+ .ne \\$1
+ ..
+ .de Ve \" End verbatim text
+ .ft R
+ .fi
+ ..
+ .\" Set up some character translations and predefined strings.  \*(-- will
+ .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+ .\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+ .\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+ .\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+ .\" nothing in troff, for use with C<>.
+ .tr \(*W-
+ .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+ .ie n \{\
+ .    ds -- \(*W-
+ .    ds PI pi
+ .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+ .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+ .    ds L" ""
+ .    ds R" ""
+ .    ds C` ""
+ .    ds C' ""
+ 'br\}
+ .el\{\
+ .    ds -- \|\(em\|
+ .    ds PI \(*p
+ .    ds L" ``
+ .    ds R" ''
+ .    ds C`
+ .    ds C'
+ 'br\}
+ .\"
+ .\" Escape single quotes in literal strings from groff's Unicode transform.
+ .ie \n(.g .ds Aq \(aq
+ .el       .ds Aq '
+ .\"
+ .\" If the F register is >0, we'll generate index entries on stderr for
+ .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+ .\" entries marked with X<> in POD.  Of course, you'll have to process the
+ .\" output yourself in some meaningful fashion.
+ .\"
+ .\" Avoid warning from groff about undefined register 'F'.
+ .de IX
+ ..
+ .nr rF 0
+ .if \n(.g .if rF .nr rF 1
+ .if (\n(rF:(\n(.g==0)) \{\
+ .    if \nF \{\
+ .        de IX
+ .        tm Index:\\$1\t\\n%\t"\\$2"
+ ..
+ .        if !\nF==2 \{\
+ .            nr % 0
+ .            nr F 2
+ .        \}
+ .    \}
+ .\}
+ .rr rF
+ .\"
+ .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+ .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+ .    \" fudge factors for nroff and troff
+ .if n \{\
+ .    ds #H 0
+ .    ds #V .8m
+ .    ds #F .3m
+ .    ds #[ \f1
+ .    ds #] \fP
+ .\}
+ .if t \{\
+ .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+ .    ds #V .6m
+ .    ds #F 0
+ .    ds #[ \&
+ .    ds #] \&
+ .\}
+ .    \" simple accents for nroff and troff
+ .if n \{\
+ .    ds ' \&
+ .    ds ` \&
+ .    ds ^ \&
+ .    ds , \&
+ .    ds ~ ~
+ .    ds /
+ .\}
+ .if t \{\
+ .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+ .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+ .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+ .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+ .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+ .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+ .\}
+ .    \" troff and (daisy-wheel) nroff accents
+ .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+ .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+ .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+ .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+ .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+ .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+ .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+ .ds ae a\h'-(\w'a'u*4/10)'e
+ .ds Ae A\h'-(\w'A'u*4/10)'E
+ .    \" corrections for vroff
+ .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+ .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+ .    \" for low resolution devices (crt and lpr)
+ .if \n(.H>23 .if \n(.V>19 \
+ \{\
+ .    ds : e
+ .    ds 8 ss
+ .    ds o a
+ .    ds d- d\h'-1'\(ga
+ .    ds D- D\h'-1'\(hy
+ .    ds th \o'bp'
+ .    ds Th \o'LP'
+ .    ds ae ae
+ .    ds Ae AE
+ .\}
+ .rm #[ #] #H #V #F C
+ .\" ========================================================================
+ .\"
+ .IX Title "GCCGO 1"
+ .TH GCCGO 1 "2025-06-05" "gcc-13.4.0" "GNU"
+ .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+ .\" way too many mistakes in technical documents.
+ .if n .ad l
+ .nh
+ .SH "NAME"
+ gccgo \- A GCC\-based compiler for the Go language
+ .SH "SYNOPSIS"
+ .IX Header "SYNOPSIS"
+ gccgo [\fB\-c\fR|\fB\-S\fR]
+       [\fB\-g\fR] [\fB\-pg\fR] [\fB\-O\fR\fIlevel\fR]
+       [\fB\-I\fR\fIdir\fR...] [\fB\-L\fR\fIdir\fR...]
+       [\fB\-o\fR \fIoutfile\fR] \fIinfile\fR...
+ .PP
+ Only the most useful options are listed here; see below for the
+ remainder.
+ .SH "DESCRIPTION"
+ .IX Header "DESCRIPTION"
+ The \fBgccgo\fR command is a frontend to \fBgcc\fR and
+ supports many of the same options.    This manual
+ only documents the options specific to \fBgccgo\fR.
+ .PP
+ The \fBgccgo\fR command may be used to compile Go source code into
+ an object file, link a collection of object files together, or do both
+ in sequence.
+ .PP
+ Go source code is compiled as packages.  A package consists of one or
+ more Go source files.  All the files in a single package must be
+ compiled together, by passing all the files as arguments to
+ \&\fBgccgo\fR.  A single invocation of \fBgccgo\fR may only
+ compile a single package.
+ .PP
+ One Go package may \f(CW\*(C`import\*(C'\fR a different Go package.  The imported
+ package must have already been compiled; \fBgccgo\fR will read
+ the import data directly from the compiled package.  When this package
+ is later linked, the compiled form of the package must be included in
+ the link command.
+ .PP
+ Go programs must generally be compiled with debugging information, and
+ \&\fB\-g1\fR is the default as described below.  Stripping a Go
+ program will generally cause it to misbehave or fail.
+ .SH "OPTIONS"
+ .IX Header "OPTIONS"
+ .IP "\fB\-I\fR\fIdir\fR" 4
+ .IX Item "-Idir"
+ Specify a directory to use when searching for an import package at
+ compile time.
+ .IP "\fB\-L\fR\fIdir\fR" 4
+ .IX Item "-Ldir"
+ When linking, specify a library search directory, as with
+ \&\fBgcc\fR.
+ .IP "\fB\-fgo\-pkgpath=\fR\fIstring\fR" 4
+ .IX Item "-fgo-pkgpath=string"
+ Set the package path to use.  This sets the value returned by the
+ PkgPath method of reflect.Type objects.  It is also used for the names
+ of globally visible symbols.  The argument to this option should
+ normally be the string that will be used to import this package after
+ it has been installed; in other words, a pathname within the
+ directories specified by the \fB\-I\fR option.
+ .IP "\fB\-fgo\-prefix=\fR\fIstring\fR" 4
+ .IX Item "-fgo-prefix=string"
+ An alternative to \fB\-fgo\-pkgpath\fR.  The argument will be
+ combined with the package name from the source file to produce the
+ package path.  If \fB\-fgo\-pkgpath\fR is used, \fB\-fgo\-prefix\fR
+ will be ignored.
+ .Sp
+ Go permits a single program to include more than one package with the
+ same name in the \f(CW\*(C`package\*(C'\fR clause in the source file, though
+ obviously the two packages must be imported using different pathnames.
+ In order for this to work with \fBgccgo\fR, either
+ \&\fB\-fgo\-pkgpath\fR or \fB\-fgo\-prefix\fR must be specified when
+ compiling a package.
+ .Sp
+ Using either \fB\-fgo\-pkgpath\fR or \fB\-fgo\-prefix\fR disables
+ the special treatment of the \f(CW\*(C`main\*(C'\fR package and permits that
+ package to be imported like any other.
+ .IP "\fB\-fgo\-relative\-import\-path=\fR\fIdir\fR" 4
+ .IX Item "-fgo-relative-import-path=dir"
+ A relative import is an import that starts with \fI./\fR or
+ \&\fI../\fR.  If this option is used, \fBgccgo\fR will use
+ \&\fIdir\fR as a prefix for the relative import when searching for it.
+ .IP "\fB\-frequire\-return\-statement\fR" 4
+ .IX Item "-frequire-return-statement"
+ .PD 0
+ .IP "\fB\-fno\-require\-return\-statement\fR" 4
+ .IX Item "-fno-require-return-statement"
+ .PD
+ By default \fBgccgo\fR will warn about functions which have one or
+ more return parameters but lack an explicit \f(CW\*(C`return\*(C'\fR statement.
+ This warning may be disabled using
+ \&\fB\-fno\-require\-return\-statement\fR.
+ .IP "\fB\-fgo\-check\-divide\-zero\fR" 4
+ .IX Item "-fgo-check-divide-zero"
+ Add explicit checks for division by zero.  In Go a division (or
+ modulos) by zero causes a panic.  On Unix systems this is detected in
+ the runtime by catching the \f(CW\*(C`SIGFPE\*(C'\fR signal.  Some processors,
+ such as PowerPC, do not generate a \s-1SIGFPE\s0 on division by zero.  Some
+ runtimes do not generate a signal that can be caught.  On those
+ systems, this option may be used.  Or the checks may be removed via
+ \&\fB\-fno\-go\-check\-divide\-zero\fR.  This option is currently on by
+ default, but in the future may be off by default on systems that do
+ not require it.
+ .IP "\fB\-fgo\-check\-divide\-overflow\fR" 4
+ .IX Item "-fgo-check-divide-overflow"
+ Add explicit checks for division overflow.  For example, division
+ overflow occurs when computing \f(CW\*(C`INT_MIN / \-1\*(C'\fR.  In Go this should
+ be wrapped, to produce \f(CW\*(C`INT_MIN\*(C'\fR.  Some processors, such as x86,
+ generate a trap on division overflow.  On those systems, this option
+ may be used.  Or the checks may be removed via
+ \&\fB\-fno\-go\-check\-divide\-overflow\fR.  This option is currently on
+ by default, but in the future may be off by default on systems that do
+ not require it.
+ .IP "\fB\-fno\-go\-optimize\-allocs\fR" 4
+ .IX Item "-fno-go-optimize-allocs"
+ Disable escape analysis, which tries to allocate objects on the stack
+ rather than the heap.
+ .IP "\fB\-fgo\-debug\-escape\fR\fIn\fR" 4
+ .IX Item "-fgo-debug-escapen"
+ Output escape analysis debugging information.  Larger values of
+ \&\fIn\fR generate more information.
+ .IP "\fB\-fgo\-debug\-escape\-hash=\fR\fIn\fR" 4
+ .IX Item "-fgo-debug-escape-hash=n"
+ A hash value to debug escape analysis.  \fIn\fR is a binary string.
+ This runs escape analysis only on functions whose names hash to values
+ that match the given suffix \fIn\fR.  This can be used to binary
+ search across functions to uncover escape analysis bugs.
+ .IP "\fB\-fgo\-debug\-optimization\fR" 4
+ .IX Item "-fgo-debug-optimization"
+ Output optimization diagnostics.
+ .IP "\fB\-fgo\-c\-header=\fR\fIfile\fR" 4
+ .IX Item "-fgo-c-header=file"
+ Write top-level named Go struct definitions to \fIfile\fR as C code.
+ This is used when compiling the runtime package.
+ .IP "\fB\-fgo\-compiling\-runtime\fR" 4
+ .IX Item "-fgo-compiling-runtime"
+ Apply special rules for compiling the runtime package.  Implicit
+ memory allocation is forbidden.  Some additional compiler directives
+ are supported.
+ .IP "\fB\-fgo\-embedcfg=\fR\fIfile\fR" 4
+ .IX Item "-fgo-embedcfg=file"
+ Identify a \s-1JSON\s0 file used to map patterns used with special
+ \&\f(CW\*(C`//go:embed\*(C'\fR comments to the files named by the patterns.  The
+ \&\s-1JSON\s0 file should have two components: \f(CW\*(C`Patterns\*(C'\fR maps each
+ pattern to a list of file names, and \f(CW\*(C`Files\*(C'\fR maps each file name
+ to a full path to the file.  This option is intended for use by the
+ \&\fBgo\fR command to implement \f(CW\*(C`//go:embed\*(C'\fR.
+ .IP "\fB\-g\fR" 4
+ .IX Item "-g"
+ This is the standard \fBgcc\fR option.  It
+ is mentioned here because by default \fBgccgo\fR turns on
+ debugging information generation with the equivalent of the standard
+ option \fB\-g1\fR.  This is because Go programs require debugging
+ information to be available in order to get backtrace information.  An
+ explicit \fB\-g0\fR may be used to disable the generation of
+ debugging information, in which case certain standard library
+ functions, such as \f(CW\*(C`runtime.Callers\*(C'\fR, will not operate correctly.
+ .SH "SEE ALSO"
+ .IX Header "SEE ALSO"
+ \&\fBgpl\fR\|(7), \fBgfdl\fR\|(7), \fBfsf\-funding\fR\|(7), \fBgcc\fR\|(1)
+ and the Info entries for \fIgccgo\fR and \fIgcc\fR.
+ .SH "COPYRIGHT"
+ .IX Header "COPYRIGHT"
+ Copyright (c) 2010\-2023 Free Software Foundation, Inc.
+ .PP
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or
+ any later version published by the Free Software Foundation; with no
+ Invariant Sections, the Front-Cover Texts being (a) (see below), and
+ with the Back-Cover Texts being (b) (see below).
+ A copy of the license is included in the
+ man page \fBgfdl\fR\|(7).
+ .PP
+ (a) The \s-1FSF\s0's Front-Cover Text is:
+ .PP
+ .Vb 1
+ \&     A GNU Manual
+ .Ve
+ .PP
+ (b) The \s-1FSF\s0's Back-Cover Text is:
+ .PP
+ .Vb 3
+ \&     You have freedom to copy and modify this GNU Manual, like GNU
+ \&     software.  Copies published by the Free Software Foundation raise
+ \&     funds for GNU development.
+ .Ve
diff -Nrcpad gcc-13.3.0/gcc/doc/gccgo.info gcc-13.4.0/gcc/doc/gccgo.info
*** gcc-13.3.0/gcc/doc/gccgo.info	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/doc/gccgo.info	Thu Jun  5 16:30:33 2025
***************
*** 0 ****
--- 1,1673 ----
+ This is gccgo.info, produced by makeinfo version 6.8 from gccgo.texi.
+ 
+ Copyright (C) 2010-2023 Free Software Foundation, Inc.
+ 
+    Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3 or
+ any later version published by the Free Software Foundation; with no
+ Invariant Sections, the Front-Cover Texts being (a) (see below), and
+ with the Back-Cover Texts being (b) (see below).  A copy of the license
+ is included in the section entitled "GNU Free Documentation License".
+ 
+    (a) The FSF's Front-Cover Text is:
+ 
+    A GNU Manual
+ 
+    (b) The FSF's Back-Cover Text is:
+ 
+    You have freedom to copy and modify this GNU Manual, like GNU
+ software.  Copies published by the Free Software Foundation raise funds
+ for GNU development.
+ INFO-DIR-SECTION Software development
+ START-INFO-DIR-ENTRY
+ * Gccgo: (gccgo).           A GCC-based compiler for the Go language
+ END-INFO-DIR-ENTRY
+ 
+ 
+    Copyright (C) 2010-2023 Free Software Foundation, Inc.
+ 
+    Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3 or
+ any later version published by the Free Software Foundation; with no
+ Invariant Sections, the Front-Cover Texts being (a) (see below), and
+ with the Back-Cover Texts being (b) (see below).  A copy of the license
+ is included in the section entitled "GNU Free Documentation License".
+ 
+    (a) The FSF's Front-Cover Text is:
+ 
+    A GNU Manual
+ 
+    (b) The FSF's Back-Cover Text is:
+ 
+    You have freedom to copy and modify this GNU Manual, like GNU
+ software.  Copies published by the Free Software Foundation raise funds
+ for GNU development.
+ 
+ 
+ File: gccgo.info,  Node: Top,  Next: Copying,  Up: (dir)
+ 
+ Introduction
+ ************
+ 
+ This manual describes how to use 'gccgo', the GNU compiler for the Go
+ programming language.  This manual is specifically about 'gccgo'.  For
+ more information about the Go programming language in general, including
+ language specifications and standard package documentation, see
+ <https://golang.org/>.
+ 
+ * Menu:
+ 
+ * Copying::                     The GNU General Public License.
+ * GNU Free Documentation License::
+                                 How you can share and copy this manual.
+ * Invoking gccgo::              How to run gccgo.
+ * Import and Export::           Importing and exporting package data.
+ * Compiler Directives::         Comments to control compilation.
+ * C Interoperability::          Calling C from Go and vice-versa.
+ * Index::                       Index.
+ 
+ 
+ File: gccgo.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: Top,  Up: Top
+ 
+ GNU General Public License
+ **************************
+ 
+                         Version 3, 29 June 2007
+ 
+      Copyright (C) 2007 Free Software Foundation, Inc. <https://www.fsf.org>
+ 
+      Everyone is permitted to copy and distribute verbatim copies of this
+      license document, but changing it is not allowed.
+ 
+ Preamble
+ ========
+ 
+ The GNU General Public License is a free, copyleft license for software
+ and other kinds of works.
+ 
+    The licenses for most software and other practical works are designed
+ to take away your freedom to share and change the works.  By contrast,
+ the GNU General Public License is intended to guarantee your freedom to
+ share and change all versions of a program-to make sure it remains free
+ software for all its users.  We, the Free Software Foundation, use the
+ GNU General Public License for most of our software; it applies also to
+ any other work released this way by its authors.  You can apply it to
+ your programs, too.
+ 
+    When we speak of free software, we are referring to freedom, not
+ price.  Our General Public Licenses are designed to make sure that you
+ have the freedom to distribute copies of free software (and charge for
+ them if you wish), that you receive source code or can get it if you
+ want it, that you can change the software or use pieces of it in new
+ free programs, and that you know you can do these things.
+ 
+    To protect your rights, we need to prevent others from denying you
+ these rights or asking you to surrender the rights.  Therefore, you have
+ certain responsibilities if you distribute copies of the software, or if
+ you modify it: responsibilities to respect the freedom of others.
+ 
+    For example, if you distribute copies of such a program, whether
+ gratis or for a fee, you must pass on to the recipients the same
+ freedoms that you received.  You must make sure that they, too, receive
+ or can get the source code.  And you must show them these terms so they
+ know their rights.
+ 
+    Developers that use the GNU GPL protect your rights with two steps:
+ (1) assert copyright on the software, and (2) offer you this License
+ giving you legal permission to copy, distribute and/or modify it.
+ 
+    For the developers' and authors' protection, the GPL clearly explains
+ that there is no warranty for this free software.  For both users' and
+ authors' sake, the GPL requires that modified versions be marked as
+ changed, so that their problems will not be attributed erroneously to
+ authors of previous versions.
+ 
+    Some devices are designed to deny users access to install or run
+ modified versions of the software inside them, although the manufacturer
+ can do so.  This is fundamentally incompatible with the aim of
+ protecting users' freedom to change the software.  The systematic
+ pattern of such abuse occurs in the area of products for individuals to
+ use, which is precisely where it is most unacceptable.  Therefore, we
+ have designed this version of the GPL to prohibit the practice for those
+ products.  If such problems arise substantially in other domains, we
+ stand ready to extend this provision to those domains in future versions
+ of the GPL, as needed to protect the freedom of users.
+ 
+    Finally, every program is threatened constantly by software patents.
+ States should not allow patents to restrict development and use of
+ software on general-purpose computers, but in those that do, we wish to
+ avoid the special danger that patents applied to a free program could
+ make it effectively proprietary.  To prevent this, the GPL assures that
+ patents cannot be used to render the program non-free.
+ 
+    The precise terms and conditions for copying, distribution and
+ modification follow.
+ 
+ TERMS AND CONDITIONS
+ ====================
+ 
+   0. Definitions.
+ 
+      "This License" refers to version 3 of the GNU General Public
+      License.
+ 
+      "Copyright" also means copyright-like laws that apply to other
+      kinds of works, such as semiconductor masks.
+ 
+      "The Program" refers to any copyrightable work licensed under this
+      License.  Each licensee is addressed as "you".  "Licensees" and
+      "recipients" may be individuals or organizations.
+ 
+      To "modify" a work means to copy from or adapt all or part of the
+      work in a fashion requiring copyright permission, other than the
+      making of an exact copy.  The resulting work is called a "modified
+      version" of the earlier work or a work "based on" the earlier work.
+ 
+      A "covered work" means either the unmodified Program or a work
+      based on the Program.
+ 
+      To "propagate" a work means to do anything with it that, without
+      permission, would make you directly or secondarily liable for
+      infringement under applicable copyright law, except executing it on
+      a computer or modifying a private copy.  Propagation includes
+      copying, distribution (with or without modification), making
+      available to the public, and in some countries other activities as
+      well.
+ 
+      To "convey" a work means any kind of propagation that enables other
+      parties to make or receive copies.  Mere interaction with a user
+      through a computer network, with no transfer of a copy, is not
+      conveying.
+ 
+      An interactive user interface displays "Appropriate Legal Notices"
+      to the extent that it includes a convenient and prominently visible
+      feature that (1) displays an appropriate copyright notice, and (2)
+      tells the user that there is no warranty for the work (except to
+      the extent that warranties are provided), that licensees may convey
+      the work under this License, and how to view a copy of this
+      License.  If the interface presents a list of user commands or
+      options, such as a menu, a prominent item in the list meets this
+      criterion.
+ 
+   1. Source Code.
+ 
+      The "source code" for a work means the preferred form of the work
+      for making modifications to it.  "Object code" means any non-source
+      form of a work.
+ 
+      A "Standard Interface" means an interface that either is an
+      official standard defined by a recognized standards body, or, in
+      the case of interfaces specified for a particular programming
+      language, one that is widely used among developers working in that
+      language.
+ 
+      The "System Libraries" of an executable work include anything,
+      other than the work as a whole, that (a) is included in the normal
+      form of packaging a Major Component, but which is not part of that
+      Major Component, and (b) serves only to enable use of the work with
+      that Major Component, or to implement a Standard Interface for
+      which an implementation is available to the public in source code
+      form.  A "Major Component", in this context, means a major
+      essential component (kernel, window system, and so on) of the
+      specific operating system (if any) on which the executable work
+      runs, or a compiler used to produce the work, or an object code
+      interpreter used to run it.
+ 
+      The "Corresponding Source" for a work in object code form means all
+      the source code needed to generate, install, and (for an executable
+      work) run the object code and to modify the work, including scripts
+      to control those activities.  However, it does not include the
+      work's System Libraries, or general-purpose tools or generally
+      available free programs which are used unmodified in performing
+      those activities but which are not part of the work.  For example,
+      Corresponding Source includes interface definition files associated
+      with source files for the work, and the source code for shared
+      libraries and dynamically linked subprograms that the work is
+      specifically designed to require, such as by intimate data
+      communication or control flow between those subprograms and other
+      parts of the work.
+ 
+      The Corresponding Source need not include anything that users can
+      regenerate automatically from other parts of the Corresponding
+      Source.
+ 
+      The Corresponding Source for a work in source code form is that
+      same work.
+ 
+   2. Basic Permissions.
+ 
+      All rights granted under this License are granted for the term of
+      copyright on the Program, and are irrevocable provided the stated
+      conditions are met.  This License explicitly affirms your unlimited
+      permission to run the unmodified Program.  The output from running
+      a covered work is covered by this License only if the output, given
+      its content, constitutes a covered work.  This License acknowledges
+      your rights of fair use or other equivalent, as provided by
+      copyright law.
+ 
+      You may make, run and propagate covered works that you do not
+      convey, without conditions so long as your license otherwise
+      remains in force.  You may convey covered works to others for the
+      sole purpose of having them make modifications exclusively for you,
+      or provide you with facilities for running those works, provided
+      that you comply with the terms of this License in conveying all
+      material for which you do not control copyright.  Those thus making
+      or running the covered works for you must do so exclusively on your
+      behalf, under your direction and control, on terms that prohibit
+      them from making any copies of your copyrighted material outside
+      their relationship with you.
+ 
+      Conveying under any other circumstances is permitted solely under
+      the conditions stated below.  Sublicensing is not allowed; section
+      10 makes it unnecessary.
+ 
+   3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+ 
+      No covered work shall be deemed part of an effective technological
+      measure under any applicable law fulfilling obligations under
+      article 11 of the WIPO copyright treaty adopted on 20 December
+      1996, or similar laws prohibiting or restricting circumvention of
+      such measures.
+ 
+      When you convey a covered work, you waive any legal power to forbid
+      circumvention of technological measures to the extent such
+      circumvention is effected by exercising rights under this License
+      with respect to the covered work, and you disclaim any intention to
+      limit operation or modification of the work as a means of
+      enforcing, against the work's users, your or third parties' legal
+      rights to forbid circumvention of technological measures.
+ 
+   4. Conveying Verbatim Copies.
+ 
+      You may convey verbatim copies of the Program's source code as you
+      receive it, in any medium, provided that you conspicuously and
+      appropriately publish on each copy an appropriate copyright notice;
+      keep intact all notices stating that this License and any
+      non-permissive terms added in accord with section 7 apply to the
+      code; keep intact all notices of the absence of any warranty; and
+      give all recipients a copy of this License along with the Program.
+ 
+      You may charge any price or no price for each copy that you convey,
+      and you may offer support or warranty protection for a fee.
+ 
+   5. Conveying Modified Source Versions.
+ 
+      You may convey a work based on the Program, or the modifications to
+      produce it from the Program, in the form of source code under the
+      terms of section 4, provided that you also meet all of these
+      conditions:
+ 
+        a. The work must carry prominent notices stating that you
+           modified it, and giving a relevant date.
+ 
+        b. The work must carry prominent notices stating that it is
+           released under this License and any conditions added under
+           section 7.  This requirement modifies the requirement in
+           section 4 to "keep intact all notices".
+ 
+        c. You must license the entire work, as a whole, under this
+           License to anyone who comes into possession of a copy.  This
+           License will therefore apply, along with any applicable
+           section 7 additional terms, to the whole of the work, and all
+           its parts, regardless of how they are packaged.  This License
+           gives no permission to license the work in any other way, but
+           it does not invalidate such permission if you have separately
+           received it.
+ 
+        d. If the work has interactive user interfaces, each must display
+           Appropriate Legal Notices; however, if the Program has
+           interactive interfaces that do not display Appropriate Legal
+           Notices, your work need not make them do so.
+ 
+      A compilation of a covered work with other separate and independent
+      works, which are not by their nature extensions of the covered
+      work, and which are not combined with it such as to form a larger
+      program, in or on a volume of a storage or distribution medium, is
+      called an "aggregate" if the compilation and its resulting
+      copyright are not used to limit the access or legal rights of the
+      compilation's users beyond what the individual works permit.
+      Inclusion of a covered work in an aggregate does not cause this
+      License to apply to the other parts of the aggregate.
+ 
+   6. Conveying Non-Source Forms.
+ 
+      You may convey a covered work in object code form under the terms
+      of sections 4 and 5, provided that you also convey the
+      machine-readable Corresponding Source under the terms of this
+      License, in one of these ways:
+ 
+        a. Convey the object code in, or embodied in, a physical product
+           (including a physical distribution medium), accompanied by the
+           Corresponding Source fixed on a durable physical medium
+           customarily used for software interchange.
+ 
+        b. Convey the object code in, or embodied in, a physical product
+           (including a physical distribution medium), accompanied by a
+           written offer, valid for at least three years and valid for as
+           long as you offer spare parts or customer support for that
+           product model, to give anyone who possesses the object code
+           either (1) a copy of the Corresponding Source for all the
+           software in the product that is covered by this License, on a
+           durable physical medium customarily used for software
+           interchange, for a price no more than your reasonable cost of
+           physically performing this conveying of source, or (2) access
+           to copy the Corresponding Source from a network server at no
+           charge.
+ 
+        c. Convey individual copies of the object code with a copy of the
+           written offer to provide the Corresponding Source.  This
+           alternative is allowed only occasionally and noncommercially,
+           and only if you received the object code with such an offer,
+           in accord with subsection 6b.
+ 
+        d. Convey the object code by offering access from a designated
+           place (gratis or for a charge), and offer equivalent access to
+           the Corresponding Source in the same way through the same
+           place at no further charge.  You need not require recipients
+           to copy the Corresponding Source along with the object code.
+           If the place to copy the object code is a network server, the
+           Corresponding Source may be on a different server (operated by
+           you or a third party) that supports equivalent copying
+           facilities, provided you maintain clear directions next to the
+           object code saying where to find the Corresponding Source.
+           Regardless of what server hosts the Corresponding Source, you
+           remain obligated to ensure that it is available for as long as
+           needed to satisfy these requirements.
+ 
+        e. Convey the object code using peer-to-peer transmission,
+           provided you inform other peers where the object code and
+           Corresponding Source of the work are being offered to the
+           general public at no charge under subsection 6d.
+ 
+      A separable portion of the object code, whose source code is
+      excluded from the Corresponding Source as a System Library, need
+      not be included in conveying the object code work.
+ 
+      A "User Product" is either (1) a "consumer product", which means
+      any tangible personal property which is normally used for personal,
+      family, or household purposes, or (2) anything designed or sold for
+      incorporation into a dwelling.  In determining whether a product is
+      a consumer product, doubtful cases shall be resolved in favor of
+      coverage.  For a particular product received by a particular user,
+      "normally used" refers to a typical or common use of that class of
+      product, regardless of the status of the particular user or of the
+      way in which the particular user actually uses, or expects or is
+      expected to use, the product.  A product is a consumer product
+      regardless of whether the product has substantial commercial,
+      industrial or non-consumer uses, unless such uses represent the
+      only significant mode of use of the product.
+ 
+      "Installation Information" for a User Product means any methods,
+      procedures, authorization keys, or other information required to
+      install and execute modified versions of a covered work in that
+      User Product from a modified version of its Corresponding Source.
+      The information must suffice to ensure that the continued
+      functioning of the modified object code is in no case prevented or
+      interfered with solely because modification has been made.
+ 
+      If you convey an object code work under this section in, or with,
+      or specifically for use in, a User Product, and the conveying
+      occurs as part of a transaction in which the right of possession
+      and use of the User Product is transferred to the recipient in
+      perpetuity or for a fixed term (regardless of how the transaction
+      is characterized), the Corresponding Source conveyed under this
+      section must be accompanied by the Installation Information.  But
+      this requirement does not apply if neither you nor any third party
+      retains the ability to install modified object code on the User
+      Product (for example, the work has been installed in ROM).
+ 
+      The requirement to provide Installation Information does not
+      include a requirement to continue to provide support service,
+      warranty, or updates for a work that has been modified or installed
+      by the recipient, or for the User Product in which it has been
+      modified or installed.  Access to a network may be denied when the
+      modification itself materially and adversely affects the operation
+      of the network or violates the rules and protocols for
+      communication across the network.
+ 
+      Corresponding Source conveyed, and Installation Information
+      provided, in accord with this section must be in a format that is
+      publicly documented (and with an implementation available to the
+      public in source code form), and must require no special password
+      or key for unpacking, reading or copying.
+ 
+   7. Additional Terms.
+ 
+      "Additional permissions" are terms that supplement the terms of
+      this License by making exceptions from one or more of its
+      conditions.  Additional permissions that are applicable to the
+      entire Program shall be treated as though they were included in
+      this License, to the extent that they are valid under applicable
+      law.  If additional permissions apply only to part of the Program,
+      that part may be used separately under those permissions, but the
+      entire Program remains governed by this License without regard to
+      the additional permissions.
+ 
+      When you convey a copy of a covered work, you may at your option
+      remove any additional permissions from that copy, or from any part
+      of it.  (Additional permissions may be written to require their own
+      removal in certain cases when you modify the work.)  You may place
+      additional permissions on material, added by you to a covered work,
+      for which you have or can give appropriate copyright permission.
+ 
+      Notwithstanding any other provision of this License, for material
+      you add to a covered work, you may (if authorized by the copyright
+      holders of that material) supplement the terms of this License with
+      terms:
+ 
+        a. Disclaiming warranty or limiting liability differently from
+           the terms of sections 15 and 16 of this License; or
+ 
+        b. Requiring preservation of specified reasonable legal notices
+           or author attributions in that material or in the Appropriate
+           Legal Notices displayed by works containing it; or
+ 
+        c. Prohibiting misrepresentation of the origin of that material,
+           or requiring that modified versions of such material be marked
+           in reasonable ways as different from the original version; or
+ 
+        d. Limiting the use for publicity purposes of names of licensors
+           or authors of the material; or
+ 
+        e. Declining to grant rights under trademark law for use of some
+           trade names, trademarks, or service marks; or
+ 
+        f. Requiring indemnification of licensors and authors of that
+           material by anyone who conveys the material (or modified
+           versions of it) with contractual assumptions of liability to
+           the recipient, for any liability that these contractual
+           assumptions directly impose on those licensors and authors.
+ 
+      All other non-permissive additional terms are considered "further
+      restrictions" within the meaning of section 10.  If the Program as
+      you received it, or any part of it, contains a notice stating that
+      it is governed by this License along with a term that is a further
+      restriction, you may remove that term.  If a license document
+      contains a further restriction but permits relicensing or conveying
+      under this License, you may add to a covered work material governed
+      by the terms of that license document, provided that the further
+      restriction does not survive such relicensing or conveying.
+ 
+      If you add terms to a covered work in accord with this section, you
+      must place, in the relevant source files, a statement of the
+      additional terms that apply to those files, or a notice indicating
+      where to find the applicable terms.
+ 
+      Additional terms, permissive or non-permissive, may be stated in
+      the form of a separately written license, or stated as exceptions;
+      the above requirements apply either way.
+ 
+   8. Termination.
+ 
+      You may not propagate or modify a covered work except as expressly
+      provided under this License.  Any attempt otherwise to propagate or
+      modify it is void, and will automatically terminate your rights
+      under this License (including any patent licenses granted under the
+      third paragraph of section 11).
+ 
+      However, if you cease all violation of this License, then your
+      license from a particular copyright holder is reinstated (a)
+      provisionally, unless and until the copyright holder explicitly and
+      finally terminates your license, and (b) permanently, if the
+      copyright holder fails to notify you of the violation by some
+      reasonable means prior to 60 days after the cessation.
+ 
+      Moreover, your license from a particular copyright holder is
+      reinstated permanently if the copyright holder notifies you of the
+      violation by some reasonable means, this is the first time you have
+      received notice of violation of this License (for any work) from
+      that copyright holder, and you cure the violation prior to 30 days
+      after your receipt of the notice.
+ 
+      Termination of your rights under this section does not terminate
+      the licenses of parties who have received copies or rights from you
+      under this License.  If your rights have been terminated and not
+      permanently reinstated, you do not qualify to receive new licenses
+      for the same material under section 10.
+ 
+   9. Acceptance Not Required for Having Copies.
+ 
+      You are not required to accept this License in order to receive or
+      run a copy of the Program.  Ancillary propagation of a covered work
+      occurring solely as a consequence of using peer-to-peer
+      transmission to receive a copy likewise does not require
+      acceptance.  However, nothing other than this License grants you
+      permission to propagate or modify any covered work.  These actions
+      infringe copyright if you do not accept this License.  Therefore,
+      by modifying or propagating a covered work, you indicate your
+      acceptance of this License to do so.
+ 
+   10. Automatic Licensing of Downstream Recipients.
+ 
+      Each time you convey a covered work, the recipient automatically
+      receives a license from the original licensors, to run, modify and
+      propagate that work, subject to this License.  You are not
+      responsible for enforcing compliance by third parties with this
+      License.
+ 
+      An "entity transaction" is a transaction transferring control of an
+      organization, or substantially all assets of one, or subdividing an
+      organization, or merging organizations.  If propagation of a
+      covered work results from an entity transaction, each party to that
+      transaction who receives a copy of the work also receives whatever
+      licenses to the work the party's predecessor in interest had or
+      could give under the previous paragraph, plus a right to possession
+      of the Corresponding Source of the work from the predecessor in
+      interest, if the predecessor has it or can get it with reasonable
+      efforts.
+ 
+      You may not impose any further restrictions on the exercise of the
+      rights granted or affirmed under this License.  For example, you
+      may not impose a license fee, royalty, or other charge for exercise
+      of rights granted under this License, and you may not initiate
+      litigation (including a cross-claim or counterclaim in a lawsuit)
+      alleging that any patent claim is infringed by making, using,
+      selling, offering for sale, or importing the Program or any portion
+      of it.
+ 
+   11. Patents.
+ 
+      A "contributor" is a copyright holder who authorizes use under this
+      License of the Program or a work on which the Program is based.
+      The work thus licensed is called the contributor's "contributor
+      version".
+ 
+      A contributor's "essential patent claims" are all patent claims
+      owned or controlled by the contributor, whether already acquired or
+      hereafter acquired, that would be infringed by some manner,
+      permitted by this License, of making, using, or selling its
+      contributor version, but do not include claims that would be
+      infringed only as a consequence of further modification of the
+      contributor version.  For purposes of this definition, "control"
+      includes the right to grant patent sublicenses in a manner
+      consistent with the requirements of this License.
+ 
+      Each contributor grants you a non-exclusive, worldwide,
+      royalty-free patent license under the contributor's essential
+      patent claims, to make, use, sell, offer for sale, import and
+      otherwise run, modify and propagate the contents of its contributor
+      version.
+ 
+      In the following three paragraphs, a "patent license" is any
+      express agreement or commitment, however denominated, not to
+      enforce a patent (such as an express permission to practice a
+      patent or covenant not to sue for patent infringement).  To "grant"
+      such a patent license to a party means to make such an agreement or
+      commitment not to enforce a patent against the party.
+ 
+      If you convey a covered work, knowingly relying on a patent
+      license, and the Corresponding Source of the work is not available
+      for anyone to copy, free of charge and under the terms of this
+      License, through a publicly available network server or other
+      readily accessible means, then you must either (1) cause the
+      Corresponding Source to be so available, or (2) arrange to deprive
+      yourself of the benefit of the patent license for this particular
+      work, or (3) arrange, in a manner consistent with the requirements
+      of this License, to extend the patent license to downstream
+      recipients.  "Knowingly relying" means you have actual knowledge
+      that, but for the patent license, your conveying the covered work
+      in a country, or your recipient's use of the covered work in a
+      country, would infringe one or more identifiable patents in that
+      country that you have reason to believe are valid.
+ 
+      If, pursuant to or in connection with a single transaction or
+      arrangement, you convey, or propagate by procuring conveyance of, a
+      covered work, and grant a patent license to some of the parties
+      receiving the covered work authorizing them to use, propagate,
+      modify or convey a specific copy of the covered work, then the
+      patent license you grant is automatically extended to all
+      recipients of the covered work and works based on it.
+ 
+      A patent license is "discriminatory" if it does not include within
+      the scope of its coverage, prohibits the exercise of, or is
+      conditioned on the non-exercise of one or more of the rights that
+      are specifically granted under this License.  You may not convey a
+      covered work if you are a party to an arrangement with a third
+      party that is in the business of distributing software, under which
+      you make payment to the third party based on the extent of your
+      activity of conveying the work, and under which the third party
+      grants, to any of the parties who would receive the covered work
+      from you, a discriminatory patent license (a) in connection with
+      copies of the covered work conveyed by you (or copies made from
+      those copies), or (b) primarily for and in connection with specific
+      products or compilations that contain the covered work, unless you
+      entered into that arrangement, or that patent license was granted,
+      prior to 28 March 2007.
+ 
+      Nothing in this License shall be construed as excluding or limiting
+      any implied license or other defenses to infringement that may
+      otherwise be available to you under applicable patent law.
+ 
+   12. No Surrender of Others' Freedom.
+ 
+      If conditions are imposed on you (whether by court order, agreement
+      or otherwise) that contradict the conditions of this License, they
+      do not excuse you from the conditions of this License.  If you
+      cannot convey a covered work so as to satisfy simultaneously your
+      obligations under this License and any other pertinent obligations,
+      then as a consequence you may not convey it at all.  For example,
+      if you agree to terms that obligate you to collect a royalty for
+      further conveying from those to whom you convey the Program, the
+      only way you could satisfy both those terms and this License would
+      be to refrain entirely from conveying the Program.
+ 
+   13. Use with the GNU Affero General Public License.
+ 
+      Notwithstanding any other provision of this License, you have
+      permission to link or combine any covered work with a work licensed
+      under version 3 of the GNU Affero General Public License into a
+      single combined work, and to convey the resulting work.  The terms
+      of this License will continue to apply to the part which is the
+      covered work, but the special requirements of the GNU Affero
+      General Public License, section 13, concerning interaction through
+      a network will apply to the combination as such.
+ 
+   14. Revised Versions of this License.
+ 
+      The Free Software Foundation may publish revised and/or new
+      versions of the GNU General Public License from time to time.  Such
+      new versions will be similar in spirit to the present version, but
+      may differ in detail to address new problems or concerns.
+ 
+      Each version is given a distinguishing version number.  If the
+      Program specifies that a certain numbered version of the GNU
+      General Public License "or any later version" applies to it, you
+      have the option of following the terms and conditions either of
+      that numbered version or of any later version published by the Free
+      Software Foundation.  If the Program does not specify a version
+      number of the GNU General Public License, you may choose any
+      version ever published by the Free Software Foundation.
+ 
+      If the Program specifies that a proxy can decide which future
+      versions of the GNU General Public License can be used, that
+      proxy's public statement of acceptance of a version permanently
+      authorizes you to choose that version for the Program.
+ 
+      Later license versions may give you additional or different
+      permissions.  However, no additional obligations are imposed on any
+      author or copyright holder as a result of your choosing to follow a
+      later version.
+ 
+   15. Disclaimer of Warranty.
+ 
+      THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+      APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
+      COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
+      WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
+      INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+      MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE
+      RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
+      SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
+      NECESSARY SERVICING, REPAIR OR CORRECTION.
+ 
+   16. Limitation of Liability.
+ 
+      IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+      WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
+      AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR
+      DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+      CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
+      THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
+      BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+      PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+      PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
+      THE POSSIBILITY OF SUCH DAMAGES.
+ 
+   17. Interpretation of Sections 15 and 16.
+ 
+      If the disclaimer of warranty and limitation of liability provided
+      above cannot be given local legal effect according to their terms,
+      reviewing courts shall apply local law that most closely
+      approximates an absolute waiver of all civil liability in
+      connection with the Program, unless a warranty or assumption of
+      liability accompanies a copy of the Program in return for a fee.
+ 
+ END OF TERMS AND CONDITIONS
+ ===========================
+ 
+ How to Apply These Terms to Your New Programs
+ =============================================
+ 
+ If you develop a new program, and you want it to be of the greatest
+ possible use to the public, the best way to achieve this is to make it
+ free software which everyone can redistribute and change under these
+ terms.
+ 
+    To do so, attach the following notices to the program.  It is safest
+ to attach them to the start of each source file to most effectively
+ state the exclusion of warranty; and each file should have at least the
+ "copyright" line and a pointer to where the full notice is found.
+ 
+      ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
+      Copyright (C) YEAR NAME OF AUTHOR
+ 
+      This program 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 of the License, or (at
+      your option) any later version.
+ 
+      This program 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 this program.  If not, see <https://www.gnu.org/licenses/>.
+ 
+    Also add information on how to contact you by electronic and paper
+ mail.
+ 
+    If the program does terminal interaction, make it output a short
+ notice like this when it starts in an interactive mode:
+ 
+      PROGRAM Copyright (C) YEAR NAME OF AUTHOR
+      This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'.
+      This is free software, and you are welcome to redistribute it
+      under certain conditions; type 'show c' for details.
+ 
+    The hypothetical commands 'show w' and 'show c' should show the
+ appropriate parts of the General Public License.  Of course, your
+ program's commands might be different; for a GUI interface, you would
+ use an "about box".
+ 
+    You should also get your employer (if you work as a programmer) or
+ school, if any, to sign a "copyright disclaimer" for the program, if
+ necessary.  For more information on this, and how to apply and follow
+ the GNU GPL, see <https://www.gnu.org/licenses/>.
+ 
+    The GNU General Public License does not permit incorporating your
+ program into proprietary programs.  If your program is a subroutine
+ library, you may consider it more useful to permit linking proprietary
+ applications with the library.  If this is what you want to do, use the
+ GNU Lesser General Public License instead of this License.  But first,
+ please read <https://www.gnu.org/licenses/why-not-lgpl.html>.
+ 
+ 
+ File: gccgo.info,  Node: GNU Free Documentation License,  Next: Invoking gccgo,  Prev: Copying,  Up: Top
+ 
+ GNU Free Documentation License
+ ******************************
+ 
+                      Version 1.3, 3 November 2008
+ 
+      Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+      <https://www.fsf.org>
+ 
+      Everyone is permitted to copy and distribute verbatim copies
+      of this license document, but changing it is not allowed.
+ 
+   0. PREAMBLE
+ 
+      The purpose of this License is to make a manual, textbook, or other
+      functional and useful document "free" in the sense of freedom: to
+      assure everyone the effective freedom to copy and redistribute it,
+      with or without modifying it, either commercially or
+      noncommercially.  Secondarily, this License preserves for the
+      author and publisher a way to get credit for their work, while not
+      being considered responsible for modifications made by others.
+ 
+      This License is a kind of "copyleft", which means that derivative
+      works of the document must themselves be free in the same sense.
+      It complements the GNU General Public License, which is a copyleft
+      license designed for free software.
+ 
+      We have designed this License in order to use it for manuals for
+      free software, because free software needs free documentation: a
+      free program should come with manuals providing the same freedoms
+      that the software does.  But this License is not limited to
+      software manuals; it can be used for any textual work, regardless
+      of subject matter or whether it is published as a printed book.  We
+      recommend this License principally for works whose purpose is
+      instruction or reference.
+ 
+   1. APPLICABILITY AND DEFINITIONS
+ 
+      This License applies to any manual or other work, in any medium,
+      that contains a notice placed by the copyright holder saying it can
+      be distributed under the terms of this License.  Such a notice
+      grants a world-wide, royalty-free license, unlimited in duration,
+      to use that work under the conditions stated herein.  The
+      "Document", below, refers to any such manual or work.  Any member
+      of the public is a licensee, and is addressed as "you".  You accept
+      the license if you copy, modify or distribute the work in a way
+      requiring permission under copyright law.
+ 
+      A "Modified Version" of the Document means any work containing the
+      Document or a portion of it, either copied verbatim, or with
+      modifications and/or translated into another language.
+ 
+      A "Secondary Section" is a named appendix or a front-matter section
+      of the Document that deals exclusively with the relationship of the
+      publishers or authors of the Document to the Document's overall
+      subject (or to related matters) and contains nothing that could
+      fall directly within that overall subject.  (Thus, if the Document
+      is in part a textbook of mathematics, a Secondary Section may not
+      explain any mathematics.)  The relationship could be a matter of
+      historical connection with the subject or with related matters, or
+      of legal, commercial, philosophical, ethical or political position
+      regarding them.
+ 
+      The "Invariant Sections" are certain Secondary Sections whose
+      titles are designated, as being those of Invariant Sections, in the
+      notice that says that the Document is released under this License.
+      If a section does not fit the above definition of Secondary then it
+      is not allowed to be designated as Invariant.  The Document may
+      contain zero Invariant Sections.  If the Document does not identify
+      any Invariant Sections then there are none.
+ 
+      The "Cover Texts" are certain short passages of text that are
+      listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+      that says that the Document is released under this License.  A
+      Front-Cover Text may be at most 5 words, and a Back-Cover Text may
+      be at most 25 words.
+ 
+      A "Transparent" copy of the Document means a machine-readable copy,
+      represented in a format whose specification is available to the
+      general public, that is suitable for revising the document
+      straightforwardly with generic text editors or (for images composed
+      of pixels) generic paint programs or (for drawings) some widely
+      available drawing editor, and that is suitable for input to text
+      formatters or for automatic translation to a variety of formats
+      suitable for input to text formatters.  A copy made in an otherwise
+      Transparent file format whose markup, or absence of markup, has
+      been arranged to thwart or discourage subsequent modification by
+      readers is not Transparent.  An image format is not Transparent if
+      used for any substantial amount of text.  A copy that is not
+      "Transparent" is called "Opaque".
+ 
+      Examples of suitable formats for Transparent copies include plain
+      ASCII without markup, Texinfo input format, LaTeX input format,
+      SGML or XML using a publicly available DTD, and standard-conforming
+      simple HTML, PostScript or PDF designed for human modification.
+      Examples of transparent image formats include PNG, XCF and JPG.
+      Opaque formats include proprietary formats that can be read and
+      edited only by proprietary word processors, SGML or XML for which
+      the DTD and/or processing tools are not generally available, and
+      the machine-generated HTML, PostScript or PDF produced by some word
+      processors for output purposes only.
+ 
+      The "Title Page" means, for a printed book, the title page itself,
+      plus such following pages as are needed to hold, legibly, the
+      material this License requires to appear in the title page.  For
+      works in formats which do not have any title page as such, "Title
+      Page" means the text near the most prominent appearance of the
+      work's title, preceding the beginning of the body of the text.
+ 
+      The "publisher" means any person or entity that distributes copies
+      of the Document to the public.
+ 
+      A section "Entitled XYZ" means a named subunit of the Document
+      whose title either is precisely XYZ or contains XYZ in parentheses
+      following text that translates XYZ in another language.  (Here XYZ
+      stands for a specific section name mentioned below, such as
+      "Acknowledgements", "Dedications", "Endorsements", or "History".)
+      To "Preserve the Title" of such a section when you modify the
+      Document means that it remains a section "Entitled XYZ" according
+      to this definition.
+ 
+      The Document may include Warranty Disclaimers next to the notice
+      which states that this License applies to the Document.  These
+      Warranty Disclaimers are considered to be included by reference in
+      this License, but only as regards disclaiming warranties: any other
+      implication that these Warranty Disclaimers may have is void and
+      has no effect on the meaning of this License.
+ 
+   2. VERBATIM COPYING
+ 
+      You may copy and distribute the Document in any medium, either
+      commercially or noncommercially, provided that this License, the
+      copyright notices, and the license notice saying this License
+      applies to the Document are reproduced in all copies, and that you
+      add no other conditions whatsoever to those of this License.  You
+      may not use technical measures to obstruct or control the reading
+      or further copying of the copies you make or distribute.  However,
+      you may accept compensation in exchange for copies.  If you
+      distribute a large enough number of copies you must also follow the
+      conditions in section 3.
+ 
+      You may also lend copies, under the same conditions stated above,
+      and you may publicly display copies.
+ 
+   3. COPYING IN QUANTITY
+ 
+      If you publish printed copies (or copies in media that commonly
+      have printed covers) of the Document, numbering more than 100, and
+      the Document's license notice requires Cover Texts, you must
+      enclose the copies in covers that carry, clearly and legibly, all
+      these Cover Texts: Front-Cover Texts on the front cover, and
+      Back-Cover Texts on the back cover.  Both covers must also clearly
+      and legibly identify you as the publisher of these copies.  The
+      front cover must present the full title with all words of the title
+      equally prominent and visible.  You may add other material on the
+      covers in addition.  Copying with changes limited to the covers, as
+      long as they preserve the title of the Document and satisfy these
+      conditions, can be treated as verbatim copying in other respects.
+ 
+      If the required texts for either cover are too voluminous to fit
+      legibly, you should put the first ones listed (as many as fit
+      reasonably) on the actual cover, and continue the rest onto
+      adjacent pages.
+ 
+      If you publish or distribute Opaque copies of the Document
+      numbering more than 100, you must either include a machine-readable
+      Transparent copy along with each Opaque copy, or state in or with
+      each Opaque copy a computer-network location from which the general
+      network-using public has access to download using public-standard
+      network protocols a complete Transparent copy of the Document, free
+      of added material.  If you use the latter option, you must take
+      reasonably prudent steps, when you begin distribution of Opaque
+      copies in quantity, to ensure that this Transparent copy will
+      remain thus accessible at the stated location until at least one
+      year after the last time you distribute an Opaque copy (directly or
+      through your agents or retailers) of that edition to the public.
+ 
+      It is requested, but not required, that you contact the authors of
+      the Document well before redistributing any large number of copies,
+      to give them a chance to provide you with an updated version of the
+      Document.
+ 
+   4. MODIFICATIONS
+ 
+      You may copy and distribute a Modified Version of the Document
+      under the conditions of sections 2 and 3 above, provided that you
+      release the Modified Version under precisely this License, with the
+      Modified Version filling the role of the Document, thus licensing
+      distribution and modification of the Modified Version to whoever
+      possesses a copy of it.  In addition, you must do these things in
+      the Modified Version:
+ 
+        A. Use in the Title Page (and on the covers, if any) a title
+           distinct from that of the Document, and from those of previous
+           versions (which should, if there were any, be listed in the
+           History section of the Document).  You may use the same title
+           as a previous version if the original publisher of that
+           version gives permission.
+ 
+        B. List on the Title Page, as authors, one or more persons or
+           entities responsible for authorship of the modifications in
+           the Modified Version, together with at least five of the
+           principal authors of the Document (all of its principal
+           authors, if it has fewer than five), unless they release you
+           from this requirement.
+ 
+        C. State on the Title page the name of the publisher of the
+           Modified Version, as the publisher.
+ 
+        D. Preserve all the copyright notices of the Document.
+ 
+        E. Add an appropriate copyright notice for your modifications
+           adjacent to the other copyright notices.
+ 
+        F. Include, immediately after the copyright notices, a license
+           notice giving the public permission to use the Modified
+           Version under the terms of this License, in the form shown in
+           the Addendum below.
+ 
+        G. Preserve in that license notice the full lists of Invariant
+           Sections and required Cover Texts given in the Document's
+           license notice.
+ 
+        H. Include an unaltered copy of this License.
+ 
+        I. Preserve the section Entitled "History", Preserve its Title,
+           and add to it an item stating at least the title, year, new
+           authors, and publisher of the Modified Version as given on the
+           Title Page.  If there is no section Entitled "History" in the
+           Document, create one stating the title, year, authors, and
+           publisher of the Document as given on its Title Page, then add
+           an item describing the Modified Version as stated in the
+           previous sentence.
+ 
+        J. Preserve the network location, if any, given in the Document
+           for public access to a Transparent copy of the Document, and
+           likewise the network locations given in the Document for
+           previous versions it was based on.  These may be placed in the
+           "History" section.  You may omit a network location for a work
+           that was published at least four years before the Document
+           itself, or if the original publisher of the version it refers
+           to gives permission.
+ 
+        K. For any section Entitled "Acknowledgements" or "Dedications",
+           Preserve the Title of the section, and preserve in the section
+           all the substance and tone of each of the contributor
+           acknowledgements and/or dedications given therein.
+ 
+        L. Preserve all the Invariant Sections of the Document, unaltered
+           in their text and in their titles.  Section numbers or the
+           equivalent are not considered part of the section titles.
+ 
+        M. Delete any section Entitled "Endorsements".  Such a section
+           may not be included in the Modified Version.
+ 
+        N. Do not retitle any existing section to be Entitled
+           "Endorsements" or to conflict in title with any Invariant
+           Section.
+ 
+        O. Preserve any Warranty Disclaimers.
+ 
+      If the Modified Version includes new front-matter sections or
+      appendices that qualify as Secondary Sections and contain no
+      material copied from the Document, you may at your option designate
+      some or all of these sections as invariant.  To do this, add their
+      titles to the list of Invariant Sections in the Modified Version's
+      license notice.  These titles must be distinct from any other
+      section titles.
+ 
+      You may add a section Entitled "Endorsements", provided it contains
+      nothing but endorsements of your Modified Version by various
+      parties--for example, statements of peer review or that the text
+      has been approved by an organization as the authoritative
+      definition of a standard.
+ 
+      You may add a passage of up to five words as a Front-Cover Text,
+      and a passage of up to 25 words as a Back-Cover Text, to the end of
+      the list of Cover Texts in the Modified Version.  Only one passage
+      of Front-Cover Text and one of Back-Cover Text may be added by (or
+      through arrangements made by) any one entity.  If the Document
+      already includes a cover text for the same cover, previously added
+      by you or by arrangement made by the same entity you are acting on
+      behalf of, you may not add another; but you may replace the old
+      one, on explicit permission from the previous publisher that added
+      the old one.
+ 
+      The author(s) and publisher(s) of the Document do not by this
+      License give permission to use their names for publicity for or to
+      assert or imply endorsement of any Modified Version.
+ 
+   5. COMBINING DOCUMENTS
+ 
+      You may combine the Document with other documents released under
+      this License, under the terms defined in section 4 above for
+      modified versions, provided that you include in the combination all
+      of the Invariant Sections of all of the original documents,
+      unmodified, and list them all as Invariant Sections of your
+      combined work in its license notice, and that you preserve all
+      their Warranty Disclaimers.
+ 
+      The combined work need only contain one copy of this License, and
+      multiple identical Invariant Sections may be replaced with a single
+      copy.  If there are multiple Invariant Sections with the same name
+      but different contents, make the title of each such section unique
+      by adding at the end of it, in parentheses, the name of the
+      original author or publisher of that section if known, or else a
+      unique number.  Make the same adjustment to the section titles in
+      the list of Invariant Sections in the license notice of the
+      combined work.
+ 
+      In the combination, you must combine any sections Entitled
+      "History" in the various original documents, forming one section
+      Entitled "History"; likewise combine any sections Entitled
+      "Acknowledgements", and any sections Entitled "Dedications".  You
+      must delete all sections Entitled "Endorsements."
+ 
+   6. COLLECTIONS OF DOCUMENTS
+ 
+      You may make a collection consisting of the Document and other
+      documents released under this License, and replace the individual
+      copies of this License in the various documents with a single copy
+      that is included in the collection, provided that you follow the
+      rules of this License for verbatim copying of each of the documents
+      in all other respects.
+ 
+      You may extract a single document from such a collection, and
+      distribute it individually under this License, provided you insert
+      a copy of this License into the extracted document, and follow this
+      License in all other respects regarding verbatim copying of that
+      document.
+ 
+   7. AGGREGATION WITH INDEPENDENT WORKS
+ 
+      A compilation of the Document or its derivatives with other
+      separate and independent documents or works, in or on a volume of a
+      storage or distribution medium, is called an "aggregate" if the
+      copyright resulting from the compilation is not used to limit the
+      legal rights of the compilation's users beyond what the individual
+      works permit.  When the Document is included in an aggregate, this
+      License does not apply to the other works in the aggregate which
+      are not themselves derivative works of the Document.
+ 
+      If the Cover Text requirement of section 3 is applicable to these
+      copies of the Document, then if the Document is less than one half
+      of the entire aggregate, the Document's Cover Texts may be placed
+      on covers that bracket the Document within the aggregate, or the
+      electronic equivalent of covers if the Document is in electronic
+      form.  Otherwise they must appear on printed covers that bracket
+      the whole aggregate.
+ 
+   8. TRANSLATION
+ 
+      Translation is considered a kind of modification, so you may
+      distribute translations of the Document under the terms of section
+      4.  Replacing Invariant Sections with translations requires special
+      permission from their copyright holders, but you may include
+      translations of some or all Invariant Sections in addition to the
+      original versions of these Invariant Sections.  You may include a
+      translation of this License, and all the license notices in the
+      Document, and any Warranty Disclaimers, provided that you also
+      include the original English version of this License and the
+      original versions of those notices and disclaimers.  In case of a
+      disagreement between the translation and the original version of
+      this License or a notice or disclaimer, the original version will
+      prevail.
+ 
+      If a section in the Document is Entitled "Acknowledgements",
+      "Dedications", or "History", the requirement (section 4) to
+      Preserve its Title (section 1) will typically require changing the
+      actual title.
+ 
+   9. TERMINATION
+ 
+      You may not copy, modify, sublicense, or distribute the Document
+      except as expressly provided under this License.  Any attempt
+      otherwise to copy, modify, sublicense, or distribute it is void,
+      and will automatically terminate your rights under this License.
+ 
+      However, if you cease all violation of this License, then your
+      license from a particular copyright holder is reinstated (a)
+      provisionally, unless and until the copyright holder explicitly and
+      finally terminates your license, and (b) permanently, if the
+      copyright holder fails to notify you of the violation by some
+      reasonable means prior to 60 days after the cessation.
+ 
+      Moreover, your license from a particular copyright holder is
+      reinstated permanently if the copyright holder notifies you of the
+      violation by some reasonable means, this is the first time you have
+      received notice of violation of this License (for any work) from
+      that copyright holder, and you cure the violation prior to 30 days
+      after your receipt of the notice.
+ 
+      Termination of your rights under this section does not terminate
+      the licenses of parties who have received copies or rights from you
+      under this License.  If your rights have been terminated and not
+      permanently reinstated, receipt of a copy of some or all of the
+      same material does not give you any rights to use it.
+ 
+   10. FUTURE REVISIONS OF THIS LICENSE
+ 
+      The Free Software Foundation may publish new, revised versions of
+      the GNU Free Documentation License from time to time.  Such new
+      versions will be similar in spirit to the present version, but may
+      differ in detail to address new problems or concerns.  See
+      <https://www.gnu.org/copyleft/>.
+ 
+      Each version of the License is given a distinguishing version
+      number.  If the Document specifies that a particular numbered
+      version of this License "or any later version" applies to it, you
+      have the option of following the terms and conditions either of
+      that specified version or of any later version that has been
+      published (not as a draft) by the Free Software Foundation.  If the
+      Document does not specify a version number of this License, you may
+      choose any version ever published (not as a draft) by the Free
+      Software Foundation.  If the Document specifies that a proxy can
+      decide which future versions of this License can be used, that
+      proxy's public statement of acceptance of a version permanently
+      authorizes you to choose that version for the Document.
+ 
+   11. RELICENSING
+ 
+      "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
+      World Wide Web server that publishes copyrightable works and also
+      provides prominent facilities for anybody to edit those works.  A
+      public wiki that anybody can edit is an example of such a server.
+      A "Massive Multiauthor Collaboration" (or "MMC") contained in the
+      site means any set of copyrightable works thus published on the MMC
+      site.
+ 
+      "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
+      license published by Creative Commons Corporation, a not-for-profit
+      corporation with a principal place of business in San Francisco,
+      California, as well as future copyleft versions of that license
+      published by that same organization.
+ 
+      "Incorporate" means to publish or republish a Document, in whole or
+      in part, as part of another Document.
+ 
+      An MMC is "eligible for relicensing" if it is licensed under this
+      License, and if all works that were first published under this
+      License somewhere other than this MMC, and subsequently
+      incorporated in whole or in part into the MMC, (1) had no cover
+      texts or invariant sections, and (2) were thus incorporated prior
+      to November 1, 2008.
+ 
+      The operator of an MMC Site may republish an MMC contained in the
+      site under CC-BY-SA on the same site at any time before August 1,
+      2009, provided the MMC is eligible for relicensing.
+ 
+ ADDENDUM: How to use this License for your documents
+ ====================================================
+ 
+ To use this License in a document you have written, include a copy of
+ the License in the document and put the following copyright and license
+ notices just after the title page:
+ 
+        Copyright (C)  YEAR  YOUR NAME.
+        Permission is granted to copy, distribute and/or modify this document
+        under the terms of the GNU Free Documentation License, Version 1.3
+        or any later version published by the Free Software Foundation;
+        with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+        Texts.  A copy of the license is included in the section entitled ``GNU
+        Free Documentation License''.
+ 
+    If you have Invariant Sections, Front-Cover Texts and Back-Cover
+ Texts, replace the "with...Texts."  line with this:
+ 
+          with the Invariant Sections being LIST THEIR TITLES, with
+          the Front-Cover Texts being LIST, and with the Back-Cover Texts
+          being LIST.
+ 
+    If you have Invariant Sections without Cover Texts, or some other
+ combination of the three, merge those two alternatives to suit the
+ situation.
+ 
+    If your document contains nontrivial examples of program code, we
+ recommend releasing these examples in parallel under your choice of free
+ software license, such as the GNU General Public License, to permit
+ their use in free software.
+ 
+ 
+ File: gccgo.info,  Node: Invoking gccgo,  Next: Import and Export,  Prev: GNU Free Documentation License,  Up: Top
+ 
+ 1 Invoking gccgo
+ ****************
+ 
+ The 'gccgo' command is a frontend to 'gcc' and supports many of the same
+ options.  *Note Option Summary: (gcc)Option Summary.  This manual only
+ documents the options specific to 'gccgo'.
+ 
+    The 'gccgo' command may be used to compile Go source code into an
+ object file, link a collection of object files together, or do both in
+ sequence.
+ 
+    Go source code is compiled as packages.  A package consists of one or
+ more Go source files.  All the files in a single package must be
+ compiled together, by passing all the files as arguments to 'gccgo'.  A
+ single invocation of 'gccgo' may only compile a single package.
+ 
+    One Go package may 'import' a different Go package.  The imported
+ package must have already been compiled; 'gccgo' will read the import
+ data directly from the compiled package.  When this package is later
+ linked, the compiled form of the package must be included in the link
+ command.
+ 
+    Go programs must generally be compiled with debugging information,
+ and '-g1' is the default as described below.  Stripping a Go program
+ will generally cause it to misbehave or fail.
+ 
+ '-IDIR'
+      Specify a directory to use when searching for an import package at
+      compile time.
+ 
+ '-LDIR'
+      When linking, specify a library search directory, as with 'gcc'.
+ 
+ '-fgo-pkgpath=STRING'
+      Set the package path to use.  This sets the value returned by the
+      PkgPath method of reflect.Type objects.  It is also used for the
+      names of globally visible symbols.  The argument to this option
+      should normally be the string that will be used to import this
+      package after it has been installed; in other words, a pathname
+      within the directories specified by the '-I' option.
+ 
+ '-fgo-prefix=STRING'
+      An alternative to '-fgo-pkgpath'.  The argument will be combined
+      with the package name from the source file to produce the package
+      path.  If '-fgo-pkgpath' is used, '-fgo-prefix' will be ignored.
+ 
+      Go permits a single program to include more than one package with
+      the same name in the 'package' clause in the source file, though
+      obviously the two packages must be imported using different
+      pathnames.  In order for this to work with 'gccgo', either
+      '-fgo-pkgpath' or '-fgo-prefix' must be specified when compiling a
+      package.
+ 
+      Using either '-fgo-pkgpath' or '-fgo-prefix' disables the special
+      treatment of the 'main' package and permits that package to be
+      imported like any other.
+ 
+ '-fgo-relative-import-path=DIR'
+      A relative import is an import that starts with './' or '../'.  If
+      this option is used, 'gccgo' will use DIR as a prefix for the
+      relative import when searching for it.
+ 
+ '-frequire-return-statement'
+ '-fno-require-return-statement'
+      By default 'gccgo' will warn about functions which have one or more
+      return parameters but lack an explicit 'return' statement.  This
+      warning may be disabled using '-fno-require-return-statement'.
+ 
+ '-fgo-check-divide-zero'
+      Add explicit checks for division by zero.  In Go a division (or
+      modulos) by zero causes a panic.  On Unix systems this is detected
+      in the runtime by catching the 'SIGFPE' signal.  Some processors,
+      such as PowerPC, do not generate a SIGFPE on division by zero.
+      Some runtimes do not generate a signal that can be caught.  On
+      those systems, this option may be used.  Or the checks may be
+      removed via '-fno-go-check-divide-zero'.  This option is currently
+      on by default, but in the future may be off by default on systems
+      that do not require it.
+ 
+ '-fgo-check-divide-overflow'
+      Add explicit checks for division overflow.  For example, division
+      overflow occurs when computing 'INT_MIN / -1'.  In Go this should
+      be wrapped, to produce 'INT_MIN'.  Some processors, such as x86,
+      generate a trap on division overflow.  On those systems, this
+      option may be used.  Or the checks may be removed via
+      '-fno-go-check-divide-overflow'.  This option is currently on by
+      default, but in the future may be off by default on systems that do
+      not require it.
+ 
+ '-fno-go-optimize-allocs'
+      Disable escape analysis, which tries to allocate objects on the
+      stack rather than the heap.
+ 
+ '-fgo-debug-escapeN'
+      Output escape analysis debugging information.  Larger values of N
+      generate more information.
+ 
+ '-fgo-debug-escape-hash=N'
+      A hash value to debug escape analysis.  N is a binary string.  This
+      runs escape analysis only on functions whose names hash to values
+      that match the given suffix N.  This can be used to binary search
+      across functions to uncover escape analysis bugs.
+ 
+ '-fgo-debug-optimization'
+      Output optimization diagnostics.
+ 
+ '-fgo-c-header=FILE'
+      Write top-level named Go struct definitions to FILE as C code.
+      This is used when compiling the runtime package.
+ 
+ '-fgo-compiling-runtime'
+      Apply special rules for compiling the runtime package.  Implicit
+      memory allocation is forbidden.  Some additional compiler
+      directives are supported.
+ 
+ '-fgo-embedcfg=FILE'
+      Identify a JSON file used to map patterns used with special
+      '//go:embed' comments to the files named by the patterns.  The JSON
+      file should have two components: 'Patterns' maps each pattern to a
+      list of file names, and 'Files' maps each file name to a full path
+      to the file.  This option is intended for use by the 'go' command
+      to implement '//go:embed'.
+ 
+ '-g'
+      This is the standard 'gcc' option (*note Debugging Options:
+      (gcc)Debugging Options.).  It is mentioned here because by default
+      'gccgo' turns on debugging information generation with the
+      equivalent of the standard option '-g1'.  This is because Go
+      programs require debugging information to be available in order to
+      get backtrace information.  An explicit '-g0' may be used to
+      disable the generation of debugging information, in which case
+      certain standard library functions, such as 'runtime.Callers', will
+      not operate correctly.
+ 
+ 
+ File: gccgo.info,  Node: Import and Export,  Next: Compiler Directives,  Prev: Invoking gccgo,  Up: Top
+ 
+ 2 Import and Export
+ *******************
+ 
+ When 'gccgo' compiles a package which exports anything, the export
+ information will be stored directly in the object file.  When a package
+ is imported, 'gccgo' must be able to find the file.
+ 
+    When Go code imports the package 'GOPACKAGE', 'gccgo' will look for
+ the import data using the following filenames, using the first one that
+ it finds.
+ 
+ 'GOPACKAGE.gox'
+ 'libGOPACKAGE.so'
+ 'libGOPACKAGE.a'
+ 'GOPACKAGE.o'
+ 
+    The compiler will search for these files in the directories named by
+ any '-I' options, in order in which the directories appear on the
+ command line.  The compiler will then search several standard system
+ directories.  Finally the compiler will search the current directory (to
+ search the current directory earlier, use '-I.').
+ 
+    The compiler will extract the export information directly from the
+ compiled object file.  The file 'GOPACKAGE.gox' will typically contain
+ nothing but export data.  This can be generated from 'GOPACKAGE.o' via
+ 
+      objcopy -j .go_export GOPACKAGE.o GOPACKAGE.gox
+ 
+    For example, it may be desirable to extract the export information
+ from several different packages into their independent 'GOPACKAGE.gox'
+ files, and then to combine the different package object files together
+ into a single shared library or archive.
+ 
+    At link time you must explicitly tell 'gccgo' which files to link
+ together into the executable, as is usual with 'gcc'.  This is different
+ from the behavior of other Go compilers.
+ 
+ 
+ File: gccgo.info,  Node: Compiler Directives,  Next: C Interoperability,  Prev: Import and Export,  Up: Top
+ 
+ 3 Compiler Directives
+ *********************
+ 
+ The Go compiler supports a few compiler directives.  A compiler
+ directive uses a '//' comment at the start of a line.  There must be no
+ space between the '//' and the name of the directive.
+ 
+ '//line FILE:LINE'
+      The '//line' directive specifies that the source line that follows
+      should be recorded as having come from the given file path and line
+      number.  Successive lines are recorded using increasing line
+      numbers, until the next directive.  This directive typically
+      appears in machine-generated code, so that compilers and debuggers
+      will show lines in the original input to the generator.
+ 
+ '//extern EXTERN_NAME'
+      The 'extern' directive sets the externally visible name of the next
+      function declaration.  See *note Function Names::.
+ 
+ '//go:compile GO_NAME EXTERN_NAME'
+      The 'go:compile' directives sets the externally visible name of a
+      function definition or declaration.  See *note Function Names::.
+ 
+ '//go:noescape'
+      The '//go:noescape' directive specifies that the next declaration
+      in the file, which must be a func without a body (meaning that it
+      has an implementation not written in Go) does not allow any of the
+      pointers passed as arguments to escape into the heap or into the
+      values returned from the function.  This information can be used
+      during the compiler's escape analysis of Go code calling the
+      function.
+ 
+ '//go:nosplit'
+      The '//go:nosplit' directive specifies that the next function
+      declared in the file must not include a stack overflow check.  This
+      is most commonly used by low-level runtime sources invoked at times
+      when it is unsafe for the calling goroutine to be preempted.
+ 
+ '//go:noinline'
+      The '//go:noinline' directive specifies that the next function
+      defined in the file may not be inlined.
+ 
+ 
+ File: gccgo.info,  Node: C Interoperability,  Next: Index,  Prev: Compiler Directives,  Up: Top
+ 
+ 4 C Interoperability
+ ********************
+ 
+ When using 'gccgo' there is limited interoperability with C, or with C++
+ code compiled using 'extern "C"'.
+ 
+    This information is provided largely for documentation purposes.  For
+ ordinary use it is best to build programs with the go tool and then use
+ 'import "C"', as described at <https://golang.org/cmd/cgo>.
+ 
+ * Menu:
+ 
+ * C Type Interoperability::     How C and Go types match up.
+ * Function Names::              How Go functions are named.
+ 
+ 
+ File: gccgo.info,  Node: C Type Interoperability,  Next: Function Names,  Up: C Interoperability
+ 
+ 4.1 C Type Interoperability
+ ===========================
+ 
+ Basic types map directly: an 'int' in Go is an 'int' in C, etc.  Go
+ 'byte' is equivalent to C 'unsigned char'.  Pointers in Go are pointers
+ in C. A Go 'struct' is the same as C 'struct' with the same field names
+ and types.
+ 
+    The Go 'string' type is currently defined as a two-element structure:
+ 
+      struct __go_string {
+        const unsigned char *__data;
+        int __length;
+      };
+ 
+    You can't pass arrays between C and Go.  However, a pointer to an
+ array in Go is equivalent to a C pointer to the equivalent of the
+ element type.  For example, Go '*[10]int' is equivalent to C 'int*',
+ assuming that the C pointer does point to 10 elements.
+ 
+    A slice in Go is a structure.  The current definition is:
+ 
+      struct __go_slice {
+        void *__values;
+        int __count;
+        int __capacity;
+      };
+ 
+    The type of a Go function with no receiver is equivalent to a C
+ function whose parameter types are equivalent.  When a Go function
+ returns more than one value, the C function returns a struct.  For
+ example, these functions have equivalent types:
+ 
+      func GoFunction(int) (int, float)
+      struct { int i; float f; } CFunction(int)
+ 
+    A pointer to a Go function is equivalent to a pointer to a C function
+ when the functions have equivalent types.
+ 
+    Go 'interface', 'channel', and 'map' types have no corresponding C
+ type ('interface' is a two-element struct and 'channel' and 'map' are
+ pointers to structs in C, but the structs are deliberately
+ undocumented).  C 'enum' types correspond to some integer type, but
+ precisely which one is difficult to predict in general; use a cast.  C
+ 'union' types have no corresponding Go type.  C 'struct' types
+ containing bitfields have no corresponding Go type.  C++ 'class' types
+ have no corresponding Go type.
+ 
+    Memory allocation is completely different between C and Go, as Go
+ uses garbage collection.  The exact guidelines in this area are
+ undetermined, but it is likely that it will be permitted to pass a
+ pointer to allocated memory from C to Go.  The responsibility of
+ eventually freeing the pointer will remain with C side, and of course if
+ the C side frees the pointer while the Go side still has a copy the
+ program will fail.  When passing a pointer from Go to C, the Go function
+ must retain a visible copy of it in some Go variable.  Otherwise the Go
+ garbage collector may delete the pointer while the C function is still
+ using it.
+ 
+ 
+ File: gccgo.info,  Node: Function Names,  Prev: C Type Interoperability,  Up: C Interoperability
+ 
+ 4.2 Function Names
+ ==================
+ 
+ Go code can call C functions directly using the '//extern' or
+ '//go:linkname' compiler directives.  An '//extern' directive must be at
+ the beginning of the line and must start with '//extern'.  This must be
+ followed by a space and then the external name of the function.  The
+ function declaration must be on the line immediately after the comment.
+ For example, here is how the C function 'open' can be declared in Go:
+ 
+      //extern open
+      func c_open(name *byte, mode int, perm int) int
+ 
+    You can do the same thing using the '//go:linkname' compiler
+ directive.  The '//go:linkname' directive must be at the start of the
+ line.  It is followed by whitespace, the name of the Go function, more
+ whitespace, and the external name of the function.  Unlike '//extern',
+ '//go:linkname' does not need to appear immediately adjacent to the
+ function definition or declaration.
+ 
+      //go:linkname c_open open
+      func c_open(name *byte, mode int, perm int) int
+ 
+    The C function naturally expects a nul terminated string, which in Go
+ is equivalent to a pointer to an array (not a slice!)  of 'byte' with a
+ terminating zero byte.  So a sample call from Go would look like (after
+ importing the 'os' package):
+ 
+      var name = [4]byte{'f', 'o', 'o', 0};
+      i := c_open(&name[0], os.O_RDONLY, 0);
+ 
+    Note that this serves as an example only.  To open a file in Go
+ please use Go's 'os.Open' function instead.
+ 
+    The name of Go functions accessed from C is subject to change.  At
+ present the name of a Go function that does not have a receiver is
+ 'pkgpath.Functionname'.  The PKGPATH is set by the '-fgo-pkgpath' option
+ used when the package is compiled; if the option is not used, the
+ default is 'go.PACKAGENAME'.  To call the function from C you must set
+ the name using the 'gcc' '__asm__' extension.
+ 
+      extern int go_function(int) __asm__ ("mypkgpath.Function");
+ 
+ 
+ File: gccgo.info,  Node: Index,  Prev: C Interoperability,  Up: Top
+ 
+ Index
+ *****
+ 
+ [index]
+ * Menu:
+ 
+ * -fgo-c-header:                         Invoking gccgo.      (line 109)
+ * -fgo-check-divide-overflow:            Invoking gccgo.      (line  82)
+ * -fgo-check-divide-zero:                Invoking gccgo.      (line  71)
+ * -fgo-compiling-runtime:                Invoking gccgo.      (line 113)
+ * -fgo-debug-escape:                     Invoking gccgo.      (line  96)
+ * -fgo-debug-escape-hash:                Invoking gccgo.      (line 100)
+ * -fgo-debug-optimization:               Invoking gccgo.      (line 106)
+ * -fgo-embedcfg:                         Invoking gccgo.      (line 118)
+ * -fgo-pkgpath:                          Invoking gccgo.      (line  36)
+ * -fgo-prefix:                           Invoking gccgo.      (line  44)
+ * -fgo-relative-import-path:             Invoking gccgo.      (line  60)
+ * -fno-go-check-divide-overflow:         Invoking gccgo.      (line  82)
+ * -fno-go-check-divide-zero:             Invoking gccgo.      (line  71)
+ * -fno-go-debug-optimization:            Invoking gccgo.      (line 106)
+ * -fno-go-optimize-allocs:               Invoking gccgo.      (line  92)
+ * -fno-require-return-statement:         Invoking gccgo.      (line  65)
+ * -frequire-return-statement:            Invoking gccgo.      (line  65)
+ * -g for gccgo:                          Invoking gccgo.      (line 126)
+ * -I:                                    Invoking gccgo.      (line  29)
+ * -L:                                    Invoking gccgo.      (line  33)
+ * .gox:                                  Import and Export.   (line  10)
+ * extern:                                Function Names.      (line   6)
+ * external names:                        Function Names.      (line   6)
+ * FDL, GNU Free Documentation License:   GNU Free Documentation License.
+                                                               (line   6)
+ * slice in C:                            C Type Interoperability.
+                                                               (line  23)
+ * string in C:                           C Type Interoperability.
+                                                               (line  11)
+ 
+ 
+ 
+ Tag Table:
+ Node: Top1688
+ Node: Copying2548
+ Node: GNU Free Documentation License40087
+ Node: Invoking gccgo65220
+ Node: Import and Export71400
+ Node: Compiler Directives72996
+ Node: C Interoperability74980
+ Node: C Type Interoperability75567
+ Node: Function Names78126
+ Node: Index80130
+ 
+ End Tag Table
+ 
+ 
+ Local Variables:
+ coding: utf-8
+ End:
diff -Nrcpad gcc-13.3.0/gcc/doc/gccint.info gcc-13.4.0/gcc/doc/gccint.info
*** gcc-13.3.0/gcc/doc/gccint.info	Tue May 21 08:05:57 2024
--- gcc-13.4.0/gcc/doc/gccint.info	Thu Jun  5 16:22:05 2025
*************** Introduction
*** 55,61 ****
  This manual documents the internals of the GNU compilers, including how
  to port them to new targets and some information about how to write
  front ends for new languages.  It corresponds to the compilers (GCC)
! version 13.3.0.  The use of the GNU compilers is documented in a
  separate manual.  *Note Introduction: (gcc)Top.
  
   This manual is mainly a reference manual rather than a tutorial.  It
--- 55,61 ----
  This manual documents the internals of the GNU compilers, including how
  to port them to new targets and some information about how to write
  front ends for new languages.  It corresponds to the compilers (GCC)
! version 13.4.0.  The use of the GNU compilers is documented in a
  separate manual.  *Note Introduction: (gcc)Top.
  
   This manual is mainly a reference manual rather than a tutorial.  It
diff -Nrcpad gcc-13.3.0/gcc/doc/gcov-dump.1 gcc-13.4.0/gcc/doc/gcov-dump.1
*** gcc-13.3.0/gcc/doc/gcov-dump.1	Tue May 21 07:50:34 2024
--- gcc-13.4.0/gcc/doc/gcov-dump.1	Thu Jun  5 16:06:29 2025
***************
*** 133,139 ****
  .\" ========================================================================
  .\"
  .IX Title "GCOV-DUMP 1"
! .TH GCOV-DUMP 1 "2024-05-21" "gcc-13.3.0" "GNU"
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
--- 133,139 ----
  .\" ========================================================================
  .\"
  .IX Title "GCOV-DUMP 1"
! .TH GCOV-DUMP 1 "2025-06-05" "gcc-13.4.0" "GNU"
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
diff -Nrcpad gcc-13.3.0/gcc/doc/gcov-tool.1 gcc-13.4.0/gcc/doc/gcov-tool.1
*** gcc-13.3.0/gcc/doc/gcov-tool.1	Tue May 21 07:50:34 2024
--- gcc-13.4.0/gcc/doc/gcov-tool.1	Thu Jun  5 16:06:29 2025
***************
*** 133,139 ****
  .\" ========================================================================
  .\"
  .IX Title "GCOV-TOOL 1"
! .TH GCOV-TOOL 1 "2024-05-21" "gcc-13.3.0" "GNU"
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
--- 133,139 ----
  .\" ========================================================================
  .\"
  .IX Title "GCOV-TOOL 1"
! .TH GCOV-TOOL 1 "2025-06-05" "gcc-13.4.0" "GNU"
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
diff -Nrcpad gcc-13.3.0/gcc/doc/gcov.1 gcc-13.4.0/gcc/doc/gcov.1
*** gcc-13.3.0/gcc/doc/gcov.1	Tue May 21 07:50:34 2024
--- gcc-13.4.0/gcc/doc/gcov.1	Thu Jun  5 16:06:29 2025
***************
*** 133,139 ****
  .\" ========================================================================
  .\"
  .IX Title "GCOV 1"
! .TH GCOV 1 "2024-05-21" "gcc-13.3.0" "GNU"
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
--- 133,139 ----
  .\" ========================================================================
  .\"
  .IX Title "GCOV 1"
! .TH GCOV 1 "2025-06-05" "gcc-13.4.0" "GNU"
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
diff -Nrcpad gcc-13.3.0/gcc/doc/gdc.1 gcc-13.4.0/gcc/doc/gdc.1
*** gcc-13.3.0/gcc/doc/gdc.1	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/doc/gdc.1	Thu Jun  5 16:30:28 2025
***************
*** 0 ****
--- 1,798 ----
+ .\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.43)
+ .\"
+ .\" Standard preamble:
+ .\" ========================================================================
+ .de Sp \" Vertical space (when we can't use .PP)
+ .if t .sp .5v
+ .if n .sp
+ ..
+ .de Vb \" Begin verbatim text
+ .ft CW
+ .nf
+ .ne \\$1
+ ..
+ .de Ve \" End verbatim text
+ .ft R
+ .fi
+ ..
+ .\" Set up some character translations and predefined strings.  \*(-- will
+ .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+ .\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+ .\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+ .\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+ .\" nothing in troff, for use with C<>.
+ .tr \(*W-
+ .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+ .ie n \{\
+ .    ds -- \(*W-
+ .    ds PI pi
+ .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+ .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+ .    ds L" ""
+ .    ds R" ""
+ .    ds C` ""
+ .    ds C' ""
+ 'br\}
+ .el\{\
+ .    ds -- \|\(em\|
+ .    ds PI \(*p
+ .    ds L" ``
+ .    ds R" ''
+ .    ds C`
+ .    ds C'
+ 'br\}
+ .\"
+ .\" Escape single quotes in literal strings from groff's Unicode transform.
+ .ie \n(.g .ds Aq \(aq
+ .el       .ds Aq '
+ .\"
+ .\" If the F register is >0, we'll generate index entries on stderr for
+ .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+ .\" entries marked with X<> in POD.  Of course, you'll have to process the
+ .\" output yourself in some meaningful fashion.
+ .\"
+ .\" Avoid warning from groff about undefined register 'F'.
+ .de IX
+ ..
+ .nr rF 0
+ .if \n(.g .if rF .nr rF 1
+ .if (\n(rF:(\n(.g==0)) \{\
+ .    if \nF \{\
+ .        de IX
+ .        tm Index:\\$1\t\\n%\t"\\$2"
+ ..
+ .        if !\nF==2 \{\
+ .            nr % 0
+ .            nr F 2
+ .        \}
+ .    \}
+ .\}
+ .rr rF
+ .\"
+ .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+ .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+ .    \" fudge factors for nroff and troff
+ .if n \{\
+ .    ds #H 0
+ .    ds #V .8m
+ .    ds #F .3m
+ .    ds #[ \f1
+ .    ds #] \fP
+ .\}
+ .if t \{\
+ .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+ .    ds #V .6m
+ .    ds #F 0
+ .    ds #[ \&
+ .    ds #] \&
+ .\}
+ .    \" simple accents for nroff and troff
+ .if n \{\
+ .    ds ' \&
+ .    ds ` \&
+ .    ds ^ \&
+ .    ds , \&
+ .    ds ~ ~
+ .    ds /
+ .\}
+ .if t \{\
+ .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+ .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+ .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+ .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+ .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+ .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+ .\}
+ .    \" troff and (daisy-wheel) nroff accents
+ .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+ .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+ .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+ .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+ .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+ .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+ .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+ .ds ae a\h'-(\w'a'u*4/10)'e
+ .ds Ae A\h'-(\w'A'u*4/10)'E
+ .    \" corrections for vroff
+ .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+ .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+ .    \" for low resolution devices (crt and lpr)
+ .if \n(.H>23 .if \n(.V>19 \
+ \{\
+ .    ds : e
+ .    ds 8 ss
+ .    ds o a
+ .    ds d- d\h'-1'\(ga
+ .    ds D- D\h'-1'\(hy
+ .    ds th \o'bp'
+ .    ds Th \o'LP'
+ .    ds ae ae
+ .    ds Ae AE
+ .\}
+ .rm #[ #] #H #V #F C
+ .\" ========================================================================
+ .\"
+ .IX Title "GDC 1"
+ .TH GDC 1 "2025-06-05" "gcc-13.4.0" "GNU"
+ .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+ .\" way too many mistakes in technical documents.
+ .if n .ad l
+ .nh
+ .SH "NAME"
+ gdc \- A GCC\-based compiler for the D language
+ .SH "SYNOPSIS"
+ .IX Header "SYNOPSIS"
+ gdc [\fB\-c\fR|\fB\-S\fR] [\fB\-g\fR] [\fB\-pg\fR]
+     [\fB\-O\fR\fIlevel\fR] [\fB\-W\fR\fIwarn\fR...]
+     [\fB\-I\fR\fIdir\fR...] [\fB\-L\fR\fIdir\fR...]
+     [\fB\-f\fR\fIoption\fR...] [\fB\-m\fR\fImachine-option\fR...]
+     [\fB\-o\fR \fIoutfile\fR] [@\fIfile\fR] \fIinfile\fR...
+ .PP
+ Only the most useful options are listed here; see below for the
+ remainder.
+ .SH "DESCRIPTION"
+ .IX Header "DESCRIPTION"
+ The \fBgdc\fR command is the \s-1GNU\s0 compiler for the D language and
+ supports many of the same options as \fBgcc\fR.  
+ This manual only documents the options specific to \fBgdc\fR.
+ .SH "OPTIONS"
+ .IX Header "OPTIONS"
+ .SS "Input and Output files"
+ .IX Subsection "Input and Output files"
+ For any given input file, the file name suffix determines what kind of
+ compilation is done.  The following kinds of input file names are supported:
+ .IP "\fIfile\fR\fB.d\fR" 4
+ .IX Item "file.d"
+ D source files.
+ .IP "\fIfile\fR\fB.dd\fR" 4
+ .IX Item "file.dd"
+ Ddoc source files.
+ .IP "\fIfile\fR\fB.di\fR" 4
+ .IX Item "file.di"
+ D interface files.
+ .PP
+ You can specify more than one input file on the \fBgdc\fR command line,
+ each being compiled separately in the compilation process.  If you specify a
+ \&\f(CW\*(C`\-o \f(CIfile\f(CW\*(C'\fR option, all the input files are compiled together,
+ producing a single output file, named \fIfile\fR.  This is allowed even
+ when using \f(CW\*(C`\-S\*(C'\fR or \f(CW\*(C`\-c\*(C'\fR.
+ .PP
+ A D interface file contains only what an import of the module needs,
+ rather than the whole implementation of that module.  They can be created
+ by \fBgdc\fR from a D source file by using the \f(CW\*(C`\-H\*(C'\fR option.
+ When the compiler resolves an import declaration, it searches for matching
+ \&\fI.di\fR files first, then for \fI.d\fR.
+ .PP
+ A Ddoc source file contains code in the D macro processor language.  It is
+ primarily designed for use in producing user documentation from embedded
+ comments, with a slight affinity towards \s-1HTML\s0 generation.  If a \fI.d\fR
+ source file starts with the string \f(CW\*(C`Ddoc\*(C'\fR then it is treated as general
+ purpose documentation, not as a D source file.
+ .SS "Runtime Options"
+ .IX Subsection "Runtime Options"
+ These options affect the runtime behavior of programs compiled with
+ \&\fBgdc\fR.
+ .IP "\fB\-fall\-instantiations\fR" 4
+ .IX Item "-fall-instantiations"
+ Generate code for all template instantiations.  The default template emission
+ strategy is to not generate code for declarations that were either
+ instantiated speculatively, such as from \f(CW\*(C`_\|_traits(compiles, ...)\*(C'\fR, or
+ that come from an imported module not being compiled.
+ .IP "\fB\-fno\-assert\fR" 4
+ .IX Item "-fno-assert"
+ Turn off code generation for \f(CW\*(C`assert\*(C'\fR contracts.
+ .IP "\fB\-fno\-bounds\-check\fR" 4
+ .IX Item "-fno-bounds-check"
+ Turns off array bounds checking for all functions, which can improve
+ performance for code that uses arrays extensively.  Note that this
+ can result in unpredictable behavior if the code in question actually
+ does violate array bounds constraints.  It is safe to use this option
+ if you are sure that your code never throws a \f(CW\*(C`RangeError\*(C'\fR.
+ .IP "\fB\-fbounds\-check=\fR\fIvalue\fR" 4
+ .IX Item "-fbounds-check=value"
+ An alternative to \fB\-fbounds\-check\fR that allows more control
+ as to where bounds checking is turned on or off.  The following values
+ are supported:
+ .RS 4
+ .IP "\fBon\fR" 4
+ .IX Item "on"
+ Turns on array bounds checking for all functions.
+ .IP "\fBsafeonly\fR" 4
+ .IX Item "safeonly"
+ Turns on array bounds checking only for \f(CW@safe\fR functions.
+ .IP "\fBoff\fR" 4
+ .IX Item "off"
+ Turns off array bounds checking completely.
+ .RE
+ .RS 4
+ .RE
+ .IP "\fB\-fno\-builtin\fR" 4
+ .IX Item "-fno-builtin"
+ Don't recognize built-in functions unless they begin with the prefix
+ \&\fB_\|_builtin_\fR.  By default, the compiler will recognize when a
+ function in the \f(CW\*(C`core.stdc\*(C'\fR package is a built-in function.
+ .IP "\fB\-fcheckaction=\fR\fIvalue\fR" 4
+ .IX Item "-fcheckaction=value"
+ This option controls what code is generated on an assertion, bounds check, or
+ final switch failure.  The following values are supported:
+ .RS 4
+ .IP "\fBcontext\fR" 4
+ .IX Item "context"
+ Throw an \f(CW\*(C`AssertError\*(C'\fR with extra context information.
+ .IP "\fBhalt\fR" 4
+ .IX Item "halt"
+ Halt the program execution.
+ .IP "\fBthrow\fR" 4
+ .IX Item "throw"
+ Throw an \f(CW\*(C`AssertError\*(C'\fR (the default).
+ .RE
+ .RS 4
+ .RE
+ .IP "\fB\-fdebug\fR" 4
+ .IX Item "-fdebug"
+ .PD 0
+ .IP "\fB\-fdebug=\fR\fIvalue\fR" 4
+ .IX Item "-fdebug=value"
+ .PD
+ Turn on compilation of conditional \f(CW\*(C`debug\*(C'\fR code into the program.
+ The \fB\-fdebug\fR option itself sets the debug level to \f(CW1\fR,
+ while \fB\-fdebug=\fR enables \f(CW\*(C`debug\*(C'\fR code that are identified
+ by any of the following values:
+ .RS 4
+ .IP "\fBident\fR" 4
+ .IX Item "ident"
+ Turns on compilation of any \f(CW\*(C`debug\*(C'\fR code identified by \fIident\fR.
+ .RE
+ .RS 4
+ .RE
+ .IP "\fB\-fno\-druntime\fR" 4
+ .IX Item "-fno-druntime"
+ Implements <\fBhttps://dlang.org/spec/betterc.html\fR>.  Assumes that
+ compilation targets an environment without a D runtime library.
+ .Sp
+ This is equivalent to compiling with the following options:
+ .Sp
+ .Vb 1
+ \&        gdc \-nophoboslib \-fno\-exceptions \-fno\-moduleinfo \-fno\-rtti
+ .Ve
+ .IP "\fB\-fextern\-std=\fR\fIstandard\fR" 4
+ .IX Item "-fextern-std=standard"
+ Sets the \*(C+ name mangling compatibility to the version identified by
+ \&\fIstandard\fR.  The following values are supported:
+ .RS 4
+ .IP "\fBc++98\fR" 4
+ .IX Item "c++98"
+ .PD 0
+ .IP "\fBc++03\fR" 4
+ .IX Item "c++03"
+ .PD
+ Sets \f(CW\*(C`_\|_traits(getTargetInfo, "cppStd")\*(C'\fR to \f(CW199711\fR.
+ .IP "\fBc++11\fR" 4
+ .IX Item "c++11"
+ Sets \f(CW\*(C`_\|_traits(getTargetInfo, "cppStd")\*(C'\fR to \f(CW201103\fR.
+ .IP "\fBc++14\fR" 4
+ .IX Item "c++14"
+ Sets \f(CW\*(C`_\|_traits(getTargetInfo, "cppStd")\*(C'\fR to \f(CW201402\fR.
+ .IP "\fBc++17\fR" 4
+ .IX Item "c++17"
+ Sets \f(CW\*(C`_\|_traits(getTargetInfo, "cppStd")\*(C'\fR to \f(CW201703\fR.
+ This is the default.
+ .IP "\fBc++20\fR" 4
+ .IX Item "c++20"
+ Sets \f(CW\*(C`_\|_traits(getTargetInfo, "cppStd")\*(C'\fR to \f(CW202002\fR.
+ .RE
+ .RS 4
+ .RE
+ .IP "\fB\-fno\-invariants\fR" 4
+ .IX Item "-fno-invariants"
+ Turns off code generation for class \f(CW\*(C`invariant\*(C'\fR contracts.
+ .IP "\fB\-fmain\fR" 4
+ .IX Item "-fmain"
+ Generates a default \f(CW\*(C`main()\*(C'\fR function when compiling.  This is useful when
+ unittesting a library, as it enables running the unittests in a library without
+ having to manually define an entry-point function.  This option does nothing
+ when \f(CW\*(C`main\*(C'\fR is already defined in user code.
+ .IP "\fB\-fno\-moduleinfo\fR" 4
+ .IX Item "-fno-moduleinfo"
+ Turns off generation of the \f(CW\*(C`ModuleInfo\*(C'\fR and related functions
+ that would become unreferenced without it, which may allow linking
+ to programs not written in D.  Functions that are not be generated
+ include module constructors and destructors (\f(CW\*(C`static this\*(C'\fR and
+ \&\f(CW\*(C`static ~this\*(C'\fR), \f(CW\*(C`unittest\*(C'\fR code, and \f(CW\*(C`DSO\*(C'\fR registry
+ functions for dynamically linked code.
+ .IP "\fB\-fonly=\fR\fIfilename\fR" 4
+ .IX Item "-fonly=filename"
+ Tells the compiler to parse and run semantic analysis on all modules
+ on the command line, but only generate code for the module specified
+ by \fIfilename\fR.
+ .IP "\fB\-fno\-postconditions\fR" 4
+ .IX Item "-fno-postconditions"
+ Turns off code generation for postcondition \f(CW\*(C`out\*(C'\fR contracts.
+ .IP "\fB\-fno\-preconditions\fR" 4
+ .IX Item "-fno-preconditions"
+ Turns off code generation for precondition \f(CW\*(C`in\*(C'\fR contracts.
+ .IP "\fB\-fpreview=\fR\fIid\fR" 4
+ .IX Item "-fpreview=id"
+ Turns on an upcoming D language change identified by \fIid\fR.  The following
+ values are supported:
+ .RS 4
+ .IP "\fBall\fR" 4
+ .IX Item "all"
+ Turns on all upcoming D language features.
+ .IP "\fBbitfields\fR" 4
+ .IX Item "bitfields"
+ Implements bit-fields in D.
+ .IP "\fBdip1000\fR" 4
+ .IX Item "dip1000"
+ Implements <\fBhttps://github.com/dlang/DIPs/blob/master/DIPs/other/DIP1000.md\fR>
+ (Scoped pointers).
+ .IP "\fBdip1008\fR" 4
+ .IX Item "dip1008"
+ Implements <\fBhttps://github.com/dlang/DIPs/blob/master/DIPs/other/DIP1008.md\fR>
+ (Allow exceptions in \f(CW@nogc\fR code).
+ .IP "\fBdip1021\fR" 4
+ .IX Item "dip1021"
+ Implements <\fBhttps://github.com/dlang/DIPs/blob/master/DIPs/accepted/DIP1021.md\fR>
+ (Mutable function arguments).
+ .IP "\fBdip25\fR" 4
+ .IX Item "dip25"
+ Implements <\fBhttps://github.com/dlang/DIPs/blob/master/DIPs/archive/DIP25.md\fR>
+ (Sealed references).
+ .IP "\fBdtorfields\fR" 4
+ .IX Item "dtorfields"
+ Turns on generation for destructing fields of partially constructed objects.
+ .IP "\fBfieldwise\fR" 4
+ .IX Item "fieldwise"
+ Turns on generation of struct equality to use field-wise comparisons.
+ .IP "\fBfixaliasthis\fR" 4
+ .IX Item "fixaliasthis"
+ Implements new lookup rules that check the current scope for \f(CW\*(C`alias this\*(C'\fR
+ before searching in upper scopes.
+ .IP "\fBfiximmutableconv\fR" 4
+ .IX Item "fiximmutableconv"
+ Disallows unsound immutable conversions that were formerly incorrectly
+ permitted.
+ .IP "\fBin\fR" 4
+ .IX Item "in"
+ Implements \f(CW\*(C`in\*(C'\fR parameters to mean \f(CW\*(C`scope const [ref]\*(C'\fR and accepts
+ rvalues.
+ .IP "\fBinclusiveincontracts\fR" 4
+ .IX Item "inclusiveincontracts"
+ Implements \f(CW\*(C`in\*(C'\fR contracts of overridden methods to be a superset of parent
+ contract.
+ .IP "\fBnosharedaccess\fR" 4
+ .IX Item "nosharedaccess"
+ Turns off and disallows all access to shared memory objects.
+ .IP "\fBrvaluerefparam\fR" 4
+ .IX Item "rvaluerefparam"
+ Implements rvalue arguments to \f(CW\*(C`ref\*(C'\fR parameters.
+ .IP "\fBsystemvariables\fR" 4
+ .IX Item "systemvariables"
+ Disables access to variables marked \f(CW@system\fR from \f(CW@safe\fR code.
+ .RE
+ .RS 4
+ .RE
+ .IP "\fB\-frelease\fR" 4
+ .IX Item "-frelease"
+ Turns on compiling in release mode, which means not emitting runtime
+ checks for contracts and asserts.  Array bounds checking is not done
+ for \f(CW@system\fR and \f(CW@trusted\fR functions, and assertion
+ failures are undefined behavior.
+ .Sp
+ This is equivalent to compiling with the following options:
+ .Sp
+ .Vb 2
+ \&        gdc \-fno\-assert \-fbounds\-check=safe \-fno\-invariants \e
+ \&            \-fno\-postconditions \-fno\-preconditions \-fno\-switch\-errors
+ .Ve
+ .IP "\fB\-frevert=\fR" 4
+ .IX Item "-frevert="
+ Turns off a D language feature identified by \fIid\fR.  The following values
+ are supported:
+ .RS 4
+ .IP "\fBall\fR" 4
+ .IX Item "all"
+ Turns off all revertable D language features.
+ .IP "\fBdip1000\fR" 4
+ .IX Item "dip1000"
+ Reverts <\fBhttps://github.com/dlang/DIPs/blob/master/DIPs/other/DIP1000.md\fR>
+ (Scoped pointers).
+ .IP "\fBdip25\fR" 4
+ .IX Item "dip25"
+ Reverts <\fBhttps://github.com/dlang/DIPs/blob/master/DIPs/archive/DIP25.md\fR>
+ (Sealed references).
+ .IP "\fBdtorfields\fR" 4
+ .IX Item "dtorfields"
+ Turns off generation for destructing fields of partially constructed objects.
+ .IP "\fBintpromote\fR" 4
+ .IX Item "intpromote"
+ Turns off C\-style integral promotion for unary \f(CW\*(C`+\*(C'\fR, \f(CW\*(C`\-\*(C'\fR and \f(CW\*(C`~\*(C'\fR
+ expressions.
+ .RE
+ .RS 4
+ .RE
+ .IP "\fB\-fno\-rtti\fR" 4
+ .IX Item "-fno-rtti"
+ Turns off generation of run-time type information for all user defined types.
+ Any code that uses features of the language that require access to this
+ information will result in an error.
+ .IP "\fB\-fno\-switch\-errors\fR" 4
+ .IX Item "-fno-switch-errors"
+ This option controls what code is generated when no case is matched
+ in a \f(CW\*(C`final switch\*(C'\fR statement.  The default run time behavior
+ is to throw a \f(CW\*(C`SwitchError\*(C'\fR.  Turning off \fB\-fswitch\-errors\fR
+ means that instead the execution of the program is immediately halted.
+ .IP "\fB\-funittest\fR" 4
+ .IX Item "-funittest"
+ Turns on compilation of \f(CW\*(C`unittest\*(C'\fR code, and turns on the
+ \&\f(CW\*(C`version(unittest)\*(C'\fR identifier.  This implies \fB\-fassert\fR.
+ .IP "\fB\-fversion=\fR\fIvalue\fR" 4
+ .IX Item "-fversion=value"
+ Turns on compilation of conditional \f(CW\*(C`version\*(C'\fR code into the program
+ identified by any of the following values:
+ .RS 4
+ .IP "\fBident\fR" 4
+ .IX Item "ident"
+ Turns on compilation of \f(CW\*(C`version\*(C'\fR code identified by \fIident\fR.
+ .RE
+ .RS 4
+ .RE
+ .IP "\fB\-fno\-weak\-templates\fR" 4
+ .IX Item "-fno-weak-templates"
+ Turns off emission of declarations that can be defined in multiple objects as
+ weak symbols.  The default is to emit all public symbols as weak, unless the
+ target lacks support for weak symbols.  Disabling this option means that common
+ symbols are instead put in \s-1COMDAT\s0 or become private.
+ .SS "Options for Directory Search"
+ .IX Subsection "Options for Directory Search"
+ These options specify directories to search for files, libraries, and
+ other parts of the compiler:
+ .IP "\fB\-I\fR\fIdir\fR" 4
+ .IX Item "-Idir"
+ Specify a directory to use when searching for imported modules at
+ compile time.  Multiple \fB\-I\fR options can be used, and the
+ paths are searched in the same order.
+ .IP "\fB\-J\fR\fIdir\fR" 4
+ .IX Item "-Jdir"
+ Specify a directory to use when searching for files in string imports
+ at compile time.  This switch is required in order to use
+ \&\f(CW\*(C`import(file)\*(C'\fR expressions.  Multiple \fB\-J\fR options can be
+ used, and the paths are searched in the same order.
+ .IP "\fB\-L\fR\fIdir\fR" 4
+ .IX Item "-Ldir"
+ When linking, specify a library search directory, as with \fBgcc\fR.
+ .IP "\fB\-B\fR\fIdir\fR" 4
+ .IX Item "-Bdir"
+ This option specifies where to find the executables, libraries,
+ source files, and data files of the compiler itself, as with \fBgcc\fR.
+ .IP "\fB\-fmodule\-file=\fR\fImodule\fR\fB=\fR\fIspec\fR" 4
+ .IX Item "-fmodule-file=module=spec"
+ This option manipulates file paths of imported modules, such that if an
+ imported module matches all or the leftmost part of \fImodule\fR, the file
+ path in \fIspec\fR is used as the location to search for D sources.
+ This is used when the source file path and names are not the same as the
+ package and module hierarchy.  Consider the following examples:
+ .Sp
+ .Vb 1
+ \&        gdc test.d \-fmodule\-file=A.B=foo.d \-fmodule\-file=C=bar
+ .Ve
+ .Sp
+ This will tell the compiler to search in all import paths for the source
+ file \fIfoo.d\fR when importing \fIA.B\fR, and the directory \fIbar/\fR
+ when importing \fIC\fR, as annotated in the following D code:
+ .Sp
+ .Vb 4
+ \&        module test;
+ \&        import A.B;     // Matches A.B, searches for foo.d
+ \&        import C.D.E;   // Matches C, searches for bar/D/E.d
+ \&        import A.B.C;   // No match, searches for A/B/C.d
+ .Ve
+ .IP "\fB\-imultilib\fR \fIdir\fR" 4
+ .IX Item "-imultilib dir"
+ Use \fIdir\fR as a subdirectory of the gcc directory containing
+ target-specific D sources and interfaces.
+ .IP "\fB\-iprefix\fR \fIprefix\fR" 4
+ .IX Item "-iprefix prefix"
+ Specify \fIprefix\fR as the prefix for the gcc directory containing
+ target-specific D sources and interfaces.  If the \fIprefix\fR represents
+ a directory, you should include the final \f(CW\*(Aq/\*(Aq\fR.
+ .IP "\fB\-nostdinc\fR" 4
+ .IX Item "-nostdinc"
+ Do not search the standard system directories for D source and interface
+ files.  Only the directories that have been specified with \fB\-I\fR options
+ (and the directory of the current file, if appropriate) are searched.
+ .SS "Code Generation"
+ .IX Subsection "Code Generation"
+ In addition to the many \fBgcc\fR options controlling code generation,
+ \&\fBgdc\fR has several options specific to itself.
+ .IP "\fB\-H\fR" 4
+ .IX Item "-H"
+ Generates D interface files for all modules being compiled.  The compiler
+ determines the output file based on the name of the input file, removes
+ any directory components and suffix, and applies the \fI.di\fR suffix.
+ .IP "\fB\-Hd\fR \fIdir\fR" 4
+ .IX Item "-Hd dir"
+ Same as \fB\-H\fR, but writes interface files to directory \fIdir\fR.
+ This option can be used with \fB\-Hf\fR \fIfile\fR to independently set the
+ output file and directory path.
+ .IP "\fB\-Hf\fR \fIfile\fR" 4
+ .IX Item "-Hf file"
+ Same as \fB\-H\fR but writes interface files to \fIfile\fR.  This option can
+ be used with \fB\-Hd\fR \fIdir\fR to independently set the output file and
+ directory path.
+ .IP "\fB\-M\fR" 4
+ .IX Item "-M"
+ Output the module dependencies of all source files being compiled in a
+ format suitable for \fBmake\fR.  The compiler outputs one
+ \&\fBmake\fR rule containing the object file name for that source file,
+ a colon, and the names of all imported files.
+ .IP "\fB\-MM\fR" 4
+ .IX Item "-MM"
+ Like \fB\-M\fR but does not mention imported modules from the D standard
+ library package directories.
+ .IP "\fB\-MF\fR \fIfile\fR" 4
+ .IX Item "-MF file"
+ When used with \fB\-M\fR or \fB\-MM\fR, specifies a \fIfile\fR to write
+ the dependencies to.  When used with the driver options \fB\-MD\fR or
+ \&\fB\-MMD\fR, \fB\-MF\fR overrides the default dependency output file.
+ .IP "\fB\-MG\fR" 4
+ .IX Item "-MG"
+ This option is for compatibility with \fBgcc\fR, and is ignored by the
+ compiler.
+ .IP "\fB\-MP\fR" 4
+ .IX Item "-MP"
+ Outputs a phony target for each dependency other than the modules being
+ compiled, causing each to depend on nothing.
+ .IP "\fB\-MT\fR \fItarget\fR" 4
+ .IX Item "-MT target"
+ Change the \fItarget\fR of the rule emitted by dependency generation
+ to be exactly the string you specify.  If you want multiple targets,
+ you can specify them as a single argument to \fB\-MT\fR, or use
+ multiple \fB\-MT\fR options.
+ .IP "\fB\-MQ\fR \fItarget\fR" 4
+ .IX Item "-MQ target"
+ Same as \fB\-MT\fR, but it quotes any characters which are special to
+ \&\fBmake\fR.
+ .IP "\fB\-MD\fR" 4
+ .IX Item "-MD"
+ This option is equivalent to \fB\-M \-MF\fR \fIfile\fR.  The driver
+ determines \fIfile\fR by removing any directory components and suffix
+ from the input file, and then adding a \fI.deps\fR suffix.
+ .IP "\fB\-MMD\fR" 4
+ .IX Item "-MMD"
+ Like \fB\-MD\fR but does not mention imported modules from the D standard
+ library package directories.
+ .IP "\fB\-X\fR" 4
+ .IX Item "-X"
+ Output information describing the contents of all source files being
+ compiled in \s-1JSON\s0 format to a file.  The driver determines \fIfile\fR by
+ removing any directory components and suffix from the input file, and then
+ adding a \fI.json\fR suffix.
+ .IP "\fB\-Xf\fR \fIfile\fR" 4
+ .IX Item "-Xf file"
+ Same as \fB\-X\fR, but writes all \s-1JSON\s0 contents to the specified
+ \&\fIfile\fR.
+ .IP "\fB\-fdoc\fR" 4
+ .IX Item "-fdoc"
+ Generates \f(CW\*(C`Ddoc\*(C'\fR documentation and writes it to a file.  The compiler
+ determines \fIfile\fR by removing any directory components and suffix
+ from the input file, and then adding a \fI.html\fR suffix.
+ .IP "\fB\-fdoc\-dir=\fR\fIdir\fR" 4
+ .IX Item "-fdoc-dir=dir"
+ Same as \fB\-fdoc\fR, but writes documentation to directory \fIdir\fR.
+ This option can be used with \fB\-fdoc\-file=\fR\fIfile\fR to
+ independently set the output file and directory path.
+ .IP "\fB\-fdoc\-file=\fR\fIfile\fR" 4
+ .IX Item "-fdoc-file=file"
+ Same as \fB\-fdoc\fR, but writes documentation to \fIfile\fR.  This
+ option can be used with \fB\-fdoc\-dir=\fR\fIdir\fR to independently
+ set the output file and directory path.
+ .IP "\fB\-fdoc\-inc=\fR\fIfile\fR" 4
+ .IX Item "-fdoc-inc=file"
+ Specify \fIfile\fR as a \fIDdoc\fR macro file to be read.  Multiple
+ \&\fB\-fdoc\-inc\fR options can be used, and files are read and processed
+ in the same order.
+ .IP "\fB\-fdump\-c++\-spec=\fR\fIfile\fR" 4
+ .IX Item "-fdump-c++-spec=file"
+ For D source files, generate corresponding \*(C+ declarations in \fIfile\fR.
+ .IP "\fB\-fdump\-c++\-spec\-verbose\fR" 4
+ .IX Item "-fdump-c++-spec-verbose"
+ In conjunction with \fB\-fdump\-c++\-spec=\fR above, add comments for ignored
+ declarations in the generated \*(C+ header.
+ .IP "\fB\-fsave\-mixins=\fR\fIfile\fR" 4
+ .IX Item "-fsave-mixins=file"
+ Generates code expanded from D \f(CW\*(C`mixin\*(C'\fR statements and writes the
+ processed sources to \fIfile\fR.  This is useful to debug errors in compilation
+ and provides source for debuggers to show when requested.
+ .SS "Warnings"
+ .IX Subsection "Warnings"
+ Warnings are diagnostic messages that report constructions that
+ are not inherently erroneous but that are risky or suggest there
+ is likely to be a bug in the program.  Unless \fB\-Werror\fR is
+ specified, they do not prevent compilation of the program.
+ .IP "\fB\-Wall\fR" 4
+ .IX Item "-Wall"
+ Turns on all warnings messages.  Warnings are not a defined part of
+ the D language, and all constructs for which this may generate a
+ warning message are valid code.
+ .IP "\fB\-Walloca\fR" 4
+ .IX Item "-Walloca"
+ This option warns on all uses of \*(L"alloca\*(R" in the source.
+ .IP "\fB\-Walloca\-larger\-than=\fR\fIn\fR" 4
+ .IX Item "-Walloca-larger-than=n"
+ Warn on unbounded uses of alloca, and on bounded uses of alloca
+ whose bound can be larger than \fIn\fR bytes.
+ \&\fB\-Wno\-alloca\-larger\-than\fR disables
+ \&\fB\-Walloca\-larger\-than\fR warning and is equivalent to
+ \&\fB\-Walloca\-larger\-than=\fR\fI\s-1SIZE_MAX\s0\fR or larger.
+ .IP "\fB\-Wno\-builtin\-declaration\-mismatch\fR" 4
+ .IX Item "-Wno-builtin-declaration-mismatch"
+ Warn if a built-in function is declared with an incompatible signature.
+ .IP "\fB\-Wcast\-result\fR" 4
+ .IX Item "-Wcast-result"
+ Warn about casts that will produce a null or zero result.  Currently
+ this is only done for casting between an imaginary and non-imaginary
+ data type, or casting between a D and \*(C+ class.
+ .IP "\fB\-Wno\-deprecated\fR" 4
+ .IX Item "-Wno-deprecated"
+ Do not warn about usage of deprecated features and symbols with
+ \&\f(CW\*(C`deprecated\*(C'\fR attributes.
+ .IP "\fB\-Werror\fR" 4
+ .IX Item "-Werror"
+ Turns all warnings into errors.
+ .IP "\fB\-Wextra\fR" 4
+ .IX Item "-Wextra"
+ This enables some extra warning flags that are not enabled by
+ \&\fB\-Wall\fR.
+ .Sp
+ \&\fB\-Waddress
+ \&\-Wcast\-result
+ \&\-Wmismatched\-special\-enum
+ \&\-Wunknown\-pragmas\fR
+ .IP "\fB\-Wmismatched\-special\-enum\fR" 4
+ .IX Item "-Wmismatched-special-enum"
+ Warn when an enum the compiler recognizes as special is declared with a
+ different size to the built-in type it is representing.
+ .IP "\fB\-Wspeculative\fR" 4
+ .IX Item "-Wspeculative"
+ List all error messages from speculative compiles, such as
+ \&\f(CW\*(C`_\|_traits(compiles, ...)\*(C'\fR.  This option does not report
+ messages as warnings, and these messages therefore never become
+ errors when the \fB\-Werror\fR option is also used.
+ .IP "\fB\-Wunknown\-pragmas\fR" 4
+ .IX Item "-Wunknown-pragmas"
+ Warn when a \f(CW\*(C`pragma()\*(C'\fR is encountered that is not understood by
+ \&\fBgdc\fR.  This differs from \fB\-fignore\-unknown\-pragmas\fR
+ where a pragma that is part of the D language, but not implemented by
+ the compiler, won't get reported.
+ .IP "\fB\-Wno\-varargs\fR" 4
+ .IX Item "-Wno-varargs"
+ Do not warn upon questionable usage of the macros used to handle variable
+ arguments like \f(CW\*(C`va_start\*(C'\fR.
+ .IP "\fB\-fignore\-unknown\-pragmas\fR" 4
+ .IX Item "-fignore-unknown-pragmas"
+ Turns off errors for unsupported pragmas.
+ .IP "\fB\-fmax\-errors=\fR\fIn\fR" 4
+ .IX Item "-fmax-errors=n"
+ Limits the maximum number of error messages to \fIn\fR, at which point
+ \&\fBgdc\fR bails out rather than attempting to continue processing the
+ source code.  If \fIn\fR is 0 (the default), there is no limit on the
+ number of error messages produced.
+ .IP "\fB\-fsyntax\-only\fR" 4
+ .IX Item "-fsyntax-only"
+ Check the code for syntax errors, but do not actually compile it.  This
+ can be used in conjunction with \fB\-fdoc\fR or \fB\-H\fR to generate
+ files for each module present on the command-line, but no other output
+ file.
+ .IP "\fB\-ftransition=\fR\fIid\fR" 4
+ .IX Item "-ftransition=id"
+ Report additional information about D language changes identified by
+ \&\fIid\fR.  The following values are supported:
+ .RS 4
+ .IP "\fBall\fR" 4
+ .IX Item "all"
+ List information on all D language transitions.
+ .IP "\fBcomplex\fR" 4
+ .IX Item "complex"
+ List all usages of complex or imaginary types.
+ .IP "\fBfield\fR" 4
+ .IX Item "field"
+ List all non-mutable fields which occupy an object instance.
+ .IP "\fBin\fR" 4
+ .IX Item "in"
+ List all usages of \f(CW\*(C`in\*(C'\fR on parameter.
+ .IP "\fBnogc\fR" 4
+ .IX Item "nogc"
+ List all hidden \s-1GC\s0 allocations.
+ .IP "\fBtemplates\fR" 4
+ .IX Item "templates"
+ List statistics on template instantiations.
+ .IP "\fBtls\fR" 4
+ .IX Item "tls"
+ List all variables going into thread local storage.
+ .RE
+ .RS 4
+ .RE
+ .SS "Options for Linking"
+ .IX Subsection "Options for Linking"
+ These options come into play when the compiler links object files into an
+ executable output file.  They are meaningless if the compiler is not doing
+ a link step.
+ .IP "\fB\-defaultlib=\fR\fIlibname\fR" 4
+ .IX Item "-defaultlib=libname"
+ Specify the library to use instead of libphobos when linking.  Options
+ specifying the linkage of libphobos, such as \fB\-static\-libphobos\fR
+ or \fB\-shared\-libphobos\fR, are ignored.
+ .IP "\fB\-debuglib=\fR\fIlibname\fR" 4
+ .IX Item "-debuglib=libname"
+ Specify the debug library to use instead of libphobos when linking.
+ This option has no effect unless the \fB\-g\fR option was also given
+ on the command line.  Options specifying the linkage of libphobos, such
+ as \fB\-static\-libphobos\fR or \fB\-shared\-libphobos\fR, are ignored.
+ .IP "\fB\-nophoboslib\fR" 4
+ .IX Item "-nophoboslib"
+ Do not use the Phobos or D runtime library when linking.  Options specifying
+ the linkage of libphobos, such as \fB\-static\-libphobos\fR or
+ \&\fB\-shared\-libphobos\fR, are ignored.  The standard system libraries are
+ used normally, unless \fB\-nostdlib\fR or \fB\-nodefaultlibs\fR is used.
+ .IP "\fB\-shared\-libphobos\fR" 4
+ .IX Item "-shared-libphobos"
+ On systems that provide \fIlibgphobos\fR and \fIlibgdruntime\fR as a
+ shared and a static library, this option forces the use of the shared
+ version.  If no shared version was built when the compiler was configured,
+ this option has no effect.
+ .IP "\fB\-static\-libphobos\fR" 4
+ .IX Item "-static-libphobos"
+ On systems that provide \fIlibgphobos\fR and \fIlibgdruntime\fR as a
+ shared and a static library, this option forces the use of the static
+ version.  If no static version was built when the compiler was configured,
+ this option has no effect.
+ .SS "Developer Options"
+ .IX Subsection "Developer Options"
+ This section describes command-line options that are primarily of
+ interest to developers or language tooling.
+ .IP "\fB\-fdump\-d\-original\fR" 4
+ .IX Item "-fdump-d-original"
+ Output the internal front-end \s-1AST\s0 after the \f(CW\*(C`semantic3\*(C'\fR stage.
+ This option is only useful for debugging the \s-1GNU D\s0 compiler itself.
+ .IP "\fB\-v\fR" 4
+ .IX Item "-v"
+ Dump information about the compiler language processing stages as the source
+ program is being compiled.  This includes listing all modules that are
+ processed through the \f(CW\*(C`parse\*(C'\fR, \f(CW\*(C`semantic\*(C'\fR, \f(CW\*(C`semantic2\*(C'\fR, and
+ \&\f(CW\*(C`semantic3\*(C'\fR stages; all \f(CW\*(C`import\*(C'\fR modules and their file paths;
+ and all \f(CW\*(C`function\*(C'\fR bodies that are being compiled.
+ .SH "SEE ALSO"
+ .IX Header "SEE ALSO"
+ \&\fBgpl\fR\|(7), \fBgfdl\fR\|(7), \fBfsf\-funding\fR\|(7), \fBgcc\fR\|(1)
+ and the Info entries for \fIgdc\fR and \fIgcc\fR.
+ .SH "COPYRIGHT"
+ .IX Header "COPYRIGHT"
+ Copyright (c) 2006\-2023 Free Software Foundation, Inc.
+ .PP
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or
+ any later version published by the Free Software Foundation; with no
+ Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+ A copy of the license is included in the
+ man page \fBgfdl\fR\|(7).
diff -Nrcpad gcc-13.3.0/gcc/doc/gdc.info gcc-13.4.0/gcc/doc/gdc.info
*** gcc-13.3.0/gcc/doc/gdc.info	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/doc/gdc.info	Thu Jun  5 16:30:28 2025
***************
*** 0 ****
--- 1,4551 ----
+ This is gdc.info, produced by makeinfo version 6.8 from gdc.texi.
+ 
+ Copyright (C) 2006-2023 Free Software Foundation, Inc.
+ 
+    Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3 or
+ any later version published by the Free Software Foundation; with no
+ Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.  A
+ copy of the license is included in the section entitled "GNU Free
+ Documentation License".
+ INFO-DIR-SECTION Software development
+ START-INFO-DIR-ENTRY
+ * gdc: (gdc).               A GCC-based compiler for the D language
+ END-INFO-DIR-ENTRY
+ 
+ 
+    Copyright (C) 2006-2023 Free Software Foundation, Inc.
+ 
+    Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3 or
+ any later version published by the Free Software Foundation; with no
+ Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.  A
+ copy of the license is included in the section entitled "GNU Free
+ Documentation License".
+ 
+ 
+ File: gdc.info,  Node: Top,  Next: Invoking gdc,  Up: (dir)
+ 
+ Introduction
+ ************
+ 
+ This manual describes how to use 'gdc', the GNU compiler for the D
+ programming language.  This manual is specifically about how to invoke
+ 'gdc', as well as its features and incompatibilities.  For more
+ information about the D programming language in general, including
+ language specifications and standard package documentation, see
+ <https://dlang.org/>.
+ 
+ * Menu:
+ 
+ * Invoking gdc::                How to run gdc.
+ * D Implementation::            User-visible implementation details.
+ * Copying::                     The GNU General Public License.
+ * GNU Free Documentation License::
+                                 How you can share and copy this manual.
+ * Option Index::                Index of command line options.
+ * Keyword Index::               Index of concepts.
+ 
+ 
+ File: gdc.info,  Node: Invoking gdc,  Next: D Implementation,  Prev: Top,  Up: Top
+ 
+ 1 Invoking gdc
+ **************
+ 
+ The 'gdc' command is the GNU compiler for the D language and supports
+ many of the same options as 'gcc'.  *Note Option Summary: (gcc)Option
+ Summary.  This manual only documents the options specific to 'gdc'.
+ 
+ * Menu:
+ 
+ * Input and Output files::  Controlling the kind of output:
+                             an executable, object files, assembler files,
+ * Runtime Options::         Options controlling runtime behavior
+ * Directory Options::       Where to find module files
+ * Code Generation::         Options controlling the output of gdc
+ * Warnings::                Options controlling warnings specific to gdc
+ * Linking::                 Options influencing the linking step
+ * Developer Options::       Options useful for developers of gdc
+ 
+ 
+ File: gdc.info,  Node: Input and Output files,  Next: Runtime Options,  Up: Invoking gdc
+ 
+ 1.1 Input and Output files
+ ==========================
+ 
+ For any given input file, the file name suffix determines what kind of
+ compilation is done.  The following kinds of input file names are
+ supported:
+ 
+ 'FILE.d'
+      D source files.
+ 'FILE.dd'
+      Ddoc source files.
+ 'FILE.di'
+      D interface files.
+ 
+    You can specify more than one input file on the 'gdc' command line,
+ each being compiled separately in the compilation process.  If you
+ specify a '-o FILE' option, all the input files are compiled together,
+ producing a single output file, named FILE.  This is allowed even when
+ using '-S' or '-c'.
+ 
+    A D interface file contains only what an import of the module needs,
+ rather than the whole implementation of that module.  They can be
+ created by 'gdc' from a D source file by using the '-H' option.  When
+ the compiler resolves an import declaration, it searches for matching
+ '.di' files first, then for '.d'.
+ 
+    A Ddoc source file contains code in the D macro processor language.
+ It is primarily designed for use in producing user documentation from
+ embedded comments, with a slight affinity towards HTML generation.  If a
+ '.d' source file starts with the string 'Ddoc' then it is treated as
+ general purpose documentation, not as a D source file.
+ 
+ 
+ File: gdc.info,  Node: Runtime Options,  Next: Directory Options,  Prev: Input and Output files,  Up: Invoking gdc
+ 
+ 1.2 Runtime Options
+ ===================
+ 
+ These options affect the runtime behavior of programs compiled with
+ 'gdc'.
+ 
+ '-fall-instantiations'
+      Generate code for all template instantiations.  The default
+      template emission strategy is to not generate code for declarations
+      that were either instantiated speculatively, such as from
+      '__traits(compiles, ...)', or that come from an imported module not
+      being compiled.
+ 
+ '-fno-assert'
+      Turn off code generation for 'assert' contracts.
+ 
+ '-fno-bounds-check'
+      Turns off array bounds checking for all functions, which can
+      improve performance for code that uses arrays extensively.  Note
+      that this can result in unpredictable behavior if the code in
+      question actually does violate array bounds constraints.  It is
+      safe to use this option if you are sure that your code never throws
+      a 'RangeError'.
+ 
+ '-fbounds-check=VALUE'
+      An alternative to '-fbounds-check' that allows more control as to
+      where bounds checking is turned on or off.  The following values
+      are supported:
+ 
+      'on'
+           Turns on array bounds checking for all functions.
+      'safeonly'
+           Turns on array bounds checking only for '@safe' functions.
+      'off'
+           Turns off array bounds checking completely.
+ 
+ '-fno-builtin'
+      Don't recognize built-in functions unless they begin with the
+      prefix '__builtin_'.  By default, the compiler will recognize when
+      a function in the 'core.stdc' package is a built-in function.
+ 
+ '-fcheckaction=VALUE'
+      This option controls what code is generated on an assertion, bounds
+      check, or final switch failure.  The following values are
+      supported:
+ 
+      'context'
+           Throw an 'AssertError' with extra context information.
+      'halt'
+           Halt the program execution.
+      'throw'
+           Throw an 'AssertError' (the default).
+ 
+ '-fdebug'
+ '-fdebug=VALUE'
+      Turn on compilation of conditional 'debug' code into the program.
+      The '-fdebug' option itself sets the debug level to '1', while
+      '-fdebug=' enables 'debug' code that are identified by any of the
+      following values:
+ 
+      'ident'
+           Turns on compilation of any 'debug' code identified by IDENT.
+ 
+ '-fno-druntime'
+      Implements <https://dlang.org/spec/betterc.html>.  Assumes that
+      compilation targets an environment without a D runtime library.
+ 
+      This is equivalent to compiling with the following options:
+ 
+           gdc -nophoboslib -fno-exceptions -fno-moduleinfo -fno-rtti
+ 
+ '-fextern-std=STANDARD'
+      Sets the C++ name mangling compatibility to the version identified
+      by STANDARD.  The following values are supported:
+ 
+      'c++98'
+      'c++03'
+           Sets '__traits(getTargetInfo, "cppStd")' to '199711'.
+      'c++11'
+           Sets '__traits(getTargetInfo, "cppStd")' to '201103'.
+      'c++14'
+           Sets '__traits(getTargetInfo, "cppStd")' to '201402'.
+      'c++17'
+           Sets '__traits(getTargetInfo, "cppStd")' to '201703'.  This is
+           the default.
+      'c++20'
+           Sets '__traits(getTargetInfo, "cppStd")' to '202002'.
+ 
+ '-fno-invariants'
+      Turns off code generation for class 'invariant' contracts.
+ 
+ '-fmain'
+      Generates a default 'main()' function when compiling.  This is
+      useful when unittesting a library, as it enables running the
+      unittests in a library without having to manually define an
+      entry-point function.  This option does nothing when 'main' is
+      already defined in user code.
+ 
+ '-fno-moduleinfo'
+      Turns off generation of the 'ModuleInfo' and related functions that
+      would become unreferenced without it, which may allow linking to
+      programs not written in D. Functions that are not be generated
+      include module constructors and destructors ('static this' and
+      'static ~this'), 'unittest' code, and 'DSO' registry functions for
+      dynamically linked code.
+ 
+ '-fonly=FILENAME'
+      Tells the compiler to parse and run semantic analysis on all
+      modules on the command line, but only generate code for the module
+      specified by FILENAME.
+ 
+ '-fno-postconditions'
+      Turns off code generation for postcondition 'out' contracts.
+ 
+ '-fno-preconditions'
+      Turns off code generation for precondition 'in' contracts.
+ 
+ '-fpreview=ID'
+      Turns on an upcoming D language change identified by ID.  The
+      following values are supported:
+ 
+      'all'
+           Turns on all upcoming D language features.
+      'bitfields'
+           Implements bit-fields in D.
+      'dip1000'
+           Implements
+           <https://github.com/dlang/DIPs/blob/master/DIPs/other/DIP1000.md>
+           (Scoped pointers).
+      'dip1008'
+           Implements
+           <https://github.com/dlang/DIPs/blob/master/DIPs/other/DIP1008.md>
+           (Allow exceptions in '@nogc' code).
+      'dip1021'
+           Implements
+           <https://github.com/dlang/DIPs/blob/master/DIPs/accepted/DIP1021.md>
+           (Mutable function arguments).
+      'dip25'
+           Implements
+           <https://github.com/dlang/DIPs/blob/master/DIPs/archive/DIP25.md>
+           (Sealed references).
+      'dtorfields'
+           Turns on generation for destructing fields of partially
+           constructed objects.
+      'fieldwise'
+           Turns on generation of struct equality to use field-wise
+           comparisons.
+      'fixaliasthis'
+           Implements new lookup rules that check the current scope for
+           'alias this' before searching in upper scopes.
+      'fiximmutableconv'
+           Disallows unsound immutable conversions that were formerly
+           incorrectly permitted.
+      'in'
+           Implements 'in' parameters to mean 'scope const [ref]' and
+           accepts rvalues.
+      'inclusiveincontracts'
+           Implements 'in' contracts of overridden methods to be a
+           superset of parent contract.
+      'nosharedaccess'
+           Turns off and disallows all access to shared memory objects.
+      'rvaluerefparam'
+           Implements rvalue arguments to 'ref' parameters.
+      'systemvariables'
+           Disables access to variables marked '@system' from '@safe'
+           code.
+ 
+ '-frelease'
+      Turns on compiling in release mode, which means not emitting
+      runtime checks for contracts and asserts.  Array bounds checking is
+      not done for '@system' and '@trusted' functions, and assertion
+      failures are undefined behavior.
+ 
+      This is equivalent to compiling with the following options:
+ 
+           gdc -fno-assert -fbounds-check=safe -fno-invariants \
+               -fno-postconditions -fno-preconditions -fno-switch-errors
+ 
+ '-frevert='
+      Turns off a D language feature identified by ID.  The following
+      values are supported:
+ 
+      'all'
+           Turns off all revertable D language features.
+      'dip1000'
+           Reverts
+           <https://github.com/dlang/DIPs/blob/master/DIPs/other/DIP1000.md>
+           (Scoped pointers).
+      'dip25'
+           Reverts
+           <https://github.com/dlang/DIPs/blob/master/DIPs/archive/DIP25.md>
+           (Sealed references).
+      'dtorfields'
+           Turns off generation for destructing fields of partially
+           constructed objects.
+      'intpromote'
+           Turns off C-style integral promotion for unary '+', '-' and
+           '~' expressions.
+ 
+ '-fno-rtti'
+      Turns off generation of run-time type information for all user
+      defined types.  Any code that uses features of the language that
+      require access to this information will result in an error.
+ 
+ '-fno-switch-errors'
+      This option controls what code is generated when no case is matched
+      in a 'final switch' statement.  The default run time behavior is to
+      throw a 'SwitchError'.  Turning off '-fswitch-errors' means that
+      instead the execution of the program is immediately halted.
+ 
+ '-funittest'
+      Turns on compilation of 'unittest' code, and turns on the
+      'version(unittest)' identifier.  This implies '-fassert'.
+ 
+ '-fversion=VALUE'
+      Turns on compilation of conditional 'version' code into the program
+      identified by any of the following values:
+ 
+      'ident'
+           Turns on compilation of 'version' code identified by IDENT.
+ 
+ '-fno-weak-templates'
+      Turns off emission of declarations that can be defined in multiple
+      objects as weak symbols.  The default is to emit all public symbols
+      as weak, unless the target lacks support for weak symbols.
+      Disabling this option means that common symbols are instead put in
+      COMDAT or become private.
+ 
+ 
+ File: gdc.info,  Node: Directory Options,  Next: Code Generation,  Prev: Runtime Options,  Up: Invoking gdc
+ 
+ 1.3 Options for Directory Search
+ ================================
+ 
+ These options specify directories to search for files, libraries, and
+ other parts of the compiler:
+ 
+ '-IDIR'
+      Specify a directory to use when searching for imported modules at
+      compile time.  Multiple '-I' options can be used, and the paths are
+      searched in the same order.
+ 
+ '-JDIR'
+      Specify a directory to use when searching for files in string
+      imports at compile time.  This switch is required in order to use
+      'import(file)' expressions.  Multiple '-J' options can be used, and
+      the paths are searched in the same order.
+ 
+ '-LDIR'
+      When linking, specify a library search directory, as with 'gcc'.
+ 
+ '-BDIR'
+      This option specifies where to find the executables, libraries,
+      source files, and data files of the compiler itself, as with 'gcc'.
+ 
+ '-fmodule-file=MODULE=SPEC'
+      This option manipulates file paths of imported modules, such that
+      if an imported module matches all or the leftmost part of MODULE,
+      the file path in SPEC is used as the location to search for D
+      sources.  This is used when the source file path and names are not
+      the same as the package and module hierarchy.  Consider the
+      following examples:
+ 
+           gdc test.d -fmodule-file=A.B=foo.d -fmodule-file=C=bar
+ 
+      This will tell the compiler to search in all import paths for the
+      source file FOO.D when importing A.B, and the directory BAR/ when
+      importing C, as annotated in the following D code:
+ 
+           module test;
+           import A.B;     // Matches A.B, searches for foo.d
+           import C.D.E;   // Matches C, searches for bar/D/E.d
+           import A.B.C;   // No match, searches for A/B/C.d
+ 
+ '-imultilib DIR'
+      Use DIR as a subdirectory of the gcc directory containing
+      target-specific D sources and interfaces.
+ 
+ '-iprefix PREFIX'
+      Specify PREFIX as the prefix for the gcc directory containing
+      target-specific D sources and interfaces.  If the PREFIX represents
+      a directory, you should include the final ''/''.
+ 
+ '-nostdinc'
+      Do not search the standard system directories for D source and
+      interface files.  Only the directories that have been specified
+      with '-I' options (and the directory of the current file, if
+      appropriate) are searched.
+ 
+ 
+ File: gdc.info,  Node: Code Generation,  Next: Warnings,  Prev: Directory Options,  Up: Invoking gdc
+ 
+ 1.4 Code Generation
+ ===================
+ 
+ In addition to the many 'gcc' options controlling code generation, 'gdc'
+ has several options specific to itself.
+ 
+ '-H'
+      Generates D interface files for all modules being compiled.  The
+      compiler determines the output file based on the name of the input
+      file, removes any directory components and suffix, and applies the
+      '.di' suffix.
+ 
+ '-Hd DIR'
+      Same as '-H', but writes interface files to directory DIR.  This
+      option can be used with '-Hf FILE' to independently set the output
+      file and directory path.
+ 
+ '-Hf FILE'
+      Same as '-H' but writes interface files to FILE.  This option can
+      be used with '-Hd DIR' to independently set the output file and
+      directory path.
+ 
+ '-M'
+      Output the module dependencies of all source files being compiled
+      in a format suitable for 'make'.  The compiler outputs one 'make'
+      rule containing the object file name for that source file, a colon,
+      and the names of all imported files.
+ 
+ '-MM'
+      Like '-M' but does not mention imported modules from the D standard
+      library package directories.
+ 
+ '-MF FILE'
+      When used with '-M' or '-MM', specifies a FILE to write the
+      dependencies to.  When used with the driver options '-MD' or
+      '-MMD', '-MF' overrides the default dependency output file.
+ 
+ '-MG'
+      This option is for compatibility with 'gcc', and is ignored by the
+      compiler.
+ 
+ '-MP'
+      Outputs a phony target for each dependency other than the modules
+      being compiled, causing each to depend on nothing.
+ 
+ '-MT TARGET'
+      Change the TARGET of the rule emitted by dependency generation to
+      be exactly the string you specify.  If you want multiple targets,
+      you can specify them as a single argument to '-MT', or use multiple
+      '-MT' options.
+ 
+ '-MQ TARGET'
+      Same as '-MT', but it quotes any characters which are special to
+      'make'.
+ 
+ '-MD'
+      This option is equivalent to '-M -MF FILE'.  The driver determines
+      FILE by removing any directory components and suffix from the input
+      file, and then adding a '.deps' suffix.
+ 
+ '-MMD'
+      Like '-MD' but does not mention imported modules from the D
+      standard library package directories.
+ 
+ '-X'
+      Output information describing the contents of all source files
+      being compiled in JSON format to a file.  The driver determines
+      FILE by removing any directory components and suffix from the input
+      file, and then adding a '.json' suffix.
+ 
+ '-Xf FILE'
+      Same as '-X', but writes all JSON contents to the specified FILE.
+ 
+ '-fdoc'
+      Generates 'Ddoc' documentation and writes it to a file.  The
+      compiler determines FILE by removing any directory components and
+      suffix from the input file, and then adding a '.html' suffix.
+ 
+ '-fdoc-dir=DIR'
+      Same as '-fdoc', but writes documentation to directory DIR.  This
+      option can be used with '-fdoc-file=FILE' to independently set the
+      output file and directory path.
+ 
+ '-fdoc-file=FILE'
+      Same as '-fdoc', but writes documentation to FILE.  This option can
+      be used with '-fdoc-dir=DIR' to independently set the output file
+      and directory path.
+ 
+ '-fdoc-inc=FILE'
+      Specify FILE as a DDOC macro file to be read.  Multiple '-fdoc-inc'
+      options can be used, and files are read and processed in the same
+      order.
+ 
+ '-fdump-c++-spec=FILE'
+      For D source files, generate corresponding C++ declarations in
+      FILE.
+ 
+ '-fdump-c++-spec-verbose'
+      In conjunction with '-fdump-c++-spec=' above, add comments for
+      ignored declarations in the generated C++ header.
+ 
+ '-fsave-mixins=FILE'
+      Generates code expanded from D 'mixin' statements and writes the
+      processed sources to FILE.  This is useful to debug errors in
+      compilation and provides source for debuggers to show when
+      requested.
+ 
+ 
+ File: gdc.info,  Node: Warnings,  Next: Linking,  Prev: Code Generation,  Up: Invoking gdc
+ 
+ 1.5 Warnings
+ ============
+ 
+ Warnings are diagnostic messages that report constructions that are not
+ inherently erroneous but that are risky or suggest there is likely to be
+ a bug in the program.  Unless '-Werror' is specified, they do not
+ prevent compilation of the program.
+ 
+ '-Wall'
+      Turns on all warnings messages.  Warnings are not a defined part of
+      the D language, and all constructs for which this may generate a
+      warning message are valid code.
+ 
+ '-Walloca'
+      This option warns on all uses of "alloca" in the source.
+ 
+ '-Walloca-larger-than=N'
+      Warn on unbounded uses of alloca, and on bounded uses of alloca
+      whose bound can be larger than N bytes.  '-Wno-alloca-larger-than'
+      disables '-Walloca-larger-than' warning and is equivalent to
+      '-Walloca-larger-than=SIZE_MAX' or larger.
+ 
+ '-Wno-builtin-declaration-mismatch'
+      Warn if a built-in function is declared with an incompatible
+      signature.
+ 
+ '-Wcast-result'
+      Warn about casts that will produce a null or zero result.
+      Currently this is only done for casting between an imaginary and
+      non-imaginary data type, or casting between a D and C++ class.
+ 
+ '-Wno-deprecated'
+      Do not warn about usage of deprecated features and symbols with
+      'deprecated' attributes.
+ 
+ '-Werror'
+      Turns all warnings into errors.
+ 
+ '-Wextra'
+      This enables some extra warning flags that are not enabled by
+      '-Wall'.
+ 
+           -Waddress
+           -Wcast-result
+           -Wmismatched-special-enum
+           -Wunknown-pragmas
+ 
+ '-Wmismatched-special-enum'
+      Warn when an enum the compiler recognizes as special is declared
+      with a different size to the built-in type it is representing.
+ 
+ '-Wspeculative'
+      List all error messages from speculative compiles, such as
+      '__traits(compiles, ...)'.  This option does not report messages as
+      warnings, and these messages therefore never become errors when the
+      '-Werror' option is also used.
+ 
+ '-Wunknown-pragmas'
+      Warn when a 'pragma()' is encountered that is not understood by
+      'gdc'.  This differs from '-fignore-unknown-pragmas' where a pragma
+      that is part of the D language, but not implemented by the
+      compiler, won't get reported.
+ 
+ '-Wno-varargs'
+      Do not warn upon questionable usage of the macros used to handle
+      variable arguments like 'va_start'.
+ 
+ '-fignore-unknown-pragmas'
+      Turns off errors for unsupported pragmas.
+ 
+ '-fmax-errors=N'
+      Limits the maximum number of error messages to N, at which point
+      'gdc' bails out rather than attempting to continue processing the
+      source code.  If N is 0 (the default), there is no limit on the
+      number of error messages produced.
+ 
+ '-fsyntax-only'
+      Check the code for syntax errors, but do not actually compile it.
+      This can be used in conjunction with '-fdoc' or '-H' to generate
+      files for each module present on the command-line, but no other
+      output file.
+ 
+ '-ftransition=ID'
+      Report additional information about D language changes identified
+      by ID.  The following values are supported:
+ 
+      'all'
+           List information on all D language transitions.
+      'complex'
+           List all usages of complex or imaginary types.
+      'field'
+           List all non-mutable fields which occupy an object instance.
+      'in'
+           List all usages of 'in' on parameter.
+      'nogc'
+           List all hidden GC allocations.
+      'templates'
+           List statistics on template instantiations.
+      'tls'
+           List all variables going into thread local storage.
+ 
+ 
+ File: gdc.info,  Node: Linking,  Next: Developer Options,  Prev: Warnings,  Up: Invoking gdc
+ 
+ 1.6 Options for Linking
+ =======================
+ 
+ These options come into play when the compiler links object files into
+ an executable output file.  They are meaningless if the compiler is not
+ doing a link step.
+ 
+ '-defaultlib=LIBNAME'
+      Specify the library to use instead of libphobos when linking.
+      Options specifying the linkage of libphobos, such as
+      '-static-libphobos' or '-shared-libphobos', are ignored.
+ 
+ '-debuglib=LIBNAME'
+      Specify the debug library to use instead of libphobos when linking.
+      This option has no effect unless the '-g' option was also given on
+      the command line.  Options specifying the linkage of libphobos,
+      such as '-static-libphobos' or '-shared-libphobos', are ignored.
+ 
+ '-nophoboslib'
+      Do not use the Phobos or D runtime library when linking.  Options
+      specifying the linkage of libphobos, such as '-static-libphobos' or
+      '-shared-libphobos', are ignored.  The standard system libraries
+      are used normally, unless '-nostdlib' or '-nodefaultlibs' is used.
+ 
+ '-shared-libphobos'
+      On systems that provide 'libgphobos' and 'libgdruntime' as a shared
+      and a static library, this option forces the use of the shared
+      version.  If no shared version was built when the compiler was
+      configured, this option has no effect.
+ 
+ '-static-libphobos'
+      On systems that provide 'libgphobos' and 'libgdruntime' as a shared
+      and a static library, this option forces the use of the static
+      version.  If no static version was built when the compiler was
+      configured, this option has no effect.
+ 
+ 
+ File: gdc.info,  Node: Developer Options,  Prev: Linking,  Up: Invoking gdc
+ 
+ 1.7 Developer Options
+ =====================
+ 
+ This section describes command-line options that are primarily of
+ interest to developers or language tooling.
+ 
+ '-fdump-d-original'
+      Output the internal front-end AST after the 'semantic3' stage.
+      This option is only useful for debugging the GNU D compiler itself.
+ 
+ '-v'
+      Dump information about the compiler language processing stages as
+      the source program is being compiled.  This includes listing all
+      modules that are processed through the 'parse', 'semantic',
+      'semantic2', and 'semantic3' stages; all 'import' modules and their
+      file paths; and all 'function' bodies that are being compiled.
+ 
+ 
+ File: gdc.info,  Node: D Implementation,  Next: Copying,  Prev: Invoking gdc,  Up: Top
+ 
+ 2 Language Reference
+ ********************
+ 
+ The implementation of the D programming language used by the GNU D
+ compiler is shared with parts of the front-end for the Digital Mars D
+ compiler, hosted at <https://github.com/dlang/dmd/>.  This common
+ front-end covers lexical analysis, parsing, and semantic analysis of the
+ D programming language defined in the documents at <https://dlang.org/>.
+ 
+    The implementation details described in this manual are GNU D
+ extensions to the D programming language.  If you want to write code
+ that checks whether these features are available, you can test for the
+ predefined version 'GNU', or you can check whether a specific feature is
+ compilable using '__traits(compiles)'.
+ 
+      version (GNU)
+      {
+          import gcc.builtins;
+          return __builtin_atan2(x, y);
+      }
+ 
+      static if (__traits(compiles, { asm {"";} }))
+      {
+          asm { "magic instruction"; }
+      }
+ 
+ * Menu:
+ 
+ * Attributes::          Implementation-defined attributes.
+ * Builtin Functions::   GCC built-ins module.
+ * ImportC::             Importing C sources into D.
+ * Inline Assembly::     Interfacing D with assembler.
+ * Intrinsics::          Intrinsic functions supported by GDC.
+ * Predefined Pragmas::  Pragmas accepted by GDC.
+ * Predefined Versions:: List of versions for conditional compilation.
+ * Special Enums::       Intrinsic type interoperability with C and C++.
+ * Traits::              Compile-time reflection extensions.
+ * Vector Extensions::   Using vector types and supported operations.
+ * Vector Intrinsics::   Vector instructions through intrinsics.
+ * Missing Features::    Deviations from the D2 specification in GDC.
+ 
+ 
+ File: gdc.info,  Node: Attributes,  Next: Builtin Functions,  Up: D Implementation
+ 
+ 2.1 Attributes
+ ==============
+ 
+ User-Defined Attributes (UDA) are compile-time expressions introduced by
+ the '@' token that can be attached to a declaration.  These attributes
+ can then be queried, extracted, and manipulated at compile time.
+ 
+    GNU D provides a number of extra special attributes to control
+ specific compiler behavior that may help the compiler optimize or check
+ code more carefully for correctness.  The attributes are defined in the
+ 'gcc.attributes' module.
+ 
+    There is some overlap between the purposes of attributes and pragmas.
+ It has been found more convenient to use '@attribute' to achieve a
+ natural attachment of attributes to their corresponding declarations,
+ whereas 'pragma' is of use for compatibility with other compilers or
+ constructs that do not naturally form part of the grammar.
+ 
+ * Menu:
+ 
+ * Attribute Syntax::
+ * Common Attributes::
+ * Other Attributes::
+ * Target Attributes::
+ 
+ 
+ File: gdc.info,  Node: Attribute Syntax,  Next: Common Attributes,  Up: Attributes
+ 
+ 2.1.1 Attribute Syntax
+ ----------------------
+ 
+ '@(gcc.attributes.attribute)' is the generic entrypoint for applying GCC
+ attributes to a function, variable, or type.  There is no type checking
+ done, as well as no deprecation path for attributes removed from the
+ compiler.  So the recommendation is to use any of the other UDAs
+ available as described in *note Common Attributes:: unless it is a
+ target-specific attribute (*Note Target Attributes::).
+ 
+    Function attributes introduced by the '@attribute' UDA are used in
+ the declaration of a function, followed by an attribute name string and
+ any arguments separated by commas enclosed in parentheses.
+ 
+      import gcc.attributes;
+      @attribute("regparm", 1) int func(int size);
+ 
+ Multiple attributes can be applied to a single declaration either with
+ multiple '@attribute' attributes, or passing all attributes as a
+ comma-separated list enclosed by parentheses.
+ 
+      // Both func1 and func2 have the same attributes applied.
+      @attribute("noinline") @attribute("noclone") void func1();
+      @(attribute("noinline"), attribute("noclone")) void func2();
+ 
+ There are some problems with the semantics of such attributes in D. For
+ example, there are no manglings for attributes, although they may affect
+ code generation, so problems may arise when attributed types are used in
+ conjunction with templates or overloading.  Similarly, 'typeid' does not
+ distinguish between types with different attributes.  Support for
+ attributes in D are restricted to declarations only.
+ 
+ 
+ File: gdc.info,  Node: Common Attributes,  Next: Other Attributes,  Prev: Attribute Syntax,  Up: Attributes
+ 
+ 2.1.2 Common Attributes
+ -----------------------
+ 
+ The following attributes are supported on most targets.
+ 
+ '@(gcc.attributes.alloc_size (SIZEARGIDX))'
+ '@(gcc.attributes.alloc_size (SIZEARGIDX, NUMARGIDX))'
+ '@(gcc.attributes.alloc_size (SIZEARGIDX, NUMARGIDX, ZEROBASEDNUMBERING))'
+ 
+      The '@alloc_size' attribute may be applied to a function - or a
+      function pointer variable - that returns a pointer and takes at
+      least one argument of an integer or enumerated type.  It indicates
+      that the returned pointer points to memory whose size is given by
+      the function argument at 'sizeArgIdx', or by the product of the
+      arguments at 'sizeArgIdx' and 'numArgIdx'.  Meaningful sizes are
+      positive values less than 'ptrdiff_t.max'.  Unless
+      'zeroBasedNumbering' is true, argument numbering starts at one for
+      ordinary functions, and at two for non-static member functions.
+ 
+      If 'numArgIdx' is less than '0', it is taken to mean there is no
+      argument specifying the element count.
+ 
+           @alloc_size(1) void* malloc(size_t);
+           @alloc_size(3,2) void* reallocarray(void *, size_t, size_t);
+           @alloc_size(1,2) void* my_calloc(size_t, size_t, bool);
+           void malloc_cb(@alloc_size(1) void* function(size_t) ptr) { }
+ 
+ '@(gcc.attributes.always_inline)'
+ 
+      The '@always_inline' attribute inlines the function independent of
+      any restrictions that otherwise apply to inlining.  Failure to
+      inline such a function is diagnosed as an error.
+ 
+           @always_inline int func();
+ 
+ '@(gcc.attributes.cold)'
+ 
+      The '@cold' attribute on functions is used to inform the compiler
+      that the function is unlikely to be executed.  The function is
+      optimized for size rather than speed and on many targets it is
+      placed into a special subsection of the text section so all cold
+      functions appear close together, improving code locality of
+      non-cold parts of program.  The paths leading to calls of cold
+      functions within code are considered to be cold too.
+ 
+           @cold int func();
+ 
+ '@(gcc.attributes.flatten)'
+ 
+      The '@flatten' attribute is used to inform the compiler that every
+      call inside this function should be inlined, if possible.
+      Functions declared with attribute '@noinline' and similar are not
+      inlined.
+ 
+           @flatten int func();
+ 
+ '@(gcc.attributes.no_icf)'
+ 
+      The '@no_icf' attribute prevents a function from being merged with
+      another semantically equivalent function.
+ 
+           @no_icf int func();
+ 
+ '@(gcc.attributes.no_sanitize ("SANITIZE_OPTION"))'
+ 
+      The '@no_sanitize' attribute on functions is used to inform the
+      compiler that it should not do sanitization of any option mentioned
+      in SANITIZE_OPTION.  A list of values acceptable by the
+      '-fsanitize' option can be provided.
+ 
+           @no_sanitize("alignment", "object-size") void func1() { }
+           @no_sanitize("alignment,object-size") void func2() { }
+ 
+ '@(gcc.attributes.noclone)'
+ 
+      The '@noclone' attribute prevents a function from being considered
+      for cloning - a mechanism that produces specialized copies of
+      functions and which is (currently) performed by interprocedural
+      constant propagation.
+ 
+           @noclone int func();
+ 
+ '@(gcc.attributes.noinline)'
+ 
+      The '@noinline' attribute prevents a function from being considered
+      for inlining.  If the function does not have side effects, there
+      are optimizations other than inlining that cause function calls to
+      be optimized away, although the function call is live.  To keep
+      such calls from being optimized away, put 'asm { ""; }' in the
+      called function, to serve as a special side effect.
+ 
+           @noinline int func();
+ 
+ '@(gcc.attributes.noipa)'
+ 
+      The '@noipa' attribute disables interprocedural optimizations
+      between the function with this attribute and its callers, as if the
+      body of the function is not available when optimizing callers and
+      the callers are unavailable when optimizing the body.  This
+      attribute implies '@noinline', '@noclone', and '@no_icf'
+      attributes.  However, this attribute is not equivalent to a
+      combination of other attributes, because its purpose is to suppress
+      existing and future optimizations employing interprocedural
+      analysis, including those that do not have an attribute suitable
+      for disabling them individually.
+ 
+      This attribute is supported mainly for the purpose of testing the
+      compiler.
+ 
+           @noipa int func();
+ 
+ '@(gcc.attributes.noplt)'
+ 
+      The '@noplt' attribute is the counterpart to option '-fno-plt'.
+      Calls to functions marked with this attribute in
+      position-independent code do not use the PLT in
+      position-independent code.
+ 
+      In position-dependant code, a few targets also convert call to
+      functions that are marked to not use the PLT to use the GOT
+      instead.
+ 
+           @noplt int func();
+ 
+ '@(gcc.attributes.optimize (ARGUMENTS))'
+ 
+      The '@optimize' attribute is used to specify that a function is to
+      be compiled with different optimization options than specified on
+      the command line.  Valid ARGUMENTS are constant non-negative
+      integers and strings.  Multiple arguments can be provided,
+      separated by commas to specify multiple options.  Each numeric
+      argument specifies an optimization level.  Each string argument
+      that begins with the letter 'O' refers to an optimization option
+      such as '-O0' or '-Os'.  Other options are taken as suffixes to the
+      '-f' prefix jointly forming the name of an optimization option.
+ 
+      Not every optimization option that starts with the '-f' prefix
+      specified by the attribute necessarily has an effect on the
+      function.  The '@optimize' attribute should be used for debugging
+      purposes only.  It is not suitable in production code.
+ 
+           @optimize(2) double fn0(double x);
+           @optimize("2") double fn1(double x);
+           @optimize("s") double fn2(double x);
+           @optimize("Ofast") double fn3(double x);
+           @optimize("-O2") double fn4(double x);
+           @optimize("tree-vectorize") double fn5(double x);
+           @optimize("-ftree-vectorize") double fn6(double x);
+           @optimize("no-finite-math-only", 3) double fn7(double x);
+ 
+ '@(gcc.attributes.register ("REGISTERNAME"))'
+ 
+      The '@register' attribute specifies that a local or '__gshared'
+      variable is to be given a register storage-class in the C99 sense
+      of the term, and will be placed into a register named REGISTERNAME.
+ 
+      The variable needs to boiled down to a data type that fits the
+      target register.  It also cannot have either thread-local or
+      'extern' storage.  It is an error to take the address of a register
+      variable.
+ 
+           @register("ebx") __gshared int ebx = void;
+           void func() { @register("r10") long r10 = 0x2a; }
+ 
+ '@(gcc.attributes.restrict)'
+ 
+      The '@restrict' attribute specifies that a function parameter is to
+      be restrict-qualified in the C99 sense of the term.  The parameter
+      needs to boil down to either a pointer or reference type, such as a
+      D pointer, class reference, or a 'ref' parameter.
+ 
+           void func(@restrict ref const float[16] array);
+ 
+ '@(gcc.attributes.section ("SECTIONNAME"))'
+ 
+      The '@section' attribute specifies that a function or variable
+      lives in a particular section.  For when you need certain
+      particular functions to appear in special sections.
+ 
+      Some file formats do not support arbitrary sections so the section
+      attribute is not available on all platforms.  If you need to map
+      the entire contents of a module to a particular section, consider
+      using the facilities of the linker instead.
+ 
+           @section("bar") extern void func();
+           @section("stack") ubyte[10000] stack;
+ 
+ '@(gcc.attributes.simd)'
+ 
+      The '@simd' attribute enables creation of one or more function
+      versions that can process multiple arguments using SIMD
+      instructions from a single invocation.  Specifying this attribute
+      allows compiler to assume that such versions are available at link
+      time (provided in the same or another module).  Generated versions
+      are target-dependent and described in the corresponding Vector ABI
+      document.
+ 
+           @simd double sqrt(double x);
+ 
+ '@(gcc.attributes.simd_clones ("MASK"))'
+ 
+      The '@simd_clones' attribute is the same as '@simd', but also
+      includes a MASK argument.  Valid masks values are 'notinbranch' or
+      'inbranch', and instructs the compiler to generate non-masked or
+      masked clones correspondingly.
+ 
+           @simd_clones("notinbranch") double atan2(double y, double x);
+ 
+ '@(gcc.attributes.symver ("ARGUMENTS"))'
+ 
+      The '@symver' attribute creates a symbol version on ELF targets.
+      The syntax of the string parameter is '"NAME@NODENAME"'.  The NAME
+      part of the parameter is the actual name of the symbol by which it
+      will be externally referenced.  The NODENAME portion should be the
+      name of a node specified in the version script supplied to the
+      linker when building a shared library.  Versioned symbol must be
+      defined and must be exported with default visibility.
+ 
+      Finally if the parameter is '"NAME@@NODENAME"' then in addition to
+      creating a symbol version (as if '"NAME@NODENAME"' was used) the
+      version will be also used to resolve NAME by the linker.
+ 
+           @symver("foo@VERS_1") int foo_v1();
+ 
+ '@(gcc.attributes.target ("OPTIONS"))'
+ 
+      The '@target' attribute is used to specify that a function is to be
+      compiled with different target options than specified on the
+      command line.  One or more strings can be provided as arguments,
+      separated by commas to specify multiple options.  Each string
+      consists of one or more comma-separated suffixes to the '-m' prefix
+      jointly forming the name of a machine-dependent option.
+ 
+      The target attribute can be used for instance to have a function
+      compiled with a different ISA (instruction set architecture) than
+      the default.
+ 
+      The options supported are specific to each target.
+ 
+           @target("arch=core2") void core2_func();
+           @target("sse3") void sse3_func();
+ 
+ '@(gcc.attributes.target_clones ("OPTIONS"))'
+ 
+      The '@target_clones' attribute is used to specify that a function
+      be cloned into multiple versions compiled with different target
+      OPTIONS than specified on the command line.  The supported options
+      and restrictions are the same as for '@target' attribute.
+ 
+      It also creates a resolver function that dynamically selects a
+      clone suitable for current architecture.  The resolver is created
+      only if there is a usage of a function with '@target_clones'
+      attribute.
+ 
+           @target_clones("sse4.1,avx,default") double func(double x);
+ 
+ '@(gcc.attributes.used)'
+ 
+      The '@used' attribute, annotated to a function or variable, means
+      that code must be emitted for the function even if it appears that
+      the function is not referenced.  This is useful, for example, when
+      the function is referenced only in inline assembly.
+ 
+           @used __gshared int var = 0x1000;
+ 
+ '@(gcc.attributes.visibility ("VISIBILITYNAME"))'
+ 
+      The '@visibility' attribute affects the linkage of the declaration
+      to which it is attached.  It can be applied to variables, types,
+      and functions.
+ 
+      There are four supported visibility_type values: 'default',
+      'hidden', 'protected', or 'internal' visibility.
+ 
+           @visibility("protected") void func() {  }
+ 
+ '@(gcc.attributes.weak)'
+ 
+      The '@weak' attribute causes a declaration of an external symbol to
+      be emitted as a weak symbol rather than a global.  This is
+      primarily useful in defining library functions that can be
+      overridden in user code, though it can also be used with
+      non-function declarations.  The overriding symbol must have the
+      same type as the weak symbol.  In addition, if it designates a
+      variable it must also have the same size and alignment as the weak
+      symbol.
+ 
+      Weak symbols are supported for ELF targets, and also for a.out
+      targets when using the GNU assembler and linker.
+ 
+           @weak int func() { return 1; }
+ 
+ 
+ File: gdc.info,  Node: Other Attributes,  Next: Target Attributes,  Prev: Common Attributes,  Up: Attributes
+ 
+ 2.1.3 Other Attributes
+ ----------------------
+ 
+ The following attributes are defined for compatibility with other
+ compilers.
+ 
+ '@(gcc.attributes.allocSize (SIZEARGIDX))'
+ '@(gcc.attributes.allocSize (SIZEARGIDX, NUMARGIDX))'
+ '@(gcc.attributes.allocSize (SIZEARGIDX))'
+ 
+      These attributes are a synonym for '@alloc_size(SIZEARGIDX,
+      NUMARGIDX, true)'.  Unlike '@alloc_size', it uses 0-based index of
+      the function arguments.
+ 
+ '@(gcc.attributes.assumeUsed)'
+ 
+      This attribute is a synonym for '@used'.
+ 
+ '@(gcc.attributes.dynamicCompile)'
+ '@(gcc.attributes.dynamicCompileConst)'
+ '@(gcc.attributes.dynamicCompileEmit)'
+ 
+      These attributes are accepted, but have no effect.
+ 
+ '@(gcc.attributes.fastmath)'
+ 
+      This attribute is a synonym for '@optimize("Ofast")'.  Explicitly
+      sets "fast-math" for a function, enabling aggressive math
+      optimizations.
+ 
+ '@(gcc.attributes.hidden)'
+ 
+      This attribute is a synonym for '@visibility("hidden")'.  Sets the
+      visibility of a function or global variable to "hidden".
+ 
+ '@(gcc.attributes.naked)'
+ 
+      This attribute is a synonym for '@attribute("naked")'.  Adds GCC's
+      "naked" attribute to a function, disabling function prologue /
+      epilogue emission.  Intended to be used in combination with basic
+      'asm' statements.  While using extended 'asm' or a mixture of basic
+      'asm' and D code may appear to work, they cannot be depended upon
+      to work reliably and are not supported.
+ 
+ '@(gcc.attributes.noSanitize ("SANITIZE_OPTION"))'
+ 
+      This attribute is a synonym for '@no_sanitize("sanitize_option")'.
+ 
+ '@(gcc.attributes.optStrategy ("STRATEGY"))'
+ 
+      This attribute is a synonym for '@optimize("O0")' and
+      '@optimize("Os")'.  Sets the optimization strategy for a function.
+      Valid strategies are "none", "optsize", "minsize".  The strategies
+      are mutually exclusive.
+ 
+ '@(gcc.attributes.polly)'
+ 
+      This attribute is a synonym for '@optimize("loop-parallelize-all",
+      "loop-nest-optimize")'.  Only effective when GDC was built with ISL
+      included.
+ 
+ 
+ File: gdc.info,  Node: Target Attributes,  Prev: Other Attributes,  Up: Attributes
+ 
+ 2.1.4 Target-specific Attributes
+ --------------------------------
+ 
+ Many targets have their own target-specific attributes.  These are also
+ exposed via the 'gcc.attributes' module with use of the generic
+ '@(gcc.attributes.attribute)' UDA function.
+ 
+    *Note Attribute Syntax::, for details of the exact syntax for using
+ attributes.
+ 
+    See the function and variable attribute documentation in the GCC
+ manual for more information about what attributes are available on each
+ target.
+ 
+    Examples of using x86-specific target attributes are shown as
+ follows:
+ 
+      import gcc.attributes;
+ 
+      @attribute("cdecl")
+      @attribute("fastcall")
+      @attribute("ms_abi")
+      @attribute("sysv_abi")
+      @attribute("callee_pop_aggregate_return", 1)
+      @attribute("ms_hook_prologue")
+      @attribute("naked")
+      @attribute("regparm", 2)
+      @attribute("sseregparm")
+      @attribute("force_align_arg_pointer")
+      @attribute("stdcall")
+      @attribute("no_caller_saved_registers")
+      @attribute("interrupt")
+      @attribute("indirect_branch", "thunk")
+      @attribute("function_return", "keep"))
+      @attribute("nocf_check")
+      @attribute("cf_check")
+      @attribute("indirect_return")
+      @attribute("fentry_name", "nop")
+      @attribute("fentry_section", "__entry_loc")
+      @attribute("nodirect_extern_access")
+ 
+ 
+ 
+ File: gdc.info,  Node: Builtin Functions,  Next: ImportC,  Prev: Attributes,  Up: D Implementation
+ 
+ 2.2 Built-in Functions
+ ======================
+ 
+ GCC provides a large number of built-in functions that are made
+ available in GNU D by importing the 'gcc.builtins' module.  Declarations
+ in this module are automatically created by the compiler.  All
+ declarations start with '__builtin_'.  Refer to the built-in function
+ documentation in the GCC manual for a full list of functions that are
+ available.
+ 
+ * Menu:
+ 
+ * Builtin Types::
+ * Query Builtins::
+ * Other Builtins::
+ 
+ 
+ File: gdc.info,  Node: Builtin Types,  Next: Query Builtins,  Up: Builtin Functions
+ 
+ 2.2.1 Built-in Types
+ --------------------
+ 
+ In addition to built-in functions, the following types are defined in
+ the 'gcc.builtins' module.
+ 
+ '___builtin_clong'
+      The D equivalent of the target's C 'long' type.
+ 
+ '___builtin_clonglong'
+      The D equivalent of the target's C 'long long' type.
+ 
+ '___builtin_culong'
+      The D equivalent of the target's C 'unsigned long' type.
+ 
+ '___builtin_culonglong'
+      The D equivalent of the target's C 'unsigned long long' type.
+ 
+ '___builtin_machine_byte'
+      Signed unit-sized integer type.
+ 
+ '___builtin_machine_int'
+      Signed word-sized integer type.
+ 
+ '___builtin_machine_ubyte'
+      Unsigned unit-sized integer type.
+ 
+ '___builtin_machine_uint'
+      Unsigned word-sized integer type.
+ 
+ '___builtin_pointer_int'
+      Signed pointer-sized integer type.
+ 
+ '___builtin_pointer_uint'
+      Unsigned pointer-sized integer type.
+ 
+ '___builtin_unwind_int'
+      The D equivalent of the target's C '_Unwind_Sword' type.
+ 
+ '___builtin_unwind_uint'
+      The D equivalent of the target's C '_Unwind_Word' type.
+ 
+ '___builtin_va_list'
+      The target's 'va_list' type.
+ 
+ 
+ File: gdc.info,  Node: Query Builtins,  Next: Other Builtins,  Prev: Builtin Types,  Up: Builtin Functions
+ 
+ 2.2.2 Querying Available Built-ins
+ ----------------------------------
+ 
+ Not all of the functions are supported, and some target-specific
+ functions may only be available when compiling for a particular ISA. One
+ way of finding out what is exposed by the built-ins module is by
+ generating a D interface file.  Assuming you have no file 'builtins.d',
+ the command
+        echo "module gcc.builtins;" > builtins.d; gdc -H -fsyntax-only builtins.d
+ will save all built-in declarations to the file 'builtins.di'.
+ 
+    Another way to determine whether a specific built-in is available is
+ by using compile-time reflection.
+      enum X86_HAVE_SSE3 = __traits(compiles, __builtin_ia32_haddps);
+      enum X86_HAVE_SSSE3 = __traits(compiles, __builtin_ia32_pmulhrsw128);
+      enum X86_HAVE_SSE41 = __traits(compiles, __builtin_ia32_dpps);
+      enum X86_HAVE_SSE42 = __traits(compiles, __builtin_ia32_pcmpgtq);
+      enum X86_HAVE_AVX = __traits(compiles, __builtin_ia32_vbroadcastf128_pd256);
+      enum X86_HAVE_AVX2 = __traits(compiles, __builtin_ia32_gathersiv2df);
+      enum X86_HAVE_BMI2 = __traits(compiles, __builtin_ia32_pext_si);
+ 
+ 
+ File: gdc.info,  Node: Other Builtins,  Prev: Query Builtins,  Up: Builtin Functions
+ 
+ 2.2.3 Other Built-in Functions
+ ------------------------------
+ 
+ As well as built-ins being available from the 'gcc.builtins' module, GNU
+ D will also recognize when an 'extern(C)' library function is a GCC
+ built-in.  Many of these functions are only optimized in certain cases;
+ if they are not optimized in a particular case, a call to the library
+ function is emitted.  This optimization can be disabled with the
+ '-fno-builtin' option (*note Runtime Options::).
+ 
+    In the 'core.stdc.complex' module, the functions 'cabs', 'cabsf',
+ 'cabsl', 'cacos', 'cacosf', 'cacosh', 'cacoshf', 'cacoshl', 'cacosl',
+ 'carg', 'cargf', 'cargl', 'casin', 'casinf', 'casinh', 'casinhf',
+ 'casinhl', 'casinl', 'catan', 'catanf', 'catanh', 'catanhf', 'catanhl',
+ 'catanl', 'ccos', 'ccosf', 'ccosh', 'ccoshf', 'ccoshl', 'ccosl', 'cexp',
+ 'cexpf', 'cexpl', 'clog', 'clogf', 'clogl', 'conj', 'conjf', 'conjl',
+ 'cpow', 'cpowf', 'cpowl', 'cproj', 'cprojf', 'cprojl', 'csin', 'csinf',
+ 'csinh', 'csinhf', 'csinhl', 'csinl', 'csqrt', 'csqrtf', 'csqrtl',
+ 'ctan', 'ctanf', 'ctanh', 'ctanhf', 'ctanhl', 'ctanl' may be handled as
+ built-in functions.  All these functions have corresponding versions
+ prefixed with '__builtin_' in the 'gcc.builtins' module.
+ 
+    In the 'core.stdc.ctype' module, the functions 'isalnum', 'isalpha',
+ 'isblank', 'iscntrl', 'isdigit', 'isgraph', 'islower', 'isprint',
+ 'ispunct', 'isspace', 'isupper', 'isxdigit', 'tolower', 'toupper' may be
+ handled as built-in functions.  All these functions have corresponding
+ versions prefixed with '__builtin_' in the 'gcc.builtins' module.
+ 
+    In the 'core.stdc.fenv' module, the functions 'feclearexcept',
+ 'fegetenv', 'fegetexceptflag', 'fegetround', 'feholdexcept',
+ 'feraiseexcept', 'fesetenv', 'fesetexceptflag', 'fesetround',
+ 'fetestexcept', 'feupdateenv' may be handled as built-in functions.  All
+ these functions have corresponding versions prefixed with '__builtin_'
+ in the 'gcc.builtins' module.
+ 
+    In the 'core.stdc.inttypes' module, the function 'imaxabs' may be
+ handled as a built-in function.  All these functions have corresponding
+ versions prefixed with '__builtin_' in the 'gcc.builtins' module.
+ 
+    In the 'core.stdc.math' module, the functions 'acos', 'acosf',
+ 'acosh', 'acoshf', 'acoshl', 'acosl', 'asin', 'asinf', 'asinh',
+ 'asinhf', 'asinhl', 'asinl', 'atan', 'atan2', 'atan2f', 'atan2l',
+ 'atanf', 'atanh', 'atanhf', 'atanhl', 'atanl', 'cbrt', 'cbrtf', 'cbrtl',
+ 'ceil', 'ceilf', 'ceill', 'copysign', 'copysignf', 'copysignl', 'cos',
+ 'cosf', 'cosh', 'coshf', 'coshl', 'cosl', 'erf', 'erfc', 'erfcf',
+ 'erfcl', 'erff', 'erfl', 'exp', 'exp2', 'exp2f', 'exp2l', 'expf',
+ 'expl', 'expm1', 'expm1f', 'expm1l', 'fabs', 'fabsf', 'fabsl', 'fdim',
+ 'fdimf', 'fdiml', 'floor', 'floorf', 'floorl', 'fma', 'fmaf', 'fmal',
+ 'fmax', 'fmaxf', 'fmaxl', 'fmin', 'fminf', 'fminl', 'fmod', 'fmodf',
+ 'fmodl', 'frexp', 'frexpf', 'frexpl', 'hypot', 'hypotf', 'hypotl',
+ 'ilogb', 'ilogbf', 'ilogbl', 'isinf', 'isnan', 'ldexp', 'ldexpf',
+ 'ldexpl', 'lgamma', 'lgammaf', 'lgammal', 'llrint', 'llrintf',
+ 'llrintl', 'llround', 'llroundf', 'llroundl', 'log', 'log10', 'log10f',
+ 'log10l', 'log1p', 'log1pf', 'log1pl', 'log2', 'log2f', 'log2l', 'logb',
+ 'logbf', 'logbl', 'logf', 'logl', 'lrint', 'lrintf', 'lrintl', 'lround',
+ 'lroundf', 'lroundl', 'modf', 'modff', 'modfl', 'nan', 'nanf', 'nanl',
+ 'nearbyint', 'nearbyintf', 'nearbyintl', 'nextafter', 'nextafterf',
+ 'nextafterl', 'nexttoward', 'nexttowardf', 'nexttowardl', 'pow', 'powf',
+ 'powl', 'remainder', 'remainderf', 'remainderl', 'remquo', 'remquof',
+ 'remquol', 'rint', 'rintf', 'rintl', 'round', 'roundf', 'roundl',
+ 'scalbln', 'scalblnf', 'scalblnl', 'scalbn', 'scalbnf', 'scalbnl',
+ 'signbit', 'sin', 'sinf', 'sinh', 'sinhf', 'sinhl', 'sinl', 'sqrt',
+ 'sqrtf', 'sqrtl', 'tan', 'tanf', 'tanh', 'tanhf', 'tanhl', 'tanl',
+ 'tgamma', 'tgammaf', 'tgammal', 'trunc', 'truncf', 'truncl' may be
+ handled as built-in functions.  All these functions have corresponding
+ versions prefixed with '__builtin_' in the 'gcc.builtins' module.
+ 
+    In the 'core.stdc.stdio' module, the functions 'fprintf', 'fputc',
+ 'fputc_unlocked', 'fputs', 'fwrite', 'printf', 'puts', 'snprintf',
+ 'sprintf', 'vfprintf', 'vprintf', 'vsnprintf', 'vsprintf' may be handled
+ as built-in functions.  All these functions have corresponding versions
+ prefixed with '__builtin_' in the 'gcc.builtins' module.
+ 
+    In the 'core.stdc.stdlib' module, the functions 'abort', 'abs',
+ 'aligned_alloc', 'alloca', 'calloc', 'exit', '_Exit', 'free', 'labs',
+ 'llabs', 'malloc', 'realloc' may be handled as built-in functions.  All
+ these functions have corresponding versions prefixed with '__builtin_'
+ in the 'gcc.builtins' module.
+ 
+    In the 'core.stdc.string' module, the functions 'memchr', 'memcmp',
+ 'memcpy', 'memmove', 'memset', 'strcat', 'strchr', 'strcmp', 'strcpy',
+ 'strcspn', 'strdup', 'strlen', 'strncat', 'strncmp', 'strncpy',
+ 'strpbrk', 'strrchr', 'strspn', 'strstr' may be handled as built-in
+ functions.  All these functions have corresponding versions prefixed
+ with '__builtin_' in the 'gcc.builtins' module.
+ 
+    In the 'core.stdc.time' module, the function 'strftime' may be
+ handled as a built-in function.  All these functions have corresponding
+ versions prefixed with '__builtin_' in the 'gcc.builtins' module.
+ 
+    In the 'core.stdc.wctype' module, the functions 'iswalnum',
+ 'iswalpha', 'iswblank', 'iswcntrl', 'iswdigit', 'iswgraph', 'iswlower',
+ 'iswprint', 'iswpunct', 'iswspace', 'iswupper', 'iswxdigit', 'towlower',
+ 'towupper' may be handled as built-in functions.  All these functions
+ have corresponding versions prefixed with '__builtin_' in the
+ 'gcc.builtins' module.
+ 
+    Within the 'core.sys' package for POSIX and platform definitions, the
+ functions 'putchar_unlocked', 'putc_unlocked', 'posix_memalign', 'ffs',
+ 'strcasecmp', 'strncasecmp', 'stpcpy', 'stpncpy', 'strndup', 'strnlen',
+ 'execl', 'execle', 'execlp', 'execv', 'execve', 'execvp', '_exit',
+ 'fork' may be handled as built-in functions.  All these functions have
+ corresponding versions prefixed with '__builtin_' in the 'gcc.builtins'
+ module.
+ 
+ 
+ File: gdc.info,  Node: ImportC,  Next: Inline Assembly,  Prev: Builtin Functions,  Up: D Implementation
+ 
+ 2.3 Importing C Sources into D
+ ==============================
+ 
+ ImportC is a C preprocessor and parser embedded into the GNU D
+ implementation.  It enables direct importation of C files, without
+ needing to manually prepare a D file corresponding to the declarations
+ in the C file.
+ 
+    ImportC is an implementation of ISO/IEC 9899:2011, which will be
+ referred to as C11.  Prior versions, such as C99, C89, and K+R C, are
+ not supported.
+ 
+    Assuming you have no file 'cstdio.c' or 'main.d', the commands
+        cat > cstdio.c << @EOC
+        int printf(const char*, ...);
+        @EOC
+        cat > main.d << @EOD
+        import cstdio;
+        void main() { printf("Hello ImportC\n"); }
+        @EOD
+        gdc main.d -o main; ./main
+    will generate a program which will print 'Hello ImportC'.
+ 
+    ImportC does not have a preprocessor.  It is designed to compile C
+ files after they have been first run through the C preprocessor.  If the
+ C file has a '.i' extension, the file is presumed to be already
+ preprocessed.  Preprocessing can be run manually:
+        gcc -E file.c > file.i
+ 
+ ImportC collects all the '#define' macros from the preprocessor run when
+ it is run automatically.  The macros that look like manifest constants,
+ such as:
+      #define COLOR 0x123456
+    are interpreted as D manifest constant declarations of the form:
+      enum COLOR = 0x123456;
+ 
+ The variety of macros that can be interpreted as D declarations may be
+ expanded, but will never encompass all the metaprogramming uses of C
+ macros.
+ 
+    GNU D does not directly compile C files into modules that can be
+ linked in with D code to form an executable.  When given a source file
+ with the suffix '.c', the compiler driver program 'gdc' instead runs the
+ subprogram 'cc1'.
+ 
+      gdc file1.d file2.c // d21 file1.d -o file1.s
+                          // cc1 file2.c -o file2.s
+                          // as file1.s -o file1.o
+                          // as file2.s -o file2.o
+                          // ld file1.o file2.o
+ 
+ 
+ File: gdc.info,  Node: Inline Assembly,  Next: Intrinsics,  Prev: ImportC,  Up: D Implementation
+ 
+ 2.4 Inline Assembly
+ ===================
+ 
+ The 'asm' keyword allows you to embed assembler instructions within D
+ code.  GNU D provides two forms of inline 'asm' statements.  A "basic
+ 'asm'" statement is one with no operands, while an "extended 'asm'"
+ statement includes one or more operands.
+ 
+      asm FUNCTIONATTRIBUTES {
+              ASSEMBLERINSTRUCTION ;
+      }
+ 
+      asm FUNCTIONATTRIBUTES {
+              ASSEMBLERTEMPLATE
+               : OUTPUTOPERANDS
+               [ : INPUTOPERANDS
+               [ : CLOBBERS
+               [ : GOTOLABELS ] ] ] ;
+      }
+ 
+ The extended form is preferred for mixing D and assembly language within
+ a function, but to include assembly language in a function declared with
+ the 'naked' attribute you must use basic 'asm'.
+ 
+      uint incr (uint value)
+      {
+          uint result;
+          asm { "incl %0"
+                : "=a" (result)
+                : "a" (value);
+          }
+          return result;
+      }
+ 
+ Multiple assembler instructions can appear within an 'asm' block, or the
+ instruction template can be a multi-line or concatenated string.  In
+ both cases, GCC's optimizers won't discard or move any instruction
+ within the statement block.
+      bool hasCPUID()
+      {
+          uint flags = void;
+          asm nothrow @nogc {
+              "pushfl";
+              "pushfl";
+              "xorl %0, (%%esp)" :: "i" (0x00200000);
+              "popfl";
+              "pushfl";
+              "popl %0" : "=a" (flags);
+              "xorl (%%esp), %0" : "=a" (flags);
+              "popfl";
+          }
+          return (flags & 0x0020_0000) != 0;
+      }
+ 
+ The instruction templates for both basic and extended 'asm' can be any
+ expression that can be evaluated at compile-time to a string, not just
+ string literals.
+ 
+      uint invert(uint v)
+      {
+          uint result;
+          asm @safe @nogc nothrow pure {
+              genAsmInsn(`invert`)
+              : [res] `=r` (result)
+              : [arg1] `r` (v);
+          }
+          return result;
+ 
+      }
+ 
+ The total number of input + output + goto operands is limited to 30.
+ 
+ 
+ File: gdc.info,  Node: Intrinsics,  Next: Predefined Pragmas,  Prev: Inline Assembly,  Up: D Implementation
+ 
+ 2.5 Intrinsics
+ ==============
+ 
+ The D language specification itself does not define any intrinsics that
+ a compatible compiler must implement.  Rather, within the D core library
+ there are a number of modules that define primitives with generic
+ implementations.  While the generic versions of these functions are
+ computationally expensive relative to the cost of the operation itself,
+ compiler implementations are free to recognize them and generate
+ equivalent and faster code.
+ 
+    The following are the kinds of intrinsics recognized by GNU D.
+ 
+ * Menu:
+ 
+ * Bit Operation Intrinsics::
+ * Integer Overflow Intrinsics::
+ * Math Intrinsics::
+ * Variadic Intrinsics::
+ * Volatile Intrinsics::
+ * CTFE Intrinsics::
+ 
+ 
+ File: gdc.info,  Node: Bit Operation Intrinsics,  Next: Integer Overflow Intrinsics,  Up: Intrinsics
+ 
+ 2.5.1 Bit Operation Intrinsics
+ ------------------------------
+ 
+ The following functions are a collection of intrinsics that do bit-level
+ operations, available by importing the 'core.bitop' module.
+ 
+    Although most are named after x86 hardware instructions, it is not
+ guaranteed that they will result in generating equivalent assembly on
+ x86.  If the compiler determines there is a better way to get the same
+ result in hardware, then that will be used instead.
+ 
+  -- Function: int core.bitop.bsf (uint V)
+  -- Function: int core.bitop.bsf (ulong V)
+ 
+      Scans the bits in V starting with bit '0', looking for the first
+      set bit.  Returns the bit number of the first bit set.  The return
+      value is undefined if V is zero.
+ 
+      This intrinsic is the same as the GCC built-in function
+      '__builtin_ctz'.
+ 
+  -- Function: int core.bitop.bsr (uint V)
+  -- Function: int core.bitop.bsr (ulong V)
+ 
+      Scans the bits in V from the most significant bit to the least
+      significant bit, looking for the first set bit.  Returns the bit
+      number of the first bit set.  The return value is undefined if V is
+      zero.
+ 
+      This intrinsic is equivalent to writing the following:
+           result = __builtin_clz(v) ^ (v.sizeof * 8 - 1)
+ 
+  -- Function: int core.bitop.bt (scope const(uint*) P, uint BITNUM)
+  -- Function: int core.bitop.bt (scope const(uint*) P, uint BITNUM)
+ 
+      Tests the bit BITNUM in the input parameter P.  Returns a non-zero
+      value if the bit was set, and a zero if it was clear.
+ 
+      This intrinsic is equivalent to writing the following:
+           immutable bits_per_unit = (*p).sizeof * 8;
+           immutable bit_mask = size_t(1) << (bitnum % bits_per_unit);
+ 
+           result = (p[bitnum / bits_per_unit] & bit_mask) != 0;
+ 
+  -- Function: int core.bitop.btc (uint* P, uint BITNUM)
+  -- Function: int core.bitop.btc (ulong* P, ulong BITNUM)
+ 
+      Tests and complements the bit BITNUM in the input parameter P.
+      Returns a non-zero value if the bit was set, and a zero if it was
+      clear.
+ 
+      This intrinsic is equivalent to writing the following:
+           immutable bits_per_unit = (*p).sizeof * 8;
+           immutable bit_mask = size_t(1) << (bitnum % bits_per_unit);
+ 
+           result = (p[bitnum / bits_per_unit] & bit_mask) != 0;
+ 
+           p[bitnum / bits_per_unit] ^= bit_mask;
+ 
+  -- Function: int core.bitop.btr (uint* P, uint BITNUM)
+  -- Function: int core.bitop.btr (ulong* P, ulong BITNUM)
+ 
+      Tests and resets (sets to 0) the bit BITNUM in the input parameter
+      P.  Returns a non-zero value if the bit was set, and a zero if it
+      was clear.
+ 
+      This intrinsic is equivalent to writing the following:
+           immutable bits_per_unit = (*p).sizeof * 8;
+           immutable bit_mask = size_t(1) << (bitnum % bits_per_unit);
+ 
+           result = (p[bitnum / bits_per_unit] & bit_mask) != 0;
+ 
+           p[bitnum / bits_per_unit] &= ~bit_mask;
+ 
+  -- Function: int core.bitop.bts (uint* P, uint BITNUM)
+  -- Function: int core.bitop.bts (ulong* P, ulong BITNUM)
+ 
+      Tests and sets the bit BITNUM in the input parameter P.  Returns a
+      non-zero value if the bit was set, and a zero if it was clear.
+ 
+      This intrinsic is equivalent to writing the following:
+           immutable bits_per_unit = (*p).sizeof * 8;
+           immutable bit_mask = size_t(1) << (bitnum % bits_per_unit);
+ 
+           result = (p[bitnum / bits_per_unit] & bit_mask) != 0;
+ 
+           p[bitnum / bits_per_unit] |= bit_mask;
+ 
+  -- Function: ushort core.bitop.byteswap (ushort X)
+  -- Function: uint core.bitop.bswap (uint X)
+  -- Function: ulong core.bitop.bswap (ulong X)
+ 
+      Swaps the bytes in X end-to-end; for example, in a 4-byte 'uint',
+      byte '0' becomes byte '3', byte '1' becomes byte '2', etc.
+ 
+      This intrinsic is the same as the GCC built-in function
+      '__builtin_bswap'.
+ 
+  -- Function: int core.bitop.popcnt (uint X)
+  -- Function: int core.bitop.popcnt (ulong X)
+ 
+      Calculates the number of set bits in X.
+ 
+      This intrinsic is the same as the GCC built-in function
+      '__builtin_popcount'.
+ 
+  -- Template: T core.bitop.rol (T)(const T VALUE, const uint COUNT)
+  -- Template: T core.bitop.rol (uint COUNT, T)(const T VALUE)
+ 
+      Bitwise rotate VALUE left by COUNT bit positions.
+ 
+      This intrinsic is equivalent to writing the following:
+           result = cast(T) ((value << count) | (value >> (T.sizeof * 8 - count)));
+ 
+  -- Template: T core.bitop.ror (T)(const T VALUE, const uint COUNT)
+  -- Template: T core.bitop.ror (uint COUNT, T)(const T VALUE)
+ 
+      Bitwise rotate VALUE right by COUNT bit positions.
+ 
+      This intrinsic is equivalent to writing the following:
+           result = cast(T) ((value >> count) | (value << (T.sizeof * 8 - count)));
+ 
+ 
+ File: gdc.info,  Node: Integer Overflow Intrinsics,  Next: Math Intrinsics,  Prev: Bit Operation Intrinsics,  Up: Intrinsics
+ 
+ 2.5.2 Integer Overflow Intrinsics
+ ---------------------------------
+ 
+ The following functions are a collection of intrinsics that implement
+ integral arithmetic primitives that check for out-of-range results,
+ available by importing the 'core.checkedint' module.
+ 
+    In all intrinsics, the overflow is sticky, meaning a sequence of
+ operations can be done and overflow need only be checked at the end.
+ 
+  -- Function: int core.checkedint.adds (int X, int Y, ref bool OVERFLOW)
+  -- Function: long core.checkedint.adds (long X, long Y, ref bool
+           OVERFLOW)
+ 
+      Add two signed integers, checking for overflow.
+ 
+      This intrinsic is the same as the GCC built-in function
+      '__builtin_sadd_overflow'.
+ 
+  -- Function: int core.checkedint.addu (int X, int Y, ref bool OVERFLOW)
+  -- Function: long core.checkedint.addu (long X, long Y, ref bool
+           OVERFLOW)
+ 
+      Add two unsigned integers, checking for overflow.
+ 
+      This intrinsic is the same as the GCC built-in function
+      '__builtin_uadd_overflow'.
+ 
+  -- Function: int core.checkedint.muls (int X, int Y, ref bool OVERFLOW)
+  -- Function: long core.checkedint.muls (long X, long Y, ref bool
+           OVERFLOW)
+ 
+      Multiply two signed integers, checking for overflow.
+ 
+      This intrinsic is the same as the GCC built-in function
+      '__builtin_smul_overflow'.
+ 
+  -- Function: int core.checkedint.mulu (int X, int Y, ref bool OVERFLOW)
+  -- Function: long core.checkedint.mulu (long X, long Y, ref bool
+           OVERFLOW)
+ 
+      Multiply two unsigned integers, checking for overflow.
+ 
+      This intrinsic is the same as the GCC built-in function
+      '__builtin_umul_overflow'.
+ 
+  -- Function: int core.checkedint.negs (int X, ref bool OVERFLOW)
+  -- Function: long core.checkedint.negs (long X, ref bool OVERFLOW)
+ 
+      Negates an integer.
+ 
+      This intrinsic is equivalent to writing the following:
+           result = __builtin_ssub (0, x, overflow);
+ 
+  -- Function: int core.checkedint.subs (int X, int Y, ref bool OVERFLOW)
+  -- Function: long core.checkedint.subs (long X, long Y, ref bool
+           OVERFLOW)
+ 
+      Substract two signed integers, checking for overflow.
+ 
+      This intrinsic is the same as the GCC built-in function
+      '__builtin_ssub_overflow'.
+ 
+  -- Function: int core.checkedint.subu (int X, int Y, ref bool OVERFLOW)
+  -- Function: long core.checkedint.subu (long X, long Y, ref bool
+           OVERFLOW)
+ 
+      Substract two unsigned integers, checking for overflow.
+ 
+      This intrinsic is the same as the GCC built-in function
+      '__builtin_usub_overflow'.
+ 
+ 
+ File: gdc.info,  Node: Math Intrinsics,  Next: Variadic Intrinsics,  Prev: Integer Overflow Intrinsics,  Up: Intrinsics
+ 
+ 2.5.3 Math Intrinsics
+ ---------------------
+ 
+ The following functions are a collection of mathematical intrinsics,
+ available by importing the 'core.math' module.
+ 
+  -- Function: float core.math.cos (float x)
+  -- Function: double core.math.cos (double x)
+  -- Function: real core.math.cos (real x)
+ 
+      Returns cosine of X, where X is in radians.  The return value is
+      undefined if X is greater than 2^{64}.
+ 
+      This intrinsic is the same as the GCC built-in function
+      '__builtin_cos'.
+ 
+  -- Function: float core.math.fabs (float x)
+  -- Function: double core.math.fabs (double x)
+  -- Function: real core.math.fabs (real x)
+ 
+      Compute the absolute value of X.
+ 
+      This intrinsic is the same as the GCC built-in function
+      '__builtin_fabs'.
+ 
+  -- Function: float core.math.ldexp (float n, int exp)
+  -- Function: double core.math.ldexp (double n, int exp)
+  -- Function: real core.math.ldexp (real n, int exp)
+ 
+      Compute n * 2^{exp}.
+ 
+      This intrinsic is the same as the GCC built-in function
+      '__builtin_ldexp'.
+ 
+  -- Function: float core.math.rint (float x)
+  -- Function: double core.math.rint (double x)
+  -- Function: real core.math.rint (real x)
+ 
+      Rounds X to the nearest integer value, using the current rounding
+      mode.  If the return value is not equal to X, the 'FE_INEXACT'
+      exception is raised.  'nearbyint' performs the same operation, but
+      does not set the 'FE_INEXACT' exception.
+ 
+      This intrinsic is the same as the GCC built-in function
+      '__builtin_rint'.
+ 
+  -- Function: float core.math.rndtol (float x)
+  -- Function: double core.math.rndtol (double x)
+  -- Function: real core.math.rndtol (real x)
+ 
+      Returns X rounded to a long value using the current rounding mode.
+      If the integer value of X is greater than 'long.max', the result is
+      indeterminate.
+ 
+      This intrinsic is the same as the GCC built-in function
+      '__builtin_llround'.
+ 
+  -- Function: float core.math.sin (float x)
+  -- Function: double core.math.sin (double x)
+  -- Function: real core.math.sin (real x)
+ 
+      Returns sine of X, where X is in radians.  The return value is
+      undefined if X is greater than 2^{64}.
+ 
+      This intrinsic is the same as the GCC built-in function
+      '__builtin_sin'.
+ 
+  -- Function: float core.math.sqrt (float x)
+  -- Function: double core.math.sqrt (double x)
+  -- Function: real core.math.sqrt (real x)
+ 
+      Compute the sqrt of X.
+ 
+      This intrinsic is the same as the GCC built-in function
+      '__builtin_sqrt'.
+ 
+  -- Template: T core.math.toPrec (T)(float f)
+  -- Template: T core.math.toPrec (T)(double f)
+  -- Template: T core.math.toPrec (T)(real f)
+ 
+      Round F to a specific precision.
+ 
+      In floating-point operations, D language types specify only a
+      minimum precision, not a maximum.  The 'toPrec' function forces
+      rounding of the argument F to the precision of the specified
+      floating point type 'T'.  The rounding mode used is inevitably
+      target-dependent, but will be done in a way to maximize accuracy.
+      In most cases, the default is round-to-nearest.
+ 
+ 
+ File: gdc.info,  Node: Variadic Intrinsics,  Next: Volatile Intrinsics,  Prev: Math Intrinsics,  Up: Intrinsics
+ 
+ 2.5.4 Variadic Intrinsics
+ -------------------------
+ 
+ The following functions are a collection of variadic intrinsics,
+ available by importing the 'core.stdc.stdarg' module.
+ 
+  -- Template: void core.stdc.stdarg.va_arg (T)(ref va_list ap, ref T
+           parmn)
+ 
+      Retrieve and store in PARMN the next value from the 'va_list' AP
+      that is of type 'T'.
+ 
+      This intrinsic is equivalent to writing the following:
+           parmn = __builtin_va_arg (ap, T);
+ 
+  -- Template: T core.stdc.stdarg.va_arg (T)(ref va_list ap)
+ 
+      Retrieve and return the next value from the 'va_list' AP that is of
+      type 'T'.
+ 
+      This intrinsic is equivalent to writing the following:
+           result = __builtin_va_arg (ap, T);
+ 
+  -- Function: void core.stdc.stdarg.va_copy (out va_list dest, va_list
+           src)
+ 
+      Make a copy of SRC in its current state and store to DEST.
+ 
+      This intrinsic is the same as the GCC built-in function
+      '__builtin_va_copy'.
+ 
+  -- Function: void core.stdc.stdarg.va_end (va_list ap)
+ 
+      Destroy AP so that it is no longer useable.
+ 
+      This intrinsic is the same as the GCC built-in function
+      '__builtin_va_end'.
+ 
+  -- Template: void core.stdc.stdarg.va_start (T)(out va_list ap, ref T
+           parmn)
+ 
+      Initialize AP so that it can be used to access the variable
+      arguments that follow the named argument PARMN.
+ 
+      This intrinsic is the same as the GCC built-in function
+      '__builtin_va_start'.
+ 
+ 
+ File: gdc.info,  Node: Volatile Intrinsics,  Next: CTFE Intrinsics,  Prev: Variadic Intrinsics,  Up: Intrinsics
+ 
+ 2.5.5 Volatile Intrinsics
+ -------------------------
+ 
+ The following functions are a collection of intrinsics for volatile
+ operations, available by importing the 'core.volatile' module.
+ 
+    Calls to them are guaranteed to not be removed (as dead assignment
+ elimination or presumed to have no effect) or reordered in the same
+ thread.
+ 
+    These reordering guarantees are only made with regards to other
+ operations done through these functions; the compiler is free to reorder
+ regular loads/stores with regards to loads/stores done through these
+ functions.
+ 
+    This is useful when dealing with memory-mapped I/O (MMIO) where a
+ store can have an effect other than just writing a value, or where
+ sequential loads with no intervening stores can retrieve different
+ values from the same location due to external stores to the location.
+ 
+    These functions will, when possible, do the load/store as a single
+ operation.  In general, this is possible when the size of the operation
+ is less than or equal to '(void*).sizeof', although some targets may
+ support larger operations.  If the load/store cannot be done as a single
+ operation, multiple smaller operations will be used.
+ 
+    These are not to be conflated with atomic operations.  They do not
+ guarantee any atomicity.  This may be provided by coincidence as a
+ result of the instructions used on the target, but this should not be
+ relied on for portable programs.  Further, no memory fences are implied
+ by these functions.  They should not be used for communication between
+ threads.  They may be used to guarantee a write or read cycle occurs at
+ a specified address.
+ 
+  -- Function: ubyte core.volatile.volatileLoad (ubyte* ptr)
+  -- Function: ushort core.volatile.volatileLoad (ushort* ptr)
+  -- Function: uint core.volatile.volatileLoad (uint* ptr)
+  -- Function: ulong core.volatile.volatileLoad (ulong* ptr)
+ 
+      Read value from the memory location indicated by PTR.
+ 
+  -- Function: ubyte core.volatile.volatileStore (ubyte* ptr, ubyte
+           value)
+  -- Function: ushort core.volatile.volatileStore (ushort* ptr, ushort
+           value)
+  -- Function: uint core.volatile.volatileStore (uint* ptr, uint value)
+  -- Function: ulong core.volatile.volatileStore (ulong* ptr, ulong
+           value)
+ 
+      Write VALUE to the memory location indicated by PTR.
+ 
+ 
+ File: gdc.info,  Node: CTFE Intrinsics,  Prev: Volatile Intrinsics,  Up: Intrinsics
+ 
+ 2.5.6 CTFE Intrinsics
+ ---------------------
+ 
+ The following functions are only treated as intrinsics during
+ compile-time function execution (CTFE) phase of compilation to allow
+ more functions to be computable at compile-time, either because their
+ generic implementations are too complex, or do some low-level bit
+ manipulation of floating point types.
+ 
+    Calls to these functions that exist after CTFE has finished will get
+ standard code-generation without any special compiler intrinsic
+ suppport.
+ 
+  -- Function: float std.math.exponential.exp (float x)
+  -- Function: double std.math.exponential.exp (double x)
+  -- Function: real std.math.exponential.exp (real x)
+ 
+      Calculates e^x.
+ 
+      This function is evaluated during CTFE as the GCC built-in function
+      '__builtin_exp'.
+ 
+  -- Function: float std.math.exponential.expm1 (float x)
+  -- Function: double std.math.exponential.expm1 (double x)
+  -- Function: real std.math.exponential.expm1 (real x)
+ 
+      Calculates e^x-1.0.
+ 
+      This function is evaluated during CTFE as the GCC built-in function
+      '__builtin_expm1'.
+ 
+  -- Function: float std.math.exponential.exp2 (float x)
+  -- Function: double std.math.exponential.exp2 (double x)
+  -- Function: real std.math.exponential.exp2 (real x)
+ 
+      Calculates 2^x.
+ 
+      This function is evaluated during CTFE as the GCC built-in function
+      '__builtin_exp2'.
+ 
+  -- Function: float std.math.exponential.log (float x)
+  -- Function: double std.math.exponential.log (double x)
+  -- Function: real std.math.exponential.log (real x)
+ 
+      Calculate the natural logarithm of X.
+ 
+      This function is evaluated during CTFE as the GCC built-in function
+      '__builtin_log'.
+ 
+  -- Function: float std.math.exponential.log10 (float x)
+  -- Function: double std.math.exponential.log10 (double x)
+  -- Function: real std.math.exponential.log10 (real x)
+ 
+      Calculates the base-10 logarithm of X.
+ 
+      This function is evaluated during CTFE as the GCC built-in function
+      '__builtin_log10'.
+ 
+  -- Function: float std.math.exponential.log2 (float x)
+  -- Function: double std.math.exponential.log2 (double x)
+  -- Function: real std.math.exponential.log2 (real x)
+ 
+      Calculates the base-2 logarithm of X.
+ 
+      This function is evaluated during CTFE as the GCC built-in function
+      '__builtin_log2'.
+ 
+  -- Template: Largest!(F, G) std.math.exponential.pow (F, G) (F x, G y)
+  -- Template: real std.math.exponential.pow (I, F)(I x, F y)
+ 
+      Calculates x^y, where Y is a float.
+ 
+      This function is evaluated during CTFE as the GCC built-in function
+      '__builtin_pow'.
+ 
+  -- Template: F std.math.exponential.pow (F, G) (F x, G n)
+ 
+      Calculates x^n, where N is an integer.
+ 
+      This function is evaluated during CTFE as the GCC built-in function
+      '__builtin_powi'.
+ 
+  -- Function: real std.math.operations.fma (real x, real y, real z)
+ 
+      Returns '(x * y) + z', rounding only once according to the current
+      rounding mode.
+ 
+      This function is evaluated during CTFE as the GCC built-in function
+      '__builtin_fma'.
+ 
+  -- Template: F std.math.operations.fmax (F)(const F x, const F y)
+ 
+      Returns the larger of X and Y.
+ 
+      This function is evaluated during CTFE as the GCC built-in function
+      '__builtin_fmax'.
+ 
+  -- Template: F std.math.operations.fmin (F)(const F x, const F y)
+ 
+      Returns the smaller of X and Y.
+ 
+      This function is evaluated during CTFE as the GCC built-in function
+      '__builtin_fmin'.
+ 
+  -- Function: float std.math.rounding.ceil (float x)
+  -- Function: double std.math.rounding.ceil (double x)
+  -- Function: real std.math.rounding.ceil (real x)
+ 
+      Returns the value of X rounded upward to the next integer (toward
+      positive infinity).
+ 
+      This function is evaluated during CTFE as the GCC built-in function
+      '__builtin_ceil'.
+ 
+  -- Function: float std.math.rounding.floor (float x)
+  -- Function: double std.math.rounding.floor (double x)
+  -- Function: real std.math.rounding.floor (real x)
+ 
+      Returns the value of X rounded downward to the next integer (toward
+      negative infinity).
+ 
+      This function is evaluated during CTFE as the GCC built-in function
+      '__builtin_floor'.
+ 
+  -- Function: real std.math.rounding.round (real x)
+ 
+      Return the value of X rounded to the nearest integer.  If the
+      fractional part of X is exactly 0.5, the return value is rounded
+      away from zero.
+ 
+      This function is evaluated during CTFE as the GCC built-in function
+      '__builtin_round'.
+ 
+  -- Function: real std.math.rounding.trunc (real x)
+ 
+      Returns the integer portion of X, dropping the fractional portion.
+ 
+      This function is evaluated during CTFE as the GCC built-in function
+      '__builtin_trunc'.
+ 
+  -- Template: R std.math.traits.copysign (R, X)(R to, X from)
+ 
+      Returns a value composed of TO with FROM's sign bit.
+ 
+      This function is evaluated during CTFE as the GCC built-in function
+      '__builtin_copysign'.
+ 
+  -- Template: bool std.math.traits.isFinite (X)(X x)
+ 
+      Returns true if X is finite.
+ 
+      This function is evaluated during CTFE as the GCC built-in function
+      '__builtin_isfinite'.
+ 
+  -- Template: bool std.math.traits.isInfinity (X)(X x)
+ 
+      Returns true if X is infinite.
+ 
+      This function is evaluated during CTFE as the GCC built-in function
+      '__builtin_isinf'.
+ 
+  -- Template: bool std.math.traits.isNaN (X)(X x)
+ 
+      Returns true if X is NaN.
+ 
+      This function is evaluated during CTFE as the GCC built-in function
+      '__builtin_isnan'.
+ 
+  -- Function: float std.math.trigoometry.tan (float x)
+  -- Function: double std.math.trigoometry.tan (double x)
+  -- Function: real std.math.trigonometry.tan (real x)
+ 
+      Returns tangent of X, where X is in radians.
+ 
+      This intrinsic is the same as the GCC built-in function
+      '__builtin_tan'.
+ 
+ 
+ File: gdc.info,  Node: Predefined Pragmas,  Next: Predefined Versions,  Prev: Intrinsics,  Up: D Implementation
+ 
+ 2.6 Predefined Pragmas
+ ======================
+ 
+ The 'pragma' operator is used as a way to pass special information to
+ the implementation and allow the addition of vendor specific extensions.
+ The standard predefined pragmas are documented by the D language
+ specification hosted at
+ <https://dlang.org/spec/pragma.html#predefined-pragmas>.  A D compiler
+ must recognize, but is free to ignore any pragma in this list.
+ 
+    Where a pragma is ignored, the GNU D compiler will emit a warning
+ when the '-Wunknown-pragmas' option is seen on the command-line.
+ 
+ 'pragma(crt_constructor)'
+      'pragma(crt_constructor)' annotates a function so it is run after
+      the C runtime library is initialized and before the D runtime
+      library is initialized.  Functions with this pragma must return
+      'void'.
+           pragma(crt_constructor) void init() { }
+ 
+ 'pragma(crt_destructor)'
+      'pragma(crt_destructor)' annotates a function so it is run after
+      the D runtime library is terminated and before the C runtime
+      library is terminated.  Calling 'exit' function also causes the
+      annotated functions to run.  Functions with this pragma must return
+      'void'.
+           pragma(crt_destructor) void init() { }
+ 
+ 'pragma(inline)'
+ 'pragma(inline, false)'
+ 'pragma(inline, true)'
+      'pragma(inline)' affects whether functions are declared inlined or
+      not.  The pragma takes two forms.  In the first form, inlining is
+      controlled by the command-line options for inlining.
+ 
+      Functions annotated with 'pragma(inline, false)' are marked
+      uninlinable.  Functions annotated with 'pragma(inline, true)' are
+      always inlined.
+ 
+ 'pragma(lib)'
+      This pragma is accepted, but has no effect.
+           pragma(lib, "advapi32");
+ 
+ 'pragma(linkerDirective)'
+      This pragma is accepted, but has no effect.
+           pragma(linkerDirective, "/FAILIFMISMATCH:_ITERATOR_DEBUG_LEVEL=2");
+ 
+ 'pragma(mangle)'
+      'pragma(mangle, "symbol_name")' overrides the default mangling for
+      a function or variable symbol.  The symbol name can be any
+      expression that must evaluate at compile time to a string literal.
+      This enables linking to a symbol which is a D keyword, since an
+      identifier cannot be a keyword.
+ 
+      Targets are free to apply a prefix to the user label of the symbol
+      name in assembly.  For example, on 'x86_64-apple-darwin',
+      'symbol_name' would produce '_symbol_name'.  If the mangle string
+      begins with '*', then 'pragma(mangle)' will output the rest of the
+      string unchanged.
+ 
+           pragma(mangle, "body")
+           extern(C) void body_func();
+ 
+           pragma(mangle, "function")
+           extern(C++) struct _function {}
+ 
+ 'pragma(msg)'
+      'pragma(msg, "message")' causes the compiler to print an
+      informational message with the text 'message'.  The pragma accepts
+      multiple arguments, each to which is evaluated at compile time and
+      then all are combined into one concatenated message.
+           pragma(msg, "compiling...", 6, 1.0); // prints "compiling...61.0"
+ 
+ 'pragma(printf)'
+ 'pragma(scanf)'
+ 
+      'pragma(printf)' and 'pragma(scanf)' specifies that a function
+      declaration with 'printf' or 'scanf' style arguments that should be
+      type-checked against a format string.
+ 
+      A printf-like or scanf-like function can either be an 'extern(C)'
+      or 'extern(C++)' function with a FORMAT parameter accepting a
+      pointer to a 0-terminated 'char' string, immediately followed by
+      either a '...' variadic argument list or a parameter of type
+      'va_list' as the last parameter.
+ 
+           extern(C):
+           pragma(printf)
+           int printf(scope const char* format, scope const ...);
+ 
+           pragma(scanf)
+           int vscanf(scope const char* format, va_list arg);
+ 
+ 'pragma(startaddress)'
+      This pragma is accepted, but has no effect.
+           void foo() { }
+           pragma(startaddress, foo);
+ 
+ 
+ File: gdc.info,  Node: Predefined Versions,  Next: Special Enums,  Prev: Predefined Pragmas,  Up: D Implementation
+ 
+ 2.7 Predefined Versions
+ =======================
+ 
+ Several conditional version identifiers are predefined; you use them
+ without supplying their definitions.  They fall into three classes:
+ standard, common, and target-specific.
+ 
+    Predefined version identifiers from this list cannot be set from the
+ command line or from version statements.  This prevents things like both
+ 'Windows' and 'linux' being simultaneously set.
+ 
+ * Menu:
+ 
+ * Standard Predefined Versions::
+ * Common Predefined Versions::
+ * Target Predefined Versions::
+ 
+ 
+ File: gdc.info,  Node: Standard Predefined Versions,  Next: Common Predefined Versions,  Up: Predefined Versions
+ 
+ 2.7.1 Standard Predefined Versions
+ ----------------------------------
+ 
+ The standard predefined versions are documented by the D language
+ specification hosted at
+ <https://dlang.org/spec/version.html#predefined-versions>.
+ 
+ 'all'
+ 'none'
+      Version 'none' is never defined; used to just disable a section of
+      code.  Version 'all' is always defined; used as the opposite of
+      'none'.
+ 
+ 'BigEndian'
+ 'LittleEndian'
+      These versions reflect the byte order of multi-byte data in memory.
+      'LittleEndian' is set when the least significant byte is first.
+      'BigEndian' is set when the most significant byte is first.
+ 
+ 'CRuntime_Bionic'
+ 'CRuntime_Glibc'
+ 'CRuntime_Microsoft'
+ 'CRuntime_Musl'
+ 'CRuntime_Newlib'
+ 'CRuntime_UClibc'
+ 
+      These versions reflect which standard C library is being linked in.
+      'CRuntime_Bionic' is set when Bionic is the default C library.
+      'CRuntime_Glibc' is set when GLIBC is the default C library.
+      'CRuntime_Microsoft' is set when MSVCRT is the default C library.
+      'CRuntime_Musl' is set when musl is the default C library.
+      'CRuntime_Newlib' is set when Newlib is the default C library.
+      'CRuntime_UClibc' is set when uClibc is the default C library.
+ 
+ 'CppRuntime_Gcc'
+      This version is defined when the standard C++ library being linked
+      in is 'libstdc++'.
+ 
+ 'D_BetterC'
+      This version is defined when the standard D libraries are not being
+      implicitly linked in.  This also implies that features of the D
+      language that rely on exceptions, module information, or run-time
+      type information are disabled as well.  Enabled by '-fno-druntime'.
+ 
+ 'D_Coverage'
+      This version is defined when code coverage analysis instrumentation
+      is being generated.  Enabled by '-ftest-coverage'.
+ 
+ 'D_Ddoc'
+      This version is defined when Ddoc documentation is being generated.
+      Enabled by '-fdoc'.
+ 
+ 'D_Exceptions'
+      This version is defined when exception handling is supported.
+      Disabled by '-fno-exceptions'.
+ 
+ 'D_HardFloat'
+ 'D_SoftFloat'
+      These versions reflect the floating-point ABI in use by the target.
+      'D_HardFloat' is set when the target hardware has a floating-point
+      unit.  'D_SoftFloat' is set when the target hardware does not have
+      a floating-point unit.
+ 
+ 'D_Invariants'
+      This version is defined when checks are being emitted for class
+      invariants and struct invariants.  Enabled by '-finvariants'.
+ 
+ 'D_LP64'
+      This version is defined when pointers are 64-bits.  Not to be
+      confused with with C's '__LP64__' model.
+ 
+ 'D_ModuleInfo'
+      This version is defined when run-time module information (also
+      known as 'ModuleInfo') is supported.  Disabled by
+      '-fno-moduleinfo'.
+ 
+ 'D_NoBoundsChecks'
+      This version is defined when array bounds checks are disabled.
+      Enabled by '-fno-bounds-checks'.
+ 
+ 'D_Optimized'
+      This version is defined in all optimizing compilations.
+ 
+ 'D_PIC'
+      This version is defined when position-independent code is being
+      generated.  Enabled by '-fPIC'.
+ 
+ 'D_PIE'
+      This version is defined when position-independent code that can be
+      only linked into executables is being generated.  Enabled by
+      '-fPIE'.
+ 
+ 'D_PreConditions'
+      This version is defined when checks are being emitted for 'in'
+      contracts.  Disabled by '-fno-preconditions'.
+ 
+ 'D_PostConditions'
+      This version is defined when checks are being emitted for 'out'
+      contracts.  Disabled by '-fno-postconditions'.
+ 
+ 'D_TypeInfo'
+      This version is defined when run-time type information (also known
+      as 'TypeInfo') is supported.  Disabled by '-fno-rtti'.
+ 
+ 'D_Version2'
+      This version defined when this is a D version 2 compiler.
+ 
+ 'unittest'
+      This version is defined when the 'unittest' code is being compiled
+      in.  Enabled by '-funittest'.
+ 
+ 
+ File: gdc.info,  Node: Common Predefined Versions,  Next: Target Predefined Versions,  Prev: Standard Predefined Versions,  Up: Predefined Versions
+ 
+ 2.7.2 Common Predefined Versions
+ --------------------------------
+ 
+ The common predefined macros are GNU D extensions.  They are available
+ with the same meanings regardless of the machine or operating system on
+ which you are using GNU D. Their names all start with 'GNU'.
+ 
+ 'GNU'
+      This version is defined by the GNU D compiler.  If all you need to
+      know is whether or not your D program is being compiled by GDC, or
+      a non-GDC compiler, you can simply test 'version(GNU)'.
+ 
+ 'GNU_DWARF2_Exceptions'
+ 'GNU_SEH_Exceptions'
+ 'GNU_SjLj_Exceptions'
+      These versions reflect the mechanism that will be used for
+      exception handling by the target.  'GNU_DWARF2_Exceptions' is
+      defined when the target uses DWARF 2 exceptions.
+      'GNU_SEH_Exceptions' is defined when the target uses SEH
+      exceptions.  'GNU_SjLj_Exceptions' is defined when the target uses
+      the 'setjmp'/'longjmp'-based exception handling scheme.
+ 
+ 'GNU_EMUTLS'
+      This version is defined if the target does not support thread-local
+      storage, and an emulation layer is used instead.
+ 
+ 'GNU_InlineAsm'
+      This version is defined when 'asm' statements use GNU D style
+      syntax.  (*note Inline Assembly::)
+ 
+ 'GNU_StackGrowsDown'
+      This version is defined if pushing a word onto the stack moves the
+      stack pointer to a smaller address, and is undefined otherwise.
+ 
+ 
+ File: gdc.info,  Node: Target Predefined Versions,  Prev: Common Predefined Versions,  Up: Predefined Versions
+ 
+ 2.7.3 Target-specific Predefined Versions
+ -----------------------------------------
+ 
+ The D compiler normally predefines several versions that indicate what
+ type of system and machine is in use.  They are obviously different on
+ each target supported by GCC.
+ 
+ 'AArch64'
+      Version relating to the AArch64 family of processors.
+ 
+ 'Android'
+      Version relating to the Android platform.
+ 
+ 'ARM'
+ 'ARM_HardFloat'
+ 'ARM_SoftFloat'
+ 'ARM_SoftFP'
+ 'ARM_Thumb'
+      Versions relating to the ARM family of processors.
+ 
+ 'Cygwin'
+      Version relating to the Cygwin environment.
+ 
+ 'darwin'
+      Deprecated; use 'OSX' instead.
+ 
+ 'DragonFlyBSD'
+      Versions relating to DragonFlyBSD systems.
+ 
+ 'FreeBSD'
+ 'FreeBSD_9'
+ 'FreeBSD_10'
+ 'FreeBSD_11'
+ 'FreeBSD_...'
+      Versions relating to FreeBSD systems.  The FreeBSD major version
+      number is inferred from the target triplet.
+ 
+ 'HPPA'
+ 'HPPA64'
+      Versions relating to the HPPA family of processors.
+ 
+ 'Hurd'
+      Version relating to GNU Hurd systems.
+ 
+ 'linux'
+      Version relating to Linux systems.
+ 
+ 'MinGW'
+      Version relating to the MinGW environment.
+ 
+ 'MIPS32'
+ 'MIPS64'
+ 'MIPS_EABI'
+ 'MIPS_HardFloat'
+ 'MIPS_N32'
+ 'MIPS_N64'
+ 'MIPS_O32'
+ 'MIPS_O64'
+ 'MIPS_SoftFloat'
+      Versions relating to the MIPS family of processors.
+ 
+ 'NetBSD'
+      Version relating to NetBSD systems.
+ 
+ 'OpenBSD'
+      Version relating to OpenBSD systems.
+ 
+ 'OSX'
+      Version relating to OSX systems.
+ 
+ 'Posix'
+      Version relating to POSIX systems (includes Linux, FreeBSD, OSX,
+      Solaris, etc).
+ 
+ 'PPC'
+ 'PPC64'
+ 'PPC_HardFloat'
+ 'PPC_SoftFloat'
+      Versions relating to the PowerPC family of processors.
+ 
+ 'RISCV32'
+ 'RISCV64'
+      Versions relating to the RISC-V family of processors.
+ 
+ 'S390'
+ 'SystemZ'
+      Versions relating to the S/390 and System Z family of processors.
+ 
+ 'S390X'
+      Deprecated; use 'SystemZ' instead.
+ 
+ 'Solaris'
+      Versions relating to Solaris systems.
+ 
+ 'SPARC'
+ 'SPARC64'
+ 'SPARC_HardFloat'
+ 'SPARC_SoftFloat'
+ 'SPARC_V8Plus'
+      Versions relating to the SPARC family of processors.
+ 
+ 'Thumb'
+      Deprecated; use 'ARM_Thumb' instead.
+ 
+ 'D_X32'
+ 'X86'
+ 'X86_64'
+      Versions relating to the x86-32 and x86-64 family of processors.
+ 
+ 'Windows'
+ 'Win32'
+ 'Win64'
+      Versions relating to Microsoft Windows systems.
+ 
+ 
+ File: gdc.info,  Node: Special Enums,  Next: Traits,  Prev: Predefined Versions,  Up: D Implementation
+ 
+ 2.8 Special Enums
+ =================
+ 
+ Special 'enum' names are used to represent types that do not have an
+ equivalent basic D type.  For example, C++ types used by the C++ name
+ mangler.
+ 
+    Special enums are declared opaque, with a base type explicitly set.
+ Unlike regular opaque enums, special enums can be used as any other
+ value type.  They have a default '.init' value, as well as other enum
+ properties available ('.min', '.max').  Special enums can be declared in
+ any module, and will be recognized by the compiler.
+ 
+      import gcc.builtins;
+      enum __c_long : __builtin_clong;
+      __c_long var = 0x800A;
+ 
+ The following identifiers are recognized by GNU D.
+ 
+ '__c_complex_double'
+      C '_Complex double' type.
+ '__c_complex_float'
+      C '_Complex float' type.
+ '__c_complex_real'
+      C '_Complex long double' type.
+ '__c_long'
+      C++ 'long' type.
+ '__c_longlong'
+      C++ 'long long' type.
+ '__c_long_double'
+      C 'long double' type.
+ '__c_ulong'
+      C++ 'unsigned long' type.
+ '__c_ulonglong'
+      C++ 'unsigned long long' type.
+ '__c_wchar_t'
+      C++ 'wchar_t' type.
+ 
+    The 'core.stdc.config' module declares the following shorthand alias
+ types for convenience: 'c_complex_double', 'c_complex_float',
+ 'c_complex_real', 'cpp_long', 'cpp_longlong', 'c_long_double',
+ 'cpp_ulong', 'cpp_ulonglong'.
+ 
+    It may cause undefined behavior at runtime if a special enum is
+ declared with a base type that has a different size to the target C/C++
+ type it is representing.  The GNU D compiler will catch such
+ declarations and emit a warning when the '-Wmismatched-special-enum'
+ option is seen on the command-line.
+ 
+ 
+ File: gdc.info,  Node: Traits,  Next: Vector Extensions,  Prev: Special Enums,  Up: D Implementation
+ 
+ 2.9 Traits
+ ==========
+ 
+ Traits are extensions to the D programming language to enable programs,
+ at compile time, to get at information internal to the compiler.  This
+ is also known as compile time reflection.
+ 
+    GNU D implements a '__traits(getTargetInfo)' trait that receives a
+ string key as its argument.  The result is an expression describing the
+ requested target information.
+ 
+      version (OSX)
+      {
+          static assert(__traits(getTargetInfo, "objectFormat") == "macho");
+      }
+ 
+ Keys for the trait are implementation defined, allowing target-specific
+ data for exotic targets.  A reliable subset exists which a D compiler
+ must recognize.  These are documented by the D language specification
+ hosted at <https://dlang.org/spec/traits.html#getTargetInfo>.
+ 
+    The following keys are recognized by GNU D.
+ 
+ 'cppRuntimeLibrary'
+      The C++ runtime library affinity for this toolchain.
+ 
+ 'cppStd'
+      The version of the C++ standard supported by 'extern(C++)' code,
+      equivalent to the '__cplusplus' macro in a C++ compiler.
+ 
+ 'floatAbi'
+      Floating point ABI; may be 'hard', 'soft', or 'softfp'.
+ 
+ 'objectFormat'
+      Target object format.
+ 
+ 
+ File: gdc.info,  Node: Vector Extensions,  Next: Vector Intrinsics,  Prev: Traits,  Up: D Implementation
+ 
+ 2.10 Vector Extensions
+ ======================
+ 
+ CPUs often support specialized vector types and vector operations (aka
+ media instructions).  Vector types are a fixed array of floating or
+ integer types, and vector operations operate simultaneously on them.
+ 
+      alias int4 = __vector(int[4]);
+ 
+ All the basic integer types can be used as base types, both as signed
+ and as unsigned: 'byte', 'short', 'int', 'long'.  In addition, 'float'
+ and 'double' can be used to build floating-point vector types, and
+ 'void' to build vectors of untyped data.  Only sizes that are positive
+ power-of-two multiples of the base type size are currently allowed.
+ 
+ The 'core.simd' module has the following shorthand aliases for commonly
+ supported vector types: 'byte8', 'byte16', 'byte32', 'byte64',
+ 'double1', 'double2', 'double4', 'double8', 'float2', 'float4',
+ 'float8', 'float16', 'int2', 'int4', 'int8', 'int16', 'long1', 'long2',
+ 'long4', 'long8', 'short4', 'short8', 'short16', 'short32', 'ubyte8',
+ 'ubyte16', 'ubyte32', 'ubyte64', 'uint2', 'uint4', 'uint8', 'uint16',
+ 'ulong1', 'ulong2', 'ulong4', 'ulong8', 'ushort4', 'ushort8',
+ 'ushort16', 'ushort32', 'void8', 'void16', 'void32', 'void64'.  All
+ these aliases correspond to '__vector(type[N])'.
+ 
+    Which vector types are supported depends on the target.  Only vector
+ types that are implemented for the current architecture are supported at
+ compile-time.  Vector operations that are not supported in hardware
+ cause GNU D to synthesize the instructions using a narrower mode.
+ 
+      alias v4i = __vector(int[4]);
+      alias v128f = __vector(float[128]);    // Error: not supported on this platform
+ 
+      int4 a, b, c;
+ 
+      c = a * b;    // Natively supported on x86 with SSE4
+      c = a / b;    // Always synthesized
+ 
+ Vector types can be used with a subset of normal D operations.
+ Currently, GNU D allows using the following operators on these types:
+ '+, -, *, /, unary+, unary-'.
+ 
+      alias int4 = __vector(int[4]);
+ 
+      int4 a, b, c;
+ 
+      c = a + b;
+ 
+ It is also possible to use shifting operators '<<', '>>', the modulus
+ operator '%', logical operations '&, |, ^', and the complement operator
+ 'unary~' on integer-type vectors.
+ 
+    For convenience, it is allowed to use a binary vector operation where
+ one operand is a scalar.  In that case the compiler transforms the
+ scalar operand into a vector where each element is the scalar from the
+ operation.  The transformation happens only if the scalar could be
+ safely converted to the vector-element type.  Consider the following
+ code.
+ 
+      alias int4 = __vector(int[4]);
+ 
+      int4 a, b;
+      long l;
+ 
+      a = b + 1;    // a = b + [1,1,1,1];
+      a = 2 * b;    // a = [2,2,2,2] * b;
+ 
+      a = l + a;    // Error, incompatible types.
+ 
+ Vector comparison is supported with standard comparison operators: '==,
+ !=, <, <=, >, >='.  Comparison operands can be vector expressions of
+ integer-type or real-type.  Comparison between integer-type vectors and
+ real-type vectors are not supported.  The result of the comparison is a
+ vector of the same width and number of elements as the comparison
+ operands with a signed integral element type.
+ 
+    Vectors are compared element-wise producing 0 when comparison is
+ false and -1 (constant of the appropriate type where all bits are set)
+ otherwise.  Consider the following example.
+ 
+      alias int4 = __vector(int[4]);
+ 
+      int4 a = [1,2,3,4];
+      int4 b = [3,2,1,4];
+      int4 c;
+ 
+      c = a >  b;     // The result would be [0, 0,-1, 0]
+      c = a == b;     // The result would be [0,-1, 0,-1]
+ 
+ 
+ File: gdc.info,  Node: Vector Intrinsics,  Next: Missing Features,  Prev: Vector Extensions,  Up: D Implementation
+ 
+ 2.11 Vector Intrinsics
+ ======================
+ 
+ The following functions are a collection of vector operation intrinsics,
+ available by importing the 'gcc.simd' module.
+ 
+  -- Template: void gcc.simd.prefetch (bool RW, ubyte LOCALITY)
+           (const(void)* ADDR)
+ 
+      Emit the prefetch instruction.  The value of ADDR is the address of
+      the memory to prefetch.  The value of RW is a compile-time constant
+      one or zero; one means that the prefetch is preparing for a write
+      to the memory address and zero, the default, means that the
+      prefetch is preparing for a read.  The value LOCALITY must be a
+      compile-time constant integer between zero and three.
+ 
+      This intrinsic is the same as the GCC built-in function
+      '__builtin_prefetch'.
+ 
+           for (i = 0; i < n; i++)
+           {
+               import gcc.simd : prefetch;
+               a[i] = a[i] + b[i];
+               prefetch!(true, 1)(&a[i+j]);
+               prefetch!(false, 1)(&b[i+j]);
+               // ...
+           }
+ 
+  -- Template: V gcc.simd.loadUnaligned (V)(const V* P)
+ 
+      Load unaligned vector from the address P.
+ 
+           float4 v;
+           ubyte[16] arr;
+ 
+           v = loadUnaligned(cast(float4*)arr.ptr);
+ 
+  -- Template: V gcc.simd.storeUnaligned (V)(V* P, V VALUE)
+ 
+      Store vector VALUE to unaligned address P.
+ 
+           float4 v;
+           ubyte[16] arr;
+ 
+           storeUnaligned(cast(float4*)arr.ptr, v);
+ 
+  -- Template: V0 gcc.simd.shuffle (V0, V1, M)(V0 OP1, V1 OP2, M MASK)
+  -- Template: V gcc.simd.shuffle (V, M)(V OP1, M MASK)
+ 
+      Construct a permutation of elements from one or two vectors,
+      returning a vector of the same type as the input vector(s).  The
+      MASK is an integral vector with the same width and element count as
+      the output vector.
+ 
+      This intrinsic is the same as the GCC built-in function
+      '__builtin_shuffle'.
+ 
+           int4 a = [1, 2, 3, 4];
+           int4 b = [5, 6, 7, 8];
+           int4 mask1 = [0, 1, 1, 3];
+           int4 mask2 = [0, 4, 2, 5];
+           int4 res;
+ 
+           res = shuffle(a, mask1);    // res is [1,2,2,4]
+           res = shuffle(a, b, mask2); // res is [1,5,3,6]
+ 
+  -- Template: V gcc.simd.shufflevector (V1, V2, M...)(V1 OP1, V2 OP2, M
+           MASK)
+  -- Template: V gcc.simd.shufflevector (V, MASK...)(V OP1, V OP2)
+ 
+      Construct a permutation of elements from two vectors, returning a
+      vector with the same element type as the input vector(s), and same
+      length as the MASK.
+ 
+      This intrinsic is the same as the GCC built-in function
+      '__builtin_shufflevector'.
+ 
+           int8 a = [1, -2, 3, -4, 5, -6, 7, -8];
+           int4 b = shufflevector(a, a, 0, 2, 4, 6);   // b is [1,3,5,7]
+           int4 c = [-2, -4, -6, -8];
+           int8 d = shufflevector!(int8, 4, 0, 5, 1, 6, 2, 7, 3)(c, b); // d is a
+ 
+  -- Template: E gcc.simd.extractelement (V, int idx)(V VAL)
+      Extracts a single scalar element from a vector VAL at a specified
+      index IDX.
+ 
+           int4 a = [0, 10, 20, 30];
+           int k = extractelement!(int4, 2)(a);    // a is 20
+ 
+  -- Template: V gcc.simd.insertelement (V, int idx)(V val, B E)
+      Inserts a scalar element E into a vector VAL at a specified index
+      IDX.
+ 
+           int4 a = [0, 10, 20, 30];
+           int4 b = insertelement!(int4, 2)(a, 50); // b is [0,10,50,30]
+ 
+  -- Template: V gcc.simd.convertvector (V, T)(T val)
+      Convert a vector VAL from one integral or floating vector type to
+      another.  The result is an integral or floating vector that has had
+      every element cast to the element type of the return type.
+ 
+      This intrinsic is the same as the GCC built-in function
+      '__builtin_convertvector'.
+ 
+           int4 a = [1, -2, 3, -4];
+           float4 b = [1.5, -2.5, 3, 7];
+           float4 c = convertvector!float4(a);    // c is [1,-2,3,-4]
+           double4 d = convertvector!double4(a);  // d is [1,-2,3,-4]
+           double4 e = convertvector!double4(b);  // e is [1.5,-2.5,3,7]
+           int4 f = convertvector!int4(b);        // f is [1,-2,3,7]
+ 
+  -- Template: V0 gcc.simd.blendvector (V0, V1, M)(V0 OP0, V1 OP1, M
+           MASK)
+ 
+      Construct a conditional merge of elements from two vectors,
+      returning a vector of the same type as the input vector(s).  The
+      MASK is an integral vector with the same width and element count as
+      the output vector.
+ 
+           int4 a = [1, 2, 3, 4];
+           int4 b = [3, 2, 1, 4];
+           auto c = blendvector(a, b, a > b);  // c is [3,2,3,4]
+           auto d = blendvector(a, b, a < b);  // d is [1,2,1,4]
+ 
+ 
+ File: gdc.info,  Node: Missing Features,  Prev: Vector Intrinsics,  Up: D Implementation
+ 
+ 2.12 Missing Features and Deviations
+ ====================================
+ 
+ Some parts of the D specification are hard or impossible to implement
+ with GCC, they should be listed here.
+ 
+ Bit Operation Intrinsics
+      The Digital Mars D compiler implements the 'core.bitop' intrinsics
+      'inp', 'inpw', 'inpl', 'outp', 'outpw', and 'outpl'.  These are not
+      recognized by GNU D. On most targets, equivalent intrinsics that
+      have the same effect would be 'core.volatile.loadVolatile' and
+      'core.volatile.storeVolatile' respectively (*note Volatile
+      Intrinsics::).
+ 
+      On x86 targets, if an 'in' or 'out' instruction is specifically
+      required, that can be achieved using assembler statements instead.
+           ubyte inp(uint port)
+           {
+               ubyte value;
+               asm { "inb %w1, %b0" : "=a" (value) : "Nd" (port); }
+               return value;
+           }
+ 
+           void outp(uint port, ushort value)
+           {
+               asm { "outb %b0, %w1" : : "a" (value), "Nd" (port); }
+           }
+ 
+ Floating-Point Intermediate Values
+ 
+      GNU D uses a software compile-time floating-point type that assists
+      in cross-compilation and support for arbitrary target 'real'
+      precisions wider than 80 bits.  Because of this, the result of
+      floating-point CTFE operations may have different results in GNU D
+      compared with other D compilers that use the host's native
+      floating-point type for storage and CTFE. In particular, GNU D
+      won't overflow or underflow when a target real features a higher
+      precision than the host.  Differences also extend to '.stringof'
+      representations of intermediate values due to formatting
+      differences with 'sprintf("%Lg")'.
+           version(GNU)
+               assert((25.5).stringof ~ (3.01).stringof == "2.55e+13.01e+0");
+           else
+               assert((25.5).stringof ~ (3.01).stringof == "25.53.01");
+ 
+ Function Calling Conventions
+      GNU D does not implement the 'extern(D)' calling convention for x86
+      as described in the D specification hosted at
+      <https://dlang.org/spec/abi.html#function_calling_conventions>.
+ 
+      Instead, there is no distinction between 'extern(C)' and
+      'extern(D)' other than name mangling.
+ 
+ ImportC Limitations
+      GNU D does not run the preprocessor automatically for any ImportC
+      sources.  Instead all C files are expected to be manually
+      preprocessed before they are imported into the compilation.
+ 
+ Inline Assembler
+      GNU D does not implement the D inline assembler for x86 and x86_64
+      as described in the D specification hosted at
+      <https://dlang.org/spec/iasm.html>.  Nor does GNU D predefine the
+      'D_InlineAsm_X86' and 'D_InlineAsm_X86_64' version identifiers to
+      indicate support.
+ 
+      The GNU D compiler uses an alternative, GCC-based syntax for inline
+      assembler (*note Inline Assembly::).
+ 
+ Interfacing to Objective-C
+      GNU D does not support interfacing with Objective-C, nor its
+      protocols, classes, subclasses, instance variables, instance
+      methods and class methods.  The 'extern(Objective-C)' linkage is
+      ignored, as are the '@optional' and '@selector' attributes.  The
+      'D_ObjectiveC' version identifier is not predefined for
+      compilations.
+ 
+ Pragma Directives
+      Pragmas that are designed to embed information into object files or
+      otherwise pass options to the linker are not supported by GNU D.
+      These include 'pragma(lib)', 'pragma(linkerDirective)', and
+      'pragma(startaddress)'.
+ 
+ SIMD Intrinsics
+      The Digital Mars D compiler implements the 'core.simd' intrinsics
+      '__simd', '__simd_ib', '__simd_sto'.  These are not recognized by
+      GNU D, nor does GNU D predefine the 'D_SIMD' version identifier to
+      indicate support.
+ 
+      On x86 targets, all intrinsics are available as functions in the
+      'gcc.builtins' module, and have predictable equivalents.
+           version (DigitalMars)
+           {
+               __simd(XMM.PSLLW, op1, op2);
+               __simd_ib(XMM.PSLLW, op1, imm8);
+           }
+           version (GNU)
+           {
+               __builtin_ia32_psllw(op1, op2);
+               __builtin_ia32_psllwi(op1, imm8);
+           }
+ 
+ TypeInfo-based va_arg
+      The Digital Mars D compiler implements a version of
+      'core.vararg.va_arg' that accepts a run-time 'TypeInfo' argument
+      for use when the static type is not known.  This function is not
+      implemented by GNU D. It is more portable to use variadic template
+      functions instead.
+ 
+ 
+ File: gdc.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: D Implementation,  Up: Top
+ 
+ GNU General Public License
+ **************************
+ 
+                         Version 3, 29 June 2007
+ 
+      Copyright (C) 2007 Free Software Foundation, Inc. <https://www.fsf.org>
+ 
+      Everyone is permitted to copy and distribute verbatim copies of this
+      license document, but changing it is not allowed.
+ 
+ Preamble
+ ========
+ 
+ The GNU General Public License is a free, copyleft license for software
+ and other kinds of works.
+ 
+    The licenses for most software and other practical works are designed
+ to take away your freedom to share and change the works.  By contrast,
+ the GNU General Public License is intended to guarantee your freedom to
+ share and change all versions of a program-to make sure it remains free
+ software for all its users.  We, the Free Software Foundation, use the
+ GNU General Public License for most of our software; it applies also to
+ any other work released this way by its authors.  You can apply it to
+ your programs, too.
+ 
+    When we speak of free software, we are referring to freedom, not
+ price.  Our General Public Licenses are designed to make sure that you
+ have the freedom to distribute copies of free software (and charge for
+ them if you wish), that you receive source code or can get it if you
+ want it, that you can change the software or use pieces of it in new
+ free programs, and that you know you can do these things.
+ 
+    To protect your rights, we need to prevent others from denying you
+ these rights or asking you to surrender the rights.  Therefore, you have
+ certain responsibilities if you distribute copies of the software, or if
+ you modify it: responsibilities to respect the freedom of others.
+ 
+    For example, if you distribute copies of such a program, whether
+ gratis or for a fee, you must pass on to the recipients the same
+ freedoms that you received.  You must make sure that they, too, receive
+ or can get the source code.  And you must show them these terms so they
+ know their rights.
+ 
+    Developers that use the GNU GPL protect your rights with two steps:
+ (1) assert copyright on the software, and (2) offer you this License
+ giving you legal permission to copy, distribute and/or modify it.
+ 
+    For the developers' and authors' protection, the GPL clearly explains
+ that there is no warranty for this free software.  For both users' and
+ authors' sake, the GPL requires that modified versions be marked as
+ changed, so that their problems will not be attributed erroneously to
+ authors of previous versions.
+ 
+    Some devices are designed to deny users access to install or run
+ modified versions of the software inside them, although the manufacturer
+ can do so.  This is fundamentally incompatible with the aim of
+ protecting users' freedom to change the software.  The systematic
+ pattern of such abuse occurs in the area of products for individuals to
+ use, which is precisely where it is most unacceptable.  Therefore, we
+ have designed this version of the GPL to prohibit the practice for those
+ products.  If such problems arise substantially in other domains, we
+ stand ready to extend this provision to those domains in future versions
+ of the GPL, as needed to protect the freedom of users.
+ 
+    Finally, every program is threatened constantly by software patents.
+ States should not allow patents to restrict development and use of
+ software on general-purpose computers, but in those that do, we wish to
+ avoid the special danger that patents applied to a free program could
+ make it effectively proprietary.  To prevent this, the GPL assures that
+ patents cannot be used to render the program non-free.
+ 
+    The precise terms and conditions for copying, distribution and
+ modification follow.
+ 
+ TERMS AND CONDITIONS
+ ====================
+ 
+   0. Definitions.
+ 
+      "This License" refers to version 3 of the GNU General Public
+      License.
+ 
+      "Copyright" also means copyright-like laws that apply to other
+      kinds of works, such as semiconductor masks.
+ 
+      "The Program" refers to any copyrightable work licensed under this
+      License.  Each licensee is addressed as "you".  "Licensees" and
+      "recipients" may be individuals or organizations.
+ 
+      To "modify" a work means to copy from or adapt all or part of the
+      work in a fashion requiring copyright permission, other than the
+      making of an exact copy.  The resulting work is called a "modified
+      version" of the earlier work or a work "based on" the earlier work.
+ 
+      A "covered work" means either the unmodified Program or a work
+      based on the Program.
+ 
+      To "propagate" a work means to do anything with it that, without
+      permission, would make you directly or secondarily liable for
+      infringement under applicable copyright law, except executing it on
+      a computer or modifying a private copy.  Propagation includes
+      copying, distribution (with or without modification), making
+      available to the public, and in some countries other activities as
+      well.
+ 
+      To "convey" a work means any kind of propagation that enables other
+      parties to make or receive copies.  Mere interaction with a user
+      through a computer network, with no transfer of a copy, is not
+      conveying.
+ 
+      An interactive user interface displays "Appropriate Legal Notices"
+      to the extent that it includes a convenient and prominently visible
+      feature that (1) displays an appropriate copyright notice, and (2)
+      tells the user that there is no warranty for the work (except to
+      the extent that warranties are provided), that licensees may convey
+      the work under this License, and how to view a copy of this
+      License.  If the interface presents a list of user commands or
+      options, such as a menu, a prominent item in the list meets this
+      criterion.
+ 
+   1. Source Code.
+ 
+      The "source code" for a work means the preferred form of the work
+      for making modifications to it.  "Object code" means any non-source
+      form of a work.
+ 
+      A "Standard Interface" means an interface that either is an
+      official standard defined by a recognized standards body, or, in
+      the case of interfaces specified for a particular programming
+      language, one that is widely used among developers working in that
+      language.
+ 
+      The "System Libraries" of an executable work include anything,
+      other than the work as a whole, that (a) is included in the normal
+      form of packaging a Major Component, but which is not part of that
+      Major Component, and (b) serves only to enable use of the work with
+      that Major Component, or to implement a Standard Interface for
+      which an implementation is available to the public in source code
+      form.  A "Major Component", in this context, means a major
+      essential component (kernel, window system, and so on) of the
+      specific operating system (if any) on which the executable work
+      runs, or a compiler used to produce the work, or an object code
+      interpreter used to run it.
+ 
+      The "Corresponding Source" for a work in object code form means all
+      the source code needed to generate, install, and (for an executable
+      work) run the object code and to modify the work, including scripts
+      to control those activities.  However, it does not include the
+      work's System Libraries, or general-purpose tools or generally
+      available free programs which are used unmodified in performing
+      those activities but which are not part of the work.  For example,
+      Corresponding Source includes interface definition files associated
+      with source files for the work, and the source code for shared
+      libraries and dynamically linked subprograms that the work is
+      specifically designed to require, such as by intimate data
+      communication or control flow between those subprograms and other
+      parts of the work.
+ 
+      The Corresponding Source need not include anything that users can
+      regenerate automatically from other parts of the Corresponding
+      Source.
+ 
+      The Corresponding Source for a work in source code form is that
+      same work.
+ 
+   2. Basic Permissions.
+ 
+      All rights granted under this License are granted for the term of
+      copyright on the Program, and are irrevocable provided the stated
+      conditions are met.  This License explicitly affirms your unlimited
+      permission to run the unmodified Program.  The output from running
+      a covered work is covered by this License only if the output, given
+      its content, constitutes a covered work.  This License acknowledges
+      your rights of fair use or other equivalent, as provided by
+      copyright law.
+ 
+      You may make, run and propagate covered works that you do not
+      convey, without conditions so long as your license otherwise
+      remains in force.  You may convey covered works to others for the
+      sole purpose of having them make modifications exclusively for you,
+      or provide you with facilities for running those works, provided
+      that you comply with the terms of this License in conveying all
+      material for which you do not control copyright.  Those thus making
+      or running the covered works for you must do so exclusively on your
+      behalf, under your direction and control, on terms that prohibit
+      them from making any copies of your copyrighted material outside
+      their relationship with you.
+ 
+      Conveying under any other circumstances is permitted solely under
+      the conditions stated below.  Sublicensing is not allowed; section
+      10 makes it unnecessary.
+ 
+   3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+ 
+      No covered work shall be deemed part of an effective technological
+      measure under any applicable law fulfilling obligations under
+      article 11 of the WIPO copyright treaty adopted on 20 December
+      1996, or similar laws prohibiting or restricting circumvention of
+      such measures.
+ 
+      When you convey a covered work, you waive any legal power to forbid
+      circumvention of technological measures to the extent such
+      circumvention is effected by exercising rights under this License
+      with respect to the covered work, and you disclaim any intention to
+      limit operation or modification of the work as a means of
+      enforcing, against the work's users, your or third parties' legal
+      rights to forbid circumvention of technological measures.
+ 
+   4. Conveying Verbatim Copies.
+ 
+      You may convey verbatim copies of the Program's source code as you
+      receive it, in any medium, provided that you conspicuously and
+      appropriately publish on each copy an appropriate copyright notice;
+      keep intact all notices stating that this License and any
+      non-permissive terms added in accord with section 7 apply to the
+      code; keep intact all notices of the absence of any warranty; and
+      give all recipients a copy of this License along with the Program.
+ 
+      You may charge any price or no price for each copy that you convey,
+      and you may offer support or warranty protection for a fee.
+ 
+   5. Conveying Modified Source Versions.
+ 
+      You may convey a work based on the Program, or the modifications to
+      produce it from the Program, in the form of source code under the
+      terms of section 4, provided that you also meet all of these
+      conditions:
+ 
+        a. The work must carry prominent notices stating that you
+           modified it, and giving a relevant date.
+ 
+        b. The work must carry prominent notices stating that it is
+           released under this License and any conditions added under
+           section 7.  This requirement modifies the requirement in
+           section 4 to "keep intact all notices".
+ 
+        c. You must license the entire work, as a whole, under this
+           License to anyone who comes into possession of a copy.  This
+           License will therefore apply, along with any applicable
+           section 7 additional terms, to the whole of the work, and all
+           its parts, regardless of how they are packaged.  This License
+           gives no permission to license the work in any other way, but
+           it does not invalidate such permission if you have separately
+           received it.
+ 
+        d. If the work has interactive user interfaces, each must display
+           Appropriate Legal Notices; however, if the Program has
+           interactive interfaces that do not display Appropriate Legal
+           Notices, your work need not make them do so.
+ 
+      A compilation of a covered work with other separate and independent
+      works, which are not by their nature extensions of the covered
+      work, and which are not combined with it such as to form a larger
+      program, in or on a volume of a storage or distribution medium, is
+      called an "aggregate" if the compilation and its resulting
+      copyright are not used to limit the access or legal rights of the
+      compilation's users beyond what the individual works permit.
+      Inclusion of a covered work in an aggregate does not cause this
+      License to apply to the other parts of the aggregate.
+ 
+   6. Conveying Non-Source Forms.
+ 
+      You may convey a covered work in object code form under the terms
+      of sections 4 and 5, provided that you also convey the
+      machine-readable Corresponding Source under the terms of this
+      License, in one of these ways:
+ 
+        a. Convey the object code in, or embodied in, a physical product
+           (including a physical distribution medium), accompanied by the
+           Corresponding Source fixed on a durable physical medium
+           customarily used for software interchange.
+ 
+        b. Convey the object code in, or embodied in, a physical product
+           (including a physical distribution medium), accompanied by a
+           written offer, valid for at least three years and valid for as
+           long as you offer spare parts or customer support for that
+           product model, to give anyone who possesses the object code
+           either (1) a copy of the Corresponding Source for all the
+           software in the product that is covered by this License, on a
+           durable physical medium customarily used for software
+           interchange, for a price no more than your reasonable cost of
+           physically performing this conveying of source, or (2) access
+           to copy the Corresponding Source from a network server at no
+           charge.
+ 
+        c. Convey individual copies of the object code with a copy of the
+           written offer to provide the Corresponding Source.  This
+           alternative is allowed only occasionally and noncommercially,
+           and only if you received the object code with such an offer,
+           in accord with subsection 6b.
+ 
+        d. Convey the object code by offering access from a designated
+           place (gratis or for a charge), and offer equivalent access to
+           the Corresponding Source in the same way through the same
+           place at no further charge.  You need not require recipients
+           to copy the Corresponding Source along with the object code.
+           If the place to copy the object code is a network server, the
+           Corresponding Source may be on a different server (operated by
+           you or a third party) that supports equivalent copying
+           facilities, provided you maintain clear directions next to the
+           object code saying where to find the Corresponding Source.
+           Regardless of what server hosts the Corresponding Source, you
+           remain obligated to ensure that it is available for as long as
+           needed to satisfy these requirements.
+ 
+        e. Convey the object code using peer-to-peer transmission,
+           provided you inform other peers where the object code and
+           Corresponding Source of the work are being offered to the
+           general public at no charge under subsection 6d.
+ 
+      A separable portion of the object code, whose source code is
+      excluded from the Corresponding Source as a System Library, need
+      not be included in conveying the object code work.
+ 
+      A "User Product" is either (1) a "consumer product", which means
+      any tangible personal property which is normally used for personal,
+      family, or household purposes, or (2) anything designed or sold for
+      incorporation into a dwelling.  In determining whether a product is
+      a consumer product, doubtful cases shall be resolved in favor of
+      coverage.  For a particular product received by a particular user,
+      "normally used" refers to a typical or common use of that class of
+      product, regardless of the status of the particular user or of the
+      way in which the particular user actually uses, or expects or is
+      expected to use, the product.  A product is a consumer product
+      regardless of whether the product has substantial commercial,
+      industrial or non-consumer uses, unless such uses represent the
+      only significant mode of use of the product.
+ 
+      "Installation Information" for a User Product means any methods,
+      procedures, authorization keys, or other information required to
+      install and execute modified versions of a covered work in that
+      User Product from a modified version of its Corresponding Source.
+      The information must suffice to ensure that the continued
+      functioning of the modified object code is in no case prevented or
+      interfered with solely because modification has been made.
+ 
+      If you convey an object code work under this section in, or with,
+      or specifically for use in, a User Product, and the conveying
+      occurs as part of a transaction in which the right of possession
+      and use of the User Product is transferred to the recipient in
+      perpetuity or for a fixed term (regardless of how the transaction
+      is characterized), the Corresponding Source conveyed under this
+      section must be accompanied by the Installation Information.  But
+      this requirement does not apply if neither you nor any third party
+      retains the ability to install modified object code on the User
+      Product (for example, the work has been installed in ROM).
+ 
+      The requirement to provide Installation Information does not
+      include a requirement to continue to provide support service,
+      warranty, or updates for a work that has been modified or installed
+      by the recipient, or for the User Product in which it has been
+      modified or installed.  Access to a network may be denied when the
+      modification itself materially and adversely affects the operation
+      of the network or violates the rules and protocols for
+      communication across the network.
+ 
+      Corresponding Source conveyed, and Installation Information
+      provided, in accord with this section must be in a format that is
+      publicly documented (and with an implementation available to the
+      public in source code form), and must require no special password
+      or key for unpacking, reading or copying.
+ 
+   7. Additional Terms.
+ 
+      "Additional permissions" are terms that supplement the terms of
+      this License by making exceptions from one or more of its
+      conditions.  Additional permissions that are applicable to the
+      entire Program shall be treated as though they were included in
+      this License, to the extent that they are valid under applicable
+      law.  If additional permissions apply only to part of the Program,
+      that part may be used separately under those permissions, but the
+      entire Program remains governed by this License without regard to
+      the additional permissions.
+ 
+      When you convey a copy of a covered work, you may at your option
+      remove any additional permissions from that copy, or from any part
+      of it.  (Additional permissions may be written to require their own
+      removal in certain cases when you modify the work.)  You may place
+      additional permissions on material, added by you to a covered work,
+      for which you have or can give appropriate copyright permission.
+ 
+      Notwithstanding any other provision of this License, for material
+      you add to a covered work, you may (if authorized by the copyright
+      holders of that material) supplement the terms of this License with
+      terms:
+ 
+        a. Disclaiming warranty or limiting liability differently from
+           the terms of sections 15 and 16 of this License; or
+ 
+        b. Requiring preservation of specified reasonable legal notices
+           or author attributions in that material or in the Appropriate
+           Legal Notices displayed by works containing it; or
+ 
+        c. Prohibiting misrepresentation of the origin of that material,
+           or requiring that modified versions of such material be marked
+           in reasonable ways as different from the original version; or
+ 
+        d. Limiting the use for publicity purposes of names of licensors
+           or authors of the material; or
+ 
+        e. Declining to grant rights under trademark law for use of some
+           trade names, trademarks, or service marks; or
+ 
+        f. Requiring indemnification of licensors and authors of that
+           material by anyone who conveys the material (or modified
+           versions of it) with contractual assumptions of liability to
+           the recipient, for any liability that these contractual
+           assumptions directly impose on those licensors and authors.
+ 
+      All other non-permissive additional terms are considered "further
+      restrictions" within the meaning of section 10.  If the Program as
+      you received it, or any part of it, contains a notice stating that
+      it is governed by this License along with a term that is a further
+      restriction, you may remove that term.  If a license document
+      contains a further restriction but permits relicensing or conveying
+      under this License, you may add to a covered work material governed
+      by the terms of that license document, provided that the further
+      restriction does not survive such relicensing or conveying.
+ 
+      If you add terms to a covered work in accord with this section, you
+      must place, in the relevant source files, a statement of the
+      additional terms that apply to those files, or a notice indicating
+      where to find the applicable terms.
+ 
+      Additional terms, permissive or non-permissive, may be stated in
+      the form of a separately written license, or stated as exceptions;
+      the above requirements apply either way.
+ 
+   8. Termination.
+ 
+      You may not propagate or modify a covered work except as expressly
+      provided under this License.  Any attempt otherwise to propagate or
+      modify it is void, and will automatically terminate your rights
+      under this License (including any patent licenses granted under the
+      third paragraph of section 11).
+ 
+      However, if you cease all violation of this License, then your
+      license from a particular copyright holder is reinstated (a)
+      provisionally, unless and until the copyright holder explicitly and
+      finally terminates your license, and (b) permanently, if the
+      copyright holder fails to notify you of the violation by some
+      reasonable means prior to 60 days after the cessation.
+ 
+      Moreover, your license from a particular copyright holder is
+      reinstated permanently if the copyright holder notifies you of the
+      violation by some reasonable means, this is the first time you have
+      received notice of violation of this License (for any work) from
+      that copyright holder, and you cure the violation prior to 30 days
+      after your receipt of the notice.
+ 
+      Termination of your rights under this section does not terminate
+      the licenses of parties who have received copies or rights from you
+      under this License.  If your rights have been terminated and not
+      permanently reinstated, you do not qualify to receive new licenses
+      for the same material under section 10.
+ 
+   9. Acceptance Not Required for Having Copies.
+ 
+      You are not required to accept this License in order to receive or
+      run a copy of the Program.  Ancillary propagation of a covered work
+      occurring solely as a consequence of using peer-to-peer
+      transmission to receive a copy likewise does not require
+      acceptance.  However, nothing other than this License grants you
+      permission to propagate or modify any covered work.  These actions
+      infringe copyright if you do not accept this License.  Therefore,
+      by modifying or propagating a covered work, you indicate your
+      acceptance of this License to do so.
+ 
+   10. Automatic Licensing of Downstream Recipients.
+ 
+      Each time you convey a covered work, the recipient automatically
+      receives a license from the original licensors, to run, modify and
+      propagate that work, subject to this License.  You are not
+      responsible for enforcing compliance by third parties with this
+      License.
+ 
+      An "entity transaction" is a transaction transferring control of an
+      organization, or substantially all assets of one, or subdividing an
+      organization, or merging organizations.  If propagation of a
+      covered work results from an entity transaction, each party to that
+      transaction who receives a copy of the work also receives whatever
+      licenses to the work the party's predecessor in interest had or
+      could give under the previous paragraph, plus a right to possession
+      of the Corresponding Source of the work from the predecessor in
+      interest, if the predecessor has it or can get it with reasonable
+      efforts.
+ 
+      You may not impose any further restrictions on the exercise of the
+      rights granted or affirmed under this License.  For example, you
+      may not impose a license fee, royalty, or other charge for exercise
+      of rights granted under this License, and you may not initiate
+      litigation (including a cross-claim or counterclaim in a lawsuit)
+      alleging that any patent claim is infringed by making, using,
+      selling, offering for sale, or importing the Program or any portion
+      of it.
+ 
+   11. Patents.
+ 
+      A "contributor" is a copyright holder who authorizes use under this
+      License of the Program or a work on which the Program is based.
+      The work thus licensed is called the contributor's "contributor
+      version".
+ 
+      A contributor's "essential patent claims" are all patent claims
+      owned or controlled by the contributor, whether already acquired or
+      hereafter acquired, that would be infringed by some manner,
+      permitted by this License, of making, using, or selling its
+      contributor version, but do not include claims that would be
+      infringed only as a consequence of further modification of the
+      contributor version.  For purposes of this definition, "control"
+      includes the right to grant patent sublicenses in a manner
+      consistent with the requirements of this License.
+ 
+      Each contributor grants you a non-exclusive, worldwide,
+      royalty-free patent license under the contributor's essential
+      patent claims, to make, use, sell, offer for sale, import and
+      otherwise run, modify and propagate the contents of its contributor
+      version.
+ 
+      In the following three paragraphs, a "patent license" is any
+      express agreement or commitment, however denominated, not to
+      enforce a patent (such as an express permission to practice a
+      patent or covenant not to sue for patent infringement).  To "grant"
+      such a patent license to a party means to make such an agreement or
+      commitment not to enforce a patent against the party.
+ 
+      If you convey a covered work, knowingly relying on a patent
+      license, and the Corresponding Source of the work is not available
+      for anyone to copy, free of charge and under the terms of this
+      License, through a publicly available network server or other
+      readily accessible means, then you must either (1) cause the
+      Corresponding Source to be so available, or (2) arrange to deprive
+      yourself of the benefit of the patent license for this particular
+      work, or (3) arrange, in a manner consistent with the requirements
+      of this License, to extend the patent license to downstream
+      recipients.  "Knowingly relying" means you have actual knowledge
+      that, but for the patent license, your conveying the covered work
+      in a country, or your recipient's use of the covered work in a
+      country, would infringe one or more identifiable patents in that
+      country that you have reason to believe are valid.
+ 
+      If, pursuant to or in connection with a single transaction or
+      arrangement, you convey, or propagate by procuring conveyance of, a
+      covered work, and grant a patent license to some of the parties
+      receiving the covered work authorizing them to use, propagate,
+      modify or convey a specific copy of the covered work, then the
+      patent license you grant is automatically extended to all
+      recipients of the covered work and works based on it.
+ 
+      A patent license is "discriminatory" if it does not include within
+      the scope of its coverage, prohibits the exercise of, or is
+      conditioned on the non-exercise of one or more of the rights that
+      are specifically granted under this License.  You may not convey a
+      covered work if you are a party to an arrangement with a third
+      party that is in the business of distributing software, under which
+      you make payment to the third party based on the extent of your
+      activity of conveying the work, and under which the third party
+      grants, to any of the parties who would receive the covered work
+      from you, a discriminatory patent license (a) in connection with
+      copies of the covered work conveyed by you (or copies made from
+      those copies), or (b) primarily for and in connection with specific
+      products or compilations that contain the covered work, unless you
+      entered into that arrangement, or that patent license was granted,
+      prior to 28 March 2007.
+ 
+      Nothing in this License shall be construed as excluding or limiting
+      any implied license or other defenses to infringement that may
+      otherwise be available to you under applicable patent law.
+ 
+   12. No Surrender of Others' Freedom.
+ 
+      If conditions are imposed on you (whether by court order, agreement
+      or otherwise) that contradict the conditions of this License, they
+      do not excuse you from the conditions of this License.  If you
+      cannot convey a covered work so as to satisfy simultaneously your
+      obligations under this License and any other pertinent obligations,
+      then as a consequence you may not convey it at all.  For example,
+      if you agree to terms that obligate you to collect a royalty for
+      further conveying from those to whom you convey the Program, the
+      only way you could satisfy both those terms and this License would
+      be to refrain entirely from conveying the Program.
+ 
+   13. Use with the GNU Affero General Public License.
+ 
+      Notwithstanding any other provision of this License, you have
+      permission to link or combine any covered work with a work licensed
+      under version 3 of the GNU Affero General Public License into a
+      single combined work, and to convey the resulting work.  The terms
+      of this License will continue to apply to the part which is the
+      covered work, but the special requirements of the GNU Affero
+      General Public License, section 13, concerning interaction through
+      a network will apply to the combination as such.
+ 
+   14. Revised Versions of this License.
+ 
+      The Free Software Foundation may publish revised and/or new
+      versions of the GNU General Public License from time to time.  Such
+      new versions will be similar in spirit to the present version, but
+      may differ in detail to address new problems or concerns.
+ 
+      Each version is given a distinguishing version number.  If the
+      Program specifies that a certain numbered version of the GNU
+      General Public License "or any later version" applies to it, you
+      have the option of following the terms and conditions either of
+      that numbered version or of any later version published by the Free
+      Software Foundation.  If the Program does not specify a version
+      number of the GNU General Public License, you may choose any
+      version ever published by the Free Software Foundation.
+ 
+      If the Program specifies that a proxy can decide which future
+      versions of the GNU General Public License can be used, that
+      proxy's public statement of acceptance of a version permanently
+      authorizes you to choose that version for the Program.
+ 
+      Later license versions may give you additional or different
+      permissions.  However, no additional obligations are imposed on any
+      author or copyright holder as a result of your choosing to follow a
+      later version.
+ 
+   15. Disclaimer of Warranty.
+ 
+      THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+      APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
+      COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
+      WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
+      INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+      MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE
+      RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
+      SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
+      NECESSARY SERVICING, REPAIR OR CORRECTION.
+ 
+   16. Limitation of Liability.
+ 
+      IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+      WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
+      AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR
+      DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+      CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
+      THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
+      BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+      PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+      PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
+      THE POSSIBILITY OF SUCH DAMAGES.
+ 
+   17. Interpretation of Sections 15 and 16.
+ 
+      If the disclaimer of warranty and limitation of liability provided
+      above cannot be given local legal effect according to their terms,
+      reviewing courts shall apply local law that most closely
+      approximates an absolute waiver of all civil liability in
+      connection with the Program, unless a warranty or assumption of
+      liability accompanies a copy of the Program in return for a fee.
+ 
+ END OF TERMS AND CONDITIONS
+ ===========================
+ 
+ How to Apply These Terms to Your New Programs
+ =============================================
+ 
+ If you develop a new program, and you want it to be of the greatest
+ possible use to the public, the best way to achieve this is to make it
+ free software which everyone can redistribute and change under these
+ terms.
+ 
+    To do so, attach the following notices to the program.  It is safest
+ to attach them to the start of each source file to most effectively
+ state the exclusion of warranty; and each file should have at least the
+ "copyright" line and a pointer to where the full notice is found.
+ 
+      ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
+      Copyright (C) YEAR NAME OF AUTHOR
+ 
+      This program 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 of the License, or (at
+      your option) any later version.
+ 
+      This program 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 this program.  If not, see <https://www.gnu.org/licenses/>.
+ 
+    Also add information on how to contact you by electronic and paper
+ mail.
+ 
+    If the program does terminal interaction, make it output a short
+ notice like this when it starts in an interactive mode:
+ 
+      PROGRAM Copyright (C) YEAR NAME OF AUTHOR
+      This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'.
+      This is free software, and you are welcome to redistribute it
+      under certain conditions; type 'show c' for details.
+ 
+    The hypothetical commands 'show w' and 'show c' should show the
+ appropriate parts of the General Public License.  Of course, your
+ program's commands might be different; for a GUI interface, you would
+ use an "about box".
+ 
+    You should also get your employer (if you work as a programmer) or
+ school, if any, to sign a "copyright disclaimer" for the program, if
+ necessary.  For more information on this, and how to apply and follow
+ the GNU GPL, see <https://www.gnu.org/licenses/>.
+ 
+    The GNU General Public License does not permit incorporating your
+ program into proprietary programs.  If your program is a subroutine
+ library, you may consider it more useful to permit linking proprietary
+ applications with the library.  If this is what you want to do, use the
+ GNU Lesser General Public License instead of this License.  But first,
+ please read <https://www.gnu.org/licenses/why-not-lgpl.html>.
+ 
+ 
+ File: gdc.info,  Node: GNU Free Documentation License,  Next: Option Index,  Prev: Copying,  Up: Top
+ 
+ GNU Free Documentation License
+ ******************************
+ 
+                      Version 1.3, 3 November 2008
+ 
+      Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+      <https://www.fsf.org>
+ 
+      Everyone is permitted to copy and distribute verbatim copies
+      of this license document, but changing it is not allowed.
+ 
+   0. PREAMBLE
+ 
+      The purpose of this License is to make a manual, textbook, or other
+      functional and useful document "free" in the sense of freedom: to
+      assure everyone the effective freedom to copy and redistribute it,
+      with or without modifying it, either commercially or
+      noncommercially.  Secondarily, this License preserves for the
+      author and publisher a way to get credit for their work, while not
+      being considered responsible for modifications made by others.
+ 
+      This License is a kind of "copyleft", which means that derivative
+      works of the document must themselves be free in the same sense.
+      It complements the GNU General Public License, which is a copyleft
+      license designed for free software.
+ 
+      We have designed this License in order to use it for manuals for
+      free software, because free software needs free documentation: a
+      free program should come with manuals providing the same freedoms
+      that the software does.  But this License is not limited to
+      software manuals; it can be used for any textual work, regardless
+      of subject matter or whether it is published as a printed book.  We
+      recommend this License principally for works whose purpose is
+      instruction or reference.
+ 
+   1. APPLICABILITY AND DEFINITIONS
+ 
+      This License applies to any manual or other work, in any medium,
+      that contains a notice placed by the copyright holder saying it can
+      be distributed under the terms of this License.  Such a notice
+      grants a world-wide, royalty-free license, unlimited in duration,
+      to use that work under the conditions stated herein.  The
+      "Document", below, refers to any such manual or work.  Any member
+      of the public is a licensee, and is addressed as "you".  You accept
+      the license if you copy, modify or distribute the work in a way
+      requiring permission under copyright law.
+ 
+      A "Modified Version" of the Document means any work containing the
+      Document or a portion of it, either copied verbatim, or with
+      modifications and/or translated into another language.
+ 
+      A "Secondary Section" is a named appendix or a front-matter section
+      of the Document that deals exclusively with the relationship of the
+      publishers or authors of the Document to the Document's overall
+      subject (or to related matters) and contains nothing that could
+      fall directly within that overall subject.  (Thus, if the Document
+      is in part a textbook of mathematics, a Secondary Section may not
+      explain any mathematics.)  The relationship could be a matter of
+      historical connection with the subject or with related matters, or
+      of legal, commercial, philosophical, ethical or political position
+      regarding them.
+ 
+      The "Invariant Sections" are certain Secondary Sections whose
+      titles are designated, as being those of Invariant Sections, in the
+      notice that says that the Document is released under this License.
+      If a section does not fit the above definition of Secondary then it
+      is not allowed to be designated as Invariant.  The Document may
+      contain zero Invariant Sections.  If the Document does not identify
+      any Invariant Sections then there are none.
+ 
+      The "Cover Texts" are certain short passages of text that are
+      listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+      that says that the Document is released under this License.  A
+      Front-Cover Text may be at most 5 words, and a Back-Cover Text may
+      be at most 25 words.
+ 
+      A "Transparent" copy of the Document means a machine-readable copy,
+      represented in a format whose specification is available to the
+      general public, that is suitable for revising the document
+      straightforwardly with generic text editors or (for images composed
+      of pixels) generic paint programs or (for drawings) some widely
+      available drawing editor, and that is suitable for input to text
+      formatters or for automatic translation to a variety of formats
+      suitable for input to text formatters.  A copy made in an otherwise
+      Transparent file format whose markup, or absence of markup, has
+      been arranged to thwart or discourage subsequent modification by
+      readers is not Transparent.  An image format is not Transparent if
+      used for any substantial amount of text.  A copy that is not
+      "Transparent" is called "Opaque".
+ 
+      Examples of suitable formats for Transparent copies include plain
+      ASCII without markup, Texinfo input format, LaTeX input format,
+      SGML or XML using a publicly available DTD, and standard-conforming
+      simple HTML, PostScript or PDF designed for human modification.
+      Examples of transparent image formats include PNG, XCF and JPG.
+      Opaque formats include proprietary formats that can be read and
+      edited only by proprietary word processors, SGML or XML for which
+      the DTD and/or processing tools are not generally available, and
+      the machine-generated HTML, PostScript or PDF produced by some word
+      processors for output purposes only.
+ 
+      The "Title Page" means, for a printed book, the title page itself,
+      plus such following pages as are needed to hold, legibly, the
+      material this License requires to appear in the title page.  For
+      works in formats which do not have any title page as such, "Title
+      Page" means the text near the most prominent appearance of the
+      work's title, preceding the beginning of the body of the text.
+ 
+      The "publisher" means any person or entity that distributes copies
+      of the Document to the public.
+ 
+      A section "Entitled XYZ" means a named subunit of the Document
+      whose title either is precisely XYZ or contains XYZ in parentheses
+      following text that translates XYZ in another language.  (Here XYZ
+      stands for a specific section name mentioned below, such as
+      "Acknowledgements", "Dedications", "Endorsements", or "History".)
+      To "Preserve the Title" of such a section when you modify the
+      Document means that it remains a section "Entitled XYZ" according
+      to this definition.
+ 
+      The Document may include Warranty Disclaimers next to the notice
+      which states that this License applies to the Document.  These
+      Warranty Disclaimers are considered to be included by reference in
+      this License, but only as regards disclaiming warranties: any other
+      implication that these Warranty Disclaimers may have is void and
+      has no effect on the meaning of this License.
+ 
+   2. VERBATIM COPYING
+ 
+      You may copy and distribute the Document in any medium, either
+      commercially or noncommercially, provided that this License, the
+      copyright notices, and the license notice saying this License
+      applies to the Document are reproduced in all copies, and that you
+      add no other conditions whatsoever to those of this License.  You
+      may not use technical measures to obstruct or control the reading
+      or further copying of the copies you make or distribute.  However,
+      you may accept compensation in exchange for copies.  If you
+      distribute a large enough number of copies you must also follow the
+      conditions in section 3.
+ 
+      You may also lend copies, under the same conditions stated above,
+      and you may publicly display copies.
+ 
+   3. COPYING IN QUANTITY
+ 
+      If you publish printed copies (or copies in media that commonly
+      have printed covers) of the Document, numbering more than 100, and
+      the Document's license notice requires Cover Texts, you must
+      enclose the copies in covers that carry, clearly and legibly, all
+      these Cover Texts: Front-Cover Texts on the front cover, and
+      Back-Cover Texts on the back cover.  Both covers must also clearly
+      and legibly identify you as the publisher of these copies.  The
+      front cover must present the full title with all words of the title
+      equally prominent and visible.  You may add other material on the
+      covers in addition.  Copying with changes limited to the covers, as
+      long as they preserve the title of the Document and satisfy these
+      conditions, can be treated as verbatim copying in other respects.
+ 
+      If the required texts for either cover are too voluminous to fit
+      legibly, you should put the first ones listed (as many as fit
+      reasonably) on the actual cover, and continue the rest onto
+      adjacent pages.
+ 
+      If you publish or distribute Opaque copies of the Document
+      numbering more than 100, you must either include a machine-readable
+      Transparent copy along with each Opaque copy, or state in or with
+      each Opaque copy a computer-network location from which the general
+      network-using public has access to download using public-standard
+      network protocols a complete Transparent copy of the Document, free
+      of added material.  If you use the latter option, you must take
+      reasonably prudent steps, when you begin distribution of Opaque
+      copies in quantity, to ensure that this Transparent copy will
+      remain thus accessible at the stated location until at least one
+      year after the last time you distribute an Opaque copy (directly or
+      through your agents or retailers) of that edition to the public.
+ 
+      It is requested, but not required, that you contact the authors of
+      the Document well before redistributing any large number of copies,
+      to give them a chance to provide you with an updated version of the
+      Document.
+ 
+   4. MODIFICATIONS
+ 
+      You may copy and distribute a Modified Version of the Document
+      under the conditions of sections 2 and 3 above, provided that you
+      release the Modified Version under precisely this License, with the
+      Modified Version filling the role of the Document, thus licensing
+      distribution and modification of the Modified Version to whoever
+      possesses a copy of it.  In addition, you must do these things in
+      the Modified Version:
+ 
+        A. Use in the Title Page (and on the covers, if any) a title
+           distinct from that of the Document, and from those of previous
+           versions (which should, if there were any, be listed in the
+           History section of the Document).  You may use the same title
+           as a previous version if the original publisher of that
+           version gives permission.
+ 
+        B. List on the Title Page, as authors, one or more persons or
+           entities responsible for authorship of the modifications in
+           the Modified Version, together with at least five of the
+           principal authors of the Document (all of its principal
+           authors, if it has fewer than five), unless they release you
+           from this requirement.
+ 
+        C. State on the Title page the name of the publisher of the
+           Modified Version, as the publisher.
+ 
+        D. Preserve all the copyright notices of the Document.
+ 
+        E. Add an appropriate copyright notice for your modifications
+           adjacent to the other copyright notices.
+ 
+        F. Include, immediately after the copyright notices, a license
+           notice giving the public permission to use the Modified
+           Version under the terms of this License, in the form shown in
+           the Addendum below.
+ 
+        G. Preserve in that license notice the full lists of Invariant
+           Sections and required Cover Texts given in the Document's
+           license notice.
+ 
+        H. Include an unaltered copy of this License.
+ 
+        I. Preserve the section Entitled "History", Preserve its Title,
+           and add to it an item stating at least the title, year, new
+           authors, and publisher of the Modified Version as given on the
+           Title Page.  If there is no section Entitled "History" in the
+           Document, create one stating the title, year, authors, and
+           publisher of the Document as given on its Title Page, then add
+           an item describing the Modified Version as stated in the
+           previous sentence.
+ 
+        J. Preserve the network location, if any, given in the Document
+           for public access to a Transparent copy of the Document, and
+           likewise the network locations given in the Document for
+           previous versions it was based on.  These may be placed in the
+           "History" section.  You may omit a network location for a work
+           that was published at least four years before the Document
+           itself, or if the original publisher of the version it refers
+           to gives permission.
+ 
+        K. For any section Entitled "Acknowledgements" or "Dedications",
+           Preserve the Title of the section, and preserve in the section
+           all the substance and tone of each of the contributor
+           acknowledgements and/or dedications given therein.
+ 
+        L. Preserve all the Invariant Sections of the Document, unaltered
+           in their text and in their titles.  Section numbers or the
+           equivalent are not considered part of the section titles.
+ 
+        M. Delete any section Entitled "Endorsements".  Such a section
+           may not be included in the Modified Version.
+ 
+        N. Do not retitle any existing section to be Entitled
+           "Endorsements" or to conflict in title with any Invariant
+           Section.
+ 
+        O. Preserve any Warranty Disclaimers.
+ 
+      If the Modified Version includes new front-matter sections or
+      appendices that qualify as Secondary Sections and contain no
+      material copied from the Document, you may at your option designate
+      some or all of these sections as invariant.  To do this, add their
+      titles to the list of Invariant Sections in the Modified Version's
+      license notice.  These titles must be distinct from any other
+      section titles.
+ 
+      You may add a section Entitled "Endorsements", provided it contains
+      nothing but endorsements of your Modified Version by various
+      parties--for example, statements of peer review or that the text
+      has been approved by an organization as the authoritative
+      definition of a standard.
+ 
+      You may add a passage of up to five words as a Front-Cover Text,
+      and a passage of up to 25 words as a Back-Cover Text, to the end of
+      the list of Cover Texts in the Modified Version.  Only one passage
+      of Front-Cover Text and one of Back-Cover Text may be added by (or
+      through arrangements made by) any one entity.  If the Document
+      already includes a cover text for the same cover, previously added
+      by you or by arrangement made by the same entity you are acting on
+      behalf of, you may not add another; but you may replace the old
+      one, on explicit permission from the previous publisher that added
+      the old one.
+ 
+      The author(s) and publisher(s) of the Document do not by this
+      License give permission to use their names for publicity for or to
+      assert or imply endorsement of any Modified Version.
+ 
+   5. COMBINING DOCUMENTS
+ 
+      You may combine the Document with other documents released under
+      this License, under the terms defined in section 4 above for
+      modified versions, provided that you include in the combination all
+      of the Invariant Sections of all of the original documents,
+      unmodified, and list them all as Invariant Sections of your
+      combined work in its license notice, and that you preserve all
+      their Warranty Disclaimers.
+ 
+      The combined work need only contain one copy of this License, and
+      multiple identical Invariant Sections may be replaced with a single
+      copy.  If there are multiple Invariant Sections with the same name
+      but different contents, make the title of each such section unique
+      by adding at the end of it, in parentheses, the name of the
+      original author or publisher of that section if known, or else a
+      unique number.  Make the same adjustment to the section titles in
+      the list of Invariant Sections in the license notice of the
+      combined work.
+ 
+      In the combination, you must combine any sections Entitled
+      "History" in the various original documents, forming one section
+      Entitled "History"; likewise combine any sections Entitled
+      "Acknowledgements", and any sections Entitled "Dedications".  You
+      must delete all sections Entitled "Endorsements."
+ 
+   6. COLLECTIONS OF DOCUMENTS
+ 
+      You may make a collection consisting of the Document and other
+      documents released under this License, and replace the individual
+      copies of this License in the various documents with a single copy
+      that is included in the collection, provided that you follow the
+      rules of this License for verbatim copying of each of the documents
+      in all other respects.
+ 
+      You may extract a single document from such a collection, and
+      distribute it individually under this License, provided you insert
+      a copy of this License into the extracted document, and follow this
+      License in all other respects regarding verbatim copying of that
+      document.
+ 
+   7. AGGREGATION WITH INDEPENDENT WORKS
+ 
+      A compilation of the Document or its derivatives with other
+      separate and independent documents or works, in or on a volume of a
+      storage or distribution medium, is called an "aggregate" if the
+      copyright resulting from the compilation is not used to limit the
+      legal rights of the compilation's users beyond what the individual
+      works permit.  When the Document is included in an aggregate, this
+      License does not apply to the other works in the aggregate which
+      are not themselves derivative works of the Document.
+ 
+      If the Cover Text requirement of section 3 is applicable to these
+      copies of the Document, then if the Document is less than one half
+      of the entire aggregate, the Document's Cover Texts may be placed
+      on covers that bracket the Document within the aggregate, or the
+      electronic equivalent of covers if the Document is in electronic
+      form.  Otherwise they must appear on printed covers that bracket
+      the whole aggregate.
+ 
+   8. TRANSLATION
+ 
+      Translation is considered a kind of modification, so you may
+      distribute translations of the Document under the terms of section
+      4.  Replacing Invariant Sections with translations requires special
+      permission from their copyright holders, but you may include
+      translations of some or all Invariant Sections in addition to the
+      original versions of these Invariant Sections.  You may include a
+      translation of this License, and all the license notices in the
+      Document, and any Warranty Disclaimers, provided that you also
+      include the original English version of this License and the
+      original versions of those notices and disclaimers.  In case of a
+      disagreement between the translation and the original version of
+      this License or a notice or disclaimer, the original version will
+      prevail.
+ 
+      If a section in the Document is Entitled "Acknowledgements",
+      "Dedications", or "History", the requirement (section 4) to
+      Preserve its Title (section 1) will typically require changing the
+      actual title.
+ 
+   9. TERMINATION
+ 
+      You may not copy, modify, sublicense, or distribute the Document
+      except as expressly provided under this License.  Any attempt
+      otherwise to copy, modify, sublicense, or distribute it is void,
+      and will automatically terminate your rights under this License.
+ 
+      However, if you cease all violation of this License, then your
+      license from a particular copyright holder is reinstated (a)
+      provisionally, unless and until the copyright holder explicitly and
+      finally terminates your license, and (b) permanently, if the
+      copyright holder fails to notify you of the violation by some
+      reasonable means prior to 60 days after the cessation.
+ 
+      Moreover, your license from a particular copyright holder is
+      reinstated permanently if the copyright holder notifies you of the
+      violation by some reasonable means, this is the first time you have
+      received notice of violation of this License (for any work) from
+      that copyright holder, and you cure the violation prior to 30 days
+      after your receipt of the notice.
+ 
+      Termination of your rights under this section does not terminate
+      the licenses of parties who have received copies or rights from you
+      under this License.  If your rights have been terminated and not
+      permanently reinstated, receipt of a copy of some or all of the
+      same material does not give you any rights to use it.
+ 
+   10. FUTURE REVISIONS OF THIS LICENSE
+ 
+      The Free Software Foundation may publish new, revised versions of
+      the GNU Free Documentation License from time to time.  Such new
+      versions will be similar in spirit to the present version, but may
+      differ in detail to address new problems or concerns.  See
+      <https://www.gnu.org/copyleft/>.
+ 
+      Each version of the License is given a distinguishing version
+      number.  If the Document specifies that a particular numbered
+      version of this License "or any later version" applies to it, you
+      have the option of following the terms and conditions either of
+      that specified version or of any later version that has been
+      published (not as a draft) by the Free Software Foundation.  If the
+      Document does not specify a version number of this License, you may
+      choose any version ever published (not as a draft) by the Free
+      Software Foundation.  If the Document specifies that a proxy can
+      decide which future versions of this License can be used, that
+      proxy's public statement of acceptance of a version permanently
+      authorizes you to choose that version for the Document.
+ 
+   11. RELICENSING
+ 
+      "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
+      World Wide Web server that publishes copyrightable works and also
+      provides prominent facilities for anybody to edit those works.  A
+      public wiki that anybody can edit is an example of such a server.
+      A "Massive Multiauthor Collaboration" (or "MMC") contained in the
+      site means any set of copyrightable works thus published on the MMC
+      site.
+ 
+      "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
+      license published by Creative Commons Corporation, a not-for-profit
+      corporation with a principal place of business in San Francisco,
+      California, as well as future copyleft versions of that license
+      published by that same organization.
+ 
+      "Incorporate" means to publish or republish a Document, in whole or
+      in part, as part of another Document.
+ 
+      An MMC is "eligible for relicensing" if it is licensed under this
+      License, and if all works that were first published under this
+      License somewhere other than this MMC, and subsequently
+      incorporated in whole or in part into the MMC, (1) had no cover
+      texts or invariant sections, and (2) were thus incorporated prior
+      to November 1, 2008.
+ 
+      The operator of an MMC Site may republish an MMC contained in the
+      site under CC-BY-SA on the same site at any time before August 1,
+      2009, provided the MMC is eligible for relicensing.
+ 
+ ADDENDUM: How to use this License for your documents
+ ====================================================
+ 
+ To use this License in a document you have written, include a copy of
+ the License in the document and put the following copyright and license
+ notices just after the title page:
+ 
+        Copyright (C)  YEAR  YOUR NAME.
+        Permission is granted to copy, distribute and/or modify this document
+        under the terms of the GNU Free Documentation License, Version 1.3
+        or any later version published by the Free Software Foundation;
+        with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+        Texts.  A copy of the license is included in the section entitled ``GNU
+        Free Documentation License''.
+ 
+    If you have Invariant Sections, Front-Cover Texts and Back-Cover
+ Texts, replace the "with...Texts."  line with this:
+ 
+          with the Invariant Sections being LIST THEIR TITLES, with
+          the Front-Cover Texts being LIST, and with the Back-Cover Texts
+          being LIST.
+ 
+    If you have Invariant Sections without Cover Texts, or some other
+ combination of the three, merge those two alternatives to suit the
+ situation.
+ 
+    If your document contains nontrivial examples of program code, we
+ recommend releasing these examples in parallel under your choice of free
+ software license, such as the GNU General Public License, to permit
+ their use in free software.
+ 
+ 
+ File: gdc.info,  Node: Option Index,  Next: Keyword Index,  Prev: GNU Free Documentation License,  Up: Top
+ 
+ Option Index
+ ************
+ 
+ 'gdc''s command line options are indexed here without any initial '-' or
+ '--'.  Where an option has both positive and negative forms (such as
+ '-fOPTION' and '-fno-OPTION'), relevant entries in the manual are
+ indexed under the most appropriate form; it may sometimes be useful to
+ look up both forms.
+ 
+ [index]
+ * Menu:
+ 
+ * B:                                     Directory Options.   (line  23)
+ * debuglib=:                             Linking.             (line  15)
+ * defaultlib=:                           Linking.             (line  10)
+ * fall-instantiations:                   Runtime Options.     (line   9)
+ * fassert:                               Runtime Options.     (line  16)
+ * fbounds-check:                         Runtime Options.     (line  19)
+ * fbounds-check=:                        Runtime Options.     (line  27)
+ * fbuiltin:                              Runtime Options.     (line  39)
+ * fcheckaction:                          Runtime Options.     (line  44)
+ * fdebug:                                Runtime Options.     (line  56)
+ * fdoc:                                  Code Generation.     (line  76)
+ * fdoc-dir:                              Code Generation.     (line  81)
+ * fdoc-file:                             Code Generation.     (line  86)
+ * fdoc-inc:                              Code Generation.     (line  91)
+ * fdruntime:                             Runtime Options.     (line  66)
+ * fdump-d-original:                      Developer Options.   (line   9)
+ * fextern-std:                           Runtime Options.     (line  74)
+ * fignore-unknown-pragmas:               Warnings.            (line  70)
+ * finvariants:                           Runtime Options.     (line  91)
+ * fmain:                                 Runtime Options.     (line  94)
+ * fmax-errors:                           Warnings.            (line  73)
+ * fmodule-file:                          Directory Options.   (line  27)
+ * fmoduleinfo:                           Runtime Options.     (line 101)
+ * fno-all-instantiations:                Runtime Options.     (line   9)
+ * fno-assert:                            Runtime Options.     (line  16)
+ * fno-bounds-check:                      Runtime Options.     (line  19)
+ * fno-builtin:                           Runtime Options.     (line  39)
+ * fno-builtin <1>:                       Other Builtins.      (line   6)
+ * fno-debug:                             Runtime Options.     (line  56)
+ * fno-druntime:                          Runtime Options.     (line  66)
+ * fno-ignore-unknown-pragmas:            Warnings.            (line  70)
+ * fno-invariants:                        Runtime Options.     (line  91)
+ * fno-moduleinfo:                        Runtime Options.     (line 101)
+ * fno-postconditions:                    Runtime Options.     (line 114)
+ * fno-preconditions:                     Runtime Options.     (line 117)
+ * fno-release:                           Runtime Options.     (line 170)
+ * fno-rtti:                              Runtime Options.     (line 202)
+ * fno-switch-errors:                     Runtime Options.     (line 207)
+ * fno-syntax-only:                       Warnings.            (line  79)
+ * fno-unittest:                          Runtime Options.     (line 213)
+ * fno-weak-templates:                    Runtime Options.     (line 224)
+ * fonly:                                 Runtime Options.     (line 109)
+ * fpostconditions:                       Runtime Options.     (line 114)
+ * fpreconditions:                        Runtime Options.     (line 117)
+ * fpreview:                              Runtime Options.     (line 120)
+ * frelease:                              Runtime Options.     (line 170)
+ * frevert:                               Runtime Options.     (line 181)
+ * frtti:                                 Runtime Options.     (line 202)
+ * fsave-mixins:                          Code Generation.     (line 104)
+ * fswitch-errors:                        Runtime Options.     (line 207)
+ * fsyntax-only:                          Warnings.            (line  79)
+ * ftransition:                           Warnings.            (line  85)
+ * funittest:                             Runtime Options.     (line 213)
+ * fversion:                              Runtime Options.     (line 217)
+ * fweak-templates:                       Runtime Options.     (line 224)
+ * H:                                     Code Generation.     (line   9)
+ * Hd:                                    Code Generation.     (line  15)
+ * Hf:                                    Code Generation.     (line  20)
+ * I:                                     Directory Options.   (line   9)
+ * imultilib:                             Directory Options.   (line  46)
+ * iprefix:                               Directory Options.   (line  50)
+ * J:                                     Directory Options.   (line  14)
+ * L:                                     Directory Options.   (line  20)
+ * M:                                     Code Generation.     (line  25)
+ * MD:                                    Code Generation.     (line  58)
+ * MF:                                    Code Generation.     (line  35)
+ * MG:                                    Code Generation.     (line  40)
+ * MM:                                    Code Generation.     (line  31)
+ * MMD:                                   Code Generation.     (line  63)
+ * MP:                                    Code Generation.     (line  44)
+ * MQ:                                    Code Generation.     (line  54)
+ * MT:                                    Code Generation.     (line  48)
+ * nophoboslib:                           Linking.             (line  21)
+ * nostdinc:                              Directory Options.   (line  55)
+ * shared-libphobos:                      Linking.             (line  27)
+ * static-libphobos:                      Linking.             (line  33)
+ * v:                                     Developer Options.   (line  13)
+ * Wall:                                  Warnings.            (line  11)
+ * Walloca:                               Warnings.            (line  16)
+ * Walloca-larger-than:                   Warnings.            (line  19)
+ * Wbuiltin-declaration-mismatch:         Warnings.            (line  25)
+ * Wcast-result:                          Warnings.            (line  29)
+ * Wdeprecated:                           Warnings.            (line  34)
+ * Werror:                                Warnings.            (line  38)
+ * Wextra:                                Warnings.            (line  41)
+ * Wmismatched-special-enum:              Warnings.            (line  50)
+ * Wno-all:                               Warnings.            (line  11)
+ * Wno-alloca-larger-than:                Warnings.            (line  19)
+ * Wno-builtin-declaration-mismatch:      Warnings.            (line  25)
+ * Wno-cast-result:                       Warnings.            (line  29)
+ * Wno-deprecated:                        Warnings.            (line  34)
+ * Wno-error:                             Warnings.            (line  38)
+ * Wno-extra:                             Warnings.            (line  41)
+ * Wno-mismatched-special-enum:           Warnings.            (line  50)
+ * Wno-speculative:                       Warnings.            (line  54)
+ * Wno-unknown-pragmas:                   Warnings.            (line  60)
+ * Wno-varargs:                           Warnings.            (line  66)
+ * Wspeculative:                          Warnings.            (line  54)
+ * Wunknown-pragmas:                      Warnings.            (line  60)
+ * Wvarargs:                              Warnings.            (line  66)
+ * X:                                     Code Generation.     (line  67)
+ * Xf:                                    Code Generation.     (line  73)
+ 
+ 
+ File: gdc.info,  Node: Keyword Index,  Prev: Option Index,  Up: Top
+ 
+ Keyword Index
+ *************
+ 
+ [index]
+ * Menu:
+ 
+ * allocSize function attribute:          Other Attributes.    (line   9)
+ * alloc_size function attribute:         Common Attributes.   (line   8)
+ * alloc_size variable attribute:         Common Attributes.   (line   8)
+ * always_inline function attribute:      Common Attributes.   (line  30)
+ * assembly language in D:                Inline Assembly.     (line   6)
+ * assumeUsed function attribute:         Other Attributes.    (line  17)
+ * assumeUsed variable attribute:         Other Attributes.    (line  17)
+ * attributes:                            Attributes.          (line   6)
+ * built-in functions:                    Builtin Functions.   (line   6)
+ * built-in functions <1>:                Query Builtins.      (line   6)
+ * built-in functions <2>:                Other Builtins.      (line   6)
+ * built-in types:                        Builtin Types.       (line   6)
+ * cold function attribute:               Common Attributes.   (line  38)
+ * common predefined versions:            Common Predefined Versions.
+                                                               (line   6)
+ * core.bitop.bsf:                        Bit Operation Intrinsics.
+                                                               (line  14)
+ * core.bitop.bsf <1>:                    Bit Operation Intrinsics.
+                                                               (line  15)
+ * core.bitop.bsr:                        Bit Operation Intrinsics.
+                                                               (line  24)
+ * core.bitop.bsr <1>:                    Bit Operation Intrinsics.
+                                                               (line  25)
+ * core.bitop.bswap:                      Bit Operation Intrinsics.
+                                                               (line  92)
+ * core.bitop.bswap <1>:                  Bit Operation Intrinsics.
+                                                               (line  93)
+ * core.bitop.bt:                         Bit Operation Intrinsics.
+                                                               (line  35)
+ * core.bitop.bt <1>:                     Bit Operation Intrinsics.
+                                                               (line  36)
+ * core.bitop.btc:                        Bit Operation Intrinsics.
+                                                               (line  47)
+ * core.bitop.btc <1>:                    Bit Operation Intrinsics.
+                                                               (line  48)
+ * core.bitop.btr:                        Bit Operation Intrinsics.
+                                                               (line  62)
+ * core.bitop.btr <1>:                    Bit Operation Intrinsics.
+                                                               (line  63)
+ * core.bitop.bts:                        Bit Operation Intrinsics.
+                                                               (line  77)
+ * core.bitop.bts <1>:                    Bit Operation Intrinsics.
+                                                               (line  78)
+ * core.bitop.byteswap:                   Bit Operation Intrinsics.
+                                                               (line  91)
+ * core.bitop.popcnt:                     Bit Operation Intrinsics.
+                                                               (line 101)
+ * core.bitop.popcnt <1>:                 Bit Operation Intrinsics.
+                                                               (line 102)
+ * core.bitop.rol:                        Bit Operation Intrinsics.
+                                                               (line 109)
+ * core.bitop.rol <1>:                    Bit Operation Intrinsics.
+                                                               (line 110)
+ * core.bitop.ror:                        Bit Operation Intrinsics.
+                                                               (line 117)
+ * core.bitop.ror <1>:                    Bit Operation Intrinsics.
+                                                               (line 118)
+ * core.checkedint.adds:                  Integer Overflow Intrinsics.
+                                                               (line  13)
+ * core.checkedint.adds <1>:              Integer Overflow Intrinsics.
+                                                               (line  14)
+ * core.checkedint.addu:                  Integer Overflow Intrinsics.
+                                                               (line  22)
+ * core.checkedint.addu <1>:              Integer Overflow Intrinsics.
+                                                               (line  23)
+ * core.checkedint.muls:                  Integer Overflow Intrinsics.
+                                                               (line  31)
+ * core.checkedint.muls <1>:              Integer Overflow Intrinsics.
+                                                               (line  32)
+ * core.checkedint.mulu:                  Integer Overflow Intrinsics.
+                                                               (line  40)
+ * core.checkedint.mulu <1>:              Integer Overflow Intrinsics.
+                                                               (line  41)
+ * core.checkedint.negs:                  Integer Overflow Intrinsics.
+                                                               (line  49)
+ * core.checkedint.negs <1>:              Integer Overflow Intrinsics.
+                                                               (line  50)
+ * core.checkedint.subs:                  Integer Overflow Intrinsics.
+                                                               (line  57)
+ * core.checkedint.subs <1>:              Integer Overflow Intrinsics.
+                                                               (line  58)
+ * core.checkedint.subu:                  Integer Overflow Intrinsics.
+                                                               (line  66)
+ * core.checkedint.subu <1>:              Integer Overflow Intrinsics.
+                                                               (line  67)
+ * core.math.cos:                         Math Intrinsics.     (line   9)
+ * core.math.cos <1>:                     Math Intrinsics.     (line  10)
+ * core.math.cos <2>:                     Math Intrinsics.     (line  11)
+ * core.math.fabs:                        Math Intrinsics.     (line  19)
+ * core.math.fabs <1>:                    Math Intrinsics.     (line  20)
+ * core.math.fabs <2>:                    Math Intrinsics.     (line  21)
+ * core.math.ldexp:                       Math Intrinsics.     (line  28)
+ * core.math.ldexp <1>:                   Math Intrinsics.     (line  29)
+ * core.math.ldexp <2>:                   Math Intrinsics.     (line  30)
+ * core.math.rint:                        Math Intrinsics.     (line  37)
+ * core.math.rint <1>:                    Math Intrinsics.     (line  38)
+ * core.math.rint <2>:                    Math Intrinsics.     (line  39)
+ * core.math.rndtol:                      Math Intrinsics.     (line  49)
+ * core.math.rndtol <1>:                  Math Intrinsics.     (line  50)
+ * core.math.rndtol <2>:                  Math Intrinsics.     (line  51)
+ * core.math.sin:                         Math Intrinsics.     (line  60)
+ * core.math.sin <1>:                     Math Intrinsics.     (line  61)
+ * core.math.sin <2>:                     Math Intrinsics.     (line  62)
+ * core.math.sqrt:                        Math Intrinsics.     (line  70)
+ * core.math.sqrt <1>:                    Math Intrinsics.     (line  71)
+ * core.math.sqrt <2>:                    Math Intrinsics.     (line  72)
+ * core.math.toPrec:                      Math Intrinsics.     (line  79)
+ * core.math.toPrec <1>:                  Math Intrinsics.     (line  80)
+ * core.math.toPrec <2>:                  Math Intrinsics.     (line  81)
+ * core.stdc.stdarg.va_arg:               Variadic Intrinsics. (line   9)
+ * core.stdc.stdarg.va_arg <1>:           Variadic Intrinsics. (line  18)
+ * core.stdc.stdarg.va_copy:              Variadic Intrinsics. (line  26)
+ * core.stdc.stdarg.va_end:               Variadic Intrinsics. (line  34)
+ * core.stdc.stdarg.va_start:             Variadic Intrinsics. (line  41)
+ * core.volatile.volatileLoad:            Volatile Intrinsics. (line  37)
+ * core.volatile.volatileLoad <1>:        Volatile Intrinsics. (line  38)
+ * core.volatile.volatileLoad <2>:        Volatile Intrinsics. (line  39)
+ * core.volatile.volatileLoad <3>:        Volatile Intrinsics. (line  40)
+ * core.volatile.volatileStore:           Volatile Intrinsics. (line  44)
+ * core.volatile.volatileStore <1>:       Volatile Intrinsics. (line  46)
+ * core.volatile.volatileStore <2>:       Volatile Intrinsics. (line  48)
+ * core.volatile.volatileStore <3>:       Volatile Intrinsics. (line  49)
+ * D interface files.:                    Input and Output files.
+                                                               (line  23)
+ * D source file suffixes:                Input and Output files.
+                                                               (line   6)
+ * D spec deviations:                     Missing Features.    (line   6)
+ * Ddoc source files.:                    Input and Output files.
+                                                               (line  29)
+ * debug dump options:                    Developer Options.   (line   6)
+ * developer options:                     Developer Options.   (line   6)
+ * directory options:                     Directory Options.   (line   6)
+ * dump options:                          Developer Options.   (line   6)
+ * dynamicCompile function attribute:     Other Attributes.    (line  21)
+ * fastmath function attribute:           Other Attributes.    (line  27)
+ * FDL, GNU Free Documentation License:   GNU Free Documentation License.
+                                                               (line   6)
+ * flatten function attribute:            Common Attributes.   (line  50)
+ * gcc.simd.blendvector:                  Vector Intrinsics.   (line 114)
+ * gcc.simd.convertvector:                Vector Intrinsics.   (line  99)
+ * gcc.simd.extractelement:               Vector Intrinsics.   (line  85)
+ * gcc.simd.insertelement:                Vector Intrinsics.   (line  92)
+ * gcc.simd.loadUnaligned:                Vector Intrinsics.   (line  31)
+ * gcc.simd.prefetch:                     Vector Intrinsics.   (line   9)
+ * gcc.simd.shuffle:                      Vector Intrinsics.   (line  49)
+ * gcc.simd.shuffle <1>:                  Vector Intrinsics.   (line  50)
+ * gcc.simd.shufflevector:                Vector Intrinsics.   (line  69)
+ * gcc.simd.shufflevector <1>:            Vector Intrinsics.   (line  71)
+ * gcc.simd.storeUnaligned:               Vector Intrinsics.   (line  40)
+ * hidden function attribute:             Other Attributes.    (line  33)
+ * hidden variable attribute:             Other Attributes.    (line  33)
+ * importC:                               ImportC.             (line   6)
+ * intrinsics:                            Intrinsics.          (line   6)
+ * intrinsics, bitop:                     Bit Operation Intrinsics.
+                                                               (line   6)
+ * intrinsics, checkedint:                Integer Overflow Intrinsics.
+                                                               (line   6)
+ * intrinsics, ctfe:                      CTFE Intrinsics.     (line   6)
+ * intrinsics, math:                      Math Intrinsics.     (line   6)
+ * intrinsics, stdarg:                    Variadic Intrinsics. (line   6)
+ * intrinsics, vector:                    Vector Intrinsics.   (line   6)
+ * intrinsics, volatile:                  Volatile Intrinsics. (line   6)
+ * language reference, D language:        D Implementation.    (line   6)
+ * linking, static:                       Linking.             (line   6)
+ * messages, error:                       Warnings.            (line   6)
+ * messages, warning:                     Warnings.            (line   6)
+ * missing features:                      Missing Features.    (line   6)
+ * naked function attribute:              Other Attributes.    (line  38)
+ * noclone function attribute:            Common Attributes.   (line  76)
+ * noinline function attribute:           Common Attributes.   (line  85)
+ * noipa function attribute:              Common Attributes.   (line  96)
+ * noplt function attribute:              Common Attributes.   (line 114)
+ * noSanitize function attribute:         Other Attributes.    (line  47)
+ * no_icf function attribute:             Common Attributes.   (line  59)
+ * no_sanitize function attribute:        Common Attributes.   (line  66)
+ * optimize function attribute:           Common Attributes.   (line 127)
+ * options, code generation:              Code Generation.     (line   6)
+ * options, directory search:             Directory Options.   (line   6)
+ * options, errors:                       Warnings.            (line   6)
+ * options, linking:                      Linking.             (line   6)
+ * options, runtime:                      Runtime Options.     (line   6)
+ * options, warnings:                     Warnings.            (line   6)
+ * optStrategy function attribute:        Other Attributes.    (line  51)
+ * pragma:                                Predefined Pragmas.  (line   6)
+ * predefined pragmas:                    Predefined Pragmas.  (line   6)
+ * predefined versions:                   Predefined Versions. (line   6)
+ * register variable attribute:           Common Attributes.   (line 153)
+ * restrict parameter attribute:          Common Attributes.   (line 167)
+ * search path:                           Directory Options.   (line   6)
+ * section function attribute:            Common Attributes.   (line 176)
+ * section variable attribute:            Common Attributes.   (line 176)
+ * simd:                                  Vector Extensions.   (line   6)
+ * simd function attribute:               Common Attributes.   (line 190)
+ * simd_clones function attribute:        Common Attributes.   (line 202)
+ * special enums:                         Special Enums.       (line   6)
+ * standard predefined versions:          Standard Predefined Versions.
+                                                               (line   6)
+ * std.math.exponential.exp:              CTFE Intrinsics.     (line  16)
+ * std.math.exponential.exp <1>:          CTFE Intrinsics.     (line  17)
+ * std.math.exponential.exp <2>:          CTFE Intrinsics.     (line  18)
+ * std.math.exponential.exp2:             CTFE Intrinsics.     (line  34)
+ * std.math.exponential.exp2 <1>:         CTFE Intrinsics.     (line  35)
+ * std.math.exponential.exp2 <2>:         CTFE Intrinsics.     (line  36)
+ * std.math.exponential.expm1:            CTFE Intrinsics.     (line  25)
+ * std.math.exponential.expm1 <1>:        CTFE Intrinsics.     (line  26)
+ * std.math.exponential.expm1 <2>:        CTFE Intrinsics.     (line  27)
+ * std.math.exponential.log:              CTFE Intrinsics.     (line  43)
+ * std.math.exponential.log <1>:          CTFE Intrinsics.     (line  44)
+ * std.math.exponential.log <2>:          CTFE Intrinsics.     (line  45)
+ * std.math.exponential.log10:            CTFE Intrinsics.     (line  52)
+ * std.math.exponential.log10 <1>:        CTFE Intrinsics.     (line  53)
+ * std.math.exponential.log10 <2>:        CTFE Intrinsics.     (line  54)
+ * std.math.exponential.log2:             CTFE Intrinsics.     (line  61)
+ * std.math.exponential.log2 <1>:         CTFE Intrinsics.     (line  62)
+ * std.math.exponential.log2 <2>:         CTFE Intrinsics.     (line  63)
+ * std.math.exponential.pow:              CTFE Intrinsics.     (line  70)
+ * std.math.exponential.pow <1>:          CTFE Intrinsics.     (line  71)
+ * std.math.exponential.pow <2>:          CTFE Intrinsics.     (line  78)
+ * std.math.operations.fma:               CTFE Intrinsics.     (line  85)
+ * std.math.operations.fmax:              CTFE Intrinsics.     (line  93)
+ * std.math.operations.fmin:              CTFE Intrinsics.     (line 100)
+ * std.math.rounding.ceil:                CTFE Intrinsics.     (line 107)
+ * std.math.rounding.ceil <1>:            CTFE Intrinsics.     (line 108)
+ * std.math.rounding.ceil <2>:            CTFE Intrinsics.     (line 109)
+ * std.math.rounding.floor:               CTFE Intrinsics.     (line 117)
+ * std.math.rounding.floor <1>:           CTFE Intrinsics.     (line 118)
+ * std.math.rounding.floor <2>:           CTFE Intrinsics.     (line 119)
+ * std.math.rounding.round:               CTFE Intrinsics.     (line 127)
+ * std.math.rounding.trunc:               CTFE Intrinsics.     (line 136)
+ * std.math.traits.copysign:              CTFE Intrinsics.     (line 143)
+ * std.math.traits.isFinite:              CTFE Intrinsics.     (line 150)
+ * std.math.traits.isInfinity:            CTFE Intrinsics.     (line 157)
+ * std.math.traits.isNaN:                 CTFE Intrinsics.     (line 164)
+ * std.math.trigonometry.tan:             CTFE Intrinsics.     (line 173)
+ * std.math.trigoometry.tan:              CTFE Intrinsics.     (line 171)
+ * std.math.trigoometry.tan <1>:          CTFE Intrinsics.     (line 172)
+ * suffixes for D source:                 Input and Output files.
+                                                               (line   6)
+ * suppressing warnings:                  Warnings.            (line   6)
+ * symver function attribute:             Common Attributes.   (line 211)
+ * target function attribute:             Common Attributes.   (line 227)
+ * target-specific predefined versions:   Target Predefined Versions.
+                                                               (line   6)
+ * target_clones function attribute:      Common Attributes.   (line 245)
+ * traits:                                Traits.              (line   6)
+ * used function attribute:               Common Attributes.   (line 259)
+ * used variable attribute:               Common Attributes.   (line 259)
+ * vector extensions:                     Vector Extensions.   (line   6)
+ * version:                               Predefined Versions. (line   6)
+ * visibility function attribute:         Common Attributes.   (line 268)
+ * visibility variable attribute:         Common Attributes.   (line 268)
+ * warnings, suppressing:                 Warnings.            (line   6)
+ * weak function attribute:               Common Attributes.   (line 279)
+ * weak variable attribute:               Common Attributes.   (line 279)
+ 
+ 
+ 
+ Tag Table:
+ Node: Top1075
+ Node: Invoking gdc1933
+ Node: Input and Output files2792
+ Node: Runtime Options4140
+ Node: Directory Options12735
+ Node: Code Generation15158
+ Node: Warnings19092
+ Node: Linking22737
+ Node: Developer Options24410
+ Node: D Implementation25160
+ Node: Attributes26904
+ Node: Attribute Syntax27902
+ Node: Common Attributes29506
+ Node: Other Attributes41890
+ Node: Target Attributes44054
+ Node: Builtin Functions45459
+ Node: Builtin Types46026
+ Node: Query Builtins47209
+ Node: Other Builtins48439
+ Node: ImportC54566
+ Node: Inline Assembly56657
+ Node: Intrinsics58805
+ Node: Bit Operation Intrinsics59618
+ Node: Integer Overflow Intrinsics64432
+ Node: Math Intrinsics67109
+ Node: Variadic Intrinsics70293
+ Node: Volatile Intrinsics71857
+ Node: CTFE Intrinsics74268
+ Node: Predefined Pragmas80124
+ Node: Predefined Versions84134
+ Node: Standard Predefined Versions84777
+ Node: Common Predefined Versions88699
+ Node: Target Predefined Versions90210
+ Node: Special Enums92558
+ Node: Traits94276
+ Node: Vector Extensions95532
+ Node: Vector Intrinsics99160
+ Node: Missing Features103799
+ Node: Copying108399
+ Node: GNU Free Documentation License145949
+ Node: Option Index171078
+ Node: Keyword Index178983
+ 
+ End Tag Table
+ 
+ 
+ Local Variables:
+ coding: utf-8
+ End:
diff -Nrcpad gcc-13.3.0/gcc/doc/gfdl.7 gcc-13.4.0/gcc/doc/gfdl.7
*** gcc-13.3.0/gcc/doc/gfdl.7	Tue May 21 07:50:34 2024
--- gcc-13.4.0/gcc/doc/gfdl.7	Thu Jun  5 16:06:29 2025
***************
*** 133,139 ****
  .\" ========================================================================
  .\"
  .IX Title "GFDL 7"
! .TH GFDL 7 "2024-05-21" "gcc-13.3.0" "GNU"
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
--- 133,139 ----
  .\" ========================================================================
  .\"
  .IX Title "GFDL 7"
! .TH GFDL 7 "2025-06-05" "gcc-13.4.0" "GNU"
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
diff -Nrcpad gcc-13.3.0/gcc/doc/gfortran.1 gcc-13.4.0/gcc/doc/gfortran.1
*** gcc-13.3.0/gcc/doc/gfortran.1	Tue May 21 08:05:48 2024
--- gcc-13.4.0/gcc/doc/gfortran.1	Thu Jun  5 16:30:32 2025
***************
*** 133,139 ****
  .\" ========================================================================
  .\"
  .IX Title "GFORTRAN 1"
! .TH GFORTRAN 1 "2024-05-21" "gcc-13.3.0" "GNU"
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
--- 133,139 ----
  .\" ========================================================================
  .\"
  .IX Title "GFORTRAN 1"
! .TH GFORTRAN 1 "2025-06-05" "gcc-13.4.0" "GNU"
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
diff -Nrcpad gcc-13.3.0/gcc/doc/gm2.1 gcc-13.4.0/gcc/doc/gm2.1
*** gcc-13.3.0/gcc/doc/gm2.1	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/doc/gm2.1	Thu Jun  5 16:12:10 2025
***************
*** 0 ****
--- 1,525 ----
+ .\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.43)
+ .\"
+ .\" Standard preamble:
+ .\" ========================================================================
+ .de Sp \" Vertical space (when we can't use .PP)
+ .if t .sp .5v
+ .if n .sp
+ ..
+ .de Vb \" Begin verbatim text
+ .ft CW
+ .nf
+ .ne \\$1
+ ..
+ .de Ve \" End verbatim text
+ .ft R
+ .fi
+ ..
+ .\" Set up some character translations and predefined strings.  \*(-- will
+ .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+ .\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+ .\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+ .\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+ .\" nothing in troff, for use with C<>.
+ .tr \(*W-
+ .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+ .ie n \{\
+ .    ds -- \(*W-
+ .    ds PI pi
+ .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+ .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+ .    ds L" ""
+ .    ds R" ""
+ .    ds C` ""
+ .    ds C' ""
+ 'br\}
+ .el\{\
+ .    ds -- \|\(em\|
+ .    ds PI \(*p
+ .    ds L" ``
+ .    ds R" ''
+ .    ds C`
+ .    ds C'
+ 'br\}
+ .\"
+ .\" Escape single quotes in literal strings from groff's Unicode transform.
+ .ie \n(.g .ds Aq \(aq
+ .el       .ds Aq '
+ .\"
+ .\" If the F register is >0, we'll generate index entries on stderr for
+ .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+ .\" entries marked with X<> in POD.  Of course, you'll have to process the
+ .\" output yourself in some meaningful fashion.
+ .\"
+ .\" Avoid warning from groff about undefined register 'F'.
+ .de IX
+ ..
+ .nr rF 0
+ .if \n(.g .if rF .nr rF 1
+ .if (\n(rF:(\n(.g==0)) \{\
+ .    if \nF \{\
+ .        de IX
+ .        tm Index:\\$1\t\\n%\t"\\$2"
+ ..
+ .        if !\nF==2 \{\
+ .            nr % 0
+ .            nr F 2
+ .        \}
+ .    \}
+ .\}
+ .rr rF
+ .\"
+ .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+ .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+ .    \" fudge factors for nroff and troff
+ .if n \{\
+ .    ds #H 0
+ .    ds #V .8m
+ .    ds #F .3m
+ .    ds #[ \f1
+ .    ds #] \fP
+ .\}
+ .if t \{\
+ .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+ .    ds #V .6m
+ .    ds #F 0
+ .    ds #[ \&
+ .    ds #] \&
+ .\}
+ .    \" simple accents for nroff and troff
+ .if n \{\
+ .    ds ' \&
+ .    ds ` \&
+ .    ds ^ \&
+ .    ds , \&
+ .    ds ~ ~
+ .    ds /
+ .\}
+ .if t \{\
+ .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+ .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+ .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+ .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+ .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+ .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+ .\}
+ .    \" troff and (daisy-wheel) nroff accents
+ .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+ .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+ .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+ .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+ .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+ .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+ .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+ .ds ae a\h'-(\w'a'u*4/10)'e
+ .ds Ae A\h'-(\w'A'u*4/10)'E
+ .    \" corrections for vroff
+ .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+ .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+ .    \" for low resolution devices (crt and lpr)
+ .if \n(.H>23 .if \n(.V>19 \
+ \{\
+ .    ds : e
+ .    ds 8 ss
+ .    ds o a
+ .    ds d- d\h'-1'\(ga
+ .    ds D- D\h'-1'\(hy
+ .    ds th \o'bp'
+ .    ds Th \o'LP'
+ .    ds ae ae
+ .    ds Ae AE
+ .\}
+ .rm #[ #] #H #V #F C
+ .\" ========================================================================
+ .\"
+ .IX Title "GM2 1"
+ .TH GM2 1 "2025-06-05" "gcc-13.4.0" "GNU"
+ .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+ .\" way too many mistakes in technical documents.
+ .if n .ad l
+ .nh
+ .SH "NAME"
+ gm2 \- The GNU Modula\-2 Compiler
+ .SH "SYNOPSIS"
+ .IX Header "SYNOPSIS"
+ .SH "DESCRIPTION"
+ .IX Header "DESCRIPTION"
+ .SH "OPTIONS"
+ .IX Header "OPTIONS"
+ For any given input file, the file name suffix determines what kind of
+ compilation is done.  The following kinds of input file names are supported:
+ .IP "\fIfile\fR\fB.mod\fR" 4
+ .IX Item "file.mod"
+ Modula\-2 implementation or program source files.  See the
+ \&\fB\-fmod=\fR option if you wish to compile a project which uses a
+ different source file extension.
+ .IP "\fIfile\fR\fB.def\fR" 4
+ .IX Item "file.def"
+ Modula\-2 definition module source files.  Definition modules are not
+ compiled separately, in \s-1GNU\s0 Modula\-2 definition modules are parsed as
+ required when program or implementation modules are compiled.  See the
+ \&\fB\-fdef=\fR option if you wish to compile a project which uses a
+ different source file extension.
+ .PP
+ You can specify more than one input file on the \fBgm2\fR command line,
+ .ie n .IP """\-g""" 4
+ .el .IP "\f(CW\-g\fR" 4
+ .IX Item "-g"
+ create debugging information so that debuggers such as \fIgdb\fR
+ can inspect and control executable.
+ .ie n .IP """\-I""" 4
+ .el .IP "\f(CW\-I\fR" 4
+ .IX Item "-I"
+ used to specify the search path for definition and implementation
+ modules.  An example is:  \f(CW\*(C`gm2 \-g \-c \-I.:../../libs foo.mod\*(C'\fR.
+ If this option is not specified then the default path is added
+ which consists of the current directory followed by the appropriate
+ language dialect library directories.
+ .ie n .IP """\-fauto\-init""" 4
+ .el .IP "\f(CW\-fauto\-init\fR" 4
+ .IX Item "-fauto-init"
+ turns on auto initialization of pointers to \s-1NIL.\s0  Whenever a block is
+ created all pointers declared within this scope will have their
+ addresses assigned to \s-1NIL.\s0
+ .ie n .IP """\-fbounds""" 4
+ .el .IP "\f(CW\-fbounds\fR" 4
+ .IX Item "-fbounds"
+ turns on run time subrange, array index and indirection via \f(CW\*(C`NIL\*(C'\fR
+ pointer checking.
+ .ie n .IP """\-fcase""" 4
+ .el .IP "\f(CW\-fcase\fR" 4
+ .IX Item "-fcase"
+ turns on compile time checking to check whether a \f(CW\*(C`CASE\*(C'\fR
+ statement requires an \f(CW\*(C`ELSE\*(C'\fR clause when on was not specified.
+ .ie n .IP """\-fcpp""" 4
+ .el .IP "\f(CW\-fcpp\fR" 4
+ .IX Item "-fcpp"
+ preprocess the source with \fBcpp \-lang\-asm \-traditional\-cpp\fR
+ For further details about these options 
+ If \fB\-fcpp\fR is supplied then all definition modules and
+ implementation modules which are parsed will be prepossessed by
+ \&\fBcpp\fR.
+ .ie n .IP """\-fdebug\-builtins""" 4
+ .el .IP "\f(CW\-fdebug\-builtins\fR" 4
+ .IX Item "-fdebug-builtins"
+ call a real function, rather than the builtin equivalent.  This can
+ be useful for debugging parameter values to a builtin function as
+ it allows users to single step code into a real function.
+ .ie n .IP """\-fdef=""" 4
+ .el .IP "\f(CW\-fdef=\fR" 4
+ .IX Item "-fdef="
+ recognize the specified suffix as a definition module filename.
+ The default implementation and module filename suffix is \fI.def\fR.
+ If this option is used \s-1GNU\s0 Modula\-2 will still fall back to this
+ default if a requested definition module is not found.
+ .ie n .IP """\-fdump\-system\-exports""" 4
+ .el .IP "\f(CW\-fdump\-system\-exports\fR" 4
+ .IX Item "-fdump-system-exports"
+ display all inbuilt system items.
+ This is an internal command line option.
+ .ie n .IP """\-fexceptions""" 4
+ .el .IP "\f(CW\-fexceptions\fR" 4
+ .IX Item "-fexceptions"
+ turn on exception handling code.  By default this option is on.
+ Exception handling can be disabled by \fB\-fno\-exceptions\fR
+ and no references are made to the run time exception libraries.
+ .ie n .IP """\-fextended\-opaque""" 4
+ .el .IP "\f(CW\-fextended\-opaque\fR" 4
+ .IX Item "-fextended-opaque"
+ allows opaque types to be implemented as any type.  This is a \s-1GNU\s0
+ Modula\-2 extension and it requires that the implementation module
+ defining the opaque type is available so that it can be resolved when
+ compiling the module which imports the opaque type.
+ .ie n .IP """\-ffloatvalue""" 4
+ .el .IP "\f(CW\-ffloatvalue\fR" 4
+ .IX Item "-ffloatvalue"
+ turns on run time checking to check whether a floating point number is
+ about to exceed range.
+ .ie n .IP """\-fgen\-module\-list=\fIfilename\fP""" 4
+ .el .IP "\f(CW\-fgen\-module\-list=\f(CIfilename\f(CW\fR" 4
+ .IX Item "-fgen-module-list=filename"
+ attempt to find all modules when linking and generate a module list.
+ If the \fIfilename\fR is \fB\-\fR then the contents are not written
+ and only used to force the linking of all module ctors.
+ This option cannot be used if \fB\-fuse\-list=\fR is enabled.
+ .ie n .IP """\-findex""" 4
+ .el .IP "\f(CW\-findex\fR" 4
+ .IX Item "-findex"
+ generate code to check whether array index values are out of bounds.
+ Array index checking can be disabled via \fB\-fno\-index\fR.
+ .ie n .IP """\-fiso""" 4
+ .el .IP "\f(CW\-fiso\fR" 4
+ .IX Item "-fiso"
+ turn on \s-1ISO\s0 standard features.  Currently this enables the \s-1ISO\s0
+ \&\f(CW\*(C`SYSTEM\*(C'\fR module and alters the default library search path so
+ that the \s-1ISO\s0 libraries are searched before the \s-1PIM\s0 libraries.  It also
+ effects the behavior of \f(CW\*(C`DIV\*(C'\fR and \f(CW\*(C`MOD\*(C'\fR operators.
+ .ie n .IP """\-flibs=""" 4
+ .el .IP "\f(CW\-flibs=\fR" 4
+ .IX Item "-flibs="
+ modifies the default library search path.  The libraries supplied are:
+ m2pim, m2iso, m2min, m2log and m2cor.  These map onto the
+ Programming in Modula\-2 base libraries, \s-1ISO\s0 standard libraries, minimal
+ library support, Logitech compatible library and Programming in
+ Modula\-2 with coroutines.
+ Multiple libraries can be specified and are comma separated with precedence
+ going to the first in the list.  It is not necessary to use \-flibs=m2pim or
+ \&\-flibs=m2iso if you also specify \-fpim, \-fpim2, \-fpim3, \-fpim4 or
+ \&\-fiso.  Unless you are using \-flibs=m2min you should include m2pim as
+ the they provide the base modules which all other dialects utilize.
+ The option \fB\-fno\-libs=\-\fR disables the \fBgm2\fR driver from
+ modifying the search and library paths.
+ .ie n .IP """\-static\-libgm2""" 4
+ .el .IP "\f(CW\-static\-libgm2\fR" 4
+ .IX Item "-static-libgm2"
+ On systems that provide the m2 runtimes as both shared and static libraries,
+ this option forces the use of the static version.
+ .ie n .IP """\-fm2\-g""" 4
+ .el .IP "\f(CW\-fm2\-g\fR" 4
+ .IX Item "-fm2-g"
+ improve the debugging experience for new programmers at the expense
+ of generating \f(CW\*(C`nop\*(C'\fR instructions if necessary to ensure single
+ stepping precision over all code related keywords.  An example
+ of this is in termination of a list of nested \f(CW\*(C`IF\*(C'\fR statements
+ where multiple \f(CW\*(C`END\*(C'\fR keywords are mapped onto a sequence of
+ \&\f(CW\*(C`nop\*(C'\fR instructions.
+ .ie n .IP """\-fm2\-lower\-case""" 4
+ .el .IP "\f(CW\-fm2\-lower\-case\fR" 4
+ .IX Item "-fm2-lower-case"
+ render keywords in error messages using lower case.
+ .ie n .IP """\-fm2\-pathname=""" 4
+ .el .IP "\f(CW\-fm2\-pathname=\fR" 4
+ .IX Item "-fm2-pathname="
+ specify the module mangled prefix name for all modules in the
+ following include paths.
+ .ie n .IP """\-fm2\-pathnameI""" 4
+ .el .IP "\f(CW\-fm2\-pathnameI\fR" 4
+ .IX Item "-fm2-pathnameI"
+ for internal use only: used by the driver to copy the user facing \-I
+ option.
+ .ie n .IP """\-fm2\-plugin""" 4
+ .el .IP "\f(CW\-fm2\-plugin\fR" 4
+ .IX Item "-fm2-plugin"
+ insert plugin to identify run time errors at compile time (default on).
+ .ie n .IP """\-fm2\-prefix=""" 4
+ .el .IP "\f(CW\-fm2\-prefix=\fR" 4
+ .IX Item "-fm2-prefix="
+ specify the module mangled prefix name.  All exported symbols from a
+ definition module will have the prefix name.
+ .ie n .IP """\-fm2\-statistics""" 4
+ .el .IP "\f(CW\-fm2\-statistics\fR" 4
+ .IX Item "-fm2-statistics"
+ generates quadruple information: number of quadruples generated,
+ number of quadruples remaining after optimization and number of source
+ lines compiled.
+ .ie n .IP """\-fm2\-strict\-type""" 4
+ .el .IP "\f(CW\-fm2\-strict\-type\fR" 4
+ .IX Item "-fm2-strict-type"
+ experimental flag to turn on the new strict type checker.
+ .ie n .IP """\-fm2\-whole\-program""" 4
+ .el .IP "\f(CW\-fm2\-whole\-program\fR" 4
+ .IX Item "-fm2-whole-program"
+ compile all implementation modules and program module at once.  Notice
+ that you need to take care if you are compiling different dialect
+ modules (particularly with the negative operands to modulus).  But
+ this option, when coupled together with \f(CW\*(C`\-O3\*(C'\fR, can deliver huge
+ performance improvements.
+ .ie n .IP """\-fmod=""" 4
+ .el .IP "\f(CW\-fmod=\fR" 4
+ .IX Item "-fmod="
+ recognize the specified suffix as implementation and module filenames.
+ The default implementation and module filename suffix is \fI.mod\fR.
+ If this option is used \s-1GNU\s0 Modula\-2 will still fall back to this
+ default if it needs to read an implementation module and the specified
+ suffixed filename does not exist.
+ .ie n .IP """\-fnil""" 4
+ .el .IP "\f(CW\-fnil\fR" 4
+ .IX Item "-fnil"
+ generate code to detect accessing data through a \f(CW\*(C`NIL\*(C'\fR value
+ pointer.  Dereferencing checking through a \f(CW\*(C`NIL\*(C'\fR pointer can be
+ disabled by \fB\-fno\-nil\fR.
+ .ie n .IP """\-fpim""" 4
+ .el .IP "\f(CW\-fpim\fR" 4
+ .IX Item "-fpim"
+ turn on \s-1PIM\s0 standard features.  Currently this enables the \s-1PIM\s0
+ \&\f(CW\*(C`SYSTEM\*(C'\fR module and determines which identifiers are pervasive
+ (declared in the base module).  If no other \fB\-fpim[234]\fR switch is
+ used then division and modulus operators behave as defined in \s-1PIM4.\s0
+ .ie n .IP """\-fpim2""" 4
+ .el .IP "\f(CW\-fpim2\fR" 4
+ .IX Item "-fpim2"
+ turn on \s-1PIM\-2\s0 standard features.  Currently this removes \f(CW\*(C`SIZE\*(C'\fR
+ from being a pervasive identifier (declared in the base module).  It
+ places \f(CW\*(C`SIZE\*(C'\fR in the \f(CW\*(C`SYSTEM\*(C'\fR module.  It also effects the
+ behavior of \f(CW\*(C`DIV\*(C'\fR and \f(CW\*(C`MOD\*(C'\fR operators.
+ .ie n .IP """\-fpim3""" 4
+ .el .IP "\f(CW\-fpim3\fR" 4
+ .IX Item "-fpim3"
+ turn on \s-1PIM\-3\s0 standard features.  Currently this only effects the
+ behavior of \f(CW\*(C`DIV\*(C'\fR and \f(CW\*(C`MOD\*(C'\fR operators.
+ .ie n .IP """\-fpim4""" 4
+ .el .IP "\f(CW\-fpim4\fR" 4
+ .IX Item "-fpim4"
+ turn on \s-1PIM\-4\s0 standard features.  Currently this only effects the
+ behavior of \f(CW\*(C`DIV\*(C'\fR and \f(CW\*(C`MOD\*(C'\fR operators.
+ .ie n .IP """\-fpositive\-mod\-floor\-div""" 4
+ .el .IP "\f(CW\-fpositive\-mod\-floor\-div\fR" 4
+ .IX Item "-fpositive-mod-floor-div"
+ forces the \f(CW\*(C`DIV\*(C'\fR and \f(CW\*(C`MOD\*(C'\fR operators to behave as defined by \s-1PIM4.\s0
+ All modulus results are positive and the results from the division are
+ rounded to the floor.
+ .ie n .IP """\-fpthread""" 4
+ .el .IP "\f(CW\-fpthread\fR" 4
+ .IX Item "-fpthread"
+ link against the pthread library.  By default this option is on.  It
+ can be disabled by \fB\-fno\-pthread\fR.  \s-1GNU\s0 Modula\-2 uses the \s-1GCC\s0
+ pthread libraries to implement coroutines (see the \s-1SYSTEM\s0
+ implementation module).
+ .ie n .IP """\-frange""" 4
+ .el .IP "\f(CW\-frange\fR" 4
+ .IX Item "-frange"
+ generate code to check the assignment range, return value range
+ set range and constructor range.  Range checking can be disabled
+ via \fB\-fno\-range\fR.
+ .ie n .IP """\-freturn""" 4
+ .el .IP "\f(CW\-freturn\fR" 4
+ .IX Item "-freturn"
+ generate code to check that functions always exit with a \f(CW\*(C`RETURN\*(C'\fR
+ and do not fall out at the end.  Return checking can be disabled
+ via \fB\-fno\-return\fR.
+ .ie n .IP """\-fruntime\-modules=""" 4
+ .el .IP "\f(CW\-fruntime\-modules=\fR" 4
+ .IX Item "-fruntime-modules="
+ specify, using a comma separated list, the run time modules and their
+ order.  These modules will initialized first before any other modules
+ in the application dependency.  By default the run time modules list
+ is set to \f(CW\*(C`m2iso:RTentity,m2iso:Storage,m2iso:SYSTEM,\*(C'\fR
+ \&\f(CW\*(C`m2iso:M2RTS,m2iso:RTExceptions,m2iso:IOLink\*(C'\fR.  Note that these
+ modules will only be linked into your executable if they are required.
+ Adding a long list of dependent modules will not effect the size of
+ the executable it merely states the initialization order should they
+ be required.
+ .ie n .IP """\-fscaffold\-dynamic""" 4
+ .el .IP "\f(CW\-fscaffold\-dynamic\fR" 4
+ .IX Item "-fscaffold-dynamic"
+ the option ensures that \fBgm2\fR will generate a dynamic scaffold
+ infrastructure when compiling implementation and program modules.
+ By default this option is on.  Use \fB\-fno\-scaffold\-dynamic\fR
+ to turn it off or select \fB\-fno\-scaffold\-static\fR.
+ .ie n .IP """\-fscaffold\-c""" 4
+ .el .IP "\f(CW\-fscaffold\-c\fR" 4
+ .IX Item "-fscaffold-c"
+ generate a C source scaffold for the current module being compiled.
+ .ie n .IP """\-fscaffold\-c++""" 4
+ .el .IP "\f(CW\-fscaffold\-c++\fR" 4
+ .IX Item "-fscaffold-c++"
+ generate a \*(C+ source scaffold for the current module being compiled.
+ .ie n .IP """\-fscaffold\-main""" 4
+ .el .IP "\f(CW\-fscaffold\-main\fR" 4
+ .IX Item "-fscaffold-main"
+ force the generation of the \fBmain\fR function.  This is not
+ necessary if the \fB\-c\fR is omitted.
+ .ie n .IP """\-fscaffold\-static""" 4
+ .el .IP "\f(CW\-fscaffold\-static\fR" 4
+ .IX Item "-fscaffold-static"
+ the option ensures that \fBgm2\fR will generate a static scaffold
+ within the program module.  The static scaffold consists of sequences
+ of calls to all dependent module initialization and finalization
+ procedures.  The static scaffold is useful for debugging and single
+ stepping the initialization blocks of implementation modules.
+ .ie n .IP """\-fshared""" 4
+ .el .IP "\f(CW\-fshared\fR" 4
+ .IX Item "-fshared"
+ generate a shared library from the module.
+ .ie n .IP """\-fsoft\-check\-all""" 4
+ .el .IP "\f(CW\-fsoft\-check\-all\fR" 4
+ .IX Item "-fsoft-check-all"
+ turns on all run time checks.  This is the same as invoking
+ \&\s-1GNU\s0 Modula\-2 using the command options
+ \&\f(CW\*(C`\-fnil\*(C'\fR \f(CW\*(C`\-frange\*(C'\fR \f(CW\*(C`\-findex\*(C'\fR
+ \&\f(CW\*(C`\-fwholevalue\*(C'\fR
+ \&\f(CW\*(C`\-fwholediv\*(C'\fR \f(CW\*(C`\-fcase\*(C'\fR \f(CW\*(C`\-freturn\*(C'\fR.
+ .ie n .IP """\-fsources""" 4
+ .el .IP "\f(CW\-fsources\fR" 4
+ .IX Item "-fsources"
+ displays the path to the source of each module.  This option
+ can be used at compile time to check the correct definition module
+ is being used.
+ .ie n .IP """\-fswig""" 4
+ .el .IP "\f(CW\-fswig\fR" 4
+ .IX Item "-fswig"
+ generate a swig interface file.
+ .ie n .IP """\-funbounded\-by\-reference""" 4
+ .el .IP "\f(CW\-funbounded\-by\-reference\fR" 4
+ .IX Item "-funbounded-by-reference"
+ enable optimization of unbounded parameters by attempting to pass non
+ \&\f(CW\*(C`VAR\*(C'\fR unbounded parameters by reference.  This optimization
+ avoids the implicit copy inside the callee procedure.  \s-1GNU\s0 Modula\-2
+ will only allow unbounded parameters to be passed by reference if,
+ inside the callee procedure, they are not written to, no address is
+ calculated on the array and it is not passed as a \f(CW\*(C`VAR\*(C'\fR
+ parameter.  Note that it is possible to write code to break this
+ optimization, therefore this option should be used carefully.
+ For example it would be possible to take the address of an array, pass
+ the address and the array to a procedure, read from the array in
+ the procedure and write to the location using the address parameter.
+ .Sp
+ Due to the dangerous nature of this option it is not enabled
+ when the \fB\-O\fR option is specified.
+ .ie n .IP """\-fuse\-list=\fIfilename\fP""" 4
+ .el .IP "\f(CW\-fuse\-list=\f(CIfilename\f(CW\fR" 4
+ .IX Item "-fuse-list=filename"
+ if \fB\-fscaffold\-static\fR is enabled then use the file
+ \&\fIfilename\fR for the initialization order of modules.  Whereas if
+ \&\fB\-fscaffold\-dynamic\fR is enabled then use this file to force
+ linking of all module ctors.
+ This option cannot be used if \fB\-fgen\-module\-list=\fR is enabled.
+ .ie n .IP """\-fwholediv""" 4
+ .el .IP "\f(CW\-fwholediv\fR" 4
+ .IX Item "-fwholediv"
+ generate code to detect whole number division by zero or modulus by
+ zero.
+ .ie n .IP """\-fwholevalue""" 4
+ .el .IP "\f(CW\-fwholevalue\fR" 4
+ .IX Item "-fwholevalue"
+ generate code to detect whole number overflow and underflow.
+ .ie n .IP """\-Wcase\-enum""" 4
+ .el .IP "\f(CW\-Wcase\-enum\fR" 4
+ .IX Item "-Wcase-enum"
+ generate a warning if a \f(CW\*(C`CASE\*(C'\fR statement selects on an enumerated
+ type expression and the statement is missing one or more \f(CW\*(C`CASE\*(C'\fR
+ labels.  No warning is issued if the \f(CW\*(C`CASE\*(C'\fR statement has a default
+ \&\f(CW\*(C`ELSE\*(C'\fR clause.
+ The option \fB\-Wall\fR will turn on this flag.
+ .ie n .IP """\-Wuninit\-variable\-checking""" 4
+ .el .IP "\f(CW\-Wuninit\-variable\-checking\fR" 4
+ .IX Item "-Wuninit-variable-checking"
+ issue a warning if a variable is used before it is initialized.
+ The checking only occurs in the first basic block in each procedure.
+ It does not check parameters, array types or set types.
+ .ie n .IP """\-Wuninit\-variable\-checking=all,known,cond""" 4
+ .el .IP "\f(CW\-Wuninit\-variable\-checking=all,known,cond\fR" 4
+ .IX Item "-Wuninit-variable-checking=all,known,cond"
+ issue a warning if a variable is used before it is initialized.
+ The checking will only occur in the first basic block in each
+ procedure if \fBknown\fR is specified.  If \fBcond\fR or \fBall\fR
+ is specified then checking continues into conditional branches of the
+ flow graph.  All checking will stop when a procedure call is invoked
+ or the top of a loop is encountered.
+ The option \fB\-Wall\fR will turn on this flag with
+ \&\fB\-Wuninit\-variable\-checking=known\fR.
+ The \fB\-Wuninit\-variable\-checking=all\fR will increase compile time.
+ .SH "SEE ALSO"
+ .IX Header "SEE ALSO"
+ \&\fBgpl\fR\|(7), \fBgfdl\fR\|(7), \fBfsf\-funding\fR\|(7), \fBgcc\fR\|(1)
+ and the Info entries for \fIgm2\fR and \fIgcc\fR.
+ .SH "COPYRIGHT"
+ .IX Header "COPYRIGHT"
+ Copyright (c) 1999\-2023 Free Software Foundation, Inc.
+ .PP
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or
+ any later version published by the Free Software Foundation; with no
+ Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+ A copy of the license is included in the
+ man page \fBgfdl\fR\|(7).
diff -Nrcpad gcc-13.3.0/gcc/doc/gnat-style.info gcc-13.4.0/gcc/doc/gnat-style.info
*** gcc-13.3.0/gcc/doc/gnat-style.info	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/doc/gnat-style.info	Thu Jun  5 16:30:26 2025
***************
*** 0 ****
--- 1,1287 ----
+ This is gnat-style.info, produced by makeinfo version 6.8 from
+ gnat-style.texi.
+ 
+      GNAT Coding Style: A Guide for GNAT Developers , Aug 25, 2022
+ 
+      AdaCore
+ 
+      Copyright © 2008-2022, Free Software Foundation
+ 
+ INFO-DIR-SECTION GNU Ada Tools
+ START-INFO-DIR-ENTRY
+ * gnat-style: (gnat-style.info). gnat-style
+ END-INFO-DIR-ENTRY
+ 
+ 
+    Generated by Sphinx 5.1.1.
+ 
+ 
+ File: gnat-style.info,  Node: Top,  Next: General,  Up: (dir)
+ 
+ GNAT Coding Style A Guide for GNAT Developers
+ *********************************************
+ 
+      GNAT Coding Style: A Guide for GNAT Developers , Aug 25, 2022
+ 
+      AdaCore
+ 
+      Copyright © 2008-2022, Free Software Foundation
+ 
+ * Menu:
+ 
+ * General::
+ * Lexical Elements::
+ * Declarations and Types::
+ * Expressions and Names::
+ * Statements::
+ * Subprograms::
+ * Packages and Visibility Rules::
+ * Program Structure and Compilation Issues::
+ * Index::
+ 
+ 
+ File: gnat-style.info,  Node: General,  Next: Lexical Elements,  Prev: Top,  Up: Top
+ 
+ 1 General
+ *********
+ 
+ Most of GNAT is written in Ada using a consistent style to ensure
+ readability of the code.  This document has been written to help
+ maintain this consistent style, while having a large group of developers
+ work on the compiler.
+ 
+ For the coding style in the C parts of the compiler and run time, see
+ the GNU Coding Guidelines.
+ 
+ This document is structured after the Ada Reference Manual.  Those
+ familiar with that document should be able to quickly lookup style rules
+ for particular constructs.
+ 
+ 
+ File: gnat-style.info,  Node: Lexical Elements,  Next: Declarations and Types,  Prev: General,  Up: Top
+ 
+ 2 Lexical Elements
+ ******************
+ 
+ * Menu:
+ 
+ * Character Set and Separators::
+ * Identifiers::
+ * Numeric Literals::
+ * Reserved Words::
+ * Comments::
+ 
+ 
+ File: gnat-style.info,  Node: Character Set and Separators,  Next: Identifiers,  Up: Lexical Elements
+ 
+ 2.1 Character Set and Separators
+ ================================
+ 
+    * The character set used should be plain 7-bit ASCII. The only
+      separators allowed are space and the end-of-line sequence.  No
+      other control character or format effector (such as ‘HT’, ‘VT’,
+      ‘FF’ ) should be used.  The normal end-of-line sequence is used,
+      which may be ‘LF’, ‘CR/LF’ or ‘CR’, depending on the host system.
+      An optional ‘SUB’ ( ‘16#1A#’ ) may be present as the last character
+      in the file on hosts using that character as file terminator.
+ 
+    * Files that are checked in or distributed should be in host format.
+ 
+    * A line should never be longer than 79 characters, not counting the
+      line separator.
+ 
+    * Lines must not have trailing blanks.
+ 
+    * Indentation is 3 characters per level for ‘if’ statements, loops,
+      and ‘case’ statements.  For exact information on required spacing
+      between lexical elements, see file style.adb.
+ 
+ 
+ File: gnat-style.info,  Node: Identifiers,  Next: Numeric Literals,  Prev: Character Set and Separators,  Up: Lexical Elements
+ 
+ 2.2 Identifiers
+ ===============
+ 
+    * Identifiers will start with an upper case letter, and each letter
+      following an underscore will be upper case.
+ 
+      Short acronyms may be all upper case.  All other letters are lower
+      case.  An exception is for identifiers matching a foreign language.
+      In particular, we use all lower case where appropriate for C.
+ 
+    * Use underscores to separate words in an identifier.
+ 
+    * Try to limit your use of abbreviations in identifiers.  It is ok to
+      make a few abbreviations, explain what they mean, and then use them
+      frequently, but don’t use lots of obscure abbreviations.  An
+      example is the ‘ALI’ word which stands for Ada Library Information
+      and is by convention always written in upper-case when used in
+      entity names.
+ 
+           procedure Find_ALI_Files;
+ 
+    * Don’t use the variable name ‘I’, use ‘J’ instead; ‘I’ is too easily
+      confused with ‘1’ in some fonts.  Similarly don’t use the variable
+      ‘O’, which is too easily mistaken for the number ‘0’.
+ 
+ 
+ File: gnat-style.info,  Node: Numeric Literals,  Next: Reserved Words,  Prev: Identifiers,  Up: Lexical Elements
+ 
+ 2.3 Numeric Literals
+ ====================
+ 
+    * Numeric literals should include underscores where helpful for
+      readability.
+ 
+           1_000_000
+           16#8000_0000#
+           3.14159_26535_89793_23846
+ 
+ 
+ File: gnat-style.info,  Node: Reserved Words,  Next: Comments,  Prev: Numeric Literals,  Up: Lexical Elements
+ 
+ 2.4 Reserved Words
+ ==================
+ 
+    * Reserved words use all lower case.
+ 
+           return else
+ 
+    * The words ‘Access’, ‘Delta’ and ‘Digits’ are capitalized when used
+      as attribute_designator.
+ 
+ 
+ File: gnat-style.info,  Node: Comments,  Prev: Reserved Words,  Up: Lexical Elements
+ 
+ 2.5 Comments
+ ============
+ 
+    * A comment starts with ‘--’ followed by two spaces.  The only
+      exception to this rule (i.e.  one space is tolerated) is when the
+      comment ends with a single space followed by ‘--’.  It is also
+      acceptable to have only one space between ‘--’ and the start of the
+      comment when the comment is at the end of a line, after some Ada
+      code.
+ 
+    * Every sentence in a comment should start with an upper-case letter
+      (including the first letter of the comment).
+ 
+    * When declarations are commented with ‘hanging’ comments, i.e.
+      comments after the declaration, there is no blank line before the
+      comment, and if it is absolutely necessary to have blank lines
+      within the comments, e.g.  to make paragraph separations within a
+      single comment, these blank lines ‘do’ have a ‘--’ (unlike the
+      normal rule, which is to use entirely blank lines for separating
+      comment paragraphs).  The comment starts at same level of
+      indentation as code it is commenting.
+ 
+           z : Integer;
+           --  Integer value for storing value of z
+           --
+           --  The previous line was a blank line.
+ 
+    * Comments that are dubious or incomplete, or that comment on
+      possibly wrong or incomplete code, should be preceded or followed
+      by ‘???’.
+ 
+    * Comments in a subprogram body must generally be surrounded by blank
+      lines.  An exception is a comment that follows a line containing a
+      single keyword ( ‘begin’, ‘else’, ‘loop’ ):
+ 
+           begin
+              --  Comment for the next statement
+ 
+              A := 5;
+ 
+              --  Comment for the B statement
+ 
+              B := 6;
+           end;
+ 
+    * In sequences of statements, comments at the end of the lines should
+      be aligned.
+ 
+           My_Identifier := 5;      --  First comment
+           Other_Id := 6;           --  Second comment
+ 
+    * Short comments that fit on a single line are ‘not’ ended with a
+      period.  Comments taking more than a line are punctuated in the
+      normal manner.
+ 
+    * Comments should focus on ‘why’ instead of ‘what’.  Descriptions of
+      what subprograms do go with the specification.
+ 
+    * Comments describing a subprogram spec should specifically mention
+      the formal argument names.  General rule: write a comment that does
+      not depend on the names of things.  The names are supplementary,
+      not sufficient, as comments.
+ 
+    * ‘Do not’ put two spaces after periods in comments.
+ 
+ 
+ File: gnat-style.info,  Node: Declarations and Types,  Next: Expressions and Names,  Prev: Lexical Elements,  Up: Top
+ 
+ 3 Declarations and Types
+ ************************
+ 
+    * In entity declarations, colons must be surrounded by spaces.
+      Colons should be aligned.
+ 
+           Entity1   : Integer;
+           My_Entity : Integer;
+ 
+    * Declarations should be grouped in a logical order.  Related groups
+      of declarations may be preceded by a header comment.
+ 
+    * All local subprograms in a subprogram or package body should be
+      declared before the first local subprogram body.
+ 
+    * Do not declare local entities that hide global entities.
+ 
+    * Do not declare multiple variables in one declaration that spans
+      lines.  Start a new declaration on each line, instead.
+ 
+    * The defining_identifiers of global declarations serve as comments
+      of a sort.  So don’t choose terse names, but look for names that
+      give useful information instead.
+ 
+    * Local names can be shorter, because they are used only within one
+      context, where comments explain their purpose.
+ 
+    * When starting an initialization or default expression on the line
+      that follows the declaration line, use 2 characters for
+      indentation.
+ 
+           Entity1 : Integer :=
+             Function_Name (Parameters, For_Call);
+ 
+    * If an initialization or default expression needs to be continued on
+      subsequent lines, the continuations should be indented from the
+      start of the expression.
+ 
+           Entity1 : Integer := Long_Function_Name
+                                  (parameters for call);
+ 
+ 
+ File: gnat-style.info,  Node: Expressions and Names,  Next: Statements,  Prev: Declarations and Types,  Up: Top
+ 
+ 4 Expressions and Names
+ ***********************
+ 
+    * Every operator must be surrounded by spaces.  An exception is that
+      this rule does not apply to the exponentiation operator, for which
+      there are no specific layout rules.  The reason for this exception
+      is that sometimes it makes clearer reading to leave out the spaces
+      around exponentiation.
+ 
+           E := A * B**2 + 3 * (C - D);
+ 
+    * Use parentheses where they clarify the intended association of
+      operands with operators:
+ 
+           (A / B) * C
+ 
+ 
+ File: gnat-style.info,  Node: Statements,  Next: Subprograms,  Prev: Expressions and Names,  Up: Top
+ 
+ 5 Statements
+ ************
+ 
+ * Menu:
+ 
+ * Simple and Compound Statements::
+ * If Statements::
+ * Case Statements::
+ * Loop Statements::
+ * Block Statements::
+ 
+ 
+ File: gnat-style.info,  Node: Simple and Compound Statements,  Next: If Statements,  Up: Statements
+ 
+ 5.1 Simple and Compound Statements
+ ==================================
+ 
+    * Use only one statement or label per line.
+ 
+    * A longer sequence_of_statements may be divided in logical groups or
+      separated from surrounding code using a blank line.
+ 
+ 
+ File: gnat-style.info,  Node: If Statements,  Next: Case Statements,  Prev: Simple and Compound Statements,  Up: Statements
+ 
+ 5.2 If Statements
+ =================
+ 
+    * When the ‘if’, ‘elsif’ or ‘else’ keywords fit on the same line with
+      the condition and the ‘then’ keyword, then the statement is
+      formatted as follows:
+ 
+           if condition then
+              ...
+           elsif condition then
+              ...
+           else
+              ...
+           end if;
+ 
+      When the above layout is not possible, ‘then’ should be aligned
+      with ‘if’, and conditions should preferably be split before an
+      ‘and’ or ‘or’ keyword a follows:
+ 
+           if long_condition_that_has_to_be_split
+             and then continued_on_the_next_line
+           then
+              ...
+           end if;
+ 
+      The ‘elsif’, ‘else’ and ‘end if’ always line up with the ‘if’
+      keyword.  The preferred location for splitting the line is before
+      ‘and’ or ‘or’.  The continuation of a condition is indented with
+      two spaces or as many as needed to make nesting clear.  As an
+      exception, if conditions are closely related either of the
+      following is allowed:
+ 
+           if x = lakdsjfhlkashfdlkflkdsalkhfsalkdhflkjdsahf
+                or else
+              x = asldkjhalkdsjfhhfd
+                or else
+              x = asdfadsfadsf
+           then
+             ...
+           end if;
+ 
+           if x = lakdsjfhlkashfdlkflkdsalkhfsalkdhflkjdsahf or else
+              x = asldkjhalkdsjfhhfd                         or else
+              x = asdfadsfadsf
+           then
+             ...
+           end if;
+ 
+    * Conditions should use short-circuit forms ( ‘and then’, ‘or else’
+      ), except when the operands are boolean variables or boolean
+      constants.
+ 
+    * Complex conditions in ‘if’ statements are indented two characters:
+ 
+           if this_complex_condition
+             and then that_other_one
+             and then one_last_one
+           then
+              ...
+           end if;
+ 
+      There are some cases where complex conditionals can be laid out in
+      manners that do not follow these rules to preserve better
+      parallelism between branches, e.g.
+ 
+           if xyz.abc (gef) = 'c'
+                or else
+              xyz.abc (gef) = 'x'
+           then
+              ...
+           end if;
+ 
+    * Every ‘if’ block is preceded and followed by a blank line, except
+      where it begins or ends a sequence_of_statements.
+ 
+           A := 5;
+ 
+           if A = 5 then
+              null;
+           end if;
+ 
+           A := 6;
+ 
+ 
+ File: gnat-style.info,  Node: Case Statements,  Next: Loop Statements,  Prev: If Statements,  Up: Statements
+ 
+ 5.3 Case Statements
+ ===================
+ 
+    * Layout is as below.  For long ‘case’ statements, the extra
+      indentation can be saved by aligning the ‘when’ clauses with the
+      opening ‘case’.
+ 
+           case expression is
+              when condition =>
+                 ...
+              when condition =>
+                 ...
+           end case;
+ 
+ 
+ File: gnat-style.info,  Node: Loop Statements,  Next: Block Statements,  Prev: Case Statements,  Up: Statements
+ 
+ 5.4 Loop Statements
+ ===================
+ 
+    * When possible, have ‘for’ or ‘while’ on one line with the condition
+      and the ‘loop’ keyword.
+ 
+           for J in S'Range loop
+              ...
+           end loop;
+ 
+      If the condition is too long, split the condition (see ‘If
+      statements’ above) and align ‘loop’ with the ‘for’ or ‘while’
+      keyword.
+ 
+           while long_condition_that_has_to_be_split
+             and then continued_on_the_next_line
+           loop
+              ...
+           end loop;
+ 
+      If the loop_statement has an identifier, it is laid out as follows:
+ 
+           Outer : while not condition loop
+              ...
+           end Outer;
+ 
+ 
+ File: gnat-style.info,  Node: Block Statements,  Prev: Loop Statements,  Up: Statements
+ 
+ 5.5 Block Statements
+ ====================
+ 
+    * The ‘declare’ (optional), ‘begin’ and ‘end’ words are aligned,
+      except when the block_statement is named.  There is a blank line
+      before the ‘begin’ keyword:
+ 
+           Some_Block : declare
+              ...
+ 
+           begin
+              ...
+           end Some_Block;
+ 
+ 
+ File: gnat-style.info,  Node: Subprograms,  Next: Packages and Visibility Rules,  Prev: Statements,  Up: Top
+ 
+ 6 Subprograms
+ *************
+ 
+ * Menu:
+ 
+ * Subprogram Declarations::
+ * Subprogram Bodies::
+ 
+ 
+ File: gnat-style.info,  Node: Subprogram Declarations,  Next: Subprogram Bodies,  Up: Subprograms
+ 
+ 6.1 Subprogram Declarations
+ ===========================
+ 
+    * Do not write the ‘in’ for parameters.
+ 
+           function Length (S : String) return Integer;
+ 
+    * When the declaration line for a procedure or a function is too long
+      to fit the entire declaration (including the keyword procedure or
+      function) on a single line, then fold it, putting a single
+      parameter on a line, aligning the colons, as in:
+ 
+           procedure Set_Heading
+             (Source : String;
+              Count  : Natural;
+              Pad    : Character := Space;
+              Fill   : Boolean   := True);
+ 
+      In the case of a function, if the entire spec does not fit on one
+      line, then the return may appear after the last parameter, as in:
+ 
+           function Head
+             (Source : String;
+              Count  : Natural;
+              Pad    : Character := Space) return String;
+ 
+      Or it may appear on its own as a separate line.  This form is
+      preferred when putting the return on the same line as the last
+      parameter would result in an overlong line.  The return type may
+      optionally be aligned with the types of the parameters (usually we
+      do this aligning if it results only in a small number of extra
+      spaces, and otherwise we don’t attempt to align).  So two
+      alternative forms for the above spec are:
+ 
+           function Head
+             (Source : String;
+              Count  : Natural;
+              Pad    : Character := Space)
+              return   String;
+ 
+           function Head
+             (Source : String;
+              Count  : Natural;
+              Pad    : Character := Space)
+              return String;
+ 
+ 
+ File: gnat-style.info,  Node: Subprogram Bodies,  Prev: Subprogram Declarations,  Up: Subprograms
+ 
+ 6.2 Subprogram Bodies
+ =====================
+ 
+    * Function and procedure bodies should usually be sorted
+      alphabetically.  Do not attempt to sort them in some logical order
+      by functionality.  For a sequence of subprogram specs, a general
+      alphabetical sorting is also usually appropriate, but occasionally
+      it makes sense to group by major function, with appropriate
+      headers.
+ 
+    * All subprograms have a header giving the function name, with the
+      following format:
+ 
+           -----------------
+           -- My_Function --
+           -----------------
+ 
+           procedure My_Function is
+           begin
+             ...
+           end My_Function;
+ 
+      Note that the name in the header is preceded by a single space, not
+      two spaces as for other comments.  These headers are used on nested
+      subprograms as well as outer level subprograms.  They may also be
+      used as headers for sections of comments, or collections of
+      declarations that are related.
+ 
+    * Every subprogram body must have a preceding subprogram_declaration,
+      which includes proper client documentation so that you do not need
+      to read the subprogram body in order to understand what the
+      subprogram does and how to call it.  All subprograms should be
+      documented, without exceptions.
+ 
+    * A sequence of declarations may optionally be separated from the
+      following begin by a blank line.  Just as we optionally allow blank
+      lines in general between declarations, this blank line should be
+      present only if it improves readability.  Generally we avoid this
+      blank line if the declarative part is small (one or two lines) and
+      the body has no blank lines, and we include it if the declarative
+      part is long or if the body has blank lines.
+ 
+    * If the declarations in a subprogram contain at least one nested
+      subprogram body, then just before the ‘begin’ of the enclosing
+      subprogram, there is a comment line and a blank line:
+ 
+           --  Start of processing for Enclosing_Subprogram
+ 
+           begin
+             ...
+           end Enclosing_Subprogram;
+ 
+    * When nested subprograms are present, variables that are referenced
+      by any nested subprogram should precede the nested subprogram
+      specs.  For variables that are not referenced by nested procedures,
+      the declarations can either also be before any of the nested
+      subprogram specs (this is the old style, more generally used).  Or
+      then can come just before the begin, with a header.  The following
+      example shows the two possible styles:
+ 
+           procedure Style1 is
+              Var_Referenced_In_Nested      : Integer;
+              Var_Referenced_Only_In_Style1 : Integer;
+ 
+              proc Nested;
+              --  Comments ...
+ 
+              ------------
+              -- Nested --
+              ------------
+ 
+              procedure Nested is
+              begin
+                 ...
+              end Nested;
+ 
+           --  Start of processing for Style1
+ 
+           begin
+              ...
+           end Style1;
+ 
+           procedure Style2 is
+              Var_Referenced_In_Nested : Integer;
+ 
+              proc Nested;
+              --  Comments ...
+ 
+              ------------
+              -- Nested --
+              ------------
+ 
+              procedure Nested is
+              begin
+                 ...
+              end Nested;
+ 
+              --  Local variables
+ 
+              Var_Referenced_Only_In_Style2 : Integer;
+ 
+           --  Start of processing for Style2
+ 
+           begin
+              ...
+           end Style2;
+ 
+      For new code, we generally prefer Style2, but we do not insist on
+      modifying all legacy occurrences of Style1, which is still much
+      more common in the sources.
+ 
+ 
+ File: gnat-style.info,  Node: Packages and Visibility Rules,  Next: Program Structure and Compilation Issues,  Prev: Subprograms,  Up: Top
+ 
+ 7 Packages and Visibility Rules
+ *******************************
+ 
+    * All program units and subprograms have their name at the end:
+ 
+           package P is
+              ...
+           end P;
+ 
+    * We will use the style of ‘use’ -ing ‘with’ -ed packages, with the
+      context clauses looking like:
+ 
+           with A; use A;
+           with B; use B;
+ 
+    * Names declared in the visible part of packages should be unique, to
+      prevent name clashes when the packages are ‘use’ d.
+ 
+           package Entity is
+              type Entity_Kind is ...;
+              ...
+           end Entity;
+ 
+    * After the file header comment, the context clause and unit
+      specification should be the first thing in a program_unit.
+ 
+    * Preelaborate, Pure and Elaborate_Body pragmas should be added right
+      after the package name, indented an extra level and using the
+      parameterless form:
+ 
+           package Preelaborate_Package is
+              pragma Preelaborate;
+              ...
+           end Preelaborate_Package;
+ 
+ 
+ File: gnat-style.info,  Node: Program Structure and Compilation Issues,  Next: Index,  Prev: Packages and Visibility Rules,  Up: Top
+ 
+ 8 Program Structure and Compilation Issues
+ ******************************************
+ 
+    * Every GNAT source file must be compiled with the ‘-gnatg’ switch to
+      check the coding style.  (Note that you should look at style.adb to
+      see the lexical rules enforced by ‘-gnatg’ ).
+ 
+    * Each source file should contain only one compilation unit.
+ 
+    * Filenames should be 8 or fewer characters, followed by the ‘.adb’
+      extension for a body or ‘.ads’ for a spec.
+ 
+    * Unit names should be distinct when ‘krunch’ed to 8 characters (see
+      krunch.ads) and the filenames should match the unit name, except
+      that they are all lower case.
+ 
+ * Menu:
+ 
+ * GNU Free Documentation License::
+ 
+ 
+ File: gnat-style.info,  Node: GNU Free Documentation License,  Up: Program Structure and Compilation Issues
+ 
+ 8.1 GNU Free Documentation License
+ ==================================
+ 
+ Version 1.3, 3 November 2008
+ 
+ Copyright 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc
+ ‘https://fsf.org/’
+ 
+ Everyone is permitted to copy and distribute verbatim copies of this
+ license document, but changing it is not allowed.
+ 
+ ‘Preamble’
+ 
+ The purpose of this License is to make a manual, textbook, or other
+ functional and useful document “free” in the sense of freedom: to assure
+ everyone the effective freedom to copy and redistribute it, with or
+ without modifying it, either commercially or noncommercially.
+ Secondarily, this License preserves for the author and publisher a way
+ to get credit for their work, while not being considered responsible for
+ modifications made by others.
+ 
+ This License is a kind of “copyleft”, which means that derivative works
+ of the document must themselves be free in the same sense.  It
+ complements the GNU General Public License, which is a copyleft license
+ designed for free software.
+ 
+ We have designed this License in order to use it for manuals for free
+ software, because free software needs free documentation: a free program
+ should come with manuals providing the same freedoms that the software
+ does.  But this License is not limited to software manuals; it can be
+ used for any textual work, regardless of subject matter or whether it is
+ published as a printed book.  We recommend this License principally for
+ works whose purpose is instruction or reference.
+ 
+ ‘1.  APPLICABILITY AND DEFINITIONS’
+ 
+ This License applies to any manual or other work, in any medium, that
+ contains a notice placed by the copyright holder saying it can be
+ distributed under the terms of this License.  Such a notice grants a
+ world-wide, royalty-free license, unlimited in duration, to use that
+ work under the conditions stated herein.  The ‘Document’, below, refers
+ to any such manual or work.  Any member of the public is a licensee, and
+ is addressed as “‘you’”.  You accept the license if you copy, modify or
+ distribute the work in a way requiring permission under copyright law.
+ 
+ A “‘Modified Version’” of the Document means any work containing the
+ Document or a portion of it, either copied verbatim, or with
+ modifications and/or translated into another language.
+ 
+ A “‘Secondary Section’” is a named appendix or a front-matter section of
+ the Document that deals exclusively with the relationship of the
+ publishers or authors of the Document to the Document’s overall subject
+ (or to related matters) and contains nothing that could fall directly
+ within that overall subject.  (Thus, if the Document is in part a
+ textbook of mathematics, a Secondary Section may not explain any
+ mathematics.)  The relationship could be a matter of historical
+ connection with the subject or with related matters, or of legal,
+ commercial, philosophical, ethical or political position regarding them.
+ 
+ The “‘Invariant Sections’” are certain Secondary Sections whose titles
+ are designated, as being those of Invariant Sections, in the notice that
+ says that the Document is released under this License.  If a section
+ does not fit the above definition of Secondary then it is not allowed to
+ be designated as Invariant.  The Document may contain zero Invariant
+ Sections.  If the Document does not identify any Invariant Sections then
+ there are none.
+ 
+ The “‘Cover Texts’” are certain short passages of text that are listed,
+ as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+ the Document is released under this License.  A Front-Cover Text may be
+ at most 5 words, and a Back-Cover Text may be at most 25 words.
+ 
+ A “‘Transparent’” copy of the Document means a machine-readable copy,
+ represented in a format whose specification is available to the general
+ public, that is suitable for revising the document straightforwardly
+ with generic text editors or (for images composed of pixels) generic
+ paint programs or (for drawings) some widely available drawing editor,
+ and that is suitable for input to text formatters or for automatic
+ translation to a variety of formats suitable for input to text
+ formatters.  A copy made in an otherwise Transparent file format whose
+ markup, or absence of markup, has been arranged to thwart or discourage
+ subsequent modification by readers is not Transparent.  An image format
+ is not Transparent if used for any substantial amount of text.  A copy
+ that is not “Transparent” is called ‘Opaque’.
+ 
+ Examples of suitable formats for Transparent copies include plain ASCII
+ without markup, Texinfo input format, LaTeX input format, SGML or XML
+ using a publicly available DTD, and standard-conforming simple HTML,
+ PostScript or PDF designed for human modification.  Examples of
+ transparent image formats include PNG, XCF and JPG. Opaque formats
+ include proprietary formats that can be read and edited only by
+ proprietary word processors, SGML or XML for which the DTD and/or
+ processing tools are not generally available, and the machine-generated
+ HTML, PostScript or PDF produced by some word processors for output
+ purposes only.
+ 
+ The “‘Title Page’” means, for a printed book, the title page itself,
+ plus such following pages as are needed to hold, legibly, the material
+ this License requires to appear in the title page.  For works in formats
+ which do not have any title page as such, “Title Page” means the text
+ near the most prominent appearance of the work’s title, preceding the
+ beginning of the body of the text.
+ 
+ The “‘publisher’” means any person or entity that distributes copies of
+ the Document to the public.
+ 
+ A section “‘Entitled XYZ’” means a named subunit of the Document whose
+ title either is precisely XYZ or contains XYZ in parentheses following
+ text that translates XYZ in another language.  (Here XYZ stands for a
+ specific section name mentioned below, such as “‘Acknowledgements’”,
+ “‘Dedications’”, “‘Endorsements’”, or “‘History’”.)  To “‘Preserve the
+ Title’” of such a section when you modify the Document means that it
+ remains a section “Entitled XYZ” according to this definition.
+ 
+ The Document may include Warranty Disclaimers next to the notice which
+ states that this License applies to the Document.  These Warranty
+ Disclaimers are considered to be included by reference in this License,
+ but only as regards disclaiming warranties: any other implication that
+ these Warranty Disclaimers may have is void and has no effect on the
+ meaning of this License.
+ 
+ ‘2.  VERBATIM COPYING’
+ 
+ You may copy and distribute the Document in any medium, either
+ commercially or noncommercially, provided that this License, the
+ copyright notices, and the license notice saying this License applies to
+ the Document are reproduced in all copies, and that you add no other
+ conditions whatsoever to those of this License.  You may not use
+ technical measures to obstruct or control the reading or further copying
+ of the copies you make or distribute.  However, you may accept
+ compensation in exchange for copies.  If you distribute a large enough
+ number of copies you must also follow the conditions in section 3.
+ 
+ You may also lend copies, under the same conditions stated above, and
+ you may publicly display copies.
+ 
+ ‘3.  COPYING IN QUANTITY’
+ 
+ If you publish printed copies (or copies in media that commonly have
+ printed covers) of the Document, numbering more than 100, and the
+ Document’s license notice requires Cover Texts, you must enclose the
+ copies in covers that carry, clearly and legibly, all these Cover Texts:
+ Front-Cover Texts on the front cover, and Back-Cover Texts on the back
+ cover.  Both covers must also clearly and legibly identify you as the
+ publisher of these copies.  The front cover must present the full title
+ with all words of the title equally prominent and visible.  You may add
+ other material on the covers in addition.  Copying with changes limited
+ to the covers, as long as they preserve the title of the Document and
+ satisfy these conditions, can be treated as verbatim copying in other
+ respects.
+ 
+ If the required texts for either cover are too voluminous to fit
+ legibly, you should put the first ones listed (as many as fit
+ reasonably) on the actual cover, and continue the rest onto adjacent
+ pages.
+ 
+ If you publish or distribute Opaque copies of the Document numbering
+ more than 100, you must either include a machine-readable Transparent
+ copy along with each Opaque copy, or state in or with each Opaque copy a
+ computer-network location from which the general network-using public
+ has access to download using public-standard network protocols a
+ complete Transparent copy of the Document, free of added material.  If
+ you use the latter option, you must take reasonably prudent steps, when
+ you begin distribution of Opaque copies in quantity, to ensure that this
+ Transparent copy will remain thus accessible at the stated location
+ until at least one year after the last time you distribute an Opaque
+ copy (directly or through your agents or retailers) of that edition to
+ the public.
+ 
+ It is requested, but not required, that you contact the authors of the
+ Document well before redistributing any large number of copies, to give
+ them a chance to provide you with an updated version of the Document.
+ 
+ ‘4.  MODIFICATIONS’
+ 
+ You may copy and distribute a Modified Version of the Document under the
+ conditions of sections 2 and 3 above, provided that you release the
+ Modified Version under precisely this License, with the Modified Version
+ filling the role of the Document, thus licensing distribution and
+ modification of the Modified Version to whoever possesses a copy of it.
+ In addition, you must do these things in the Modified Version:
+ 
+   A. Use in the Title Page (and on the covers, if any) a title distinct
+      from that of the Document, and from those of previous versions
+      (which should, if there were any, be listed in the History section
+      of the Document).  You may use the same title as a previous version
+      if the original publisher of that version gives permission.
+ 
+   B. List on the Title Page, as authors, one or more persons or entities
+      responsible for authorship of the modifications in the Modified
+      Version, together with at least five of the principal authors of
+      the Document (all of its principal authors, if it has fewer than
+      five), unless they release you from this requirement.
+ 
+   C. State on the Title page the name of the publisher of the Modified
+      Version, as the publisher.
+ 
+   D. Preserve all the copyright notices of the Document.
+ 
+   E. Add an appropriate copyright notice for your modifications adjacent
+      to the other copyright notices.
+ 
+   F. Include, immediately after the copyright notices, a license notice
+      giving the public permission to use the Modified Version under the
+      terms of this License, in the form shown in the Addendum below.
+ 
+   G. Preserve in that license notice the full lists of Invariant
+      Sections and required Cover Texts given in the Document’s license
+      notice.
+ 
+   H. Include an unaltered copy of this License.
+ 
+   I. Preserve the section Entitled “History”, Preserve its Title, and
+      add to it an item stating at least the title, year, new authors,
+      and publisher of the Modified Version as given on the Title Page.
+      If there is no section Entitled “History” in the Document, create
+      one stating the title, year, authors, and publisher of the Document
+      as given on its Title Page, then add an item describing the
+      Modified Version as stated in the previous sentence.
+ 
+   J. Preserve the network location, if any, given in the Document for
+      public access to a Transparent copy of the Document, and likewise
+      the network locations given in the Document for previous versions
+      it was based on.  These may be placed in the “History” section.
+      You may omit a network location for a work that was published at
+      least four years before the Document itself, or if the original
+      publisher of the version it refers to gives permission.
+ 
+   K. For any section Entitled “Acknowledgements” or “Dedications”,
+      Preserve the Title of the section, and preserve in the section all
+      the substance and tone of each of the contributor acknowledgements
+      and/or dedications given therein.
+ 
+   L. Preserve all the Invariant Sections of the Document, unaltered in
+      their text and in their titles.  Section numbers or the equivalent
+      are not considered part of the section titles.
+ 
+   M. Delete any section Entitled “Endorsements”.  Such a section may not
+      be included in the Modified Version.
+ 
+   N. Do not retitle any existing section to be Entitled “Endorsements”
+      or to conflict in title with any Invariant Section.
+ 
+   O. Preserve any Warranty Disclaimers.
+ 
+ If the Modified Version includes new front-matter sections or appendices
+ that qualify as Secondary Sections and contain no material copied from
+ the Document, you may at your option designate some or all of these
+ sections as invariant.  To do this, add their titles to the list of
+ Invariant Sections in the Modified Version’s license notice.  These
+ titles must be distinct from any other section titles.
+ 
+ You may add a section Entitled “Endorsements”, provided it contains
+ nothing but endorsements of your Modified Version by various parties—for
+ example, statements of peer review or that the text has been approved by
+ an organization as the authoritative definition of a standard.
+ 
+ You may add a passage of up to five words as a Front-Cover Text, and a
+ passage of up to 25 words as a Back-Cover Text, to the end of the list
+ of Cover Texts in the Modified Version.  Only one passage of Front-Cover
+ Text and one of Back-Cover Text may be added by (or through arrangements
+ made by) any one entity.  If the Document already includes a cover text
+ for the same cover, previously added by you or by arrangement made by
+ the same entity you are acting on behalf of, you may not add another;
+ but you may replace the old one, on explicit permission from the
+ previous publisher that added the old one.
+ 
+ The author(s) and publisher(s) of the Document do not by this License
+ give permission to use their names for publicity for or to assert or
+ imply endorsement of any Modified Version.
+ 
+ ‘5.  COMBINING DOCUMENTS’
+ 
+ You may combine the Document with other documents released under this
+ License, under the terms defined in section 4 above for modified
+ versions, provided that you include in the combination all of the
+ Invariant Sections of all of the original documents, unmodified, and
+ list them all as Invariant Sections of your combined work in its license
+ notice, and that you preserve all their Warranty Disclaimers.
+ 
+ The combined work need only contain one copy of this License, and
+ multiple identical Invariant Sections may be replaced with a single
+ copy.  If there are multiple Invariant Sections with the same name but
+ different contents, make the title of each such section unique by adding
+ at the end of it, in parentheses, the name of the original author or
+ publisher of that section if known, or else a unique number.  Make the
+ same adjustment to the section titles in the list of Invariant Sections
+ in the license notice of the combined work.
+ 
+ In the combination, you must combine any sections Entitled “History” in
+ the various original documents, forming one section Entitled “History”;
+ likewise combine any sections Entitled “Acknowledgements”, and any
+ sections Entitled “Dedications”.  You must delete all sections Entitled
+ “Endorsements”.
+ 
+ ‘6.  COLLECTIONS OF DOCUMENTS’
+ 
+ You may make a collection consisting of the Document and other documents
+ released under this License, and replace the individual copies of this
+ License in the various documents with a single copy that is included in
+ the collection, provided that you follow the rules of this License for
+ verbatim copying of each of the documents in all other respects.
+ 
+ You may extract a single document from such a collection, and distribute
+ it individually under this License, provided you insert a copy of this
+ License into the extracted document, and follow this License in all
+ other respects regarding verbatim copying of that document.
+ 
+ ‘7.  AGGREGATION WITH INDEPENDENT WORKS’
+ 
+ A compilation of the Document or its derivatives with other separate and
+ independent documents or works, in or on a volume of a storage or
+ distribution medium, is called an “aggregate” if the copyright resulting
+ from the compilation is not used to limit the legal rights of the
+ compilation’s users beyond what the individual works permit.  When the
+ Document is included in an aggregate, this License does not apply to the
+ other works in the aggregate which are not themselves derivative works
+ of the Document.
+ 
+ If the Cover Text requirement of section 3 is applicable to these copies
+ of the Document, then if the Document is less than one half of the
+ entire aggregate, the Document’s Cover Texts may be placed on covers
+ that bracket the Document within the aggregate, or the electronic
+ equivalent of covers if the Document is in electronic form.  Otherwise
+ they must appear on printed covers that bracket the whole aggregate.
+ 
+ ‘8.  TRANSLATION’
+ 
+ Translation is considered a kind of modification, so you may distribute
+ translations of the Document under the terms of section 4.  Replacing
+ Invariant Sections with translations requires special permission from
+ their copyright holders, but you may include translations of some or all
+ Invariant Sections in addition to the original versions of these
+ Invariant Sections.  You may include a translation of this License, and
+ all the license notices in the Document, and any Warranty Disclaimers,
+ provided that you also include the original English version of this
+ License and the original versions of those notices and disclaimers.  In
+ case of a disagreement between the translation and the original version
+ of this License or a notice or disclaimer, the original version will
+ prevail.
+ 
+ If a section in the Document is Entitled “Acknowledgements”,
+ “Dedications”, or “History”, the requirement (section 4) to Preserve its
+ Title (section 1) will typically require changing the actual title.
+ 
+ ‘9.  TERMINATION’
+ 
+ You may not copy, modify, sublicense, or distribute the Document except
+ as expressly provided under this License.  Any attempt otherwise to
+ copy, modify, sublicense, or distribute it is void, and will
+ automatically terminate your rights under this License.
+ 
+ However, if you cease all violation of this License, then your license
+ from a particular copyright holder is reinstated (a) provisionally,
+ unless and until the copyright holder explicitly and finally terminates
+ your license, and (b) permanently, if the copyright holder fails to
+ notify you of the violation by some reasonable means prior to 60 days
+ after the cessation.
+ 
+ Moreover, your license from a particular copyright holder is reinstated
+ permanently if the copyright holder notifies you of the violation by
+ some reasonable means, this is the first time you have received notice
+ of violation of this License (for any work) from that copyright holder,
+ and you cure the violation prior to 30 days after your receipt of the
+ notice.
+ 
+ Termination of your rights under this section does not terminate the
+ licenses of parties who have received copies or rights from you under
+ this License.  If your rights have been terminated and not permanently
+ reinstated, receipt of a copy of some or all of the same material does
+ not give you any rights to use it.
+ 
+ ‘10.  FUTURE REVISIONS OF THIS LICENSE’
+ 
+ The Free Software Foundation may publish new, revised versions of the
+ GNU Free Documentation License from time to time.  Such new versions
+ will be similar in spirit to the present version, but may differ in
+ detail to address new problems or concerns.  See
+ ‘https://www.gnu.org/copyleft/’.
+ 
+ Each version of the License is given a distinguishing version number.
+ If the Document specifies that a particular numbered version of this
+ License “or any later version” applies to it, you have the option of
+ following the terms and conditions either of that specified version or
+ of any later version that has been published (not as a draft) by the
+ Free Software Foundation.  If the Document does not specify a version
+ number of this License, you may choose any version ever published (not
+ as a draft) by the Free Software Foundation.  If the Document specifies
+ that a proxy can decide which future versions of this License can be
+ used, that proxy’s public statement of acceptance of a version
+ permanently authorizes you to choose that version for the Document.
+ 
+ ‘11.  RELICENSING’
+ 
+ “Massive Multiauthor Collaboration Site” (or “MMC Site”) means any World
+ Wide Web server that publishes copyrightable works and also provides
+ prominent facilities for anybody to edit those works.  A public wiki
+ that anybody can edit is an example of such a server.  A “Massive
+ Multiauthor Collaboration” (or “MMC”) contained in the site means any
+ set of copyrightable works thus published on the MMC site.
+ 
+ “CC-BY-SA” means the Creative Commons Attribution-Share Alike 3.0
+ license published by Creative Commons Corporation, a not-for-profit
+ corporation with a principal place of business in San Francisco,
+ California, as well as future copyleft versions of that license
+ published by that same organization.
+ 
+ “Incorporate” means to publish or republish a Document, in whole or in
+ part, as part of another Document.
+ 
+ An MMC is “eligible for relicensing” if it is licensed under this
+ License, and if all works that were first published under this License
+ somewhere other than this MMC, and subsequently incorporated in whole or
+ in part into the MMC, (1) had no cover texts or invariant sections, and
+ (2) were thus incorporated prior to November 1, 2008.
+ 
+ The operator of an MMC Site may republish an MMC contained in the site
+ under CC-BY-SA on the same site at any time before August 1, 2009,
+ provided the MMC is eligible for relicensing.
+ 
+ ‘ADDENDUM: How to use this License for your documents’
+ 
+ To use this License in a document you have written, include a copy of
+ the License in the document and put the following copyright and license
+ notices just after the title page:
+ 
+      Copyright © YEAR YOUR NAME. Permission is granted to copy,
+      distribute and/or modify this document under the terms of the GNU
+      Free Documentation License, Version 1.3 or any later version
+      published by the Free Software Foundation; with no Invariant
+      Sections, no Front-Cover Texts, and no Back-Cover Texts.  A copy of
+      the license is included in the section entitled “GNU Free
+      Documentation License”.
+ 
+ If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+ replace the “with … Texts.” line with this:
+ 
+      with the Invariant Sections being LIST THEIR TITLES, with the
+      Front-Cover Texts being LIST, and with the Back-Cover Texts being
+      LIST.
+ 
+ If you have Invariant Sections without Cover Texts, or some other
+ combination of the three, merge those two alternatives to suit the
+ situation.
+ 
+ If your document contains nontrivial examples of program code, we
+ recommend releasing these examples in parallel under your choice of free
+ software license, such as the GNU General Public License, to permit
+ their use in free software.
+ 
+ 
+ File: gnat-style.info,  Node: Index,  Prev: Program Structure and Compilation Issues,  Up: Top
+ 
+ Index
+ *****
+ 
+ [index]
+ * Menu:
+ 
+ * -gnatg option (to gcc):                Program Structure and Compilation Issues.
+                                                                (line 10)
+ * Alignment (in a block statement):      Block Statements.     (line 10)
+ * Alignment (in a loop statement):       Loop Statements.      (line 17)
+ * Alignment (in an if statement):        If Statements.        (line 10)
+ * Alignment (in comments):               Comments.             (line 51)
+ * Alignment (in declarations):           Declarations and Types.
+                                                                (line  9)
+ * ASCII:                                 Character Set and Separators.
+                                                                (line  6)
+ * Blank lines (in an if statement):      If Statements.        (line 78)
+ * Blank lines (in comments):             Comments.             (line 25)
+ * Blank lines (in subprogram bodies):    Subprogram Bodies.    (line 37)
+ * Casing (for identifiers):              Identifiers.          (line  9)
+ * Casing (for reserved words):           Reserved Words.       (line  8)
+ * Casing (in comments):                  Comments.             (line 16)
+ * Character set:                         Character Set and Separators.
+                                                                (line  6)
+ * End-of-line:                           Character Set and Separators.
+                                                                (line  6)
+ * File name length:                      Program Structure and Compilation Issues.
+                                                                (line 15)
+ * Hiding of outer entities:              Declarations and Types.
+                                                                (line 20)
+ * Indentation:                           Character Set and Separators.
+                                                                (line  6)
+ * Indentation <1>:                       Comments.             (line 25)
+ * Indentation (in if statements):        If Statements.        (line 57)
+ * krunch.ads file:                       Program Structure and Compilation Issues.
+                                                                (line 19)
+ * Line length:                           Character Set and Separators.
+                                                                (line  6)
+ * Name clash avoidance:                  Packages and Visibility Rules.
+                                                                (line 21)
+ * Operators:                             Expressions and Names.
+                                                                (line 12)
+ * Parenthesization of expressions:       Expressions and Names.
+                                                                (line 17)
+ * Separators:                            Character Set and Separators.
+                                                                (line  6)
+ * Short-circuit forms:                   If Statements.        (line 55)
+ * style.adb file:                        Character Set and Separators.
+                                                                (line 25)
+ * style.adb file <1>:                    Program Structure and Compilation Issues.
+                                                                (line 10)
+ * Underscores:                           Identifiers.          (line 15)
+ * Underscores <1>:                       Numeric Literals.     (line  9)
+ * use clauses:                           Packages and Visibility Rules.
+                                                                (line 15)
+ 
+ 
+ 
+ Tag Table:
+ Node: Top366
+ Ref: gnat-style doc661
+ Ref: 0661
+ Node: General877
+ Ref: gnat-style general965
+ Ref: 1965
+ Ref: gnat-style gnat-coding-style-a-guide-for-gnat-developers965
+ Ref: 2965
+ Node: Lexical Elements1479
+ Ref: gnat-style lexical-elements1586
+ Ref: 31586
+ Node: Character Set and Separators1737
+ Ref: gnat-style character-set-and-separators1842
+ Ref: 41842
+ Node: Identifiers2838
+ Ref: gnat-style identifiers2968
+ Ref: 52968
+ Node: Numeric Literals4041
+ Ref: gnat-style numeric-literals4157
+ Ref: 64157
+ Node: Reserved Words4367
+ Ref: gnat-style reserved-words4480
+ Ref: 74480
+ Node: Comments4698
+ Ref: gnat-style comments4786
+ Ref: 84786
+ Node: Declarations and Types7318
+ Ref: gnat-style declarations-and-types7439
+ Ref: 97439
+ Node: Expressions and Names8918
+ Ref: gnat-style expressions-and-names9033
+ Ref: a9033
+ Node: Statements9561
+ Ref: gnat-style statements9665
+ Ref: b9665
+ Node: Simple and Compound Statements9816
+ Ref: gnat-style simple-and-compound-statements9919
+ Ref: c9919
+ Node: If Statements10169
+ Ref: gnat-style if-statements10296
+ Ref: d10296
+ Node: Case Statements12771
+ Ref: gnat-style case-statements12883
+ Ref: e12883
+ Node: Loop Statements13244
+ Ref: gnat-style loop-statements13359
+ Ref: f13359
+ Node: Block Statements14056
+ Ref: gnat-style block-statements14147
+ Ref: 1014147
+ Node: Subprograms14487
+ Ref: gnat-style subprograms14599
+ Ref: 1114599
+ Node: Subprogram Declarations14688
+ Ref: gnat-style subprogram-declarations14789
+ Ref: 1214789
+ Node: Subprogram Bodies16449
+ Ref: gnat-style subprogram-bodies16550
+ Ref: 1316550
+ Node: Packages and Visibility Rules20286
+ Ref: gnat-style packages-and-visibility-rules20428
+ Ref: 1420428
+ Node: Program Structure and Compilation Issues21451
+ Ref: gnat-style program-structure-and-compilation-issues21587
+ Ref: 1521587
+ Node: GNU Free Documentation License22300
+ Ref: share/gnu_free_documentation_license doc22411
+ Ref: 1622411
+ Ref: share/gnu_free_documentation_license gnu-fdl22411
+ Ref: 1722411
+ Ref: share/gnu_free_documentation_license gnu-free-documentation-license22411
+ Ref: 1822411
+ Node: Index45871
+ 
+ End Tag Table
+ 
+ 
+ Local Variables:
+ coding: utf-8
+ End:
diff -Nrcpad gcc-13.3.0/gcc/doc/gnat_rm.info gcc-13.4.0/gcc/doc/gnat_rm.info
*** gcc-13.3.0/gcc/doc/gnat_rm.info	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/doc/gnat_rm.info	Thu Jun  5 16:30:26 2025
***************
*** 0 ****
--- 1,29894 ----
+ This is gnat_rm.info, produced by makeinfo version 6.8 from
+ gnat_rm.texi.
+ 
+      GNAT Reference Manual , Dec 01, 2022
+ 
+      AdaCore
+ 
+      Copyright © 2008-2023, Free Software Foundation
+ 
+ INFO-DIR-SECTION GNU Ada Tools
+ START-INFO-DIR-ENTRY
+ * gnat_rm: (gnat_rm.info). gnat_rm
+ END-INFO-DIR-ENTRY
+ 
+ 
+    Generated by Sphinx 5.2.3.
+ 
+ 
+ File: gnat_rm.info,  Node: Top,  Next: About This Guide,  Up: (dir)
+ 
+ GNAT Reference Manual
+ *********************
+ 
+      GNAT Reference Manual , Dec 01, 2022
+ 
+      AdaCore
+ 
+      Copyright © 2008-2023, Free Software Foundation
+ 
+ ‘GNAT, The GNU Ada Development Environment’
+ 
+ GCC version 13.4.0
+ AdaCore
+ 
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3 or
+ any later version published by the Free Software Foundation; with no
+ Invariant Sections, with the Front-Cover Texts being “GNAT Reference
+ Manual”, and with no Back-Cover Texts.  A copy of the license is
+ included in the section entitled *note GNU Free Documentation License:
+ 1.
+ 
+ * Menu:
+ 
+ * About This Guide::
+ * Implementation Defined Pragmas::
+ * Implementation Defined Aspects::
+ * Implementation Defined Attributes::
+ * Standard and Implementation Defined Restrictions::
+ * Implementation Advice::
+ * Implementation Defined Characteristics::
+ * Intrinsic Subprograms::
+ * Representation Clauses and Pragmas::
+ * Standard Library Routines::
+ * The Implementation of Standard I/O::
+ * The GNAT Library::
+ * Interfacing to Other Languages::
+ * Specialized Needs Annexes::
+ * Implementation of Specific Ada Features::
+ * Implementation of Ada 2012 Features::
+ * Security Hardening Features::
+ * Obsolescent Features::
+ * Compatibility and Porting Guide::
+ * GNU Free Documentation License::
+ * Index::
+ 
+  — The Detailed Node Listing —
+ 
+ About This Guide
+ 
+ * What This Reference Manual Contains::
+ * Conventions::
+ * Related Information::
+ 
+ Implementation Defined Pragmas
+ 
+ * Pragma Abort_Defer::
+ * Pragma Abstract_State::
+ * Pragma Ada_83::
+ * Pragma Ada_95::
+ * Pragma Ada_05::
+ * Pragma Ada_2005::
+ * Pragma Ada_12::
+ * Pragma Ada_2012::
+ * Pragma Ada_2022::
+ * Pragma Aggregate_Individually_Assign::
+ * Pragma Allow_Integer_Address::
+ * Pragma Annotate::
+ * Pragma Assert::
+ * Pragma Assert_And_Cut::
+ * Pragma Assertion_Policy::
+ * Pragma Assume::
+ * Pragma Assume_No_Invalid_Values::
+ * Pragma Async_Readers::
+ * Pragma Async_Writers::
+ * Pragma Attribute_Definition::
+ * Pragma C_Pass_By_Copy::
+ * Pragma Check::
+ * Pragma Check_Float_Overflow::
+ * Pragma Check_Name::
+ * Pragma Check_Policy::
+ * Pragma Comment::
+ * Pragma Common_Object::
+ * Pragma Compile_Time_Error::
+ * Pragma Compile_Time_Warning::
+ * Pragma Complete_Representation::
+ * Pragma Complex_Representation::
+ * Pragma Component_Alignment::
+ * Pragma Constant_After_Elaboration::
+ * Pragma Contract_Cases::
+ * Pragma Convention_Identifier::
+ * Pragma CPP_Class::
+ * Pragma CPP_Constructor::
+ * Pragma CPP_Virtual::
+ * Pragma CPP_Vtable::
+ * Pragma CPU::
+ * Pragma Deadline_Floor::
+ * Pragma Debug::
+ * Pragma Debug_Policy::
+ * Pragma Default_Initial_Condition::
+ * Pragma Default_Scalar_Storage_Order::
+ * Pragma Default_Storage_Pool::
+ * Pragma Depends::
+ * Pragma Detect_Blocking::
+ * Pragma Disable_Atomic_Synchronization::
+ * Pragma Dispatching_Domain::
+ * Pragma Effective_Reads::
+ * Pragma Effective_Writes::
+ * Pragma Elaboration_Checks::
+ * Pragma Eliminate::
+ * Pragma Enable_Atomic_Synchronization::
+ * Pragma Export_Function::
+ * Pragma Export_Object::
+ * Pragma Export_Procedure::
+ * Pragma Export_Valued_Procedure::
+ * Pragma Extend_System::
+ * Pragma Extensions_Allowed::
+ * Pragma Extensions_Visible::
+ * Pragma External::
+ * Pragma External_Name_Casing::
+ * Pragma Fast_Math::
+ * Pragma Favor_Top_Level::
+ * Pragma Finalize_Storage_Only::
+ * Pragma Float_Representation::
+ * Pragma Ghost::
+ * Pragma Global::
+ * Pragma Ident::
+ * Pragma Ignore_Pragma::
+ * Pragma Implementation_Defined::
+ * Pragma Implemented::
+ * Pragma Implicit_Packing::
+ * Pragma Import_Function::
+ * Pragma Import_Object::
+ * Pragma Import_Procedure::
+ * Pragma Import_Valued_Procedure::
+ * Pragma Independent::
+ * Pragma Independent_Components::
+ * Pragma Initial_Condition::
+ * Pragma Initialize_Scalars::
+ * Pragma Initializes::
+ * Pragma Inline_Always::
+ * Pragma Inline_Generic::
+ * Pragma Interface::
+ * Pragma Interface_Name::
+ * Pragma Interrupt_Handler::
+ * Pragma Interrupt_State::
+ * Pragma Invariant::
+ * Pragma Keep_Names::
+ * Pragma License::
+ * Pragma Link_With::
+ * Pragma Linker_Alias::
+ * Pragma Linker_Constructor::
+ * Pragma Linker_Destructor::
+ * Pragma Linker_Section::
+ * Pragma Lock_Free::
+ * Pragma Loop_Invariant::
+ * Pragma Loop_Optimize::
+ * Pragma Loop_Variant::
+ * Pragma Machine_Attribute::
+ * Pragma Main::
+ * Pragma Main_Storage::
+ * Pragma Max_Queue_Length::
+ * Pragma No_Body::
+ * Pragma No_Caching::
+ * Pragma No_Component_Reordering::
+ * Pragma No_Elaboration_Code_All::
+ * Pragma No_Heap_Finalization::
+ * Pragma No_Inline::
+ * Pragma No_Return::
+ * Pragma No_Strict_Aliasing::
+ * Pragma No_Tagged_Streams::
+ * Pragma Normalize_Scalars::
+ * Pragma Obsolescent::
+ * Pragma Optimize_Alignment::
+ * Pragma Ordered::
+ * Pragma Overflow_Mode::
+ * Pragma Overriding_Renamings::
+ * Pragma Part_Of::
+ * Pragma Partition_Elaboration_Policy::
+ * Pragma Passive::
+ * Pragma Persistent_BSS::
+ * Pragma Post::
+ * Pragma Postcondition::
+ * Pragma Post_Class::
+ * Pragma Pre::
+ * Pragma Precondition::
+ * Pragma Predicate::
+ * Pragma Predicate_Failure::
+ * Pragma Preelaborable_Initialization::
+ * Pragma Prefix_Exception_Messages::
+ * Pragma Pre_Class::
+ * Pragma Priority_Specific_Dispatching::
+ * Pragma Profile::
+ * Pragma Profile_Warnings::
+ * Pragma Propagate_Exceptions::
+ * Pragma Provide_Shift_Operators::
+ * Pragma Psect_Object::
+ * Pragma Pure_Function::
+ * Pragma Rational::
+ * Pragma Ravenscar::
+ * Pragma Refined_Depends::
+ * Pragma Refined_Global::
+ * Pragma Refined_Post::
+ * Pragma Refined_State::
+ * Pragma Relative_Deadline::
+ * Pragma Remote_Access_Type::
+ * Pragma Rename_Pragma::
+ * Pragma Restricted_Run_Time::
+ * Pragma Restriction_Warnings::
+ * Pragma Reviewable::
+ * Pragma Secondary_Stack_Size::
+ * Pragma Share_Generic::
+ * Pragma Shared::
+ * Pragma Short_Circuit_And_Or::
+ * Pragma Short_Descriptors::
+ * Pragma Simple_Storage_Pool_Type::
+ * Pragma Source_File_Name::
+ * Pragma Source_File_Name_Project::
+ * Pragma Source_Reference::
+ * Pragma SPARK_Mode::
+ * Pragma Static_Elaboration_Desired::
+ * Pragma Stream_Convert::
+ * Pragma Style_Checks::
+ * Pragma Subtitle::
+ * Pragma Suppress::
+ * Pragma Suppress_All::
+ * Pragma Suppress_Debug_Info::
+ * Pragma Suppress_Exception_Locations::
+ * Pragma Suppress_Initialization::
+ * Pragma Task_Name::
+ * Pragma Task_Storage::
+ * Pragma Test_Case::
+ * Pragma Thread_Local_Storage::
+ * Pragma Time_Slice::
+ * Pragma Title::
+ * Pragma Type_Invariant::
+ * Pragma Type_Invariant_Class::
+ * Pragma Unchecked_Union::
+ * Pragma Unevaluated_Use_Of_Old::
+ * Pragma Unimplemented_Unit::
+ * Pragma Universal_Aliasing::
+ * Pragma Unmodified::
+ * Pragma Unreferenced::
+ * Pragma Unreferenced_Objects::
+ * Pragma Unreserve_All_Interrupts::
+ * Pragma Unsuppress::
+ * Pragma Unused::
+ * Pragma Use_VADS_Size::
+ * Pragma Validity_Checks::
+ * Pragma Volatile::
+ * Pragma Volatile_Full_Access::
+ * Pragma Volatile_Function::
+ * Pragma Warning_As_Error::
+ * Pragma Warnings::
+ * Pragma Weak_External::
+ * Pragma Wide_Character_Encoding::
+ 
+ Implementation Defined Aspects
+ 
+ * Aspect Abstract_State::
+ * Aspect Annotate::
+ * Aspect Async_Readers::
+ * Aspect Async_Writers::
+ * Aspect Constant_After_Elaboration::
+ * Aspect Contract_Cases::
+ * Aspect Depends::
+ * Aspect Default_Initial_Condition::
+ * Aspect Dimension::
+ * Aspect Dimension_System::
+ * Aspect Disable_Controlled::
+ * Aspect Effective_Reads::
+ * Aspect Effective_Writes::
+ * Aspect Extensions_Visible::
+ * Aspect Favor_Top_Level::
+ * Aspect Ghost::
+ * Aspect Global::
+ * Aspect Initial_Condition::
+ * Aspect Initializes::
+ * Aspect Inline_Always::
+ * Aspect Invariant::
+ * Aspect Invariant’Class::
+ * Aspect Iterable::
+ * Aspect Linker_Section::
+ * Aspect Lock_Free::
+ * Aspect Max_Queue_Length::
+ * Aspect No_Caching::
+ * Aspect No_Elaboration_Code_All::
+ * Aspect No_Inline::
+ * Aspect No_Tagged_Streams::
+ * Aspect No_Task_Parts::
+ * Aspect Object_Size::
+ * Aspect Obsolescent::
+ * Aspect Part_Of::
+ * Aspect Persistent_BSS::
+ * Aspect Predicate::
+ * Aspect Pure_Function::
+ * Aspect Refined_Depends::
+ * Aspect Refined_Global::
+ * Aspect Refined_Post::
+ * Aspect Refined_State::
+ * Aspect Relaxed_Initialization::
+ * Aspect Remote_Access_Type::
+ * Aspect Secondary_Stack_Size::
+ * Aspect Scalar_Storage_Order::
+ * Aspect Shared::
+ * Aspect Simple_Storage_Pool::
+ * Aspect Simple_Storage_Pool_Type::
+ * Aspect SPARK_Mode::
+ * Aspect Suppress_Debug_Info::
+ * Aspect Suppress_Initialization::
+ * Aspect Test_Case::
+ * Aspect Thread_Local_Storage::
+ * Aspect Universal_Aliasing::
+ * Aspect Unmodified::
+ * Aspect Unreferenced::
+ * Aspect Unreferenced_Objects::
+ * Aspect Value_Size::
+ * Aspect Volatile_Full_Access::
+ * Aspect Volatile_Function::
+ * Aspect Warnings::
+ 
+ Implementation Defined Attributes
+ 
+ * Attribute Abort_Signal::
+ * Attribute Address_Size::
+ * Attribute Asm_Input::
+ * Attribute Asm_Output::
+ * Attribute Atomic_Always_Lock_Free::
+ * Attribute Bit::
+ * Attribute Bit_Position::
+ * Attribute Code_Address::
+ * Attribute Compiler_Version::
+ * Attribute Constrained::
+ * Attribute Default_Bit_Order::
+ * Attribute Default_Scalar_Storage_Order::
+ * Attribute Deref::
+ * Attribute Descriptor_Size::
+ * Attribute Elaborated::
+ * Attribute Elab_Body::
+ * Attribute Elab_Spec::
+ * Attribute Elab_Subp_Body::
+ * Attribute Emax::
+ * Attribute Enabled::
+ * Attribute Enum_Rep::
+ * Attribute Enum_Val::
+ * Attribute Epsilon::
+ * Attribute Fast_Math::
+ * Attribute Finalization_Size::
+ * Attribute Fixed_Value::
+ * Attribute From_Any::
+ * Attribute Has_Access_Values::
+ * Attribute Has_Discriminants::
+ * Attribute Has_Tagged_Values::
+ * Attribute Img::
+ * Attribute Initialized::
+ * Attribute Integer_Value::
+ * Attribute Invalid_Value::
+ * Attribute Iterable::
+ * Attribute Large::
+ * Attribute Library_Level::
+ * Attribute Loop_Entry::
+ * Attribute Machine_Size::
+ * Attribute Mantissa::
+ * Attribute Maximum_Alignment::
+ * Attribute Max_Integer_Size::
+ * Attribute Mechanism_Code::
+ * Attribute Null_Parameter::
+ * Attribute Object_Size::
+ * Attribute Old::
+ * Attribute Passed_By_Reference::
+ * Attribute Pool_Address::
+ * Attribute Range_Length::
+ * Attribute Restriction_Set::
+ * Attribute Result::
+ * Attribute Safe_Emax::
+ * Attribute Safe_Large::
+ * Attribute Safe_Small::
+ * Attribute Scalar_Storage_Order::
+ * Attribute Simple_Storage_Pool::
+ * Attribute Small::
+ * Attribute Small_Denominator::
+ * Attribute Small_Numerator::
+ * Attribute Storage_Unit::
+ * Attribute Stub_Type::
+ * Attribute System_Allocator_Alignment::
+ * Attribute Target_Name::
+ * Attribute To_Address::
+ * Attribute To_Any::
+ * Attribute Type_Class::
+ * Attribute Type_Key::
+ * Attribute TypeCode::
+ * Attribute Unconstrained_Array::
+ * Attribute Universal_Literal_String::
+ * Attribute Unrestricted_Access::
+ * Attribute Update::
+ * Attribute Valid_Value::
+ * Attribute Valid_Scalars::
+ * Attribute VADS_Size::
+ * Attribute Value_Size::
+ * Attribute Wchar_T_Size::
+ * Attribute Word_Size::
+ 
+ Standard and Implementation Defined Restrictions
+ 
+ * Partition-Wide Restrictions::
+ * Program Unit Level Restrictions::
+ 
+ Partition-Wide Restrictions
+ 
+ * Immediate_Reclamation::
+ * Max_Asynchronous_Select_Nesting::
+ * Max_Entry_Queue_Length::
+ * Max_Protected_Entries::
+ * Max_Select_Alternatives::
+ * Max_Storage_At_Blocking::
+ * Max_Task_Entries::
+ * Max_Tasks::
+ * No_Abort_Statements::
+ * No_Access_Parameter_Allocators::
+ * No_Access_Subprograms::
+ * No_Allocators::
+ * No_Anonymous_Allocators::
+ * No_Asynchronous_Control::
+ * No_Calendar::
+ * No_Coextensions::
+ * No_Default_Initialization::
+ * No_Delay::
+ * No_Dependence::
+ * No_Direct_Boolean_Operators::
+ * No_Dispatch::
+ * No_Dispatching_Calls::
+ * No_Dynamic_Attachment::
+ * No_Dynamic_Priorities::
+ * No_Entry_Calls_In_Elaboration_Code::
+ * No_Enumeration_Maps::
+ * No_Exception_Handlers::
+ * No_Exception_Propagation::
+ * No_Exception_Registration::
+ * No_Exceptions::
+ * No_Finalization::
+ * No_Fixed_Point::
+ * No_Floating_Point::
+ * No_Implicit_Conditionals::
+ * No_Implicit_Dynamic_Code::
+ * No_Implicit_Heap_Allocations::
+ * No_Implicit_Protected_Object_Allocations::
+ * No_Implicit_Task_Allocations::
+ * No_Initialize_Scalars::
+ * No_IO::
+ * No_Local_Allocators::
+ * No_Local_Protected_Objects::
+ * No_Local_Tagged_Types::
+ * No_Local_Timing_Events::
+ * No_Long_Long_Integers::
+ * No_Multiple_Elaboration::
+ * No_Nested_Finalization::
+ * No_Protected_Type_Allocators::
+ * No_Protected_Types::
+ * No_Recursion::
+ * No_Reentrancy::
+ * No_Relative_Delay::
+ * No_Requeue_Statements::
+ * No_Secondary_Stack::
+ * No_Select_Statements::
+ * No_Specific_Termination_Handlers::
+ * No_Specification_of_Aspect::
+ * No_Standard_Allocators_After_Elaboration::
+ * No_Standard_Storage_Pools::
+ * No_Stream_Optimizations::
+ * No_Streams::
+ * No_Tagged_Type_Registration::
+ * No_Task_Allocators::
+ * No_Task_At_Interrupt_Priority::
+ * No_Task_Attributes_Package::
+ * No_Task_Hierarchy::
+ * No_Task_Termination::
+ * No_Tasking::
+ * No_Terminate_Alternatives::
+ * No_Unchecked_Access::
+ * No_Unchecked_Conversion::
+ * No_Unchecked_Deallocation::
+ * No_Use_Of_Entity::
+ * Pure_Barriers::
+ * Simple_Barriers::
+ * Static_Priorities::
+ * Static_Storage_Size::
+ 
+ Program Unit Level Restrictions
+ 
+ * No_Elaboration_Code::
+ * No_Dynamic_Accessibility_Checks::
+ * No_Dynamic_Sized_Objects::
+ * No_Entry_Queue::
+ * No_Implementation_Aspect_Specifications::
+ * No_Implementation_Attributes::
+ * No_Implementation_Identifiers::
+ * No_Implementation_Pragmas::
+ * No_Implementation_Restrictions::
+ * No_Implementation_Units::
+ * No_Implicit_Aliasing::
+ * No_Implicit_Loops::
+ * No_Obsolescent_Features::
+ * No_Wide_Characters::
+ * Static_Dispatch_Tables::
+ * SPARK_05::
+ 
+ Implementation Advice
+ 
+ * RM 1.1.3(20); Error Detection: RM 1 1 3 20 Error Detection.
+ * RM 1.1.3(31); Child Units: RM 1 1 3 31 Child Units.
+ * RM 1.1.5(12); Bounded Errors: RM 1 1 5 12 Bounded Errors.
+ * RM 2.8(16); Pragmas: RM 2 8 16 Pragmas.
+ * RM 2.8(17-19); Pragmas: RM 2 8 17-19 Pragmas.
+ * RM 3.5.2(5); Alternative Character Sets: RM 3 5 2 5 Alternative Character Sets.
+ * RM 3.5.4(28); Integer Types: RM 3 5 4 28 Integer Types.
+ * RM 3.5.4(29); Integer Types: RM 3 5 4 29 Integer Types.
+ * RM 3.5.5(8); Enumeration Values: RM 3 5 5 8 Enumeration Values.
+ * RM 3.5.7(17); Float Types: RM 3 5 7 17 Float Types.
+ * RM 3.6.2(11); Multidimensional Arrays: RM 3 6 2 11 Multidimensional Arrays.
+ * RM 9.6(30-31); Duration’Small: RM 9 6 30-31 Duration’Small.
+ * RM 10.2.1(12); Consistent Representation: RM 10 2 1 12 Consistent Representation.
+ * RM 11.4.1(19); Exception Information: RM 11 4 1 19 Exception Information.
+ * RM 11.5(28); Suppression of Checks: RM 11 5 28 Suppression of Checks.
+ * RM 13.1 (21-24); Representation Clauses: RM 13 1 21-24 Representation Clauses.
+ * RM 13.2(6-8); Packed Types: RM 13 2 6-8 Packed Types.
+ * RM 13.3(14-19); Address Clauses: RM 13 3 14-19 Address Clauses.
+ * RM 13.3(29-35); Alignment Clauses: RM 13 3 29-35 Alignment Clauses.
+ * RM 13.3(42-43); Size Clauses: RM 13 3 42-43 Size Clauses.
+ * RM 13.3(50-56); Size Clauses: RM 13 3 50-56 Size Clauses.
+ * RM 13.3(71-73); Component Size Clauses: RM 13 3 71-73 Component Size Clauses.
+ * RM 13.4(9-10); Enumeration Representation Clauses: RM 13 4 9-10 Enumeration Representation Clauses.
+ * RM 13.5.1(17-22); Record Representation Clauses: RM 13 5 1 17-22 Record Representation Clauses.
+ * RM 13.5.2(5); Storage Place Attributes: RM 13 5 2 5 Storage Place Attributes.
+ * RM 13.5.3(7-8); Bit Ordering: RM 13 5 3 7-8 Bit Ordering.
+ * RM 13.7(37); Address as Private: RM 13 7 37 Address as Private.
+ * RM 13.7.1(16); Address Operations: RM 13 7 1 16 Address Operations.
+ * RM 13.9(14-17); Unchecked Conversion: RM 13 9 14-17 Unchecked Conversion.
+ * RM 13.11(23-25); Implicit Heap Usage: RM 13 11 23-25 Implicit Heap Usage.
+ * RM 13.11.2(17); Unchecked Deallocation: RM 13 11 2 17 Unchecked Deallocation.
+ * RM 13.13.2(1.6); Stream Oriented Attributes: RM 13 13 2 1 6 Stream Oriented Attributes.
+ * RM A.1(52); Names of Predefined Numeric Types: RM A 1 52 Names of Predefined Numeric Types.
+ * RM A.3.2(49); Ada.Characters.Handling: RM A 3 2 49 Ada Characters Handling.
+ * RM A.4.4(106); Bounded-Length String Handling: RM A 4 4 106 Bounded-Length String Handling.
+ * RM A.5.2(46-47); Random Number Generation: RM A 5 2 46-47 Random Number Generation.
+ * RM A.10.7(23); Get_Immediate: RM A 10 7 23 Get_Immediate.
+ * RM A.18; Containers: RM A 18 Containers.
+ * RM B.1(39-41); Pragma Export: RM B 1 39-41 Pragma Export.
+ * RM B.2(12-13); Package Interfaces: RM B 2 12-13 Package Interfaces.
+ * RM B.3(63-71); Interfacing with C: RM B 3 63-71 Interfacing with C.
+ * RM B.4(95-98); Interfacing with COBOL: RM B 4 95-98 Interfacing with COBOL.
+ * RM B.5(22-26); Interfacing with Fortran: RM B 5 22-26 Interfacing with Fortran.
+ * RM C.1(3-5); Access to Machine Operations: RM C 1 3-5 Access to Machine Operations.
+ * RM C.1(10-16); Access to Machine Operations: RM C 1 10-16 Access to Machine Operations.
+ * RM C.3(28); Interrupt Support: RM C 3 28 Interrupt Support.
+ * RM C.3.1(20-21); Protected Procedure Handlers: RM C 3 1 20-21 Protected Procedure Handlers.
+ * RM C.3.2(25); Package Interrupts: RM C 3 2 25 Package Interrupts.
+ * RM C.4(14); Pre-elaboration Requirements: RM C 4 14 Pre-elaboration Requirements.
+ * RM C.5(8); Pragma Discard_Names: RM C 5 8 Pragma Discard_Names.
+ * RM C.7.2(30); The Package Task_Attributes: RM C 7 2 30 The Package Task_Attributes.
+ * RM D.3(17); Locking Policies: RM D 3 17 Locking Policies.
+ * RM D.4(16); Entry Queuing Policies: RM D 4 16 Entry Queuing Policies.
+ * RM D.6(9-10); Preemptive Abort: RM D 6 9-10 Preemptive Abort.
+ * RM D.7(21); Tasking Restrictions: RM D 7 21 Tasking Restrictions.
+ * RM D.8(47-49); Monotonic Time: RM D 8 47-49 Monotonic Time.
+ * RM E.5(28-29); Partition Communication Subsystem: RM E 5 28-29 Partition Communication Subsystem.
+ * RM F(7); COBOL Support: RM F 7 COBOL Support.
+ * RM F.1(2); Decimal Radix Support: RM F 1 2 Decimal Radix Support.
+ * RM G; Numerics: RM G Numerics.
+ * RM G.1.1(56-58); Complex Types: RM G 1 1 56-58 Complex Types.
+ * RM G.1.2(49); Complex Elementary Functions: RM G 1 2 49 Complex Elementary Functions.
+ * RM G.2.4(19); Accuracy Requirements: RM G 2 4 19 Accuracy Requirements.
+ * RM G.2.6(15); Complex Arithmetic Accuracy: RM G 2 6 15 Complex Arithmetic Accuracy.
+ * RM H.6(15/2); Pragma Partition_Elaboration_Policy: RM H 6 15/2 Pragma Partition_Elaboration_Policy.
+ 
+ Intrinsic Subprograms
+ 
+ * Intrinsic Operators::
+ * Compilation_ISO_Date::
+ * Compilation_Date::
+ * Compilation_Time::
+ * Enclosing_Entity::
+ * Exception_Information::
+ * Exception_Message::
+ * Exception_Name::
+ * File::
+ * Line::
+ * Shifts and Rotates::
+ * Source_Location::
+ 
+ Representation Clauses and Pragmas
+ 
+ * Alignment Clauses::
+ * Size Clauses::
+ * Storage_Size Clauses::
+ * Size of Variant Record Objects::
+ * Biased Representation::
+ * Value_Size and Object_Size Clauses::
+ * Component_Size Clauses::
+ * Bit_Order Clauses::
+ * Effect of Bit_Order on Byte Ordering::
+ * Pragma Pack for Arrays::
+ * Pragma Pack for Records::
+ * Record Representation Clauses::
+ * Handling of Records with Holes::
+ * Enumeration Clauses::
+ * Address Clauses::
+ * Use of Address Clauses for Memory-Mapped I/O::
+ * Effect of Convention on Representation::
+ * Conventions and Anonymous Access Types::
+ * Determining the Representations chosen by GNAT::
+ 
+ The Implementation of Standard I/O
+ 
+ * Standard I/O Packages::
+ * FORM Strings::
+ * Direct_IO::
+ * Sequential_IO::
+ * Text_IO::
+ * Wide_Text_IO::
+ * Wide_Wide_Text_IO::
+ * Stream_IO::
+ * Text Translation::
+ * Shared Files::
+ * Filenames encoding::
+ * File content encoding::
+ * Open Modes::
+ * Operations on C Streams::
+ * Interfacing to C Streams::
+ 
+ Text_IO
+ 
+ * Stream Pointer Positioning::
+ * Reading and Writing Non-Regular Files::
+ * Get_Immediate::
+ * Treating Text_IO Files as Streams::
+ * Text_IO Extensions::
+ * Text_IO Facilities for Unbounded Strings::
+ 
+ Wide_Text_IO
+ 
+ * Stream Pointer Positioning: Stream Pointer Positioning<2>.
+ * Reading and Writing Non-Regular Files: Reading and Writing Non-Regular Files<2>.
+ 
+ Wide_Wide_Text_IO
+ 
+ * Stream Pointer Positioning: Stream Pointer Positioning<3>.
+ * Reading and Writing Non-Regular Files: Reading and Writing Non-Regular Files<3>.
+ 
+ The GNAT Library
+ 
+ * Ada.Characters.Latin_9 (a-chlat9.ads): Ada Characters Latin_9 a-chlat9 ads.
+ * Ada.Characters.Wide_Latin_1 (a-cwila1.ads): Ada Characters Wide_Latin_1 a-cwila1 ads.
+ * Ada.Characters.Wide_Latin_9 (a-cwila9.ads): Ada Characters Wide_Latin_9 a-cwila9 ads.
+ * Ada.Characters.Wide_Wide_Latin_1 (a-chzla1.ads): Ada Characters Wide_Wide_Latin_1 a-chzla1 ads.
+ * Ada.Characters.Wide_Wide_Latin_9 (a-chzla9.ads): Ada Characters Wide_Wide_Latin_9 a-chzla9 ads.
+ * Ada.Containers.Bounded_Holders (a-coboho.ads): Ada Containers Bounded_Holders a-coboho ads.
+ * Ada.Command_Line.Environment (a-colien.ads): Ada Command_Line Environment a-colien ads.
+ * Ada.Command_Line.Remove (a-colire.ads): Ada Command_Line Remove a-colire ads.
+ * Ada.Command_Line.Response_File (a-clrefi.ads): Ada Command_Line Response_File a-clrefi ads.
+ * Ada.Direct_IO.C_Streams (a-diocst.ads): Ada Direct_IO C_Streams a-diocst ads.
+ * Ada.Exceptions.Is_Null_Occurrence (a-einuoc.ads): Ada Exceptions Is_Null_Occurrence a-einuoc ads.
+ * Ada.Exceptions.Last_Chance_Handler (a-elchha.ads): Ada Exceptions Last_Chance_Handler a-elchha ads.
+ * Ada.Exceptions.Traceback (a-exctra.ads): Ada Exceptions Traceback a-exctra ads.
+ * Ada.Sequential_IO.C_Streams (a-siocst.ads): Ada Sequential_IO C_Streams a-siocst ads.
+ * Ada.Streams.Stream_IO.C_Streams (a-ssicst.ads): Ada Streams Stream_IO C_Streams a-ssicst ads.
+ * Ada.Strings.Unbounded.Text_IO (a-suteio.ads): Ada Strings Unbounded Text_IO a-suteio ads.
+ * Ada.Strings.Wide_Unbounded.Wide_Text_IO (a-swuwti.ads): Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads.
+ * Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO (a-szuzti.ads): Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads.
+ * Ada.Task_Initialization (a-tasini.ads): Ada Task_Initialization a-tasini ads.
+ * Ada.Text_IO.C_Streams (a-tiocst.ads): Ada Text_IO C_Streams a-tiocst ads.
+ * Ada.Text_IO.Reset_Standard_Files (a-tirsfi.ads): Ada Text_IO Reset_Standard_Files a-tirsfi ads.
+ * Ada.Wide_Characters.Unicode (a-wichun.ads): Ada Wide_Characters Unicode a-wichun ads.
+ * Ada.Wide_Text_IO.C_Streams (a-wtcstr.ads): Ada Wide_Text_IO C_Streams a-wtcstr ads.
+ * Ada.Wide_Text_IO.Reset_Standard_Files (a-wrstfi.ads): Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads.
+ * Ada.Wide_Wide_Characters.Unicode (a-zchuni.ads): Ada Wide_Wide_Characters Unicode a-zchuni ads.
+ * Ada.Wide_Wide_Text_IO.C_Streams (a-ztcstr.ads): Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads.
+ * Ada.Wide_Wide_Text_IO.Reset_Standard_Files (a-zrstfi.ads): Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads.
+ * GNAT.Altivec (g-altive.ads): GNAT Altivec g-altive ads.
+ * GNAT.Altivec.Conversions (g-altcon.ads): GNAT Altivec Conversions g-altcon ads.
+ * GNAT.Altivec.Vector_Operations (g-alveop.ads): GNAT Altivec Vector_Operations g-alveop ads.
+ * GNAT.Altivec.Vector_Types (g-alvety.ads): GNAT Altivec Vector_Types g-alvety ads.
+ * GNAT.Altivec.Vector_Views (g-alvevi.ads): GNAT Altivec Vector_Views g-alvevi ads.
+ * GNAT.Array_Split (g-arrspl.ads): GNAT Array_Split g-arrspl ads.
+ * GNAT.AWK (g-awk.ads): GNAT AWK g-awk ads.
+ * GNAT.Binary_Search (g-binsea.ads): GNAT Binary_Search g-binsea ads.
+ * GNAT.Bind_Environment (g-binenv.ads): GNAT Bind_Environment g-binenv ads.
+ * GNAT.Branch_Prediction (g-brapre.ads): GNAT Branch_Prediction g-brapre ads.
+ * GNAT.Bounded_Buffers (g-boubuf.ads): GNAT Bounded_Buffers g-boubuf ads.
+ * GNAT.Bounded_Mailboxes (g-boumai.ads): GNAT Bounded_Mailboxes g-boumai ads.
+ * GNAT.Bubble_Sort (g-bubsor.ads): GNAT Bubble_Sort g-bubsor ads.
+ * GNAT.Bubble_Sort_A (g-busora.ads): GNAT Bubble_Sort_A g-busora ads.
+ * GNAT.Bubble_Sort_G (g-busorg.ads): GNAT Bubble_Sort_G g-busorg ads.
+ * GNAT.Byte_Order_Mark (g-byorma.ads): GNAT Byte_Order_Mark g-byorma ads.
+ * GNAT.Byte_Swapping (g-bytswa.ads): GNAT Byte_Swapping g-bytswa ads.
+ * GNAT.Calendar (g-calend.ads): GNAT Calendar g-calend ads.
+ * GNAT.Calendar.Time_IO (g-catiio.ads): GNAT Calendar Time_IO g-catiio ads.
+ * GNAT.CRC32 (g-crc32.ads): GNAT CRC32 g-crc32 ads.
+ * GNAT.Case_Util (g-casuti.ads): GNAT Case_Util g-casuti ads.
+ * GNAT.CGI (g-cgi.ads): GNAT CGI g-cgi ads.
+ * GNAT.CGI.Cookie (g-cgicoo.ads): GNAT CGI Cookie g-cgicoo ads.
+ * GNAT.CGI.Debug (g-cgideb.ads): GNAT CGI Debug g-cgideb ads.
+ * GNAT.Command_Line (g-comlin.ads): GNAT Command_Line g-comlin ads.
+ * GNAT.Compiler_Version (g-comver.ads): GNAT Compiler_Version g-comver ads.
+ * GNAT.Ctrl_C (g-ctrl_c.ads): GNAT Ctrl_C g-ctrl_c ads.
+ * GNAT.Current_Exception (g-curexc.ads): GNAT Current_Exception g-curexc ads.
+ * GNAT.Debug_Pools (g-debpoo.ads): GNAT Debug_Pools g-debpoo ads.
+ * GNAT.Debug_Utilities (g-debuti.ads): GNAT Debug_Utilities g-debuti ads.
+ * GNAT.Decode_String (g-decstr.ads): GNAT Decode_String g-decstr ads.
+ * GNAT.Decode_UTF8_String (g-deutst.ads): GNAT Decode_UTF8_String g-deutst ads.
+ * GNAT.Directory_Operations (g-dirope.ads): GNAT Directory_Operations g-dirope ads.
+ * GNAT.Directory_Operations.Iteration (g-diopit.ads): GNAT Directory_Operations Iteration g-diopit ads.
+ * GNAT.Dynamic_HTables (g-dynhta.ads): GNAT Dynamic_HTables g-dynhta ads.
+ * GNAT.Dynamic_Tables (g-dyntab.ads): GNAT Dynamic_Tables g-dyntab ads.
+ * GNAT.Encode_String (g-encstr.ads): GNAT Encode_String g-encstr ads.
+ * GNAT.Encode_UTF8_String (g-enutst.ads): GNAT Encode_UTF8_String g-enutst ads.
+ * GNAT.Exception_Actions (g-excact.ads): GNAT Exception_Actions g-excact ads.
+ * GNAT.Exception_Traces (g-exctra.ads): GNAT Exception_Traces g-exctra ads.
+ * GNAT.Exceptions (g-except.ads): GNAT Exceptions g-except ads.
+ * GNAT.Expect (g-expect.ads): GNAT Expect g-expect ads.
+ * GNAT.Expect.TTY (g-exptty.ads): GNAT Expect TTY g-exptty ads.
+ * GNAT.Float_Control (g-flocon.ads): GNAT Float_Control g-flocon ads.
+ * GNAT.Formatted_String (g-forstr.ads): GNAT Formatted_String g-forstr ads.
+ * GNAT.Generic_Fast_Math_Functions (g-gfmafu.ads): GNAT Generic_Fast_Math_Functions g-gfmafu ads.
+ * GNAT.Heap_Sort (g-heasor.ads): GNAT Heap_Sort g-heasor ads.
+ * GNAT.Heap_Sort_A (g-hesora.ads): GNAT Heap_Sort_A g-hesora ads.
+ * GNAT.Heap_Sort_G (g-hesorg.ads): GNAT Heap_Sort_G g-hesorg ads.
+ * GNAT.HTable (g-htable.ads): GNAT HTable g-htable ads.
+ * GNAT.IO (g-io.ads): GNAT IO g-io ads.
+ * GNAT.IO_Aux (g-io_aux.ads): GNAT IO_Aux g-io_aux ads.
+ * GNAT.Lock_Files (g-locfil.ads): GNAT Lock_Files g-locfil ads.
+ * GNAT.MBBS_Discrete_Random (g-mbdira.ads): GNAT MBBS_Discrete_Random g-mbdira ads.
+ * GNAT.MBBS_Float_Random (g-mbflra.ads): GNAT MBBS_Float_Random g-mbflra ads.
+ * GNAT.MD5 (g-md5.ads): GNAT MD5 g-md5 ads.
+ * GNAT.Memory_Dump (g-memdum.ads): GNAT Memory_Dump g-memdum ads.
+ * GNAT.Most_Recent_Exception (g-moreex.ads): GNAT Most_Recent_Exception g-moreex ads.
+ * GNAT.OS_Lib (g-os_lib.ads): GNAT OS_Lib g-os_lib ads.
+ * GNAT.Perfect_Hash_Generators (g-pehage.ads): GNAT Perfect_Hash_Generators g-pehage ads.
+ * GNAT.Random_Numbers (g-rannum.ads): GNAT Random_Numbers g-rannum ads.
+ * GNAT.Regexp (g-regexp.ads): GNAT Regexp g-regexp ads.
+ * GNAT.Registry (g-regist.ads): GNAT Registry g-regist ads.
+ * GNAT.Regpat (g-regpat.ads): GNAT Regpat g-regpat ads.
+ * GNAT.Rewrite_Data (g-rewdat.ads): GNAT Rewrite_Data g-rewdat ads.
+ * GNAT.Secondary_Stack_Info (g-sestin.ads): GNAT Secondary_Stack_Info g-sestin ads.
+ * GNAT.Semaphores (g-semaph.ads): GNAT Semaphores g-semaph ads.
+ * GNAT.Serial_Communications (g-sercom.ads): GNAT Serial_Communications g-sercom ads.
+ * GNAT.SHA1 (g-sha1.ads): GNAT SHA1 g-sha1 ads.
+ * GNAT.SHA224 (g-sha224.ads): GNAT SHA224 g-sha224 ads.
+ * GNAT.SHA256 (g-sha256.ads): GNAT SHA256 g-sha256 ads.
+ * GNAT.SHA384 (g-sha384.ads): GNAT SHA384 g-sha384 ads.
+ * GNAT.SHA512 (g-sha512.ads): GNAT SHA512 g-sha512 ads.
+ * GNAT.Signals (g-signal.ads): GNAT Signals g-signal ads.
+ * GNAT.Sockets (g-socket.ads): GNAT Sockets g-socket ads.
+ * GNAT.Source_Info (g-souinf.ads): GNAT Source_Info g-souinf ads.
+ * GNAT.Spelling_Checker (g-speche.ads): GNAT Spelling_Checker g-speche ads.
+ * GNAT.Spelling_Checker_Generic (g-spchge.ads): GNAT Spelling_Checker_Generic g-spchge ads.
+ * GNAT.Spitbol.Patterns (g-spipat.ads): GNAT Spitbol Patterns g-spipat ads.
+ * GNAT.Spitbol (g-spitbo.ads): GNAT Spitbol g-spitbo ads.
+ * GNAT.Spitbol.Table_Boolean (g-sptabo.ads): GNAT Spitbol Table_Boolean g-sptabo ads.
+ * GNAT.Spitbol.Table_Integer (g-sptain.ads): GNAT Spitbol Table_Integer g-sptain ads.
+ * GNAT.Spitbol.Table_VString (g-sptavs.ads): GNAT Spitbol Table_VString g-sptavs ads.
+ * GNAT.SSE (g-sse.ads): GNAT SSE g-sse ads.
+ * GNAT.SSE.Vector_Types (g-ssvety.ads): GNAT SSE Vector_Types g-ssvety ads.
+ * GNAT.String_Hash (g-strhas.ads): GNAT String_Hash g-strhas ads.
+ * GNAT.Strings (g-string.ads): GNAT Strings g-string ads.
+ * GNAT.String_Split (g-strspl.ads): GNAT String_Split g-strspl ads.
+ * GNAT.Table (g-table.ads): GNAT Table g-table ads.
+ * GNAT.Task_Lock (g-tasloc.ads): GNAT Task_Lock g-tasloc ads.
+ * GNAT.Time_Stamp (g-timsta.ads): GNAT Time_Stamp g-timsta ads.
+ * GNAT.Threads (g-thread.ads): GNAT Threads g-thread ads.
+ * GNAT.Traceback (g-traceb.ads): GNAT Traceback g-traceb ads.
+ * GNAT.Traceback.Symbolic (g-trasym.ads): GNAT Traceback Symbolic g-trasym ads.
+ * GNAT.UTF_32 (g-utf_32.ads): GNAT UTF_32 g-utf_32 ads.
+ * GNAT.UTF_32_Spelling_Checker (g-u3spch.ads): GNAT UTF_32_Spelling_Checker g-u3spch ads.
+ * GNAT.Wide_Spelling_Checker (g-wispch.ads): GNAT Wide_Spelling_Checker g-wispch ads.
+ * GNAT.Wide_String_Split (g-wistsp.ads): GNAT Wide_String_Split g-wistsp ads.
+ * GNAT.Wide_Wide_Spelling_Checker (g-zspche.ads): GNAT Wide_Wide_Spelling_Checker g-zspche ads.
+ * GNAT.Wide_Wide_String_Split (g-zistsp.ads): GNAT Wide_Wide_String_Split g-zistsp ads.
+ * Interfaces.C.Extensions (i-cexten.ads): Interfaces C Extensions i-cexten ads.
+ * Interfaces.C.Streams (i-cstrea.ads): Interfaces C Streams i-cstrea ads.
+ * Interfaces.Packed_Decimal (i-pacdec.ads): Interfaces Packed_Decimal i-pacdec ads.
+ * Interfaces.VxWorks (i-vxwork.ads): Interfaces VxWorks i-vxwork ads.
+ * Interfaces.VxWorks.Int_Connection (i-vxinco.ads): Interfaces VxWorks Int_Connection i-vxinco ads.
+ * Interfaces.VxWorks.IO (i-vxwoio.ads): Interfaces VxWorks IO i-vxwoio ads.
+ * System.Address_Image (s-addima.ads): System Address_Image s-addima ads.
+ * System.Assertions (s-assert.ads): System Assertions s-assert ads.
+ * System.Atomic_Counters (s-atocou.ads): System Atomic_Counters s-atocou ads.
+ * System.Memory (s-memory.ads): System Memory s-memory ads.
+ * System.Multiprocessors (s-multip.ads): System Multiprocessors s-multip ads.
+ * System.Multiprocessors.Dispatching_Domains (s-mudido.ads): System Multiprocessors Dispatching_Domains s-mudido ads.
+ * System.Partition_Interface (s-parint.ads): System Partition_Interface s-parint ads.
+ * System.Pool_Global (s-pooglo.ads): System Pool_Global s-pooglo ads.
+ * System.Pool_Local (s-pooloc.ads): System Pool_Local s-pooloc ads.
+ * System.Restrictions (s-restri.ads): System Restrictions s-restri ads.
+ * System.Rident (s-rident.ads): System Rident s-rident ads.
+ * System.Strings.Stream_Ops (s-ststop.ads): System Strings Stream_Ops s-ststop ads.
+ * System.Unsigned_Types (s-unstyp.ads): System Unsigned_Types s-unstyp ads.
+ * System.Wch_Cnv (s-wchcnv.ads): System Wch_Cnv s-wchcnv ads.
+ * System.Wch_Con (s-wchcon.ads): System Wch_Con s-wchcon ads.
+ 
+ Interfacing to Other Languages
+ 
+ * Interfacing to C::
+ * Interfacing to C++::
+ * Interfacing to COBOL::
+ * Interfacing to Fortran::
+ * Interfacing to non-GNAT Ada code::
+ 
+ Implementation of Specific Ada Features
+ 
+ * Machine Code Insertions::
+ * GNAT Implementation of Tasking::
+ * GNAT Implementation of Shared Passive Packages::
+ * Code Generation for Array Aggregates::
+ * The Size of Discriminated Records with Default Discriminants::
+ * Image Values For Nonscalar Types::
+ * Strict Conformance to the Ada Reference Manual::
+ 
+ GNAT Implementation of Tasking
+ 
+ * Mapping Ada Tasks onto the Underlying Kernel Threads::
+ * Ensuring Compliance with the Real-Time Annex::
+ * Support for Locking Policies::
+ 
+ Code Generation for Array Aggregates
+ 
+ * Static constant aggregates with static bounds::
+ * Constant aggregates with unconstrained nominal types::
+ * Aggregates with static bounds::
+ * Aggregates with nonstatic bounds::
+ * Aggregates in assignment statements::
+ 
+ Security Hardening Features
+ 
+ * Register Scrubbing::
+ * Stack Scrubbing::
+ * Hardened Conditionals::
+ * Hardened Booleans::
+ * Control Flow Redundancy::
+ 
+ Obsolescent Features
+ 
+ * pragma No_Run_Time::
+ * pragma Ravenscar::
+ * pragma Restricted_Run_Time::
+ * pragma Task_Info::
+ * package System.Task_Info (s-tasinf.ads): package System Task_Info s-tasinf ads.
+ 
+ Compatibility and Porting Guide
+ 
+ * Writing Portable Fixed-Point Declarations::
+ * Compatibility with Ada 83::
+ * Compatibility between Ada 95 and Ada 2005::
+ * Implementation-dependent characteristics::
+ * Compatibility with Other Ada Systems::
+ * Representation Clauses::
+ * Compatibility with HP Ada 83::
+ 
+ Compatibility with Ada 83
+ 
+ * Legal Ada 83 programs that are illegal in Ada 95::
+ * More deterministic semantics::
+ * Changed semantics::
+ * Other language compatibility issues::
+ 
+ Implementation-dependent characteristics
+ 
+ * Implementation-defined pragmas::
+ * Implementation-defined attributes::
+ * Libraries::
+ * Elaboration order::
+ * Target-specific aspects::
+ 
+ 
+ 
+ File: gnat_rm.info,  Node: About This Guide,  Next: Implementation Defined Pragmas,  Prev: Top,  Up: Top
+ 
+ 1 About This Guide
+ ******************
+ 
+ This manual contains useful information in writing programs using the
+ GNAT compiler.  It includes information on implementation dependent
+ characteristics of GNAT, including all the information required by Annex
+ M of the Ada language standard.
+ 
+ GNAT implements Ada 95, Ada 2005 and Ada 2012, and it may also be
+ invoked in Ada 83 compatibility mode.  By default, GNAT assumes Ada
+ 2012, but you can override with a compiler switch to explicitly specify
+ the language version.  (Please refer to the ‘GNAT User’s Guide’ for
+ details on these switches.)  Throughout this manual, references to ‘Ada’
+ without a year suffix apply to all the Ada versions of the language.
+ 
+ Ada is designed to be highly portable.  In general, a program will have
+ the same effect even when compiled by different compilers on different
+ platforms.  However, since Ada is designed to be used in a wide variety
+ of applications, it also contains a number of system dependent features
+ to be used in interfacing to the external world.
+ 
+ Note: Any program that makes use of implementation-dependent features
+ may be non-portable.  You should follow good programming practice and
+ isolate and clearly document any sections of your program that make use
+ of these features in a non-portable manner.
+ 
+ * Menu:
+ 
+ * What This Reference Manual Contains::
+ * Conventions::
+ * Related Information::
+ 
+ 
+ File: gnat_rm.info,  Node: What This Reference Manual Contains,  Next: Conventions,  Up: About This Guide
+ 
+ 1.1 What This Reference Manual Contains
+ =======================================
+ 
+ This reference manual contains the following chapters:
+ 
+    * *note Implementation Defined Pragmas: 7, lists GNAT
+      implementation-dependent pragmas, which can be used to extend and
+      enhance the functionality of the compiler.
+ 
+    * *note Implementation Defined Attributes: 8, lists GNAT
+      implementation-dependent attributes, which can be used to extend
+      and enhance the functionality of the compiler.
+ 
+    * *note Standard and Implementation Defined Restrictions: 9, lists
+      GNAT implementation-dependent restrictions, which can be used to
+      extend and enhance the functionality of the compiler.
+ 
+    * *note Implementation Advice: a, provides information on generally
+      desirable behavior which are not requirements that all compilers
+      must follow since it cannot be provided on all systems, or which
+      may be undesirable on some systems.
+ 
+    * *note Implementation Defined Characteristics: b, provides a guide
+      to minimizing implementation dependent features.
+ 
+    * *note Intrinsic Subprograms: c, describes the intrinsic subprograms
+      implemented by GNAT, and how they can be imported into user
+      application programs.
+ 
+    * *note Representation Clauses and Pragmas: d, describes in detail
+      the way that GNAT represents data, and in particular the exact set
+      of representation clauses and pragmas that is accepted.
+ 
+    * *note Standard Library Routines: e, provides a listing of packages
+      and a brief description of the functionality that is provided by
+      Ada’s extensive set of standard library routines as implemented by
+      GNAT.
+ 
+    * *note The Implementation of Standard I/O: f, details how the GNAT
+      implementation of the input-output facilities.
+ 
+    * *note The GNAT Library: 10, is a catalog of packages that
+      complement the Ada predefined library.
+ 
+    * *note Interfacing to Other Languages: 11, describes how programs
+      written in Ada using GNAT can be interfaced to other programming
+      languages.
+ 
+    * *note Specialized Needs Annexes: 12, describes the GNAT
+      implementation of all of the specialized needs annexes.
+ 
+    * *note Implementation of Specific Ada Features: 13, discusses issues
+      related to GNAT’s implementation of machine code insertions,
+      tasking, and several other features.
+ 
+    * *note Implementation of Ada 2012 Features: 14, describes the status
+      of the GNAT implementation of the Ada 2012 language standard.
+ 
+    * *note Security Hardening Features: 15. documents GNAT extensions
+      aimed at security hardening.
+ 
+    * *note Obsolescent Features: 16. documents implementation dependent
+      features, including pragmas and attributes, which are considered
+      obsolescent, since there are other preferred ways of achieving the
+      same results.  These obsolescent forms are retained for backwards
+      compatibility.
+ 
+    * *note Compatibility and Porting Guide: 17. presents some guidelines
+      for developing portable Ada code, describes the compatibility
+      issues that may arise between GNAT and other Ada compilation
+      systems (including those for Ada 83), and shows how GNAT can
+      expedite porting applications developed in other Ada environments.
+ 
+    * *note GNU Free Documentation License: 1. contains the license for
+      this document.
+ 
+ This reference manual assumes a basic familiarity with the Ada 95
+ language, as described in the ‘International Standard
+ ANSI/ISO/IEC-8652:1995’.  It does not require knowledge of the new
+ features introduced by Ada 2005 or Ada 2012.  All three reference
+ manuals are included in the GNAT documentation package.
+ 
+ 
+ File: gnat_rm.info,  Node: Conventions,  Next: Related Information,  Prev: What This Reference Manual Contains,  Up: About This Guide
+ 
+ 1.2 Conventions
+ ===============
+ 
+ Following are examples of the typographical and graphic conventions used
+ in this guide:
+ 
+    * ‘Functions’, ‘utility program names’, ‘standard names’, and
+      ‘classes’.
+ 
+    * ‘Option flags’
+ 
+    * ‘File names’
+ 
+    * ‘Variables’
+ 
+    * ‘Emphasis’
+ 
+    * [optional information or parameters]
+ 
+    * Examples are described by text
+ 
+           and then shown this way.
+ 
+    * Commands that are entered by the user are shown as preceded by a
+      prompt string comprising the ‘$’ character followed by a space.
+ 
+ 
+ File: gnat_rm.info,  Node: Related Information,  Prev: Conventions,  Up: About This Guide
+ 
+ 1.3 Related Information
+ =======================
+ 
+ See the following documents for further information on GNAT:
+ 
+    * ‘GNAT User’s Guide for Native Platforms’, which provides
+      information on how to use the GNAT development environment.
+ 
+    * ‘Ada 95 Reference Manual’, the Ada 95 programming language
+      standard.
+ 
+    * ‘Ada 95 Annotated Reference Manual’, which is an annotated version
+      of the Ada 95 standard.  The annotations describe detailed aspects
+      of the design decision, and in particular contain useful sections
+      on Ada 83 compatibility.
+ 
+    * ‘Ada 2005 Reference Manual’, the Ada 2005 programming language
+      standard.
+ 
+    * ‘Ada 2005 Annotated Reference Manual’, which is an annotated
+      version of the Ada 2005 standard.  The annotations describe
+      detailed aspects of the design decision.
+ 
+    * ‘Ada 2012 Reference Manual’, the Ada 2012 programming language
+      standard.
+ 
+    * ‘DEC Ada, Technical Overview and Comparison on DIGITAL Platforms’,
+      which contains specific information on compatibility between GNAT
+      and DEC Ada 83 systems.
+ 
+    * ‘DEC Ada, Language Reference Manual’, part number AA-PYZAB-TK,
+      which describes in detail the pragmas and attributes provided by
+      the DEC Ada 83 compiler system.
+ 
+ 
+ File: gnat_rm.info,  Node: Implementation Defined Pragmas,  Next: Implementation Defined Aspects,  Prev: About This Guide,  Up: Top
+ 
+ 2 Implementation Defined Pragmas
+ ********************************
+ 
+ Ada defines a set of pragmas that can be used to supply additional
+ information to the compiler.  These language defined pragmas are
+ implemented in GNAT and work as described in the Ada Reference Manual.
+ 
+ In addition, Ada allows implementations to define additional pragmas
+ whose meaning is defined by the implementation.  GNAT provides a number
+ of these implementation-defined pragmas, which can be used to extend and
+ enhance the functionality of the compiler.  This section of the GNAT
+ Reference Manual describes these additional pragmas.
+ 
+ Note that any program using these pragmas might not be portable to other
+ compilers (although GNAT implements this set of pragmas on all
+ platforms).  Therefore if portability to other compilers is an important
+ consideration, the use of these pragmas should be minimized.
+ 
+ * Menu:
+ 
+ * Pragma Abort_Defer::
+ * Pragma Abstract_State::
+ * Pragma Ada_83::
+ * Pragma Ada_95::
+ * Pragma Ada_05::
+ * Pragma Ada_2005::
+ * Pragma Ada_12::
+ * Pragma Ada_2012::
+ * Pragma Ada_2022::
+ * Pragma Aggregate_Individually_Assign::
+ * Pragma Allow_Integer_Address::
+ * Pragma Annotate::
+ * Pragma Assert::
+ * Pragma Assert_And_Cut::
+ * Pragma Assertion_Policy::
+ * Pragma Assume::
+ * Pragma Assume_No_Invalid_Values::
+ * Pragma Async_Readers::
+ * Pragma Async_Writers::
+ * Pragma Attribute_Definition::
+ * Pragma C_Pass_By_Copy::
+ * Pragma Check::
+ * Pragma Check_Float_Overflow::
+ * Pragma Check_Name::
+ * Pragma Check_Policy::
+ * Pragma Comment::
+ * Pragma Common_Object::
+ * Pragma Compile_Time_Error::
+ * Pragma Compile_Time_Warning::
+ * Pragma Complete_Representation::
+ * Pragma Complex_Representation::
+ * Pragma Component_Alignment::
+ * Pragma Constant_After_Elaboration::
+ * Pragma Contract_Cases::
+ * Pragma Convention_Identifier::
+ * Pragma CPP_Class::
+ * Pragma CPP_Constructor::
+ * Pragma CPP_Virtual::
+ * Pragma CPP_Vtable::
+ * Pragma CPU::
+ * Pragma Deadline_Floor::
+ * Pragma Debug::
+ * Pragma Debug_Policy::
+ * Pragma Default_Initial_Condition::
+ * Pragma Default_Scalar_Storage_Order::
+ * Pragma Default_Storage_Pool::
+ * Pragma Depends::
+ * Pragma Detect_Blocking::
+ * Pragma Disable_Atomic_Synchronization::
+ * Pragma Dispatching_Domain::
+ * Pragma Effective_Reads::
+ * Pragma Effective_Writes::
+ * Pragma Elaboration_Checks::
+ * Pragma Eliminate::
+ * Pragma Enable_Atomic_Synchronization::
+ * Pragma Export_Function::
+ * Pragma Export_Object::
+ * Pragma Export_Procedure::
+ * Pragma Export_Valued_Procedure::
+ * Pragma Extend_System::
+ * Pragma Extensions_Allowed::
+ * Pragma Extensions_Visible::
+ * Pragma External::
+ * Pragma External_Name_Casing::
+ * Pragma Fast_Math::
+ * Pragma Favor_Top_Level::
+ * Pragma Finalize_Storage_Only::
+ * Pragma Float_Representation::
+ * Pragma Ghost::
+ * Pragma Global::
+ * Pragma Ident::
+ * Pragma Ignore_Pragma::
+ * Pragma Implementation_Defined::
+ * Pragma Implemented::
+ * Pragma Implicit_Packing::
+ * Pragma Import_Function::
+ * Pragma Import_Object::
+ * Pragma Import_Procedure::
+ * Pragma Import_Valued_Procedure::
+ * Pragma Independent::
+ * Pragma Independent_Components::
+ * Pragma Initial_Condition::
+ * Pragma Initialize_Scalars::
+ * Pragma Initializes::
+ * Pragma Inline_Always::
+ * Pragma Inline_Generic::
+ * Pragma Interface::
+ * Pragma Interface_Name::
+ * Pragma Interrupt_Handler::
+ * Pragma Interrupt_State::
+ * Pragma Invariant::
+ * Pragma Keep_Names::
+ * Pragma License::
+ * Pragma Link_With::
+ * Pragma Linker_Alias::
+ * Pragma Linker_Constructor::
+ * Pragma Linker_Destructor::
+ * Pragma Linker_Section::
+ * Pragma Lock_Free::
+ * Pragma Loop_Invariant::
+ * Pragma Loop_Optimize::
+ * Pragma Loop_Variant::
+ * Pragma Machine_Attribute::
+ * Pragma Main::
+ * Pragma Main_Storage::
+ * Pragma Max_Queue_Length::
+ * Pragma No_Body::
+ * Pragma No_Caching::
+ * Pragma No_Component_Reordering::
+ * Pragma No_Elaboration_Code_All::
+ * Pragma No_Heap_Finalization::
+ * Pragma No_Inline::
+ * Pragma No_Return::
+ * Pragma No_Strict_Aliasing::
+ * Pragma No_Tagged_Streams::
+ * Pragma Normalize_Scalars::
+ * Pragma Obsolescent::
+ * Pragma Optimize_Alignment::
+ * Pragma Ordered::
+ * Pragma Overflow_Mode::
+ * Pragma Overriding_Renamings::
+ * Pragma Part_Of::
+ * Pragma Partition_Elaboration_Policy::
+ * Pragma Passive::
+ * Pragma Persistent_BSS::
+ * Pragma Post::
+ * Pragma Postcondition::
+ * Pragma Post_Class::
+ * Pragma Pre::
+ * Pragma Precondition::
+ * Pragma Predicate::
+ * Pragma Predicate_Failure::
+ * Pragma Preelaborable_Initialization::
+ * Pragma Prefix_Exception_Messages::
+ * Pragma Pre_Class::
+ * Pragma Priority_Specific_Dispatching::
+ * Pragma Profile::
+ * Pragma Profile_Warnings::
+ * Pragma Propagate_Exceptions::
+ * Pragma Provide_Shift_Operators::
+ * Pragma Psect_Object::
+ * Pragma Pure_Function::
+ * Pragma Rational::
+ * Pragma Ravenscar::
+ * Pragma Refined_Depends::
+ * Pragma Refined_Global::
+ * Pragma Refined_Post::
+ * Pragma Refined_State::
+ * Pragma Relative_Deadline::
+ * Pragma Remote_Access_Type::
+ * Pragma Rename_Pragma::
+ * Pragma Restricted_Run_Time::
+ * Pragma Restriction_Warnings::
+ * Pragma Reviewable::
+ * Pragma Secondary_Stack_Size::
+ * Pragma Share_Generic::
+ * Pragma Shared::
+ * Pragma Short_Circuit_And_Or::
+ * Pragma Short_Descriptors::
+ * Pragma Simple_Storage_Pool_Type::
+ * Pragma Source_File_Name::
+ * Pragma Source_File_Name_Project::
+ * Pragma Source_Reference::
+ * Pragma SPARK_Mode::
+ * Pragma Static_Elaboration_Desired::
+ * Pragma Stream_Convert::
+ * Pragma Style_Checks::
+ * Pragma Subtitle::
+ * Pragma Suppress::
+ * Pragma Suppress_All::
+ * Pragma Suppress_Debug_Info::
+ * Pragma Suppress_Exception_Locations::
+ * Pragma Suppress_Initialization::
+ * Pragma Task_Name::
+ * Pragma Task_Storage::
+ * Pragma Test_Case::
+ * Pragma Thread_Local_Storage::
+ * Pragma Time_Slice::
+ * Pragma Title::
+ * Pragma Type_Invariant::
+ * Pragma Type_Invariant_Class::
+ * Pragma Unchecked_Union::
+ * Pragma Unevaluated_Use_Of_Old::
+ * Pragma Unimplemented_Unit::
+ * Pragma Universal_Aliasing::
+ * Pragma Unmodified::
+ * Pragma Unreferenced::
+ * Pragma Unreferenced_Objects::
+ * Pragma Unreserve_All_Interrupts::
+ * Pragma Unsuppress::
+ * Pragma Unused::
+ * Pragma Use_VADS_Size::
+ * Pragma Validity_Checks::
+ * Pragma Volatile::
+ * Pragma Volatile_Full_Access::
+ * Pragma Volatile_Function::
+ * Pragma Warning_As_Error::
+ * Pragma Warnings::
+ * Pragma Weak_External::
+ * Pragma Wide_Character_Encoding::
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Abort_Defer,  Next: Pragma Abstract_State,  Up: Implementation Defined Pragmas
+ 
+ 2.1 Pragma Abort_Defer
+ ======================
+ 
+ Syntax:
+ 
+      pragma Abort_Defer;
+ 
+ This pragma must appear at the start of the statement sequence of a
+ handled sequence of statements (right after the ‘begin’).  It has the
+ effect of deferring aborts for the sequence of statements (but not for
+ the declarations or handlers, if any, associated with this statement
+ sequence).  This can also be useful for adding a polling point in Ada
+ code, where asynchronous abort of tasks is checked when leaving the
+ statement sequence, and is lighter than, for example, using ‘delay
+ 0.0;’, since with zero-cost exception handling, propagating exceptions
+ (implicitly used to implement task abort) cannot be done reliably in an
+ asynchronous way.
+ 
+ An example of usage would be:
+ 
+      --  Add a polling point to check for task aborts
+ 
+      begin
+         pragma Abort_Defer;
+      end;
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Abstract_State,  Next: Pragma Ada_83,  Prev: Pragma Abort_Defer,  Up: Implementation Defined Pragmas
+ 
+ 2.2 Pragma Abstract_State
+ =========================
+ 
+ Syntax:
+ 
+      pragma Abstract_State (ABSTRACT_STATE_LIST);
+ 
+      ABSTRACT_STATE_LIST ::=
+           null
+        |  STATE_NAME_WITH_OPTIONS
+        | (STATE_NAME_WITH_OPTIONS {, STATE_NAME_WITH_OPTIONS} )
+ 
+      STATE_NAME_WITH_OPTIONS ::=
+           STATE_NAME
+        | (STATE_NAME with OPTION_LIST)
+ 
+      OPTION_LIST ::= OPTION {, OPTION}
+ 
+      OPTION ::=
+          SIMPLE_OPTION
+        | NAME_VALUE_OPTION
+ 
+      SIMPLE_OPTION ::= Ghost | Synchronous
+ 
+      NAME_VALUE_OPTION ::=
+          Part_Of => ABSTRACT_STATE
+        | External [=> EXTERNAL_PROPERTY_LIST]
+ 
+      EXTERNAL_PROPERTY_LIST ::=
+           EXTERNAL_PROPERTY
+        | (EXTERNAL_PROPERTY {, EXTERNAL_PROPERTY} )
+ 
+      EXTERNAL_PROPERTY ::=
+          Async_Readers    [=> static_boolean_EXPRESSION]
+        | Async_Writers    [=> static_boolean_EXPRESSION]
+        | Effective_Reads  [=> static_boolean_EXPRESSION]
+        | Effective_Writes [=> static_boolean_EXPRESSION]
+          others            => static_boolean_EXPRESSION
+ 
+      STATE_NAME ::= defining_identifier
+ 
+      ABSTRACT_STATE ::= name
+ 
+ For the semantics of this pragma, see the entry for aspect
+ ‘Abstract_State’ in the SPARK 2014 Reference Manual, section 7.1.4.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Ada_83,  Next: Pragma Ada_95,  Prev: Pragma Abstract_State,  Up: Implementation Defined Pragmas
+ 
+ 2.3 Pragma Ada_83
+ =================
+ 
+ Syntax:
+ 
+      pragma Ada_83;
+ 
+ A configuration pragma that establishes Ada 83 mode for the unit to
+ which it applies, regardless of the mode set by the command line
+ switches.  In Ada 83 mode, GNAT attempts to be as compatible with the
+ syntax and semantics of Ada 83, as defined in the original Ada 83
+ Reference Manual as possible.  In particular, the keywords added by Ada
+ 95 and Ada 2005 are not recognized, optional package bodies are allowed,
+ and generics may name types with unknown discriminants without using the
+ ‘(<>)’ notation.  In addition, some but not all of the additional
+ restrictions of Ada 83 are enforced.
+ 
+ Ada 83 mode is intended for two purposes.  Firstly, it allows existing
+ Ada 83 code to be compiled and adapted to GNAT with less effort.
+ Secondly, it aids in keeping code backwards compatible with Ada 83.
+ However, there is no guarantee that code that is processed correctly by
+ GNAT in Ada 83 mode will in fact compile and execute with an Ada 83
+ compiler, since GNAT does not enforce all the additional checks required
+ by Ada 83.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Ada_95,  Next: Pragma Ada_05,  Prev: Pragma Ada_83,  Up: Implementation Defined Pragmas
+ 
+ 2.4 Pragma Ada_95
+ =================
+ 
+ Syntax:
+ 
+      pragma Ada_95;
+ 
+ A configuration pragma that establishes Ada 95 mode for the unit to
+ which it applies, regardless of the mode set by the command line
+ switches.  This mode is set automatically for the ‘Ada’ and ‘System’
+ packages and their children, so you need not specify it in these
+ contexts.  This pragma is useful when writing a reusable component that
+ itself uses Ada 95 features, but which is intended to be usable from
+ either Ada 83 or Ada 95 programs.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Ada_05,  Next: Pragma Ada_2005,  Prev: Pragma Ada_95,  Up: Implementation Defined Pragmas
+ 
+ 2.5 Pragma Ada_05
+ =================
+ 
+ Syntax:
+ 
+      pragma Ada_05;
+      pragma Ada_05 (local_NAME);
+ 
+ A configuration pragma that establishes Ada 2005 mode for the unit to
+ which it applies, regardless of the mode set by the command line
+ switches.  This pragma is useful when writing a reusable component that
+ itself uses Ada 2005 features, but which is intended to be usable from
+ either Ada 83 or Ada 95 programs.
+ 
+ The one argument form (which is not a configuration pragma) is used for
+ managing the transition from Ada 95 to Ada 2005 in the run-time library.
+ If an entity is marked as Ada_2005 only, then referencing the entity in
+ Ada_83 or Ada_95 mode will generate a warning.  In addition, in Ada_83
+ or Ada_95 mode, a preference rule is established which does not choose
+ such an entity unless it is unambiguously specified.  This avoids extra
+ subprograms marked this way from generating ambiguities in otherwise
+ legal pre-Ada_2005 programs.  The one argument form is intended for
+ exclusive use in the GNAT run-time library.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Ada_2005,  Next: Pragma Ada_12,  Prev: Pragma Ada_05,  Up: Implementation Defined Pragmas
+ 
+ 2.6 Pragma Ada_2005
+ ===================
+ 
+ Syntax:
+ 
+      pragma Ada_2005;
+ 
+ This configuration pragma is a synonym for pragma Ada_05 and has the
+ same syntax and effect.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Ada_12,  Next: Pragma Ada_2012,  Prev: Pragma Ada_2005,  Up: Implementation Defined Pragmas
+ 
+ 2.7 Pragma Ada_12
+ =================
+ 
+ Syntax:
+ 
+      pragma Ada_12;
+      pragma Ada_12 (local_NAME);
+ 
+ A configuration pragma that establishes Ada 2012 mode for the unit to
+ which it applies, regardless of the mode set by the command line
+ switches.  This mode is set automatically for the ‘Ada’ and ‘System’
+ packages and their children, so you need not specify it in these
+ contexts.  This pragma is useful when writing a reusable component that
+ itself uses Ada 2012 features, but which is intended to be usable from
+ Ada 83, Ada 95, or Ada 2005 programs.
+ 
+ The one argument form, which is not a configuration pragma, is used for
+ managing the transition from Ada 2005 to Ada 2012 in the run-time
+ library.  If an entity is marked as Ada_2012 only, then referencing the
+ entity in any pre-Ada_2012 mode will generate a warning.  In addition,
+ in any pre-Ada_2012 mode, a preference rule is established which does
+ not choose such an entity unless it is unambiguously specified.  This
+ avoids extra subprograms marked this way from generating ambiguities in
+ otherwise legal pre-Ada_2012 programs.  The one argument form is
+ intended for exclusive use in the GNAT run-time library.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Ada_2012,  Next: Pragma Ada_2022,  Prev: Pragma Ada_12,  Up: Implementation Defined Pragmas
+ 
+ 2.8 Pragma Ada_2012
+ ===================
+ 
+ Syntax:
+ 
+      pragma Ada_2012;
+ 
+ This configuration pragma is a synonym for pragma Ada_12 and has the
+ same syntax and effect.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Ada_2022,  Next: Pragma Aggregate_Individually_Assign,  Prev: Pragma Ada_2012,  Up: Implementation Defined Pragmas
+ 
+ 2.9 Pragma Ada_2022
+ ===================
+ 
+ Syntax:
+ 
+      pragma Ada_2022;
+      pragma Ada_2022 (local_NAME);
+ 
+ A configuration pragma that establishes Ada 2022 mode for the unit to
+ which it applies, regardless of the mode set by the command line
+ switches.  This mode is set automatically for the ‘Ada’ and ‘System’
+ packages and their children, so you need not specify it in these
+ contexts.  This pragma is useful when writing a reusable component that
+ itself uses Ada 2022 features, but which is intended to be usable from
+ Ada 83, Ada 95, Ada 2005 or Ada 2012 programs.
+ 
+ The one argument form, which is not a configuration pragma, is used for
+ managing the transition from Ada 2012 to Ada 2022 in the run-time
+ library.  If an entity is marked as Ada_2022 only, then referencing the
+ entity in any pre-Ada_2022 mode will generate a warning.  In addition,
+ in any pre-Ada_2012 mode, a preference rule is established which does
+ not choose such an entity unless it is unambiguously specified.  This
+ avoids extra subprograms marked this way from generating ambiguities in
+ otherwise legal pre-Ada_2022 programs.  The one argument form is
+ intended for exclusive use in the GNAT run-time library.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Aggregate_Individually_Assign,  Next: Pragma Allow_Integer_Address,  Prev: Pragma Ada_2022,  Up: Implementation Defined Pragmas
+ 
+ 2.10 Pragma Aggregate_Individually_Assign
+ =========================================
+ 
+ Syntax:
+ 
+      pragma Aggregate_Individually_Assign;
+ 
+ Where possible, GNAT will store the binary representation of a record
+ aggregate in memory for space and performance reasons.  This
+ configuration pragma changes this behavior so that record aggregates are
+ instead always converted into individual assignment statements.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Allow_Integer_Address,  Next: Pragma Annotate,  Prev: Pragma Aggregate_Individually_Assign,  Up: Implementation Defined Pragmas
+ 
+ 2.11 Pragma Allow_Integer_Address
+ =================================
+ 
+ Syntax:
+ 
+      pragma Allow_Integer_Address;
+ 
+ In almost all versions of GNAT, ‘System.Address’ is a private type in
+ accordance with the implementation advice in the RM. This means that
+ integer values, in particular integer literals, are not allowed as
+ address values.  If the configuration pragma ‘Allow_Integer_Address’ is
+ given, then integer expressions may be used anywhere a value of type
+ ‘System.Address’ is required.  The effect is to introduce an implicit
+ unchecked conversion from the integer value to type ‘System.Address’.
+ The reverse case of using an address where an integer type is required
+ is handled analogously.  The following example compiles without errors:
+ 
+      pragma Allow_Integer_Address;
+      with System; use System;
+      package AddrAsInt is
+         X : Integer;
+         Y : Integer;
+         for X'Address use 16#1240#;
+         for Y use at 16#3230#;
+         m : Address := 16#4000#;
+         n : constant Address := 4000;
+         p : constant Address := Address (X + Y);
+         v : Integer := y'Address;
+         w : constant Integer := Integer (Y'Address);
+         type R is new integer;
+         RR : R := 1000;
+         Z : Integer;
+         for Z'Address use RR;
+      end AddrAsInt;
+ 
+ Note that pragma ‘Allow_Integer_Address’ is ignored if ‘System.Address’
+ is not a private type.  In implementations of ‘GNAT’ where
+ System.Address is a visible integer type, this pragma serves no purpose
+ but is ignored rather than rejected to allow common sets of sources to
+ be used in the two situations.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Annotate,  Next: Pragma Assert,  Prev: Pragma Allow_Integer_Address,  Up: Implementation Defined Pragmas
+ 
+ 2.12 Pragma Annotate
+ ====================
+ 
+ Syntax:
+ 
+      pragma Annotate (IDENTIFIER [, IDENTIFIER {, ARG}] [, entity => local_NAME]);
+ 
+      ARG ::= NAME | EXPRESSION
+ 
+ This pragma is used to annotate programs.  IDENTIFIER identifies the
+ type of annotation.  GNAT verifies that it is an identifier, but does
+ not otherwise analyze it.  The second optional identifier is also left
+ unanalyzed, and by convention is used to control the action of the tool
+ to which the annotation is addressed.  The remaining ARG arguments can
+ be either string literals or more generally expressions.  String
+ literals (and concatenations of string literals) are assumed to be
+ either of type ‘Standard.String’ or else ‘Wide_String’ or
+ ‘Wide_Wide_String’ depending on the character literals they contain.
+ All other kinds of arguments are analyzed as expressions, and must be
+ unambiguous.  The last argument if present must have the identifier
+ ‘Entity’ and GNAT verifies that a local name is given.
+ 
+ The analyzed pragma is retained in the tree, but not otherwise processed
+ by any part of the GNAT compiler, except to generate corresponding note
+ lines in the generated ALI file.  For the format of these note lines,
+ see the compiler source file lib-writ.ads.  This pragma is intended for
+ use by external tools, including ASIS. The use of pragma Annotate does
+ not affect the compilation process in any way.  This pragma may be used
+ as a configuration pragma.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Assert,  Next: Pragma Assert_And_Cut,  Prev: Pragma Annotate,  Up: Implementation Defined Pragmas
+ 
+ 2.13 Pragma Assert
+ ==================
+ 
+ Syntax:
+ 
+      pragma Assert (
+        boolean_EXPRESSION
+        [, string_EXPRESSION]);
+ 
+ The effect of this pragma depends on whether the corresponding command
+ line switch is set to activate assertions.  The pragma expands into code
+ equivalent to the following:
+ 
+      if assertions-enabled then
+         if not boolean_EXPRESSION then
+            System.Assertions.Raise_Assert_Failure
+              (string_EXPRESSION);
+         end if;
+      end if;
+ 
+ The string argument, if given, is the message that will be associated
+ with the exception occurrence if the exception is raised.  If no second
+ argument is given, the default message is ‘file’:‘nnn’, where ‘file’ is
+ the name of the source file containing the assert, and ‘nnn’ is the line
+ number of the assert.
+ 
+ Note that, as with the ‘if’ statement to which it is equivalent, the
+ type of the expression is either ‘Standard.Boolean’, or any type derived
+ from this standard type.
+ 
+ Assert checks can be either checked or ignored.  By default they are
+ ignored.  They will be checked if either the command line switch
+ ‘-gnata’ is used, or if an ‘Assertion_Policy’ or ‘Check_Policy’ pragma
+ is used to enable ‘Assert_Checks’.
+ 
+ If assertions are ignored, then there is no run-time effect (and in
+ particular, any side effects from the expression will not occur at run
+ time).  (The expression is still analyzed at compile time, and may cause
+ types to be frozen if they are mentioned here for the first time).
+ 
+ If assertions are checked, then the given expression is tested, and if
+ it is ‘False’ then ‘System.Assertions.Raise_Assert_Failure’ is called
+ which results in the raising of ‘Assert_Failure’ with the given message.
+ 
+ You should generally avoid side effects in the expression arguments of
+ this pragma, because these side effects will turn on and off with the
+ setting of the assertions mode, resulting in assertions that have an
+ effect on the program.  However, the expressions are analyzed for
+ semantic correctness whether or not assertions are enabled, so turning
+ assertions on and off cannot affect the legality of a program.
+ 
+ Note that the implementation defined policy ‘DISABLE’, given in a pragma
+ ‘Assertion_Policy’, can be used to suppress this semantic analysis.
+ 
+ Note: this is a standard language-defined pragma in versions of Ada from
+ 2005 on.  In GNAT, it is implemented in all versions of Ada, and the
+ DISABLE policy is an implementation-defined addition.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Assert_And_Cut,  Next: Pragma Assertion_Policy,  Prev: Pragma Assert,  Up: Implementation Defined Pragmas
+ 
+ 2.14 Pragma Assert_And_Cut
+ ==========================
+ 
+ Syntax:
+ 
+      pragma Assert_And_Cut (
+        boolean_EXPRESSION
+        [, string_EXPRESSION]);
+ 
+ The effect of this pragma is identical to that of pragma ‘Assert’,
+ except that in an ‘Assertion_Policy’ pragma, the identifier
+ ‘Assert_And_Cut’ is used to control whether it is ignored or checked (or
+ disabled).
+ 
+ The intention is that this be used within a subprogram when the given
+ test expresion sums up all the work done so far in the subprogram, so
+ that the rest of the subprogram can be verified (informally or formally)
+ using only the entry preconditions, and the expression in this pragma.
+ This allows dividing up a subprogram into sections for the purposes of
+ testing or formal verification.  The pragma also serves as useful
+ documentation.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Assertion_Policy,  Next: Pragma Assume,  Prev: Pragma Assert_And_Cut,  Up: Implementation Defined Pragmas
+ 
+ 2.15 Pragma Assertion_Policy
+ ============================
+ 
+ Syntax:
+ 
+      pragma Assertion_Policy (CHECK | DISABLE | IGNORE | SUPPRESSIBLE);
+ 
+      pragma Assertion_Policy (
+          ASSERTION_KIND => POLICY_IDENTIFIER
+       {, ASSERTION_KIND => POLICY_IDENTIFIER});
+ 
+      ASSERTION_KIND ::= RM_ASSERTION_KIND | ID_ASSERTION_KIND
+ 
+      RM_ASSERTION_KIND ::= Assert                    |
+                            Static_Predicate          |
+                            Dynamic_Predicate         |
+                            Pre                       |
+                            Pre'Class                 |
+                            Post                      |
+                            Post'Class                |
+                            Type_Invariant            |
+                            Type_Invariant'Class      |
+                            Default_Initial_Condition
+ 
+      ID_ASSERTION_KIND ::= Assertions           |
+                            Assert_And_Cut       |
+                            Assume               |
+                            Contract_Cases       |
+                            Debug                |
+                            Ghost                |
+                            Initial_Condition    |
+                            Invariant            |
+                            Invariant'Class      |
+                            Loop_Invariant       |
+                            Loop_Variant         |
+                            Postcondition        |
+                            Precondition         |
+                            Predicate            |
+                            Refined_Post         |
+                            Statement_Assertions |
+                            Subprogram_Variant
+ 
+      POLICY_IDENTIFIER ::= Check | Disable | Ignore | Suppressible
+ 
+ This is a standard Ada 2012 pragma that is available as an
+ implementation-defined pragma in earlier versions of Ada.  The assertion
+ kinds ‘RM_ASSERTION_KIND’ are those defined in the Ada standard.  The
+ assertion kinds ‘ID_ASSERTION_KIND’ are implementation defined additions
+ recognized by the GNAT compiler.
+ 
+ The pragma applies in both cases to pragmas and aspects with matching
+ names, e.g.  ‘Pre’ applies to the Pre aspect, and ‘Precondition’ applies
+ to both the ‘Precondition’ pragma and the aspect ‘Precondition’.  Note
+ that the identifiers for pragmas Pre_Class and Post_Class are Pre’Class
+ and Post’Class (not Pre_Class and Post_Class), since these pragmas are
+ intended to be identical to the corresponding aspects.
+ 
+ If the policy is ‘CHECK’, then assertions are enabled, i.e.  the
+ corresponding pragma or aspect is activated.  If the policy is ‘IGNORE’,
+ then assertions are ignored, i.e.  the corresponding pragma or aspect is
+ deactivated.  This pragma overrides the effect of the ‘-gnata’ switch on
+ the command line.  If the policy is ‘SUPPRESSIBLE’, then assertions are
+ enabled by default, however, if the ‘-gnatp’ switch is specified all
+ assertions are ignored.
+ 
+ The implementation defined policy ‘DISABLE’ is like ‘IGNORE’ except that
+ it completely disables semantic checking of the corresponding pragma or
+ aspect.  This is useful when the pragma or aspect argument references
+ subprograms in a with’ed package which is replaced by a dummy package
+ for the final build.
+ 
+ The implementation defined assertion kind ‘Assertions’ applies to all
+ assertion kinds.  The form with no assertion kind given implies this
+ choice, so it applies to all assertion kinds (RM defined, and
+ implementation defined).
+ 
+ The implementation defined assertion kind ‘Statement_Assertions’ applies
+ to ‘Assert’, ‘Assert_And_Cut’, ‘Assume’, ‘Loop_Invariant’, and
+ ‘Loop_Variant’.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Assume,  Next: Pragma Assume_No_Invalid_Values,  Prev: Pragma Assertion_Policy,  Up: Implementation Defined Pragmas
+ 
+ 2.16 Pragma Assume
+ ==================
+ 
+ Syntax:
+ 
+      pragma Assume (
+        boolean_EXPRESSION
+        [, string_EXPRESSION]);
+ 
+ The effect of this pragma is identical to that of pragma ‘Assert’,
+ except that in an ‘Assertion_Policy’ pragma, the identifier ‘Assume’ is
+ used to control whether it is ignored or checked (or disabled).
+ 
+ The intention is that this be used for assumptions about the external
+ environment.  So you cannot expect to verify formally or informally that
+ the condition is met, this must be established by examining things
+ outside the program itself.  For example, we may have code that depends
+ on the size of ‘Long_Long_Integer’ being at least 64.  So we could
+ write:
+ 
+      pragma Assume (Long_Long_Integer'Size >= 64);
+ 
+ This assumption cannot be proved from the program itself, but it acts as
+ a useful run-time check that the assumption is met, and documents the
+ need to ensure that it is met by reference to information outside the
+ program.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Assume_No_Invalid_Values,  Next: Pragma Async_Readers,  Prev: Pragma Assume,  Up: Implementation Defined Pragmas
+ 
+ 2.17 Pragma Assume_No_Invalid_Values
+ ====================================
+ 
+ Syntax:
+ 
+      pragma Assume_No_Invalid_Values (On | Off);
+ 
+ This is a configuration pragma that controls the assumptions made by the
+ compiler about the occurrence of invalid representations (invalid
+ values) in the code.
+ 
+ The default behavior (corresponding to an Off argument for this pragma),
+ is to assume that values may in general be invalid unless the compiler
+ can prove they are valid.  Consider the following example:
+ 
+      V1 : Integer range 1 .. 10;
+      V2 : Integer range 11 .. 20;
+      ...
+      for J in V2 .. V1 loop
+         ...
+      end loop;
+ 
+ if V1 and V2 have valid values, then the loop is known at compile time
+ not to execute since the lower bound must be greater than the upper
+ bound.  However in default mode, no such assumption is made, and the
+ loop may execute.  If ‘Assume_No_Invalid_Values (On)’ is given, the
+ compiler will assume that any occurrence of a variable other than in an
+ explicit ‘'Valid’ test always has a valid value, and the loop above will
+ be optimized away.
+ 
+ The use of ‘Assume_No_Invalid_Values (On)’ is appropriate if you know
+ your code is free of uninitialized variables and other possible sources
+ of invalid representations, and may result in more efficient code.  A
+ program that accesses an invalid representation with this pragma in
+ effect is erroneous, so no guarantees can be made about its behavior.
+ 
+ It is peculiar though permissible to use this pragma in conjunction with
+ validity checking (-gnatVa).  In such cases, accessing invalid values
+ will generally give an exception, though formally the program is
+ erroneous so there are no guarantees that this will always be the case,
+ and it is recommended that these two options not be used together.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Async_Readers,  Next: Pragma Async_Writers,  Prev: Pragma Assume_No_Invalid_Values,  Up: Implementation Defined Pragmas
+ 
+ 2.18 Pragma Async_Readers
+ =========================
+ 
+ Syntax:
+ 
+      pragma Async_Readers [ (static_boolean_EXPRESSION) ];
+ 
+ For the semantics of this pragma, see the entry for aspect
+ ‘Async_Readers’ in the SPARK 2014 Reference Manual, section 7.1.2.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Async_Writers,  Next: Pragma Attribute_Definition,  Prev: Pragma Async_Readers,  Up: Implementation Defined Pragmas
+ 
+ 2.19 Pragma Async_Writers
+ =========================
+ 
+ Syntax:
+ 
+      pragma Async_Writers [ (static_boolean_EXPRESSION) ];
+ 
+ For the semantics of this pragma, see the entry for aspect
+ ‘Async_Writers’ in the SPARK 2014 Reference Manual, section 7.1.2.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Attribute_Definition,  Next: Pragma C_Pass_By_Copy,  Prev: Pragma Async_Writers,  Up: Implementation Defined Pragmas
+ 
+ 2.20 Pragma Attribute_Definition
+ ================================
+ 
+ Syntax:
+ 
+      pragma Attribute_Definition
+        ([Attribute  =>] ATTRIBUTE_DESIGNATOR,
+         [Entity     =>] LOCAL_NAME,
+         [Expression =>] EXPRESSION | NAME);
+ 
+ If ‘Attribute’ is a known attribute name, this pragma is equivalent to
+ the attribute definition clause:
+ 
+      for Entity'Attribute use Expression;
+ 
+ If ‘Attribute’ is not a recognized attribute name, the pragma is
+ ignored, and a warning is emitted.  This allows source code to be
+ written that takes advantage of some new attribute, while remaining
+ compilable with earlier compilers.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma C_Pass_By_Copy,  Next: Pragma Check,  Prev: Pragma Attribute_Definition,  Up: Implementation Defined Pragmas
+ 
+ 2.21 Pragma C_Pass_By_Copy
+ ==========================
+ 
+ Syntax:
+ 
+      pragma C_Pass_By_Copy
+        ([Max_Size =>] static_integer_EXPRESSION);
+ 
+ Normally the default mechanism for passing C convention records to C
+ convention subprograms is to pass them by reference, as suggested by RM
+ B.3(69).  Use the configuration pragma ‘C_Pass_By_Copy’ to change this
+ default, by requiring that record formal parameters be passed by copy if
+ all of the following conditions are met:
+ 
+    * The size of the record type does not exceed the value specified for
+      ‘Max_Size’.
+ 
+    * The record type has ‘Convention C’.
+ 
+    * The formal parameter has this record type, and the subprogram has a
+      foreign (non-Ada) convention.
+ 
+ If these conditions are met the argument is passed by copy; i.e., in a
+ manner consistent with what C expects if the corresponding formal in the
+ C prototype is a struct (rather than a pointer to a struct).
+ 
+ You can also pass records by copy by specifying the convention
+ ‘C_Pass_By_Copy’ for the record type, or by using the extended ‘Import’
+ and ‘Export’ pragmas, which allow specification of passing mechanisms on
+ a parameter by parameter basis.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Check,  Next: Pragma Check_Float_Overflow,  Prev: Pragma C_Pass_By_Copy,  Up: Implementation Defined Pragmas
+ 
+ 2.22 Pragma Check
+ =================
+ 
+ Syntax:
+ 
+      pragma Check (
+           [Name    =>] CHECK_KIND,
+           [Check   =>] Boolean_EXPRESSION
+        [, [Message =>] string_EXPRESSION] );
+ 
+      CHECK_KIND ::= IDENTIFIER           |
+                     Pre'Class            |
+                     Post'Class           |
+                     Type_Invariant'Class |
+                     Invariant'Class
+ 
+ This pragma is similar to the predefined pragma ‘Assert’ except that an
+ extra identifier argument is present.  In conjunction with pragma
+ ‘Check_Policy’, this can be used to define groups of assertions that can
+ be independently controlled.  The identifier ‘Assertion’ is special, it
+ refers to the normal set of pragma ‘Assert’ statements.
+ 
+ Checks introduced by this pragma are normally deactivated by default.
+ They can be activated either by the command line option ‘-gnata’, which
+ turns on all checks, or individually controlled using pragma
+ ‘Check_Policy’.
+ 
+ The identifiers ‘Assertions’ and ‘Statement_Assertions’ are not
+ permitted as check kinds, since this would cause confusion with the use
+ of these identifiers in ‘Assertion_Policy’ and ‘Check_Policy’ pragmas,
+ where they are used to refer to sets of assertions.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Check_Float_Overflow,  Next: Pragma Check_Name,  Prev: Pragma Check,  Up: Implementation Defined Pragmas
+ 
+ 2.23 Pragma Check_Float_Overflow
+ ================================
+ 
+ Syntax:
+ 
+      pragma Check_Float_Overflow;
+ 
+ In Ada, the predefined floating-point types (‘Short_Float’, ‘Float’,
+ ‘Long_Float’, ‘Long_Long_Float’) are defined to be ‘unconstrained’.
+ This means that even though each has a well-defined base range, an
+ operation that delivers a result outside this base range is not required
+ to raise an exception.  This implementation permission accommodates the
+ notion of infinities in IEEE floating-point, and corresponds to the
+ efficient execution mode on most machines.  GNAT will not raise overflow
+ exceptions on these machines; instead it will generate infinities and
+ NaN’s as defined in the IEEE standard.
+ 
+ Generating infinities, although efficient, is not always desirable.
+ Often the preferable approach is to check for overflow, even at the
+ (perhaps considerable) expense of run-time performance.  This can be
+ accomplished by defining your own constrained floating-point subtypes –
+ i.e., by supplying explicit range constraints – and indeed such a
+ subtype can have the same base range as its base type.  For example:
+ 
+      subtype My_Float is Float range Float'Range;
+ 
+ Here ‘My_Float’ has the same range as ‘Float’ but is constrained, so
+ operations on ‘My_Float’ values will be checked for overflow against
+ this range.
+ 
+ This style will achieve the desired goal, but it is often more
+ convenient to be able to simply use the standard predefined
+ floating-point types as long as overflow checking could be guaranteed.
+ The ‘Check_Float_Overflow’ configuration pragma achieves this effect.
+ If a unit is compiled subject to this configuration pragma, then all
+ operations on predefined floating-point types including operations on
+ base types of these floating-point types will be treated as though those
+ types were constrained, and overflow checks will be generated.  The
+ ‘Constraint_Error’ exception is raised if the result is out of range.
+ 
+ This mode can also be set by use of the compiler switch ‘-gnateF’.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Check_Name,  Next: Pragma Check_Policy,  Prev: Pragma Check_Float_Overflow,  Up: Implementation Defined Pragmas
+ 
+ 2.24 Pragma Check_Name
+ ======================
+ 
+ Syntax:
+ 
+      pragma Check_Name (check_name_IDENTIFIER);
+ 
+ This is a configuration pragma that defines a new implementation defined
+ check name (unless IDENTIFIER matches one of the predefined check names,
+ in which case the pragma has no effect).  Check names are global to a
+ partition, so if two or more configuration pragmas are present in a
+ partition mentioning the same name, only one new check name is
+ introduced.
+ 
+ An implementation defined check name introduced with this pragma may be
+ used in only three contexts: ‘pragma Suppress’, ‘pragma Unsuppress’, and
+ as the prefix of a ‘Check_Name'Enabled’ attribute reference.  For any of
+ these three cases, the check name must be visible.  A check name is
+ visible if it is in the configuration pragmas applying to the current
+ unit, or if it appears at the start of any unit that is part of the
+ dependency set of the current unit (e.g., units that are mentioned in
+ ‘with’ clauses).
+ 
+ Check names introduced by this pragma are subject to control by compiler
+ switches (in particular -gnatp) in the usual manner.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Check_Policy,  Next: Pragma Comment,  Prev: Pragma Check_Name,  Up: Implementation Defined Pragmas
+ 
+ 2.25 Pragma Check_Policy
+ ========================
+ 
+ Syntax:
+ 
+      pragma Check_Policy
+       ([Name   =>] CHECK_KIND,
+        [Policy =>] POLICY_IDENTIFIER);
+ 
+      pragma Check_Policy (
+          CHECK_KIND => POLICY_IDENTIFIER
+       {, CHECK_KIND => POLICY_IDENTIFIER});
+ 
+      ASSERTION_KIND ::= RM_ASSERTION_KIND | ID_ASSERTION_KIND
+ 
+      CHECK_KIND ::= IDENTIFIER           |
+                     Pre'Class            |
+                     Post'Class           |
+                     Type_Invariant'Class |
+                     Invariant'Class
+ 
+      The identifiers Name and Policy are not allowed as CHECK_KIND values. This
+      avoids confusion between the two possible syntax forms for this pragma.
+ 
+      POLICY_IDENTIFIER ::= ON | OFF | CHECK | DISABLE | IGNORE
+ 
+ This pragma is used to set the checking policy for assertions (specified
+ by aspects or pragmas), the ‘Debug’ pragma, or additional checks to be
+ checked using the ‘Check’ pragma.  It may appear either as a
+ configuration pragma, or within a declarative part of package.  In the
+ latter case, it applies from the point where it appears to the end of
+ the declarative region (like pragma ‘Suppress’).
+ 
+ The ‘Check_Policy’ pragma is similar to the predefined
+ ‘Assertion_Policy’ pragma, and if the check kind corresponds to one of
+ the assertion kinds that are allowed by ‘Assertion_Policy’, then the
+ effect is identical.
+ 
+ If the first argument is Debug, then the policy applies to Debug
+ pragmas, disabling their effect if the policy is ‘OFF’, ‘DISABLE’, or
+ ‘IGNORE’, and allowing them to execute with normal semantics if the
+ policy is ‘ON’ or ‘CHECK’.  In addition if the policy is ‘DISABLE’, then
+ the procedure call in ‘Debug’ pragmas will be totally ignored and not
+ analyzed semantically.
+ 
+ Finally the first argument may be some other identifier than the above
+ possibilities, in which case it controls a set of named assertions that
+ can be checked using pragma ‘Check’.  For example, if the pragma:
+ 
+      pragma Check_Policy (Critical_Error, OFF);
+ 
+ is given, then subsequent ‘Check’ pragmas whose first argument is also
+ ‘Critical_Error’ will be disabled.
+ 
+ The check policy is ‘OFF’ to turn off corresponding checks, and ‘ON’ to
+ turn on corresponding checks.  The default for a set of checks for which
+ no ‘Check_Policy’ is given is ‘OFF’ unless the compiler switch ‘-gnata’
+ is given, which turns on all checks by default.
+ 
+ The check policy settings ‘CHECK’ and ‘IGNORE’ are recognized as
+ synonyms for ‘ON’ and ‘OFF’.  These synonyms are provided for
+ compatibility with the standard ‘Assertion_Policy’ pragma.  The check
+ policy setting ‘DISABLE’ causes the second argument of a corresponding
+ ‘Check’ pragma to be completely ignored and not analyzed.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Comment,  Next: Pragma Common_Object,  Prev: Pragma Check_Policy,  Up: Implementation Defined Pragmas
+ 
+ 2.26 Pragma Comment
+ ===================
+ 
+ Syntax:
+ 
+      pragma Comment (static_string_EXPRESSION);
+ 
+ This is almost identical in effect to pragma ‘Ident’.  It allows the
+ placement of a comment into the object file and hence into the
+ executable file if the operating system permits such usage.  The
+ difference is that ‘Comment’, unlike ‘Ident’, has no limitations on
+ placement of the pragma (it can be placed anywhere in the main source
+ unit), and if more than one pragma is used, all comments are retained.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Common_Object,  Next: Pragma Compile_Time_Error,  Prev: Pragma Comment,  Up: Implementation Defined Pragmas
+ 
+ 2.27 Pragma Common_Object
+ =========================
+ 
+ Syntax:
+ 
+      pragma Common_Object (
+           [Internal =>] LOCAL_NAME
+        [, [External =>] EXTERNAL_SYMBOL]
+        [, [Size     =>] EXTERNAL_SYMBOL] );
+ 
+      EXTERNAL_SYMBOL ::=
+        IDENTIFIER
+      | static_string_EXPRESSION
+ 
+ This pragma enables the shared use of variables stored in overlaid
+ linker areas corresponding to the use of ‘COMMON’ in Fortran.  The
+ single object ‘LOCAL_NAME’ is assigned to the area designated by the
+ ‘External’ argument.  You may define a record to correspond to a series
+ of fields.  The ‘Size’ argument is syntax checked in GNAT, but otherwise
+ ignored.
+ 
+ ‘Common_Object’ is not supported on all platforms.  If no support is
+ available, then the code generator will issue a message indicating that
+ the necessary attribute for implementation of this pragma is not
+ available.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Compile_Time_Error,  Next: Pragma Compile_Time_Warning,  Prev: Pragma Common_Object,  Up: Implementation Defined Pragmas
+ 
+ 2.28 Pragma Compile_Time_Error
+ ==============================
+ 
+ Syntax:
+ 
+      pragma Compile_Time_Error
+               (boolean_EXPRESSION, static_string_EXPRESSION);
+ 
+ This pragma can be used to generate additional compile time error
+ messages.  It is particularly useful in generics, where errors can be
+ issued for specific problematic instantiations.  The first parameter is
+ a boolean expression.  The pragma ensures that the value of an
+ expression is known at compile time, and has the value False.  The set
+ of expressions whose values are known at compile time includes all
+ static boolean expressions, and also other values which the compiler can
+ determine at compile time (e.g., the size of a record type set by an
+ explicit size representation clause, or the value of a variable which
+ was initialized to a constant and is known not to have been modified).
+ If these conditions are not met, an error message is generated using the
+ value given as the second argument.  This string value may contain
+ embedded ASCII.LF characters to break the message into multiple lines.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Compile_Time_Warning,  Next: Pragma Complete_Representation,  Prev: Pragma Compile_Time_Error,  Up: Implementation Defined Pragmas
+ 
+ 2.29 Pragma Compile_Time_Warning
+ ================================
+ 
+ Syntax:
+ 
+      pragma Compile_Time_Warning
+               (boolean_EXPRESSION, static_string_EXPRESSION);
+ 
+ Same as pragma Compile_Time_Error, except a warning is issued instead of
+ an error message.  If switch ‘-gnatw_C’ is used, a warning is only
+ issued if the value of the expression is known to be True at compile
+ time, not when the value of the expression is not known at compile time.
+ Note that if this pragma is used in a package that is with’ed by a
+ client, the client will get the warning even though it is issued by a
+ with’ed package (normally warnings in with’ed units are suppressed, but
+ this is a special exception to that rule).
+ 
+ One typical use is within a generic where compile time known
+ characteristics of formal parameters are tested, and warnings given
+ appropriately.  Another use with a first parameter of True is to warn a
+ client about use of a package, for example that it is not fully
+ implemented.
+ 
+ In previous versions of the compiler, combining ‘-gnatwe’ with
+ Compile_Time_Warning resulted in a fatal error.  Now the compiler always
+ emits a warning.  You can use *note Pragma Compile_Time_Error: 3b. to
+ force the generation of an error.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Complete_Representation,  Next: Pragma Complex_Representation,  Prev: Pragma Compile_Time_Warning,  Up: Implementation Defined Pragmas
+ 
+ 2.30 Pragma Complete_Representation
+ ===================================
+ 
+ Syntax:
+ 
+      pragma Complete_Representation;
+ 
+ This pragma must appear immediately within a record representation
+ clause.  Typical placements are before the first component clause or
+ after the last component clause.  The effect is to give an error message
+ if any component is missing a component clause.  This pragma may be used
+ to ensure that a record representation clause is complete, and that this
+ invariant is maintained if fields are added to the record in the future.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Complex_Representation,  Next: Pragma Component_Alignment,  Prev: Pragma Complete_Representation,  Up: Implementation Defined Pragmas
+ 
+ 2.31 Pragma Complex_Representation
+ ==================================
+ 
+ Syntax:
+ 
+      pragma Complex_Representation
+              ([Entity =>] LOCAL_NAME);
+ 
+ The ‘Entity’ argument must be the name of a record type which has two
+ fields of the same floating-point type.  The effect of this pragma is to
+ force gcc to use the special internal complex representation form for
+ this record, which may be more efficient.  Note that this may result in
+ the code for this type not conforming to standard ABI (application
+ binary interface) requirements for the handling of record types.  For
+ example, in some environments, there is a requirement for passing
+ records by pointer, and the use of this pragma may result in passing
+ this type in floating-point registers.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Component_Alignment,  Next: Pragma Constant_After_Elaboration,  Prev: Pragma Complex_Representation,  Up: Implementation Defined Pragmas
+ 
+ 2.32 Pragma Component_Alignment
+ ===============================
+ 
+ Syntax:
+ 
+      pragma Component_Alignment (
+           [Form =>] ALIGNMENT_CHOICE
+        [, [Name =>] type_LOCAL_NAME]);
+ 
+      ALIGNMENT_CHOICE ::=
+        Component_Size
+      | Component_Size_4
+      | Storage_Unit
+      | Default
+ 
+ Specifies the alignment of components in array or record types.  The
+ meaning of the ‘Form’ argument is as follows:
+ 
+ ‘Component_Size’
+ 
+      Aligns scalar components and subcomponents of the array or record
+      type on boundaries appropriate to their inherent size (naturally
+      aligned).  For example, 1-byte components are aligned on byte
+      boundaries, 2-byte integer components are aligned on 2-byte
+      boundaries, 4-byte integer components are aligned on 4-byte
+      boundaries and so on.  These alignment rules correspond to the
+      normal rules for C compilers on all machines except the VAX.
+ 
+ ‘Component_Size_4’
+ 
+      Naturally aligns components with a size of four or fewer bytes.
+      Components that are larger than 4 bytes are placed on the next
+      4-byte boundary.
+ 
+ ‘Storage_Unit’
+ 
+      Specifies that array or record components are byte aligned, i.e.,
+      aligned on boundaries determined by the value of the constant
+      ‘System.Storage_Unit’.
+ 
+ ‘Default’
+ 
+      Specifies that array or record components are aligned on default
+      boundaries, appropriate to the underlying hardware or operating
+      system or both.  The ‘Default’ choice is the same as
+      ‘Component_Size’ (natural alignment).
+ 
+ If the ‘Name’ parameter is present, ‘type_LOCAL_NAME’ must refer to a
+ local record or array type, and the specified alignment choice applies
+ to the specified type.  The use of ‘Component_Alignment’ together with a
+ pragma ‘Pack’ causes the ‘Component_Alignment’ pragma to be ignored.
+ The use of ‘Component_Alignment’ together with a record representation
+ clause is only effective for fields not specified by the representation
+ clause.
+ 
+ If the ‘Name’ parameter is absent, the pragma can be used as either a
+ configuration pragma, in which case it applies to one or more units in
+ accordance with the normal rules for configuration pragmas, or it can be
+ used within a declarative part, in which case it applies to types that
+ are declared within this declarative part, or within any nested scope
+ within this declarative part.  In either case it specifies the alignment
+ to be applied to any record or array type which has otherwise standard
+ representation.
+ 
+ If the alignment for a record or array type is not specified (using
+ pragma ‘Pack’, pragma ‘Component_Alignment’, or a record rep clause),
+ the GNAT uses the default alignment as described previously.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Constant_After_Elaboration,  Next: Pragma Contract_Cases,  Prev: Pragma Component_Alignment,  Up: Implementation Defined Pragmas
+ 
+ 2.33 Pragma Constant_After_Elaboration
+ ======================================
+ 
+ Syntax:
+ 
+      pragma Constant_After_Elaboration [ (static_boolean_EXPRESSION) ];
+ 
+ For the semantics of this pragma, see the entry for aspect
+ ‘Constant_After_Elaboration’ in the SPARK 2014 Reference Manual, section
+ 3.3.1.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Contract_Cases,  Next: Pragma Convention_Identifier,  Prev: Pragma Constant_After_Elaboration,  Up: Implementation Defined Pragmas
+ 
+ 2.34 Pragma Contract_Cases
+ ==========================
+ 
+ Syntax:
+ 
+      pragma Contract_Cases (CONTRACT_CASE {, CONTRACT_CASE});
+ 
+      CONTRACT_CASE ::= CASE_GUARD => CONSEQUENCE
+ 
+      CASE_GUARD ::= boolean_EXPRESSION | others
+ 
+      CONSEQUENCE ::= boolean_EXPRESSION
+ 
+ The ‘Contract_Cases’ pragma allows defining fine-grain specifications
+ that can complement or replace the contract given by a precondition and
+ a postcondition.  Additionally, the ‘Contract_Cases’ pragma can be used
+ by testing and formal verification tools.  The compiler checks its
+ validity and, depending on the assertion policy at the point of
+ declaration of the pragma, it may insert a check in the executable.  For
+ code generation, the contract cases
+ 
+      pragma Contract_Cases (
+        Cond1 => Pred1,
+        Cond2 => Pred2);
+ 
+ are equivalent to
+ 
+      C1 : constant Boolean := Cond1;  --  evaluated at subprogram entry
+      C2 : constant Boolean := Cond2;  --  evaluated at subprogram entry
+      pragma Precondition ((C1 and not C2) or (C2 and not C1));
+      pragma Postcondition (if C1 then Pred1);
+      pragma Postcondition (if C2 then Pred2);
+ 
+ The precondition ensures that one and only one of the case guards is
+ satisfied on entry to the subprogram.  The postcondition ensures that
+ for the case guard that was True on entry, the corresponding consequence
+ is True on exit.  Other consequence expressions are not evaluated.
+ 
+ A precondition ‘P’ and postcondition ‘Q’ can also be expressed as
+ contract cases:
+ 
+      pragma Contract_Cases (P => Q);
+ 
+ The placement and visibility rules for ‘Contract_Cases’ pragmas are
+ identical to those described for preconditions and postconditions.
+ 
+ The compiler checks that boolean expressions given in case guards and
+ consequences are valid, where the rules for case guards are the same as
+ the rule for an expression in ‘Precondition’ and the rules for
+ consequences are the same as the rule for an expression in
+ ‘Postcondition’.  In particular, attributes ‘'Old’ and ‘'Result’ can
+ only be used within consequence expressions.  The case guard for the
+ last contract case may be ‘others’, to denote any case not captured by
+ the previous cases.  The following is an example of use within a package
+ spec:
+ 
+      package Math_Functions is
+         ...
+         function Sqrt (Arg : Float) return Float;
+         pragma Contract_Cases (((Arg in 0.0 .. 99.0) => Sqrt'Result < 10.0,
+                                 Arg >= 100.0         => Sqrt'Result >= 10.0,
+                                 others               => Sqrt'Result = 0.0));
+         ...
+      end Math_Functions;
+ 
+ The meaning of contract cases is that only one case should apply at each
+ call, as determined by the corresponding case guard evaluating to True,
+ and that the consequence for this case should hold when the subprogram
+ returns.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Convention_Identifier,  Next: Pragma CPP_Class,  Prev: Pragma Contract_Cases,  Up: Implementation Defined Pragmas
+ 
+ 2.35 Pragma Convention_Identifier
+ =================================
+ 
+ Syntax:
+ 
+      pragma Convention_Identifier (
+               [Name =>]       IDENTIFIER,
+               [Convention =>] convention_IDENTIFIER);
+ 
+ This pragma provides a mechanism for supplying synonyms for existing
+ convention identifiers.  The ‘Name’ identifier can subsequently be used
+ as a synonym for the given convention in other pragmas (including for
+ example pragma ‘Import’ or another ‘Convention_Identifier’ pragma).  As
+ an example of the use of this, suppose you had legacy code which used
+ Fortran77 as the identifier for Fortran.  Then the pragma:
+ 
+      pragma Convention_Identifier (Fortran77, Fortran);
+ 
+ would allow the use of the convention identifier ‘Fortran77’ in
+ subsequent code, avoiding the need to modify the sources.  As another
+ example, you could use this to parameterize convention requirements
+ according to systems.  Suppose you needed to use ‘Stdcall’ on windows
+ systems, and ‘C’ on some other system, then you could define a
+ convention identifier ‘Library’ and use a single ‘Convention_Identifier’
+ pragma to specify which convention would be used system-wide.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma CPP_Class,  Next: Pragma CPP_Constructor,  Prev: Pragma Convention_Identifier,  Up: Implementation Defined Pragmas
+ 
+ 2.36 Pragma CPP_Class
+ =====================
+ 
+ Syntax:
+ 
+      pragma CPP_Class ([Entity =>] LOCAL_NAME);
+ 
+ The argument denotes an entity in the current declarative region that is
+ declared as a record type.  It indicates that the type corresponds to an
+ externally declared C++ class type, and is to be laid out the same way
+ that C++ would lay out the type.  If the C++ class has virtual
+ primitives then the record must be declared as a tagged record type.
+ 
+ Types for which ‘CPP_Class’ is specified do not have assignment or
+ equality operators defined (such operations can be imported or declared
+ as subprograms as required).  Initialization is allowed only by
+ constructor functions (see pragma ‘CPP_Constructor’).  Such types are
+ implicitly limited if not explicitly declared as limited or derived from
+ a limited type, and an error is issued in that case.
+ 
+ See *note Interfacing to C++: 47. for related information.
+ 
+ Note: Pragma ‘CPP_Class’ is currently obsolete.  It is supported for
+ backward compatibility but its functionality is available using pragma
+ ‘Import’ with ‘Convention’ = ‘CPP’.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma CPP_Constructor,  Next: Pragma CPP_Virtual,  Prev: Pragma CPP_Class,  Up: Implementation Defined Pragmas
+ 
+ 2.37 Pragma CPP_Constructor
+ ===========================
+ 
+ Syntax:
+ 
+      pragma CPP_Constructor ([Entity =>] LOCAL_NAME
+        [, [External_Name =>] static_string_EXPRESSION ]
+        [, [Link_Name     =>] static_string_EXPRESSION ]);
+ 
+ This pragma identifies an imported function (imported in the usual way
+ with pragma ‘Import’) as corresponding to a C++ constructor.  If
+ ‘External_Name’ and ‘Link_Name’ are not specified then the ‘Entity’
+ argument is a name that must have been previously mentioned in a pragma
+ ‘Import’ with ‘Convention’ = ‘CPP’.  Such name must be of one of the
+ following forms:
+ 
+    * ‘function’ ‘Fname’ ‘return’ T‘
+ 
+    * ‘function’ ‘Fname’ ‘return’ T’Class
+ 
+    * ‘function’ ‘Fname’ (…) ‘return’ T‘
+ 
+    * ‘function’ ‘Fname’ (…) ‘return’ T’Class
+ 
+ where ‘T’ is a limited record type imported from C++ with pragma
+ ‘Import’ and ‘Convention’ = ‘CPP’.
+ 
+ The first two forms import the default constructor, used when an object
+ of type ‘T’ is created on the Ada side with no explicit constructor.
+ The latter two forms cover all the non-default constructors of the type.
+ See the GNAT User’s Guide for details.
+ 
+ If no constructors are imported, it is impossible to create any objects
+ on the Ada side and the type is implicitly declared abstract.
+ 
+ Pragma ‘CPP_Constructor’ is intended primarily for automatic generation
+ using an automatic binding generator tool (such as the ‘-fdump-ada-spec’
+ GCC switch).  See *note Interfacing to C++: 47. for more related
+ information.
+ 
+ Note: The use of functions returning class-wide types for constructors
+ is currently obsolete.  They are supported for backward compatibility.
+ The use of functions returning the type T leave the Ada sources more
+ clear because the imported C++ constructors always return an object of
+ type T; that is, they never return an object whose type is a descendant
+ of type T.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma CPP_Virtual,  Next: Pragma CPP_Vtable,  Prev: Pragma CPP_Constructor,  Up: Implementation Defined Pragmas
+ 
+ 2.38 Pragma CPP_Virtual
+ =======================
+ 
+ This pragma is now obsolete and, other than generating a warning if
+ warnings on obsolescent features are enabled, is completely ignored.  It
+ is retained for compatibility purposes.  It used to be required to
+ ensure compatibility with C++, but is no longer required for that
+ purpose because GNAT generates the same object layout as the G++
+ compiler by default.
+ 
+ See *note Interfacing to C++: 47. for related information.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma CPP_Vtable,  Next: Pragma CPU,  Prev: Pragma CPP_Virtual,  Up: Implementation Defined Pragmas
+ 
+ 2.39 Pragma CPP_Vtable
+ ======================
+ 
+ This pragma is now obsolete and, other than generating a warning if
+ warnings on obsolescent features are enabled, is completely ignored.  It
+ used to be required to ensure compatibility with C++, but is no longer
+ required for that purpose because GNAT generates the same object layout
+ as the G++ compiler by default.
+ 
+ See *note Interfacing to C++: 47. for related information.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma CPU,  Next: Pragma Deadline_Floor,  Prev: Pragma CPP_Vtable,  Up: Implementation Defined Pragmas
+ 
+ 2.40 Pragma CPU
+ ===============
+ 
+ Syntax:
+ 
+      pragma CPU (EXPRESSION);
+ 
+ This pragma is standard in Ada 2012, but is available in all earlier
+ versions of Ada as an implementation-defined pragma.  See Ada 2012
+ Reference Manual for details.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Deadline_Floor,  Next: Pragma Debug,  Prev: Pragma CPU,  Up: Implementation Defined Pragmas
+ 
+ 2.41 Pragma Deadline_Floor
+ ==========================
+ 
+ Syntax:
+ 
+      pragma Deadline_Floor (time_span_EXPRESSION);
+ 
+ This pragma applies only to protected types and specifies the floor
+ deadline inherited by a task when the task enters a protected object.
+ It is effective only when the EDF scheduling policy is used.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Debug,  Next: Pragma Debug_Policy,  Prev: Pragma Deadline_Floor,  Up: Implementation Defined Pragmas
+ 
+ 2.42 Pragma Debug
+ =================
+ 
+ Syntax:
+ 
+      pragma Debug ([CONDITION, ]PROCEDURE_CALL_WITHOUT_SEMICOLON);
+ 
+      PROCEDURE_CALL_WITHOUT_SEMICOLON ::=
+        PROCEDURE_NAME
+      | PROCEDURE_PREFIX ACTUAL_PARAMETER_PART
+ 
+ The procedure call argument has the syntactic form of an expression,
+ meeting the syntactic requirements for pragmas.
+ 
+ If debug pragmas are not enabled or if the condition is present and
+ evaluates to False, this pragma has no effect.  If debug pragmas are
+ enabled, the semantics of the pragma is exactly equivalent to the
+ procedure call statement corresponding to the argument with a
+ terminating semicolon.  Pragmas are permitted in sequences of
+ declarations, so you can use pragma ‘Debug’ to intersperse calls to
+ debug procedures in the middle of declarations.  Debug pragmas can be
+ enabled either by use of the command line switch ‘-gnata’ or by use of
+ the pragma ‘Check_Policy’ with a first argument of ‘Debug’.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Debug_Policy,  Next: Pragma Default_Initial_Condition,  Prev: Pragma Debug,  Up: Implementation Defined Pragmas
+ 
+ 2.43 Pragma Debug_Policy
+ ========================
+ 
+ Syntax:
+ 
+      pragma Debug_Policy (CHECK | DISABLE | IGNORE | ON | OFF);
+ 
+ This pragma is equivalent to a corresponding ‘Check_Policy’ pragma with
+ a first argument of ‘Debug’.  It is retained for historical
+ compatibility reasons.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Default_Initial_Condition,  Next: Pragma Default_Scalar_Storage_Order,  Prev: Pragma Debug_Policy,  Up: Implementation Defined Pragmas
+ 
+ 2.44 Pragma Default_Initial_Condition
+ =====================================
+ 
+ Syntax:
+ 
+      pragma Default_Initial_Condition [ (null | boolean_EXPRESSION) ];
+ 
+ For the semantics of this pragma, see the entry for aspect
+ ‘Default_Initial_Condition’ in the SPARK 2014 Reference Manual, section
+ 7.3.3.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Default_Scalar_Storage_Order,  Next: Pragma Default_Storage_Pool,  Prev: Pragma Default_Initial_Condition,  Up: Implementation Defined Pragmas
+ 
+ 2.45 Pragma Default_Scalar_Storage_Order
+ ========================================
+ 
+ Syntax:
+ 
+      pragma Default_Scalar_Storage_Order (High_Order_First | Low_Order_First);
+ 
+ Normally if no explicit ‘Scalar_Storage_Order’ is given for a record
+ type or array type, then the scalar storage order defaults to the
+ ordinary default for the target.  But this default may be overridden
+ using this pragma.  The pragma may appear as a configuration pragma, or
+ locally within a package spec or declarative part.  In the latter case,
+ it applies to all subsequent types declared within that package spec or
+ declarative part.
+ 
+ The following example shows the use of this pragma:
+ 
+      pragma Default_Scalar_Storage_Order (High_Order_First);
+      with System; use System;
+      package DSSO1 is
+         type H1 is record
+            a : Integer;
+         end record;
+ 
+         type L2 is record
+            a : Integer;
+         end record;
+         for L2'Scalar_Storage_Order use Low_Order_First;
+ 
+         type L2a is new L2;
+ 
+         package Inner is
+            type H3 is record
+               a : Integer;
+            end record;
+ 
+            pragma Default_Scalar_Storage_Order (Low_Order_First);
+ 
+            type L4 is record
+               a : Integer;
+            end record;
+         end Inner;
+ 
+         type H4a is new Inner.L4;
+ 
+         type H5 is record
+            a : Integer;
+         end record;
+      end DSSO1;
+ 
+ In this example record types with names starting with ‘L’ have
+ ‘Low_Order_First’ scalar storage order, and record types with names
+ starting with ‘H’ have ‘High_Order_First’.  Note that in the case of
+ ‘H4a’, the order is not inherited from the parent type.  Only an
+ explicitly set ‘Scalar_Storage_Order’ gets inherited on type derivation.
+ 
+ If this pragma is used as a configuration pragma which appears within a
+ configuration pragma file (as opposed to appearing explicitly at the
+ start of a single unit), then the binder will require that all units in
+ a partition be compiled in a similar manner, other than run-time units,
+ which are not affected by this pragma.  Note that the use of this form
+ is discouraged because it may significantly degrade the run-time
+ performance of the software, instead the default scalar storage order
+ ought to be changed only on a local basis.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Default_Storage_Pool,  Next: Pragma Depends,  Prev: Pragma Default_Scalar_Storage_Order,  Up: Implementation Defined Pragmas
+ 
+ 2.46 Pragma Default_Storage_Pool
+ ================================
+ 
+ Syntax:
+ 
+      pragma Default_Storage_Pool (storage_pool_NAME | null);
+ 
+ This pragma is standard in Ada 2012, but is available in all earlier
+ versions of Ada as an implementation-defined pragma.  See Ada 2012
+ Reference Manual for details.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Depends,  Next: Pragma Detect_Blocking,  Prev: Pragma Default_Storage_Pool,  Up: Implementation Defined Pragmas
+ 
+ 2.47 Pragma Depends
+ ===================
+ 
+ Syntax:
+ 
+      pragma Depends (DEPENDENCY_RELATION);
+ 
+      DEPENDENCY_RELATION ::=
+           null
+        | (DEPENDENCY_CLAUSE {, DEPENDENCY_CLAUSE})
+ 
+      DEPENDENCY_CLAUSE ::=
+          OUTPUT_LIST =>[+] INPUT_LIST
+        | NULL_DEPENDENCY_CLAUSE
+ 
+      NULL_DEPENDENCY_CLAUSE ::= null => INPUT_LIST
+ 
+      OUTPUT_LIST ::= OUTPUT | (OUTPUT {, OUTPUT})
+ 
+      INPUT_LIST ::= null | INPUT | (INPUT {, INPUT})
+ 
+      OUTPUT ::= NAME | FUNCTION_RESULT
+      INPUT  ::= NAME
+ 
+      where FUNCTION_RESULT is a function Result attribute_reference
+ 
+ For the semantics of this pragma, see the entry for aspect ‘Depends’ in
+ the SPARK 2014 Reference Manual, section 6.1.5.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Detect_Blocking,  Next: Pragma Disable_Atomic_Synchronization,  Prev: Pragma Depends,  Up: Implementation Defined Pragmas
+ 
+ 2.48 Pragma Detect_Blocking
+ ===========================
+ 
+ Syntax:
+ 
+      pragma Detect_Blocking;
+ 
+ This is a standard pragma in Ada 2005, that is available in all earlier
+ versions of Ada as an implementation-defined pragma.
+ 
+ This is a configuration pragma that forces the detection of potentially
+ blocking operations within a protected operation, and to raise
+ Program_Error if that happens.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Disable_Atomic_Synchronization,  Next: Pragma Dispatching_Domain,  Prev: Pragma Detect_Blocking,  Up: Implementation Defined Pragmas
+ 
+ 2.49 Pragma Disable_Atomic_Synchronization
+ ==========================================
+ 
+ Syntax:
+ 
+      pragma Disable_Atomic_Synchronization [(Entity)];
+ 
+ Ada requires that accesses (reads or writes) of an atomic variable be
+ regarded as synchronization points in the case of multiple tasks.
+ Particularly in the case of multi-processors this may require special
+ handling, e.g.  the generation of memory barriers.  This capability may
+ be turned off using this pragma in cases where it is known not to be
+ required.
+ 
+ The placement and scope rules for this pragma are the same as those for
+ ‘pragma Suppress’.  In particular it can be used as a configuration
+ pragma, or in a declaration sequence where it applies till the end of
+ the scope.  If an ‘Entity’ argument is present, the action applies only
+ to that entity.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Dispatching_Domain,  Next: Pragma Effective_Reads,  Prev: Pragma Disable_Atomic_Synchronization,  Up: Implementation Defined Pragmas
+ 
+ 2.50 Pragma Dispatching_Domain
+ ==============================
+ 
+ Syntax:
+ 
+      pragma Dispatching_Domain (EXPRESSION);
+ 
+ This pragma is standard in Ada 2012, but is available in all earlier
+ versions of Ada as an implementation-defined pragma.  See Ada 2012
+ Reference Manual for details.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Effective_Reads,  Next: Pragma Effective_Writes,  Prev: Pragma Dispatching_Domain,  Up: Implementation Defined Pragmas
+ 
+ 2.51 Pragma Effective_Reads
+ ===========================
+ 
+ Syntax:
+ 
+      pragma Effective_Reads [ (static_boolean_EXPRESSION) ];
+ 
+ For the semantics of this pragma, see the entry for aspect
+ ‘Effective_Reads’ in the SPARK 2014 Reference Manual, section 7.1.2.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Effective_Writes,  Next: Pragma Elaboration_Checks,  Prev: Pragma Effective_Reads,  Up: Implementation Defined Pragmas
+ 
+ 2.52 Pragma Effective_Writes
+ ============================
+ 
+ Syntax:
+ 
+      pragma Effective_Writes [ (static_boolean_EXPRESSION) ];
+ 
+ For the semantics of this pragma, see the entry for aspect
+ ‘Effective_Writes’ in the SPARK 2014 Reference Manual, section 7.1.2.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Elaboration_Checks,  Next: Pragma Eliminate,  Prev: Pragma Effective_Writes,  Up: Implementation Defined Pragmas
+ 
+ 2.53 Pragma Elaboration_Checks
+ ==============================
+ 
+ Syntax:
+ 
+      pragma Elaboration_Checks (Dynamic | Static);
+ 
+ This is a configuration pragma which specifies the elaboration model to
+ be used during compilation.  For more information on the elaboration
+ models of GNAT, consult the chapter on elaboration order handling in the
+ ‘GNAT User’s Guide’.
+ 
+ The pragma may appear in the following contexts:
+ 
+    * Configuration pragmas file
+ 
+    * Prior to the context clauses of a compilation unit’s initial
+      declaration
+ 
+ Any other placement of the pragma will result in a warning and the
+ effects of the offending pragma will be ignored.
+ 
+ If the pragma argument is ‘Dynamic’, then the dynamic elaboration model
+ is in effect.  If the pragma argument is ‘Static’, then the static
+ elaboration model is in effect.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Eliminate,  Next: Pragma Enable_Atomic_Synchronization,  Prev: Pragma Elaboration_Checks,  Up: Implementation Defined Pragmas
+ 
+ 2.54 Pragma Eliminate
+ =====================
+ 
+ Syntax:
+ 
+      pragma Eliminate (
+                  [  Unit_Name       => ] IDENTIFIER | SELECTED_COMPONENT ,
+                  [  Entity          => ] IDENTIFIER |
+                                          SELECTED_COMPONENT |
+                                          STRING_LITERAL
+                  [, Source_Location =>   SOURCE_TRACE ] );
+ 
+              SOURCE_TRACE    ::= STRING_LITERAL
+ 
+ This pragma indicates that the given entity is not used in the program
+ to be compiled and built, thus allowing the compiler to eliminate the
+ code or data associated with the named entity.  Any reference to an
+ eliminated entity causes a compile-time or link-time error.
+ 
+ The pragma has the following semantics, where ‘U’ is the unit specified
+ by the ‘Unit_Name’ argument and ‘E’ is the entity specified by the
+ ‘Entity’ argument:
+ 
+    * ‘E’ must be a subprogram that is explicitly declared either:
+ 
+         * Within ‘U’, or
+ 
+         * Within a generic package that is instantiated in ‘U’, or
+ 
+         * As an instance of generic subprogram instantiated in ‘U’.
+ 
+      Otherwise the pragma is ignored.
+ 
+    * If ‘E’ is overloaded within ‘U’ then, in the absence of a
+      ‘Source_Location’ argument, all overloadings are eliminated.
+ 
+    * If ‘E’ is overloaded within ‘U’ and only some overloadings are to
+      be eliminated, then each overloading to be eliminated must be
+      specified in a corresponding pragma ‘Eliminate’ with a
+      ‘Source_Location’ argument identifying the line where the
+      declaration appears, as described below.
+ 
+    * If ‘E’ is declared as the result of a generic instantiation, then a
+      ‘Source_Location’ argument is needed, as described below.
+ 
+ Pragma ‘Eliminate’ allows a program to be compiled in a
+ system-independent manner, so that unused entities are eliminated but
+ without needing to modify the source text.  Normally the required set of
+ ‘Eliminate’ pragmas is constructed automatically using the ‘gnatelim’
+ tool.
+ 
+ Any source file change that removes, splits, or adds lines may make the
+ set of ‘Eliminate’ pragmas invalid because their ‘Source_Location’
+ argument values may get out of date.
+ 
+ Pragma ‘Eliminate’ may be used where the referenced entity is a
+ dispatching operation.  In this case all the subprograms to which the
+ given operation can dispatch are considered to be unused (are never
+ called as a result of a direct or a dispatching call).
+ 
+ The string literal given for the source location specifies the line
+ number of the declaration of the entity, using the following syntax for
+ ‘SOURCE_TRACE’:
+ 
+      SOURCE_TRACE     ::= SOURCE_REFERENCE [ LBRACKET SOURCE_TRACE RBRACKET ]
+ 
+      LBRACKET         ::= '['
+      RBRACKET         ::= ']'
+ 
+      SOURCE_REFERENCE ::= FILE_NAME : LINE_NUMBER
+ 
+      LINE_NUMBER      ::= DIGIT {DIGIT}
+ 
+ Spaces around the colon in a ‘SOURCE_REFERENCE’ are optional.
+ 
+ The source trace that is given as the ‘Source_Location’ must obey the
+ following rules (or else the pragma is ignored), where ‘U’ is the unit
+ ‘U’ specified by the ‘Unit_Name’ argument and ‘E’ is the subprogram
+ specified by the ‘Entity’ argument:
+ 
+    * ‘FILE_NAME’ is the short name (with no directory information) of
+      the Ada source file for ‘U’, using the required syntax for the
+      underlying file system (e.g.  case is significant if the underlying
+      operating system is case sensitive).  If ‘U’ is a package and ‘E’
+      is a subprogram declared in the package specification and its full
+      declaration appears in the package body, then the relevant source
+      file is the one for the package specification; analogously if ‘U’
+      is a generic package.
+ 
+    * If ‘E’ is not declared in a generic instantiation (this includes
+      generic subprogram instances), the source trace includes only one
+      source line reference.  ‘LINE_NUMBER’ gives the line number of the
+      occurrence of the declaration of ‘E’ within the source file (as a
+      decimal literal without an exponent or point).
+ 
+    * If ‘E’ is declared by a generic instantiation, its source trace
+      (from left to right) starts with the source location of the
+      declaration of ‘E’ in the generic unit and ends with the source
+      location of the instantiation, given in square brackets.  This
+      approach is applied recursively with nested instantiations: the
+      rightmost (nested most deeply in square brackets) element of the
+      source trace is the location of the outermost instantiation, and
+      the leftmost element (that is, outside of any square brackets) is
+      the location of the declaration of ‘E’ in the generic unit.
+ 
+ Examples:
+ 
+           pragma Eliminate (Pkg0, Proc);
+           -- Eliminate (all overloadings of) Proc in Pkg0
+ 
+           pragma Eliminate (Pkg1, Proc,
+                             Source_Location => "pkg1.ads:8");
+           -- Eliminate overloading of Proc at line 8 in pkg1.ads
+ 
+           -- Assume the following file contents:
+           --   gen_pkg.ads
+           --   1: generic
+           --   2:   type T is private;
+           --   3: package Gen_Pkg is
+           --   4:   procedure Proc(N : T);
+           --  ...   ...
+           --  ... end Gen_Pkg;
+           --
+           --    q.adb
+           --   1: with Gen_Pkg;
+           --   2: procedure Q is
+           --   3:   package Inst_Pkg is new Gen_Pkg(Integer);
+           --  ...   -- No calls on Inst_Pkg.Proc
+           --  ... end Q;
+ 
+           -- The following pragma eliminates Inst_Pkg.Proc from Q
+           pragma Eliminate (Q, Proc,
+                             Source_Location => "gen_pkg.ads:4[q.adb:3]");
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Enable_Atomic_Synchronization,  Next: Pragma Export_Function,  Prev: Pragma Eliminate,  Up: Implementation Defined Pragmas
+ 
+ 2.55 Pragma Enable_Atomic_Synchronization
+ =========================================
+ 
+ Syntax:
+ 
+      pragma Enable_Atomic_Synchronization [(Entity)];
+ 
+ Ada requires that accesses (reads or writes) of an atomic variable be
+ regarded as synchronization points in the case of multiple tasks.
+ Particularly in the case of multi-processors this may require special
+ handling, e.g.  the generation of memory barriers.  This synchronization
+ is performed by default, but can be turned off using ‘pragma
+ Disable_Atomic_Synchronization’.  The ‘Enable_Atomic_Synchronization’
+ pragma can be used to turn it back on.
+ 
+ The placement and scope rules for this pragma are the same as those for
+ ‘pragma Unsuppress’.  In particular it can be used as a configuration
+ pragma, or in a declaration sequence where it applies till the end of
+ the scope.  If an ‘Entity’ argument is present, the action applies only
+ to that entity.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Export_Function,  Next: Pragma Export_Object,  Prev: Pragma Enable_Atomic_Synchronization,  Up: Implementation Defined Pragmas
+ 
+ 2.56 Pragma Export_Function
+ ===========================
+ 
+ Syntax:
+ 
+      pragma Export_Function (
+           [Internal         =>] LOCAL_NAME
+        [, [External         =>] EXTERNAL_SYMBOL]
+        [, [Parameter_Types  =>] PARAMETER_TYPES]
+        [, [Result_Type      =>] result_SUBTYPE_MARK]
+        [, [Mechanism        =>] MECHANISM]
+        [, [Result_Mechanism =>] MECHANISM_NAME]);
+ 
+      EXTERNAL_SYMBOL ::=
+        IDENTIFIER
+      | static_string_EXPRESSION
+      | ""
+ 
+      PARAMETER_TYPES ::=
+        null
+      | TYPE_DESIGNATOR {, TYPE_DESIGNATOR}
+ 
+      TYPE_DESIGNATOR ::=
+        subtype_NAME
+      | subtype_Name ' Access
+ 
+      MECHANISM ::=
+        MECHANISM_NAME
+      | (MECHANISM_ASSOCIATION {, MECHANISM_ASSOCIATION})
+ 
+      MECHANISM_ASSOCIATION ::=
+        [formal_parameter_NAME =>] MECHANISM_NAME
+ 
+      MECHANISM_NAME ::= Value | Reference
+ 
+ Use this pragma to make a function externally callable and optionally
+ provide information on mechanisms to be used for passing parameter and
+ result values.  We recommend, for the purposes of improving portability,
+ this pragma always be used in conjunction with a separate pragma
+ ‘Export’, which must precede the pragma ‘Export_Function’.  GNAT does
+ not require a separate pragma ‘Export’, but if none is present,
+ ‘Convention Ada’ is assumed, which is usually not what is wanted, so it
+ is usually appropriate to use this pragma in conjunction with a ‘Export’
+ or ‘Convention’ pragma that specifies the desired foreign convention.
+ Pragma ‘Export_Function’ (and ‘Export’, if present) must appear in the
+ same declarative region as the function to which they apply.
+ 
+ The ‘internal_name’ must uniquely designate the function to which the
+ pragma applies.  If more than one function name exists of this name in
+ the declarative part you must use the ‘Parameter_Types’ and
+ ‘Result_Type’ parameters to achieve the required unique designation.
+ The ‘subtype_mark’s in these parameters must exactly match the subtypes
+ in the corresponding function specification, using positional notation
+ to match parameters with subtype marks.  The form with an ‘'Access’
+ attribute can be used to match an anonymous access parameter.
+ 
+ Special treatment is given if the EXTERNAL is an explicit null string or
+ a static string expressions that evaluates to the null string.  In this
+ case, no external name is generated.  This form still allows the
+ specification of parameter mechanisms.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Export_Object,  Next: Pragma Export_Procedure,  Prev: Pragma Export_Function,  Up: Implementation Defined Pragmas
+ 
+ 2.57 Pragma Export_Object
+ =========================
+ 
+ Syntax:
+ 
+      pragma Export_Object (
+            [Internal =>] LOCAL_NAME
+         [, [External =>] EXTERNAL_SYMBOL]
+         [, [Size     =>] EXTERNAL_SYMBOL]);
+ 
+      EXTERNAL_SYMBOL ::=
+        IDENTIFIER
+      | static_string_EXPRESSION
+ 
+ This pragma designates an object as exported, and apart from the
+ extended rules for external symbols, is identical in effect to the use
+ of the normal ‘Export’ pragma applied to an object.  You may use a
+ separate Export pragma (and you probably should from the point of view
+ of portability), but it is not required.  ‘Size’ is syntax checked, but
+ otherwise ignored by GNAT.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Export_Procedure,  Next: Pragma Export_Valued_Procedure,  Prev: Pragma Export_Object,  Up: Implementation Defined Pragmas
+ 
+ 2.58 Pragma Export_Procedure
+ ============================
+ 
+ Syntax:
+ 
+      pragma Export_Procedure (
+           [Internal        =>] LOCAL_NAME
+        [, [External        =>] EXTERNAL_SYMBOL]
+        [, [Parameter_Types =>] PARAMETER_TYPES]
+        [, [Mechanism       =>] MECHANISM]);
+ 
+      EXTERNAL_SYMBOL ::=
+        IDENTIFIER
+      | static_string_EXPRESSION
+      | ""
+ 
+      PARAMETER_TYPES ::=
+        null
+      | TYPE_DESIGNATOR {, TYPE_DESIGNATOR}
+ 
+      TYPE_DESIGNATOR ::=
+        subtype_NAME
+      | subtype_Name ' Access
+ 
+      MECHANISM ::=
+        MECHANISM_NAME
+      | (MECHANISM_ASSOCIATION {, MECHANISM_ASSOCIATION})
+ 
+      MECHANISM_ASSOCIATION ::=
+        [formal_parameter_NAME =>] MECHANISM_NAME
+ 
+      MECHANISM_NAME ::= Value | Reference
+ 
+ This pragma is identical to ‘Export_Function’ except that it applies to
+ a procedure rather than a function and the parameters ‘Result_Type’ and
+ ‘Result_Mechanism’ are not permitted.  GNAT does not require a separate
+ pragma ‘Export’, but if none is present, ‘Convention Ada’ is assumed,
+ which is usually not what is wanted, so it is usually appropriate to use
+ this pragma in conjunction with a ‘Export’ or ‘Convention’ pragma that
+ specifies the desired foreign convention.
+ 
+ Special treatment is given if the EXTERNAL is an explicit null string or
+ a static string expressions that evaluates to the null string.  In this
+ case, no external name is generated.  This form still allows the
+ specification of parameter mechanisms.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Export_Valued_Procedure,  Next: Pragma Extend_System,  Prev: Pragma Export_Procedure,  Up: Implementation Defined Pragmas
+ 
+ 2.59 Pragma Export_Valued_Procedure
+ ===================================
+ 
+ Syntax:
+ 
+      pragma Export_Valued_Procedure (
+           [Internal        =>] LOCAL_NAME
+        [, [External        =>] EXTERNAL_SYMBOL]
+        [, [Parameter_Types =>] PARAMETER_TYPES]
+        [, [Mechanism       =>] MECHANISM]);
+ 
+      EXTERNAL_SYMBOL ::=
+        IDENTIFIER
+      | static_string_EXPRESSION
+      | ""
+ 
+      PARAMETER_TYPES ::=
+        null
+      | TYPE_DESIGNATOR {, TYPE_DESIGNATOR}
+ 
+      TYPE_DESIGNATOR ::=
+        subtype_NAME
+      | subtype_Name ' Access
+ 
+      MECHANISM ::=
+        MECHANISM_NAME
+      | (MECHANISM_ASSOCIATION {, MECHANISM_ASSOCIATION})
+ 
+      MECHANISM_ASSOCIATION ::=
+        [formal_parameter_NAME =>] MECHANISM_NAME
+ 
+      MECHANISM_NAME ::= Value | Reference
+ 
+ This pragma is identical to ‘Export_Procedure’ except that the first
+ parameter of ‘LOCAL_NAME’, which must be present, must be of mode ‘out’,
+ and externally the subprogram is treated as a function with this
+ parameter as the result of the function.  GNAT provides for this
+ capability to allow the use of ‘out’ and ‘in out’ parameters in
+ interfacing to external functions (which are not permitted in Ada
+ functions).  GNAT does not require a separate pragma ‘Export’, but if
+ none is present, ‘Convention Ada’ is assumed, which is almost certainly
+ not what is wanted since the whole point of this pragma is to interface
+ with foreign language functions, so it is usually appropriate to use
+ this pragma in conjunction with a ‘Export’ or ‘Convention’ pragma that
+ specifies the desired foreign convention.
+ 
+ Special treatment is given if the EXTERNAL is an explicit null string or
+ a static string expressions that evaluates to the null string.  In this
+ case, no external name is generated.  This form still allows the
+ specification of parameter mechanisms.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Extend_System,  Next: Pragma Extensions_Allowed,  Prev: Pragma Export_Valued_Procedure,  Up: Implementation Defined Pragmas
+ 
+ 2.60 Pragma Extend_System
+ =========================
+ 
+ Syntax:
+ 
+      pragma Extend_System ([Name =>] IDENTIFIER);
+ 
+ This pragma is used to provide backwards compatibility with other
+ implementations that extend the facilities of package ‘System’.  In
+ GNAT, ‘System’ contains only the definitions that are present in the Ada
+ RM. However, other implementations, notably the DEC Ada 83
+ implementation, provide many extensions to package ‘System’.
+ 
+ For each such implementation accommodated by this pragma, GNAT provides
+ a package ‘Aux_XXX’, e.g., ‘Aux_DEC’ for the DEC Ada 83 implementation,
+ which provides the required additional definitions.  You can use this
+ package in two ways.  You can ‘with’ it in the normal way and access
+ entities either by selection or using a ‘use’ clause.  In this case no
+ special processing is required.
+ 
+ However, if existing code contains references such as ‘System.XXX’ where
+ ‘xxx’ is an entity in the extended definitions provided in package
+ ‘System’, you may use this pragma to extend visibility in ‘System’ in a
+ non-standard way that provides greater compatibility with the existing
+ code.  Pragma ‘Extend_System’ is a configuration pragma whose single
+ argument is the name of the package containing the extended definition
+ (e.g., ‘Aux_DEC’ for the DEC Ada case).  A unit compiled under control
+ of this pragma will be processed using special visibility processing
+ that looks in package ‘System.Aux_XXX’ where ‘Aux_XXX’ is the pragma
+ argument for any entity referenced in package ‘System’, but not found in
+ package ‘System’.
+ 
+ You can use this pragma either to access a predefined ‘System’ extension
+ supplied with the compiler, for example ‘Aux_DEC’ or you can construct
+ your own extension unit following the above definition.  Note that such
+ a package is a child of ‘System’ and thus is considered part of the
+ implementation.  To compile it you will have to use the ‘-gnatg’ switch
+ for compiling System units, as explained in the GNAT User’s Guide.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Extensions_Allowed,  Next: Pragma Extensions_Visible,  Prev: Pragma Extend_System,  Up: Implementation Defined Pragmas
+ 
+ 2.61 Pragma Extensions_Allowed
+ ==============================
+ 
+ Syntax:
+ 
+      pragma Extensions_Allowed (On | Off | All);
+ 
+ This configuration pragma enables (via the “On” or “All” argument) or
+ disables (via the “Off” argument) the implementation extension mode; the
+ pragma takes precedence over the ‘-gnatX’ and ‘-gnatX0’ command
+ switches.
+ 
+ If an argument of “All” is specified, the latest version of the Ada
+ language is implemented (currently Ada 2022) and, in addition, a number
+ of GNAT specific extensions are recognized.  These extensions are listed
+ below.  An argument of “On” has the same effect except that only some,
+ not all, of the listed extensions are enabled; those extensions are
+ identified below.
+ 
+    * Constrained attribute for generic objects
+ 
+      The ‘Constrained’ attribute is permitted for objects of generic
+      types.  The result indicates if the corresponding actual is
+      constrained.
+ 
+    * ‘Static’ aspect on intrinsic functions
+ 
+      The Ada 202x ‘Static’ aspect can be specified on Intrinsic imported
+      functions and the compiler will evaluate some of these intrinsic
+      statically, in particular the ‘Shift_Left’ and ‘Shift_Right’
+      intrinsics.
+ 
+      An Extensions_Allowed pragma argument of “On” enables this
+      extension.
+ 
+    * ‘[]’ aggregates
+ 
+      This new aggregate syntax for arrays and containers is provided
+      under -gnatX to experiment and confirm this new language syntax.
+ 
+    * Additional ‘when’ constructs
+ 
+      In addition to the ‘exit when CONDITION’ control structure, several
+      additional constructs are allowed following this format.  Including
+      ‘return when CONDITION’, ‘goto when CONDITION’, and ‘raise [with
+      EXCEPTION_MESSAGE] when CONDITION.’
+ 
+      Some examples:
+ 
+           return Result when Variable > 10;
+ 
+           raise Program_Error with "Element is null" when Element = null;
+ 
+           goto End_Of_Subprogram when Variable = -1;
+ 
+    * Casing on composite values (aka pattern matching)
+ 
+      The selector for a case statement may be of a composite type,
+      subject to some restrictions (described below).  Aggregate syntax
+      is used for choices of such a case statement; however, in cases
+      where a “normal” aggregate would require a discrete value, a
+      discrete subtype may be used instead; box notation can also be used
+      to match all values.
+ 
+      Consider this example:
+ 
+           type Rec is record
+              F1, F2 : Integer;
+           end record;
+ 
+           procedure Caser_1 (X : Rec) is
+           begin
+              case X is
+                 when (F1 => Positive, F2 => Positive) =>
+                    Do_This;
+                 when (F1 => Natural, F2 => <>) | (F1 => <>, F2 => Natural) =>
+                    Do_That;
+                 when others =>
+                     Do_The_Other_Thing;
+              end case;
+           end Caser_1;
+ 
+      If Caser_1 is called and both components of X are positive, then
+      Do_This will be called; otherwise, if either component is
+      nonnegative then Do_That will be called; otherwise,
+      Do_The_Other_Thing will be called.
+ 
+      If the set of values that match the choice(s) of an earlier
+      alternative overlaps the corresponding set of a later alternative,
+      then the first set shall be a proper subset of the second (and the
+      later alternative will not be executed if the earlier alternative
+      “matches”).  All possible values of the composite type shall be
+      covered.  The composite type of the selector shall be an array or
+      record type that is neither limited class-wide.  Currently, a “when
+      others =>” case choice is required; it is intended that this
+      requirement will be relaxed at some point.
+ 
+      If a subcomponent’s subtype does not meet certain restrictions,
+      then the only value that can be specified for that subcomponent in
+      a case choice expression is a “box” component association (which
+      matches all possible values for the subcomponent).  This
+      restriction applies if
+ 
+         - the component subtype is not a record, array, or discrete
+           type; or
+ 
+         - the component subtype is subject to a non-static constraint or
+           has a predicate; or
+ 
+         - the component type is an enumeration type that is subject to
+           an enumeration representation clause; or
+ 
+         - the component type is a multidimensional array type or an
+           array type with a nonstatic index subtype.
+ 
+      Support for casing on arrays (and on records that contain arrays)
+      is currently subject to some restrictions.  Non-positional array
+      aggregates are not supported as (or within) case choices.  Likewise
+      for array type and subtype names.  The current implementation
+      exceeds compile-time capacity limits in some annoyingly common
+      scenarios; the message generated in such cases is usually “Capacity
+      exceeded in compiling case statement with composite selector type”.
+ 
+      In addition, pattern bindings are supported.  This is a mechanism
+      for binding a name to a component of a matching value for use
+      within an alternative of a case statement.  For a component
+      association that occurs within a case choice, the expression may be
+      followed by “is <identifier>”.  In the special case of a “box”
+      component association, the identifier may instead be provided
+      within the box.  Either of these indicates that the given identifer
+      denotes (a constant view of) the matching subcomponent of the case
+      selector.  Binding is not yet supported for arrays or subcomponents
+      thereof.
+ 
+      Consider this example (which uses type Rec from the previous
+      example):
+ 
+           procedure Caser_2 (X : Rec) is
+           begin
+              case X is
+                 when (F1 => Positive is Abc, F2 => Positive) =>
+                    Do_This (Abc)
+                 when (F1 => Natural is N1, F2 => <N2>) |
+                      (F1 => <N2>, F2 => Natural is N1) =>
+                    Do_That (Param_1 => N1, Param_2 => N2);
+                 when others =>
+                    Do_The_Other_Thing;
+              end case;
+           end Caser_2;
+ 
+      This example is the same as the previous one with respect to
+      determining whether Do_This, Do_That, or Do_The_Other_Thing will be
+      called.  But for this version, Do_This takes a parameter and
+      Do_That takes two parameters.  If Do_This is called, the actual
+      parameter in the call will be X.F1.
+ 
+      If Do_That is called, the situation is more complex because there
+      are two choices for that alternative.  If Do_That is called because
+      the first choice matched (i.e., because X.F1 is nonnegative and
+      either X.F1 or X.F2 is zero or negative), then the actual
+      parameters of the call will be (in order) X.F1 and X.F2.  If
+      Do_That is called because the second choice matched (and the first
+      one did not), then the actual parameters will be reversed.
+ 
+      Within the choice list for single alternative, each choice must
+      define the same set of bindings and the component subtypes for for
+      a given identifer must all statically match.  Currently, the case
+      of a binding for a nondiscrete component is not implemented.
+ 
+      An Extensions_Allowed pragma argument of “On” enables this
+      extension.
+ 
+    * Fixed lower bounds for array types and subtypes
+ 
+      Unconstrained array types and subtypes can be specified with a
+      lower bound that is fixed to a certain value, by writing an index
+      range that uses the syntax “<lower-bound-expression> ..  <>”.  This
+      guarantees that all objects of the type or subtype will have the
+      specified lower bound.
+ 
+      For example, a matrix type with fixed lower bounds of zero for each
+      dimension can be declared by the following:
+ 
+           type Matrix is
+             array (Natural range 0 .. <>, Natural range 0 .. <>) of Integer;
+ 
+      Objects of type Matrix declared with an index constraint must have
+      index ranges starting at zero:
+ 
+           M1 : Matrix (0 .. 9, 0 .. 19);
+           M2 : Matrix (2 .. 11, 3 .. 22);  -- Warning about bounds; will raise CE
+ 
+      Similarly, a subtype of String can be declared that specifies the
+      lower bound of objects of that subtype to be 1:
+ 
+                subtype String_1 is String (1 .. <>);
+ 
+      If a string slice is passed to a formal of subtype String_1 in a
+      call to a subprogram S, the slice’s bounds will “slide” so that the
+      lower bound is 1.  Within S, the lower bound of the formal is known
+      to be 1, so, unlike a normal unconstrained String formal, there is
+      no need to worry about accounting for other possible lower-bound
+      values.  Sliding of bounds also occurs in other contexts, such as
+      for object declarations with an unconstrained subtype with fixed
+      lower bound, as well as in subtype conversions.
+ 
+      Use of this feature increases safety by simplifying code, and can
+      also improve the efficiency of indexing operations, since the
+      compiler statically knows the lower bound of unconstrained array
+      formals when the formal’s subtype has index ranges with static
+      fixed lower bounds.
+ 
+      An Extensions_Allowed pragma argument of “On” enables this
+      extension.
+ 
+    * Prefixed-view notation for calls to primitive subprograms of
+      untagged types
+ 
+      Since Ada 2005, calls to primitive subprograms of a tagged type
+      that have a “prefixed view” (see RM 4.1.3(9.2)) have been allowed
+      to be written using the form of a selected_component, with the
+      first actual parameter given as the prefix and the name of the
+      subprogram as a selector.  This prefixed-view notation for calls is
+      extended so as to also allow such syntax for calls to primitive
+      subprograms of untagged types.  The primitives of an untagged type
+      T that have a prefixed view are those where the first formal
+      parameter of the subprogram either is of type T or is an anonymous
+      access parameter whose designated type is T. For a type that has a
+      component that happens to have the same simple name as one of the
+      type’s primitive subprograms, where the component is visible at the
+      point of a selected_component using that name, preference is given
+      to the component in a selected_component (as is currently the case
+      for tagged types with such component names).
+ 
+      An Extensions_Allowed pragma argument of “On” enables this
+      extension.
+ 
+    * Expression defaults for generic formal functions
+ 
+      The declaration of a generic formal function is allowed to specify
+      an expression as a default, using the syntax of an expression
+      function.
+ 
+      Here is an example of this feature:
+ 
+           generic
+              type T is private;
+              with function Copy (Item : T) return T is (Item); -- Defaults to Item
+           package Stacks is
+ 
+              type Stack is limited private;
+ 
+              procedure Push (S : in out Stack; X : T); -- Calls Copy on X
+ 
+              function Pop (S : in out Stack) return T; -- Calls Copy to return item
+ 
+           private
+              -- ...
+           end Stacks;
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Extensions_Visible,  Next: Pragma External,  Prev: Pragma Extensions_Allowed,  Up: Implementation Defined Pragmas
+ 
+ 2.62 Pragma Extensions_Visible
+ ==============================
+ 
+ Syntax:
+ 
+      pragma Extensions_Visible [ (static_boolean_EXPRESSION) ];
+ 
+ For the semantics of this pragma, see the entry for aspect
+ ‘Extensions_Visible’ in the SPARK 2014 Reference Manual, section 6.1.7.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma External,  Next: Pragma External_Name_Casing,  Prev: Pragma Extensions_Visible,  Up: Implementation Defined Pragmas
+ 
+ 2.63 Pragma External
+ ====================
+ 
+ Syntax:
+ 
+      pragma External (
+        [   Convention    =>] convention_IDENTIFIER,
+        [   Entity        =>] LOCAL_NAME
+        [, [External_Name =>] static_string_EXPRESSION ]
+        [, [Link_Name     =>] static_string_EXPRESSION ]);
+ 
+ This pragma is identical in syntax and semantics to pragma ‘Export’ as
+ defined in the Ada Reference Manual.  It is provided for compatibility
+ with some Ada 83 compilers that used this pragma for exactly the same
+ purposes as pragma ‘Export’ before the latter was standardized.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma External_Name_Casing,  Next: Pragma Fast_Math,  Prev: Pragma External,  Up: Implementation Defined Pragmas
+ 
+ 2.64 Pragma External_Name_Casing
+ ================================
+ 
+ Syntax:
+ 
+      pragma External_Name_Casing (
+        Uppercase | Lowercase
+        [, Uppercase | Lowercase | As_Is]);
+ 
+ This pragma provides control over the casing of external names
+ associated with Import and Export pragmas.  There are two cases to
+ consider:
+ 
+    * Implicit external names
+ 
+      Implicit external names are derived from identifiers.  The most
+      common case arises when a standard Ada Import or Export pragma is
+      used with only two arguments, as in:
+ 
+           pragma Import (C, C_Routine);
+ 
+      Since Ada is a case-insensitive language, the spelling of the
+      identifier in the Ada source program does not provide any
+      information on the desired casing of the external name, and so a
+      convention is needed.  In GNAT the default treatment is that such
+      names are converted to all lower case letters.  This corresponds to
+      the normal C style in many environments.  The first argument of
+      pragma ‘External_Name_Casing’ can be used to control this
+      treatment.  If ‘Uppercase’ is specified, then the name will be
+      forced to all uppercase letters.  If ‘Lowercase’ is specified, then
+      the normal default of all lower case letters will be used.
+ 
+      This same implicit treatment is also used in the case of extended
+      DEC Ada 83 compatible Import and Export pragmas where an external
+      name is explicitly specified using an identifier rather than a
+      string.
+ 
+    * Explicit external names
+ 
+      Explicit external names are given as string literals.  The most
+      common case arises when a standard Ada Import or Export pragma is
+      used with three arguments, as in:
+ 
+           pragma Import (C, C_Routine, "C_routine");
+ 
+      In this case, the string literal normally provides the exact casing
+      required for the external name.  The second argument of pragma
+      ‘External_Name_Casing’ may be used to modify this behavior.  If
+      ‘Uppercase’ is specified, then the name will be forced to all
+      uppercase letters.  If ‘Lowercase’ is specified, then the name will
+      be forced to all lowercase letters.  A specification of ‘As_Is’
+      provides the normal default behavior in which the casing is taken
+      from the string provided.
+ 
+ This pragma may appear anywhere that a pragma is valid.  In particular,
+ it can be used as a configuration pragma in the ‘gnat.adc’ file, in
+ which case it applies to all subsequent compilations, or it can be used
+ as a program unit pragma, in which case it only applies to the current
+ unit, or it can be used more locally to control individual Import/Export
+ pragmas.
+ 
+ It was primarily intended for use with OpenVMS systems, where many
+ compilers convert all symbols to upper case by default.  For interfacing
+ to such compilers (e.g., the DEC C compiler), it may be convenient to
+ use the pragma:
+ 
+      pragma External_Name_Casing (Uppercase, Uppercase);
+ 
+ to enforce the upper casing of all external symbols.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Fast_Math,  Next: Pragma Favor_Top_Level,  Prev: Pragma External_Name_Casing,  Up: Implementation Defined Pragmas
+ 
+ 2.65 Pragma Fast_Math
+ =====================
+ 
+ Syntax:
+ 
+      pragma Fast_Math;
+ 
+ This is a configuration pragma which activates a mode in which speed is
+ considered more important for floating-point operations than absolutely
+ accurate adherence to the requirements of the standard.  Currently the
+ following operations are affected:
+ 
+ ‘Complex Multiplication’
+ 
+      The normal simple formula for complex multiplication can result in
+      intermediate overflows for numbers near the end of the range.  The
+      Ada standard requires that this situation be detected and corrected
+      by scaling, but in Fast_Math mode such cases will simply result in
+      overflow.  Note that to take advantage of this you must instantiate
+      your own version of ‘Ada.Numerics.Generic_Complex_Types’ under
+      control of the pragma, rather than use the preinstantiated
+      versions.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Favor_Top_Level,  Next: Pragma Finalize_Storage_Only,  Prev: Pragma Fast_Math,  Up: Implementation Defined Pragmas
+ 
+ 2.66 Pragma Favor_Top_Level
+ ===========================
+ 
+ Syntax:
+ 
+      pragma Favor_Top_Level (type_NAME);
+ 
+ The argument of pragma ‘Favor_Top_Level’ must be a named
+ access-to-subprogram type.  This pragma is an efficiency hint to the
+ compiler, regarding the use of ‘'Access’ or ‘'Unrestricted_Access’ on
+ nested (non-library-level) subprograms.  The pragma means that nested
+ subprograms are not used with this type, or are rare, so that the
+ generated code should be efficient in the top-level case.  When this
+ pragma is used, dynamically generated trampolines may be used on some
+ targets for nested subprograms.  See restriction
+ ‘No_Implicit_Dynamic_Code’.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Finalize_Storage_Only,  Next: Pragma Float_Representation,  Prev: Pragma Favor_Top_Level,  Up: Implementation Defined Pragmas
+ 
+ 2.67 Pragma Finalize_Storage_Only
+ =================================
+ 
+ Syntax:
+ 
+      pragma Finalize_Storage_Only (first_subtype_LOCAL_NAME);
+ 
+ The argument of pragma ‘Finalize_Storage_Only’ must denote a local type
+ which is derived from ‘Ada.Finalization.Controlled’ or
+ ‘Limited_Controlled’.  The pragma suppresses the call to ‘Finalize’ for
+ declared library-level objects of the argument type.  This is mostly
+ useful for types where finalization is only used to deal with storage
+ reclamation since in most environments it is not necessary to reclaim
+ memory just before terminating execution, hence the name.  Note that
+ this pragma does not suppress Finalize calls for library-level
+ heap-allocated objects (see pragma ‘No_Heap_Finalization’).
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Float_Representation,  Next: Pragma Ghost,  Prev: Pragma Finalize_Storage_Only,  Up: Implementation Defined Pragmas
+ 
+ 2.68 Pragma Float_Representation
+ ================================
+ 
+ Syntax:
+ 
+      pragma Float_Representation (FLOAT_REP[, float_type_LOCAL_NAME]);
+ 
+      FLOAT_REP ::= VAX_Float | IEEE_Float
+ 
+ In the one argument form, this pragma is a configuration pragma which
+ allows control over the internal representation chosen for the
+ predefined floating point types declared in the packages ‘Standard’ and
+ ‘System’.  This pragma is only provided for compatibility and has no
+ effect.
+ 
+ The two argument form specifies the representation to be used for the
+ specified floating-point type.  The argument must be ‘IEEE_Float’ to
+ specify the use of IEEE format, as follows:
+ 
+    * For a digits value of 6, 32-bit IEEE short format will be used.
+ 
+    * For a digits value of 15, 64-bit IEEE long format will be used.
+ 
+    * No other value of digits is permitted.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Ghost,  Next: Pragma Global,  Prev: Pragma Float_Representation,  Up: Implementation Defined Pragmas
+ 
+ 2.69 Pragma Ghost
+ =================
+ 
+ Syntax:
+ 
+      pragma Ghost [ (static_boolean_EXPRESSION) ];
+ 
+ For the semantics of this pragma, see the entry for aspect ‘Ghost’ in
+ the SPARK 2014 Reference Manual, section 6.9.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Global,  Next: Pragma Ident,  Prev: Pragma Ghost,  Up: Implementation Defined Pragmas
+ 
+ 2.70 Pragma Global
+ ==================
+ 
+ Syntax:
+ 
+      pragma Global (GLOBAL_SPECIFICATION);
+ 
+      GLOBAL_SPECIFICATION ::=
+           null
+        | (GLOBAL_LIST)
+        | (MODED_GLOBAL_LIST {, MODED_GLOBAL_LIST})
+ 
+      MODED_GLOBAL_LIST ::= MODE_SELECTOR => GLOBAL_LIST
+ 
+      MODE_SELECTOR ::= In_Out | Input | Output | Proof_In
+      GLOBAL_LIST   ::= GLOBAL_ITEM | (GLOBAL_ITEM {, GLOBAL_ITEM})
+      GLOBAL_ITEM   ::= NAME
+ 
+ For the semantics of this pragma, see the entry for aspect ‘Global’ in
+ the SPARK 2014 Reference Manual, section 6.1.4.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Ident,  Next: Pragma Ignore_Pragma,  Prev: Pragma Global,  Up: Implementation Defined Pragmas
+ 
+ 2.71 Pragma Ident
+ =================
+ 
+ Syntax:
+ 
+      pragma Ident (static_string_EXPRESSION);
+ 
+ This pragma is identical in effect to pragma ‘Comment’.  It is provided
+ for compatibility with other Ada compilers providing this pragma.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Ignore_Pragma,  Next: Pragma Implementation_Defined,  Prev: Pragma Ident,  Up: Implementation Defined Pragmas
+ 
+ 2.72 Pragma Ignore_Pragma
+ =========================
+ 
+ Syntax:
+ 
+      pragma Ignore_Pragma (pragma_IDENTIFIER);
+ 
+ This is a configuration pragma that takes a single argument that is a
+ simple identifier.  Any subsequent use of a pragma whose pragma
+ identifier matches this argument will be silently ignored.  This may be
+ useful when legacy code or code intended for compilation with some other
+ compiler contains pragmas that match the name, but not the exact
+ implementation, of a GNAT pragma.  The use of this pragma allows such
+ pragmas to be ignored, which may be useful in CodePeer mode, or during
+ porting of legacy code.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Implementation_Defined,  Next: Pragma Implemented,  Prev: Pragma Ignore_Pragma,  Up: Implementation Defined Pragmas
+ 
+ 2.73 Pragma Implementation_Defined
+ ==================================
+ 
+ Syntax:
+ 
+      pragma Implementation_Defined (local_NAME);
+ 
+ This pragma marks a previously declared entity as
+ implementation-defined.  For an overloaded entity, applies to the most
+ recent homonym.
+ 
+      pragma Implementation_Defined;
+ 
+ The form with no arguments appears anywhere within a scope, most
+ typically a package spec, and indicates that all entities that are
+ defined within the package spec are Implementation_Defined.
+ 
+ This pragma is used within the GNAT runtime library to identify
+ implementation-defined entities introduced in language-defined units,
+ for the purpose of implementing the No_Implementation_Identifiers
+ restriction.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Implemented,  Next: Pragma Implicit_Packing,  Prev: Pragma Implementation_Defined,  Up: Implementation Defined Pragmas
+ 
+ 2.74 Pragma Implemented
+ =======================
+ 
+ Syntax:
+ 
+      pragma Implemented (procedure_LOCAL_NAME, implementation_kind);
+ 
+      implementation_kind ::= By_Entry | By_Protected_Procedure | By_Any
+ 
+ This is an Ada 2012 representation pragma which applies to protected,
+ task and synchronized interface primitives.  The use of pragma
+ Implemented provides a way to impose a static requirement on the
+ overriding operation by adhering to one of the three implementation
+ kinds: entry, protected procedure or any of the above.  This pragma is
+ available in all earlier versions of Ada as an implementation-defined
+ pragma.
+ 
+      type Synch_Iface is synchronized interface;
+      procedure Prim_Op (Obj : in out Iface) is abstract;
+      pragma Implemented (Prim_Op, By_Protected_Procedure);
+ 
+      protected type Prot_1 is new Synch_Iface with
+         procedure Prim_Op;  --  Legal
+      end Prot_1;
+ 
+      protected type Prot_2 is new Synch_Iface with
+         entry Prim_Op;      --  Illegal
+      end Prot_2;
+ 
+      task type Task_Typ is new Synch_Iface with
+         entry Prim_Op;      --  Illegal
+      end Task_Typ;
+ 
+ When applied to the procedure_or_entry_NAME of a requeue statement,
+ pragma Implemented determines the runtime behavior of the requeue.
+ Implementation kind By_Entry guarantees that the action of requeueing
+ will proceed from an entry to another entry.  Implementation kind
+ By_Protected_Procedure transforms the requeue into a dispatching call,
+ thus eliminating the chance of blocking.  Kind By_Any shares the
+ behavior of By_Entry and By_Protected_Procedure depending on the
+ target’s overriding subprogram kind.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Implicit_Packing,  Next: Pragma Import_Function,  Prev: Pragma Implemented,  Up: Implementation Defined Pragmas
+ 
+ 2.75 Pragma Implicit_Packing
+ ============================
+ 
+ Syntax:
+ 
+      pragma Implicit_Packing;
+ 
+ This is a configuration pragma that requests implicit packing for packed
+ arrays for which a size clause is given but no explicit pragma Pack or
+ specification of Component_Size is present.  It also applies to records
+ where no record representation clause is present.  Consider this
+ example:
+ 
+      type R is array (0 .. 7) of Boolean;
+      for R'Size use 8;
+ 
+ In accordance with the recommendation in the RM (RM 13.3(53)), a Size
+ clause does not change the layout of a composite object.  So the Size
+ clause in the above example is normally rejected, since the default
+ layout of the array uses 8-bit components, and thus the array requires a
+ minimum of 64 bits.
+ 
+ If this declaration is compiled in a region of code covered by an
+ occurrence of the configuration pragma Implicit_Packing, then the Size
+ clause in this and similar examples will cause implicit packing and thus
+ be accepted.  For this implicit packing to occur, the type in question
+ must be an array of small components whose size is known at compile
+ time, and the Size clause must specify the exact size that corresponds
+ to the number of elements in the array multiplied by the size in bits of
+ the component type (both single and multi-dimensioned arrays can be
+ controlled with this pragma).
+ 
+ Similarly, the following example shows the use in the record case
+ 
+      type r is record
+         a, b, c, d, e, f, g, h : boolean;
+         chr                    : character;
+      end record;
+      for r'size use 16;
+ 
+ Without a pragma Pack, each Boolean field requires 8 bits, so the
+ minimum size is 72 bits, but with a pragma Pack, 16 bits would be
+ sufficient.  The use of pragma Implicit_Packing allows this record
+ declaration to compile without an explicit pragma Pack.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Import_Function,  Next: Pragma Import_Object,  Prev: Pragma Implicit_Packing,  Up: Implementation Defined Pragmas
+ 
+ 2.76 Pragma Import_Function
+ ===========================
+ 
+ Syntax:
+ 
+      pragma Import_Function (
+           [Internal         =>] LOCAL_NAME,
+        [, [External         =>] EXTERNAL_SYMBOL]
+        [, [Parameter_Types  =>] PARAMETER_TYPES]
+        [, [Result_Type      =>] SUBTYPE_MARK]
+        [, [Mechanism        =>] MECHANISM]
+        [, [Result_Mechanism =>] MECHANISM_NAME]);
+ 
+      EXTERNAL_SYMBOL ::=
+        IDENTIFIER
+      | static_string_EXPRESSION
+ 
+      PARAMETER_TYPES ::=
+        null
+      | TYPE_DESIGNATOR {, TYPE_DESIGNATOR}
+ 
+      TYPE_DESIGNATOR ::=
+        subtype_NAME
+      | subtype_Name ' Access
+ 
+      MECHANISM ::=
+        MECHANISM_NAME
+      | (MECHANISM_ASSOCIATION {, MECHANISM_ASSOCIATION})
+ 
+      MECHANISM_ASSOCIATION ::=
+        [formal_parameter_NAME =>] MECHANISM_NAME
+ 
+      MECHANISM_NAME ::=
+        Value
+      | Reference
+ 
+ This pragma is used in conjunction with a pragma ‘Import’ to specify
+ additional information for an imported function.  The pragma ‘Import’
+ (or equivalent pragma ‘Interface’) must precede the ‘Import_Function’
+ pragma and both must appear in the same declarative part as the function
+ specification.
+ 
+ The ‘Internal’ argument must uniquely designate the function to which
+ the pragma applies.  If more than one function name exists of this name
+ in the declarative part you must use the ‘Parameter_Types’ and
+ ‘Result_Type’ parameters to achieve the required unique designation.
+ Subtype marks in these parameters must exactly match the subtypes in the
+ corresponding function specification, using positional notation to match
+ parameters with subtype marks.  The form with an ‘'Access’ attribute can
+ be used to match an anonymous access parameter.
+ 
+ You may optionally use the ‘Mechanism’ and ‘Result_Mechanism’ parameters
+ to specify passing mechanisms for the parameters and result.  If you
+ specify a single mechanism name, it applies to all parameters.
+ Otherwise you may specify a mechanism on a parameter by parameter basis
+ using either positional or named notation.  If the mechanism is not
+ specified, the default mechanism is used.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Import_Object,  Next: Pragma Import_Procedure,  Prev: Pragma Import_Function,  Up: Implementation Defined Pragmas
+ 
+ 2.77 Pragma Import_Object
+ =========================
+ 
+ Syntax:
+ 
+      pragma Import_Object (
+           [Internal =>] LOCAL_NAME
+        [, [External =>] EXTERNAL_SYMBOL]
+        [, [Size     =>] EXTERNAL_SYMBOL]);
+ 
+      EXTERNAL_SYMBOL ::=
+        IDENTIFIER
+      | static_string_EXPRESSION
+ 
+ This pragma designates an object as imported, and apart from the
+ extended rules for external symbols, is identical in effect to the use
+ of the normal ‘Import’ pragma applied to an object.  Unlike the
+ subprogram case, you need not use a separate ‘Import’ pragma, although
+ you may do so (and probably should do so from a portability point of
+ view).  ‘size’ is syntax checked, but otherwise ignored by GNAT.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Import_Procedure,  Next: Pragma Import_Valued_Procedure,  Prev: Pragma Import_Object,  Up: Implementation Defined Pragmas
+ 
+ 2.78 Pragma Import_Procedure
+ ============================
+ 
+ Syntax:
+ 
+      pragma Import_Procedure (
+           [Internal        =>] LOCAL_NAME
+        [, [External        =>] EXTERNAL_SYMBOL]
+        [, [Parameter_Types =>] PARAMETER_TYPES]
+        [, [Mechanism       =>] MECHANISM]);
+ 
+      EXTERNAL_SYMBOL ::=
+        IDENTIFIER
+      | static_string_EXPRESSION
+ 
+      PARAMETER_TYPES ::=
+        null
+      | TYPE_DESIGNATOR {, TYPE_DESIGNATOR}
+ 
+      TYPE_DESIGNATOR ::=
+        subtype_NAME
+      | subtype_Name ' Access
+ 
+      MECHANISM ::=
+        MECHANISM_NAME
+      | (MECHANISM_ASSOCIATION {, MECHANISM_ASSOCIATION})
+ 
+      MECHANISM_ASSOCIATION ::=
+        [formal_parameter_NAME =>] MECHANISM_NAME
+ 
+      MECHANISM_NAME ::= Value | Reference
+ 
+ This pragma is identical to ‘Import_Function’ except that it applies to
+ a procedure rather than a function and the parameters ‘Result_Type’ and
+ ‘Result_Mechanism’ are not permitted.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Import_Valued_Procedure,  Next: Pragma Independent,  Prev: Pragma Import_Procedure,  Up: Implementation Defined Pragmas
+ 
+ 2.79 Pragma Import_Valued_Procedure
+ ===================================
+ 
+ Syntax:
+ 
+      pragma Import_Valued_Procedure (
+           [Internal        =>] LOCAL_NAME
+        [, [External        =>] EXTERNAL_SYMBOL]
+        [, [Parameter_Types =>] PARAMETER_TYPES]
+        [, [Mechanism       =>] MECHANISM]);
+ 
+      EXTERNAL_SYMBOL ::=
+        IDENTIFIER
+      | static_string_EXPRESSION
+ 
+      PARAMETER_TYPES ::=
+        null
+      | TYPE_DESIGNATOR {, TYPE_DESIGNATOR}
+ 
+      TYPE_DESIGNATOR ::=
+        subtype_NAME
+      | subtype_Name ' Access
+ 
+      MECHANISM ::=
+        MECHANISM_NAME
+      | (MECHANISM_ASSOCIATION {, MECHANISM_ASSOCIATION})
+ 
+      MECHANISM_ASSOCIATION ::=
+        [formal_parameter_NAME =>] MECHANISM_NAME
+ 
+      MECHANISM_NAME ::= Value | Reference
+ 
+ This pragma is identical to ‘Import_Procedure’ except that the first
+ parameter of ‘LOCAL_NAME’, which must be present, must be of mode ‘out’,
+ and externally the subprogram is treated as a function with this
+ parameter as the result of the function.  The purpose of this capability
+ is to allow the use of ‘out’ and ‘in out’ parameters in interfacing to
+ external functions (which are not permitted in Ada functions).  You may
+ optionally use the ‘Mechanism’ parameters to specify passing mechanisms
+ for the parameters.  If you specify a single mechanism name, it applies
+ to all parameters.  Otherwise you may specify a mechanism on a parameter
+ by parameter basis using either positional or named notation.  If the
+ mechanism is not specified, the default mechanism is used.
+ 
+ Note that it is important to use this pragma in conjunction with a
+ separate pragma Import that specifies the desired convention, since
+ otherwise the default convention is Ada, which is almost certainly not
+ what is required.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Independent,  Next: Pragma Independent_Components,  Prev: Pragma Import_Valued_Procedure,  Up: Implementation Defined Pragmas
+ 
+ 2.80 Pragma Independent
+ =======================
+ 
+ Syntax:
+ 
+      pragma Independent (Local_NAME);
+ 
+ This pragma is standard in Ada 2012 mode (which also provides an aspect
+ of the same name).  It is also available as an implementation-defined
+ pragma in all earlier versions.  It specifies that the designated object
+ or all objects of the designated type must be independently addressable.
+ This means that separate tasks can safely manipulate such objects.  For
+ example, if two components of a record are independent, then two
+ separate tasks may access these two components.  This may place
+ constraints on the representation of the object (for instance
+ prohibiting tight packing).
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Independent_Components,  Next: Pragma Initial_Condition,  Prev: Pragma Independent,  Up: Implementation Defined Pragmas
+ 
+ 2.81 Pragma Independent_Components
+ ==================================
+ 
+ Syntax:
+ 
+      pragma Independent_Components (Local_NAME);
+ 
+ This pragma is standard in Ada 2012 mode (which also provides an aspect
+ of the same name).  It is also available as an implementation-defined
+ pragma in all earlier versions.  It specifies that the components of the
+ designated object, or the components of each object of the designated
+ type, must be independently addressable.  This means that separate tasks
+ can safely manipulate separate components in the composite object.  This
+ may place constraints on the representation of the object (for instance
+ prohibiting tight packing).
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Initial_Condition,  Next: Pragma Initialize_Scalars,  Prev: Pragma Independent_Components,  Up: Implementation Defined Pragmas
+ 
+ 2.82 Pragma Initial_Condition
+ =============================
+ 
+ Syntax:
+ 
+      pragma Initial_Condition (boolean_EXPRESSION);
+ 
+ For the semantics of this pragma, see the entry for aspect
+ ‘Initial_Condition’ in the SPARK 2014 Reference Manual, section 7.1.6.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Initialize_Scalars,  Next: Pragma Initializes,  Prev: Pragma Initial_Condition,  Up: Implementation Defined Pragmas
+ 
+ 2.83 Pragma Initialize_Scalars
+ ==============================
+ 
+ Syntax:
+ 
+      pragma Initialize_Scalars
+        [ ( TYPE_VALUE_PAIR {, TYPE_VALUE_PAIR} ) ];
+ 
+      TYPE_VALUE_PAIR ::=
+        SCALAR_TYPE => static_EXPRESSION
+ 
+      SCALAR_TYPE :=
+        Short_Float
+      | Float
+      | Long_Float
+      | Long_Long_Flat
+      | Signed_8
+      | Signed_16
+      | Signed_32
+      | Signed_64
+      | Unsigned_8
+      | Unsigned_16
+      | Unsigned_32
+      | Unsigned_64
+ 
+ This pragma is similar to ‘Normalize_Scalars’ conceptually but has two
+ important differences.
+ 
+ First, there is no requirement for the pragma to be used uniformly in
+ all units of a partition.  In particular, it is fine to use this just
+ for some or all of the application units of a partition, without needing
+ to recompile the run-time library.  In the case where some units are
+ compiled with the pragma, and some without, then a declaration of a
+ variable where the type is defined in package Standard or is locally
+ declared will always be subject to initialization, as will any
+ declaration of a scalar variable.  For composite variables, whether the
+ variable is initialized may also depend on whether the package in which
+ the type of the variable is declared is compiled with the pragma.
+ 
+ The other important difference is that the programmer can control the
+ value used for initializing scalar objects.  This effect can be achieved
+ in several different ways:
+ 
+    * At compile time, the programmer can specify the invalid value for a
+      particular family of scalar types using the optional arguments of
+      the pragma.
+ 
+      The compile-time approach is intended to optimize the generated
+      code for the pragma, by possibly using fast operations such as
+      ‘memset’.  Note that such optimizations require using values where
+      the bytes all have the same binary representation.
+ 
+    * At bind time, the programmer has several options:
+ 
+         * Initialization with invalid values (similar to
+           Normalize_Scalars, though for Initialize_Scalars it is not
+           always possible to determine the invalid values in complex
+           cases like signed component fields with nonstandard sizes).
+ 
+         * Initialization with high values.
+ 
+         * Initialization with low values.
+ 
+         * Initialization with a specific bit pattern.
+ 
+      See the GNAT User’s Guide for binder options for specifying these
+      cases.
+ 
+      The bind-time approach is intended to provide fast turnaround for
+      testing with different values, without having to recompile the
+      program.
+ 
+    * At execution time, the programmer can specify the invalid values
+      using an environment variable.  See the GNAT User’s Guide for
+      details.
+ 
+      The execution-time approach is intended to provide fast turnaround
+      for testing with different values, without having to recompile and
+      rebind the program.
+ 
+ Note that pragma ‘Initialize_Scalars’ is particularly useful in
+ conjunction with the enhanced validity checking that is now provided in
+ GNAT, which checks for invalid values under more conditions.  Using this
+ feature (see description of the ‘-gnatV’ flag in the GNAT User’s Guide)
+ in conjunction with pragma ‘Initialize_Scalars’ provides a powerful new
+ tool to assist in the detection of problems caused by uninitialized
+ variables.
+ 
+ Note: the use of ‘Initialize_Scalars’ has a fairly extensive effect on
+ the generated code.  This may cause your code to be substantially
+ larger.  It may also cause an increase in the amount of stack required,
+ so it is probably a good idea to turn on stack checking (see description
+ of stack checking in the GNAT User’s Guide) when using this pragma.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Initializes,  Next: Pragma Inline_Always,  Prev: Pragma Initialize_Scalars,  Up: Implementation Defined Pragmas
+ 
+ 2.84 Pragma Initializes
+ =======================
+ 
+ Syntax:
+ 
+      pragma Initializes (INITIALIZATION_LIST);
+ 
+      INITIALIZATION_LIST ::=
+           null
+        | (INITIALIZATION_ITEM {, INITIALIZATION_ITEM})
+ 
+      INITIALIZATION_ITEM ::= name [=> INPUT_LIST]
+ 
+      INPUT_LIST ::=
+           null
+        |  INPUT
+        | (INPUT {, INPUT})
+ 
+      INPUT ::= name
+ 
+ For the semantics of this pragma, see the entry for aspect ‘Initializes’
+ in the SPARK 2014 Reference Manual, section 7.1.5.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Inline_Always,  Next: Pragma Inline_Generic,  Prev: Pragma Initializes,  Up: Implementation Defined Pragmas
+ 
+ 2.85 Pragma Inline_Always
+ =========================
+ 
+ Syntax:
+ 
+      pragma Inline_Always (NAME [, NAME]);
+ 
+ Similar to pragma ‘Inline’ except that inlining is unconditional.
+ Inline_Always instructs the compiler to inline every direct call to the
+ subprogram or else to emit a compilation error, independently of any
+ option, in particular ‘-gnatn’ or ‘-gnatN’ or the optimization level.
+ It is an error to take the address or access of ‘NAME’.  It is also an
+ error to apply this pragma to a primitive operation of a tagged type.
+ Thanks to such restrictions, the compiler is allowed to remove the
+ out-of-line body of ‘NAME’.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Inline_Generic,  Next: Pragma Interface,  Prev: Pragma Inline_Always,  Up: Implementation Defined Pragmas
+ 
+ 2.86 Pragma Inline_Generic
+ ==========================
+ 
+ Syntax:
+ 
+      pragma Inline_Generic (GNAME {, GNAME});
+ 
+      GNAME ::= generic_unit_NAME | generic_instance_NAME
+ 
+ This pragma is provided for compatibility with Dec Ada 83.  It has no
+ effect in GNAT (which always inlines generics), other than to check that
+ the given names are all names of generic units or generic instances.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Interface,  Next: Pragma Interface_Name,  Prev: Pragma Inline_Generic,  Up: Implementation Defined Pragmas
+ 
+ 2.87 Pragma Interface
+ =====================
+ 
+ Syntax:
+ 
+      pragma Interface (
+           [Convention    =>] convention_identifier,
+           [Entity        =>] local_NAME
+        [, [External_Name =>] static_string_expression]
+        [, [Link_Name     =>] static_string_expression]);
+ 
+ This pragma is identical in syntax and semantics to the standard Ada
+ pragma ‘Import’.  It is provided for compatibility with Ada 83.  The
+ definition is upwards compatible both with pragma ‘Interface’ as defined
+ in the Ada 83 Reference Manual, and also with some extended
+ implementations of this pragma in certain Ada 83 implementations.  The
+ only difference between pragma ‘Interface’ and pragma ‘Import’ is that
+ there is special circuitry to allow both pragmas to appear for the same
+ subprogram entity (normally it is illegal to have multiple ‘Import’
+ pragmas).  This is useful in maintaining Ada 83/Ada 95 compatibility and
+ is compatible with other Ada 83 compilers.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Interface_Name,  Next: Pragma Interrupt_Handler,  Prev: Pragma Interface,  Up: Implementation Defined Pragmas
+ 
+ 2.88 Pragma Interface_Name
+ ==========================
+ 
+ Syntax:
+ 
+      pragma Interface_Name (
+           [Entity        =>] LOCAL_NAME
+        [, [External_Name =>] static_string_EXPRESSION]
+        [, [Link_Name     =>] static_string_EXPRESSION]);
+ 
+ This pragma provides an alternative way of specifying the interface name
+ for an interfaced subprogram, and is provided for compatibility with Ada
+ 83 compilers that use the pragma for this purpose.  You must provide at
+ least one of ‘External_Name’ or ‘Link_Name’.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Interrupt_Handler,  Next: Pragma Interrupt_State,  Prev: Pragma Interface_Name,  Up: Implementation Defined Pragmas
+ 
+ 2.89 Pragma Interrupt_Handler
+ =============================
+ 
+ Syntax:
+ 
+      pragma Interrupt_Handler (procedure_LOCAL_NAME);
+ 
+ This program unit pragma is supported for parameterless protected
+ procedures as described in Annex C of the Ada Reference Manual.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Interrupt_State,  Next: Pragma Invariant,  Prev: Pragma Interrupt_Handler,  Up: Implementation Defined Pragmas
+ 
+ 2.90 Pragma Interrupt_State
+ ===========================
+ 
+ Syntax:
+ 
+      pragma Interrupt_State
+       ([Name  =>] value,
+        [State =>] SYSTEM | RUNTIME | USER);
+ 
+ Normally certain interrupts are reserved to the implementation.  Any
+ attempt to attach an interrupt causes Program_Error to be raised, as
+ described in RM C.3.2(22).  A typical example is the ‘SIGINT’ interrupt
+ used in many systems for an ‘Ctrl-C’ interrupt.  Normally this interrupt
+ is reserved to the implementation, so that ‘Ctrl-C’ can be used to
+ interrupt execution.  Additionally, signals such as ‘SIGSEGV’,
+ ‘SIGABRT’, ‘SIGFPE’ and ‘SIGILL’ are often mapped to specific Ada
+ exceptions, or used to implement run-time functions such as the ‘abort’
+ statement and stack overflow checking.
+ 
+ Pragma ‘Interrupt_State’ provides a general mechanism for overriding
+ such uses of interrupts.  It subsumes the functionality of pragma
+ ‘Unreserve_All_Interrupts’.  Pragma ‘Interrupt_State’ is not available
+ on Windows.  On all other platforms than VxWorks, it applies to signals;
+ on VxWorks, it applies to vectored hardware interrupts and may be used
+ to mark interrupts required by the board support package as reserved.
+ 
+ Interrupts can be in one of three states:
+ 
+    * System
+ 
+      The interrupt is reserved (no Ada handler can be installed), and
+      the Ada run-time may not install a handler.  As a result you are
+      guaranteed standard system default action if this interrupt is
+      raised.  This also allows installing a low level handler via C APIs
+      such as sigaction(), outside of Ada control.
+ 
+    * Runtime
+ 
+      The interrupt is reserved (no Ada handler can be installed).  The
+      run time is allowed to install a handler for internal control
+      purposes, but is not required to do so.
+ 
+    * User
+ 
+      The interrupt is unreserved.  The user may install an Ada handler
+      via Ada.Interrupts and pragma Interrupt_Handler or Attach_Handler
+      to provide some other action.
+ 
+ These states are the allowed values of the ‘State’ parameter of the
+ pragma.  The ‘Name’ parameter is a value of the type
+ ‘Ada.Interrupts.Interrupt_ID’.  Typically, it is a name declared in
+ ‘Ada.Interrupts.Names’.
+ 
+ This is a configuration pragma, and the binder will check that there are
+ no inconsistencies between different units in a partition in how a given
+ interrupt is specified.  It may appear anywhere a pragma is legal.
+ 
+ The effect is to move the interrupt to the specified state.
+ 
+ By declaring interrupts to be SYSTEM, you guarantee the standard system
+ action, such as a core dump.
+ 
+ By declaring interrupts to be USER, you guarantee that you can install a
+ handler.
+ 
+ Note that certain signals on many operating systems cannot be caught and
+ handled by applications.  In such cases, the pragma is ignored.  See the
+ operating system documentation, or the value of the array ‘Reserved’
+ declared in the spec of package ‘System.OS_Interface’.
+ 
+ Overriding the default state of signals used by the Ada runtime may
+ interfere with an application’s runtime behavior in the cases of the
+ synchronous signals, and in the case of the signal used to implement the
+ ‘abort’ statement.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Invariant,  Next: Pragma Keep_Names,  Prev: Pragma Interrupt_State,  Up: Implementation Defined Pragmas
+ 
+ 2.91 Pragma Invariant
+ =====================
+ 
+ Syntax:
+ 
+      pragma Invariant
+        ([Entity =>]    private_type_LOCAL_NAME,
+         [Check  =>]    EXPRESSION
+         [,[Message =>] String_Expression]);
+ 
+ This pragma provides exactly the same capabilities as the Type_Invariant
+ aspect defined in AI05-0146-1, and in the Ada 2012 Reference Manual.
+ The Type_Invariant aspect is fully implemented in Ada 2012 mode, but
+ since it requires the use of the aspect syntax, which is not available
+ except in 2012 mode, it is not possible to use the Type_Invariant aspect
+ in earlier versions of Ada.  However the Invariant pragma may be used in
+ any version of Ada.  Also note that the aspect Invariant is a synonym in
+ GNAT for the aspect Type_Invariant, but there is no pragma
+ Type_Invariant.
+ 
+ The pragma must appear within the visible part of the package
+ specification, after the type to which its Entity argument appears.  As
+ with the Invariant aspect, the Check expression is not analyzed until
+ the end of the visible part of the package, so it may contain forward
+ references.  The Message argument, if present, provides the exception
+ message used if the invariant is violated.  If no Message parameter is
+ provided, a default message that identifies the line on which the pragma
+ appears is used.
+ 
+ It is permissible to have multiple Invariants for the same type entity,
+ in which case they are and’ed together.  It is permissible to use this
+ pragma in Ada 2012 mode, but you cannot have both an invariant aspect
+ and an invariant pragma for the same entity.
+ 
+ For further details on the use of this pragma, see the Ada 2012
+ documentation of the Type_Invariant aspect.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Keep_Names,  Next: Pragma License,  Prev: Pragma Invariant,  Up: Implementation Defined Pragmas
+ 
+ 2.92 Pragma Keep_Names
+ ======================
+ 
+ Syntax:
+ 
+      pragma Keep_Names ([On =>] enumeration_first_subtype_LOCAL_NAME);
+ 
+ The ‘LOCAL_NAME’ argument must refer to an enumeration first subtype in
+ the current declarative part.  The effect is to retain the enumeration
+ literal names for use by ‘Image’ and ‘Value’ even if a global
+ ‘Discard_Names’ pragma applies.  This is useful when you want to
+ generally suppress enumeration literal names and for example you
+ therefore use a ‘Discard_Names’ pragma in the ‘gnat.adc’ file, but you
+ want to retain the names for specific enumeration types.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma License,  Next: Pragma Link_With,  Prev: Pragma Keep_Names,  Up: Implementation Defined Pragmas
+ 
+ 2.93 Pragma License
+ ===================
+ 
+ Syntax:
+ 
+      pragma License (Unrestricted | GPL | Modified_GPL | Restricted);
+ 
+ This pragma is provided to allow automated checking for appropriate
+ license conditions with respect to the standard and modified GPL. A
+ pragma ‘License’, which is a configuration pragma that typically appears
+ at the start of a source file or in a separate ‘gnat.adc’ file,
+ specifies the licensing conditions of a unit as follows:
+ 
+    * Unrestricted This is used for a unit that can be freely used with
+      no license restrictions.  Examples of such units are public domain
+      units, and units from the Ada Reference Manual.
+ 
+    * GPL This is used for a unit that is licensed under the unmodified
+      GPL, and which therefore cannot be ‘with’ed by a restricted unit.
+ 
+    * Modified_GPL This is used for a unit licensed under the GNAT
+      modified GPL that includes a special exception paragraph that
+      specifically permits the inclusion of the unit in programs without
+      requiring the entire program to be released under the GPL.
+ 
+    * Restricted This is used for a unit that is restricted in that it is
+      not permitted to depend on units that are licensed under the GPL.
+      Typical examples are proprietary code that is to be released under
+      more restrictive license conditions.  Note that restricted units
+      are permitted to ‘with’ units which are licensed under the modified
+      GPL (this is the whole point of the modified GPL).
+ 
+ Normally a unit with no ‘License’ pragma is considered to have an
+ unknown license, and no checking is done.  However, standard GNAT
+ headers are recognized, and license information is derived from them as
+ follows.
+ 
+ A GNAT license header starts with a line containing 78 hyphens.  The
+ following comment text is searched for the appearance of any of the
+ following strings.
+ 
+ If the string ‘GNU General Public License’ is found, then the unit is
+ assumed to have GPL license, unless the string ‘As a special exception’
+ follows, in which case the license is assumed to be modified GPL.
+ 
+ If one of the strings ‘This specification is adapted from the Ada
+ Semantic Interface’ or ‘This specification is derived from the Ada
+ Reference Manual’ is found then the unit is assumed to be unrestricted.
+ 
+ These default actions means that a program with a restricted license
+ pragma will automatically get warnings if a GPL unit is inappropriately
+ ‘with’ed.  For example, the program:
+ 
+      with Sem_Ch3;
+      with GNAT.Sockets;
+      procedure Secret_Stuff is
+        ...
+      end Secret_Stuff
+ 
+ if compiled with pragma ‘License’ (‘Restricted’) in a ‘gnat.adc’ file
+ will generate the warning:
+ 
+      1.  with Sem_Ch3;
+              |
+         >>> license of withed unit "Sem_Ch3" is incompatible
+ 
+      2.  with GNAT.Sockets;
+      3.  procedure Secret_Stuff is
+ 
+ Here we get a warning on ‘Sem_Ch3’ since it is part of the GNAT compiler
+ and is licensed under the GPL, but no warning for ‘GNAT.Sockets’ which
+ is part of the GNAT run time, and is therefore licensed under the
+ modified GPL.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Link_With,  Next: Pragma Linker_Alias,  Prev: Pragma License,  Up: Implementation Defined Pragmas
+ 
+ 2.94 Pragma Link_With
+ =====================
+ 
+ Syntax:
+ 
+      pragma Link_With (static_string_EXPRESSION {,static_string_EXPRESSION});
+ 
+ This pragma is provided for compatibility with certain Ada 83 compilers.
+ It has exactly the same effect as pragma ‘Linker_Options’ except that
+ spaces occurring within one of the string expressions are treated as
+ separators.  For example, in the following case:
+ 
+      pragma Link_With ("-labc -ldef");
+ 
+ results in passing the strings ‘-labc’ and ‘-ldef’ as two separate
+ arguments to the linker.  In addition pragma Link_With allows multiple
+ arguments, with the same effect as successive pragmas.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Linker_Alias,  Next: Pragma Linker_Constructor,  Prev: Pragma Link_With,  Up: Implementation Defined Pragmas
+ 
+ 2.95 Pragma Linker_Alias
+ ========================
+ 
+ Syntax:
+ 
+      pragma Linker_Alias (
+        [Entity =>] LOCAL_NAME,
+        [Target =>] static_string_EXPRESSION);
+ 
+ ‘LOCAL_NAME’ must refer to an object that is declared at the library
+ level.  This pragma establishes the given entity as a linker alias for
+ the given target.  It is equivalent to ‘__attribute__((alias))’ in GNU C
+ and causes ‘LOCAL_NAME’ to be emitted as an alias for the symbol
+ ‘static_string_EXPRESSION’ in the object file, that is to say no space
+ is reserved for ‘LOCAL_NAME’ by the assembler and it will be resolved to
+ the same address as ‘static_string_EXPRESSION’ by the linker.
+ 
+ The actual linker name for the target must be used (e.g., the fully
+ encoded name with qualification in Ada, or the mangled name in C++), or
+ it must be declared using the C convention with ‘pragma Import’ or
+ ‘pragma Export’.
+ 
+ Not all target machines support this pragma.  On some of them it is
+ accepted only if ‘pragma Weak_External’ has been applied to
+ ‘LOCAL_NAME’.
+ 
+      --  Example of the use of pragma Linker_Alias
+ 
+      package p is
+        i : Integer := 1;
+        pragma Export (C, i);
+ 
+        new_name_for_i : Integer;
+        pragma Linker_Alias (new_name_for_i, "i");
+      end p;
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Linker_Constructor,  Next: Pragma Linker_Destructor,  Prev: Pragma Linker_Alias,  Up: Implementation Defined Pragmas
+ 
+ 2.96 Pragma Linker_Constructor
+ ==============================
+ 
+ Syntax:
+ 
+      pragma Linker_Constructor (procedure_LOCAL_NAME);
+ 
+ ‘procedure_LOCAL_NAME’ must refer to a parameterless procedure that is
+ declared at the library level.  A procedure to which this pragma is
+ applied will be treated as an initialization routine by the linker.  It
+ is equivalent to ‘__attribute__((constructor))’ in GNU C and causes
+ ‘procedure_LOCAL_NAME’ to be invoked before the entry point of the
+ executable is called (or immediately after the shared library is loaded
+ if the procedure is linked in a shared library), in particular before
+ the Ada run-time environment is set up.
+ 
+ Because of these specific contexts, the set of operations such a
+ procedure can perform is very limited and the type of objects it can
+ manipulate is essentially restricted to the elementary types.  In
+ particular, it must only contain code to which pragma Restrictions
+ (No_Elaboration_Code) applies.
+ 
+ This pragma is used by GNAT to implement auto-initialization of shared
+ Stand Alone Libraries, which provides a related capability without the
+ restrictions listed above.  Where possible, the use of Stand Alone
+ Libraries is preferable to the use of this pragma.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Linker_Destructor,  Next: Pragma Linker_Section,  Prev: Pragma Linker_Constructor,  Up: Implementation Defined Pragmas
+ 
+ 2.97 Pragma Linker_Destructor
+ =============================
+ 
+ Syntax:
+ 
+      pragma Linker_Destructor (procedure_LOCAL_NAME);
+ 
+ ‘procedure_LOCAL_NAME’ must refer to a parameterless procedure that is
+ declared at the library level.  A procedure to which this pragma is
+ applied will be treated as a finalization routine by the linker.  It is
+ equivalent to ‘__attribute__((destructor))’ in GNU C and causes
+ ‘procedure_LOCAL_NAME’ to be invoked after the entry point of the
+ executable has exited (or immediately before the shared library is
+ unloaded if the procedure is linked in a shared library), in particular
+ after the Ada run-time environment is shut down.
+ 
+ See ‘pragma Linker_Constructor’ for the set of restrictions that apply
+ because of these specific contexts.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Linker_Section,  Next: Pragma Lock_Free,  Prev: Pragma Linker_Destructor,  Up: Implementation Defined Pragmas
+ 
+ 2.98 Pragma Linker_Section
+ ==========================
+ 
+ Syntax:
+ 
+      pragma Linker_Section (
+        [Entity  =>] LOCAL_NAME,
+        [Section =>] static_string_EXPRESSION);
+ 
+ ‘LOCAL_NAME’ must refer to an object, type, or subprogram that is
+ declared at the library level.  This pragma specifies the name of the
+ linker section for the given entity.  It is equivalent to
+ ‘__attribute__((section))’ in GNU C and causes ‘LOCAL_NAME’ to be placed
+ in the ‘static_string_EXPRESSION’ section of the executable (assuming
+ the linker doesn’t rename the section).  GNAT also provides an
+ implementation defined aspect of the same name.
+ 
+ In the case of specifying this aspect for a type, the effect is to
+ specify the corresponding section for all library-level objects of the
+ type that do not have an explicit linker section set.  Note that this
+ only applies to whole objects, not to components of composite objects.
+ 
+ In the case of a subprogram, the linker section applies to all
+ previously declared matching overloaded subprograms in the current
+ declarative part which do not already have a linker section assigned.
+ The linker section aspect is useful in this case for specifying
+ different linker sections for different elements of such an overloaded
+ set.
+ 
+ Note that an empty string specifies that no linker section is specified.
+ This is not quite the same as omitting the pragma or aspect, since it
+ can be used to specify that one element of an overloaded set of
+ subprograms has the default linker section, or that one object of a type
+ for which a linker section is specified should has the default linker
+ section.
+ 
+ The compiler normally places library-level entities in standard sections
+ depending on the class: procedures and functions generally go in the
+ ‘.text’ section, initialized variables in the ‘.data’ section and
+ uninitialized variables in the ‘.bss’ section.
+ 
+ Other, special sections may exist on given target machines to map
+ special hardware, for example I/O ports or flash memory.  This pragma is
+ a means to defer the final layout of the executable to the linker, thus
+ fully working at the symbolic level with the compiler.
+ 
+ Some file formats do not support arbitrary sections so not all target
+ machines support this pragma.  The use of this pragma may cause a
+ program execution to be erroneous if it is used to place an entity into
+ an inappropriate section (e.g., a modified variable into the ‘.text’
+ section).  See also ‘pragma Persistent_BSS’.
+ 
+      --  Example of the use of pragma Linker_Section
+ 
+      package IO_Card is
+        Port_A : Integer;
+        pragma Volatile (Port_A);
+        pragma Linker_Section (Port_A, ".bss.port_a");
+ 
+        Port_B : Integer;
+        pragma Volatile (Port_B);
+        pragma Linker_Section (Port_B, ".bss.port_b");
+ 
+        type Port_Type is new Integer with Linker_Section => ".bss";
+        PA : Port_Type with Linker_Section => ".bss.PA";
+        PB : Port_Type; --  ends up in linker section ".bss"
+ 
+        procedure Q with Linker_Section => "Qsection";
+      end IO_Card;
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Lock_Free,  Next: Pragma Loop_Invariant,  Prev: Pragma Linker_Section,  Up: Implementation Defined Pragmas
+ 
+ 2.99 Pragma Lock_Free
+ =====================
+ 
+ Syntax: This pragma may be specified for protected types or objects.  It
+ specifies that the implementation of protected operations must be
+ implemented without locks.  Compilation fails if the compiler cannot
+ generate lock-free code for the operations.
+ 
+ The current conditions required to support this pragma are:
+ 
+    * Protected type declarations may not contain entries
+ 
+    * Protected subprogram declarations may not have nonelementary
+      parameters
+ 
+ In addition, each protected subprogram body must satisfy:
+ 
+    * May reference only one protected component
+ 
+    * May not reference nonconstant entities outside the protected
+      subprogram scope
+ 
+    * May not contain address representation items, allocators, or
+      quantified expressions
+ 
+    * May not contain delay, goto, loop, or procedure-call statements
+ 
+    * May not contain exported and imported entities
+ 
+    * May not dereferenced access values
+ 
+    * Function calls and attribute references must be static
+ 
+ If the Lock_Free aspect is specified to be True for a protected unit and
+ the Ceiling_Locking locking policy is in effect, then the run-time
+ actions associated with the Ceiling_Locking locking policy (described in
+ Ada RM D.3) are not performed when a protected operation of the
+ protected unit is executed.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Loop_Invariant,  Next: Pragma Loop_Optimize,  Prev: Pragma Lock_Free,  Up: Implementation Defined Pragmas
+ 
+ 2.100 Pragma Loop_Invariant
+ ===========================
+ 
+ Syntax:
+ 
+      pragma Loop_Invariant ( boolean_EXPRESSION );
+ 
+ The effect of this pragma is similar to that of pragma ‘Assert’, except
+ that in an ‘Assertion_Policy’ pragma, the identifier ‘Loop_Invariant’ is
+ used to control whether it is ignored or checked (or disabled).
+ 
+ ‘Loop_Invariant’ can only appear as one of the items in the sequence of
+ statements of a loop body, or nested inside block statements that appear
+ in the sequence of statements of a loop body.  The intention is that it
+ be used to represent a “loop invariant” assertion, i.e.  something that
+ is true each time through the loop, and which can be used to show that
+ the loop is achieving its purpose.
+ 
+ Multiple ‘Loop_Invariant’ and ‘Loop_Variant’ pragmas that apply to the
+ same loop should be grouped in the same sequence of statements.
+ 
+ To aid in writing such invariants, the special attribute ‘Loop_Entry’
+ may be used to refer to the value of an expression on entry to the loop.
+ This attribute can only be used within the expression of a
+ ‘Loop_Invariant’ pragma.  For full details, see documentation of
+ attribute ‘Loop_Entry’.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Loop_Optimize,  Next: Pragma Loop_Variant,  Prev: Pragma Loop_Invariant,  Up: Implementation Defined Pragmas
+ 
+ 2.101 Pragma Loop_Optimize
+ ==========================
+ 
+ Syntax:
+ 
+      pragma Loop_Optimize (OPTIMIZATION_HINT {, OPTIMIZATION_HINT});
+ 
+      OPTIMIZATION_HINT ::= Ivdep | No_Unroll | Unroll | No_Vector | Vector
+ 
+ This pragma must appear immediately within a loop statement.  It allows
+ the programmer to specify optimization hints for the enclosing loop.
+ The hints are not mutually exclusive and can be freely mixed, but not
+ all combinations will yield a sensible outcome.
+ 
+ There are five supported optimization hints for a loop:
+ 
+    * Ivdep
+ 
+      The programmer asserts that there are no loop-carried dependencies
+      which would prevent consecutive iterations of the loop from being
+      executed simultaneously.
+ 
+    * No_Unroll
+ 
+      The loop must not be unrolled.  This is a strong hint: the compiler
+      will not unroll a loop marked with this hint.
+ 
+    * Unroll
+ 
+      The loop should be unrolled.  This is a weak hint: the compiler
+      will try to apply unrolling to this loop preferably to other
+      optimizations, notably vectorization, but there is no guarantee
+      that the loop will be unrolled.
+ 
+    * No_Vector
+ 
+      The loop must not be vectorized.  This is a strong hint: the
+      compiler will not vectorize a loop marked with this hint.
+ 
+    * Vector
+ 
+      The loop should be vectorized.  This is a weak hint: the compiler
+      will try to apply vectorization to this loop preferably to other
+      optimizations, notably unrolling, but there is no guarantee that
+      the loop will be vectorized.
+ 
+ These hints do not remove the need to pass the appropriate switches to
+ the compiler in order to enable the relevant optimizations, that is to
+ say ‘-funroll-loops’ for unrolling and ‘-ftree-vectorize’ for
+ vectorization.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Loop_Variant,  Next: Pragma Machine_Attribute,  Prev: Pragma Loop_Optimize,  Up: Implementation Defined Pragmas
+ 
+ 2.102 Pragma Loop_Variant
+ =========================
+ 
+ Syntax:
+ 
+      pragma Loop_Variant ( LOOP_VARIANT_ITEM {, LOOP_VARIANT_ITEM } );
+      LOOP_VARIANT_ITEM ::= CHANGE_DIRECTION => discrete_EXPRESSION
+      CHANGE_DIRECTION ::= Increases | Decreases
+ 
+ ‘Loop_Variant’ can only appear as one of the items in the sequence of
+ statements of a loop body, or nested inside block statements that appear
+ in the sequence of statements of a loop body.  It allows the
+ specification of quantities which must always decrease or increase in
+ successive iterations of the loop.  In its simplest form, just one
+ expression is specified, whose value must increase or decrease on each
+ iteration of the loop.
+ 
+ In a more complex form, multiple arguments can be given which are
+ interpreted in a nesting lexicographic manner.  For example:
+ 
+      pragma Loop_Variant (Increases => X, Decreases => Y);
+ 
+ specifies that each time through the loop either X increases, or X stays
+ the same and Y decreases.  A ‘Loop_Variant’ pragma ensures that the loop
+ is making progress.  It can be useful in helping to show informally or
+ prove formally that the loop always terminates.
+ 
+ ‘Loop_Variant’ is an assertion whose effect can be controlled using an
+ ‘Assertion_Policy’ with a check name of ‘Loop_Variant’.  The policy can
+ be ‘Check’ to enable the loop variant check, ‘Ignore’ to ignore the
+ check (in which case the pragma has no effect on the program), or
+ ‘Disable’ in which case the pragma is not even checked for correct
+ syntax.
+ 
+ Multiple ‘Loop_Invariant’ and ‘Loop_Variant’ pragmas that apply to the
+ same loop should be grouped in the same sequence of statements.
+ 
+ The ‘Loop_Entry’ attribute may be used within the expressions of the
+ ‘Loop_Variant’ pragma to refer to values on entry to the loop.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Machine_Attribute,  Next: Pragma Main,  Prev: Pragma Loop_Variant,  Up: Implementation Defined Pragmas
+ 
+ 2.103 Pragma Machine_Attribute
+ ==============================
+ 
+ Syntax:
+ 
+      pragma Machine_Attribute (
+           [Entity         =>] LOCAL_NAME,
+           [Attribute_Name =>] static_string_EXPRESSION
+        [, [Info           =>] static_EXPRESSION {, static_EXPRESSION}] );
+ 
+ Machine-dependent attributes can be specified for types and/or
+ declarations.  This pragma is semantically equivalent to
+ ‘__attribute__((ATTRIBUTE_NAME))’ (if ‘info’ is not specified) or
+ ‘__attribute__((ATTRIBUTE_NAME(INFO)))’ or
+ ‘__attribute__((ATTRIBUTE_NAME(INFO,...)))’ in GNU C, where
+ ‘attribute_name’ is recognized by the compiler middle-end or the
+ ‘TARGET_ATTRIBUTE_TABLE’ machine specific macro.  Note that a string
+ literal for the optional parameter ‘info’ or the following ones is
+ transformed by default into an identifier, which may make this pragma
+ unusable for some attributes.  For further information see ‘GNU Compiler
+ Collection (GCC) Internals’.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Main,  Next: Pragma Main_Storage,  Prev: Pragma Machine_Attribute,  Up: Implementation Defined Pragmas
+ 
+ 2.104 Pragma Main
+ =================
+ 
+ Syntax:
+ 
+      pragma Main
+       (MAIN_OPTION [, MAIN_OPTION]);
+ 
+      MAIN_OPTION ::=
+        [Stack_Size              =>] static_integer_EXPRESSION
+      | [Task_Stack_Size_Default =>] static_integer_EXPRESSION
+      | [Time_Slicing_Enabled    =>] static_boolean_EXPRESSION
+ 
+ This pragma is provided for compatibility with OpenVMS VAX Systems.  It
+ has no effect in GNAT, other than being syntax checked.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Main_Storage,  Next: Pragma Max_Queue_Length,  Prev: Pragma Main,  Up: Implementation Defined Pragmas
+ 
+ 2.105 Pragma Main_Storage
+ =========================
+ 
+ Syntax:
+ 
+      pragma Main_Storage
+        (MAIN_STORAGE_OPTION [, MAIN_STORAGE_OPTION]);
+ 
+      MAIN_STORAGE_OPTION ::=
+        [WORKING_STORAGE =>] static_SIMPLE_EXPRESSION
+      | [TOP_GUARD       =>] static_SIMPLE_EXPRESSION
+ 
+ This pragma is provided for compatibility with OpenVMS VAX Systems.  It
+ has no effect in GNAT, other than being syntax checked.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Max_Queue_Length,  Next: Pragma No_Body,  Prev: Pragma Main_Storage,  Up: Implementation Defined Pragmas
+ 
+ 2.106 Pragma Max_Queue_Length
+ =============================
+ 
+ Syntax:
+ 
+      pragma Max_Entry_Queue (static_integer_EXPRESSION);
+ 
+ This pragma is used to specify the maximum callers per entry queue for
+ individual protected entries and entry families.  It accepts a single
+ integer (-1 or more) as a parameter and must appear after the
+ declaration of an entry.
+ 
+ A value of -1 represents no additional restriction on queue length.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma No_Body,  Next: Pragma No_Caching,  Prev: Pragma Max_Queue_Length,  Up: Implementation Defined Pragmas
+ 
+ 2.107 Pragma No_Body
+ ====================
+ 
+ Syntax:
+ 
+      pragma No_Body;
+ 
+ There are a number of cases in which a package spec does not require a
+ body, and in fact a body is not permitted.  GNAT will not permit the
+ spec to be compiled if there is a body around.  The pragma No_Body
+ allows you to provide a body file, even in a case where no body is
+ allowed.  The body file must contain only comments and a single No_Body
+ pragma.  This is recognized by the compiler as indicating that no body
+ is logically present.
+ 
+ This is particularly useful during maintenance when a package is
+ modified in such a way that a body needed before is no longer needed.
+ The provision of a dummy body with a No_Body pragma ensures that there
+ is no interference from earlier versions of the package body.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma No_Caching,  Next: Pragma No_Component_Reordering,  Prev: Pragma No_Body,  Up: Implementation Defined Pragmas
+ 
+ 2.108 Pragma No_Caching
+ =======================
+ 
+ Syntax:
+ 
+      pragma No_Caching [ (static_boolean_EXPRESSION) ];
+ 
+ For the semantics of this pragma, see the entry for aspect ‘No_Caching’
+ in the SPARK 2014 Reference Manual, section 7.1.2.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma No_Component_Reordering,  Next: Pragma No_Elaboration_Code_All,  Prev: Pragma No_Caching,  Up: Implementation Defined Pragmas
+ 
+ 2.109 Pragma No_Component_Reordering
+ ====================================
+ 
+ Syntax:
+ 
+      pragma No_Component_Reordering [([Entity =>] type_LOCAL_NAME)];
+ 
+ ‘type_LOCAL_NAME’ must refer to a record type declaration in the current
+ declarative part.  The effect is to preclude any reordering of
+ components for the layout of the record, i.e.  the record is laid out by
+ the compiler in the order in which the components are declared
+ textually.  The form with no argument is a configuration pragma which
+ applies to all record types declared in units to which the pragma
+ applies and there is a requirement that this pragma be used consistently
+ within a partition.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma No_Elaboration_Code_All,  Next: Pragma No_Heap_Finalization,  Prev: Pragma No_Component_Reordering,  Up: Implementation Defined Pragmas
+ 
+ 2.110 Pragma No_Elaboration_Code_All
+ ====================================
+ 
+ Syntax:
+ 
+      pragma No_Elaboration_Code_All [(program_unit_NAME)];
+ 
+ This is a program unit pragma (there is also an equivalent aspect of the
+ same name) that establishes the restriction ‘No_Elaboration_Code’ for
+ the current unit and any extended main source units (body and subunits).
+ It also has the effect of enforcing a transitive application of this
+ aspect, so that if any unit is implicitly or explicitly with’ed by the
+ current unit, it must also have the No_Elaboration_Code_All aspect set.
+ It may be applied to package or subprogram specs or their generic
+ versions.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma No_Heap_Finalization,  Next: Pragma No_Inline,  Prev: Pragma No_Elaboration_Code_All,  Up: Implementation Defined Pragmas
+ 
+ 2.111 Pragma No_Heap_Finalization
+ =================================
+ 
+ Syntax:
+ 
+      pragma No_Heap_Finalization [ (first_subtype_LOCAL_NAME) ];
+ 
+ Pragma ‘No_Heap_Finalization’ may be used as a configuration pragma or
+ as a type-specific pragma.
+ 
+ In its configuration form, the pragma must appear within a configuration
+ file such as gnat.adc, without an argument.  The pragma suppresses the
+ call to ‘Finalize’ for heap-allocated objects created through
+ library-level named access-to-object types in cases where the designated
+ type requires finalization actions.
+ 
+ In its type-specific form, the argument of the pragma must denote a
+ library-level named access-to-object type.  The pragma suppresses the
+ call to ‘Finalize’ for heap-allocated objects created through the
+ specific access type in cases where the designated type requires
+ finalization actions.
+ 
+ It is still possible to finalize such heap-allocated objects by
+ explicitly deallocating them.
+ 
+ A library-level named access-to-object type declared within a generic
+ unit will lose its ‘No_Heap_Finalization’ pragma when the corresponding
+ instance does not appear at the library level.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma No_Inline,  Next: Pragma No_Return,  Prev: Pragma No_Heap_Finalization,  Up: Implementation Defined Pragmas
+ 
+ 2.112 Pragma No_Inline
+ ======================
+ 
+ Syntax:
+ 
+      pragma No_Inline (NAME {, NAME});
+ 
+ This pragma suppresses inlining for the callable entity or the instances
+ of the generic subprogram designated by ‘NAME’, including inlining that
+ results from the use of pragma ‘Inline’.  This pragma is always active,
+ in particular it is not subject to the use of option ‘-gnatn’ or
+ ‘-gnatN’.  It is illegal to specify both pragma ‘No_Inline’ and pragma
+ ‘Inline_Always’ for the same ‘NAME’.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma No_Return,  Next: Pragma No_Strict_Aliasing,  Prev: Pragma No_Inline,  Up: Implementation Defined Pragmas
+ 
+ 2.113 Pragma No_Return
+ ======================
+ 
+ Syntax:
+ 
+      pragma No_Return (procedure_LOCAL_NAME {, procedure_LOCAL_NAME});
+ 
+ Each ‘procedure_LOCAL_NAME’ argument must refer to one or more procedure
+ declarations in the current declarative part.  A procedure to which this
+ pragma is applied may not contain any explicit ‘return’ statements.  In
+ addition, if the procedure contains any implicit returns from falling
+ off the end of a statement sequence, then execution of that implicit
+ return will cause Program_Error to be raised.
+ 
+ One use of this pragma is to identify procedures whose only purpose is
+ to raise an exception.  Another use of this pragma is to suppress
+ incorrect warnings about missing returns in functions, where the last
+ statement of a function statement sequence is a call to such a
+ procedure.
+ 
+ Note that in Ada 2005 mode, this pragma is part of the language.  It is
+ available in all earlier versions of Ada as an implementation-defined
+ pragma.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma No_Strict_Aliasing,  Next: Pragma No_Tagged_Streams,  Prev: Pragma No_Return,  Up: Implementation Defined Pragmas
+ 
+ 2.114 Pragma No_Strict_Aliasing
+ ===============================
+ 
+ Syntax:
+ 
+      pragma No_Strict_Aliasing [([Entity =>] type_LOCAL_NAME)];
+ 
+ ‘type_LOCAL_NAME’ must refer to an access type declaration in the
+ current declarative part.  The effect is to inhibit strict aliasing
+ optimization for the given type.  The form with no arguments is a
+ configuration pragma which applies to all access types declared in units
+ to which the pragma applies.  For a detailed description of the strict
+ aliasing optimization, and the situations in which it must be
+ suppressed, see the section on Optimization and Strict Aliasing in the
+ ‘GNAT User’s Guide’.
+ 
+ This pragma currently has no effects on access to unconstrained array
+ types.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma No_Tagged_Streams,  Next: Pragma Normalize_Scalars,  Prev: Pragma No_Strict_Aliasing,  Up: Implementation Defined Pragmas
+ 
+ 2.115 Pragma No_Tagged_Streams
+ ==============================
+ 
+ Syntax:
+ 
+      pragma No_Tagged_Streams [([Entity =>] tagged_type_LOCAL_NAME)];
+ 
+ Normally when a tagged type is introduced using a full type declaration,
+ part of the processing includes generating stream access routines to be
+ used by stream attributes referencing the type (or one of its subtypes
+ or derived types).  This can involve the generation of significant
+ amounts of code which is wasted space if stream routines are not needed
+ for the type in question.
+ 
+ The ‘No_Tagged_Streams’ pragma causes the generation of these stream
+ routines to be skipped, and any attempt to use stream operations on
+ types subject to this pragma will be statically rejected as illegal.
+ 
+ There are two forms of the pragma.  The form with no arguments must
+ appear in a declarative sequence or in the declarations of a package
+ spec.  This pragma affects all subsequent root tagged types declared in
+ the declaration sequence, and specifies that no stream routines be
+ generated.  The form with an argument (for which there is also a
+ corresponding aspect) specifies a single root tagged type for which
+ stream routines are not to be generated.
+ 
+ Once the pragma has been given for a particular root tagged type, all
+ subtypes and derived types of this type inherit the pragma
+ automatically, so the effect applies to a complete hierarchy (this is
+ necessary to deal with the class-wide dispatching versions of the stream
+ routines).
+ 
+ When pragmas ‘Discard_Names’ and ‘No_Tagged_Streams’ are simultaneously
+ applied to a tagged type its Expanded_Name and External_Tag are
+ initialized with empty strings.  This is useful to avoid exposing entity
+ names at binary level but has a negative impact on the debuggability of
+ tagged types.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Normalize_Scalars,  Next: Pragma Obsolescent,  Prev: Pragma No_Tagged_Streams,  Up: Implementation Defined Pragmas
+ 
+ 2.116 Pragma Normalize_Scalars
+ ==============================
+ 
+ Syntax:
+ 
+      pragma Normalize_Scalars;
+ 
+ This is a language defined pragma which is fully implemented in GNAT.
+ The effect is to cause all scalar objects that are not otherwise
+ initialized to be initialized.  The initial values are implementation
+ dependent and are as follows:
+ 
+ ‘Standard.Character’
+ 
+      Objects whose root type is Standard.Character are initialized to
+      Character’Last unless the subtype range excludes NUL (in which case
+      NUL is used).  This choice will always generate an invalid value if
+      one exists.
+ 
+ ‘Standard.Wide_Character’
+ 
+      Objects whose root type is Standard.Wide_Character are initialized
+      to Wide_Character’Last unless the subtype range excludes NUL (in
+      which case NUL is used).  This choice will always generate an
+      invalid value if one exists.
+ 
+ ‘Standard.Wide_Wide_Character’
+ 
+      Objects whose root type is Standard.Wide_Wide_Character are
+      initialized to the invalid value 16#FFFF_FFFF# unless the subtype
+      range excludes NUL (in which case NUL is used).  This choice will
+      always generate an invalid value if one exists.
+ 
+ ‘Integer types’
+ 
+      Objects of an integer type are treated differently depending on
+      whether negative values are present in the subtype.  If no negative
+      values are present, then all one bits is used as the initial value
+      except in the special case where zero is excluded from the subtype,
+      in which case all zero bits are used.  This choice will always
+      generate an invalid value if one exists.
+ 
+      For subtypes with negative values present, the largest negative
+      number is used, except in the unusual case where this largest
+      negative number is in the subtype, and the largest positive number
+      is not, in which case the largest positive value is used.  This
+      choice will always generate an invalid value if one exists.
+ 
+ ‘Floating-Point Types’
+ 
+      Objects of all floating-point types are initialized to all 1-bits.
+      For standard IEEE format, this corresponds to a NaN (not a number)
+      which is indeed an invalid value.
+ 
+ ‘Fixed-Point Types’
+ 
+      Objects of all fixed-point types are treated as described above for
+      integers, with the rules applying to the underlying integer value
+      used to represent the fixed-point value.
+ 
+ ‘Modular types’
+ 
+      Objects of a modular type are initialized to all one bits, except
+      in the special case where zero is excluded from the subtype, in
+      which case all zero bits are used.  This choice will always
+      generate an invalid value if one exists.
+ 
+ ‘Enumeration types’
+ 
+      Objects of an enumeration type are initialized to all one-bits,
+      i.e., to the value ‘2 ** typ'Size - 1’ unless the subtype excludes
+      the literal whose Pos value is zero, in which case a code of zero
+      is used.  This choice will always generate an invalid value if one
+      exists.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Obsolescent,  Next: Pragma Optimize_Alignment,  Prev: Pragma Normalize_Scalars,  Up: Implementation Defined Pragmas
+ 
+ 2.117 Pragma Obsolescent
+ ========================
+ 
+ Syntax:
+ 
+      pragma Obsolescent;
+ 
+      pragma Obsolescent (
+        [Message =>] static_string_EXPRESSION
+      [,[Version =>] Ada_05]);
+ 
+      pragma Obsolescent (
+        [Entity  =>] NAME
+      [,[Message =>] static_string_EXPRESSION
+      [,[Version =>] Ada_05]]);
+ 
+ This pragma can occur immediately following a declaration of an entity,
+ including the case of a record component.  If no Entity argument is
+ present, then this declaration is the one to which the pragma applies.
+ If an Entity parameter is present, it must either match the name of the
+ entity in this declaration, or alternatively, the pragma can immediately
+ follow an enumeration type declaration, where the Entity argument names
+ one of the enumeration literals.
+ 
+ This pragma is used to indicate that the named entity is considered
+ obsolescent and should not be used.  Typically this is used when an API
+ must be modified by eventually removing or modifying existing
+ subprograms or other entities.  The pragma can be used at an
+ intermediate stage when the entity is still present, but will be removed
+ later.
+ 
+ The effect of this pragma is to output a warning message on a reference
+ to an entity thus marked that the subprogram is obsolescent if the
+ appropriate warning option in the compiler is activated.  If the
+ ‘Message’ parameter is present, then a second warning message is given
+ containing this text.  In addition, a reference to the entity is
+ considered to be a violation of pragma ‘Restrictions
+ (No_Obsolescent_Features)’.
+ 
+ This pragma can also be used as a program unit pragma for a package, in
+ which case the entity name is the name of the package, and the pragma
+ indicates that the entire package is considered obsolescent.  In this
+ case a client ‘with’ing such a package violates the restriction, and the
+ ‘with’ clause is flagged with warnings if the warning option is set.
+ 
+ If the ‘Version’ parameter is present (which must be exactly the
+ identifier ‘Ada_05’, no other argument is allowed), then the indication
+ of obsolescence applies only when compiling in Ada 2005 mode.  This is
+ primarily intended for dealing with the situations in the predefined
+ library where subprograms or packages have become defined as obsolescent
+ in Ada 2005 (e.g., in ‘Ada.Characters.Handling’), but may be used
+ anywhere.
+ 
+ The following examples show typical uses of this pragma:
+ 
+      package p is
+         pragma Obsolescent (p, Message => "use pp instead of p");
+      end p;
+ 
+      package q is
+         procedure q2;
+         pragma Obsolescent ("use q2new instead");
+ 
+         type R is new integer;
+         pragma Obsolescent
+           (Entity  => R,
+            Message => "use RR in Ada 2005",
+            Version => Ada_05);
+ 
+         type M is record
+            F1 : Integer;
+            F2 : Integer;
+            pragma Obsolescent;
+            F3 : Integer;
+         end record;
+ 
+         type E is (a, bc, 'd', quack);
+         pragma Obsolescent (Entity => bc)
+         pragma Obsolescent (Entity => 'd')
+ 
+         function "+"
+           (a, b : character) return character;
+         pragma Obsolescent (Entity => "+");
+      end;
+ 
+ Note that, as for all pragmas, if you use a pragma argument identifier,
+ then all subsequent parameters must also use a pragma argument
+ identifier.  So if you specify ‘Entity =>’ for the ‘Entity’ argument,
+ and a ‘Message’ argument is present, it must be preceded by ‘Message
+ =>’.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Optimize_Alignment,  Next: Pragma Ordered,  Prev: Pragma Obsolescent,  Up: Implementation Defined Pragmas
+ 
+ 2.118 Pragma Optimize_Alignment
+ ===============================
+ 
+ Syntax:
+ 
+      pragma Optimize_Alignment (TIME | SPACE | OFF);
+ 
+ This is a configuration pragma which affects the choice of default
+ alignments for types and objects where no alignment is explicitly
+ specified.  There is a time/space trade-off in the selection of these
+ values.  Large alignments result in more efficient code, at the expense
+ of larger data space, since sizes have to be increased to match these
+ alignments.  Smaller alignments save space, but the access code is
+ slower.  The normal choice of default alignments for types and
+ individual alignment promotions for objects (which is what you get if
+ you do not use this pragma, or if you use an argument of OFF), tries to
+ balance these two requirements.
+ 
+ Specifying SPACE causes smaller default alignments to be chosen in two
+ cases.  First any packed record is given an alignment of 1.  Second, if
+ a size is given for the type, then the alignment is chosen to avoid
+ increasing this size.  For example, consider:
+ 
+      type R is record
+         X : Integer;
+         Y : Character;
+      end record;
+ 
+      for R'Size use 5*8;
+ 
+ In the default mode, this type gets an alignment of 4, so that access to
+ the Integer field X are efficient.  But this means that objects of the
+ type end up with a size of 8 bytes.  This is a valid choice, since sizes
+ of objects are allowed to be bigger than the size of the type, but it
+ can waste space if for example fields of type R appear in an enclosing
+ record.  If the above type is compiled in ‘Optimize_Alignment (Space)’
+ mode, the alignment is set to 1.
+ 
+ However, there is one case in which SPACE is ignored.  If a variable
+ length record (that is a discriminated record with a component which is
+ an array whose length depends on a discriminant), has a pragma Pack,
+ then it is not in general possible to set the alignment of such a record
+ to one, so the pragma is ignored in this case (with a warning).
+ 
+ Specifying SPACE also disables alignment promotions for standalone
+ objects, which occur when the compiler increases the alignment of a
+ specific object without changing the alignment of its type.
+ 
+ Specifying SPACE also disables component reordering in unpacked record
+ types, which can result in larger sizes in order to meet alignment
+ requirements.
+ 
+ Specifying TIME causes larger default alignments to be chosen in the
+ case of small types with sizes that are not a power of 2.  For example,
+ consider:
+ 
+      type R is record
+         A : Character;
+         B : Character;
+         C : Boolean;
+      end record;
+ 
+      pragma Pack (R);
+      for R'Size use 17;
+ 
+ The default alignment for this record is normally 1, but if this type is
+ compiled in ‘Optimize_Alignment (Time)’ mode, then the alignment is set
+ to 4, which wastes space for objects of the type, since they are now 4
+ bytes long, but results in more efficient access when the whole record
+ is referenced.
+ 
+ As noted above, this is a configuration pragma, and there is a
+ requirement that all units in a partition be compiled with a consistent
+ setting of the optimization setting.  This would normally be achieved by
+ use of a configuration pragma file containing the appropriate setting.
+ The exception to this rule is that units with an explicit configuration
+ pragma in the same file as the source unit are excluded from the
+ consistency check, as are all predefined units.  The latter are compiled
+ by default in pragma Optimize_Alignment (Off) mode if no pragma appears
+ at the start of the file.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Ordered,  Next: Pragma Overflow_Mode,  Prev: Pragma Optimize_Alignment,  Up: Implementation Defined Pragmas
+ 
+ 2.119 Pragma Ordered
+ ====================
+ 
+ Syntax:
+ 
+      pragma Ordered (enumeration_first_subtype_LOCAL_NAME);
+ 
+ Most enumeration types are from a conceptual point of view unordered.
+ For example, consider:
+ 
+      type Color is (Red, Blue, Green, Yellow);
+ 
+ By Ada semantics ‘Blue > Red’ and ‘Green > Blue’, but really these
+ relations make no sense; the enumeration type merely specifies a set of
+ possible colors, and the order is unimportant.
+ 
+ For unordered enumeration types, it is generally a good idea if clients
+ avoid comparisons (other than equality or inequality) and explicit
+ ranges.  (A ‘client’ is a unit where the type is referenced, other than
+ the unit where the type is declared, its body, and its subunits.)  For
+ example, if code buried in some client says:
+ 
+      if Current_Color < Yellow then ...
+      if Current_Color in Blue .. Green then ...
+ 
+ then the client code is relying on the order, which is undesirable.  It
+ makes the code hard to read and creates maintenance difficulties if
+ entries have to be added to the enumeration type.  Instead, the code in
+ the client should list the possibilities, or an appropriate subtype
+ should be declared in the unit that declares the original enumeration
+ type.  E.g., the following subtype could be declared along with the type
+ ‘Color’:
+ 
+      subtype RBG is Color range Red .. Green;
+ 
+ and then the client could write:
+ 
+      if Current_Color in RBG then ...
+      if Current_Color = Blue or Current_Color = Green then ...
+ 
+ However, some enumeration types are legitimately ordered from a
+ conceptual point of view.  For example, if you declare:
+ 
+      type Day is (Mon, Tue, Wed, Thu, Fri, Sat, Sun);
+ 
+ then the ordering imposed by the language is reasonable, and clients can
+ depend on it, writing for example:
+ 
+      if D in Mon .. Fri then ...
+      if D < Wed then ...
+ 
+ The pragma ‘Ordered’ is provided to mark enumeration types that are
+ conceptually ordered, alerting the reader that clients may depend on the
+ ordering.  GNAT provides a pragma to mark enumerations as ordered rather
+ than one to mark them as unordered, since in our experience, the great
+ majority of enumeration types are conceptually unordered.
+ 
+ The types ‘Boolean’, ‘Character’, ‘Wide_Character’, and
+ ‘Wide_Wide_Character’ are considered to be ordered types, so each is
+ declared with a pragma ‘Ordered’ in package ‘Standard’.
+ 
+ Normally pragma ‘Ordered’ serves only as documentation and a guide for
+ coding standards, but GNAT provides a warning switch ‘-gnatw.u’ that
+ requests warnings for inappropriate uses (comparisons and explicit
+ subranges) for unordered types.  If this switch is used, then any
+ enumeration type not marked with pragma ‘Ordered’ will be considered as
+ unordered, and will generate warnings for inappropriate uses.
+ 
+ Note that generic types are not considered ordered or unordered (since
+ the template can be instantiated for both cases), so we never generate
+ warnings for the case of generic enumerated types.
+ 
+ For additional information please refer to the description of the
+ ‘-gnatw.u’ switch in the GNAT User’s Guide.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Overflow_Mode,  Next: Pragma Overriding_Renamings,  Prev: Pragma Ordered,  Up: Implementation Defined Pragmas
+ 
+ 2.120 Pragma Overflow_Mode
+ ==========================
+ 
+ Syntax:
+ 
+      pragma Overflow_Mode
+       (  [General    =>] MODE
+        [,[Assertions =>] MODE]);
+ 
+      MODE ::= STRICT | MINIMIZED | ELIMINATED
+ 
+ This pragma sets the current overflow mode to the given setting.  For
+ details of the meaning of these modes, please refer to the ‘Overflow
+ Check Handling in GNAT’ appendix in the GNAT User’s Guide.  If only the
+ ‘General’ parameter is present, the given mode applies to all
+ expressions.  If both parameters are present, the ‘General’ mode applies
+ to expressions outside assertions, and the ‘Eliminated’ mode applies to
+ expressions within assertions.
+ 
+ The case of the ‘MODE’ parameter is ignored, so ‘MINIMIZED’, ‘Minimized’
+ and ‘minimized’ all have the same effect.
+ 
+ The ‘Overflow_Mode’ pragma has the same scoping and placement rules as
+ pragma ‘Suppress’, so it can occur either as a configuration pragma,
+ specifying a default for the whole program, or in a declarative scope,
+ where it applies to the remaining declarations and statements in that
+ scope.
+ 
+ The pragma ‘Suppress (Overflow_Check)’ suppresses overflow checking, but
+ does not affect the overflow mode.
+ 
+ The pragma ‘Unsuppress (Overflow_Check)’ unsuppresses (enables) overflow
+ checking, but does not affect the overflow mode.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Overriding_Renamings,  Next: Pragma Part_Of,  Prev: Pragma Overflow_Mode,  Up: Implementation Defined Pragmas
+ 
+ 2.121 Pragma Overriding_Renamings
+ =================================
+ 
+ Syntax:
+ 
+      pragma Overriding_Renamings;
+ 
+ This is a GNAT configuration pragma to simplify porting legacy code
+ accepted by the Rational Ada compiler.  In the presence of this pragma,
+ a renaming declaration that renames an inherited operation declared in
+ the same scope is legal if selected notation is used as in:
+ 
+      pragma Overriding_Renamings;
+      ...
+      package R is
+        function F (..);
+        ...
+        function F (..) renames R.F;
+      end R;
+ 
+ even though RM 8.3 (15) stipulates that an overridden operation is not
+ visible within the declaration of the overriding operation.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Part_Of,  Next: Pragma Partition_Elaboration_Policy,  Prev: Pragma Overriding_Renamings,  Up: Implementation Defined Pragmas
+ 
+ 2.122 Pragma Part_Of
+ ====================
+ 
+ Syntax:
+ 
+      pragma Part_Of (ABSTRACT_STATE);
+ 
+      ABSTRACT_STATE ::= NAME
+ 
+ For the semantics of this pragma, see the entry for aspect ‘Part_Of’ in
+ the SPARK 2014 Reference Manual, section 7.2.6.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Partition_Elaboration_Policy,  Next: Pragma Passive,  Prev: Pragma Part_Of,  Up: Implementation Defined Pragmas
+ 
+ 2.123 Pragma Partition_Elaboration_Policy
+ =========================================
+ 
+ Syntax:
+ 
+      pragma Partition_Elaboration_Policy (POLICY_IDENTIFIER);
+ 
+      POLICY_IDENTIFIER ::= Concurrent | Sequential
+ 
+ This pragma is standard in Ada 2005, but is available in all earlier
+ versions of Ada as an implementation-defined pragma.  See Ada 2012
+ Reference Manual for details.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Passive,  Next: Pragma Persistent_BSS,  Prev: Pragma Partition_Elaboration_Policy,  Up: Implementation Defined Pragmas
+ 
+ 2.124 Pragma Passive
+ ====================
+ 
+ Syntax:
+ 
+      pragma Passive [(Semaphore | No)];
+ 
+ Syntax checked, but otherwise ignored by GNAT. This is recognized for
+ compatibility with DEC Ada 83 implementations, where it is used within a
+ task definition to request that a task be made passive.  If the argument
+ ‘Semaphore’ is present, or the argument is omitted, then DEC Ada 83
+ treats the pragma as an assertion that the containing task is passive
+ and that optimization of context switch with this task is permitted and
+ desired.  If the argument ‘No’ is present, the task must not be
+ optimized.  GNAT does not attempt to optimize any tasks in this manner
+ (since protected objects are available in place of passive tasks).
+ 
+ For more information on the subject of passive tasks, see the section
+ ‘Passive Task Optimization’ in the GNAT Users Guide.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Persistent_BSS,  Next: Pragma Post,  Prev: Pragma Passive,  Up: Implementation Defined Pragmas
+ 
+ 2.125 Pragma Persistent_BSS
+ ===========================
+ 
+ Syntax:
+ 
+      pragma Persistent_BSS [(LOCAL_NAME)]
+ 
+ This pragma allows selected objects to be placed in the
+ ‘.persistent_bss’ section.  On some targets the linker and loader
+ provide for special treatment of this section, allowing a program to be
+ reloaded without affecting the contents of this data (hence the name
+ persistent).
+ 
+ There are two forms of usage.  If an argument is given, it must be the
+ local name of a library-level object, with no explicit initialization
+ and whose type is potentially persistent.  If no argument is given, then
+ the pragma is a configuration pragma, and applies to all library-level
+ objects with no explicit initialization of potentially persistent types.
+ 
+ A potentially persistent type is a scalar type, or an untagged,
+ non-discriminated record, all of whose components have no explicit
+ initialization and are themselves of a potentially persistent type, or
+ an array, all of whose constraints are static, and whose component type
+ is potentially persistent.
+ 
+ If this pragma is used on a target where this feature is not supported,
+ then the pragma will be ignored.  See also ‘pragma Linker_Section’.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Post,  Next: Pragma Postcondition,  Prev: Pragma Persistent_BSS,  Up: Implementation Defined Pragmas
+ 
+ 2.126 Pragma Post
+ =================
+ 
+ Syntax:
+ 
+      pragma Post (Boolean_Expression);
+ 
+ The ‘Post’ pragma is intended to be an exact replacement for the
+ language-defined ‘Post’ aspect, and shares its restrictions and
+ semantics.  It must appear either immediately following the
+ corresponding subprogram declaration (only other pragmas may intervene),
+ or if there is no separate subprogram declaration, then it can appear at
+ the start of the declarations in a subprogram body (preceded only by
+ other pragmas).
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Postcondition,  Next: Pragma Post_Class,  Prev: Pragma Post,  Up: Implementation Defined Pragmas
+ 
+ 2.127 Pragma Postcondition
+ ==========================
+ 
+ Syntax:
+ 
+      pragma Postcondition (
+         [Check   =>] Boolean_Expression
+       [,[Message =>] String_Expression]);
+ 
+ The ‘Postcondition’ pragma allows specification of automatic
+ postcondition checks for subprograms.  These checks are similar to
+ assertions, but are automatically inserted just prior to the return
+ statements of the subprogram with which they are associated (including
+ implicit returns at the end of procedure bodies and associated exception
+ handlers).
+ 
+ In addition, the boolean expression which is the condition which must be
+ true may contain references to function’Result in the case of a function
+ to refer to the returned value.
+ 
+ ‘Postcondition’ pragmas may appear either immediately following the
+ (separate) declaration of a subprogram, or at the start of the
+ declarations of a subprogram body.  Only other pragmas may intervene
+ (that is appear between the subprogram declaration and its
+ postconditions, or appear before the postcondition in the declaration
+ sequence in a subprogram body).  In the case of a postcondition
+ appearing after a subprogram declaration, the formal arguments of the
+ subprogram are visible, and can be referenced in the postcondition
+ expressions.
+ 
+ The postconditions are collected and automatically tested just before
+ any return (implicit or explicit) in the subprogram body.  A
+ postcondition is only recognized if postconditions are active at the
+ time the pragma is encountered.  The compiler switch ‘gnata’ turns on
+ all postconditions by default, and pragma ‘Check_Policy’ with an
+ identifier of ‘Postcondition’ can also be used to control whether
+ postconditions are active.
+ 
+ The general approach is that postconditions are placed in the spec if
+ they represent functional aspects which make sense to the client.  For
+ example we might have:
+ 
+      function Direction return Integer;
+      pragma Postcondition
+       (Direction'Result = +1
+          or else
+        Direction'Result = -1);
+ 
+ which serves to document that the result must be +1 or -1, and will test
+ that this is the case at run time if postcondition checking is active.
+ 
+ Postconditions within the subprogram body can be used to check that some
+ internal aspect of the implementation, not visible to the client, is
+ operating as expected.  For instance if a square root routine keeps an
+ internal counter of the number of times it is called, then we might have
+ the following postcondition:
+ 
+      Sqrt_Calls : Natural := 0;
+ 
+      function Sqrt (Arg : Float) return Float is
+        pragma Postcondition
+          (Sqrt_Calls = Sqrt_Calls'Old + 1);
+        ...
+      end Sqrt
+ 
+ As this example, shows, the use of the ‘Old’ attribute is often useful
+ in postconditions to refer to the state on entry to the subprogram.
+ 
+ Note that postconditions are only checked on normal returns from the
+ subprogram.  If an abnormal return results from raising an exception,
+ then the postconditions are not checked.
+ 
+ If a postcondition fails, then the exception
+ ‘System.Assertions.Assert_Failure’ is raised.  If a message argument was
+ supplied, then the given string will be used as the exception message.
+ If no message argument was supplied, then the default message has the
+ form “Postcondition failed at file_name:line”.  The exception is raised
+ in the context of the subprogram body, so it is possible to catch
+ postcondition failures within the subprogram body itself.
+ 
+ Within a package spec, normal visibility rules in Ada would prevent
+ forward references within a postcondition pragma to functions defined
+ later in the same package.  This would introduce undesirable ordering
+ constraints.  To avoid this problem, all postcondition pragmas are
+ analyzed at the end of the package spec, allowing forward references.
+ 
+ The following example shows that this even allows mutually recursive
+ postconditions as in:
+ 
+      package Parity_Functions is
+         function Odd  (X : Natural) return Boolean;
+         pragma Postcondition
+           (Odd'Result =
+              (x = 1
+                or else
+              (x /= 0 and then Even (X - 1))));
+ 
+         function Even (X : Natural) return Boolean;
+         pragma Postcondition
+           (Even'Result =
+              (x = 0
+                or else
+              (x /= 1 and then Odd (X - 1))));
+ 
+      end Parity_Functions;
+ 
+ There are no restrictions on the complexity or form of conditions used
+ within ‘Postcondition’ pragmas.  The following example shows that it is
+ even possible to verify performance behavior.
+ 
+      package Sort is
+ 
+         Performance : constant Float;
+         --  Performance constant set by implementation
+         --  to match target architecture behavior.
+ 
+         procedure Treesort (Arg : String);
+         --  Sorts characters of argument using N*logN sort
+         pragma Postcondition
+           (Float (Clock - Clock'Old) <=
+              Float (Arg'Length) *
+              log (Float (Arg'Length)) *
+              Performance);
+      end Sort;
+ 
+ Note: postcondition pragmas associated with subprograms that are marked
+ as Inline_Always, or those marked as Inline with front-end inlining
+ (-gnatN option set) are accepted and legality-checked by the compiler,
+ but are ignored at run-time even if postcondition checking is enabled.
+ 
+ Note that pragma ‘Postcondition’ differs from the language-defined
+ ‘Post’ aspect (and corresponding ‘Post’ pragma) in allowing multiple
+ occurrences, allowing occurences in the body even if there is a separate
+ spec, and allowing a second string parameter, and the use of the pragma
+ identifier ‘Check’.  Historically, pragma ‘Postcondition’ was
+ implemented prior to the development of Ada 2012, and has been retained
+ in its original form for compatibility purposes.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Post_Class,  Next: Pragma Pre,  Prev: Pragma Postcondition,  Up: Implementation Defined Pragmas
+ 
+ 2.128 Pragma Post_Class
+ =======================
+ 
+ Syntax:
+ 
+      pragma Post_Class (Boolean_Expression);
+ 
+ The ‘Post_Class’ pragma is intended to be an exact replacement for the
+ language-defined ‘Post'Class’ aspect, and shares its restrictions and
+ semantics.  It must appear either immediately following the
+ corresponding subprogram declaration (only other pragmas may intervene),
+ or if there is no separate subprogram declaration, then it can appear at
+ the start of the declarations in a subprogram body (preceded only by
+ other pragmas).
+ 
+ Note: This pragma is called ‘Post_Class’ rather than ‘Post'Class’
+ because the latter would not be strictly conforming to the allowed
+ syntax for pragmas.  The motivation for providing pragmas equivalent to
+ the aspects is to allow a program to be written using the pragmas, and
+ then compiled if necessary using an Ada compiler that does not recognize
+ the pragmas or aspects, but is prepared to ignore the pragmas.  The
+ assertion policy that controls this pragma is ‘Post'Class’, not
+ ‘Post_Class’.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Pre,  Next: Pragma Precondition,  Prev: Pragma Post_Class,  Up: Implementation Defined Pragmas
+ 
+ 2.129 Pragma Pre
+ ================
+ 
+ Syntax:
+ 
+      pragma Pre (Boolean_Expression);
+ 
+ The ‘Pre’ pragma is intended to be an exact replacement for the
+ language-defined ‘Pre’ aspect, and shares its restrictions and
+ semantics.  It must appear either immediately following the
+ corresponding subprogram declaration (only other pragmas may intervene),
+ or if there is no separate subprogram declaration, then it can appear at
+ the start of the declarations in a subprogram body (preceded only by
+ other pragmas).
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Precondition,  Next: Pragma Predicate,  Prev: Pragma Pre,  Up: Implementation Defined Pragmas
+ 
+ 2.130 Pragma Precondition
+ =========================
+ 
+ Syntax:
+ 
+      pragma Precondition (
+         [Check   =>] Boolean_Expression
+       [,[Message =>] String_Expression]);
+ 
+ The ‘Precondition’ pragma is similar to ‘Postcondition’ except that the
+ corresponding checks take place immediately upon entry to the
+ subprogram, and if a precondition fails, the exception is raised in the
+ context of the caller, and the attribute ‘Result cannot be used within
+ the precondition expression.
+ 
+ Otherwise, the placement and visibility rules are identical to those
+ described for postconditions.  The following is an example of use within
+ a package spec:
+ 
+      package Math_Functions is
+         ...
+         function Sqrt (Arg : Float) return Float;
+         pragma Precondition (Arg >= 0.0)
+         ...
+      end Math_Functions;
+ 
+ ‘Precondition’ pragmas may appear either immediately following the
+ (separate) declaration of a subprogram, or at the start of the
+ declarations of a subprogram body.  Only other pragmas may intervene
+ (that is appear between the subprogram declaration and its
+ postconditions, or appear before the postcondition in the declaration
+ sequence in a subprogram body).
+ 
+ Note: precondition pragmas associated with subprograms that are marked
+ as Inline_Always, or those marked as Inline with front-end inlining
+ (-gnatN option set) are accepted and legality-checked by the compiler,
+ but are ignored at run-time even if precondition checking is enabled.
+ 
+ Note that pragma ‘Precondition’ differs from the language-defined ‘Pre’
+ aspect (and corresponding ‘Pre’ pragma) in allowing multiple
+ occurrences, allowing occurences in the body even if there is a separate
+ spec, and allowing a second string parameter, and the use of the pragma
+ identifier ‘Check’.  Historically, pragma ‘Precondition’ was implemented
+ prior to the development of Ada 2012, and has been retained in its
+ original form for compatibility purposes.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Predicate,  Next: Pragma Predicate_Failure,  Prev: Pragma Precondition,  Up: Implementation Defined Pragmas
+ 
+ 2.131 Pragma Predicate
+ ======================
+ 
+ Syntax:
+ 
+      pragma Predicate
+        ([Entity =>] type_LOCAL_NAME,
+         [Check  =>] EXPRESSION);
+ 
+ This pragma (available in all versions of Ada in GNAT) encompasses both
+ the ‘Static_Predicate’ and ‘Dynamic_Predicate’ aspects in Ada 2012.  A
+ predicate is regarded as static if it has an allowed form for
+ ‘Static_Predicate’ and is otherwise treated as a ‘Dynamic_Predicate’.
+ Otherwise, predicates specified by this pragma behave exactly as
+ described in the Ada 2012 reference manual.  For example, if we have
+ 
+      type R is range 1 .. 10;
+      subtype S is R;
+      pragma Predicate (Entity => S, Check => S not in 4 .. 6);
+      subtype Q is R
+      pragma Predicate (Entity => Q, Check => F(Q) or G(Q));
+ 
+ the effect is identical to the following Ada 2012 code:
+ 
+      type R is range 1 .. 10;
+      subtype S is R with
+        Static_Predicate => S not in 4 .. 6;
+      subtype Q is R with
+        Dynamic_Predicate => F(Q) or G(Q);
+ 
+ Note that there are no pragmas ‘Dynamic_Predicate’ or
+ ‘Static_Predicate’.  That is because these pragmas would affect legality
+ and semantics of the program and thus do not have a neutral effect if
+ ignored.  The motivation behind providing pragmas equivalent to
+ corresponding aspects is to allow a program to be written using the
+ pragmas, and then compiled with a compiler that will ignore the pragmas.
+ That doesn’t work in the case of static and dynamic predicates, since if
+ the corresponding pragmas are ignored, then the behavior of the program
+ is fundamentally changed (for example a membership test ‘A in B’ would
+ not take into account a predicate defined for subtype B). When following
+ this approach, the use of predicates should be avoided.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Predicate_Failure,  Next: Pragma Preelaborable_Initialization,  Prev: Pragma Predicate,  Up: Implementation Defined Pragmas
+ 
+ 2.132 Pragma Predicate_Failure
+ ==============================
+ 
+ Syntax:
+ 
+      pragma Predicate_Failure
+        ([Entity  =>] type_LOCAL_NAME,
+         [Message =>] String_Expression);
+ 
+ The ‘Predicate_Failure’ pragma is intended to be an exact replacement
+ for the language-defined ‘Predicate_Failure’ aspect, and shares its
+ restrictions and semantics.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Preelaborable_Initialization,  Next: Pragma Prefix_Exception_Messages,  Prev: Pragma Predicate_Failure,  Up: Implementation Defined Pragmas
+ 
+ 2.133 Pragma Preelaborable_Initialization
+ =========================================
+ 
+ Syntax:
+ 
+      pragma Preelaborable_Initialization (DIRECT_NAME);
+ 
+ This pragma is standard in Ada 2005, but is available in all earlier
+ versions of Ada as an implementation-defined pragma.  See Ada 2012
+ Reference Manual for details.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Prefix_Exception_Messages,  Next: Pragma Pre_Class,  Prev: Pragma Preelaborable_Initialization,  Up: Implementation Defined Pragmas
+ 
+ 2.134 Pragma Prefix_Exception_Messages
+ ======================================
+ 
+ Syntax:
+ 
+      pragma Prefix_Exception_Messages;
+ 
+ This is an implementation-defined configuration pragma that affects the
+ behavior of raise statements with a message given as a static string
+ constant (typically a string literal).  In such cases, the string will
+ be automatically prefixed by the name of the enclosing entity (giving
+ the package and subprogram containing the raise statement).  This helps
+ to identify where messages are coming from, and this mode is automatic
+ for the run-time library.
+ 
+ The pragma has no effect if the message is computed with an expression
+ other than a static string constant, since the assumption in this case
+ is that the program computes exactly the string it wants.  If you still
+ want the prefixing in this case, you can always call
+ ‘GNAT.Source_Info.Enclosing_Entity’ and prepend the string manually.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Pre_Class,  Next: Pragma Priority_Specific_Dispatching,  Prev: Pragma Prefix_Exception_Messages,  Up: Implementation Defined Pragmas
+ 
+ 2.135 Pragma Pre_Class
+ ======================
+ 
+ Syntax:
+ 
+      pragma Pre_Class (Boolean_Expression);
+ 
+ The ‘Pre_Class’ pragma is intended to be an exact replacement for the
+ language-defined ‘Pre'Class’ aspect, and shares its restrictions and
+ semantics.  It must appear either immediately following the
+ corresponding subprogram declaration (only other pragmas may intervene),
+ or if there is no separate subprogram declaration, then it can appear at
+ the start of the declarations in a subprogram body (preceded only by
+ other pragmas).
+ 
+ Note: This pragma is called ‘Pre_Class’ rather than ‘Pre'Class’ because
+ the latter would not be strictly conforming to the allowed syntax for
+ pragmas.  The motivation for providing pragmas equivalent to the aspects
+ is to allow a program to be written using the pragmas, and then compiled
+ if necessary using an Ada compiler that does not recognize the pragmas
+ or aspects, but is prepared to ignore the pragmas.  The assertion policy
+ that controls this pragma is ‘Pre'Class’, not ‘Pre_Class’.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Priority_Specific_Dispatching,  Next: Pragma Profile,  Prev: Pragma Pre_Class,  Up: Implementation Defined Pragmas
+ 
+ 2.136 Pragma Priority_Specific_Dispatching
+ ==========================================
+ 
+ Syntax:
+ 
+      pragma Priority_Specific_Dispatching (
+         POLICY_IDENTIFIER,
+         first_priority_EXPRESSION,
+         last_priority_EXPRESSION)
+ 
+      POLICY_IDENTIFIER ::=
+         EDF_Across_Priorities            |
+         FIFO_Within_Priorities           |
+         Non_Preemptive_Within_Priorities |
+         Round_Robin_Within_Priorities
+ 
+ This pragma is standard in Ada 2005, but is available in all earlier
+ versions of Ada as an implementation-defined pragma.  See Ada 2012
+ Reference Manual for details.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Profile,  Next: Pragma Profile_Warnings,  Prev: Pragma Priority_Specific_Dispatching,  Up: Implementation Defined Pragmas
+ 
+ 2.137 Pragma Profile
+ ====================
+ 
+ Syntax:
+ 
+      pragma Profile (Ravenscar | Restricted | Rational | Jorvik |
+                      GNAT_Extended_Ravenscar | GNAT_Ravenscar_EDF );
+ 
+ This pragma is standard in Ada 2005, but is available in all earlier
+ versions of Ada as an implementation-defined pragma.  This is a
+ configuration pragma that establishes a set of configuration pragmas
+ that depend on the argument.  ‘Ravenscar’ is standard in Ada 2005.
+ ‘Jorvik’ is standard in Ada 202x.  The other possibilities
+ (‘Restricted’, ‘Rational’, ‘GNAT_Extended_Ravenscar’,
+ ‘GNAT_Ravenscar_EDF’) are implementation-defined.
+ ‘GNAT_Extended_Ravenscar’ is an alias for ‘Jorvik’.
+ 
+ The set of configuration pragmas is defined in the following sections.
+ 
+    * Pragma Profile (Ravenscar)
+ 
+      The ‘Ravenscar’ profile is standard in Ada 2005, but is available
+      in all earlier versions of Ada as an implementation-defined pragma.
+      This profile establishes the following set of configuration
+      pragmas:
+ 
+         * ‘Task_Dispatching_Policy (FIFO_Within_Priorities)’
+ 
+           [RM D.2.2] Tasks are dispatched following a preemptive
+           priority-ordered scheduling policy.
+ 
+         * ‘Locking_Policy (Ceiling_Locking)’
+ 
+           [RM D.3] While tasks and interrupts execute a protected
+           action, they inherit the ceiling priority of the corresponding
+           protected object.
+ 
+         * ‘Detect_Blocking’
+ 
+           This pragma forces the detection of potentially blocking
+           operations within a protected operation, and to raise
+           Program_Error if that happens.
+ 
+      plus the following set of restrictions:
+ 
+         * ‘Max_Entry_Queue_Length => 1’
+ 
+           No task can be queued on a protected entry.
+ 
+         * ‘Max_Protected_Entries => 1’
+ 
+         * ‘Max_Task_Entries => 0’
+ 
+           No rendezvous statements are allowed.
+ 
+         * ‘No_Abort_Statements’
+ 
+         * ‘No_Dynamic_Attachment’
+ 
+         * ‘No_Dynamic_Priorities’
+ 
+         * ‘No_Implicit_Heap_Allocations’
+ 
+         * ‘No_Local_Protected_Objects’
+ 
+         * ‘No_Local_Timing_Events’
+ 
+         * ‘No_Protected_Type_Allocators’
+ 
+         * ‘No_Relative_Delay’
+ 
+         * ‘No_Requeue_Statements’
+ 
+         * ‘No_Select_Statements’
+ 
+         * ‘No_Specific_Termination_Handlers’
+ 
+         * ‘No_Task_Allocators’
+ 
+         * ‘No_Task_Hierarchy’
+ 
+         * ‘No_Task_Termination’
+ 
+         * ‘Simple_Barriers’
+ 
+      The Ravenscar profile also includes the following restrictions that
+      specify that there are no semantic dependencies on the
+      corresponding predefined packages:
+ 
+         * ‘No_Dependence => Ada.Asynchronous_Task_Control’
+ 
+         * ‘No_Dependence => Ada.Calendar’
+ 
+         * ‘No_Dependence => Ada.Execution_Time.Group_Budget’
+ 
+         * ‘No_Dependence => Ada.Execution_Time.Timers’
+ 
+         * ‘No_Dependence => Ada.Task_Attributes’
+ 
+         * ‘No_Dependence => System.Multiprocessors.Dispatching_Domains’
+ 
+      This set of configuration pragmas and restrictions correspond to
+      the definition of the ‘Ravenscar Profile’ for limited tasking,
+      devised and published by the ‘International Real-Time Ada Workshop,
+      1997’.  A description is also available at
+      ‘http://www-users.cs.york.ac.uk/~burns/ravenscar.ps’.
+ 
+      The original definition of the profile was revised at subsequent
+      IRTAW meetings.  It has been included in the ISO ‘Guide for the Use
+      of the Ada Programming Language in High Integrity Systems’, and was
+      made part of the Ada 2005 standard.  The formal definition given by
+      the Ada Rapporteur Group (ARG) can be found in two Ada Issues
+      (AI-249 and AI-305) available at
+      ‘http://www.ada-auth.org/cgi-bin/cvsweb.cgi/ais/ai-00249.txt’ and
+      ‘http://www.ada-auth.org/cgi-bin/cvsweb.cgi/ais/ai-00305.txt’.
+ 
+      The above set is a superset of the restrictions provided by pragma
+      ‘Profile (Restricted)’, it includes six additional restrictions
+      (‘Simple_Barriers’, ‘No_Select_Statements’, ‘No_Calendar’,
+      ‘No_Implicit_Heap_Allocations’, ‘No_Relative_Delay’ and
+      ‘No_Task_Termination’).  This means that pragma ‘Profile
+      (Ravenscar)’, like the pragma ‘Profile (Restricted)’, automatically
+      causes the use of a simplified, more efficient version of the
+      tasking run-time library.
+ 
+    * Pragma Profile (Jorvik)
+ 
+      ‘Jorvik’ is the new profile added to the Ada 202x draft standard,
+      previously implemented under the name ‘GNAT_Extended_Ravenscar’.
+ 
+      The ‘No_Implicit_Heap_Allocations’ restriction has been replaced by
+      ‘No_Implicit_Task_Allocations’ and
+      ‘No_Implicit_Protected_Object_Allocations’.
+ 
+      The ‘Simple_Barriers’ restriction has been replaced by
+      ‘Pure_Barriers’.
+ 
+      The ‘Max_Protected_Entries’, ‘Max_Entry_Queue_Length’, and
+      ‘No_Relative_Delay’ restrictions have been removed.
+ 
+      Details on the rationale for ‘Jorvik’ and implications for use may
+      be found in ‘A New Ravenscar-Based Profile’ by P. Rogers, J. Ruiz,
+      T. Gingold and P. Bernardi, in ‘Reliable Software Technologies –
+      Ada Europe 2017’, Springer-Verlag Lecture Notes in Computer
+      Science, Number 10300.
+ 
+    * Pragma Profile (GNAT_Ravenscar_EDF)
+ 
+      This profile corresponds to the Ravenscar profile but using
+      EDF_Across_Priority as the Task_Scheduling_Policy.
+ 
+    * Pragma Profile (Restricted)
+ 
+      This profile corresponds to the GNAT restricted run time.  It
+      establishes the following set of restrictions:
+ 
+         * ‘No_Abort_Statements’
+ 
+         * ‘No_Entry_Queue’
+ 
+         * ‘No_Task_Hierarchy’
+ 
+         * ‘No_Task_Allocators’
+ 
+         * ‘No_Dynamic_Priorities’
+ 
+         * ‘No_Terminate_Alternatives’
+ 
+         * ‘No_Dynamic_Attachment’
+ 
+         * ‘No_Protected_Type_Allocators’
+ 
+         * ‘No_Local_Protected_Objects’
+ 
+         * ‘No_Requeue_Statements’
+ 
+         * ‘No_Task_Attributes_Package’
+ 
+         * ‘Max_Asynchronous_Select_Nesting = 0’
+ 
+         * ‘Max_Task_Entries = 0’
+ 
+         * ‘Max_Protected_Entries = 1’
+ 
+         * ‘Max_Select_Alternatives = 0’
+ 
+      This set of restrictions causes the automatic selection of a
+      simplified version of the run time that provides improved
+      performance for the limited set of tasking functionality permitted
+      by this set of restrictions.
+ 
+    * Pragma Profile (Rational)
+ 
+      The Rational profile is intended to facilitate porting legacy code
+      that compiles with the Rational APEX compiler, even when the code
+      includes non- conforming Ada constructs.  The profile enables the
+      following three pragmas:
+ 
+         * ‘pragma Implicit_Packing’
+ 
+         * ‘pragma Overriding_Renamings’
+ 
+         * ‘pragma Use_VADS_Size’
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Profile_Warnings,  Next: Pragma Propagate_Exceptions,  Prev: Pragma Profile,  Up: Implementation Defined Pragmas
+ 
+ 2.138 Pragma Profile_Warnings
+ =============================
+ 
+ Syntax:
+ 
+      pragma Profile_Warnings (Ravenscar | Restricted | Rational);
+ 
+ This is an implementation-defined pragma that is similar in effect to
+ ‘pragma Profile’ except that instead of generating ‘Restrictions’
+ pragmas, it generates ‘Restriction_Warnings’ pragmas.  The result is
+ that violations of the profile generate warning messages instead of
+ error messages.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Propagate_Exceptions,  Next: Pragma Provide_Shift_Operators,  Prev: Pragma Profile_Warnings,  Up: Implementation Defined Pragmas
+ 
+ 2.139 Pragma Propagate_Exceptions
+ =================================
+ 
+ Syntax:
+ 
+      pragma Propagate_Exceptions;
+ 
+ This pragma is now obsolete and, other than generating a warning if
+ warnings on obsolescent features are enabled, is ignored.  It is
+ retained for compatibility purposes.  It used to be used in connection
+ with optimization of a now-obsolete mechanism for implementation of
+ exceptions.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Provide_Shift_Operators,  Next: Pragma Psect_Object,  Prev: Pragma Propagate_Exceptions,  Up: Implementation Defined Pragmas
+ 
+ 2.140 Pragma Provide_Shift_Operators
+ ====================================
+ 
+ Syntax:
+ 
+      pragma Provide_Shift_Operators (integer_first_subtype_LOCAL_NAME);
+ 
+ This pragma can be applied to a first subtype local name that specifies
+ either an unsigned or signed type.  It has the effect of providing the
+ five shift operators (Shift_Left, Shift_Right, Shift_Right_Arithmetic,
+ Rotate_Left and Rotate_Right) for the given type.  It is similar to
+ including the function declarations for these five operators, together
+ with the pragma Import (Intrinsic, …) statements.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Psect_Object,  Next: Pragma Pure_Function,  Prev: Pragma Provide_Shift_Operators,  Up: Implementation Defined Pragmas
+ 
+ 2.141 Pragma Psect_Object
+ =========================
+ 
+ Syntax:
+ 
+      pragma Psect_Object (
+           [Internal =>] LOCAL_NAME,
+        [, [External =>] EXTERNAL_SYMBOL]
+        [, [Size     =>] EXTERNAL_SYMBOL]);
+ 
+      EXTERNAL_SYMBOL ::=
+        IDENTIFIER
+      | static_string_EXPRESSION
+ 
+ This pragma is identical in effect to pragma ‘Common_Object’.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Pure_Function,  Next: Pragma Rational,  Prev: Pragma Psect_Object,  Up: Implementation Defined Pragmas
+ 
+ 2.142 Pragma Pure_Function
+ ==========================
+ 
+ Syntax:
+ 
+      pragma Pure_Function ([Entity =>] function_LOCAL_NAME);
+ 
+ This pragma appears in the same declarative part as a function
+ declaration (or a set of function declarations if more than one
+ overloaded declaration exists, in which case the pragma applies to all
+ entities).  It specifies that the function ‘Entity’ is to be considered
+ pure for the purposes of code generation.  This means that the compiler
+ can assume that there are no side effects, and in particular that two
+ identical calls produce the same result in the same context.  It also
+ means that the function can be used in an address clause.
+ 
+ Note that, quite deliberately, there are no static checks to try to
+ ensure that this promise is met, so ‘Pure_Function’ can be used with
+ functions that are conceptually pure, even if they do modify global
+ variables.  For example, a square root function that is instrumented to
+ count the number of times it is called is still conceptually pure, and
+ can still be optimized, even though it modifies a global variable (the
+ count).  Memo functions are another example (where a table of previous
+ calls is kept and consulted to avoid re-computation).
+ 
+ Note also that the normal rules excluding optimization of subprograms in
+ pure units (when parameter types are descended from System.Address, or
+ when the full view of a parameter type is limited), do not apply for the
+ Pure_Function case.  If you explicitly specify Pure_Function, the
+ compiler may optimize away calls with identical arguments, and if that
+ results in unexpected behavior, the proper action is not to use the
+ pragma for subprograms that are not (conceptually) pure.
+ 
+ Note: Most functions in a ‘Pure’ package are automatically pure, and
+ there is no need to use pragma ‘Pure_Function’ for such functions.  One
+ exception is any function that has at least one formal of type
+ ‘System.Address’ or a type derived from it.  Such functions are not
+ considered pure by default, since the compiler assumes that the
+ ‘Address’ parameter may be functioning as a pointer and that the
+ referenced data may change even if the address value does not.
+ Similarly, imported functions are not considered to be pure by default,
+ since there is no way of checking that they are in fact pure.  The use
+ of pragma ‘Pure_Function’ for such a function will override these
+ default assumption, and cause the compiler to treat a designated
+ subprogram as pure in these cases.
+ 
+ Note: If pragma ‘Pure_Function’ is applied to a renamed function, it
+ applies to the underlying renamed function.  This can be used to
+ disambiguate cases of overloading where some but not all functions in a
+ set of overloaded functions are to be designated as pure.
+ 
+ If pragma ‘Pure_Function’ is applied to a library-level function, the
+ function is also considered pure from an optimization point of view, but
+ the unit is not a Pure unit in the categorization sense.  So for
+ example, a function thus marked is free to ‘with’ non-pure units.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Rational,  Next: Pragma Ravenscar,  Prev: Pragma Pure_Function,  Up: Implementation Defined Pragmas
+ 
+ 2.143 Pragma Rational
+ =====================
+ 
+ Syntax:
+ 
+      pragma Rational;
+ 
+ This pragma is considered obsolescent, but is retained for compatibility
+ purposes.  It is equivalent to:
+ 
+      pragma Profile (Rational);
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Ravenscar,  Next: Pragma Refined_Depends,  Prev: Pragma Rational,  Up: Implementation Defined Pragmas
+ 
+ 2.144 Pragma Ravenscar
+ ======================
+ 
+ Syntax:
+ 
+      pragma Ravenscar;
+ 
+ This pragma is considered obsolescent, but is retained for compatibility
+ purposes.  It is equivalent to:
+ 
+      pragma Profile (Ravenscar);
+ 
+ which is the preferred method of setting the ‘Ravenscar’ profile.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Refined_Depends,  Next: Pragma Refined_Global,  Prev: Pragma Ravenscar,  Up: Implementation Defined Pragmas
+ 
+ 2.145 Pragma Refined_Depends
+ ============================
+ 
+ Syntax:
+ 
+      pragma Refined_Depends (DEPENDENCY_RELATION);
+ 
+      DEPENDENCY_RELATION ::=
+           null
+        | (DEPENDENCY_CLAUSE {, DEPENDENCY_CLAUSE})
+ 
+      DEPENDENCY_CLAUSE ::=
+          OUTPUT_LIST =>[+] INPUT_LIST
+        | NULL_DEPENDENCY_CLAUSE
+ 
+      NULL_DEPENDENCY_CLAUSE ::= null => INPUT_LIST
+ 
+      OUTPUT_LIST ::= OUTPUT | (OUTPUT {, OUTPUT})
+ 
+      INPUT_LIST ::= null | INPUT | (INPUT {, INPUT})
+ 
+      OUTPUT ::= NAME | FUNCTION_RESULT
+      INPUT  ::= NAME
+ 
+      where FUNCTION_RESULT is a function Result attribute_reference
+ 
+ For the semantics of this pragma, see the entry for aspect
+ ‘Refined_Depends’ in the SPARK 2014 Reference Manual, section 6.1.5.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Refined_Global,  Next: Pragma Refined_Post,  Prev: Pragma Refined_Depends,  Up: Implementation Defined Pragmas
+ 
+ 2.146 Pragma Refined_Global
+ ===========================
+ 
+ Syntax:
+ 
+      pragma Refined_Global (GLOBAL_SPECIFICATION);
+ 
+      GLOBAL_SPECIFICATION ::=
+           null
+        | (GLOBAL_LIST)
+        | (MODED_GLOBAL_LIST {, MODED_GLOBAL_LIST})
+ 
+      MODED_GLOBAL_LIST ::= MODE_SELECTOR => GLOBAL_LIST
+ 
+      MODE_SELECTOR ::= In_Out | Input | Output | Proof_In
+      GLOBAL_LIST   ::= GLOBAL_ITEM | (GLOBAL_ITEM {, GLOBAL_ITEM})
+      GLOBAL_ITEM   ::= NAME
+ 
+ For the semantics of this pragma, see the entry for aspect
+ ‘Refined_Global’ in the SPARK 2014 Reference Manual, section 6.1.4.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Refined_Post,  Next: Pragma Refined_State,  Prev: Pragma Refined_Global,  Up: Implementation Defined Pragmas
+ 
+ 2.147 Pragma Refined_Post
+ =========================
+ 
+ Syntax:
+ 
+      pragma Refined_Post (boolean_EXPRESSION);
+ 
+ For the semantics of this pragma, see the entry for aspect
+ ‘Refined_Post’ in the SPARK 2014 Reference Manual, section 7.2.7.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Refined_State,  Next: Pragma Relative_Deadline,  Prev: Pragma Refined_Post,  Up: Implementation Defined Pragmas
+ 
+ 2.148 Pragma Refined_State
+ ==========================
+ 
+ Syntax:
+ 
+      pragma Refined_State (REFINEMENT_LIST);
+ 
+      REFINEMENT_LIST ::=
+        (REFINEMENT_CLAUSE {, REFINEMENT_CLAUSE})
+ 
+      REFINEMENT_CLAUSE ::= state_NAME => CONSTITUENT_LIST
+ 
+      CONSTITUENT_LIST ::=
+           null
+        |  CONSTITUENT
+        | (CONSTITUENT {, CONSTITUENT})
+ 
+      CONSTITUENT ::= object_NAME | state_NAME
+ 
+ For the semantics of this pragma, see the entry for aspect
+ ‘Refined_State’ in the SPARK 2014 Reference Manual, section 7.2.2.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Relative_Deadline,  Next: Pragma Remote_Access_Type,  Prev: Pragma Refined_State,  Up: Implementation Defined Pragmas
+ 
+ 2.149 Pragma Relative_Deadline
+ ==============================
+ 
+ Syntax:
+ 
+      pragma Relative_Deadline (time_span_EXPRESSION);
+ 
+ This pragma is standard in Ada 2005, but is available in all earlier
+ versions of Ada as an implementation-defined pragma.  See Ada 2012
+ Reference Manual for details.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Remote_Access_Type,  Next: Pragma Rename_Pragma,  Prev: Pragma Relative_Deadline,  Up: Implementation Defined Pragmas
+ 
+ 2.150 Pragma Remote_Access_Type
+ ===============================
+ 
+ Syntax:
+ 
+      pragma Remote_Access_Type ([Entity =>] formal_access_type_LOCAL_NAME);
+ 
+ This pragma appears in the formal part of a generic declaration.  It
+ specifies an exception to the RM rule from E.2.2(17/2), which forbids
+ the use of a remote access to class-wide type as actual for a formal
+ access type.
+ 
+ When this pragma applies to a formal access type ‘Entity’, that type is
+ treated as a remote access to class-wide type in the generic.  It must
+ be a formal general access type, and its designated type must be the
+ class-wide type of a formal tagged limited private type from the same
+ generic declaration.
+ 
+ In the generic unit, the formal type is subject to all restrictions
+ pertaining to remote access to class-wide types.  At instantiation, the
+ actual type must be a remote access to class-wide type.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Rename_Pragma,  Next: Pragma Restricted_Run_Time,  Prev: Pragma Remote_Access_Type,  Up: Implementation Defined Pragmas
+ 
+ 2.151 Pragma Rename_Pragma
+ ==========================
+ 
+ Syntax:
+ 
+      pragma Rename_Pragma (
+               [New_Name =>] IDENTIFIER,
+               [Renamed  =>] pragma_IDENTIFIER);
+ 
+ This pragma provides a mechanism for supplying new names for existing
+ pragmas.  The ‘New_Name’ identifier can subsequently be used as a
+ synonym for the Renamed pragma.  For example, suppose you have code that
+ was originally developed on a compiler that supports Inline_Only as an
+ implementation defined pragma.  And suppose the semantics of pragma
+ Inline_Only are identical to (or at least very similar to) the GNAT
+ implementation defined pragma Inline_Always.  You could globally replace
+ Inline_Only with Inline_Always.
+ 
+ However, to avoid that source modification, you could instead add a
+ configuration pragma:
+ 
+      pragma Rename_Pragma (
+               New_Name => Inline_Only,
+               Renamed  => Inline_Always);
+ 
+ Then GNAT will treat “pragma Inline_Only …” as if you had written
+ “pragma Inline_Always …”.
+ 
+ Pragma Inline_Only will not necessarily mean the same thing as the other
+ Ada compiler; it’s up to you to make sure the semantics are close
+ enough.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Restricted_Run_Time,  Next: Pragma Restriction_Warnings,  Prev: Pragma Rename_Pragma,  Up: Implementation Defined Pragmas
+ 
+ 2.152 Pragma Restricted_Run_Time
+ ================================
+ 
+ Syntax:
+ 
+      pragma Restricted_Run_Time;
+ 
+ This pragma is considered obsolescent, but is retained for compatibility
+ purposes.  It is equivalent to:
+ 
+      pragma Profile (Restricted);
+ 
+ which is the preferred method of setting the restricted run time
+ profile.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Restriction_Warnings,  Next: Pragma Reviewable,  Prev: Pragma Restricted_Run_Time,  Up: Implementation Defined Pragmas
+ 
+ 2.153 Pragma Restriction_Warnings
+ =================================
+ 
+ Syntax:
+ 
+      pragma Restriction_Warnings
+        (restriction_IDENTIFIER {, restriction_IDENTIFIER});
+ 
+ This pragma allows a series of restriction identifiers to be specified
+ (the list of allowed identifiers is the same as for pragma
+ ‘Restrictions’).  For each of these identifiers the compiler checks for
+ violations of the restriction, but generates a warning message rather
+ than an error message if the restriction is violated.
+ 
+ One use of this is in situations where you want to know about violations
+ of a restriction, but you want to ignore some of these violations.
+ Consider this example, where you want to set Ada_95 mode and enable
+ style checks, but you want to know about any other use of implementation
+ pragmas:
+ 
+      pragma Restriction_Warnings (No_Implementation_Pragmas);
+      pragma Warnings (Off, "violation of No_Implementation_Pragmas");
+      pragma Ada_95;
+      pragma Style_Checks ("2bfhkM160");
+      pragma Warnings (On, "violation of No_Implementation_Pragmas");
+ 
+ By including the above lines in a configuration pragmas file, the Ada_95
+ and Style_Checks pragmas are accepted without generating a warning, but
+ any other use of implementation defined pragmas will cause a warning to
+ be generated.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Reviewable,  Next: Pragma Secondary_Stack_Size,  Prev: Pragma Restriction_Warnings,  Up: Implementation Defined Pragmas
+ 
+ 2.154 Pragma Reviewable
+ =======================
+ 
+ Syntax:
+ 
+      pragma Reviewable;
+ 
+ This pragma is an RM-defined standard pragma, but has no effect on the
+ program being compiled, or on the code generated for the program.
+ 
+ To obtain the required output specified in RM H.3.1, the compiler must
+ be run with various special switches as follows:
+ 
+    * ‘Where compiler-generated run-time checks remain’
+ 
+      The switch ‘-gnatGL’ may be used to list the expanded code in
+      pseudo-Ada form.  Runtime checks show up in the listing either as
+      explicit checks or operators marked with {} to indicate a check is
+      present.
+ 
+    * ‘An identification of known exceptions at compile time’
+ 
+      If the program is compiled with ‘-gnatwa’, the compiler warning
+      messages will indicate all cases where the compiler detects that an
+      exception is certain to occur at run time.
+ 
+    * ‘Possible reads of uninitialized variables’
+ 
+      The compiler warns of many such cases, but its output is
+      incomplete.
+ 
+ A supplemental static analysis tool may be used to obtain a
+ comprehensive list of all possible points at which uninitialized data
+ may be read.
+ 
+    * ‘Where run-time support routines are implicitly invoked’
+ 
+      In the output from ‘-gnatGL’, run-time calls are explicitly listed
+      as calls to the relevant run-time routine.
+ 
+    * ‘Object code listing’
+ 
+      This may be obtained either by using the ‘-S’ switch, or the
+      objdump utility.
+ 
+    * ‘Constructs known to be erroneous at compile time’
+ 
+      These are identified by warnings issued by the compiler (use
+      ‘-gnatwa’).
+ 
+    * ‘Stack usage information’
+ 
+      Static stack usage data (maximum per-subprogram) can be obtained
+      via the ‘-fstack-usage’ switch to the compiler.  Dynamic stack
+      usage data (per task) can be obtained via the ‘-u’ switch to
+      gnatbind
+ 
+    * ‘Object code listing of entire partition’
+ 
+      This can be obtained by compiling the partition with ‘-S’, or by
+      applying objdump to all the object files that are part of the
+      partition.
+ 
+    * ‘A description of the run-time model’
+ 
+      The full sources of the run-time are available, and the
+      documentation of these routines describes how these run-time
+      routines interface to the underlying operating system facilities.
+ 
+    * ‘Control and data-flow information’
+ 
+ A supplemental static analysis tool may be used to obtain complete
+ control and data-flow information, as well as comprehensive messages
+ identifying possible problems based on this information.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Secondary_Stack_Size,  Next: Pragma Share_Generic,  Prev: Pragma Reviewable,  Up: Implementation Defined Pragmas
+ 
+ 2.155 Pragma Secondary_Stack_Size
+ =================================
+ 
+ Syntax:
+ 
+      pragma Secondary_Stack_Size (integer_EXPRESSION);
+ 
+ This pragma appears within the task definition of a single task
+ declaration or a task type declaration (like pragma ‘Storage_Size’) and
+ applies to all task objects of that type.  The argument specifies the
+ size of the secondary stack to be used by these task objects, and must
+ be of an integer type.  The secondary stack is used to handle functions
+ that return a variable-sized result, for example a function returning an
+ unconstrained String.
+ 
+ Note this pragma only applies to targets using fixed secondary stacks,
+ like VxWorks 653 and bare board targets, where a fixed block for the
+ secondary stack is allocated from the primary stack of the task.  By
+ default, these targets assign a percentage of the primary stack for the
+ secondary stack, as defined by ‘System.Parameter.Sec_Stack_Percentage’.
+ With this pragma, an ‘integer_EXPRESSION’ of bytes is assigned from the
+ primary stack instead.
+ 
+ For most targets, the pragma does not apply as the secondary stack grows
+ on demand: allocated as a chain of blocks in the heap.  The default size
+ of these blocks can be modified via the ‘-D’ binder option as described
+ in ‘GNAT User’s Guide’.
+ 
+ Note that no check is made to see if the secondary stack can fit inside
+ the primary stack.
+ 
+ Note the pragma cannot appear when the restriction ‘No_Secondary_Stack’
+ is in effect.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Share_Generic,  Next: Pragma Shared,  Prev: Pragma Secondary_Stack_Size,  Up: Implementation Defined Pragmas
+ 
+ 2.156 Pragma Share_Generic
+ ==========================
+ 
+ Syntax:
+ 
+      pragma Share_Generic (GNAME {, GNAME});
+ 
+      GNAME ::= generic_unit_NAME | generic_instance_NAME
+ 
+ This pragma is provided for compatibility with Dec Ada 83.  It has no
+ effect in GNAT (which does not implement shared generics), other than to
+ check that the given names are all names of generic units or generic
+ instances.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Shared,  Next: Pragma Short_Circuit_And_Or,  Prev: Pragma Share_Generic,  Up: Implementation Defined Pragmas
+ 
+ 2.157 Pragma Shared
+ ===================
+ 
+ This pragma is provided for compatibility with Ada 83.  The syntax and
+ semantics are identical to pragma Atomic.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Short_Circuit_And_Or,  Next: Pragma Short_Descriptors,  Prev: Pragma Shared,  Up: Implementation Defined Pragmas
+ 
+ 2.158 Pragma Short_Circuit_And_Or
+ =================================
+ 
+ Syntax:
+ 
+      pragma Short_Circuit_And_Or;
+ 
+ This configuration pragma causes any occurrence of the AND operator
+ applied to operands of type Standard.Boolean to be short-circuited (i.e.
+ the AND operator is treated as if it were AND THEN). Or is similarly
+ treated as OR ELSE. This may be useful in the context of certification
+ protocols requiring the use of short-circuited logical operators.  If
+ this configuration pragma occurs locally within the file being compiled,
+ it applies only to the file being compiled.  There is no requirement
+ that all units in a partition use this option.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Short_Descriptors,  Next: Pragma Simple_Storage_Pool_Type,  Prev: Pragma Short_Circuit_And_Or,  Up: Implementation Defined Pragmas
+ 
+ 2.159 Pragma Short_Descriptors
+ ==============================
+ 
+ Syntax:
+ 
+      pragma Short_Descriptors;
+ 
+ This pragma is provided for compatibility with other Ada
+ implementations.  It is recognized but ignored by all current versions
+ of GNAT.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Simple_Storage_Pool_Type,  Next: Pragma Source_File_Name,  Prev: Pragma Short_Descriptors,  Up: Implementation Defined Pragmas
+ 
+ 2.160 Pragma Simple_Storage_Pool_Type
+ =====================================
+ 
+ Syntax:
+ 
+      pragma Simple_Storage_Pool_Type (type_LOCAL_NAME);
+ 
+ A type can be established as a ‘simple storage pool type’ by applying
+ the representation pragma ‘Simple_Storage_Pool_Type’ to the type.  A
+ type named in the pragma must be a library-level immutably limited
+ record type or limited tagged type declared immediately within a package
+ declaration.  The type can also be a limited private type whose full
+ type is allowed as a simple storage pool type.
+ 
+ For a simple storage pool type ‘SSP’, nonabstract primitive subprograms
+ ‘Allocate’, ‘Deallocate’, and ‘Storage_Size’ can be declared that are
+ subtype conformant with the following subprogram declarations:
+ 
+      procedure Allocate
+        (Pool                     : in out SSP;
+         Storage_Address          : out System.Address;
+         Size_In_Storage_Elements : System.Storage_Elements.Storage_Count;
+         Alignment                : System.Storage_Elements.Storage_Count);
+ 
+      procedure Deallocate
+        (Pool : in out SSP;
+         Storage_Address          : System.Address;
+         Size_In_Storage_Elements : System.Storage_Elements.Storage_Count;
+         Alignment                : System.Storage_Elements.Storage_Count);
+ 
+      function Storage_Size (Pool : SSP)
+        return System.Storage_Elements.Storage_Count;
+ 
+ Procedure ‘Allocate’ must be declared, whereas ‘Deallocate’ and
+ ‘Storage_Size’ are optional.  If ‘Deallocate’ is not declared, then
+ applying an unchecked deallocation has no effect other than to set its
+ actual parameter to null.  If ‘Storage_Size’ is not declared, then the
+ ‘Storage_Size’ attribute applied to an access type associated with a
+ pool object of type SSP returns zero.  Additional operations can be
+ declared for a simple storage pool type (such as for supporting a
+ mark/release storage-management discipline).
+ 
+ An object of a simple storage pool type can be associated with an access
+ type by specifying the attribute *note Simple_Storage_Pool: e4.  For
+ example:
+ 
+      My_Pool : My_Simple_Storage_Pool_Type;
+ 
+      type Acc is access My_Data_Type;
+ 
+      for Acc'Simple_Storage_Pool use My_Pool;
+ 
+ See attribute *note Simple_Storage_Pool: e4. for further details.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Source_File_Name,  Next: Pragma Source_File_Name_Project,  Prev: Pragma Simple_Storage_Pool_Type,  Up: Implementation Defined Pragmas
+ 
+ 2.161 Pragma Source_File_Name
+ =============================
+ 
+ Syntax:
+ 
+      pragma Source_File_Name (
+        [Unit_Name     =>] unit_NAME,
+        Spec_File_Name =>  STRING_LITERAL,
+        [Index => INTEGER_LITERAL]);
+ 
+      pragma Source_File_Name (
+        [Unit_Name     =>] unit_NAME,
+        Body_File_Name =>  STRING_LITERAL,
+        [Index => INTEGER_LITERAL]);
+ 
+ Use this to override the normal naming convention.  It is a
+ configuration pragma, and so has the usual applicability of
+ configuration pragmas (i.e., it applies to either an entire partition,
+ or to all units in a compilation, or to a single unit, depending on how
+ it is used).  ‘unit_name’ is mapped to ‘file_name_literal’.  The
+ identifier for the second argument is required, and indicates whether
+ this is the file name for the spec or for the body.
+ 
+ The optional Index argument should be used when a file contains multiple
+ units, and when you do not want to use ‘gnatchop’ to separate then into
+ multiple files (which is the recommended procedure to limit the number
+ of recompilations that are needed when some sources change).  For
+ instance, if the source file ‘source.ada’ contains
+ 
+      package B is
+      ...
+      end B;
+ 
+      with B;
+      procedure A is
+      begin
+         ..
+      end A;
+ 
+ you could use the following configuration pragmas:
+ 
+      pragma Source_File_Name
+        (B, Spec_File_Name => "source.ada", Index => 1);
+      pragma Source_File_Name
+        (A, Body_File_Name => "source.ada", Index => 2);
+ 
+ Note that the ‘gnatname’ utility can also be used to generate those
+ configuration pragmas.
+ 
+ Another form of the ‘Source_File_Name’ pragma allows the specification
+ of patterns defining alternative file naming schemes to apply to all
+ files.
+ 
+      pragma Source_File_Name
+        (  [Spec_File_Name  =>] STRING_LITERAL
+         [,[Casing          =>] CASING_SPEC]
+         [,[Dot_Replacement =>] STRING_LITERAL]);
+ 
+      pragma Source_File_Name
+        (  [Body_File_Name  =>] STRING_LITERAL
+         [,[Casing          =>] CASING_SPEC]
+         [,[Dot_Replacement =>] STRING_LITERAL]);
+ 
+      pragma Source_File_Name
+        (  [Subunit_File_Name =>] STRING_LITERAL
+         [,[Casing            =>] CASING_SPEC]
+         [,[Dot_Replacement   =>] STRING_LITERAL]);
+ 
+      CASING_SPEC ::= Lowercase | Uppercase | Mixedcase
+ 
+ The first argument is a pattern that contains a single asterisk
+ indicating the point at which the unit name is to be inserted in the
+ pattern string to form the file name.  The second argument is optional.
+ If present it specifies the casing of the unit name in the resulting
+ file name string.  The default is lower case.  Finally the third
+ argument allows for systematic replacement of any dots in the unit name
+ by the specified string literal.
+ 
+ Note that Source_File_Name pragmas should not be used if you are using
+ project files.  The reason for this rule is that the project manager is
+ not aware of these pragmas, and so other tools that use the project file
+ would not 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 *note Pragma
+ Source_File_Name_Project: e7.
+ 
+ For more details on the use of the ‘Source_File_Name’ pragma, see the
+ sections on ‘Using Other File Names’ and ‘Alternative File Naming
+ Schemes’ in the ‘GNAT User’s Guide’.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Source_File_Name_Project,  Next: Pragma Source_Reference,  Prev: Pragma Source_File_Name,  Up: Implementation Defined Pragmas
+ 
+ 2.162 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 *note Pragma Source_File_Name: e6, and
+ most importantly, once pragma Source_File_Name_Project appears, no
+ further Source_File_Name pragmas are allowed.
+ 
+ The intention is that Source_File_Name_Project pragmas are always
+ generated by the Project Manager in a manner consistent with the naming
+ specified in a project file, and when naming is controlled in this
+ manner, it is not permissible to attempt to modify this naming scheme
+ using Source_File_Name or Source_File_Name_Project pragmas (which would
+ not be known to the project manager).
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Source_Reference,  Next: Pragma SPARK_Mode,  Prev: Pragma Source_File_Name_Project,  Up: Implementation Defined Pragmas
+ 
+ 2.163 Pragma Source_Reference
+ =============================
+ 
+ Syntax:
+ 
+      pragma Source_Reference (INTEGER_LITERAL, STRING_LITERAL);
+ 
+ This pragma must appear as the first line of a source file.
+ ‘integer_literal’ is the logical line number of the line following the
+ pragma line (for use in error messages and debugging information).
+ ‘string_literal’ is a static string constant that specifies the file
+ name to be used in error messages and debugging information.  This is
+ most notably used for the output of ‘gnatchop’ with the ‘-r’ switch, to
+ make sure that the original unchopped source file is the one referred
+ to.
+ 
+ The second argument must be a string literal, it cannot be a static
+ string expression other than a string literal.  This is because its
+ value is needed for error messages issued by all phases of the compiler.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma SPARK_Mode,  Next: Pragma Static_Elaboration_Desired,  Prev: Pragma Source_Reference,  Up: Implementation Defined Pragmas
+ 
+ 2.164 Pragma SPARK_Mode
+ =======================
+ 
+ Syntax:
+ 
+      pragma SPARK_Mode [(On | Off)] ;
+ 
+ In general a program can have some parts that are in SPARK 2014 (and
+ follow all the rules in the SPARK Reference Manual), and some parts that
+ are full Ada 2012.
+ 
+ The SPARK_Mode pragma is used to identify which parts are in SPARK 2014
+ (by default programs are in full Ada).  The SPARK_Mode pragma can be
+ used in the following places:
+ 
+    * As a configuration pragma, in which case it sets the default mode
+      for all units compiled with this pragma.
+ 
+    * Immediately following a library-level subprogram spec
+ 
+    * Immediately within a library-level package body
+ 
+    * Immediately following the ‘private’ keyword of a library-level
+      package spec
+ 
+    * Immediately following the ‘begin’ keyword of a library-level
+      package body
+ 
+    * Immediately within a library-level subprogram body
+ 
+ Normally a subprogram or package spec/body inherits the current mode
+ that is active at the point it is declared.  But this can be overridden
+ by pragma within the spec or body as above.
+ 
+ The basic consistency rule is that you can’t turn SPARK_Mode back ‘On’,
+ once you have explicitly (with a pragma) turned if ‘Off’.  So the
+ following rules apply:
+ 
+ If a subprogram spec has SPARK_Mode ‘Off’, then the body must also have
+ SPARK_Mode ‘Off’.
+ 
+ For a package, we have four parts:
+ 
+    * the package public declarations
+ 
+    * the package private part
+ 
+    * the body of the package
+ 
+    * the elaboration code after ‘begin’
+ 
+ For a package, the rule is that if you explicitly turn SPARK_Mode ‘Off’
+ for any part, then all the following parts must have SPARK_Mode ‘Off’.
+ Note that this may require repeating a pragma SPARK_Mode (‘Off’) in the
+ body.  For example, if we have a configuration pragma SPARK_Mode (‘On’)
+ that turns the mode on by default everywhere, and one particular package
+ spec has pragma SPARK_Mode (‘Off’), then that pragma will need to be
+ repeated in the package body.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Static_Elaboration_Desired,  Next: Pragma Stream_Convert,  Prev: Pragma SPARK_Mode,  Up: Implementation Defined Pragmas
+ 
+ 2.165 Pragma Static_Elaboration_Desired
+ =======================================
+ 
+ Syntax:
+ 
+      pragma Static_Elaboration_Desired;
+ 
+ This pragma is used to indicate that the compiler should attempt to
+ initialize statically the objects declared in the library unit to which
+ the pragma applies, when these objects are initialized (explicitly or
+ implicitly) by an aggregate.  In the absence of this pragma, aggregates
+ in object declarations are expanded into assignments and loops, even
+ when the aggregate components are static constants.  When the aggregate
+ is present the compiler builds a static expression that requires no
+ run-time code, so that the initialized object can be placed in read-only
+ data space.  If the components are not static, or the aggregate has more
+ that 100 components, the compiler emits a warning that the pragma cannot
+ be obeyed.  (See also the restriction No_Implicit_Loops, which supports
+ static construction of larger aggregates with static components that
+ include an others choice.)
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Stream_Convert,  Next: Pragma Style_Checks,  Prev: Pragma Static_Elaboration_Desired,  Up: Implementation Defined Pragmas
+ 
+ 2.166 Pragma Stream_Convert
+ ===========================
+ 
+ Syntax:
+ 
+      pragma Stream_Convert (
+        [Entity =>] type_LOCAL_NAME,
+        [Read   =>] function_NAME,
+        [Write  =>] function_NAME);
+ 
+ This pragma provides an efficient way of providing user-defined stream
+ attributes.  Not only is it simpler to use than specifying the
+ attributes directly, but more importantly, it allows the specification
+ to be made in such a way that the predefined unit Ada.Streams is not
+ loaded unless it is actually needed (i.e.  unless the stream attributes
+ are actually used); the use of the Stream_Convert pragma adds no
+ overhead at all, unless the stream attributes are actually used on the
+ designated type.
+ 
+ The first argument specifies the type for which stream functions are
+ provided.  The second parameter provides a function used to read values
+ of this type.  It must name a function whose argument type may be any
+ subtype, and whose returned type must be the type given as the first
+ argument to the pragma.
+ 
+ The meaning of the ‘Read’ parameter is that if a stream attribute
+ directly or indirectly specifies reading of the type given as the first
+ parameter, then a value of the type given as the argument to the Read
+ function is read from the stream, and then the Read function is used to
+ convert this to the required target type.
+ 
+ Similarly the ‘Write’ parameter specifies how to treat write attributes
+ that directly or indirectly apply to the type given as the first
+ parameter.  It must have an input parameter of the type specified by the
+ first parameter, and the return type must be the same as the input type
+ of the Read function.  The effect is to first call the Write function to
+ convert to the given stream type, and then write the result type to the
+ stream.
+ 
+ The Read and Write functions must not be overloaded subprograms.  If
+ necessary renamings can be supplied to meet this requirement.  The usage
+ of this attribute is best illustrated by a simple example, taken from
+ the GNAT implementation of package Ada.Strings.Unbounded:
+ 
+      function To_Unbounded (S : String) return Unbounded_String
+        renames To_Unbounded_String;
+ 
+      pragma Stream_Convert
+        (Unbounded_String, To_Unbounded, To_String);
+ 
+ The specifications of the referenced functions, as given in the Ada
+ Reference Manual are:
+ 
+      function To_Unbounded_String (Source : String)
+        return Unbounded_String;
+ 
+      function To_String (Source : Unbounded_String)
+        return String;
+ 
+ The effect is that if the value of an unbounded string is written to a
+ stream, then the representation of the item in the stream is in the same
+ format that would be used for ‘Standard.String'Output’, and this same
+ representation is expected when a value of this type is read from the
+ stream.  Note that the value written always includes the bounds, even
+ for Unbounded_String’Write, since Unbounded_String is not an array type.
+ 
+ Note that the ‘Stream_Convert’ pragma is not effective in the case of a
+ derived type of a non-limited tagged type.  If such a type is specified
+ then the pragma is silently ignored, and the default implementation of
+ the stream attributes is used instead.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Style_Checks,  Next: Pragma Subtitle,  Prev: Pragma Stream_Convert,  Up: Implementation Defined Pragmas
+ 
+ 2.167 Pragma Style_Checks
+ =========================
+ 
+ Syntax:
+ 
+      pragma Style_Checks (string_LITERAL | ALL_CHECKS |
+                           On | Off [, LOCAL_NAME]);
+ 
+ This pragma is used in conjunction with compiler switches to control the
+ built in style checking provided by GNAT. The compiler switches, if set,
+ provide an initial setting for the switches, and this pragma may be used
+ to modify these settings, or the settings may be provided entirely by
+ the use of the pragma.  This pragma can be used anywhere that a pragma
+ is legal, including use as a configuration pragma (including use in the
+ ‘gnat.adc’ file).
+ 
+ The form with a string literal specifies which style options are to be
+ activated.  These are additive, so they apply in addition to any
+ previously set style check options.  The codes for the options are the
+ same as those used in the ‘-gnaty’ switch to ‘gcc’ or ‘gnatmake’.  For
+ example the following two methods can be used to enable layout checking:
+ 
+    *      pragma Style_Checks ("l");
+ 
+    *      gcc -c -gnatyl ...
+ 
+ The form ‘ALL_CHECKS’ activates all standard checks (its use is
+ equivalent to the use of the ‘gnaty’ switch with no options.  See the
+ ‘GNAT User’s Guide’ for details.)
+ 
+ Note: the behavior is slightly different in GNAT mode (‘-gnatg’ used).
+ In this case, ‘ALL_CHECKS’ implies the standard set of GNAT mode style
+ check options (i.e.  equivalent to ‘-gnatyg’).
+ 
+ The forms with ‘Off’ and ‘On’ can be used to temporarily disable style
+ checks as shown in the following example:
+ 
+      pragma Style_Checks ("k"); -- requires keywords in lower case
+      pragma Style_Checks (Off); -- turn off style checks
+      NULL;                      -- this will not generate an error message
+      pragma Style_Checks (On);  -- turn style checks back on
+      NULL;                      -- this will generate an error message
+ 
+ Finally the two argument form is allowed only if the first argument is
+ ‘On’ or ‘Off’.  The effect is to turn of semantic style checks for the
+ specified entity, as shown in the following example:
+ 
+      pragma Style_Checks ("r"); -- require consistency of identifier casing
+      Arg : Integer;
+      Rf1 : Integer := ARG;      -- incorrect, wrong case
+      pragma Style_Checks (Off, Arg);
+      Rf2 : Integer := ARG;      -- OK, no error
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Subtitle,  Next: Pragma Suppress,  Prev: Pragma Style_Checks,  Up: Implementation Defined Pragmas
+ 
+ 2.168 Pragma Subtitle
+ =====================
+ 
+ Syntax:
+ 
+      pragma Subtitle ([Subtitle =>] STRING_LITERAL);
+ 
+ This pragma is recognized for compatibility with other Ada compilers but
+ is ignored by GNAT.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Suppress,  Next: Pragma Suppress_All,  Prev: Pragma Subtitle,  Up: Implementation Defined Pragmas
+ 
+ 2.169 Pragma Suppress
+ =====================
+ 
+ Syntax:
+ 
+      pragma Suppress (Identifier [, [On =>] Name]);
+ 
+ This is a standard pragma, and supports all the check names required in
+ the RM. It is included here because GNAT recognizes some additional
+ check names that are implementation defined (as permitted by the RM):
+ 
+    * ‘Alignment_Check’ can be used to suppress alignment checks on
+      addresses used in address clauses.  Such checks can also be
+      suppressed by suppressing range checks, but the specific use of
+      ‘Alignment_Check’ allows suppression of alignment checks without
+      suppressing other range checks.  Note that ‘Alignment_Check’ is
+      suppressed by default on machines (such as the x86) with non-strict
+      alignment.
+ 
+    * ‘Atomic_Synchronization’ can be used to suppress the special memory
+      synchronization instructions that are normally generated for access
+      to ‘Atomic’ variables to ensure correct synchronization between
+      tasks that use such variables for synchronization purposes.
+ 
+    * ‘Duplicated_Tag_Check’ Can be used to suppress the check that is
+      generated for a duplicated tag value when a tagged type is
+      declared.
+ 
+    * ‘Container_Checks’ Can be used to suppress all checks within
+      Ada.Containers and instances of its children, including
+      Tampering_Check.
+ 
+    * ‘Tampering_Check’ Can be used to suppress tampering check in the
+      containers.
+ 
+    * ‘Predicate_Check’ can be used to control whether predicate checks
+      are active.  It is applicable only to predicates for which the
+      policy is ‘Check’.  Unlike ‘Assertion_Policy’, which determines if
+      a given predicate is ignored or checked for the whole program, the
+      use of ‘Suppress’ and ‘Unsuppress’ with this check name allows a
+      given predicate to be turned on and off at specific points in the
+      program.
+ 
+    * ‘Validity_Check’ can be used specifically to control validity
+      checks.  If ‘Suppress’ is used to suppress validity checks, then no
+      validity checks are performed, including those specified by the
+      appropriate compiler switch or the ‘Validity_Checks’ pragma.
+ 
+    * Additional check names previously introduced by use of the
+      ‘Check_Name’ pragma are also allowed.
+ 
+ Note that pragma Suppress gives the compiler permission to omit checks,
+ but does not require the compiler to omit checks.  The compiler will
+ generate checks if they are essentially free, even when they are
+ suppressed.  In particular, if the compiler can prove that a certain
+ check will necessarily fail, it will generate code to do an
+ unconditional ‘raise’, even if checks are suppressed.  The compiler
+ warns in this case.
+ 
+ Of course, run-time checks are omitted whenever the compiler can prove
+ that they will not fail, whether or not checks are suppressed.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Suppress_All,  Next: Pragma Suppress_Debug_Info,  Prev: Pragma Suppress,  Up: Implementation Defined Pragmas
+ 
+ 2.170 Pragma Suppress_All
+ =========================
+ 
+ Syntax:
+ 
+      pragma Suppress_All;
+ 
+ This pragma can appear anywhere within a unit.  The effect is to apply
+ ‘Suppress (All_Checks)’ to the unit in which it appears.  This pragma is
+ implemented for compatibility with DEC Ada 83 usage where it appears at
+ the end of a unit, and for compatibility with Rational Ada, where it
+ appears as a program unit pragma.  The use of the standard Ada pragma
+ ‘Suppress (All_Checks)’ as a normal configuration pragma is the
+ preferred usage in GNAT.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Suppress_Debug_Info,  Next: Pragma Suppress_Exception_Locations,  Prev: Pragma Suppress_All,  Up: Implementation Defined Pragmas
+ 
+ 2.171 Pragma Suppress_Debug_Info
+ ================================
+ 
+ Syntax:
+ 
+      pragma Suppress_Debug_Info ([Entity =>] LOCAL_NAME);
+ 
+ This pragma can be used to suppress generation of debug information for
+ the specified entity.  It is intended primarily for use in debugging the
+ debugger, and navigating around debugger problems.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Suppress_Exception_Locations,  Next: Pragma Suppress_Initialization,  Prev: Pragma Suppress_Debug_Info,  Up: Implementation Defined Pragmas
+ 
+ 2.172 Pragma Suppress_Exception_Locations
+ =========================================
+ 
+ Syntax:
+ 
+      pragma Suppress_Exception_Locations;
+ 
+ In normal mode, a raise statement for an exception by default generates
+ an exception message giving the file name and line number for the
+ location of the raise.  This is useful for debugging and logging
+ purposes, but this entails extra space for the strings for the messages.
+ The configuration pragma ‘Suppress_Exception_Locations’ can be used to
+ suppress the generation of these strings, with the result that space is
+ saved, but the exception message for such raises is null.  This
+ configuration pragma may appear in a global configuration pragma file,
+ or in a specific unit as usual.  It is not required that this pragma be
+ used consistently within a partition, so it is fine to have some units
+ within a partition compiled with this pragma and others compiled in
+ normal mode without it.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Suppress_Initialization,  Next: Pragma Task_Name,  Prev: Pragma Suppress_Exception_Locations,  Up: Implementation Defined Pragmas
+ 
+ 2.173 Pragma Suppress_Initialization
+ ====================================
+ 
+ Syntax:
+ 
+      pragma Suppress_Initialization ([Entity =>] variable_or_subtype_Name);
+ 
+ Here variable_or_subtype_Name is the name introduced by a type
+ declaration or subtype declaration or the name of a variable introduced
+ by an object declaration.
+ 
+ In the case of a type or subtype this pragma suppresses any implicit or
+ explicit initialization for all variables of the given type or subtype,
+ including initialization resulting from the use of pragmas
+ Normalize_Scalars or Initialize_Scalars.
+ 
+ This is considered a representation item, so it cannot be given after
+ the type is frozen.  It applies to all subsequent object declarations,
+ and also any allocator that creates objects of the type.
+ 
+ If the pragma is given for the first subtype, then it is considered to
+ apply to the base type and all its subtypes.  If the pragma is given for
+ other than a first subtype, then it applies only to the given subtype.
+ The pragma may not be given after the type is frozen.
+ 
+ Note that this includes eliminating initialization of discriminants for
+ discriminated types, and tags for tagged types.  In these cases, you
+ will have to use some non-portable mechanism (e.g.  address overlays or
+ unchecked conversion) to achieve required initialization of these fields
+ before accessing any object of the corresponding type.
+ 
+ For the variable case, implicit initialization for the named variable is
+ suppressed, just as though its subtype had been given in a pragma
+ Suppress_Initialization, as described above.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Task_Name,  Next: Pragma Task_Storage,  Prev: Pragma Suppress_Initialization,  Up: Implementation Defined Pragmas
+ 
+ 2.174 Pragma Task_Name
+ ======================
+ 
+ Syntax
+ 
+      pragma Task_Name (string_EXPRESSION);
+ 
+ This pragma appears within a task definition (like pragma ‘Priority’)
+ and applies to the task in which it appears.  The argument must be of
+ type String, and provides a name to be used for the task instance when
+ the task is created.  Note that this expression is not required to be
+ static, and in particular, it can contain references to task
+ discriminants.  This facility can be used to provide different names for
+ different tasks as they are created, as illustrated in the example
+ below.
+ 
+ The task name is recorded internally in the run-time structures and is
+ accessible to tools like the debugger.  In addition the routine
+ ‘Ada.Task_Identification.Image’ will return this string, with a unique
+ task address appended.
+ 
+      --  Example of the use of pragma Task_Name
+ 
+      with Ada.Task_Identification;
+      use Ada.Task_Identification;
+      with Text_IO; use Text_IO;
+      procedure t3 is
+ 
+         type Astring is access String;
+ 
+         task type Task_Typ (Name : access String) is
+            pragma Task_Name (Name.all);
+         end Task_Typ;
+ 
+         task body Task_Typ is
+            Nam : constant String := Image (Current_Task);
+         begin
+            Put_Line ("-->" & Nam (1 .. 14) & "<--");
+         end Task_Typ;
+ 
+         type Ptr_Task is access Task_Typ;
+         Task_Var : Ptr_Task;
+ 
+      begin
+         Task_Var :=
+           new Task_Typ (new String'("This is task 1"));
+         Task_Var :=
+           new Task_Typ (new String'("This is task 2"));
+      end;
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Task_Storage,  Next: Pragma Test_Case,  Prev: Pragma Task_Name,  Up: Implementation Defined Pragmas
+ 
+ 2.175 Pragma Task_Storage
+ =========================
+ 
+ Syntax:
+ 
+      pragma Task_Storage (
+        [Task_Type =>] LOCAL_NAME,
+        [Top_Guard =>] static_integer_EXPRESSION);
+ 
+ This pragma specifies the length of the guard area for tasks.  The guard
+ area is an additional storage area allocated to a task.  A value of zero
+ means that either no guard area is created or a minimal guard area is
+ created, depending on the target.  This pragma can appear anywhere a
+ ‘Storage_Size’ attribute definition clause is allowed for a task type.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Test_Case,  Next: Pragma Thread_Local_Storage,  Prev: Pragma Task_Storage,  Up: Implementation Defined Pragmas
+ 
+ 2.176 Pragma Test_Case
+ ======================
+ 
+ Syntax:
+ 
+      pragma Test_Case (
+         [Name     =>] static_string_Expression
+        ,[Mode     =>] (Nominal | Robustness)
+       [, Requires =>  Boolean_Expression]
+       [, Ensures  =>  Boolean_Expression]);
+ 
+ The ‘Test_Case’ pragma allows defining fine-grain specifications for use
+ by testing tools.  The compiler checks the validity of the ‘Test_Case’
+ pragma, but its presence does not lead to any modification of the code
+ generated by the compiler.
+ 
+ ‘Test_Case’ pragmas may only appear immediately following the (separate)
+ declaration of a subprogram in a package declaration, inside a package
+ spec unit.  Only other pragmas may intervene (that is appear between the
+ subprogram declaration and a test case).
+ 
+ The compiler checks that boolean expressions given in ‘Requires’ and
+ ‘Ensures’ are valid, where the rules for ‘Requires’ are the same as the
+ rule for an expression in ‘Precondition’ and the rules for ‘Ensures’ are
+ the same as the rule for an expression in ‘Postcondition’.  In
+ particular, attributes ‘'Old’ and ‘'Result’ can only be used within the
+ ‘Ensures’ expression.  The following is an example of use within a
+ package spec:
+ 
+      package Math_Functions is
+         ...
+         function Sqrt (Arg : Float) return Float;
+         pragma Test_Case (Name     => "Test 1",
+                           Mode     => Nominal,
+                           Requires => Arg < 10000.0,
+                           Ensures  => Sqrt'Result < 10.0);
+         ...
+      end Math_Functions;
+ 
+ The meaning of a test case is that there is at least one context where
+ ‘Requires’ holds such that, if the associated subprogram is executed in
+ that context, then ‘Ensures’ holds when the subprogram returns.  Mode
+ ‘Nominal’ indicates that the input context should also satisfy the
+ precondition of the subprogram, and the output context should also
+ satisfy its postcondition.  Mode ‘Robustness’ indicates that the
+ precondition and postcondition of the subprogram should be ignored for
+ this test case.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Thread_Local_Storage,  Next: Pragma Time_Slice,  Prev: Pragma Test_Case,  Up: Implementation Defined Pragmas
+ 
+ 2.177 Pragma Thread_Local_Storage
+ =================================
+ 
+ Syntax:
+ 
+      pragma Thread_Local_Storage ([Entity =>] LOCAL_NAME);
+ 
+ This pragma specifies that the specified entity, which must be a
+ variable declared in a library-level package, is to be marked as “Thread
+ Local Storage” (‘TLS’).  On systems supporting this (which include
+ Windows, Solaris, GNU/Linux, and VxWorks), this causes each thread (and
+ hence each Ada task) to see a distinct copy of the variable.
+ 
+ The variable must not have default initialization, and if there is an
+ explicit initialization, it must be either ‘null’ for an access
+ variable, a static expression for a scalar variable, or a fully static
+ aggregate for a composite type, that is to say, an aggregate all of
+ whose components are static, and which does not include packed or
+ discriminated components.
+ 
+ This provides a low-level mechanism similar to that provided by the
+ ‘Ada.Task_Attributes’ package, but much more efficient and is also
+ useful in writing interface code that will interact with foreign
+ threads.
+ 
+ If this pragma is used on a system where ‘TLS’ is not supported, then an
+ error message will be generated and the program will be rejected.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Time_Slice,  Next: Pragma Title,  Prev: Pragma Thread_Local_Storage,  Up: Implementation Defined Pragmas
+ 
+ 2.178 Pragma Time_Slice
+ =======================
+ 
+ Syntax:
+ 
+      pragma Time_Slice (static_duration_EXPRESSION);
+ 
+ For implementations of GNAT on operating systems where it is possible to
+ supply a time slice value, this pragma may be used for this purpose.  It
+ is ignored if it is used in a system that does not allow this control,
+ or if it appears in other than the main program unit.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Title,  Next: Pragma Type_Invariant,  Prev: Pragma Time_Slice,  Up: Implementation Defined Pragmas
+ 
+ 2.179 Pragma Title
+ ==================
+ 
+ Syntax:
+ 
+      pragma Title (TITLING_OPTION [, TITLING OPTION]);
+ 
+      TITLING_OPTION ::=
+        [Title    =>] STRING_LITERAL,
+      | [Subtitle =>] STRING_LITERAL
+ 
+ Syntax checked but otherwise ignored by GNAT. This is a listing control
+ pragma used in DEC Ada 83 implementations to provide a title and/or
+ subtitle for the program listing.  The program listing generated by GNAT
+ does not have titles or subtitles.
+ 
+ Unlike other pragmas, the full flexibility of named notation is allowed
+ for this pragma, i.e., the parameters may be given in any order if named
+ notation is used, and named and positional notation can be mixed
+ following the normal rules for procedure calls in Ada.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Type_Invariant,  Next: Pragma Type_Invariant_Class,  Prev: Pragma Title,  Up: Implementation Defined Pragmas
+ 
+ 2.180 Pragma Type_Invariant
+ ===========================
+ 
+ Syntax:
+ 
+      pragma Type_Invariant
+        ([Entity =>] type_LOCAL_NAME,
+         [Check  =>] EXPRESSION);
+ 
+ The ‘Type_Invariant’ pragma is intended to be an exact replacement for
+ the language-defined ‘Type_Invariant’ aspect, and shares its
+ restrictions and semantics.  It differs from the language defined
+ ‘Invariant’ pragma in that it does not permit a string parameter, and it
+ is controlled by the assertion identifier ‘Type_Invariant’ rather than
+ ‘Invariant’.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Type_Invariant_Class,  Next: Pragma Unchecked_Union,  Prev: Pragma Type_Invariant,  Up: Implementation Defined Pragmas
+ 
+ 2.181 Pragma Type_Invariant_Class
+ =================================
+ 
+ Syntax:
+ 
+      pragma Type_Invariant_Class
+        ([Entity =>] type_LOCAL_NAME,
+         [Check  =>] EXPRESSION);
+ 
+ The ‘Type_Invariant_Class’ pragma is intended to be an exact replacement
+ for the language-defined ‘Type_Invariant'Class’ aspect, and shares its
+ restrictions and semantics.
+ 
+ Note: This pragma is called ‘Type_Invariant_Class’ rather than
+ ‘Type_Invariant'Class’ because the latter would not be strictly
+ conforming to the allowed syntax for pragmas.  The motivation for
+ providing pragmas equivalent to the aspects is to allow a program to be
+ written using the pragmas, and then compiled if necessary using an Ada
+ compiler that does not recognize the pragmas or aspects, but is prepared
+ to ignore the pragmas.  The assertion policy that controls this pragma
+ is ‘Type_Invariant'Class’, not ‘Type_Invariant_Class’.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Unchecked_Union,  Next: Pragma Unevaluated_Use_Of_Old,  Prev: Pragma Type_Invariant_Class,  Up: Implementation Defined Pragmas
+ 
+ 2.182 Pragma Unchecked_Union
+ ============================
+ 
+ Syntax:
+ 
+      pragma Unchecked_Union (first_subtype_LOCAL_NAME);
+ 
+ This pragma is used to specify a representation of a record type that is
+ equivalent to a C union.  It was introduced as a GNAT implementation
+ defined pragma in the GNAT Ada 95 mode.  Ada 2005 includes an extended
+ version of this pragma, making it language defined, and GNAT fully
+ implements this extended version in all language modes (Ada 83, Ada 95,
+ and Ada 2005).  For full details, consult the Ada 2012 Reference Manual,
+ section B.3.3.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Unevaluated_Use_Of_Old,  Next: Pragma Unimplemented_Unit,  Prev: Pragma Unchecked_Union,  Up: Implementation Defined Pragmas
+ 
+ 2.183 Pragma Unevaluated_Use_Of_Old
+ ===================================
+ 
+ Syntax:
+ 
+      pragma Unevaluated_Use_Of_Old (Error | Warn | Allow);
+ 
+ This pragma controls the processing of attributes Old and Loop_Entry.
+ If either of these attributes is used in a potentially unevaluated
+ expression (e.g.  the then or else parts of an if expression), then
+ normally this usage is considered illegal if the prefix of the attribute
+ is other than an entity name.  The language requires this behavior for
+ Old, and GNAT copies the same rule for Loop_Entry.
+ 
+ The reason for this rule is that otherwise, we can have a situation
+ where we save the Old value, and this results in an exception, even
+ though we might not evaluate the attribute.  Consider this example:
+ 
+      package UnevalOld is
+         K : Character;
+         procedure U (A : String; C : Boolean)  -- ERROR
+           with Post => (if C then A(1)'Old = K else True);
+      end;
+ 
+ If procedure U is called with a string with a lower bound of 2, and C
+ false, then an exception would be raised trying to evaluate A(1) on
+ entry even though the value would not be actually used.
+ 
+ Although the rule guarantees against this possibility, it is sometimes
+ too restrictive.  For example if we know that the string has a lower
+ bound of 1, then we will never raise an exception.  The pragma
+ ‘Unevaluated_Use_Of_Old’ can be used to modify this behavior.  If the
+ argument is ‘Error’ then an error is given (this is the default RM
+ behavior).  If the argument is ‘Warn’ then the usage is allowed as legal
+ but with a warning that an exception might be raised.  If the argument
+ is ‘Allow’ then the usage is allowed as legal without generating a
+ warning.
+ 
+ This pragma may appear as a configuration pragma, or in a declarative
+ part or package specification.  In the latter case it applies to uses up
+ to the end of the corresponding statement sequence or sequence of
+ package declarations.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Unimplemented_Unit,  Next: Pragma Universal_Aliasing,  Prev: Pragma Unevaluated_Use_Of_Old,  Up: Implementation Defined Pragmas
+ 
+ 2.184 Pragma Unimplemented_Unit
+ ===============================
+ 
+ Syntax:
+ 
+      pragma Unimplemented_Unit;
+ 
+ If this pragma occurs in a unit that is processed by the compiler, GNAT
+ aborts with the message ‘xxx not implemented’, where ‘xxx’ is the name
+ of the current compilation unit.  This pragma is intended to allow the
+ compiler to handle unimplemented library units in a clean manner.
+ 
+ The abort only happens if code is being generated.  Thus you can use
+ specs of unimplemented packages in syntax or semantic checking mode.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Universal_Aliasing,  Next: Pragma Unmodified,  Prev: Pragma Unimplemented_Unit,  Up: Implementation Defined Pragmas
+ 
+ 2.185 Pragma Universal_Aliasing
+ ===============================
+ 
+ Syntax:
+ 
+      pragma Universal_Aliasing [([Entity =>] type_LOCAL_NAME)];
+ 
+ ‘type_LOCAL_NAME’ must refer to a type declaration in the current
+ declarative part.  The effect is to inhibit strict type-based aliasing
+ optimization for the given type.  In other words, the effect is as
+ though access types designating this type were subject to pragma
+ No_Strict_Aliasing.  For a detailed description of the strict aliasing
+ optimization, and the situations in which it must be suppressed, see the
+ section on ‘Optimization and Strict Aliasing’ in the ‘GNAT User’s
+ Guide’.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Unmodified,  Next: Pragma Unreferenced,  Prev: Pragma Universal_Aliasing,  Up: Implementation Defined Pragmas
+ 
+ 2.186 Pragma Unmodified
+ =======================
+ 
+ Syntax:
+ 
+      pragma Unmodified (LOCAL_NAME {, LOCAL_NAME});
+ 
+ This pragma signals that the assignable entities (variables, ‘out’
+ parameters, ‘in out’ parameters) whose names are listed are deliberately
+ not assigned in the current source unit.  This suppresses warnings about
+ the entities being referenced but not assigned, and in addition a
+ warning will be generated if one of these entities is in fact assigned
+ in the same unit as the pragma (or in the corresponding body, or one of
+ its subunits).
+ 
+ This is particularly useful for clearly signaling that a particular
+ parameter is not modified, even though the spec suggests that it might
+ be.
+ 
+ For the variable case, warnings are never given for unreferenced
+ variables whose name contains one of the substrings ‘DISCARD, DUMMY,
+ IGNORE, JUNK, UNUSE, TMP, TEMP’ in any casing.  Such names are typically
+ to be used in cases where such warnings are expected.  Thus it is never
+ necessary to use ‘pragma Unmodified’ for such variables, though it is
+ harmless to do so.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Unreferenced,  Next: Pragma Unreferenced_Objects,  Prev: Pragma Unmodified,  Up: Implementation Defined Pragmas
+ 
+ 2.187 Pragma Unreferenced
+ =========================
+ 
+ Syntax:
+ 
+      pragma Unreferenced (LOCAL_NAME {, LOCAL_NAME});
+      pragma Unreferenced (library_unit_NAME {, library_unit_NAME});
+ 
+ This pragma signals that the entities whose names are listed are
+ deliberately not referenced in the current source unit after the
+ occurrence of the pragma.  This suppresses warnings about the entities
+ being unreferenced, and in addition a warning will be generated if one
+ of these entities is in fact subsequently referenced in the same unit as
+ the pragma (or in the corresponding body, or one of its subunits).
+ 
+ This is particularly useful for clearly signaling that a particular
+ parameter is not referenced in some particular subprogram implementation
+ and that this is deliberate.  It can also be useful in the case of
+ objects declared only for their initialization or finalization side
+ effects.
+ 
+ If ‘LOCAL_NAME’ identifies more than one matching homonym in the current
+ scope, then the entity most recently declared is the one to which the
+ pragma applies.  Note that in the case of accept formals, the pragma
+ Unreferenced may appear immediately after the keyword ‘do’ which allows
+ the indication of whether or not accept formals are referenced or not to
+ be given individually for each accept statement.
+ 
+ The left hand side of an assignment does not count as a reference for
+ the purpose of this pragma.  Thus it is fine to assign to an entity for
+ which pragma Unreferenced is given.  However, use of an entity as an
+ actual for an out parameter does count as a reference unless warnings
+ for unread output parameters are enabled via ‘-gnatw.o’.
+ 
+ Note that if a warning is desired for all calls to a given subprogram,
+ 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 *note Pragma Obsolescent: ac.
+ 
+ The second form of pragma ‘Unreferenced’ is used within a context
+ clause.  In this case the arguments must be unit names of units
+ previously mentioned in ‘with’ clauses (similar to the usage of pragma
+ ‘Elaborate_All’).  The effect is to suppress warnings about unreferenced
+ units and unreferenced entities within these units.
+ 
+ For the variable case, warnings are never given for unreferenced
+ variables whose name contains one of the substrings ‘DISCARD, DUMMY,
+ IGNORE, JUNK, UNUSED’ in any casing.  Such names are typically to be
+ used in cases where such warnings are expected.  Thus it is never
+ necessary to use ‘pragma Unreferenced’ for such variables, though it is
+ harmless to do so.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Unreferenced_Objects,  Next: Pragma Unreserve_All_Interrupts,  Prev: Pragma Unreferenced,  Up: Implementation Defined Pragmas
+ 
+ 2.188 Pragma Unreferenced_Objects
+ =================================
+ 
+ Syntax:
+ 
+      pragma Unreferenced_Objects (local_subtype_NAME {, local_subtype_NAME});
+ 
+ This pragma signals that for the types or subtypes whose names are
+ listed, objects which are declared with one of these types or subtypes
+ may not be referenced, and if no references appear, no warnings are
+ given.
+ 
+ This is particularly useful for objects which are declared solely for
+ their initialization and finalization effect.  Such variables are
+ sometimes referred to as RAII variables (Resource Acquisition Is
+ Initialization).  Using this pragma on the relevant type (most typically
+ a limited controlled type), the compiler will automatically suppress
+ unwanted warnings about these variables not being referenced.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Unreserve_All_Interrupts,  Next: Pragma Unsuppress,  Prev: Pragma Unreferenced_Objects,  Up: Implementation Defined Pragmas
+ 
+ 2.189 Pragma Unreserve_All_Interrupts
+ =====================================
+ 
+ Syntax:
+ 
+      pragma Unreserve_All_Interrupts;
+ 
+ Normally certain interrupts are reserved to the implementation.  Any
+ attempt to attach an interrupt causes Program_Error to be raised, as
+ described in RM C.3.2(22).  A typical example is the ‘SIGINT’ interrupt
+ used in many systems for a ‘Ctrl-C’ interrupt.  Normally this interrupt
+ is reserved to the implementation, so that ‘Ctrl-C’ can be used to
+ interrupt execution.
+ 
+ If the pragma ‘Unreserve_All_Interrupts’ appears anywhere in any unit in
+ a program, then all such interrupts are unreserved.  This allows the
+ program to handle these interrupts, but disables their standard
+ functions.  For example, if this pragma is used, then pressing ‘Ctrl-C’
+ will not automatically interrupt execution.  However, a program can then
+ handle the ‘SIGINT’ interrupt as it chooses.
+ 
+ For a full list of the interrupts handled in a specific implementation,
+ see the source code for the spec of ‘Ada.Interrupts.Names’ in file
+ ‘a-intnam.ads’.  This is a target dependent file that contains the list
+ of interrupts recognized for a given target.  The documentation in this
+ file also specifies what interrupts are affected by the use of the
+ ‘Unreserve_All_Interrupts’ pragma.
+ 
+ For a more general facility for controlling what interrupts can be
+ handled, see pragma ‘Interrupt_State’, which subsumes the functionality
+ of the ‘Unreserve_All_Interrupts’ pragma.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Unsuppress,  Next: Pragma Unused,  Prev: Pragma Unreserve_All_Interrupts,  Up: Implementation Defined Pragmas
+ 
+ 2.190 Pragma Unsuppress
+ =======================
+ 
+ Syntax:
+ 
+      pragma Unsuppress (IDENTIFIER [, [On =>] NAME]);
+ 
+ This pragma undoes the effect of a previous pragma ‘Suppress’.  If there
+ is no corresponding pragma ‘Suppress’ in effect, it has no effect.  The
+ range of the effect is the same as for pragma ‘Suppress’.  The meaning
+ of the arguments is identical to that used in pragma ‘Suppress’.
+ 
+ One important application is to ensure that checks are on in cases where
+ code depends on the checks for its correct functioning, so that the code
+ will compile correctly even if the compiler switches are set to suppress
+ checks.  For example, in a program that depends on external names of
+ tagged types and wants to ensure that the duplicated tag check occurs
+ even if all run-time checks are suppressed by a compiler switch, the
+ following configuration pragma will ensure this test is not suppressed:
+ 
+      pragma Unsuppress (Duplicated_Tag_Check);
+ 
+ This pragma is standard in Ada 2005.  It is available in all earlier
+ versions of Ada as an implementation-defined pragma.
+ 
+ Note that in addition to the checks defined in the Ada RM, GNAT
+ recognizes a number of implementation-defined check names.  See the
+ description of pragma ‘Suppress’ for full details.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Unused,  Next: Pragma Use_VADS_Size,  Prev: Pragma Unsuppress,  Up: Implementation Defined Pragmas
+ 
+ 2.191 Pragma Unused
+ ===================
+ 
+ Syntax:
+ 
+      pragma Unused (LOCAL_NAME {, LOCAL_NAME});
+ 
+ This pragma signals that the assignable entities (variables, ‘out’
+ parameters, and ‘in out’ parameters) whose names are listed deliberately
+ do not get assigned or referenced in the current source unit after the
+ occurrence of the pragma in the current source unit.  This suppresses
+ warnings about the entities that are unreferenced and/or not assigned,
+ and, in addition, a warning will be generated if one of these entities
+ gets assigned or subsequently referenced in the same unit as the pragma
+ (in the corresponding body or one of its subunits).
+ 
+ This is particularly useful for clearly signaling that a particular
+ parameter is not modified or referenced, even though the spec suggests
+ that it might be.
+ 
+ For the variable case, warnings are never given for unreferenced
+ variables whose name contains one of the substrings ‘DISCARD, DUMMY,
+ IGNORE, JUNK, UNUSED’ in any casing.  Such names are typically to be
+ used in cases where such warnings are expected.  Thus it is never
+ necessary to use ‘pragma Unused’ for such variables, though it is
+ harmless to do so.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Use_VADS_Size,  Next: Pragma Validity_Checks,  Prev: Pragma Unused,  Up: Implementation Defined Pragmas
+ 
+ 2.192 Pragma Use_VADS_Size
+ ==========================
+ 
+ Syntax:
+ 
+      pragma Use_VADS_Size;
+ 
+ This is a configuration pragma.  In a unit to which it applies, any use
+ of the ‘Size attribute is automatically interpreted as a use of the
+ ‘VADS_Size attribute.  Note that this may result in incorrect semantic
+ processing of valid Ada 95 or Ada 2005 programs.  This is intended to
+ aid in the handling of existing code which depends on the interpretation
+ of Size as implemented in the VADS compiler.  See description of the
+ VADS_Size attribute for further details.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Validity_Checks,  Next: Pragma Volatile,  Prev: Pragma Use_VADS_Size,  Up: Implementation Defined Pragmas
+ 
+ 2.193 Pragma Validity_Checks
+ ============================
+ 
+ Syntax:
+ 
+      pragma Validity_Checks (string_LITERAL | ALL_CHECKS | On | Off);
+ 
+ This pragma is used in conjunction with compiler switches to control the
+ built-in validity checking provided by GNAT. The compiler switches, if
+ set provide an initial setting for the switches, and this pragma may be
+ used to modify these settings, or the settings may be provided entirely
+ by the use of the pragma.  This pragma can be used anywhere that a
+ pragma is legal, including use as a configuration pragma (including use
+ in the ‘gnat.adc’ file).
+ 
+ The form with a string literal specifies which validity options are to
+ be activated.  The validity checks are first set to include only the
+ default reference manual settings, and then a string of letters in the
+ string specifies the exact set of options required.  The form of this
+ string is exactly as described for the ‘-gnatVx’ compiler switch (see
+ the GNAT User’s Guide for details).  For example the following two
+ methods can be used to enable validity checking for mode ‘in’ and ‘in
+ out’ subprogram parameters:
+ 
+    *      pragma Validity_Checks ("im");
+ 
+    *      $ gcc -c -gnatVim ...
+ 
+ The form ALL_CHECKS activates all standard checks (its use is equivalent
+ to the use of the ‘gnatVa’ switch).
+ 
+ The forms with ‘Off’ and ‘On’ can be used to temporarily disable
+ validity checks as shown in the following example:
+ 
+      pragma Validity_Checks ("c"); -- validity checks for copies
+      pragma Validity_Checks (Off); -- turn off validity checks
+      A := B;                       -- B will not be validity checked
+      pragma Validity_Checks (On);  -- turn validity checks back on
+      A := C;                       -- C will be validity checked
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Volatile,  Next: Pragma Volatile_Full_Access,  Prev: Pragma Validity_Checks,  Up: Implementation Defined Pragmas
+ 
+ 2.194 Pragma Volatile
+ =====================
+ 
+ Syntax:
+ 
+      pragma Volatile (LOCAL_NAME);
+ 
+ This pragma is defined by the Ada Reference Manual, and the GNAT
+ implementation is fully conformant with this definition.  The reason it
+ is mentioned in this section is that a pragma of the same name was
+ supplied in some Ada 83 compilers, including DEC Ada 83.  The Ada 95 /
+ Ada 2005 implementation of pragma Volatile is upwards compatible with
+ the implementation in DEC Ada 83.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Volatile_Full_Access,  Next: Pragma Volatile_Function,  Prev: Pragma Volatile,  Up: Implementation Defined Pragmas
+ 
+ 2.195 Pragma Volatile_Full_Access
+ =================================
+ 
+ Syntax:
+ 
+      pragma Volatile_Full_Access (LOCAL_NAME);
+ 
+ This is similar in effect to pragma Volatile, except that any reference
+ to the object is guaranteed to be done only with instructions that read
+ or write all the bits of the object.  Furthermore, if the object is of a
+ composite type, then any reference to a subcomponent of the object is
+ guaranteed to read and/or write all the bits of the object.
+ 
+ The intention is that this be suitable for use with memory-mapped I/O
+ devices on some machines.  Note that there are two important respects in
+ which this is different from ‘pragma Atomic’.  First a reference to a
+ ‘Volatile_Full_Access’ object is not a sequential action in the RM 9.10
+ sense and, therefore, does not create a synchronization point.  Second,
+ in the case of ‘pragma Atomic’, there is no guarantee that all the bits
+ will be accessed if the reference is not to the whole object; the
+ compiler is allowed (and generally will) access only part of the object
+ in this case.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Volatile_Function,  Next: Pragma Warning_As_Error,  Prev: Pragma Volatile_Full_Access,  Up: Implementation Defined Pragmas
+ 
+ 2.196 Pragma Volatile_Function
+ ==============================
+ 
+ Syntax:
+ 
+      pragma Volatile_Function [ (static_boolean_EXPRESSION) ];
+ 
+ For the semantics of this pragma, see the entry for aspect
+ ‘Volatile_Function’ in the SPARK 2014 Reference Manual, section 7.1.2.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Warning_As_Error,  Next: Pragma Warnings,  Prev: Pragma Volatile_Function,  Up: Implementation Defined Pragmas
+ 
+ 2.197 Pragma Warning_As_Error
+ =============================
+ 
+ Syntax:
+ 
+      pragma Warning_As_Error (static_string_EXPRESSION);
+ 
+ This configuration pragma allows the programmer to specify a set of
+ warnings that will be treated as errors.  Any warning that matches the
+ pattern given by the pragma argument will be treated as an error.  This
+ gives more precise control than -gnatwe, which treats warnings as
+ errors.
+ 
+ This pragma can apply to regular warnings (messages enabled by -gnatw)
+ and to style warnings (messages that start with “(style)”, enabled by
+ -gnaty).
+ 
+ The pattern may contain asterisks, which match zero or more characters
+ in the message.  For example, you can use ‘pragma Warning_As_Error
+ ("bits of*unused")’ to treat the warning message ‘warning: 960 bits of
+ "a" unused’ as an error.  All characters other than asterisk are treated
+ as literal characters in the match.  The match is case insensitive; for
+ example XYZ matches xyz.
+ 
+ Note that the pattern matches if it occurs anywhere within the warning
+ message string (it is not necessary to put an asterisk at the start and
+ the end of the message, since this is implied).
+ 
+ Another possibility for the static_string_EXPRESSION which works whether
+ or not error tags are enabled (‘-gnatw.d’) is to use a single ‘-gnatw’
+ tag string, enclosed in brackets, as shown in the example below, to
+ treat one category of warnings as errors.  Note that if you want to
+ treat multiple categories of warnings as errors, you can use multiple
+ pragma Warning_As_Error.
+ 
+ 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 *note Pragma
+ Warnings: 11a.  By using a single full ‘-Wxxx’ switch in the pragma,
+ such warnings can also be treated as errors.
+ 
+ The pragma can appear either in a global configuration pragma file (e.g.
+ ‘gnat.adc’), or at the start of a file.  Given a global configuration
+ pragma file containing:
+ 
+      pragma Warning_As_Error ("[-gnatwj]");
+ 
+ which will treat all obsolescent feature warnings as errors, the
+ following program compiles as shown (compile options here are ‘-gnatwa.d
+ -gnatl -gnatj55’).
+ 
+          1. pragma Warning_As_Error ("*never assigned*");
+          2. function Warnerr return String is
+          3.    X : Integer;
+                |
+             >>> error: variable "X" is never read and
+                 never assigned [-gnatwv] [warning-as-error]
+ 
+          4.    Y : Integer;
+                |
+             >>> warning: variable "Y" is assigned but
+                 never read [-gnatwu]
+ 
+          5. begin
+          6.    Y := 0;
+          7.    return %ABC%;
+                       |
+             >>> error: use of "%" is an obsolescent
+                 feature (RM J.2(4)), use """ instead
+                 [-gnatwj] [warning-as-error]
+ 
+          8. end;
+ 
+      8 lines: No errors, 3 warnings (2 treated as errors)
+ 
+ Note that this pragma does not affect the set of warnings issued in any
+ way, it merely changes the effect of a matching warning if one is
+ produced as a result of other warnings options.  As shown in this
+ example, if the pragma results in a warning being treated as an error,
+ the tag is changed from “warning:” to “error:” and the string
+ “[warning-as-error]” is appended to the end of the message.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Warnings,  Next: Pragma Weak_External,  Prev: Pragma Warning_As_Error,  Up: Implementation Defined Pragmas
+ 
+ 2.198 Pragma Warnings
+ =====================
+ 
+ Syntax:
+ 
+      pragma Warnings ([TOOL_NAME,] DETAILS [, REASON]);
+ 
+      DETAILS ::= On | Off
+      DETAILS ::= On | Off, local_NAME
+      DETAILS ::= static_string_EXPRESSION
+      DETAILS ::= On | Off, static_string_EXPRESSION
+ 
+      TOOL_NAME ::= GNAT | GNATprove
+ 
+      REASON ::= Reason => STRING_LITERAL {& STRING_LITERAL}
+ 
+ Note: in Ada 83 mode, a string literal may be used in place of a static
+ string expression (which does not exist in Ada 83).
+ 
+ Note if the second argument of ‘DETAILS’ is a ‘local_NAME’ then the
+ second form is always understood.  If the intention is to use the fourth
+ form, then you can write ‘NAME & ""’ to force the interpretation as a
+ ‘static_string_EXPRESSION’.
+ 
+ Note: if the first argument is a valid ‘TOOL_NAME’, it will be
+ interpreted that way.  The use of the ‘TOOL_NAME’ argument is relevant
+ only to users of SPARK and GNATprove, see last part of this section for
+ details.
+ 
+ Normally warnings are enabled, with the output being controlled by the
+ command line switch.  Warnings (‘Off’) turns off generation of warnings
+ until a Warnings (‘On’) is encountered or the end of the current unit.
+ If generation of warnings is turned off using this pragma, then some or
+ all of the warning messages are suppressed, regardless of the setting of
+ the command line switches.
+ 
+ The ‘Reason’ parameter may optionally appear as the last argument in any
+ of the forms of this pragma.  It is intended purely for the purposes of
+ documenting the reason for the ‘Warnings’ pragma.  The compiler will
+ check that the argument is a static string but otherwise ignore this
+ argument.  Other tools may provide specialized processing for this
+ string.
+ 
+ The form with a single argument (or two arguments if Reason present),
+ where the first argument is ‘ON’ or ‘OFF’ may be used as a configuration
+ pragma.
+ 
+ If the ‘LOCAL_NAME’ parameter is present, warnings are suppressed for
+ the specified entity.  This suppression is effective from the point
+ where it occurs till the end of the extended scope of the variable
+ (similar to the scope of ‘Suppress’).  This form cannot be used as a
+ configuration pragma.
+ 
+ In the case where the first argument is other than ‘ON’ or ‘OFF’, the
+ third form with a single static_string_EXPRESSION argument (and possible
+ reason) provides more precise control over which warnings are active.
+ The string is a list of letters specifying which warnings are to be
+ activated and which deactivated.  The code for these letters is the same
+ as the string used in the command line switch controlling warnings.  For
+ a brief summary, use the gnatmake command with no arguments, which will
+ generate usage information containing the list of warnings switches
+ supported.  For full details see the section on ‘Warning Message
+ Control’ in the ‘GNAT User’s Guide’.  This form can also be used as a
+ configuration pragma.
+ 
+ The warnings controlled by the ‘-gnatw’ switch are generated by the
+ front end of the compiler.  The GCC back end can provide additional
+ warnings and they are controlled by the ‘-W’ switch.  Such warnings can
+ be identified by the appearance of a string of the form ‘[-W{xxx}]’ in
+ the message which designates the ‘-W`xxx'’ switch that controls the
+ message.  The form with a single ‘static_string_EXPRESSION’ argument
+ also works for these warnings, but the string must be a single full
+ ‘-W`xxx'’ switch in this case.  The above reference lists a few examples
+ of these additional warnings.
+ 
+ The specified warnings will be in effect until the end of the program or
+ another pragma ‘Warnings’ is encountered.  The effect of the pragma is
+ cumulative.  Initially the set of warnings is the standard default set
+ as possibly modified by compiler switches.  Then each pragma Warning
+ modifies this set of warnings as specified.  This form of the pragma may
+ also be used as a configuration pragma.
+ 
+ The fourth form, with an ‘On|Off’ parameter and a string, is used to
+ control individual messages, based on their text.  The string argument
+ is a pattern that is used to match against the text of individual
+ warning messages (not including the initial “warning: ” tag).
+ 
+ The pattern may contain asterisks, which match zero or more characters
+ in the message.  For example, you can use ‘pragma Warnings (Off, "bits
+ of*unused")’ to suppress the warning message ‘warning: 960 bits of "a"
+ unused’.  No other regular expression notations are permitted.  All
+ characters other than asterisk in these three specific cases are treated
+ as literal characters in the match.  The match is case insensitive, for
+ example XYZ matches xyz.
+ 
+ Note that the pattern matches if it occurs anywhere within the warning
+ message string (it is not necessary to put an asterisk at the start and
+ the end of the message, since this is implied).
+ 
+ The above use of patterns to match the message applies only to warning
+ messages generated by the front end.  This form of the pragma with a
+ string argument can also be used to control warnings provided by the
+ back end and mentioned above.  By using a single full ‘-W`xxx'’ switch
+ in the pragma, such warnings can be turned on and off.
+ 
+ There are two ways to use the pragma in this form.  The OFF form can be
+ used as a configuration pragma.  The effect is to suppress all warnings
+ (if any) that match the pattern string throughout the compilation (or
+ match the -W switch in the back end case).
+ 
+ The second usage is to suppress a warning locally, and in this case, two
+ pragmas must appear in sequence:
+ 
+      pragma Warnings (Off, Pattern);
+      ... code where given warning is to be suppressed
+      pragma Warnings (On, Pattern);
+ 
+ In this usage, the pattern string must match in the Off and On pragmas,
+ and (if ‘-gnatw.w’ is given) at least one matching warning must be
+ suppressed.
+ 
+ Note: if the ON form is not found, then the effect of the OFF form
+ extends until the end of the file (pragma Warnings is purely textual, so
+ its effect does not stop at the end of the enclosing scope).
+ 
+ Note: to write a string that will match any warning, use the string
+ ‘"***"’.  It will not work to use a single asterisk or two asterisks
+ since this looks like an operator name.  This form with three asterisks
+ is similar in effect to specifying ‘pragma Warnings (Off)’ except (if
+ ‘-gnatw.w’ is given) that a matching ‘pragma Warnings (On, "***")’ will
+ be required.  This can be helpful in avoiding forgetting to turn
+ warnings back on.
+ 
+ Note: the debug flag ‘-gnatd.i’ can be used to cause the compiler to
+ entirely ignore all WARNINGS pragmas.  This can be useful in checking
+ whether obsolete pragmas in existing programs are hiding real problems.
+ 
+ Note: pragma Warnings does not affect the processing of style messages.
+ See separate entry for pragma Style_Checks for control of style
+ messages.
+ 
+ Users of the formal verification tool GNATprove for the SPARK subset of
+ Ada may use the version of the pragma with a ‘TOOL_NAME’ parameter.
+ 
+ If present, ‘TOOL_NAME’ is the name of a tool, currently either ‘GNAT’
+ for the compiler or ‘GNATprove’ for the formal verification tool.  A
+ given tool only takes into account pragma Warnings that do not specify a
+ tool name, or that specify the matching tool name.  This makes it
+ possible to disable warnings selectively for each tool, and as a
+ consequence to detect useless pragma Warnings with switch ‘-gnatw.w’.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Weak_External,  Next: Pragma Wide_Character_Encoding,  Prev: Pragma Warnings,  Up: Implementation Defined Pragmas
+ 
+ 2.199 Pragma Weak_External
+ ==========================
+ 
+ Syntax:
+ 
+      pragma Weak_External ([Entity =>] LOCAL_NAME);
+ 
+ ‘LOCAL_NAME’ must refer to an object that is declared at the library
+ level.  This pragma specifies that the given entity should be marked as
+ a weak symbol for the linker.  It is equivalent to
+ ‘__attribute__((weak))’ in GNU C and causes ‘LOCAL_NAME’ to be emitted
+ as a weak symbol instead of a regular symbol, that is to say a symbol
+ that does not have to be resolved by the linker if used in conjunction
+ with a pragma Import.
+ 
+ When a weak symbol is not resolved by the linker, its address is set to
+ zero.  This is useful in writing interfaces to external modules that may
+ or may not be linked in the final executable, for example depending on
+ configuration settings.
+ 
+ If a program references at run time an entity to which this pragma has
+ been applied, and the corresponding symbol was not resolved at link
+ time, then the execution of the program is erroneous.  It is not
+ erroneous to take the Address of such an entity, for example to guard
+ potential references, as shown in the example below.
+ 
+ Some file formats do not support weak symbols so not all target machines
+ support this pragma.
+ 
+      --  Example of the use of pragma Weak_External
+ 
+      package External_Module is
+        key : Integer;
+        pragma Import (C, key);
+        pragma Weak_External (key);
+        function Present return boolean;
+      end External_Module;
+ 
+      with System; use System;
+      package body External_Module is
+        function Present return boolean is
+        begin
+          return key'Address /= System.Null_Address;
+        end Present;
+      end External_Module;
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Wide_Character_Encoding,  Prev: Pragma Weak_External,  Up: Implementation Defined Pragmas
+ 
+ 2.200 Pragma Wide_Character_Encoding
+ ====================================
+ 
+ Syntax:
+ 
+      pragma Wide_Character_Encoding (IDENTIFIER | CHARACTER_LITERAL);
+ 
+ This pragma specifies the wide character encoding to be used in program
+ source text appearing subsequently.  It is a configuration pragma, but
+ may also be used at any point that a pragma is allowed, and it is
+ permissible to have more than one such pragma in a file, allowing
+ multiple encodings to appear within the same file.
+ 
+ However, note that the pragma cannot immediately precede the relevant
+ wide character, because then the previous encoding will still be in
+ effect, causing “illegal character” errors.
+ 
+ The argument can be an identifier or a character literal.  In the
+ identifier case, it is one of ‘HEX’, ‘UPPER’, ‘SHIFT_JIS’, ‘EUC’,
+ ‘UTF8’, or ‘BRACKETS’.  In the character literal case it is
+ correspondingly one of the characters ‘h’, ‘u’, ‘s’, ‘e’, ‘8’, or ‘b’.
+ 
+ Note that when the pragma is used within a file, it affects only the
+ encoding within that file, and does not affect withed units, specs, or
+ subunits.
+ 
+ 
+ File: gnat_rm.info,  Node: Implementation Defined Aspects,  Next: Implementation Defined Attributes,  Prev: Implementation Defined Pragmas,  Up: Top
+ 
+ 3 Implementation Defined Aspects
+ ********************************
+ 
+ Ada defines (throughout the Ada 2012 reference manual, summarized in
+ Annex K) a set of aspects that can be specified for certain entities.
+ These language defined aspects are implemented in GNAT in Ada 2012 mode
+ and work as described in the Ada 2012 Reference Manual.
+ 
+ In addition, Ada 2012 allows implementations to define additional
+ aspects whose meaning is defined by the implementation.  GNAT provides a
+ number of these implementation-defined aspects which can be used to
+ extend and enhance the functionality of the compiler.  This section of
+ the GNAT reference manual describes these additional aspects.
+ 
+ Note that any program using these aspects may not be portable to other
+ compilers (although GNAT implements this set of aspects on all
+ platforms).  Therefore if portability to other compilers is an important
+ consideration, you should minimize the use of these aspects.
+ 
+ Note that for many of these aspects, the effect is essentially similar
+ to the use of a pragma or attribute specification with the same name
+ applied to the entity.  For example, if we write:
+ 
+      type R is range 1 .. 100
+        with Value_Size => 10;
+ 
+ then the effect is the same as:
+ 
+      type R is range 1 .. 100;
+      for R'Value_Size use 10;
+ 
+ and if we write:
+ 
+      type R is new Integer
+        with Shared => True;
+ 
+ then the effect is the same as:
+ 
+      type R is new Integer;
+      pragma Shared (R);
+ 
+ In the documentation below, such cases are simply marked as being
+ boolean aspects equivalent to the corresponding pragma or attribute
+ definition clause.
+ 
+ * Menu:
+ 
+ * Aspect Abstract_State::
+ * Aspect Annotate::
+ * Aspect Async_Readers::
+ * Aspect Async_Writers::
+ * Aspect Constant_After_Elaboration::
+ * Aspect Contract_Cases::
+ * Aspect Depends::
+ * Aspect Default_Initial_Condition::
+ * Aspect Dimension::
+ * Aspect Dimension_System::
+ * Aspect Disable_Controlled::
+ * Aspect Effective_Reads::
+ * Aspect Effective_Writes::
+ * Aspect Extensions_Visible::
+ * Aspect Favor_Top_Level::
+ * Aspect Ghost::
+ * Aspect Global::
+ * Aspect Initial_Condition::
+ * Aspect Initializes::
+ * Aspect Inline_Always::
+ * Aspect Invariant::
+ * Aspect Invariant’Class::
+ * Aspect Iterable::
+ * Aspect Linker_Section::
+ * Aspect Lock_Free::
+ * Aspect Max_Queue_Length::
+ * Aspect No_Caching::
+ * Aspect No_Elaboration_Code_All::
+ * Aspect No_Inline::
+ * Aspect No_Tagged_Streams::
+ * Aspect No_Task_Parts::
+ * Aspect Object_Size::
+ * Aspect Obsolescent::
+ * Aspect Part_Of::
+ * Aspect Persistent_BSS::
+ * Aspect Predicate::
+ * Aspect Pure_Function::
+ * Aspect Refined_Depends::
+ * Aspect Refined_Global::
+ * Aspect Refined_Post::
+ * Aspect Refined_State::
+ * Aspect Relaxed_Initialization::
+ * Aspect Remote_Access_Type::
+ * Aspect Secondary_Stack_Size::
+ * Aspect Scalar_Storage_Order::
+ * Aspect Shared::
+ * Aspect Simple_Storage_Pool::
+ * Aspect Simple_Storage_Pool_Type::
+ * Aspect SPARK_Mode::
+ * Aspect Suppress_Debug_Info::
+ * Aspect Suppress_Initialization::
+ * Aspect Test_Case::
+ * Aspect Thread_Local_Storage::
+ * Aspect Universal_Aliasing::
+ * Aspect Unmodified::
+ * Aspect Unreferenced::
+ * Aspect Unreferenced_Objects::
+ * Aspect Value_Size::
+ * Aspect Volatile_Full_Access::
+ * Aspect Volatile_Function::
+ * Aspect Warnings::
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Abstract_State,  Next: Aspect Annotate,  Up: Implementation Defined Aspects
+ 
+ 3.1 Aspect Abstract_State
+ =========================
+ 
+ This aspect is equivalent to *note pragma Abstract_State: 1e.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Annotate,  Next: Aspect Async_Readers,  Prev: Aspect Abstract_State,  Up: Implementation Defined Aspects
+ 
+ 3.2 Aspect Annotate
+ ===================
+ 
+ There are three forms of this aspect (where ID is an identifier, and ARG
+ is a general expression), corresponding to *note pragma Annotate: 29.
+ 
+ ‘Annotate => ID’
+ 
+      Equivalent to ‘pragma Annotate (ID, Entity => Name);’
+ 
+ ‘Annotate => (ID)’
+ 
+      Equivalent to ‘pragma Annotate (ID, Entity => Name);’
+ 
+ ‘Annotate => (ID ,ID {, ARG})’
+ 
+      Equivalent to ‘pragma Annotate (ID, ID {, ARG}, Entity => Name);’
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Async_Readers,  Next: Aspect Async_Writers,  Prev: Aspect Annotate,  Up: Implementation Defined Aspects
+ 
+ 3.3 Aspect Async_Readers
+ ========================
+ 
+ This boolean aspect is equivalent to *note pragma Async_Readers: 30.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Async_Writers,  Next: Aspect Constant_After_Elaboration,  Prev: Aspect Async_Readers,  Up: Implementation Defined Aspects
+ 
+ 3.4 Aspect Async_Writers
+ ========================
+ 
+ This boolean aspect is equivalent to *note pragma Async_Writers: 32.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Constant_After_Elaboration,  Next: Aspect Contract_Cases,  Prev: Aspect Async_Writers,  Up: Implementation Defined Aspects
+ 
+ 3.5 Aspect Constant_After_Elaboration
+ =====================================
+ 
+ This aspect is equivalent to *note pragma Constant_After_Elaboration:
+ 42.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Contract_Cases,  Next: Aspect Depends,  Prev: Aspect Constant_After_Elaboration,  Up: Implementation Defined Aspects
+ 
+ 3.6 Aspect Contract_Cases
+ =========================
+ 
+ This aspect is equivalent to *note pragma Contract_Cases: 44, the
+ sequence of clauses being enclosed in parentheses so that syntactically
+ it is an aggregate.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Depends,  Next: Aspect Default_Initial_Condition,  Prev: Aspect Contract_Cases,  Up: Implementation Defined Aspects
+ 
+ 3.7 Aspect Depends
+ ==================
+ 
+ This aspect is equivalent to *note pragma Depends: 54.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Default_Initial_Condition,  Next: Aspect Dimension,  Prev: Aspect Depends,  Up: Implementation Defined Aspects
+ 
+ 3.8 Aspect Default_Initial_Condition
+ ====================================
+ 
+ This aspect is equivalent to *note pragma Default_Initial_Condition: 50.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Dimension,  Next: Aspect Dimension_System,  Prev: Aspect Default_Initial_Condition,  Up: Implementation Defined Aspects
+ 
+ 3.9 Aspect Dimension
+ ====================
+ 
+ The ‘Dimension’ aspect is used to specify the dimensions of a given
+ subtype of a dimensioned numeric type.  The aspect also specifies a
+ symbol used when doing formatted output of dimensioned quantities.  The
+ syntax is:
+ 
+      with Dimension =>
+        ([Symbol =>] SYMBOL, DIMENSION_VALUE {, DIMENSION_Value})
+ 
+      SYMBOL ::= STRING_LITERAL | CHARACTER_LITERAL
+ 
+      DIMENSION_VALUE ::=
+        RATIONAL
+      | others               => RATIONAL
+      | DISCRETE_CHOICE_LIST => RATIONAL
+ 
+      RATIONAL ::= [-] NUMERIC_LITERAL [/ NUMERIC_LITERAL]
+ 
+ This aspect can only be applied to a subtype whose parent type has a
+ ‘Dimension_System’ aspect.  The aspect must specify values for all
+ dimensions of the system.  The rational values are the powers of the
+ corresponding dimensions that are used by the compiler to verify that
+ physical (numeric) computations are dimensionally consistent.  For
+ example, the computation of a force must result in dimensions (L => 1, M
+ => 1, T => -2).  For further examples of the usage of this aspect, see
+ package ‘System.Dim.Mks’.  Note that when the dimensioned type is an
+ integer type, then any dimension value must be an integer literal.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Dimension_System,  Next: Aspect Disable_Controlled,  Prev: Aspect Dimension,  Up: Implementation Defined Aspects
+ 
+ 3.10 Aspect Dimension_System
+ ============================
+ 
+ The ‘Dimension_System’ aspect is used to define a system of dimensions
+ that will be used in subsequent subtype declarations with ‘Dimension’
+ aspects that reference this system.  The syntax is:
+ 
+      with Dimension_System => (DIMENSION {, DIMENSION});
+ 
+      DIMENSION ::= ([Unit_Name   =>] IDENTIFIER,
+                     [Unit_Symbol =>] SYMBOL,
+                     [Dim_Symbol  =>] SYMBOL)
+ 
+      SYMBOL ::= CHARACTER_LITERAL | STRING_LITERAL
+ 
+ This aspect is applied to a type, which must be a numeric derived type
+ (typically a floating-point type), that will represent values within the
+ dimension system.  Each ‘DIMENSION’ corresponds to one particular
+ dimension.  A maximum of 7 dimensions may be specified.  ‘Unit_Name’ is
+ the name of the dimension (for example ‘Meter’).  ‘Unit_Symbol’ is the
+ shorthand used for quantities of this dimension (for example ‘m’ for
+ ‘Meter’).  ‘Dim_Symbol’ gives the identification within the dimension
+ system (typically this is a single letter, e.g.  ‘L’ standing for length
+ for unit name ‘Meter’).  The ‘Unit_Symbol’ is used in formatted output
+ of dimensioned quantities.  The ‘Dim_Symbol’ is used in error messages
+ when numeric operations have inconsistent dimensions.
+ 
+ GNAT provides the standard definition of the International MKS system in
+ the run-time package ‘System.Dim.Mks’.  You can easily define similar
+ packages for cgs units or British units, and define conversion factors
+ between values in different systems.  The MKS system is characterized by
+ the following aspect:
+ 
+      type Mks_Type is new Long_Long_Float with
+        Dimension_System => (
+          (Unit_Name => Meter,    Unit_Symbol => 'm',   Dim_Symbol => 'L'),
+          (Unit_Name => Kilogram, Unit_Symbol => "kg",  Dim_Symbol => 'M'),
+          (Unit_Name => Second,   Unit_Symbol => 's',   Dim_Symbol => 'T'),
+          (Unit_Name => Ampere,   Unit_Symbol => 'A',   Dim_Symbol => 'I'),
+          (Unit_Name => Kelvin,   Unit_Symbol => 'K',   Dim_Symbol => '@'),
+          (Unit_Name => Mole,     Unit_Symbol => "mol", Dim_Symbol => 'N'),
+          (Unit_Name => Candela,  Unit_Symbol => "cd",  Dim_Symbol => 'J'));
+ 
+ Note that in the above type definition, we use the ‘at’ symbol (‘@’) to
+ represent a theta character (avoiding the use of extended Latin-1
+ characters in this context).
+ 
+ See section ‘Performing Dimensionality Analysis in GNAT’ in the GNAT
+ Users Guide for detailed examples of use of the dimension system.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Disable_Controlled,  Next: Aspect Effective_Reads,  Prev: Aspect Dimension_System,  Up: Implementation Defined Aspects
+ 
+ 3.11 Aspect Disable_Controlled
+ ==============================
+ 
+ The aspect ‘Disable_Controlled’ is defined for controlled record types.
+ If active, this aspect causes suppression of all related calls to
+ ‘Initialize’, ‘Adjust’, and ‘Finalize’.  The intended use is for
+ conditional compilation, where for example you might want a record to be
+ controlled or not depending on whether some run-time check is enabled or
+ suppressed.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Effective_Reads,  Next: Aspect Effective_Writes,  Prev: Aspect Disable_Controlled,  Up: Implementation Defined Aspects
+ 
+ 3.12 Aspect Effective_Reads
+ ===========================
+ 
+ This aspect is equivalent to *note pragma Effective_Reads: 59.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Effective_Writes,  Next: Aspect Extensions_Visible,  Prev: Aspect Effective_Reads,  Up: Implementation Defined Aspects
+ 
+ 3.13 Aspect Effective_Writes
+ ============================
+ 
+ This aspect is equivalent to *note pragma Effective_Writes: 5b.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Extensions_Visible,  Next: Aspect Favor_Top_Level,  Prev: Aspect Effective_Writes,  Up: Implementation Defined Aspects
+ 
+ 3.14 Aspect Extensions_Visible
+ ==============================
+ 
+ This aspect is equivalent to *note pragma Extensions_Visible: 66.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Favor_Top_Level,  Next: Aspect Ghost,  Prev: Aspect Extensions_Visible,  Up: Implementation Defined Aspects
+ 
+ 3.15 Aspect Favor_Top_Level
+ ===========================
+ 
+ This boolean aspect is equivalent to *note pragma Favor_Top_Level: 6b.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Ghost,  Next: Aspect Global,  Prev: Aspect Favor_Top_Level,  Up: Implementation Defined Aspects
+ 
+ 3.16 Aspect Ghost
+ =================
+ 
+ This aspect is equivalent to *note pragma Ghost: 6f.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Global,  Next: Aspect Initial_Condition,  Prev: Aspect Ghost,  Up: Implementation Defined Aspects
+ 
+ 3.17 Aspect Global
+ ==================
+ 
+ This aspect is equivalent to *note pragma Global: 71.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Initial_Condition,  Next: Aspect Initializes,  Prev: Aspect Global,  Up: Implementation Defined Aspects
+ 
+ 3.18 Aspect Initial_Condition
+ =============================
+ 
+ This aspect is equivalent to *note pragma Initial_Condition: 7e.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Initializes,  Next: Aspect Inline_Always,  Prev: Aspect Initial_Condition,  Up: Implementation Defined Aspects
+ 
+ 3.19 Aspect Initializes
+ =======================
+ 
+ This aspect is equivalent to *note pragma Initializes: 81.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Inline_Always,  Next: Aspect Invariant,  Prev: Aspect Initializes,  Up: Implementation Defined Aspects
+ 
+ 3.20 Aspect Inline_Always
+ =========================
+ 
+ This boolean aspect is equivalent to *note pragma Inline_Always: 83.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Invariant,  Next: Aspect Invariant’Class,  Prev: Aspect Inline_Always,  Up: Implementation Defined Aspects
+ 
+ 3.21 Aspect Invariant
+ =====================
+ 
+ This aspect is equivalent to *note pragma Invariant: 8a.  It is a
+ synonym for the language defined aspect ‘Type_Invariant’ except that it
+ is separately controllable using pragma ‘Assertion_Policy’.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Invariant’Class,  Next: Aspect Iterable,  Prev: Aspect Invariant,  Up: Implementation Defined Aspects
+ 
+ 3.22 Aspect Invariant’Class
+ ===========================
+ 
+ This aspect is equivalent to *note pragma Type_Invariant_Class: 101.  It
+ is a synonym for the language defined aspect ‘Type_Invariant'Class’
+ except that it is separately controllable using pragma
+ ‘Assertion_Policy’.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Iterable,  Next: Aspect Linker_Section,  Prev: Aspect Invariant’Class,  Up: Implementation Defined Aspects
+ 
+ 3.23 Aspect Iterable
+ ====================
+ 
+ This aspect provides a light-weight mechanism for loops and quantified
+ expressions over container types, without the overhead imposed by the
+ tampering checks of standard Ada 2012 iterators.  The value of the
+ aspect is an aggregate with six named components, of which the last
+ three are optional: ‘First’, ‘Next’, ‘Has_Element’, ‘Element’, ‘Last’,
+ and ‘Previous’.  When only the first three components are specified,
+ only the ‘for .. in’ form of iteration over cursors is available.  When
+ ‘Element’ is specified, both this form and the ‘for .. of’ form of
+ iteration over elements are available.  If the last two components are
+ specified, reverse iterations over the container can be specified
+ (analogous to what can be done over predefined containers that support
+ the ‘Reverse_Iterator’ interface).  The following is a typical example
+ of use:
+ 
+      type List is private with
+          Iterable => (First       => First_Cursor,
+                       Next        => Advance,
+                       Has_Element => Cursor_Has_Element
+                     [,Element     => Get_Element]
+                     [,Last        => Last_Cursor]
+                     [,Previous    => Retreat]);
+ 
+    * The values of ‘First’ and ‘Last’ are primitive operations of the
+      container type that return a ‘Cursor’, which must be a type
+      declared in the container package or visible from it.  For example:
+ 
+      function First_Cursor (Cont : Container) return Cursor;
+      function Last_Cursor  (Cont : Container) return Cursor;
+ 
+    * The values of ‘Next’ and ‘Previous’ are primitive operations of the
+      container type that take both a container and a cursor and yield a
+      cursor.  For example:
+ 
+      function Advance (Cont : Container; Position : Cursor) return Cursor;
+      function Retreat (Cont : Container; Position : Cursor) return Cursor;
+ 
+    * The value of ‘Has_Element’ is a primitive operation of the
+      container type that takes both a container and a cursor and yields
+      a boolean.  For example:
+ 
+      function Cursor_Has_Element (Cont : Container; Position : Cursor) return Boolean;
+ 
+    * The value of ‘Element’ is a primitive operation of the container
+      type that takes both a container and a cursor and yields an
+      ‘Element_Type’, which must be a type declared in the container
+      package or visible from it.  For example:
+ 
+      function Get_Element (Cont : Container; Position : Cursor) return Element_Type;
+ 
+ This aspect is used in the GNAT-defined formal container packages.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Linker_Section,  Next: Aspect Lock_Free,  Prev: Aspect Iterable,  Up: Implementation Defined Aspects
+ 
+ 3.24 Aspect Linker_Section
+ ==========================
+ 
+ This aspect is equivalent to *note pragma Linker_Section: 92.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Lock_Free,  Next: Aspect Max_Queue_Length,  Prev: Aspect Linker_Section,  Up: Implementation Defined Aspects
+ 
+ 3.25 Aspect Lock_Free
+ =====================
+ 
+ This boolean aspect is equivalent to *note pragma Lock_Free: 94.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Max_Queue_Length,  Next: Aspect No_Caching,  Prev: Aspect Lock_Free,  Up: Implementation Defined Aspects
+ 
+ 3.26 Aspect Max_Queue_Length
+ ============================
+ 
+ This aspect is equivalent to *note pragma Max_Queue_Length: 9c.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect No_Caching,  Next: Aspect No_Elaboration_Code_All,  Prev: Aspect Max_Queue_Length,  Up: Implementation Defined Aspects
+ 
+ 3.27 Aspect No_Caching
+ ======================
+ 
+ This boolean aspect is equivalent to *note pragma No_Caching: 9f.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect No_Elaboration_Code_All,  Next: Aspect No_Inline,  Prev: Aspect No_Caching,  Up: Implementation Defined Aspects
+ 
+ 3.28 Aspect No_Elaboration_Code_All
+ ===================================
+ 
+ This aspect is equivalent to *note pragma No_Elaboration_Code_All: a2.
+ for a program unit.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect No_Inline,  Next: Aspect No_Tagged_Streams,  Prev: Aspect No_Elaboration_Code_All,  Up: Implementation Defined Aspects
+ 
+ 3.29 Aspect No_Inline
+ =====================
+ 
+ This boolean aspect is equivalent to *note pragma No_Inline: a5.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect No_Tagged_Streams,  Next: Aspect No_Task_Parts,  Prev: Aspect No_Inline,  Up: Implementation Defined Aspects
+ 
+ 3.30 Aspect No_Tagged_Streams
+ =============================
+ 
+ This aspect is equivalent to *note pragma No_Tagged_Streams: a9. with an
+ argument specifying a root tagged type (thus this aspect can only be
+ applied to such a type).
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect No_Task_Parts,  Next: Aspect Object_Size,  Prev: Aspect No_Tagged_Streams,  Up: Implementation Defined Aspects
+ 
+ 3.31 Aspect No_Task_Parts
+ =========================
+ 
+ Applies to a type.  If True, requires that the type and any descendants
+ do not have any task parts.  The rules for this aspect are the same as
+ for the language-defined No_Controlled_Parts aspect (see RM-H.4.1),
+ replacing “controlled” with “task”.
+ 
+ If No_Task_Parts is True for a type T, then the compiler can optimize
+ away certain tasking-related code that would otherwise be needed for
+ T’Class, because descendants of T might contain tasks.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Object_Size,  Next: Aspect Obsolescent,  Prev: Aspect No_Task_Parts,  Up: Implementation Defined Aspects
+ 
+ 3.32 Aspect Object_Size
+ =======================
+ 
+ This aspect is equivalent to *note attribute Object_Size: 141.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Obsolescent,  Next: Aspect Part_Of,  Prev: Aspect Object_Size,  Up: Implementation Defined Aspects
+ 
+ 3.33 Aspect Obsolescent
+ =======================
+ 
+ This aspect is equivalent to *note pragma Obsolescent: ac.  Note that
+ the evaluation of this aspect happens at the point of occurrence, it is
+ not delayed until the freeze point.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Part_Of,  Next: Aspect Persistent_BSS,  Prev: Aspect Obsolescent,  Up: Implementation Defined Aspects
+ 
+ 3.34 Aspect Part_Of
+ ===================
+ 
+ This aspect is equivalent to *note pragma Part_Of: b2.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Persistent_BSS,  Next: Aspect Predicate,  Prev: Aspect Part_Of,  Up: Implementation Defined Aspects
+ 
+ 3.35 Aspect Persistent_BSS
+ ==========================
+ 
+ This boolean aspect is equivalent to *note pragma Persistent_BSS: b6.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Predicate,  Next: Aspect Pure_Function,  Prev: Aspect Persistent_BSS,  Up: Implementation Defined Aspects
+ 
+ 3.36 Aspect Predicate
+ =====================
+ 
+ This aspect is equivalent to *note pragma Predicate: bd.  It is thus
+ similar to the language defined aspects ‘Dynamic_Predicate’ and
+ ‘Static_Predicate’ except that whether the resulting predicate is static
+ or dynamic is controlled by the form of the expression.  It is also
+ separately controllable using pragma ‘Assertion_Policy’.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Pure_Function,  Next: Aspect Refined_Depends,  Prev: Aspect Predicate,  Up: Implementation Defined Aspects
+ 
+ 3.37 Aspect Pure_Function
+ =========================
+ 
+ This boolean aspect is equivalent to *note pragma Pure_Function: c9.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Refined_Depends,  Next: Aspect Refined_Global,  Prev: Aspect Pure_Function,  Up: Implementation Defined Aspects
+ 
+ 3.38 Aspect Refined_Depends
+ ===========================
+ 
+ This aspect is equivalent to *note pragma Refined_Depends: cd.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Refined_Global,  Next: Aspect Refined_Post,  Prev: Aspect Refined_Depends,  Up: Implementation Defined Aspects
+ 
+ 3.39 Aspect Refined_Global
+ ==========================
+ 
+ This aspect is equivalent to *note pragma Refined_Global: cf.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Refined_Post,  Next: Aspect Refined_State,  Prev: Aspect Refined_Global,  Up: Implementation Defined Aspects
+ 
+ 3.40 Aspect Refined_Post
+ ========================
+ 
+ This aspect is equivalent to *note pragma Refined_Post: d1.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Refined_State,  Next: Aspect Relaxed_Initialization,  Prev: Aspect Refined_Post,  Up: Implementation Defined Aspects
+ 
+ 3.41 Aspect Refined_State
+ =========================
+ 
+ This aspect is equivalent to *note pragma Refined_State: d3.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Relaxed_Initialization,  Next: Aspect Remote_Access_Type,  Prev: Aspect Refined_State,  Up: Implementation Defined Aspects
+ 
+ 3.42 Aspect Relaxed_Initialization
+ ==================================
+ 
+ For the syntax and semantics of this aspect, see the SPARK 2014
+ Reference Manual, section 6.10.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Remote_Access_Type,  Next: Aspect Secondary_Stack_Size,  Prev: Aspect Relaxed_Initialization,  Up: Implementation Defined Aspects
+ 
+ 3.43 Aspect Remote_Access_Type
+ ==============================
+ 
+ This aspect is equivalent to *note pragma Remote_Access_Type: d6.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Secondary_Stack_Size,  Next: Aspect Scalar_Storage_Order,  Prev: Aspect Remote_Access_Type,  Up: Implementation Defined Aspects
+ 
+ 3.44 Aspect Secondary_Stack_Size
+ ================================
+ 
+ This aspect is equivalent to *note pragma Secondary_Stack_Size: dc.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Scalar_Storage_Order,  Next: Aspect Shared,  Prev: Aspect Secondary_Stack_Size,  Up: Implementation Defined Aspects
+ 
+ 3.45 Aspect Scalar_Storage_Order
+ ================================
+ 
+ This aspect is equivalent to a *note attribute Scalar_Storage_Order:
+ 14f.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Shared,  Next: Aspect Simple_Storage_Pool,  Prev: Aspect Scalar_Storage_Order,  Up: Implementation Defined Aspects
+ 
+ 3.46 Aspect Shared
+ ==================
+ 
+ This boolean aspect is equivalent to *note pragma Shared: df. and is
+ thus a synonym for aspect ‘Atomic’.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Simple_Storage_Pool,  Next: Aspect Simple_Storage_Pool_Type,  Prev: Aspect Shared,  Up: Implementation Defined Aspects
+ 
+ 3.47 Aspect Simple_Storage_Pool
+ ===============================
+ 
+ This aspect is equivalent to *note attribute Simple_Storage_Pool: e4.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Simple_Storage_Pool_Type,  Next: Aspect SPARK_Mode,  Prev: Aspect Simple_Storage_Pool,  Up: Implementation Defined Aspects
+ 
+ 3.48 Aspect Simple_Storage_Pool_Type
+ ====================================
+ 
+ This boolean aspect is equivalent to *note pragma
+ Simple_Storage_Pool_Type: e3.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect SPARK_Mode,  Next: Aspect Suppress_Debug_Info,  Prev: Aspect Simple_Storage_Pool_Type,  Up: Implementation Defined Aspects
+ 
+ 3.49 Aspect SPARK_Mode
+ ======================
+ 
+ This aspect is equivalent to *note pragma SPARK_Mode: eb. and may be
+ specified for either or both of the specification and body of a
+ subprogram or package.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Suppress_Debug_Info,  Next: Aspect Suppress_Initialization,  Prev: Aspect SPARK_Mode,  Up: Implementation Defined Aspects
+ 
+ 3.50 Aspect Suppress_Debug_Info
+ ===============================
+ 
+ This boolean aspect is equivalent to *note pragma Suppress_Debug_Info:
+ f3.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Suppress_Initialization,  Next: Aspect Test_Case,  Prev: Aspect Suppress_Debug_Info,  Up: Implementation Defined Aspects
+ 
+ 3.51 Aspect Suppress_Initialization
+ ===================================
+ 
+ This boolean aspect is equivalent to *note pragma
+ Suppress_Initialization: f6.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Test_Case,  Next: Aspect Thread_Local_Storage,  Prev: Aspect Suppress_Initialization,  Up: Implementation Defined Aspects
+ 
+ 3.52 Aspect Test_Case
+ =====================
+ 
+ This aspect is equivalent to *note pragma Test_Case: fa.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Thread_Local_Storage,  Next: Aspect Universal_Aliasing,  Prev: Aspect Test_Case,  Up: Implementation Defined Aspects
+ 
+ 3.53 Aspect Thread_Local_Storage
+ ================================
+ 
+ This boolean aspect is equivalent to *note pragma Thread_Local_Storage:
+ fc.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Universal_Aliasing,  Next: Aspect Unmodified,  Prev: Aspect Thread_Local_Storage,  Up: Implementation Defined Aspects
+ 
+ 3.54 Aspect Universal_Aliasing
+ ==============================
+ 
+ This boolean aspect is equivalent to *note pragma Universal_Aliasing:
+ 106.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Unmodified,  Next: Aspect Unreferenced,  Prev: Aspect Universal_Aliasing,  Up: Implementation Defined Aspects
+ 
+ 3.55 Aspect Unmodified
+ ======================
+ 
+ This boolean aspect is equivalent to *note pragma Unmodified: 108.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Unreferenced,  Next: Aspect Unreferenced_Objects,  Prev: Aspect Unmodified,  Up: Implementation Defined Aspects
+ 
+ 3.56 Aspect Unreferenced
+ ========================
+ 
+ This boolean aspect is equivalent to *note pragma Unreferenced: 10a.
+ 
+ When using the ‘-gnat2022’ switch, this aspect is also supported on
+ formal parameters, which is in particular the only form possible for
+ expression functions.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Unreferenced_Objects,  Next: Aspect Value_Size,  Prev: Aspect Unreferenced,  Up: Implementation Defined Aspects
+ 
+ 3.57 Aspect Unreferenced_Objects
+ ================================
+ 
+ This boolean aspect is equivalent to *note pragma Unreferenced_Objects:
+ 10c.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Value_Size,  Next: Aspect Volatile_Full_Access,  Prev: Aspect Unreferenced_Objects,  Up: Implementation Defined Aspects
+ 
+ 3.58 Aspect Value_Size
+ ======================
+ 
+ This aspect is equivalent to *note attribute Value_Size: 15d.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Volatile_Full_Access,  Next: Aspect Volatile_Function,  Prev: Aspect Value_Size,  Up: Implementation Defined Aspects
+ 
+ 3.59 Aspect Volatile_Full_Access
+ ================================
+ 
+ This boolean aspect is equivalent to *note pragma Volatile_Full_Access:
+ 116.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Volatile_Function,  Next: Aspect Warnings,  Prev: Aspect Volatile_Full_Access,  Up: Implementation Defined Aspects
+ 
+ 3.60 Aspect Volatile_Function
+ =============================
+ 
+ This boolean aspect is equivalent to *note pragma Volatile_Function:
+ 118.
+ 
+ 
+ File: gnat_rm.info,  Node: Aspect Warnings,  Prev: Aspect Volatile_Function,  Up: Implementation Defined Aspects
+ 
+ 3.61 Aspect Warnings
+ ====================
+ 
+ This aspect is equivalent to the two argument form of *note pragma
+ Warnings: 11a, where the first argument is ‘ON’ or ‘OFF’ and the second
+ argument is the entity.
+ 
+ 
+ File: gnat_rm.info,  Node: Implementation Defined Attributes,  Next: Standard and Implementation Defined Restrictions,  Prev: Implementation Defined Aspects,  Up: Top
+ 
+ 4 Implementation Defined Attributes
+ ***********************************
+ 
+ Ada defines (throughout the Ada reference manual, summarized in Annex
+ K), a set of attributes that provide useful additional functionality in
+ all areas of the language.  These language defined attributes are
+ implemented in GNAT and work as described in the Ada Reference Manual.
+ 
+ In addition, Ada allows implementations to define additional attributes
+ whose meaning is defined by the implementation.  GNAT provides a number
+ of these implementation-dependent attributes which can be used to extend
+ and enhance the functionality of the compiler.  This section of the GNAT
+ reference manual describes these additional attributes.  It also
+ describes additional implementation-dependent features of standard
+ language-defined attributes.
+ 
+ Note that any program using these attributes may not be portable to
+ other compilers (although GNAT implements this set of attributes on all
+ platforms).  Therefore if portability to other compilers is an important
+ consideration, you should minimize the use of these attributes.
+ 
+ * Menu:
+ 
+ * Attribute Abort_Signal::
+ * Attribute Address_Size::
+ * Attribute Asm_Input::
+ * Attribute Asm_Output::
+ * Attribute Atomic_Always_Lock_Free::
+ * Attribute Bit::
+ * Attribute Bit_Position::
+ * Attribute Code_Address::
+ * Attribute Compiler_Version::
+ * Attribute Constrained::
+ * Attribute Default_Bit_Order::
+ * Attribute Default_Scalar_Storage_Order::
+ * Attribute Deref::
+ * Attribute Descriptor_Size::
+ * Attribute Elaborated::
+ * Attribute Elab_Body::
+ * Attribute Elab_Spec::
+ * Attribute Elab_Subp_Body::
+ * Attribute Emax::
+ * Attribute Enabled::
+ * Attribute Enum_Rep::
+ * Attribute Enum_Val::
+ * Attribute Epsilon::
+ * Attribute Fast_Math::
+ * Attribute Finalization_Size::
+ * Attribute Fixed_Value::
+ * Attribute From_Any::
+ * Attribute Has_Access_Values::
+ * Attribute Has_Discriminants::
+ * Attribute Has_Tagged_Values::
+ * Attribute Img::
+ * Attribute Initialized::
+ * Attribute Integer_Value::
+ * Attribute Invalid_Value::
+ * Attribute Iterable::
+ * Attribute Large::
+ * Attribute Library_Level::
+ * Attribute Loop_Entry::
+ * Attribute Machine_Size::
+ * Attribute Mantissa::
+ * Attribute Maximum_Alignment::
+ * Attribute Max_Integer_Size::
+ * Attribute Mechanism_Code::
+ * Attribute Null_Parameter::
+ * Attribute Object_Size::
+ * Attribute Old::
+ * Attribute Passed_By_Reference::
+ * Attribute Pool_Address::
+ * Attribute Range_Length::
+ * Attribute Restriction_Set::
+ * Attribute Result::
+ * Attribute Safe_Emax::
+ * Attribute Safe_Large::
+ * Attribute Safe_Small::
+ * Attribute Scalar_Storage_Order::
+ * Attribute Simple_Storage_Pool::
+ * Attribute Small::
+ * Attribute Small_Denominator::
+ * Attribute Small_Numerator::
+ * Attribute Storage_Unit::
+ * Attribute Stub_Type::
+ * Attribute System_Allocator_Alignment::
+ * Attribute Target_Name::
+ * Attribute To_Address::
+ * Attribute To_Any::
+ * Attribute Type_Class::
+ * Attribute Type_Key::
+ * Attribute TypeCode::
+ * Attribute Unconstrained_Array::
+ * Attribute Universal_Literal_String::
+ * Attribute Unrestricted_Access::
+ * Attribute Update::
+ * Attribute Valid_Value::
+ * Attribute Valid_Scalars::
+ * Attribute VADS_Size::
+ * Attribute Value_Size::
+ * Attribute Wchar_T_Size::
+ * Attribute Word_Size::
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Abort_Signal,  Next: Attribute Address_Size,  Up: Implementation Defined Attributes
+ 
+ 4.1 Attribute Abort_Signal
+ ==========================
+ 
+ ‘Standard'Abort_Signal’ (‘Standard’ is the only allowed prefix) provides
+ the entity for the special exception used to signal task abort or
+ asynchronous transfer of control.  Normally this attribute should only
+ be used in the tasking runtime (it is highly peculiar, and completely
+ outside the normal semantics of Ada, for a user program to intercept the
+ abort exception).
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Address_Size,  Next: Attribute Asm_Input,  Prev: Attribute Abort_Signal,  Up: Implementation Defined Attributes
+ 
+ 4.2 Attribute Address_Size
+ ==========================
+ 
+ ‘Standard'Address_Size’ (‘Standard’ is the only allowed prefix) is a
+ static constant giving the number of bits in an ‘Address’.  It is the
+ same value as System.Address’Size, but has the advantage of being
+ static, while a direct reference to System.Address’Size is nonstatic
+ because Address is a private type.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Asm_Input,  Next: Attribute Asm_Output,  Prev: Attribute Address_Size,  Up: Implementation Defined Attributes
+ 
+ 4.3 Attribute Asm_Input
+ =======================
+ 
+ The ‘Asm_Input’ attribute denotes a function that takes two parameters.
+ The first is a string, the second is an expression of the type
+ designated by the prefix.  The first (string) argument is required to be
+ a static expression, and is the constraint for the parameter, (e.g.,
+ what kind of register is required).  The second argument is the 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.  *note Machine Code
+ Insertions: 166.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Asm_Output,  Next: Attribute Atomic_Always_Lock_Free,  Prev: Attribute Asm_Input,  Up: Implementation Defined Attributes
+ 
+ 4.4 Attribute Asm_Output
+ ========================
+ 
+ The ‘Asm_Output’ attribute denotes a function that takes two parameters.
+ The first is a string, the second is the name of a variable of the type
+ designated by the attribute prefix.  The first (string) argument is
+ required to be a static expression and designates the constraint for the
+ parameter (e.g., what kind of register is required).  The second
+ argument is the variable to be updated with the result.  The possible
+ values for constraint are the same as those used in 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 ‘No_Output_Operands’.  *note Machine Code
+ Insertions: 166.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Atomic_Always_Lock_Free,  Next: Attribute Bit,  Prev: Attribute Asm_Output,  Up: Implementation Defined Attributes
+ 
+ 4.5 Attribute Atomic_Always_Lock_Free
+ =====================================
+ 
+ The prefix of the ‘Atomic_Always_Lock_Free’ attribute is a type.  The
+ result is a Boolean value which is True if the type has discriminants,
+ and False otherwise.  The result indicate whether atomic operations are
+ supported by the target for the given type.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Bit,  Next: Attribute Bit_Position,  Prev: Attribute Atomic_Always_Lock_Free,  Up: Implementation Defined Attributes
+ 
+ 4.6 Attribute Bit
+ =================
+ 
+ ‘obj'Bit’, where ‘obj’ is any object, yields the bit offset within the
+ storage unit (byte) that contains the first bit of storage allocated for
+ the object.  The value of this attribute is of the type
+ ‘universal_integer’ and is always a nonnegative number smaller than
+ ‘System.Storage_Unit’.
+ 
+ For an object that is a variable or a constant allocated in a register,
+ the value is zero.  (The use of this attribute does not force the
+ allocation of a variable to memory).
+ 
+ For an object that is a formal parameter, this attribute applies to
+ either the matching actual parameter or to a copy of the matching actual
+ parameter.
+ 
+ For an access object the value is zero.  Note that ‘obj.all'Bit’ is
+ subject to an ‘Access_Check’ for the designated object.  Similarly for a
+ record component ‘X.C'Bit’ is subject to a discriminant check and
+ ‘X(I).Bit’ and ‘X(I1..I2)'Bit’ are subject to index checks.
+ 
+ This attribute is designed to be compatible with the DEC Ada 83
+ definition and implementation of the ‘Bit’ attribute.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Bit_Position,  Next: Attribute Code_Address,  Prev: Attribute Bit,  Up: Implementation Defined Attributes
+ 
+ 4.7 Attribute Bit_Position
+ ==========================
+ 
+ ‘R.C'Bit_Position’, where ‘R’ is a record object and ‘C’ is one of the
+ fields of the record type, yields the bit offset within the record
+ contains the first bit of storage allocated for the object.  The value
+ of this attribute is of the type ‘universal_integer’.  The value depends
+ only on the field ‘C’ and is independent of the alignment of the
+ containing record ‘R’.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Code_Address,  Next: Attribute Compiler_Version,  Prev: Attribute Bit_Position,  Up: Implementation Defined Attributes
+ 
+ 4.8 Attribute Code_Address
+ ==========================
+ 
+ The ‘'Address’ attribute may be applied to subprograms in Ada 95 and Ada
+ 2005, but the intended effect seems to be to provide an address value
+ which can be used to call the subprogram by means of an address clause
+ as in the following example:
+ 
+      procedure K is ...
+ 
+      procedure L;
+      for L'Address use K'Address;
+      pragma Import (Ada, L);
+ 
+ A call to ‘L’ is then expected to result in a call to ‘K’.  In Ada 83,
+ where there were no access-to-subprogram values, this was a common
+ work-around for getting the effect of an indirect call.  GNAT implements
+ the above use of ‘Address’ and the technique illustrated by the example
+ code works correctly.
+ 
+ However, for some purposes, it is useful to have the address of the
+ start of the generated code for the subprogram.  On some architectures,
+ this is not necessarily the same as the ‘Address’ value described above.
+ For example, the ‘Address’ value may reference a subprogram descriptor
+ rather than the subprogram itself.
+ 
+ The ‘'Code_Address’ attribute, which can only be applied to subprogram
+ entities, always returns the address of the start of the generated code
+ of the specified subprogram, which may or may not be the same value as
+ is returned by the corresponding ‘'Address’ attribute.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Compiler_Version,  Next: Attribute Constrained,  Prev: Attribute Code_Address,  Up: Implementation Defined Attributes
+ 
+ 4.9 Attribute Compiler_Version
+ ==============================
+ 
+ ‘Standard'Compiler_Version’ (‘Standard’ is the only allowed prefix)
+ yields a static string identifying the version of the compiler being
+ used to compile the unit containing the attribute reference.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Constrained,  Next: Attribute Default_Bit_Order,  Prev: Attribute Compiler_Version,  Up: Implementation Defined Attributes
+ 
+ 4.10 Attribute Constrained
+ ==========================
+ 
+ In addition to the usage of this attribute in the Ada RM, GNAT also
+ permits the use of the ‘'Constrained’ attribute in a generic template
+ for any type, including types without discriminants.  The value of this
+ attribute in the generic instance when applied to a scalar type or a
+ record type without discriminants is always ‘True’.  This usage is
+ compatible with older Ada compilers, including notably DEC Ada.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Default_Bit_Order,  Next: Attribute Default_Scalar_Storage_Order,  Prev: Attribute Constrained,  Up: Implementation Defined Attributes
+ 
+ 4.11 Attribute Default_Bit_Order
+ ================================
+ 
+ ‘Standard'Default_Bit_Order’ (‘Standard’ is the only allowed prefix),
+ provides the value ‘System.Default_Bit_Order’ as a ‘Pos’ value (0 for
+ ‘High_Order_First’, 1 for ‘Low_Order_First’).  This is used to construct
+ the definition of ‘Default_Bit_Order’ in package ‘System’.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Default_Scalar_Storage_Order,  Next: Attribute Deref,  Prev: Attribute Default_Bit_Order,  Up: Implementation Defined Attributes
+ 
+ 4.12 Attribute Default_Scalar_Storage_Order
+ ===========================================
+ 
+ ‘Standard'Default_Scalar_Storage_Order’ (‘Standard’ is the only allowed
+ prefix), provides the current value of the default scalar storage order
+ (as specified using pragma ‘Default_Scalar_Storage_Order’, or equal to
+ ‘Default_Bit_Order’ if unspecified) as a ‘System.Bit_Order’ value.  This
+ is a static attribute.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Deref,  Next: Attribute Descriptor_Size,  Prev: Attribute Default_Scalar_Storage_Order,  Up: Implementation Defined Attributes
+ 
+ 4.13 Attribute Deref
+ ====================
+ 
+ The attribute ‘typ'Deref(expr)’ where ‘expr’ is of type ‘System.Address’
+ yields the variable of type ‘typ’ that is located at the given address.
+ It is similar to ‘(totyp (expr).all)’, where ‘totyp’ is an unchecked
+ conversion from address to a named access-to-‘typ’ type, except that it
+ yields a variable, so it can be used on the left side of an assignment.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Descriptor_Size,  Next: Attribute Elaborated,  Prev: Attribute Deref,  Up: Implementation Defined Attributes
+ 
+ 4.14 Attribute Descriptor_Size
+ ==============================
+ 
+ Nonstatic attribute ‘Descriptor_Size’ returns the size in bits of the
+ descriptor allocated for a type.  The result is non-zero only for
+ unconstrained array types and the returned value is of type universal
+ integer.  In GNAT, an array descriptor contains bounds information and
+ is located immediately before the first element of the array.
+ 
+      type Unconstr_Array is array (Short_Short_Integer range <>) of Positive;
+      Put_Line ("Descriptor size = " & Unconstr_Array'Descriptor_Size'Img);
+ 
+ The attribute takes into account any padding due to the alignment of the
+ component type.  In the example above, the descriptor contains two
+ values of type ‘Short_Short_Integer’ representing the low and high
+ bound.  But, since ‘Positive’ has an alignment of 4, the size of the
+ descriptor is ‘2 * Short_Short_Integer'Size’ rounded up to the next
+ multiple of 32, which yields a size of 32 bits, i.e.  including 16 bits
+ of padding.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Elaborated,  Next: Attribute Elab_Body,  Prev: Attribute Descriptor_Size,  Up: Implementation Defined Attributes
+ 
+ 4.15 Attribute Elaborated
+ =========================
+ 
+ The prefix of the ‘'Elaborated’ attribute must be a unit name.  The
+ value is a Boolean which indicates whether or not the given unit has
+ been elaborated.  This attribute is primarily intended for internal use
+ by the generated code for dynamic elaboration checking, but it can also
+ be used in user programs.  The value will always be True once
+ elaboration of all units has been completed.  An exception is for units
+ which need no elaboration, the value is always False for such units.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Elab_Body,  Next: Attribute Elab_Spec,  Prev: Attribute Elaborated,  Up: Implementation Defined Attributes
+ 
+ 4.16 Attribute Elab_Body
+ ========================
+ 
+ This attribute can only be applied to a program unit name.  It returns
+ the entity for the corresponding elaboration procedure for elaborating
+ the body of the referenced unit.  This is used in the main generated
+ elaboration procedure by the binder and is not normally used in any
+ other context.  However, there may be specialized situations in which it
+ is useful to be able to call this elaboration procedure from Ada code,
+ e.g., if it is necessary to do selective re-elaboration to fix some
+ error.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Elab_Spec,  Next: Attribute Elab_Subp_Body,  Prev: Attribute Elab_Body,  Up: Implementation Defined Attributes
+ 
+ 4.17 Attribute Elab_Spec
+ ========================
+ 
+ This attribute can only be applied to a program unit name.  It returns
+ the entity for the corresponding elaboration procedure for elaborating
+ the spec of the referenced unit.  This is used in the main generated
+ elaboration procedure by the binder and is not normally used in any
+ other context.  However, there may be specialized situations in which it
+ is useful to be able to call this elaboration procedure from Ada code,
+ e.g., if it is necessary to do selective re-elaboration to fix some
+ error.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Elab_Subp_Body,  Next: Attribute Emax,  Prev: Attribute Elab_Spec,  Up: Implementation Defined Attributes
+ 
+ 4.18 Attribute Elab_Subp_Body
+ =============================
+ 
+ This attribute can only be applied to a library level subprogram name
+ and is only allowed in CodePeer mode.  It returns the entity for the
+ corresponding elaboration procedure for elaborating the body of the
+ referenced subprogram unit.  This is used in the main generated
+ elaboration procedure by the binder in CodePeer mode only and is
+ unrecognized otherwise.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Emax,  Next: Attribute Enabled,  Prev: Attribute Elab_Subp_Body,  Up: Implementation Defined Attributes
+ 
+ 4.19 Attribute Emax
+ ===================
+ 
+ The ‘Emax’ attribute is provided for compatibility with Ada 83.  See the
+ Ada 83 reference manual for an exact description of the semantics of
+ this attribute.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Enabled,  Next: Attribute Enum_Rep,  Prev: Attribute Emax,  Up: Implementation Defined Attributes
+ 
+ 4.20 Attribute Enabled
+ ======================
+ 
+ The ‘Enabled’ attribute allows an application program to check at
+ compile time to see if the designated check is currently enabled.  The
+ prefix is a simple identifier, referencing any predefined check name
+ (other than ‘All_Checks’) or a check name introduced by pragma
+ Check_Name.  If no argument is given for the attribute, the check is for
+ the general state of the check, if an argument is given, then it is an
+ entity name, and the check indicates whether an ‘Suppress’ or
+ ‘Unsuppress’ has been given naming the entity (if not, then the argument
+ is ignored).
+ 
+ Note that instantiations inherit the check status at the point of the
+ instantiation, so a useful idiom is to have a library package that
+ introduces a check name with ‘pragma Check_Name’, and then contains
+ generic packages or subprograms which use the ‘Enabled’ attribute to see
+ if the check is enabled.  A user of this package can then issue a
+ ‘pragma Suppress’ or ‘pragma Unsuppress’ before instantiating the
+ package or subprogram, controlling whether the check will be present.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Enum_Rep,  Next: Attribute Enum_Val,  Prev: Attribute Enabled,  Up: Implementation Defined Attributes
+ 
+ 4.21 Attribute Enum_Rep
+ =======================
+ 
+ Note that this attribute is now standard in Ada 202x and is available as
+ an implementation defined attribute for earlier Ada versions.
+ 
+ For every enumeration subtype ‘S’, ‘S'Enum_Rep’ denotes a function with
+ the following spec:
+ 
+      function S'Enum_Rep (Arg : S'Base) return <Universal_Integer>;
+ 
+ It is also allowable to apply ‘Enum_Rep’ directly to an object of an
+ enumeration type or to a non-overloaded enumeration literal.  In this
+ case ‘S'Enum_Rep’ is equivalent to ‘typ'Enum_Rep(S)’ where ‘typ’ is the
+ type of the enumeration literal or object.
+ 
+ The function returns the representation value for the given enumeration
+ value.  This will be equal to value of the ‘Pos’ attribute in the
+ absence of an enumeration representation clause.  This is a static
+ attribute (i.e., the result is static if the argument is static).
+ 
+ ‘S'Enum_Rep’ can also be used with integer types and objects, in which
+ case it simply returns the integer value.  The reason for this is to
+ allow it to be used for ‘(<>)’ discrete formal arguments in a generic
+ unit that can be instantiated with either enumeration types or integer
+ types.  Note that if ‘Enum_Rep’ is used on a modular type whose upper
+ bound exceeds the upper bound of the largest signed integer type, and
+ the argument is a variable, so that the universal integer calculation is
+ done at run time, then the call to ‘Enum_Rep’ may raise
+ ‘Constraint_Error’.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Enum_Val,  Next: Attribute Epsilon,  Prev: Attribute Enum_Rep,  Up: Implementation Defined Attributes
+ 
+ 4.22 Attribute Enum_Val
+ =======================
+ 
+ Note that this attribute is now standard in Ada 202x and is available as
+ an implementation defined attribute for earlier Ada versions.
+ 
+ For every enumeration subtype ‘S’, ‘S'Enum_Val’ denotes a function with
+ the following spec:
+ 
+      function S'Enum_Val (Arg : <Universal_Integer>) return S'Base;
+ 
+ The function returns the enumeration value whose representation matches
+ the argument, or raises Constraint_Error if no enumeration literal of
+ the type has the matching value.  This will be equal to value of the
+ ‘Val’ attribute in the absence of an enumeration representation clause.
+ This is a static attribute (i.e., the result is static if the argument
+ is static).
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Epsilon,  Next: Attribute Fast_Math,  Prev: Attribute Enum_Val,  Up: Implementation Defined Attributes
+ 
+ 4.23 Attribute Epsilon
+ ======================
+ 
+ The ‘Epsilon’ attribute is provided for compatibility with Ada 83.  See
+ the Ada 83 reference manual for an exact description of the semantics of
+ this attribute.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Fast_Math,  Next: Attribute Finalization_Size,  Prev: Attribute Epsilon,  Up: Implementation Defined Attributes
+ 
+ 4.24 Attribute Fast_Math
+ ========================
+ 
+ ‘Standard'Fast_Math’ (‘Standard’ is the only allowed prefix) yields a
+ static Boolean value that is True if pragma ‘Fast_Math’ is active, and
+ False otherwise.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Finalization_Size,  Next: Attribute Fixed_Value,  Prev: Attribute Fast_Math,  Up: Implementation Defined Attributes
+ 
+ 4.25 Attribute Finalization_Size
+ ================================
+ 
+ The prefix of attribute ‘Finalization_Size’ must be an object or a
+ non-class-wide type.  This attribute returns the size of any hidden data
+ reserved by the compiler to handle finalization-related actions.  The
+ type of the attribute is ‘universal_integer’.
+ 
+ ‘Finalization_Size’ yields a value of zero for a type with no controlled
+ parts, an object whose type has no controlled parts, or an object of a
+ class-wide type whose tag denotes a type with no controlled parts.
+ 
+ Note that only heap-allocated objects contain finalization data.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Fixed_Value,  Next: Attribute From_Any,  Prev: Attribute Finalization_Size,  Up: Implementation Defined Attributes
+ 
+ 4.26 Attribute Fixed_Value
+ ==========================
+ 
+ For every fixed-point type ‘S’, ‘S'Fixed_Value’ denotes a function with
+ the following specification:
+ 
+      function S'Fixed_Value (Arg : <Universal_Integer>) return S;
+ 
+ The value returned is the fixed-point value ‘V’ such that:
+ 
+      V = Arg * S'Small
+ 
+ The effect is thus similar to first converting the argument to the
+ integer type used to represent ‘S’, and then doing an unchecked
+ conversion to the fixed-point type.  The difference is that there are
+ full range checks, to ensure that the result is in range.  This
+ attribute is primarily intended for use in implementation of the
+ input-output functions for fixed-point values.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute From_Any,  Next: Attribute Has_Access_Values,  Prev: Attribute Fixed_Value,  Up: Implementation Defined Attributes
+ 
+ 4.27 Attribute From_Any
+ =======================
+ 
+ This internal attribute is used for the generation of remote subprogram
+ stubs in the context of the Distributed Systems Annex.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Has_Access_Values,  Next: Attribute Has_Discriminants,  Prev: Attribute From_Any,  Up: Implementation Defined Attributes
+ 
+ 4.28 Attribute Has_Access_Values
+ ================================
+ 
+ The prefix of the ‘Has_Access_Values’ attribute is a type.  The result
+ is a Boolean value which is True if the is an access type, or is a
+ composite type with a component (at any nesting depth) that is an access
+ type, and is False otherwise.  The intended use of this attribute is in
+ conjunction with generic definitions.  If the attribute is applied to a
+ generic private type, it indicates whether or not the corresponding
+ actual type has access values.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Has_Discriminants,  Next: Attribute Has_Tagged_Values,  Prev: Attribute Has_Access_Values,  Up: Implementation Defined Attributes
+ 
+ 4.29 Attribute Has_Discriminants
+ ================================
+ 
+ The prefix of the ‘Has_Discriminants’ attribute is a type.  The result
+ is a Boolean value which is True if the type has discriminants, and
+ False otherwise.  The intended use of this attribute is in conjunction
+ with generic definitions.  If the attribute is applied to a generic
+ private type, it indicates whether or not the corresponding actual type
+ has discriminants.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Has_Tagged_Values,  Next: Attribute Img,  Prev: Attribute Has_Discriminants,  Up: Implementation Defined Attributes
+ 
+ 4.30 Attribute Has_Tagged_Values
+ ================================
+ 
+ The prefix of the ‘Has_Tagged_Values’ attribute is a type.  The result
+ is a Boolean value which is True if the type is a composite type (array
+ or record) that is either a tagged type or has a subcomponent that is
+ tagged, and is False otherwise.  The intended use of this attribute is
+ in conjunction with generic definitions.  If the attribute is applied to
+ a generic private type, it indicates whether or not the corresponding
+ actual type has access values.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Img,  Next: Attribute Initialized,  Prev: Attribute Has_Tagged_Values,  Up: Implementation Defined Attributes
+ 
+ 4.31 Attribute Img
+ ==================
+ 
+ The ‘Img’ attribute differs from ‘Image’ in that, while both can be
+ applied directly to an object, ‘Img’ cannot be applied to types.
+ 
+ Example usage of the attribute:
+ 
+      Put_Line ("X = " & X'Img);
+ 
+ which has the same meaning as the more verbose:
+ 
+      Put_Line ("X = " & T'Image (X));
+ 
+ where ‘T’ is the (sub)type of the object ‘X’.
+ 
+ Note that technically, in analogy to ‘Image’, ‘X'Img’ returns a
+ parameterless function that returns the appropriate string when called.
+ This means that ‘X'Img’ can be renamed as a function-returning-string,
+ or used in an instantiation as a function parameter.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Initialized,  Next: Attribute Integer_Value,  Prev: Attribute Img,  Up: Implementation Defined Attributes
+ 
+ 4.32 Attribute Initialized
+ ==========================
+ 
+ For the syntax and semantics of this attribute, see the SPARK 2014
+ Reference Manual, section 6.10.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Integer_Value,  Next: Attribute Invalid_Value,  Prev: Attribute Initialized,  Up: Implementation Defined Attributes
+ 
+ 4.33 Attribute Integer_Value
+ ============================
+ 
+ For every integer type ‘S’, ‘S'Integer_Value’ denotes a function with
+ the following spec:
+ 
+      function S'Integer_Value (Arg : <Universal_Fixed>) return S;
+ 
+ The value returned is the integer value ‘V’, such that:
+ 
+      Arg = V * T'Small
+ 
+ where ‘T’ is the type of ‘Arg’.  The effect is thus similar to first
+ doing an unchecked conversion from the fixed-point type to its
+ corresponding implementation type, and then converting the result to the
+ target integer type.  The difference is that there are full range
+ checks, to ensure that the result is in range.  This attribute is
+ primarily intended for use in implementation of the standard
+ input-output functions for fixed-point values.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Invalid_Value,  Next: Attribute Iterable,  Prev: Attribute Integer_Value,  Up: Implementation Defined Attributes
+ 
+ 4.34 Attribute Invalid_Value
+ ============================
+ 
+ For every scalar type S, S’Invalid_Value returns an undefined value of
+ the type.  If possible this value is an invalid representation for the
+ type.  The value returned is identical to the value used to initialize
+ an otherwise uninitialized value of the type if pragma
+ Initialize_Scalars is used, including the ability to modify the value
+ with the binder -Sxx flag and relevant environment variables at run
+ time.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Iterable,  Next: Attribute Large,  Prev: Attribute Invalid_Value,  Up: Implementation Defined Attributes
+ 
+ 4.35 Attribute Iterable
+ =======================
+ 
+ Equivalent to Aspect Iterable.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Large,  Next: Attribute Library_Level,  Prev: Attribute Iterable,  Up: Implementation Defined Attributes
+ 
+ 4.36 Attribute Large
+ ====================
+ 
+ The ‘Large’ attribute is provided for compatibility with Ada 83.  See
+ the Ada 83 reference manual for an exact description of the semantics of
+ this attribute.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Library_Level,  Next: Attribute Loop_Entry,  Prev: Attribute Large,  Up: Implementation Defined Attributes
+ 
+ 4.37 Attribute Library_Level
+ ============================
+ 
+ ‘P'Library_Level’, where P is an entity name, returns a Boolean value
+ which is True if the entity is declared at the library level, and False
+ otherwise.  Note that within a generic instantiation, the name of the
+ generic unit denotes the instance, which means that this attribute can
+ be used to test if a generic is instantiated at the library level, as
+ shown in this example:
+ 
+      generic
+        ...
+      package Gen is
+        pragma Compile_Time_Error
+          (not Gen'Library_Level,
+           "Gen can only be instantiated at library level");
+        ...
+      end Gen;
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Loop_Entry,  Next: Attribute Machine_Size,  Prev: Attribute Library_Level,  Up: Implementation Defined Attributes
+ 
+ 4.38 Attribute Loop_Entry
+ =========================
+ 
+ Syntax:
+ 
+      X'Loop_Entry [(loop_name)]
+ 
+ The ‘Loop_Entry’ attribute is used to refer to the value that an
+ expression had upon entry to a given loop in much the same way that the
+ ‘Old’ attribute in a subprogram postcondition can be used to refer to
+ the value an expression had upon entry to the subprogram.  The relevant
+ loop is either identified by the given loop name, or it is the innermost
+ enclosing loop when no loop name is given.
+ 
+ A ‘Loop_Entry’ attribute can only occur within an ‘Assert’,
+ ‘Assert_And_Cut’, ‘Assume’, ‘Loop_Variant’ or ‘Loop_Invariant’ pragma.
+ In addition, such a pragma must be one of the items in the sequence of
+ statements of a loop body, or nested inside block statements that appear
+ in the sequence of statements of a loop body.  A common use of
+ ‘Loop_Entry’ is to compare the current value of objects with their
+ initial value at loop entry, in a ‘Loop_Invariant’ pragma.
+ 
+ The effect of using ‘X'Loop_Entry’ is the same as declaring a constant
+ initialized with the initial value of ‘X’ at loop entry.  This copy is
+ not performed if the loop is not entered, or if the corresponding
+ pragmas are ignored or disabled.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Machine_Size,  Next: Attribute Mantissa,  Prev: Attribute Loop_Entry,  Up: Implementation Defined Attributes
+ 
+ 4.39 Attribute Machine_Size
+ ===========================
+ 
+ This attribute is identical to the ‘Object_Size’ attribute.  It is
+ provided for compatibility with the DEC Ada 83 attribute of this name.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Mantissa,  Next: Attribute Maximum_Alignment,  Prev: Attribute Machine_Size,  Up: Implementation Defined Attributes
+ 
+ 4.40 Attribute Mantissa
+ =======================
+ 
+ The ‘Mantissa’ attribute is provided for compatibility with Ada 83.  See
+ the Ada 83 reference manual for an exact description of the semantics of
+ this attribute.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Maximum_Alignment,  Next: Attribute Max_Integer_Size,  Prev: Attribute Mantissa,  Up: Implementation Defined Attributes
+ 
+ 4.41 Attribute Maximum_Alignment
+ ================================
+ 
+ ‘Standard'Maximum_Alignment’ (‘Standard’ is the only allowed prefix)
+ provides the maximum useful alignment value for the target.  This is a
+ static value that can be used to specify the alignment for an object,
+ guaranteeing that it is properly aligned in all cases.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Max_Integer_Size,  Next: Attribute Mechanism_Code,  Prev: Attribute Maximum_Alignment,  Up: Implementation Defined Attributes
+ 
+ 4.42 Attribute Max_Integer_Size
+ ===============================
+ 
+ ‘Standard'Max_Integer_Size’ (‘Standard’ is the only allowed prefix)
+ provides the size of the largest supported integer type for the target.
+ The result is a static constant.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Mechanism_Code,  Next: Attribute Null_Parameter,  Prev: Attribute Max_Integer_Size,  Up: Implementation Defined Attributes
+ 
+ 4.43 Attribute Mechanism_Code
+ =============================
+ 
+ ‘func'Mechanism_Code’ yields an integer code for the mechanism used for
+ the result of function ‘func’, and ‘subprog'Mechanism_Code (n)’ yields
+ the mechanism used for formal parameter number ‘n’ (a static integer
+ value, with 1 meaning the first parameter) of subprogram ‘subprog’.  The
+ code returned is:
+ 
+ ‘1’
+ 
+      by copy (value)
+ 
+ ‘2’
+ 
+      by reference
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Null_Parameter,  Next: Attribute Object_Size,  Prev: Attribute Mechanism_Code,  Up: Implementation Defined Attributes
+ 
+ 4.44 Attribute Null_Parameter
+ =============================
+ 
+ A reference ‘T'Null_Parameter’ denotes an imaginary object of type or
+ subtype ‘T’ allocated at machine address zero.  The attribute is allowed
+ only as the default expression of a formal parameter, or as an actual
+ expression of a subprogram call.  In either case, the subprogram must be
+ imported.
+ 
+ The identity of the object is represented by the address zero in the
+ argument list, independent of the passing mechanism (explicit or
+ default).
+ 
+ This capability is needed to specify that a zero address should be
+ passed for a record or other composite object passed by reference.
+ There is no way of indicating this without the ‘Null_Parameter’
+ attribute.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Object_Size,  Next: Attribute Old,  Prev: Attribute Null_Parameter,  Up: Implementation Defined Attributes
+ 
+ 4.45 Attribute Object_Size
+ ==========================
+ 
+ The size of an object is not necessarily the same as the size of the
+ type of an object.  This is because by default object sizes are
+ increased to be a multiple of the alignment of the object.  For example,
+ ‘Natural'Size’ is 31, but by default objects of type ‘Natural’ will have
+ a size of 32 bits.  Similarly, a record containing an integer and a
+ character:
+ 
+      type Rec is record
+         I : Integer;
+         C : Character;
+      end record;
+ 
+ will have a size of 40 (that is ‘Rec'Size’ will be 40).  The alignment
+ will be 4, because of the integer field, and so the default size of
+ record objects for this type will be 64 (8 bytes).
+ 
+ If the alignment of the above record is specified to be 1, then the
+ object size will be 40 (5 bytes).  This is true by default, and also an
+ object size of 40 can be explicitly specified in this case.
+ 
+ A consequence of this capability is that different object sizes can be
+ given to subtypes that would otherwise be considered in Ada to be
+ statically matching.  But it makes no sense to consider such subtypes as
+ statically matching.  Consequently, GNAT adds a rule to the static
+ matching rules that requires object sizes to match.  Consider this
+ example:
+ 
+       1. procedure BadAVConvert is
+       2.    type R is new Integer;
+       3.    subtype R1 is R range 1 .. 10;
+       4.    subtype R2 is R range 1 .. 10;
+       5.    for R1'Object_Size use 8;
+       6.    for R2'Object_Size use 16;
+       7.    type R1P is access all R1;
+       8.    type R2P is access all R2;
+       9.    R1PV : R1P := new R1'(4);
+      10.    R2PV : R2P;
+      11. begin
+      12.    R2PV := R2P (R1PV);
+                     |
+             >>> target designated subtype not compatible with
+                 type "R1" defined at line 3
+ 
+      13. end;
+ 
+ In the absence of lines 5 and 6, types ‘R1’ and ‘R2’ statically match
+ and hence the conversion on line 12 is legal.  But since lines 5 and 6
+ cause the object sizes to differ, GNAT considers that types ‘R1’ and
+ ‘R2’ are not statically matching, and line 12 generates the diagnostic
+ shown above.
+ 
+ Similar additional checks are performed in other contexts requiring
+ statically matching subtypes.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Old,  Next: Attribute Passed_By_Reference,  Prev: Attribute Object_Size,  Up: Implementation Defined Attributes
+ 
+ 4.46 Attribute Old
+ ==================
+ 
+ In addition to the usage of ‘Old’ defined in the Ada 2012 RM (usage
+ within ‘Post’ aspect), GNAT also permits the use of this attribute in
+ implementation defined pragmas ‘Postcondition’, ‘Contract_Cases’ and
+ ‘Test_Case’.  Also usages of ‘Old’ which would be illegal according to
+ the Ada 2012 RM definition are allowed under control of implementation
+ defined pragma ‘Unevaluated_Use_Of_Old’.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Passed_By_Reference,  Next: Attribute Pool_Address,  Prev: Attribute Old,  Up: Implementation Defined Attributes
+ 
+ 4.47 Attribute Passed_By_Reference
+ ==================================
+ 
+ ‘typ'Passed_By_Reference’ for any subtype ‘typ’ returns a value of type
+ ‘Boolean’ value that is ‘True’ if the type is normally passed by
+ reference and ‘False’ if the type is normally passed by copy in calls.
+ For scalar types, the result is always ‘False’ and is static.  For
+ non-scalar types, the result is nonstatic.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Pool_Address,  Next: Attribute Range_Length,  Prev: Attribute Passed_By_Reference,  Up: Implementation Defined Attributes
+ 
+ 4.48 Attribute Pool_Address
+ ===========================
+ 
+ ‘X'Pool_Address’ for any object ‘X’ returns the address of X within its
+ storage pool.  This is the same as ‘X'Address’, except that for an
+ unconstrained array whose bounds are allocated just before the first
+ component, ‘X'Pool_Address’ returns the address of those bounds, whereas
+ ‘X'Address’ returns the address of the first component.
+ 
+ Here, we are interpreting ‘storage pool’ broadly to mean ‘wherever the
+ object is allocated’, which could be a user-defined storage pool, the
+ global heap, on the stack, or in a static memory area.  For an object
+ created by ‘new’, ‘Ptr.all'Pool_Address’ is what is passed to ‘Allocate’
+ and returned from ‘Deallocate’.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Range_Length,  Next: Attribute Restriction_Set,  Prev: Attribute Pool_Address,  Up: Implementation Defined Attributes
+ 
+ 4.49 Attribute Range_Length
+ ===========================
+ 
+ ‘typ'Range_Length’ for any discrete type ‘typ’ yields the number of
+ values represented by the subtype (zero for a null range).  The result
+ is static for static subtypes.  ‘Range_Length’ applied to the index
+ subtype of a one dimensional array always gives the same result as
+ ‘Length’ applied to the array itself.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Restriction_Set,  Next: Attribute Result,  Prev: Attribute Range_Length,  Up: Implementation Defined Attributes
+ 
+ 4.50 Attribute Restriction_Set
+ ==============================
+ 
+ This attribute allows compile time testing of restrictions that are
+ currently in effect.  It is primarily intended for specializing code in
+ the run-time based on restrictions that are active (e.g.  don’t need to
+ save fpt registers if restriction No_Floating_Point is known to be in
+ effect), but can be used anywhere.
+ 
+ There are two forms:
+ 
+      System'Restriction_Set (partition_boolean_restriction_NAME)
+      System'Restriction_Set (No_Dependence => library_unit_NAME);
+ 
+ In the case of the first form, the only restriction names allowed are
+ parameterless restrictions that are checked for consistency at bind
+ time.  For a complete list see the subtype
+ ‘System.Rident.Partition_Boolean_Restrictions’.
+ 
+ The result returned is True if the restriction is known to be in effect,
+ and False if the restriction is known not to be in effect.  An important
+ guarantee is that the value of a Restriction_Set attribute is known to
+ be consistent throughout all the code of a partition.
+ 
+ This is trivially achieved if the entire partition is compiled with a
+ consistent set of restriction pragmas.  However, the compilation model
+ does not require this.  It is possible to compile one set of units with
+ one set of pragmas, and another set of units with another set of
+ pragmas.  It is even possible to compile a spec with one set of pragmas,
+ and then WITH the same spec with a different set of pragmas.
+ Inconsistencies in the actual use of the restriction are checked at bind
+ time.
+ 
+ In order to achieve the guarantee of consistency for the Restriction_Set
+ pragma, we consider that a use of the pragma that yields False is
+ equivalent to a violation of the restriction.
+ 
+ So for example if you write
+ 
+      if System'Restriction_Set (No_Floating_Point) then
+         ...
+      else
+         ...
+      end if;
+ 
+ And the result is False, so that the else branch is executed, you can
+ assume that this restriction is not set for any unit in the partition.
+ This is checked by considering this use of the restriction pragma to be
+ a violation of the restriction No_Floating_Point.  This means that no
+ other unit can attempt to set this restriction (if some unit does
+ attempt to set it, the binder will refuse to bind the partition).
+ 
+ Technical note: The restriction name and the unit name are intepreted
+ entirely syntactically, as in the corresponding Restrictions pragma,
+ they are not analyzed semantically, so they do not have a type.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Result,  Next: Attribute Safe_Emax,  Prev: Attribute Restriction_Set,  Up: Implementation Defined Attributes
+ 
+ 4.51 Attribute Result
+ =====================
+ 
+ ‘function'Result’ can only be used with in a Postcondition pragma for a
+ function.  The prefix must be the name of the corresponding function.
+ This is used to refer to the result of the function in the postcondition
+ expression.  For a further discussion of the use of this attribute and
+ examples of its use, see the description of pragma Postcondition.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Safe_Emax,  Next: Attribute Safe_Large,  Prev: Attribute Result,  Up: Implementation Defined Attributes
+ 
+ 4.52 Attribute Safe_Emax
+ ========================
+ 
+ The ‘Safe_Emax’ attribute is provided for compatibility with Ada 83.
+ See the Ada 83 reference manual for an exact description of the
+ semantics of this attribute.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Safe_Large,  Next: Attribute Safe_Small,  Prev: Attribute Safe_Emax,  Up: Implementation Defined Attributes
+ 
+ 4.53 Attribute Safe_Large
+ =========================
+ 
+ The ‘Safe_Large’ attribute is provided for compatibility with Ada 83.
+ See the Ada 83 reference manual for an exact description of the
+ semantics of this attribute.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Safe_Small,  Next: Attribute Scalar_Storage_Order,  Prev: Attribute Safe_Large,  Up: Implementation Defined Attributes
+ 
+ 4.54 Attribute Safe_Small
+ =========================
+ 
+ The ‘Safe_Small’ attribute is provided for compatibility with Ada 83.
+ See the Ada 83 reference manual for an exact description of the
+ semantics of this attribute.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Scalar_Storage_Order,  Next: Attribute Simple_Storage_Pool,  Prev: Attribute Safe_Small,  Up: Implementation Defined Attributes
+ 
+ 4.55 Attribute Scalar_Storage_Order
+ ===================================
+ 
+ For every array or record type ‘S’, the representation attribute
+ ‘Scalar_Storage_Order’ denotes the order in which storage elements that
+ make up scalar components are ordered within S. The value given must be
+ a static expression of type System.Bit_Order.  The following is an
+ example of the use of this feature:
+ 
+      --  Component type definitions
+ 
+      subtype Yr_Type is Natural range 0 .. 127;
+      subtype Mo_Type is Natural range 1 .. 12;
+      subtype Da_Type is Natural range 1 .. 31;
+ 
+      --  Record declaration
+ 
+      type Date is record
+         Years_Since_1980 : Yr_Type;
+         Month            : Mo_Type;
+         Day_Of_Month     : Da_Type;
+      end record;
+ 
+      --  Record representation clause
+ 
+      for Date use record
+         Years_Since_1980 at 0 range 0  ..  6;
+         Month            at 0 range 7  .. 10;
+         Day_Of_Month     at 0 range 11 .. 15;
+      end record;
+ 
+      --  Attribute definition clauses
+ 
+      for Date'Bit_Order use System.High_Order_First;
+      for Date'Scalar_Storage_Order use System.High_Order_First;
+      --  If Scalar_Storage_Order is specified, it must be consistent with
+      --  Bit_Order, so it's best to always define the latter explicitly if
+      --  the former is used.
+ 
+ Other properties are as for the standard representation attribute
+ ‘Bit_Order’ defined by Ada RM 13.5.3(4).  The default is
+ ‘System.Default_Bit_Order’.
+ 
+ For a record type ‘T’, if ‘T'Scalar_Storage_Order’ is specified
+ explicitly, it shall be equal to ‘T'Bit_Order’.  Note: this means that
+ if a ‘Scalar_Storage_Order’ attribute definition clause is not
+ confirming, then the type’s ‘Bit_Order’ shall be specified explicitly
+ and set to the same value.
+ 
+ Derived types inherit an explicitly set scalar storage order from their
+ parent types.  This may be overridden for the derived type by giving an
+ explicit scalar storage order for it.  However, for a record extension,
+ the derived type must have the same scalar storage order as the parent
+ type.
+ 
+ A component of a record type that is itself a record or an array and
+ that does not start and end on a byte boundary must have have the same
+ scalar storage order as the record type.  A component of a bit-packed
+ array type that is itself a record or an array must have the same scalar
+ storage order as the array type.
+ 
+ No component of a type that has an explicit ‘Scalar_Storage_Order’
+ attribute definition may be aliased.
+ 
+ A confirming ‘Scalar_Storage_Order’ attribute definition clause (i.e.
+ with a value equal to ‘System.Default_Bit_Order’) has no effect.
+ 
+ If the opposite storage order is specified, then whenever the value of a
+ scalar component of an object of type ‘S’ is read, the storage elements
+ of the enclosing machine scalar are first reversed (before retrieving
+ the component value, possibly applying some shift and mask operatings on
+ the enclosing machine scalar), and the opposite operation is done for
+ writes.
+ 
+ In that case, the restrictions set forth in 13.5.1(10.3/2) for scalar
+ components are relaxed.  Instead, the following rules apply:
+ 
+    * the underlying storage elements are those at positions ‘(position +
+      first_bit / storage_element_size) .. (position + (last_bit +
+      storage_element_size - 1) / storage_element_size)’
+ 
+    * the sequence of underlying storage elements shall have a size no
+      greater than the largest machine scalar
+ 
+    * the enclosing machine scalar is defined as the smallest machine
+      scalar starting at a position no greater than ‘position + first_bit
+      / storage_element_size’ and covering storage elements at least up
+      to ‘position + (last_bit + storage_element_size - 1) /
+      storage_element_size’
+ 
+    * the position of the component is interpreted relative to that
+      machine scalar.
+ 
+ If no scalar storage order is specified for a type (either directly, or
+ by inheritance in the case of a derived type), then the default is
+ normally the native ordering of the target, but this default can be
+ overridden using pragma ‘Default_Scalar_Storage_Order’.
+ 
+ If a component of ‘T’ is itself of a record or array type, the specfied
+ ‘Scalar_Storage_Order’ does ‘not’ apply to that nested type: an explicit
+ attribute definition clause must be provided for the component type as
+ well if desired.
+ 
+ Representation changes that explicitly or implicitly toggle the scalar
+ storage order are not supported and may result in erroneous execution of
+ the program, except when performed by means of an instance of
+ ‘Ada.Unchecked_Conversion’.
+ 
+ In particular, overlays are not supported and a warning is given for
+ them:
+ 
+      type Rec_LE is record
+         I : Integer;
+      end record;
+ 
+      for Rec_LE use record
+         I at 0 range 0 .. 31;
+      end record;
+ 
+      for Rec_LE'Bit_Order use System.Low_Order_First;
+      for Rec_LE'Scalar_Storage_Order use System.Low_Order_First;
+ 
+      type Rec_BE is record
+         I : Integer;
+      end record;
+ 
+      for Rec_BE use record
+         I at 0 range 0 .. 31;
+      end record;
+ 
+      for Rec_BE'Bit_Order use System.High_Order_First;
+      for Rec_BE'Scalar_Storage_Order use System.High_Order_First;
+ 
+      R_LE : Rec_LE;
+ 
+      R_BE : Rec_BE;
+      for R_BE'Address use R_LE'Address;
+ 
+ ‘warning: overlay changes scalar storage order [enabled by default]’
+ 
+ In most cases, such representation changes ought to be replaced by an
+ instantiation of a function or procedure provided by
+ ‘GNAT.Byte_Swapping’.
+ 
+ Note that the scalar storage order only affects the in-memory data
+ representation.  It has no effect on the representation used by stream
+ attributes.
+ 
+ Note that debuggers may be unable to display the correct value of scalar
+ components of a type for which the opposite storage order is specified.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Simple_Storage_Pool,  Next: Attribute Small,  Prev: Attribute Scalar_Storage_Order,  Up: Implementation Defined Attributes
+ 
+ 4.56 Attribute Simple_Storage_Pool
+ ==================================
+ 
+ For every nonformal, nonderived access-to-object type ‘Acc’, the
+ representation attribute ‘Simple_Storage_Pool’ may be specified via an
+ attribute_definition_clause (or by specifying the equivalent aspect):
+ 
+      My_Pool : My_Simple_Storage_Pool_Type;
+ 
+      type Acc is access My_Data_Type;
+ 
+      for Acc'Simple_Storage_Pool use My_Pool;
+ 
+ The name given in an attribute_definition_clause for the
+ ‘Simple_Storage_Pool’ attribute shall denote a variable of a ‘simple
+ storage pool type’ (see pragma ‘Simple_Storage_Pool_Type’).
+ 
+ The use of this attribute is only allowed for a prefix denoting a type
+ for which it has been specified.  The type of the attribute is the type
+ of the variable specified as the simple storage pool of the access type,
+ and the attribute denotes that variable.
+ 
+ It is illegal to specify both ‘Storage_Pool’ and ‘Simple_Storage_Pool’
+ for the same access type.
+ 
+ If the ‘Simple_Storage_Pool’ attribute has been specified for an access
+ type, then applying the ‘Storage_Pool’ attribute to the type is flagged
+ with a warning and its evaluation raises the exception ‘Program_Error’.
+ 
+ If the Simple_Storage_Pool attribute has been specified for an access
+ type ‘S’, then the evaluation of the attribute ‘S'Storage_Size’ returns
+ the result of calling ‘Storage_Size (S'Simple_Storage_Pool)’, which is
+ intended to indicate the number of storage elements reserved for the
+ simple storage pool.  If the Storage_Size function has not been defined
+ for the simple storage pool type, then this attribute returns zero.
+ 
+ If an access type ‘S’ has a specified simple storage pool of type ‘SSP’,
+ then the evaluation of an allocator for that access type calls the
+ primitive ‘Allocate’ procedure for type ‘SSP’, passing
+ ‘S'Simple_Storage_Pool’ as the pool parameter.  The detailed semantics
+ of such allocators is the same as those defined for allocators in
+ section 13.11 of the ‘Ada Reference Manual’, with the term ‘simple
+ storage pool’ substituted for ‘storage pool’.
+ 
+ If an access type ‘S’ has a specified simple storage pool of type ‘SSP’,
+ then a call to an instance of the ‘Ada.Unchecked_Deallocation’ for that
+ access type invokes the primitive ‘Deallocate’ procedure for type ‘SSP’,
+ passing ‘S'Simple_Storage_Pool’ as the pool parameter.  The detailed
+ semantics of such unchecked deallocations is the same as defined in
+ section 13.11.2 of the Ada Reference Manual, except that the term
+ ‘simple storage pool’ is substituted for ‘storage pool’.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Small,  Next: Attribute Small_Denominator,  Prev: Attribute Simple_Storage_Pool,  Up: Implementation Defined Attributes
+ 
+ 4.57 Attribute Small
+ ====================
+ 
+ The ‘Small’ attribute is defined in Ada 95 (and Ada 2005) only for
+ fixed-point types.  GNAT also allows this attribute to be applied to
+ floating-point types for compatibility with Ada 83.  See the Ada 83
+ reference manual for an exact description of the semantics of this
+ attribute when applied to floating-point types.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Small_Denominator,  Next: Attribute Small_Numerator,  Prev: Attribute Small,  Up: Implementation Defined Attributes
+ 
+ 4.58 Attribute Small_Denominator
+ ================================
+ 
+ ‘typ'Small_Denominator’ for any fixed-point subtype ‘typ’ yields the
+ denominator in the representation of ‘typ'Small’ as a rational number
+ with coprime factors (i.e.  as an irreducible fraction).
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Small_Numerator,  Next: Attribute Storage_Unit,  Prev: Attribute Small_Denominator,  Up: Implementation Defined Attributes
+ 
+ 4.59 Attribute Small_Numerator
+ ==============================
+ 
+ ‘typ'Small_Numerator’ for any fixed-point subtype ‘typ’ yields the
+ numerator in the representation of ‘typ'Small’ as a rational number with
+ coprime factors (i.e.  as an irreducible fraction).
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Storage_Unit,  Next: Attribute Stub_Type,  Prev: Attribute Small_Numerator,  Up: Implementation Defined Attributes
+ 
+ 4.60 Attribute Storage_Unit
+ ===========================
+ 
+ ‘Standard'Storage_Unit’ (‘Standard’ is the only allowed prefix) provides
+ the same value as ‘System.Storage_Unit’.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Stub_Type,  Next: Attribute System_Allocator_Alignment,  Prev: Attribute Storage_Unit,  Up: Implementation Defined Attributes
+ 
+ 4.61 Attribute Stub_Type
+ ========================
+ 
+ The GNAT implementation of remote access-to-classwide types is organized
+ as described in AARM section E.4 (20.t): a value of an RACW type
+ (designating a remote object) is represented as a normal access value,
+ pointing to a “stub” object which in turn contains the necessary
+ information to contact the designated remote object.  A call on any
+ dispatching operation of such a stub object does the remote call, if
+ necessary, using the information in the stub object to locate the target
+ partition, etc.
+ 
+ For a prefix ‘T’ that denotes a remote access-to-classwide type,
+ ‘T'Stub_Type’ denotes the type of the corresponding stub objects.
+ 
+ By construction, the layout of ‘T'Stub_Type’ is identical to that of
+ type ‘RACW_Stub_Type’ declared in the internal implementation-defined
+ unit ‘System.Partition_Interface’.  Use of this attribute will create an
+ implicit dependency on this unit.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute System_Allocator_Alignment,  Next: Attribute Target_Name,  Prev: Attribute Stub_Type,  Up: Implementation Defined Attributes
+ 
+ 4.62 Attribute System_Allocator_Alignment
+ =========================================
+ 
+ ‘Standard'System_Allocator_Alignment’ (‘Standard’ is the only allowed
+ prefix) provides the observable guaranteed to be honored by the system
+ allocator (malloc).  This is a static value that can be used in user
+ storage pools based on malloc either to reject allocation with alignment
+ too large or to enable a realignment circuitry if the alignment request
+ is larger than this value.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Target_Name,  Next: Attribute To_Address,  Prev: Attribute System_Allocator_Alignment,  Up: Implementation Defined Attributes
+ 
+ 4.63 Attribute Target_Name
+ ==========================
+ 
+ ‘Standard'Target_Name’ (‘Standard’ is the only allowed prefix) provides
+ a static string value that identifies the target for the current
+ compilation.  For GCC implementations, this is the standard gcc target
+ name without the terminating slash (for example, GNAT 5.0 on windows
+ yields “i586-pc-mingw32msv”).
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute To_Address,  Next: Attribute To_Any,  Prev: Attribute Target_Name,  Up: Implementation Defined Attributes
+ 
+ 4.64 Attribute To_Address
+ =========================
+ 
+ The ‘System'To_Address’ (‘System’ is the only allowed prefix) denotes a
+ function identical to ‘System.Storage_Elements.To_Address’ except that
+ it is a static attribute.  This means that if its argument is a static
+ expression, then the result of the attribute is a static expression.
+ This means that such an expression can be used in contexts (e.g.,
+ preelaborable packages) which require a static expression and where the
+ function call could not be used (since the function call is always
+ nonstatic, even if its argument is static).  The argument must be in the
+ range -(2**(m-1)) ..  2**m-1, where m is the memory size (typically 32
+ or 64).  Negative values are intepreted in a modular manner (e.g., -1
+ means the same as 16#FFFF_FFFF# on a 32 bits machine).
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute To_Any,  Next: Attribute Type_Class,  Prev: Attribute To_Address,  Up: Implementation Defined Attributes
+ 
+ 4.65 Attribute To_Any
+ =====================
+ 
+ This internal attribute is used for the generation of remote subprogram
+ stubs in the context of the Distributed Systems Annex.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Type_Class,  Next: Attribute Type_Key,  Prev: Attribute To_Any,  Up: Implementation Defined Attributes
+ 
+ 4.66 Attribute Type_Class
+ =========================
+ 
+ ‘typ'Type_Class’ for any type or subtype ‘typ’ yields the value of the
+ type class for the full type of ‘typ’.  If ‘typ’ is a generic formal
+ type, the value is the value for the corresponding actual subtype.  The
+ value of this attribute is of type ‘System.Aux_DEC.Type_Class’, which
+ has the following definition:
+ 
+      type Type_Class is
+        (Type_Class_Enumeration,
+         Type_Class_Integer,
+         Type_Class_Fixed_Point,
+         Type_Class_Floating_Point,
+         Type_Class_Array,
+         Type_Class_Record,
+         Type_Class_Access,
+         Type_Class_Task,
+         Type_Class_Address);
+ 
+ Protected types yield the value ‘Type_Class_Task’, which thus applies to
+ all concurrent types.  This attribute is designed to be compatible with
+ the DEC Ada 83 attribute of the same name.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Type_Key,  Next: Attribute TypeCode,  Prev: Attribute Type_Class,  Up: Implementation Defined Attributes
+ 
+ 4.67 Attribute Type_Key
+ =======================
+ 
+ The ‘Type_Key’ attribute is applicable to a type or subtype and yields a
+ value of type Standard.String containing encoded information about the
+ type or subtype.  This provides improved compatibility with other
+ implementations that support this attribute.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute TypeCode,  Next: Attribute Unconstrained_Array,  Prev: Attribute Type_Key,  Up: Implementation Defined Attributes
+ 
+ 4.68 Attribute TypeCode
+ =======================
+ 
+ This internal attribute is used for the generation of remote subprogram
+ stubs in the context of the Distributed Systems Annex.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Unconstrained_Array,  Next: Attribute Universal_Literal_String,  Prev: Attribute TypeCode,  Up: Implementation Defined Attributes
+ 
+ 4.69 Attribute Unconstrained_Array
+ ==================================
+ 
+ The ‘Unconstrained_Array’ attribute can be used with a prefix that
+ denotes any type or subtype.  It is a static attribute that yields
+ ‘True’ if the prefix designates an unconstrained array, and ‘False’
+ otherwise.  In a generic instance, the result is still static, and
+ yields the result of applying this test to the generic actual.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Universal_Literal_String,  Next: Attribute Unrestricted_Access,  Prev: Attribute Unconstrained_Array,  Up: Implementation Defined Attributes
+ 
+ 4.70 Attribute Universal_Literal_String
+ =======================================
+ 
+ The prefix of ‘Universal_Literal_String’ must be a named number.  The
+ static result is the string consisting of the characters of the number
+ as defined in the original source.  This allows the user program to
+ access the actual text of named numbers without intermediate conversions
+ and without the need to enclose the strings in quotes (which would
+ preclude their use as numbers).
+ 
+ For example, the following program prints the first 50 digits of pi:
+ 
+      with Text_IO; use Text_IO;
+      with Ada.Numerics;
+      procedure Pi is
+      begin
+         Put (Ada.Numerics.Pi'Universal_Literal_String);
+      end;
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Unrestricted_Access,  Next: Attribute Update,  Prev: Attribute Universal_Literal_String,  Up: Implementation Defined Attributes
+ 
+ 4.71 Attribute Unrestricted_Access
+ ==================================
+ 
+ The ‘Unrestricted_Access’ attribute is similar to ‘Access’ except that
+ all accessibility and aliased view checks are omitted.  This is a
+ user-beware attribute.
+ 
+ For objects, it is similar to ‘Address’, for which it is a desirable
+ replacement where the value desired is an access type.  In other words,
+ its effect is similar to first applying the ‘Address’ attribute and then
+ doing an unchecked conversion to a desired access type.
+ 
+ For subprograms, ‘P'Unrestricted_Access’ may be used where ‘P'Access’
+ would be illegal, to construct a value of a less-nested named access
+ type that designates a more-nested subprogram.  This value may be used
+ in indirect calls, so long as the more-nested subprogram still exists;
+ once the subprogram containing it has returned, such calls are
+ erroneous.  For example:
+ 
+      package body P is
+ 
+         type Less_Nested is not null access procedure;
+         Global : Less_Nested;
+ 
+         procedure P1 is
+         begin
+            Global.all;
+         end P1;
+ 
+         procedure P2 is
+            Local_Var : Integer;
+ 
+            procedure More_Nested is
+            begin
+               ... Local_Var ...
+            end More_Nested;
+         begin
+            Global := More_Nested'Unrestricted_Access;
+            P1;
+         end P2;
+ 
+      end P;
+ 
+ When P1 is called from P2, the call via Global is OK, but if P1 were
+ called after P2 returns, it would be an erroneous use of a dangling
+ pointer.
+ 
+ For objects, it is possible to use ‘Unrestricted_Access’ for any type.
+ However, if the result is of an access-to-unconstrained array subtype,
+ then the resulting pointer has the same scope as the context of the
+ attribute, and must not be returned to some enclosing scope.  For
+ instance, if a function uses ‘Unrestricted_Access’ to create an
+ access-to-unconstrained-array and returns that value to the caller, the
+ result will involve dangling pointers.  In addition, it is only valid to
+ create pointers to unconstrained arrays using this attribute if the
+ pointer has the normal default ‘fat’ representation where a pointer has
+ two components, one points to the array and one points to the bounds.
+ If a size clause is used to force ‘thin’ representation for a pointer to
+ unconstrained where there is only space for a single pointer, then the
+ resulting pointer is not usable.
+ 
+ In the simple case where a direct use of Unrestricted_Access attempts to
+ make a thin pointer for a non-aliased object, the compiler will reject
+ the use as illegal, as shown in the following example:
+ 
+      with System; use System;
+      procedure SliceUA2 is
+         type A is access all String;
+         for A'Size use Standard'Address_Size;
+ 
+         procedure P (Arg : A) is
+         begin
+            null;
+         end P;
+ 
+         X : String := "hello world!";
+         X2 : aliased String := "hello world!";
+ 
+         AV : A := X'Unrestricted_Access;    -- ERROR
+                   |
+      >>> illegal use of Unrestricted_Access attribute
+      >>> attempt to generate thin pointer to unaliased object
+ 
+      begin
+         P (X'Unrestricted_Access);          -- ERROR
+            |
+      >>> illegal use of Unrestricted_Access attribute
+      >>> attempt to generate thin pointer to unaliased object
+ 
+         P (X(7 .. 12)'Unrestricted_Access); -- ERROR
+            |
+      >>> illegal use of Unrestricted_Access attribute
+      >>> attempt to generate thin pointer to unaliased object
+ 
+         P (X2'Unrestricted_Access);         -- OK
+      end;
+ 
+ but other cases cannot be detected by the compiler, and are considered
+ to be erroneous.  Consider the following example:
+ 
+      with System; use System;
+      with System; use System;
+      procedure SliceUA is
+         type AF is access all String;
+ 
+         type A is access all String;
+         for A'Size use Standard'Address_Size;
+ 
+         procedure P (Arg : A) is
+         begin
+            if Arg'Length /= 6 then
+               raise Program_Error;
+            end if;
+         end P;
+ 
+         X : String := "hello world!";
+         Y : AF := X (7 .. 12)'Unrestricted_Access;
+ 
+      begin
+         P (A (Y));
+      end;
+ 
+ A normal unconstrained array value or a constrained array object marked
+ as aliased has the bounds in memory just before the array, so a thin
+ pointer can retrieve both the data and the bounds.  But in this case,
+ the non-aliased object ‘X’ does not have the bounds before the string.
+ If the size clause for type ‘A’ were not present, then the pointer would
+ be a fat pointer, where one component is a pointer to the bounds, and
+ all would be well.  But with the size clause present, the conversion
+ from fat pointer to thin pointer in the call loses the bounds, and so
+ this is erroneous, and the program likely raises a ‘Program_Error’
+ exception.
+ 
+ In general, it is advisable to completely avoid mixing the use of thin
+ pointers and the use of ‘Unrestricted_Access’ where the designated type
+ is an unconstrained array.  The use of thin pointers should be
+ restricted to cases of porting legacy code that implicitly assumes the
+ size of pointers, and such code should not in any case be using this
+ attribute.
+ 
+ Another erroneous situation arises if the attribute is applied to a
+ constant.  The resulting pointer can be used to access the constant, but
+ the effect of trying to modify a constant in this manner is not
+ well-defined.  Consider this example:
+ 
+      P : constant Integer := 4;
+      type R is access all Integer;
+      RV : R := P'Unrestricted_Access;
+      ..
+      RV.all := 3;
+ 
+ Here we attempt to modify the constant P from 4 to 3, but the compiler
+ may or may not notice this attempt, and subsequent references to P may
+ yield either the value 3 or the value 4 or the assignment may blow up if
+ the compiler decides to put P in read-only memory.  One particular case
+ where ‘Unrestricted_Access’ can be used in this way is to modify the
+ value of an ‘in’ parameter:
+ 
+      procedure K (S : in String) is
+         type R is access all Character;
+         RV : R := S (3)'Unrestricted_Access;
+      begin
+         RV.all := 'a';
+      end;
+ 
+ In general this is a risky approach.  It may appear to “work” but such
+ uses of ‘Unrestricted_Access’ are potentially non-portable, even from
+ one version of GNAT to another, so are best avoided if possible.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Update,  Next: Attribute Valid_Value,  Prev: Attribute Unrestricted_Access,  Up: Implementation Defined Attributes
+ 
+ 4.72 Attribute Update
+ =====================
+ 
+ The ‘Update’ attribute creates a copy of an array or record value with
+ one or more modified components.  The syntax is:
+ 
+      PREFIX'Update ( RECORD_COMPONENT_ASSOCIATION_LIST )
+      PREFIX'Update ( ARRAY_COMPONENT_ASSOCIATION {, ARRAY_COMPONENT_ASSOCIATION } )
+      PREFIX'Update ( MULTIDIMENSIONAL_ARRAY_COMPONENT_ASSOCIATION
+                      {, MULTIDIMENSIONAL_ARRAY_COMPONENT_ASSOCIATION } )
+ 
+      MULTIDIMENSIONAL_ARRAY_COMPONENT_ASSOCIATION ::= INDEX_EXPRESSION_LIST_LIST => EXPRESSION
+      INDEX_EXPRESSION_LIST_LIST                   ::= INDEX_EXPRESSION_LIST {| INDEX_EXPRESSION_LIST }
+      INDEX_EXPRESSION_LIST                        ::= ( EXPRESSION {, EXPRESSION } )
+ 
+ where ‘PREFIX’ is the name of an array or record object, the association
+ list in parentheses does not contain an ‘others’ choice and the box
+ symbol ‘<>’ may not appear in any expression.  The effect is to yield a
+ copy of the array or record value which is unchanged apart from the
+ components mentioned in the association list, which are changed to the
+ indicated value.  The original value of the array or record value is not
+ affected.  For example:
+ 
+      type Arr is Array (1 .. 5) of Integer;
+      ...
+      Avar1 : Arr := (1,2,3,4,5);
+      Avar2 : Arr := Avar1'Update (2 => 10, 3 .. 4 => 20);
+ 
+ yields a value for ‘Avar2’ of 1,10,20,20,5 with ‘Avar1’ begin
+ unmodified.  Similarly:
+ 
+      type Rec is A, B, C : Integer;
+      ...
+      Rvar1 : Rec := (A => 1, B => 2, C => 3);
+      Rvar2 : Rec := Rvar1'Update (B => 20);
+ 
+ yields a value for ‘Rvar2’ of (A => 1, B => 20, C => 3), with ‘Rvar1’
+ being unmodifed.  Note that the value of the attribute reference is
+ computed completely before it is used.  This means that if you write:
+ 
+      Avar1 := Avar1'Update (1 => 10, 2 => Function_Call);
+ 
+ then the value of ‘Avar1’ is not modified if ‘Function_Call’ raises an
+ exception, unlike the effect of a series of direct assignments to
+ elements of ‘Avar1’.  In general this requires that two extra complete
+ copies of the object are required, which should be kept in mind when
+ considering efficiency.
+ 
+ The ‘Update’ attribute cannot be applied to prefixes of a limited type,
+ and cannot reference discriminants in the case of a record type.  The
+ accessibility level of an Update attribute result object is defined as
+ for an aggregate.
+ 
+ In the record case, no component can be mentioned more than once.  In
+ the array case, two overlapping ranges can appear in the association
+ list, in which case the modifications are processed left to right.
+ 
+ Multi-dimensional arrays can be modified, as shown by this example:
+ 
+      A : array (1 .. 10, 1 .. 10) of Integer;
+      ..
+      A := A'Update ((1, 2) => 20, (3, 4) => 30);
+ 
+ which changes element (1,2) to 20 and (3,4) to 30.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Valid_Value,  Next: Attribute Valid_Scalars,  Prev: Attribute Update,  Up: Implementation Defined Attributes
+ 
+ 4.73 Attribute Valid_Value
+ ==========================
+ 
+ The ‘'Valid_Value’ attribute is defined for enumeration types other than
+ those in package Standard.  This attribute is a function that takes a
+ String, and returns Boolean.  ‘T'Valid_Value (S)’ returns True if and
+ only if ‘T'Value (S)’ would not raise Constraint_Error.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Valid_Scalars,  Next: Attribute VADS_Size,  Prev: Attribute Valid_Value,  Up: Implementation Defined Attributes
+ 
+ 4.74 Attribute Valid_Scalars
+ ============================
+ 
+ The ‘'Valid_Scalars’ attribute is intended to make it easier to check
+ the validity of scalar subcomponents of composite objects.  The
+ attribute is defined for any prefix ‘P’ which denotes an object.  Prefix
+ ‘P’ can be any type except for tagged private or ‘Unchecked_Union’
+ types.  The value of the attribute is of type ‘Boolean’.
+ 
+ ‘P'Valid_Scalars’ yields ‘True’ if and only if the evaluation of
+ ‘C'Valid’ yields ‘True’ for every scalar subcomponent ‘C’ of ‘P’, or if
+ ‘P’ has no scalar subcomponents.  Attribute ‘'Valid_Scalars’ is
+ equivalent to attribute ‘'Valid’ for scalar types.
+ 
+ It is not specified in what order the subcomponents are checked, nor
+ whether any more are checked after any one of them is determined to be
+ invalid.  If the prefix ‘P’ is of a class-wide type ‘T'Class’ (where ‘T’
+ is the associated specific type), or if the prefix ‘P’ is of a specific
+ tagged type ‘T’, then only the subcomponents of ‘T’ are checked; in
+ other words, components of extensions of ‘T’ are not checked even if
+ ‘T'Class (P)'Tag /= T'Tag’.
+ 
+ The compiler will issue a warning if it can be determined at compile
+ time that the prefix of the attribute has no scalar subcomponents.
+ 
+ Note: ‘Valid_Scalars’ can generate a lot of code, especially in the case
+ of a large variant record.  If the attribute is called in many places in
+ the same program applied to objects of the same type, it can reduce
+ program size to write a function with a single use of the attribute, and
+ then call that function from multiple places.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute VADS_Size,  Next: Attribute Value_Size,  Prev: Attribute Valid_Scalars,  Up: Implementation Defined Attributes
+ 
+ 4.75 Attribute VADS_Size
+ ========================
+ 
+ The ‘'VADS_Size’ attribute is intended to make it easier to port legacy
+ code which relies on the semantics of ‘'Size’ as implemented by the VADS
+ Ada 83 compiler.  GNAT makes a best effort at duplicating the same
+ semantic interpretation.  In particular, ‘'VADS_Size’ applied to a
+ predefined or other primitive type with no Size clause yields the
+ Object_Size (for example, ‘Natural'Size’ is 32 rather than 31 on typical
+ machines).  In addition ‘'VADS_Size’ applied to an object gives the
+ result that would be obtained by applying the attribute to the
+ corresponding type.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Value_Size,  Next: Attribute Wchar_T_Size,  Prev: Attribute VADS_Size,  Up: Implementation Defined Attributes
+ 
+ 4.76 Attribute Value_Size
+ =========================
+ 
+ ‘type'Value_Size’ is the number of bits required to represent a value of
+ the given subtype.  It is the same as ‘type'Size’, but, unlike ‘Size’,
+ may be set for non-first subtypes.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Wchar_T_Size,  Next: Attribute Word_Size,  Prev: Attribute Value_Size,  Up: Implementation Defined Attributes
+ 
+ 4.77 Attribute Wchar_T_Size
+ ===========================
+ 
+ ‘Standard'Wchar_T_Size’ (‘Standard’ is the only allowed prefix) provides
+ the size in bits of the C ‘wchar_t’ type primarily for constructing the
+ definition of this type in package ‘Interfaces.C’.  The result is a
+ static constant.
+ 
+ 
+ File: gnat_rm.info,  Node: Attribute Word_Size,  Prev: Attribute Wchar_T_Size,  Up: Implementation Defined Attributes
+ 
+ 4.78 Attribute Word_Size
+ ========================
+ 
+ ‘Standard'Word_Size’ (‘Standard’ is the only allowed prefix) provides
+ the value ‘System.Word_Size’.  The result is a static constant.
+ 
+ 
+ File: gnat_rm.info,  Node: Standard and Implementation Defined Restrictions,  Next: Implementation Advice,  Prev: Implementation Defined Attributes,  Up: Top
+ 
+ 5 Standard and Implementation Defined Restrictions
+ **************************************************
+ 
+ All Ada Reference Manual-defined Restriction identifiers are
+ implemented:
+ 
+    * language-defined restrictions (see 13.12.1)
+ 
+    * tasking restrictions (see D.7)
+ 
+    * high integrity restrictions (see H.4)
+ 
+ GNAT implements additional restriction identifiers.  All restrictions,
+ whether language defined or GNAT-specific, are listed in the following.
+ 
+ * Menu:
+ 
+ * Partition-Wide Restrictions::
+ * Program Unit Level Restrictions::
+ 
+ 
+ File: gnat_rm.info,  Node: Partition-Wide Restrictions,  Next: Program Unit Level Restrictions,  Up: Standard and Implementation Defined Restrictions
+ 
+ 5.1 Partition-Wide Restrictions
+ ===============================
+ 
+ There are two separate lists of restriction identifiers.  The first set
+ requires consistency throughout a partition (in other words, if the
+ restriction identifier is used for any compilation unit in the
+ partition, then all compilation units in the partition must obey the
+ restriction).
+ 
+ * Menu:
+ 
+ * Immediate_Reclamation::
+ * Max_Asynchronous_Select_Nesting::
+ * Max_Entry_Queue_Length::
+ * Max_Protected_Entries::
+ * Max_Select_Alternatives::
+ * Max_Storage_At_Blocking::
+ * Max_Task_Entries::
+ * Max_Tasks::
+ * No_Abort_Statements::
+ * No_Access_Parameter_Allocators::
+ * No_Access_Subprograms::
+ * No_Allocators::
+ * No_Anonymous_Allocators::
+ * No_Asynchronous_Control::
+ * No_Calendar::
+ * No_Coextensions::
+ * No_Default_Initialization::
+ * No_Delay::
+ * No_Dependence::
+ * No_Direct_Boolean_Operators::
+ * No_Dispatch::
+ * No_Dispatching_Calls::
+ * No_Dynamic_Attachment::
+ * No_Dynamic_Priorities::
+ * No_Entry_Calls_In_Elaboration_Code::
+ * No_Enumeration_Maps::
+ * No_Exception_Handlers::
+ * No_Exception_Propagation::
+ * No_Exception_Registration::
+ * No_Exceptions::
+ * No_Finalization::
+ * No_Fixed_Point::
+ * No_Floating_Point::
+ * No_Implicit_Conditionals::
+ * No_Implicit_Dynamic_Code::
+ * No_Implicit_Heap_Allocations::
+ * No_Implicit_Protected_Object_Allocations::
+ * No_Implicit_Task_Allocations::
+ * No_Initialize_Scalars::
+ * No_IO::
+ * No_Local_Allocators::
+ * No_Local_Protected_Objects::
+ * No_Local_Tagged_Types::
+ * No_Local_Timing_Events::
+ * No_Long_Long_Integers::
+ * No_Multiple_Elaboration::
+ * No_Nested_Finalization::
+ * No_Protected_Type_Allocators::
+ * No_Protected_Types::
+ * No_Recursion::
+ * No_Reentrancy::
+ * No_Relative_Delay::
+ * No_Requeue_Statements::
+ * No_Secondary_Stack::
+ * No_Select_Statements::
+ * No_Specific_Termination_Handlers::
+ * No_Specification_of_Aspect::
+ * No_Standard_Allocators_After_Elaboration::
+ * No_Standard_Storage_Pools::
+ * No_Stream_Optimizations::
+ * No_Streams::
+ * No_Tagged_Type_Registration::
+ * No_Task_Allocators::
+ * No_Task_At_Interrupt_Priority::
+ * No_Task_Attributes_Package::
+ * No_Task_Hierarchy::
+ * No_Task_Termination::
+ * No_Tasking::
+ * No_Terminate_Alternatives::
+ * No_Unchecked_Access::
+ * No_Unchecked_Conversion::
+ * No_Unchecked_Deallocation::
+ * No_Use_Of_Entity::
+ * Pure_Barriers::
+ * Simple_Barriers::
+ * Static_Priorities::
+ * Static_Storage_Size::
+ 
+ 
+ File: gnat_rm.info,  Node: Immediate_Reclamation,  Next: Max_Asynchronous_Select_Nesting,  Up: Partition-Wide Restrictions
+ 
+ 5.1.1 Immediate_Reclamation
+ ---------------------------
+ 
+ [RM H.4] This restriction ensures that, except for storage occupied by
+ objects created by allocators and not deallocated via unchecked
+ deallocation, any storage reserved at run time for an object is
+ immediately reclaimed when the object no longer exists.
+ 
+ 
+ File: gnat_rm.info,  Node: Max_Asynchronous_Select_Nesting,  Next: Max_Entry_Queue_Length,  Prev: Immediate_Reclamation,  Up: Partition-Wide Restrictions
+ 
+ 5.1.2 Max_Asynchronous_Select_Nesting
+ -------------------------------------
+ 
+ [RM D.7] Specifies the maximum dynamic nesting level of asynchronous
+ selects.  Violations of this restriction with a value of zero are
+ detected at compile time.  Violations of this restriction with values
+ other than zero cause Storage_Error to be raised.
+ 
+ 
+ File: gnat_rm.info,  Node: Max_Entry_Queue_Length,  Next: Max_Protected_Entries,  Prev: Max_Asynchronous_Select_Nesting,  Up: Partition-Wide Restrictions
+ 
+ 5.1.3 Max_Entry_Queue_Length
+ ----------------------------
+ 
+ [RM D.7] This restriction is a declaration that any protected entry
+ compiled in the scope of the restriction has at most the specified
+ number of tasks waiting on the entry at any one time, and so no queue is
+ required.  Note that this restriction is checked at run time.  Violation
+ of this restriction results in the raising of Program_Error exception at
+ the point of the call.
+ 
+ The restriction ‘Max_Entry_Queue_Depth’ is recognized as a synonym for
+ ‘Max_Entry_Queue_Length’.  This is retained for historical compatibility
+ purposes (and a warning will be generated for its use if warnings on
+ obsolescent features are activated).
+ 
+ 
+ File: gnat_rm.info,  Node: Max_Protected_Entries,  Next: Max_Select_Alternatives,  Prev: Max_Entry_Queue_Length,  Up: Partition-Wide Restrictions
+ 
+ 5.1.4 Max_Protected_Entries
+ ---------------------------
+ 
+ [RM D.7] Specifies the maximum number of entries per protected type.
+ The bounds of every entry family of a protected unit shall be static, or
+ shall be defined by a discriminant of a subtype whose corresponding
+ bound is static.
+ 
+ 
+ File: gnat_rm.info,  Node: Max_Select_Alternatives,  Next: Max_Storage_At_Blocking,  Prev: Max_Protected_Entries,  Up: Partition-Wide Restrictions
+ 
+ 5.1.5 Max_Select_Alternatives
+ -----------------------------
+ 
+ [RM D.7] Specifies the maximum number of alternatives in a selective
+ accept.
+ 
+ 
+ File: gnat_rm.info,  Node: Max_Storage_At_Blocking,  Next: Max_Task_Entries,  Prev: Max_Select_Alternatives,  Up: Partition-Wide Restrictions
+ 
+ 5.1.6 Max_Storage_At_Blocking
+ -----------------------------
+ 
+ [RM D.7] Specifies the maximum portion (in storage elements) of a task’s
+ Storage_Size that can be retained by a blocked task.  A violation of
+ this restriction causes Storage_Error to be raised.
+ 
+ 
+ File: gnat_rm.info,  Node: Max_Task_Entries,  Next: Max_Tasks,  Prev: Max_Storage_At_Blocking,  Up: Partition-Wide Restrictions
+ 
+ 5.1.7 Max_Task_Entries
+ ----------------------
+ 
+ [RM D.7] Specifies the maximum number of entries per task.  The bounds
+ of every entry family of a task unit shall be static, or shall be
+ defined by a discriminant of a subtype whose corresponding bound is
+ static.
+ 
+ 
+ File: gnat_rm.info,  Node: Max_Tasks,  Next: No_Abort_Statements,  Prev: Max_Task_Entries,  Up: Partition-Wide Restrictions
+ 
+ 5.1.8 Max_Tasks
+ ---------------
+ 
+ [RM D.7] Specifies the maximum number of task that may be created, not
+ counting the creation of the environment task.  Violations of this
+ restriction with a value of zero are detected at compile time.
+ Violations of this restriction with values other than zero cause
+ Storage_Error to be raised.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Abort_Statements,  Next: No_Access_Parameter_Allocators,  Prev: Max_Tasks,  Up: Partition-Wide Restrictions
+ 
+ 5.1.9 No_Abort_Statements
+ -------------------------
+ 
+ [RM D.7] There are no abort_statements, and there are no calls to
+ Task_Identification.Abort_Task.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Access_Parameter_Allocators,  Next: No_Access_Subprograms,  Prev: No_Abort_Statements,  Up: Partition-Wide Restrictions
+ 
+ 5.1.10 No_Access_Parameter_Allocators
+ -------------------------------------
+ 
+ [RM H.4] This restriction ensures at compile time that there are no
+ occurrences of an allocator as the actual parameter to an access
+ parameter.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Access_Subprograms,  Next: No_Allocators,  Prev: No_Access_Parameter_Allocators,  Up: Partition-Wide Restrictions
+ 
+ 5.1.11 No_Access_Subprograms
+ ----------------------------
+ 
+ [RM H.4] This restriction ensures at compile time that there are no
+ declarations of access-to-subprogram types.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Allocators,  Next: No_Anonymous_Allocators,  Prev: No_Access_Subprograms,  Up: Partition-Wide Restrictions
+ 
+ 5.1.12 No_Allocators
+ --------------------
+ 
+ [RM H.4] This restriction ensures at compile time that there are no
+ occurrences of an allocator.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Anonymous_Allocators,  Next: No_Asynchronous_Control,  Prev: No_Allocators,  Up: Partition-Wide Restrictions
+ 
+ 5.1.13 No_Anonymous_Allocators
+ ------------------------------
+ 
+ [RM H.4] This restriction ensures at compile time that there are no
+ occurrences of an allocator of anonymous access type.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Asynchronous_Control,  Next: No_Calendar,  Prev: No_Anonymous_Allocators,  Up: Partition-Wide Restrictions
+ 
+ 5.1.14 No_Asynchronous_Control
+ ------------------------------
+ 
+ [RM J.13] This restriction ensures at compile time that there are no
+ semantic dependences on the predefined package
+ Asynchronous_Task_Control.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Calendar,  Next: No_Coextensions,  Prev: No_Asynchronous_Control,  Up: Partition-Wide Restrictions
+ 
+ 5.1.15 No_Calendar
+ ------------------
+ 
+ [GNAT] This restriction ensures at compile time that there are no
+ semantic dependences on package Calendar.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Coextensions,  Next: No_Default_Initialization,  Prev: No_Calendar,  Up: Partition-Wide Restrictions
+ 
+ 5.1.16 No_Coextensions
+ ----------------------
+ 
+ [RM H.4] This restriction ensures at compile time that there are no
+ coextensions.  See 3.10.2.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Default_Initialization,  Next: No_Delay,  Prev: No_Coextensions,  Up: Partition-Wide Restrictions
+ 
+ 5.1.17 No_Default_Initialization
+ --------------------------------
+ 
+ [GNAT] This restriction prohibits any instance of default initialization
+ of variables.  The binder implements a consistency rule which prevents
+ any unit compiled without the restriction from with’ing a unit with the
+ restriction (this allows the generation of initialization procedures to
+ be skipped, since you can be sure that no call is ever generated to an
+ initialization procedure in a unit with the restriction active).  If
+ used in conjunction with Initialize_Scalars or Normalize_Scalars, the
+ effect is to prohibit all cases of variables declared without a specific
+ initializer (including the case of OUT scalar parameters).
+ 
+ 
+ File: gnat_rm.info,  Node: No_Delay,  Next: No_Dependence,  Prev: No_Default_Initialization,  Up: Partition-Wide Restrictions
+ 
+ 5.1.18 No_Delay
+ ---------------
+ 
+ [RM H.4] This restriction ensures at compile time that there are no
+ delay statements and no semantic dependences on package Calendar.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Dependence,  Next: No_Direct_Boolean_Operators,  Prev: No_Delay,  Up: Partition-Wide Restrictions
+ 
+ 5.1.19 No_Dependence
+ --------------------
+ 
+ [RM 13.12.1] This restriction ensures at compile time that there are no
+ dependences on a library unit.  For GNAT, this includes implicit
+ implementation dependences on units of the runtime library that are
+ created by the compiler to support specific constructs of the language.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Direct_Boolean_Operators,  Next: No_Dispatch,  Prev: No_Dependence,  Up: Partition-Wide Restrictions
+ 
+ 5.1.20 No_Direct_Boolean_Operators
+ ----------------------------------
+ 
+ [GNAT] This restriction ensures that no logical operators (and/or/xor)
+ are used on operands of type Boolean (or any type derived from Boolean).
+ This is intended for use in safety critical programs where the
+ certification protocol requires the use of short-circuit (and then, or
+ else) forms for all composite boolean operations.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Dispatch,  Next: No_Dispatching_Calls,  Prev: No_Direct_Boolean_Operators,  Up: Partition-Wide Restrictions
+ 
+ 5.1.21 No_Dispatch
+ ------------------
+ 
+ [RM H.4] This restriction ensures at compile time that there are no
+ occurrences of ‘T'Class’, for any (tagged) subtype ‘T’.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Dispatching_Calls,  Next: No_Dynamic_Attachment,  Prev: No_Dispatch,  Up: Partition-Wide Restrictions
+ 
+ 5.1.22 No_Dispatching_Calls
+ ---------------------------
+ 
+ [GNAT] This restriction ensures at compile time that the code generated
+ by the compiler involves no dispatching calls.  The use of this
+ restriction allows the safe use of record extensions, classwide
+ membership tests and other classwide features not involving implicit
+ dispatching.  This restriction ensures that the code contains no
+ indirect calls through a dispatching mechanism.  Note that this includes
+ internally-generated calls created by the compiler, for example in the
+ implementation of class-wide objects assignments.  The membership test
+ is allowed in the presence of this restriction, because its
+ implementation requires no dispatching.  This restriction is comparable
+ to the official Ada restriction ‘No_Dispatch’ except that it is a bit
+ less restrictive in that it allows all classwide constructs that do not
+ imply dispatching.  The following example indicates constructs that
+ violate this restriction.
+ 
+      package Pkg is
+        type T is tagged record
+          Data : Natural;
+        end record;
+        procedure P (X : T);
+ 
+        type DT is new T with record
+          More_Data : Natural;
+        end record;
+        procedure Q (X : DT);
+      end Pkg;
+ 
+      with Pkg; use Pkg;
+      procedure Example is
+        procedure Test (O : T'Class) is
+          N : Natural := O'Size; --  Error: Dispatching call
+          C : T'Class := O;      --  Error: implicit Dispatching Call
+        begin
+          if O in DT'Class then  --  OK   : Membership test
+             Q (DT (O));         --  OK   : Type conversion plus direct call
+          else
+             P (O);              --  Error: Dispatching call
+          end if;
+        end Test;
+ 
+        Obj : DT;
+      begin
+        P (Obj);                 --  OK   : Direct call
+        P (T (Obj));             --  OK   : Type conversion plus direct call
+        P (T'Class (Obj));       --  Error: Dispatching call
+ 
+        Test (Obj);              --  OK   : Type conversion
+ 
+        if Obj in T'Class then   --  OK   : Membership test
+           null;
+        end if;
+      end Example;
+ 
+ 
+ File: gnat_rm.info,  Node: No_Dynamic_Attachment,  Next: No_Dynamic_Priorities,  Prev: No_Dispatching_Calls,  Up: Partition-Wide Restrictions
+ 
+ 5.1.23 No_Dynamic_Attachment
+ ----------------------------
+ 
+ [RM D.7] This restriction ensures that there is no call to any of the
+ operations defined in package Ada.Interrupts (Is_Reserved, Is_Attached,
+ Current_Handler, Attach_Handler, Exchange_Handler, Detach_Handler, and
+ Reference).
+ 
+ The restriction ‘No_Dynamic_Interrupts’ is recognized as a synonym for
+ ‘No_Dynamic_Attachment’.  This is retained for historical compatibility
+ purposes (and a warning will be generated for its use if warnings on
+ obsolescent features are activated).
+ 
+ 
+ File: gnat_rm.info,  Node: No_Dynamic_Priorities,  Next: No_Entry_Calls_In_Elaboration_Code,  Prev: No_Dynamic_Attachment,  Up: Partition-Wide Restrictions
+ 
+ 5.1.24 No_Dynamic_Priorities
+ ----------------------------
+ 
+ [RM D.7] There are no semantic dependencies on the package
+ Dynamic_Priorities.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Entry_Calls_In_Elaboration_Code,  Next: No_Enumeration_Maps,  Prev: No_Dynamic_Priorities,  Up: Partition-Wide Restrictions
+ 
+ 5.1.25 No_Entry_Calls_In_Elaboration_Code
+ -----------------------------------------
+ 
+ [GNAT] This restriction ensures at compile time that no task or
+ protected entry calls are made during elaboration code.  As a result of
+ the use of this restriction, the compiler can assume that no code past
+ an accept statement in a task can be executed at elaboration time.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Enumeration_Maps,  Next: No_Exception_Handlers,  Prev: No_Entry_Calls_In_Elaboration_Code,  Up: Partition-Wide Restrictions
+ 
+ 5.1.26 No_Enumeration_Maps
+ --------------------------
+ 
+ [GNAT] This restriction ensures at compile time that no operations
+ requiring enumeration maps are used (that is Image and Value attributes
+ applied to enumeration types).
+ 
+ 
+ File: gnat_rm.info,  Node: No_Exception_Handlers,  Next: No_Exception_Propagation,  Prev: No_Enumeration_Maps,  Up: Partition-Wide Restrictions
+ 
+ 5.1.27 No_Exception_Handlers
+ ----------------------------
+ 
+ [GNAT] This restriction ensures at compile time that there are no
+ explicit exception handlers.  It also indicates that no exception
+ propagation will be provided.  In this mode, exceptions may be raised
+ but will result in an immediate call to the last chance handler, a
+ routine that the user must define with the following profile:
+ 
+      procedure Last_Chance_Handler
+        (Source_Location : System.Address; Line : Integer);
+      pragma Export (C, Last_Chance_Handler,
+                     "__gnat_last_chance_handler");
+ 
+ The parameter is a C null-terminated string representing a message to be
+ associated with the exception (typically the source location of the
+ raise statement generated by the compiler).  The Line parameter when
+ nonzero represents the line number in the source program where the raise
+ occurs.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Exception_Propagation,  Next: No_Exception_Registration,  Prev: No_Exception_Handlers,  Up: Partition-Wide Restrictions
+ 
+ 5.1.28 No_Exception_Propagation
+ -------------------------------
+ 
+ [GNAT] This restriction guarantees that exceptions are never propagated
+ to an outer subprogram scope.  The only case in which an exception may
+ be raised is when the handler is statically in the same subprogram, so
+ that the effect of a raise is essentially like a goto statement.  Any
+ other raise statement (implicit or explicit) will be considered
+ unhandled.  Exception handlers are allowed, but may not contain an
+ exception occurrence identifier (exception choice).  In addition, use of
+ the package GNAT.Current_Exception is not permitted, and reraise
+ statements (raise with no operand) are not permitted.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Exception_Registration,  Next: No_Exceptions,  Prev: No_Exception_Propagation,  Up: Partition-Wide Restrictions
+ 
+ 5.1.29 No_Exception_Registration
+ --------------------------------
+ 
+ [GNAT] This restriction ensures at compile time that no stream
+ operations for types Exception_Id or Exception_Occurrence are used.
+ This also makes it impossible to pass exceptions to or from a partition
+ with this restriction in a distributed environment.  If this restriction
+ is active, the generated code is simplified by omitting the
+ otherwise-required global registration of exceptions when they are
+ declared.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Exceptions,  Next: No_Finalization,  Prev: No_Exception_Registration,  Up: Partition-Wide Restrictions
+ 
+ 5.1.30 No_Exceptions
+ --------------------
+ 
+ [RM H.4] This restriction ensures at compile time that there are no
+ raise statements and no exception handlers and also suppresses the
+ generation of language-defined run-time checks.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Finalization,  Next: No_Fixed_Point,  Prev: No_Exceptions,  Up: Partition-Wide Restrictions
+ 
+ 5.1.31 No_Finalization
+ ----------------------
+ 
+ [GNAT] This restriction disables the language features described in
+ chapter 7.6 of the Ada 2005 RM as well as all form of code generation
+ performed by the compiler to support these features.  The following
+ types are no longer considered controlled when this restriction is in
+ effect:
+ 
+    * ‘Ada.Finalization.Controlled’
+ 
+    * ‘Ada.Finalization.Limited_Controlled’
+ 
+    * Derivations from ‘Controlled’ or ‘Limited_Controlled’
+ 
+    * Class-wide types
+ 
+    * Protected types
+ 
+    * Task types
+ 
+    * Array and record types with controlled components
+ 
+ The compiler no longer generates code to initialize, finalize or adjust
+ an object or a nested component, either declared on the stack or on the
+ heap.  The deallocation of a controlled object no longer finalizes its
+ contents.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Fixed_Point,  Next: No_Floating_Point,  Prev: No_Finalization,  Up: Partition-Wide Restrictions
+ 
+ 5.1.32 No_Fixed_Point
+ ---------------------
+ 
+ [RM H.4] This restriction ensures at compile time that there are no
+ occurrences of fixed point types and operations.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Floating_Point,  Next: No_Implicit_Conditionals,  Prev: No_Fixed_Point,  Up: Partition-Wide Restrictions
+ 
+ 5.1.33 No_Floating_Point
+ ------------------------
+ 
+ [RM H.4] This restriction ensures at compile time that there are no
+ occurrences of floating point types and operations.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Implicit_Conditionals,  Next: No_Implicit_Dynamic_Code,  Prev: No_Floating_Point,  Up: Partition-Wide Restrictions
+ 
+ 5.1.34 No_Implicit_Conditionals
+ -------------------------------
+ 
+ [GNAT] This restriction ensures that the generated code does not contain
+ any implicit conditionals, either by modifying the generated code where
+ possible, or by rejecting any construct that would otherwise generate an
+ implicit conditional.  Note that this check does not include run time
+ constraint checks, which on some targets may generate implicit
+ conditionals as well.  To control the latter, constraint checks can be
+ suppressed in the normal manner.  Constructs generating implicit
+ conditionals include comparisons of composite objects and the Max/Min
+ attributes.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Implicit_Dynamic_Code,  Next: No_Implicit_Heap_Allocations,  Prev: No_Implicit_Conditionals,  Up: Partition-Wide Restrictions
+ 
+ 5.1.35 No_Implicit_Dynamic_Code
+ -------------------------------
+ 
+ [GNAT] This restriction prevents the compiler from building
+ ‘trampolines’.  This is a structure that is built on the stack and
+ contains dynamic code to be executed at run time.  On some targets, a
+ trampoline is built for the following features: ‘Access’,
+ ‘Unrestricted_Access’, or ‘Address’ of a nested subprogram; nested task
+ bodies; primitive operations of nested tagged types.  Trampolines do not
+ work on machines that prevent execution of stack data.  For example, on
+ windows systems, enabling DEP (data execution protection) will cause
+ trampolines to raise an exception.  Trampolines are also quite slow at
+ run time.
+ 
+ On many targets, trampolines have been largely eliminated.  Look at the
+ version of system.ads for your target — if it has Always_Compatible_Rep
+ equal to False, then trampolines are largely eliminated.  In particular,
+ a trampoline is built for the following features: ‘Address’ of a nested
+ subprogram; ‘Access’ or ‘Unrestricted_Access’ of a nested subprogram,
+ but only if pragma Favor_Top_Level applies, or the access type has a
+ foreign-language convention; primitive operations of nested tagged
+ types.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Implicit_Heap_Allocations,  Next: No_Implicit_Protected_Object_Allocations,  Prev: No_Implicit_Dynamic_Code,  Up: Partition-Wide Restrictions
+ 
+ 5.1.36 No_Implicit_Heap_Allocations
+ -----------------------------------
+ 
+ [RM D.7] No constructs are allowed to cause implicit heap allocation.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Implicit_Protected_Object_Allocations,  Next: No_Implicit_Task_Allocations,  Prev: No_Implicit_Heap_Allocations,  Up: Partition-Wide Restrictions
+ 
+ 5.1.37 No_Implicit_Protected_Object_Allocations
+ -----------------------------------------------
+ 
+ [GNAT] No constructs are allowed to cause implicit heap allocation of a
+ protected object.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Implicit_Task_Allocations,  Next: No_Initialize_Scalars,  Prev: No_Implicit_Protected_Object_Allocations,  Up: Partition-Wide Restrictions
+ 
+ 5.1.38 No_Implicit_Task_Allocations
+ -----------------------------------
+ 
+ [GNAT] No constructs are allowed to cause implicit heap allocation of a
+ task.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Initialize_Scalars,  Next: No_IO,  Prev: No_Implicit_Task_Allocations,  Up: Partition-Wide Restrictions
+ 
+ 5.1.39 No_Initialize_Scalars
+ ----------------------------
+ 
+ [GNAT] This restriction ensures that no unit in the partition is
+ compiled with pragma Initialize_Scalars.  This allows the generation of
+ more efficient code, and in particular eliminates dummy null
+ initialization routines that are otherwise generated for some record and
+ array types.
+ 
+ 
+ File: gnat_rm.info,  Node: No_IO,  Next: No_Local_Allocators,  Prev: No_Initialize_Scalars,  Up: Partition-Wide Restrictions
+ 
+ 5.1.40 No_IO
+ ------------
+ 
+ [RM H.4] This restriction ensures at compile time that there are no
+ dependences on any of the library units Sequential_IO, Direct_IO,
+ Text_IO, Wide_Text_IO, Wide_Wide_Text_IO, or Stream_IO.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Local_Allocators,  Next: No_Local_Protected_Objects,  Prev: No_IO,  Up: Partition-Wide Restrictions
+ 
+ 5.1.41 No_Local_Allocators
+ --------------------------
+ 
+ [RM H.4] This restriction ensures at compile time that there are no
+ occurrences of an allocator in subprograms, generic subprograms, tasks,
+ and entry bodies.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Local_Protected_Objects,  Next: No_Local_Tagged_Types,  Prev: No_Local_Allocators,  Up: Partition-Wide Restrictions
+ 
+ 5.1.42 No_Local_Protected_Objects
+ ---------------------------------
+ 
+ [RM D.7] This restriction ensures at compile time that protected objects
+ are only declared at the library level.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Local_Tagged_Types,  Next: No_Local_Timing_Events,  Prev: No_Local_Protected_Objects,  Up: Partition-Wide Restrictions
+ 
+ 5.1.43 No_Local_Tagged_Types
+ ----------------------------
+ 
+ [GNAT] This restriction ensures at compile time that tagged types are
+ only declared at the library level.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Local_Timing_Events,  Next: No_Long_Long_Integers,  Prev: No_Local_Tagged_Types,  Up: Partition-Wide Restrictions
+ 
+ 5.1.44 No_Local_Timing_Events
+ -----------------------------
+ 
+ [RM D.7] All objects of type Ada.Real_Time.Timing_Events.Timing_Event
+ are declared at the library level.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Long_Long_Integers,  Next: No_Multiple_Elaboration,  Prev: No_Local_Timing_Events,  Up: Partition-Wide Restrictions
+ 
+ 5.1.45 No_Long_Long_Integers
+ ----------------------------
+ 
+ [GNAT] This partition-wide restriction forbids any explicit reference to
+ type Standard.Long_Long_Integer, and also forbids declaring range types
+ whose implicit base type is Long_Long_Integer, and modular types whose
+ size exceeds Long_Integer’Size.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Multiple_Elaboration,  Next: No_Nested_Finalization,  Prev: No_Long_Long_Integers,  Up: Partition-Wide Restrictions
+ 
+ 5.1.46 No_Multiple_Elaboration
+ ------------------------------
+ 
+ [GNAT] When this restriction is active and the static elaboration model
+ is used, and -fpreserve-control-flow is not used, the compiler is
+ allowed to suppress the elaboration counter normally associated with the
+ unit, even if the unit has elaboration code.  This counter is typically
+ used to check for access before elaboration and to control multiple
+ elaboration attempts.  If the restriction is used, then the situations
+ in which multiple elaboration is possible, including non-Ada main
+ programs and Stand Alone libraries, are not permitted and will be
+ diagnosed by the binder.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Nested_Finalization,  Next: No_Protected_Type_Allocators,  Prev: No_Multiple_Elaboration,  Up: Partition-Wide Restrictions
+ 
+ 5.1.47 No_Nested_Finalization
+ -----------------------------
+ 
+ [RM D.7] All objects requiring finalization are declared at the library
+ level.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Protected_Type_Allocators,  Next: No_Protected_Types,  Prev: No_Nested_Finalization,  Up: Partition-Wide Restrictions
+ 
+ 5.1.48 No_Protected_Type_Allocators
+ -----------------------------------
+ 
+ [RM D.7] This restriction ensures at compile time that there are no
+ allocator expressions that attempt to allocate protected objects.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Protected_Types,  Next: No_Recursion,  Prev: No_Protected_Type_Allocators,  Up: Partition-Wide Restrictions
+ 
+ 5.1.49 No_Protected_Types
+ -------------------------
+ 
+ [RM H.4] This restriction ensures at compile time that there are no
+ declarations of protected types or protected objects.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Recursion,  Next: No_Reentrancy,  Prev: No_Protected_Types,  Up: Partition-Wide Restrictions
+ 
+ 5.1.50 No_Recursion
+ -------------------
+ 
+ [RM H.4] A program execution is erroneous if a subprogram is invoked as
+ part of its execution.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Reentrancy,  Next: No_Relative_Delay,  Prev: No_Recursion,  Up: Partition-Wide Restrictions
+ 
+ 5.1.51 No_Reentrancy
+ --------------------
+ 
+ [RM H.4] A program execution is erroneous if a subprogram is executed by
+ two tasks at the same time.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Relative_Delay,  Next: No_Requeue_Statements,  Prev: No_Reentrancy,  Up: Partition-Wide Restrictions
+ 
+ 5.1.52 No_Relative_Delay
+ ------------------------
+ 
+ [RM D.7] This restriction ensures at compile time that there are no
+ delay relative statements and prevents expressions such as ‘delay 1.23;’
+ from appearing in source code.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Requeue_Statements,  Next: No_Secondary_Stack,  Prev: No_Relative_Delay,  Up: Partition-Wide Restrictions
+ 
+ 5.1.53 No_Requeue_Statements
+ ----------------------------
+ 
+ [RM D.7] This restriction ensures at compile time that no requeue
+ statements are permitted and prevents keyword ‘requeue’ from being used
+ in source code.
+ 
+ The restriction ‘No_Requeue’ is recognized as a synonym for
+ ‘No_Requeue_Statements’.  This is retained for historical compatibility
+ purposes (and a warning will be generated for its use if warnings on
+ oNobsolescent features are activated).
+ 
+ 
+ File: gnat_rm.info,  Node: No_Secondary_Stack,  Next: No_Select_Statements,  Prev: No_Requeue_Statements,  Up: Partition-Wide Restrictions
+ 
+ 5.1.54 No_Secondary_Stack
+ -------------------------
+ 
+ [GNAT] This restriction ensures at compile time that the generated code
+ does not contain any reference to the secondary stack.  The secondary
+ stack is used to implement functions returning unconstrained objects
+ (arrays or records) on some targets.  Suppresses the allocation of
+ secondary stacks for tasks (excluding the environment task) at run time.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Select_Statements,  Next: No_Specific_Termination_Handlers,  Prev: No_Secondary_Stack,  Up: Partition-Wide Restrictions
+ 
+ 5.1.55 No_Select_Statements
+ ---------------------------
+ 
+ [RM D.7] This restriction ensures at compile time no select statements
+ of any kind are permitted, that is the keyword ‘select’ may not appear.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Specific_Termination_Handlers,  Next: No_Specification_of_Aspect,  Prev: No_Select_Statements,  Up: Partition-Wide Restrictions
+ 
+ 5.1.56 No_Specific_Termination_Handlers
+ ---------------------------------------
+ 
+ [RM D.7] There are no calls to Ada.Task_Termination.Set_Specific_Handler
+ or to Ada.Task_Termination.Specific_Handler.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Specification_of_Aspect,  Next: No_Standard_Allocators_After_Elaboration,  Prev: No_Specific_Termination_Handlers,  Up: Partition-Wide Restrictions
+ 
+ 5.1.57 No_Specification_of_Aspect
+ ---------------------------------
+ 
+ [RM 13.12.1] This restriction checks at compile time that no aspect
+ specification, attribute definition clause, or pragma is given for a
+ given aspect.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Standard_Allocators_After_Elaboration,  Next: No_Standard_Storage_Pools,  Prev: No_Specification_of_Aspect,  Up: Partition-Wide Restrictions
+ 
+ 5.1.58 No_Standard_Allocators_After_Elaboration
+ -----------------------------------------------
+ 
+ [RM D.7] Specifies that an allocator using a standard storage pool
+ should never be evaluated at run time after the elaboration of the
+ library items of the partition has completed.  Otherwise, Storage_Error
+ is raised.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Standard_Storage_Pools,  Next: No_Stream_Optimizations,  Prev: No_Standard_Allocators_After_Elaboration,  Up: Partition-Wide Restrictions
+ 
+ 5.1.59 No_Standard_Storage_Pools
+ --------------------------------
+ 
+ [GNAT] This restriction ensures at compile time that no access types use
+ the standard default storage pool.  Any access type declared must have
+ an explicit Storage_Pool attribute defined specifying a user-defined
+ storage pool.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Stream_Optimizations,  Next: No_Streams,  Prev: No_Standard_Storage_Pools,  Up: Partition-Wide Restrictions
+ 
+ 5.1.60 No_Stream_Optimizations
+ ------------------------------
+ 
+ [GNAT] This restriction affects the performance of stream operations on
+ types ‘String’, ‘Wide_String’ and ‘Wide_Wide_String’.  By default, the
+ compiler uses block reads and writes when manipulating ‘String’ objects
+ due to their superior performance.  When this restriction is in effect,
+ the compiler performs all IO operations on a per-character basis.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Streams,  Next: No_Tagged_Type_Registration,  Prev: No_Stream_Optimizations,  Up: Partition-Wide Restrictions
+ 
+ 5.1.61 No_Streams
+ -----------------
+ 
+ [GNAT] This restriction ensures at compile/bind time that there are no
+ stream objects created and no use of stream attributes.  This
+ restriction does not forbid dependences on the package ‘Ada.Streams’.
+ So it is permissible to with ‘Ada.Streams’ (or another package that does
+ so itself) as long as no actual stream objects are created and no stream
+ attributes are used.
+ 
+ Note that the use of restriction allows optimization of tagged types,
+ since they do not need to worry about dispatching stream operations.  To
+ take maximum advantage of this space-saving optimization, any unit
+ declaring a tagged type should be compiled with the restriction, though
+ this is not required.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Tagged_Type_Registration,  Next: No_Task_Allocators,  Prev: No_Streams,  Up: Partition-Wide Restrictions
+ 
+ 5.1.62 No_Tagged_Type_Registration
+ ----------------------------------
+ 
+ [GNAT] If this restriction is active, then class-wide streaming
+ attributes are not supported.  In addition, the subprograms in Ada.Tags
+ are not supported.  If this restriction is active, the generated code is
+ simplified by omitting the otherwise-required global registration of
+ tagged types when they are declared.  This restriction may be necessary
+ in order to also apply the No_Elaboration_Code restriction.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Task_Allocators,  Next: No_Task_At_Interrupt_Priority,  Prev: No_Tagged_Type_Registration,  Up: Partition-Wide Restrictions
+ 
+ 5.1.63 No_Task_Allocators
+ -------------------------
+ 
+ [RM D.7] There are no allocators for task types or types containing task
+ subcomponents.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Task_At_Interrupt_Priority,  Next: No_Task_Attributes_Package,  Prev: No_Task_Allocators,  Up: Partition-Wide Restrictions
+ 
+ 5.1.64 No_Task_At_Interrupt_Priority
+ ------------------------------------
+ 
+ [GNAT] This restriction ensures at compile time that there is no
+ Interrupt_Priority aspect or pragma for a task or a task type.  As a
+ consequence, the tasks are always created with a priority below that an
+ interrupt priority.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Task_Attributes_Package,  Next: No_Task_Hierarchy,  Prev: No_Task_At_Interrupt_Priority,  Up: Partition-Wide Restrictions
+ 
+ 5.1.65 No_Task_Attributes_Package
+ ---------------------------------
+ 
+ [GNAT] This restriction ensures at compile time that there are no
+ implicit or explicit dependencies on the package ‘Ada.Task_Attributes’.
+ 
+ The restriction ‘No_Task_Attributes’ is recognized as a synonym for
+ ‘No_Task_Attributes_Package’.  This is retained for historical
+ compatibility purposes (and a warning will be generated for its use if
+ warnings on obsolescent features are activated).
+ 
+ 
+ File: gnat_rm.info,  Node: No_Task_Hierarchy,  Next: No_Task_Termination,  Prev: No_Task_Attributes_Package,  Up: Partition-Wide Restrictions
+ 
+ 5.1.66 No_Task_Hierarchy
+ ------------------------
+ 
+ [RM D.7] All (non-environment) tasks depend directly on the environment
+ task of the partition.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Task_Termination,  Next: No_Tasking,  Prev: No_Task_Hierarchy,  Up: Partition-Wide Restrictions
+ 
+ 5.1.67 No_Task_Termination
+ --------------------------
+ 
+ [RM D.7] Tasks that terminate are erroneous.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Tasking,  Next: No_Terminate_Alternatives,  Prev: No_Task_Termination,  Up: Partition-Wide Restrictions
+ 
+ 5.1.68 No_Tasking
+ -----------------
+ 
+ [GNAT] This restriction prevents the declaration of tasks or task types
+ throughout the partition.  It is similar in effect to the use of
+ ‘Max_Tasks => 0’ except that violations are caught at compile time and
+ cause an error message to be output either by the compiler or binder.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Terminate_Alternatives,  Next: No_Unchecked_Access,  Prev: No_Tasking,  Up: Partition-Wide Restrictions
+ 
+ 5.1.69 No_Terminate_Alternatives
+ --------------------------------
+ 
+ [RM D.7] There are no selective accepts with terminate alternatives.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Unchecked_Access,  Next: No_Unchecked_Conversion,  Prev: No_Terminate_Alternatives,  Up: Partition-Wide Restrictions
+ 
+ 5.1.70 No_Unchecked_Access
+ --------------------------
+ 
+ [RM H.4] This restriction ensures at compile time that there are no
+ occurrences of the Unchecked_Access attribute.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Unchecked_Conversion,  Next: No_Unchecked_Deallocation,  Prev: No_Unchecked_Access,  Up: Partition-Wide Restrictions
+ 
+ 5.1.71 No_Unchecked_Conversion
+ ------------------------------
+ 
+ [RM J.13] This restriction ensures at compile time that there are no
+ semantic dependences on the predefined generic function
+ Unchecked_Conversion.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Unchecked_Deallocation,  Next: No_Use_Of_Entity,  Prev: No_Unchecked_Conversion,  Up: Partition-Wide Restrictions
+ 
+ 5.1.72 No_Unchecked_Deallocation
+ --------------------------------
+ 
+ [RM J.13] This restriction ensures at compile time that there are no
+ semantic dependences on the predefined generic procedure
+ Unchecked_Deallocation.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Use_Of_Entity,  Next: Pure_Barriers,  Prev: No_Unchecked_Deallocation,  Up: Partition-Wide Restrictions
+ 
+ 5.1.73 No_Use_Of_Entity
+ -----------------------
+ 
+ [GNAT] This restriction ensures at compile time that there are no
+ references to the entity given in the form
+ 
+      No_Use_Of_Entity => Name
+ 
+ where ‘Name’ is the fully qualified entity, for example
+ 
+      No_Use_Of_Entity => Ada.Text_IO.Put_Line
+ 
+ 
+ File: gnat_rm.info,  Node: Pure_Barriers,  Next: Simple_Barriers,  Prev: No_Use_Of_Entity,  Up: Partition-Wide Restrictions
+ 
+ 5.1.74 Pure_Barriers
+ --------------------
+ 
+ [GNAT] This restriction ensures at compile time that protected entry
+ barriers are restricted to:
+ 
+    * components of the protected object (excluding selection from
+      dereferences),
+ 
+    * constant declarations,
+ 
+    * named numbers,
+ 
+    * enumeration literals,
+ 
+    * integer literals,
+ 
+    * real literals,
+ 
+    * character literals,
+ 
+    * implicitly defined comparison operators,
+ 
+    * uses of the Standard.”not” operator,
+ 
+    * short-circuit operator,
+ 
+    * the Count attribute
+ 
+ This restriction is a relaxation of the Simple_Barriers restriction, but
+ still ensures absence of side effects, exceptions, and recursion during
+ the evaluation of the barriers.
+ 
+ 
+ File: gnat_rm.info,  Node: Simple_Barriers,  Next: Static_Priorities,  Prev: Pure_Barriers,  Up: Partition-Wide Restrictions
+ 
+ 5.1.75 Simple_Barriers
+ ----------------------
+ 
+ [RM D.7] This restriction ensures at compile time that barriers in entry
+ declarations for protected types are restricted to either static boolean
+ expressions or references to simple boolean variables defined in the
+ private part of the protected type.  No other form of entry barriers is
+ permitted.
+ 
+ The restriction ‘Boolean_Entry_Barriers’ is recognized as a synonym for
+ ‘Simple_Barriers’.  This is retained for historical compatibility
+ purposes (and a warning will be generated for its use if warnings on
+ obsolescent features are activated).
+ 
+ 
+ File: gnat_rm.info,  Node: Static_Priorities,  Next: Static_Storage_Size,  Prev: Simple_Barriers,  Up: Partition-Wide Restrictions
+ 
+ 5.1.76 Static_Priorities
+ ------------------------
+ 
+ [GNAT] This restriction ensures at compile time that all priority
+ expressions are static, and that there are no dependences on the package
+ ‘Ada.Dynamic_Priorities’.
+ 
+ 
+ File: gnat_rm.info,  Node: Static_Storage_Size,  Prev: Static_Priorities,  Up: Partition-Wide Restrictions
+ 
+ 5.1.77 Static_Storage_Size
+ --------------------------
+ 
+ [GNAT] This restriction ensures at compile time that any expression
+ appearing in a Storage_Size pragma or attribute definition clause is
+ static.
+ 
+ 
+ File: gnat_rm.info,  Node: Program Unit Level Restrictions,  Prev: Partition-Wide Restrictions,  Up: Standard and Implementation Defined Restrictions
+ 
+ 5.2 Program Unit Level Restrictions
+ ===================================
+ 
+ The second set of restriction identifiers does not require
+ partition-wide consistency.  The restriction may be enforced for a
+ single compilation unit without any effect on any of the other
+ compilation units in the partition.
+ 
+ * Menu:
+ 
+ * No_Elaboration_Code::
+ * No_Dynamic_Accessibility_Checks::
+ * No_Dynamic_Sized_Objects::
+ * No_Entry_Queue::
+ * No_Implementation_Aspect_Specifications::
+ * No_Implementation_Attributes::
+ * No_Implementation_Identifiers::
+ * No_Implementation_Pragmas::
+ * No_Implementation_Restrictions::
+ * No_Implementation_Units::
+ * No_Implicit_Aliasing::
+ * No_Implicit_Loops::
+ * No_Obsolescent_Features::
+ * No_Wide_Characters::
+ * Static_Dispatch_Tables::
+ * SPARK_05::
+ 
+ 
+ File: gnat_rm.info,  Node: No_Elaboration_Code,  Next: No_Dynamic_Accessibility_Checks,  Up: Program Unit Level Restrictions
+ 
+ 5.2.1 No_Elaboration_Code
+ -------------------------
+ 
+ [GNAT] This restriction ensures at compile time that no elaboration code
+ is generated.  Note that this is not the same condition as is enforced
+ by pragma ‘Preelaborate’.  There are cases in which pragma
+ ‘Preelaborate’ still permits code to be generated (e.g., code to
+ initialize a large array to all zeroes), and there are cases of units
+ which do not meet the requirements for pragma ‘Preelaborate’, but for
+ which no elaboration code is generated.  Generally, it is the case that
+ preelaborable units will meet the restrictions, with the exception of
+ large aggregates initialized with an others_clause, and exception
+ declarations (which generate calls to a run-time registry procedure).
+ This restriction is enforced on a unit by unit basis, it need not be
+ obeyed consistently throughout a partition.
+ 
+ In the case of aggregates with others, if the aggregate has a dynamic
+ size, there is no way to eliminate the elaboration code (such dynamic
+ bounds would be incompatible with ‘Preelaborate’ in any case).  If the
+ bounds are static, then use of this restriction actually modifies the
+ code choice of the compiler to avoid generating a loop, and instead
+ generate the aggregate statically if possible, no matter how many times
+ the data for the others clause must be repeatedly generated.
+ 
+ It is not possible to precisely document the constructs which are
+ compatible with this restriction, since, unlike most other restrictions,
+ this is not a restriction on the source code, but a restriction on the
+ generated object code.  For example, if the source contains a
+ declaration:
+ 
+      Val : constant Integer := X;
+ 
+ where X is not a static constant, it may be possible, depending on
+ complex optimization circuitry, for the compiler to figure out the value
+ of X at compile time, in which case this initialization can be done by
+ the loader, and requires no initialization code.  It is not possible to
+ document the precise conditions under which the optimizer can figure
+ this out.
+ 
+ Note that this the implementation of this restriction requires full code
+ generation.  If it is used in conjunction with “semantics only”
+ checking, then some cases of violations may be missed.
+ 
+ When this restriction is active, we are not requesting control-flow
+ preservation with -fpreserve-control-flow, and the static elaboration
+ model is used, the compiler is allowed to suppress the elaboration
+ counter normally associated with the unit.  This counter is typically
+ used to check for access before elaboration and to control multiple
+ elaboration attempts.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Dynamic_Accessibility_Checks,  Next: No_Dynamic_Sized_Objects,  Prev: No_Elaboration_Code,  Up: Program Unit Level Restrictions
+ 
+ 5.2.2 No_Dynamic_Accessibility_Checks
+ -------------------------------------
+ 
+ [GNAT] No dynamic accessibility checks are generated when this
+ restriction is in effect.  Instead, dangling references are prevented
+ via more conservative compile-time checking.  More specifically,
+ existing compile-time checks are enforced but with more conservative
+ assumptions about the accessibility levels of the relevant entities.
+ These conservative assumptions eliminate the need for dynamic
+ accessibility checks.
+ 
+ These new rules for computing (at compile-time) the accessibility level
+ of an anonymous access type T are as follows:
+ 
+    * If T is a function result type then, from the caller’s perspective,
+      its level is that of the innermost master enclosing the function
+      call.  From the callee’s perspective, the level of parameters and
+      local variables of the callee is statically deeper than the level
+      of T.
+ 
+      For any other accessibility level L such that the level of
+      parameters and local variables of the callee is statically deeper
+      than L, the level of T (from the callee’s perspective) is also
+      statically deeper than L.
+ 
+    * If T is the type of a formal parameter then, from the caller’s
+      perspective, its level is at least as deep as that of the type of
+      the corresponding actual parameter (whatever that actual parameter
+      might be).  From the callee’s perspective, the level of parameters
+      and local variables of the callee is statically deeper than the
+      level of T.
+ 
+    * If T is the type of a discriminant then its level is that of the
+      discriminated type.
+ 
+    * If T is the type of a stand-alone object then its level is the
+      level of the object.
+ 
+    * In all other cases, the level of T is as defined by the existing
+      rules of Ada.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Dynamic_Sized_Objects,  Next: No_Entry_Queue,  Prev: No_Dynamic_Accessibility_Checks,  Up: Program Unit Level Restrictions
+ 
+ 5.2.3 No_Dynamic_Sized_Objects
+ ------------------------------
+ 
+ [GNAT] This restriction disallows certain constructs that might lead to
+ the creation of dynamic-sized composite objects (or array or
+ discriminated type).  An array subtype indication is illegal if the
+ bounds are not static or references to discriminants of an enclosing
+ type.  A discriminated subtype indication is illegal if the type has
+ discriminant-dependent array components or a variant part, and the
+ discriminants are not static.  In addition, array and record aggregates
+ are illegal in corresponding cases.  Note that this restriction does not
+ forbid access discriminants.  It is often a good idea to combine this
+ restriction with No_Secondary_Stack.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Entry_Queue,  Next: No_Implementation_Aspect_Specifications,  Prev: No_Dynamic_Sized_Objects,  Up: Program Unit Level Restrictions
+ 
+ 5.2.4 No_Entry_Queue
+ --------------------
+ 
+ [GNAT] This restriction is a declaration that any protected entry
+ compiled in the scope of the restriction has at most one task waiting on
+ the entry at any one time, and so no queue is required.  This
+ restriction is not checked at compile time.  A program execution is
+ erroneous if an attempt is made to queue a second task on such an entry.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Implementation_Aspect_Specifications,  Next: No_Implementation_Attributes,  Prev: No_Entry_Queue,  Up: Program Unit Level Restrictions
+ 
+ 5.2.5 No_Implementation_Aspect_Specifications
+ ---------------------------------------------
+ 
+ [RM 13.12.1] This restriction checks at compile time that no
+ GNAT-defined aspects are present.  With this restriction, the only
+ aspects that can be used are those defined in the Ada Reference Manual.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Implementation_Attributes,  Next: No_Implementation_Identifiers,  Prev: No_Implementation_Aspect_Specifications,  Up: Program Unit Level Restrictions
+ 
+ 5.2.6 No_Implementation_Attributes
+ ----------------------------------
+ 
+ [RM 13.12.1] This restriction checks at compile time that no
+ GNAT-defined attributes are present.  With this restriction, the only
+ attributes that can be used are those defined in the Ada Reference
+ Manual.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Implementation_Identifiers,  Next: No_Implementation_Pragmas,  Prev: No_Implementation_Attributes,  Up: Program Unit Level Restrictions
+ 
+ 5.2.7 No_Implementation_Identifiers
+ -----------------------------------
+ 
+ [RM 13.12.1] This restriction checks at compile time that no
+ implementation-defined identifiers (marked with pragma
+ Implementation_Defined) occur within language-defined packages.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Implementation_Pragmas,  Next: No_Implementation_Restrictions,  Prev: No_Implementation_Identifiers,  Up: Program Unit Level Restrictions
+ 
+ 5.2.8 No_Implementation_Pragmas
+ -------------------------------
+ 
+ [RM 13.12.1] This restriction checks at compile time that no
+ GNAT-defined pragmas are present.  With this restriction, the only
+ pragmas that can be used are those defined in the Ada Reference Manual.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Implementation_Restrictions,  Next: No_Implementation_Units,  Prev: No_Implementation_Pragmas,  Up: Program Unit Level Restrictions
+ 
+ 5.2.9 No_Implementation_Restrictions
+ ------------------------------------
+ 
+ [GNAT] This restriction checks at compile time that no GNAT-defined
+ restriction identifiers (other than ‘No_Implementation_Restrictions’
+ itself) are present.  With this restriction, the only other restriction
+ identifiers that can be used are those defined in the Ada Reference
+ Manual.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Implementation_Units,  Next: No_Implicit_Aliasing,  Prev: No_Implementation_Restrictions,  Up: Program Unit Level Restrictions
+ 
+ 5.2.10 No_Implementation_Units
+ ------------------------------
+ 
+ [RM 13.12.1] This restriction checks at compile time that there is no
+ mention in the context clause of any implementation-defined descendants
+ of packages Ada, Interfaces, or System.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Implicit_Aliasing,  Next: No_Implicit_Loops,  Prev: No_Implementation_Units,  Up: Program Unit Level Restrictions
+ 
+ 5.2.11 No_Implicit_Aliasing
+ ---------------------------
+ 
+ [GNAT] This restriction, which is not required to be partition-wide
+ consistent, requires an explicit aliased keyword for an object to which
+ ‘Access, ‘Unchecked_Access, or ‘Address is applied, and forbids entirely
+ the use of the ‘Unrestricted_Access attribute for objects.  Note: the
+ reason that Unrestricted_Access is forbidden is that it would require
+ the prefix to be aliased, and in such cases, it can always be replaced
+ by the standard attribute Unchecked_Access which is preferable.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Implicit_Loops,  Next: No_Obsolescent_Features,  Prev: No_Implicit_Aliasing,  Up: Program Unit Level Restrictions
+ 
+ 5.2.12 No_Implicit_Loops
+ ------------------------
+ 
+ [GNAT] This restriction ensures that the generated code of the unit
+ marked with this restriction does not contain any implicit ‘for’ loops,
+ either by modifying the generated code where possible, or by rejecting
+ any construct that would otherwise generate an implicit ‘for’ loop.  If
+ this restriction is active, it is possible to build large array
+ aggregates with all static components without generating an intermediate
+ temporary, and without generating a loop to initialize individual
+ components.  Otherwise, a loop is created for arrays larger than about
+ 5000 scalar components.  Note that if this restriction is set in the
+ spec of a package, it will not apply to its body.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Obsolescent_Features,  Next: No_Wide_Characters,  Prev: No_Implicit_Loops,  Up: Program Unit Level Restrictions
+ 
+ 5.2.13 No_Obsolescent_Features
+ ------------------------------
+ 
+ [RM 13.12.1] This restriction checks at compile time that no obsolescent
+ features are used, as defined in Annex J of the Ada Reference Manual.
+ 
+ 
+ File: gnat_rm.info,  Node: No_Wide_Characters,  Next: Static_Dispatch_Tables,  Prev: No_Obsolescent_Features,  Up: Program Unit Level Restrictions
+ 
+ 5.2.14 No_Wide_Characters
+ -------------------------
+ 
+ [GNAT] This restriction ensures at compile time that no uses of the
+ types ‘Wide_Character’ or ‘Wide_String’ or corresponding wide wide types
+ appear, and that no wide or wide wide string or character literals
+ appear in the program (that is literals representing characters not in
+ type ‘Character’).
+ 
+ 
+ File: gnat_rm.info,  Node: Static_Dispatch_Tables,  Next: SPARK_05,  Prev: No_Wide_Characters,  Up: Program Unit Level Restrictions
+ 
+ 5.2.15 Static_Dispatch_Tables
+ -----------------------------
+ 
+ [GNAT] This restriction checks at compile time that all the artifacts
+ associated with dispatch tables can be placed in read-only memory.
+ 
+ 
+ File: gnat_rm.info,  Node: SPARK_05,  Prev: Static_Dispatch_Tables,  Up: Program Unit Level Restrictions
+ 
+ 5.2.16 SPARK_05
+ ---------------
+ 
+ [GNAT] This restriction no longer has any effect and is superseded by
+ SPARK 2014, whose restrictions are checked by the tool GNATprove.  To
+ check that a codebase respects SPARK 2014 restrictions, mark the code
+ with pragma or aspect ‘SPARK_Mode’, and run the tool GNATprove at Stone
+ assurance level, as follows:
+ 
+      gnatprove -P project.gpr --mode=stone
+ 
+ or equivalently:
+ 
+      gnatprove -P project.gpr --mode=check_all
+ 
+ 
+ File: gnat_rm.info,  Node: Implementation Advice,  Next: Implementation Defined Characteristics,  Prev: Standard and Implementation Defined Restrictions,  Up: Top
+ 
+ 6 Implementation Advice
+ ***********************
+ 
+ The main text of the Ada Reference Manual describes the required
+ behavior of all Ada compilers, and the GNAT compiler conforms to these
+ requirements.
+ 
+ In addition, there are sections throughout the Ada Reference Manual
+ headed by the phrase ‘Implementation advice’.  These sections are not
+ normative, i.e., they do not specify requirements that all compilers
+ must follow.  Rather they provide advice on generally desirable
+ behavior.  They are not requirements, because they describe behavior
+ that cannot be provided on all systems, or may be undesirable on some
+ systems.
+ 
+ As far as practical, GNAT follows the implementation advice in the Ada
+ Reference Manual.  Each such RM section corresponds to a section in this
+ chapter whose title specifies the RM section number and paragraph number
+ and the subject of the advice.  The contents of each section consists of
+ the RM text within quotation marks, followed by the GNAT interpretation
+ of the advice.  Most often, this simply says ‘followed’, which means
+ that GNAT follows the advice.  However, in a number of cases, GNAT
+ deliberately deviates from this advice, in which case the text describes
+ what GNAT does and why.
+ 
+ * Menu:
+ 
+ * RM 1.1.3(20); Error Detection: RM 1 1 3 20 Error Detection.
+ * RM 1.1.3(31); Child Units: RM 1 1 3 31 Child Units.
+ * RM 1.1.5(12); Bounded Errors: RM 1 1 5 12 Bounded Errors.
+ * RM 2.8(16); Pragmas: RM 2 8 16 Pragmas.
+ * RM 2.8(17-19); Pragmas: RM 2 8 17-19 Pragmas.
+ * RM 3.5.2(5); Alternative Character Sets: RM 3 5 2 5 Alternative Character Sets.
+ * RM 3.5.4(28); Integer Types: RM 3 5 4 28 Integer Types.
+ * RM 3.5.4(29); Integer Types: RM 3 5 4 29 Integer Types.
+ * RM 3.5.5(8); Enumeration Values: RM 3 5 5 8 Enumeration Values.
+ * RM 3.5.7(17); Float Types: RM 3 5 7 17 Float Types.
+ * RM 3.6.2(11); Multidimensional Arrays: RM 3 6 2 11 Multidimensional Arrays.
+ * RM 9.6(30-31); Duration’Small: RM 9 6 30-31 Duration’Small.
+ * RM 10.2.1(12); Consistent Representation: RM 10 2 1 12 Consistent Representation.
+ * RM 11.4.1(19); Exception Information: RM 11 4 1 19 Exception Information.
+ * RM 11.5(28); Suppression of Checks: RM 11 5 28 Suppression of Checks.
+ * RM 13.1 (21-24); Representation Clauses: RM 13 1 21-24 Representation Clauses.
+ * RM 13.2(6-8); Packed Types: RM 13 2 6-8 Packed Types.
+ * RM 13.3(14-19); Address Clauses: RM 13 3 14-19 Address Clauses.
+ * RM 13.3(29-35); Alignment Clauses: RM 13 3 29-35 Alignment Clauses.
+ * RM 13.3(42-43); Size Clauses: RM 13 3 42-43 Size Clauses.
+ * RM 13.3(50-56); Size Clauses: RM 13 3 50-56 Size Clauses.
+ * RM 13.3(71-73); Component Size Clauses: RM 13 3 71-73 Component Size Clauses.
+ * RM 13.4(9-10); Enumeration Representation Clauses: RM 13 4 9-10 Enumeration Representation Clauses.
+ * RM 13.5.1(17-22); Record Representation Clauses: RM 13 5 1 17-22 Record Representation Clauses.
+ * RM 13.5.2(5); Storage Place Attributes: RM 13 5 2 5 Storage Place Attributes.
+ * RM 13.5.3(7-8); Bit Ordering: RM 13 5 3 7-8 Bit Ordering.
+ * RM 13.7(37); Address as Private: RM 13 7 37 Address as Private.
+ * RM 13.7.1(16); Address Operations: RM 13 7 1 16 Address Operations.
+ * RM 13.9(14-17); Unchecked Conversion: RM 13 9 14-17 Unchecked Conversion.
+ * RM 13.11(23-25); Implicit Heap Usage: RM 13 11 23-25 Implicit Heap Usage.
+ * RM 13.11.2(17); Unchecked Deallocation: RM 13 11 2 17 Unchecked Deallocation.
+ * RM 13.13.2(1.6); Stream Oriented Attributes: RM 13 13 2 1 6 Stream Oriented Attributes.
+ * RM A.1(52); Names of Predefined Numeric Types: RM A 1 52 Names of Predefined Numeric Types.
+ * RM A.3.2(49); Ada.Characters.Handling: RM A 3 2 49 Ada Characters Handling.
+ * RM A.4.4(106); Bounded-Length String Handling: RM A 4 4 106 Bounded-Length String Handling.
+ * RM A.5.2(46-47); Random Number Generation: RM A 5 2 46-47 Random Number Generation.
+ * RM A.10.7(23); Get_Immediate: RM A 10 7 23 Get_Immediate.
+ * RM A.18; Containers: RM A 18 Containers.
+ * RM B.1(39-41); Pragma Export: RM B 1 39-41 Pragma Export.
+ * RM B.2(12-13); Package Interfaces: RM B 2 12-13 Package Interfaces.
+ * RM B.3(63-71); Interfacing with C: RM B 3 63-71 Interfacing with C.
+ * RM B.4(95-98); Interfacing with COBOL: RM B 4 95-98 Interfacing with COBOL.
+ * RM B.5(22-26); Interfacing with Fortran: RM B 5 22-26 Interfacing with Fortran.
+ * RM C.1(3-5); Access to Machine Operations: RM C 1 3-5 Access to Machine Operations.
+ * RM C.1(10-16); Access to Machine Operations: RM C 1 10-16 Access to Machine Operations.
+ * RM C.3(28); Interrupt Support: RM C 3 28 Interrupt Support.
+ * RM C.3.1(20-21); Protected Procedure Handlers: RM C 3 1 20-21 Protected Procedure Handlers.
+ * RM C.3.2(25); Package Interrupts: RM C 3 2 25 Package Interrupts.
+ * RM C.4(14); Pre-elaboration Requirements: RM C 4 14 Pre-elaboration Requirements.
+ * RM C.5(8); Pragma Discard_Names: RM C 5 8 Pragma Discard_Names.
+ * RM C.7.2(30); The Package Task_Attributes: RM C 7 2 30 The Package Task_Attributes.
+ * RM D.3(17); Locking Policies: RM D 3 17 Locking Policies.
+ * RM D.4(16); Entry Queuing Policies: RM D 4 16 Entry Queuing Policies.
+ * RM D.6(9-10); Preemptive Abort: RM D 6 9-10 Preemptive Abort.
+ * RM D.7(21); Tasking Restrictions: RM D 7 21 Tasking Restrictions.
+ * RM D.8(47-49); Monotonic Time: RM D 8 47-49 Monotonic Time.
+ * RM E.5(28-29); Partition Communication Subsystem: RM E 5 28-29 Partition Communication Subsystem.
+ * RM F(7); COBOL Support: RM F 7 COBOL Support.
+ * RM F.1(2); Decimal Radix Support: RM F 1 2 Decimal Radix Support.
+ * RM G; Numerics: RM G Numerics.
+ * RM G.1.1(56-58); Complex Types: RM G 1 1 56-58 Complex Types.
+ * RM G.1.2(49); Complex Elementary Functions: RM G 1 2 49 Complex Elementary Functions.
+ * RM G.2.4(19); Accuracy Requirements: RM G 2 4 19 Accuracy Requirements.
+ * RM G.2.6(15); Complex Arithmetic Accuracy: RM G 2 6 15 Complex Arithmetic Accuracy.
+ * RM H.6(15/2); Pragma Partition_Elaboration_Policy: RM H 6 15/2 Pragma Partition_Elaboration_Policy.
+ 
+ 
+ File: gnat_rm.info,  Node: RM 1 1 3 20 Error Detection,  Next: RM 1 1 3 31 Child Units,  Up: Implementation Advice
+ 
+ 6.1 RM 1.1.3(20): Error Detection
+ =================================
+ 
+      “If an implementation detects the use of an unsupported Specialized
+      Needs Annex feature at run time, it should raise ‘Program_Error’ if
+      feasible.”
+ 
+ Not relevant.  All specialized needs annex features are either
+ supported, or diagnosed at compile time.
+ 
+ 
+ File: gnat_rm.info,  Node: RM 1 1 3 31 Child Units,  Next: RM 1 1 5 12 Bounded Errors,  Prev: RM 1 1 3 20 Error Detection,  Up: Implementation Advice
+ 
+ 6.2 RM 1.1.3(31): Child Units
+ =============================
+ 
+      “If an implementation wishes to provide implementation-defined
+      extensions to the functionality of a language-defined library unit,
+      it should normally do so by adding children to the library unit.”
+ 
+ Followed.
+ 
+ 
+ File: gnat_rm.info,  Node: RM 1 1 5 12 Bounded Errors,  Next: RM 2 8 16 Pragmas,  Prev: RM 1 1 3 31 Child Units,  Up: Implementation Advice
+ 
+ 6.3 RM 1.1.5(12): Bounded Errors
+ ================================
+ 
+      “If an implementation detects a bounded error or erroneous
+      execution, it should raise ‘Program_Error’.”
+ 
+ Followed in all cases in which the implementation detects a bounded
+ error or erroneous execution.  Not all such situations are detected at
+ runtime.
+ 
+ 
+ File: gnat_rm.info,  Node: RM 2 8 16 Pragmas,  Next: RM 2 8 17-19 Pragmas,  Prev: RM 1 1 5 12 Bounded Errors,  Up: Implementation Advice
+ 
+ 6.4 RM 2.8(16): Pragmas
+ =======================
+ 
+      “Normally, implementation-defined pragmas should have no semantic
+      effect for error-free programs; that is, if the
+      implementation-defined pragmas are removed from a working program,
+      the program should still be legal, and should still have the same
+      semantics.”
+ 
+ The following implementation defined pragmas are exceptions to this
+ rule:
+ 
+ Pragma                   Explanation
+                          
+ -------------------------------------------------
+                          
+ ‘Abort_Defer’            Affects semantics
+                          
+                          
+ ‘Ada_83’                 Affects legality
+                          
+                          
+ ‘Assert’                 Affects semantics
+                          
+                          
+ ‘CPP_Class’              Affects semantics
+                          
+                          
+ ‘CPP_Constructor’        Affects semantics
+                          
+                          
+ ‘Debug’                  Affects semantics
+                          
+                          
+ ‘Interface_Name’         Affects semantics
+                          
+                          
+ ‘Machine_Attribute’      Affects semantics
+                          
+                          
+ ‘Unimplemented_Unit’     Affects legality
+                          
+                          
+ ‘Unchecked_Union’        Affects semantics
+                          
+ 
+ In each of the above cases, it is essential to the purpose of the pragma
+ that this advice not be followed.  For details see *note Implementation
+ Defined Pragmas: 7.
+ 
+ 
+ File: gnat_rm.info,  Node: RM 2 8 17-19 Pragmas,  Next: RM 3 5 2 5 Alternative Character Sets,  Prev: RM 2 8 16 Pragmas,  Up: Implementation Advice
+ 
+ 6.5 RM 2.8(17-19): Pragmas
+ ==========================
+ 
+      “Normally, an implementation should not define pragmas that can
+      make an illegal program legal, except as follows:
+ 
+         * A pragma used to complete a declaration, such as a pragma
+           ‘Import’;
+ 
+         * A pragma used to configure the environment by adding,
+           removing, or replacing ‘library_items’.”
+ 
+ See *note RM 2.8(16); Pragmas: 21c.
+ 
+ 
+ File: gnat_rm.info,  Node: RM 3 5 2 5 Alternative Character Sets,  Next: RM 3 5 4 28 Integer Types,  Prev: RM 2 8 17-19 Pragmas,  Up: Implementation Advice
+ 
+ 6.6 RM 3.5.2(5): Alternative Character Sets
+ ===========================================
+ 
+      “If an implementation supports a mode with alternative
+      interpretations for ‘Character’ and ‘Wide_Character’, the set of
+      graphic characters of ‘Character’ should nevertheless remain a
+      proper subset of the set of graphic characters of ‘Wide_Character’.
+      Any character set ‘localizations’ should be reflected in the
+      results of the subprograms defined in the language-defined package
+      ‘Characters.Handling’ (see A.3) available in such a mode.  In a
+      mode with an alternative interpretation of ‘Character’, the
+      implementation should also support a corresponding change in what
+      is a legal ‘identifier_letter’.”
+ 
+ Not all wide character modes follow this advice, in particular the JIS
+ and IEC modes reflect standard usage in Japan, and in these encoding,
+ the upper half of the Latin-1 set is not part of the wide-character
+ subset, since the most significant bit is used for wide character
+ encoding.  However, this only applies to the external forms.  Internally
+ there is no such restriction.
+ 
+ 
+ File: gnat_rm.info,  Node: RM 3 5 4 28 Integer Types,  Next: RM 3 5 4 29 Integer Types,  Prev: RM 3 5 2 5 Alternative Character Sets,  Up: Implementation Advice
+ 
+ 6.7 RM 3.5.4(28): Integer Types
+ ===============================
+ 
+      “An implementation should support ‘Long_Integer’ in addition to
+      ‘Integer’ if the target machine supports 32-bit (or longer)
+      arithmetic.  No other named integer subtypes are recommended for
+      package ‘Standard’.  Instead, appropriate named integer subtypes
+      should be provided in the library package ‘Interfaces’ (see B.2).”
+ 
+ ‘Long_Integer’ is supported.  Other standard integer types are supported
+ so this advice is not fully followed.  These types are supported for
+ convenient interface to C, and so that all hardware types of the machine
+ are easily available.
+ 
+ 
+ File: gnat_rm.info,  Node: RM 3 5 4 29 Integer Types,  Next: RM 3 5 5 8 Enumeration Values,  Prev: RM 3 5 4 28 Integer Types,  Up: Implementation Advice
+ 
+ 6.8 RM 3.5.4(29): Integer Types
+ ===============================
+ 
+      “An implementation for a two’s complement machine should support
+      modular types with a binary modulus up to ‘System.Max_Int*2+2’.  An
+      implementation should support a non-binary modules up to
+      ‘Integer'Last’.”
+ 
+ Followed.
+ 
+ 
+ File: gnat_rm.info,  Node: RM 3 5 5 8 Enumeration Values,  Next: RM 3 5 7 17 Float Types,  Prev: RM 3 5 4 29 Integer Types,  Up: Implementation Advice
+ 
+ 6.9 RM 3.5.5(8): Enumeration Values
+ ===================================
+ 
+      “For the evaluation of a call on ‘S'Pos’ for an enumeration
+      subtype, if the value of the operand does not correspond to the
+      internal code for any enumeration literal of its type (perhaps due
+      to an un-initialized variable), then the implementation should
+      raise ‘Program_Error’.  This is particularly important for
+      enumeration types with noncontiguous internal codes specified by an
+      enumeration_representation_clause.”
+ 
+ Followed.
+ 
+ 
+ File: gnat_rm.info,  Node: RM 3 5 7 17 Float Types,  Next: RM 3 6 2 11 Multidimensional Arrays,  Prev: RM 3 5 5 8 Enumeration Values,  Up: Implementation Advice
+ 
+ 6.10 RM 3.5.7(17): Float Types
+ ==============================
+ 
+      “An implementation should support ‘Long_Float’ in addition to
+      ‘Float’ if the target machine supports 11 or more digits of
+      precision.  No other named floating point subtypes are recommended
+      for package ‘Standard’.  Instead, appropriate named floating point
+      subtypes should be provided in the library package ‘Interfaces’
+      (see B.2).”
+ 
+ ‘Short_Float’ and ‘Long_Long_Float’ are also provided.  The former
+ provides improved compatibility with other implementations supporting
+ this type.  The latter corresponds to the highest precision
+ floating-point type supported by the hardware.  On most machines, this
+ will be the same as ‘Long_Float’, but on some machines, it will
+ correspond to the IEEE extended form.  The notable case is all x86
+ implementations, where ‘Long_Long_Float’ corresponds to the 80-bit
+ extended precision format supported in hardware on this processor.  Note
+ that the 128-bit format on SPARC is not supported, since this is a
+ software rather than a hardware format.
+ 
+ 
+ File: gnat_rm.info,  Node: RM 3 6 2 11 Multidimensional Arrays,  Next: RM 9 6 30-31 Duration’Small,  Prev: RM 3 5 7 17 Float Types,  Up: Implementation Advice
+ 
+ 6.11 RM 3.6.2(11): Multidimensional Arrays
+ ==========================================
+ 
+      “An implementation should normally represent multidimensional
+      arrays in row-major order, consistent with the notation used for
+      multidimensional array aggregates (see 4.3.3).  However, if a
+      pragma ‘Convention’ (‘Fortran’, …) applies to a multidimensional
+      array type, then column-major order should be used instead (see
+      B.5, ‘Interfacing with Fortran’).”
+ 
+ Followed.
+ 
+ 
+ File: gnat_rm.info,  Node: RM 9 6 30-31 Duration’Small,  Next: RM 10 2 1 12 Consistent Representation,  Prev: RM 3 6 2 11 Multidimensional Arrays,  Up: Implementation Advice
+ 
+ 6.12 RM 9.6(30-31): Duration’Small
+ ==================================
+ 
+      “Whenever possible in an implementation, the value of
+      ‘Duration'Small’ should be no greater than 100 microseconds.”
+ 
+ Followed.  (‘Duration'Small’ = 10**(-9)).
+ 
+      “The time base for ‘delay_relative_statements’ should be monotonic;
+      it need not be the same time base as used for ‘Calendar.Clock’.”
+ 
+ Followed.
+ 
+ 
+ File: gnat_rm.info,  Node: RM 10 2 1 12 Consistent Representation,  Next: RM 11 4 1 19 Exception Information,  Prev: RM 9 6 30-31 Duration’Small,  Up: Implementation Advice
+ 
+ 6.13 RM 10.2.1(12): Consistent Representation
+ =============================================
+ 
+      “In an implementation, a type declared in a pre-elaborated package
+      should have the same representation in every elaboration of a given
+      version of the package, whether the elaborations occur in distinct
+      executions of the same program, or in executions of distinct
+      programs or partitions that include the given version.”
+ 
+ Followed, except in the case of tagged types.  Tagged types involve
+ implicit pointers to a local copy of a dispatch table, and these
+ pointers have representations which thus depend on a particular
+ elaboration of the package.  It is not easy to see how it would be
+ possible to follow this advice without severely impacting efficiency of
+ execution.
+ 
+ 
+ File: gnat_rm.info,  Node: RM 11 4 1 19 Exception Information,  Next: RM 11 5 28 Suppression of Checks,  Prev: RM 10 2 1 12 Consistent Representation,  Up: Implementation Advice
+ 
+ 6.14 RM 11.4.1(19): Exception Information
+ =========================================
+ 
+      “‘Exception_Message’ by default and ‘Exception_Information’ should
+      produce information useful for debugging.  ‘Exception_Message’
+      should be short, about one line.  ‘Exception_Information’ can be
+      long.  ‘Exception_Message’ should not include the ‘Exception_Name’.
+      ‘Exception_Information’ should include both the ‘Exception_Name’
+      and the ‘Exception_Message’.”
+ 
+ Followed.  For each exception that doesn’t have a specified
+ ‘Exception_Message’, the compiler generates one containing the location
+ of the raise statement.  This location has the form ‘file_name:line’,
+ where file_name is the short file name (without path information) and
+ line is the line number in the file.  Note that in the case of the Zero
+ Cost Exception mechanism, these messages become redundant with the
+ Exception_Information that contains a full backtrace of the calling
+ sequence, so they are disabled.  To disable explicitly the generation of
+ the source location message, use the Pragma ‘Discard_Names’.
+ 
+ 
+ File: gnat_rm.info,  Node: RM 11 5 28 Suppression of Checks,  Next: RM 13 1 21-24 Representation Clauses,  Prev: RM 11 4 1 19 Exception Information,  Up: Implementation Advice
+ 
+ 6.15 RM 11.5(28): Suppression of Checks
+ =======================================
+ 
+      “The implementation should minimize the code executed for checks
+      that have been suppressed.”
+ 
+ Followed.
+ 
+ 
+ File: gnat_rm.info,  Node: RM 13 1 21-24 Representation Clauses,  Next: RM 13 2 6-8 Packed Types,  Prev: RM 11 5 28 Suppression of Checks,  Up: Implementation Advice
+ 
+ 6.16 RM 13.1 (21-24): Representation Clauses
+ ============================================
+ 
+      “The recommended level of support for all representation items is
+      qualified as follows:
+ 
+      An implementation need not support representation items containing
+      nonstatic expressions, except that an implementation should support
+      a representation item for a given entity if each nonstatic
+      expression in the representation item is a name that statically
+      denotes a constant declared before the entity.”
+ 
+ Followed.  In fact, GNAT goes beyond the recommended level of support by
+ allowing nonstatic expressions in some representation clauses even
+ without the need to declare constants initialized with the values of
+ such expressions.  For example:
+ 
+        X : Integer;
+        Y : Float;
+        for Y'Address use X'Address;>>
+ 
+ 
+      "An implementation need not support a specification for the ``Size``
+      for a given composite subtype, nor the size or storage place for an
+      object (including a component) of a given composite subtype, unless the
+      constraints on the subtype and its composite subcomponents (if any) are
+      all static constraints."
+ 
+ Followed.  Size Clauses are not permitted on nonstatic components, as
+ described above.
+ 
+      “An aliased component, or a component whose type is by-reference,
+      should always be allocated at an addressable location.”
+ 
+ Followed.
+ 
+ 
+ File: gnat_rm.info,  Node: RM 13 2 6-8 Packed Types,  Next: RM 13 3 14-19 Address Clauses,  Prev: RM 13 1 21-24 Representation Clauses,  Up: Implementation Advice
+ 
+ 6.17 RM 13.2(6-8): Packed Types
+ ===============================
+ 
+      “If a type is packed, then the implementation should try to
+      minimize storage allocated to objects of the type, possibly at the
+      expense of speed of accessing components, subject to reasonable
+      complexity in addressing calculations.
+ 
+      The recommended level of support pragma ‘Pack’ is:
+ 
+      For a packed record type, the components should be packed as
+      tightly as possible subject to the Sizes of the component subtypes,
+      and subject to any ‘record_representation_clause’ that applies to
+      the type; the implementation may, but need not, reorder components
+      or cross aligned word boundaries to improve the packing.  A
+      component whose ‘Size’ is greater than the word size may be
+      allocated an integral number of words.”
+ 
+ Followed.  Tight packing of arrays is supported for all component sizes
+ up to 64-bits.  If the array component size is 1 (that is to say, if the
+ component is a boolean type or an enumeration type with two values) then
+ values of the type are implicitly initialized to zero.  This happens
+ both for objects of the packed type, and for objects that have a
+ subcomponent of the packed type.
+ 
+ 
+ File: gnat_rm.info,  Node: RM 13 3 14-19 Address Clauses,  Next: RM 13 3 29-35 Alignment Clauses,  Prev: RM 13 2 6-8 Packed Types,  Up: Implementation Advice
+ 
+ 6.18 RM 13.3(14-19): Address Clauses
+ ====================================
+ 
+      “For an array ‘X’, ‘X'Address’ should point at the first component
+      of the array, and not at the array bounds.”
+ 
+ Followed.
+ 
+      “The recommended level of support for the ‘Address’ attribute is:
+ 
+      ‘X'Address’ should produce a useful result if ‘X’ is an object that
+      is aliased or of a by-reference type, or is an entity whose
+      ‘Address’ has been specified.”
+ 
+ Followed.  A valid address will be produced even if none of those
+ conditions have been met.  If necessary, the object is forced into
+ memory to ensure the address is valid.
+ 
+      “An implementation should support ‘Address’ clauses for imported
+      subprograms.”
+ 
+ Followed.
+ 
+      “Objects (including subcomponents) that are aliased or of a
+      by-reference type should be allocated on storage element
+      boundaries.”
+ 
+ Followed.
+ 
+      “If the ‘Address’ of an object is specified, or it is imported or
+      exported, then the implementation should not perform optimizations
+      based on assumptions of no aliases.”
+ 
+ Followed.
+ 
+ 
+ File: gnat_rm.info,  Node: RM 13 3 29-35 Alignment Clauses,  Next: RM 13 3 42-43 Size Clauses,  Prev: RM 13 3 14-19 Address Clauses,  Up: Implementation Advice
+ 
+ 6.19 RM 13.3(29-35): Alignment Clauses
+ ======================================
+ 
+      “The recommended level of support for the ‘Alignment’ attribute for
+      subtypes is:
+ 
+      An implementation should support specified Alignments that are
+      factors and multiples of the number of storage elements per word,
+      subject to the following:”
+ 
+ Followed.
+ 
+      “An implementation need not support specified Alignments for
+      combinations of Sizes and Alignments that cannot be easily loaded
+      and stored by available machine instructions.”
+ 
+ Followed.
+ 
+      “An implementation need not support specified Alignments that are
+      greater than the maximum ‘Alignment’ the implementation ever
+      returns by default.”
+ 
+ Followed.
+ 
+      “The recommended level of support for the ‘Alignment’ attribute for
+      objects is:
+ 
+      Same as above, for subtypes, but in addition:”
+ 
+ Followed.
+ 
+      “For stand-alone library-level objects of statically constrained
+      subtypes, the implementation should support all alignments
+      supported by the target linker.  For example, page alignment is
+      likely to be supported for such objects, but not for subtypes.”
+ 
+ Followed.
+ 
+ 
+ File: gnat_rm.info,  Node: RM 13 3 42-43 Size Clauses,  Next: RM 13 3 50-56 Size Clauses,  Prev: RM 13 3 29-35 Alignment Clauses,  Up: Implementation Advice
+ 
+ 6.20 RM 13.3(42-43): Size Clauses
+ =================================
+ 
+      “The recommended level of support for the ‘Size’ attribute of
+      objects is:
+ 
+      A ‘Size’ clause should be supported for an object if the specified
+      ‘Size’ is at least as large as its subtype’s ‘Size’, and
+      corresponds to a size in storage elements that is a multiple of the
+      object’s ‘Alignment’ (if the ‘Alignment’ is nonzero).”
+ 
+ Followed.
+ 
+ 
+ File: gnat_rm.info,  Node: RM 13 3 50-56 Size Clauses,  Next: RM 13 3 71-73 Component Size Clauses,  Prev: RM 13 3 42-43 Size Clauses,  Up: Implementation Advice
+ 
+ 6.21 RM 13.3(50-56): Size Clauses
+ =================================
+ 
+      “If the ‘Size’ of a subtype is specified, and allows for efficient
+      independent addressability (see 9.10) on the target architecture,
+      then the ‘Size’ of the following objects of the subtype should
+      equal the ‘Size’ of the subtype:
+ 
+      Aliased objects (including components).”
+ 
+ Followed.
+ 
+      “‘Size’ clause on a composite subtype should not affect the
+      internal layout of components.”
+ 
+ Followed.  But note that this can be overridden by use of the
+ implementation pragma Implicit_Packing in the case of packed arrays.
+ 
+      “The recommended level of support for the ‘Size’ attribute of
+      subtypes is:
+ 
+      The ‘Size’ (if not specified) of a static discrete or fixed point
+      subtype should be the number of bits needed to represent each value
+      belonging to the subtype using an unbiased representation, leaving
+      space for a sign bit only if the subtype contains negative values.
+      If such a subtype is a first subtype, then an implementation should
+      support a specified ‘Size’ for it that reflects this
+      representation.”
+ 
+ Followed.
+ 
+      “For a subtype implemented with levels of indirection, the ‘Size’
+      should include the size of the pointers, but not the size of what
+      they point at.”
+ 
+ Followed.
+ 
+ 
+ File: gnat_rm.info,  Node: RM 13 3 71-73 Component Size Clauses,  Next: RM 13 4 9-10 Enumeration Representation Clauses,  Prev: RM 13 3 50-56 Size Clauses,  Up: Implementation Advice
+ 
+ 6.22 RM 13.3(71-73): Component Size Clauses
+ ===========================================
+ 
+      “The recommended level of support for the ‘Component_Size’
+      attribute is:
+ 
+      An implementation need not support specified ‘Component_Sizes’ that
+      are less than the ‘Size’ of the component subtype.”
+ 
+ Followed.
+ 
+      “An implementation should support specified Component_Sizes that
+      are factors and multiples of the word size.  For such
+      Component_Sizes, the array should contain no gaps between
+      components.  For other Component_Sizes (if supported), the array
+      should contain no gaps between components when packing is also
+      specified; the implementation should forbid this combination in
+      cases where it cannot support a no-gaps representation.”
+ 
+ Followed.
+ 
+ 
+ File: gnat_rm.info,  Node: RM 13 4 9-10 Enumeration Representation Clauses,  Next: RM 13 5 1 17-22 Record Representation Clauses,  Prev: RM 13 3 71-73 Component Size Clauses,  Up: Implementation Advice
+ 
+ 6.23 RM 13.4(9-10): Enumeration Representation Clauses
+ ======================================================
+ 
+      “The recommended level of support for enumeration representation
+      clauses is:
+ 
+      An implementation need not support enumeration representation
+      clauses for boolean types, but should at minimum support the
+      internal codes in the range ‘System.Min_Int .. System.Max_Int’.”
+ 
+ Followed.
+ 
+ 
+ File: gnat_rm.info,  Node: RM 13 5 1 17-22 Record Representation Clauses,  Next: RM 13 5 2 5 Storage Place Attributes,  Prev: RM 13 4 9-10 Enumeration Representation Clauses,  Up: Implementation Advice
+ 
+ 6.24 RM 13.5.1(17-22): Record Representation Clauses
+ ====================================================
+ 
+      “The recommended level of support for
+      ‘record_representation_clause’s is:
+ 
+      An implementation should support storage places that can be
+      extracted with a load, mask, shift sequence of machine code, and
+      set with a load, shift, mask, store sequence, given the available
+      machine instructions and run-time model.”
+ 
+ Followed.
+ 
+      “A storage place should be supported if its size is equal to the
+      ‘Size’ of the component subtype, and it starts and ends on a
+      boundary that obeys the ‘Alignment’ of the component subtype.”
+ 
+ Followed.
+ 
+      “If the default bit ordering applies to the declaration of a given
+      type, then for a component whose subtype’s ‘Size’ is less than the
+      word size, any storage place that does not cross an aligned word
+      boundary should be supported.”
+ 
+ Followed.
+ 
+      “An implementation may reserve a storage place for the tag field of
+      a tagged type, and disallow other components from overlapping that
+      place.”
+ 
+ Followed.  The storage place for the tag field is the beginning of the
+ tagged record, and its size is Address’Size.  GNAT will reject an
+ explicit component clause for the tag field.
+ 
+      “An implementation need not support a ‘component_clause’ for a
+      component of an extension part if the storage place is not after
+      the storage places of all components of the parent type, whether or
+      not those storage places had been specified.”
+ 
+ Followed.  The above advice on record representation clauses is
+ followed, and all mentioned features are implemented.
+ 
+ 
+ File: gnat_rm.info,  Node: RM 13 5 2 5 Storage Place Attributes,  Next: RM 13 5 3 7-8 Bit Ordering,  Prev: RM 13 5 1 17-22 Record Representation Clauses,  Up: Implementation Advice
+ 
+ 6.25 RM 13.5.2(5): Storage Place Attributes
+ ===========================================
+ 
+      “If a component is represented using some form of pointer (such as
+      an offset) to the actual data of the component, and this data is
+      contiguous with the rest of the object, then the storage place
+      attributes should reflect the place of the actual data, not the
+      pointer.  If a component is allocated discontinuously from the rest
+      of the object, then a warning should be generated upon reference to
+      one of its storage place attributes.”
+ 
+ Followed.  There are no such components in GNAT.
+ 
+ 
+ File: gnat_rm.info,  Node: RM 13 5 3 7-8 Bit Ordering,  Next: RM 13 7 37 Address as Private,  Prev: RM 13 5 2 5 Storage Place Attributes,  Up: Implementation Advice
+ 
+ 6.26 RM 13.5.3(7-8): Bit Ordering
+ =================================
+ 
+      “The recommended level of support for the non-default bit ordering
+      is:
+ 
+      If ‘Word_Size’ = ‘Storage_Unit’, then the implementation should
+      support the non-default bit ordering in addition to the default bit
+      ordering.”
+ 
+ Followed.  Word size does not equal storage size in this implementation.
+ Thus non-default bit ordering is not supported.
+ 
+ 
+ File: gnat_rm.info,  Node: RM 13 7 37 Address as Private,  Next: RM 13 7 1 16 Address Operations,  Prev: RM 13 5 3 7-8 Bit Ordering,  Up: Implementation Advice
+ 
+ 6.27 RM 13.7(37): Address as Private
+ ====================================
+ 
+      “‘Address’ should be of a private type.”
+ 
+ Followed.
+ 
+ 
+ File: gnat_rm.info,  Node: RM 13 7 1 16 Address Operations,  Next: RM 13 9 14-17 Unchecked Conversion,  Prev: RM 13 7 37 Address as Private,  Up: Implementation Advice
+ 
+ 6.28 RM 13.7.1(16): Address Operations
+ ======================================
+ 
+      “Operations in ‘System’ and its children should reflect the target
+      environment semantics as closely as is reasonable.  For example, on
+      most machines, it makes sense for address arithmetic to ‘wrap
+      around’.  Operations that do not make sense should raise
+      ‘Program_Error’.”
+ 
+ Followed.  Address arithmetic is modular arithmetic that wraps around.
+ No operation raises ‘Program_Error’, since all operations make sense.
+ 
+ 
+ File: gnat_rm.info,  Node: RM 13 9 14-17 Unchecked Conversion,  Next: RM 13 11 23-25 Implicit Heap Usage,  Prev: RM 13 7 1 16 Address Operations,  Up: Implementation Advice
+ 
+ 6.29 RM 13.9(14-17): Unchecked Conversion
+ =========================================
+ 
+      “The ‘Size’ of an array object should not include its bounds;
+      hence, the bounds should not be part of the converted data.”
+ 
+ Followed.
+ 
+      “The implementation should not generate unnecessary run-time checks
+      to ensure that the representation of ‘S’ is a representation of the
+      target type.  It should take advantage of the permission to return
+      by reference when possible.  Restrictions on unchecked conversions
+      should be avoided unless required by the target environment.”
+ 
+ Followed.  There are no restrictions on unchecked conversion.  A warning
+ is generated if the source and target types do not have the same size
+ since the semantics in this case may be target dependent.
+ 
+      “The recommended level of support for unchecked conversions is:
+ 
+      Unchecked conversions should be supported and should be reversible
+      in the cases where this clause defines the result.  To enable
+      meaningful use of unchecked conversion, a contiguous representation
+      should be used for elementary subtypes, for statically constrained
+      array subtypes whose component subtype is one of the subtypes
+      described in this paragraph, and for record subtypes without
+      discriminants whose component subtypes are described in this
+      paragraph.”
+ 
+ Followed.
+ 
+ 
+ File: gnat_rm.info,  Node: RM 13 11 23-25 Implicit Heap Usage,  Next: RM 13 11 2 17 Unchecked Deallocation,  Prev: RM 13 9 14-17 Unchecked Conversion,  Up: Implementation Advice
+ 
+ 6.30 RM 13.11(23-25): Implicit Heap Usage
+ =========================================
+ 
+      “An implementation should document any cases in which it
+      dynamically allocates heap storage for a purpose other than the
+      evaluation of an allocator.”
+ 
+ Followed, the only other points at which heap storage is dynamically
+ allocated are as follows:
+ 
+    * At initial elaboration time, to allocate dynamically sized global
+      objects.
+ 
+    * To allocate space for a task when a task is created.
+ 
+    * To extend the secondary stack dynamically when needed.  The
+      secondary stack is used for returning variable length results.
+ 
+      “A default (implementation-provided) storage pool for an
+      access-to-constant type should not have overhead to support
+      deallocation of individual objects.”
+ 
+ Followed.
+ 
+      “A storage pool for an anonymous access type should be created at
+      the point of an allocator for the type, and be reclaimed when the
+      designated object becomes inaccessible.”
+ 
+ Followed.
+ 
+ 
+ File: gnat_rm.info,  Node: RM 13 11 2 17 Unchecked Deallocation,  Next: RM 13 13 2 1 6 Stream Oriented Attributes,  Prev: RM 13 11 23-25 Implicit Heap Usage,  Up: Implementation Advice
+ 
+ 6.31 RM 13.11.2(17): Unchecked Deallocation
+ ===========================================
+ 
+      “For a standard storage pool, ‘Free’ should actually reclaim the
+      storage.”
+ 
+ Followed.
+ 
+ 
+ File: gnat_rm.info,  Node: RM 13 13 2 1 6 Stream Oriented Attributes,  Next: RM A 1 52 Names of Predefined Numeric Types,  Prev: RM 13 11 2 17 Unchecked Deallocation,  Up: Implementation Advice
+ 
+ 6.32 RM 13.13.2(1.6): Stream Oriented Attributes
+ ================================================
+ 
+      “If not specified, the value of Stream_Size for an elementary type
+      should be the number of bits that corresponds to the minimum number
+      of stream elements required by the first subtype of the type,
+      rounded up to the nearest factor or multiple of the word size that
+      is also a multiple of the stream element size.”
+ 
+ Followed, except that the number of stream elements is 1, 2, 3, 4 or 8.
+ The Stream_Size may be used to override the default choice.
+ 
+ The default implementation is based on direct binary representations and
+ is therefore target- and endianness-dependent.  To address this issue,
+ GNAT also supplies an alternate implementation of the stream attributes
+ ‘Read’ and ‘Write’, which uses the target-independent XDR standard
+ representation for scalar types.  This XDR alternative can be enabled
+ via the binder switch -xdr.
+ 
+ 
+ File: gnat_rm.info,  Node: RM A 1 52 Names of Predefined Numeric Types,  Next: RM A 3 2 49 Ada Characters Handling,  Prev: RM 13 13 2 1 6 Stream Oriented Attributes,  Up: Implementation Advice
+ 
+ 6.33 RM A.1(52): Names of Predefined Numeric Types
+ ==================================================
+ 
+      “If an implementation provides additional named predefined integer
+      types, then the names should end with ‘Integer’ as in
+      ‘Long_Integer’.  If an implementation provides additional named
+      predefined floating point types, then the names should end with
+      ‘Float’ as in ‘Long_Float’.”
+ 
+ Followed.
+ 
+ 
+ File: gnat_rm.info,  Node: RM A 3 2 49 Ada Characters Handling,  Next: RM A 4 4 106 Bounded-Length String Handling,  Prev: RM A 1 52 Names of Predefined Numeric Types,  Up: Implementation Advice
+ 
+ 6.34 RM A.3.2(49): ‘Ada.Characters.Handling’
+ ============================================
+ 
+      “If an implementation provides a localized definition of
+      ‘Character’ or ‘Wide_Character’, then the effects of the
+      subprograms in ‘Characters.Handling’ should reflect the
+      localizations.  See also 3.5.2.”
+ 
+ Followed.  GNAT provides no such localized definitions.
+ 
+ 
+ File: gnat_rm.info,  Node: RM A 4 4 106 Bounded-Length String Handling,  Next: RM A 5 2 46-47 Random Number Generation,  Prev: RM A 3 2 49 Ada Characters Handling,  Up: Implementation Advice
+ 
+ 6.35 RM A.4.4(106): Bounded-Length String Handling
+ ==================================================
+ 
+      “Bounded string objects should not be implemented by implicit
+      pointers and dynamic allocation.”
+ 
+ Followed.  No implicit pointers or dynamic allocation are used.
+ 
+ 
+ File: gnat_rm.info,  Node: RM A 5 2 46-47 Random Number Generation,  Next: RM A 10 7 23 Get_Immediate,  Prev: RM A 4 4 106 Bounded-Length String Handling,  Up: Implementation Advice
+ 
+ 6.36 RM A.5.2(46-47): Random Number Generation
+ ==============================================
+ 
+      “Any storage associated with an object of type ‘Generator’ should
+      be reclaimed on exit from the scope of the object.”
+ 
+ Followed.
+ 
+      “If the generator period is sufficiently long in relation to the
+      number of distinct initiator values, then each possible value of
+      ‘Initiator’ passed to ‘Reset’ should initiate a sequence of random
+      numbers that does not, in a practical sense, overlap the sequence
+      initiated by any other value.  If this is not possible, then the
+      mapping between initiator values and generator states should be a
+      rapidly varying function of the initiator value.”
+ 
+ Followed.  The generator period is sufficiently long for the first
+ condition here to hold true.
+ 
+ 
+ File: gnat_rm.info,  Node: RM A 10 7 23 Get_Immediate,  Next: RM A 18 Containers,  Prev: RM A 5 2 46-47 Random Number Generation,  Up: Implementation Advice
+ 
+ 6.37 RM A.10.7(23): ‘Get_Immediate’
+ ===================================
+ 
+      “The ‘Get_Immediate’ procedures should be implemented with
+      unbuffered input.  For a device such as a keyboard, input should be
+      available if a key has already been typed, whereas for a disk file,
+      input should always be available except at end of file.  For a file
+      associated with a keyboard-like device, any line-editing features
+      of the underlying operating system should be disabled during the
+      execution of ‘Get_Immediate’.”
+ 
+ Followed on all targets except VxWorks.  For VxWorks, there is no way to
+ provide this functionality that does not result in the input buffer
+ being flushed before the ‘Get_Immediate’ call.  A special unit
+ ‘Interfaces.Vxworks.IO’ is provided that contains routines to enable
+ this functionality.
+ 
+ 
+ File: gnat_rm.info,  Node: RM A 18 Containers,  Next: RM B 1 39-41 Pragma Export,  Prev: RM A 10 7 23 Get_Immediate,  Up: Implementation Advice
+ 
+ 6.38 RM A.18: ‘Containers’
+ ==========================
+ 
+ All implementation advice pertaining to Ada.Containers and its child
+ units (that is, all implementation advice occurring within section A.18
+ and its subsections) is followed except for A.18.24(17):
+ 
+      “Bounded ordered set objects should be implemented without implicit
+      pointers or dynamic allocation.  “
+ 
+ The implementations of the two Reference_Preserving_Key functions of the
+ generic package Ada.Containers.Bounded_Ordered_Sets each currently make
+ use of dynamic allocation; other operations on bounded ordered set
+ objects follow the implementation advice.
+ 
+ 
+ File: gnat_rm.info,  Node: RM B 1 39-41 Pragma Export,  Next: RM B 2 12-13 Package Interfaces,  Prev: RM A 18 Containers,  Up: Implementation Advice
+ 
+ 6.39 RM B.1(39-41): Pragma ‘Export’
+ ===================================
+ 
+      “If an implementation supports pragma ‘Export’ to a given language,
+      then it should also allow the main subprogram to be written in that
+      language.  It should support some mechanism for invoking the
+      elaboration of the Ada library units included in the system, and
+      for invoking the finalization of the environment task.  On typical
+      systems, the recommended mechanism is to provide two subprograms
+      whose link names are ‘adainit’ and ‘adafinal’.  ‘adainit’ should
+      contain the elaboration code for library units.  ‘adafinal’ should
+      contain the finalization code.  These subprograms should have no
+      effect the second and subsequent time they are called.”
+ 
+ Followed.
+ 
+      “Automatic elaboration of pre-elaborated packages should be
+      provided when pragma ‘Export’ is supported.”
+ 
+ Followed when the main program is in Ada.  If the main program is in a
+ foreign language, then ‘adainit’ must be called to elaborate
+ pre-elaborated packages.
+ 
+      “For each supported convention ‘L’ other than ‘Intrinsic’, an
+      implementation should support ‘Import’ and ‘Export’ pragmas for
+      objects of ‘L’-compatible types and for subprograms, and pragma
+      ‘Convention’ for ‘L’-eligible types and for subprograms, presuming
+      the other language has corresponding features.  Pragma ‘Convention’
+      need not be supported for scalar types.”
+ 
+ Followed.
+ 
+ 
+ File: gnat_rm.info,  Node: RM B 2 12-13 Package Interfaces,  Next: RM B 3 63-71 Interfacing with C,  Prev: RM B 1 39-41 Pragma Export,  Up: Implementation Advice
+ 
+ 6.40 RM B.2(12-13): Package ‘Interfaces’
+ ========================================
+ 
+      “For each implementation-defined convention identifier, there
+      should be a child package of package Interfaces with the
+      corresponding name.  This package should contain any declarations
+      that would be useful for interfacing to the language
+      (implementation) represented by the convention.  Any declarations
+      useful for interfacing to any language on the given hardware
+      architecture should be provided directly in ‘Interfaces’.”
+ 
+ Followed.
+ 
+      “An implementation supporting an interface to C, COBOL, or Fortran
+      should provide the corresponding package or packages described in
+      the following clauses.”
+ 
+ Followed.  GNAT provides all the packages described in this section.
+ 
+ 
+ File: gnat_rm.info,  Node: RM B 3 63-71 Interfacing with C,  Next: RM B 4 95-98 Interfacing with COBOL,  Prev: RM B 2 12-13 Package Interfaces,  Up: Implementation Advice
+ 
+ 6.41 RM B.3(63-71): Interfacing with C
+ ======================================
+ 
+      “An implementation should support the following interface
+      correspondences between Ada and C.”
+ 
+ Followed.
+ 
+      “An Ada procedure corresponds to a void-returning C function.”
+ 
+ Followed.
+ 
+      “An Ada function corresponds to a non-void C function.”
+ 
+ Followed.
+ 
+      “An Ada ‘in’ scalar parameter is passed as a scalar argument to a C
+      function.”
+ 
+ Followed.
+ 
+      “An Ada ‘in’ parameter of an access-to-object type with designated
+      type ‘T’ is passed as a ‘t*’ argument to a C function, where ‘t’ is
+      the C type corresponding to the Ada type ‘T’.”
+ 
+ Followed.
+ 
+      “An Ada access ‘T’ parameter, or an Ada ‘out’ or ‘in out’ parameter
+      of an elementary type ‘T’, is passed as a ‘t*’ argument to a C
+      function, where ‘t’ is the C type corresponding to the Ada type
+      ‘T’.  In the case of an elementary ‘out’ or ‘in out’ parameter, a
+      pointer to a temporary copy is used to preserve by-copy semantics.”
+ 
+ Followed.
+ 
+      “An Ada parameter of a record type ‘T’, of any mode, is passed as a
+      ‘t*’ argument to a C function, where ‘t’ is the C structure
+      corresponding to the Ada type ‘T’.”
+ 
+ Followed.  This convention may be overridden by the use of the
+ C_Pass_By_Copy pragma, or Convention, or by explicitly specifying the
+ mechanism for a given call using an extended import or export pragma.
+ 
+      “An Ada parameter of an array type with component type ‘T’, of any
+      mode, is passed as a ‘t*’ argument to a C function, where ‘t’ is
+      the C type corresponding to the Ada type ‘T’.”
+ 
+ Followed.
+ 
+      “An Ada parameter of an access-to-subprogram type is passed as a
+      pointer to a C function whose prototype corresponds to the
+      designated subprogram’s specification.”
+ 
+ Followed.
+ 
+ 
+ File: gnat_rm.info,  Node: RM B 4 95-98 Interfacing with COBOL,  Next: RM B 5 22-26 Interfacing with Fortran,  Prev: RM B 3 63-71 Interfacing with C,  Up: Implementation Advice
+ 
+ 6.42 RM B.4(95-98): Interfacing with COBOL
+ ==========================================
+ 
+      “An Ada implementation should support the following interface
+      correspondences between Ada and COBOL.”
+ 
+ Followed.
+ 
+      “An Ada access ‘T’ parameter is passed as a ‘BY REFERENCE’ data
+      item of the COBOL type corresponding to ‘T’.”
+ 
+ Followed.
+ 
+      “An Ada in scalar parameter is passed as a ‘BY CONTENT’ data item
+      of the corresponding COBOL type.”
+ 
+ Followed.
+ 
+      “Any other Ada parameter is passed as a ‘BY REFERENCE’ data item of
+      the COBOL type corresponding to the Ada parameter type; for
+      scalars, a local copy is used if necessary to ensure by-copy
+      semantics.”
+ 
+ Followed.
+ 
+ 
+ File: gnat_rm.info,  Node: RM B 5 22-26 Interfacing with Fortran,  Next: RM C 1 3-5 Access to Machine Operations,  Prev: RM B 4 95-98 Interfacing with COBOL,  Up: Implementation Advice
+ 
+ 6.43 RM B.5(22-26): Interfacing with Fortran
+ ============================================
+ 
+      “An Ada implementation should support the following interface
+      correspondences between Ada and Fortran:”
+ 
+ Followed.
+ 
+      “An Ada procedure corresponds to a Fortran subroutine.”
+ 
+ Followed.
+ 
+      “An Ada function corresponds to a Fortran function.”
+ 
+ Followed.
+ 
+      “An Ada parameter of an elementary, array, or record type ‘T’ is
+      passed as a ‘T’ argument to a Fortran procedure, where ‘T’ is the
+      Fortran type corresponding to the Ada type ‘T’, and where the
+      INTENT attribute of the corresponding dummy argument matches the
+      Ada formal parameter mode; the Fortran implementation’s parameter
+      passing conventions are used.  For elementary types, a local copy
+      is used if necessary to ensure by-copy semantics.”
+ 
+ Followed.
+ 
+      “An Ada parameter of an access-to-subprogram type is passed as a
+      reference to a Fortran procedure whose interface corresponds to the
+      designated subprogram’s specification.”
+ 
+ Followed.
+ 
+ 
+ File: gnat_rm.info,  Node: RM C 1 3-5 Access to Machine Operations,  Next: RM C 1 10-16 Access to Machine Operations,  Prev: RM B 5 22-26 Interfacing with Fortran,  Up: Implementation Advice
+ 
+ 6.44 RM C.1(3-5): Access to Machine Operations
+ ==============================================
+ 
+      “The machine code or intrinsic support should allow access to all
+      operations normally available to assembly language programmers for
+      the target environment, including privileged instructions, if any.”
+ 
+ Followed.
+ 
+      “The interfacing pragmas (see Annex B) should support interface to
+      assembler; the default assembler should be associated with the
+      convention identifier ‘Assembler’.”
+ 
+ Followed.
+ 
+      “If an entity is exported to assembly language, then the
+      implementation should allocate it at an addressable location, and
+      should ensure that it is retained by the linking process, even if
+      not otherwise referenced from the Ada code.  The implementation
+      should assume that any call to a machine code or assembler
+      subprogram is allowed to read or update every object that is
+      specified as exported.”
+ 
+ Followed.
+ 
+ 
+ File: gnat_rm.info,  Node: RM C 1 10-16 Access to Machine Operations,  Next: RM C 3 28 Interrupt Support,  Prev: RM C 1 3-5 Access to Machine Operations,  Up: Implementation Advice
+ 
+ 6.45 RM C.1(10-16): Access to Machine Operations
+ ================================================
+ 
+      “The implementation should ensure that little or no overhead is
+      associated with calling intrinsic and machine-code subprograms.”
+ 
+ Followed for both intrinsics and machine-code subprograms.
+ 
+      “It is recommended that intrinsic subprograms be provided for
+      convenient access to any machine operations that provide special
+      capabilities or efficiency and that are not otherwise available
+      through the language constructs.”
+ 
+ Followed.  A full set of machine operation intrinsic subprograms is
+ provided.
+ 
+      “Atomic read-modify-write operations—e.g., test and set, compare
+      and swap, decrement and test, enqueue/dequeue.”
+ 
+ Followed on any target supporting such operations.
+ 
+      “Standard numeric functions—e.g.:, sin, log.”
+ 
+ Followed on any target supporting such operations.
+ 
+      “String manipulation operations—e.g.:, translate and test.”
+ 
+ Followed on any target supporting such operations.
+ 
+      “Vector operations—e.g.:, compare vector against thresholds.”
+ 
+ Followed on any target supporting such operations.
+ 
+      “Direct operations on I/O ports.”
+ 
+ Followed on any target supporting such operations.
+ 
+ 
+ File: gnat_rm.info,  Node: RM C 3 28 Interrupt Support,  Next: RM C 3 1 20-21 Protected Procedure Handlers,  Prev: RM C 1 10-16 Access to Machine Operations,  Up: Implementation Advice
+ 
+ 6.46 RM C.3(28): Interrupt Support
+ ==================================
+ 
+      “If the ‘Ceiling_Locking’ policy is not in effect, the
+      implementation should provide means for the application to specify
+      which interrupts are to be blocked during protected actions, if the
+      underlying system allows for a finer-grain control of interrupt
+      blocking.”
+ 
+ Followed.  The underlying system does not allow for finer-grain control
+ of interrupt blocking.
+ 
+ 
+ File: gnat_rm.info,  Node: RM C 3 1 20-21 Protected Procedure Handlers,  Next: RM C 3 2 25 Package Interrupts,  Prev: RM C 3 28 Interrupt Support,  Up: Implementation Advice
+ 
+ 6.47 RM C.3.1(20-21): Protected Procedure Handlers
+ ==================================================
+ 
+      “Whenever possible, the implementation should allow interrupt
+      handlers to be called directly by the hardware.”
+ 
+ Followed on any target where the underlying operating system permits
+ such direct calls.
+ 
+      “Whenever practical, violations of any implementation-defined
+      restrictions should be detected before run time.”
+ 
+ Followed.  Compile time warnings are given when possible.
+ 
+ 
+ File: gnat_rm.info,  Node: RM C 3 2 25 Package Interrupts,  Next: RM C 4 14 Pre-elaboration Requirements,  Prev: RM C 3 1 20-21 Protected Procedure Handlers,  Up: Implementation Advice
+ 
+ 6.48 RM C.3.2(25): Package ‘Interrupts’
+ =======================================
+ 
+      “If implementation-defined forms of interrupt handler procedures
+      are supported, such as protected procedures with parameters, then
+      for each such form of a handler, a type analogous to
+      ‘Parameterless_Handler’ should be specified in a child package of
+      ‘Interrupts’, with the same operations as in the predefined package
+      Interrupts.”
+ 
+ Followed.
+ 
+ 
+ File: gnat_rm.info,  Node: RM C 4 14 Pre-elaboration Requirements,  Next: RM C 5 8 Pragma Discard_Names,  Prev: RM C 3 2 25 Package Interrupts,  Up: Implementation Advice
+ 
+ 6.49 RM C.4(14): Pre-elaboration Requirements
+ =============================================
+ 
+      “It is recommended that pre-elaborated packages be implemented in
+      such a way that there should be little or no code executed at run
+      time for the elaboration of entities not already covered by the
+      Implementation Requirements.”
+ 
+ Followed.  Executable code is generated in some cases, e.g., loops to
+ initialize large arrays.
+ 
+ 
+ File: gnat_rm.info,  Node: RM C 5 8 Pragma Discard_Names,  Next: RM C 7 2 30 The Package Task_Attributes,  Prev: RM C 4 14 Pre-elaboration Requirements,  Up: Implementation Advice
+ 
+ 6.50 RM C.5(8): Pragma ‘Discard_Names’
+ ======================================
+ 
+      “If the pragma applies to an entity, then the implementation should
+      reduce the amount of storage used for storing names associated with
+      that entity.”
+ 
+ Followed.
+ 
+ 
+ File: gnat_rm.info,  Node: RM C 7 2 30 The Package Task_Attributes,  Next: RM D 3 17 Locking Policies,  Prev: RM C 5 8 Pragma Discard_Names,  Up: Implementation Advice
+ 
+ 6.51 RM C.7.2(30): The Package Task_Attributes
+ ==============================================
+ 
+      “Some implementations are targeted to domains in which memory use
+      at run time must be completely deterministic.  For such
+      implementations, it is recommended that the storage for task
+      attributes will be pre-allocated statically and not from the heap.
+      This can be accomplished by either placing restrictions on the
+      number and the size of the task’s attributes, or by using the
+      pre-allocated storage for the first ‘N’ attribute objects, and the
+      heap for the others.  In the latter case, ‘N’ should be
+      documented.”
+ 
+ Not followed.  This implementation is not targeted to such a domain.
+ 
+ 
+ File: gnat_rm.info,  Node: RM D 3 17 Locking Policies,  Next: RM D 4 16 Entry Queuing Policies,  Prev: RM C 7 2 30 The Package Task_Attributes,  Up: Implementation Advice
+ 
+ 6.52 RM D.3(17): Locking Policies
+ =================================
+ 
+      “The implementation should use names that end with ‘_Locking’ for
+      locking policies defined by the implementation.”
+ 
+ Followed.  Two implementation-defined locking policies are defined,
+ whose names (‘Inheritance_Locking’ and ‘Concurrent_Readers_Locking’)
+ follow this suggestion.
+ 
+ 
+ File: gnat_rm.info,  Node: RM D 4 16 Entry Queuing Policies,  Next: RM D 6 9-10 Preemptive Abort,  Prev: RM D 3 17 Locking Policies,  Up: Implementation Advice
+ 
+ 6.53 RM D.4(16): Entry Queuing Policies
+ =======================================
+ 
+      “Names that end with ‘_Queuing’ should be used for all
+      implementation-defined queuing policies.”
+ 
+ Followed.  No such implementation-defined queuing policies exist.
+ 
+ 
+ File: gnat_rm.info,  Node: RM D 6 9-10 Preemptive Abort,  Next: RM D 7 21 Tasking Restrictions,  Prev: RM D 4 16 Entry Queuing Policies,  Up: Implementation Advice
+ 
+ 6.54 RM D.6(9-10): Preemptive Abort
+ ===================================
+ 
+      “Even though the ‘abort_statement’ is included in the list of
+      potentially blocking operations (see 9.5.1), it is recommended that
+      this statement be implemented in a way that never requires the task
+      executing the ‘abort_statement’ to block.”
+ 
+ Followed.
+ 
+      “On a multi-processor, the delay associated with aborting a task on
+      another processor should be bounded; the implementation should use
+      periodic polling, if necessary, to achieve this.”
+ 
+ Followed.
+ 
+ 
+ File: gnat_rm.info,  Node: RM D 7 21 Tasking Restrictions,  Next: RM D 8 47-49 Monotonic Time,  Prev: RM D 6 9-10 Preemptive Abort,  Up: Implementation Advice
+ 
+ 6.55 RM D.7(21): Tasking Restrictions
+ =====================================
+ 
+      “When feasible, the implementation should take advantage of the
+      specified restrictions to produce a more efficient implementation.”
+ 
+ GNAT currently takes advantage of these restrictions by providing an
+ optimized run time when the Ravenscar profile and the GNAT restricted
+ run time set of restrictions are specified.  See pragma ‘Profile
+ (Ravenscar)’ and pragma ‘Profile (Restricted)’ for more details.
+ 
+ 
+ File: gnat_rm.info,  Node: RM D 8 47-49 Monotonic Time,  Next: RM E 5 28-29 Partition Communication Subsystem,  Prev: RM D 7 21 Tasking Restrictions,  Up: Implementation Advice
+ 
+ 6.56 RM D.8(47-49): Monotonic Time
+ ==================================
+ 
+      “When appropriate, implementations should provide configuration
+      mechanisms to change the value of ‘Tick’.”
+ 
+ Such configuration mechanisms are not appropriate to this implementation
+ and are thus not supported.
+ 
+      “It is recommended that ‘Calendar.Clock’ and ‘Real_Time.Clock’ be
+      implemented as transformations of the same time base.”
+ 
+ Followed.
+ 
+      “It is recommended that the best time base which exists in the
+      underlying system be available to the application through ‘Clock’.
+      ‘Best’ may mean highest accuracy or largest range.”
+ 
+ Followed.
+ 
+ 
+ File: gnat_rm.info,  Node: RM E 5 28-29 Partition Communication Subsystem,  Next: RM F 7 COBOL Support,  Prev: RM D 8 47-49 Monotonic Time,  Up: Implementation Advice
+ 
+ 6.57 RM E.5(28-29): Partition Communication Subsystem
+ =====================================================
+ 
+      “Whenever possible, the PCS on the called partition should allow
+      for multiple tasks to call the RPC-receiver with different messages
+      and should allow them to block until the corresponding subprogram
+      body returns.”
+ 
+ Followed by GLADE, a separately supplied PCS that can be used with GNAT.
+ 
+      “The ‘Write’ operation on a stream of type ‘Params_Stream_Type’
+      should raise ‘Storage_Error’ if it runs out of space trying to
+      write the ‘Item’ into the stream.”
+ 
+ Followed by GLADE, a separately supplied PCS that can be used with GNAT.
+ 
+ 
+ File: gnat_rm.info,  Node: RM F 7 COBOL Support,  Next: RM F 1 2 Decimal Radix Support,  Prev: RM E 5 28-29 Partition Communication Subsystem,  Up: Implementation Advice
+ 
+ 6.58 RM F(7): COBOL Support
+ ===========================
+ 
+      “If COBOL (respectively, C) is widely supported in the target
+      environment, implementations supporting the Information Systems
+      Annex should provide the child package ‘Interfaces.COBOL’
+      (respectively, ‘Interfaces.C’) specified in Annex B and should
+      support a ‘convention_identifier’ of COBOL (respectively, C) in the
+      interfacing pragmas (see Annex B), thus allowing Ada programs to
+      interface with programs written in that language.”
+ 
+ Followed.
+ 
+ 
+ File: gnat_rm.info,  Node: RM F 1 2 Decimal Radix Support,  Next: RM G Numerics,  Prev: RM F 7 COBOL Support,  Up: Implementation Advice
+ 
+ 6.59 RM F.1(2): Decimal Radix Support
+ =====================================
+ 
+      “Packed decimal should be used as the internal representation for
+      objects of subtype ‘S’ when ‘S’’Machine_Radix = 10.”
+ 
+ Not followed.  GNAT ignores ‘S’’Machine_Radix and always uses binary
+ representations.
+ 
+ 
+ File: gnat_rm.info,  Node: RM G Numerics,  Next: RM G 1 1 56-58 Complex Types,  Prev: RM F 1 2 Decimal Radix Support,  Up: Implementation Advice
+ 
+ 6.60 RM G: Numerics
+ ===================
+ 
+      “If Fortran (respectively, C) is widely supported in the target
+      environment, implementations supporting the Numerics Annex should
+      provide the child package ‘Interfaces.Fortran’ (respectively,
+      ‘Interfaces.C’) specified in Annex B and should support a
+      ‘convention_identifier’ of Fortran (respectively, C) in the
+      interfacing pragmas (see Annex B), thus allowing Ada programs to
+      interface with programs written in that language.”
+ 
+ Followed.
+ 
+ 
+ File: gnat_rm.info,  Node: RM G 1 1 56-58 Complex Types,  Next: RM G 1 2 49 Complex Elementary Functions,  Prev: RM G Numerics,  Up: Implementation Advice
+ 
+ 6.61 RM G.1.1(56-58): Complex Types
+ ===================================
+ 
+      “Because the usual mathematical meaning of multiplication of a
+      complex operand and a real operand is that of the scaling of both
+      components of the former by the latter, an implementation should
+      not perform this operation by first promoting the real operand to
+      complex type and then performing a full complex multiplication.  In
+      systems that, in the future, support an Ada binding to IEC
+      559:1989, the latter technique will not generate the required
+      result when one of the components of the complex operand is
+      infinite.  (Explicit multiplication of the infinite component by
+      the zero component obtained during promotion yields a NaN that
+      propagates into the final result.)  Analogous advice applies in the
+      case of multiplication of a complex operand and a pure-imaginary
+      operand, and in the case of division of a complex operand by a real
+      or pure-imaginary operand.”
+ 
+ Not followed.
+ 
+      “Similarly, because the usual mathematical meaning of addition of a
+      complex operand and a real operand is that the imaginary operand
+      remains unchanged, an implementation should not perform this
+      operation by first promoting the real operand to complex type and
+      then performing a full complex addition.  In implementations in
+      which the ‘Signed_Zeros’ attribute of the component type is ‘True’
+      (and which therefore conform to IEC 559:1989 in regard to the
+      handling of the sign of zero in predefined arithmetic operations),
+      the latter technique will not generate the required result when the
+      imaginary component of the complex operand is a negatively signed
+      zero.  (Explicit addition of the negative zero to the zero obtained
+      during promotion yields a positive zero.)  Analogous advice applies
+      in the case of addition of a complex operand and a pure-imaginary
+      operand, and in the case of subtraction of a complex operand and a
+      real or pure-imaginary operand.”
+ 
+ Not followed.
+ 
+      “Implementations in which ‘Real'Signed_Zeros’ is ‘True’ should
+      attempt to provide a rational treatment of the signs of zero
+      results and result components.  As one example, the result of the
+      ‘Argument’ function should have the sign of the imaginary component
+      of the parameter ‘X’ when the point represented by that parameter
+      lies on the positive real axis; as another, the sign of the
+      imaginary component of the ‘Compose_From_Polar’ function should be
+      the same as (respectively, the opposite of) that of the ‘Argument’
+      parameter when that parameter has a value of zero and the ‘Modulus’
+      parameter has a nonnegative (respectively, negative) value.”
+ 
+ Followed.
+ 
+ 
+ File: gnat_rm.info,  Node: RM G 1 2 49 Complex Elementary Functions,  Next: RM G 2 4 19 Accuracy Requirements,  Prev: RM G 1 1 56-58 Complex Types,  Up: Implementation Advice
+ 
+ 6.62 RM G.1.2(49): Complex Elementary Functions
+ ===============================================
+ 
+      “Implementations in which ‘Complex_Types.Real'Signed_Zeros’ is
+      ‘True’ should attempt to provide a rational treatment of the signs
+      of zero results and result components.  For example, many of the
+      complex elementary functions have components that are odd functions
+      of one of the parameter components; in these cases, the result
+      component should have the sign of the parameter component at the
+      origin.  Other complex elementary functions have zero components
+      whose sign is opposite that of a parameter component at the origin,
+      or is always positive or always negative.”
+ 
+ Followed.
+ 
+ 
+ File: gnat_rm.info,  Node: RM G 2 4 19 Accuracy Requirements,  Next: RM G 2 6 15 Complex Arithmetic Accuracy,  Prev: RM G 1 2 49 Complex Elementary Functions,  Up: Implementation Advice
+ 
+ 6.63 RM G.2.4(19): Accuracy Requirements
+ ========================================
+ 
+      “The versions of the forward trigonometric functions without a
+      ‘Cycle’ parameter should not be implemented by calling the
+      corresponding version with a ‘Cycle’ parameter of
+      ‘2.0*Numerics.Pi’, since this will not provide the required
+      accuracy in some portions of the domain.  For the same reason, the
+      version of ‘Log’ without a ‘Base’ parameter should not be
+      implemented by calling the corresponding version with a ‘Base’
+      parameter of ‘Numerics.e’.”
+ 
+ Followed.
+ 
+ 
+ File: gnat_rm.info,  Node: RM G 2 6 15 Complex Arithmetic Accuracy,  Next: RM H 6 15/2 Pragma Partition_Elaboration_Policy,  Prev: RM G 2 4 19 Accuracy Requirements,  Up: Implementation Advice
+ 
+ 6.64 RM G.2.6(15): Complex Arithmetic Accuracy
+ ==============================================
+ 
+      “The version of the ‘Compose_From_Polar’ function without a ‘Cycle’
+      parameter should not be implemented by calling the corresponding
+      version with a ‘Cycle’ parameter of ‘2.0*Numerics.Pi’, since this
+      will not provide the required accuracy in some portions of the
+      domain.”
+ 
+ Followed.
+ 
+ 
+ File: gnat_rm.info,  Node: RM H 6 15/2 Pragma Partition_Elaboration_Policy,  Prev: RM G 2 6 15 Complex Arithmetic Accuracy,  Up: Implementation Advice
+ 
+ 6.65 RM H.6(15/2): Pragma Partition_Elaboration_Policy
+ ======================================================
+ 
+      “If the partition elaboration policy is ‘Sequential’ and the
+      Environment task becomes permanently blocked during elaboration
+      then the partition is deadlocked and it is recommended that the
+      partition be immediately terminated.”
+ 
+ Not followed.
+ 
+ 
+ File: gnat_rm.info,  Node: Implementation Defined Characteristics,  Next: Intrinsic Subprograms,  Prev: Implementation Advice,  Up: Top
+ 
+ 7 Implementation Defined Characteristics
+ ****************************************
+ 
+ In addition to the implementation dependent pragmas and attributes, and
+ the implementation advice, there are a number of other Ada features that
+ are potentially implementation dependent and are designated as
+ implementation-defined.  These are mentioned throughout the Ada
+ Reference Manual, and are summarized in Annex M.
+ 
+ A requirement for conforming Ada compilers is that they provide
+ documentation describing how the implementation deals with each of these
+ issues.  In this chapter you will find each point in Annex M listed,
+ followed by a description of how GNAT handles the implementation
+ dependence.
+ 
+ You can use this chapter as a guide to minimizing implementation
+ dependent features in your programs if portability to other compilers
+ and other operating systems is an important consideration.  The numbers
+ in each entry below correspond to the paragraph numbers in the Ada
+ Reference Manual.
+ 
+    * “Whether or not each recommendation given in Implementation Advice
+      is followed.  See 1.1.2(37).”
+ 
+ See *note Implementation Advice: a.
+ 
+    * “Capacity limitations of the implementation.  See 1.1.3(3).”
+ 
+ The complexity of programs that can be processed is limited only by the
+ total amount of available virtual memory, and disk space for the
+ generated object files.
+ 
+    * “Variations from the standard that are impractical to avoid given
+      the implementation’s execution environment.  See 1.1.3(6).”
+ 
+ There are no variations from the standard.
+ 
+    * “Which code_statements cause external interactions.  See
+      1.1.3(10).”
+ 
+ Any ‘code_statement’ can potentially cause external interactions.
+ 
+    * “The coded representation for the text of an Ada program.  See
+      2.1(4).”
+ 
+ See separate section on source representation.
+ 
+    * “The semantics of an Ada program whose text is not in Normalization
+      Form C. See 2.1(4).”
+ 
+ See separate section on source representation.
+ 
+    * “The representation for an end of line.  See 2.2(2).”
+ 
+ See separate section on source representation.
+ 
+    * “Maximum supported line length and lexical element length.  See
+      2.2(15).”
+ 
+ The maximum line length is 255 characters and the maximum length of a
+ lexical element is also 255 characters.  This is the default setting if
+ not overridden by the use of compiler switch ‘-gnaty’ (which sets the
+ maximum to 79) or ‘-gnatyMnn’ which allows the maximum line length to be
+ specified to be any value up to 32767.  The maximum length of a lexical
+ element is the same as the maximum line length.
+ 
+    * “Implementation defined pragmas.  See 2.8(14).”
+ 
+ See *note Implementation Defined Pragmas: 7.
+ 
+    * “Effect of pragma ‘Optimize’.  See 2.8(27).”
+ 
+ Pragma ‘Optimize’, if given with a ‘Time’ or ‘Space’ parameter, checks
+ that the optimization flag is set, and aborts if it is not.
+ 
+    * “The message string associated with the Assertion_Error exception
+      raised by the failure of a predicate check if there is no
+      applicable Predicate_Failure aspect.  See 3.2.4(31).”
+ 
+ In the case of a Dynamic_Predicate aspect, the string is
+ “Dynamic_Predicate failed at <source position>”, where “<source
+ position>” might be something like “foo.adb:123”.  The Static_Predicate
+ case is handled analogously.
+ 
+    * “The predefined integer types declared in ‘Standard’.  See
+      3.5.4(25).”
+ 
+ Type                          Representation
+                               
+ --------------------------------------------------------------------------
+                               
+ ‘Short_Short_Integer’         8-bit signed
+                               
+                               
+ ‘Short_Integer’               16-bit signed
+                               
+                               
+ ‘Integer’                     32-bit signed
+                               
+                               
+ ‘Long_Integer’                64-bit signed (on most 64-bit targets,
+                               depending on the C definition of long)
+                               32-bit signed (on all other targets)
+                               
+                               
+ ‘Long_Long_Integer’           64-bit signed
+                               
+                               
+ ‘Long_Long_Long_Integer’      128-bit signed (on 64-bit targets) 64-bit
+                               signed (on 32-bit targets)
+                               
+ 
+    * “Any nonstandard integer types and the operators defined for them.
+      See 3.5.4(26).”
+ 
+ There are no nonstandard integer types.
+ 
+    * “Any nonstandard real types and the operators defined for them.
+      See 3.5.6(8).”
+ 
+ There are no nonstandard real types.
+ 
+    * “What combinations of requested decimal precision and range are
+      supported for floating point types.  See 3.5.7(7).”
+ 
+ The precision and range are defined by the IEEE Standard for
+ Floating-Point Arithmetic (IEEE 754-2019).
+ 
+    * “The predefined floating point types declared in ‘Standard’.  See
+      3.5.7(16).”
+ 
+ Type                       Representation
+                            
+ -------------------------------------------------------------------------------
+                            
+ ‘Short_Float’              IEEE Binary32 (Single)
+                            
+                            
+ ‘Float’                    IEEE Binary32 (Single)
+                            
+                            
+ ‘Long_Float’               IEEE Binary64 (Double)
+                            
+                            
+ ‘Long_Long_Float’          IEEE Binary64 (Double) on non-x86 architectures
+                            IEEE 80-bit Extended on x86 architecture
+                            
+ 
+ The default rounding mode specified by the IEEE 754 Standard is assumed
+ both for static and dynamic computations (that is, round to nearest,
+ ties to even).  The input routines yield correctly rounded values for
+ Short_Float, Float, and Long_Float at least.  The output routines can
+ compute up to twice as many exact digits as the value of ‘T'Digits’ for
+ any type, for example 30 digits for Long_Float; if more digits are
+ requested, zeros are printed.
+ 
+    * “The small of an ordinary fixed point type.  See 3.5.9(8).”
+ 
+ The small is the largest power of two that does not exceed the delta.
+ 
+    * “What combinations of small, range, and digits are supported for
+      fixed point types.  See 3.5.9(10).”
+ 
+ For an ordinary fixed point type, on 32-bit platforms, the small must
+ lie in 2.0**(-80) ..  2.0**80 and the range in -9.0E+36 ..  9.0E+36; any
+ combination is permitted that does not result in a mantissa larger than
+ 63 bits.
+ 
+ On 64-bit platforms, the small must lie in 2.0**(-127) ..  2.0**127 and
+ the range in -1.0E+76 ..  1.0E+76; any combination is permitted that
+ does not result in a mantissa larger than 63 bits, and any combination
+ is permitted that results in a mantissa between 64 and 127 bits if the
+ small is the ratio of two integers that lie in 1 ..  2.0**127.
+ 
+ If the small is the ratio of two integers with 64-bit magnitude on
+ 32-bit platforms and 128-bit magnitude on 64-bit platforms, which is the
+ case if no ‘small’ clause is provided, then the operations of the fixed
+ point type are entirely implemented by means of integer instructions.
+ In the other cases, some operations, in particular input and output, may
+ be implemented by means of floating-point instructions and may be
+ affected by accuracy issues on architectures other than x86.
+ 
+ For a decimal fixed point type, on 32-bit platforms, the small must lie
+ in 1.0E-18 ..  1.0E+18 and the digits in 1 ..  18.  On 64-bit platforms,
+ the small must lie in 1.0E-38 ..  1.0E+38 and the digits in 1 ..  38.
+ 
+    * “The result of ‘Tags.Expanded_Name’ for types declared within an
+      unnamed ‘block_statement’.  See 3.9(10).”
+ 
+ Block numbers of the form ‘BNNN’, where ‘nnn’ is a decimal integer are
+ allocated.
+ 
+    * “The sequence of characters of the value returned by
+      Tags.Expanded_Name (respectively, Tags.Wide_Expanded_Name) when
+      some of the graphic characters of Tags.Wide_Wide_Expanded_Name are
+      not defined in Character (respectively, Wide_Character).  See
+      3.9(10.1).”
+ 
+ This is handled in the same way as the implementation-defined behavior
+ referenced in A.4.12(34).
+ 
+    * “Implementation-defined attributes.  See 4.1.4(12).”
+ 
+ See *note Implementation Defined Attributes: 8.
+ 
+    * “The value of the parameter to Empty for some container aggregates.
+      See 4.3.5(40).”
+ 
+ As per the suggestion given in the Annotated Ada RM, the default value
+ of the formal parameter is used if one exists and zero is used
+ otherwise.
+ 
+    * “The maximum number of chunks for a parallel reduction expression
+      without a chunk_specification.  See 4.5.10(21).”
+ 
+ Feature unimplemented.
+ 
+    * “Rounding of real static expressions which are exactly half-way
+      between two machine numbers.  See 4.9(38).”
+ 
+ Round to even is used in all such cases.
+ 
+    * “The maximum number of chunks for a parallel generalized iterator
+      without a chunk_specification.  See 5.5.2(10).”
+ 
+ Feature unimplemented.
+ 
+    * “The number of chunks for an array component iterator.  See
+      5.5.2(11).”
+ 
+ Feature unimplemented.
+ 
+    * “Any extensions of the Global aspect.  See 6.1.2(43).”
+ 
+ Feature unimplemented.
+ 
+    * “The circumstances the implementation passes in the null value for
+      a view conversion of an access type used as an out parameter.  See
+      6.4.1(19).”
+ 
+ Difficult to characterize.
+ 
+    * “Any extensions of the Default_Initial_Condition aspect.  See
+      7.3.3(11).”
+ 
+ SPARK allows specifying ‘null’ as the Default_Initial_Condition aspect
+ of a type.  See the SPARK reference manual for further details.
+ 
+    * “Any implementation-defined time types.  See 9.6(6).”
+ 
+ There are no implementation-defined time types.
+ 
+    * “The time base associated with relative delays.  See 9.6(20).”
+ 
+ See 9.6(20).  The time base used is that provided by the C library
+ function ‘gettimeofday’.
+ 
+    * “The time base of the type ‘Calendar.Time’.  See 9.6(23).”
+ 
+ The time base used is that provided by the C library function
+ ‘gettimeofday’.
+ 
+    * “The time zone used for package ‘Calendar’ operations.  See
+      9.6(24).”
+ 
+ The time zone used by package ‘Calendar’ is the current system time zone
+ setting for local time, as accessed by the C library function
+ ‘localtime’.
+ 
+    * “Any limit on ‘delay_until_statements’ of ‘select_statements’.  See
+      9.6(29).”
+ 
+ There are no such limits.
+ 
+    * “The result of Calendar.Formatting.Image if its argument represents
+      more than 100 hours.  See 9.6.1(86).”
+ 
+ Calendar.Time_Error is raised.
+ 
+    * “Implementation-defined conflict check policies.  See 9.10.1(5).”
+ 
+ There are no implementation-defined conflict check policies.
+ 
+    * “The representation for a compilation.  See 10.1(2).”
+ 
+ A compilation is represented by a sequence of files presented to the
+ compiler in a single invocation of the ‘gcc’ command.
+ 
+    * “Any restrictions on compilations that contain multiple
+      compilation_units.  See 10.1(4).”
+ 
+ No single file can contain more than one compilation unit, but any
+ sequence of files can be presented to the compiler as a single
+ compilation.
+ 
+    * “The mechanisms for creating an environment and for adding and
+      replacing compilation units.  See 10.1.4(3).”
+ 
+ See separate section on compilation model.
+ 
+    * “The manner of explicitly assigning library units to a partition.
+      See 10.2(2).”
+ 
+ If a unit contains an Ada main program, then the Ada units for the
+ partition are determined by recursive application of the rules in the
+ Ada Reference Manual section 10.2(2-6).  In other words, the Ada units
+ will be those that are needed by the main program, and then this
+ definition of need is applied recursively to those units, and the
+ partition contains the transitive closure determined by this
+ relationship.  In short, all the necessary units are included, with no
+ need to explicitly specify the list.  If additional units are required,
+ e.g., by foreign language units, then all units must be mentioned in the
+ context clause of one of the needed Ada units.
+ 
+ If the partition contains no main program, or if the main program is in
+ a language other than Ada, then GNAT provides the binder options ‘-z’
+ and ‘-n’ respectively, and in this case a list of units can be
+ explicitly supplied to the binder for inclusion in the partition (all
+ units needed by these units will also be included automatically).  For
+ full details on the use of these options, refer to ‘GNAT Make Program
+ gnatmake’ in the ‘GNAT User’s Guide’.
+ 
+    * “The implementation-defined means, if any, of specifying which
+      compilation units are needed by a given compilation unit.  See
+      10.2(2).”
+ 
+ The units needed by a given compilation unit are as defined in the Ada
+ Reference Manual section 10.2(2-6).  There are no implementation-defined
+ pragmas or other implementation-defined means for specifying needed
+ units.
+ 
+    * “The manner of designating the main subprogram of a partition.  See
+      10.2(7).”
+ 
+ The main program is designated by providing the name of the
+ corresponding ‘ALI’ file as the input parameter to the binder.
+ 
+    * “The order of elaboration of ‘library_items’.  See 10.2(18).”
+ 
+ The first constraint on ordering is that it meets the requirements of
+ Chapter 10 of the Ada Reference Manual.  This still leaves some
+ implementation-dependent choices, which are resolved by analyzing the
+ elaboration code of each unit and identifying implicit elaboration-order
+ dependencies.
+ 
+    * “Parameter passing and function return for the main subprogram.
+      See 10.2(21).”
+ 
+ The main program has no parameters.  It may be a procedure, or a
+ function returning an integer type.  In the latter case, the returned
+ integer value is the return code of the program (overriding any value
+ that may have been set by a call to ‘Ada.Command_Line.Set_Exit_Status’).
+ 
+    * “The mechanisms for building and running partitions.  See
+      10.2(24).”
+ 
+ GNAT itself supports programs with only a single partition.  The
+ GNATDIST tool provided with the GLADE package (which also includes an
+ implementation of the PCS) provides a completely flexible method for
+ building and running programs consisting of multiple partitions.  See
+ the separate GLADE manual for details.
+ 
+    * “The details of program execution, including program termination.
+      See 10.2(25).”
+ 
+ See separate section on compilation model.
+ 
+    * “The semantics of any non-active partitions supported by the
+      implementation.  See 10.2(28).”
+ 
+ Passive partitions are supported on targets where shared memory is
+ provided by the operating system.  See the GLADE reference manual for
+ further details.
+ 
+    * “The information returned by ‘Exception_Message’.  See 11.4.1(10).”
+ 
+ Exception message returns the null string unless a specific message has
+ been passed by the program.
+ 
+    * “The result of ‘Exceptions.Exception_Name’ for types declared
+      within an unnamed ‘block_statement’.  See 11.4.1(12).”
+ 
+ Blocks have implementation defined names of the form ‘BNNN’ where ‘nnn’
+ is an integer.
+ 
+    * “The information returned by ‘Exception_Information’.  See
+      11.4.1(13).”
+ 
+ ‘Exception_Information’ returns a string in the following format:
+ 
+      *Exception_Name:* nnnnn
+      *Message:* mmmmm
+      *PID:* ppp
+      *Load address:* 0xhhhh
+      *Call stack traceback locations:*
+      0xhhhh 0xhhhh 0xhhhh ... 0xhhh
+ 
+ where
+ 
+         * ‘nnnn’ is the fully qualified name of the exception in all
+           upper case letters.  This line is always present.
+ 
+         * ‘mmmm’ is the message (this line present only if message is
+           non-null)
+ 
+         * ‘ppp’ is the Process Id value as a decimal integer (this line
+           is present only if the Process Id is nonzero).  Currently we
+           are not making use of this field.
+ 
+         * The Load address line, the Call stack traceback locations line
+           and the following values are present only if at least one
+           traceback location was recorded.  The Load address indicates
+           the address at which the main executable was loaded; this line
+           may not be present if operating system hasn’t relocated the
+           main executable.  The values are given in C style format, with
+           lower case letters for a-f, and only as many digits present as
+           are necessary.  The line terminator sequence at the end of
+           each line, including the last line is a single ‘LF’ character
+           (‘16#0A#’).
+ 
+    * “The sequence of characters of the value returned by
+      Exceptions.Exception_Name (respectively,
+      Exceptions.Wide_Exception_Name) when some of the graphic characters
+      of Exceptions.Wide_Wide_Exception_Name are not defined in Character
+      (respectively, Wide_Character).  See 11.4.1(12.1).”
+ 
+ This is handled in the same way as the implementation-defined behavior
+ referenced in A.4.12(34).
+ 
+    * “The information returned by Exception_Information.  See
+      11.4.1(13).”
+ 
+ The exception name and the source location at which the exception was
+ raised are included.
+ 
+    * “Implementation-defined policy_identifiers and
+      assertion_aspect_marks allowed in a pragma Assertion_Policy.  See
+      11.4.2(9).”
+ 
+ Implementation-defined assertion_aspect_marks include Assert_And_Cut,
+ Assume, Contract_Cases, Debug, Ghost, Initial_Condition, Loop_Invariant,
+ Loop_Variant, Postcondition, Precondition, Predicate, Refined_Post,
+ Statement_Assertions, and Subprogram_Variant.  Implementation-defined
+ policy_identifiers include Ignore and Suppressible.
+ 
+    * “The default assertion policy.  See 11.4.2(10).”
+ 
+ The default assertion policy is Ignore, although this can be overridden
+ via compiler switches such as “-gnata”.
+ 
+    * “Implementation-defined check names.  See 11.5(27).”
+ 
+ The implementation defined check names include Alignment_Check,
+ Atomic_Synchronization, Duplicated_Tag_Check, Container_Checks,
+ Tampering_Check, Predicate_Check, and Validity_Check.  In addition, a
+ user program can add implementation-defined check names by means of the
+ pragma Check_Name.  See the description of pragma ‘Suppress’ for full
+ details.
+ 
+    * “Existence and meaning of second parameter of pragma Unsuppress.
+      See 11.5(27.1).”
+ 
+ The legality rules for and semantics of the second parameter of pragma
+ Unsuppress match those for the second argument of pragma Suppress.
+ 
+    * “The cases that cause conflicts between the representation of the
+      ancestors of a type_declaration.  See 13.1(13.1).”
+ 
+ No such cases exist.
+ 
+    * “The interpretation of each representation aspect.  See 13.1(20).”
+ 
+ See separate section on data representations.
+ 
+    * “Any restrictions placed upon the specification of representation
+      aspects.  See 13.1(20).”
+ 
+ See separate section on data representations.
+ 
+    * “Implementation-defined aspects, including the syntax for
+      specifying such aspects and the legality rules for such aspects.
+      See 13.1.1(38).”
+ 
+ See *note Implementation Defined Aspects: 120.
+ 
+    * “The set of machine scalars.  See 13.3(8.1).”
+ 
+ See separate section on data representations.
+ 
+    * “The meaning of ‘Size’ for indefinite subtypes.  See 13.3(48).”
+ 
+ The Size attribute of an indefinite subtype is not less than the Size
+ attribute of any object of that type.
+ 
+    * “The meaning of Object_Size for indefinite subtypes.  See
+      13.3(58).”
+ 
+ The Object_Size attribute of an indefinite subtype is not less than the
+ Object_Size attribute of any object of that type.
+ 
+    * “The default external representation for a type tag.  See
+      13.3(75).”
+ 
+ The default external representation for a type tag is the fully expanded
+ name of the type in upper case letters.
+ 
+    * “What determines whether a compilation unit is the same in two
+      different partitions.  See 13.3(76).”
+ 
+ A compilation unit is the same in two different partitions if and only
+ if it derives from the same source file.
+ 
+    * “Implementation-defined components.  See 13.5.1(15).”
+ 
+ The only implementation defined component is the tag for a tagged type,
+ which contains a pointer to the dispatching table.
+ 
+    * “If ‘Word_Size’ = ‘Storage_Unit’, the default bit ordering.  See
+      13.5.3(5).”
+ 
+ ‘Word_Size’ (32) is not the same as ‘Storage_Unit’ (8) for this
+ implementation, so no non-default bit ordering is supported.  The
+ default bit ordering corresponds to the natural endianness of the target
+ architecture.
+ 
+    * “The contents of the visible part of package ‘System’.  See
+      13.7(2).”
+ 
+ See the definition of package System in ‘system.ads’.  Note that two
+ declarations are added to package System.
+ 
+      Max_Priority           : constant Positive := Priority'Last;
+      Max_Interrupt_Priority : constant Positive := Interrupt_Priority'Last;
+ 
+    * “The range of Storage_Elements.Storage_Offset, the modulus of
+      Storage_Elements.Storage_Element, and the declaration of
+      Storage_Elements.Integer_Address.  See 13.7.1(11).”
+ 
+ See the definition of package System.Storage_Elements in ‘s-stoele.ads’.
+ 
+    * “The contents of the visible part of package ‘System.Machine_Code’,
+      and the meaning of ‘code_statements’.  See 13.8(7).”
+ 
+ See the definition and documentation in file ‘s-maccod.ads’.
+ 
+    * “The result of unchecked conversion for instances with scalar
+      result types whose result is not defined by the language.  See
+      13.9(11).”
+ 
+ Unchecked conversion between types of the same size results in an
+ uninterpreted transmission of the bits from one type to the other.  If
+ the types are of unequal sizes, then in the case of discrete types, a
+ shorter source is first zero or sign extended as necessary, and a
+ shorter target is simply truncated on the left.  For all non-discrete
+ types, the source is first copied if necessary to ensure that the
+ alignment requirements of the target are met, then a pointer is
+ constructed to the source value, and the result is obtained by
+ dereferencing this pointer after converting it to be a pointer to the
+ target type.  Unchecked conversions where the target subtype is an
+ unconstrained array are not permitted.  If the target alignment is
+ greater than the source alignment, then a copy of the result is made
+ with appropriate alignment
+ 
+    * “The result of unchecked conversion for instances with nonscalar
+      result types whose result is not defined by the language.  See
+      13.9(11).”
+ 
+ See preceding definition for the scalar result case.
+ 
+    * “Whether or not the implementation provides user-accessible names
+      for the standard pool type(s).  See 13.11(17).”
+ 
+ There are 3 different standard pools used by the compiler when
+ ‘Storage_Pool’ is not specified depending whether the type is local to a
+ subprogram or defined at the library level and whether ‘Storage_Size``is
+ specified or not. See documentation in the runtime library units
+ ``System.Pool_Global’, ‘System.Pool_Size’ and ‘System.Pool_Local’ in
+ files ‘s-poosiz.ads’, ‘s-pooglo.ads’ and ‘s-pooloc.ads’ for full details
+ on the default pools used.  All these pools are accessible by means of
+ ‘with’ing these units.
+ 
+    * “The meaning of ‘Storage_Size’ when neither the Storage_Size nor
+      the Storage_Pool is specified for an access type.  See 13.11(18).”
+ 
+ ‘Storage_Size’ is measured in storage units, and refers to the total
+ space available for an access type collection, or to the primary stack
+ space for a task.
+ 
+    * “The effect of specifying aspect Default_Storage_Pool on an
+      instance of a language-defined generic unit.  See 13.11.3(5).”
+ 
+ Instances of language-defined generic units are treated the same as
+ other instances with respect to the Default_Storage_Pool aspect.
+ 
+    * “Implementation-defined restrictions allowed in a pragma
+      ‘Restrictions’.  See 13.12(8.7).”
+ 
+ See *note Standard and Implementation Defined Restrictions: 9.
+ 
+    * “The consequences of violating limitations on ‘Restrictions’
+      pragmas.  See 13.12(9).”
+ 
+ Restrictions that can be checked at compile time are enforced at compile
+ time; violations are illegal.  For other restrictions, any violation
+ during program execution results in erroneous execution.
+ 
+    * “Implementation-defined usage profiles allowed in a pragma Profile.
+      See 13.12(15).”
+ 
+ See *note Implementation Defined Pragmas: 7.
+ 
+    * “The contents of the stream elements read and written by the Read
+      and Write attributes of elementary types.  See 13.13.2(9).”
+ 
+ The representation is the in-memory representation of the base type of
+ the type, using the number of bits corresponding to the ‘type'Size’
+ value, and the natural ordering of the machine.
+ 
+    * “The names and characteristics of the numeric subtypes declared in
+      the visible part of package ‘Standard’.  See A.1(3).”
+ 
+ See items describing the integer and floating-point types supported.
+ 
+    * “The values returned by Strings.Hash.  See A.4.9(3).”
+ 
+ This hash function has predictable collisions and is subject to
+ equivalent substring attacks.  It is not suitable for construction of a
+ hash table keyed on possibly malicious user input.
+ 
+    * “The value returned by a call to a Text_Buffer Get procedure if any
+      character in the returned sequence is not defined in Character.
+      See A.4.12(34).”
+ 
+ The contents of a buffer is represented internally as a UTF_8 string.
+ The value return by Text_Buffer.Get is the result of passing that UTF_8
+ string to UTF_Encoding.Strings.Decode.
+ 
+    * “The value returned by a call to a Text_Buffer Wide_Get procedure
+      if any character in the returned sequence is not defined in
+      Wide_Character.  See A.4.12(34).”
+ 
+ The contents of a buffer is represented internally as a UTF_8 string.
+ The value return by Text_Buffer.Wide_Get is the result of passing that
+ UTF_8 string to UTF_Encoding.Wide_Strings.Decode.
+ 
+    * “The accuracy actually achieved by the elementary functions.  See
+      A.5.1(1).”
+ 
+ The elementary functions correspond to the functions available in the C
+ library.  Only fast math mode is implemented.
+ 
+    * “The sign of a zero result from some of the operators or functions
+      in ‘Numerics.Generic_Elementary_Functions’, when
+      ‘Float_Type'Signed_Zeros’ is ‘True’.  See A.5.1(46).”
+ 
+ The sign of zeroes follows the requirements of the IEEE 754 standard on
+ floating-point.
+ 
+    * “The value of ‘Numerics.Float_Random.Max_Image_Width’.  See
+      A.5.2(27).”
+ 
+ Maximum image width is 6864, see library file ‘s-rannum.ads’.
+ 
+    * “The value of ‘Numerics.Discrete_Random.Max_Image_Width’.  See
+      A.5.2(27).”
+ 
+ Maximum image width is 6864, see library file ‘s-rannum.ads’.
+ 
+    * “The string representation of a random number generator’s state.
+      See A.5.2(38).”
+ 
+ The value returned by the Image function is the concatenation of the
+ fixed-width decimal representations of the 624 32-bit integers of the
+ state vector.
+ 
+    * “The values of the ‘Model_Mantissa’, ‘Model_Emin’, ‘Model_Epsilon’,
+      ‘Model’, ‘Safe_First’, and ‘Safe_Last’ attributes, if the Numerics
+      Annex is not supported.  See A.5.3(72).”
+ 
+ Running the compiler with ‘-gnatS’ to produce a listing of package
+ ‘Standard’ displays the values of these attributes.
+ 
+    * “The value of ‘Buffer_Size’ in ‘Storage_IO’.  See A.9(10).”
+ 
+ All type representations are contiguous, and the ‘Buffer_Size’ is the
+ value of ‘type'Size’ rounded up to the next storage unit boundary.
+ 
+    * “External files for standard input, standard output, and standard
+      error See A.10(5).”
+ 
+ These files are mapped onto the files provided by the C streams
+ libraries.  See source file ‘i-cstrea.ads’ for further details.
+ 
+    * “The accuracy of the value produced by ‘Put’.  See A.10.9(36).”
+ 
+ If more digits are requested in the output than are represented by the
+ precision of the value, zeroes are output in the corresponding least
+ significant digit positions.
+ 
+    * “Current size for a stream file for which positioning is not
+      supported.  See A.12.1(1.1).”
+ 
+ Positioning is supported.
+ 
+    * “The meaning of ‘Argument_Count’, ‘Argument’, and ‘Command_Name’.
+      See A.15(1).”
+ 
+ These are mapped onto the ‘argv’ and ‘argc’ parameters of the main
+ program in the natural manner.
+ 
+    * “The interpretation of file names and directory names.  See
+      A.16(46).”
+ 
+ These names are interpreted consistently with the underlying file
+ system.
+ 
+    * “The maxium value for a file size in Directories.  See A.16(87).”
+ 
+ Directories.File_Size’Last is equal to Long_Long_Integer’Last .
+ 
+    * “The result for Directories.Size for a directory or special file.
+      See A.16(93).”
+ 
+ Name_Error is raised.
+ 
+    * “The result for Directories.Modification_Time for a directory or
+      special file.  See A.16(93).”
+ 
+ Name_Error is raised.
+ 
+    * “The interpretation of a nonnull search pattern in Directories.
+      See A.16(104).”
+ 
+ When the ‘Pattern’ parameter is not the null string, it is interpreted
+ according to the syntax of regular expressions as defined in the
+ ‘GNAT.Regexp’ package.
+ 
+ See *note GNAT.Regexp (g-regexp.ads): 25c.
+ 
+    * “The results of a Directories search if the contents of the
+      directory are altered while a search is in progress.  See
+      A.16(110).”
+ 
+ The effect of a call to Get_Next_Entry is determined by the current
+ state of the directory.
+ 
+    * “The definition and meaning of an environment variable.  See
+      A.17(1).”
+ 
+ This definition is determined by the underlying operating system.
+ 
+    * “The circumstances where an environment variable cannot be defined.
+      See A.17(16).”
+ 
+      There are no such implementation-defined circumstances.
+ 
+    * “Environment names for which Set has the effect of Clear.  See
+      A.17(17).”
+ 
+ There are no such names.
+ 
+    * “The value of Containers.Hash_Type’Modulus.  The value of
+      Containers.Count_Type’Last.  See A.18.1(7).”
+ 
+ Containers.Hash_Type’Modulus is 2**32.  Containers.Count_Type’Last is
+ 2**31 - 1.
+ 
+    * “Implementation-defined convention names.  See B.1(11).”
+ 
+ The following convention names are supported
+ 
+ Convention Name             Interpretation
+                             
+ ---------------------------------------------------------------------------------------------------------------
+                             
+ ‘Ada’                       Ada
+                             
+                             
+ ‘Ada_Pass_By_Copy’          Allowed for any types except by-reference types such as limited records.
+                             Compatible with convention Ada, but causes any parameters with this convention
+                             to be passed by copy.
+                             
+                             
+ ‘Ada_Pass_By_Reference’     Allowed for any types except by-copy types such as scalars.  Compatible with
+                             convention Ada, but causes any parameters with this convention to be passed by
+                             reference.
+                             
+                             
+ ‘Assembler’                 Assembly language
+                             
+                             
+ ‘Asm’                       Synonym for Assembler
+                             
+                             
+ ‘Assembly’                  Synonym for Assembler
+                             
+                             
+ ‘C’                         C
+                             
+                             
+ ‘C_Pass_By_Copy’            Allowed only for record types, like C, but also notes that record is to be
+                             passed by copy rather than reference.
+                             
+                             
+ ‘COBOL’                     COBOL
+                             
+                             
+ ‘C_Plus_Plus (or CPP)’      C++
+                             
+                             
+ ‘Default’                   Treated the same as C
+                             
+                             
+ ‘External’                  Treated the same as C
+                             
+                             
+ ‘Fortran’                   Fortran
+                             
+                             
+ ‘Intrinsic’                 For support of pragma ‘Import’ with convention Intrinsic, see separate section
+                             on Intrinsic Subprograms.
+                             
+                             
+ ‘Stdcall’                   Stdcall (used for Windows implementations only).  This convention correspond to
+                             the WINAPI (previously called Pascal convention) C/C++ convention under Windows.
+                             A routine with this convention cleans the stack before exit.  This pragma cannot
+                             be applied to a dispatching call.
+                             
+                             
+ ‘DLL’                       Synonym for Stdcall
+                             
+                             
+ ‘Win32’                     Synonym for Stdcall
+                             
+                             
+ ‘Stubbed’                   Stubbed is a special convention used to indicate that the body of the subprogram
+                             will be entirely ignored.  Any call to the subprogram is converted into a raise
+                             of the ‘Program_Error’ exception.  If a pragma ‘Import’ specifies convention
+                             ‘stubbed’ then no body need be present at all.  This convention is useful during
+                             development for the inclusion of subprograms whose body has not yet been
+                             written.  In addition, all otherwise unrecognized convention names are also
+                             treated as being synonymous with convention C. In all implementations, use of
+                             such other names results in a warning.
+                             
+ 
+    * “The meaning of link names.  See B.1(36).”
+ 
+ Link names are the actual names used by the linker.
+ 
+    * “The manner of choosing link names when neither the link name nor
+      the address of an imported or exported entity is specified.  See
+      B.1(36).”
+ 
+ The default linker name is that which would be assigned by the relevant
+ external language, interpreting the Ada name as being in all lower case
+ letters.
+ 
+    * “The effect of pragma ‘Linker_Options’.  See B.1(37).”
+ 
+ The string passed to ‘Linker_Options’ is presented uninterpreted as an
+ argument to the link command, unless it contains ASCII.NUL characters.
+ NUL characters if they appear act as argument separators, so for example
+ 
+      pragma Linker_Options ("-labc" & ASCII.NUL & "-ldef");
+ 
+ causes two separate arguments ‘-labc’ and ‘-ldef’ to be passed to the
+ linker.  The order of linker options is preserved for a given unit.  The
+ final list of options passed to the linker is in reverse order of the
+ elaboration order.  For example, linker options for a body always appear
+ before the options from the corresponding package spec.
+ 
+    * “The contents of the visible part of package ‘Interfaces’ and its
+      language-defined descendants.  See B.2(1).”
+ 
+ See files with prefix ‘i-’ in the distributed library.
+ 
+    * “Implementation-defined children of package ‘Interfaces’.  The
+      contents of the visible part of package ‘Interfaces’.  See
+      B.2(11).”
+ 
+ See files with prefix ‘i-’ in the distributed library.
+ 
+    * “The definitions of certain types and constants in Interfaces.C.
+      See B.3(41).”
+ 
+ See source file ‘i-c.ads’.
+ 
+    * “The types ‘Floating’, ‘Long_Floating’, ‘Binary’, ‘Long_Binary’,
+      ‘Decimal_ Element’, and ‘COBOL_Character’; and the initialization
+      of the variables ‘Ada_To_COBOL’ and ‘COBOL_To_Ada’, in
+      ‘Interfaces.COBOL’.  See B.4(50).”
+ 
+ COBOL                     Ada
+                           
+ -------------------------------------------------------------------
+                           
+ ‘Floating’                Float
+                           
+                           
+ ‘Long_Floating’           (Floating) Long_Float
+                           
+                           
+ ‘Binary’                  Integer
+                           
+                           
+ ‘Long_Binary’             Long_Long_Integer
+                           
+                           
+ ‘Decimal_Element’         Character
+                           
+                           
+ ‘COBOL_Character’         Character
+                           
+ 
+ For initialization, see the file ‘i-cobol.ads’ in the distributed
+ library.
+ 
+    * “The types Fortran_Integer, Real, Double_Precision, and
+      Character_Set in Interfaces.Fortran.  See B.5(17).”
+ 
+ See source file ‘i-fortra.ads’.  These types are derived, respectively,
+ from Integer, Float, Long_Float, and Character.
+ 
+    * “Implementation-defined intrinsic subprograms.  See C.1(1).”
+ 
+ See separate section on Intrinsic Subprograms.
+ 
+    * “Any restrictions on a protected procedure or its containing type
+      when an aspect Attach_handler or Interrupt_Handler is specified.
+      See C.3.1(17).”
+ 
+ There are no such restrictions.
+ 
+    * “Any other forms of interrupt handler supported by the
+      Attach_Handler and Interrupt_Handler aspects.  See C.3.1(19).”
+ 
+ There are no such forms.
+ 
+    * “The semantics of some attributes and functions of an entity for
+      which aspect Discard_Names is True.  See C.5(7).”
+ 
+ If Discard_Names is True for an enumeration type, the Image attribute
+ provides the image of the Pos of the literal, and Value accepts Pos
+ values.
+ 
+ If both of the aspects‘‘Discard_Names‘‘ and ‘No_Tagged_Streams’ are true
+ for a tagged type, its Expanded_Name and External_Tag values are empty
+ strings.  This is useful to avoid exposing entity names at binary level.
+ 
+    * “The modulus and size of Test_and_Set_Flag.  See C.6.3(8).”
+ 
+ The modulus is 2**8.  The size is 8.
+ 
+    * “The value used to represent the set value for Atomic_Test_and_Set.
+      See C.6.3(10).”
+ 
+ The value is 1.
+ 
+    * “The result of the ‘Task_Identification.Image’ attribute.  See
+      C.7.1(7).”
+ 
+ The result of this attribute is a string that identifies the object or
+ component that denotes a given task.  If a variable ‘Var’ has a task
+ type, the image for this task will have the form ‘Var_XXXXXXXX’, where
+ the suffix ‘XXXXXXXX’ is the hexadecimal representation of the virtual
+ address of the corresponding task control block.  If the variable is an
+ array of tasks, the image of each task will have the form of an indexed
+ component indicating the position of a given task in the array, e.g.,
+ ‘Group(5)_XXXXXXX’.  If the task is a component of a record, the image
+ of the task will have the form of a selected component.  These rules are
+ fully recursive, so that the image of a task that is a subcomponent of a
+ composite object corresponds to the expression that designates this
+ task.
+ 
+ If a task is created by an allocator, its image depends on the context.
+ If the allocator is part of an object declaration, the rules described
+ above are used to construct its image, and this image is not affected by
+ subsequent assignments.  If the allocator appears within an expression,
+ the image includes only the name of the task type.
+ 
+ If the configuration pragma Discard_Names is present, or if the
+ restriction No_Implicit_Heap_Allocation is in effect, the image reduces
+ to the numeric suffix, that is to say the hexadecimal representation of
+ the virtual address of the control block of the task.
+ 
+    * “The value of ‘Current_Task’ when in a protected entry or interrupt
+      handler.  See C.7.1(17).”
+ 
+ Protected entries or interrupt handlers can be executed by any
+ convenient thread, so the value of ‘Current_Task’ is undefined.
+ 
+    * “Granularity of locking for Task_Attributes.  See C.7.2(16).”
+ 
+ No locking is needed if the formal type Attribute has the size and
+ alignment of either Integer or System.Address and the bit representation
+ of Initial_Value is all zeroes.  Otherwise, locking is performed.
+ 
+    * “The declarations of ‘Any_Priority’ and ‘Priority’.  See D.1(11).”
+ 
+ See declarations in file ‘system.ads’.
+ 
+    * “Implementation-defined execution resources.  See D.1(15).”
+ 
+ There are no implementation-defined execution resources.
+ 
+    * “Whether, on a multiprocessor, a task that is waiting for access to
+      a protected object keeps its processor busy.  See D.2.1(3).”
+ 
+ On a multi-processor, a task that is waiting for access to a protected
+ object does not keep its processor busy.
+ 
+    * “The affect of implementation defined execution resources on task
+      dispatching.  See D.2.1(9).”
+ 
+ Tasks map to threads in the threads package used by GNAT. Where possible
+ and appropriate, these threads correspond to native threads of the
+ underlying operating system.
+ 
+    * “Implementation-defined task dispatching policies.  See D.2.2(3).”
+ 
+ There are no implementation-defined task dispatching policies.
+ 
+    * “The value of Default_Quantum in Dispatching.Round_Robin.  See
+      D.2.5(4).”
+ 
+ The value is 10 milliseconds.
+ 
+    * “Implementation-defined ‘policy_identifiers’ allowed in a pragma
+      ‘Locking_Policy’.  See D.3(4).”
+ 
+ The two implementation defined policies permitted in GNAT are
+ ‘Inheritance_Locking’ and ‘Concurrent_Readers_Locking’.  On targets that
+ support the ‘Inheritance_Locking’ policy, locking is implemented by
+ inheritance, i.e., the task owning the lock operates at a priority equal
+ to the highest priority of any task currently requesting the lock.  On
+ targets that support the ‘Concurrent_Readers_Locking’ policy, locking is
+ implemented with a read/write lock allowing multiple protected object
+ functions to enter concurrently.
+ 
+    * “Default ceiling priorities.  See D.3(10).”
+ 
+ The ceiling priority of protected objects of the type
+ ‘System.Interrupt_Priority'Last’ as described in the Ada Reference
+ Manual D.3(10),
+ 
+    * “The ceiling of any protected object used internally by the
+      implementation.  See D.3(16).”
+ 
+ The ceiling priority of internal protected objects is
+ ‘System.Priority'Last’.
+ 
+    * “Implementation-defined queuing policies.  See D.4(1).”
+ 
+ There are no implementation-defined queuing policies.
+ 
+    * “Implementation-defined admission policies.  See D.4.1(1).”
+ 
+ There are no implementation-defined admission policies.
+ 
+    * “Any operations that implicitly require heap storage allocation.
+      See D.7(8).”
+ 
+ The only operation that implicitly requires heap storage allocation is
+ task creation.
+ 
+    * “When restriction No_Dynamic_CPU_Assignment applies to a partition,
+      the processor on which a task with a CPU value of a
+      Not_A_Specific_CPU will execute.  See D.7(10).”
+ 
+ Unknown.
+ 
+    * “When restriction No_Task_Termination applies to a partition, what
+      happens when a task terminates.  See D.7(15.1).”
+ 
+ Execution is erroneous in that case.
+ 
+    * “The behavior when restriction Max_Storage_At_Blocking is violated.
+      See D.7(17).”
+ 
+ Execution is erroneous in that case.
+ 
+    * “The behavior when restriction Max_Asynchronous_Select_Nesting is
+      violated.  See D.7(18).”
+ 
+ Execution is erroneous in that case.
+ 
+    * “The behavior when restriction Max_Tasks is violated.  See
+      D.7(19).”
+ 
+ Execution is erroneous in that case.
+ 
+    * “Whether the use of pragma Restrictions results in a reduction in
+      program code or data size or execution time.  See D.7(20).”
+ 
+      Yes it can, but the precise circumstances and properties of such
+      reductions are difficult to characterize.
+ 
+    * “The value of Barrier_Limit’Last in Synchronous_Barriers.  See
+      D.10.1(4).”
+ 
+ Synchronous_Barriers.Barrier_Limit’Last is Integer’Last .
+ 
+    * “When an aborted task that is waiting on a Synchronous_Barrier is
+      aborted.  See D.10.1(13).”
+ 
+ Difficult to characterize.
+ 
+    * “The value of Min_Handler_Ceiling in Execution_Time.Group_Budgets.
+      See D.14.2(7).”
+ 
+ See source file ‘a-etgrbu.ads’.
+ 
+    * “The value of CPU_Range’Last in System.Multiprocessors.  See
+      D.16(4).”
+ 
+ See source file ‘s-multip.ads’.
+ 
+    * “The processor on which the environment task executes in the
+      absence of a value for the aspect CPU. See D.16(13).”
+ 
+ Unknown.
+ 
+    * “The means for creating and executing distributed programs.  See
+      E(5).”
+ 
+ The GLADE package provides a utility GNATDIST for creating and executing
+ distributed programs.  See the GLADE reference manual for further
+ details.
+ 
+    * “Any events that can result in a partition becoming inaccessible.
+      See E.1(7).”
+ 
+ See the GLADE reference manual for full details on such events.
+ 
+    * “The scheduling policies, treatment of priorities, and management
+      of shared resources between partitions in certain cases.  See
+      E.1(11).”
+ 
+ See the GLADE reference manual for full details on these aspects of
+ multi-partition execution.
+ 
+    * “Whether the execution of the remote subprogram is immediately
+      aborted as a result of cancellation.  See E.4(13).”
+ 
+ See the GLADE reference manual for details on the effect of abort in a
+ distributed application.
+ 
+    * “The range of type System.RPC.Partition_Id.  See E.5(14).”
+ 
+ System.RPC.Partition_ID’Last is Integer’Last.  See source file
+ ‘s-rpc.ads’.
+ 
+    * “Implementation-defined interfaces in the PCS. See E.5(26).”
+ 
+ See the GLADE reference manual for a full description of all
+ implementation defined interfaces.
+ 
+    * “The values of named numbers in the package ‘Decimal’.  See
+      F.2(7).”
+ 
+ Named Number             Value
+                          
+ ----------------------------------------
+                          
+ ‘Max_Scale’              +18
+                          
+                          
+ ‘Min_Scale’              -18
+                          
+                          
+ ‘Min_Delta’              1.0E-18
+                          
+                          
+ ‘Max_Delta’              1.0E+18
+                          
+                          
+ ‘Max_Decimal_Digits’     18
+                          
+ 
+    * “The value of ‘Max_Picture_Length’ in the package
+      ‘Text_IO.Editing’.  See F.3.3(16).”
+ 
+      64
+ 
+    * “The value of ‘Max_Picture_Length’ in the package
+      ‘Wide_Text_IO.Editing’.  See F.3.4(5).”
+ 
+      64
+ 
+    * “The accuracy actually achieved by the complex elementary functions
+      and by other complex arithmetic operations.  See G.1(1).”
+ 
+ Standard library functions are used for the complex arithmetic
+ operations.  Only fast math mode is currently supported.
+ 
+    * “The sign of a zero result (or a component thereof) from any
+      operator or function in ‘Numerics.Generic_Complex_Types’, when
+      ‘Real'Signed_Zeros’ is True.  See G.1.1(53).”
+ 
+ The signs of zero values are as recommended by the relevant
+ implementation advice.
+ 
+    * “The sign of a zero result (or a component thereof) from any
+      operator or function in
+      ‘Numerics.Generic_Complex_Elementary_Functions’, when
+      ‘Real'Signed_Zeros’ is ‘True’.  See G.1.2(45).”
+ 
+ The signs of zero values are as recommended by the relevant
+ implementation advice.
+ 
+    * “Whether the strict mode or the relaxed mode is the default.  See
+      G.2(2).”
+ 
+ The strict mode is the default.  There is no separate relaxed mode.
+ GNAT provides a highly efficient implementation of strict mode.
+ 
+    * “The result interval in certain cases of fixed-to-float conversion.
+      See G.2.1(10).”
+ 
+ For cases where the result interval is implementation dependent, the
+ accuracy is that provided by performing all operations in 64-bit IEEE
+ floating-point format.
+ 
+    * “The result of a floating point arithmetic operation in overflow
+      situations, when the ‘Machine_Overflows’ attribute of the result
+      type is ‘False’.  See G.2.1(13).”
+ 
+ Infinite and NaN values are produced as dictated by the IEEE
+ floating-point standard.  Note that on machines that are not fully
+ compliant with the IEEE floating-point standard, such as Alpha, the
+ ‘-mieee’ compiler flag must be used for achieving IEEE conforming
+ behavior (although at the cost of a significant performance penalty), so
+ infinite and NaN values are properly generated.
+ 
+    * “The result interval for division (or exponentiation by a negative
+      exponent), when the floating point hardware implements division as
+      multiplication by a reciprocal.  See G.2.1(16).”
+ 
+ Not relevant, division is IEEE exact.
+ 
+    * “The definition of close result set, which determines the accuracy
+      of certain fixed point multiplications and divisions.  See
+      G.2.3(5).”
+ 
+ Operations in the close result set are performed using IEEE long format
+ floating-point arithmetic.  The input operands are converted to
+ floating-point, the operation is done in floating-point, and the result
+ is converted to the target type.
+ 
+    * “Conditions on a ‘universal_real’ operand of a fixed point
+      multiplication or division for which the result shall be in the
+      perfect result set.  See G.2.3(22).”
+ 
+ The result is only defined to be in the perfect result set if the result
+ can be computed by a single scaling operation involving a scale factor
+ representable in 64 bits.
+ 
+    * “The result of a fixed point arithmetic operation in overflow
+      situations, when the ‘Machine_Overflows’ attribute of the result
+      type is ‘False’.  See G.2.3(27).”
+ 
+ Not relevant, ‘Machine_Overflows’ is ‘True’ for fixed-point types.
+ 
+    * “The result of an elementary function reference in overflow
+      situations, when the ‘Machine_Overflows’ attribute of the result
+      type is ‘False’.  See G.2.4(4).”
+ 
+ IEEE infinite and Nan values are produced as appropriate.
+ 
+    * “The value of the angle threshold, within which certain elementary
+      functions, complex arithmetic operations, and complex elementary
+      functions yield results conforming to a maximum relative error
+      bound.  See G.2.4(10).”
+ 
+ Information on this subject is not yet available.
+ 
+    * “The accuracy of certain elementary functions for parameters beyond
+      the angle threshold.  See G.2.4(10).”
+ 
+ Information on this subject is not yet available.
+ 
+    * “The result of a complex arithmetic operation or complex elementary
+      function reference in overflow situations, when the
+      ‘Machine_Overflows’ attribute of the corresponding real type is
+      ‘False’.  See G.2.6(5).”
+ 
+ IEEE infinite and Nan values are produced as appropriate.
+ 
+    * “The accuracy of certain complex arithmetic operations and certain
+      complex elementary functions for parameters (or components thereof)
+      beyond the angle threshold.  See G.2.6(8).”
+ 
+ Information on those subjects is not yet available.
+ 
+    * “The accuracy requirements for the subprograms Solve, Inverse,
+      Determinant, Eigenvalues and Eigensystem for type Real_Matrix.  See
+      G.3.1(81).”
+ 
+ Information on those subjects is not yet available.
+ 
+    * “The accuracy requirements for the subprograms Solve, Inverse,
+      Determinant, Eigenvalues and Eigensystem for type Complex_Matrix.
+      See G.3.2(149).”
+ 
+ Information on those subjects is not yet available.
+ 
+    * “The consequences of violating No_Hidden_Indirect_Globals.  See
+      H.4(23.9).”
+ 
+ Execution is erroneous in that case.
+ 
+ 
+ File: gnat_rm.info,  Node: Intrinsic Subprograms,  Next: Representation Clauses and Pragmas,  Prev: Implementation Defined Characteristics,  Up: Top
+ 
+ 8 Intrinsic Subprograms
+ ***********************
+ 
+ GNAT allows a user application program to write the declaration:
+ 
+      pragma Import (Intrinsic, name);
+ 
+ providing that the name corresponds to one of the implemented intrinsic
+ subprograms in GNAT, and that the parameter profile of the referenced
+ subprogram meets the requirements.  This chapter describes the set of
+ implemented intrinsic subprograms, and the requirements on parameter
+ profiles.  Note that no body is supplied; as with other uses of pragma
+ Import, the body is supplied elsewhere (in this case by the compiler
+ itself).  Note that any use of this feature is potentially non-portable,
+ since the Ada standard does not require Ada compilers to implement this
+ feature.
+ 
+ * Menu:
+ 
+ * Intrinsic Operators::
+ * Compilation_ISO_Date::
+ * Compilation_Date::
+ * Compilation_Time::
+ * Enclosing_Entity::
+ * Exception_Information::
+ * Exception_Message::
+ * Exception_Name::
+ * File::
+ * Line::
+ * Shifts and Rotates::
+ * Source_Location::
+ 
+ 
+ File: gnat_rm.info,  Node: Intrinsic Operators,  Next: Compilation_ISO_Date,  Up: Intrinsic Subprograms
+ 
+ 8.1 Intrinsic Operators
+ =======================
+ 
+ All the predefined numeric operators in package Standard in ‘pragma
+ Import (Intrinsic,..)’ declarations.  In the binary operator case, the
+ operands must have the same size.  The operand or operands must also be
+ appropriate for the operator.  For example, for addition, the operands
+ must both be floating-point or both be fixed-point, and the right
+ operand for ‘"**"’ must have a root type of ‘Standard.Integer'Base’.
+ You can use an intrinsic operator declaration as in the following
+ example:
+ 
+      type Int1 is new Integer;
+      type Int2 is new Integer;
+ 
+      function "+" (X1 : Int1; X2 : Int2) return Int1;
+      function "+" (X1 : Int1; X2 : Int2) return Int2;
+      pragma Import (Intrinsic, "+");
+ 
+ This declaration would permit ‘mixed mode’ arithmetic on items of the
+ differing types ‘Int1’ and ‘Int2’.  It is also possible to specify such
+ operators for private types, if the full views are appropriate
+ arithmetic types.
+ 
+ 
+ File: gnat_rm.info,  Node: Compilation_ISO_Date,  Next: Compilation_Date,  Prev: Intrinsic Operators,  Up: Intrinsic Subprograms
+ 
+ 8.2 Compilation_ISO_Date
+ ========================
+ 
+ This intrinsic subprogram is used in the implementation of the library
+ package ‘GNAT.Source_Info’.  The only useful use of the intrinsic import
+ in this case is the one in this unit, so an application program should
+ simply call the function ‘GNAT.Source_Info.Compilation_ISO_Date’ to
+ obtain the date of the current compilation (in local time format
+ YYYY-MM-DD).
+ 
+ 
+ File: gnat_rm.info,  Node: Compilation_Date,  Next: Compilation_Time,  Prev: Compilation_ISO_Date,  Up: Intrinsic Subprograms
+ 
+ 8.3 Compilation_Date
+ ====================
+ 
+ Same as Compilation_ISO_Date, except the string is in the form MMM DD
+ YYYY.
+ 
+ 
+ File: gnat_rm.info,  Node: Compilation_Time,  Next: Enclosing_Entity,  Prev: Compilation_Date,  Up: Intrinsic Subprograms
+ 
+ 8.4 Compilation_Time
+ ====================
+ 
+ This intrinsic subprogram is used in the implementation of the library
+ package ‘GNAT.Source_Info’.  The only useful use of the intrinsic import
+ in this case is the one in this unit, so an application program should
+ simply call the function ‘GNAT.Source_Info.Compilation_Time’ to obtain
+ the time of the current compilation (in local time format HH:MM:SS).
+ 
+ 
+ File: gnat_rm.info,  Node: Enclosing_Entity,  Next: Exception_Information,  Prev: Compilation_Time,  Up: Intrinsic Subprograms
+ 
+ 8.5 Enclosing_Entity
+ ====================
+ 
+ This intrinsic subprogram is used in the implementation of the library
+ package ‘GNAT.Source_Info’.  The only useful use of the intrinsic import
+ in this case is the one in this unit, so an application program should
+ simply call the function ‘GNAT.Source_Info.Enclosing_Entity’ to obtain
+ the name of the current subprogram, package, task, entry, or protected
+ subprogram.
+ 
+ 
+ File: gnat_rm.info,  Node: Exception_Information,  Next: Exception_Message,  Prev: Enclosing_Entity,  Up: Intrinsic Subprograms
+ 
+ 8.6 Exception_Information
+ =========================
+ 
+ This intrinsic subprogram is used in the implementation of the library
+ package ‘GNAT.Current_Exception’.  The only useful use of the intrinsic
+ import in this case is the one in this unit, so an application program
+ should simply call the function
+ ‘GNAT.Current_Exception.Exception_Information’ to obtain the exception
+ information associated with the current exception.
+ 
+ 
+ File: gnat_rm.info,  Node: Exception_Message,  Next: Exception_Name,  Prev: Exception_Information,  Up: Intrinsic Subprograms
+ 
+ 8.7 Exception_Message
+ =====================
+ 
+ This intrinsic subprogram is used in the implementation of the library
+ package ‘GNAT.Current_Exception’.  The only useful use of the intrinsic
+ import in this case is the one in this unit, so an application program
+ should simply call the function
+ ‘GNAT.Current_Exception.Exception_Message’ to obtain the message
+ associated with the current exception.
+ 
+ 
+ File: gnat_rm.info,  Node: Exception_Name,  Next: File,  Prev: Exception_Message,  Up: Intrinsic Subprograms
+ 
+ 8.8 Exception_Name
+ ==================
+ 
+ This intrinsic subprogram is used in the implementation of the library
+ package ‘GNAT.Current_Exception’.  The only useful use of the intrinsic
+ import in this case is the one in this unit, so an application program
+ should simply call the function ‘GNAT.Current_Exception.Exception_Name’
+ to obtain the name of the current exception.
+ 
+ 
+ File: gnat_rm.info,  Node: File,  Next: Line,  Prev: Exception_Name,  Up: Intrinsic Subprograms
+ 
+ 8.9 File
+ ========
+ 
+ This intrinsic subprogram is used in the implementation of the library
+ package ‘GNAT.Source_Info’.  The only useful use of the intrinsic import
+ in this case is the one in this unit, so an application program should
+ simply call the function ‘GNAT.Source_Info.File’ to obtain the name of
+ the current file.
+ 
+ 
+ File: gnat_rm.info,  Node: Line,  Next: Shifts and Rotates,  Prev: File,  Up: Intrinsic Subprograms
+ 
+ 8.10 Line
+ =========
+ 
+ This intrinsic subprogram is used in the implementation of the library
+ package ‘GNAT.Source_Info’.  The only useful use of the intrinsic import
+ in this case is the one in this unit, so an application program should
+ simply call the function ‘GNAT.Source_Info.Line’ to obtain the number of
+ the current source line.
+ 
+ 
+ File: gnat_rm.info,  Node: Shifts and Rotates,  Next: Source_Location,  Prev: Line,  Up: Intrinsic Subprograms
+ 
+ 8.11 Shifts and Rotates
+ =======================
+ 
+ In standard Ada, the shift and rotate functions are available only for
+ the predefined modular types in package ‘Interfaces’.  However, in GNAT
+ it is possible to define these functions for any integer type (signed or
+ modular), as in this example:
+ 
+      function Shift_Left
+        (Value  : T;
+         Amount : Natural) return T
+      with Import, Convention => Intrinsic;
+ 
+ The function name must be one of Shift_Left, Shift_Right,
+ Shift_Right_Arithmetic, Rotate_Left, or Rotate_Right.  T must be an
+ integer type.  T’Size must be 8, 16, 32 or 64 bits; if T is modular, the
+ modulus must be 2**8, 2**16, 2**32 or 2**64.  The result type must be
+ the same as the type of ‘Value’.  The shift amount must be Natural.  The
+ formal parameter names can be anything.
+ 
+ A more convenient way of providing these shift operators is to use the
+ Provide_Shift_Operators pragma, which provides the function declarations
+ and corresponding pragma Import’s for all five shift functions.  For
+ signed types the semantics of these operators is to interpret the
+ bitwise result of the corresponding operator for modular type.  In
+ particular, shifting a negative number may change its sign bit to
+ positive.
+ 
+ 
+ File: gnat_rm.info,  Node: Source_Location,  Prev: Shifts and Rotates,  Up: Intrinsic Subprograms
+ 
+ 8.12 Source_Location
+ ====================
+ 
+ This intrinsic subprogram is used in the implementation of the library
+ routine ‘GNAT.Source_Info’.  The only useful use of the intrinsic import
+ in this case is the one in this unit, so an application program should
+ simply call the function ‘GNAT.Source_Info.Source_Location’ to obtain
+ the current source file location.
+ 
+ 
+ File: gnat_rm.info,  Node: Representation Clauses and Pragmas,  Next: Standard Library Routines,  Prev: Intrinsic Subprograms,  Up: Top
+ 
+ 9 Representation Clauses and Pragmas
+ ************************************
+ 
+ This section describes the representation clauses accepted by GNAT, and
+ their effect on the representation of corresponding data objects.
+ 
+ GNAT fully implements Annex C (Systems Programming).  This means that
+ all the implementation advice sections in chapter 13 are fully
+ implemented.  However, these sections only require a minimal level of
+ support for representation clauses.  GNAT provides much more extensive
+ capabilities, and this section describes the additional capabilities
+ provided.
+ 
+ * Menu:
+ 
+ * Alignment Clauses::
+ * Size Clauses::
+ * Storage_Size Clauses::
+ * Size of Variant Record Objects::
+ * Biased Representation::
+ * Value_Size and Object_Size Clauses::
+ * Component_Size Clauses::
+ * Bit_Order Clauses::
+ * Effect of Bit_Order on Byte Ordering::
+ * Pragma Pack for Arrays::
+ * Pragma Pack for Records::
+ * Record Representation Clauses::
+ * Handling of Records with Holes::
+ * Enumeration Clauses::
+ * Address Clauses::
+ * Use of Address Clauses for Memory-Mapped I/O::
+ * Effect of Convention on Representation::
+ * Conventions and Anonymous Access Types::
+ * Determining the Representations chosen by GNAT::
+ 
+ 
+ File: gnat_rm.info,  Node: Alignment Clauses,  Next: Size Clauses,  Up: Representation Clauses and Pragmas
+ 
+ 9.1 Alignment Clauses
+ =====================
+ 
+ GNAT requires that all alignment clauses specify 0 or a power of 2, and
+ all default alignments are always a power of 2.  Specifying 0 is the
+ same as specifying 1.
+ 
+ The default alignment values are as follows:
+ 
+    * ‘Elementary Types’.
+ 
+      For elementary types, the alignment is the minimum of the actual
+      size of objects of the type divided by ‘Storage_Unit’, and the
+      maximum alignment supported by the target.  (This maximum alignment
+      is given by the GNAT-specific attribute
+      ‘Standard'Maximum_Alignment’; see *note Attribute
+      Maximum_Alignment: 18c.)
+ 
+      For example, for type ‘Long_Float’, the object size is 8 bytes, and
+      the default alignment will be 8 on any target that supports
+      alignments this large, but on some targets, the maximum alignment
+      may be smaller than 8, in which case objects of type ‘Long_Float’
+      will be maximally aligned.
+ 
+    * ‘Arrays’.
+ 
+      For arrays, the alignment is equal to the alignment of the
+      component type for the normal case where no packing or component
+      size is given.  If the array is packed, and the packing is
+      effective (see separate section on packed arrays), then the
+      alignment will be either 4, 2, or 1 for long packed arrays or
+      arrays whose length is not known at compile time, depending on
+      whether the component size is divisible by 4, 2, or is odd.  For
+      short packed arrays, which are handled internally as modular types,
+      the alignment will be as described for elementary types, e.g.  a
+      packed array of length 31 bits will have an object size of four
+      bytes, and an alignment of 4.
+ 
+    * ‘Records’.
+ 
+      For the normal unpacked case, the alignment of a record is equal to
+      the maximum alignment of any of its components.  For tagged
+      records, this includes the implicit access type used for the tag.
+      If a pragma ‘Pack’ is used and all components are packable (see
+      separate section on pragma ‘Pack’), then the resulting alignment is
+      1, unless the layout of the record makes it profitable to increase
+      it.
+ 
+      A special case is when:
+ 
+         * the size of the record is given explicitly, or a full record
+           representation clause is given, and
+ 
+         * the size of the record is 2, 4, or 8 bytes.
+ 
+      In this case, an alignment is chosen to match the size of the
+      record.  For example, if we have:
+ 
+           type Small is record
+              A, B : Character;
+           end record;
+           for Small'Size use 16;
+ 
+      then the default alignment of the record type ‘Small’ is 2, not 1.
+      This leads to more efficient code when the record is treated as a
+      unit, and also allows the type to specified as ‘Atomic’ on
+      architectures requiring strict alignment.
+ 
+ An alignment clause may specify a larger alignment than the default
+ value up to some maximum value dependent on the target (obtainable by
+ using the attribute reference ‘Standard'Maximum_Alignment’).  It may
+ also specify a smaller alignment than the default value for enumeration,
+ integer and fixed point types, as well as for record types, for example
+ 
+      type V is record
+         A : Integer;
+      end record;
+ 
+      for V'alignment use 1;
+ 
+ The default alignment for the type ‘V’ is 4, as a result of the Integer
+ field in the record, but it is permissible, as shown, to override the
+ default alignment of the record with a smaller value.
+ 
+ Note that according to the Ada standard, an alignment clause applies
+ only to the first named subtype.  If additional subtypes are declared,
+ then the compiler is allowed to choose any alignment it likes, and there
+ is no way to control this choice.  Consider:
+ 
+      type R is range 1 .. 10_000;
+      for R'Alignment use 1;
+      subtype RS is R range 1 .. 1000;
+ 
+ The alignment clause specifies an alignment of 1 for the first named
+ subtype ‘R’ but this does not necessarily apply to ‘RS’.  When writing
+ portable Ada code, you should avoid writing code that explicitly or
+ implicitly relies on the alignment of such subtypes.
+ 
+ For the GNAT compiler, if an explicit alignment clause is given, this
+ value is also used for any subsequent subtypes.  So for GNAT, in the
+ above example, you can count on the alignment of ‘RS’ being 1.  But this
+ assumption is non-portable, and other compilers may choose different
+ alignments for the subtype ‘RS’.
+ 
+ 
+ File: gnat_rm.info,  Node: Size Clauses,  Next: Storage_Size Clauses,  Prev: Alignment Clauses,  Up: Representation Clauses and Pragmas
+ 
+ 9.2 Size Clauses
+ ================
+ 
+ The default size for a type ‘T’ is obtainable through the
+ language-defined attribute ‘T'Size’ and also through the equivalent
+ GNAT-defined attribute ‘T'Value_Size’.  For objects of type ‘T’, GNAT
+ will generally increase the type size so that the object size
+ (obtainable through the GNAT-defined attribute ‘T'Object_Size’) is a
+ multiple of ‘T'Alignment * Storage_Unit’.
+ 
+ For example:
+ 
+      type Smallint is range 1 .. 6;
+ 
+      type Rec is record
+         Y1 : integer;
+         Y2 : boolean;
+      end record;
+ 
+ In this example, ‘Smallint'Size’ = ‘Smallint'Value_Size’ = 3, as
+ specified by the RM rules, but objects of this type will have a size of
+ 8 (‘Smallint'Object_Size’ = 8), since objects by default occupy an
+ integral number of storage units.  On some targets, notably older
+ versions of the Digital Alpha, the size of stand alone objects of this
+ type may be 32, reflecting the inability of the hardware to do byte
+ load/stores.
+ 
+ Similarly, the size of type ‘Rec’ is 40 bits (‘Rec'Size’ =
+ ‘Rec'Value_Size’ = 40), but the alignment is 4, so objects of this type
+ will have their size increased to 64 bits so that it is a multiple of
+ the alignment (in bits).  This decision is in accordance with the
+ specific Implementation Advice in RM 13.3(43):
+ 
+      “A ‘Size’ clause should be supported for an object if the specified
+      ‘Size’ is at least as large as its subtype’s ‘Size’, and
+      corresponds to a size in storage elements that is a multiple of the
+      object’s ‘Alignment’ (if the ‘Alignment’ is nonzero).”
+ 
+ An explicit size clause may be used to override the default size by
+ increasing it.  For example, if we have:
+ 
+      type My_Boolean is new Boolean;
+      for My_Boolean'Size use 32;
+ 
+ then values of this type will always be 32-bit long.  In the case of
+ discrete types, the size can be increased up to 64 bits on 32-bit
+ targets and 128 bits on 64-bit targets, with the effect that the entire
+ specified field is used to hold the value, sign- or zero-extended as
+ appropriate.  If more than 64 bits or 128 bits resp.  is specified, then
+ padding space is allocated after the value, and a warning is issued that
+ there are unused bits.
+ 
+ Similarly the size of records and arrays may be increased, and the
+ effect is to add padding bits after the value.  This also causes a
+ warning message to be generated.
+ 
+ The largest Size value permitted in GNAT is 2**31-1.  Since this is a
+ Size in bits, this corresponds to an object of size 256 megabytes (minus
+ one).  This limitation is true on all targets.  The reason for this
+ limitation is that it improves the quality of the code in many cases if
+ it is known that a Size value can be accommodated in an object of type
+ Integer.
+ 
+ 
+ File: gnat_rm.info,  Node: Storage_Size Clauses,  Next: Size of Variant Record Objects,  Prev: Size Clauses,  Up: Representation Clauses and Pragmas
+ 
+ 9.3 Storage_Size Clauses
+ ========================
+ 
+ For tasks, the ‘Storage_Size’ clause specifies the amount of space to be
+ allocated for the task stack.  This cannot be extended, and if the stack
+ is exhausted, then ‘Storage_Error’ will be raised (if stack checking is
+ enabled).  Use a ‘Storage_Size’ attribute definition clause, or a
+ ‘Storage_Size’ pragma in the task definition to set the appropriate
+ required size.  A useful technique is to include in every task
+ definition a pragma of the form:
+ 
+      pragma Storage_Size (Default_Stack_Size);
+ 
+ Then ‘Default_Stack_Size’ can be defined in a global package, and
+ modified as required.  Any tasks requiring stack sizes different from
+ the default can have an appropriate alternative reference in the pragma.
+ 
+ You can also use the ‘-d’ binder switch to modify the default stack
+ size.
+ 
+ For access types, the ‘Storage_Size’ clause specifies the maximum space
+ available for allocation of objects of the type.  If this space is
+ exceeded then ‘Storage_Error’ will be raised by an allocation attempt.
+ In the case where the access type is declared local to a subprogram, the
+ use of a ‘Storage_Size’ clause triggers automatic use of a special
+ predefined storage pool (‘System.Pool_Size’) that ensures that all space
+ for the pool is automatically reclaimed on exit from the scope in which
+ the type is declared.
+ 
+ A special case recognized by the compiler is the specification of a
+ ‘Storage_Size’ of zero for an access type.  This means that no items can
+ be allocated from the pool, and this is recognized at compile time, and
+ all the overhead normally associated with maintaining a fixed size
+ storage pool is eliminated.  Consider the following example:
+ 
+      procedure p is
+         type R is array (Natural) of Character;
+         type P is access all R;
+         for P'Storage_Size use 0;
+         --  Above access type intended only for interfacing purposes
+ 
+         y : P;
+ 
+         procedure g (m : P);
+         pragma Import (C, g);
+ 
+         --  ...
+ 
+      begin
+         --  ...
+         y := new R;
+      end;
+ 
+ As indicated in this example, these dummy storage pools are often useful
+ in connection with interfacing where no object will ever be allocated.
+ If you compile the above example, you get the warning:
+ 
+      p.adb:16:09: warning: allocation from empty storage pool
+      p.adb:16:09: warning: Storage_Error will be raised at run time
+ 
+ Of course in practice, there will not be any explicit allocators in the
+ case of such an access declaration.
+ 
+ 
+ File: gnat_rm.info,  Node: Size of Variant Record Objects,  Next: Biased Representation,  Prev: Storage_Size Clauses,  Up: Representation Clauses and Pragmas
+ 
+ 9.4 Size of Variant Record Objects
+ ==================================
+ 
+ In the case of variant record objects, there is a question whether Size
+ gives information about a particular variant, or the maximum size
+ required for any variant.  Consider the following program
+ 
+      with Text_IO; use Text_IO;
+      procedure q is
+         type R1 (A : Boolean := False) is record
+           case A is
+             when True  => X : Character;
+             when False => null;
+           end case;
+         end record;
+ 
+         V1 : R1 (False);
+         V2 : R1;
+ 
+      begin
+         Put_Line (Integer'Image (V1'Size));
+         Put_Line (Integer'Image (V2'Size));
+      end q;
+ 
+ Here we are dealing with a variant record, where the True variant
+ requires 16 bits, and the False variant requires 8 bits.  In the above
+ example, both V1 and V2 contain the False variant, which is only 8 bits
+ long.  However, the result of running the program is:
+ 
+      8
+      16
+ 
+ The reason for the difference here is that the discriminant value of V1
+ is fixed, and will always be False.  It is not possible to assign a True
+ variant value to V1, therefore 8 bits is sufficient.  On the other hand,
+ in the case of V2, the initial discriminant value is False (from the
+ default), but it is possible to assign a True variant value to V2,
+ therefore 16 bits must be allocated for V2 in the general case, even
+ fewer bits may be needed at any particular point during the program
+ execution.
+ 
+ As can be seen from the output of this program, the ‘'Size’ attribute
+ applied to such an object in GNAT gives the actual allocated size of the
+ variable, which is the largest size of any of the variants.  The Ada
+ Reference Manual is not completely clear on what choice should be made
+ here, but the GNAT behavior seems most consistent with the language in
+ the RM.
+ 
+ In some cases, it may be desirable to obtain the size of the current
+ variant, rather than the size of the largest variant.  This can be
+ achieved in GNAT by making use of the fact that in the case of a
+ subprogram parameter, GNAT does indeed return the size of the current
+ variant (because a subprogram has no way of knowing how much space is
+ actually allocated for the actual).
+ 
+ Consider the following modified version of the above program:
+ 
+      with Text_IO; use Text_IO;
+      procedure q is
+         type R1 (A : Boolean := False) is record
+           case A is
+             when True  => X : Character;
+             when False => null;
+           end case;
+         end record;
+ 
+         V2 : R1;
+ 
+         function Size (V : R1) return Integer is
+         begin
+            return V'Size;
+         end Size;
+ 
+      begin
+         Put_Line (Integer'Image (V2'Size));
+         Put_Line (Integer'Image (Size (V2)));
+         V2 := (True, 'x');
+         Put_Line (Integer'Image (V2'Size));
+         Put_Line (Integer'Image (Size (V2)));
+      end q;
+ 
+ The output from this program is
+ 
+      16
+      8
+      16
+      16
+ 
+ Here we see that while the ‘'Size’ attribute always returns the maximum
+ size, regardless of the current variant value, the ‘Size’ function does
+ indeed return the size of the current variant value.
+ 
+ 
+ File: gnat_rm.info,  Node: Biased Representation,  Next: Value_Size and Object_Size Clauses,  Prev: Size of Variant Record Objects,  Up: Representation Clauses and Pragmas
+ 
+ 9.5 Biased Representation
+ =========================
+ 
+ In the case of scalars with a range starting at other than zero, it is
+ possible in some cases to specify a size smaller than the default
+ minimum value, and in such cases, GNAT uses an unsigned biased
+ representation, in which zero is used to represent the lower bound, and
+ successive values represent successive values of the type.
+ 
+ For example, suppose we have the declaration:
+ 
+      type Small is range -7 .. -4;
+      for Small'Size use 2;
+ 
+ Although the default size of type ‘Small’ is 4, the ‘Size’ clause is
+ accepted by GNAT and results in the following representation scheme:
+ 
+      -7 is represented as 2#00#
+      -6 is represented as 2#01#
+      -5 is represented as 2#10#
+      -4 is represented as 2#11#
+ 
+ Biased representation is only used if the specified ‘Size’ clause cannot
+ be accepted in any other manner.  These reduced sizes that force biased
+ representation can be used for all discrete types except for enumeration
+ types for which a representation clause is given.
+ 
+ 
+ File: gnat_rm.info,  Node: Value_Size and Object_Size Clauses,  Next: Component_Size Clauses,  Prev: Biased Representation,  Up: Representation Clauses and Pragmas
+ 
+ 9.6 Value_Size and Object_Size Clauses
+ ======================================
+ 
+ In Ada 95 and Ada 2005, ‘T'Size’ for a type ‘T’ is the minimum number of
+ bits required to hold values of type ‘T’.  Although this interpretation
+ was allowed in Ada 83, it was not required, and this requirement in
+ practice can cause some significant difficulties.  For example, in most
+ Ada 83 compilers, ‘Natural'Size’ was 32.  However, in Ada 95 and Ada
+ 2005, ‘Natural'Size’ is typically 31.  This means that code may change
+ in behavior when moving from Ada 83 to Ada 95 or Ada 2005.  For example,
+ consider:
+ 
+      type Rec is record
+         A : Natural;
+         B : Natural;
+      end record;
+ 
+      for Rec use record
+         A at 0 range 0 .. Natural'Size - 1;
+         B at 0 range Natural'Size .. 2 * Natural'Size - 1;
+      end record;
+ 
+ In the above code, since the typical size of ‘Natural’ objects is 32
+ bits and ‘Natural'Size’ is 31, the above code can cause unexpected
+ inefficient packing in Ada 95 and Ada 2005, and in general there are
+ cases where the fact that the object size can exceed the size of the
+ type causes surprises.
+ 
+ To help get around this problem GNAT provides two implementation defined
+ attributes, ‘Value_Size’ and ‘Object_Size’.  When applied to a type,
+ these attributes yield the size of the type (corresponding to the RM
+ defined size attribute), and the size of objects of the type
+ respectively.
+ 
+ The ‘Object_Size’ is used for determining the default size of objects
+ and components.  This size value can be referred to using the
+ ‘Object_Size’ attribute.  The phrase ‘is used’ here means that it is the
+ basis of the determination of the size.  The backend is free to pad this
+ up if necessary for efficiency, e.g., an 8-bit stand-alone character
+ might be stored in 32 bits on a machine with no efficient byte access
+ instructions such as the Alpha.
+ 
+ The default rules for the value of ‘Object_Size’ for discrete types are
+ as follows:
+ 
+    * The ‘Object_Size’ for base subtypes reflect the natural hardware
+      size in bits (run the compiler with ‘-gnatS’ to find those values
+      for numeric types).  Enumeration types and fixed-point base
+      subtypes have 8, 16, 32, or 64 bits for this size, depending on the
+      range of values to be stored.
+ 
+    * The ‘Object_Size’ of a subtype is the same as the ‘Object_Size’ of
+      the type from which it is obtained.
+ 
+    * The ‘Object_Size’ of a derived base type is copied from the parent
+      base type, and the ‘Object_Size’ of a derived first subtype is
+      copied from the parent first subtype.
+ 
+ The ‘Value_Size’ attribute is the (minimum) number of bits required to
+ store a value of the type.  This value is used to determine how tightly
+ to pack records or arrays with components of this type, and also affects
+ the semantics of unchecked conversion (unchecked conversions where the
+ ‘Value_Size’ values differ generate a warning, and are potentially
+ target dependent).
+ 
+ The default rules for the value of ‘Value_Size’ are as follows:
+ 
+    * The ‘Value_Size’ for a base subtype is the minimum number of bits
+      required to store all values of the type (including the sign bit
+      only if negative values are possible).
+ 
+    * If a subtype statically matches the first subtype of a given type,
+      then it has by default the same ‘Value_Size’ as the first subtype.
+      (This is a consequence of RM 13.1(14): “if two subtypes statically
+      match, then their subtype-specific aspects are the same”.)
+ 
+    * All other subtypes have a ‘Value_Size’ corresponding to the minimum
+      number of bits required to store all values of the subtype.  For
+      dynamic bounds, it is assumed that the value can range down or up
+      to the corresponding bound of the ancestor
+ 
+ The RM defined attribute ‘Size’ corresponds to the ‘Value_Size’
+ attribute.
+ 
+ The ‘Size’ attribute may be defined for a first-named subtype.  This
+ sets the ‘Value_Size’ of the first-named subtype to the given value, and
+ the ‘Object_Size’ of this first-named subtype to the given value padded
+ up to an appropriate boundary.  It is a consequence of the default rules
+ above that this ‘Object_Size’ will apply to all further subtypes.  On
+ the other hand, ‘Value_Size’ is affected only for the first subtype, any
+ dynamic subtypes obtained from it directly, and any statically matching
+ subtypes.  The ‘Value_Size’ of any other static subtypes is not
+ affected.
+ 
+ ‘Value_Size’ and ‘Object_Size’ may be explicitly set for any subtype
+ using an attribute definition clause.  Note that the use of these
+ attributes can cause the RM 13.1(14) rule to be violated.  If two access
+ types reference aliased objects whose subtypes have differing
+ ‘Object_Size’ values as a result of explicit attribute definition
+ clauses, then it is illegal to convert from one access subtype to the
+ other.  For a more complete description of this additional legality
+ rule, see the description of the ‘Object_Size’ attribute.
+ 
+ To get a feel for the difference, consider the following examples (note
+ that in each case the base is ‘Short_Short_Integer’ with a size of 8):
+ 
+ Type or subtype declaration                       Object_Size       Value_Size
+                                                                     
+ --------------------------------------------------------------------------------------
+                                                                     
+ ‘type x1 is range 0 .. 5;’                        8                 3
+                                                                     
+                                                                     
+ ‘type x2 is range 0 .. 5;’ ‘for x2'size use       16                12
+ 12;’                                                                
+ 
+ ‘subtype x3 is x2 range 0 .. 3;’                  16                2
+                                                                     
+                                                                     
+ ‘subtype x4 is x2'base range 0 .. 10;’            8                 4
+                                                                     
+                                                                     
+ ‘dynamic : x2'Base range -64 .. +63;’
+ 
+ ‘subtype x5 is x2 range 0 .. dynamic;’            16                3*
+                                                                     
+                                                                     
+ ‘subtype x6 is x2'base range 0 .. dynamic;’       8                 7*
+                                                                     
+ 
+ Note: the entries marked ‘*’ are not actually specified by the Ada
+ Reference Manual, which has nothing to say about size in the dynamic
+ case.  What GNAT does is to allocate sufficient bits to accommodate any
+ possible dynamic values for the bounds at run-time.
+ 
+ So far, so good, but GNAT has to obey the RM rules, so the question is
+ under what conditions must the RM ‘Size’ be used.  The following is a
+ list of the occasions on which the RM ‘Size’ must be used:
+ 
+    * Component size for packed arrays or records
+ 
+    * Value of the attribute ‘Size’ for a type
+ 
+    * Warning about sizes not matching for unchecked conversion
+ 
+ For record types, the ‘Object_Size’ is always a multiple of the
+ alignment of the type (this is true for all types).  In some cases the
+ ‘Value_Size’ can be smaller.  Consider:
+ 
+      type R is record
+        X : Integer;
+        Y : Character;
+      end record;
+ 
+ On a typical 32-bit architecture, the X component will occupy four bytes
+ and the Y component will occupy one byte, for a total of 5 bytes.  As a
+ result ‘R'Value_Size’ will be 40 (bits) since this is the minimum size
+ required to store a value of this type.  For example, it is permissible
+ to have a component of type R in an array whose component size is
+ specified to be 40 bits.
+ 
+ However, ‘R'Object_Size’ will be 64 (bits).  The difference is due to
+ the alignment requirement for objects of the record type.  The X
+ component will require four-byte alignment because that is what type
+ Integer requires, whereas the Y component, a Character, will only
+ require 1-byte alignment.  Since the alignment required for X is the
+ greatest of all the components’ alignments, that is the alignment
+ required for the enclosing record type, i.e., 4 bytes or 32 bits.  As
+ indicated above, the actual object size must be rounded up so that it is
+ a multiple of the alignment value.  Therefore, 40 bits rounded up to the
+ next multiple of 32 yields 64 bits.
+ 
+ For all other types, the ‘Object_Size’ and ‘Value_Size’ are the same
+ (and equivalent to the RM attribute ‘Size’).  Only ‘Size’ may be
+ specified for such types.
+ 
+ Note that ‘Value_Size’ can be used to force biased representation for a
+ particular subtype.  Consider this example:
+ 
+      type R is (A, B, C, D, E, F);
+      subtype RAB is R range A .. B;
+      subtype REF is R range E .. F;
+ 
+ By default, ‘RAB’ has a size of 1 (sufficient to accommodate the
+ representation of ‘A’ and ‘B’, 0 and 1), and ‘REF’ has a size of 3
+ (sufficient to accommodate the representation of ‘E’ and ‘F’, 4 and 5).
+ But if we add the following ‘Value_Size’ attribute definition clause:
+ 
+      for REF'Value_Size use 1;
+ 
+ then biased representation is forced for ‘REF’, and 0 will represent ‘E’
+ and 1 will represent ‘F’.  A warning is issued when a ‘Value_Size’
+ attribute definition clause forces biased representation.  This warning
+ can be turned off using ‘-gnatw.B’.
+ 
+ 
+ File: gnat_rm.info,  Node: Component_Size Clauses,  Next: Bit_Order Clauses,  Prev: Value_Size and Object_Size Clauses,  Up: Representation Clauses and Pragmas
+ 
+ 9.7 Component_Size Clauses
+ ==========================
+ 
+ Normally, the value specified in a component size clause must be
+ consistent with the subtype of the array component with regard to size
+ and alignment.  In other words, the value specified must be at least
+ equal to the size of this subtype, and must be a multiple of the
+ alignment value.
+ 
+ In addition, component size clauses are allowed which cause the array to
+ be packed, by specifying a smaller value.  A first case is for component
+ size values in the range 1 through 63 on 32-bit targets, and 1 through
+ 127 on 64-bit targets.  The value specified may not be smaller than the
+ Size of the subtype.  GNAT will accurately honor all packing requests in
+ this range.  For example, if we have:
+ 
+      type r is array (1 .. 8) of Natural;
+      for r'Component_Size use 31;
+ 
+ then the resulting array has a length of 31 bytes (248 bits = 8 * 31).
+ Of course access to the components of such an array is considerably less
+ efficient than if the natural component size of 32 is used.  A second
+ case is when the subtype of the component is a record type padded
+ because of its default alignment.  For example, if we have:
+ 
+      type r is record
+        i : Integer;
+        j : Integer;
+        b : Boolean;
+      end record;
+ 
+      type a is array (1 .. 8) of r;
+      for a'Component_Size use 72;
+ 
+ then the resulting array has a length of 72 bytes, instead of 96 bytes
+ if the alignment of the record (4) was obeyed.
+ 
+ Note that there is no point in giving both a component size clause and a
+ pragma Pack for the same array type.  if such duplicate clauses are
+ given, the pragma Pack will be ignored.
+ 
+ 
+ File: gnat_rm.info,  Node: Bit_Order Clauses,  Next: Effect of Bit_Order on Byte Ordering,  Prev: Component_Size Clauses,  Up: Representation Clauses and Pragmas
+ 
+ 9.8 Bit_Order Clauses
+ =====================
+ 
+ For record subtypes, GNAT permits the specification of the ‘Bit_Order’
+ attribute.  The specification may either correspond to the default bit
+ order for the target, in which case the specification has no effect and
+ places no additional restrictions, or it may be for the non-standard
+ setting (that is the opposite of the default).
+ 
+ In the case where the non-standard value is specified, the effect is to
+ renumber bits within each byte, but the ordering of bytes is not
+ affected.  There are certain restrictions placed on component clauses as
+ follows:
+ 
+    * Components fitting within a single storage unit.
+ 
+      These are unrestricted, and the effect is merely to renumber bits.
+      For example if we are on a little-endian machine with
+      ‘Low_Order_First’ being the default, then the following two
+      declarations have exactly the same effect:
+ 
+           type R1 is record
+              A : Boolean;
+              B : Integer range 1 .. 120;
+           end record;
+ 
+           for R1 use record
+              A at 0 range 0 .. 0;
+              B at 0 range 1 .. 7;
+           end record;
+ 
+           type R2 is record
+              A : Boolean;
+              B : Integer range 1 .. 120;
+           end record;
+ 
+           for R2'Bit_Order use High_Order_First;
+ 
+           for R2 use record
+              A at 0 range 7 .. 7;
+              B at 0 range 0 .. 6;
+           end record;
+ 
+      The useful application here is to write the second declaration with
+      the ‘Bit_Order’ attribute definition clause, and know that it will
+      be treated the same, regardless of whether the target is
+      little-endian or big-endian.
+ 
+    * Components occupying an integral number of bytes.
+ 
+      These are components that exactly fit in two or more bytes.  Such
+      component declarations are allowed, but have no effect, since it is
+      important to realize that the ‘Bit_Order’ specification does not
+      affect the ordering of bytes.  In particular, the following attempt
+      at getting an endian-independent integer does not work:
+ 
+           type R2 is record
+              A : Integer;
+           end record;
+ 
+           for R2'Bit_Order use High_Order_First;
+ 
+           for R2 use record
+              A at 0 range 0 .. 31;
+           end record;
+ 
+      This declaration will result in a little-endian integer on a
+      little-endian machine, and a big-endian integer on a big-endian
+      machine.  If byte flipping is required for interoperability between
+      big- and little-endian machines, this must be explicitly
+      programmed.  This capability is not provided by ‘Bit_Order’.
+ 
+    * Components that are positioned across byte boundaries.
+ 
+      but do not occupy an integral number of bytes.  Given that bytes
+      are not reordered, such fields would occupy a non-contiguous
+      sequence of bits in memory, requiring non-trivial code to
+      reassemble.  They are for this reason not permitted, and any
+      component clause specifying such a layout will be flagged as
+      illegal by GNAT.
+ 
+ Since the misconception that Bit_Order automatically deals with all
+ endian-related incompatibilities is a common one, the specification of a
+ component field that is an integral number of bytes will always generate
+ a warning.  This warning may be suppressed using ‘pragma Warnings (Off)’
+ if desired.  The following section contains additional details regarding
+ the issue of byte ordering.
+ 
+ 
+ File: gnat_rm.info,  Node: Effect of Bit_Order on Byte Ordering,  Next: Pragma Pack for Arrays,  Prev: Bit_Order Clauses,  Up: Representation Clauses and Pragmas
+ 
+ 9.9 Effect of Bit_Order on Byte Ordering
+ ========================================
+ 
+ In this section we will review the effect of the ‘Bit_Order’ attribute
+ definition clause on byte ordering.  Briefly, it has no effect at all,
+ but a detailed example will be helpful.  Before giving this example, let
+ us review the precise definition of the effect of defining ‘Bit_Order’.
+ The effect of a non-standard bit order is described in section 13.5.3 of
+ the Ada Reference Manual:
+ 
+      “2 A bit ordering is a method of interpreting the meaning of the
+      storage place attributes.”
+ 
+ To understand the precise definition of storage place attributes in this
+ context, we visit section 13.5.1 of the manual:
+ 
+      “13 A record_representation_clause (without the mod_clause)
+      specifies the layout.  The storage place attributes (see 13.5.2)
+      are taken from the values of the position, first_bit, and last_bit
+      expressions after normalizing those values so that first_bit is
+      less than Storage_Unit.”
+ 
+ The critical point here is that storage places are taken from the values
+ after normalization, not before.  So the ‘Bit_Order’ interpretation
+ applies to normalized values.  The interpretation is described in the
+ later part of the 13.5.3 paragraph:
+ 
+      “2 A bit ordering is a method of interpreting the meaning of the
+      storage place attributes.  High_Order_First (known in the
+      vernacular as ‘big endian’) means that the first bit of a storage
+      element (bit 0) is the most significant bit (interpreting the
+      sequence of bits that represent a component as an unsigned integer
+      value).  Low_Order_First (known in the vernacular as ‘little
+      endian’) means the opposite: the first bit is the least
+      significant.”
+ 
+ Note that the numbering is with respect to the bits of a storage unit.
+ In other words, the specification affects only the numbering of bits
+ within a single storage unit.
+ 
+ We can make the effect clearer by giving an example.
+ 
+ Suppose that we have an external device which presents two bytes, the
+ first byte presented, which is the first (low addressed byte) of the two
+ byte record is called Master, and the second byte is called Slave.
+ 
+ The left most (most significant) bit is called Control for each byte,
+ and the remaining 7 bits are called V1, V2, … V7, where V7 is the
+ rightmost (least significant) bit.
+ 
+ On a big-endian machine, we can write the following representation
+ clause
+ 
+      type Data is record
+         Master_Control : Bit;
+         Master_V1      : Bit;
+         Master_V2      : Bit;
+         Master_V3      : Bit;
+         Master_V4      : Bit;
+         Master_V5      : Bit;
+         Master_V6      : Bit;
+         Master_V7      : Bit;
+         Slave_Control  : Bit;
+         Slave_V1       : Bit;
+         Slave_V2       : Bit;
+         Slave_V3       : Bit;
+         Slave_V4       : Bit;
+         Slave_V5       : Bit;
+         Slave_V6       : Bit;
+         Slave_V7       : Bit;
+      end record;
+ 
+      for Data use record
+         Master_Control at 0 range 0 .. 0;
+         Master_V1      at 0 range 1 .. 1;
+         Master_V2      at 0 range 2 .. 2;
+         Master_V3      at 0 range 3 .. 3;
+         Master_V4      at 0 range 4 .. 4;
+         Master_V5      at 0 range 5 .. 5;
+         Master_V6      at 0 range 6 .. 6;
+         Master_V7      at 0 range 7 .. 7;
+         Slave_Control  at 1 range 0 .. 0;
+         Slave_V1       at 1 range 1 .. 1;
+         Slave_V2       at 1 range 2 .. 2;
+         Slave_V3       at 1 range 3 .. 3;
+         Slave_V4       at 1 range 4 .. 4;
+         Slave_V5       at 1 range 5 .. 5;
+         Slave_V6       at 1 range 6 .. 6;
+         Slave_V7       at 1 range 7 .. 7;
+      end record;
+ 
+ Now if we move this to a little endian machine, then the bit ordering
+ within the byte is backwards, so we have to rewrite the record rep
+ clause as:
+ 
+      for Data use record
+         Master_Control at 0 range 7 .. 7;
+         Master_V1      at 0 range 6 .. 6;
+         Master_V2      at 0 range 5 .. 5;
+         Master_V3      at 0 range 4 .. 4;
+         Master_V4      at 0 range 3 .. 3;
+         Master_V5      at 0 range 2 .. 2;
+         Master_V6      at 0 range 1 .. 1;
+         Master_V7      at 0 range 0 .. 0;
+         Slave_Control  at 1 range 7 .. 7;
+         Slave_V1       at 1 range 6 .. 6;
+         Slave_V2       at 1 range 5 .. 5;
+         Slave_V3       at 1 range 4 .. 4;
+         Slave_V4       at 1 range 3 .. 3;
+         Slave_V5       at 1 range 2 .. 2;
+         Slave_V6       at 1 range 1 .. 1;
+         Slave_V7       at 1 range 0 .. 0;
+      end record;
+ 
+ It is a nuisance to have to rewrite the clause, especially if the code
+ has to be maintained on both machines.  However, this is a case that we
+ can handle with the ‘Bit_Order’ attribute if it is implemented.  Note
+ that the implementation is not required on byte addressed machines, but
+ it is indeed implemented in GNAT. This means that we can simply use the
+ first record clause, together with the declaration
+ 
+      for Data'Bit_Order use High_Order_First;
+ 
+ and the effect is what is desired, namely the layout is exactly the
+ same, independent of whether the code is compiled on a big-endian or
+ little-endian machine.
+ 
+ The important point to understand is that byte ordering is not affected.
+ A ‘Bit_Order’ attribute definition never affects which byte a field ends
+ up in, only where it ends up in that byte.  To make this clear, let us
+ rewrite the record rep clause of the previous example as:
+ 
+      for Data'Bit_Order use High_Order_First;
+      for Data use record
+         Master_Control at 0 range  0 .. 0;
+         Master_V1      at 0 range  1 .. 1;
+         Master_V2      at 0 range  2 .. 2;
+         Master_V3      at 0 range  3 .. 3;
+         Master_V4      at 0 range  4 .. 4;
+         Master_V5      at 0 range  5 .. 5;
+         Master_V6      at 0 range  6 .. 6;
+         Master_V7      at 0 range  7 .. 7;
+         Slave_Control  at 0 range  8 .. 8;
+         Slave_V1       at 0 range  9 .. 9;
+         Slave_V2       at 0 range 10 .. 10;
+         Slave_V3       at 0 range 11 .. 11;
+         Slave_V4       at 0 range 12 .. 12;
+         Slave_V5       at 0 range 13 .. 13;
+         Slave_V6       at 0 range 14 .. 14;
+         Slave_V7       at 0 range 15 .. 15;
+      end record;
+ 
+ This is exactly equivalent to saying (a repeat of the first example):
+ 
+      for Data'Bit_Order use High_Order_First;
+      for Data use record
+         Master_Control at 0 range 0 .. 0;
+         Master_V1      at 0 range 1 .. 1;
+         Master_V2      at 0 range 2 .. 2;
+         Master_V3      at 0 range 3 .. 3;
+         Master_V4      at 0 range 4 .. 4;
+         Master_V5      at 0 range 5 .. 5;
+         Master_V6      at 0 range 6 .. 6;
+         Master_V7      at 0 range 7 .. 7;
+         Slave_Control  at 1 range 0 .. 0;
+         Slave_V1       at 1 range 1 .. 1;
+         Slave_V2       at 1 range 2 .. 2;
+         Slave_V3       at 1 range 3 .. 3;
+         Slave_V4       at 1 range 4 .. 4;
+         Slave_V5       at 1 range 5 .. 5;
+         Slave_V6       at 1 range 6 .. 6;
+         Slave_V7       at 1 range 7 .. 7;
+      end record;
+ 
+ Why are they equivalent?  Well take a specific field, the ‘Slave_V2’
+ field.  The storage place attributes are obtained by normalizing the
+ values given so that the ‘First_Bit’ value is less than 8.  After
+ normalizing the values (0,10,10) we get (1,2,2) which is exactly what we
+ specified in the other case.
+ 
+ Now one might expect that the ‘Bit_Order’ attribute might affect bit
+ numbering within the entire record component (two bytes in this case,
+ thus affecting which byte fields end up in), but that is not the way
+ this feature is defined, it only affects numbering of bits, not which
+ byte they end up in.
+ 
+ Consequently it never makes sense to specify a starting bit number
+ greater than 7 (for a byte addressable field) if an attribute definition
+ for ‘Bit_Order’ has been given, and indeed it may be actively confusing
+ to specify such a value, so the compiler generates a warning for such
+ usage.
+ 
+ If you do need to control byte ordering then appropriate conditional
+ values must be used.  If in our example, the slave byte came first on
+ some machines we might write:
+ 
+      Master_Byte_First constant Boolean := ...;
+ 
+      Master_Byte : constant Natural :=
+                      1 - Boolean'Pos (Master_Byte_First);
+      Slave_Byte  : constant Natural :=
+                      Boolean'Pos (Master_Byte_First);
+ 
+      for Data'Bit_Order use High_Order_First;
+      for Data use record
+         Master_Control at Master_Byte range 0 .. 0;
+         Master_V1      at Master_Byte range 1 .. 1;
+         Master_V2      at Master_Byte range 2 .. 2;
+         Master_V3      at Master_Byte range 3 .. 3;
+         Master_V4      at Master_Byte range 4 .. 4;
+         Master_V5      at Master_Byte range 5 .. 5;
+         Master_V6      at Master_Byte range 6 .. 6;
+         Master_V7      at Master_Byte range 7 .. 7;
+         Slave_Control  at Slave_Byte  range 0 .. 0;
+         Slave_V1       at Slave_Byte  range 1 .. 1;
+         Slave_V2       at Slave_Byte  range 2 .. 2;
+         Slave_V3       at Slave_Byte  range 3 .. 3;
+         Slave_V4       at Slave_Byte  range 4 .. 4;
+         Slave_V5       at Slave_Byte  range 5 .. 5;
+         Slave_V6       at Slave_Byte  range 6 .. 6;
+         Slave_V7       at Slave_Byte  range 7 .. 7;
+      end record;
+ 
+ Now to switch between machines, all that is necessary is to set the
+ boolean constant ‘Master_Byte_First’ in an appropriate manner.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Pack for Arrays,  Next: Pragma Pack for Records,  Prev: Effect of Bit_Order on Byte Ordering,  Up: Representation Clauses and Pragmas
+ 
+ 9.10 Pragma Pack for Arrays
+ ===========================
+ 
+ Pragma ‘Pack’ applied to an array has an effect that depends upon
+ whether the component type is ‘packable’.  For a component type to be
+ ‘packable’, it must be one of the following cases:
+ 
+    * Any elementary type.
+ 
+    * Any small packed array type with a static size.
+ 
+    * Any small simple record type with a static size.
+ 
+ For all these cases, if the component subtype size is in the range 1
+ through 63 on 32-bit targets, and 1 through 127 on 64-bit targets, then
+ the effect of the pragma ‘Pack’ is exactly as though a component size
+ were specified giving the component subtype size.
+ 
+ All other types are non-packable, they occupy an integral number of
+ storage units and the only effect of pragma Pack is to remove alignment
+ gaps.
+ 
+ For example if we have:
+ 
+      type r is range 0 .. 17;
+ 
+      type ar is array (1 .. 8) of r;
+      pragma Pack (ar);
+ 
+ Then the component size of ‘ar’ will be set to 5 (i.e., to ‘r'size’, and
+ the size of the array ‘ar’ will be exactly 40 bits).
+ 
+ Note that in some cases this rather fierce approach to packing can
+ produce unexpected effects.  For example, in Ada 95 and Ada 2005,
+ subtype ‘Natural’ typically has a size of 31, meaning that if you pack
+ an array of ‘Natural’, you get 31-bit close packing, which saves a few
+ bits, but results in far less efficient access.  Since many other Ada
+ compilers will ignore such a packing request, GNAT will generate a
+ warning on some uses of pragma ‘Pack’ that it guesses might not be what
+ is intended.  You can easily remove this warning by using an explicit
+ ‘Component_Size’ setting instead, which never generates a warning, since
+ the intention of the programmer is clear in this case.
+ 
+ GNAT treats packed arrays in one of two ways.  If the size of the array
+ is known at compile time and is at most 64 bits on 32-bit targets, and
+ at most 128 bits on 64-bit targets, then internally the array is
+ represented as a single modular type, of exactly the appropriate number
+ of bits.  If the length is greater than 64 bits on 32-bit targets, and
+ greater than 128 bits on 64-bit targets, or is not known at compile
+ time, then the packed array is represented as an array of bytes, and its
+ length is always a multiple of 8 bits.
+ 
+ Note that to represent a packed array as a modular type, the alignment
+ must be suitable for the modular type involved.  For example, on typical
+ machines a 32-bit packed array will be represented by a 32-bit modular
+ integer with an alignment of four bytes.  If you explicitly override the
+ default alignment with an alignment clause that is too small, the
+ modular representation cannot be used.  For example, consider the
+ following set of declarations:
+ 
+      type R is range 1 .. 3;
+      type S is array (1 .. 31) of R;
+      for S'Component_Size use 2;
+      for S'Size use 62;
+      for S'Alignment use 1;
+ 
+ If the alignment clause were not present, then a 62-bit modular
+ representation would be chosen (typically with an alignment of 4 or 8
+ bytes depending on the target).  But the default alignment is overridden
+ with the explicit alignment clause.  This means that the modular
+ representation cannot be used, and instead the array of bytes
+ representation must be used, meaning that the length must be a multiple
+ of 8.  Thus the above set of declarations will result in a diagnostic
+ rejecting the size clause and noting that the minimum size allowed is
+ 64.
+ 
+ One special case that is worth noting occurs when the base type of the
+ component size is 8/16/32 and the subtype is one bit less.  Notably this
+ occurs with subtype ‘Natural’.  Consider:
+ 
+      type Arr is array (1 .. 32) of Natural;
+      pragma Pack (Arr);
+ 
+ In all commonly used Ada 83 compilers, this pragma Pack would be
+ ignored, since typically ‘Natural'Size’ is 32 in Ada 83, and in any case
+ most Ada 83 compilers did not attempt 31 bit packing.
+ 
+ In Ada 95 and Ada 2005, ‘Natural'Size’ is required to be 31.
+ Furthermore, GNAT really does pack 31-bit subtype to 31 bits.  This may
+ result in a substantial unintended performance penalty when porting
+ legacy Ada 83 code.  To help prevent this, GNAT generates a warning in
+ such cases.  If you really want 31 bit packing in a case like this, you
+ can set the component size explicitly:
+ 
+      type Arr is array (1 .. 32) of Natural;
+      for Arr'Component_Size use 31;
+ 
+ Here 31-bit packing is achieved as required, and no warning is
+ generated, since in this case the programmer intention is clear.
+ 
+ 
+ File: gnat_rm.info,  Node: Pragma Pack for Records,  Next: Record Representation Clauses,  Prev: Pragma Pack for Arrays,  Up: Representation Clauses and Pragmas
+ 
+ 9.11 Pragma Pack for Records
+ ============================
+ 
+ Pragma ‘Pack’ applied to a record will pack the components to reduce
+ wasted space from alignment gaps and by reducing the amount of space
+ taken by components.  We distinguish between ‘packable’ components and
+ ‘non-packable’ components.  Components of the following types are
+ considered packable:
+ 
+    * Components of an elementary type are packable unless they are
+      aliased, independent or atomic.
+ 
+    * Small packed arrays, where the size is statically known, are
+      represented internally as modular integers, and so they are also
+      packable.
+ 
+    * Small simple records, where the size is statically known, are also
+      packable.
+ 
+ For all these cases, if the ‘'Size’ value is in the range 1 through 64
+ on 32-bit targets, and 1 through 128 on 64-bit targets, the components
+ occupy the exact number of bits corresponding to this value and are
+ packed with no padding bits, i.e.  they can start on an arbitrary bit
+ boundary.
+ 
+ All other types are non-packable, they occupy an integral number of
+ storage units and the only effect of pragma ‘Pack’ is to remove
+ alignment gaps.
+ 
+ For example, consider the record
+ 
+      type Rb1 is array (1 .. 13) of Boolean;
+      pragma Pack (Rb1);
+ 
+      type Rb2 is array (1 .. 65) of Boolean;
+      pragma Pack (Rb2);
+ 
+      type AF is new Float with Atomic;
+ 
+      type X2 is record
+         L1 : Boolean;
+         L2 : Duration;
+         L3 : AF;
+         L4 : Boolean;
+         L5 : Rb1;
+         L6 : Rb2;
+      end record;
+      pragma Pack (X2);
+ 
+ The representation for the record ‘X2’ is as follows on 32-bit targets:
+ 
+      for X2'Size use 224;
+      for X2 use record
+         L1 at  0 range  0 .. 0;
+         L2 at  0 range  1 .. 64;
+         L3 at 12 range  0 .. 31;
+         L4 at 16 range  0 .. 0;
+         L5 at 16 range  1 .. 13;
+         L6 at 18 range  0 .. 71;
+      end record;
+ 
+ Studying this example, we see that the packable fields ‘L1’ and ‘L2’ are
+ of length equal to their sizes, and placed at specific bit boundaries
+ (and not byte boundaries) to eliminate padding.  But ‘L3’ is of a
+ non-packable float type (because it is aliased), so it is on the next
+ appropriate alignment boundary.
+ 
+ The next two fields are fully packable, so ‘L4’ and ‘L5’ are minimally
+ packed with no gaps.  However, type ‘Rb2’ is a packed array that is
+ longer than 64 bits, so it is itself non-packable on 32-bit targets.
+ Thus the ‘L6’ field is aligned to the next byte boundary, and takes an
+ integral number of bytes, i.e., 72 bits.
+ 
+ 
+ File: gnat_rm.info,  Node: Record Representation Clauses,  Next: Handling of Records with Holes,  Prev: Pragma Pack for Records,  Up: Representation Clauses and Pragmas
+ 
+ 9.12 Record Representation Clauses
+ ==================================
+ 
+ Record representation clauses may be given for all record types,
+ including types obtained by record extension.  Component clauses are
+ allowed for any static component.  The restrictions on component clauses
+ depend on the type of the component.
+ 
+ For all components of an elementary type, the only restriction on
+ component clauses is that the size must be at least the ‘'Size’ value of
+ the type (actually the Value_Size).  There are no restrictions due to
+ alignment, and such components may freely cross storage boundaries.
+ 
+ Packed arrays with a size up to and including 64 bits on 32-bit targets,
+ and up to and including 128 bits on 64-bit targets, are represented
+ internally using a modular type with the appropriate number of bits, and
+ thus the same lack of restriction applies.  For example, if you declare:
+ 
+      type R is array (1 .. 49) of Boolean;
+      pragma Pack (R);
+      for R'Size use 49;
+ 
+ then a component clause for a component of type ‘R’ may start on any
+ specified bit boundary, and may specify a value of 49 bits or greater.
+ 
+ For packed bit arrays that are longer than 64 bits on 32-bit targets,
+ and longer than 128 bits on 64-bit targets, there are two cases.  If the
+ component size is a power of 2 (1,2,4,8,16,32,64 bits), including the
+ important case of single bits or boolean values, then there are no
+ limitations on placement of such components, and they may start and end
+ at arbitrary bit boundaries.
+ 
+ If the component size is not a power of 2 (e.g., 3 or 5), then an array
+ of this type must always be placed on on a storage unit (byte) boundary
+ and occupy an integral number of storage units (bytes).  Any component
+ clause that does not meet this requirement will be rejected.
+ 
+ Any aliased component, or component of an aliased type, must have its
+ normal alignment and size.  A component clause that does not meet this
+ requirement will be rejected.
+ 
+ The tag field of a tagged type always occupies an address sized field at
+ the start of the record.  No component clause may attempt to overlay
+ this tag.  When a tagged type appears as a component, the tag field must
+ have proper alignment
+ 
+ In the case of a record extension ‘T1’, of a type ‘T’, no component
+ clause applied to the type ‘T1’ can specify a storage location that
+ would overlap the first ‘T'Object_Size’ bits of the record.
+ 
+ For all other component types, including non-bit-packed arrays, the
+ component can be placed at an arbitrary bit boundary, so for example,
+ the following is permitted:
+ 
+      type R is array (1 .. 10) of Boolean;
+      for R'Size use 80;
+ 
+      type Q is record
+         G, H : Boolean;
+         L, M : R;
+      end record;
+ 
+      for Q use record
+         G at 0 range  0 ..   0;
+         H at 0 range  1 ..   1;
+         L at 0 range  2 ..  81;
+         R at 0 range 82 .. 161;
+      end record;
+ 
+ 
+ File: gnat_rm.info,  Node: Handling of Records with Holes,  Next: Enumeration Clauses,  Prev: Record Representation Clauses,  Up: Representation Clauses and Pragmas
+ 
+ 9.13 Handling of Records with Holes
+ ===================================
+ 
+ As a result of alignment considerations, records may contain “holes” or
+ gaps which do not correspond to the data bits of any of the components.
+ Record representation clauses can also result in holes in records.
+ 
+ GNAT does not attempt to clear these holes, so in record objects, they
+ should be considered to hold undefined rubbish.  The generated equality
+ routine just tests components so does not access these undefined bits,
+ and assignment and copy operations may or may not preserve the contents
+ of these holes (for assignments, the holes in the target will in
+ practice contain either the bits that are present in the holes in the
+ source, or the bits that were present in the target before the
+ assignment).
+ 
+ If it is necessary to ensure that holes in records have all zero bits,
+ then record objects for which this initialization is desired should be
+ explicitly set to all zero values using Unchecked_Conversion or address
+ overlays.  For example
+ 
+      type HRec is record
+         C : Character;
+         I : Integer;
+      end record;
+ 
+ On typical machines, integers need to be aligned on a four-byte
+ boundary, resulting in three bytes of undefined rubbish following the
+ 8-bit field for C. To ensure that the hole in a variable of type HRec is
+ set to all zero bits, you could for example do:
+ 
+      type Base is record
+         Dummy1, Dummy2 : Integer := 0;
+      end record;
+ 
+      BaseVar : Base;
+      RealVar : Hrec;
+      for RealVar'Address use BaseVar'Address;
+ 
+ Now the 8-bytes of the value of RealVar start out containing all zero
+ bits.  A safer approach is to just define dummy fields, avoiding the
+ holes, as in:
+ 
+      type HRec is record
+         C      : Character;
+         Dummy1 : Short_Short_Integer := 0;
+         Dummy2 : Short_Short_Integer := 0;
+         Dummy3 : Short_Short_Integer := 0;
+         I      : Integer;
+      end record;
+ 
+ And to make absolutely sure that the intent of this is followed, you can
+ use representation clauses:
+ 
+      for Hrec use record
+         C      at 0 range 0 .. 7;
+         Dummy1 at 1 range 0 .. 7;
+         Dummy2 at 2 range 0 .. 7;
+         Dummy3 at 3 range 0 .. 7;
+         I      at 4 range 0 .. 31;
+      end record;
+      for Hrec'Size use 64;
+ 
+ 
+ File: gnat_rm.info,  Node: Enumeration Clauses,  Next: Address Clauses,  Prev: Handling of Records with Holes,  Up: Representation Clauses and Pragmas
+ 
+ 9.14 Enumeration Clauses
+ ========================
+ 
+ The only restriction on enumeration clauses is that the range of values
+ must be representable.  For the signed case, if one or more of the
+ representation values are negative, all values must be in the range:
+ 
+      System.Min_Int .. System.Max_Int
+ 
+ For the unsigned case, where all values are nonnegative, the values must
+ be in the range:
+ 
+      0 .. System.Max_Binary_Modulus;
+ 
+ A ‘confirming’ representation clause is one in which the values range
+ from 0 in sequence, i.e., a clause that confirms the default
+ representation for an enumeration type.  Such a confirming
+ representation is permitted by these rules, and is specially recognized
+ by the compiler so that no extra overhead results from the use of such a
+ clause.
+ 
+ If an array has an index type which is an enumeration type to which an
+ enumeration clause has been applied, then the array is stored in a
+ compact manner.  Consider the declarations:
+ 
+      type r is (A, B, C);
+      for r use (A => 1, B => 5, C => 10);
+      type t is array (r) of Character;
+ 
+ The array type t corresponds to a vector with exactly three elements and
+ has a default size equal to ‘3*Character'Size’.  This ensures efficient
+ use of space, but means that accesses to elements of the array will
+ incur the overhead of converting representation values to the
+ corresponding positional values, (i.e., the value delivered by the ‘Pos’
+ attribute).
+ 
+ 
+ File: gnat_rm.info,  Node: Address Clauses,  Next: Use of Address Clauses for Memory-Mapped I/O,  Prev: Enumeration Clauses,  Up: Representation Clauses and Pragmas
+ 
+ 9.15 Address Clauses
+ ====================
+ 
+ The reference manual allows a general restriction on representation
+ clauses, as found in RM 13.1(22):
+ 
+      “An implementation need not support representation items containing
+      nonstatic expressions, except that an implementation should support
+      a representation item for a given entity if each nonstatic
+      expression in the representation item is a name that statically
+      denotes a constant declared before the entity.”
+ 
+ In practice this is applicable only to address clauses, since this is
+ the only case in which a nonstatic expression is permitted by the
+ syntax.  As the AARM notes in sections 13.1 (22.a-22.h):
+ 
+      22.a Reason: This is to avoid the following sort of thing:
+ 
+      22.b X : Integer := F(…); Y : Address := G(…); for X’Address use Y;
+ 
+      22.c In the above, we have to evaluate the initialization
+      expression for X before we know where to put the result.  This
+      seems like an unreasonable implementation burden.
+ 
+      22.d The above code should instead be written like this:
+ 
+      22.e Y : constant Address := G(…); X : Integer := F(…); for
+      X’Address use Y;
+ 
+      22.f This allows the expression ‘Y’ to be safely evaluated before X
+      is created.
+ 
+      22.g The constant could be a formal parameter of mode in.
+ 
+      22.h An implementation can support other nonstatic expressions if
+      it wants to.  Expressions of type Address are hardly ever static,
+      but their value might be known at compile time anyway in many
+      cases.
+ 
+ GNAT does indeed permit many additional cases of nonstatic expressions.
+ In particular, if the type involved is elementary there are no
+ restrictions (since in this case, holding a temporary copy of the
+ initialization value, if one is present, is inexpensive).  In addition,
+ if there is no implicit or explicit initialization, then there are no
+ restrictions.  GNAT will reject only the case where all three of these
+ conditions hold:
+ 
+    * The type of the item is non-elementary (e.g., a record or array).
+ 
+    * There is explicit or implicit initialization required for the
+      object.  Note that access values are always implicitly initialized.
+ 
+    * The address value is nonstatic.  Here GNAT is more permissive than
+      the RM, and allows the address value to be the address of a
+      previously declared stand-alone variable, as long as it does not
+      itself have an address clause.
+ 
+           Anchor  : Some_Initialized_Type;
+           Overlay : Some_Initialized_Type;
+           for Overlay'Address use Anchor'Address;
+ 
+      However, the prefix of the address clause cannot be an array
+      component, or a component of a discriminated record.
+ 
+ As noted above in section 22.h, address values are typically nonstatic.
+ In particular the To_Address function, even if applied to a literal
+ value, is a nonstatic function call.  To avoid this minor annoyance,
+ GNAT provides the implementation defined attribute ‘To_Address.  The
+ following two expressions have identical values:
+ 
+      To_Address (16#1234_0000#)
+      System'To_Address (16#1234_0000#);
+ 
+ except that the second form is considered to be a static expression, and
+ thus when used as an address clause value is always permitted.
+ 
+ Additionally, GNAT treats as static an address clause that is an
+ unchecked_conversion of a static integer value.  This simplifies the
+ porting of legacy code, and provides a portable equivalent to the GNAT
+ attribute ‘To_Address’.
+ 
+ Another issue with address clauses is the interaction with alignment
+ requirements.  When an address clause is given for an object, the
+ address value must be consistent with the alignment of the object (which
+ is usually the same as the alignment of the type of the object).  If an
+ address clause is given that specifies an inappropriately aligned
+ address value, then the program execution is erroneous.
+ 
+ Since this source of erroneous behavior can have unfortunate effects on
+ machines with strict alignment requirements, GNAT checks (at compile
+ time if possible, generating a warning, or at execution time with a
+ run-time check) that the alignment is appropriate.  If the run-time
+ check fails, then ‘Program_Error’ is raised.  This run-time check is
+ suppressed if range checks are suppressed, or if the special GNAT check
+ Alignment_Check is suppressed, or if ‘pragma Restrictions
+ (No_Elaboration_Code)’ is in effect.  It is also suppressed by default
+ on non-strict alignment machines (such as the x86).
+ 
+ In some cases, GNAT does not support an address specification (using
+ either form of aspect specification syntax) for the declaration of an
+ object that has an indefinite nominal subtype.  An object declaration
+ has an indefinite nominal subtype if it takes its bounds (for an array
+ type), discriminant values (for a discriminated type whose discriminants
+ lack defaults), or tag (for a class-wide type) from its initial value,
+ as in
+ 
+      X : String := Some_Function_Call;
+      -- String has no constraint, so bounds for X come from function call
+ 
+ This restriction does not apply if the size of the object’s initial
+ value is known at compile time and the type of the object is not
+ class-wide.
+ 
+ An address clause cannot be given for an exported object.  More
+ understandably the real restriction is that objects with an address
+ clause cannot be exported.  This is because such variables are not
+ defined by the Ada program, so there is no external object to export.
+ 
+ It is permissible to give an address clause and a pragma Import for the
+ same object.  In this case, the variable is not really defined by the
+ Ada program, so there is no external symbol to be linked.  The link name
+ and the external name are ignored in this case.  The reason that we
+ allow this combination is that it provides a useful idiom to avoid
+ unwanted initializations on objects with address clauses.
+ 
+ When an address clause is given for an object that has implicit or
+ explicit initialization, then by default initialization takes place.
+ This means that the effect of the object declaration is to overwrite the
+ memory at the specified address.  This is almost always not what the
+ programmer wants, so GNAT will output a warning:
+ 
+      with System;
+      package G is
+         type R is record
+            M : Integer := 0;
+         end record;
+ 
+         Ext : R;
+         for Ext'Address use System'To_Address (16#1234_1234#);
+             |
+      >>> warning: implicit initialization of "Ext" may
+          modify overlaid storage
+      >>> warning: use pragma Import for "Ext" to suppress
+          initialization (RM B(24))
+ 
+      end G;
+ 
+ As indicated by the warning message, the solution is to use a (dummy)
+ pragma Import to suppress this initialization.  The pragma tell the
+ compiler that the object is declared and initialized elsewhere.  The
+ following package compiles without warnings (and the initialization is
+ suppressed):
+ 
+      with System;
+      package G is
+         type R is record
+            M : Integer := 0;
+         end record;
+ 
+         Ext : R;
+         for Ext'Address use System'To_Address (16#1234_1234#);
+         pragma Import (Ada, Ext);
+      end G;
+ 
+ A final issue with address clauses involves their use for overlaying
+ variables, as in the following example:
+ 
+      A : Integer;
+      B : Integer;
+      for B'Address use A'Address;
+ 
+ or alternatively, using the form recommended by the RM:
+ 
+      A    : Integer;
+      Addr : constant Address := A'Address;
+      B    : Integer;
+      for B'Address use Addr;
+ 
+ In both of these cases, ‘A’ and ‘B’ become aliased to one another via
+ the address clause.  This use of address clauses to overlay variables,
+ achieving an effect similar to unchecked conversion was erroneous in Ada
+ 83, but in Ada 95 and Ada 2005 the effect is implementation defined.
+ Furthermore, the Ada RM specifically recommends that in a situation like
+ this, ‘B’ should be subject to the following implementation advice (RM
+ 13.3(19)):
+ 
+      “19 If the Address of an object is specified, or it is imported or
+      exported, then the implementation should not perform optimizations
+      based on assumptions of no aliases.”
+ 
+ GNAT follows this recommendation, and goes further by also applying this
+ recommendation to the overlaid variable (‘A’ in the above example) in
+ this case.  This means that the overlay works “as expected”, in that a
+ modification to one of the variables will affect the value of the other.
+ 
+ More generally, GNAT interprets this recommendation conservatively for
+ address clauses: in the cases other than overlays, it considers that the
+ object is effectively subject to pragma ‘Volatile’ and implements the
+ associated semantics.
+ 
+ Note that when address clause overlays are used in this way, there is an
+ issue of unintentional initialization, as shown by this example:
+ 
+      package Overwrite_Record is
+         type R is record
+            A : Character := 'C';
+            B : Character := 'A';
+         end record;
+         X : Short_Integer := 3;
+         Y : R;
+         for Y'Address use X'Address;
+             |
+      >>> warning: default initialization of "Y" may
+          modify "X", use pragma Import for "Y" to
+          suppress initialization (RM B.1(24))
+ 
+      end Overwrite_Record;
+ 
+ Here the default initialization of ‘Y’ will clobber the value of ‘X’,
+ which justifies the warning.  The warning notes that this effect can be
+ eliminated by adding a ‘pragma Import’ which suppresses the
+ initialization:
+ 
+      package Overwrite_Record is
+         type R is record
+            A : Character := 'C';
+            B : Character := 'A';
+         end record;
+         X : Short_Integer := 3;
+         Y : R;
+         for Y'Address use X'Address;
+         pragma Import (Ada, Y);
+      end Overwrite_Record;
+ 
+ Note that the use of ‘pragma Initialize_Scalars’ may cause variables to
+ be initialized when they would not otherwise have been in the absence of
+ the use of this pragma.  This may cause an overlay to have this
+ unintended clobbering effect.  The compiler avoids this for scalar
+ types, but not for composite objects (where in general the effect of
+ ‘Initialize_Scalars’ is part of the initialization routine for the
+ composite object):
+ 
+      pragma Initialize_Scalars;
+      with Ada.Text_IO;  use Ada.Text_IO;
+      procedure Overwrite_Array is
+         type Arr is array (1 .. 5) of Integer;
+         X : Arr := (others => 1);
+         A : Arr;
+         for A'Address use X'Address;
+             |
+      >>> warning: default initialization of "A" may
+          modify "X", use pragma Import for "A" to
+          suppress initialization (RM B.1(24))
+ 
+      begin
+         if X /= Arr'(others => 1) then
+            Put_Line ("X was clobbered");
+         else
+            Put_Line ("X was not clobbered");
+         end if;
+      end Overwrite_Array;
+ 
+ The above program generates the warning as shown, and at execution time,
+ prints ‘X was clobbered’.  If the ‘pragma Import’ is added as suggested:
+ 
+      pragma Initialize_Scalars;
+      with Ada.Text_IO;  use Ada.Text_IO;
+      procedure Overwrite_Array is
+         type Arr is array (1 .. 5) of Integer;
+         X : Arr := (others => 1);
+         A : Arr;
+         for A'Address use X'Address;
+         pragma Import (Ada, A);
+      begin
+         if X /= Arr'(others => 1) then
+            Put_Line ("X was clobbered");
+         else
+            Put_Line ("X was not clobbered");
+         end if;
+      end Overwrite_Array;
+ 
+ then the program compiles without the warning and when run will generate
+ the output ‘X was not clobbered’.
+ 
+ 
+ File: gnat_rm.info,  Node: Use of Address Clauses for Memory-Mapped I/O,  Next: Effect of Convention on Representation,  Prev: Address Clauses,  Up: Representation Clauses and Pragmas
+ 
+ 9.16 Use of Address Clauses for Memory-Mapped I/O
+ =================================================
+ 
+ A common pattern is to use an address clause to map an atomic variable
+ to a location in memory that corresponds to a memory-mapped I/O
+ operation or operations, for example:
+ 
+      type Mem_Word is record
+         A,B,C,D : Byte;
+      end record;
+      pragma Atomic (Mem_Word);
+      for Mem_Word_Size use 32;
+ 
+      Mem : Mem_Word;
+      for Mem'Address use some-address;
+      ...
+      Temp := Mem;
+      Temp.A := 32;
+      Mem := Temp;
+ 
+ For a full access (reference or modification) of the variable (Mem) in
+ this case, as in the above examples, GNAT guarantees that the entire
+ atomic word will be accessed, in accordance with the RM C.6(15) clause.
+ 
+ A problem arises with a component access such as:
+ 
+      Mem.A := 32;
+ 
+ Note that the component A is not declared as atomic.  This means that it
+ is not clear what this assignment means.  It could correspond to full
+ word read and write as given in the first example, or on architectures
+ that supported such an operation it might be a single byte store
+ instruction.  The RM does not have anything to say in this situation,
+ and GNAT does not make any guarantee.  The code generated may vary from
+ target to target.  GNAT will issue a warning in such a case:
+ 
+      Mem.A := 32;
+      |
+      >>> warning: access to non-atomic component of atomic array,
+          may cause unexpected accesses to atomic object
+ 
+ It is best to be explicit in this situation, by either declaring the
+ components to be atomic if you want the byte store, or explicitly
+ writing the full word access sequence if that is what the hardware
+ requires.  Alternatively, if the full word access sequence is required,
+ GNAT also provides the pragma ‘Volatile_Full_Access’ which can be used
+ in lieu of pragma ‘Atomic’ and will give the additional guarantee.
+ 
+ 
+ File: gnat_rm.info,  Node: Effect of Convention on Representation,  Next: Conventions and Anonymous Access Types,  Prev: Use of Address Clauses for Memory-Mapped I/O,  Up: Representation Clauses and Pragmas
+ 
+ 9.17 Effect of Convention on Representation
+ ===========================================
+ 
+ Normally the specification of a foreign language convention for a type
+ or an object has no effect on the chosen representation.  In particular,
+ the representation chosen for data in GNAT generally meets the standard
+ system conventions, and for example records are laid out in a manner
+ that is consistent with C. This means that specifying convention C (for
+ example) has no effect.
+ 
+ There are four exceptions to this general rule:
+ 
+    * ‘Convention Fortran and array subtypes’.
+ 
+      If pragma Convention Fortran is specified for an array subtype,
+      then in accordance with the implementation advice in section
+      3.6.2(11) of the Ada Reference Manual, the array will be stored in
+      a Fortran-compatible column-major manner, instead of the normal
+      default row-major order.
+ 
+    * ‘Convention C and enumeration types’
+ 
+      GNAT normally stores enumeration types in 8, 16, or 32 bits as
+      required to accommodate all values of the type.  For example, for
+      the enumeration type declared by:
+ 
+           type Color is (Red, Green, Blue);
+ 
+      8 bits is sufficient to store all values of the type, so by
+      default, objects of type ‘Color’ will be represented using 8 bits.
+      However, normal C convention is to use 32 bits for all enum values
+      in C, since enum values are essentially of type int.  If pragma
+      ‘Convention C’ is specified for an Ada enumeration type, then the
+      size is modified as necessary (usually to 32 bits) to be consistent
+      with the C convention for enum values.
+ 
+      Note that this treatment applies only to types.  If Convention C is
+      given for an enumeration object, where the enumeration type is not
+      Convention C, then Object_Size bits are allocated.  For example,
+      for a normal enumeration type, with less than 256 elements, only 8
+      bits will be allocated for the object.  Since this may be a
+      surprise in terms of what C expects, GNAT will issue a warning in
+      this situation.  The warning can be suppressed by giving an
+      explicit size clause specifying the desired size.
+ 
+    * ‘Convention C/Fortran and Boolean types’
+ 
+      In C, the usual convention for boolean values, that is values used
+      for conditions, is that zero represents false, and nonzero values
+      represent true.  In Ada, the normal convention is that two specific
+      values, typically 0/1, are used to represent false/true
+      respectively.
+ 
+      Fortran has a similar convention for ‘LOGICAL’ values (any nonzero
+      value represents true).
+ 
+      To accommodate the Fortran and C conventions, if a pragma
+      Convention specifies C or Fortran convention for a derived Boolean,
+      as in the following example:
+ 
+           type C_Switch is new Boolean;
+           pragma Convention (C, C_Switch);
+ 
+      then the GNAT generated code will treat any nonzero value as true.
+      For truth values generated by GNAT, the conventional value 1 will
+      be used for True, but when one of these values is read, any nonzero
+      value is treated as True.
+ 
+ 
+ File: gnat_rm.info,  Node: Conventions and Anonymous Access Types,  Next: Determining the Representations chosen by GNAT,  Prev: Effect of Convention on Representation,  Up: Representation Clauses and Pragmas
+ 
+ 9.18 Conventions and Anonymous Access Types
+ ===========================================
+ 
+ The RM is not entirely clear on convention handling in a number of
+ cases, and in particular, it is not clear on the convention to be given
+ to anonymous access types in general, and in particular what is to be
+ done for the case of anonymous access-to-subprogram.
+ 
+ In GNAT, we decide that if an explicit Convention is applied to an
+ object or component, and its type is such an anonymous type, then the
+ convention will apply to this anonymous type as well.  This seems to
+ make sense since it is anomolous in any case to have a different
+ convention for an object and its type, and there is clearly no way to
+ explicitly specify a convention for an anonymous type, since it doesn’t
+ have a name to specify!
+ 
+ Furthermore, we decide that if a convention is applied to a record type,
+ then this convention is inherited by any of its components that are of
+ an anonymous access type which do not have an explicitly specified
+ convention.
+ 
+ The following program shows these conventions in action:
+ 
+      package ConvComp is
+         type Foo is range 1 .. 10;
+         type T1 is record
+            A : access function (X : Foo) return Integer;
+            B : Integer;
+         end record;
+         pragma Convention (C, T1);
+ 
+         type T2 is record
+            A : access function (X : Foo) return Integer;
+            pragma Convention  (C, A);
+            B : Integer;
+         end record;
+         pragma Convention (COBOL, T2);
+ 
+         type T3 is record
+            A : access function (X : Foo) return Integer;
+            pragma Convention  (COBOL, A);
+            B : Integer;
+         end record;
+         pragma Convention (C, T3);
+ 
+         type T4 is record
+            A : access function (X : Foo) return Integer;
+            B : Integer;
+         end record;
+         pragma Convention (COBOL, T4);
+ 
+         function F (X : Foo) return Integer;
+         pragma Convention (C, F);
+ 
+         function F (X : Foo) return Integer is (13);
+ 
+         TV1 : T1 := (F'Access, 12);  -- OK
+         TV2 : T2 := (F'Access, 13);  -- OK
+ 
+         TV3 : T3 := (F'Access, 13);  -- ERROR
+                      |
+      >>> subprogram "F" has wrong convention
+      >>> does not match access to subprogram declared at line 17
+           38.    TV4 : T4 := (F'Access, 13);  -- ERROR
+                      |
+      >>> subprogram "F" has wrong convention
+      >>> does not match access to subprogram declared at line 24
+           39. end ConvComp;
+ 
+ 
+ File: gnat_rm.info,  Node: Determining the Representations chosen by GNAT,  Prev: Conventions and Anonymous Access Types,  Up: Representation Clauses and Pragmas
+ 
+ 9.19 Determining the Representations chosen by GNAT
+ ===================================================
+ 
+ Although the descriptions in this section are intended to be complete,
+ it is often easier to simply experiment to see what GNAT accepts and
+ what the effect is on the layout of types and objects.
+ 
+ As required by the Ada RM, if a representation clause is not accepted,
+ then it must be rejected as illegal by the compiler.  However, when a
+ representation clause or pragma is accepted, there can still be
+ questions of what the compiler actually does.  For example, if a partial
+ record representation clause specifies the location of some components
+ and not others, then where are the non-specified components placed?  Or
+ if pragma ‘Pack’ is used on a record, then exactly where are the
+ resulting fields placed?  The section on pragma ‘Pack’ in this chapter
+ can be used to answer the second question, but it is often easier to
+ just see what the compiler does.
+ 
+ For this purpose, GNAT provides the option ‘-gnatR’.  If you compile
+ with this option, then the compiler will output information on the
+ actual representations chosen, in a format similar to source
+ representation clauses.  For example, if we compile the package:
+ 
+      package q is
+         type r (x : boolean) is tagged record
+            case x is
+               when True => S : String (1 .. 100);
+               when False => null;
+            end case;
+         end record;
+ 
+         type r2 is new r (false) with record
+            y2 : integer;
+         end record;
+ 
+         for r2 use record
+            y2 at 16 range 0 .. 31;
+         end record;
+ 
+         type x is record
+            y : character;
+         end record;
+ 
+         type x1 is array (1 .. 10) of x;
+         for x1'component_size use 11;
+ 
+         type ia is access integer;
+ 
+         type Rb1 is array (1 .. 13) of Boolean;
+         pragma Pack (rb1);
+ 
+         type Rb2 is array (1 .. 65) of Boolean;
+         pragma Pack (rb2);
+ 
+         type x2 is record
+            l1 : Boolean;
+            l2 : Duration;
+            l3 : Float;
+            l4 : Boolean;
+            l5 : Rb1;
+            l6 : Rb2;
+         end record;
+         pragma Pack (x2);
+      end q;
+ 
+ using the switch ‘-gnatR’ we obtain the following output:
+ 
+      Representation information for unit q
+      -------------------------------------
+ 
+      for r'Size use ??;
+      for r'Alignment use 4;
+      for r use record
+         x    at 4 range  0 .. 7;
+         _tag at 0 range  0 .. 31;
+         s    at 5 range  0 .. 799;
+      end record;
+ 
+      for r2'Size use 160;
+      for r2'Alignment use 4;
+      for r2 use record
+         x       at  4 range  0 .. 7;
+         _tag    at  0 range  0 .. 31;
+         _parent at  0 range  0 .. 63;
+         y2      at 16 range  0 .. 31;
+      end record;
+ 
+      for x'Size use 8;
+      for x'Alignment use 1;
+      for x use record
+         y at 0 range  0 .. 7;
+      end record;
+ 
+      for x1'Size use 112;
+      for x1'Alignment use 1;
+      for x1'Component_Size use 11;
+ 
+      for rb1'Size use 13;
+      for rb1'Alignment use 2;
+      for rb1'Component_Size use 1;
+ 
+      for rb2'Size use 72;
+      for rb2'Alignment use 1;
+      for rb2'Component_Size use 1;
+ 
+      for x2'Size use 224;
+      for x2'Alignment use 4;
+      for x2 use record
+         l1 at  0 range  0 .. 0;
+         l2 at  0 range  1 .. 64;
+         l3 at 12 range  0 .. 31;
+         l4 at 16 range  0 .. 0;
+         l5 at 16 range  1 .. 13;
+         l6 at 18 range  0 .. 71;
+      end record;
+ 
+ The Size values are actually the Object_Size, i.e., the default size
+ that will be allocated for objects of the type.  The ‘??’ size for type
+ r indicates that we have a variant record, and the actual size of
+ objects will depend on the discriminant value.
+ 
+ The Alignment values show the actual alignment chosen by the compiler
+ for each record or array type.
+ 
+ The record representation clause for type r shows where all fields are
+ placed, including the compiler generated tag field (whose location
+ cannot be controlled by the programmer).
+ 
+ The record representation clause for the type extension r2 shows all the
+ fields present, including the parent field, which is a copy of the
+ fields of the parent type of r2, i.e., r1.
+ 
+ The component size and size clauses for types rb1 and rb2 show the exact
+ effect of pragma ‘Pack’ on these arrays, and the record representation
+ clause for type x2 shows how pragma ‘Pack’ affects this record type.
+ 
+ In some cases, it may be useful to cut and paste the representation
+ clauses generated by the compiler into the original source to fix and
+ guarantee the actual representation to be used.
+ 
+ 
+ File: gnat_rm.info,  Node: Standard Library Routines,  Next: The Implementation of Standard I/O,  Prev: Representation Clauses and Pragmas,  Up: Top
+ 
+ 10 Standard Library Routines
+ ****************************
+ 
+ The Ada Reference Manual contains in Annex A a full description of an
+ extensive set of standard library routines that can be used in any Ada
+ program, and which must be provided by all Ada compilers.  They are
+ analogous to the standard C library used by C programs.
+ 
+ GNAT implements all of the facilities described in annex A, and for most
+ purposes the description in the Ada Reference Manual, or appropriate Ada
+ text book, will be sufficient for making use of these facilities.
+ 
+ In the case of the input-output facilities, *note The Implementation of
+ Standard I/O: f, gives details on exactly how GNAT interfaces to the
+ file system.  For the remaining packages, the Ada Reference Manual
+ should be sufficient.  The following is a list of the packages included,
+ together with a brief description of the functionality that is provided.
+ 
+ For completeness, references are included to other predefined library
+ routines defined in other sections of the Ada Reference Manual (these
+ are cross-indexed from Annex A). For further details see the relevant
+ package declarations in the run-time library.  In particular, a few
+ units are not implemented, as marked by the presence of pragma
+ Unimplemented_Unit, and in this case the package declaration contains
+ comments explaining why the unit is not implemented.
+ 
+ ‘Ada’ ‘(A.2)’
+ 
+      This is a parent package for all the standard library packages.  It
+      is usually included implicitly in your program, and itself contains
+      no useful data or routines.
+ 
+ ‘Ada.Assertions’ ‘(11.4.2)’
+ 
+      ‘Assertions’ provides the ‘Assert’ subprograms, and also the
+      declaration of the ‘Assertion_Error’ exception.
+ 
+ ‘Ada.Asynchronous_Task_Control’ ‘(D.11)’
+ 
+      ‘Asynchronous_Task_Control’ provides low level facilities for task
+      synchronization.  It is typically not implemented.  See package
+      spec for details.
+ 
+ ‘Ada.Calendar’ ‘(9.6)’
+ 
+      ‘Calendar’ provides time of day access, and routines for
+      manipulating times and durations.
+ 
+ ‘Ada.Calendar.Arithmetic’ ‘(9.6.1)’
+ 
+      This package provides additional arithmetic operations for
+      ‘Calendar’.
+ 
+ ‘Ada.Calendar.Formatting’ ‘(9.6.1)’
+ 
+      This package provides formatting operations for ‘Calendar’.
+ 
+ ‘Ada.Calendar.Time_Zones’ ‘(9.6.1)’
+ 
+      This package provides additional ‘Calendar’ facilities for handling
+      time zones.
+ 
+ ‘Ada.Characters’ ‘(A.3.1)’
+ 
+      This is a dummy parent package that contains no useful entities
+ 
+ ‘Ada.Characters.Conversions’ ‘(A.3.2)’
+ 
+      This package provides character conversion functions.
+ 
+ ‘Ada.Characters.Handling’ ‘(A.3.2)’
+ 
+      This package provides some basic character handling capabilities,
+      including classification functions for classes of characters (e.g.,
+      test for letters, or digits).
+ 
+ ‘Ada.Characters.Latin_1’ ‘(A.3.3)’
+ 
+      This package includes a complete set of definitions of the
+      characters that appear in type CHARACTER. It is useful for writing
+      programs that will run in international environments.  For example,
+      if you want an upper case E with an acute accent in a string, it is
+      often better to use the definition of ‘UC_E_Acute’ in this package.
+      Then your program will print in an understandable manner even if
+      your environment does not support these extended characters.
+ 
+ ‘Ada.Command_Line’ ‘(A.15)’
+ 
+      This package provides access to the command line parameters and the
+      name of the current program (analogous to the use of ‘argc’ and
+      ‘argv’ in C), and also allows the exit status for the program to be
+      set in a system-independent manner.
+ 
+ ‘Ada.Complex_Text_IO’ ‘(G.1.3)’
+ 
+      This package provides text input and output of complex numbers.
+ 
+ ‘Ada.Containers’ ‘(A.18.1)’
+ 
+      A top level package providing a few basic definitions used by all
+      the following specific child packages that provide specific kinds
+      of containers.
+ 
+ ‘Ada.Containers.Bounded_Priority_Queues’ ‘(A.18.31)’
+ 
+ ‘Ada.Containers.Bounded_Synchronized_Queues’ ‘(A.18.29)’
+ 
+ ‘Ada.Containers.Doubly_Linked_Lists’ ‘(A.18.3)’
+ 
+ ‘Ada.Containers.Generic_Array_Sort’ ‘(A.18.26)’
+ 
+ ‘Ada.Containers.Generic_Constrained_Array_Sort’ ‘(A.18.26)’
+ 
+ ‘Ada.Containers.Generic_Sort’ ‘(A.18.26)’
+ 
+ ‘Ada.Containers.Hashed_Maps’ ‘(A.18.5)’
+ 
+ ‘Ada.Containers.Hashed_Sets’ ‘(A.18.8)’
+ 
+ ‘Ada.Containers.Indefinite_Doubly_Linked_Lists’ ‘(A.18.12)’
+ 
+ ‘Ada.Containers.Indefinite_Hashed_Maps’ ‘(A.18.13)’
+ 
+ ‘Ada.Containers.Indefinite_Hashed_Sets’ ‘(A.18.15)’
+ 
+ ‘Ada.Containers.Indefinite_Holders’ ‘(A.18.18)’
+ 
+ ‘Ada.Containers.Indefinite_Multiway_Trees’ ‘(A.18.17)’
+ 
+ ‘Ada.Containers.Indefinite_Ordered_Maps’ ‘(A.18.14)’
+ 
+ ‘Ada.Containers.Indefinite_Ordered_Sets’ ‘(A.18.16)’
+ 
+ ‘Ada.Containers.Indefinite_Vectors’ ‘(A.18.11)’
+ 
+ ‘Ada.Containers.Multiway_Trees’ ‘(A.18.10)’
+ 
+ ‘Ada.Containers.Ordered_Maps’ ‘(A.18.6)’
+ 
+ ‘Ada.Containers.Ordered_Sets’ ‘(A.18.9)’
+ 
+ ‘Ada.Containers.Synchronized_Queue_Interfaces’ ‘(A.18.27)’
+ 
+ ‘Ada.Containers.Unbounded_Priority_Queues’ ‘(A.18.30)’
+ 
+ ‘Ada.Containers.Unbounded_Synchronized_Queues’ ‘(A.18.28)’
+ 
+ ‘Ada.Containers.Vectors’ ‘(A.18.2)’
+ 
+ ‘Ada.Directories’ ‘(A.16)’
+ 
+      This package provides operations on directories.
+ 
+ ‘Ada.Directories.Hierarchical_File_Names’ ‘(A.16.1)’
+ 
+      This package provides additional directory operations handling
+      hierarchical file names.
+ 
+ ‘Ada.Directories.Information’ ‘(A.16)’
+ 
+      This is an implementation defined package for additional directory
+      operations, which is not implemented in GNAT.
+ 
+ ‘Ada.Decimal’ ‘(F.2)’
+ 
+      This package provides constants describing the range of decimal
+      numbers implemented, and also a decimal divide routine (analogous
+      to the COBOL verb DIVIDE … GIVING … REMAINDER …)
+ 
+ ‘Ada.Direct_IO’ ‘(A.8.4)’
+ 
+      This package provides input-output using a model of a set of
+      records of fixed-length, containing an arbitrary definite Ada type,
+      indexed by an integer record number.
+ 
+ ‘Ada.Dispatching’ ‘(D.2.1)’
+ 
+      A parent package containing definitions for task dispatching
+      operations.
+ 
+ ‘Ada.Dispatching.EDF’ ‘(D.2.6)’
+ 
+      Not implemented in GNAT.
+ 
+ ‘Ada.Dispatching.Non_Preemptive’ ‘(D.2.4)’
+ 
+      Not implemented in GNAT.
+ 
+ ‘Ada.Dispatching.Round_Robin’ ‘(D.2.5)’
+ 
+      Not implemented in GNAT.
+ 
+ ‘Ada.Dynamic_Priorities’ ‘(D.5)’
+ 
+      This package allows the priorities of a task to be adjusted
+      dynamically as the task is running.
+ 
+ ‘Ada.Environment_Variables’ ‘(A.17)’
+ 
+      This package provides facilities for accessing environment
+      variables.
+ 
+ ‘Ada.Exceptions’ ‘(11.4.1)’
+ 
+      This package provides additional information on exceptions, and
+      also contains facilities for treating exceptions as data objects,
+      and raising exceptions with associated messages.
+ 
+ ‘Ada.Execution_Time’ ‘(D.14)’
+ 
+      This package provides CPU clock functionalities.  It is not
+      implemented on all targets (see package spec for details).
+ 
+ ‘Ada.Execution_Time.Group_Budgets’ ‘(D.14.2)’
+ 
+      Not implemented in GNAT.
+ 
+ ‘Ada.Execution_Time.Timers’ ‘(D.14.1)’’
+ 
+      Not implemented in GNAT.
+ 
+ ‘Ada.Finalization’ ‘(7.6)’
+ 
+      This package contains the declarations and subprograms to support
+      the use of controlled types, providing for automatic initialization
+      and finalization (analogous to the constructors and destructors of
+      C++).
+ 
+ ‘Ada.Float_Text_IO’ ‘(A.10.9)’
+ 
+      A library level instantiation of Text_IO.Float_IO for type Float.
+ 
+ ‘Ada.Float_Wide_Text_IO’ ‘(A.10.9)’
+ 
+      A library level instantiation of Wide_Text_IO.Float_IO for type
+      Float.
+ 
+ ‘Ada.Float_Wide_Wide_Text_IO’ ‘(A.10.9)’
+ 
+      A library level instantiation of Wide_Wide_Text_IO.Float_IO for
+      type Float.
+ 
+ ‘Ada.Integer_Text_IO’ ‘(A.10.9)’
+ 
+      A library level instantiation of Text_IO.Integer_IO for type
+      Integer.
+ 
+ ‘Ada.Integer_Wide_Text_IO’ ‘(A.10.9)’
+ 
+      A library level instantiation of Wide_Text_IO.Integer_IO for type
+      Integer.
+ 
+ ‘Ada.Integer_Wide_Wide_Text_IO’ ‘(A.10.9)’
+ 
+      A library level instantiation of Wide_Wide_Text_IO.Integer_IO for
+      type Integer.
+ 
+ ‘Ada.Interrupts’ ‘(C.3.2)’
+ 
+      This package provides facilities for interfacing to interrupts,
+      which includes the set of signals or conditions that can be raised
+      and recognized as interrupts.
+ 
+ ‘Ada.Interrupts.Names’ ‘(C.3.2)’
+ 
+      This package provides the set of interrupt names (actually signal
+      or condition names) that can be handled by GNAT.
+ 
+ ‘Ada.IO_Exceptions’ ‘(A.13)’
+ 
+      This package defines the set of exceptions that can be raised by
+      use of the standard IO packages.
+ 
+ ‘Ada.Iterator_Interfaces’ ‘(5.5.1)’
+ 
+      This package provides a generic interface to generalized iterators.
+ 
+ ‘Ada.Locales’ ‘(A.19)’
+ 
+      This package provides declarations providing information (Language
+      and Country) about the current locale.
+ 
+ ‘Ada.Numerics’
+ 
+      This package contains some standard constants and exceptions used
+      throughout the numerics packages.  Note that the constants pi and e
+      are defined here, and it is better to use these definitions than
+      rolling your own.
+ 
+ ‘Ada.Numerics.Complex_Arrays’ ‘(G.3.2)’
+ 
+      Provides operations on arrays of complex numbers.
+ 
+ ‘Ada.Numerics.Complex_Elementary_Functions’
+ 
+      Provides the implementation of standard elementary functions (such
+      as log and trigonometric functions) operating on complex numbers
+      using the standard ‘Float’ and the ‘Complex’ and ‘Imaginary’ types
+      created by the package ‘Numerics.Complex_Types’.
+ 
+ ‘Ada.Numerics.Complex_Types’
+ 
+      This is a predefined instantiation of
+      ‘Numerics.Generic_Complex_Types’ using ‘Standard.Float’ to build
+      the type ‘Complex’ and ‘Imaginary’.
+ 
+ ‘Ada.Numerics.Discrete_Random’
+ 
+      This generic package provides a random number generator suitable
+      for generating uniformly distributed values of a specified discrete
+      subtype.
+ 
+ ‘Ada.Numerics.Float_Random’
+ 
+      This package provides a random number generator suitable for
+      generating uniformly distributed floating point values in the unit
+      interval.
+ 
+ ‘Ada.Numerics.Generic_Complex_Elementary_Functions’
+ 
+      This is a generic version of the package that provides the
+      implementation of standard elementary functions (such as log and
+      trigonometric functions) for an arbitrary complex type.
+ 
+      The following predefined instantiations of this package are
+      provided:
+ 
+         * ‘Short_Float’
+ 
+           ‘Ada.Numerics.Short_Complex_Elementary_Functions’
+ 
+         * ‘Float’
+ 
+           ‘Ada.Numerics.Complex_Elementary_Functions’
+ 
+         * ‘Long_Float’
+ 
+           ‘Ada.Numerics.Long_Complex_Elementary_Functions’
+ 
+ ‘Ada.Numerics.Generic_Complex_Types’
+ 
+      This is a generic package that allows the creation of complex
+      types, with associated complex arithmetic operations.
+ 
+      The following predefined instantiations of this package exist
+ 
+         * ‘Short_Float’
+ 
+           ‘Ada.Numerics.Short_Complex_Complex_Types’
+ 
+         * ‘Float’
+ 
+           ‘Ada.Numerics.Complex_Complex_Types’
+ 
+         * ‘Long_Float’
+ 
+           ‘Ada.Numerics.Long_Complex_Complex_Types’
+ 
+ ‘Ada.Numerics.Generic_Elementary_Functions’
+ 
+      This is a generic package that provides the implementation of
+      standard elementary functions (such as log an trigonometric
+      functions) for an arbitrary float type.
+ 
+      The following predefined instantiations of this package exist
+ 
+         * ‘Short_Float’
+ 
+           ‘Ada.Numerics.Short_Elementary_Functions’
+ 
+         * ‘Float’
+ 
+           ‘Ada.Numerics.Elementary_Functions’
+ 
+         * ‘Long_Float’
+ 
+           ‘Ada.Numerics.Long_Elementary_Functions’
+ 
+ ‘Ada.Numerics.Generic_Real_Arrays’ ‘(G.3.1)’
+ 
+      Generic operations on arrays of reals
+ 
+ ‘Ada.Numerics.Real_Arrays’ ‘(G.3.1)’
+ 
+      Preinstantiation of Ada.Numerics.Generic_Real_Arrays (Float).
+ 
+ ‘Ada.Real_Time’ ‘(D.8)’
+ 
+      This package provides facilities similar to those of ‘Calendar’,
+      but operating with a finer clock suitable for real time control.
+      Note that annex D requires that there be no backward clock jumps,
+      and GNAT generally guarantees this behavior, but of course if the
+      external clock on which the GNAT runtime depends is deliberately
+      reset by some external event, then such a backward jump may occur.
+ 
+ ‘Ada.Real_Time.Timing_Events’ ‘(D.15)’
+ 
+      Not implemented in GNAT.
+ 
+ ‘Ada.Sequential_IO’ ‘(A.8.1)’
+ 
+      This package provides input-output facilities for sequential files,
+      which can contain a sequence of values of a single type, which can
+      be any Ada type, including indefinite (unconstrained) types.
+ 
+ ‘Ada.Storage_IO’ ‘(A.9)’
+ 
+      This package provides a facility for mapping arbitrary Ada types to
+      and from a storage buffer.  It is primarily intended for the
+      creation of new IO packages.
+ 
+ ‘Ada.Streams’ ‘(13.13.1)’
+ 
+      This is a generic package that provides the basic support for the
+      concept of streams as used by the stream attributes (‘Input’,
+      ‘Output’, ‘Read’ and ‘Write’).
+ 
+ ‘Ada.Streams.Stream_IO’ ‘(A.12.1)’
+ 
+      This package is a specialization of the type ‘Streams’ defined in
+      package ‘Streams’ together with a set of operations providing
+      Stream_IO capability.  The Stream_IO model permits both random and
+      sequential access to a file which can contain an arbitrary set of
+      values of one or more Ada types.
+ 
+ ‘Ada.Strings’ ‘(A.4.1)’
+ 
+      This package provides some basic constants used by the string
+      handling packages.
+ 
+ ‘Ada.Strings.Bounded’ ‘(A.4.4)’
+ 
+      This package provides facilities for handling variable length
+      strings.  The bounded model requires a maximum length.  It is thus
+      somewhat more limited than the unbounded model, but avoids the use
+      of dynamic allocation or finalization.
+ 
+ ‘Ada.Strings.Bounded.Equal_Case_Insensitive’ ‘(A.4.10)’
+ 
+      Provides case-insensitive comparisons of bounded strings
+ 
+ ‘Ada.Strings.Bounded.Hash’ ‘(A.4.9)’
+ 
+      This package provides a generic hash function for bounded strings
+ 
+ ‘Ada.Strings.Bounded.Hash_Case_Insensitive’ ‘(A.4.9)’
+ 
+      This package provides a generic hash function for bounded strings
+      that converts the string to be hashed to lower case.
+ 
+ ‘Ada.Strings.Bounded.Less_Case_Insensitive’ ‘(A.4.10)’
+ 
+      This package provides a comparison function for bounded strings
+      that works in a case insensitive manner by converting to lower case
+      before the comparison.
+ 
+ ‘Ada.Strings.Fixed’ ‘(A.4.3)’
+ 
+      This package provides facilities for handling fixed length strings.
+ 
+ ‘Ada.Strings.Fixed.Equal_Case_Insensitive’ ‘(A.4.10)’
+ 
+      This package provides an equality function for fixed strings that
+      compares the strings after converting both to lower case.
+ 
+ ‘Ada.Strings.Fixed.Hash_Case_Insensitive’ ‘(A.4.9)’
+ 
+      This package provides a case insensitive hash function for fixed
+      strings that converts the string to lower case before computing the
+      hash.
+ 
+ ‘Ada.Strings.Fixed.Less_Case_Insensitive’ ‘(A.4.10)’
+ 
+      This package provides a comparison function for fixed strings that
+      works in a case insensitive manner by converting to lower case
+      before the comparison.
+ 
+ ‘Ada.Strings.Hash’ ‘(A.4.9)’
+ 
+      This package provides a hash function for strings.
+ 
+ ‘Ada.Strings.Hash_Case_Insensitive’ ‘(A.4.9)’
+ 
+      This package provides a hash function for strings that is case
+      insensitive.  The string is converted to lower case before
+      computing the hash.
+ 
+ ‘Ada.Strings.Less_Case_Insensitive’ ‘(A.4.10)’
+ 
+      This package provides a comparison function for\strings that works
+      in a case insensitive manner by converting to lower case before the
+      comparison.
+ 
+ ‘Ada.Strings.Maps’ ‘(A.4.2)’
+ 
+      This package provides facilities for handling character mappings
+      and arbitrarily defined subsets of characters.  For instance it is
+      useful in defining specialized translation tables.
+ 
+ ‘Ada.Strings.Maps.Constants’ ‘(A.4.6)’
+ 
+      This package provides a standard set of predefined mappings and
+      predefined character sets.  For example, the standard upper to
+      lower case conversion table is found in this package.  Note that
+      upper to lower case conversion is non-trivial if you want to take
+      the entire set of characters, including extended characters like E
+      with an acute accent, into account.  You should use the mappings in
+      this package (rather than adding 32 yourself) to do case mappings.
+ 
+ ‘Ada.Strings.Unbounded’ ‘(A.4.5)’
+ 
+      This package provides facilities for handling variable length
+      strings.  The unbounded model allows arbitrary length strings, but
+      requires the use of dynamic allocation and finalization.
+ 
+ ‘Ada.Strings.Unbounded.Equal_Case_Insensitive’ ‘(A.4.10)’
+ 
+      Provides case-insensitive comparisons of unbounded strings
+ 
+ ‘Ada.Strings.Unbounded.Hash’ ‘(A.4.9)’
+ 
+      This package provides a generic hash function for unbounded strings
+ 
+ ‘Ada.Strings.Unbounded.Hash_Case_Insensitive’ ‘(A.4.9)’
+ 
+      This package provides a generic hash function for unbounded strings
+      that converts the string to be hashed to lower case.
+ 
+ ‘Ada.Strings.Unbounded.Less_Case_Insensitive’ ‘(A.4.10)’
+ 
+      This package provides a comparison function for unbounded strings
+      that works in a case insensitive manner by converting to lower case
+      before the comparison.
+ 
+ ‘Ada.Strings.UTF_Encoding’ ‘(A.4.11)’
+ 
+      This package provides basic definitions for dealing with
+      UTF-encoded strings.
+ 
+ ‘Ada.Strings.UTF_Encoding.Conversions’ ‘(A.4.11)’
+ 
+      This package provides conversion functions for UTF-encoded strings.
+ 
+ ‘Ada.Strings.UTF_Encoding.Strings’ ‘(A.4.11)’
+ 
+ ‘Ada.Strings.UTF_Encoding.Wide_Strings’ ‘(A.4.11)’
+ 
+ ‘Ada.Strings.UTF_Encoding.Wide_Wide_Strings’ ‘(A.4.11)’
+ 
+      These packages provide facilities for handling UTF encodings for
+      Strings, Wide_Strings and Wide_Wide_Strings.
+ 
+ ‘Ada.Strings.Wide_Bounded’ ‘(A.4.7)’
+ 
+ ‘Ada.Strings.Wide_Fixed’ ‘(A.4.7)’
+ 
+ ‘Ada.Strings.Wide_Maps’ ‘(A.4.7)’
+ 
+ ‘Ada.Strings.Wide_Unbounded’ ‘(A.4.7)’
+ 
+      These packages provide analogous capabilities to the corresponding
+      packages without ‘Wide_’ in the name, but operate with the types
+      ‘Wide_String’ and ‘Wide_Character’ instead of ‘String’ and
+      ‘Character’.  Versions of all the child packages are available.
+ 
+ ‘Ada.Strings.Wide_Wide_Bounded’ ‘(A.4.7)’
+ 
+ ‘Ada.Strings.Wide_Wide_Fixed’ ‘(A.4.7)’
+ 
+ ‘Ada.Strings.Wide_Wide_Maps’ ‘(A.4.7)’
+ 
+ ‘Ada.Strings.Wide_Wide_Unbounded’ ‘(A.4.7)’
+ 
+      These packages provide analogous capabilities to the corresponding
+      packages without ‘Wide_’ in the name, but operate with the types
+      ‘Wide_Wide_String’ and ‘Wide_Wide_Character’ instead of ‘String’
+      and ‘Character’.
+ 
+ ‘Ada.Synchronous_Barriers’ ‘(D.10.1)’
+ 
+      This package provides facilities for synchronizing tasks at a low
+      level with barriers.
+ 
+ ‘Ada.Synchronous_Task_Control’ ‘(D.10)’
+ 
+      This package provides some standard facilities for controlling task
+      communication in a synchronous manner.
+ 
+ ‘Ada.Synchronous_Task_Control.EDF’ ‘(D.10)’
+ 
+      Not implemented in GNAT.
+ 
+ ‘Ada.Tags’
+ 
+      This package contains definitions for manipulation of the tags of
+      tagged values.
+ 
+ ‘Ada.Tags.Generic_Dispatching_Constructor’ ‘(3.9)’
+ 
+      This package provides a way of constructing tagged class-wide
+      values given only the tag value.
+ 
+ ‘Ada.Task_Attributes’ ‘(C.7.2)’
+ 
+      This package provides the capability of associating arbitrary
+      task-specific data with separate tasks.
+ 
+ ‘Ada.Task_Identification’ ‘(C.7.1)’
+ 
+      This package provides capabilities for task identification.
+ 
+ ‘Ada.Task_Termination’ ‘(C.7.3)’
+ 
+      This package provides control over task termination.
+ 
+ ‘Ada.Text_IO’
+ 
+      This package provides basic text input-output capabilities for
+      character, string and numeric data.  The subpackages of this
+      package are listed next.  Note that although these are defined as
+      subpackages in the RM, they are actually transparently implemented
+      as child packages in GNAT, meaning that they are only loaded if
+      needed.
+ 
+ ‘Ada.Text_IO.Decimal_IO’
+ 
+      Provides input-output facilities for decimal fixed-point types
+ 
+ ‘Ada.Text_IO.Enumeration_IO’
+ 
+      Provides input-output facilities for enumeration types.
+ 
+ ‘Ada.Text_IO.Fixed_IO’
+ 
+      Provides input-output facilities for ordinary fixed-point types.
+ 
+ ‘Ada.Text_IO.Float_IO’
+ 
+      Provides input-output facilities for float types.  The following
+      predefined instantiations of this generic package are available:
+ 
+         * ‘Short_Float’
+ 
+           ‘Short_Float_Text_IO’
+ 
+         * ‘Float’
+ 
+           ‘Float_Text_IO’
+ 
+         * ‘Long_Float’
+ 
+           ‘Long_Float_Text_IO’
+ 
+ ‘Ada.Text_IO.Integer_IO’
+ 
+      Provides input-output facilities for integer types.  The following
+      predefined instantiations of this generic package are available:
+ 
+         * ‘Short_Short_Integer’
+ 
+           ‘Ada.Short_Short_Integer_Text_IO’
+ 
+         * ‘Short_Integer’
+ 
+           ‘Ada.Short_Integer_Text_IO’
+ 
+         * ‘Integer’
+ 
+           ‘Ada.Integer_Text_IO’
+ 
+         * ‘Long_Integer’
+ 
+           ‘Ada.Long_Integer_Text_IO’
+ 
+         * ‘Long_Long_Integer’
+ 
+           ‘Ada.Long_Long_Integer_Text_IO’
+ 
+ ‘Ada.Text_IO.Modular_IO’
+ 
+      Provides input-output facilities for modular (unsigned) types.
+ 
+ ‘Ada.Text_IO.Bounded_IO (A.10.11)’
+ 
+      Provides input-output facilities for bounded strings.
+ 
+ ‘Ada.Text_IO.Complex_IO (G.1.3)’
+ 
+      This package provides basic text input-output capabilities for
+      complex data.
+ 
+ ‘Ada.Text_IO.Editing (F.3.3)’
+ 
+      This package contains routines for edited output, analogous to the
+      use of pictures in COBOL. The picture formats used by this package
+      are a close copy of the facility in COBOL.
+ 
+ ‘Ada.Text_IO.Text_Streams (A.12.2)’
+ 
+      This package provides a facility that allows Text_IO files to be
+      treated as streams, so that the stream attributes can be used for
+      writing arbitrary data, including binary data, to Text_IO files.
+ 
+ ‘Ada.Text_IO.Unbounded_IO (A.10.12)’
+ 
+      This package provides input-output facilities for unbounded
+      strings.
+ 
+ ‘Ada.Unchecked_Conversion (13.9)’
+ 
+      This generic package allows arbitrary conversion from one type to
+      another of the same size, providing for breaking the type safety in
+      special circumstances.
+ 
+      If the types have the same Size (more accurately the same
+      Value_Size), then the effect is simply to transfer the bits from
+      the source to the target type without any modification.  This usage
+      is well defined, and for simple types whose representation is
+      typically the same across all implementations, gives a portable
+      method of performing such conversions.
+ 
+      If the types do not have the same size, then the result is
+      implementation defined, and thus may be non-portable.  The
+      following describes how GNAT handles such unchecked conversion
+      cases.
+ 
+      If the types are of different sizes, and are both discrete types,
+      then the effect is of a normal type conversion without any
+      constraint checking.  In particular if the result type has a larger
+      size, the result will be zero or sign extended.  If the result type
+      has a smaller size, the result will be truncated by ignoring high
+      order bits.
+ 
+      If the types are of different sizes, and are not both discrete
+      types, then the conversion works as though pointers were created to
+      the source and target, and the pointer value is converted.  The
+      effect is that bits are copied from successive low order storage
+      units and bits of the source up to the length of the target type.
+ 
+      A warning is issued if the lengths differ, since the effect in this
+      case is implementation dependent, and the above behavior may not
+      match that of some other compiler.
+ 
+      A pointer to one type may be converted to a pointer to another type
+      using unchecked conversion.  The only case in which the effect is
+      undefined is when one or both pointers are pointers to
+      unconstrained array types.  In this case, the bounds information
+      may get incorrectly transferred, and in particular, GNAT uses
+      double size pointers for such types, and it is meaningless to
+      convert between such pointer types.  GNAT will issue a warning if
+      the alignment of the target designated type is more strict than the
+      alignment of the source designated type (since the result may be
+      unaligned in this case).
+ 
+      A pointer other than a pointer to an unconstrained array type may
+      be converted to and from System.Address.  Such usage is common in
+      Ada 83 programs, but note that Ada.Address_To_Access_Conversions is
+      the preferred method of performing such conversions in Ada 95 and
+      Ada 2005.  Neither unchecked conversion nor
+      Ada.Address_To_Access_Conversions should be used in conjunction
+      with pointers to unconstrained objects, since the bounds
+      information cannot be handled correctly in this case.
+ 
+ ‘Ada.Unchecked_Deallocation’ ‘(13.11.2)’
+ 
+      This generic package allows explicit freeing of storage previously
+      allocated by use of an allocator.
+ 
+ ‘Ada.Wide_Text_IO’ ‘(A.11)’
+ 
+      This package is similar to ‘Ada.Text_IO’, except that the external
+      file supports wide character representations, and the internal
+      types are ‘Wide_Character’ and ‘Wide_String’ instead of ‘Character’
+      and ‘String’.  The corresponding set of nested packages and child
+      packages are defined.
+ 
+ ‘Ada.Wide_Wide_Text_IO’ ‘(A.11)’
+ 
+      This package is similar to ‘Ada.Text_IO’, except that the external
+      file supports wide character representations, and the internal
+      types are ‘Wide_Character’ and ‘Wide_String’ instead of ‘Character’
+      and ‘String’.  The corresponding set of nested packages and child
+      packages are defined.
+ 
+ For packages in Interfaces and System, all the RM defined packages are
+ available in GNAT, see the Ada 2012 RM for full details.
+ 
+ 
+ File: gnat_rm.info,  Node: The Implementation of Standard I/O,  Next: The GNAT Library,  Prev: Standard Library Routines,  Up: Top
+ 
+ 11 The Implementation of Standard I/O
+ *************************************
+ 
+ GNAT implements all the required input-output facilities described in
+ A.6 through A.14.  These sections of the Ada Reference Manual describe
+ the required behavior of these packages from the Ada point of view, and
+ if you are writing a portable Ada program that does not need to know the
+ exact manner in which Ada maps to the outside world when it comes to
+ reading or writing external files, then you do not need to read this
+ chapter.  As long as your files are all regular files (not pipes or
+ devices), and as long as you write and read the files only from Ada, the
+ description in the Ada Reference Manual is sufficient.
+ 
+ However, if you want to do input-output to pipes or other devices, such
+ as the keyboard or screen, or if the files you are dealing with are
+ either generated by some other language, or to be read by some other
+ language, then you need to know more about the details of how the GNAT
+ implementation of these input-output facilities behaves.
+ 
+ In this chapter we give a detailed description of exactly how GNAT
+ interfaces to the file system.  As always, the sources of the system are
+ available to you for answering questions at an even more detailed level,
+ but for most purposes the information in this chapter will suffice.
+ 
+ Another reason that you may need to know more about how input-output is
+ implemented arises when you have a program written in mixed languages
+ where, for example, files are shared between the C and Ada sections of
+ the same program.  GNAT provides some additional facilities, in the form
+ of additional child library packages, that facilitate this sharing, and
+ these additional facilities are also described in this chapter.
+ 
+ * Menu:
+ 
+ * Standard I/O Packages::
+ * FORM Strings::
+ * Direct_IO::
+ * Sequential_IO::
+ * Text_IO::
+ * Wide_Text_IO::
+ * Wide_Wide_Text_IO::
+ * Stream_IO::
+ * Text Translation::
+ * Shared Files::
+ * Filenames encoding::
+ * File content encoding::
+ * Open Modes::
+ * Operations on C Streams::
+ * Interfacing to C Streams::
+ 
+ 
+ File: gnat_rm.info,  Node: Standard I/O Packages,  Next: FORM Strings,  Up: The Implementation of Standard I/O
+ 
+ 11.1 Standard I/O Packages
+ ==========================
+ 
+ The Standard I/O packages described in Annex A for
+ 
+    * Ada.Text_IO
+ 
+    * Ada.Text_IO.Complex_IO
+ 
+    * Ada.Text_IO.Text_Streams
+ 
+    * Ada.Wide_Text_IO
+ 
+    * Ada.Wide_Text_IO.Complex_IO
+ 
+    * Ada.Wide_Text_IO.Text_Streams
+ 
+    * Ada.Wide_Wide_Text_IO
+ 
+    * Ada.Wide_Wide_Text_IO.Complex_IO
+ 
+    * Ada.Wide_Wide_Text_IO.Text_Streams
+ 
+    * Ada.Stream_IO
+ 
+    * Ada.Sequential_IO
+ 
+    * Ada.Direct_IO
+ 
+ are implemented using the C library streams facility; where
+ 
+    * All files are opened using ‘fopen’.
+ 
+    * All input/output operations use ‘fread’/‘fwrite’.
+ 
+ There is no internal buffering of any kind at the Ada library level.
+ The only buffering is that provided at the system level in the
+ implementation of the library routines that support streams.  This
+ facilitates shared use of these streams by mixed language programs.
+ Note though that system level buffering is explicitly enabled at
+ elaboration of the standard I/O packages and that can have an impact on
+ mixed language programs, in particular those using I/O before calling
+ the Ada elaboration routine (e.g., adainit).  It is recommended to call
+ the Ada elaboration routine before performing any I/O or when
+ impractical, flush the common I/O streams and in particular
+ Standard_Output before elaborating the Ada code.
+ 
+ 
+ File: gnat_rm.info,  Node: FORM Strings,  Next: Direct_IO,  Prev: Standard I/O Packages,  Up: The Implementation of Standard I/O
+ 
+ 11.2 FORM Strings
+ =================
+ 
+ The format of a FORM string in GNAT is:
+ 
+      "keyword=value,keyword=value,...,keyword=value"
+ 
+ where letters may be in upper or lower case, and there are no spaces
+ between values.  The order of the entries is not important.  Currently
+ the following keywords defined.
+ 
+      TEXT_TRANSLATION=[YES|NO|TEXT|BINARY|U8TEXT|WTEXT|U16TEXT]
+      SHARED=[YES|NO]
+      WCEM=[n|h|u|s|e|8|b]
+      ENCODING=[UTF8|8BITS]
+ 
+ The use of these parameters is described later in this section.  If an
+ unrecognized keyword appears in a form string, it is silently ignored
+ and not considered invalid.
+ 
+ 
+ File: gnat_rm.info,  Node: Direct_IO,  Next: Sequential_IO,  Prev: FORM Strings,  Up: The Implementation of Standard I/O
+ 
+ 11.3 Direct_IO
+ ==============
+ 
+ Direct_IO can only be instantiated for definite types.  This is a
+ restriction of the Ada language, which means that the records are fixed
+ length (the length being determined by ‘type'Size’, rounded up to the
+ next storage unit boundary if necessary).
+ 
+ The records of a Direct_IO file are simply written to the file in index
+ sequence, with the first record starting at offset zero, and subsequent
+ records following.  There is no control information of any kind.  For
+ example, if 32-bit integers are being written, each record takes
+ 4-bytes, so the record at index ‘K’ starts at offset (‘K’-1)*4.
+ 
+ There is no limit on the size of Direct_IO files, they are expanded as
+ necessary to accommodate whatever records are written to the file.
+ 
+ 
+ File: gnat_rm.info,  Node: Sequential_IO,  Next: Text_IO,  Prev: Direct_IO,  Up: The Implementation of Standard I/O
+ 
+ 11.4 Sequential_IO
+ ==================
+ 
+ Sequential_IO may be instantiated with either a definite (constrained)
+ or indefinite (unconstrained) type.
+ 
+ For the definite type case, the elements written to the file are simply
+ the memory images of the data values with no control information of any
+ kind.  The resulting file should be read using the same type, no
+ validity checking is performed on input.
+ 
+ For the indefinite type case, the elements written consist of two parts.
+ First is the size of the data item, written as the memory image of a
+ ‘Interfaces.C.size_t’ value, followed by the memory image of the data
+ value.  The resulting file can only be read using the same
+ (unconstrained) type.  Normal assignment checks are performed on these
+ read operations, and if these checks fail, ‘Data_Error’ is raised.  In
+ particular, in the array case, the lengths must match, and in the
+ variant record case, if the variable for a particular read operation is
+ constrained, the discriminants must match.
+ 
+ Note that it is not possible to use Sequential_IO to write variable
+ length array items, and then read the data back into different length
+ arrays.  For example, the following will raise ‘Data_Error’:
+ 
+      package IO is new Sequential_IO (String);
+      F : IO.File_Type;
+      S : String (1..4);
+      ...
+      IO.Create (F)
+      IO.Write (F, "hello!")
+      IO.Reset (F, Mode=>In_File);
+      IO.Read (F, S);
+      Put_Line (S);
+ 
+ On some Ada implementations, this will print ‘hell’, but the program is
+ clearly incorrect, since there is only one element in the file, and that
+ element is the string ‘hello!’.
+ 
+ In Ada 95 and Ada 2005, this kind of behavior can be legitimately
+ achieved using Stream_IO, and this is the preferred mechanism.  In
+ particular, the above program fragment rewritten to use Stream_IO will
+ work correctly.
+ 
+ 
+ File: gnat_rm.info,  Node: Text_IO,  Next: Wide_Text_IO,  Prev: Sequential_IO,  Up: The Implementation of Standard I/O
+ 
+ 11.5 Text_IO
+ ============
+ 
+ Text_IO files consist of a stream of characters containing the following
+ special control characters:
+ 
+      LF (line feed, 16#0A#) Line Mark
+      FF (form feed, 16#0C#) Page Mark
+ 
+ A canonical Text_IO file is defined as one in which the following
+ conditions are met:
+ 
+    * The character ‘LF’ is used only as a line mark, i.e., to mark the
+      end of the line.
+ 
+    * The character ‘FF’ is used only as a page mark, i.e., to mark the
+      end of a page and consequently can appear only immediately
+      following a ‘LF’ (line mark) character.
+ 
+    * The file ends with either ‘LF’ (line mark) or ‘LF’-‘FF’ (line mark,
+      page mark).  In the former case, the page mark is implicitly
+      assumed to be present.
+ 
+ A file written using Text_IO will be in canonical form provided that no
+ explicit ‘LF’ or ‘FF’ characters are written using ‘Put’ or ‘Put_Line’.
+ There will be no ‘FF’ character at the end of the file unless an
+ explicit ‘New_Page’ operation was performed before closing the file.
+ 
+ A canonical Text_IO file that is a regular file (i.e., not a device or a
+ pipe) can be read using any of the routines in Text_IO. The semantics in
+ this case will be exactly as defined in the Ada Reference Manual, and
+ all the routines in Text_IO are fully implemented.
+ 
+ A text file that does not meet the requirements for a canonical Text_IO
+ file has one of the following:
+ 
+    * The file contains ‘FF’ characters not immediately following a ‘LF’
+      character.
+ 
+    * The file contains ‘LF’ or ‘FF’ characters written by ‘Put’ or
+      ‘Put_Line’, which are not logically considered to be line marks or
+      page marks.
+ 
+    * The file ends in a character other than ‘LF’ or ‘FF’, i.e., there
+      is no explicit line mark or page mark at the end of the file.
+ 
+ Text_IO can be used to read such non-standard text files but subprograms
+ to do with line or page numbers do not have defined meanings.  In
+ particular, a ‘FF’ character that does not follow a ‘LF’ character may
+ or may not be treated as a page mark from the point of view of page and
+ line numbering.  Every ‘LF’ character is considered to end a line, and
+ there is an implied ‘LF’ character at the end of the file.
+ 
+ * Menu:
+ 
+ * Stream Pointer Positioning::
+ * Reading and Writing Non-Regular Files::
+ * Get_Immediate::
+ * Treating Text_IO Files as Streams::
+ * Text_IO Extensions::
+ * Text_IO Facilities for Unbounded Strings::
+ 
+ 
+ File: gnat_rm.info,  Node: Stream Pointer Positioning,  Next: Reading and Writing Non-Regular Files,  Up: Text_IO
+ 
+ 11.5.1 Stream Pointer Positioning
+ ---------------------------------
+ 
+ ‘Ada.Text_IO’ has a definition of current position for a file that is
+ being read.  No internal buffering occurs in Text_IO, and usually the
+ physical position in the stream used to implement the file corresponds
+ to this logical position defined by Text_IO. There are two exceptions:
+ 
+    * After a call to ‘End_Of_Page’ that returns ‘True’, the stream is
+      positioned past the ‘LF’ (line mark) that precedes the page mark.
+      Text_IO maintains an internal flag so that subsequent read
+      operations properly handle the logical position which is unchanged
+      by the ‘End_Of_Page’ call.
+ 
+    * After a call to ‘End_Of_File’ that returns ‘True’, if the Text_IO
+      file was positioned before the line mark at the end of file before
+      the call, then the logical position is unchanged, but the stream is
+      physically positioned right at the end of file (past the line mark,
+      and past a possible page mark following the line mark.  Again
+      Text_IO maintains internal flags so that subsequent read operations
+      properly handle the logical position.
+ 
+ These discrepancies have no effect on the observable behavior of
+ Text_IO, but if a single Ada stream is shared between a C program and
+ Ada program, or shared (using ‘shared=yes’ in the form string) between
+ two Ada files, then the difference may be observable in some situations.
+ 
+ 
+ File: gnat_rm.info,  Node: Reading and Writing Non-Regular Files,  Next: Get_Immediate,  Prev: Stream Pointer Positioning,  Up: Text_IO
+ 
+ 11.5.2 Reading and Writing Non-Regular Files
+ --------------------------------------------
+ 
+ A non-regular file is a device (such as a keyboard), or a pipe.  Text_IO
+ can be used for reading and writing.  Writing is not affected and the
+ sequence of characters output is identical to the normal file case, but
+ for reading, the behavior of Text_IO is modified to avoid undesirable
+ look-ahead as follows:
+ 
+ An input file that is not a regular file is considered to have no page
+ marks.  Any ‘Ascii.FF’ characters (the character normally used for a
+ page mark) appearing in the file are considered to be data characters.
+ In particular:
+ 
+    * ‘Get_Line’ and ‘Skip_Line’ do not test for a page mark following a
+      line mark.  If a page mark appears, it will be treated as a data
+      character.
+ 
+    * This avoids the need to wait for an extra character to be typed or
+      entered from the pipe to complete one of these operations.
+ 
+    * ‘End_Of_Page’ always returns ‘False’
+ 
+    * ‘End_Of_File’ will return ‘False’ if there is a page mark at the
+      end of the file.
+ 
+ Output to non-regular files is the same as for regular files.  Page
+ marks may be written to non-regular files using ‘New_Page’, but as noted
+ above they will not be treated as page marks on input if the output is
+ piped to another Ada program.
+ 
+ Another important discrepancy when reading non-regular files is that the
+ end of file indication is not ‘sticky’.  If an end of file is entered,
+ e.g., by pressing the ‘EOT’ key, then end of file is signaled once
+ (i.e., the test ‘End_Of_File’ will yield ‘True’, or a read will raise
+ ‘End_Error’), but then reading can resume to read data past that end of
+ file indication, until another end of file indication is entered.
+ 
+ 
+ File: gnat_rm.info,  Node: Get_Immediate,  Next: Treating Text_IO Files as Streams,  Prev: Reading and Writing Non-Regular Files,  Up: Text_IO
+ 
+ 11.5.3 Get_Immediate
+ --------------------
+ 
+ Get_Immediate returns the next character (including control characters)
+ from the input file.  In particular, Get_Immediate will return LF or FF
+ characters used as line marks or page marks.  Such operations leave the
+ file positioned past the control character, and it is thus not treated
+ as having its normal function.  This means that page, line and column
+ counts after this kind of Get_Immediate call are set as though the mark
+ did not occur.  In the case where a Get_Immediate leaves the file
+ positioned between the line mark and page mark (which is not normally
+ possible), it is undefined whether the FF character will be treated as a
+ page mark.
+ 
+ 
+ File: gnat_rm.info,  Node: Treating Text_IO Files as Streams,  Next: Text_IO Extensions,  Prev: Get_Immediate,  Up: Text_IO
+ 
+ 11.5.4 Treating Text_IO Files as Streams
+ ----------------------------------------
+ 
+ The package ‘Text_IO.Streams’ allows a ‘Text_IO’ file to be treated as a
+ stream.  Data written to a ‘Text_IO’ file in this stream mode is binary
+ data.  If this binary data contains bytes 16#0A# (‘LF’) or 16#0C#
+ (‘FF’), the resulting file may have non-standard format.  Similarly if
+ read operations are used to read from a Text_IO file treated as a
+ stream, then ‘LF’ and ‘FF’ characters may be skipped and the effect is
+ similar to that described above for ‘Get_Immediate’.
+ 
+ 
+ File: gnat_rm.info,  Node: Text_IO Extensions,  Next: Text_IO Facilities for Unbounded Strings,  Prev: Treating Text_IO Files as Streams,  Up: Text_IO
+ 
+ 11.5.5 Text_IO Extensions
+ -------------------------
+ 
+ A package GNAT.IO_Aux in the GNAT library provides some useful
+ extensions to the standard ‘Text_IO’ package:
+ 
+    * function File_Exists (Name : String) return Boolean; Determines if
+      a file of the given name exists.
+ 
+    * function Get_Line return String; Reads a string from the standard
+      input file.  The value returned is exactly the length of the line
+      that was read.
+ 
+    * function Get_Line (File : Ada.Text_IO.File_Type) return String;
+      Similar, except that the parameter File specifies the file from
+      which the string is to be read.
+ 
+ 
+ File: gnat_rm.info,  Node: Text_IO Facilities for Unbounded Strings,  Prev: Text_IO Extensions,  Up: Text_IO
+ 
+ 11.5.6 Text_IO Facilities for Unbounded Strings
+ -----------------------------------------------
+ 
+ The package ‘Ada.Strings.Unbounded.Text_IO’ in library files
+ ‘a-suteio.ads/adb’ contains some GNAT-specific subprograms useful for
+ Text_IO operations on unbounded strings:
+ 
+    * function Get_Line (File : File_Type) return Unbounded_String; Reads
+      a line from the specified file and returns the result as an
+      unbounded string.
+ 
+    * procedure Put (File : File_Type; U : Unbounded_String); Writes the
+      value of the given unbounded string to the specified file Similar
+      to the effect of ‘Put (To_String (U))’ except that an extra copy is
+      avoided.
+ 
+    * procedure Put_Line (File : File_Type; U : Unbounded_String); Writes
+      the value of the given unbounded string to the specified file,
+      followed by a ‘New_Line’.  Similar to the effect of ‘Put_Line
+      (To_String (U))’ except that an extra copy is avoided.
+ 
+ In the above procedures, ‘File’ is of type ‘Ada.Text_IO.File_Type’ and
+ is optional.  If the parameter is omitted, then the standard input or
+ output file is referenced as appropriate.
+ 
+ The package ‘Ada.Strings.Wide_Unbounded.Wide_Text_IO’ in library files
+ ‘a-swuwti.ads’ and ‘a-swuwti.adb’ provides similar extended
+ ‘Wide_Text_IO’ functionality for unbounded wide strings.
+ 
+ The package ‘Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO’ in
+ library files ‘a-szuzti.ads’ and ‘a-szuzti.adb’ provides similar
+ extended ‘Wide_Wide_Text_IO’ functionality for unbounded wide wide
+ strings.
+ 
+ 
+ File: gnat_rm.info,  Node: Wide_Text_IO,  Next: Wide_Wide_Text_IO,  Prev: Text_IO,  Up: The Implementation of Standard I/O
+ 
+ 11.6 Wide_Text_IO
+ =================
+ 
+ ‘Wide_Text_IO’ is similar in most respects to Text_IO, except that both
+ input and output files may contain special sequences that represent wide
+ character values.  The encoding scheme for a given file may be specified
+ using a FORM parameter:
+ 
+      WCEM=`x`
+ 
+ as part of the FORM string (WCEM = wide character encoding method),
+ where ‘x’ is one of the following characters
+ 
+ Character      Encoding
+                
+ ----------------------------------------
+                
+ ‘h’            Hex ESC encoding
+                
+                
+ ‘u’            Upper half encoding
+                
+                
+ ‘s’            Shift-JIS encoding
+                
+                
+ ‘e’            EUC Encoding
+                
+                
+ ‘8’            UTF-8 encoding
+                
+                
+ ‘b’            Brackets encoding
+                
+ 
+ The encoding methods match those that can be used in a source program,
+ but there is no requirement that the encoding method used for the source
+ program be the same as the encoding method used for files, and different
+ files may use different encoding methods.
+ 
+ The default encoding method for the standard files, and for opened files
+ for which no WCEM parameter is given in the FORM string matches the wide
+ character encoding specified for the main program (the default being
+ brackets encoding if no coding method was specified with -gnatW).
+ 
+ ‘Hex Coding’
+ 
+      In this encoding, a wide character is represented by a five
+      character sequence:
+ 
+      ESC a b c d
+ 
+      where ‘a’, ‘b’, ‘c’, ‘d’ are the four hexadecimal characters (using
+      upper case letters) of the wide character code.  For example, ESC
+      A345 is used to represent the wide character with code 16#A345#.
+      This scheme is compatible with use of the full ‘Wide_Character’
+      set.
+ 
+ ‘Upper Half Coding’
+ 
+      The wide character with encoding 16#abcd#, where the upper bit is
+      on (i.e., a is in the range 8-F) is represented as two bytes 16#ab#
+      and 16#cd#.  The second byte may never be a format control
+      character, but is not required to be in the upper half.  This
+      method can be also used for shift-JIS or EUC where the internal
+      coding matches the external coding.
+ 
+ ‘Shift JIS Coding’
+ 
+      A wide character is represented by a two character sequence 16#ab#
+      and 16#cd#, with the restrictions described for upper half encoding
+      as described above.  The internal character code is the
+      corresponding JIS character according to the standard algorithm for
+      Shift-JIS conversion.  Only characters defined in the JIS code set
+      table can be used with this encoding method.
+ 
+ ‘EUC Coding’
+ 
+      A wide character is represented by a two character sequence 16#ab#
+      and 16#cd#, with both characters being in the upper half.  The
+      internal character code is the corresponding JIS character
+      according to the EUC encoding algorithm.  Only characters defined
+      in the JIS code set table can be used with this encoding method.
+ 
+ ‘UTF-8 Coding’
+ 
+      A wide character is represented using UCS Transformation Format 8
+      (UTF-8) as defined in Annex R of ISO 10646-1/Am.2.  Depending on
+      the character value, the representation is a one, two, or three
+      byte sequence:
+ 
+      16#0000#-16#007f#: 2#0xxxxxxx#
+      16#0080#-16#07ff#: 2#110xxxxx# 2#10xxxxxx#
+      16#0800#-16#ffff#: 2#1110xxxx# 2#10xxxxxx# 2#10xxxxxx#
+ 
+      where the ‘xxx’ bits correspond to the left-padded bits of the
+      16-bit character value.  Note that all lower half ASCII characters
+      are represented as ASCII bytes and all upper half characters and
+      other wide characters are represented as sequences of upper-half
+      (The full UTF-8 scheme allows for encoding 31-bit characters as
+      6-byte sequences, but in this implementation, all UTF-8 sequences
+      of four or more bytes length will raise a Constraint_Error, as will
+      all invalid UTF-8 sequences.)
+ 
+ ‘Brackets Coding’
+ 
+      In this encoding, a wide character is represented by the following
+      eight character sequence:
+ 
+      [ " a b c d " ]
+ 
+      where ‘a’, ‘b’, ‘c’, ‘d’ are the four hexadecimal characters (using
+      uppercase letters) of the wide character code.  For example,
+      ‘["A345"]’ is used to represent the wide character with code
+      ‘16#A345#’.  This scheme is compatible with use of the full
+      Wide_Character set.  On input, brackets coding can also be used for
+      upper half characters, e.g., ‘["C1"]’ for lower case a.  However,
+      on output, brackets notation is only used for wide characters with
+      a code greater than ‘16#FF#’.
+ 
+      Note that brackets coding is not normally used in the context of
+      Wide_Text_IO or Wide_Wide_Text_IO, since it is really just designed
+      as a portable way of encoding source files.  In the context of
+      Wide_Text_IO or Wide_Wide_Text_IO, it can only be used if the file
+      does not contain any instance of the left bracket character other
+      than to encode wide character values using the brackets encoding
+      method.  In practice it is expected that some standard wide
+      character encoding method such as UTF-8 will be used for text input
+      output.
+ 
+      If brackets notation is used, then any occurrence of a left bracket
+      in the input file which is not the start of a valid wide character
+      sequence will cause Constraint_Error to be raised.  It is possible
+      to encode a left bracket as [“5B”] and Wide_Text_IO and
+      Wide_Wide_Text_IO input will interpret this as a left bracket.
+ 
+      However, when a left bracket is output, it will be output as a left
+      bracket and not as [“5B”].  We make this decision because for
+      normal use of Wide_Text_IO for outputting messages, it is
+      unpleasant to clobber left brackets.  For example, if we write:
+ 
+           Put_Line ("Start of output [first run]");
+ 
+      we really do not want to have the left bracket in this message
+      clobbered so that the output reads:
+ 
+      Start of output ["5B"]first run]
+ 
+      In practice brackets encoding is reasonably useful for normal
+      Put_Line use since we won’t get confused between left brackets and
+      wide character sequences in the output.  But for input, or when
+      files are written out and read back in, it really makes better
+      sense to use one of the standard encoding methods such as UTF-8.
+ 
+ For the coding schemes other than UTF-8, Hex, or Brackets encoding, not
+ all wide character values can be represented.  An attempt to output a
+ character that cannot be represented using the encoding scheme for the
+ file causes Constraint_Error to be raised.  An invalid wide character
+ sequence on input also causes Constraint_Error to be raised.
+ 
+ * Menu:
+ 
+ * Stream Pointer Positioning: Stream Pointer Positioning<2>.
+ * Reading and Writing Non-Regular Files: Reading and Writing Non-Regular Files<2>.
+ 
+ 
+ File: gnat_rm.info,  Node: Stream Pointer Positioning<2>,  Next: Reading and Writing Non-Regular Files<2>,  Up: Wide_Text_IO
+ 
+ 11.6.1 Stream Pointer Positioning
+ ---------------------------------
+ 
+ ‘Ada.Wide_Text_IO’ is similar to ‘Ada.Text_IO’ in its handling of stream
+ pointer positioning (*note Text_IO: 2ac.).  There is one additional
+ case:
+ 
+ If ‘Ada.Wide_Text_IO.Look_Ahead’ reads a character outside the normal
+ lower ASCII set, i.e.  a character in the range:
+ 
+      Wide_Character'Val (16#0080#) .. Wide_Character'Val (16#FFFF#)
+ 
+ then although the logical position of the file pointer is unchanged by
+ the ‘Look_Ahead’ call, the stream is physically positioned past the wide
+ character sequence.  Again this is to avoid the need for buffering or
+ backup, and all ‘Wide_Text_IO’ routines check the internal indication
+ that this situation has occurred so that this is not visible to a normal
+ program using ‘Wide_Text_IO’.  However, this discrepancy can be observed
+ if the wide text file shares a stream with another file.
+ 
+ 
+ File: gnat_rm.info,  Node: Reading and Writing Non-Regular Files<2>,  Prev: Stream Pointer Positioning<2>,  Up: Wide_Text_IO
+ 
+ 11.6.2 Reading and Writing Non-Regular Files
+ --------------------------------------------
+ 
+ As in the case of Text_IO, when a non-regular file is read, it is
+ assumed that the file contains no page marks (any form characters are
+ treated as data characters), and ‘End_Of_Page’ always returns ‘False’.
+ Similarly, the end of file indication is not sticky, so it is possible
+ to read beyond an end of file.
+ 
+ 
+ File: gnat_rm.info,  Node: Wide_Wide_Text_IO,  Next: Stream_IO,  Prev: Wide_Text_IO,  Up: The Implementation of Standard I/O
+ 
+ 11.7 Wide_Wide_Text_IO
+ ======================
+ 
+ ‘Wide_Wide_Text_IO’ is similar in most respects to Text_IO, except that
+ both input and output files may contain special sequences that represent
+ wide wide character values.  The encoding scheme for a given file may be
+ specified using a FORM parameter:
+ 
+      WCEM=`x`
+ 
+ as part of the FORM string (WCEM = wide character encoding method),
+ where ‘x’ is one of the following characters
+ 
+ Character      Encoding
+                
+ ----------------------------------------
+                
+ ‘h’            Hex ESC encoding
+                
+                
+ ‘u’            Upper half encoding
+                
+                
+ ‘s’            Shift-JIS encoding
+                
+                
+ ‘e’            EUC Encoding
+                
+                
+ ‘8’            UTF-8 encoding
+                
+                
+ ‘b’            Brackets encoding
+                
+ 
+ The encoding methods match those that can be used in a source program,
+ but there is no requirement that the encoding method used for the source
+ program be the same as the encoding method used for files, and different
+ files may use different encoding methods.
+ 
+ The default encoding method for the standard files, and for opened files
+ for which no WCEM parameter is given in the FORM string matches the wide
+ character encoding specified for the main program (the default being
+ brackets encoding if no coding method was specified with -gnatW).
+ 
+ ‘UTF-8 Coding’
+ 
+      A wide character is represented using UCS Transformation Format 8
+      (UTF-8) as defined in Annex R of ISO 10646-1/Am.2.  Depending on
+      the character value, the representation is a one, two, three, or
+      four byte sequence:
+ 
+      16#000000#-16#00007f#: 2#0xxxxxxx#
+      16#000080#-16#0007ff#: 2#110xxxxx# 2#10xxxxxx#
+      16#000800#-16#00ffff#: 2#1110xxxx# 2#10xxxxxx# 2#10xxxxxx#
+      16#010000#-16#10ffff#: 2#11110xxx# 2#10xxxxxx# 2#10xxxxxx# 2#10xxxxxx#
+ 
+      where the ‘xxx’ bits correspond to the left-padded bits of the
+      21-bit character value.  Note that all lower half ASCII characters
+      are represented as ASCII bytes and all upper half characters and
+      other wide characters are represented as sequences of upper-half
+      characters.
+ 
+ ‘Brackets Coding’
+ 
+      In this encoding, a wide wide character is represented by the
+      following eight character sequence if is in wide character range
+ 
+      [ " a b c d " ]
+ 
+      and by the following ten character sequence if not
+ 
+      [ " a b c d e f " ]
+ 
+      where ‘a’, ‘b’, ‘c’, ‘d’, ‘e’, and ‘f’ are the four or six
+      hexadecimal characters (using uppercase letters) of the wide wide
+      character code.  For example, ‘["01A345"]’ is used to represent the
+      wide wide character with code ‘16#01A345#’.
+ 
+      This scheme is compatible with use of the full Wide_Wide_Character
+      set.  On input, brackets coding can also be used for upper half
+      characters, e.g., ‘["C1"]’ for lower case a.  However, on output,
+      brackets notation is only used for wide characters with a code
+      greater than ‘16#FF#’.
+ 
+ If is also possible to use the other Wide_Character encoding methods,
+ such as Shift-JIS, but the other schemes cannot support the full range
+ of wide wide characters.  An attempt to output a character that cannot
+ be represented using the encoding scheme for the file causes
+ Constraint_Error to be raised.  An invalid wide character sequence on
+ input also causes Constraint_Error to be raised.
+ 
+ * Menu:
+ 
+ * Stream Pointer Positioning: Stream Pointer Positioning<3>.
+ * Reading and Writing Non-Regular Files: Reading and Writing Non-Regular Files<3>.
+ 
+ 
+ File: gnat_rm.info,  Node: Stream Pointer Positioning<3>,  Next: Reading and Writing Non-Regular Files<3>,  Up: Wide_Wide_Text_IO
+ 
+ 11.7.1 Stream Pointer Positioning
+ ---------------------------------
+ 
+ ‘Ada.Wide_Wide_Text_IO’ is similar to ‘Ada.Text_IO’ in its handling of
+ stream pointer positioning (*note Text_IO: 2ac.).  There is one
+ additional case:
+ 
+ If ‘Ada.Wide_Wide_Text_IO.Look_Ahead’ reads a character outside the
+ normal lower ASCII set, i.e.  a character in the range:
+ 
+      Wide_Wide_Character'Val (16#0080#) .. Wide_Wide_Character'Val (16#10FFFF#)
+ 
+ then although the logical position of the file pointer is unchanged by
+ the ‘Look_Ahead’ call, the stream is physically positioned past the wide
+ character sequence.  Again this is to avoid the need for buffering or
+ backup, and all ‘Wide_Wide_Text_IO’ routines check the internal
+ indication that this situation has occurred so that this is not visible
+ to a normal program using ‘Wide_Wide_Text_IO’.  However, this
+ discrepancy can be observed if the wide text file shares a stream with
+ another file.
+ 
+ 
+ File: gnat_rm.info,  Node: Reading and Writing Non-Regular Files<3>,  Prev: Stream Pointer Positioning<3>,  Up: Wide_Wide_Text_IO
+ 
+ 11.7.2 Reading and Writing Non-Regular Files
+ --------------------------------------------
+ 
+ As in the case of Text_IO, when a non-regular file is read, it is
+ assumed that the file contains no page marks (any form characters are
+ treated as data characters), and ‘End_Of_Page’ always returns ‘False’.
+ Similarly, the end of file indication is not sticky, so it is possible
+ to read beyond an end of file.
+ 
+ 
+ File: gnat_rm.info,  Node: Stream_IO,  Next: Text Translation,  Prev: Wide_Wide_Text_IO,  Up: The Implementation of Standard I/O
+ 
+ 11.8 Stream_IO
+ ==============
+ 
+ A stream file is a sequence of bytes, where individual elements are
+ written to the file as described in the Ada Reference Manual.  The type
+ ‘Stream_Element’ is simply a byte.  There are two ways to read or write
+ a stream file.
+ 
+    * The operations ‘Read’ and ‘Write’ directly read or write a sequence
+      of stream elements with no control information.
+ 
+    * The stream attributes applied to a stream file transfer data in the
+      manner described for stream attributes.
+ 
+ 
+ File: gnat_rm.info,  Node: Text Translation,  Next: Shared Files,  Prev: Stream_IO,  Up: The Implementation of Standard I/O
+ 
+ 11.9 Text Translation
+ =====================
+ 
+ ‘Text_Translation=xxx’ may be used as the Form parameter passed to
+ Text_IO.Create and Text_IO.Open.  ‘Text_Translation=xxx’ has no effect
+ on Unix systems.  Possible values are:
+ 
+    * ‘Yes’ or ‘Text’ is the default, which means to translate LF to/from
+      CR/LF on Windows systems.
+ 
+      ‘No’ disables this translation; i.e.  it uses binary mode.  For
+      output files, ‘Text_Translation=No’ may be used to create
+      Unix-style files on Windows.
+ 
+    * ‘wtext’ translation enabled in Unicode mode.  (corresponds to
+      _O_WTEXT).
+ 
+    * ‘u8text’ translation enabled in Unicode UTF-8 mode.  (corresponds
+      to O_U8TEXT).
+ 
+    * ‘u16text’ translation enabled in Unicode UTF-16 mode.  (corresponds
+      to_O_U16TEXT).
+ 
+ 
+ File: gnat_rm.info,  Node: Shared Files,  Next: Filenames encoding,  Prev: Text Translation,  Up: The Implementation of Standard I/O
+ 
+ 11.10 Shared Files
+ ==================
+ 
+ Section A.14 of the Ada Reference Manual allows implementations to
+ provide a wide variety of behavior if an attempt is made to access the
+ same external file with two or more internal files.
+ 
+ To provide a full range of functionality, while at the same time
+ minimizing the problems of portability caused by this implementation
+ dependence, GNAT handles file sharing as follows:
+ 
+    * In the absence of a ‘shared=xxx’ form parameter, an attempt to open
+      two or more files with the same full name is considered an error
+      and is not supported.  The exception ‘Use_Error’ will be raised.
+      Note that a file that is not explicitly closed by the program
+      remains open until the program terminates.
+ 
+    * If the form parameter ‘shared=no’ appears in the form string, the
+      file can be opened or created with its own separate stream
+      identifier, regardless of whether other files sharing the same
+      external file are opened.  The exact effect depends on how the C
+      stream routines handle multiple accesses to the same external files
+      using separate streams.
+ 
+    * If the form parameter ‘shared=yes’ appears in the form string for
+      each of two or more files opened using the same full name, the same
+      stream is shared between these files, and the semantics are as
+      described in Ada Reference Manual, Section A.14.
+ 
+ When a program that opens multiple files with the same name is ported
+ from another Ada compiler to GNAT, the effect will be that ‘Use_Error’
+ is raised.
+ 
+ The documentation of the original compiler and the documentation of the
+ program should then be examined to determine if file sharing was
+ expected, and ‘shared=xxx’ parameters added to ‘Open’ and ‘Create’ calls
+ as required.
+ 
+ When a program is ported from GNAT to some other Ada compiler, no
+ special attention is required unless the ‘shared=xxx’ form parameter is
+ used in the program.  In this case, you must examine the documentation
+ of the new compiler to see if it supports the required file sharing
+ semantics, and form strings modified appropriately.  Of course it may be
+ the case that the program cannot be ported if the target compiler does
+ not support the required functionality.  The best approach in writing
+ portable code is to avoid file sharing (and hence the use of the
+ ‘shared=xxx’ parameter in the form string) completely.
+ 
+ One common use of file sharing in Ada 83 is the use of instantiations of
+ Sequential_IO on the same file with different types, to achieve
+ heterogeneous input-output.  Although this approach will work in GNAT if
+ ‘shared=yes’ is specified, it is preferable in Ada to use Stream_IO for
+ this purpose (using the stream attributes)
+ 
+ 
+ File: gnat_rm.info,  Node: Filenames encoding,  Next: File content encoding,  Prev: Shared Files,  Up: The Implementation of Standard I/O
+ 
+ 11.11 Filenames encoding
+ ========================
+ 
+ An encoding form parameter can be used to specify the filename encoding
+ ‘encoding=xxx’.
+ 
+    * If the form parameter ‘encoding=utf8’ appears in the form string,
+      the filename must be encoded in UTF-8.
+ 
+    * If the form parameter ‘encoding=8bits’ appears in the form string,
+      the filename must be a standard 8bits string.
+ 
+ In the absence of a ‘encoding=xxx’ form parameter, the encoding is
+ controlled by the ‘GNAT_CODE_PAGE’ environment variable.  And if not set
+ ‘utf8’ is assumed.
+ 
+ ‘CP_ACP’
+ 
+      The current system Windows ANSI code page.
+ 
+ ‘CP_UTF8’
+ 
+      UTF-8 encoding
+ 
+ This encoding form parameter is only supported on the Windows platform.
+ On the other Operating Systems the run-time is supporting UTF-8
+ natively.
+ 
+ 
+ File: gnat_rm.info,  Node: File content encoding,  Next: Open Modes,  Prev: Filenames encoding,  Up: The Implementation of Standard I/O
+ 
+ 11.12 File content encoding
+ ===========================
+ 
+ For text files it is possible to specify the encoding to use.  This is
+ controlled by the by the ‘GNAT_CCS_ENCODING’ environment variable.  And
+ if not set ‘TEXT’ is assumed.
+ 
+ The possible values are those supported on Windows:
+ 
+ ‘TEXT’
+ 
+      Translated text mode
+ 
+ ‘WTEXT’
+ 
+      Translated unicode encoding
+ 
+ ‘U16TEXT’
+ 
+      Unicode 16-bit encoding
+ 
+ ‘U8TEXT’
+ 
+      Unicode 8-bit encoding
+ 
+ This encoding is only supported on the Windows platform.
+ 
+ 
+ File: gnat_rm.info,  Node: Open Modes,  Next: Operations on C Streams,  Prev: File content encoding,  Up: The Implementation of Standard I/O
+ 
+ 11.13 Open Modes
+ ================
+ 
+ ‘Open’ and ‘Create’ calls result in a call to ‘fopen’ using the mode
+ shown in the following table:
+ 
+ ‘Open’ and ‘Create’ Call Modes
+ 
+ ----------------------------------------------------------------------------
+                                                      
+                                  ‘OPEN’              ‘CREATE’
+                                                      
+                                                      
+ Append_File                      “r+”                “w+”
+                                                      
+                                                      
+ In_File                          “r”                 “w+”
+                                                      
+                                                      
+ Out_File (Direct_IO)             “r+”                “w”
+                                                      
+                                                      
+ Out_File (all other cases)       “w”                 “w”
+                                                      
+                                                      
+ Inout_File                       “r+”                “w+”
+                                                      
+ 
+ If text file translation is required, then either ‘b’ or ‘t’ is added to
+ the mode, depending on the setting of Text.  Text file translation
+ refers to the mapping of CR/LF sequences in an external file to LF
+ characters internally.  This mapping only occurs in DOS and DOS-like
+ systems, and is not relevant to other systems.
+ 
+ A special case occurs with Stream_IO. As shown in the above table, the
+ file is initially opened in ‘r’ or ‘w’ mode for the ‘In_File’ and
+ ‘Out_File’ cases.  If a ‘Set_Mode’ operation subsequently requires
+ switching from reading to writing or vice-versa, then the file is
+ reopened in ‘r+’ mode to permit the required operation.
+ 
+ 
+ File: gnat_rm.info,  Node: Operations on C Streams,  Next: Interfacing to C Streams,  Prev: Open Modes,  Up: The Implementation of Standard I/O
+ 
+ 11.14 Operations on C Streams
+ =============================
+ 
+ The package ‘Interfaces.C_Streams’ provides an Ada program with direct
+ access to the C library functions for operations on C streams:
+ 
+      package Interfaces.C_Streams is
+        -- Note: the reason we do not use the types that are in
+        -- Interfaces.C is that we want to avoid dragging in the
+        -- code in this unit if possible.
+        subtype chars is System.Address;
+        -- Pointer to null-terminated array of characters
+        subtype FILEs is System.Address;
+        -- Corresponds to the C type FILE*
+        subtype voids is System.Address;
+        -- Corresponds to the C type void*
+        subtype int is Integer;
+        subtype long is Long_Integer;
+        -- Note: the above types are subtypes deliberately, and it
+        -- is part of this spec that the above correspondences are
+        -- guaranteed.  This means that it is legitimate to, for
+        -- example, use Integer instead of int.  We provide these
+        -- synonyms for clarity, but in some cases it may be
+        -- convenient to use the underlying types (for example to
+        -- avoid an unnecessary dependency of a spec on the spec
+        -- of this unit).
+        type size_t is mod 2 ** Standard'Address_Size;
+        NULL_Stream : constant FILEs;
+        -- Value returned (NULL in C) to indicate an
+        -- fdopen/fopen/tmpfile error
+        ----------------------------------
+        -- Constants Defined in stdio.h --
+        ----------------------------------
+        EOF : constant int;
+        -- Used by a number of routines to indicate error or
+        -- end of file
+        IOFBF : constant int;
+        IOLBF : constant int;
+        IONBF : constant int;
+        -- Used to indicate buffering mode for setvbuf call
+        SEEK_CUR : constant int;
+        SEEK_END : constant int;
+        SEEK_SET : constant int;
+        -- Used to indicate origin for fseek call
+        function stdin return FILEs;
+        function stdout return FILEs;
+        function stderr return FILEs;
+        -- Streams associated with standard files
+        --------------------------
+        -- Standard C functions --
+        --------------------------
+        -- The functions selected below are ones that are
+        -- available in UNIX (but not necessarily in ANSI C).
+        -- These are very thin interfaces
+        -- which copy exactly the C headers.  For more
+        -- documentation on these functions, see the Microsoft C
+        -- "Run-Time Library Reference" (Microsoft Press, 1990,
+        -- ISBN 1-55615-225-6), which includes useful information
+        -- on system compatibility.
+        procedure clearerr (stream : FILEs);
+        function fclose (stream : FILEs) return int;
+        function fdopen (handle : int; mode : chars) return FILEs;
+        function feof (stream : FILEs) return int;
+        function ferror (stream : FILEs) return int;
+        function fflush (stream : FILEs) return int;
+        function fgetc (stream : FILEs) return int;
+        function fgets (strng : chars; n : int; stream : FILEs)
+            return chars;
+        function fileno (stream : FILEs) return int;
+        function fopen (filename : chars; Mode : chars)
+            return FILEs;
+        -- Note: to maintain target independence, use
+        -- text_translation_required, a boolean variable defined in
+        -- a-sysdep.c to deal with the target dependent text
+        -- translation requirement.  If this variable is set,
+        -- then  b/t should be appended to the standard mode
+        -- argument to set the text translation mode off or on
+        -- as required.
+        function fputc (C : int; stream : FILEs) return int;
+        function fputs (Strng : chars; Stream : FILEs) return int;
+        function fread
+           (buffer : voids;
+            size : size_t;
+            count : size_t;
+            stream : FILEs)
+            return size_t;
+        function freopen
+           (filename : chars;
+            mode : chars;
+            stream : FILEs)
+            return FILEs;
+        function fseek
+           (stream : FILEs;
+            offset : long;
+            origin : int)
+            return int;
+        function ftell (stream : FILEs) return long;
+        function fwrite
+           (buffer : voids;
+            size : size_t;
+            count : size_t;
+            stream : FILEs)
+            return size_t;
+        function isatty (handle : int) return int;
+        procedure mktemp (template : chars);
+        -- The return value (which is just a pointer to template)
+        -- is discarded
+        procedure rewind (stream : FILEs);
+        function rmtmp return int;
+        function setvbuf
+           (stream : FILEs;
+            buffer : chars;
+            mode : int;
+            size : size_t)
+            return int;
+ 
+        function tmpfile return FILEs;
+        function ungetc (c : int; stream : FILEs) return int;
+        function unlink (filename : chars) return int;
+        ---------------------
+        -- Extra functions --
+        ---------------------
+        -- These functions supply slightly thicker bindings than
+        -- those above.  They are derived from functions in the
+        -- C Run-Time Library, but may do a bit more work than
+        -- just directly calling one of the Library functions.
+        function is_regular_file (handle : int) return int;
+        -- Tests if given handle is for a regular file (result 1)
+        -- or for a non-regular file (pipe or device, result 0).
+        ---------------------------------
+        -- Control of Text/Binary Mode --
+        ---------------------------------
+        -- If text_translation_required is true, then the following
+        -- functions may be used to dynamically switch a file from
+        -- binary to text mode or vice versa.  These functions have
+        -- no effect if text_translation_required is false (i.e., in
+        -- normal UNIX mode).  Use fileno to get a stream handle.
+        procedure set_binary_mode (handle : int);
+        procedure set_text_mode (handle : int);
+        ----------------------------
+        -- Full Path Name support --
+        ----------------------------
+        procedure full_name (nam : chars; buffer : chars);
+        -- Given a NUL terminated string representing a file
+        -- name, returns in buffer a NUL terminated string
+        -- representing the full path name for the file name.
+        -- On systems where it is relevant the   drive is also
+        -- part of the full path name.  It is the responsibility
+        -- of the caller to pass an actual parameter for buffer
+        -- that is big enough for any full path name.  Use
+        -- max_path_len given below as the size of buffer.
+        max_path_len : integer;
+        -- Maximum length of an allowable full path name on the
+        -- system, including a terminating NUL character.
+      end Interfaces.C_Streams;
+ 
+ 
+ File: gnat_rm.info,  Node: Interfacing to C Streams,  Prev: Operations on C Streams,  Up: The Implementation of Standard I/O
+ 
+ 11.15 Interfacing to C Streams
+ ==============================
+ 
+ The packages in this section permit interfacing Ada files to C Stream
+ operations.
+ 
+      with Interfaces.C_Streams;
+      package Ada.Sequential_IO.C_Streams is
+         function C_Stream (F : File_Type)
+            return Interfaces.C_Streams.FILEs;
+         procedure Open
+           (File : in out File_Type;
+            Mode : in File_Mode;
+            C_Stream : in Interfaces.C_Streams.FILEs;
+            Form : in String := "");
+      end Ada.Sequential_IO.C_Streams;
+ 
+       with Interfaces.C_Streams;
+       package Ada.Direct_IO.C_Streams is
+          function C_Stream (F : File_Type)
+             return Interfaces.C_Streams.FILEs;
+          procedure Open
+            (File : in out File_Type;
+             Mode : in File_Mode;
+             C_Stream : in Interfaces.C_Streams.FILEs;
+             Form : in String := "");
+       end Ada.Direct_IO.C_Streams;
+ 
+       with Interfaces.C_Streams;
+       package Ada.Text_IO.C_Streams is
+          function C_Stream (F : File_Type)
+             return Interfaces.C_Streams.FILEs;
+          procedure Open
+            (File : in out File_Type;
+             Mode : in File_Mode;
+             C_Stream : in Interfaces.C_Streams.FILEs;
+             Form : in String := "");
+       end Ada.Text_IO.C_Streams;
+ 
+       with Interfaces.C_Streams;
+       package Ada.Wide_Text_IO.C_Streams is
+          function C_Stream (F : File_Type)
+             return Interfaces.C_Streams.FILEs;
+          procedure Open
+            (File : in out File_Type;
+             Mode : in File_Mode;
+             C_Stream : in Interfaces.C_Streams.FILEs;
+             Form : in String := "");
+      end Ada.Wide_Text_IO.C_Streams;
+ 
+       with Interfaces.C_Streams;
+       package Ada.Wide_Wide_Text_IO.C_Streams is
+          function C_Stream (F : File_Type)
+             return Interfaces.C_Streams.FILEs;
+          procedure Open
+            (File : in out File_Type;
+             Mode : in File_Mode;
+             C_Stream : in Interfaces.C_Streams.FILEs;
+             Form : in String := "");
+      end Ada.Wide_Wide_Text_IO.C_Streams;
+ 
+      with Interfaces.C_Streams;
+      package Ada.Stream_IO.C_Streams is
+         function C_Stream (F : File_Type)
+            return Interfaces.C_Streams.FILEs;
+         procedure Open
+           (File : in out File_Type;
+            Mode : in File_Mode;
+            C_Stream : in Interfaces.C_Streams.FILEs;
+            Form : in String := "");
+      end Ada.Stream_IO.C_Streams;
+ 
+ In each of these six packages, the ‘C_Stream’ function obtains the
+ ‘FILE’ pointer from a currently opened Ada file.  It is then possible to
+ use the ‘Interfaces.C_Streams’ package to operate on this stream, or the
+ stream can be passed to a C program which can operate on it directly.
+ Of course the program is responsible for ensuring that only appropriate
+ sequences of operations are executed.
+ 
+ One particular use of relevance to an Ada program is that the ‘setvbuf’
+ function can be used to control the buffering of the stream used by an
+ Ada file.  In the absence of such a call the standard default buffering
+ is used.
+ 
+ The ‘Open’ procedures in these packages open a file giving an existing C
+ Stream instead of a file name.  Typically this stream is imported from a
+ C program, allowing an Ada file to operate on an existing C file.
+ 
+ 
+ File: gnat_rm.info,  Node: The GNAT Library,  Next: Interfacing to Other Languages,  Prev: The Implementation of Standard I/O,  Up: Top
+ 
+ 12 The GNAT Library
+ *******************
+ 
+ The GNAT library contains a number of general and special purpose
+ packages.  It represents functionality that the GNAT developers have
+ found useful, and which is made available to GNAT users.  The packages
+ described here are fully supported, and upwards compatibility will be
+ maintained in future releases, so you can use these facilities with the
+ confidence that the same functionality will be available in future
+ releases.
+ 
+ The chapter here simply gives a brief summary of the facilities
+ available.  The full documentation is found in the spec file for the
+ package.  The full sources of these library packages, including both
+ spec and body, are provided with all GNAT releases.  For example, to
+ find out the full specifications of the SPITBOL pattern matching
+ capability, including a full tutorial and extensive examples, look in
+ the ‘g-spipat.ads’ file in the library.
+ 
+ For each entry here, the package name (as it would appear in a ‘with’
+ clause) is given, followed by the name of the corresponding spec file in
+ parentheses.  The packages are children in four hierarchies, ‘Ada’,
+ ‘Interfaces’, ‘System’, and ‘GNAT’, the latter being a GNAT-specific
+ hierarchy.
+ 
+ Note that an application program should only use packages in one of
+ these four hierarchies if the package is defined in the Ada Reference
+ Manual, or is listed in this section of the GNAT Programmers Reference
+ Manual.  All other units should be considered internal implementation
+ units and should not be directly ‘with’ed by application code.  The use
+ of a ‘with’ clause that references one of these internal implementation
+ units makes an application potentially dependent on changes in versions
+ of GNAT, and will generate a warning message.
+ 
+ * Menu:
+ 
+ * Ada.Characters.Latin_9 (a-chlat9.ads): Ada Characters Latin_9 a-chlat9 ads.
+ * Ada.Characters.Wide_Latin_1 (a-cwila1.ads): Ada Characters Wide_Latin_1 a-cwila1 ads.
+ * Ada.Characters.Wide_Latin_9 (a-cwila9.ads): Ada Characters Wide_Latin_9 a-cwila9 ads.
+ * Ada.Characters.Wide_Wide_Latin_1 (a-chzla1.ads): Ada Characters Wide_Wide_Latin_1 a-chzla1 ads.
+ * Ada.Characters.Wide_Wide_Latin_9 (a-chzla9.ads): Ada Characters Wide_Wide_Latin_9 a-chzla9 ads.
+ * Ada.Containers.Bounded_Holders (a-coboho.ads): Ada Containers Bounded_Holders a-coboho ads.
+ * Ada.Command_Line.Environment (a-colien.ads): Ada Command_Line Environment a-colien ads.
+ * Ada.Command_Line.Remove (a-colire.ads): Ada Command_Line Remove a-colire ads.
+ * Ada.Command_Line.Response_File (a-clrefi.ads): Ada Command_Line Response_File a-clrefi ads.
+ * Ada.Direct_IO.C_Streams (a-diocst.ads): Ada Direct_IO C_Streams a-diocst ads.
+ * Ada.Exceptions.Is_Null_Occurrence (a-einuoc.ads): Ada Exceptions Is_Null_Occurrence a-einuoc ads.
+ * Ada.Exceptions.Last_Chance_Handler (a-elchha.ads): Ada Exceptions Last_Chance_Handler a-elchha ads.
+ * Ada.Exceptions.Traceback (a-exctra.ads): Ada Exceptions Traceback a-exctra ads.
+ * Ada.Sequential_IO.C_Streams (a-siocst.ads): Ada Sequential_IO C_Streams a-siocst ads.
+ * Ada.Streams.Stream_IO.C_Streams (a-ssicst.ads): Ada Streams Stream_IO C_Streams a-ssicst ads.
+ * Ada.Strings.Unbounded.Text_IO (a-suteio.ads): Ada Strings Unbounded Text_IO a-suteio ads.
+ * Ada.Strings.Wide_Unbounded.Wide_Text_IO (a-swuwti.ads): Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads.
+ * Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO (a-szuzti.ads): Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads.
+ * Ada.Task_Initialization (a-tasini.ads): Ada Task_Initialization a-tasini ads.
+ * Ada.Text_IO.C_Streams (a-tiocst.ads): Ada Text_IO C_Streams a-tiocst ads.
+ * Ada.Text_IO.Reset_Standard_Files (a-tirsfi.ads): Ada Text_IO Reset_Standard_Files a-tirsfi ads.
+ * Ada.Wide_Characters.Unicode (a-wichun.ads): Ada Wide_Characters Unicode a-wichun ads.
+ * Ada.Wide_Text_IO.C_Streams (a-wtcstr.ads): Ada Wide_Text_IO C_Streams a-wtcstr ads.
+ * Ada.Wide_Text_IO.Reset_Standard_Files (a-wrstfi.ads): Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads.
+ * Ada.Wide_Wide_Characters.Unicode (a-zchuni.ads): Ada Wide_Wide_Characters Unicode a-zchuni ads.
+ * Ada.Wide_Wide_Text_IO.C_Streams (a-ztcstr.ads): Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads.
+ * Ada.Wide_Wide_Text_IO.Reset_Standard_Files (a-zrstfi.ads): Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads.
+ * GNAT.Altivec (g-altive.ads): GNAT Altivec g-altive ads.
+ * GNAT.Altivec.Conversions (g-altcon.ads): GNAT Altivec Conversions g-altcon ads.
+ * GNAT.Altivec.Vector_Operations (g-alveop.ads): GNAT Altivec Vector_Operations g-alveop ads.
+ * GNAT.Altivec.Vector_Types (g-alvety.ads): GNAT Altivec Vector_Types g-alvety ads.
+ * GNAT.Altivec.Vector_Views (g-alvevi.ads): GNAT Altivec Vector_Views g-alvevi ads.
+ * GNAT.Array_Split (g-arrspl.ads): GNAT Array_Split g-arrspl ads.
+ * GNAT.AWK (g-awk.ads): GNAT AWK g-awk ads.
+ * GNAT.Binary_Search (g-binsea.ads): GNAT Binary_Search g-binsea ads.
+ * GNAT.Bind_Environment (g-binenv.ads): GNAT Bind_Environment g-binenv ads.
+ * GNAT.Branch_Prediction (g-brapre.ads): GNAT Branch_Prediction g-brapre ads.
+ * GNAT.Bounded_Buffers (g-boubuf.ads): GNAT Bounded_Buffers g-boubuf ads.
+ * GNAT.Bounded_Mailboxes (g-boumai.ads): GNAT Bounded_Mailboxes g-boumai ads.
+ * GNAT.Bubble_Sort (g-bubsor.ads): GNAT Bubble_Sort g-bubsor ads.
+ * GNAT.Bubble_Sort_A (g-busora.ads): GNAT Bubble_Sort_A g-busora ads.
+ * GNAT.Bubble_Sort_G (g-busorg.ads): GNAT Bubble_Sort_G g-busorg ads.
+ * GNAT.Byte_Order_Mark (g-byorma.ads): GNAT Byte_Order_Mark g-byorma ads.
+ * GNAT.Byte_Swapping (g-bytswa.ads): GNAT Byte_Swapping g-bytswa ads.
+ * GNAT.Calendar (g-calend.ads): GNAT Calendar g-calend ads.
+ * GNAT.Calendar.Time_IO (g-catiio.ads): GNAT Calendar Time_IO g-catiio ads.
+ * GNAT.CRC32 (g-crc32.ads): GNAT CRC32 g-crc32 ads.
+ * GNAT.Case_Util (g-casuti.ads): GNAT Case_Util g-casuti ads.
+ * GNAT.CGI (g-cgi.ads): GNAT CGI g-cgi ads.
+ * GNAT.CGI.Cookie (g-cgicoo.ads): GNAT CGI Cookie g-cgicoo ads.
+ * GNAT.CGI.Debug (g-cgideb.ads): GNAT CGI Debug g-cgideb ads.
+ * GNAT.Command_Line (g-comlin.ads): GNAT Command_Line g-comlin ads.
+ * GNAT.Compiler_Version (g-comver.ads): GNAT Compiler_Version g-comver ads.
+ * GNAT.Ctrl_C (g-ctrl_c.ads): GNAT Ctrl_C g-ctrl_c ads.
+ * GNAT.Current_Exception (g-curexc.ads): GNAT Current_Exception g-curexc ads.
+ * GNAT.Debug_Pools (g-debpoo.ads): GNAT Debug_Pools g-debpoo ads.
+ * GNAT.Debug_Utilities (g-debuti.ads): GNAT Debug_Utilities g-debuti ads.
+ * GNAT.Decode_String (g-decstr.ads): GNAT Decode_String g-decstr ads.
+ * GNAT.Decode_UTF8_String (g-deutst.ads): GNAT Decode_UTF8_String g-deutst ads.
+ * GNAT.Directory_Operations (g-dirope.ads): GNAT Directory_Operations g-dirope ads.
+ * GNAT.Directory_Operations.Iteration (g-diopit.ads): GNAT Directory_Operations Iteration g-diopit ads.
+ * GNAT.Dynamic_HTables (g-dynhta.ads): GNAT Dynamic_HTables g-dynhta ads.
+ * GNAT.Dynamic_Tables (g-dyntab.ads): GNAT Dynamic_Tables g-dyntab ads.
+ * GNAT.Encode_String (g-encstr.ads): GNAT Encode_String g-encstr ads.
+ * GNAT.Encode_UTF8_String (g-enutst.ads): GNAT Encode_UTF8_String g-enutst ads.
+ * GNAT.Exception_Actions (g-excact.ads): GNAT Exception_Actions g-excact ads.
+ * GNAT.Exception_Traces (g-exctra.ads): GNAT Exception_Traces g-exctra ads.
+ * GNAT.Exceptions (g-except.ads): GNAT Exceptions g-except ads.
+ * GNAT.Expect (g-expect.ads): GNAT Expect g-expect ads.
+ * GNAT.Expect.TTY (g-exptty.ads): GNAT Expect TTY g-exptty ads.
+ * GNAT.Float_Control (g-flocon.ads): GNAT Float_Control g-flocon ads.
+ * GNAT.Formatted_String (g-forstr.ads): GNAT Formatted_String g-forstr ads.
+ * GNAT.Generic_Fast_Math_Functions (g-gfmafu.ads): GNAT Generic_Fast_Math_Functions g-gfmafu ads.
+ * GNAT.Heap_Sort (g-heasor.ads): GNAT Heap_Sort g-heasor ads.
+ * GNAT.Heap_Sort_A (g-hesora.ads): GNAT Heap_Sort_A g-hesora ads.
+ * GNAT.Heap_Sort_G (g-hesorg.ads): GNAT Heap_Sort_G g-hesorg ads.
+ * GNAT.HTable (g-htable.ads): GNAT HTable g-htable ads.
+ * GNAT.IO (g-io.ads): GNAT IO g-io ads.
+ * GNAT.IO_Aux (g-io_aux.ads): GNAT IO_Aux g-io_aux ads.
+ * GNAT.Lock_Files (g-locfil.ads): GNAT Lock_Files g-locfil ads.
+ * GNAT.MBBS_Discrete_Random (g-mbdira.ads): GNAT MBBS_Discrete_Random g-mbdira ads.
+ * GNAT.MBBS_Float_Random (g-mbflra.ads): GNAT MBBS_Float_Random g-mbflra ads.
+ * GNAT.MD5 (g-md5.ads): GNAT MD5 g-md5 ads.
+ * GNAT.Memory_Dump (g-memdum.ads): GNAT Memory_Dump g-memdum ads.
+ * GNAT.Most_Recent_Exception (g-moreex.ads): GNAT Most_Recent_Exception g-moreex ads.
+ * GNAT.OS_Lib (g-os_lib.ads): GNAT OS_Lib g-os_lib ads.
+ * GNAT.Perfect_Hash_Generators (g-pehage.ads): GNAT Perfect_Hash_Generators g-pehage ads.
+ * GNAT.Random_Numbers (g-rannum.ads): GNAT Random_Numbers g-rannum ads.
+ * GNAT.Regexp (g-regexp.ads): GNAT Regexp g-regexp ads.
+ * GNAT.Registry (g-regist.ads): GNAT Registry g-regist ads.
+ * GNAT.Regpat (g-regpat.ads): GNAT Regpat g-regpat ads.
+ * GNAT.Rewrite_Data (g-rewdat.ads): GNAT Rewrite_Data g-rewdat ads.
+ * GNAT.Secondary_Stack_Info (g-sestin.ads): GNAT Secondary_Stack_Info g-sestin ads.
+ * GNAT.Semaphores (g-semaph.ads): GNAT Semaphores g-semaph ads.
+ * GNAT.Serial_Communications (g-sercom.ads): GNAT Serial_Communications g-sercom ads.
+ * GNAT.SHA1 (g-sha1.ads): GNAT SHA1 g-sha1 ads.
+ * GNAT.SHA224 (g-sha224.ads): GNAT SHA224 g-sha224 ads.
+ * GNAT.SHA256 (g-sha256.ads): GNAT SHA256 g-sha256 ads.
+ * GNAT.SHA384 (g-sha384.ads): GNAT SHA384 g-sha384 ads.
+ * GNAT.SHA512 (g-sha512.ads): GNAT SHA512 g-sha512 ads.
+ * GNAT.Signals (g-signal.ads): GNAT Signals g-signal ads.
+ * GNAT.Sockets (g-socket.ads): GNAT Sockets g-socket ads.
+ * GNAT.Source_Info (g-souinf.ads): GNAT Source_Info g-souinf ads.
+ * GNAT.Spelling_Checker (g-speche.ads): GNAT Spelling_Checker g-speche ads.
+ * GNAT.Spelling_Checker_Generic (g-spchge.ads): GNAT Spelling_Checker_Generic g-spchge ads.
+ * GNAT.Spitbol.Patterns (g-spipat.ads): GNAT Spitbol Patterns g-spipat ads.
+ * GNAT.Spitbol (g-spitbo.ads): GNAT Spitbol g-spitbo ads.
+ * GNAT.Spitbol.Table_Boolean (g-sptabo.ads): GNAT Spitbol Table_Boolean g-sptabo ads.
+ * GNAT.Spitbol.Table_Integer (g-sptain.ads): GNAT Spitbol Table_Integer g-sptain ads.
+ * GNAT.Spitbol.Table_VString (g-sptavs.ads): GNAT Spitbol Table_VString g-sptavs ads.
+ * GNAT.SSE (g-sse.ads): GNAT SSE g-sse ads.
+ * GNAT.SSE.Vector_Types (g-ssvety.ads): GNAT SSE Vector_Types g-ssvety ads.
+ * GNAT.String_Hash (g-strhas.ads): GNAT String_Hash g-strhas ads.
+ * GNAT.Strings (g-string.ads): GNAT Strings g-string ads.
+ * GNAT.String_Split (g-strspl.ads): GNAT String_Split g-strspl ads.
+ * GNAT.Table (g-table.ads): GNAT Table g-table ads.
+ * GNAT.Task_Lock (g-tasloc.ads): GNAT Task_Lock g-tasloc ads.
+ * GNAT.Time_Stamp (g-timsta.ads): GNAT Time_Stamp g-timsta ads.
+ * GNAT.Threads (g-thread.ads): GNAT Threads g-thread ads.
+ * GNAT.Traceback (g-traceb.ads): GNAT Traceback g-traceb ads.
+ * GNAT.Traceback.Symbolic (g-trasym.ads): GNAT Traceback Symbolic g-trasym ads.
+ * GNAT.UTF_32 (g-utf_32.ads): GNAT UTF_32 g-utf_32 ads.
+ * GNAT.UTF_32_Spelling_Checker (g-u3spch.ads): GNAT UTF_32_Spelling_Checker g-u3spch ads.
+ * GNAT.Wide_Spelling_Checker (g-wispch.ads): GNAT Wide_Spelling_Checker g-wispch ads.
+ * GNAT.Wide_String_Split (g-wistsp.ads): GNAT Wide_String_Split g-wistsp ads.
+ * GNAT.Wide_Wide_Spelling_Checker (g-zspche.ads): GNAT Wide_Wide_Spelling_Checker g-zspche ads.
+ * GNAT.Wide_Wide_String_Split (g-zistsp.ads): GNAT Wide_Wide_String_Split g-zistsp ads.
+ * Interfaces.C.Extensions (i-cexten.ads): Interfaces C Extensions i-cexten ads.
+ * Interfaces.C.Streams (i-cstrea.ads): Interfaces C Streams i-cstrea ads.
+ * Interfaces.Packed_Decimal (i-pacdec.ads): Interfaces Packed_Decimal i-pacdec ads.
+ * Interfaces.VxWorks (i-vxwork.ads): Interfaces VxWorks i-vxwork ads.
+ * Interfaces.VxWorks.Int_Connection (i-vxinco.ads): Interfaces VxWorks Int_Connection i-vxinco ads.
+ * Interfaces.VxWorks.IO (i-vxwoio.ads): Interfaces VxWorks IO i-vxwoio ads.
+ * System.Address_Image (s-addima.ads): System Address_Image s-addima ads.
+ * System.Assertions (s-assert.ads): System Assertions s-assert ads.
+ * System.Atomic_Counters (s-atocou.ads): System Atomic_Counters s-atocou ads.
+ * System.Memory (s-memory.ads): System Memory s-memory ads.
+ * System.Multiprocessors (s-multip.ads): System Multiprocessors s-multip ads.
+ * System.Multiprocessors.Dispatching_Domains (s-mudido.ads): System Multiprocessors Dispatching_Domains s-mudido ads.
+ * System.Partition_Interface (s-parint.ads): System Partition_Interface s-parint ads.
+ * System.Pool_Global (s-pooglo.ads): System Pool_Global s-pooglo ads.
+ * System.Pool_Local (s-pooloc.ads): System Pool_Local s-pooloc ads.
+ * System.Restrictions (s-restri.ads): System Restrictions s-restri ads.
+ * System.Rident (s-rident.ads): System Rident s-rident ads.
+ * System.Strings.Stream_Ops (s-ststop.ads): System Strings Stream_Ops s-ststop ads.
+ * System.Unsigned_Types (s-unstyp.ads): System Unsigned_Types s-unstyp ads.
+ * System.Wch_Cnv (s-wchcnv.ads): System Wch_Cnv s-wchcnv ads.
+ * System.Wch_Con (s-wchcon.ads): System Wch_Con s-wchcon ads.
+ 
+ 
+ File: gnat_rm.info,  Node: Ada Characters Latin_9 a-chlat9 ads,  Next: Ada Characters Wide_Latin_1 a-cwila1 ads,  Up: The GNAT Library
+ 
+ 12.1 ‘Ada.Characters.Latin_9’ (‘a-chlat9.ads’)
+ ==============================================
+ 
+ This child of ‘Ada.Characters’ provides a set of definitions
+ corresponding to those in the RM-defined package
+ ‘Ada.Characters.Latin_1’ but with the few modifications required for
+ ‘Latin-9’.  The provision of such a package is specifically authorized
+ by the Ada Reference Manual (RM A.3.3(27)).
+ 
+ 
+ File: gnat_rm.info,  Node: Ada Characters Wide_Latin_1 a-cwila1 ads,  Next: Ada Characters Wide_Latin_9 a-cwila9 ads,  Prev: Ada Characters Latin_9 a-chlat9 ads,  Up: The GNAT Library
+ 
+ 12.2 ‘Ada.Characters.Wide_Latin_1’ (‘a-cwila1.ads’)
+ ===================================================
+ 
+ This child of ‘Ada.Characters’ provides a set of definitions
+ corresponding to those in the RM-defined package
+ ‘Ada.Characters.Latin_1’ but with the types of the constants being
+ ‘Wide_Character’ instead of ‘Character’.  The provision of such a
+ package is specifically authorized by the Ada Reference Manual (RM
+ A.3.3(27)).
+ 
+ 
+ File: gnat_rm.info,  Node: Ada Characters Wide_Latin_9 a-cwila9 ads,  Next: Ada Characters Wide_Wide_Latin_1 a-chzla1 ads,  Prev: Ada Characters Wide_Latin_1 a-cwila1 ads,  Up: The GNAT Library
+ 
+ 12.3 ‘Ada.Characters.Wide_Latin_9’ (‘a-cwila9.ads’)
+ ===================================================
+ 
+ This child of ‘Ada.Characters’ provides a set of definitions
+ corresponding to those in the GNAT defined package
+ ‘Ada.Characters.Latin_9’ but with the types of the constants being
+ ‘Wide_Character’ instead of ‘Character’.  The provision of such a
+ package is specifically authorized by the Ada Reference Manual (RM
+ A.3.3(27)).
+ 
+ 
+ File: gnat_rm.info,  Node: Ada Characters Wide_Wide_Latin_1 a-chzla1 ads,  Next: Ada Characters Wide_Wide_Latin_9 a-chzla9 ads,  Prev: Ada Characters Wide_Latin_9 a-cwila9 ads,  Up: The GNAT Library
+ 
+ 12.4 ‘Ada.Characters.Wide_Wide_Latin_1’ (‘a-chzla1.ads’)
+ ========================================================
+ 
+ This child of ‘Ada.Characters’ provides a set of definitions
+ corresponding to those in the RM-defined package
+ ‘Ada.Characters.Latin_1’ but with the types of the constants being
+ ‘Wide_Wide_Character’ instead of ‘Character’.  The provision of such a
+ package is specifically authorized by the Ada Reference Manual (RM
+ A.3.3(27)).
+ 
+ 
+ File: gnat_rm.info,  Node: Ada Characters Wide_Wide_Latin_9 a-chzla9 ads,  Next: Ada Containers Bounded_Holders a-coboho ads,  Prev: Ada Characters Wide_Wide_Latin_1 a-chzla1 ads,  Up: The GNAT Library
+ 
+ 12.5 ‘Ada.Characters.Wide_Wide_Latin_9’ (‘a-chzla9.ads’)
+ ========================================================
+ 
+ This child of ‘Ada.Characters’ provides a set of definitions
+ corresponding to those in the GNAT defined package
+ ‘Ada.Characters.Latin_9’ but with the types of the constants being
+ ‘Wide_Wide_Character’ instead of ‘Character’.  The provision of such a
+ package is specifically authorized by the Ada Reference Manual (RM
+ A.3.3(27)).
+ 
+ 
+ File: gnat_rm.info,  Node: Ada Containers Bounded_Holders a-coboho ads,  Next: Ada Command_Line Environment a-colien ads,  Prev: Ada Characters Wide_Wide_Latin_9 a-chzla9 ads,  Up: The GNAT Library
+ 
+ 12.6 ‘Ada.Containers.Bounded_Holders’ (‘a-coboho.ads’)
+ ======================================================
+ 
+ This child of ‘Ada.Containers’ defines a modified version of
+ Indefinite_Holders that avoids heap allocation.
+ 
+ 
+ File: gnat_rm.info,  Node: Ada Command_Line Environment a-colien ads,  Next: Ada Command_Line Remove a-colire ads,  Prev: Ada Containers Bounded_Holders a-coboho ads,  Up: The GNAT Library
+ 
+ 12.7 ‘Ada.Command_Line.Environment’ (‘a-colien.ads’)
+ ====================================================
+ 
+ This child of ‘Ada.Command_Line’ provides a mechanism for obtaining
+ environment values on systems where this concept makes sense.
+ 
+ 
+ File: gnat_rm.info,  Node: Ada Command_Line Remove a-colire ads,  Next: Ada Command_Line Response_File a-clrefi ads,  Prev: Ada Command_Line Environment a-colien ads,  Up: The GNAT Library
+ 
+ 12.8 ‘Ada.Command_Line.Remove’ (‘a-colire.ads’)
+ ===============================================
+ 
+ This child of ‘Ada.Command_Line’ provides a mechanism for logically
+ removing arguments from the argument list.  Once removed, an argument is
+ not visible to further calls to the subprograms in ‘Ada.Command_Line’.
+ These calls will not see the removed argument.
+ 
+ 
+ File: gnat_rm.info,  Node: Ada Command_Line Response_File a-clrefi ads,  Next: Ada Direct_IO C_Streams a-diocst ads,  Prev: Ada Command_Line Remove a-colire ads,  Up: The GNAT Library
+ 
+ 12.9 ‘Ada.Command_Line.Response_File’ (‘a-clrefi.ads’)
+ ======================================================
+ 
+ This child of ‘Ada.Command_Line’ provides a mechanism facilities for
+ getting command line arguments from a text file, called a “response
+ file”.  Using a response file allow passing a set of arguments to an
+ executable longer than the maximum allowed by the system on the command
+ line.
+ 
+ 
+ File: gnat_rm.info,  Node: Ada Direct_IO C_Streams a-diocst ads,  Next: Ada Exceptions Is_Null_Occurrence a-einuoc ads,  Prev: Ada Command_Line Response_File a-clrefi ads,  Up: The GNAT Library
+ 
+ 12.10 ‘Ada.Direct_IO.C_Streams’ (‘a-diocst.ads’)
+ ================================================
+ 
+ This package provides subprograms that allow interfacing between C
+ streams and ‘Direct_IO’.  The stream identifier can be extracted from a
+ file opened on the Ada side, and an Ada file can be constructed from a
+ stream opened on the C side.
+ 
+ 
+ File: gnat_rm.info,  Node: Ada Exceptions Is_Null_Occurrence a-einuoc ads,  Next: Ada Exceptions Last_Chance_Handler a-elchha ads,  Prev: Ada Direct_IO C_Streams a-diocst ads,  Up: The GNAT Library
+ 
+ 12.11 ‘Ada.Exceptions.Is_Null_Occurrence’ (‘a-einuoc.ads’)
+ ==========================================================
+ 
+ This child subprogram provides a way of testing for the null exception
+ occurrence (‘Null_Occurrence’) without raising an exception.
+ 
+ 
+ File: gnat_rm.info,  Node: Ada Exceptions Last_Chance_Handler a-elchha ads,  Next: Ada Exceptions Traceback a-exctra ads,  Prev: Ada Exceptions Is_Null_Occurrence a-einuoc ads,  Up: The GNAT Library
+ 
+ 12.12 ‘Ada.Exceptions.Last_Chance_Handler’ (‘a-elchha.ads’)
+ ===========================================================
+ 
+ This child subprogram is used for handling otherwise unhandled
+ exceptions (hence the name last chance), and perform clean ups before
+ terminating the program.  Note that this subprogram never returns.
+ 
+ 
+ File: gnat_rm.info,  Node: Ada Exceptions Traceback a-exctra ads,  Next: Ada Sequential_IO C_Streams a-siocst ads,  Prev: Ada Exceptions Last_Chance_Handler a-elchha ads,  Up: The GNAT Library
+ 
+ 12.13 ‘Ada.Exceptions.Traceback’ (‘a-exctra.ads’)
+ =================================================
+ 
+ This child package provides the subprogram (‘Tracebacks’) to give a
+ traceback array of addresses based on an exception occurrence.
+ 
+ 
+ File: gnat_rm.info,  Node: Ada Sequential_IO C_Streams a-siocst ads,  Next: Ada Streams Stream_IO C_Streams a-ssicst ads,  Prev: Ada Exceptions Traceback a-exctra ads,  Up: The GNAT Library
+ 
+ 12.14 ‘Ada.Sequential_IO.C_Streams’ (‘a-siocst.ads’)
+ ====================================================
+ 
+ This package provides subprograms that allow interfacing between C
+ streams and ‘Sequential_IO’.  The stream identifier can be extracted
+ from a file opened on the Ada side, and an Ada file can be constructed
+ from a stream opened on the C side.
+ 
+ 
+ File: gnat_rm.info,  Node: Ada Streams Stream_IO C_Streams a-ssicst ads,  Next: Ada Strings Unbounded Text_IO a-suteio ads,  Prev: Ada Sequential_IO C_Streams a-siocst ads,  Up: The GNAT Library
+ 
+ 12.15 ‘Ada.Streams.Stream_IO.C_Streams’ (‘a-ssicst.ads’)
+ ========================================================
+ 
+ This package provides subprograms that allow interfacing between C
+ streams and ‘Stream_IO’.  The stream identifier can be extracted from a
+ file opened on the Ada side, and an Ada file can be constructed from a
+ stream opened on the C side.
+ 
+ 
+ File: gnat_rm.info,  Node: Ada Strings Unbounded Text_IO a-suteio ads,  Next: Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads,  Prev: Ada Streams Stream_IO C_Streams a-ssicst ads,  Up: The GNAT Library
+ 
+ 12.16 ‘Ada.Strings.Unbounded.Text_IO’ (‘a-suteio.ads’)
+ ======================================================
+ 
+ This package provides subprograms for Text_IO for unbounded strings,
+ avoiding the necessity for an intermediate operation with ordinary
+ strings.
+ 
+ 
+ File: gnat_rm.info,  Node: Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads,  Next: Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads,  Prev: Ada Strings Unbounded Text_IO a-suteio ads,  Up: The GNAT Library
+ 
+ 12.17 ‘Ada.Strings.Wide_Unbounded.Wide_Text_IO’ (‘a-swuwti.ads’)
+ ================================================================
+ 
+ This package provides subprograms for Text_IO for unbounded wide
+ strings, avoiding the necessity for an intermediate operation with
+ ordinary wide strings.
+ 
+ 
+ File: gnat_rm.info,  Node: Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads,  Next: Ada Task_Initialization a-tasini ads,  Prev: Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads,  Up: The GNAT Library
+ 
+ 12.18 ‘Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO’ (‘a-szuzti.ads’)
+ ==========================================================================
+ 
+ This package provides subprograms for Text_IO for unbounded wide wide
+ strings, avoiding the necessity for an intermediate operation with
+ ordinary wide wide strings.
+ 
+ 
+ File: gnat_rm.info,  Node: Ada Task_Initialization a-tasini ads,  Next: Ada Text_IO C_Streams a-tiocst ads,  Prev: Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads,  Up: The GNAT Library
+ 
+ 12.19 ‘Ada.Task_Initialization’ (‘a-tasini.ads’)
+ ================================================
+ 
+ This package provides a way to set a global initialization handler that
+ is automatically invoked whenever a task is activated.  Handlers are
+ parameterless procedures.  Note that such a handler is only invoked for
+ those tasks activated after the handler is set.
+ 
+ 
+ File: gnat_rm.info,  Node: Ada Text_IO C_Streams a-tiocst ads,  Next: Ada Text_IO Reset_Standard_Files a-tirsfi ads,  Prev: Ada Task_Initialization a-tasini ads,  Up: The GNAT Library
+ 
+ 12.20 ‘Ada.Text_IO.C_Streams’ (‘a-tiocst.ads’)
+ ==============================================
+ 
+ This package provides subprograms that allow interfacing between C
+ streams and ‘Text_IO’.  The stream identifier can be extracted from a
+ file opened on the Ada side, and an Ada file can be constructed from a
+ stream opened on the C side.
+ 
+ 
+ File: gnat_rm.info,  Node: Ada Text_IO Reset_Standard_Files a-tirsfi ads,  Next: Ada Wide_Characters Unicode a-wichun ads,  Prev: Ada Text_IO C_Streams a-tiocst ads,  Up: The GNAT Library
+ 
+ 12.21 ‘Ada.Text_IO.Reset_Standard_Files’ (‘a-tirsfi.ads’)
+ =========================================================
+ 
+ This procedure is used to reset the status of the standard files used by
+ Ada.Text_IO. This is useful in a situation (such as a restart in an
+ embedded application) where the status of the files may change during
+ execution (for example a standard input file may be redefined to be
+ interactive).
+ 
+ 
+ File: gnat_rm.info,  Node: Ada Wide_Characters Unicode a-wichun ads,  Next: Ada Wide_Text_IO C_Streams a-wtcstr ads,  Prev: Ada Text_IO Reset_Standard_Files a-tirsfi ads,  Up: The GNAT Library
+ 
+ 12.22 ‘Ada.Wide_Characters.Unicode’ (‘a-wichun.ads’)
+ ====================================================
+ 
+ This package provides subprograms that allow categorization of
+ Wide_Character values according to Unicode categories.
+ 
+ 
+ File: gnat_rm.info,  Node: Ada Wide_Text_IO C_Streams a-wtcstr ads,  Next: Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads,  Prev: Ada Wide_Characters Unicode a-wichun ads,  Up: The GNAT Library
+ 
+ 12.23 ‘Ada.Wide_Text_IO.C_Streams’ (‘a-wtcstr.ads’)
+ ===================================================
+ 
+ This package provides subprograms that allow interfacing between C
+ streams and ‘Wide_Text_IO’.  The stream identifier can be extracted from
+ a file opened on the Ada side, and an Ada file can be constructed from a
+ stream opened on the C side.
+ 
+ 
+ File: gnat_rm.info,  Node: Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads,  Next: Ada Wide_Wide_Characters Unicode a-zchuni ads,  Prev: Ada Wide_Text_IO C_Streams a-wtcstr ads,  Up: The GNAT Library
+ 
+ 12.24 ‘Ada.Wide_Text_IO.Reset_Standard_Files’ (‘a-wrstfi.ads’)
+ ==============================================================
+ 
+ This procedure is used to reset the status of the standard files used by
+ Ada.Wide_Text_IO. This is useful in a situation (such as a restart in an
+ embedded application) where the status of the files may change during
+ execution (for example a standard input file may be redefined to be
+ interactive).
+ 
+ 
+ File: gnat_rm.info,  Node: Ada Wide_Wide_Characters Unicode a-zchuni ads,  Next: Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads,  Prev: Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads,  Up: The GNAT Library
+ 
+ 12.25 ‘Ada.Wide_Wide_Characters.Unicode’ (‘a-zchuni.ads’)
+ =========================================================
+ 
+ This package provides subprograms that allow categorization of
+ Wide_Wide_Character values according to Unicode categories.
+ 
+ 
+ File: gnat_rm.info,  Node: Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads,  Next: Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads,  Prev: Ada Wide_Wide_Characters Unicode a-zchuni ads,  Up: The GNAT Library
+ 
+ 12.26 ‘Ada.Wide_Wide_Text_IO.C_Streams’ (‘a-ztcstr.ads’)
+ ========================================================
+ 
+ This package provides subprograms that allow interfacing between C
+ streams and ‘Wide_Wide_Text_IO’.  The stream identifier can be extracted
+ from a file opened on the Ada side, and an Ada file can be constructed
+ from a stream opened on the C side.
+ 
+ 
+ File: gnat_rm.info,  Node: Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads,  Next: GNAT Altivec g-altive ads,  Prev: Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads,  Up: The GNAT Library
+ 
+ 12.27 ‘Ada.Wide_Wide_Text_IO.Reset_Standard_Files’ (‘a-zrstfi.ads’)
+ ===================================================================
+ 
+ This procedure is used to reset the status of the standard files used by
+ Ada.Wide_Wide_Text_IO. This is useful in a situation (such as a restart
+ in an embedded application) where the status of the files may change
+ during execution (for example a standard input file may be redefined to
+ be interactive).
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Altivec g-altive ads,  Next: GNAT Altivec Conversions g-altcon ads,  Prev: Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads,  Up: The GNAT Library
+ 
+ 12.28 ‘GNAT.Altivec’ (‘g-altive.ads’)
+ =====================================
+ 
+ This is the root package of the GNAT AltiVec binding.  It provides
+ definitions of constants and types common to all the versions of the
+ binding.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Altivec Conversions g-altcon ads,  Next: GNAT Altivec Vector_Operations g-alveop ads,  Prev: GNAT Altivec g-altive ads,  Up: The GNAT Library
+ 
+ 12.29 ‘GNAT.Altivec.Conversions’ (‘g-altcon.ads’)
+ =================================================
+ 
+ This package provides the Vector/View conversion routines.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Altivec Vector_Operations g-alveop ads,  Next: GNAT Altivec Vector_Types g-alvety ads,  Prev: GNAT Altivec Conversions g-altcon ads,  Up: The GNAT Library
+ 
+ 12.30 ‘GNAT.Altivec.Vector_Operations’ (‘g-alveop.ads’)
+ =======================================================
+ 
+ This package exposes the Ada interface to the AltiVec operations on
+ vector objects.  A soft emulation is included by default in the GNAT
+ library.  The hard binding is provided as a separate package.  This unit
+ is common to both bindings.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Altivec Vector_Types g-alvety ads,  Next: GNAT Altivec Vector_Views g-alvevi ads,  Prev: GNAT Altivec Vector_Operations g-alveop ads,  Up: The GNAT Library
+ 
+ 12.31 ‘GNAT.Altivec.Vector_Types’ (‘g-alvety.ads’)
+ ==================================================
+ 
+ This package exposes the various vector types part of the Ada binding to
+ AltiVec facilities.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Altivec Vector_Views g-alvevi ads,  Next: GNAT Array_Split g-arrspl ads,  Prev: GNAT Altivec Vector_Types g-alvety ads,  Up: The GNAT Library
+ 
+ 12.32 ‘GNAT.Altivec.Vector_Views’ (‘g-alvevi.ads’)
+ ==================================================
+ 
+ This package provides public ‘View’ data types from/to which private
+ vector representations can be converted via GNAT.Altivec.Conversions.
+ This allows convenient access to individual vector elements and provides
+ a simple way to initialize vector objects.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Array_Split g-arrspl ads,  Next: GNAT AWK g-awk ads,  Prev: GNAT Altivec Vector_Views g-alvevi ads,  Up: The GNAT Library
+ 
+ 12.33 ‘GNAT.Array_Split’ (‘g-arrspl.ads’)
+ =========================================
+ 
+ Useful array-manipulation routines: given a set of separators, split an
+ array wherever the separators appear, and provide direct access to the
+ resulting slices.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT AWK g-awk ads,  Next: GNAT Binary_Search g-binsea ads,  Prev: GNAT Array_Split g-arrspl ads,  Up: The GNAT Library
+ 
+ 12.34 ‘GNAT.AWK’ (‘g-awk.ads’)
+ ==============================
+ 
+ Provides AWK-like parsing functions, with an easy interface for parsing
+ one or more files containing formatted data.  The file is viewed as a
+ database where each record is a line and a field is a data element in
+ this line.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Binary_Search g-binsea ads,  Next: GNAT Bind_Environment g-binenv ads,  Prev: GNAT AWK g-awk ads,  Up: The GNAT Library
+ 
+ 12.35 ‘GNAT.Binary_Search’ (‘g-binsea.ads’)
+ ===========================================
+ 
+ Allow binary search of a sorted array (or of an array-like container;
+ the generic does not reference the array directly).
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Bind_Environment g-binenv ads,  Next: GNAT Branch_Prediction g-brapre ads,  Prev: GNAT Binary_Search g-binsea ads,  Up: The GNAT Library
+ 
+ 12.36 ‘GNAT.Bind_Environment’ (‘g-binenv.ads’)
+ ==============================================
+ 
+ Provides access to key=value associations captured at bind time.  These
+ associations can be specified using the ‘-V’ binder command line switch.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Branch_Prediction g-brapre ads,  Next: GNAT Bounded_Buffers g-boubuf ads,  Prev: GNAT Bind_Environment g-binenv ads,  Up: The GNAT Library
+ 
+ 12.37 ‘GNAT.Branch_Prediction’ (‘g-brapre.ads’)
+ ===============================================
+ 
+ Provides routines giving hints to the branch predictor of the code
+ generator.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Bounded_Buffers g-boubuf ads,  Next: GNAT Bounded_Mailboxes g-boumai ads,  Prev: GNAT Branch_Prediction g-brapre ads,  Up: The GNAT Library
+ 
+ 12.38 ‘GNAT.Bounded_Buffers’ (‘g-boubuf.ads’)
+ =============================================
+ 
+ Provides a concurrent generic bounded buffer abstraction.  Instances are
+ useful directly or as parts of the implementations of other
+ abstractions, such as mailboxes.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Bounded_Mailboxes g-boumai ads,  Next: GNAT Bubble_Sort g-bubsor ads,  Prev: GNAT Bounded_Buffers g-boubuf ads,  Up: The GNAT Library
+ 
+ 12.39 ‘GNAT.Bounded_Mailboxes’ (‘g-boumai.ads’)
+ ===============================================
+ 
+ Provides a thread-safe asynchronous intertask mailbox communication
+ facility.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Bubble_Sort g-bubsor ads,  Next: GNAT Bubble_Sort_A g-busora ads,  Prev: GNAT Bounded_Mailboxes g-boumai ads,  Up: The GNAT Library
+ 
+ 12.40 ‘GNAT.Bubble_Sort’ (‘g-bubsor.ads’)
+ =========================================
+ 
+ Provides a general implementation of bubble sort usable for sorting
+ arbitrary data items.  Exchange and comparison procedures are provided
+ by passing access-to-procedure values.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Bubble_Sort_A g-busora ads,  Next: GNAT Bubble_Sort_G g-busorg ads,  Prev: GNAT Bubble_Sort g-bubsor ads,  Up: The GNAT Library
+ 
+ 12.41 ‘GNAT.Bubble_Sort_A’ (‘g-busora.ads’)
+ ===========================================
+ 
+ Provides a general implementation of bubble sort usable for sorting
+ arbitrary data items.  Move and comparison procedures are provided by
+ passing access-to-procedure values.  This is an older version, retained
+ for compatibility.  Usually ‘GNAT.Bubble_Sort’ will be preferable.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Bubble_Sort_G g-busorg ads,  Next: GNAT Byte_Order_Mark g-byorma ads,  Prev: GNAT Bubble_Sort_A g-busora ads,  Up: The GNAT Library
+ 
+ 12.42 ‘GNAT.Bubble_Sort_G’ (‘g-busorg.ads’)
+ ===========================================
+ 
+ Similar to ‘Bubble_Sort_A’ except that the move and sorting procedures
+ are provided as generic parameters, this improves efficiency, especially
+ if the procedures can be inlined, at the expense of duplicating code for
+ multiple instantiations.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Byte_Order_Mark g-byorma ads,  Next: GNAT Byte_Swapping g-bytswa ads,  Prev: GNAT Bubble_Sort_G g-busorg ads,  Up: The GNAT Library
+ 
+ 12.43 ‘GNAT.Byte_Order_Mark’ (‘g-byorma.ads’)
+ =============================================
+ 
+ Provides a routine which given a string, reads the start of the string
+ to see whether it is one of the standard byte order marks (BOM’s) which
+ signal the encoding of the string.  The routine includes detection of
+ special XML sequences for various UCS input formats.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Byte_Swapping g-bytswa ads,  Next: GNAT Calendar g-calend ads,  Prev: GNAT Byte_Order_Mark g-byorma ads,  Up: The GNAT Library
+ 
+ 12.44 ‘GNAT.Byte_Swapping’ (‘g-bytswa.ads’)
+ ===========================================
+ 
+ General routines for swapping the bytes in 2-, 4-, and 8-byte
+ quantities.  Machine-specific implementations are available in some
+ cases.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Calendar g-calend ads,  Next: GNAT Calendar Time_IO g-catiio ads,  Prev: GNAT Byte_Swapping g-bytswa ads,  Up: The GNAT Library
+ 
+ 12.45 ‘GNAT.Calendar’ (‘g-calend.ads’)
+ ======================================
+ 
+ Extends the facilities provided by ‘Ada.Calendar’ to include handling of
+ days of the week, an extended ‘Split’ and ‘Time_Of’ capability.  Also
+ provides conversion of ‘Ada.Calendar.Time’ values to and from the C
+ ‘timeval’ format.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Calendar Time_IO g-catiio ads,  Next: GNAT CRC32 g-crc32 ads,  Prev: GNAT Calendar g-calend ads,  Up: The GNAT Library
+ 
+ 12.46 ‘GNAT.Calendar.Time_IO’ (‘g-catiio.ads’)
+ ==============================================
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT CRC32 g-crc32 ads,  Next: GNAT Case_Util g-casuti ads,  Prev: GNAT Calendar Time_IO g-catiio ads,  Up: The GNAT Library
+ 
+ 12.47 ‘GNAT.CRC32’ (‘g-crc32.ads’)
+ ==================================
+ 
+ This package implements the CRC-32 algorithm.  For a full description of
+ this algorithm see ‘Computation of Cyclic Redundancy Checks via Table
+ Look-Up’, ‘Communications of the ACM’, Vol.  31 No.  8, pp.  1008-1013,
+ Aug.  1988.  Sarwate, D.V.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Case_Util g-casuti ads,  Next: GNAT CGI g-cgi ads,  Prev: GNAT CRC32 g-crc32 ads,  Up: The GNAT Library
+ 
+ 12.48 ‘GNAT.Case_Util’ (‘g-casuti.ads’)
+ =======================================
+ 
+ A set of simple routines for handling upper and lower casing of strings
+ without the overhead of the full casing tables in
+ ‘Ada.Characters.Handling’.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT CGI g-cgi ads,  Next: GNAT CGI Cookie g-cgicoo ads,  Prev: GNAT Case_Util g-casuti ads,  Up: The GNAT Library
+ 
+ 12.49 ‘GNAT.CGI’ (‘g-cgi.ads’)
+ ==============================
+ 
+ This is a package for interfacing a GNAT program with a Web server via
+ the Common Gateway Interface (CGI). Basically this package parses the
+ CGI parameters, which are a set of key/value pairs sent by the Web
+ server.  It builds a table whose index is the key and provides some
+ services to deal with this table.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT CGI Cookie g-cgicoo ads,  Next: GNAT CGI Debug g-cgideb ads,  Prev: GNAT CGI g-cgi ads,  Up: The GNAT Library
+ 
+ 12.50 ‘GNAT.CGI.Cookie’ (‘g-cgicoo.ads’)
+ ========================================
+ 
+ This is a package to interface a GNAT program with a Web server via the
+ Common Gateway Interface (CGI). It exports services to deal with Web
+ cookies (piece of information kept in the Web client software).
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT CGI Debug g-cgideb ads,  Next: GNAT Command_Line g-comlin ads,  Prev: GNAT CGI Cookie g-cgicoo ads,  Up: The GNAT Library
+ 
+ 12.51 ‘GNAT.CGI.Debug’ (‘g-cgideb.ads’)
+ =======================================
+ 
+ This is a package to help debugging CGI (Common Gateway Interface)
+ programs written in Ada.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Command_Line g-comlin ads,  Next: GNAT Compiler_Version g-comver ads,  Prev: GNAT CGI Debug g-cgideb ads,  Up: The GNAT Library
+ 
+ 12.52 ‘GNAT.Command_Line’ (‘g-comlin.ads’)
+ ==========================================
+ 
+ Provides a high level interface to ‘Ada.Command_Line’ facilities,
+ including the ability to scan for named switches with optional
+ parameters and expand file names using wildcard notations.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Compiler_Version g-comver ads,  Next: GNAT Ctrl_C g-ctrl_c ads,  Prev: GNAT Command_Line g-comlin ads,  Up: The GNAT Library
+ 
+ 12.53 ‘GNAT.Compiler_Version’ (‘g-comver.ads’)
+ ==============================================
+ 
+ Provides a routine for obtaining the version of the compiler used to
+ compile the program.  More accurately this is the version of the binder
+ used to bind the program (this will normally be the same as the version
+ of the compiler if a consistent tool set is used to compile all units of
+ a partition).
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Ctrl_C g-ctrl_c ads,  Next: GNAT Current_Exception g-curexc ads,  Prev: GNAT Compiler_Version g-comver ads,  Up: The GNAT Library
+ 
+ 12.54 ‘GNAT.Ctrl_C’ (‘g-ctrl_c.ads’)
+ ====================================
+ 
+ Provides a simple interface to handle Ctrl-C keyboard events.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Current_Exception g-curexc ads,  Next: GNAT Debug_Pools g-debpoo ads,  Prev: GNAT Ctrl_C g-ctrl_c ads,  Up: The GNAT Library
+ 
+ 12.55 ‘GNAT.Current_Exception’ (‘g-curexc.ads’)
+ ===============================================
+ 
+ Provides access to information on the current exception that has been
+ raised without the need for using the Ada 95 / Ada 2005 exception choice
+ parameter specification syntax.  This is particularly useful in
+ simulating typical facilities for obtaining information about exceptions
+ provided by Ada 83 compilers.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Debug_Pools g-debpoo ads,  Next: GNAT Debug_Utilities g-debuti ads,  Prev: GNAT Current_Exception g-curexc ads,  Up: The GNAT Library
+ 
+ 12.56 ‘GNAT.Debug_Pools’ (‘g-debpoo.ads’)
+ =========================================
+ 
+ Provides a debugging storage pools that helps tracking memory corruption
+ problems.  See ‘The GNAT Debug_Pool Facility’ section in the ‘GNAT
+ User’s Guide’.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Debug_Utilities g-debuti ads,  Next: GNAT Decode_String g-decstr ads,  Prev: GNAT Debug_Pools g-debpoo ads,  Up: The GNAT Library
+ 
+ 12.57 ‘GNAT.Debug_Utilities’ (‘g-debuti.ads’)
+ =============================================
+ 
+ Provides a few useful utilities for debugging purposes, including
+ conversion to and from string images of address values.  Supports both C
+ and Ada formats for hexadecimal literals.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Decode_String g-decstr ads,  Next: GNAT Decode_UTF8_String g-deutst ads,  Prev: GNAT Debug_Utilities g-debuti ads,  Up: The GNAT Library
+ 
+ 12.58 ‘GNAT.Decode_String’ (‘g-decstr.ads’)
+ ===========================================
+ 
+ A generic package providing routines for decoding wide character and
+ wide wide character strings encoded as sequences of 8-bit characters
+ using a specified encoding method.  Includes validation routines, and
+ also routines for stepping to next or previous encoded character in an
+ encoded string.  Useful in conjunction with Unicode character coding.
+ Note there is a preinstantiation for UTF-8.  See next entry.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Decode_UTF8_String g-deutst ads,  Next: GNAT Directory_Operations g-dirope ads,  Prev: GNAT Decode_String g-decstr ads,  Up: The GNAT Library
+ 
+ 12.59 ‘GNAT.Decode_UTF8_String’ (‘g-deutst.ads’)
+ ================================================
+ 
+ A preinstantiation of GNAT.Decode_Strings for UTF-8 encoding.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Directory_Operations g-dirope ads,  Next: GNAT Directory_Operations Iteration g-diopit ads,  Prev: GNAT Decode_UTF8_String g-deutst ads,  Up: The GNAT Library
+ 
+ 12.60 ‘GNAT.Directory_Operations’ (‘g-dirope.ads’)
+ ==================================================
+ 
+ Provides a set of routines for manipulating directories, including
+ changing the current directory, making new directories, and scanning the
+ files in a directory.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Directory_Operations Iteration g-diopit ads,  Next: GNAT Dynamic_HTables g-dynhta ads,  Prev: GNAT Directory_Operations g-dirope ads,  Up: The GNAT Library
+ 
+ 12.61 ‘GNAT.Directory_Operations.Iteration’ (‘g-diopit.ads’)
+ ============================================================
+ 
+ A child unit of GNAT.Directory_Operations providing additional
+ operations for iterating through directories.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Dynamic_HTables g-dynhta ads,  Next: GNAT Dynamic_Tables g-dyntab ads,  Prev: GNAT Directory_Operations Iteration g-diopit ads,  Up: The GNAT Library
+ 
+ 12.62 ‘GNAT.Dynamic_HTables’ (‘g-dynhta.ads’)
+ =============================================
+ 
+ A generic implementation of hash tables that can be used to hash
+ arbitrary data.  Provided in two forms, a simple form with built in hash
+ functions, and a more complex form in which the hash function is
+ supplied.
+ 
+ This package provides a facility similar to that of ‘GNAT.HTable’,
+ except that this package declares a type that can be used to define
+ dynamic instances of the hash table, while an instantiation of
+ ‘GNAT.HTable’ creates a single instance of the hash table.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Dynamic_Tables g-dyntab ads,  Next: GNAT Encode_String g-encstr ads,  Prev: GNAT Dynamic_HTables g-dynhta ads,  Up: The GNAT Library
+ 
+ 12.63 ‘GNAT.Dynamic_Tables’ (‘g-dyntab.ads’)
+ ============================================
+ 
+ A generic package providing a single dimension array abstraction where
+ the length of the array can be dynamically modified.
+ 
+ This package provides a facility similar to that of ‘GNAT.Table’, except
+ that this package declares a type that can be used to define dynamic
+ instances of the table, while an instantiation of ‘GNAT.Table’ creates a
+ single instance of the table type.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Encode_String g-encstr ads,  Next: GNAT Encode_UTF8_String g-enutst ads,  Prev: GNAT Dynamic_Tables g-dyntab ads,  Up: The GNAT Library
+ 
+ 12.64 ‘GNAT.Encode_String’ (‘g-encstr.ads’)
+ ===========================================
+ 
+ A generic package providing routines for encoding wide character and
+ wide wide character strings as sequences of 8-bit characters using a
+ specified encoding method.  Useful in conjunction with Unicode character
+ coding.  Note there is a preinstantiation for UTF-8.  See next entry.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Encode_UTF8_String g-enutst ads,  Next: GNAT Exception_Actions g-excact ads,  Prev: GNAT Encode_String g-encstr ads,  Up: The GNAT Library
+ 
+ 12.65 ‘GNAT.Encode_UTF8_String’ (‘g-enutst.ads’)
+ ================================================
+ 
+ A preinstantiation of GNAT.Encode_Strings for UTF-8 encoding.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Exception_Actions g-excact ads,  Next: GNAT Exception_Traces g-exctra ads,  Prev: GNAT Encode_UTF8_String g-enutst ads,  Up: The GNAT Library
+ 
+ 12.66 ‘GNAT.Exception_Actions’ (‘g-excact.ads’)
+ ===============================================
+ 
+ Provides callbacks when an exception is raised.  Callbacks can be
+ registered for specific exceptions, or when any exception is raised.
+ This can be used for instance to force a core dump to ease debugging.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Exception_Traces g-exctra ads,  Next: GNAT Exceptions g-except ads,  Prev: GNAT Exception_Actions g-excact ads,  Up: The GNAT Library
+ 
+ 12.67 ‘GNAT.Exception_Traces’ (‘g-exctra.ads’)
+ ==============================================
+ 
+ Provides an interface allowing to control automatic output upon
+ exception occurrences.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Exceptions g-except ads,  Next: GNAT Expect g-expect ads,  Prev: GNAT Exception_Traces g-exctra ads,  Up: The GNAT Library
+ 
+ 12.68 ‘GNAT.Exceptions’ (‘g-except.ads’)
+ ========================================
+ 
+ Normally it is not possible to raise an exception with a message from a
+ subprogram in a pure package, since the necessary types and subprograms
+ are in ‘Ada.Exceptions’ which is not a pure unit.  ‘GNAT.Exceptions’
+ provides a facility for getting around this limitation for a few
+ predefined exceptions, and for example allows raising ‘Constraint_Error’
+ with a message from a pure subprogram.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Expect g-expect ads,  Next: GNAT Expect TTY g-exptty ads,  Prev: GNAT Exceptions g-except ads,  Up: The GNAT Library
+ 
+ 12.69 ‘GNAT.Expect’ (‘g-expect.ads’)
+ ====================================
+ 
+ Provides a set of subprograms similar to what is available with the
+ standard Tcl Expect tool.  It allows you to easily spawn and communicate
+ with an external process.  You can send commands or inputs to the
+ process, and compare the output with some expected regular expression.
+ Currently ‘GNAT.Expect’ is implemented on all native GNAT ports.  It is
+ not implemented for cross ports, and in particular is not implemented
+ for VxWorks or LynxOS.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Expect TTY g-exptty ads,  Next: GNAT Float_Control g-flocon ads,  Prev: GNAT Expect g-expect ads,  Up: The GNAT Library
+ 
+ 12.70 ‘GNAT.Expect.TTY’ (‘g-exptty.ads’)
+ ========================================
+ 
+ As GNAT.Expect but using pseudo-terminal.  Currently ‘GNAT.Expect.TTY’
+ is implemented on all native GNAT ports.  It is not implemented for
+ cross ports, and in particular is not implemented for VxWorks or LynxOS.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Float_Control g-flocon ads,  Next: GNAT Formatted_String g-forstr ads,  Prev: GNAT Expect TTY g-exptty ads,  Up: The GNAT Library
+ 
+ 12.71 ‘GNAT.Float_Control’ (‘g-flocon.ads’)
+ ===========================================
+ 
+ Provides an interface for resetting the floating-point processor into
+ the mode required for correct semantic operation in Ada.  Some third
+ party library calls may cause this mode to be modified, and the Reset
+ procedure in this package can be used to reestablish the required mode.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Formatted_String g-forstr ads,  Next: GNAT Generic_Fast_Math_Functions g-gfmafu ads,  Prev: GNAT Float_Control g-flocon ads,  Up: The GNAT Library
+ 
+ 12.72 ‘GNAT.Formatted_String’ (‘g-forstr.ads’)
+ ==============================================
+ 
+ Provides support for C/C++ printf() formatted strings.  The format is
+ copied from the printf() routine and should therefore give identical
+ output.  Some generic routines are provided to be able to use types
+ derived from Integer, Float or enumerations as values for the formatted
+ string.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Generic_Fast_Math_Functions g-gfmafu ads,  Next: GNAT Heap_Sort g-heasor ads,  Prev: GNAT Formatted_String g-forstr ads,  Up: The GNAT Library
+ 
+ 12.73 ‘GNAT.Generic_Fast_Math_Functions’ (‘g-gfmafu.ads’)
+ =========================================================
+ 
+ Provides direct access to the underlying implementation of the common
+ mathematical functions, generally from the system mathematical library.
+ This differs from ‘Ada.Numerics.Generic_Elementary_Functions’ in that
+ the implementation may deviate from the semantics specified for these
+ functions in the Reference Manual, for example ‘Numerics.Argument_Error’
+ is not raised.  On selected platforms, some of these functions may also
+ have a vector implementation that can be automatically used by the
+ compiler when auto-vectorization is enabled.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Heap_Sort g-heasor ads,  Next: GNAT Heap_Sort_A g-hesora ads,  Prev: GNAT Generic_Fast_Math_Functions g-gfmafu ads,  Up: The GNAT Library
+ 
+ 12.74 ‘GNAT.Heap_Sort’ (‘g-heasor.ads’)
+ =======================================
+ 
+ Provides a general implementation of heap sort usable for sorting
+ arbitrary data items.  Exchange and comparison procedures are provided
+ by passing access-to-procedure values.  The algorithm used is a modified
+ heap sort that performs approximately N*log(N) comparisons in the worst
+ case.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Heap_Sort_A g-hesora ads,  Next: GNAT Heap_Sort_G g-hesorg ads,  Prev: GNAT Heap_Sort g-heasor ads,  Up: The GNAT Library
+ 
+ 12.75 ‘GNAT.Heap_Sort_A’ (‘g-hesora.ads’)
+ =========================================
+ 
+ Provides a general implementation of heap sort usable for sorting
+ arbitrary data items.  Move and comparison procedures are provided by
+ passing access-to-procedure values.  The algorithm used is a modified
+ heap sort that performs approximately N*log(N) comparisons in the worst
+ case.  This differs from ‘GNAT.Heap_Sort’ in having a less convenient
+ interface, but may be slightly more efficient.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Heap_Sort_G g-hesorg ads,  Next: GNAT HTable g-htable ads,  Prev: GNAT Heap_Sort_A g-hesora ads,  Up: The GNAT Library
+ 
+ 12.76 ‘GNAT.Heap_Sort_G’ (‘g-hesorg.ads’)
+ =========================================
+ 
+ Similar to ‘Heap_Sort_A’ except that the move and sorting procedures are
+ provided as generic parameters, this improves efficiency, especially if
+ the procedures can be inlined, at the expense of duplicating code for
+ multiple instantiations.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT HTable g-htable ads,  Next: GNAT IO g-io ads,  Prev: GNAT Heap_Sort_G g-hesorg ads,  Up: The GNAT Library
+ 
+ 12.77 ‘GNAT.HTable’ (‘g-htable.ads’)
+ ====================================
+ 
+ A generic implementation of hash tables that can be used to hash
+ arbitrary data.  Provides two approaches, one a simple static approach,
+ and the other allowing arbitrary dynamic hash tables.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT IO g-io ads,  Next: GNAT IO_Aux g-io_aux ads,  Prev: GNAT HTable g-htable ads,  Up: The GNAT Library
+ 
+ 12.78 ‘GNAT.IO’ (‘g-io.ads’)
+ ============================
+ 
+ A simple preelaborable input-output package that provides a subset of
+ simple Text_IO functions for reading characters and strings from
+ Standard_Input, and writing characters, strings and integers to either
+ Standard_Output or Standard_Error.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT IO_Aux g-io_aux ads,  Next: GNAT Lock_Files g-locfil ads,  Prev: GNAT IO g-io ads,  Up: The GNAT Library
+ 
+ 12.79 ‘GNAT.IO_Aux’ (‘g-io_aux.ads’)
+ ====================================
+ 
+ Provides some auxiliary functions for use with Text_IO, including a test
+ for whether a file exists, and functions for reading a line of text.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Lock_Files g-locfil ads,  Next: GNAT MBBS_Discrete_Random g-mbdira ads,  Prev: GNAT IO_Aux g-io_aux ads,  Up: The GNAT Library
+ 
+ 12.80 ‘GNAT.Lock_Files’ (‘g-locfil.ads’)
+ ========================================
+ 
+ Provides a general interface for using files as locks.  Can be used for
+ providing program level synchronization.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT MBBS_Discrete_Random g-mbdira ads,  Next: GNAT MBBS_Float_Random g-mbflra ads,  Prev: GNAT Lock_Files g-locfil ads,  Up: The GNAT Library
+ 
+ 12.81 ‘GNAT.MBBS_Discrete_Random’ (‘g-mbdira.ads’)
+ ==================================================
+ 
+ The original implementation of ‘Ada.Numerics.Discrete_Random’.  Uses a
+ modified version of the Blum-Blum-Shub generator.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT MBBS_Float_Random g-mbflra ads,  Next: GNAT MD5 g-md5 ads,  Prev: GNAT MBBS_Discrete_Random g-mbdira ads,  Up: The GNAT Library
+ 
+ 12.82 ‘GNAT.MBBS_Float_Random’ (‘g-mbflra.ads’)
+ ===============================================
+ 
+ The original implementation of ‘Ada.Numerics.Float_Random’.  Uses a
+ modified version of the Blum-Blum-Shub generator.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT MD5 g-md5 ads,  Next: GNAT Memory_Dump g-memdum ads,  Prev: GNAT MBBS_Float_Random g-mbflra ads,  Up: The GNAT Library
+ 
+ 12.83 ‘GNAT.MD5’ (‘g-md5.ads’)
+ ==============================
+ 
+ Implements the MD5 Message-Digest Algorithm as described in RFC 1321,
+ and the HMAC-MD5 message authentication function as described in RFC
+ 2104 and FIPS PUB 198.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Memory_Dump g-memdum ads,  Next: GNAT Most_Recent_Exception g-moreex ads,  Prev: GNAT MD5 g-md5 ads,  Up: The GNAT Library
+ 
+ 12.84 ‘GNAT.Memory_Dump’ (‘g-memdum.ads’)
+ =========================================
+ 
+ Provides a convenient routine for dumping raw memory to either the
+ standard output or standard error files.  Uses GNAT.IO for actual
+ output.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Most_Recent_Exception g-moreex ads,  Next: GNAT OS_Lib g-os_lib ads,  Prev: GNAT Memory_Dump g-memdum ads,  Up: The GNAT Library
+ 
+ 12.85 ‘GNAT.Most_Recent_Exception’ (‘g-moreex.ads’)
+ ===================================================
+ 
+ Provides access to the most recently raised exception.  Can be used for
+ various logging purposes, including duplicating functionality of some
+ Ada 83 implementation dependent extensions.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT OS_Lib g-os_lib ads,  Next: GNAT Perfect_Hash_Generators g-pehage ads,  Prev: GNAT Most_Recent_Exception g-moreex ads,  Up: The GNAT Library
+ 
+ 12.86 ‘GNAT.OS_Lib’ (‘g-os_lib.ads’)
+ ====================================
+ 
+ Provides a range of target independent operating system interface
+ functions, including time/date management, file operations, subprocess
+ management, including a portable spawn procedure, and access to
+ environment variables and error return codes.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Perfect_Hash_Generators g-pehage ads,  Next: GNAT Random_Numbers g-rannum ads,  Prev: GNAT OS_Lib g-os_lib ads,  Up: The GNAT Library
+ 
+ 12.87 ‘GNAT.Perfect_Hash_Generators’ (‘g-pehage.ads’)
+ =====================================================
+ 
+ Provides a generator of static minimal perfect hash functions.  No
+ collisions occur and each item can be retrieved from the table in one
+ probe (perfect property).  The hash table size corresponds to the exact
+ size of the key set and no larger (minimal property).  The key set has
+ to be known in advance (static property).  The hash functions are also
+ order preserving.  If w2 is inserted after w1 in the generator, their
+ hashcode are in the same order.  These hashing functions are very
+ convenient for use with realtime applications.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Random_Numbers g-rannum ads,  Next: GNAT Regexp g-regexp ads,  Prev: GNAT Perfect_Hash_Generators g-pehage ads,  Up: The GNAT Library
+ 
+ 12.88 ‘GNAT.Random_Numbers’ (‘g-rannum.ads’)
+ ============================================
+ 
+ Provides random number capabilities which extend those available in the
+ standard Ada library and are more convenient to use.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Regexp g-regexp ads,  Next: GNAT Registry g-regist ads,  Prev: GNAT Random_Numbers g-rannum ads,  Up: The GNAT Library
+ 
+ 12.89 ‘GNAT.Regexp’ (‘g-regexp.ads’)
+ ====================================
+ 
+ A simple implementation of regular expressions, using a subset of
+ regular expression syntax copied from familiar Unix style utilities.
+ This is the simplest of the three pattern matching packages provided,
+ and is particularly suitable for ‘file globbing’ applications.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Registry g-regist ads,  Next: GNAT Regpat g-regpat ads,  Prev: GNAT Regexp g-regexp ads,  Up: The GNAT Library
+ 
+ 12.90 ‘GNAT.Registry’ (‘g-regist.ads’)
+ ======================================
+ 
+ This is a high level binding to the Windows registry.  It is possible to
+ do simple things like reading a key value, creating a new key.  For full
+ registry API, but at a lower level of abstraction, refer to the
+ Win32.Winreg package provided with the Win32Ada binding
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Regpat g-regpat ads,  Next: GNAT Rewrite_Data g-rewdat ads,  Prev: GNAT Registry g-regist ads,  Up: The GNAT Library
+ 
+ 12.91 ‘GNAT.Regpat’ (‘g-regpat.ads’)
+ ====================================
+ 
+ A complete implementation of Unix-style regular expression matching,
+ copied from the original V7 style regular expression library written in
+ C by Henry Spencer (and binary compatible with this C library).
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Rewrite_Data g-rewdat ads,  Next: GNAT Secondary_Stack_Info g-sestin ads,  Prev: GNAT Regpat g-regpat ads,  Up: The GNAT Library
+ 
+ 12.92 ‘GNAT.Rewrite_Data’ (‘g-rewdat.ads’)
+ ==========================================
+ 
+ A unit to rewrite on-the-fly string occurrences in a stream of data.
+ The implementation has a very minimal memory footprint as the full
+ content to be processed is not loaded into memory all at once.  This
+ makes this interface usable for large files or socket streams.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Secondary_Stack_Info g-sestin ads,  Next: GNAT Semaphores g-semaph ads,  Prev: GNAT Rewrite_Data g-rewdat ads,  Up: The GNAT Library
+ 
+ 12.93 ‘GNAT.Secondary_Stack_Info’ (‘g-sestin.ads’)
+ ==================================================
+ 
+ Provides the capability to query the high water mark of the current
+ task’s secondary stack.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Semaphores g-semaph ads,  Next: GNAT Serial_Communications g-sercom ads,  Prev: GNAT Secondary_Stack_Info g-sestin ads,  Up: The GNAT Library
+ 
+ 12.94 ‘GNAT.Semaphores’ (‘g-semaph.ads’)
+ ========================================
+ 
+ Provides classic counting and binary semaphores using protected types.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Serial_Communications g-sercom ads,  Next: GNAT SHA1 g-sha1 ads,  Prev: GNAT Semaphores g-semaph ads,  Up: The GNAT Library
+ 
+ 12.95 ‘GNAT.Serial_Communications’ (‘g-sercom.ads’)
+ ===================================================
+ 
+ Provides a simple interface to send and receive data over a serial port.
+ This is only supported on GNU/Linux and Windows.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT SHA1 g-sha1 ads,  Next: GNAT SHA224 g-sha224 ads,  Prev: GNAT Serial_Communications g-sercom ads,  Up: The GNAT Library
+ 
+ 12.96 ‘GNAT.SHA1’ (‘g-sha1.ads’)
+ ================================
+ 
+ Implements the SHA-1 Secure Hash Algorithm as described in FIPS PUB
+ 180-3 and RFC 3174, and the HMAC-SHA1 message authentication function as
+ described in RFC 2104 and FIPS PUB 198.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT SHA224 g-sha224 ads,  Next: GNAT SHA256 g-sha256 ads,  Prev: GNAT SHA1 g-sha1 ads,  Up: The GNAT Library
+ 
+ 12.97 ‘GNAT.SHA224’ (‘g-sha224.ads’)
+ ====================================
+ 
+ Implements the SHA-224 Secure Hash Algorithm as described in FIPS PUB
+ 180-3, and the HMAC-SHA224 message authentication function as described
+ in RFC 2104 and FIPS PUB 198.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT SHA256 g-sha256 ads,  Next: GNAT SHA384 g-sha384 ads,  Prev: GNAT SHA224 g-sha224 ads,  Up: The GNAT Library
+ 
+ 12.98 ‘GNAT.SHA256’ (‘g-sha256.ads’)
+ ====================================
+ 
+ Implements the SHA-256 Secure Hash Algorithm as described in FIPS PUB
+ 180-3, and the HMAC-SHA256 message authentication function as described
+ in RFC 2104 and FIPS PUB 198.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT SHA384 g-sha384 ads,  Next: GNAT SHA512 g-sha512 ads,  Prev: GNAT SHA256 g-sha256 ads,  Up: The GNAT Library
+ 
+ 12.99 ‘GNAT.SHA384’ (‘g-sha384.ads’)
+ ====================================
+ 
+ Implements the SHA-384 Secure Hash Algorithm as described in FIPS PUB
+ 180-3, and the HMAC-SHA384 message authentication function as described
+ in RFC 2104 and FIPS PUB 198.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT SHA512 g-sha512 ads,  Next: GNAT Signals g-signal ads,  Prev: GNAT SHA384 g-sha384 ads,  Up: The GNAT Library
+ 
+ 12.100 ‘GNAT.SHA512’ (‘g-sha512.ads’)
+ =====================================
+ 
+ Implements the SHA-512 Secure Hash Algorithm as described in FIPS PUB
+ 180-3, and the HMAC-SHA512 message authentication function as described
+ in RFC 2104 and FIPS PUB 198.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Signals g-signal ads,  Next: GNAT Sockets g-socket ads,  Prev: GNAT SHA512 g-sha512 ads,  Up: The GNAT Library
+ 
+ 12.101 ‘GNAT.Signals’ (‘g-signal.ads’)
+ ======================================
+ 
+ Provides the ability to manipulate the blocked status of signals on
+ supported targets.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Sockets g-socket ads,  Next: GNAT Source_Info g-souinf ads,  Prev: GNAT Signals g-signal ads,  Up: The GNAT Library
+ 
+ 12.102 ‘GNAT.Sockets’ (‘g-socket.ads’)
+ ======================================
+ 
+ A high level and portable interface to develop sockets based
+ applications.  This package is based on the sockets thin binding found
+ in ‘GNAT.Sockets.Thin’.  Currently ‘GNAT.Sockets’ is implemented on all
+ native GNAT ports and on VxWorks cross ports.  It is not implemented for
+ the LynxOS cross port.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Source_Info g-souinf ads,  Next: GNAT Spelling_Checker g-speche ads,  Prev: GNAT Sockets g-socket ads,  Up: The GNAT Library
+ 
+ 12.103 ‘GNAT.Source_Info’ (‘g-souinf.ads’)
+ ==========================================
+ 
+ Provides subprograms that give access to source code information known
+ at compile time, such as the current file name and line number.  Also
+ provides subprograms yielding the date and time of the current
+ compilation (like the C macros ‘__DATE__’ and ‘__TIME__’)
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Spelling_Checker g-speche ads,  Next: GNAT Spelling_Checker_Generic g-spchge ads,  Prev: GNAT Source_Info g-souinf ads,  Up: The GNAT Library
+ 
+ 12.104 ‘GNAT.Spelling_Checker’ (‘g-speche.ads’)
+ ===============================================
+ 
+ Provides a function for determining whether one string is a plausible
+ near misspelling of another string.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Spelling_Checker_Generic g-spchge ads,  Next: GNAT Spitbol Patterns g-spipat ads,  Prev: GNAT Spelling_Checker g-speche ads,  Up: The GNAT Library
+ 
+ 12.105 ‘GNAT.Spelling_Checker_Generic’ (‘g-spchge.ads’)
+ =======================================================
+ 
+ Provides a generic function that can be instantiated with a string type
+ for determining whether one string is a plausible near misspelling of
+ another string.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Spitbol Patterns g-spipat ads,  Next: GNAT Spitbol g-spitbo ads,  Prev: GNAT Spelling_Checker_Generic g-spchge ads,  Up: The GNAT Library
+ 
+ 12.106 ‘GNAT.Spitbol.Patterns’ (‘g-spipat.ads’)
+ ===============================================
+ 
+ A complete implementation of SNOBOL4 style pattern matching.  This is
+ the most elaborate of the pattern matching packages provided.  It fully
+ duplicates the SNOBOL4 dynamic pattern construction and matching
+ capabilities, using the efficient algorithm developed by Robert Dewar
+ for the SPITBOL system.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Spitbol g-spitbo ads,  Next: GNAT Spitbol Table_Boolean g-sptabo ads,  Prev: GNAT Spitbol Patterns g-spipat ads,  Up: The GNAT Library
+ 
+ 12.107 ‘GNAT.Spitbol’ (‘g-spitbo.ads’)
+ ======================================
+ 
+ The top level package of the collection of SPITBOL-style functionality,
+ this package provides basic SNOBOL4 string manipulation functions, such
+ as Pad, Reverse, Trim, Substr capability, as well as a generic table
+ function useful for constructing arbitrary mappings from strings in the
+ style of the SNOBOL4 TABLE function.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Spitbol Table_Boolean g-sptabo ads,  Next: GNAT Spitbol Table_Integer g-sptain ads,  Prev: GNAT Spitbol g-spitbo ads,  Up: The GNAT Library
+ 
+ 12.108 ‘GNAT.Spitbol.Table_Boolean’ (‘g-sptabo.ads’)
+ ====================================================
+ 
+ A library level of instantiation of ‘GNAT.Spitbol.Patterns.Table’ for
+ type ‘Standard.Boolean’, giving an implementation of sets of string
+ values.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Spitbol Table_Integer g-sptain ads,  Next: GNAT Spitbol Table_VString g-sptavs ads,  Prev: GNAT Spitbol Table_Boolean g-sptabo ads,  Up: The GNAT Library
+ 
+ 12.109 ‘GNAT.Spitbol.Table_Integer’ (‘g-sptain.ads’)
+ ====================================================
+ 
+ A library level of instantiation of ‘GNAT.Spitbol.Patterns.Table’ for
+ type ‘Standard.Integer’, giving an implementation of maps from string to
+ integer values.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Spitbol Table_VString g-sptavs ads,  Next: GNAT SSE g-sse ads,  Prev: GNAT Spitbol Table_Integer g-sptain ads,  Up: The GNAT Library
+ 
+ 12.110 ‘GNAT.Spitbol.Table_VString’ (‘g-sptavs.ads’)
+ ====================================================
+ 
+ A library level of instantiation of ‘GNAT.Spitbol.Patterns.Table’ for a
+ variable length string type, giving an implementation of general maps
+ from strings to strings.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT SSE g-sse ads,  Next: GNAT SSE Vector_Types g-ssvety ads,  Prev: GNAT Spitbol Table_VString g-sptavs ads,  Up: The GNAT Library
+ 
+ 12.111 ‘GNAT.SSE’ (‘g-sse.ads’)
+ ===============================
+ 
+ Root of a set of units aimed at offering Ada bindings to a subset of the
+ Intel(r) Streaming SIMD Extensions with GNAT on the x86 family of
+ targets.  It exposes vector component types together with a general
+ introduction to the binding contents and use.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT SSE Vector_Types g-ssvety ads,  Next: GNAT String_Hash g-strhas ads,  Prev: GNAT SSE g-sse ads,  Up: The GNAT Library
+ 
+ 12.112 ‘GNAT.SSE.Vector_Types’ (‘g-ssvety.ads’)
+ ===============================================
+ 
+ SSE vector types for use with SSE related intrinsics.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT String_Hash g-strhas ads,  Next: GNAT Strings g-string ads,  Prev: GNAT SSE Vector_Types g-ssvety ads,  Up: The GNAT Library
+ 
+ 12.113 ‘GNAT.String_Hash’ (‘g-strhas.ads’)
+ ==========================================
+ 
+ Provides a generic hash function working on arrays of scalars.  Both the
+ scalar type and the hash result type are parameters.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Strings g-string ads,  Next: GNAT String_Split g-strspl ads,  Prev: GNAT String_Hash g-strhas ads,  Up: The GNAT Library
+ 
+ 12.114 ‘GNAT.Strings’ (‘g-string.ads’)
+ ======================================
+ 
+ Common String access types and related subprograms.  Basically it
+ defines a string access and an array of string access types.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT String_Split g-strspl ads,  Next: GNAT Table g-table ads,  Prev: GNAT Strings g-string ads,  Up: The GNAT Library
+ 
+ 12.115 ‘GNAT.String_Split’ (‘g-strspl.ads’)
+ ===========================================
+ 
+ Useful string manipulation routines: given a set of separators, split a
+ string wherever the separators appear, and provide direct access to the
+ resulting slices.  This package is instantiated from ‘GNAT.Array_Split’.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Table g-table ads,  Next: GNAT Task_Lock g-tasloc ads,  Prev: GNAT String_Split g-strspl ads,  Up: The GNAT Library
+ 
+ 12.116 ‘GNAT.Table’ (‘g-table.ads’)
+ ===================================
+ 
+ A generic package providing a single dimension array abstraction where
+ the length of the array can be dynamically modified.
+ 
+ This package provides a facility similar to that of
+ ‘GNAT.Dynamic_Tables’, except that this package declares a single
+ instance of the table type, while an instantiation of
+ ‘GNAT.Dynamic_Tables’ creates a type that can be used to define dynamic
+ instances of the table.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Task_Lock g-tasloc ads,  Next: GNAT Time_Stamp g-timsta ads,  Prev: GNAT Table g-table ads,  Up: The GNAT Library
+ 
+ 12.117 ‘GNAT.Task_Lock’ (‘g-tasloc.ads’)
+ ========================================
+ 
+ A very simple facility for locking and unlocking sections of code using
+ a single global task lock.  Appropriate for use in situations where
+ contention between tasks is very rarely expected.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Time_Stamp g-timsta ads,  Next: GNAT Threads g-thread ads,  Prev: GNAT Task_Lock g-tasloc ads,  Up: The GNAT Library
+ 
+ 12.118 ‘GNAT.Time_Stamp’ (‘g-timsta.ads’)
+ =========================================
+ 
+ Provides a simple function that returns a string YYYY-MM-DD HH:MM:SS.SS
+ that represents the current date and time in ISO 8601 format.  This is a
+ very simple routine with minimal code and there are no dependencies on
+ any other unit.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Threads g-thread ads,  Next: GNAT Traceback g-traceb ads,  Prev: GNAT Time_Stamp g-timsta ads,  Up: The GNAT Library
+ 
+ 12.119 ‘GNAT.Threads’ (‘g-thread.ads’)
+ ======================================
+ 
+ Provides facilities for dealing with foreign threads which need to be
+ known by the GNAT run-time system.  Consult the documentation of this
+ package for further details if your program has threads that are created
+ by a non-Ada environment which then accesses Ada code.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Traceback g-traceb ads,  Next: GNAT Traceback Symbolic g-trasym ads,  Prev: GNAT Threads g-thread ads,  Up: The GNAT Library
+ 
+ 12.120 ‘GNAT.Traceback’ (‘g-traceb.ads’)
+ ========================================
+ 
+ Provides a facility for obtaining non-symbolic traceback information,
+ useful in various debugging situations.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Traceback Symbolic g-trasym ads,  Next: GNAT UTF_32 g-utf_32 ads,  Prev: GNAT Traceback g-traceb ads,  Up: The GNAT Library
+ 
+ 12.121 ‘GNAT.Traceback.Symbolic’ (‘g-trasym.ads’)
+ =================================================
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT UTF_32 g-utf_32 ads,  Next: GNAT UTF_32_Spelling_Checker g-u3spch ads,  Prev: GNAT Traceback Symbolic g-trasym ads,  Up: The GNAT Library
+ 
+ 12.122 ‘GNAT.UTF_32’ (‘g-utf_32.ads’)
+ =====================================
+ 
+ This is a package intended to be used in conjunction with the
+ ‘Wide_Character’ type in Ada 95 and the ‘Wide_Wide_Character’ type in
+ Ada 2005 (available in ‘GNAT’ in Ada 2005 mode).  This package contains
+ Unicode categorization routines, as well as lexical categorization
+ routines corresponding to the Ada 2005 lexical rules for identifiers and
+ strings, and also a lower case to upper case fold routine corresponding
+ to the Ada 2005 rules for identifier equivalence.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT UTF_32_Spelling_Checker g-u3spch ads,  Next: GNAT Wide_Spelling_Checker g-wispch ads,  Prev: GNAT UTF_32 g-utf_32 ads,  Up: The GNAT Library
+ 
+ 12.123 ‘GNAT.UTF_32_Spelling_Checker’ (‘g-u3spch.ads’)
+ ======================================================
+ 
+ Provides a function for determining whether one wide wide string is a
+ plausible near misspelling of another wide wide string, where the
+ strings are represented using the UTF_32_String type defined in
+ System.Wch_Cnv.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Wide_Spelling_Checker g-wispch ads,  Next: GNAT Wide_String_Split g-wistsp ads,  Prev: GNAT UTF_32_Spelling_Checker g-u3spch ads,  Up: The GNAT Library
+ 
+ 12.124 ‘GNAT.Wide_Spelling_Checker’ (‘g-wispch.ads’)
+ ====================================================
+ 
+ Provides a function for determining whether one wide string is a
+ plausible near misspelling of another wide string.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Wide_String_Split g-wistsp ads,  Next: GNAT Wide_Wide_Spelling_Checker g-zspche ads,  Prev: GNAT Wide_Spelling_Checker g-wispch ads,  Up: The GNAT Library
+ 
+ 12.125 ‘GNAT.Wide_String_Split’ (‘g-wistsp.ads’)
+ ================================================
+ 
+ Useful wide string manipulation routines: given a set of separators,
+ split a wide string wherever the separators appear, and provide direct
+ access to the resulting slices.  This package is instantiated from
+ ‘GNAT.Array_Split’.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Wide_Wide_Spelling_Checker g-zspche ads,  Next: GNAT Wide_Wide_String_Split g-zistsp ads,  Prev: GNAT Wide_String_Split g-wistsp ads,  Up: The GNAT Library
+ 
+ 12.126 ‘GNAT.Wide_Wide_Spelling_Checker’ (‘g-zspche.ads’)
+ =========================================================
+ 
+ Provides a function for determining whether one wide wide string is a
+ plausible near misspelling of another wide wide string.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Wide_Wide_String_Split g-zistsp ads,  Next: Interfaces C Extensions i-cexten ads,  Prev: GNAT Wide_Wide_Spelling_Checker g-zspche ads,  Up: The GNAT Library
+ 
+ 12.127 ‘GNAT.Wide_Wide_String_Split’ (‘g-zistsp.ads’)
+ =====================================================
+ 
+ Useful wide wide string manipulation routines: given a set of
+ separators, split a wide wide string wherever the separators appear, and
+ provide direct access to the resulting slices.  This package is
+ instantiated from ‘GNAT.Array_Split’.
+ 
+ 
+ File: gnat_rm.info,  Node: Interfaces C Extensions i-cexten ads,  Next: Interfaces C Streams i-cstrea ads,  Prev: GNAT Wide_Wide_String_Split g-zistsp ads,  Up: The GNAT Library
+ 
+ 12.128 ‘Interfaces.C.Extensions’ (‘i-cexten.ads’)
+ =================================================
+ 
+ This package contains additional C-related definitions, intended for use
+ with either manually or automatically generated bindings to C libraries.
+ 
+ 
+ File: gnat_rm.info,  Node: Interfaces C Streams i-cstrea ads,  Next: Interfaces Packed_Decimal i-pacdec ads,  Prev: Interfaces C Extensions i-cexten ads,  Up: The GNAT Library
+ 
+ 12.129 ‘Interfaces.C.Streams’ (‘i-cstrea.ads’)
+ ==============================================
+ 
+ This package is a binding for the most commonly used operations on C
+ streams.
+ 
+ 
+ File: gnat_rm.info,  Node: Interfaces Packed_Decimal i-pacdec ads,  Next: Interfaces VxWorks i-vxwork ads,  Prev: Interfaces C Streams i-cstrea ads,  Up: The GNAT Library
+ 
+ 12.130 ‘Interfaces.Packed_Decimal’ (‘i-pacdec.ads’)
+ ===================================================
+ 
+ This package provides a set of routines for conversions to and from a
+ packed decimal format compatible with that used on IBM mainframes.
+ 
+ 
+ File: gnat_rm.info,  Node: Interfaces VxWorks i-vxwork ads,  Next: Interfaces VxWorks Int_Connection i-vxinco ads,  Prev: Interfaces Packed_Decimal i-pacdec ads,  Up: The GNAT Library
+ 
+ 12.131 ‘Interfaces.VxWorks’ (‘i-vxwork.ads’)
+ ============================================
+ 
+ This package provides a limited binding to the VxWorks API. In
+ particular, it interfaces with the VxWorks hardware interrupt
+ facilities.
+ 
+ 
+ File: gnat_rm.info,  Node: Interfaces VxWorks Int_Connection i-vxinco ads,  Next: Interfaces VxWorks IO i-vxwoio ads,  Prev: Interfaces VxWorks i-vxwork ads,  Up: The GNAT Library
+ 
+ 12.132 ‘Interfaces.VxWorks.Int_Connection’ (‘i-vxinco.ads’)
+ ===========================================================
+ 
+ This package provides a way for users to replace the use of intConnect()
+ with a custom routine for installing interrupt handlers.
+ 
+ 
+ File: gnat_rm.info,  Node: Interfaces VxWorks IO i-vxwoio ads,  Next: System Address_Image s-addima ads,  Prev: Interfaces VxWorks Int_Connection i-vxinco ads,  Up: The GNAT Library
+ 
+ 12.133 ‘Interfaces.VxWorks.IO’ (‘i-vxwoio.ads’)
+ ===============================================
+ 
+ This package provides a binding to the ioctl (IO/Control) function of
+ VxWorks, defining a set of option values and function codes.  A
+ particular use of this package is to enable the use of Get_Immediate
+ under VxWorks.
+ 
+ 
+ File: gnat_rm.info,  Node: System Address_Image s-addima ads,  Next: System Assertions s-assert ads,  Prev: Interfaces VxWorks IO i-vxwoio ads,  Up: The GNAT Library
+ 
+ 12.134 ‘System.Address_Image’ (‘s-addima.ads’)
+ ==============================================
+ 
+ This function provides a useful debugging function that gives an
+ (implementation dependent) string which identifies an address.
+ 
+ 
+ File: gnat_rm.info,  Node: System Assertions s-assert ads,  Next: System Atomic_Counters s-atocou ads,  Prev: System Address_Image s-addima ads,  Up: The GNAT Library
+ 
+ 12.135 ‘System.Assertions’ (‘s-assert.ads’)
+ ===========================================
+ 
+ This package provides the declaration of the exception raised by an
+ run-time assertion failure, as well as the routine that is used
+ internally to raise this assertion.
+ 
+ 
+ File: gnat_rm.info,  Node: System Atomic_Counters s-atocou ads,  Next: System Memory s-memory ads,  Prev: System Assertions s-assert ads,  Up: The GNAT Library
+ 
+ 12.136 ‘System.Atomic_Counters’ (‘s-atocou.ads’)
+ ================================================
+ 
+ This package provides the declaration of an atomic counter type,
+ together with efficient routines (using hardware synchronization
+ primitives) for incrementing, decrementing, and testing of these
+ counters.  This package is implemented on most targets, including all
+ Alpha, AARCH64, ARM, ia64, PowerPC, SPARC V9, x86, and x86_64 platforms.
+ 
+ 
+ File: gnat_rm.info,  Node: System Memory s-memory ads,  Next: System Multiprocessors s-multip ads,  Prev: System Atomic_Counters s-atocou ads,  Up: The GNAT Library
+ 
+ 12.137 ‘System.Memory’ (‘s-memory.ads’)
+ =======================================
+ 
+ This package provides the interface to the low level routines used by
+ the generated code for allocation and freeing storage for the default
+ storage pool (analogous to the C routines malloc and free).  It also
+ provides a reallocation interface analogous to the C routine realloc.
+ The body of this unit may be modified to provide alternative allocation
+ mechanisms for the default pool, and in addition, direct calls to this
+ unit may be made for low level allocation uses (for example see the body
+ of ‘GNAT.Tables’).
+ 
+ 
+ File: gnat_rm.info,  Node: System Multiprocessors s-multip ads,  Next: System Multiprocessors Dispatching_Domains s-mudido ads,  Prev: System Memory s-memory ads,  Up: The GNAT Library
+ 
+ 12.138 ‘System.Multiprocessors’ (‘s-multip.ads’)
+ ================================================
+ 
+ This is an Ada 2012 unit defined in the Ada 2012 Reference Manual, but
+ in GNAT we also make it available in Ada 95 and Ada 2005 (where it is
+ technically an implementation-defined addition).
+ 
+ 
+ File: gnat_rm.info,  Node: System Multiprocessors Dispatching_Domains s-mudido ads,  Next: System Partition_Interface s-parint ads,  Prev: System Multiprocessors s-multip ads,  Up: The GNAT Library
+ 
+ 12.139 ‘System.Multiprocessors.Dispatching_Domains’ (‘s-mudido.ads’)
+ ====================================================================
+ 
+ This is an Ada 2012 unit defined in the Ada 2012 Reference Manual, but
+ in GNAT we also make it available in Ada 95 and Ada 2005 (where it is
+ technically an implementation-defined addition).
+ 
+ 
+ File: gnat_rm.info,  Node: System Partition_Interface s-parint ads,  Next: System Pool_Global s-pooglo ads,  Prev: System Multiprocessors Dispatching_Domains s-mudido ads,  Up: The GNAT Library
+ 
+ 12.140 ‘System.Partition_Interface’ (‘s-parint.ads’)
+ ====================================================
+ 
+ This package provides facilities for partition interfacing.  It is used
+ primarily in a distribution context when using Annex E with ‘GLADE’.
+ 
+ 
+ File: gnat_rm.info,  Node: System Pool_Global s-pooglo ads,  Next: System Pool_Local s-pooloc ads,  Prev: System Partition_Interface s-parint ads,  Up: The GNAT Library
+ 
+ 12.141 ‘System.Pool_Global’ (‘s-pooglo.ads’)
+ ============================================
+ 
+ This package provides a storage pool that is equivalent to the default
+ storage pool used for access types for which no pool is specifically
+ declared.  It uses malloc/free to allocate/free and does not attempt to
+ do any automatic reclamation.
+ 
+ 
+ File: gnat_rm.info,  Node: System Pool_Local s-pooloc ads,  Next: System Restrictions s-restri ads,  Prev: System Pool_Global s-pooglo ads,  Up: The GNAT Library
+ 
+ 12.142 ‘System.Pool_Local’ (‘s-pooloc.ads’)
+ ===========================================
+ 
+ This package provides a storage pool that is intended for use with
+ locally defined access types.  It uses malloc/free for allocate/free,
+ and maintains a list of allocated blocks, so that all storage allocated
+ for the pool can be freed automatically when the pool is finalized.
+ 
+ 
+ File: gnat_rm.info,  Node: System Restrictions s-restri ads,  Next: System Rident s-rident ads,  Prev: System Pool_Local s-pooloc ads,  Up: The GNAT Library
+ 
+ 12.143 ‘System.Restrictions’ (‘s-restri.ads’)
+ =============================================
+ 
+ This package provides facilities for accessing at run time the status of
+ restrictions specified at compile time for the partition.  Information
+ is available both with regard to actual restrictions specified, and with
+ regard to compiler determined information on which restrictions are
+ violated by one or more packages in the partition.
+ 
+ 
+ File: gnat_rm.info,  Node: System Rident s-rident ads,  Next: System Strings Stream_Ops s-ststop ads,  Prev: System Restrictions s-restri ads,  Up: The GNAT Library
+ 
+ 12.144 ‘System.Rident’ (‘s-rident.ads’)
+ =======================================
+ 
+ This package provides definitions of the restrictions identifiers
+ supported by GNAT, and also the format of the restrictions provided in
+ package System.Restrictions.  It is not normally necessary to ‘with’
+ this generic package since the necessary instantiation is included in
+ package System.Restrictions.
+ 
+ 
+ File: gnat_rm.info,  Node: System Strings Stream_Ops s-ststop ads,  Next: System Unsigned_Types s-unstyp ads,  Prev: System Rident s-rident ads,  Up: The GNAT Library
+ 
+ 12.145 ‘System.Strings.Stream_Ops’ (‘s-ststop.ads’)
+ ===================================================
+ 
+ This package provides a set of stream subprograms for standard string
+ types.  It is intended primarily to support implicit use of such
+ subprograms when stream attributes are applied to string types, but the
+ subprograms in this package can be used directly by application
+ programs.
+ 
+ 
+ File: gnat_rm.info,  Node: System Unsigned_Types s-unstyp ads,  Next: System Wch_Cnv s-wchcnv ads,  Prev: System Strings Stream_Ops s-ststop ads,  Up: The GNAT Library
+ 
+ 12.146 ‘System.Unsigned_Types’ (‘s-unstyp.ads’)
+ ===============================================
+ 
+ This package contains definitions of standard unsigned types that
+ correspond in size to the standard signed types declared in Standard,
+ and (unlike the types in Interfaces) have corresponding names.  It also
+ contains some related definitions for other specialized types used by
+ the compiler in connection with packed array types.
+ 
+ 
+ File: gnat_rm.info,  Node: System Wch_Cnv s-wchcnv ads,  Next: System Wch_Con s-wchcon ads,  Prev: System Unsigned_Types s-unstyp ads,  Up: The GNAT Library
+ 
+ 12.147 ‘System.Wch_Cnv’ (‘s-wchcnv.ads’)
+ ========================================
+ 
+ This package provides routines for converting between wide and wide wide
+ characters and a representation as a value of type ‘Standard.String’,
+ using a specified wide character encoding method.  It uses definitions
+ in package ‘System.Wch_Con’.
+ 
+ 
+ File: gnat_rm.info,  Node: System Wch_Con s-wchcon ads,  Prev: System Wch_Cnv s-wchcnv ads,  Up: The GNAT Library
+ 
+ 12.148 ‘System.Wch_Con’ (‘s-wchcon.ads’)
+ ========================================
+ 
+ This package provides definitions and descriptions of the various
+ methods used for encoding wide characters in ordinary strings.  These
+ definitions are used by the package ‘System.Wch_Cnv’.
+ 
+ 
+ File: gnat_rm.info,  Node: Interfacing to Other Languages,  Next: Specialized Needs Annexes,  Prev: The GNAT Library,  Up: Top
+ 
+ 13 Interfacing to Other Languages
+ *********************************
+ 
+ The facilities in Annex B of the Ada Reference Manual are fully
+ implemented in GNAT, and in addition, a full interface to C++ is
+ provided.
+ 
+ * Menu:
+ 
+ * Interfacing to C::
+ * Interfacing to C++::
+ * Interfacing to COBOL::
+ * Interfacing to Fortran::
+ * Interfacing to non-GNAT Ada code::
+ 
+ 
+ File: gnat_rm.info,  Node: Interfacing to C,  Next: Interfacing to C++,  Up: Interfacing to Other Languages
+ 
+ 13.1 Interfacing to C
+ =====================
+ 
+ Interfacing to C with GNAT can use one of two approaches:
+ 
+    * The types in the package ‘Interfaces.C’ may be used.
+ 
+    * Standard Ada types may be used directly.  This may be less portable
+      to other compilers, but will work on all GNAT compilers, which
+      guarantee correspondence between the C and Ada types.
+ 
+ Pragma ‘Convention C’ may be applied to Ada types, but mostly has no
+ effect, since this is the default.  The following table shows the
+ correspondence between Ada scalar types and the corresponding C types.
+ 
+ Ada Type                     C Type
+                              
+ ----------------------------------------------------------------------------------------------------
+                              
+ ‘Integer’                    ‘int’
+                              
+                              
+ ‘Short_Integer’              ‘short’
+                              
+                              
+ ‘Short_Short_Integer’        ‘signed char’
+                              
+                              
+ ‘Long_Integer’               ‘long’
+                              
+                              
+ ‘Long_Long_Integer’          ‘long long’
+                              
+                              
+ ‘Short_Float’                ‘float’
+                              
+                              
+ ‘Float’                      ‘float’
+                              
+                              
+ ‘Long_Float’                 ‘double’
+                              
+                              
+ ‘Long_Long_Float’            This is the longest floating-point type supported by the hardware.
+                              
+ 
+ Additionally, there are the following general correspondences between
+ Ada and C types:
+ 
+    * Ada enumeration types map to C enumeration types directly if pragma
+      ‘Convention C’ is specified, which causes them to have a length of
+      32 bits, except for boolean types which map to C99 ‘bool’ and for
+      which the length is 8 bits.  Without pragma ‘Convention C’, Ada
+      enumeration types map to 8, 16, or 32 bits (i.e., C types ‘signed
+      char’, ‘short’, ‘int’, respectively) depending on the number of
+      values passed.  This is the only case in which pragma ‘Convention
+      C’ affects the representation of an Ada type.
+ 
+    * Ada access types map to C pointers, except for the case of pointers
+      to unconstrained types in Ada, which have no direct C equivalent.
+ 
+    * Ada arrays map directly to C arrays.
+ 
+    * Ada records map directly to C structures.
+ 
+    * Packed Ada records map to C structures where all members are bit
+      fields of the length corresponding to the ‘type'Size’ value in Ada.
+ 
+ 
+ File: gnat_rm.info,  Node: Interfacing to C++,  Next: Interfacing to COBOL,  Prev: Interfacing to C,  Up: Interfacing to Other Languages
+ 
+ 13.2 Interfacing to C++
+ =======================
+ 
+ The interface to C++ makes use of the following pragmas, which are
+ primarily intended to be constructed automatically using a binding
+ generator tool, although it is possible to construct them by hand.
+ 
+ Using these pragmas it is possible to achieve complete inter-operability
+ between Ada tagged types and C++ class definitions.  See *note
+ Implementation Defined Pragmas: 7, for more details.
+ 
+ ‘pragma CPP_Class ([Entity =>] LOCAL_NAME)’
+ 
+      The argument denotes an entity in the current declarative region
+      that is declared as a tagged or untagged record type.  It indicates
+      that the type corresponds to an externally declared C++ class type,
+      and is to be laid out the same way that C++ would lay out the type.
+ 
+      Note: Pragma ‘CPP_Class’ is currently obsolete.  It is supported
+      for backward compatibility but its functionality is available using
+      pragma ‘Import’ with ‘Convention’ = ‘CPP’.
+ 
+ ‘pragma CPP_Constructor ([Entity =>] LOCAL_NAME)’
+ 
+      This pragma identifies an imported function (imported in the usual
+      way with pragma ‘Import’) as corresponding to a C++ constructor.
+ 
+ A few restrictions are placed on the use of the ‘Access’ attribute in
+ conjunction with subprograms subject to convention ‘CPP’: the attribute
+ may be used neither on primitive operations of a tagged record type with
+ convention ‘CPP’, imported or not, nor on subprograms imported with
+ pragma ‘CPP_Constructor’.
+ 
+ In addition, C++ exceptions are propagated and can be handled in an
+ ‘others’ choice of an exception handler.  The corresponding Ada
+ occurrence has no message, and the simple name of the exception identity
+ contains ‘Foreign_Exception’.  Finalization and awaiting dependent tasks
+ works properly when such foreign exceptions are propagated.
+ 
+ It is also possible to import a C++ exception using the following
+ syntax:
+ 
+      LOCAL_NAME : exception;
+      pragma Import (Cpp,
+        [Entity =>] LOCAL_NAME,
+        [External_Name =>] static_string_EXPRESSION);
+ 
+ The ‘External_Name’ is the name of the C++ RTTI symbol.  You can then
+ cover a specific C++ exception in an exception handler.
+ 
+ 
+ File: gnat_rm.info,  Node: Interfacing to COBOL,  Next: Interfacing to Fortran,  Prev: Interfacing to C++,  Up: Interfacing to Other Languages
+ 
+ 13.3 Interfacing to COBOL
+ =========================
+ 
+ Interfacing to COBOL is achieved as described in section B.4 of the Ada
+ Reference Manual.
+ 
+ 
+ File: gnat_rm.info,  Node: Interfacing to Fortran,  Next: Interfacing to non-GNAT Ada code,  Prev: Interfacing to COBOL,  Up: Interfacing to Other Languages
+ 
+ 13.4 Interfacing to Fortran
+ ===========================
+ 
+ Interfacing to Fortran is achieved as described in section B.5 of the
+ Ada Reference Manual.  The pragma ‘Convention Fortran’, applied to a
+ multi-dimensional array causes the array to be stored in column-major
+ order as required for convenient interface to Fortran.
+ 
+ 
+ File: gnat_rm.info,  Node: Interfacing to non-GNAT Ada code,  Prev: Interfacing to Fortran,  Up: Interfacing to Other Languages
+ 
+ 13.5 Interfacing to non-GNAT Ada code
+ =====================================
+ 
+ It is possible to specify the convention ‘Ada’ in a pragma ‘Import’ or
+ pragma ‘Export’.  However this refers to the calling conventions used by
+ GNAT, which may or may not be similar enough to those used by some other
+ Ada 83 / Ada 95 / Ada 2005 compiler to allow interoperation.
+ 
+ If arguments types are kept simple, and if the foreign compiler
+ generally follows system calling conventions, then it may be possible to
+ integrate files compiled by other Ada compilers, provided that the
+ elaboration issues are adequately addressed (for example by eliminating
+ the need for any load time elaboration).
+ 
+ In particular, GNAT running on VMS is designed to be highly compatible
+ with the DEC Ada 83 compiler, so this is one case in which it is
+ possible to import foreign units of this type, provided that the data
+ items passed are restricted to simple scalar values or simple record
+ types without variants, or simple array types with fixed bounds.
+ 
+ 
+ File: gnat_rm.info,  Node: Specialized Needs Annexes,  Next: Implementation of Specific Ada Features,  Prev: Interfacing to Other Languages,  Up: Top
+ 
+ 14 Specialized Needs Annexes
+ ****************************
+ 
+ Ada 95, Ada 2005, and Ada 2012 define a number of Specialized Needs
+ Annexes, which are not required in all implementations.  However, as
+ described in this chapter, GNAT implements all of these annexes:
+ 
+ ‘Systems Programming (Annex C)’
+ 
+      The Systems Programming Annex is fully implemented.
+ 
+ ‘Real-Time Systems (Annex D)’
+ 
+      The Real-Time Systems Annex is fully implemented.
+ 
+ ‘Distributed Systems (Annex E)’
+ 
+      Stub generation is fully implemented in the GNAT compiler.  In
+      addition, a complete compatible PCS is available as part of the
+      GLADE system, a separate product.  When the two products are used
+      in conjunction, this annex is fully implemented.
+ 
+ ‘Information Systems (Annex F)’
+ 
+      The Information Systems annex is fully implemented.
+ 
+ ‘Numerics (Annex G)’
+ 
+      The Numerics Annex is fully implemented.
+ 
+ ‘Safety and Security / High-Integrity Systems (Annex H)’
+ 
+      The Safety and Security Annex (termed the High-Integrity Systems
+      Annex in Ada 2005) is fully implemented.
+ 
+ 
+ File: gnat_rm.info,  Node: Implementation of Specific Ada Features,  Next: Implementation of Ada 2012 Features,  Prev: Specialized Needs Annexes,  Up: Top
+ 
+ 15 Implementation of Specific Ada Features
+ ******************************************
+ 
+ This chapter describes the GNAT implementation of several Ada language
+ facilities.
+ 
+ * Menu:
+ 
+ * Machine Code Insertions::
+ * GNAT Implementation of Tasking::
+ * GNAT Implementation of Shared Passive Packages::
+ * Code Generation for Array Aggregates::
+ * The Size of Discriminated Records with Default Discriminants::
+ * Image Values For Nonscalar Types::
+ * Strict Conformance to the Ada Reference Manual::
+ 
+ 
+ File: gnat_rm.info,  Node: Machine Code Insertions,  Next: GNAT Implementation of Tasking,  Up: Implementation of Specific Ada Features
+ 
+ 15.1 Machine Code Insertions
+ ============================
+ 
+ Package ‘Machine_Code’ provides machine code support as described in the
+ Ada Reference Manual in two separate forms:
+ 
+    * Machine code statements, consisting of qualified expressions that
+      fit the requirements of RM section 13.8.
+ 
+    * An intrinsic callable procedure, providing an alternative mechanism
+      of including machine instructions in a subprogram.
+ 
+ The two features are similar, and both are closely related to the
+ mechanism provided by the asm instruction in the GNU C compiler.  Full
+ understanding and use of the facilities in this package requires
+ understanding the asm instruction, see the section on Extended Asm in
+ ‘Using_the_GNU_Compiler_Collection_(GCC)’.
+ 
+ Calls to the function ‘Asm’ and the procedure ‘Asm’ have identical
+ semantic restrictions and effects as described below.  Both are provided
+ so that the procedure call can be used as a statement, and the function
+ call can be used to form a code_statement.
+ 
+ Consider this C ‘asm’ instruction:
+ 
+      asm ("fsinx %1 %0" : "=f" (result) : "f" (angle));
+ 
+ The equivalent can be written for GNAT as:
+ 
+      Asm ("fsinx %1 %0",
+           My_Float'Asm_Output ("=f", result),
+           My_Float'Asm_Input  ("f",  angle));
+ 
+ The first argument to ‘Asm’ is the assembler template, and is identical
+ to what is used in GNU C. This string must be a static expression.  The
+ second argument is the output operand list.  It is either a single
+ ‘Asm_Output’ attribute reference, or a list of such references enclosed
+ in parentheses (technically an array aggregate of such references).
+ 
+ The ‘Asm_Output’ attribute denotes a function that takes two parameters.
+ The first is a string, the second is the name of a variable of the type
+ designated by the attribute prefix.  The first (string) argument is
+ required to be a static expression and designates the constraint (see
+ the section on Constraints in ‘Using_the_GNU_Compiler_Collection_(GCC)’)
+ for the parameter; e.g., what kind of register is required.  The second
+ argument is the variable to be written or updated with the result.  The
+ possible values for constraint are the same as those used in 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 ‘No_Output_Operands’.  No support is
+ provided for GNU C’s symbolic names for output parameters.
+ 
+ The second argument of ‘my_float'Asm_Output’ functions as though it were
+ an ‘out’ parameter, which is a little curious, but all names have the
+ form of expressions, so there is no syntactic irregularity, even though
+ normally functions would not be permitted ‘out’ parameters.  The third
+ argument is the list of input operands.  It is either a single
+ ‘Asm_Input’ attribute reference, or a list of such references enclosed
+ in parentheses (technically an array aggregate of such references).
+ 
+ The ‘Asm_Input’ attribute denotes a function that takes two parameters.
+ The first is a string, the second is an expression of the type
+ designated by the prefix.  The first (string) argument is required to be
+ a static expression, and is the constraint for the parameter, (e.g.,
+ what kind of register is required).  The second argument is the value to
+ be used as the input argument.  The possible values for the constraint
+ are the same as those used in the RTL, and are dependent on the
+ configuration file used to built the GCC back end.  No support is
+ provided for GNU C’s symbolic names for input parameters.
+ 
+ If there are no input operands, this argument may either be omitted, or
+ explicitly given as ‘No_Input_Operands’.  The fourth argument, not
+ present in the above example, is a list of register names, called the
+ ‘clobber’ argument.  This argument, if given, must be a static string
+ expression, and is a space or comma separated list of names of registers
+ that must be considered destroyed as a result of the ‘Asm’ call.  If
+ this argument is the null string (the default value), then the code
+ generator assumes that no additional registers are destroyed.  In
+ addition to registers, the special clobbers ‘memory’ and ‘cc’ as
+ described in the GNU C docs are both supported.
+ 
+ The fifth argument, not present in the above example, called the
+ ‘volatile’ argument, is by default ‘False’.  It can be set to the
+ literal value ‘True’ to indicate to the code generator that all
+ optimizations with respect to the instruction specified should be
+ suppressed, and in particular an instruction that has outputs will still
+ be generated, even if none of the outputs are used.  See
+ ‘Using_the_GNU_Compiler_Collection_(GCC)’ for the full description.
+ Generally it is strongly advisable to use Volatile for any ASM statement
+ that is missing either input or output operands or to avoid unwanted
+ optimizations.  A warning is generated if this advice is not followed.
+ 
+ No support is provided for GNU C’s ‘asm goto’ feature.
+ 
+ The ‘Asm’ subprograms may be used in two ways.  First the procedure
+ forms can be used anywhere a procedure call would be valid, and
+ correspond to what the RM calls ‘intrinsic’ routines.  Such calls can be
+ used to intersperse machine instructions with other Ada statements.
+ Second, the function forms, which return a dummy value of the limited
+ private type ‘Asm_Insn’, can be used in code statements, and indeed this
+ is the only context where such calls are allowed.  Code statements
+ appear as aggregates of the form:
+ 
+      Asm_Insn'(Asm (...));
+      Asm_Insn'(Asm_Volatile (...));
+ 
+ In accordance with RM rules, such code statements are allowed only
+ within subprograms whose entire body consists of such statements.  It is
+ not permissible to intermix such statements with other Ada statements.
+ 
+ Typically the form using intrinsic procedure calls is more convenient
+ and more flexible.  The code statement form is provided to meet the RM
+ suggestion that such a facility should be made available.  The following
+ is the exact syntax of the call to ‘Asm’.  As usual, if named notation
+ is used, the arguments may be given in arbitrary order, following the
+ normal rules for use of positional and named arguments:
+ 
+      ASM_CALL ::= Asm (
+                       [Template =>] static_string_EXPRESSION
+                     [,[Outputs  =>] OUTPUT_OPERAND_LIST      ]
+                     [,[Inputs   =>] INPUT_OPERAND_LIST       ]
+                     [,[Clobber  =>] static_string_EXPRESSION ]
+                     [,[Volatile =>] static_boolean_EXPRESSION] )
+ 
+      OUTPUT_OPERAND_LIST ::=
+        [PREFIX.]No_Output_Operands
+      | OUTPUT_OPERAND_ATTRIBUTE
+      | (OUTPUT_OPERAND_ATTRIBUTE {,OUTPUT_OPERAND_ATTRIBUTE})
+ 
+      OUTPUT_OPERAND_ATTRIBUTE ::=
+        SUBTYPE_MARK'Asm_Output (static_string_EXPRESSION, NAME)
+ 
+      INPUT_OPERAND_LIST ::=
+        [PREFIX.]No_Input_Operands
+      | INPUT_OPERAND_ATTRIBUTE
+      | (INPUT_OPERAND_ATTRIBUTE {,INPUT_OPERAND_ATTRIBUTE})
+ 
+      INPUT_OPERAND_ATTRIBUTE ::=
+        SUBTYPE_MARK'Asm_Input (static_string_EXPRESSION, EXPRESSION)
+ 
+ The identifiers ‘No_Input_Operands’ and ‘No_Output_Operands’ are
+ declared in the package ‘Machine_Code’ and must be referenced according
+ to normal visibility rules.  In particular if there is no ‘use’ clause
+ for this package, then appropriate package name qualification is
+ required.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Implementation of Tasking,  Next: GNAT Implementation of Shared Passive Packages,  Prev: Machine Code Insertions,  Up: Implementation of Specific Ada Features
+ 
+ 15.2 GNAT Implementation of Tasking
+ ===================================
+ 
+ This chapter outlines the basic GNAT approach to tasking (in particular,
+ a multi-layered library for portability) and discusses issues related to
+ compliance with the Real-Time Systems Annex.
+ 
+ * Menu:
+ 
+ * Mapping Ada Tasks onto the Underlying Kernel Threads::
+ * Ensuring Compliance with the Real-Time Annex::
+ * Support for Locking Policies::
+ 
+ 
+ File: gnat_rm.info,  Node: Mapping Ada Tasks onto the Underlying Kernel Threads,  Next: Ensuring Compliance with the Real-Time Annex,  Up: GNAT Implementation of Tasking
+ 
+ 15.2.1 Mapping Ada Tasks onto the Underlying Kernel Threads
+ -----------------------------------------------------------
+ 
+ GNAT’s run-time support comprises two layers:
+ 
+    * GNARL (GNAT Run-time Layer)
+ 
+    * GNULL (GNAT Low-level Library)
+ 
+ In GNAT, Ada’s tasking services rely on a platform and OS independent
+ layer known as GNARL. This code is responsible for implementing the
+ correct semantics of Ada’s task creation, rendezvous, protected
+ operations etc.
+ 
+ GNARL decomposes Ada’s tasking semantics into simpler lower level
+ operations such as create a thread, set the priority of a thread, yield,
+ create a lock, lock/unlock, etc.  The spec for these low-level
+ operations constitutes GNULLI, the GNULL Interface.  This interface is
+ directly inspired from the POSIX real-time API.
+ 
+ If the underlying executive or OS implements the POSIX standard
+ faithfully, the GNULL Interface maps as is to the services offered by
+ the underlying kernel.  Otherwise, some target dependent glue code maps
+ the services offered by the underlying kernel to the semantics expected
+ by GNARL.
+ 
+ Whatever the underlying OS (VxWorks, UNIX, Windows, etc.)  the key point
+ is that each Ada task is mapped on a thread in the underlying kernel.
+ For example, in the case of VxWorks, one Ada task = one VxWorks task.
+ 
+ In addition Ada task priorities map onto the underlying thread
+ priorities.  Mapping Ada tasks onto the underlying kernel threads has
+ several advantages:
+ 
+    * The underlying scheduler is used to schedule the Ada tasks.  This
+      makes Ada tasks as efficient as kernel threads from a scheduling
+      standpoint.
+ 
+    * Interaction with code written in C containing threads is eased
+      since at the lowest level Ada tasks and C threads map onto the same
+      underlying kernel concept.
+ 
+    * When an Ada task is blocked during I/O the remaining Ada tasks are
+      able to proceed.
+ 
+    * On multiprocessor systems Ada tasks can execute in parallel.
+ 
+ Some threads libraries offer a mechanism to fork a new process, with the
+ child process duplicating the threads from the parent.  GNAT does not
+ support this functionality when the parent contains more than one task.
+ 
+ 
+ File: gnat_rm.info,  Node: Ensuring Compliance with the Real-Time Annex,  Next: Support for Locking Policies,  Prev: Mapping Ada Tasks onto the Underlying Kernel Threads,  Up: GNAT Implementation of Tasking
+ 
+ 15.2.2 Ensuring Compliance with the Real-Time Annex
+ ---------------------------------------------------
+ 
+ Although mapping Ada tasks onto the underlying threads has significant
+ advantages, it does create some complications when it comes to
+ respecting the scheduling semantics specified in the real-time annex
+ (Annex D).
+ 
+ For instance the Annex D requirement for the ‘FIFO_Within_Priorities’
+ scheduling policy states:
+ 
+      ‘When the active priority of a ready task that is not running
+      changes, or the setting of its base priority takes effect, the task
+      is removed from the ready queue for its old active priority and is
+      added at the tail of the ready queue for its new active priority,
+      except in the case where the active priority is lowered due to the
+      loss of inherited priority, in which case the task is added at the
+      head of the ready queue for its new active priority.’
+ 
+ While most kernels do put tasks at the end of the priority queue when a
+ task changes its priority, (which respects the main
+ FIFO_Within_Priorities requirement), almost none keep a thread at the
+ beginning of its priority queue when its priority drops from the loss of
+ inherited priority.
+ 
+ As a result most vendors have provided incomplete Annex D
+ implementations.
+ 
+ The GNAT run-time, has a nice cooperative solution to this problem which
+ ensures that accurate FIFO_Within_Priorities semantics are respected.
+ 
+ The principle is as follows.  When an Ada task T is about to start
+ running, it checks whether some other Ada task R with the same priority
+ as T has been suspended due to the loss of priority inheritance.  If
+ this is the case, T yields and is placed at the end of its priority
+ queue.  When R arrives at the front of the queue it executes.
+ 
+ Note that this simple scheme preserves the relative order of the tasks
+ that were ready to execute in the priority queue where R has been placed
+ at the end.
+ 
+ 
+ File: gnat_rm.info,  Node: Support for Locking Policies,  Prev: Ensuring Compliance with the Real-Time Annex,  Up: GNAT Implementation of Tasking
+ 
+ 15.2.3 Support for Locking Policies
+ -----------------------------------
+ 
+ This section specifies which policies specified by pragma Locking_Policy
+ are supported on which platforms.
+ 
+ GNAT supports the standard ‘Ceiling_Locking’ policy, and the
+ implementation defined ‘Inheritance_Locking’ and
+ ‘Concurrent_Readers_Locking’ policies.
+ 
+ ‘Ceiling_Locking’ is supported on all platforms if the operating system
+ supports it.  In particular, ‘Ceiling_Locking’ is not supported on
+ VxWorks.  ‘Inheritance_Locking’ is supported on Linux, Darwin (Mac OS
+ X), LynxOS 178, and VxWorks.  ‘Concurrent_Readers_Locking’ is supported
+ on Linux.
+ 
+ Notes about ‘Ceiling_Locking’ on Linux: If the process is running as
+ ‘root’, ceiling locking is used.  If the capabilities facility is
+ installed (“sudo apt-get –assume-yes install libcap-dev” on Ubuntu, for
+ example), and the program is linked against that library (“-largs
+ -lcap”), and the executable file has the cap_sys_nice capability (“sudo
+ /sbin/setcap cap_sys_nice=ep executable_file_name”), then ceiling
+ locking is used.  Otherwise, the ‘Ceiling_Locking’ policy is ignored.
+ 
+ 
+ File: gnat_rm.info,  Node: GNAT Implementation of Shared Passive Packages,  Next: Code Generation for Array Aggregates,  Prev: GNAT Implementation of Tasking,  Up: Implementation of Specific Ada Features
+ 
+ 15.3 GNAT Implementation of Shared Passive Packages
+ ===================================================
+ 
+ GNAT fully implements the pragma ‘Shared_Passive’ for the purpose of
+ designating shared passive packages.  This allows the use of passive
+ partitions in the context described in the Ada Reference Manual; i.e.,
+ for communication between separate partitions of a distributed
+ application using the features in Annex E.
+ 
+ However, the implementation approach used by GNAT provides for more
+ extensive usage as follows:
+ 
+ ‘Communication between separate programs’
+ 
+      This allows separate programs to access the data in passive
+      partitions, using protected objects for synchronization where
+      needed.  The only requirement is that the two programs have a
+      common shared file system.  It is even possible for programs
+      running on different machines with different architectures (e.g.,
+      different endianness) to communicate via the data in a passive
+      partition.
+ 
+ ‘Persistence between program runs’
+ 
+      The data in a passive package can persist from one run of a program
+      to another, so that a later program sees the final values stored by
+      a previous run of the same program.
+ 
+ The implementation approach used is to store the data in files.  A
+ separate stream file is created for each object in the package, and an
+ access to an object causes the corresponding file to be read or written.
+ 
+ The environment variable ‘SHARED_MEMORY_DIRECTORY’ should be set to the
+ directory to be used for these files.  The files in this directory have
+ names that correspond to their fully qualified names.  For example, if
+ we have the package
+ 
+      package X is
+        pragma Shared_Passive (X);
+        Y : Integer;
+        Z : Float;
+      end X;
+ 
+ and the environment variable is set to ‘/stemp/’, then the files created
+ will have the names:
+ 
+      /stemp/x.y
+      /stemp/x.z
+ 
+ These files are created when a value is initially written to the object,
+ and the files are retained until manually deleted.  This provides the
+ persistence semantics.  If no file exists, it means that no partition
+ has assigned a value to the variable; in this case the initial value
+ declared in the package will be used.  This model ensures that there are
+ no issues in synchronizing the elaboration process, since elaboration of
+ passive packages elaborates the initial values, but does not create the
+ files.
+ 
+ The files are written using normal ‘Stream_IO’ access.  If you want to
+ be able to communicate between programs or partitions running on
+ different architectures, then you should use the XDR versions of the
+ stream attribute routines, since these are architecture independent.
+ 
+ If active synchronization is required for access to the variables in the
+ shared passive package, then as described in the Ada Reference Manual,
+ the package may contain protected objects used for this purpose.  In
+ this case a lock file (whose name is ‘___lock’, with three underscores)
+ is created in the shared memory directory.
+ 
+ This is used to provide the required locking semantics for proper
+ protected object synchronization.
+ 
+ 
+ File: gnat_rm.info,  Node: Code Generation for Array Aggregates,  Next: The Size of Discriminated Records with Default Discriminants,  Prev: GNAT Implementation of Shared Passive Packages,  Up: Implementation of Specific Ada Features
+ 
+ 15.4 Code Generation for Array Aggregates
+ =========================================
+ 
+ Aggregates have a rich syntax and allow the user to specify the values
+ of complex data structures by means of a single construct.  As a result,
+ the code generated for aggregates can be quite complex and involve
+ loops, case statements and multiple assignments.  In the simplest cases,
+ however, the compiler will recognize aggregates whose components and
+ constraints are fully static, and in those cases the compiler will
+ generate little or no executable code.  The following is an outline of
+ the code that GNAT generates for various aggregate constructs.  For
+ further details, you will find it useful to examine the output produced
+ by the -gnatG flag to see the expanded source that is input to the code
+ generator.  You may also want to examine the assembly code generated at
+ various levels of optimization.
+ 
+ The code generated for aggregates depends on the context, the component
+ values, and the type.  In the context of an object declaration the code
+ generated is generally simpler than in the case of an assignment.  As a
+ general rule, static component values and static subtypes also lead to
+ simpler code.
+ 
+ * Menu:
+ 
+ * Static constant aggregates with static bounds::
+ * Constant aggregates with unconstrained nominal types::
+ * Aggregates with static bounds::
+ * Aggregates with nonstatic bounds::
+ * Aggregates in assignment statements::
+ 
+ 
+ File: gnat_rm.info,  Node: Static constant aggregates with static bounds,  Next: Constant aggregates with unconstrained nominal types,  Up: Code Generation for Array Aggregates
+ 
+ 15.4.1 Static constant aggregates with static bounds
+ ----------------------------------------------------
+ 
+ For the declarations:
+ 
+      type One_Dim is array (1..10) of integer;
+      ar0 : constant One_Dim := (1, 2, 3, 4, 5, 6, 7, 8, 9, 0);
+ 
+ GNAT generates no executable code: the constant ar0 is placed in static
+ memory.  The same is true for constant aggregates with named
+ associations:
+ 
+      Cr1 : constant One_Dim := (4 => 16, 2 => 4, 3 => 9, 1 => 1, 5 .. 10 => 0);
+      Cr3 : constant One_Dim := (others => 7777);
+ 
+ The same is true for multidimensional constant arrays such as:
+ 
+      type two_dim is array (1..3, 1..3) of integer;
+      Unit : constant two_dim := ( (1,0,0), (0,1,0), (0,0,1));
+ 
+ The same is true for arrays of one-dimensional arrays: the following are
+ static:
+ 
+      type ar1b  is array (1..3) of boolean;
+      type ar_ar is array (1..3) of ar1b;
+      None  : constant ar1b := (others => false);     --  fully static
+      None2 : constant ar_ar := (1..3 => None);       --  fully static
+ 
+ However, for multidimensional aggregates with named associations, GNAT
+ will generate assignments and loops, even if all associations are
+ static.  The following two declarations generate a loop for the first
+ dimension, and individual component assignments for the second
+ dimension:
+ 
+      Zero1: constant two_dim := (1..3 => (1..3 => 0));
+      Zero2: constant two_dim := (others => (others => 0));
+ 
+ 
+ File: gnat_rm.info,  Node: Constant aggregates with unconstrained nominal types,  Next: Aggregates with static bounds,  Prev: Static constant aggregates with static bounds,  Up: Code Generation for Array Aggregates
+ 
+ 15.4.2 Constant aggregates with unconstrained nominal types
+ -----------------------------------------------------------
+ 
+ In such cases the aggregate itself establishes the subtype, so that
+ associations with ‘others’ cannot be used.  GNAT determines the bounds
+ for the actual subtype of the aggregate, and allocates the aggregate
+ statically as well.  No code is generated for the following:
+ 
+      type One_Unc is array (natural range <>) of integer;
+      Cr_Unc : constant One_Unc := (12,24,36);
+ 
+ 
+ File: gnat_rm.info,  Node: Aggregates with static bounds,  Next: Aggregates with nonstatic bounds,  Prev: Constant aggregates with unconstrained nominal types,  Up: Code Generation for Array Aggregates
+ 
+ 15.4.3 Aggregates with static bounds
+ ------------------------------------
+ 
+ In all previous examples the aggregate was the initial (and immutable)
+ value of a constant.  If the aggregate initializes a variable, then code
+ is generated for it as a combination of individual assignments and loops
+ over the target object.  The declarations
+ 
+      Cr_Var1 : One_Dim := (2, 5, 7, 11, 0, 0, 0, 0, 0, 0);
+      Cr_Var2 : One_Dim := (others > -1);
+ 
+ generate the equivalent of
+ 
+      Cr_Var1 (1) := 2;
+      Cr_Var1 (2) := 3;
+      Cr_Var1 (3) := 5;
+      Cr_Var1 (4) := 11;
+ 
+      for I in Cr_Var2'range loop
+         Cr_Var2 (I) := -1;
+      end loop;
+ 
+ 
+ File: gnat_rm.info,  Node: Aggregates with nonstatic bounds,  Next: Aggregates in assignment statements,  Prev: Aggregates with static bounds,  Up: Code Generation for Array Aggregates
+ 
+ 15.4.4 Aggregates with nonstatic bounds
+ ---------------------------------------
+ 
+ If the bounds of the aggregate are not statically compatible with the
+ bounds of the nominal subtype of the target, then constraint checks have
+ to be generated on the bounds.  For a multidimensional array, constraint
+ checks may have to be applied to sub-arrays individually, if they do not
+ have statically compatible subtypes.
+ 
+ 
+ File: gnat_rm.info,  Node: Aggregates in assignment statements,  Prev: Aggregates with nonstatic bounds,  Up: Code Generation for Array Aggregates
+ 
+ 15.4.5 Aggregates in assignment statements
+ ------------------------------------------
+ 
+ In general, aggregate assignment requires the construction of a
+ temporary, and a copy from the temporary to the target of the
+ assignment.  This is because it is not always possible to convert the
+ assignment into a series of individual component assignments.  For
+ example, consider the simple case:
+ 
+      A := (A(2), A(1));
+ 
+ This cannot be converted into:
+ 
+      A(1) := A(2);
+      A(2) := A(1);
+ 
+ So the aggregate has to be built first in a separate location, and then
+ copied into the target.  GNAT recognizes simple cases where this
+ intermediate step is not required, and the assignments can be performed
+ in place, directly into the target.  The following sufficient criteria
+ are applied:
+ 
+    * The bounds of the aggregate are static, and the associations are
+      static.
+ 
+    * The components of the aggregate are static constants, names of
+      simple variables that are not renamings, or expressions not
+      involving indexed components whose operands obey these rules.
+ 
+ If any of these conditions are violated, the aggregate will be built in
+ a temporary (created either by the front-end or the code generator) and
+ then that temporary will be copied onto the target.
+ 
+ 
+ File: gnat_rm.info,  Node: The Size of Discriminated Records with Default Discriminants,  Next: Image Values For Nonscalar Types,  Prev: Code Generation for Array Aggregates,  Up: Implementation of Specific Ada Features
+ 
+ 15.5 The Size of Discriminated Records with Default Discriminants
+ =================================================================
+ 
+ If a discriminated type ‘T’ has discriminants with default values, it is
+ possible to declare an object of this type without providing an explicit
+ constraint:
+ 
+      type Size is range 1..100;
+ 
+      type Rec (D : Size := 15) is record
+         Name : String (1..D);
+      end T;
+ 
+      Word : Rec;
+ 
+ Such an object is said to be ‘unconstrained’.  The discriminant of the
+ object can be modified by a full assignment to the object, as long as it
+ preserves the relation between the value of the discriminant, and the
+ value of the components that depend on it:
+ 
+      Word := (3, "yes");
+ 
+      Word := (5, "maybe");
+ 
+      Word := (5, "no"); -- raises Constraint_Error
+ 
+ In order to support this behavior efficiently, an unconstrained object
+ is given the maximum size that any value of the type requires.  In the
+ case above, ‘Word’ has storage for the discriminant and for a ‘String’
+ of length 100.  It is important to note that unconstrained objects do
+ not require dynamic allocation.  It would be an improper implementation
+ to place on the heap those components whose size depends on
+ discriminants.  (This improper implementation was used by some Ada83
+ compilers, where the ‘Name’ component above would have been stored as a
+ pointer to a dynamic string).  Following the principle that dynamic
+ storage management should never be introduced implicitly, an Ada
+ compiler should reserve the full size for an unconstrained declared
+ object, and place it on the stack.
+ 
+ This maximum size approach has been a source of surprise to some users,
+ who expect the default values of the discriminants to determine the size
+ reserved for an unconstrained object: “If the default is 15, why should
+ the object occupy a larger size?” The answer, of course, is that the
+ discriminant may be later modified, and its full range of values must be
+ taken into account.  This is why the declaration:
+ 
+      type Rec (D : Positive := 15) is record
+         Name : String (1..D);
+      end record;
+ 
+      Too_Large : Rec;
+ 
+ is flagged by the compiler with a warning: an attempt to create
+ ‘Too_Large’ will raise ‘Storage_Error’, because the required size
+ includes ‘Positive'Last’ bytes.  As the first example indicates, the
+ proper approach is to declare an index type of ‘reasonable’ range so
+ that unconstrained objects are not too large.
+ 
+ One final wrinkle: if the object is declared to be ‘aliased’, or if it
+ is created in the heap by means of an allocator, then it is ‘not’
+ unconstrained: it is constrained by the default values of the
+ discriminants, and those values cannot be modified by full assignment.
+ This is because in the presence of aliasing all views of the object
+ (which may be manipulated by different tasks, say) must be consistent,
+ so it is imperative that the object, once created, remain invariant.
+ 
+ 
+ File: gnat_rm.info,  Node: Image Values For Nonscalar Types,  Next: Strict Conformance to the Ada Reference Manual,  Prev: The Size of Discriminated Records with Default Discriminants,  Up: Implementation of Specific Ada Features
+ 
+ 15.6 Image Values For Nonscalar Types
+ =====================================
+ 
+ Ada 2022 defines the Image, Wide_Image, and Wide_Wide image attributes
+ for nonscalar types; earlier Ada versions defined these attributes only
+ for scalar types.  Ada RM 4.10 provides some general guidance regarding
+ the default implementation of these attributes and the GNAT compiler
+ follows that guidance.  However, beyond that the precise details of the
+ image text generated in these cases are deliberately not documented and
+ are subject to change.  In particular, users should not rely on
+ formatting details (such as spaces or line breaking), record field
+ order, image values for access types, image values for types that have
+ ancestor or subcomponent types declared in non-Ada2022 code, image
+ values for predefined types, or the compiler’s choices regarding the
+ implementation permissions described in Ada RM 4.10.  This list is not
+ intended to be exhaustive.  If more precise control of image text is
+ required for some type T, then T’Put_Image should be explicitly
+ specified.
+ 
+ 
+ File: gnat_rm.info,  Node: Strict Conformance to the Ada Reference Manual,  Prev: Image Values For Nonscalar Types,  Up: Implementation of Specific Ada Features
+ 
+ 15.7 Strict Conformance to the Ada Reference Manual
+ ===================================================
+ 
+ The dynamic semantics defined by the Ada Reference Manual impose a set
+ of run-time checks to be generated.  By default, the GNAT compiler will
+ insert many run-time checks into the compiled code, including most of
+ those required by the Ada Reference Manual.  However, there are two
+ checks that are not enabled in the default mode for efficiency reasons:
+ checks for access before elaboration on subprogram calls, and stack
+ overflow checking (most operating systems do not perform this check by
+ default).
+ 
+ Strict conformance to the Ada Reference Manual can be achieved by adding
+ two compiler options for dynamic checks for access-before-elaboration on
+ subprogram calls and generic instantiations (‘-gnatE’), and stack
+ overflow checking (‘-fstack-check’).
+ 
+ Note that the result of a floating point arithmetic operation in
+ overflow and invalid situations, when the ‘Machine_Overflows’ attribute
+ of the result type is ‘False’, is to generate IEEE NaN and infinite
+ values.  This is the case for machines compliant with the IEEE
+ floating-point standard, but on machines that are not fully compliant
+ with this standard, such as Alpha, the ‘-mieee’ compiler flag must be
+ used for achieving IEEE confirming behavior (although at the cost of a
+ significant performance penalty), so infinite and NaN values are
+ properly generated.
+ 
+ 
+ File: gnat_rm.info,  Node: Implementation of Ada 2012 Features,  Next: Security Hardening Features,  Prev: Implementation of Specific Ada Features,  Up: Top
+ 
+ 16 Implementation of Ada 2012 Features
+ **************************************
+ 
+ This chapter contains a complete list of Ada 2012 features that have
+ been implemented.  Generally, these features are only available if the
+ ‘-gnat12’ (Ada 2012 features enabled) option is set, which is the
+ default behavior, or if the configuration pragma ‘Ada_2012’ is used.
+ 
+ However, new pragmas, attributes, and restrictions are unconditionally
+ available, since the Ada 95 standard allows the addition of new pragmas,
+ attributes, and restrictions (there are exceptions, which are documented
+ in the individual descriptions), and also certain packages were made
+ available in earlier versions of Ada.
+ 
+ An ISO date (YYYY-MM-DD) appears in parentheses on the description line.
+ This date shows the implementation date of the feature.  Any wavefront
+ subsequent to this date will contain the indicated feature, as will any
+ subsequent releases.  A date of 0000-00-00 means that GNAT has always
+ implemented the feature, or implemented it as soon as it appeared as a
+ binding interpretation.
+ 
+ Each feature corresponds to an Ada Issue (‘AI’) approved by the Ada
+ standardization group (ISO/IEC JTC1/SC22/WG9) for inclusion in Ada 2012.
+ The features are ordered based on the relevant sections of the Ada
+ Reference Manual (“RM”).  When a given AI relates to multiple points in
+ the RM, the earliest is used.
+ 
+ A complete description of the AIs may be found in
+ ‘http://www.ada-auth.org/ai05-summary.html’.
+ 
+    * ‘AI-0176 Quantified expressions (2010-09-29)’
+ 
+      Both universally and existentially quantified expressions are
+      implemented.  They use the new syntax for iterators proposed in
+      AI05-139-2, as well as the standard Ada loop syntax.
+ 
+      RM References: 1.01.04 (12) 2.09 (2/2) 4.04 (7) 4.05.09 (0)
+ 
+    * ‘AI-0079 Allow other_format characters in source (2010-07-10)’
+ 
+      Wide characters in the unicode category ‘other_format’ are now
+      allowed in source programs between tokens, but not within a token
+      such as an identifier.
+ 
+      RM References: 2.01 (4/2) 2.02 (7)
+ 
+    * ‘AI-0091 Do not allow other_format in identifiers (0000-00-00)’
+ 
+      Wide characters in the unicode category ‘other_format’ are not
+      permitted within an identifier, since this can be a security
+      problem.  The error message for this case has been improved to be
+      more specific, but GNAT has never allowed such characters to appear
+      in identifiers.
+ 
+      RM References: 2.03 (3.1/2) 2.03 (4/2) 2.03 (5/2) 2.03 (5.1/2) 2.03
+      (5.2/2) 2.03 (5.3/2) 2.09 (2/2)
+ 
+    * ‘AI-0100 Placement of pragmas (2010-07-01)’
+ 
+      This AI is an earlier version of AI-163.  It simplifies the rules
+      for legal placement of pragmas.  In the case of lists that allow
+      pragmas, if the list may have no elements, then the list may
+      consist solely of pragmas.
+ 
+      RM References: 2.08 (7)
+ 
+    * ‘AI-0163 Pragmas in place of null (2010-07-01)’
+ 
+      A statement sequence may be composed entirely of pragmas.  It is no
+      longer necessary to add a dummy ‘null’ statement to make the
+      sequence legal.
+ 
+      RM References: 2.08 (7) 2.08 (16)
+ 
+    * ‘AI-0080 ‘View of’ not needed if clear from context (0000-00-00)’
+ 
+      This is an editorial change only, described as non-testable in the
+      AI.
+ 
+      RM References: 3.01 (7)
+ 
+    * ‘AI-0183 Aspect specifications (2010-08-16)’
+ 
+      Aspect specifications have been fully implemented except for pre
+      and post- conditions, and type invariants, which have their own
+      separate AI’s.  All forms of declarations listed in the AI are
+      supported.  The following is a list of the aspects supported (with
+      GNAT implementation aspects marked)
+ 
+ Supported Aspect                         Source
+                                          
+ ---------------------------------------------------------
+                                          
+ ‘Ada_2005’                               – GNAT
+                                          
+                                          
+ ‘Ada_2012’                               – GNAT
+                                          
+                                          
+ ‘Address’
+ 
+ ‘Alignment’
+ 
+ ‘Atomic’
+ 
+ ‘Atomic_Components’
+ 
+ ‘Bit_Order’
+ 
+ ‘Component_Size’
+ 
+ ‘Contract_Cases’                         – GNAT
+                                          
+                                          
+ ‘Discard_Names’
+ 
+ ‘External_Tag’
+ 
+ ‘Favor_Top_Level’                        – GNAT
+                                          
+                                          
+ ‘Inline’
+ 
+ ‘Inline_Always’                          – GNAT
+                                          
+                                          
+ ‘Invariant’                              – GNAT
+                                          
+                                          
+ ‘Machine_Radix’
+ 
+ ‘No_Return’
+ 
+ ‘Object_Size’                            – GNAT
+                                          
+                                          
+ ‘Pack’
+ 
+ ‘Persistent_BSS’                         – GNAT
+                                          
+                                          
+ ‘Post’
+ 
+ ‘Pre’
+ 
+ ‘Predicate’
+ 
+ ‘Preelaborable_Initialization’
+ 
+ ‘Pure_Function’                          – GNAT
+                                          
+                                          
+ ‘Remote_Access_Type’                     – GNAT
+                                          
+                                          
+ ‘Shared’                                 – GNAT
+                                          
+                                          
+ ‘Size’
+ 
+ ‘Storage_Pool’
+ 
+ ‘Storage_Size’
+ 
+ ‘Stream_Size’
+ 
+ ‘Suppress’
+ 
+ ‘Suppress_Debug_Info’                    – GNAT
+                                          
+                                          
+ ‘Test_Case’                              – GNAT
+                                          
+                                          
+ ‘Thread_Local_Storage’                   – GNAT
+                                          
+                                          
+ ‘Type_Invariant’
+ 
+ ‘Unchecked_Union’
+ 
+ ‘Universal_Aliasing’                     – GNAT
+                                          
+                                          
+ ‘Unmodified’                             – GNAT
+                                          
+                                          
+ ‘Unreferenced’                           – GNAT
+                                          
+                                          
+ ‘Unreferenced_Objects’                   – GNAT
+                                          
+                                          
+ ‘Unsuppress’
+ 
+ ‘Value_Size’                             – GNAT
+                                          
+                                          
+ ‘Volatile’
+ 
+ ‘Volatile_Components’
+ 
+ ‘Warnings’                               – GNAT
+                                          
+ 
+      Note that for aspects with an expression, e.g.  ‘Size’, the
+      expression is treated like a default expression (visibility is
+      analyzed at the point of occurrence of the aspect, but evaluation
+      of the expression occurs at the freeze point of the entity
+      involved).
+ 
+      RM References: 3.02.01 (3) 3.02.02 (2) 3.03.01 (2/2) 3.08 (6)
+      3.09.03 (1.1/2) 6.01 (2/2) 6.07 (2/2) 9.05.02 (2/2) 7.01 (3) 7.03
+      (2) 7.03 (3) 9.01 (2/2) 9.01 (3/2) 9.04 (2/2) 9.04 (3/2) 9.05.02
+      (2/2) 11.01 (2) 12.01 (3) 12.03 (2/2) 12.04 (2/2) 12.05 (2) 12.06
+      (2.1/2) 12.06 (2.2/2) 12.07 (2) 13.01 (0.1/2) 13.03 (5/1) 13.03.01
+      (0)
+ 
+    * ‘AI-0128 Inequality is a primitive operation (0000-00-00)’
+ 
+      If an equality operator (“=”) is declared for a type, then the
+      implicitly declared inequality operator (“/=”) is a primitive
+      operation of the type.  This is the only reasonable interpretation,
+      and is the one always implemented by GNAT, but the RM was not
+      entirely clear in making this point.
+ 
+      RM References: 3.02.03 (6) 6.06 (6)
+ 
+    * ‘AI-0003 Qualified expressions as names (2010-07-11)’
+ 
+      In Ada 2012, a qualified expression is considered to be
+      syntactically a name, meaning that constructs such as ‘A'(F(X)).B’
+      are now legal.  This is useful in disambiguating some cases of
+      overloading.
+ 
+      RM References: 3.03 (11) 3.03 (21) 4.01 (2) 4.04 (7) 4.07 (3) 5.04
+      (7)
+ 
+    * ‘AI-0120 Constant instance of protected object (0000-00-00)’
+ 
+      This is an RM editorial change only.  The section that lists
+      objects that are constant failed to include the current instance of
+      a protected object within a protected function.  This has always
+      been treated as a constant in GNAT.
+ 
+      RM References: 3.03 (21)
+ 
+    * ‘AI-0008 General access to constrained objects (0000-00-00)’
+ 
+      The wording in the RM implied that if you have a general access to
+      a constrained object, it could be used to modify the discriminants.
+      This was obviously not intended.  ‘Constraint_Error’ should be
+      raised, and GNAT has always done so in this situation.
+ 
+      RM References: 3.03 (23) 3.10.02 (26/2) 4.01 (9) 6.04.01 (17)
+      8.05.01 (5/2)
+ 
+    * ‘AI-0093 Additional rules use immutably limited (0000-00-00)’
+ 
+      This is an editorial change only, to make more widespread use of
+      the Ada 2012 ‘immutably limited’.
+ 
+      RM References: 3.03 (23.4/3)
+ 
+    * ‘AI-0096 Deriving from formal private types (2010-07-20)’
+ 
+      In general it is illegal for a type derived from a formal limited
+      type to be nonlimited.  This AI makes an exception to this rule:
+      derivation is legal if it appears in the private part of the
+      generic, and the formal type is not tagged.  If the type is tagged,
+      the legality check must be applied to the private part of the
+      package.
+ 
+      RM References: 3.04 (5.1/2) 6.02 (7)
+ 
+    * ‘AI-0181 Soft hyphen is a non-graphic character (2010-07-23)’
+ 
+      From Ada 2005 on, soft hyphen is considered a non-graphic
+      character, which means that it has a special name (‘SOFT_HYPHEN’)
+      in conjunction with the ‘Image’ and ‘Value’ attributes for the
+      character types.  Strictly speaking this is an inconsistency with
+      Ada 95, but in practice the use of these attributes is so obscure
+      that it will not cause problems.
+ 
+      RM References: 3.05.02 (2/2) A.01 (35/2) A.03.03 (21)
+ 
+    * ‘AI-0182 Additional forms for’ ‘Character'Value’ ‘(0000-00-00)’
+ 
+      This AI allows ‘Character'Value’ to accept the string ‘'?'’ where
+      ‘?’ is any character including non-graphic control characters.
+      GNAT has always accepted such strings.  It also allows strings such
+      as ‘HEX_00000041’ to be accepted, but GNAT does not take advantage
+      of this permission and raises ‘Constraint_Error’, as is certainly
+      still permitted.
+ 
+      RM References: 3.05 (56/2)
+ 
+    * ‘AI-0214 Defaulted discriminants for limited tagged (2010-10-01)’
+ 
+      Ada 2012 relaxes the restriction that forbids discriminants of
+      tagged types to have default expressions by allowing them when the
+      type is limited.  It is often useful to define a default value for
+      a discriminant even though it can’t be changed by assignment.
+ 
+      RM References: 3.07 (9.1/2) 3.07.02 (3)
+ 
+    * ‘AI-0102 Some implicit conversions are illegal (0000-00-00)’
+ 
+      It is illegal to assign an anonymous access constant to an
+      anonymous access variable.  The RM did not have a clear rule to
+      prevent this, but GNAT has always generated an error for this
+      usage.
+ 
+      RM References: 3.07 (16) 3.07.01 (9) 6.04.01 (6) 8.06 (27/2)
+ 
+    * ‘AI-0158 Generalizing membership tests (2010-09-16)’
+ 
+      This AI extends the syntax of membership tests to simplify complex
+      conditions that can be expressed as membership in a subset of
+      values of any type.  It introduces syntax for a list of expressions
+      that may be used in loop contexts as well.
+ 
+      RM References: 3.08.01 (5) 4.04 (3) 4.05.02 (3) 4.05.02 (5) 4.05.02
+      (27)
+ 
+    * ‘AI-0173 Testing if tags represent abstract types (2010-07-03)’
+ 
+      The function ‘Ada.Tags.Type_Is_Abstract’ returns ‘True’ if invoked
+      with the tag of an abstract type, and ‘False’ otherwise.
+ 
+      RM References: 3.09 (7.4/2) 3.09 (12.4/2)
+ 
+    * ‘AI-0076 function with controlling result (0000-00-00)’
+ 
+      This is an editorial change only.  The RM defines calls with
+      controlling results, but uses the term ‘function with controlling
+      result’ without an explicit definition.
+ 
+      RM References: 3.09.02 (2/2)
+ 
+    * ‘AI-0126 Dispatching with no declared operation (0000-00-00)’
+ 
+      This AI clarifies dispatching rules, and simply confirms that
+      dispatching executes the operation of the parent type when there is
+      no explicitly or implicitly declared operation for the descendant
+      type.  This has always been the case in all versions of GNAT.
+ 
+      RM References: 3.09.02 (20/2) 3.09.02 (20.1/2) 3.09.02 (20.2/2)
+ 
+    * ‘AI-0097 Treatment of abstract null extension (2010-07-19)’
+ 
+      The RM as written implied that in some cases it was possible to
+      create an object of an abstract type, by having an abstract
+      extension inherit a non- abstract constructor from its parent type.
+      This mistake has been corrected in GNAT and in the RM, and this
+      construct is now illegal.
+ 
+      RM References: 3.09.03 (4/2)
+ 
+    * ‘AI-0203 Extended return cannot be abstract (0000-00-00)’
+ 
+      A return_subtype_indication cannot denote an abstract subtype.
+      GNAT has never permitted such usage.
+ 
+      RM References: 3.09.03 (8/3)
+ 
+    * ‘AI-0198 Inheriting abstract operators (0000-00-00)’
+ 
+      This AI resolves a conflict between two rules involving inherited
+      abstract operations and predefined operators.  If a derived numeric
+      type inherits an abstract operator, it overrides the predefined
+      one.  This interpretation was always the one implemented in GNAT.
+ 
+      RM References: 3.09.03 (4/3)
+ 
+    * ‘AI-0073 Functions returning abstract types (2010-07-10)’
+ 
+      This AI covers a number of issues regarding returning abstract
+      types.  In particular generic functions cannot have abstract result
+      types or access result types designated an abstract type.  There
+      are some other cases which are detailed in the AI. Note that this
+      binding interpretation has not been retrofitted to operate before
+      Ada 2012 mode, since it caused a significant number of regressions.
+ 
+      RM References: 3.09.03 (8) 3.09.03 (10) 6.05 (8/2)
+ 
+    * ‘AI-0070 Elaboration of interface types (0000-00-00)’
+ 
+      This is an editorial change only, there are no testable
+      consequences short of checking for the absence of generated code
+      for an interface declaration.
+ 
+      RM References: 3.09.04 (18/2)
+ 
+    * ‘AI-0208 Characteristics of incomplete views (0000-00-00)’
+ 
+      The wording in the Ada 2005 RM concerning characteristics of
+      incomplete views was incorrect and implied that some programs
+      intended to be legal were now illegal.  GNAT had never considered
+      such programs illegal, so it has always implemented the intent of
+      this AI.
+ 
+      RM References: 3.10.01 (2.4/2) 3.10.01 (2.6/2)
+ 
+    * ‘AI-0162 Incomplete type completed by partial view (2010-09-15)’
+ 
+      Incomplete types are made more useful by allowing them to be
+      completed by private types and private extensions.
+ 
+      RM References: 3.10.01 (2.5/2) 3.10.01 (2.6/2) 3.10.01 (3) 3.10.01
+      (4/2)
+ 
+    * ‘AI-0098 Anonymous subprogram access restrictions (0000-00-00)’
+ 
+      An unintentional omission in the RM implied some inconsistent
+      restrictions on the use of anonymous access to subprogram values.
+      These restrictions were not intentional, and have never been
+      enforced by GNAT.
+ 
+      RM References: 3.10.01 (6) 3.10.01 (9.2/2)
+ 
+    * ‘AI-0199 Aggregate with anonymous access components (2010-07-14)’
+ 
+      A choice list in a record aggregate can include several components
+      of (distinct) anonymous access types as long as they have matching
+      designated subtypes.
+ 
+      RM References: 4.03.01 (16)
+ 
+    * ‘AI-0220 Needed components for aggregates (0000-00-00)’
+ 
+      This AI addresses a wording problem in the RM that appears to
+      permit some complex cases of aggregates with nonstatic
+      discriminants.  GNAT has always implemented the intended semantics.
+ 
+      RM References: 4.03.01 (17)
+ 
+    * ‘AI-0147 Conditional expressions (2009-03-29)’
+ 
+      Conditional expressions are permitted.  The form of such an
+      expression is:
+ 
+           (if expr then expr {elsif expr then expr} [else expr])
+ 
+      The parentheses can be omitted in contexts where parentheses are
+      present anyway, such as subprogram arguments and pragma arguments.
+      If the ‘else’ clause is omitted, ‘else’ ‘True’ is assumed; thus
+      ‘(if A then B)’ is a way to conveniently represent ‘(A implies B)’
+      in standard logic.
+ 
+      RM References: 4.03.03 (15) 4.04 (1) 4.04 (7) 4.05.07 (0) 4.07 (2)
+      4.07 (3) 4.09 (12) 4.09 (33) 5.03 (3) 5.03 (4) 7.05 (2.1/2)
+ 
+    * ‘AI-0037 Out-of-range box associations in aggregate (0000-00-00)’
+ 
+      This AI confirms that an association of the form ‘Indx => <>’ in an
+      array aggregate must raise ‘Constraint_Error’ if ‘Indx’ is out of
+      range.  The RM specified a range check on other associations, but
+      not when the value of the association was defaulted.  GNAT has
+      always inserted a constraint check on the index value.
+ 
+      RM References: 4.03.03 (29)
+ 
+    * ‘AI-0123 Composability of equality (2010-04-13)’
+ 
+      Equality of untagged record composes, so that the predefined
+      equality for a composite type that includes a component of some
+      untagged record type ‘R’ uses the equality operation of ‘R’ (which
+      may be user-defined or predefined).  This makes the behavior of
+      untagged records identical to that of tagged types in this respect.
+ 
+      This change is an incompatibility with previous versions of Ada,
+      but it corrects a non-uniformity that was often a source of
+      confusion.  Analysis of a large number of industrial programs
+      indicates that in those rare cases where a composite type had an
+      untagged record component with a user-defined equality, either
+      there was no use of the composite equality, or else the code
+      expected the same composability as for tagged types, and thus had a
+      bug that would be fixed by this change.
+ 
+      RM References: 4.05.02 (9.7/2) 4.05.02 (14) 4.05.02 (15) 4.05.02
+      (24) 8.05.04 (8)
+ 
+    * ‘AI-0088 The value of exponentiation (0000-00-00)’
+ 
+      This AI clarifies the equivalence rule given for the dynamic
+      semantics of exponentiation: the value of the operation can be
+      obtained by repeated multiplication, but the operation can be
+      implemented otherwise (for example using the familiar
+      divide-by-two-and-square algorithm, even if this is less accurate),
+      and does not imply repeated reads of a volatile base.
+ 
+      RM References: 4.05.06 (11)
+ 
+    * ‘AI-0188 Case expressions (2010-01-09)’
+ 
+      Case expressions are permitted.  This allows use of constructs such
+      as:
+ 
+           X := (case Y is when 1 => 2, when 2 => 3, when others => 31)
+ 
+      RM References: 4.05.07 (0) 4.05.08 (0) 4.09 (12) 4.09 (33)
+ 
+    * ‘AI-0104 Null exclusion and uninitialized allocator (2010-07-15)’
+ 
+      The assignment ‘Ptr := new not null Some_Ptr;’ will raise
+      ‘Constraint_Error’ because the default value of the allocated
+      object is ‘null’.  This useless construct is illegal in Ada 2012.
+ 
+      RM References: 4.08 (2)
+ 
+    * ‘AI-0157 Allocation/Deallocation from empty pool (2010-07-11)’
+ 
+      Allocation and Deallocation from an empty storage pool (i.e.
+      allocation or deallocation of a pointer for which a static storage
+      size clause of zero has been given) is now illegal and is detected
+      as such.  GNAT previously gave a warning but not an error.
+ 
+      RM References: 4.08 (5.3/2) 13.11.02 (4) 13.11.02 (17)
+ 
+    * ‘AI-0179 Statement not required after label (2010-04-10)’
+ 
+      It is not necessary to have a statement following a label, so a
+      label can appear at the end of a statement sequence without the
+      need for putting a null statement afterwards, but it is not
+      allowable to have only labels and no real statements in a statement
+      sequence.
+ 
+      RM References: 5.01 (2)
+ 
+    * ‘AI-0139-2 Syntactic sugar for iterators (2010-09-29)’
+ 
+      The new syntax for iterating over arrays and containers is now
+      implemented.  Iteration over containers is for now limited to
+      read-only iterators.  Only default iterators are supported, with
+      the syntax: ‘for Elem of C’.
+ 
+      RM References: 5.05
+ 
+    * ‘AI-0134 Profiles must match for full conformance (0000-00-00)’
+ 
+      For full conformance, the profiles of
+      anonymous-access-to-subprogram parameters must match.  GNAT has
+      always enforced this rule.
+ 
+      RM References: 6.03.01 (18)
+ 
+    * ‘AI-0207 Mode conformance and access constant (0000-00-00)’
+ 
+      This AI confirms that access_to_constant indication must match for
+      mode conformance.  This was implemented in GNAT when the qualifier
+      was originally introduced in Ada 2005.
+ 
+      RM References: 6.03.01 (16/2)
+ 
+    * ‘AI-0046 Null exclusion match for full conformance (2010-07-17)’
+ 
+      For full conformance, in the case of access parameters, the null
+      exclusion must match (either both or neither must have ‘not null’).
+ 
+      RM References: 6.03.02 (18)
+ 
+    * ‘AI-0118 The association of parameter associations (0000-00-00)’
+ 
+      This AI clarifies the rules for named associations in subprogram
+      calls and generic instantiations.  The rules have been in place
+      since Ada 83.
+ 
+      RM References: 6.04.01 (2) 12.03 (9)
+ 
+    * ‘AI-0196 Null exclusion tests for out parameters (0000-00-00)’
+ 
+      Null exclusion checks are not made for ‘out’ parameters when
+      evaluating the actual parameters.  GNAT has never generated these
+      checks.
+ 
+      RM References: 6.04.01 (13)
+ 
+    * ‘AI-0015 Constant return objects (0000-00-00)’
+ 
+      The return object declared in an ‘extended_return_statement’ may be
+      declared constant.  This was always intended, and GNAT has always
+      allowed it.
+ 
+      RM References: 6.05 (2.1/2) 3.03 (10/2) 3.03 (21) 6.05 (5/2) 6.05
+      (5.7/2)
+ 
+    * ‘AI-0032 Extended return for class-wide functions (0000-00-00)’
+ 
+      If a function returns a class-wide type, the object of an extended
+      return statement can be declared with a specific type that is
+      covered by the class- wide type.  This has been implemented in GNAT
+      since the introduction of extended returns.  Note AI-0103
+      complements this AI by imposing matching rules for constrained
+      return types.
+ 
+      RM References: 6.05 (5.2/2) 6.05 (5.3/2) 6.05 (5.6/2) 6.05 (5.8/2)
+      6.05 (8/2)
+ 
+    * ‘AI-0103 Static matching for extended return (2010-07-23)’
+ 
+      If the return subtype of a function is an elementary type or a
+      constrained type, the subtype indication in an extended return
+      statement must match statically this return subtype.
+ 
+      RM References: 6.05 (5.2/2)
+ 
+    * ‘AI-0058 Abnormal completion of an extended return (0000-00-00)’
+ 
+      The RM had some incorrect wording implying wrong treatment of
+      abnormal completion in an extended return.  GNAT has always
+      implemented the intended correct semantics as described by this AI.
+ 
+      RM References: 6.05 (22/2)
+ 
+    * ‘AI-0050 Raising Constraint_Error early for function call
+      (0000-00-00)’
+ 
+      The implementation permissions for raising ‘Constraint_Error’ early
+      on a function call when it was clear an exception would be raised
+      were over-permissive and allowed mishandling of discriminants in
+      some cases.  GNAT did not take advantage of these incorrect
+      permissions in any case.
+ 
+      RM References: 6.05 (24/2)
+ 
+    * ‘AI-0125 Nonoverridable operations of an ancestor (2010-09-28)’
+ 
+      In Ada 2012, the declaration of a primitive operation of a type
+      extension or private extension can also override an inherited
+      primitive that is not visible at the point of this declaration.
+ 
+      RM References: 7.03.01 (6) 8.03 (23) 8.03.01 (5/2) 8.03.01 (6/2)
+ 
+    * ‘AI-0062 Null exclusions and deferred constants (0000-00-00)’
+ 
+      A full constant may have a null exclusion even if its associated
+      deferred constant does not.  GNAT has always allowed this.
+ 
+      RM References: 7.04 (6/2) 7.04 (7.1/2)
+ 
+    * ‘AI-0178 Incomplete views are limited (0000-00-00)’
+ 
+      This AI clarifies the role of incomplete views and plugs an
+      omission in the RM. GNAT always correctly restricted the use of
+      incomplete views and types.
+ 
+      RM References: 7.05 (3/2) 7.05 (6/2)
+ 
+    * ‘AI-0087 Actual for formal nonlimited derived type (2010-07-15)’
+ 
+      The actual for a formal nonlimited derived type cannot be limited.
+      In particular, a formal derived type that extends a limited
+      interface but which is not explicitly limited cannot be
+      instantiated with a limited type.
+ 
+      RM References: 7.05 (5/2) 12.05.01 (5.1/2)
+ 
+    * ‘AI-0099 Tag determines whether finalization needed (0000-00-00)’
+ 
+      This AI clarifies that ‘needs finalization’ is part of dynamic
+      semantics, and therefore depends on the run-time characteristics of
+      an object (i.e.  its tag) and not on its nominal type.  As the AI
+      indicates: “we do not expect this to affect any implementation’’.
+ 
+      RM References: 7.06.01 (6) 7.06.01 (7) 7.06.01 (8) 7.06.01 (9/2)
+ 
+    * ‘AI-0064 Redundant finalization rule (0000-00-00)’
+ 
+      This is an editorial change only.  The intended behavior is already
+      checked by an existing ACATS test, which GNAT has always executed
+      correctly.
+ 
+      RM References: 7.06.01 (17.1/1)
+ 
+    * ‘AI-0026 Missing rules for Unchecked_Union (2010-07-07)’
+ 
+      Record representation clauses concerning Unchecked_Union types
+      cannot mention the discriminant of the type.  The type of a
+      component declared in the variant part of an Unchecked_Union cannot
+      be controlled, have controlled components, nor have protected or
+      task parts.  If an Unchecked_Union type is declared within the body
+      of a generic unit or its descendants, then the type of a component
+      declared in the variant part cannot be a formal private type or a
+      formal private extension declared within the same generic unit.
+ 
+      RM References: 7.06 (9.4/2) B.03.03 (9/2) B.03.03 (10/2)
+ 
+    * ‘AI-0205 Extended return declares visible name (0000-00-00)’
+ 
+      This AI corrects a simple omission in the RM. Return objects have
+      always been visible within an extended return statement.
+ 
+      RM References: 8.03 (17)
+ 
+    * ‘AI-0042 Overriding versus implemented-by (0000-00-00)’
+ 
+      This AI fixes a wording gap in the RM. An operation of a
+      synchronized interface can be implemented by a protected or task
+      entry, but the abstract operation is not being overridden in the
+      usual sense, and it must be stated separately that this
+      implementation is legal.  This has always been the case in GNAT.
+ 
+      RM References: 9.01 (9.2/2) 9.04 (11.1/2)
+ 
+    * ‘AI-0030 Requeue on synchronized interfaces (2010-07-19)’
+ 
+      Requeue is permitted to a protected, synchronized or task interface
+      primitive providing it is known that the overriding operation is an
+      entry.  Otherwise the requeue statement has the same effect as a
+      procedure call.  Use of pragma ‘Implemented’ provides a way to
+      impose a static requirement on the overriding operation by adhering
+      to one of the implementation kinds: entry, protected procedure or
+      any of the above.
+ 
+      RM References: 9.05 (9) 9.05.04 (2) 9.05.04 (3) 9.05.04 (5) 9.05.04
+      (6) 9.05.04 (7) 9.05.04 (12)
+ 
+    * ‘AI-0201 Independence of atomic object components (2010-07-22)’
+ 
+      If an Atomic object has a pragma ‘Pack’ or a ‘Component_Size’
+      attribute, then individual components may not be addressable by
+      independent tasks.  However, if the representation clause has no
+      effect (is confirming), then independence is not compromised.
+      Furthermore, in GNAT, specification of other appropriately
+      addressable component sizes (e.g.  16 for 8-bit characters) also
+      preserves independence.  GNAT now gives very clear warnings both
+      for the declaration of such a type, and for any assignment to its
+      components.
+ 
+      RM References: 9.10 (1/3) C.06 (22/2) C.06 (23/2)
+ 
+    * ‘AI-0009 Pragma Independent[_Components] (2010-07-23)’
+ 
+      This AI introduces the new pragmas ‘Independent’ and
+      ‘Independent_Components’, which control guaranteeing independence
+      of access to objects and components.  The AI also requires
+      independence not unaffected by confirming rep clauses.
+ 
+      RM References: 9.10 (1) 13.01 (15/1) 13.02 (9) 13.03 (13) C.06 (2)
+      C.06 (4) C.06 (6) C.06 (9) C.06 (13) C.06 (14)
+ 
+    * ‘AI-0072 Task signalling using ‘Terminated (0000-00-00)’
+ 
+      This AI clarifies that task signalling for reading ‘'Terminated’
+      only occurs if the result is True.  GNAT semantics has always been
+      consistent with this notion of task signalling.
+ 
+      RM References: 9.10 (6.1/1)
+ 
+    * ‘AI-0108 Limited incomplete view and discriminants (0000-00-00)’
+ 
+      This AI confirms that an incomplete type from a limited view does
+      not have discriminants.  This has always been the case in GNAT.
+ 
+      RM References: 10.01.01 (12.3/2)
+ 
+    * ‘AI-0129 Limited views and incomplete types (0000-00-00)’
+ 
+      This AI clarifies the description of limited views: a limited view
+      of a package includes only one view of a type that has an
+      incomplete declaration and a full declaration (there is no possible
+      ambiguity in a client package).  This AI also fixes an omission: a
+      nested package in the private part has no limited view.  GNAT
+      always implemented this correctly.
+ 
+      RM References: 10.01.01 (12.2/2) 10.01.01 (12.3/2)
+ 
+    * ‘AI-0077 Limited withs and scope of declarations (0000-00-00)’
+ 
+      This AI clarifies that a declaration does not include a context
+      clause, and confirms that it is illegal to have a context in which
+      both a limited and a nonlimited view of a package are accessible.
+      Such double visibility was always rejected by GNAT.
+ 
+      RM References: 10.01.02 (12/2) 10.01.02 (21/2) 10.01.02 (22/2)
+ 
+    * ‘AI-0122 Private with and children of generics (0000-00-00)’
+ 
+      This AI clarifies the visibility of private children of generic
+      units within instantiations of a parent.  GNAT has always handled
+      this correctly.
+ 
+      RM References: 10.01.02 (12/2)
+ 
+    * ‘AI-0040 Limited with clauses on descendant (0000-00-00)’
+ 
+      This AI confirms that a limited with clause in a child unit cannot
+      name an ancestor of the unit.  This has always been checked in
+      GNAT.
+ 
+      RM References: 10.01.02 (20/2)
+ 
+    * ‘AI-0132 Placement of library unit pragmas (0000-00-00)’
+ 
+      This AI fills a gap in the description of library unit pragmas.
+      The pragma clearly must apply to a library unit, even if it does
+      not carry the name of the enclosing unit.  GNAT has always enforced
+      the required check.
+ 
+      RM References: 10.01.05 (7)
+ 
+    * ‘AI-0034 Categorization of limited views (0000-00-00)’
+ 
+      The RM makes certain limited with clauses illegal because of
+      categorization considerations, when the corresponding normal with
+      would be legal.  This is not intended, and GNAT has always
+      implemented the recommended behavior.
+ 
+      RM References: 10.02.01 (11/1) 10.02.01 (17/2)
+ 
+    * ‘AI-0035 Inconsistencies with Pure units (0000-00-00)’
+ 
+      This AI remedies some inconsistencies in the legality rules for
+      Pure units.  Derived access types are legal in a pure unit (on the
+      assumption that the rule for a zero storage pool size has been
+      enforced on the ancestor type).  The rules are enforced in generic
+      instances and in subunits.  GNAT has always implemented the
+      recommended behavior.
+ 
+      RM References: 10.02.01 (15.1/2) 10.02.01 (15.4/2) 10.02.01
+      (15.5/2) 10.02.01 (17/2)
+ 
+    * ‘AI-0219 Pure permissions and limited parameters (2010-05-25)’
+ 
+      This AI refines the rules for the cases with limited parameters
+      which do not allow the implementations to omit ‘redundant’.  GNAT
+      now properly conforms to the requirements of this binding
+      interpretation.
+ 
+      RM References: 10.02.01 (18/2)
+ 
+    * ‘AI-0043 Rules about raising exceptions (0000-00-00)’
+ 
+      This AI covers various omissions in the RM regarding the raising of
+      exceptions.  GNAT has always implemented the intended semantics.
+ 
+      RM References: 11.04.01 (10.1/2) 11 (2)
+ 
+    * ‘AI-0200 Mismatches in formal package declarations (0000-00-00)’
+ 
+      This AI plugs a gap in the RM which appeared to allow some
+      obviously intended illegal instantiations.  GNAT has never allowed
+      these instantiations.
+ 
+      RM References: 12.07 (16)
+ 
+    * ‘AI-0112 Detection of duplicate pragmas (2010-07-24)’
+ 
+      This AI concerns giving names to various representation aspects,
+      but the practical effect is simply to make the use of duplicate
+      ‘Atomic[_Components]’, ‘Volatile[_Components]’, and
+      ‘Independent[_Components]’ pragmas illegal, and GNAT now performs
+      this required check.
+ 
+      RM References: 13.01 (8)
+ 
+    * ‘AI-0106 No representation pragmas on generic formals (0000-00-00)’
+ 
+      The RM appeared to allow representation pragmas on generic formal
+      parameters, but this was not intended, and GNAT has never permitted
+      this usage.
+ 
+      RM References: 13.01 (9.1/1)
+ 
+    * ‘AI-0012 Pack/Component_Size for aliased/atomic (2010-07-15)’
+ 
+      It is now illegal to give an inappropriate component size or a
+      pragma ‘Pack’ that attempts to change the component size in the
+      case of atomic or aliased components.  Previously GNAT ignored such
+      an attempt with a warning.
+ 
+      RM References: 13.02 (6.1/2) 13.02 (7) C.06 (10) C.06 (11) C.06
+      (21)
+ 
+    * ‘AI-0039 Stream attributes cannot be dynamic (0000-00-00)’
+ 
+      The RM permitted the use of dynamic expressions (such as
+      ‘ptr.all’)‘ for stream attributes, but these were never useful and
+      are now illegal.  GNAT has always regarded such expressions as
+      illegal.
+ 
+      RM References: 13.03 (4) 13.03 (6) 13.13.02 (38/2)
+ 
+    * ‘AI-0095 Address of intrinsic subprograms (0000-00-00)’
+ 
+      The prefix of ‘'Address’ cannot statically denote a subprogram with
+      convention ‘Intrinsic’.  The use of the ‘Address’ attribute raises
+      ‘Program_Error’ if the prefix denotes a subprogram with convention
+      ‘Intrinsic’.
+ 
+      RM References: 13.03 (11/1)
+ 
+    * ‘AI-0116 Alignment of class-wide objects (0000-00-00)’
+ 
+      This AI requires that the alignment of a class-wide object be no
+      greater than the alignment of any type in the class.  GNAT has
+      always followed this recommendation.
+ 
+      RM References: 13.03 (29) 13.11 (16)
+ 
+    * ‘AI-0146 Type invariants (2009-09-21)’
+ 
+      Type invariants may be specified for private types using the aspect
+      notation.  Aspect ‘Type_Invariant’ may be specified for any private
+      type, ‘Type_Invariant'Class’ can only be specified for tagged
+      types, and is inherited by any descendent of the tagged types.  The
+      invariant is a boolean expression that is tested for being true in
+      the following situations: conversions to the private type, object
+      declarations for the private type that are default initialized, and
+      [‘in’] ‘out’ parameters and returned result on return from any
+      primitive operation for the type that is visible to a client.  GNAT
+      defines the synonyms ‘Invariant’ for ‘Type_Invariant’ and
+      ‘Invariant'Class’ for ‘Type_Invariant'Class’.
+ 
+      RM References: 13.03.03 (00)
+ 
+    * ‘AI-0078 Relax Unchecked_Conversion alignment rules (0000-00-00)’
+ 
+      In Ada 2012, compilers are required to support unchecked conversion
+      where the target alignment is a multiple of the source alignment.
+      GNAT always supported this case (and indeed all cases of differing
+      alignments, doing copies where required if the alignment was
+      reduced).
+ 
+      RM References: 13.09 (7)
+ 
+    * ‘AI-0195 Invalid value handling is implementation defined
+      (2010-07-03)’
+ 
+      The handling of invalid values is now designated to be
+      implementation defined.  This is a documentation change only,
+      requiring Annex M in the GNAT Reference Manual to document this
+      handling.  In GNAT, checks for invalid values are made only when
+      necessary to avoid erroneous behavior.  Operations like assignments
+      which cannot cause erroneous behavior ignore the possibility of
+      invalid values and do not do a check.  The date given above applies
+      only to the documentation change, this behavior has always been
+      implemented by GNAT.
+ 
+      RM References: 13.09.01 (10)
+ 
+    * ‘AI-0193 Alignment of allocators (2010-09-16)’
+ 
+      This AI introduces a new attribute ‘Max_Alignment_For_Allocation’,
+      analogous to ‘Max_Size_In_Storage_Elements’, but for alignment
+      instead of size.
+ 
+      RM References: 13.11 (16) 13.11 (21) 13.11.01 (0) 13.11.01 (1)
+      13.11.01 (2) 13.11.01 (3)
+ 
+    * ‘AI-0177 Parameterized expressions (2010-07-10)’
+ 
+      The new Ada 2012 notion of parameterized expressions is
+      implemented.  The form is:
+ 
+           function-specification is (expression)
+ 
+      This is exactly equivalent to the corresponding function body that
+      returns the expression, but it can appear in a package spec.  Note
+      that the expression must be parenthesized.
+ 
+      RM References: 13.11.01 (3/2)
+ 
+    * ‘AI-0033 Attach/Interrupt_Handler in generic (2010-07-24)’
+ 
+      Neither of these two pragmas may appear within a generic template,
+      because the generic might be instantiated at other than the library
+      level.
+ 
+      RM References: 13.11.02 (16) C.03.01 (7/2) C.03.01 (8/2)
+ 
+    * ‘AI-0161 Restriction No_Default_Stream_Attributes (2010-09-11)’
+ 
+      A new restriction ‘No_Default_Stream_Attributes’ prevents the use
+      of any of the default stream attributes for elementary types.  If
+      this restriction is in force, then it is necessary to provide
+      explicit subprograms for any stream attributes used.
+ 
+      RM References: 13.12.01 (4/2) 13.13.02 (40/2) 13.13.02 (52/2)
+ 
+    * ‘AI-0194 Value of Stream_Size attribute (0000-00-00)’
+ 
+      The ‘Stream_Size’ attribute returns the default number of bits in
+      the stream representation of the given type.  This value is not
+      affected by the presence of stream subprogram attributes for the
+      type.  GNAT has always implemented this interpretation.
+ 
+      RM References: 13.13.02 (1.2/2)
+ 
+    * ‘AI-0109 Redundant check in S’Class’Input (0000-00-00)’
+ 
+      This AI is an editorial change only.  It removes the need for a tag
+      check that can never fail.
+ 
+      RM References: 13.13.02 (34/2)
+ 
+    * ‘AI-0007 Stream read and private scalar types (0000-00-00)’
+ 
+      The RM as written appeared to limit the possibilities of declaring
+      read attribute procedures for private scalar types.  This
+      limitation was not intended, and has never been enforced by GNAT.
+ 
+      RM References: 13.13.02 (50/2) 13.13.02 (51/2)
+ 
+    * ‘AI-0065 Remote access types and external streaming (0000-00-00)’
+ 
+      This AI clarifies the fact that all remote access types support
+      external streaming.  This fixes an obvious oversight in the
+      definition of the language, and GNAT always implemented the
+      intended correct rules.
+ 
+      RM References: 13.13.02 (52/2)
+ 
+    * ‘AI-0019 Freezing of primitives for tagged types (0000-00-00)’
+ 
+      The RM suggests that primitive subprograms of a specific tagged
+      type are frozen when the tagged type is frozen.  This would be an
+      incompatible change and is not intended.  GNAT has never attempted
+      this kind of freezing and its behavior is consistent with the
+      recommendation of this AI.
+ 
+      RM References: 13.14 (2) 13.14 (3/1) 13.14 (8.1/1) 13.14 (10) 13.14
+      (14) 13.14 (15.1/2)
+ 
+    * ‘AI-0017 Freezing and incomplete types (0000-00-00)’
+ 
+      So-called ‘Taft-amendment types’ (i.e., types that are completed in
+      package bodies) are not frozen by the occurrence of bodies in the
+      enclosing declarative part.  GNAT always implemented this properly.
+ 
+      RM References: 13.14 (3/1)
+ 
+    * ‘AI-0060 Extended definition of remote access types (0000-00-00)’
+ 
+      This AI extends the definition of remote access types to include
+      access to limited, synchronized, protected or task class-wide
+      interface types.  GNAT already implemented this extension.
+ 
+      RM References: A (4) E.02.02 (9/1) E.02.02 (9.2/1) E.02.02 (14/2)
+      E.02.02 (18)
+ 
+    * ‘AI-0114 Classification of letters (0000-00-00)’
+ 
+      The code points 170 (‘FEMININE ORDINAL INDICATOR’), 181 (‘MICRO
+      SIGN’), and 186 (‘MASCULINE ORDINAL INDICATOR’) are technically
+      considered lower case letters by Unicode.  However, they are not
+      allowed in identifiers, and they return ‘False’ to
+      ‘Ada.Characters.Handling.Is_Letter/Is_Lower’.  This behavior is
+      consistent with that defined in Ada 95.
+ 
+      RM References: A.03.02 (59) A.04.06 (7)
+ 
+    * ‘AI-0185 Ada.Wide_[Wide_]Characters.Handling (2010-07-06)’
+ 
+      Two new packages ‘Ada.Wide_[Wide_]Characters.Handling’ provide
+      classification functions for ‘Wide_Character’ and
+      ‘Wide_Wide_Character’, as well as providing case folding routines
+      for ‘Wide_[Wide_]Character’ and ‘Wide_[Wide_]String’.
+ 
+      RM References: A.03.05 (0) A.03.06 (0)
+ 
+    * ‘AI-0031 Add From parameter to Find_Token (2010-07-25)’
+ 
+      A new version of ‘Find_Token’ is added to all relevant string
+      packages, with an extra parameter ‘From’.  Instead of starting at
+      the first character of the string, the search for a matching Token
+      starts at the character indexed by the value of ‘From’.  These
+      procedures are available in all versions of Ada but if used in
+      versions earlier than Ada 2012 they will generate a warning that an
+      Ada 2012 subprogram is being used.
+ 
+      RM References: A.04.03 (16) A.04.03 (67) A.04.03 (68/1) A.04.04
+      (51) A.04.05 (46)
+ 
+    * ‘AI-0056 Index on null string returns zero (0000-00-00)’
+ 
+      The wording in the Ada 2005 RM implied an incompatible handling of
+      the ‘Index’ functions, resulting in raising an exception instead of
+      returning zero in some situations.  This was not intended and has
+      been corrected.  GNAT always returned zero, and is thus consistent
+      with this AI.
+ 
+      RM References: A.04.03 (56.2/2) A.04.03 (58.5/2)
+ 
+    * ‘AI-0137 String encoding package (2010-03-25)’
+ 
+      The packages ‘Ada.Strings.UTF_Encoding’, together with its child
+      packages, ‘Conversions’, ‘Strings’, ‘Wide_Strings’, and
+      ‘Wide_Wide_Strings’ have been implemented.  These packages (whose
+      documentation can be found in the spec files ‘a-stuten.ads’,
+      ‘a-suenco.ads’, ‘a-suenst.ads’, ‘a-suewst.ads’, ‘a-suezst.ads’)
+      allow encoding and decoding of ‘String’, ‘Wide_String’, and
+      ‘Wide_Wide_String’ values using UTF coding schemes (including
+      UTF-8, UTF-16LE, UTF-16BE, and UTF-16), as well as conversions
+      between the different UTF encodings.  With the exception of
+      ‘Wide_Wide_Strings’, these packages are available in Ada 95 and Ada
+      2005 mode as well as Ada 2012 mode.  The ‘Wide_Wide_Strings’
+      package is available in Ada 2005 mode as well as Ada 2012 mode (but
+      not in Ada 95 mode since it uses ‘Wide_Wide_Character’).
+ 
+      RM References: A.04.11
+ 
+    * ‘AI-0038 Minor errors in Text_IO (0000-00-00)’
+ 
+      These are minor errors in the description on three points.  The
+      intent on all these points has always been clear, and GNAT has
+      always implemented the correct intended semantics.
+ 
+      RM References: A.10.05 (37) A.10.07 (8/1) A.10.07 (10) A.10.07 (12)
+      A.10.08 (10) A.10.08 (24)
+ 
+    * ‘AI-0044 Restrictions on container instantiations (0000-00-00)’
+ 
+      This AI places restrictions on allowed instantiations of generic
+      containers.  These restrictions are not checked by the compiler, so
+      there is nothing to change in the implementation.  This affects
+      only the RM documentation.
+ 
+      RM References: A.18 (4/2) A.18.02 (231/2) A.18.03 (145/2) A.18.06
+      (56/2) A.18.08 (66/2) A.18.09 (79/2) A.18.26 (5/2) A.18.26 (9/2)
+ 
+    * ‘AI-0127 Adding Locale Capabilities (2010-09-29)’
+ 
+      This package provides an interface for identifying the current
+      locale.
+ 
+      RM References: A.19 A.19.01 A.19.02 A.19.03 A.19.05 A.19.06 A.19.07
+      A.19.08 A.19.09 A.19.10 A.19.11 A.19.12 A.19.13
+ 
+    * ‘AI-0002 Export C with unconstrained arrays (0000-00-00)’
+ 
+      The compiler is not required to support exporting an Ada subprogram
+      with convention C if there are parameters or a return type of an
+      unconstrained array type (such as ‘String’).  GNAT allows such
+      declarations but generates warnings.  It is possible, but
+      complicated, to write the corresponding C code and certainly such
+      code would be specific to GNAT and non-portable.
+ 
+      RM References: B.01 (17) B.03 (62) B.03 (71.1/2)
+ 
+    * ‘AI-0216 No_Task_Hierarchy forbids local tasks (0000-00-00)’
+ 
+      It is clearly the intention that ‘No_Task_Hierarchy’ is intended to
+      forbid tasks declared locally within subprograms, or functions
+      returning task objects, and that is the implementation that GNAT
+      has always provided.  However the language in the RM was not
+      sufficiently clear on this point.  Thus this is a documentation
+      change in the RM only.
+ 
+      RM References: D.07 (3/3)
+ 
+    * ‘AI-0211 No_Relative_Delays forbids Set_Handler use (2010-07-09)’
+ 
+      The restriction ‘No_Relative_Delays’ forbids any calls to the
+      subprogram ‘Ada.Real_Time.Timing_Events.Set_Handler’.
+ 
+      RM References: D.07 (5) D.07 (10/2) D.07 (10.4/2) D.07 (10.7/2)
+ 
+    * ‘AI-0190 pragma Default_Storage_Pool (2010-09-15)’
+ 
+      This AI introduces a new pragma ‘Default_Storage_Pool’, which can
+      be used to control storage pools globally.  In particular, you can
+      force every access type that is used for allocation (‘new’) to have
+      an explicit storage pool, or you can declare a pool globally to be
+      used for all access types that lack an explicit one.
+ 
+      RM References: D.07 (8)
+ 
+    * ‘AI-0189 No_Allocators_After_Elaboration (2010-01-23)’
+ 
+      This AI introduces a new restriction
+      ‘No_Allocators_After_Elaboration’, which says that no dynamic
+      allocation will occur once elaboration is completed.  In general
+      this requires a run-time check, which is not required, and which
+      GNAT does not attempt.  But the static cases of allocators in a
+      task body or in the body of the main program are detected and
+      flagged at compile or bind time.
+ 
+      RM References: D.07 (19.1/2) H.04 (23.3/2)
+ 
+    * ‘AI-0171 Pragma CPU and Ravenscar Profile (2010-09-24)’
+ 
+      A new package ‘System.Multiprocessors’ is added, together with the
+      definition of pragma ‘CPU’ for controlling task affinity.  A new no
+      dependence restriction, on
+      ‘System.Multiprocessors.Dispatching_Domains’, is added to the
+      Ravenscar profile.
+ 
+      RM References: D.13.01 (4/2) D.16
+ 
+    * ‘AI-0210 Correct Timing_Events metric (0000-00-00)’
+ 
+      This is a documentation only issue regarding wording of metric
+      requirements, that does not affect the implementation of the
+      compiler.
+ 
+      RM References: D.15 (24/2)
+ 
+    * ‘AI-0206 Remote types packages and preelaborate (2010-07-24)’
+ 
+      Remote types packages are now allowed to depend on preelaborated
+      packages.  This was formerly considered illegal.
+ 
+      RM References: E.02.02 (6)
+ 
+    * ‘AI-0152 Restriction No_Anonymous_Allocators (2010-09-08)’
+ 
+      Restriction ‘No_Anonymous_Allocators’ prevents the use of
+      allocators where the type of the returned value is an anonymous
+      access type.
+ 
+      RM References: H.04 (8/1)
+ 
+ 
+ File: gnat_rm.info,  Node: Security Hardening Features,  Next: Obsolescent Features,  Prev: Implementation of Ada 2012 Features,  Up: Top
+ 
+ 17 Security Hardening Features
+ ******************************
+ 
+ This chapter describes Ada extensions aimed at security hardening that
+ are provided by GNAT.
+ 
+ The features in this chapter are currently experimental and subject to
+ change.
+ 
+ * Menu:
+ 
+ * Register Scrubbing::
+ * Stack Scrubbing::
+ * Hardened Conditionals::
+ * Hardened Booleans::
+ * Control Flow Redundancy::
+ 
+ 
+ File: gnat_rm.info,  Node: Register Scrubbing,  Next: Stack Scrubbing,  Up: Security Hardening Features
+ 
+ 17.1 Register Scrubbing
+ =======================
+ 
+ GNAT can generate code to zero-out hardware registers before returning
+ from a subprogram.
+ 
+ It can be enabled with the ‘-fzero-call-used-regs=`choice'’ command-line
+ option, to affect all subprograms in a compilation, and with a
+ ‘Machine_Attribute’ pragma, to affect only specific subprograms.
+ 
+      procedure Foo;
+      pragma Machine_Attribute (Foo, "zero_call_used_regs", "used");
+      --  Before returning, Foo scrubs only call-clobbered registers
+      --  that it uses itself.
+ 
+      function Bar return Integer;
+      pragma Machine_Attribute (Bar, "zero_call_used_regs", "all");
+      --  Before returning, Bar scrubs all call-clobbered registers.
+ 
+ For usage and more details on the command-line option, on the
+ ‘zero_call_used_regs’ attribute, and on their use with other programming
+ languages, see ‘Using the GNU Compiler Collection (GCC)’.
+ 
+ 
+ File: gnat_rm.info,  Node: Stack Scrubbing,  Next: Hardened Conditionals,  Prev: Register Scrubbing,  Up: Security Hardening Features
+ 
+ 17.2 Stack Scrubbing
+ ====================
+ 
+ GNAT can generate code to zero-out stack frames used by subprograms.
+ 
+ It can be activated with the ‘Machine_Attribute’ pragma, on specific
+ subprograms and variables, or their types.  (This attribute always
+ applies to a type, even when it is associated with a subprogram or a
+ variable.)
+ 
+      function Foo returns Integer;
+      pragma Machine_Attribute (Foo, "strub");
+      --  Foo and its callers are modified so as to scrub the stack
+      --  space used by Foo after it returns.  Shorthand for:
+      --  pragma Machine_Attribute (Foo, "strub", "at-calls");
+ 
+      procedure Bar;
+      pragma Machine_Attribute (Bar, "strub", "internal");
+      --  Bar is turned into a wrapper for its original body,
+      --  and they scrub the stack used by the original body.
+ 
+      Var : Integer;
+      pragma Machine_Attribute (Var, "strub");
+      --  Reading from Var in a subprogram enables stack scrubbing
+      --  of the stack space used by the subprogram.  Furthermore, if
+      --  Var is declared within a subprogram, this also enables
+      --  scrubbing of the stack space used by that subprogram.
+ 
+ Given these declarations, Foo has its type and body modified as follows:
+ 
+      function Foo (<WaterMark> : in out System.Address) returns Integer
+      is
+        --  ...
+      begin
+        <__strub_update> (<WaterMark>);  --  Updates the stack WaterMark.
+        --  ...
+      end;
+ 
+ whereas its callers are modified from:
+ 
+      X := Foo;
+ 
+ to:
+ 
+      declare
+        <WaterMark> : System.Address;
+      begin
+        <__strub_enter> (<WaterMark>);  -- Initialize <WaterMark>.
+        X := Foo (<WaterMark>);
+        <__strub_leave> (<WaterMark>);  -- Scrubs stack up to <WaterMark>.
+      end;
+ 
+ As for Bar, because it is strubbed in internal mode, its callers are not
+ modified.  Its definition is modified roughly as follows:
+ 
+      procedure Bar is
+        <WaterMark> : System.Address;
+        procedure Strubbed_Bar (<WaterMark> : in out System.Address) is
+        begin
+          <__strub_update> (<WaterMark>);  --  Updates the stack WaterMark.
+          -- original Bar body.
+        end Strubbed_Bar;
+      begin
+        <__strub_enter> (<WaterMark>);  -- Initialize <WaterMark>.
+        Strubbed_Bar (<WaterMark>);
+        <__strub_leave> (<WaterMark>);  -- Scrubs stack up to <WaterMark>.
+      end Bar;
+ 
+ There are also ‘-fstrub=`choice'’ command-line options to control
+ default settings.  For usage and more details on the command-line
+ options, on the ‘strub’ attribute, and their use with other programming
+ languages, see ‘Using the GNU Compiler Collection (GCC)’.
+ 
+ Note that Ada secondary stacks are not scrubbed.  The restriction
+ ‘No_Secondary_Stack’ avoids their use, and thus their accidental
+ preservation of data that should be scrubbed.
+ 
+ Attributes ‘Access’ and ‘Unconstrained_Access’ of variables and
+ constants with ‘strub’ enabled require types with ‘strub’ enabled; there
+ is no way to express an access-to-strub type otherwise.
+ ‘Unchecked_Access’ bypasses this constraint, but the resulting access
+ type designates a non-strub type.
+ 
+      VI : aliased Integer;
+      pragma Machine_Attribute (VI, "strub");
+      XsVI : access Integer := VI'Access; -- Error.
+      UXsVI : access Integer := VI'Unchecked_Access; -- OK,
+      --  UXsVI does *not* enable strub in subprograms that
+      --  dereference it to obtain the UXsVI.all value.
+ 
+      type Strub_Int is new Integer;
+      pragma Machine_Attribute (Strub_Int, "strub");
+      VSI : aliased Strub_Int;
+      XsVSI : access Strub_Int := VSI'Access; -- OK,
+      --  VSI and XsVSI.all both enable strub in subprograms that
+      --  read their values.
+ 
+ Every access-to-subprogram type, renaming, and overriding and overridden
+ dispatching operations that may refer to a subprogram with an
+ attribute-modified interface must be annotated with the same
+ interface-modifying attribute.  Access-to-subprogram types can be
+ explicitly converted to different strub modes, as long as they are
+ interface-compatible (i.e., adding or removing ‘at-calls’ is not
+ allowed).  For example, a ‘strub’-‘disabled’ subprogram can be turned
+ ‘callable’ through such an explicit conversion:
+ 
+      type TBar is access procedure;
+ 
+      type TBar_Callable is access procedure;
+      pragma Machine_Attribute (TBar_Callable, "strub", "callable");
+      --  The attribute modifies the procedure type, rather than the
+      --  access type, because of the extra argument after "strub",
+      --  only applicable to subprogram types.
+ 
+      Bar_Callable_Ptr : constant TBar_Callable
+                 := TBar_Callable (TBar'(Bar'Access));
+ 
+      procedure Bar_Callable renames Bar_Callable_Ptr.all;
+      pragma Machine_Attribute (Bar_Callable, "strub", "callable");
+ 
+ Note that the renaming declaration is expanded to a full subprogram
+ body, it won’t be just an alias.  Only if it is inlined will it be as
+ efficient as a call by dereferencing the access-to-subprogram constant
+ Bar_Callable_Ptr.
+ 
+ 
+ File: gnat_rm.info,  Node: Hardened Conditionals,  Next: Hardened Booleans,  Prev: Stack Scrubbing,  Up: Security Hardening Features
+ 
+ 17.3 Hardened Conditionals
+ ==========================
+ 
+ GNAT can harden conditionals to protect against control-flow attacks.
+ 
+ This is accomplished by two complementary transformations, each
+ activated by a separate command-line option.
+ 
+ The option ‘-fharden-compares’ enables hardening of compares that
+ compute results stored in variables, adding verification that the
+ reversed compare yields the opposite result, turning:
+ 
+      B := X = Y;
+ 
+ into:
+ 
+      B := X = Y;
+      declare
+        NotB : Boolean := X /= Y; -- Computed independently of B.
+      begin
+        if B = NotB then
+          <__builtin_trap>;
+        end if;
+      end;
+ 
+ The option ‘-fharden-conditional-branches’ enables hardening of compares
+ that guard conditional branches, adding verification of the reversed
+ compare to both execution paths, turning:
+ 
+      if X = Y then
+        X := Z + 1;
+      else
+        Y := Z - 1;
+      end if;
+ 
+ into:
+ 
+      if X = Y then
+        if X /= Y then -- Computed independently of X = Y.
+          <__builtin_trap>;
+        end if;
+        X := Z + 1;
+      else
+        if X /= Y then -- Computed independently of X = Y.
+          null;
+        else
+          <__builtin_trap>;
+        end if;
+        Y := Z - 1;
+      end if;
+ 
+ These transformations are introduced late in the compilation pipeline,
+ long after boolean expressions are decomposed into separate compares,
+ each one turned into either a conditional branch or a compare whose
+ result is stored in a boolean variable or temporary.  Compiler
+ optimizations, if enabled, may also turn conditional branches into
+ stored compares, and vice-versa, or into operations with implied
+ conditionals (e.g.  MIN and MAX). Conditionals may also be optimized out
+ entirely, if their value can be determined at compile time, and
+ occasionally multiple compares can be combined into one.
+ 
+ It is thus difficult to predict which of these two options will affect a
+ specific compare operation expressed in source code.  Using both options
+ ensures that every compare that is neither optimized out nor optimized
+ into implied conditionals will be hardened.
+ 
+ The addition of reversed compares can be observed by enabling the dump
+ files of the corresponding passes, through command-line options
+ ‘-fdump-tree-hardcmp’ and ‘-fdump-tree-hardcbr’, respectively.
+ 
+ They are separate options, however, because of the significantly
+ different performance impact of the hardening transformations.
+ 
+ For usage and more details on the command-line options, see ‘Using the
+ GNU Compiler Collection (GCC)’. These options can be used with other
+ programming languages supported by GCC.
+ 
+ 
+ File: gnat_rm.info,  Node: Hardened Booleans,  Next: Control Flow Redundancy,  Prev: Hardened Conditionals,  Up: Security Hardening Features
+ 
+ 17.4 Hardened Booleans
+ ======================
+ 
+ Ada has built-in support for introducing boolean types with alternative
+ representations, using representation clauses:
+ 
+      type HBool is new Boolean;
+      for HBool use (16#5a#, 16#a5#);
+      for HBool'Size use 8;
+ 
+ When validity checking is enabled, the compiler will check that
+ variables of such types hold values corresponding to the selected
+ representations.
+ 
+ There are multiple strategies for where to introduce validity checking
+ (see ‘-gnatV’ options).  Their goal is to guard against various kinds of
+ programming errors, and GNAT strives to omit checks when program logic
+ rules out an invalid value, and optimizers may further remove checks
+ found to be redundant.
+ 
+ For additional hardening, the ‘hardbool’ ‘Machine_Attribute’ pragma can
+ be used to annotate boolean types with representation clauses, so that
+ expressions of such types used as conditions are checked even when
+ compiling with ‘-gnatVT’:
+ 
+      pragma Machine_Attribute (HBool, "hardbool");
+ 
+      function To_Boolean (X : HBool) returns Boolean is (Boolean (X));
+ 
+ is compiled roughly like:
+ 
+      function To_Boolean (X : HBool) returns Boolean is
+      begin
+        if X not in True | False then
+          raise Constraint_Error;
+        elsif X in True then
+          return True;
+        else
+          return False;
+        end if;
+      end To_Boolean;
+ 
+ Note that ‘-gnatVn’ will disable even ‘hardbool’ testing.
+ 
+ Analogous behavior is available as a GCC extension to the C and
+ Objective C programming languages, through the ‘hardbool’ attribute,
+ with the difference that, instead of raising a Constraint_Error
+ exception, when a hardened boolean variable is found to hold a value
+ that stands for neither True nor False, the program traps.  For usage
+ and more details on that attribute, see ‘Using the GNU Compiler
+ Collection (GCC)’.
+ 
+ 
+ File: gnat_rm.info,  Node: Control Flow Redundancy,  Prev: Hardened Booleans,  Up: Security Hardening Features
+ 
+ 17.5 Control Flow Redundancy
+ ============================
+ 
+ GNAT can guard against unexpected execution flows, such as branching
+ into the middle of subprograms, as in Return Oriented Programming
+ exploits.
+ 
+ In units compiled with ‘-fharden-control-flow-redundancy’, subprograms
+ are instrumented so that, every time they are called, basic blocks take
+ note as control flows through them, and, before returning, subprograms
+ verify that the taken notes are consistent with the control-flow graph.
+ 
+ Functions with too many basic blocks, or with multiple return points,
+ call a run-time function to perform the verification.  Other functions
+ perform the verification inline before returning.
+ 
+ Optimizing the inlined verification can be quite time consuming, so the
+ default upper limit for the inline mode is set at 16 blocks.
+ Command-line option ‘--param hardcfr-max-inline-blocks=’ can override
+ it.
+ 
+ Even though typically sparse control-flow graphs exhibit run-time
+ verification time nearly proportional to the block count of a
+ subprogram, it may become very significant for generated subprograms
+ with thousands of blocks.  Command-line option ‘--param
+ hardcfr-max-blocks=’ can set an upper limit for instrumentation.
+ 
+ For each block that is marked as visited, the mechanism checks that at
+ least one of its predecessors, and at least one of its successors, are
+ also marked as visited.
+ 
+ Verification is performed just before a subprogram returns.  The
+ following fragment:
+ 
+      if X then
+        Y := F (Z);
+        return;
+      end if;
+ 
+ gets turned into:
+ 
+      type Visited_Bitmap is array (1..N) of Boolean with Pack;
+      Visited : aliased Visited_Bitmap := (others => False);
+      --  Bitmap of visited blocks.  N is the basic block count.
+      [...]
+      --  Basic block #I
+      Visited(I) := True;
+      if X then
+        --  Basic block #J
+        Visited(J) := True;
+        Y := F (Z);
+        CFR.Check (N, Visited'Access, CFG'Access);
+        --  CFR is a hypothetical package whose Check procedure calls
+        --  libgcc's __hardcfr_check, that traps if the Visited bitmap
+        --  does not hold a valid path in CFG, the run-time
+        --  representation of the control flow graph in the enclosing
+        --  subprogram.
+        return;
+      end if;
+      --  Basic block #K
+      Visited(K) := True;
+ 
+ Verification would also be performed before tail calls, if any
+ front-ends marked them as mandatory or desirable, but none do.  Regular
+ calls are optimized into tail calls too late for this transformation to
+ act on it.
+ 
+ In order to avoid adding verification after potential tail calls, which
+ would prevent tail-call optimization, we recognize returning calls,
+ i.e., calls whose result, if any, is returned by the calling subprogram
+ to its caller immediately after the call returns.  Verification is
+ performed before such calls, whether or not they are ultimately
+ optimized to tail calls.  This behavior is enabled by default whenever
+ sibcall optimization is enabled (see ‘-foptimize-sibling-calls’); it may
+ be disabled with ‘-fno-hardcfr-check-returning-calls’, or enabled with
+ ‘-fhardcfr-check-returning-calls’, regardless of the optimization, but
+ the lack of other optimizations may prevent calls from being recognized
+ as returning calls:
+ 
+      --  CFR.Check here, with -fhardcfr-check-returning-calls.
+      P (X);
+      --  CFR.Check here, with -fno-hardcfr-check-returning-calls.
+      return;
+ 
+ or:
+ 
+      --  CFR.Check here, with -fhardcfr-check-returning-calls.
+      R := F (X);
+      --  CFR.Check here, with -fno-hardcfr-check-returning-calls.
+      return R;
+ 
+ Any subprogram from which an exception may escape, i.e., that may raise
+ or propagate an exception that isn’t handled internally, is conceptually
+ enclosed by a cleanup handler that performs verification, unless this is
+ disabled with ‘-fno-hardcfr-check-exceptions’.  With this feature
+ enabled, a subprogram body containing:
+ 
+      --  ...
+        Y := F (X);  -- May raise exceptions.
+      --  ...
+        raise E;  -- Not handled internally.
+      --  ...
+ 
+ gets modified as follows:
+ 
+      begin
+        --  ...
+          Y := F (X);  -- May raise exceptions.
+        --  ...
+          raise E;  -- Not handled internally.
+        --  ...
+      exception
+        when others =>
+          CFR.Check (N, Visited'Access, CFG'Access);
+          raise;
+      end;
+ 
+ Verification may also be performed before No_Return calls, whether only
+ nothrow ones, with ‘-fhardcfr-check-noreturn-calls=nothrow’, or all of
+ them, with ‘-fhardcfr-check-noreturn-calls=always’.  The default is
+ ‘-fhardcfr-check-noreturn-calls=never’ for this feature, that disables
+ checking before No_Return calls.
+ 
+ When a No_Return call returns control to its caller through an
+ exception, verification may have already been performed before the call,
+ if ‘-fhardcfr-check-noreturn-calls=always’ is in effect.  The compiler
+ arranges for already-checked No_Return calls without a preexisting
+ handler to bypass the implicitly-added cleanup handler and thus the
+ redundant check, but a local exception or cleanup handler, if present,
+ will modify the set of visited blocks, and checking will take place
+ again when the caller reaches the next verification point, whether it is
+ a return or reraise statement after the exception is otherwise handled,
+ or even another No_Return call.
+ 
+ The instrumentation for hardening with control flow redundancy can be
+ observed in dump files generated by the command-line option
+ ‘-fdump-tree-hardcfr’.
+ 
+ For more details on the control flow redundancy command-line options,
+ see ‘Using the GNU Compiler Collection (GCC)’. These options can be used
+ with other programming languages supported by GCC.
+ 
+ 
+ File: gnat_rm.info,  Node: Obsolescent Features,  Next: Compatibility and Porting Guide,  Prev: Security Hardening Features,  Up: Top
+ 
+ 18 Obsolescent Features
+ ***********************
+ 
+ This chapter describes features that are provided by GNAT, but are
+ considered obsolescent since there are preferred ways of achieving the
+ same effect.  These features are provided solely for historical
+ compatibility purposes.
+ 
+ * Menu:
+ 
+ * pragma No_Run_Time::
+ * pragma Ravenscar::
+ * pragma Restricted_Run_Time::
+ * pragma Task_Info::
+ * package System.Task_Info (s-tasinf.ads): package System Task_Info s-tasinf ads.
+ 
+ 
+ File: gnat_rm.info,  Node: pragma No_Run_Time,  Next: pragma Ravenscar,  Up: Obsolescent Features
+ 
+ 18.1 pragma No_Run_Time
+ =======================
+ 
+ The pragma ‘No_Run_Time’ is used to achieve an affect similar to the use
+ of the “Zero Foot Print” configurable run time, but without requiring a
+ specially configured run time.  The result of using this pragma, which
+ must be used for all units in a partition, is to restrict the use of any
+ language features requiring run-time support code.  The preferred usage
+ is to use an appropriately configured run-time that includes just those
+ features that are to be made accessible.
+ 
+ 
+ File: gnat_rm.info,  Node: pragma Ravenscar,  Next: pragma Restricted_Run_Time,  Prev: pragma No_Run_Time,  Up: Obsolescent Features
+ 
+ 18.2 pragma Ravenscar
+ =====================
+ 
+ The pragma ‘Ravenscar’ has exactly the same effect as pragma ‘Profile
+ (Ravenscar)’.  The latter usage is preferred since it is part of the new
+ Ada 2005 standard.
+ 
+ 
+ File: gnat_rm.info,  Node: pragma Restricted_Run_Time,  Next: pragma Task_Info,  Prev: pragma Ravenscar,  Up: Obsolescent Features
+ 
+ 18.3 pragma Restricted_Run_Time
+ ===============================
+ 
+ The pragma ‘Restricted_Run_Time’ has exactly the same effect as pragma
+ ‘Profile (Restricted)’.  The latter usage is preferred since the Ada
+ 2005 pragma ‘Profile’ is intended for this kind of implementation
+ dependent addition.
+ 
+ 
+ File: gnat_rm.info,  Node: pragma Task_Info,  Next: package System Task_Info s-tasinf ads,  Prev: pragma Restricted_Run_Time,  Up: Obsolescent Features
+ 
+ 18.4 pragma Task_Info
+ =====================
+ 
+ The functionality provided by pragma ‘Task_Info’ is now part of the Ada
+ language.  The ‘CPU’ aspect and the package ‘System.Multiprocessors’
+ offer a less system-dependent way to specify task affinity or to query
+ the number of processors.
+ 
+ Syntax
+ 
+      pragma Task_Info (EXPRESSION);
+ 
+ This pragma appears within a task definition (like pragma ‘Priority’)
+ and applies to the task in which it appears.  The argument must be of
+ type ‘System.Task_Info.Task_Info_Type’.  The ‘Task_Info’ pragma provides
+ system dependent control over aspects of tasking implementation, for
+ example, the ability to map tasks to specific processors.  For details
+ on the facilities available for the version of GNAT that you are using,
+ see the documentation in the spec of package System.Task_Info in the
+ runtime library.
+ 
+ 
+ File: gnat_rm.info,  Node: package System Task_Info s-tasinf ads,  Prev: pragma Task_Info,  Up: Obsolescent Features
+ 
+ 18.5 package System.Task_Info (‘s-tasinf.ads’)
+ ==============================================
+ 
+ This package provides target dependent functionality that is used to
+ support the ‘Task_Info’ pragma.  The predefined Ada package
+ ‘System.Multiprocessors’ and the ‘CPU’ aspect now provide a standard
+ replacement for GNAT’s ‘Task_Info’ functionality.
+ 
+ 
+ File: gnat_rm.info,  Node: Compatibility and Porting Guide,  Next: GNU Free Documentation License,  Prev: Obsolescent Features,  Up: Top
+ 
+ 19 Compatibility and Porting Guide
+ **********************************
+ 
+ This chapter presents some guidelines for developing portable Ada code,
+ describes the compatibility issues that may arise between GNAT and other
+ Ada compilation systems (including those for Ada 83), and shows how GNAT
+ can expedite porting applications developed in other Ada environments.
+ 
+ * Menu:
+ 
+ * Writing Portable Fixed-Point Declarations::
+ * Compatibility with Ada 83::
+ * Compatibility between Ada 95 and Ada 2005::
+ * Implementation-dependent characteristics::
+ * Compatibility with Other Ada Systems::
+ * Representation Clauses::
+ * Compatibility with HP Ada 83::
+ 
+ 
+ File: gnat_rm.info,  Node: Writing Portable Fixed-Point Declarations,  Next: Compatibility with Ada 83,  Up: Compatibility and Porting Guide
+ 
+ 19.1 Writing Portable Fixed-Point Declarations
+ ==============================================
+ 
+ The Ada Reference Manual gives an implementation freedom to choose
+ bounds that are narrower by ‘Small’ from the given bounds.  For example,
+ if we write
+ 
+      type F1 is delta 1.0 range -128.0 .. +128.0;
+ 
+ then the implementation is allowed to choose -128.0 ..  +127.0 if it
+ likes, but is not required to do so.
+ 
+ This leads to possible portability problems, so let’s have a closer look
+ at this, and figure out how to avoid these problems.
+ 
+ First, why does this freedom exist, and why would an implementation take
+ advantage of it?  To answer this, take a closer look at the type
+ declaration for ‘F1’ above.  If the compiler uses the given bounds, it
+ would need 9 bits to hold the largest positive value (and typically that
+ means 16 bits on all machines).  But if the implementation chooses the
+ +127.0 bound then it can fit values of the type in 8 bits.
+ 
+ Why not make the user write +127.0 if that’s what is wanted?  The
+ rationale is that if you are thinking of fixed point as a kind of ‘poor
+ man’s floating-point’, then you don’t want to be thinking about the
+ scaled integers that are used in its representation.  Let’s take another
+ example:
+ 
+      type F2 is delta 2.0**(-15) range -1.0 .. +1.0;
+ 
+ Looking at this declaration, it seems casually as though it should fit
+ in 16 bits, but again that extra positive value +1.0 has the scaled
+ integer equivalent of 2**15 which is one too big for signed 16 bits.
+ The implementation can treat this as:
+ 
+      type F2 is delta 2.0**(-15) range -1.0 .. +1.0-(2.0**(-15));
+ 
+ and the Ada language design team felt that this was too annoying to
+ require.  We don’t need to debate this decision at this point, since it
+ is well established (the rule about narrowing the ranges dates to Ada
+ 83).
+ 
+ But the important point is that an implementation is not required to do
+ this narrowing, so we have a potential portability problem.  We could
+ imagine three types of implementation:
+ 
+   a. those that narrow the range automatically if they can figure out
+      that the narrower range will allow storage in a smaller machine
+      unit,
+ 
+   b. those that will narrow only if forced to by a ‘'Size’ clause, and
+ 
+   c. those that will never narrow.
+ 
+ Now if we are language theoreticians, we can imagine a fourth approach:
+ to narrow all the time, e.g.  to treat
+ 
+      type F3 is delta 1.0 range -10.0 .. +23.0;
+ 
+ as though it had been written:
+ 
+      type F3 is delta 1.0 range -9.0 .. +22.0;
+ 
+ But although technically allowed, such a behavior would be hostile and
+ silly, and no real compiler would do this.  All real compilers will fall
+ into one of the categories (a), (b) or (c) above.
+ 
+ So, how do you get the compiler to do what you want?  The answer is give
+ the actual bounds you want, and then use a ‘'Small’ clause and a ‘'Size’
+ clause to absolutely pin down what the compiler does.  E.g., for ‘F2’
+ above, we will write:
+ 
+      My_Small : constant := 2.0**(-15);
+      My_First : constant := -1.0;
+      My_Last  : constant := +1.0 - My_Small;
+ 
+      type F2 is delta My_Small range My_First .. My_Last;
+ 
+ and then add
+ 
+      for F2'Small use my_Small;
+      for F2'Size  use 16;
+ 
+ In practice all compilers will do the same thing here and will give you
+ what you want, so the above declarations are fully portable.  If you
+ really want to play language lawyer and guard against ludicrous behavior
+ by the compiler you could add
+ 
+      Test1 : constant := 1 / Boolean'Pos (F2'First = My_First);
+      Test2 : constant := 1 / Boolean'Pos (F2'Last  = My_Last);
+ 
+ One or other or both are allowed to be illegal if the compiler is
+ behaving in a silly manner, but at least the silly compiler will not get
+ away with silently messing with your (very clear) intentions.
+ 
+ If you follow this scheme you will be guaranteed that your fixed-point
+ types will be portable.
+ 
+ 
+ File: gnat_rm.info,  Node: Compatibility with Ada 83,  Next: Compatibility between Ada 95 and Ada 2005,  Prev: Writing Portable Fixed-Point Declarations,  Up: Compatibility and Porting Guide
+ 
+ 19.2 Compatibility with Ada 83
+ ==============================
+ 
+ Ada 95 and the subsequent revisions Ada 2005 and Ada 2012 are highly
+ upwards compatible with Ada 83.  In particular, the design intention was
+ that the difficulties associated with moving from Ada 83 to later
+ versions of the standard should be no greater than those that occur when
+ moving from one Ada 83 system to another.
+ 
+ However, there are a number of points at which there are minor
+ incompatibilities.  The ‘Ada 95 Annotated Reference Manual’ contains
+ full details of these issues as they relate to Ada 95, and should be
+ consulted for a complete treatment.  In practice the following
+ subsections treat the most likely issues to be encountered.
+ 
+ * Menu:
+ 
+ * Legal Ada 83 programs that are illegal in Ada 95::
+ * More deterministic semantics::
+ * Changed semantics::
+ * Other language compatibility issues::
+ 
+ 
+ File: gnat_rm.info,  Node: Legal Ada 83 programs that are illegal in Ada 95,  Next: More deterministic semantics,  Up: Compatibility with Ada 83
+ 
+ 19.2.1 Legal Ada 83 programs that are illegal in Ada 95
+ -------------------------------------------------------
+ 
+ Some legal Ada 83 programs are illegal (i.e., they will fail to compile)
+ in Ada 95 and later versions of the standard:
+ 
+    * ‘Character literals’
+ 
+      Some uses of character literals are ambiguous.  Since Ada 95 has
+      introduced ‘Wide_Character’ as a new predefined character type,
+      some uses of character literals that were legal in Ada 83 are
+      illegal in Ada 95.  For example:
+ 
+           for Char in 'A' .. 'Z' loop ... end loop;
+ 
+      The problem is that ‘A’ and ‘Z’ could be from either ‘Character’ or
+      ‘Wide_Character’.  The simplest correction is to make the type
+      explicit; e.g.:
+ 
+           for Char in Character range 'A' .. 'Z' loop ... end loop;
+ 
+    * ‘New reserved words’
+ 
+      The identifiers ‘abstract’, ‘aliased’, ‘protected’, ‘requeue’,
+      ‘tagged’, and ‘until’ are reserved in Ada 95.  Existing Ada 83 code
+      using any of these identifiers must be edited to use some
+      alternative name.
+ 
+    * ‘Freezing rules’
+ 
+      The rules in Ada 95 are slightly different with regard to the point
+      at which entities are frozen, and representation pragmas and
+      clauses are not permitted past the freeze point.  This shows up
+      most typically in the form of an error message complaining that a
+      representation item appears too late, and the appropriate
+      corrective action is to move the item nearer to the declaration of
+      the entity to which it refers.
+ 
+      A particular case is that representation pragmas cannot be applied
+      to a subprogram body.  If necessary, a separate subprogram
+      declaration must be introduced to which the pragma can be applied.
+ 
+    * ‘Optional bodies for library packages’
+ 
+      In Ada 83, a package that did not require a package body was
+      nevertheless allowed to have one.  This lead to certain surprises
+      in compiling large systems (situations in which the body could be
+      unexpectedly ignored by the binder).  In Ada 95, if a package does
+      not require a body then it is not permitted to have a body.  To fix
+      this problem, simply remove a redundant body if it is empty, or, if
+      it is non-empty, introduce a dummy declaration into the spec that
+      makes the body required.  One approach is to add a private part to
+      the package declaration (if necessary), and define a parameterless
+      procedure called ‘Requires_Body’, which must then be given a dummy
+      procedure body in the package body, which then becomes required.
+      Another approach (assuming that this does not introduce elaboration
+      circularities) is to add an ‘Elaborate_Body’ pragma to the package
+      spec, since one effect of this pragma is to require the presence of
+      a package body.
+ 
+    * ‘Numeric_Error is the same exception as Constraint_Error’
+ 
+      In Ada 95, the exception ‘Numeric_Error’ is a renaming of
+      ‘Constraint_Error’.  This means that it is illegal to have separate
+      exception handlers for the two exceptions.  The fix is simply to
+      remove the handler for the ‘Numeric_Error’ case (since even in Ada
+      83, a compiler was free to raise ‘Constraint_Error’ in place of
+      ‘Numeric_Error’ in all cases).
+ 
+    * ‘Indefinite subtypes in generics’
+ 
+      In Ada 83, it was permissible to pass an indefinite type (e.g,
+      ‘String’) as the actual for a generic formal private type, but then
+      the instantiation would be illegal if there were any instances of
+      declarations of variables of this type in the generic body.  In Ada
+      95, to avoid this clear violation of the methodological principle
+      known as the ‘contract model’, the generic declaration explicitly
+      indicates whether or not such instantiations are permitted.  If a
+      generic formal parameter has explicit unknown discriminants,
+      indicated by using ‘(<>)’ after the subtype name, then it can be
+      instantiated with indefinite types, but no stand-alone variables
+      can be declared of this type.  Any attempt to declare such a
+      variable will result in an illegality at the time the generic is
+      declared.  If the ‘(<>)’ notation is not used, then it is illegal
+      to instantiate the generic with an indefinite type.  This is the
+      potential incompatibility issue when porting Ada 83 code to Ada 95.
+      It will show up as a compile time error, and the fix is usually
+      simply to add the ‘(<>)’ to the generic declaration.
+ 
+ 
+ File: gnat_rm.info,  Node: More deterministic semantics,  Next: Changed semantics,  Prev: Legal Ada 83 programs that are illegal in Ada 95,  Up: Compatibility with Ada 83
+ 
+ 19.2.2 More deterministic semantics
+ -----------------------------------
+ 
+    * ‘Conversions’
+ 
+      Conversions from real types to integer types round away from 0.  In
+      Ada 83 the conversion Integer(2.5) could deliver either 2 or 3 as
+      its value.  This implementation freedom was intended to support
+      unbiased rounding in statistical applications, but in practice it
+      interfered with portability.  In Ada 95 the conversion semantics
+      are unambiguous, and rounding away from 0 is required.  Numeric
+      code may be affected by this change in semantics.  Note, though,
+      that this issue is no worse than already existed in Ada 83 when
+      porting code from one vendor to another.
+ 
+    * ‘Tasking’
+ 
+      The Real-Time Annex introduces a set of policies that define the
+      behavior of features that were implementation dependent in Ada 83,
+      such as the order in which open select branches are executed.
+ 
+ 
+ File: gnat_rm.info,  Node: Changed semantics,  Next: Other language compatibility issues,  Prev: More deterministic semantics,  Up: Compatibility with Ada 83
+ 
+ 19.2.3 Changed semantics
+ ------------------------
+ 
+ The worst kind of incompatibility is one where a program that is legal
+ in Ada 83 is also legal in Ada 95 but can have an effect in Ada 95 that
+ was not possible in Ada 83.  Fortunately this is extremely rare, but the
+ one situation that you should be alert to is the change in the
+ predefined type ‘Character’ from 7-bit ASCII to 8-bit Latin-1.
+ 
+    * ‘Range of type ‘‘Character‘‘’
+ 
+      The range of ‘Standard.Character’ is now the full 256 characters of
+      Latin-1, whereas in most Ada 83 implementations it was restricted
+      to 128 characters.  Although some of the effects of this change
+      will be manifest in compile-time rejection of legal Ada 83 programs
+      it is possible for a working Ada 83 program to have a different
+      effect in Ada 95, one that was not permitted in Ada 83.  As an
+      example, the expression ‘Character'Pos(Character'Last)’ returned
+      ‘127’ in Ada 83 and now delivers ‘255’ as its value.  In general,
+      you should look at the logic of any character-processing Ada 83
+      program and see whether it needs to be adapted to work correctly
+      with Latin-1.  Note that the predefined Ada 95 API has a character
+      handling package that may be relevant if code needs to be adapted
+      to account for the additional Latin-1 elements.  The desirable fix
+      is to modify the program to accommodate the full character set, but
+      in some cases it may be convenient to define a subtype or derived
+      type of Character that covers only the restricted range.
+ 
+ 
+ File: gnat_rm.info,  Node: Other language compatibility issues,  Prev: Changed semantics,  Up: Compatibility with Ada 83
+ 
+ 19.2.4 Other language compatibility issues
+ ------------------------------------------
+ 
+    * ‘-gnat83’ switch
+ 
+      All implementations of GNAT provide a switch that causes GNAT to
+      operate in Ada 83 mode.  In this mode, some but not all
+      compatibility problems of the type described above are handled
+      automatically.  For example, the new reserved words introduced in
+      Ada 95 and Ada 2005 are treated simply as identifiers as in Ada 83.
+      However, in practice, it is usually advisable to make the necessary
+      modifications to the program to remove the need for using this
+      switch.  See the ‘Compiling Different Versions of Ada’ section in
+      the ‘GNAT User’s Guide’.
+ 
+    * Support for removed Ada 83 pragmas and attributes
+ 
+      A number of pragmas and attributes from Ada 83 were removed from
+      Ada 95, generally because they were replaced by other mechanisms.
+      Ada 95 and Ada 2005 compilers are allowed, but not required, to
+      implement these missing elements.  In contrast with some other
+      compilers, GNAT implements all such pragmas and attributes,
+      eliminating this compatibility concern.  These include ‘pragma
+      Interface’ and the floating point type attributes (‘Emax’,
+      ‘Mantissa’, etc.), among other items.
+ 
+ 
+ File: gnat_rm.info,  Node: Compatibility between Ada 95 and Ada 2005,  Next: Implementation-dependent characteristics,  Prev: Compatibility with Ada 83,  Up: Compatibility and Porting Guide
+ 
+ 19.3 Compatibility between Ada 95 and Ada 2005
+ ==============================================
+ 
+ Although Ada 2005 was designed to be upwards compatible with Ada 95,
+ there are a number of incompatibilities.  Several are enumerated below;
+ for a complete description please see the ‘Annotated Ada 2005 Reference
+ Manual’, or section 9.1.1 in ‘Rationale for Ada 2005’.
+ 
+    * ‘New reserved words.’
+ 
+      The words ‘interface’, ‘overriding’ and ‘synchronized’ are reserved
+      in Ada 2005.  A pre-Ada 2005 program that uses any of these as an
+      identifier will be illegal.
+ 
+    * ‘New declarations in predefined packages.’
+ 
+      A number of packages in the predefined environment contain new
+      declarations: ‘Ada.Exceptions’, ‘Ada.Real_Time’, ‘Ada.Strings’,
+      ‘Ada.Strings.Fixed’, ‘Ada.Strings.Bounded’,
+      ‘Ada.Strings.Unbounded’, ‘Ada.Strings.Wide_Fixed’,
+      ‘Ada.Strings.Wide_Bounded’, ‘Ada.Strings.Wide_Unbounded’,
+      ‘Ada.Tags’, ‘Ada.Text_IO’, and ‘Interfaces.C’.  If an Ada 95
+      program does a ‘with’ and ‘use’ of any of these packages, the new
+      declarations may cause name clashes.
+ 
+    * ‘Access parameters.’
+ 
+      A nondispatching subprogram with an access parameter cannot be
+      renamed as a dispatching operation.  This was permitted in Ada 95.
+ 
+    * ‘Access types, discriminants, and constraints.’
+ 
+      Rule changes in this area have led to some incompatibilities; for
+      example, constrained subtypes of some access types are not
+      permitted in Ada 2005.
+ 
+    * ‘Aggregates for limited types.’
+ 
+      The allowance of aggregates for limited types in Ada 2005 raises
+      the possibility of ambiguities in legal Ada 95 programs, since
+      additional types now need to be considered in expression
+      resolution.
+ 
+    * ‘Fixed-point multiplication and division.’
+ 
+      Certain expressions involving ‘*’ or ‘/’ for a fixed-point type,
+      which were legal in Ada 95 and invoked the predefined versions of
+      these operations, are now ambiguous.  The ambiguity may be resolved
+      either by applying a type conversion to the expression, or by
+      explicitly invoking the operation from package ‘Standard’.
+ 
+    * ‘Return-by-reference types.’
+ 
+      The Ada 95 return-by-reference mechanism has been removed.
+      Instead, the user can declare a function returning a value from an
+      anonymous access type.
+ 
+ 
+ File: gnat_rm.info,  Node: Implementation-dependent characteristics,  Next: Compatibility with Other Ada Systems,  Prev: Compatibility between Ada 95 and Ada 2005,  Up: Compatibility and Porting Guide
+ 
+ 19.4 Implementation-dependent characteristics
+ =============================================
+ 
+ Although the Ada language defines the semantics of each construct as
+ precisely as practical, in some situations (for example for reasons of
+ efficiency, or where the effect is heavily dependent on the host or
+ target platform) the implementation is allowed some freedom.  In porting
+ Ada 83 code to GNAT, you need to be aware of whether / how the existing
+ code exercised such implementation dependencies.  Such characteristics
+ fall into several categories, and GNAT offers specific support in
+ assisting the transition from certain Ada 83 compilers.
+ 
+ * Menu:
+ 
+ * Implementation-defined pragmas::
+ * Implementation-defined attributes::
+ * Libraries::
+ * Elaboration order::
+ * Target-specific aspects::
+ 
+ 
+ File: gnat_rm.info,  Node: Implementation-defined pragmas,  Next: Implementation-defined attributes,  Up: Implementation-dependent characteristics
+ 
+ 19.4.1 Implementation-defined pragmas
+ -------------------------------------
+ 
+ Ada compilers are allowed to supplement the language-defined pragmas,
+ and these are a potential source of non-portability.  All GNAT-defined
+ pragmas are described in *note Implementation Defined Pragmas: 7, and
+ these include several that are specifically intended to correspond to
+ other vendors’ Ada 83 pragmas.  For migrating from VADS, the pragma
+ ‘Use_VADS_Size’ may be useful.  For compatibility with HP Ada 83, GNAT
+ supplies the pragmas ‘Extend_System’, ‘Ident’, ‘Inline_Generic’,
+ ‘Interface_Name’, ‘Passive’, ‘Suppress_All’, and ‘Volatile’.  Other
+ relevant pragmas include ‘External’ and ‘Link_With’.  Some
+ vendor-specific Ada 83 pragmas (‘Share_Generic’, ‘Subtitle’, and
+ ‘Title’) are recognized, thus avoiding compiler rejection of units that
+ contain such pragmas; they are not relevant in a GNAT context and hence
+ are not otherwise implemented.
+ 
+ 
+ File: gnat_rm.info,  Node: Implementation-defined attributes,  Next: Libraries,  Prev: Implementation-defined pragmas,  Up: Implementation-dependent characteristics
+ 
+ 19.4.2 Implementation-defined attributes
+ ----------------------------------------
+ 
+ Analogous to pragmas, the set of attributes may be extended by an
+ implementation.  All GNAT-defined attributes are described in *note
+ Implementation Defined Attributes: 8, and these include several that are
+ specifically intended to correspond to other vendors’ Ada 83 attributes.
+ For migrating from VADS, the attribute ‘VADS_Size’ may be useful.  For
+ compatibility with HP Ada 83, GNAT supplies the attributes ‘Bit’,
+ ‘Machine_Size’ and ‘Type_Class’.
+ 
+ 
+ File: gnat_rm.info,  Node: Libraries,  Next: Elaboration order,  Prev: Implementation-defined attributes,  Up: Implementation-dependent characteristics
+ 
+ 19.4.3 Libraries
+ ----------------
+ 
+ Vendors may supply libraries to supplement the standard Ada API. If Ada
+ 83 code uses vendor-specific libraries then there are several ways to
+ manage this in Ada 95 and later versions of the standard:
+ 
+    * If the source code for the libraries (specs and bodies) are
+      available, then the libraries can be migrated in the same way as
+      the application.
+ 
+    * If the source code for the specs but not the bodies are available,
+      then you can reimplement the bodies.
+ 
+    * Some features introduced by Ada 95 obviate the need for library
+      support.  For example most Ada 83 vendors supplied a package for
+      unsigned integers.  The Ada 95 modular type feature is the
+      preferred way to handle this need, so instead of migrating or
+      reimplementing the unsigned integer package it may be preferable to
+      retrofit the application using modular types.
+ 
+ 
+ File: gnat_rm.info,  Node: Elaboration order,  Next: Target-specific aspects,  Prev: Libraries,  Up: Implementation-dependent characteristics
+ 
+ 19.4.4 Elaboration order
+ ------------------------
+ 
+ The implementation can choose any elaboration order consistent with the
+ unit dependency relationship.  This freedom means that some orders can
+ result in Program_Error being raised due to an ‘Access Before
+ Elaboration’: an attempt to invoke a subprogram before its body has been
+ elaborated, or to instantiate a generic before the generic body has been
+ elaborated.  By default GNAT attempts to choose a safe order (one that
+ will not encounter access before elaboration problems) by implicitly
+ inserting ‘Elaborate’ or ‘Elaborate_All’ pragmas where needed.  However,
+ this can lead to the creation of elaboration circularities and a
+ resulting rejection of the program by gnatbind.  This issue is
+ thoroughly described in the ‘Elaboration Order Handling in GNAT’
+ appendix in the ‘GNAT User’s Guide’.  In brief, there are several ways
+ to deal with this situation:
+ 
+    * Modify the program to eliminate the circularities, e.g., by moving
+      elaboration-time code into explicitly-invoked procedures
+ 
+    * Constrain the elaboration order by including explicit
+      ‘Elaborate_Body’ or ‘Elaborate’ pragmas, and then inhibit the
+      generation of implicit ‘Elaborate_All’ pragmas either globally (as
+      an effect of the ‘-gnatE’ switch) or locally (by selectively
+      suppressing elaboration checks via pragma
+      ‘Suppress(Elaboration_Check)’ when it is safe to do so).
+ 
+ 
+ File: gnat_rm.info,  Node: Target-specific aspects,  Prev: Elaboration order,  Up: Implementation-dependent characteristics
+ 
+ 19.4.5 Target-specific aspects
+ ------------------------------
+ 
+ Low-level applications need to deal with machine addresses, data
+ representations, interfacing with assembler code, and similar issues.
+ If such an Ada 83 application is being ported to different target
+ hardware (for example where the byte endianness has changed) then you
+ will need to carefully examine the program logic; the porting effort
+ will heavily depend on the robustness of the original design.  Moreover,
+ Ada 95 (and thus Ada 2005 and Ada 2012) 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 *note Representation Clauses:
+ 45a.
+ 
+ 
+ File: gnat_rm.info,  Node: Compatibility with Other Ada Systems,  Next: Representation Clauses,  Prev: Implementation-dependent characteristics,  Up: Compatibility and Porting Guide
+ 
+ 19.5 Compatibility with Other Ada Systems
+ =========================================
+ 
+ If programs avoid the use of implementation dependent and implementation
+ defined features, as documented in the ‘Ada Reference Manual’, there
+ should be a high degree of portability between GNAT and other Ada
+ systems.  The following are specific items which have proved troublesome
+ in moving Ada 95 programs from GNAT to other Ada 95 compilers, but do
+ not affect porting code to GNAT. (As of January 2007, GNAT is the only
+ compiler available for Ada 2005; the following issues may or may not
+ arise for Ada 2005 programs when other compilers appear.)
+ 
+    * ‘Ada 83 Pragmas and Attributes’
+ 
+      Ada 95 compilers are allowed, but not required, to implement the
+      missing Ada 83 pragmas and attributes that are no longer defined in
+      Ada 95.  GNAT implements all such pragmas and attributes,
+      eliminating this as a compatibility concern, but some other Ada 95
+      compilers reject these pragmas and attributes.
+ 
+    * ‘Specialized Needs Annexes’
+ 
+      GNAT implements the full set of special needs annexes.  At the
+      current time, it is the only Ada 95 compiler to do so.  This means
+      that programs making use of these features may not be portable to
+      other Ada 95 compilation systems.
+ 
+    * ‘Representation Clauses’
+ 
+      Some other Ada 95 compilers implement only the minimal set of
+      representation clauses required by the Ada 95 reference manual.
+      GNAT goes far beyond this minimal set, as described in the next
+      section.
+ 
+ 
+ File: gnat_rm.info,  Node: Representation Clauses,  Next: Compatibility with HP Ada 83,  Prev: Compatibility with Other Ada Systems,  Up: Compatibility and Porting Guide
+ 
+ 19.6 Representation Clauses
+ ===========================
+ 
+ The Ada 83 reference manual was quite vague in describing both the
+ minimal required implementation of representation clauses, and also
+ their precise effects.  Ada 95 (and thus also Ada 2005) are much more
+ explicit, but the minimal set of capabilities required is still quite
+ limited.
+ 
+ GNAT implements the full required set of capabilities in Ada 95 and Ada
+ 2005, but also goes much further, and in particular an effort has been
+ made to be compatible with existing Ada 83 usage to the greatest extent
+ possible.
+ 
+ A few cases exist in which Ada 83 compiler behavior is incompatible with
+ the requirements in Ada 95 (and thus also Ada 2005).  These are
+ instances of intentional or accidental dependence on specific
+ implementation dependent characteristics of these Ada 83 compilers.  The
+ following is a list of the cases most likely to arise in existing Ada 83
+ code.
+ 
+    * ‘Implicit Packing’
+ 
+      Some Ada 83 compilers allowed a Size specification to cause
+      implicit packing of an array or record.  This could cause expensive
+      implicit conversions for change of representation in the presence
+      of derived types, and the Ada design intends to avoid this
+      possibility.  Subsequent AI’s were issued to make it clear that
+      such implicit change of representation in response to a Size clause
+      is inadvisable, and this recommendation is represented explicitly
+      in the Ada 95 (and Ada 2005) Reference Manuals as implementation
+      advice that is followed by GNAT. The problem will show up as an
+      error message rejecting the size clause.  The fix is simply to
+      provide the explicit pragma ‘Pack’, or for more fine tuned control,
+      provide a Component_Size clause.
+ 
+    * ‘Meaning of Size Attribute’
+ 
+      The Size attribute in Ada 95 (and Ada 2005) for discrete types is
+      defined as the minimal number of bits required to hold values of
+      the type.  For example, on a 32-bit machine, the size of ‘Natural’
+      will typically be 31 and not 32 (since no sign bit is required).
+      Some Ada 83 compilers gave 31, and some 32 in this situation.  This
+      problem will usually show up as a compile time error, but not
+      always.  It is a good idea to check all uses of the ‘Size attribute
+      when porting Ada 83 code.  The GNAT specific attribute Object_Size
+      can provide a useful way of duplicating the behavior of some Ada 83
+      compiler systems.
+ 
+    * ‘Size of Access Types’
+ 
+      A common assumption in Ada 83 code is that an access type is in
+      fact a pointer, and that therefore it will be the same size as a
+      System.Address value.  This assumption is true for GNAT in most
+      cases with one exception.  For the case of a pointer to an
+      unconstrained array type (where the bounds may vary from one value
+      of the access type to another), the default is to use a ‘fat
+      pointer’, which is represented as two separate pointers, one to the
+      bounds, and one to the array.  This representation has a number of
+      advantages, including improved efficiency.  However, it may cause
+      some difficulties in porting existing Ada 83 code which makes the
+      assumption that, for example, pointers fit in 32 bits on a machine
+      with 32-bit addressing.
+ 
+      To get around this problem, GNAT also permits the use of ‘thin
+      pointers’ for access types in this case (where the designated type
+      is an unconstrained array type).  These thin pointers are indeed
+      the same size as a System.Address value.  To specify a thin
+      pointer, use a size clause for the type, for example:
+ 
+           type X is access all String;
+           for X'Size use Standard'Address_Size;
+ 
+      which will cause the type X to be represented using a single
+      pointer.  When using this representation, the bounds are right
+      behind the array.  This representation is slightly less efficient,
+      and does not allow quite such flexibility in the use of foreign
+      pointers or in using the Unrestricted_Access attribute to create
+      pointers to non-aliased objects.  But for any standard portable use
+      of the access type it will work in a functionally correct manner
+      and allow porting of existing code.  Note that another way of
+      forcing a thin pointer representation is to use a component size
+      clause for the element size in an array, or a record representation
+      clause for an access field in a record.
+ 
+      See the documentation of Unrestricted_Access in the GNAT RM for a
+      full discussion of possible problems using this attribute in
+      conjunction with thin pointers.
+ 
+ 
+ File: gnat_rm.info,  Node: Compatibility with HP Ada 83,  Prev: Representation Clauses,  Up: Compatibility and Porting Guide
+ 
+ 19.7 Compatibility with HP Ada 83
+ =================================
+ 
+ All the HP Ada 83 pragmas and attributes are recognized, although only a
+ subset of them can sensibly be implemented.  The description of pragmas
+ in *note Implementation Defined Pragmas: 7. indicates whether or not
+ they are applicable to GNAT.
+ 
+    * ‘Default floating-point representation’
+ 
+      In GNAT, the default floating-point format is IEEE, whereas in HP
+      Ada 83, it is VMS format.
+ 
+    * ‘System’
+ 
+      the package System in GNAT exactly corresponds to the definition in
+      the Ada 95 reference manual, which means that it excludes many of
+      the HP Ada 83 extensions.  However, a separate package Aux_DEC is
+      provided that contains the additional definitions, and a special
+      pragma, Extend_System allows this package to be treated
+      transparently as an extension of package System.
+ 
+ 
+ File: gnat_rm.info,  Node: GNU Free Documentation License,  Next: Index,  Prev: Compatibility and Porting Guide,  Up: Top
+ 
+ 20 GNU Free Documentation License
+ *********************************
+ 
+ Version 1.3, 3 November 2008
+ 
+ Copyright 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc
+ ‘https://fsf.org/’
+ 
+ Everyone is permitted to copy and distribute verbatim copies of this
+ license document, but changing it is not allowed.
+ 
+ ‘Preamble’
+ 
+ The purpose of this License is to make a manual, textbook, or other
+ functional and useful document “free” in the sense of freedom: to assure
+ everyone the effective freedom to copy and redistribute it, with or
+ without modifying it, either commercially or noncommercially.
+ Secondarily, this License preserves for the author and publisher a way
+ to get credit for their work, while not being considered responsible for
+ modifications made by others.
+ 
+ This License is a kind of “copyleft”, which means that derivative works
+ of the document must themselves be free in the same sense.  It
+ complements the GNU General Public License, which is a copyleft license
+ designed for free software.
+ 
+ We have designed this License in order to use it for manuals for free
+ software, because free software needs free documentation: a free program
+ should come with manuals providing the same freedoms that the software
+ does.  But this License is not limited to software manuals; it can be
+ used for any textual work, regardless of subject matter or whether it is
+ published as a printed book.  We recommend this License principally for
+ works whose purpose is instruction or reference.
+ 
+ ‘1.  APPLICABILITY AND DEFINITIONS’
+ 
+ This License applies to any manual or other work, in any medium, that
+ contains a notice placed by the copyright holder saying it can be
+ distributed under the terms of this License.  Such a notice grants a
+ world-wide, royalty-free license, unlimited in duration, to use that
+ work under the conditions stated herein.  The ‘Document’, below, refers
+ to any such manual or work.  Any member of the public is a licensee, and
+ is addressed as “‘you’”.  You accept the license if you copy, modify or
+ distribute the work in a way requiring permission under copyright law.
+ 
+ A “‘Modified Version’” of the Document means any work containing the
+ Document or a portion of it, either copied verbatim, or with
+ modifications and/or translated into another language.
+ 
+ A “‘Secondary Section’” is a named appendix or a front-matter section of
+ the Document that deals exclusively with the relationship of the
+ publishers or authors of the Document to the Document’s overall subject
+ (or to related matters) and contains nothing that could fall directly
+ within that overall subject.  (Thus, if the Document is in part a
+ textbook of mathematics, a Secondary Section may not explain any
+ mathematics.)  The relationship could be a matter of historical
+ connection with the subject or with related matters, or of legal,
+ commercial, philosophical, ethical or political position regarding them.
+ 
+ The “‘Invariant Sections’” are certain Secondary Sections whose titles
+ are designated, as being those of Invariant Sections, in the notice that
+ says that the Document is released under this License.  If a section
+ does not fit the above definition of Secondary then it is not allowed to
+ be designated as Invariant.  The Document may contain zero Invariant
+ Sections.  If the Document does not identify any Invariant Sections then
+ there are none.
+ 
+ The “‘Cover Texts’” are certain short passages of text that are listed,
+ as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+ the Document is released under this License.  A Front-Cover Text may be
+ at most 5 words, and a Back-Cover Text may be at most 25 words.
+ 
+ A “‘Transparent’” copy of the Document means a machine-readable copy,
+ represented in a format whose specification is available to the general
+ public, that is suitable for revising the document straightforwardly
+ with generic text editors or (for images composed of pixels) generic
+ paint programs or (for drawings) some widely available drawing editor,
+ and that is suitable for input to text formatters or for automatic
+ translation to a variety of formats suitable for input to text
+ formatters.  A copy made in an otherwise Transparent file format whose
+ markup, or absence of markup, has been arranged to thwart or discourage
+ subsequent modification by readers is not Transparent.  An image format
+ is not Transparent if used for any substantial amount of text.  A copy
+ that is not “Transparent” is called ‘Opaque’.
+ 
+ Examples of suitable formats for Transparent copies include plain ASCII
+ without markup, Texinfo input format, LaTeX input format, SGML or XML
+ using a publicly available DTD, and standard-conforming simple HTML,
+ PostScript or PDF designed for human modification.  Examples of
+ transparent image formats include PNG, XCF and JPG. Opaque formats
+ include proprietary formats that can be read and edited only by
+ proprietary word processors, SGML or XML for which the DTD and/or
+ processing tools are not generally available, and the machine-generated
+ HTML, PostScript or PDF produced by some word processors for output
+ purposes only.
+ 
+ The “‘Title Page’” means, for a printed book, the title page itself,
+ plus such following pages as are needed to hold, legibly, the material
+ this License requires to appear in the title page.  For works in formats
+ which do not have any title page as such, “Title Page” means the text
+ near the most prominent appearance of the work’s title, preceding the
+ beginning of the body of the text.
+ 
+ The “‘publisher’” means any person or entity that distributes copies of
+ the Document to the public.
+ 
+ A section “‘Entitled XYZ’” means a named subunit of the Document whose
+ title either is precisely XYZ or contains XYZ in parentheses following
+ text that translates XYZ in another language.  (Here XYZ stands for a
+ specific section name mentioned below, such as “‘Acknowledgements’”,
+ “‘Dedications’”, “‘Endorsements’”, or “‘History’”.)  To “‘Preserve the
+ Title’” of such a section when you modify the Document means that it
+ remains a section “Entitled XYZ” according to this definition.
+ 
+ The Document may include Warranty Disclaimers next to the notice which
+ states that this License applies to the Document.  These Warranty
+ Disclaimers are considered to be included by reference in this License,
+ but only as regards disclaiming warranties: any other implication that
+ these Warranty Disclaimers may have is void and has no effect on the
+ meaning of this License.
+ 
+ ‘2.  VERBATIM COPYING’
+ 
+ You may copy and distribute the Document in any medium, either
+ commercially or noncommercially, provided that this License, the
+ copyright notices, and the license notice saying this License applies to
+ the Document are reproduced in all copies, and that you add no other
+ conditions whatsoever to those of this License.  You may not use
+ technical measures to obstruct or control the reading or further copying
+ of the copies you make or distribute.  However, you may accept
+ compensation in exchange for copies.  If you distribute a large enough
+ number of copies you must also follow the conditions in section 3.
+ 
+ You may also lend copies, under the same conditions stated above, and
+ you may publicly display copies.
+ 
+ ‘3.  COPYING IN QUANTITY’
+ 
+ If you publish printed copies (or copies in media that commonly have
+ printed covers) of the Document, numbering more than 100, and the
+ Document’s license notice requires Cover Texts, you must enclose the
+ copies in covers that carry, clearly and legibly, all these Cover Texts:
+ Front-Cover Texts on the front cover, and Back-Cover Texts on the back
+ cover.  Both covers must also clearly and legibly identify you as the
+ publisher of these copies.  The front cover must present the full title
+ with all words of the title equally prominent and visible.  You may add
+ other material on the covers in addition.  Copying with changes limited
+ to the covers, as long as they preserve the title of the Document and
+ satisfy these conditions, can be treated as verbatim copying in other
+ respects.
+ 
+ If the required texts for either cover are too voluminous to fit
+ legibly, you should put the first ones listed (as many as fit
+ reasonably) on the actual cover, and continue the rest onto adjacent
+ pages.
+ 
+ If you publish or distribute Opaque copies of the Document numbering
+ more than 100, you must either include a machine-readable Transparent
+ copy along with each Opaque copy, or state in or with each Opaque copy a
+ computer-network location from which the general network-using public
+ has access to download using public-standard network protocols a
+ complete Transparent copy of the Document, free of added material.  If
+ you use the latter option, you must take reasonably prudent steps, when
+ you begin distribution of Opaque copies in quantity, to ensure that this
+ Transparent copy will remain thus accessible at the stated location
+ until at least one year after the last time you distribute an Opaque
+ copy (directly or through your agents or retailers) of that edition to
+ the public.
+ 
+ It is requested, but not required, that you contact the authors of the
+ Document well before redistributing any large number of copies, to give
+ them a chance to provide you with an updated version of the Document.
+ 
+ ‘4.  MODIFICATIONS’
+ 
+ You may copy and distribute a Modified Version of the Document under the
+ conditions of sections 2 and 3 above, provided that you release the
+ Modified Version under precisely this License, with the Modified Version
+ filling the role of the Document, thus licensing distribution and
+ modification of the Modified Version to whoever possesses a copy of it.
+ In addition, you must do these things in the Modified Version:
+ 
+   A. Use in the Title Page (and on the covers, if any) a title distinct
+      from that of the Document, and from those of previous versions
+      (which should, if there were any, be listed in the History section
+      of the Document).  You may use the same title as a previous version
+      if the original publisher of that version gives permission.
+ 
+   B. List on the Title Page, as authors, one or more persons or entities
+      responsible for authorship of the modifications in the Modified
+      Version, together with at least five of the principal authors of
+      the Document (all of its principal authors, if it has fewer than
+      five), unless they release you from this requirement.
+ 
+   C. State on the Title page the name of the publisher of the Modified
+      Version, as the publisher.
+ 
+   D. Preserve all the copyright notices of the Document.
+ 
+   E. Add an appropriate copyright notice for your modifications adjacent
+      to the other copyright notices.
+ 
+   F. Include, immediately after the copyright notices, a license notice
+      giving the public permission to use the Modified Version under the
+      terms of this License, in the form shown in the Addendum below.
+ 
+   G. Preserve in that license notice the full lists of Invariant
+      Sections and required Cover Texts given in the Document’s license
+      notice.
+ 
+   H. Include an unaltered copy of this License.
+ 
+   I. Preserve the section Entitled “History”, Preserve its Title, and
+      add to it an item stating at least the title, year, new authors,
+      and publisher of the Modified Version as given on the Title Page.
+      If there is no section Entitled “History” in the Document, create
+      one stating the title, year, authors, and publisher of the Document
+      as given on its Title Page, then add an item describing the
+      Modified Version as stated in the previous sentence.
+ 
+   J. Preserve the network location, if any, given in the Document for
+      public access to a Transparent copy of the Document, and likewise
+      the network locations given in the Document for previous versions
+      it was based on.  These may be placed in the “History” section.
+      You may omit a network location for a work that was published at
+      least four years before the Document itself, or if the original
+      publisher of the version it refers to gives permission.
+ 
+   K. For any section Entitled “Acknowledgements” or “Dedications”,
+      Preserve the Title of the section, and preserve in the section all
+      the substance and tone of each of the contributor acknowledgements
+      and/or dedications given therein.
+ 
+   L. Preserve all the Invariant Sections of the Document, unaltered in
+      their text and in their titles.  Section numbers or the equivalent
+      are not considered part of the section titles.
+ 
+   M. Delete any section Entitled “Endorsements”.  Such a section may not
+      be included in the Modified Version.
+ 
+   N. Do not retitle any existing section to be Entitled “Endorsements”
+      or to conflict in title with any Invariant Section.
+ 
+   O. Preserve any Warranty Disclaimers.
+ 
+ If the Modified Version includes new front-matter sections or appendices
+ that qualify as Secondary Sections and contain no material copied from
+ the Document, you may at your option designate some or all of these
+ sections as invariant.  To do this, add their titles to the list of
+ Invariant Sections in the Modified Version’s license notice.  These
+ titles must be distinct from any other section titles.
+ 
+ You may add a section Entitled “Endorsements”, provided it contains
+ nothing but endorsements of your Modified Version by various parties—for
+ example, statements of peer review or that the text has been approved by
+ an organization as the authoritative definition of a standard.
+ 
+ You may add a passage of up to five words as a Front-Cover Text, and a
+ passage of up to 25 words as a Back-Cover Text, to the end of the list
+ of Cover Texts in the Modified Version.  Only one passage of Front-Cover
+ Text and one of Back-Cover Text may be added by (or through arrangements
+ made by) any one entity.  If the Document already includes a cover text
+ for the same cover, previously added by you or by arrangement made by
+ the same entity you are acting on behalf of, you may not add another;
+ but you may replace the old one, on explicit permission from the
+ previous publisher that added the old one.
+ 
+ The author(s) and publisher(s) of the Document do not by this License
+ give permission to use their names for publicity for or to assert or
+ imply endorsement of any Modified Version.
+ 
+ ‘5.  COMBINING DOCUMENTS’
+ 
+ You may combine the Document with other documents released under this
+ License, under the terms defined in section 4 above for modified
+ versions, provided that you include in the combination all of the
+ Invariant Sections of all of the original documents, unmodified, and
+ list them all as Invariant Sections of your combined work in its license
+ notice, and that you preserve all their Warranty Disclaimers.
+ 
+ The combined work need only contain one copy of this License, and
+ multiple identical Invariant Sections may be replaced with a single
+ copy.  If there are multiple Invariant Sections with the same name but
+ different contents, make the title of each such section unique by adding
+ at the end of it, in parentheses, the name of the original author or
+ publisher of that section if known, or else a unique number.  Make the
+ same adjustment to the section titles in the list of Invariant Sections
+ in the license notice of the combined work.
+ 
+ In the combination, you must combine any sections Entitled “History” in
+ the various original documents, forming one section Entitled “History”;
+ likewise combine any sections Entitled “Acknowledgements”, and any
+ sections Entitled “Dedications”.  You must delete all sections Entitled
+ “Endorsements”.
+ 
+ ‘6.  COLLECTIONS OF DOCUMENTS’
+ 
+ You may make a collection consisting of the Document and other documents
+ released under this License, and replace the individual copies of this
+ License in the various documents with a single copy that is included in
+ the collection, provided that you follow the rules of this License for
+ verbatim copying of each of the documents in all other respects.
+ 
+ You may extract a single document from such a collection, and distribute
+ it individually under this License, provided you insert a copy of this
+ License into the extracted document, and follow this License in all
+ other respects regarding verbatim copying of that document.
+ 
+ ‘7.  AGGREGATION WITH INDEPENDENT WORKS’
+ 
+ A compilation of the Document or its derivatives with other separate and
+ independent documents or works, in or on a volume of a storage or
+ distribution medium, is called an “aggregate” if the copyright resulting
+ from the compilation is not used to limit the legal rights of the
+ compilation’s users beyond what the individual works permit.  When the
+ Document is included in an aggregate, this License does not apply to the
+ other works in the aggregate which are not themselves derivative works
+ of the Document.
+ 
+ If the Cover Text requirement of section 3 is applicable to these copies
+ of the Document, then if the Document is less than one half of the
+ entire aggregate, the Document’s Cover Texts may be placed on covers
+ that bracket the Document within the aggregate, or the electronic
+ equivalent of covers if the Document is in electronic form.  Otherwise
+ they must appear on printed covers that bracket the whole aggregate.
+ 
+ ‘8.  TRANSLATION’
+ 
+ Translation is considered a kind of modification, so you may distribute
+ translations of the Document under the terms of section 4.  Replacing
+ Invariant Sections with translations requires special permission from
+ their copyright holders, but you may include translations of some or all
+ Invariant Sections in addition to the original versions of these
+ Invariant Sections.  You may include a translation of this License, and
+ all the license notices in the Document, and any Warranty Disclaimers,
+ provided that you also include the original English version of this
+ License and the original versions of those notices and disclaimers.  In
+ case of a disagreement between the translation and the original version
+ of this License or a notice or disclaimer, the original version will
+ prevail.
+ 
+ If a section in the Document is Entitled “Acknowledgements”,
+ “Dedications”, or “History”, the requirement (section 4) to Preserve its
+ Title (section 1) will typically require changing the actual title.
+ 
+ ‘9.  TERMINATION’
+ 
+ You may not copy, modify, sublicense, or distribute the Document except
+ as expressly provided under this License.  Any attempt otherwise to
+ copy, modify, sublicense, or distribute it is void, and will
+ automatically terminate your rights under this License.
+ 
+ However, if you cease all violation of this License, then your license
+ from a particular copyright holder is reinstated (a) provisionally,
+ unless and until the copyright holder explicitly and finally terminates
+ your license, and (b) permanently, if the copyright holder fails to
+ notify you of the violation by some reasonable means prior to 60 days
+ after the cessation.
+ 
+ Moreover, your license from a particular copyright holder is reinstated
+ permanently if the copyright holder notifies you of the violation by
+ some reasonable means, this is the first time you have received notice
+ of violation of this License (for any work) from that copyright holder,
+ and you cure the violation prior to 30 days after your receipt of the
+ notice.
+ 
+ Termination of your rights under this section does not terminate the
+ licenses of parties who have received copies or rights from you under
+ this License.  If your rights have been terminated and not permanently
+ reinstated, receipt of a copy of some or all of the same material does
+ not give you any rights to use it.
+ 
+ ‘10.  FUTURE REVISIONS OF THIS LICENSE’
+ 
+ The Free Software Foundation may publish new, revised versions of the
+ GNU Free Documentation License from time to time.  Such new versions
+ will be similar in spirit to the present version, but may differ in
+ detail to address new problems or concerns.  See
+ ‘https://www.gnu.org/copyleft/’.
+ 
+ Each version of the License is given a distinguishing version number.
+ If the Document specifies that a particular numbered version of this
+ License “or any later version” applies to it, you have the option of
+ following the terms and conditions either of that specified version or
+ of any later version that has been published (not as a draft) by the
+ Free Software Foundation.  If the Document does not specify a version
+ number of this License, you may choose any version ever published (not
+ as a draft) by the Free Software Foundation.  If the Document specifies
+ that a proxy can decide which future versions of this License can be
+ used, that proxy’s public statement of acceptance of a version
+ permanently authorizes you to choose that version for the Document.
+ 
+ ‘11.  RELICENSING’
+ 
+ “Massive Multiauthor Collaboration Site” (or “MMC Site”) means any World
+ Wide Web server that publishes copyrightable works and also provides
+ prominent facilities for anybody to edit those works.  A public wiki
+ that anybody can edit is an example of such a server.  A “Massive
+ Multiauthor Collaboration” (or “MMC”) contained in the site means any
+ set of copyrightable works thus published on the MMC site.
+ 
+ “CC-BY-SA” means the Creative Commons Attribution-Share Alike 3.0
+ license published by Creative Commons Corporation, a not-for-profit
+ corporation with a principal place of business in San Francisco,
+ California, as well as future copyleft versions of that license
+ published by that same organization.
+ 
+ “Incorporate” means to publish or republish a Document, in whole or in
+ part, as part of another Document.
+ 
+ An MMC is “eligible for relicensing” if it is licensed under this
+ License, and if all works that were first published under this License
+ somewhere other than this MMC, and subsequently incorporated in whole or
+ in part into the MMC, (1) had no cover texts or invariant sections, and
+ (2) were thus incorporated prior to November 1, 2008.
+ 
+ The operator of an MMC Site may republish an MMC contained in the site
+ under CC-BY-SA on the same site at any time before August 1, 2009,
+ provided the MMC is eligible for relicensing.
+ 
+ ‘ADDENDUM: How to use this License for your documents’
+ 
+ To use this License in a document you have written, include a copy of
+ the License in the document and put the following copyright and license
+ notices just after the title page:
+ 
+      Copyright © YEAR YOUR NAME. Permission is granted to copy,
+      distribute and/or modify this document under the terms of the GNU
+      Free Documentation License, Version 1.3 or any later version
+      published by the Free Software Foundation; with no Invariant
+      Sections, no Front-Cover Texts, and no Back-Cover Texts.  A copy of
+      the license is included in the section entitled “GNU Free
+      Documentation License”.
+ 
+ If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+ replace the “with … Texts.” line with this:
+ 
+      with the Invariant Sections being LIST THEIR TITLES, with the
+      Front-Cover Texts being LIST, and with the Back-Cover Texts being
+      LIST.
+ 
+ If you have Invariant Sections without Cover Texts, or some other
+ combination of the three, merge those two alternatives to suit the
+ situation.
+ 
+ If your document contains nontrivial examples of program code, we
+ recommend releasing these examples in parallel under your choice of free
+ software license, such as the GNU General Public License, to permit
+ their use in free software.
+ 
+ 
+ File: gnat_rm.info,  Node: Index,  Prev: GNU Free Documentation License,  Up: Top
+ 
+ Index
+ *****
+ 
+ [index]
+ * Menu:
+ 
+ * -gnat12 option (gcc):                  Implementation of Ada 2012 Features.
+                                                              (line    6)
+ * -gnatR (gcc):                          Determining the Representations chosen by GNAT.
+                                                              (line    6)
+ * ___lock file (for shared passive packages): GNAT Implementation of Shared Passive Packages.
+                                                              (line   72)
+ * Abort_Signal:                          Attribute Abort_Signal.
+                                                              (line    6)
+ * Abstract_State:                        Aspect Abstract_State.
+                                                              (line    6)
+ * Access:                                Attribute Unrestricted_Access.
+                                                              (line    6)
+ * Access values:                         Attribute Has_Access_Values.
+                                                              (line    6)
+ * Accuracy:                              RM G 2 4 19 Accuracy Requirements.
+                                                              (line   17)
+ * Accuracy requirements:                 RM G 1 2 49 Complex Elementary Functions.
+                                                              (line   17)
+ * Ada 2005 Language Reference Manual:    What This Reference Manual Contains.
+                                                              (line   79)
+ * Ada 2012 implementation status:        Implementation of Ada 2012 Features.
+                                                              (line    6)
+ * Ada 83 attributes:                     Attribute Emax.     (line    6)
+ * Ada 83 attributes <1>:                 Attribute Epsilon.  (line    6)
+ * Ada 83 attributes <2>:                 Attribute Large.    (line    6)
+ * Ada 83 attributes <3>:                 Attribute Mantissa. (line    6)
+ * Ada 83 attributes <4>:                 Attribute Safe_Emax.
+                                                              (line    6)
+ * Ada 83 attributes <5>:                 Attribute Safe_Large.
+                                                              (line    6)
+ * Ada 83 attributes <6>:                 Attribute Safe_Small.
+                                                              (line    6)
+ * Ada 83 attributes <7>:                 Attribute Small.    (line    6)
+ * Ada 95 Language Reference Manual:      What This Reference Manual Contains.
+                                                              (line   79)
+ * Ada Extensions:                        Pragma Extensions_Allowed.
+                                                              (line    6)
+ * Ada.Characters.Handling:               RM A 1 52 Names of Predefined Numeric Types.
+                                                              (line   13)
+ * Ada.Characters.Latin_9 (a-chlat9.ads): Ada Characters Latin_9 a-chlat9 ads.
+                                                              (line    6)
+ * Ada.Characters.Wide_Latin_1 (a-cwila1.ads): Ada Characters Wide_Latin_1 a-cwila1 ads.
+                                                              (line    6)
+ * Ada.Characters.Wide_Latin_9 (a-cwila9.ads): Ada Characters Wide_Latin_9 a-cwila9 ads.
+                                                              (line    6)
+ * Ada.Characters.Wide_Wide_Latin_1 (a-chzla1.ads): Ada Characters Wide_Wide_Latin_1 a-chzla1 ads.
+                                                              (line    6)
+ * Ada.Characters.Wide_Wide_Latin_9 (a-chzla9.ads): Ada Characters Wide_Wide_Latin_9 a-chzla9 ads.
+                                                              (line    6)
+ * Ada.Command_Line.Environment (a-colien.ads): Ada Command_Line Environment a-colien ads.
+                                                              (line    6)
+ * Ada.Command_Line.Remove (a-colire.ads): Ada Command_Line Remove a-colire ads.
+                                                              (line    6)
+ * Ada.Command_Line.Response_File (a-clrefi.ads): Ada Command_Line Response_File a-clrefi ads.
+                                                              (line    6)
+ * Ada.Containers.Bounded_Holders (a-coboho.ads): Ada Containers Bounded_Holders a-coboho ads.
+                                                              (line    6)
+ * Ada.Direct_IO.C_Streams (a-diocst.ads): Ada Direct_IO C_Streams a-diocst ads.
+                                                              (line    6)
+ * Ada.Exceptions.Is_Null_Occurrence (a-einuoc.ads): Ada Exceptions Is_Null_Occurrence a-einuoc ads.
+                                                              (line    6)
+ * Ada.Exceptions.Last_Chance_Handler (a-elchha.ads): Ada Exceptions Last_Chance_Handler a-elchha ads.
+                                                              (line    6)
+ * Ada.Exceptions.Traceback (a-exctra.ads): Ada Exceptions Traceback a-exctra ads.
+                                                              (line    6)
+ * Ada.Sequential_IO.C_Streams (a-siocst.ads): Ada Sequential_IO C_Streams a-siocst ads.
+                                                              (line    6)
+ * Ada.Streams.Stream_IO.C_Streams (a-ssicst.ads): Ada Streams Stream_IO C_Streams a-ssicst ads.
+                                                              (line    6)
+ * Ada.Strings.Unbounded.Text_IO (a-suteio.ads): Ada Strings Unbounded Text_IO a-suteio ads.
+                                                              (line    6)
+ * Ada.Strings.Wide_Unbounded.Wide_Text_IO (a-swuwti.ads): Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads.
+                                                              (line    6)
+ * Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO (a-szuzti.ads): Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads.
+                                                              (line    6)
+ * Ada.Task_Initialization (a-tasini.ads): Ada Task_Initialization a-tasini ads.
+                                                              (line    6)
+ * Ada.Text_IO.C_Streams (a-tiocst.ads):  Ada Text_IO C_Streams a-tiocst ads.
+                                                              (line    6)
+ * Ada.Text_IO.Reset_Standard_Files (a-tirsfi.ads): Ada Text_IO Reset_Standard_Files a-tirsfi ads.
+                                                              (line    6)
+ * Ada.Wide_Characters.Unicode (a-wichun.ads): Ada Wide_Characters Unicode a-wichun ads.
+                                                              (line    6)
+ * Ada.Wide_Text_IO.C_Streams (a-wtcstr.ads): Ada Wide_Text_IO C_Streams a-wtcstr ads.
+                                                              (line    6)
+ * Ada.Wide_Text_IO.Reset_Standard_Files (a-wrstfi.ads): Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads.
+                                                              (line    6)
+ * Ada.Wide_Wide_Characters.Unicode (a-zchuni.ads): Ada Wide_Wide_Characters Unicode a-zchuni ads.
+                                                              (line    6)
+ * Ada.Wide_Wide_Text_IO.C_Streams (a-ztcstr.ads): Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads.
+                                                              (line    6)
+ * Ada.Wide_Wide_Text_IO.Reset_Standard_Files (a-zrstfi.ads): Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads.
+                                                              (line    6)
+ * Ada_2012 configuration pragma:         Implementation of Ada 2012 Features.
+                                                              (line    6)
+ * Address:                               RM 13 5 3 7-8 Bit Ordering.
+                                                              (line   16)
+ * Address <1>:                           RM 13 7 37 Address as Private.
+                                                              (line   10)
+ * Address Clause:                        Address Clauses.    (line    6)
+ * Address clauses:                       RM 13 2 6-8 Packed Types.
+                                                              (line   27)
+ * Address image:                         System Address_Image s-addima ads.
+                                                              (line    6)
+ * Address of subprogram code:            Attribute Code_Address.
+                                                              (line    6)
+ * Address_Size:                          Attribute Address_Size.
+                                                              (line    6)
+ * AI-0002 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line 1133)
+ * AI-0003 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  231)
+ * AI-0007 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line 1000)
+ * AI-0008 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  250)
+ * AI-0009 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  735)
+ * AI-0012 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  868)
+ * AI-0015 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  581)
+ * AI-0017 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line 1028)
+ * AI-0019 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line 1017)
+ * AI-0026 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  678)
+ * AI-0030 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  708)
+ * AI-0031 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line 1065)
+ * AI-0032 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  590)
+ * AI-0033 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  967)
+ * AI-0034 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  805)
+ * AI-0035 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  814)
+ * AI-0037 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  456)
+ * AI-0038 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line 1106)
+ * AI-0039 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  878)
+ * AI-0040 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  788)
+ * AI-0042 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  698)
+ * AI-0043 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  835)
+ * AI-0044 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line 1115)
+ * AI-0046 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  558)
+ * AI-0050 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  618)
+ * AI-0056 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line 1078)
+ * AI-0058 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  610)
+ * AI-0060 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line 1036)
+ * AI-0062 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  637)
+ * AI-0064 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  670)
+ * AI-0065 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line 1008)
+ * AI-0070 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  389)
+ * AI-0072 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  745)
+ * AI-0073 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  378)
+ * AI-0076 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  335)
+ * AI-0077 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  771)
+ * AI-0078 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  920)
+ * AI-0079 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line   41)
+ * AI-0080 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line   77)
+ * AI-0087 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  652)
+ * AI-0088 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  486)
+ * AI-0091 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line   49)
+ * AI-0093 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  260)
+ * AI-0095 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  887)
+ * AI-0096 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  267)
+ * AI-0097 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  352)
+ * AI-0098 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  415)
+ * AI-0099 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  661)
+ * AI-0100 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line   60)
+ * AI-0102 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  309)
+ * AI-0103 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  602)
+ * AI-0104 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  506)
+ * AI-0106 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  860)
+ * AI-0108 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  753)
+ * AI-0109 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  993)
+ * AI-0112 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  850)
+ * AI-0114 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line 1045)
+ * AI-0116 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  896)
+ * AI-0118 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  565)
+ * AI-0120 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  241)
+ * AI-0122 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  780)
+ * AI-0123 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  466)
+ * AI-0125 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  629)
+ * AI-0126 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  343)
+ * AI-0127 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line 1125)
+ * AI-0128 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  221)
+ * AI-0129 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  760)
+ * AI-0132 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  796)
+ * AI-0134 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  542)
+ * AI-0137 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line 1088)
+ * AI-0139-2 (Ada 2012 feature):          Implementation of Ada 2012 Features.
+                                                              (line  533)
+ * AI-0146 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  904)
+ * AI-0147 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  440)
+ * AI-0152 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line 1209)
+ * AI-0157 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  514)
+ * AI-0158 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  318)
+ * AI-0161 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  975)
+ * AI-0162 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  407)
+ * AI-0163 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line   69)
+ * AI-0171 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line 1184)
+ * AI-0173 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  328)
+ * AI-0176 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line   33)
+ * AI-0177 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  954)
+ * AI-0178 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  644)
+ * AI-0179 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  523)
+ * AI-0181 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  278)
+ * AI-0182 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  289)
+ * AI-0183 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line   84)
+ * AI-0185 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line 1056)
+ * AI-0188 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  497)
+ * AI-0189 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line 1172)
+ * AI-0190 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line 1162)
+ * AI-0193 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  945)
+ * AI-0194 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  984)
+ * AI-0195 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  930)
+ * AI-0196 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  573)
+ * AI-0198 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  369)
+ * AI-0199 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  424)
+ * AI-0200 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  842)
+ * AI-0201 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  721)
+ * AI-0203 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  362)
+ * AI-0205 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  691)
+ * AI-0206 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line 1202)
+ * AI-0207 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  550)
+ * AI-0208 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  397)
+ * AI-0210 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line 1194)
+ * AI-0211 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line 1155)
+ * AI-0214 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  300)
+ * AI-0219 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  826)
+ * AI-0220 (Ada 2012 feature):            Implementation of Ada 2012 Features.
+                                                              (line  432)
+ * AI05-0216 (Ada 2012 feature):          Implementation of Ada 2012 Features.
+                                                              (line 1144)
+ * Alignment:                             Pragma Optimize_Alignment.
+                                                              (line    6)
+ * Alignment <1>:                         Attribute Maximum_Alignment.
+                                                              (line    6)
+ * Alignment <2>:                         Attribute System_Allocator_Alignment.
+                                                              (line    6)
+ * Alignment <3>:                         Alignment Clauses.  (line   83)
+ * Alignment <4>:                         Alignment Clauses.  (line   87)
+ * Alignment Clause:                      Alignment Clauses.  (line    6)
+ * Alignment clauses:                     RM 13 3 14-19 Address Clauses.
+                                                              (line   37)
+ * Alignments of components:              Pragma Component_Alignment.
+                                                              (line    6)
+ * allocator:                             Attribute System_Allocator_Alignment.
+                                                              (line    6)
+ * Alternative Character Sets:            RM 2 8 17-19 Pragmas.
+                                                              (line   16)
+ * AltiVec:                               GNAT Altivec g-altive ads.
+                                                              (line    6)
+ * AltiVec <1>:                           GNAT Altivec Conversions g-altcon ads.
+                                                              (line    6)
+ * AltiVec <2>:                           GNAT Altivec Vector_Operations g-alveop ads.
+                                                              (line    6)
+ * AltiVec <3>:                           GNAT Altivec Vector_Types g-alvety ads.
+                                                              (line    6)
+ * AltiVec <4>:                           GNAT Altivec Vector_Views g-alvevi ads.
+                                                              (line    6)
+ * Annex E:                               GNAT Implementation of Shared Passive Packages.
+                                                              (line   12)
+ * Annotate:                              Aspect Annotate.    (line    6)
+ * Anonymous access types:                Conventions and Anonymous Access Types.
+                                                              (line    6)
+ * Argument passing mechanisms:           Pragma Export_Function.
+                                                              (line    6)
+ * argument removal:                      Ada Command_Line Remove a-colire ads.
+                                                              (line    6)
+ * Array packing:                         Pragma Implicit_Packing.
+                                                              (line   35)
+ * Array splitter:                        GNAT Array_Split g-arrspl ads.
+                                                              (line    6)
+ * Arrays:                                RM 3 5 7 17 Float Types.
+                                                              (line   24)
+ * Arrays <1>:                            GNAT Dynamic_Tables g-dyntab ads.
+                                                              (line    6)
+ * Arrays <2>:                            GNAT Table g-table ads.
+                                                              (line    6)
+ * as private type:                       RM 13 5 3 7-8 Bit Ordering.
+                                                              (line   15)
+ * Asm_Input:                             Attribute Asm_Input.
+                                                              (line    6)
+ * Asm_Output:                            Attribute Asm_Output.
+                                                              (line    6)
+ * Assertions:                            Pragma Check.       (line    6)
+ * Assertions <1>:                        Pragma Check_Policy.
+                                                              (line    6)
+ * Assertions <2>:                        System Assertions s-assert ads.
+                                                              (line    6)
+ * Assert_Failure:                        System Assertions s-assert ads.
+                                                              (line    6)
+ * Async_Readers:                         Aspect Async_Readers.
+                                                              (line    6)
+ * Async_Writers:                         Aspect Async_Writers.
+                                                              (line    6)
+ * Atomic Synchronization:                Pragma Disable_Atomic_Synchronization.
+                                                              (line    6)
+ * Atomic Synchronization <1>:            Pragma Enable_Atomic_Synchronization.
+                                                              (line    6)
+ * Atomic_Always_Lock_Free:               Attribute Atomic_Always_Lock_Free.
+                                                              (line    6)
+ * Attribute:                             Address Clauses.    (line   73)
+ * Attribute Loop_Entry:                  Pragma Unevaluated_Use_Of_Old.
+                                                              (line    6)
+ * Attribute Old:                         Pragma Unevaluated_Use_Of_Old.
+                                                              (line    6)
+ * AWK:                                   GNAT AWK g-awk ads. (line    6)
+ * Biased representation:                 Biased Representation.
+                                                              (line    6)
+ * Big endian:                            Attribute Default_Bit_Order.
+                                                              (line    6)
+ * Big endian <1>:                        Attribute Default_Scalar_Storage_Order.
+                                                              (line    6)
+ * Binary search:                         GNAT Binary_Search g-binsea ads.
+                                                              (line    6)
+ * Bind environment:                      GNAT Bind_Environment g-binenv ads.
+                                                              (line    6)
+ * Bit:                                   Attribute Bit.      (line    6)
+ * Bit ordering:                          RM 13 5 2 5 Storage Place Attributes.
+                                                              (line   15)
+ * bit ordering:                          Bit_Order Clauses.  (line    6)
+ * Bit_Order Clause:                      Bit_Order Clauses.  (line    6)
+ * Bit_Position:                          Attribute Bit_Position.
+                                                              (line    6)
+ * Boolean_Entry_Barriers:                Simple_Barriers.    (line   12)
+ * Bounded Buffers:                       GNAT Bounded_Buffers g-boubuf ads.
+                                                              (line    6)
+ * Bounded errors:                        RM 1 1 3 31 Child Units.
+                                                              (line   11)
+ * Bounded-length strings:                RM A 3 2 49 Ada Characters Handling.
+                                                              (line   12)
+ * Branch Prediction:                     GNAT Branch_Prediction g-brapre ads.
+                                                              (line    6)
+ * Bubble sort:                           GNAT Bubble_Sort g-bubsor ads.
+                                                              (line    6)
+ * Bubble sort <1>:                       GNAT Bubble_Sort_A g-busora ads.
+                                                              (line    6)
+ * Bubble sort <2>:                       GNAT Bubble_Sort_G g-busorg ads.
+                                                              (line    6)
+ * byte ordering:                         Effect of Bit_Order on Byte Ordering.
+                                                              (line    6)
+ * Byte swapping:                         GNAT Byte_Swapping g-bytswa ads.
+                                                              (line    6)
+ * C:                                     RM B 2 12-13 Package Interfaces.
+                                                              (line   22)
+ * C Streams:                             Ada Direct_IO C_Streams a-diocst ads.
+                                                              (line    6)
+ * C Streams <1>:                         Ada Sequential_IO C_Streams a-siocst ads.
+                                                              (line    6)
+ * C Streams <2>:                         Ada Streams Stream_IO C_Streams a-ssicst ads.
+                                                              (line    6)
+ * C Streams <3>:                         Ada Text_IO C_Streams a-tiocst ads.
+                                                              (line    6)
+ * C Streams <4>:                         Ada Wide_Text_IO C_Streams a-wtcstr ads.
+                                                              (line    6)
+ * C Streams <5>:                         Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads.
+                                                              (line    6)
+ * C streams:                             Interfaces C Streams i-cstrea ads.
+                                                              (line    6)
+ * Calendar:                              GNAT Calendar g-calend ads.
+                                                              (line    6)
+ * Calendar <1>:                          GNAT Calendar Time_IO g-catiio ads.
+                                                              (line    6)
+ * casing:                                Pragma External_Name_Casing.
+                                                              (line    6)
+ * Casing of External names:              Pragma External_Name_Casing.
+                                                              (line    6)
+ * Casing utilities:                      GNAT Case_Util g-casuti ads.
+                                                              (line    6)
+ * CGI (Common Gateway Interface):        GNAT CGI g-cgi ads. (line    6)
+ * CGI (Common Gateway Interface) cookie support: GNAT CGI Cookie g-cgicoo ads.
+                                                              (line    6)
+ * CGI (Common Gateway Interface) debugging: GNAT CGI Debug g-cgideb ads.
+                                                              (line    6)
+ * Character handling (‘‘GNAT.Case_Util‘‘): GNAT Case_Util g-casuti ads.
+                                                              (line    6)
+ * Character Sets:                        RM 2 8 17-19 Pragmas.
+                                                              (line   17)
+ * Check names:                           Pragma Check_Name.  (line    6)
+ * Check pragma control:                  Pragma Check_Policy.
+                                                              (line    6)
+ * Checks:                                Pragma Post.        (line    6)
+ * Checks <1>:                            Pragma Postcondition.
+                                                              (line    6)
+ * Checks <2>:                            Pragma Post_Class.  (line    6)
+ * Checks <3>:                            Pragma Pre.         (line    6)
+ * Checks <4>:                            Pragma Precondition.
+                                                              (line    6)
+ * Checks <5>:                            Pragma Pre_Class.   (line    6)
+ * Checks <6>:                            RM 11 4 1 19 Exception Information.
+                                                              (line   23)
+ * Child Units:                           RM 1 1 3 20 Error Detection.
+                                                              (line   12)
+ * COBOL:                                 RM B 3 63-71 Interfacing with C.
+                                                              (line   58)
+ * COBOL support:                         RM E 5 28-29 Partition Communication Subsystem.
+                                                              (line   18)
+ * Code_Address:                          Attribute Code_Address.
+                                                              (line    6)
+ * Command line:                          Ada Command_Line Remove a-colire ads.
+                                                              (line    6)
+ * Command line <1>:                      Ada Command_Line Response_File a-clrefi ads.
+                                                              (line    6)
+ * Command line <2>:                      Ada Command_Line Response_File a-clrefi ads.
+                                                              (line    6)
+ * Command line <3>:                      GNAT Command_Line g-comlin ads.
+                                                              (line    6)
+ * Compatibility (between Ada 83 and Ada 95 / Ada 2005 / Ada 2012): Compatibility with Ada 83.
+                                                              (line    6)
+ * Compatibility between Ada 95 and Ada 2005: Compatibility between Ada 95 and Ada 2005.
+                                                              (line    6)
+ * Compilation_Date:                      Compilation_Date.   (line    6)
+ * Compilation_ISO_Date:                  Compilation_ISO_Date.
+                                                              (line    6)
+ * Compilation_Time:                      Compilation_Time.   (line    6)
+ * Compiler Version:                      GNAT Compiler_Version g-comver ads.
+                                                              (line    6)
+ * Compiler_Version:                      Attribute Compiler_Version.
+                                                              (line    6)
+ * complex arithmetic:                    RM G 2 4 19 Accuracy Requirements.
+                                                              (line   16)
+ * Complex arithmetic accuracy:           RM G 2 4 19 Accuracy Requirements.
+                                                              (line   17)
+ * Complex elementary functions:          RM G 1 1 56-58 Complex Types.
+                                                              (line   53)
+ * Complex types:                         RM G Numerics.      (line   15)
+ * Component Clause:                      Record Representation Clauses.
+                                                              (line   11)
+ * Component_Size (in pragma Component_Alignment): Pragma Component_Alignment.
+                                                              (line   21)
+ * Component_Size Clause:                 Component_Size Clauses.
+                                                              (line    6)
+ * Component_Size clauses:                RM 13 3 50-56 Size Clauses.
+                                                              (line   39)
+ * Component_Size_4 (in pragma Component_Alignment): Pragma Component_Alignment.
+                                                              (line   31)
+ * configuration pragma Ada_2012:         Implementation of Ada 2012 Features.
+                                                              (line    6)
+ * Constant_After_Elaboration:            Aspect Constant_After_Elaboration.
+                                                              (line    6)
+ * Constrained:                           Attribute Constrained.
+                                                              (line    6)
+ * Containers:                            RM A 10 7 23 Get_Immediate.
+                                                              (line   19)
+ * Contract cases:                        Pragma Contract_Cases.
+                                                              (line    6)
+ * Contract_Cases:                        Aspect Contract_Cases.
+                                                              (line    6)
+ * control:                               Pragma Check_Policy.
+                                                              (line    6)
+ * Controlling assertions:                Pragma Check_Policy.
+                                                              (line    6)
+ * Convention:                            Effect of Convention on Representation.
+                                                              (line    6)
+ * Convention for anonymous access types: Conventions and Anonymous Access Types.
+                                                              (line    6)
+ * Conventions:                           Conventions.        (line    6)
+ * Conventions <1>:                       Pragma Convention_Identifier.
+                                                              (line    6)
+ * Conversion:                            System Wch_Cnv s-wchcnv ads.
+                                                              (line    6)
+ * Cookie support in CGI:                 GNAT CGI Cookie g-cgicoo ads.
+                                                              (line    6)
+ * CRC32:                                 GNAT CRC32 g-crc32 ads.
+                                                              (line    6)
+ * Current exception:                     GNAT Current_Exception g-curexc ads.
+                                                              (line    6)
+ * Current time:                          GNAT Time_Stamp g-timsta ads.
+                                                              (line    6)
+ * Cyclic Redundancy Check:               GNAT CRC32 g-crc32 ads.
+                                                              (line    6)
+ * Debug pools:                           GNAT Debug_Pools g-debpoo ads.
+                                                              (line    6)
+ * Debugging:                             GNAT Debug_Pools g-debpoo ads.
+                                                              (line    6)
+ * Debugging <1>:                         GNAT Debug_Utilities g-debuti ads.
+                                                              (line    6)
+ * Debugging <2>:                         GNAT Exception_Traces g-exctra ads.
+                                                              (line    6)
+ * debugging with Initialize_Scalars:     Pragma Initialize_Scalars.
+                                                              (line    6)
+ * DEC Ada 83:                            Pragma Extend_System.
+                                                              (line    6)
+ * Dec Ada 83 casing compatibility:       Pragma External_Name_Casing.
+                                                              (line    6)
+ * Decimal radix support:                 RM F 7 COBOL Support.
+                                                              (line   15)
+ * Decoding strings:                      GNAT Decode_String g-decstr ads.
+                                                              (line    6)
+ * Decoding strings <1>:                  GNAT Decode_UTF8_String g-deutst ads.
+                                                              (line    6)
+ * Decoding UTF-8 strings:                GNAT Decode_UTF8_String g-deutst ads.
+                                                              (line    6)
+ * default:                               Alignment Clauses.  (line   83)
+ * Default (in pragma Component_Alignment): Pragma Component_Alignment.
+                                                              (line   43)
+ * default settings:                      Pragma Optimize_Alignment.
+                                                              (line    6)
+ * Default_Bit_Order:                     Attribute Default_Bit_Order.
+                                                              (line    6)
+ * Default_Initial_Condition:             Aspect Default_Initial_Condition.
+                                                              (line    6)
+ * Default_Scalar_Storage_Order:          Pragma Default_Scalar_Storage_Order.
+                                                              (line    6)
+ * Default_Scalar_Storage_Order <1>:      Attribute Default_Scalar_Storage_Order.
+                                                              (line    6)
+ * Default_Storage_Pool:                  Pragma Default_Storage_Pool.
+                                                              (line    6)
+ * Deferring aborts:                      Pragma Abort_Defer. (line    6)
+ * defining:                              Pragma Check_Name.  (line    6)
+ * Defining check names:                  Pragma Check_Name.  (line    6)
+ * Depends:                               Aspect Depends.     (line    6)
+ * Deref:                                 Attribute Deref.    (line    6)
+ * Descriptor:                            Attribute Descriptor_Size.
+                                                              (line    6)
+ * Descriptor_Size:                       Attribute Descriptor_Size.
+                                                              (line    6)
+ * determination of:                      Determining the Representations chosen by GNAT.
+                                                              (line    6)
+ * Dimension:                             Aspect Dimension.   (line    6)
+ * Dimension_System:                      Aspect Dimension_System.
+                                                              (line    6)
+ * Directory operations:                  GNAT Directory_Operations g-dirope ads.
+                                                              (line    6)
+ * Directory operations iteration:        GNAT Directory_Operations Iteration g-diopit ads.
+                                                              (line    6)
+ * Disable_Controlled:                    Aspect Disable_Controlled.
+                                                              (line    6)
+ * Discriminants:                         Attribute Has_Discriminants.
+                                                              (line    6)
+ * Distribution Systems Annex:            GNAT Implementation of Shared Passive Packages.
+                                                              (line   12)
+ * Dope vector:                           Attribute Descriptor_Size.
+                                                              (line    6)
+ * Dump Memory:                           GNAT Memory_Dump g-memdum ads.
+                                                              (line    6)
+ * Duration’Small:                        RM 3 6 2 11 Multidimensional Arrays.
+                                                              (line   14)
+ * effect on representation:              Effect of Convention on Representation.
+                                                              (line    6)
+ * Effective_Reads:                       Aspect Effective_Reads.
+                                                              (line    6)
+ * Effective_Writes:                      Aspect Effective_Writes.
+                                                              (line    6)
+ * Elaborated:                            Attribute Elaborated.
+                                                              (line    6)
+ * Elaboration control:                   Pragma Elaboration_Checks.
+                                                              (line    6)
+ * Elab_Body:                             Attribute Elab_Body.
+                                                              (line    6)
+ * Elab_Spec:                             Attribute Elab_Spec.
+                                                              (line    6)
+ * Elab_Subp_Body:                        Attribute Elab_Subp_Body.
+                                                              (line    6)
+ * Elimination of unused subprograms:     Pragma Eliminate.   (line    6)
+ * Emax:                                  Attribute Emax.     (line    6)
+ * Enabled:                               Attribute Enabled.  (line    6)
+ * Enclosing_Entity:                      Enclosing_Entity.   (line    6)
+ * Encoding strings:                      GNAT Encode_String g-encstr ads.
+                                                              (line    6)
+ * Encoding strings <1>:                  GNAT Encode_UTF8_String g-enutst ads.
+                                                              (line    6)
+ * Encoding UTF-8 strings:                GNAT Encode_UTF8_String g-enutst ads.
+                                                              (line    6)
+ * Endianness:                            Attribute Scalar_Storage_Order.
+                                                              (line    6)
+ * Endianness <1>:                        GNAT Byte_Swapping g-bytswa ads.
+                                                              (line    6)
+ * Entry queuing policies:                RM D 3 17 Locking Policies.
+                                                              (line   12)
+ * enumeration:                           RM 13 3 71-73 Component Size Clauses.
+                                                              (line   23)
+ * Enumeration representation clauses:    RM 13 3 71-73 Component Size Clauses.
+                                                              (line   24)
+ * Enumeration values:                    RM 3 5 4 29 Integer Types.
+                                                              (line   12)
+ * Enum_Rep:                              Attribute Enum_Rep. (line    6)
+ * Enum_Val:                              Attribute Enum_Val. (line    6)
+ * Environment entries:                   Ada Command_Line Environment a-colien ads.
+                                                              (line    6)
+ * Epsilon:                               Attribute Epsilon.  (line    6)
+ * Error detection:                       Implementation Advice.
+                                                              (line   28)
+ * exception:                             Pragma Prefix_Exception_Messages.
+                                                              (line    6)
+ * Exception:                             GNAT Most_Recent_Exception g-moreex ads.
+                                                              (line    6)
+ * exception <1>:                         System Assertions s-assert ads.
+                                                              (line    6)
+ * Exception actions:                     GNAT Exception_Actions g-excact ads.
+                                                              (line    6)
+ * Exception information:                 RM 10 2 1 12 Consistent Representation.
+                                                              (line   18)
+ * Exception retrieval:                   GNAT Current_Exception g-curexc ads.
+                                                              (line    6)
+ * Exception traces:                      GNAT Exception_Traces g-exctra ads.
+                                                              (line    6)
+ * Exceptions:                            GNAT Exceptions g-except ads.
+                                                              (line    6)
+ * exceptions:                            GNAT Exceptions g-except ads.
+                                                              (line    6)
+ * Exception_Information’:                Exception_Information.
+                                                              (line    6)
+ * Exception_Message:                     Pragma Prefix_Exception_Messages.
+                                                              (line    6)
+ * Exception_Message <1>:                 Exception_Message.  (line    6)
+ * Exception_Name:                        Exception_Name.     (line    6)
+ * Export:                                RM A 18 Containers. (line   17)
+ * Export <1>:                            Address Clauses.    (line  116)
+ * extendable:                            GNAT Dynamic_Tables g-dyntab ads.
+                                                              (line    6)
+ * extendable <1>:                        GNAT Table g-table ads.
+                                                              (line    6)
+ * extending:                             Pragma Extend_System.
+                                                              (line    6)
+ * extensions for unbounded strings:      Ada Strings Unbounded Text_IO a-suteio ads.
+                                                              (line    6)
+ * extensions for unbounded wide strings: Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads.
+                                                              (line    6)
+ * extensions for unbounded wide wide strings: Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads.
+                                                              (line    6)
+ * Extensions_Visible:                    Aspect Extensions_Visible.
+                                                              (line    6)
+ * External Names:                        Pragma External_Name_Casing.
+                                                              (line    6)
+ * Fast_Math:                             Attribute Fast_Math.
+                                                              (line    6)
+ * Favor_Top_Level:                       Aspect Favor_Top_Level.
+                                                              (line    6)
+ * File:                                  File.               (line    6)
+ * File locking:                          GNAT Lock_Files g-locfil ads.
+                                                              (line    6)
+ * Finalization_Size:                     Attribute Finalization_Size.
+                                                              (line    6)
+ * Fixed_Value:                           Attribute Fixed_Value.
+                                                              (line    6)
+ * Float types:                           RM 3 5 5 8 Enumeration Values.
+                                                              (line   15)
+ * Floating-point overflow:               Pragma Check_Float_Overflow.
+                                                              (line    6)
+ * Floating-Point Processor:              GNAT Float_Control g-flocon ads.
+                                                              (line    6)
+ * foreign:                               GNAT Threads g-thread ads.
+                                                              (line    6)
+ * Foreign threads:                       GNAT Threads g-thread ads.
+                                                              (line    6)
+ * Forking a new process:                 Mapping Ada Tasks onto the Underlying Kernel Threads.
+                                                              (line   53)
+ * Formal container for vectors:          Ada Containers Bounded_Holders a-coboho ads.
+                                                              (line    6)
+ * Formatted String:                      GNAT Formatted_String g-forstr ads.
+                                                              (line    6)
+ * Fortran:                               RM B 4 95-98 Interfacing with COBOL.
+                                                              (line   28)
+ * From_Any:                              Attribute From_Any. (line    6)
+ * Get_Immediate:                         RM A 5 2 46-47 Random Number Generation.
+                                                              (line   21)
+ * Get_Immediate <1>:                     Get_Immediate.      (line    6)
+ * Get_Immediate <2>:                     Interfaces VxWorks IO i-vxwoio ads.
+                                                              (line    6)
+ * Get_Immediate <3>:                     Interfaces VxWorks IO i-vxwoio ads.
+                                                              (line    6)
+ * Ghost:                                 Aspect Ghost.       (line    6)
+ * Global:                                Aspect Global.      (line    6)
+ * global:                                System Pool_Global s-pooglo ads.
+                                                              (line    6)
+ * Global storage pool:                   System Pool_Global s-pooglo ads.
+                                                              (line    6)
+ * GNAT Extensions:                       Pragma Extensions_Allowed.
+                                                              (line    6)
+ * GNAT.Altivec (g-altive.ads):           GNAT Altivec g-altive ads.
+                                                              (line    6)
+ * GNAT.Altivec.Conversions (g-altcon.ads): GNAT Altivec Conversions g-altcon ads.
+                                                              (line    6)
+ * GNAT.Altivec.Vector_Operations (g-alveop.ads): GNAT Altivec Vector_Operations g-alveop ads.
+                                                              (line    6)
+ * GNAT.Altivec.Vector_Types (g-alvety.ads): GNAT Altivec Vector_Types g-alvety ads.
+                                                              (line    6)
+ * GNAT.Altivec.Vector_Views (g-alvevi.ads): GNAT Altivec Vector_Views g-alvevi ads.
+                                                              (line    6)
+ * GNAT.Array_Split (g-arrspl.ads):       GNAT Array_Split g-arrspl ads.
+                                                              (line    6)
+ * GNAT.AWK (g-awk.ads):                  GNAT AWK g-awk ads. (line    6)
+ * GNAT.Binary_Search (g-binsea.ads):     GNAT Binary_Search g-binsea ads.
+                                                              (line    6)
+ * GNAT.Bind_Environment (g-binenv.ads):  GNAT Bind_Environment g-binenv ads.
+                                                              (line    6)
+ * GNAT.Bounded_Buffers (g-boubuf.ads):   GNAT Bounded_Buffers g-boubuf ads.
+                                                              (line    6)
+ * GNAT.Bounded_Mailboxes (g-boumai.ads): GNAT Bounded_Mailboxes g-boumai ads.
+                                                              (line    6)
+ * GNAT.Branch_Prediction (g-brapre.ads): GNAT Branch_Prediction g-brapre ads.
+                                                              (line    6)
+ * GNAT.Bubble_Sort (g-bubsor.ads):       GNAT Bubble_Sort g-bubsor ads.
+                                                              (line    6)
+ * GNAT.Bubble_Sort_A (g-busora.ads):     GNAT Bubble_Sort_A g-busora ads.
+                                                              (line    6)
+ * GNAT.Bubble_Sort_G (g-busorg.ads):     GNAT Bubble_Sort_G g-busorg ads.
+                                                              (line    6)
+ * GNAT.Byte_Order_Mark (g-byorma.ads):   GNAT Byte_Order_Mark g-byorma ads.
+                                                              (line    6)
+ * GNAT.Byte_Swapping (g-bytswa.ads):     GNAT Byte_Swapping g-bytswa ads.
+                                                              (line    6)
+ * GNAT.Calendar (g-calend.ads):          GNAT Calendar g-calend ads.
+                                                              (line    6)
+ * GNAT.Calendar.Time_IO (g-catiio.ads):  GNAT Calendar Time_IO g-catiio ads.
+                                                              (line    5)
+ * GNAT.Case_Util (g-casuti.ads):         GNAT Case_Util g-casuti ads.
+                                                              (line    6)
+ * GNAT.CGI (g-cgi.ads):                  GNAT CGI g-cgi ads. (line    6)
+ * GNAT.CGI.Cookie (g-cgicoo.ads):        GNAT CGI Cookie g-cgicoo ads.
+                                                              (line    6)
+ * GNAT.CGI.Debug (g-cgideb.ads):         GNAT CGI Debug g-cgideb ads.
+                                                              (line    6)
+ * GNAT.Command_Line (g-comlin.ads):      GNAT Command_Line g-comlin ads.
+                                                              (line    6)
+ * GNAT.Compiler_Version (g-comver.ads):  GNAT Compiler_Version g-comver ads.
+                                                              (line    6)
+ * GNAT.CRC32 (g-crc32.ads):              GNAT CRC32 g-crc32 ads.
+                                                              (line    6)
+ * GNAT.Ctrl_C (g-ctrl_c.ads):            GNAT Ctrl_C g-ctrl_c ads.
+                                                              (line    6)
+ * GNAT.Current_Exception (g-curexc.ads): GNAT Current_Exception g-curexc ads.
+                                                              (line    6)
+ * GNAT.Debug_Pools (g-debpoo.ads):       GNAT Debug_Pools g-debpoo ads.
+                                                              (line    6)
+ * GNAT.Debug_Utilities (g-debuti.ads):   GNAT Debug_Utilities g-debuti ads.
+                                                              (line    6)
+ * GNAT.Decode_String (g-decstr.ads):     GNAT Decode_String g-decstr ads.
+                                                              (line    6)
+ * GNAT.Decode_UTF8_String (g-deutst.ads): GNAT Decode_UTF8_String g-deutst ads.
+                                                              (line    6)
+ * GNAT.Directory_Operations (g-dirope.ads): GNAT Directory_Operations g-dirope ads.
+                                                              (line    6)
+ * GNAT.Directory_Operations.Iteration (g-diopit.ads): GNAT Directory_Operations Iteration g-diopit ads.
+                                                              (line    6)
+ * GNAT.Dynamic_HTables (g-dynhta.ads):   GNAT Dynamic_HTables g-dynhta ads.
+                                                              (line    6)
+ * GNAT.Dynamic_Tables (g-dyntab.ads):    GNAT Dynamic_Tables g-dyntab ads.
+                                                              (line    6)
+ * GNAT.Encode_String (g-encstr.ads):     GNAT Encode_String g-encstr ads.
+                                                              (line    6)
+ * GNAT.Encode_UTF8_String (g-enutst.ads): GNAT Encode_UTF8_String g-enutst ads.
+                                                              (line    6)
+ * GNAT.Exceptions (g-except.ads):        GNAT Exceptions g-except ads.
+                                                              (line    6)
+ * GNAT.Exception_Actions (g-excact.ads): GNAT Exception_Actions g-excact ads.
+                                                              (line    6)
+ * GNAT.Exception_Traces (g-exctra.ads):  GNAT Exception_Traces g-exctra ads.
+                                                              (line    6)
+ * GNAT.Expect (g-expect.ads):            GNAT Expect g-expect ads.
+                                                              (line    6)
+ * GNAT.Expect.TTY (g-exptty.ads):        GNAT Expect TTY g-exptty ads.
+                                                              (line    6)
+ * GNAT.Float_Control (g-flocon.ads):     GNAT Float_Control g-flocon ads.
+                                                              (line    6)
+ * GNAT.Formatted_String (g-forstr.ads):  GNAT Formatted_String g-forstr ads.
+                                                              (line    6)
+ * GNAT.Generic_Fast_Math_Functions (g-gfmafu.ads): GNAT Generic_Fast_Math_Functions g-gfmafu ads.
+                                                              (line    6)
+ * GNAT.Heap_Sort (g-heasor.ads):         GNAT Heap_Sort g-heasor ads.
+                                                              (line    6)
+ * GNAT.Heap_Sort_A (g-hesora.ads):       GNAT Heap_Sort_A g-hesora ads.
+                                                              (line    6)
+ * GNAT.Heap_Sort_G (g-hesorg.ads):       GNAT Heap_Sort_G g-hesorg ads.
+                                                              (line    6)
+ * GNAT.HTable (g-htable.ads):            GNAT HTable g-htable ads.
+                                                              (line    6)
+ * GNAT.IO (g-io.ads):                    GNAT IO g-io ads.   (line    6)
+ * GNAT.IO_Aux (g-io_aux.ads):            GNAT IO_Aux g-io_aux ads.
+                                                              (line    6)
+ * GNAT.Lock_Files (g-locfil.ads):        GNAT Lock_Files g-locfil ads.
+                                                              (line    6)
+ * GNAT.MBBS_Discrete_Random (g-mbdira.ads): GNAT MBBS_Discrete_Random g-mbdira ads.
+                                                              (line    6)
+ * GNAT.MBBS_Float_Random (g-mbflra.ads): GNAT MBBS_Float_Random g-mbflra ads.
+                                                              (line    6)
+ * GNAT.MD5 (g-md5.ads):                  GNAT MD5 g-md5 ads. (line    6)
+ * GNAT.Memory_Dump (g-memdum.ads):       GNAT Memory_Dump g-memdum ads.
+                                                              (line    6)
+ * GNAT.Most_Recent_Exception (g-moreex.ads): GNAT Most_Recent_Exception g-moreex ads.
+                                                              (line    6)
+ * GNAT.OS_Lib (g-os_lib.ads):            GNAT OS_Lib g-os_lib ads.
+                                                              (line    6)
+ * GNAT.Perfect_Hash_Generators (g-pehage.ads): GNAT Perfect_Hash_Generators g-pehage ads.
+                                                              (line    6)
+ * GNAT.Random_Numbers (g-rannum.ads):    GNAT Random_Numbers g-rannum ads.
+                                                              (line    6)
+ * GNAT.Regexp (g-regexp.ads):            GNAT Regexp g-regexp ads.
+                                                              (line    6)
+ * GNAT.Registry (g-regist.ads):          GNAT Registry g-regist ads.
+                                                              (line    6)
+ * GNAT.Regpat (g-regpat.ads):            GNAT Regpat g-regpat ads.
+                                                              (line    6)
+ * GNAT.Rewrite_Data (g-rewdat.ads):      GNAT Rewrite_Data g-rewdat ads.
+                                                              (line    6)
+ * GNAT.Secondary_Stack_Info (g-sestin.ads): GNAT Secondary_Stack_Info g-sestin ads.
+                                                              (line    6)
+ * GNAT.Semaphores (g-semaph.ads):        GNAT Semaphores g-semaph ads.
+                                                              (line    6)
+ * GNAT.Serial_Communications (g-sercom.ads): GNAT Serial_Communications g-sercom ads.
+                                                              (line    6)
+ * GNAT.SHA1 (g-sha1.ads):                GNAT SHA1 g-sha1 ads.
+                                                              (line    6)
+ * GNAT.SHA224 (g-sha224.ads):            GNAT SHA224 g-sha224 ads.
+                                                              (line    6)
+ * GNAT.SHA256 (g-sha256.ads):            GNAT SHA256 g-sha256 ads.
+                                                              (line    6)
+ * GNAT.SHA384 (g-sha384.ads):            GNAT SHA384 g-sha384 ads.
+                                                              (line    6)
+ * GNAT.SHA512 (g-sha512.ads):            GNAT SHA512 g-sha512 ads.
+                                                              (line    6)
+ * GNAT.Signals (g-signal.ads):           GNAT Signals g-signal ads.
+                                                              (line    6)
+ * GNAT.Sockets (g-socket.ads):           GNAT Sockets g-socket ads.
+                                                              (line    6)
+ * GNAT.Source_Info (g-souinf.ads):       GNAT Source_Info g-souinf ads.
+                                                              (line    6)
+ * GNAT.Spelling_Checker (g-speche.ads):  GNAT Spelling_Checker g-speche ads.
+                                                              (line    6)
+ * GNAT.Spelling_Checker_Generic (g-spchge.ads): GNAT Spelling_Checker_Generic g-spchge ads.
+                                                              (line    6)
+ * GNAT.Spitbol (g-spitbo.ads):           GNAT Spitbol g-spitbo ads.
+                                                              (line    6)
+ * GNAT.Spitbol.Patterns (g-spipat.ads):  GNAT Spitbol Patterns g-spipat ads.
+                                                              (line    6)
+ * GNAT.Spitbol.Table_Boolean (g-sptabo.ads): GNAT Spitbol Table_Boolean g-sptabo ads.
+                                                              (line    6)
+ * GNAT.Spitbol.Table_Integer (g-sptain.ads): GNAT Spitbol Table_Integer g-sptain ads.
+                                                              (line    6)
+ * GNAT.Spitbol.Table_VString (g-sptavs.ads): GNAT Spitbol Table_VString g-sptavs ads.
+                                                              (line    6)
+ * GNAT.SSE (g-sse.ads):                  GNAT SSE g-sse ads. (line    6)
+ * GNAT.SSE.Vector_Types (g-ssvety.ads):  GNAT SSE Vector_Types g-ssvety ads.
+                                                              (line    6)
+ * GNAT.Strings (g-string.ads):           GNAT Strings g-string ads.
+                                                              (line    6)
+ * GNAT.String_Hash (g-strhas.ads):       GNAT String_Hash g-strhas ads.
+                                                              (line    6)
+ * GNAT.String_Split (g-strspl.ads):      GNAT String_Split g-strspl ads.
+                                                              (line    6)
+ * GNAT.Table (g-table.ads):              GNAT Table g-table ads.
+                                                              (line    6)
+ * GNAT.Task_Lock (g-tasloc.ads):         GNAT Task_Lock g-tasloc ads.
+                                                              (line    6)
+ * GNAT.Threads (g-thread.ads):           GNAT Threads g-thread ads.
+                                                              (line    6)
+ * GNAT.Time_Stamp (g-timsta.ads):        GNAT Time_Stamp g-timsta ads.
+                                                              (line    6)
+ * GNAT.Traceback (g-traceb.ads):         GNAT Traceback g-traceb ads.
+                                                              (line    6)
+ * GNAT.Traceback.Symbolic (g-trasym.ads): GNAT Traceback Symbolic g-trasym ads.
+                                                              (line    6)
+ * GNAT.UTF_32 (g-utf_32.ads):            GNAT UTF_32 g-utf_32 ads.
+                                                              (line    6)
+ * GNAT.UTF_32_Spelling_Checker (g-u3spch.ads): GNAT UTF_32_Spelling_Checker g-u3spch ads.
+                                                              (line    6)
+ * GNAT.Wide_Spelling_Checker (g-wispch.ads): GNAT Wide_Spelling_Checker g-wispch ads.
+                                                              (line    6)
+ * GNAT.Wide_String_Split (g-wistsp.ads): GNAT Wide_String_Split g-wistsp ads.
+                                                              (line    6)
+ * GNAT.Wide_Wide_Spelling_Checker (g-zspche.ads): GNAT Wide_Wide_Spelling_Checker g-zspche ads.
+                                                              (line    6)
+ * GNAT.Wide_Wide_String_Split (g-zistsp.ads): GNAT Wide_Wide_String_Split g-zistsp ads.
+                                                              (line    6)
+ * handling long command lines:           Ada Command_Line Response_File a-clrefi ads.
+                                                              (line    6)
+ * Handling of Records with Holes:        Handling of Records with Holes.
+                                                              (line    6)
+ * Hash functions:                        GNAT Perfect_Hash_Generators g-pehage ads.
+                                                              (line    6)
+ * Hash functions <1>:                    GNAT String_Hash g-strhas ads.
+                                                              (line    6)
+ * Hash tables:                           GNAT Dynamic_HTables g-dynhta ads.
+                                                              (line    6)
+ * Hash tables <1>:                       GNAT HTable g-htable ads.
+                                                              (line    6)
+ * Has_Access_Values:                     Attribute Has_Access_Values.
+                                                              (line    6)
+ * Has_Discriminants:                     Attribute Has_Discriminants.
+                                                              (line    6)
+ * Has_Tagged_Values:                     Attribute Has_Tagged_Values.
+                                                              (line    6)
+ * Heap usage:                            RM 13 9 14-17 Unchecked Conversion.
+                                                              (line   34)
+ * I/O interfacing:                       Interfaces VxWorks IO i-vxwoio ads.
+                                                              (line    6)
+ * IBM Packed Format:                     Interfaces Packed_Decimal i-pacdec ads.
+                                                              (line    6)
+ * Image:                                 System Address_Image s-addima ads.
+                                                              (line    6)
+ * Img:                                   Attribute Img.      (line    6)
+ * Immediate_Reclamation:                 Immediate_Reclamation.
+                                                              (line    6)
+ * Implementation-dependent features:     About This Guide.   (line   24)
+ * implicit:                              RM 13 9 14-17 Unchecked Conversion.
+                                                              (line   33)
+ * Import:                                Address Clauses.    (line  121)
+ * Initialization:                        Pragma Suppress_Initialization.
+                                                              (line    6)
+ * Initialized:                           Attribute Initialized.
+                                                              (line    6)
+ * Initializes:                           Aspect Initializes. (line    6)
+ * Initial_Condition:                     Aspect Initial_Condition.
+                                                              (line    6)
+ * Inline_Always:                         Aspect Inline_Always.
+                                                              (line    6)
+ * Input/Output facilities:               GNAT IO g-io ads.   (line    6)
+ * Input/Output facilities <1>:           GNAT IO_Aux g-io_aux ads.
+                                                              (line    6)
+ * Integer maps:                          GNAT Spitbol Table_Integer g-sptain ads.
+                                                              (line    6)
+ * Integer types:                         RM 3 5 2 5 Alternative Character Sets.
+                                                              (line   23)
+ * Integer_Value:                         Attribute Integer_Value.
+                                                              (line    6)
+ * Interfaces:                            RM B 1 39-41 Pragma Export.
+                                                              (line   34)
+ * Interfaces.C.Extensions (i-cexten.ads): Interfaces C Extensions i-cexten ads.
+                                                              (line    6)
+ * Interfaces.C.Streams (i-cstrea.ads):   Interfaces C Streams i-cstrea ads.
+                                                              (line    6)
+ * Interfaces.Packed_Decimal (i-pacdec.ads): Interfaces Packed_Decimal i-pacdec ads.
+                                                              (line    6)
+ * Interfaces.VxWorks (i-vxwork.ads):     Interfaces VxWorks i-vxwork ads.
+                                                              (line    6)
+ * Interfaces.VxWorks.Int_Connection (i-vxinco.ads): Interfaces VxWorks Int_Connection i-vxinco ads.
+                                                              (line    6)
+ * Interfaces.VxWorks.IO (i-vxwoio.ads):  Interfaces VxWorks IO i-vxwoio ads.
+                                                              (line    6)
+ * interfacing:                           Interfaces C Streams i-cstrea ads.
+                                                              (line    6)
+ * interfacing <1>:                       Interfaces VxWorks i-vxwork ads.
+                                                              (line    6)
+ * interfacing <2>:                       Interfaces VxWorks Int_Connection i-vxinco ads.
+                                                              (line    6)
+ * Interfacing to C++:                    Pragma CPP_Virtual. (line    6)
+ * Interfacing to C++ <1>:                Pragma Propagate_Exceptions.
+                                                              (line    6)
+ * Interfacing to VxWorks:                Interfaces VxWorks i-vxwork ads.
+                                                              (line    6)
+ * Interfacing to VxWorks <1>:            Interfaces VxWorks Int_Connection i-vxinco ads.
+                                                              (line    6)
+ * Interfacing to VxWorks’ I/O:           Interfaces VxWorks IO i-vxwoio ads.
+                                                              (line    6)
+ * interfacing with:                      RM B 2 12-13 Package Interfaces.
+                                                              (line   21)
+ * interfacing with <1>:                  RM B 3 63-71 Interfacing with C.
+                                                              (line   57)
+ * interfacing with <2>:                  RM B 4 95-98 Interfacing with COBOL.
+                                                              (line   27)
+ * Interfacing with C++:                  Pragma CPP_Class.   (line    6)
+ * Interfacing with C++ <1>:              Pragma CPP_Constructor.
+                                                              (line    6)
+ * Interfacing with C++ <2>:              Pragma CPP_Vtable.  (line    6)
+ * Interfacing with Direct_IO:            Ada Direct_IO C_Streams a-diocst ads.
+                                                              (line    6)
+ * Interfacing with Sequential_IO:        Ada Sequential_IO C_Streams a-siocst ads.
+                                                              (line    6)
+ * Interfacing with Stream_IO:            Ada Streams Stream_IO C_Streams a-ssicst ads.
+                                                              (line    6)
+ * Interfacing with ‘‘Text_IO‘‘:          Ada Text_IO C_Streams a-tiocst ads.
+                                                              (line    6)
+ * Interfacing with ‘‘Wide_Text_IO‘‘:     Ada Wide_Text_IO C_Streams a-wtcstr ads.
+                                                              (line    6)
+ * Interfacing with ‘‘Wide_Wide_Text_IO‘‘: Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads.
+                                                              (line    6)
+ * Interrupt:                             GNAT Ctrl_C g-ctrl_c ads.
+                                                              (line    6)
+ * Interrupt support:                     RM C 1 10-16 Access to Machine Operations.
+                                                              (line   39)
+ * Interrupts:                            RM C 3 1 20-21 Protected Procedure Handlers.
+                                                              (line   16)
+ * Intrinsic operator:                    Intrinsic Operators.
+                                                              (line    6)
+ * Intrinsic Subprograms:                 Intrinsic Subprograms.
+                                                              (line    6)
+ * Invalid representations:               Pragma Assume_No_Invalid_Values.
+                                                              (line    6)
+ * Invalid values:                        Pragma Assume_No_Invalid_Values.
+                                                              (line    6)
+ * Invalid_Value:                         Attribute Invalid_Value.
+                                                              (line    6)
+ * Invariant:                             Aspect Invariant.   (line    6)
+ * Invariant’Class:                       Aspect Invariant’Class.
+                                                              (line    6)
+ * IO support:                            Ada Strings Unbounded Text_IO a-suteio ads.
+                                                              (line    6)
+ * IO support <1>:                        Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads.
+                                                              (line    6)
+ * IO support <2>:                        Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads.
+                                                              (line    6)
+ * Iterable:                              Aspect Iterable.    (line    6)
+ * Iterable <1>:                          Attribute Iterable. (line    6)
+ * Large:                                 Attribute Large.    (line    6)
+ * Latin-1:                               Changed semantics.  (line   12)
+ * Latin_1 constants for Wide_Character:  Ada Characters Wide_Latin_1 a-cwila1 ads.
+                                                              (line    6)
+ * Latin_1 constants for Wide_Wide_Character: Ada Characters Wide_Wide_Latin_1 a-chzla1 ads.
+                                                              (line    6)
+ * Latin_9 constants for Character:       Ada Characters Latin_9 a-chlat9 ads.
+                                                              (line    6)
+ * Latin_9 constants for Wide_Character:  Ada Characters Wide_Latin_9 a-cwila9 ads.
+                                                              (line    6)
+ * Latin_9 constants for Wide_Wide_Character: Ada Characters Wide_Wide_Latin_9 a-chzla9 ads.
+                                                              (line    6)
+ * Library_Level:                         Attribute Library_Level.
+                                                              (line    6)
+ * License checking:                      Pragma License.     (line    6)
+ * Line:                                  Line.               (line    6)
+ * Linker_Section:                        Aspect Linker_Section.
+                                                              (line    6)
+ * Little endian:                         Attribute Default_Bit_Order.
+                                                              (line    6)
+ * Little endian <1>:                     Attribute Default_Scalar_Storage_Order.
+                                                              (line    6)
+ * local:                                 System Pool_Local s-pooloc ads.
+                                                              (line    6)
+ * Local storage pool:                    System Pool_Local s-pooloc ads.
+                                                              (line    6)
+ * Locking:                               GNAT Task_Lock g-tasloc ads.
+                                                              (line    6)
+ * Locking Policies:                      RM C 7 2 30 The Package Task_Attributes.
+                                                              (line   17)
+ * Locking using files:                   GNAT Lock_Files g-locfil ads.
+                                                              (line    6)
+ * Lock_Free:                             Aspect Lock_Free.   (line    6)
+ * Loop_Entry:                            Attribute Loop_Entry.
+                                                              (line    6)
+ * Machine Code insertions:               Machine Code Insertions.
+                                                              (line    6)
+ * Machine operations:                    RM B 5 22-26 Interfacing with Fortran.
+                                                              (line   34)
+ * Machine_Size:                          Attribute Machine_Size.
+                                                              (line    6)
+ * Mailboxes:                             GNAT Bounded_Mailboxes g-boumai ads.
+                                                              (line    6)
+ * Mantissa:                              Attribute Mantissa. (line    6)
+ * Maps:                                  GNAT Spitbol Table_Integer g-sptain ads.
+                                                              (line    6)
+ * Maps <1>:                              GNAT Spitbol Table_VString g-sptavs ads.
+                                                              (line    6)
+ * Mathematical functions:                GNAT Generic_Fast_Math_Functions g-gfmafu ads.
+                                                              (line    6)
+ * maximum:                               Attribute Maximum_Alignment.
+                                                              (line    6)
+ * Maximum_Alignment:                     Attribute Maximum_Alignment.
+                                                              (line    6)
+ * Maximum_Alignment attribute:           Alignment Clauses.  (line   21)
+ * Max_Asynchronous_Select_Nesting:       Max_Asynchronous_Select_Nesting.
+                                                              (line    6)
+ * Max_Entry_Queue_Depth:                 Max_Entry_Queue_Length.
+                                                              (line   13)
+ * Max_Entry_Queue_Length:                Max_Entry_Queue_Length.
+                                                              (line    6)
+ * Max_Integer_Size:                      Attribute Max_Integer_Size.
+                                                              (line    6)
+ * Max_Protected_Entries:                 Max_Protected_Entries.
+                                                              (line    6)
+ * Max_Queue_Length:                      Aspect Max_Queue_Length.
+                                                              (line    6)
+ * Max_Select_Alternatives:               Max_Select_Alternatives.
+                                                              (line    6)
+ * Max_Storage_At_Blocking:               Max_Storage_At_Blocking.
+                                                              (line    6)
+ * Max_Tasks:                             Max_Tasks.          (line    6)
+ * Max_Task_Entries:                      Max_Task_Entries.   (line    6)
+ * Mechanism_Code:                        Attribute Mechanism_Code.
+                                                              (line    6)
+ * Memory allocation:                     System Memory s-memory ads.
+                                                              (line    6)
+ * Memory corruption debugging:           GNAT Debug_Pools g-debpoo ads.
+                                                              (line    6)
+ * Memory-mapped I/O:                     Use of Address Clauses for Memory-Mapped I/O.
+                                                              (line    6)
+ * Message Digest MD5:                    GNAT MD5 g-md5 ads. (line    6)
+ * monotonic:                             RM D 7 21 Tasking Restrictions.
+                                                              (line   13)
+ * multidimensional:                      RM 3 5 7 17 Float Types.
+                                                              (line   23)
+ * Multidimensional arrays:               RM 3 5 7 17 Float Types.
+                                                              (line   24)
+ * Multiprocessor interface:              System Multiprocessors s-multip ads.
+                                                              (line    6)
+ * Multiprocessor interface <1>:          System Multiprocessors Dispatching_Domains s-mudido ads.
+                                                              (line    6)
+ * Named assertions:                      Pragma Check.       (line    6)
+ * Named assertions <1>:                  Pragma Check_Policy.
+                                                              (line    6)
+ * Named numbers:                         Attribute Universal_Literal_String.
+                                                              (line    6)
+ * No_Abort_Statements:                   No_Abort_Statements.
+                                                              (line    6)
+ * No_Access_Parameter_Allocators:        No_Access_Parameter_Allocators.
+                                                              (line    6)
+ * No_Access_Subprograms:                 No_Access_Subprograms.
+                                                              (line    6)
+ * No_Allocators:                         No_Allocators.      (line    6)
+ * No_Anonymous_Allocators:               No_Anonymous_Allocators.
+                                                              (line    6)
+ * No_Asynchronous_Control:               No_Asynchronous_Control.
+                                                              (line    6)
+ * No_Caching:                            Aspect No_Caching.  (line    6)
+ * No_Calendar:                           No_Calendar.        (line    6)
+ * No_Coextensions:                       No_Coextensions.    (line    6)
+ * No_Default_Initialization:             No_Default_Initialization.
+                                                              (line    6)
+ * No_Delay:                              No_Delay.           (line    6)
+ * No_Dependence:                         No_Dependence.      (line    6)
+ * No_Direct_Boolean_Operators:           No_Direct_Boolean_Operators.
+                                                              (line    6)
+ * No_Dispatch:                           No_Dispatch.        (line    6)
+ * No_Dispatching_Calls:                  No_Dispatching_Calls.
+                                                              (line    6)
+ * No_Dynamic_Accessibility_Checks:       No_Dynamic_Accessibility_Checks.
+                                                              (line    6)
+ * No_Dynamic_Attachment:                 No_Dynamic_Attachment.
+                                                              (line    6)
+ * No_Dynamic_Interrupts:                 No_Dynamic_Attachment.
+                                                              (line   11)
+ * No_Dynamic_Priorities:                 No_Dynamic_Priorities.
+                                                              (line    6)
+ * No_Dynamic_Sized_Objects:              No_Dynamic_Sized_Objects.
+                                                              (line    6)
+ * No_Elaboration_Code:                   No_Elaboration_Code.
+                                                              (line    6)
+ * No_Elaboration_Code_All:               Aspect No_Elaboration_Code_All.
+                                                              (line    6)
+ * No_Entry_Calls_In_Elaboration_Code:    No_Entry_Calls_In_Elaboration_Code.
+                                                              (line    6)
+ * No_Entry_Queue:                        No_Entry_Queue.     (line    6)
+ * No_Enumeration_Maps:                   No_Enumeration_Maps.
+                                                              (line    6)
+ * No_Exceptions:                         No_Exceptions.      (line    6)
+ * No_Exception_Handlers:                 No_Exception_Handlers.
+                                                              (line    6)
+ * No_Exception_Propagation:              No_Exception_Propagation.
+                                                              (line    6)
+ * No_Exception_Registration:             No_Exception_Registration.
+                                                              (line    6)
+ * No_Finalization:                       No_Finalization.    (line    6)
+ * No_Fixed_Point:                        No_Fixed_Point.     (line    6)
+ * No_Floating_Point:                     No_Floating_Point.  (line    6)
+ * No_Implementation_Aspect_Specifications: No_Implementation_Aspect_Specifications.
+                                                              (line    6)
+ * No_Implementation_Attributes:          No_Implementation_Attributes.
+                                                              (line    6)
+ * No_Implementation_Identifiers:         No_Implementation_Identifiers.
+                                                              (line    6)
+ * No_Implementation_Pragmas:             No_Implementation_Pragmas.
+                                                              (line    6)
+ * No_Implementation_Restrictions:        No_Implementation_Restrictions.
+                                                              (line    6)
+ * No_Implementation_Units:               No_Implementation_Units.
+                                                              (line    6)
+ * No_Implicit_Aliasing:                  No_Implicit_Aliasing.
+                                                              (line    6)
+ * No_Implicit_Conditionals:              No_Implicit_Conditionals.
+                                                              (line    6)
+ * No_Implicit_Dynamic_Code:              No_Implicit_Dynamic_Code.
+                                                              (line    6)
+ * No_Implicit_Heap_Allocations:          No_Implicit_Heap_Allocations.
+                                                              (line    6)
+ * No_Implicit_Loops:                     No_Implicit_Loops.  (line    6)
+ * No_Implicit_Protected_Object_Allocations: No_Implicit_Protected_Object_Allocations.
+                                                              (line    6)
+ * No_Implicit_Task_Allocations:          No_Implicit_Task_Allocations.
+                                                              (line    6)
+ * No_Initialize_Scalars:                 No_Initialize_Scalars.
+                                                              (line    6)
+ * No_Inline:                             Aspect No_Inline.   (line    6)
+ * No_IO:                                 No_IO.              (line    6)
+ * No_Local_Allocators:                   No_Local_Allocators.
+                                                              (line    6)
+ * No_Local_Protected_Objects:            No_Local_Protected_Objects.
+                                                              (line    6)
+ * No_Local_Tagged_Types:                 No_Local_Tagged_Types.
+                                                              (line    6)
+ * No_Local_Timing_Events:                No_Local_Timing_Events.
+                                                              (line    6)
+ * No_Long_Long_Integers:                 No_Long_Long_Integers.
+                                                              (line    6)
+ * No_Multiple_Elaboration:               No_Multiple_Elaboration.
+                                                              (line    6)
+ * No_Nested_Finalization:                No_Nested_Finalization.
+                                                              (line    6)
+ * No_Obsolescent_Features:               No_Obsolescent_Features.
+                                                              (line    6)
+ * No_Protected_Types:                    No_Protected_Types. (line    6)
+ * No_Protected_Type_Allocators:          No_Protected_Type_Allocators.
+                                                              (line    6)
+ * No_Recursion:                          No_Recursion.       (line    6)
+ * No_Reentrancy:                         No_Reentrancy.      (line    6)
+ * No_Relative_Delay:                     No_Relative_Delay.  (line    6)
+ * No_Requeue:                            No_Requeue_Statements.
+                                                              (line   10)
+ * No_Requeue_Statements:                 No_Requeue_Statements.
+                                                              (line    6)
+ * No_Secondary_Stack:                    No_Secondary_Stack. (line    6)
+ * No_Select_Statements:                  No_Select_Statements.
+                                                              (line    6)
+ * No_Specification_of_Aspect:            No_Specification_of_Aspect.
+                                                              (line    6)
+ * No_Specific_Termination_Handlers:      No_Specific_Termination_Handlers.
+                                                              (line    6)
+ * No_Standard_Allocators_After_Elaboration: No_Standard_Allocators_After_Elaboration.
+                                                              (line    6)
+ * No_Standard_Storage_Pools:             No_Standard_Storage_Pools.
+                                                              (line    6)
+ * No_Streams:                            No_Streams.         (line    6)
+ * No_Stream_Optimizations:               No_Stream_Optimizations.
+                                                              (line    6)
+ * No_Tagged_Streams:                     Aspect No_Tagged_Streams.
+                                                              (line    6)
+ * No_Tagged_Type_Registration:           No_Tagged_Type_Registration.
+                                                              (line    6)
+ * No_Tasking:                            No_Tasking.         (line    6)
+ * No_Task_Allocators:                    No_Task_Allocators. (line    6)
+ * No_Task_Attributes:                    No_Task_Attributes_Package.
+                                                              (line    9)
+ * No_Task_Attributes_Package:            No_Task_Attributes_Package.
+                                                              (line    6)
+ * No_Task_At_Interrupt_Priority:         No_Task_At_Interrupt_Priority.
+                                                              (line    6)
+ * No_Task_Hierarchy:                     No_Task_Hierarchy.  (line    6)
+ * No_Task_Parts:                         Aspect No_Task_Parts.
+                                                              (line    6)
+ * No_Task_Termination:                   No_Task_Termination.
+                                                              (line    6)
+ * No_Terminate_Alternatives:             No_Terminate_Alternatives.
+                                                              (line    6)
+ * No_Unchecked_Access:                   No_Unchecked_Access.
+                                                              (line    6)
+ * No_Unchecked_Conversion:               No_Unchecked_Conversion.
+                                                              (line    6)
+ * No_Unchecked_Deallocation:             No_Unchecked_Deallocation.
+                                                              (line    6)
+ * No_Use_Of_Entity:                      No_Use_Of_Entity.   (line    6)
+ * No_Wide_Characters:                    No_Wide_Characters. (line    6)
+ * Null_Occurrence:                       Ada Exceptions Is_Null_Occurrence a-einuoc ads.
+                                                              (line    6)
+ * Null_Occurrence <1>:                   Ada Exceptions Last_Chance_Handler a-elchha ads.
+                                                              (line    6)
+ * Null_Parameter:                        Attribute Null_Parameter.
+                                                              (line    6)
+ * Numerics:                              RM F 1 2 Decimal Radix Support.
+                                                              (line   11)
+ * Object_Size:                           Aspect Object_Size. (line    6)
+ * Object_Size <1>:                       Attribute Object_Size.
+                                                              (line    6)
+ * Object_Size <2>:                       Value_Size and Object_Size Clauses.
+                                                              (line    6)
+ * Obsolescent:                           Aspect Obsolescent. (line    6)
+ * obtaining most recent:                 GNAT Most_Recent_Exception g-moreex ads.
+                                                              (line    6)
+ * of an address:                         System Address_Image s-addima ads.
+                                                              (line    6)
+ * of bits:                               Bit_Order Clauses.  (line    6)
+ * of bytes:                              Effect of Bit_Order on Byte Ordering.
+                                                              (line    6)
+ * of compiler:                           GNAT Compiler_Version g-comver ads.
+                                                              (line    6)
+ * of objects:                            Value_Size and Object_Size Clauses.
+                                                              (line    6)
+ * Old:                                   Attribute Old.      (line    6)
+ * on ‘‘Address‘‘:                        RM 13 7 37 Address as Private.
+                                                              (line   10)
+ * Operating System interface:            GNAT OS_Lib g-os_lib ads.
+                                                              (line    6)
+ * Operations:                            RM 13 7 37 Address as Private.
+                                                              (line   10)
+ * operations of:                         RM 13 7 37 Address as Private.
+                                                              (line    9)
+ * ordering:                              Bit_Order Clauses.  (line    6)
+ * ordering <1>:                          Effect of Bit_Order on Byte Ordering.
+                                                              (line    6)
+ * Overlaying of objects:                 Address Clauses.    (line  170)
+ * Package Interfaces:                    RM B 1 39-41 Pragma Export.
+                                                              (line   35)
+ * Package Task_Attributes:               RM C 5 8 Pragma Discard_Names.
+                                                              (line   12)
+ * Package ‘‘Interrupts‘‘:                RM C 3 1 20-21 Protected Procedure Handlers.
+                                                              (line   17)
+ * Packed Decimal:                        Interfaces Packed_Decimal i-pacdec ads.
+                                                              (line    6)
+ * Packed types:                          RM 13 1 21-24 Representation Clauses.
+                                                              (line   38)
+ * Parameters:                            Attribute Mechanism_Code.
+                                                              (line    6)
+ * Parameters <1>:                        Attribute Passed_By_Reference.
+                                                              (line    6)
+ * Parsing:                               GNAT AWK g-awk ads. (line    6)
+ * Parsing <1>:                           GNAT Bounded_Buffers g-boubuf ads.
+                                                              (line    6)
+ * Parsing <2>:                           GNAT Bounded_Mailboxes g-boumai ads.
+                                                              (line    6)
+ * Partition communication subsystem:     RM D 8 47-49 Monotonic Time.
+                                                              (line   23)
+ * Partition interfacing functions:       System Partition_Interface s-parint ads.
+                                                              (line    6)
+ * Part_Of:                               Aspect Part_Of.     (line    6)
+ * Passed_By_Reference:                   Attribute Passed_By_Reference.
+                                                              (line    6)
+ * passing:                               Attribute Null_Parameter.
+                                                              (line    6)
+ * Passing by copy:                       Pragma C_Pass_By_Copy.
+                                                              (line    6)
+ * passing mechanism:                     Attribute Mechanism_Code.
+                                                              (line    6)
+ * passing mechanism <1>:                 Attribute Mechanism_Code.
+                                                              (line    6)
+ * Pattern matching:                      GNAT Regexp g-regexp ads.
+                                                              (line    6)
+ * Pattern matching <1>:                  GNAT Regpat g-regpat ads.
+                                                              (line    6)
+ * Pattern matching <2>:                  GNAT Spitbol Patterns g-spipat ads.
+                                                              (line    6)
+ * PCS:                                   RM D 8 47-49 Monotonic Time.
+                                                              (line   22)
+ * Persistent_BSS:                        Aspect Persistent_BSS.
+                                                              (line    6)
+ * Pool_Address:                          Attribute Pool_Address.
+                                                              (line    6)
+ * Portability:                           About This Guide.   (line   24)
+ * Post:                                  Pragma Post.        (line    6)
+ * Post <1>:                              Pragma Post_Class.  (line    6)
+ * Postcondition:                         Pragma Postcondition.
+                                                              (line    6)
+ * postconditions:                        Pragma Post.        (line    6)
+ * postconditions <1>:                    Pragma Postcondition.
+                                                              (line    6)
+ * postconditions <2>:                    Pragma Post_Class.  (line    6)
+ * Pragma:                                Representation Clauses and Pragmas.
+                                                              (line    6)
+ * pragma Ada_2012:                       Implementation of Ada 2012 Features.
+                                                              (line    6)
+ * Pragma Component_Alignment:            Pragma Component_Alignment.
+                                                              (line    6)
+ * Pragma Pack (for arrays):              Pragma Pack for Arrays.
+                                                              (line    6)
+ * Pragma Pack (for records):             Pragma Pack for Records.
+                                                              (line    6)
+ * Pragma Pack (for type Natural):        Pragma Pack for Arrays.
+                                                              (line   79)
+ * Pragma Pack warning:                   Pragma Pack for Arrays.
+                                                              (line   79)
+ * pragma Shared_Passive:                 GNAT Implementation of Shared Passive Packages.
+                                                              (line    6)
+ * Pragmas:                               Pragma Rename_Pragma.
+                                                              (line    6)
+ * Pragmas <1>:                           RM 1 1 5 12 Bounded Errors.
+                                                              (line   12)
+ * Pre:                                   Pragma Pre.         (line    6)
+ * Pre-elaboration requirements:          RM C 3 2 25 Package Interrupts.
+                                                              (line   14)
+ * preconditions:                         Pragma Pre.         (line    6)
+ * Preconditions:                         Pragma Precondition.
+                                                              (line    6)
+ * preconditions <1>:                     Pragma Precondition.
+                                                              (line    6)
+ * preconditions <2>:                     Pragma Pre_Class.   (line    6)
+ * Predicate:                             Aspect Predicate.   (line    6)
+ * Preemptive abort:                      RM D 4 16 Entry Queuing Policies.
+                                                              (line   10)
+ * Prefix_Exception_Messages:             Pragma Prefix_Exception_Messages.
+                                                              (line    6)
+ * Pre_Class:                             Pragma Pre_Class.   (line    6)
+ * Protected procedure handlers:          RM C 3 28 Interrupt Support.
+                                                              (line   14)
+ * Pure:                                  GNAT Exceptions g-except ads.
+                                                              (line    6)
+ * Pure packages:                         GNAT Exceptions g-except ads.
+                                                              (line    6)
+ * Pure_Barriers:                         Pure_Barriers.      (line    6)
+ * Pure_Function:                         Aspect Pure_Function.
+                                                              (line    6)
+ * Random number generation:              RM A 4 4 106 Bounded-Length String Handling.
+                                                              (line   10)
+ * Random number generation <1>:          GNAT MBBS_Discrete_Random g-mbdira ads.
+                                                              (line    6)
+ * Random number generation <2>:          GNAT MBBS_Float_Random g-mbflra ads.
+                                                              (line    6)
+ * Random number generation <3>:          GNAT Random_Numbers g-rannum ads.
+                                                              (line    6)
+ * Range_Length:                          Attribute Range_Length.
+                                                              (line    6)
+ * Rational compatibility:                Pragma Overriding_Renamings.
+                                                              (line    6)
+ * Rational Profile:                      Pragma Implicit_Packing.
+                                                              (line    6)
+ * Rational profile:                      Pragma Overriding_Renamings.
+                                                              (line    6)
+ * Rational profile <1>:                  Pragma Use_VADS_Size.
+                                                              (line    6)
+ * Read attribute:                        RM 13 13 2 1 6 Stream Oriented Attributes.
+                                                              (line   22)
+ * Real-Time Systems Annex compliance:    Ensuring Compliance with the Real-Time Annex.
+                                                              (line    6)
+ * Record Representation Clause:          Record Representation Clauses.
+                                                              (line    6)
+ * Record representation clauses:         RM 13 4 9-10 Enumeration Representation Clauses.
+                                                              (line   15)
+ * records:                               RM 13 4 9-10 Enumeration Representation Clauses.
+                                                              (line   14)
+ * Refined_Depends:                       Aspect Refined_Depends.
+                                                              (line    6)
+ * Refined_Global:                        Aspect Refined_Global.
+                                                              (line    6)
+ * Refined_Initialization:                Aspect Relaxed_Initialization.
+                                                              (line    6)
+ * Refined_Post:                          Aspect Refined_Post.
+                                                              (line    6)
+ * Refined_State:                         Aspect Refined_State.
+                                                              (line    6)
+ * Regular expressions:                   GNAT Regexp g-regexp ads.
+                                                              (line    6)
+ * Regular expressions <1>:               GNAT Regpat g-regpat ads.
+                                                              (line    6)
+ * Remote_Access_Type:                    Aspect Remote_Access_Type.
+                                                              (line    6)
+ * Removing command line arguments:       Ada Command_Line Remove a-colire ads.
+                                                              (line    6)
+ * representation:                        Representation Clauses and Pragmas.
+                                                              (line    6)
+ * Representation:                        Determining the Representations chosen by GNAT.
+                                                              (line    6)
+ * Representation <1>:                    System Wch_Cnv s-wchcnv ads.
+                                                              (line    6)
+ * Representation Clause:                 Representation Clauses and Pragmas.
+                                                              (line    6)
+ * Representation clauses:                RM 11 5 28 Suppression of Checks.
+                                                              (line   10)
+ * Representation clauses <1>:            RM 13 3 71-73 Component Size Clauses.
+                                                              (line   24)
+ * Representation clauses <2>:            RM 13 4 9-10 Enumeration Representation Clauses.
+                                                              (line   15)
+ * Representation Clauses:                Representation Clauses and Pragmas.
+                                                              (line    6)
+ * representation of:                     Attribute Universal_Literal_String.
+                                                              (line    6)
+ * Representation of enums:               Attribute Enum_Rep. (line    6)
+ * Representation of enums <1>:           Attribute Enum_Val. (line    6)
+ * Representation of wide characters:     System Wch_Cnv s-wchcnv ads.
+                                                              (line    6)
+ * Representation Pragma:                 Representation Clauses and Pragmas.
+                                                              (line    6)
+ * response file:                         Ada Command_Line Response_File a-clrefi ads.
+                                                              (line    6)
+ * Response file for command line:        Ada Command_Line Response_File a-clrefi ads.
+                                                              (line    6)
+ * Restrictions:                          Attribute Restriction_Set.
+                                                              (line    6)
+ * Restrictions definitions:              System Rident s-rident ads.
+                                                              (line    6)
+ * Restriction_Set:                       Attribute Restriction_Set.
+                                                              (line    6)
+ * Result:                                Attribute Result.   (line    6)
+ * Return values:                         Attribute Mechanism_Code.
+                                                              (line    6)
+ * Rewrite data:                          GNAT Rewrite_Data g-rewdat ads.
+                                                              (line    6)
+ * Rotate_Left:                           Shifts and Rotates. (line    6)
+ * Rotate_Right:                          Shifts and Rotates. (line    6)
+ * Run-time restrictions access:          System Restrictions s-restri ads.
+                                                              (line    6)
+ * Safe_Emax:                             Attribute Safe_Emax.
+                                                              (line    6)
+ * Safe_Large:                            Attribute Safe_Large.
+                                                              (line    6)
+ * Safe_Small:                            Attribute Safe_Small.
+                                                              (line    6)
+ * Scalar storage order:                  Attribute Scalar_Storage_Order.
+                                                              (line    6)
+ * Scalar_Storage_Order:                  Pragma Default_Scalar_Storage_Order.
+                                                              (line    6)
+ * Scalar_Storage_Order <1>:              Aspect Scalar_Storage_Order.
+                                                              (line    6)
+ * Scalar_Storage_Order <2>:              Attribute Scalar_Storage_Order.
+                                                              (line    6)
+ * Secondary Stack Info:                  GNAT Secondary_Stack_Info g-sestin ads.
+                                                              (line    6)
+ * Secondary_Stack_Size:                  Aspect Secondary_Stack_Size.
+                                                              (line    6)
+ * Secure Hash Algorithm SHA-1:           GNAT SHA1 g-sha1 ads.
+                                                              (line    6)
+ * Secure Hash Algorithm SHA-224:         GNAT SHA224 g-sha224 ads.
+                                                              (line    6)
+ * Secure Hash Algorithm SHA-256:         GNAT SHA256 g-sha256 ads.
+                                                              (line    6)
+ * Secure Hash Algorithm SHA-384:         GNAT SHA384 g-sha384 ads.
+                                                              (line    6)
+ * Secure Hash Algorithm SHA-512:         GNAT SHA512 g-sha512 ads.
+                                                              (line    6)
+ * Semaphores:                            GNAT Semaphores g-semaph ads.
+                                                              (line    6)
+ * Sequential elaboration policy:         RM G 2 6 15 Complex Arithmetic Accuracy.
+                                                              (line   13)
+ * Serial_Communications:                 GNAT Serial_Communications g-sercom ads.
+                                                              (line    6)
+ * Sets of strings:                       GNAT Spitbol Table_Boolean g-sptabo ads.
+                                                              (line    6)
+ * setting for not-first subtype:         Attribute Value_Size.
+                                                              (line    6)
+ * Shared:                                Aspect Shared.      (line    6)
+ * Shared passive packages:               GNAT Implementation of Shared Passive Packages.
+                                                              (line    6)
+ * SHARED_MEMORY_DIRECTORY environment variable: GNAT Implementation of Shared Passive Packages.
+                                                              (line   35)
+ * Shift operators:                       Pragma Provide_Shift_Operators.
+                                                              (line    6)
+ * Shift_Left:                            Shifts and Rotates. (line    6)
+ * Shift_Right:                           Shifts and Rotates. (line    6)
+ * Shift_Right_Arithmetic:                Shifts and Rotates. (line    6)
+ * Signals:                               GNAT Signals g-signal ads.
+                                                              (line    6)
+ * simple:                                Pragma Simple_Storage_Pool_Type.
+                                                              (line    6)
+ * simple <1>:                            Attribute Simple_Storage_Pool.
+                                                              (line    6)
+ * Simple I/O:                            GNAT IO g-io ads.   (line    6)
+ * Simple storage pool:                   Pragma Simple_Storage_Pool_Type.
+                                                              (line    6)
+ * Simple storage pool <1>:               Attribute Simple_Storage_Pool.
+                                                              (line    6)
+ * Simple_Barriers:                       Simple_Barriers.    (line    6)
+ * Simple_Storage_Pool:                   Aspect Simple_Storage_Pool.
+                                                              (line    6)
+ * Simple_Storage_Pool <1>:               Attribute Simple_Storage_Pool.
+                                                              (line    6)
+ * Simple_Storage_Pool_Type:              Aspect Simple_Storage_Pool_Type.
+                                                              (line    6)
+ * Size:                                  Pragma Use_VADS_Size.
+                                                              (line    6)
+ * Size <1>:                              Attribute Object_Size.
+                                                              (line    6)
+ * Size <2>:                              Attribute VADS_Size.
+                                                              (line    6)
+ * Size <3>:                              Attribute Value_Size.
+                                                              (line    6)
+ * Size <4>:                              Size of Variant Record Objects.
+                                                              (line    6)
+ * size:                                  Size of Variant Record Objects.
+                                                              (line    6)
+ * Size <5>:                              Value_Size and Object_Size Clauses.
+                                                              (line    6)
+ * Size Clause:                           Size Clauses.       (line    6)
+ * Size clauses:                          RM 13 3 29-35 Alignment Clauses.
+                                                              (line   40)
+ * Size for biased representation:        Biased Representation.
+                                                              (line    6)
+ * Size of ‘‘Address‘‘:                   Attribute Address_Size.
+                                                              (line    6)
+ * Small:                                 Attribute Small.    (line    6)
+ * Small <1>:                             Attribute Small_Denominator.
+                                                              (line    6)
+ * Small <2>:                             Attribute Small_Numerator.
+                                                              (line    6)
+ * Small_Denominator:                     Attribute Small_Denominator.
+                                                              (line    6)
+ * Small_Numerator:                       Attribute Small_Numerator.
+                                                              (line    6)
+ * Sockets:                               GNAT Sockets g-socket ads.
+                                                              (line    6)
+ * Sorting:                               GNAT Bubble_Sort g-bubsor ads.
+                                                              (line    6)
+ * Sorting <1>:                           GNAT Bubble_Sort_A g-busora ads.
+                                                              (line    6)
+ * Sorting <2>:                           GNAT Bubble_Sort_G g-busorg ads.
+                                                              (line    6)
+ * Sorting <3>:                           GNAT Heap_Sort g-heasor ads.
+                                                              (line    6)
+ * Sorting <4>:                           GNAT Heap_Sort_A g-hesora ads.
+                                                              (line    6)
+ * Sorting <5>:                           GNAT Heap_Sort_G g-hesorg ads.
+                                                              (line    6)
+ * Source Information:                    GNAT Source_Info g-souinf ads.
+                                                              (line    6)
+ * Source_Location:                       Source_Location.    (line    6)
+ * SPARK_05:                              SPARK_05.           (line    6)
+ * SPARK_Mode:                            Aspect SPARK_Mode.  (line    6)
+ * Spawn capability:                      GNAT OS_Lib g-os_lib ads.
+                                                              (line    6)
+ * Spell checking:                        GNAT Spelling_Checker g-speche ads.
+                                                              (line    6)
+ * Spell checking <1>:                    GNAT Spelling_Checker_Generic g-spchge ads.
+                                                              (line    6)
+ * Spell checking <2>:                    GNAT UTF_32_Spelling_Checker g-u3spch ads.
+                                                              (line    6)
+ * Spell checking <3>:                    GNAT Wide_Spelling_Checker g-wispch ads.
+                                                              (line    6)
+ * Spell checking <4>:                    GNAT Wide_Wide_Spelling_Checker g-zspche ads.
+                                                              (line    6)
+ * SPITBOL interface:                     GNAT Spitbol g-spitbo ads.
+                                                              (line    6)
+ * SPITBOL pattern matching:              GNAT Spitbol Patterns g-spipat ads.
+                                                              (line    6)
+ * SPITBOL Tables:                        GNAT Spitbol Table_Boolean g-sptabo ads.
+                                                              (line    6)
+ * SPITBOL Tables <1>:                    GNAT Spitbol Table_Integer g-sptain ads.
+                                                              (line    6)
+ * SPITBOL Tables <2>:                    GNAT Spitbol Table_VString g-sptavs ads.
+                                                              (line    6)
+ * Static_Dispatch_Tables:                Static_Dispatch_Tables.
+                                                              (line    6)
+ * Static_Priorities:                     Static_Priorities.  (line    6)
+ * Static_Storage_Size:                   Static_Storage_Size.
+                                                              (line    6)
+ * Storage place attributes:              RM 13 5 1 17-22 Record Representation Clauses.
+                                                              (line   44)
+ * Storage pool:                          Pragma Simple_Storage_Pool_Type.
+                                                              (line    6)
+ * Storage pool <1>:                      Attribute Simple_Storage_Pool.
+                                                              (line    6)
+ * Storage pool <2>:                      System Pool_Global s-pooglo ads.
+                                                              (line    6)
+ * Storage pool <3>:                      System Pool_Local s-pooloc ads.
+                                                              (line    6)
+ * Storage_Size Clause:                   Storage_Size Clauses.
+                                                              (line    6)
+ * Storage_Unit:                          Attribute Storage_Unit.
+                                                              (line    6)
+ * Storage_Unit (in pragma Component_Alignment): Pragma Component_Alignment.
+                                                              (line   37)
+ * Stream files:                          Treating Text_IO Files as Streams.
+                                                              (line    6)
+ * Stream operations:                     System Strings Stream_Ops s-ststop ads.
+                                                              (line    6)
+ * Stream oriented attributes:            RM 13 11 2 17 Unchecked Deallocation.
+                                                              (line   10)
+ * Stream oriented attributes <1>:        RM 13 13 2 1 6 Stream Oriented Attributes.
+                                                              (line   21)
+ * String decoding:                       GNAT Decode_String g-decstr ads.
+                                                              (line    6)
+ * String encoding:                       GNAT Encode_String g-encstr ads.
+                                                              (line    6)
+ * String maps:                           GNAT Spitbol Table_VString g-sptavs ads.
+                                                              (line    6)
+ * String splitter:                       GNAT String_Split g-strspl ads.
+                                                              (line    6)
+ * String stream operations:              System Strings Stream_Ops s-ststop ads.
+                                                              (line    6)
+ * Stub_Type:                             Attribute Stub_Type.
+                                                              (line    6)
+ * Subprogram address:                    Attribute Code_Address.
+                                                              (line    6)
+ * subtypes:                              Alignment Clauses.  (line   87)
+ * Suppressing external name:             Pragma Export_Function.
+                                                              (line   59)
+ * Suppressing external name <1>:         Pragma Export_Procedure.
+                                                              (line   44)
+ * Suppressing external name <2>:         Pragma Export_Valued_Procedure.
+                                                              (line   49)
+ * Suppressing initialization:            Pragma Suppress_Initialization.
+                                                              (line    6)
+ * suppression of:                        Pragma Suppress_Initialization.
+                                                              (line    6)
+ * suppression of <1>:                    RM 11 4 1 19 Exception Information.
+                                                              (line   22)
+ * Suppression of checks:                 RM 11 4 1 19 Exception Information.
+                                                              (line   23)
+ * Suppress_Debug_Info:                   Aspect Suppress_Debug_Info.
+                                                              (line    6)
+ * Suppress_Initialization:               Aspect Suppress_Initialization.
+                                                              (line    6)
+ * synonyms:                              Pragma Convention_Identifier.
+                                                              (line    6)
+ * synonyms <1>:                          Pragma Rename_Pragma.
+                                                              (line    6)
+ * System:                                Pragma Extend_System.
+                                                              (line    6)
+ * System.Address_Image (s-addima.ads):   System Address_Image s-addima ads.
+                                                              (line    6)
+ * System.Assertions (s-assert.ads):      System Assertions s-assert ads.
+                                                              (line    6)
+ * System.Atomic_Counters (s-atocou.ads): System Atomic_Counters s-atocou ads.
+                                                              (line    6)
+ * System.Memory (s-memory.ads):          System Memory s-memory ads.
+                                                              (line    6)
+ * System.Multiprocessors (s-multip.ads): System Multiprocessors s-multip ads.
+                                                              (line    6)
+ * System.Multiprocessors.Dispatching_Domains (s-mudido.ads): System Multiprocessors Dispatching_Domains s-mudido ads.
+                                                              (line    6)
+ * System.Partition_Interface (s-parint.ads): System Partition_Interface s-parint ads.
+                                                              (line    6)
+ * System.Pool_Global (s-pooglo.ads):     System Pool_Global s-pooglo ads.
+                                                              (line    6)
+ * System.Pool_Local (s-pooloc.ads):      System Pool_Local s-pooloc ads.
+                                                              (line    6)
+ * System.Restrictions (s-restri.ads):    System Restrictions s-restri ads.
+                                                              (line    6)
+ * System.Rident (s-rident.ads):          System Rident s-rident ads.
+                                                              (line    6)
+ * System.Strings.Stream_Ops (s-ststop.ads): System Strings Stream_Ops s-ststop ads.
+                                                              (line    6)
+ * System.Unsigned_Types (s-unstyp.ads):  System Unsigned_Types s-unstyp ads.
+                                                              (line    6)
+ * System.Wch_Cnv (s-wchcnv.ads):         System Wch_Cnv s-wchcnv ads.
+                                                              (line    6)
+ * System.Wch_Con (s-wchcon.ads):         System Wch_Con s-wchcon ads.
+                                                              (line    6)
+ * System_Allocator_Alignment:            Attribute System_Allocator_Alignment.
+                                                              (line    6)
+ * Table implementation:                  GNAT Dynamic_Tables g-dyntab ads.
+                                                              (line    6)
+ * Table implementation <1>:              GNAT Table g-table ads.
+                                                              (line    6)
+ * Tagged values:                         Attribute Has_Tagged_Values.
+                                                              (line    6)
+ * Target_Name:                           Attribute Target_Name.
+                                                              (line    6)
+ * Task locking:                          GNAT Task_Lock g-tasloc ads.
+                                                              (line    6)
+ * Task specific storage:                 Pragma Thread_Local_Storage.
+                                                              (line    6)
+ * Task synchronization:                  GNAT Task_Lock g-tasloc ads.
+                                                              (line    6)
+ * Tasking restrictions:                  RM D 6 9-10 Preemptive Abort.
+                                                              (line   18)
+ * Task_Attributes:                       Pragma Thread_Local_Storage.
+                                                              (line    6)
+ * Task_Attributes <1>:                   RM C 5 8 Pragma Discard_Names.
+                                                              (line   11)
+ * Test cases:                            Pragma Test_Case.   (line    6)
+ * testing for:                           Attribute Has_Access_Values.
+                                                              (line    6)
+ * testing for <1>:                       Attribute Has_Discriminants.
+                                                              (line    6)
+ * testing for <2>:                       Attribute Has_Tagged_Values.
+                                                              (line    6)
+ * testing for <3>:                       Ada Exceptions Is_Null_Occurrence a-einuoc ads.
+                                                              (line    6)
+ * testing for <4>:                       Ada Exceptions Last_Chance_Handler a-elchha ads.
+                                                              (line    6)
+ * Test_Case:                             Aspect Test_Case.   (line    6)
+ * Text_IO:                               Ada Strings Unbounded Text_IO a-suteio ads.
+                                                              (line    6)
+ * Text_IO <1>:                           Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads.
+                                                              (line    6)
+ * Text_IO <2>:                           Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads.
+                                                              (line    6)
+ * Text_IO <3>:                           GNAT IO_Aux g-io_aux ads.
+                                                              (line    6)
+ * Text_IO extensions:                    Text_IO Extensions. (line    6)
+ * Text_IO for unbounded strings:         Text_IO Facilities for Unbounded Strings.
+                                                              (line    6)
+ * Text_IO operations:                    Text_IO Facilities for Unbounded Strings.
+                                                              (line    6)
+ * Text_IO resetting standard files:      Ada Text_IO Reset_Standard_Files a-tirsfi ads.
+                                                              (line    6)
+ * Threads:                               GNAT Threads g-thread ads.
+                                                              (line    6)
+ * Thread_Local_Storage:                  Aspect Thread_Local_Storage.
+                                                              (line    6)
+ * Time:                                  RM D 7 21 Tasking Restrictions.
+                                                              (line   14)
+ * Time <1>:                              GNAT Calendar Time_IO g-catiio ads.
+                                                              (line    6)
+ * Time stamp:                            GNAT Time_Stamp g-timsta ads.
+                                                              (line    6)
+ * TLS (Thread Local Storage):            Pragma Thread_Local_Storage.
+                                                              (line    6)
+ * To_Address:                            Attribute To_Address.
+                                                              (line    6)
+ * To_Address <1>:                        Address Clauses.    (line   73)
+ * To_Any:                                Attribute To_Any.   (line    6)
+ * Trace back facilities:                 GNAT Traceback g-traceb ads.
+                                                              (line    6)
+ * Trace back facilities <1>:             GNAT Traceback Symbolic g-trasym ads.
+                                                              (line    5)
+ * Traceback for Exception Occurrence:    Ada Exceptions Traceback a-exctra ads.
+                                                              (line    6)
+ * trampoline:                            No_Implicit_Dynamic_Code.
+                                                              (line    6)
+ * TypeCode:                              Attribute TypeCode. (line    6)
+ * Type_Class:                            Attribute Type_Class.
+                                                              (line    6)
+ * Type_Key:                              Attribute Type_Key. (line    6)
+ * typographical:                         Conventions.        (line    6)
+ * Typographical conventions:             Conventions.        (line    6)
+ * Unbounded_String:                      Text_IO Facilities for Unbounded Strings.
+                                                              (line    6)
+ * Unbounded_String <1>:                  Ada Strings Unbounded Text_IO a-suteio ads.
+                                                              (line    6)
+ * Unbounded_Wide_String:                 Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads.
+                                                              (line    6)
+ * Unbounded_Wide_Wide_String:            Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads.
+                                                              (line    6)
+ * Unchecked conversion:                  RM 13 7 1 16 Address Operations.
+                                                              (line   14)
+ * Unchecked deallocation:                RM 13 11 23-25 Implicit Heap Usage.
+                                                              (line   32)
+ * Unconstrained_Array:                   Attribute Unconstrained_Array.
+                                                              (line    6)
+ * Unevaluated_Use_Of_Old:                Pragma Unevaluated_Use_Of_Old.
+                                                              (line    6)
+ * Unicode:                               GNAT Decode_String g-decstr ads.
+                                                              (line    6)
+ * Unicode <1>:                           GNAT Decode_UTF8_String g-deutst ads.
+                                                              (line    6)
+ * Unicode <2>:                           GNAT Encode_String g-encstr ads.
+                                                              (line    6)
+ * Unicode <3>:                           GNAT Encode_UTF8_String g-enutst ads.
+                                                              (line    6)
+ * Unicode categorization:                Ada Wide_Characters Unicode a-wichun ads.
+                                                              (line    6)
+ * Unicode categorization <1>:            Ada Wide_Wide_Characters Unicode a-zchuni ads.
+                                                              (line    6)
+ * Unions in C:                           Pragma Unchecked_Union.
+                                                              (line    6)
+ * Universal_Aliasing:                    Aspect Universal_Aliasing.
+                                                              (line    6)
+ * Universal_Literal_String:              Attribute Universal_Literal_String.
+                                                              (line    6)
+ * unmodified:                            Pragma Unmodified.  (line    6)
+ * Unmodified:                            Aspect Unmodified.  (line    6)
+ * unreferenced:                          Pragma Unreferenced.
+                                                              (line    6)
+ * unreferenced <1>:                      Pragma Unreferenced_Objects.
+                                                              (line    6)
+ * Unreferenced:                          Aspect Unreferenced.
+                                                              (line    6)
+ * Unreferenced_Objects:                  Aspect Unreferenced_Objects.
+                                                              (line    6)
+ * unrestricted:                          Attribute Unrestricted_Access.
+                                                              (line    6)
+ * Unrestricted_Access:                   Attribute Unrestricted_Access.
+                                                              (line    6)
+ * unused:                                Pragma Unused.      (line    6)
+ * Update:                                Attribute Update.   (line    6)
+ * used for objects:                      Attribute Object_Size.
+                                                              (line    6)
+ * UTF-8:                                 GNAT Decode_String g-decstr ads.
+                                                              (line    6)
+ * UTF-8 <1>:                             GNAT Decode_UTF8_String g-deutst ads.
+                                                              (line    6)
+ * UTF-8 <2>:                             GNAT Encode_String g-encstr ads.
+                                                              (line    6)
+ * UTF-8 <3>:                             GNAT Encode_UTF8_String g-enutst ads.
+                                                              (line    6)
+ * UTF-8 representation:                  GNAT Byte_Order_Mark g-byorma ads.
+                                                              (line    6)
+ * UTF-8 string decoding:                 GNAT Decode_UTF8_String g-deutst ads.
+                                                              (line    6)
+ * UTF-8 string encoding:                 GNAT Encode_UTF8_String g-enutst ads.
+                                                              (line    6)
+ * VADS compatibility:                    Pragma Use_VADS_Size.
+                                                              (line    6)
+ * VADS compatibility <1>:                Attribute VADS_Size.
+                                                              (line    6)
+ * VADS_Size:                             Attribute VADS_Size.
+                                                              (line    6)
+ * Valid_Scalars:                         Attribute Valid_Scalars.
+                                                              (line    6)
+ * Valid_Value:                           Attribute Valid_Value.
+                                                              (line    6)
+ * Value_Size:                            Aspect Value_Size.  (line    6)
+ * Value_Size <1>:                        Attribute Value_Size.
+                                                              (line    6)
+ * Value_Size <2>:                        Value_Size and Object_Size Clauses.
+                                                              (line    6)
+ * variant record objects:                Size of Variant Record Objects.
+                                                              (line    6)
+ * Variant record objects:                Size of Variant Record Objects.
+                                                              (line    6)
+ * Version:                               GNAT Compiler_Version g-comver ads.
+                                                              (line    6)
+ * Volatile_Full_Access:                  Aspect Volatile_Full_Access.
+                                                              (line    6)
+ * Volatile_Function:                     Aspect Volatile_Function.
+                                                              (line    6)
+ * VxWorks:                               Interfaces VxWorks i-vxwork ads.
+                                                              (line    6)
+ * VxWorks <1>:                           Interfaces VxWorks Int_Connection i-vxinco ads.
+                                                              (line    6)
+ * VxWorks <2>:                           Interfaces VxWorks IO i-vxwoio ads.
+                                                              (line    6)
+ * VxWorks <3>:                           Interfaces VxWorks IO i-vxwoio ads.
+                                                              (line    6)
+ * VxWorks <4>:                           Interfaces VxWorks IO i-vxwoio ads.
+                                                              (line    6)
+ * Warnings:                              Pragma Unmodified.  (line    6)
+ * Warnings <1>:                          Pragma Unreferenced.
+                                                              (line    6)
+ * Warnings <2>:                          Pragma Unreferenced_Objects.
+                                                              (line    6)
+ * Warnings <3>:                          Pragma Unused.      (line    6)
+ * Warnings <4>:                          Aspect Warnings.    (line    6)
+ * Wchar_T_Size:                          Attribute Wchar_T_Size.
+                                                              (line    6)
+ * when passed by reference:              Attribute Passed_By_Reference.
+                                                              (line    6)
+ * Wide characte representations:         GNAT Byte_Order_Mark g-byorma ads.
+                                                              (line    6)
+ * Wide Character:                        System Wch_Cnv s-wchcnv ads.
+                                                              (line    6)
+ * Wide character codes:                  GNAT UTF_32 g-utf_32 ads.
+                                                              (line    6)
+ * Wide character decoding:               GNAT Decode_UTF8_String g-deutst ads.
+                                                              (line    6)
+ * Wide character encoding:               GNAT Decode_String g-decstr ads.
+                                                              (line    6)
+ * Wide character encoding <1>:           GNAT Encode_String g-encstr ads.
+                                                              (line    6)
+ * Wide character encoding <2>:           GNAT Encode_UTF8_String g-enutst ads.
+                                                              (line    6)
+ * Wide String:                           System Wch_Cnv s-wchcnv ads.
+                                                              (line    6)
+ * Wide_Character:                        Ada Wide_Characters Unicode a-wichun ads.
+                                                              (line    6)
+ * Wide_String splitter:                  GNAT Wide_String_Split g-wistsp ads.
+                                                              (line    6)
+ * Wide_Text_IO resetting standard files: Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads.
+                                                              (line    6)
+ * Wide_Wide_Character:                   Ada Wide_Wide_Characters Unicode a-zchuni ads.
+                                                              (line    6)
+ * Wide_Wide_String splitter:             GNAT Wide_Wide_String_Split g-zistsp ads.
+                                                              (line    6)
+ * Wide_Wide_Text_IO resetting standard files: Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads.
+                                                              (line    6)
+ * Windows Registry:                      GNAT Registry g-regist ads.
+                                                              (line    6)
+ * Word_Size:                             Attribute Word_Size.
+                                                              (line    6)
+ * Write attribute:                       RM 13 13 2 1 6 Stream Oriented Attributes.
+                                                              (line   22)
+ * XDR representation:                    RM 13 13 2 1 6 Stream Oriented Attributes.
+                                                              (line   22)
+ * Zero address:                          Attribute Null_Parameter.
+                                                              (line    6)
+ 
+ 
+ 
+ Tag Table:
+ Node: Top326
+ Ref: gnat_rm doc554
+ Ref: 0554
+ Node: About This Guide33140
+ Ref: gnat_rm/about_this_guide doc33248
+ Ref: 233248
+ Ref: gnat_rm/about_this_guide about-this-guide33248
+ Ref: 333248
+ Ref: gnat_rm/about_this_guide gnat-reference-manual33248
+ Ref: 433248
+ Ref: gnat_rm/about_this_guide id133248
+ Ref: 533248
+ Node: What This Reference Manual Contains34642
+ Ref: gnat_rm/about_this_guide what-this-reference-manual-contains34751
+ Ref: 634751
+ Node: Conventions38424
+ Ref: gnat_rm/about_this_guide conventions38561
+ Ref: 1838561
+ Node: Related Information39132
+ Ref: gnat_rm/about_this_guide related-information39225
+ Ref: 1939225
+ Node: Implementation Defined Pragmas40519
+ Ref: gnat_rm/implementation_defined_pragmas doc40654
+ Ref: 1a40654
+ Ref: gnat_rm/implementation_defined_pragmas id140654
+ Ref: 1b40654
+ Ref: gnat_rm/implementation_defined_pragmas implementation-defined-pragmas40654
+ Ref: 740654
+ Node: Pragma Abort_Defer46846
+ Ref: gnat_rm/implementation_defined_pragmas pragma-abort-defer46962
+ Ref: 1c46962
+ Node: Pragma Abstract_State47833
+ Ref: gnat_rm/implementation_defined_pragmas id247971
+ Ref: 1d47971
+ Ref: gnat_rm/implementation_defined_pragmas pragma-abstract-state47971
+ Ref: 1e47971
+ Node: Pragma Ada_8349209
+ Ref: gnat_rm/implementation_defined_pragmas pragma-ada-8349342
+ Ref: 1f49342
+ Node: Pragma Ada_9550433
+ Ref: gnat_rm/implementation_defined_pragmas pragma-ada-9550558
+ Ref: 2050558
+ Node: Pragma Ada_0551076
+ Ref: gnat_rm/implementation_defined_pragmas pragma-ada-0551203
+ Ref: 2151203
+ Node: Pragma Ada_200552229
+ Ref: gnat_rm/implementation_defined_pragmas pragma-ada-200552356
+ Ref: 2252356
+ Node: Pragma Ada_1252523
+ Ref: gnat_rm/implementation_defined_pragmas pragma-ada-1252652
+ Ref: 2352652
+ Node: Pragma Ada_201253827
+ Ref: gnat_rm/implementation_defined_pragmas pragma-ada-201253956
+ Ref: 2453956
+ Node: Pragma Ada_202254123
+ Ref: gnat_rm/implementation_defined_pragmas pragma-ada-202254275
+ Ref: 2554275
+ Node: Pragma Aggregate_Individually_Assign55467
+ Ref: gnat_rm/implementation_defined_pragmas pragma-aggregate-individually-assign55632
+ Ref: 2655632
+ Node: Pragma Allow_Integer_Address56039
+ Ref: gnat_rm/implementation_defined_pragmas pragma-allow-integer-address56204
+ Ref: 2756204
+ Node: Pragma Annotate57817
+ Ref: gnat_rm/implementation_defined_pragmas id357959
+ Ref: 2857959
+ Ref: gnat_rm/implementation_defined_pragmas pragma-annotate57959
+ Ref: 2957959
+ Node: Pragma Assert59407
+ Ref: gnat_rm/implementation_defined_pragmas pragma-assert59542
+ Ref: 2a59542
+ Node: Pragma Assert_And_Cut62052
+ Ref: gnat_rm/implementation_defined_pragmas pragma-assert-and-cut62195
+ Ref: 2b62195
+ Node: Pragma Assertion_Policy63007
+ Ref: gnat_rm/implementation_defined_pragmas pragma-assertion-policy63150
+ Ref: 2c63150
+ Node: Pragma Assume66888
+ Ref: gnat_rm/implementation_defined_pragmas pragma-assume67041
+ Ref: 2d67041
+ Node: Pragma Assume_No_Invalid_Values68020
+ Ref: gnat_rm/implementation_defined_pragmas pragma-assume-no-invalid-values68170
+ Ref: 2e68170
+ Node: Pragma Async_Readers69953
+ Ref: gnat_rm/implementation_defined_pragmas id470110
+ Ref: 2f70110
+ Ref: gnat_rm/implementation_defined_pragmas pragma-async-readers70110
+ Ref: 3070110
+ Node: Pragma Async_Writers70363
+ Ref: gnat_rm/implementation_defined_pragmas id570516
+ Ref: 3170516
+ Ref: gnat_rm/implementation_defined_pragmas pragma-async-writers70516
+ Ref: 3270516
+ Node: Pragma Attribute_Definition70769
+ Ref: gnat_rm/implementation_defined_pragmas pragma-attribute-definition70923
+ Ref: 3370923
+ Node: Pragma C_Pass_By_Copy71550
+ Ref: gnat_rm/implementation_defined_pragmas pragma-c-pass-by-copy71696
+ Ref: 3471696
+ Node: Pragma Check72878
+ Ref: gnat_rm/implementation_defined_pragmas pragma-check73024
+ Ref: 3573024
+ Node: Pragma Check_Float_Overflow74282
+ Ref: gnat_rm/implementation_defined_pragmas pragma-check-float-overflow74424
+ Ref: 3674424
+ Node: Pragma Check_Name76483
+ Ref: gnat_rm/implementation_defined_pragmas pragma-check-name76632
+ Ref: 3776632
+ Node: Pragma Check_Policy77752
+ Ref: gnat_rm/implementation_defined_pragmas pragma-check-policy77888
+ Ref: 3877888
+ Node: Pragma Comment80705
+ Ref: gnat_rm/implementation_defined_pragmas pragma-comment80844
+ Ref: 3980844
+ Node: Pragma Common_Object81362
+ Ref: gnat_rm/implementation_defined_pragmas pragma-common-object81507
+ Ref: 3a81507
+ Node: Pragma Compile_Time_Error82390
+ Ref: gnat_rm/implementation_defined_pragmas compile-time-error82548
+ Ref: 3b82548
+ Ref: gnat_rm/implementation_defined_pragmas pragma-compile-time-error82548
+ Ref: 3c82548
+ Node: Pragma Compile_Time_Warning83618
+ Ref: gnat_rm/implementation_defined_pragmas pragma-compile-time-warning83786
+ Ref: 3d83786
+ Node: Pragma Complete_Representation85027
+ Ref: gnat_rm/implementation_defined_pragmas pragma-complete-representation85199
+ Ref: 3e85199
+ Node: Pragma Complex_Representation85748
+ Ref: gnat_rm/implementation_defined_pragmas pragma-complex-representation85919
+ Ref: 3f85919
+ Node: Pragma Component_Alignment86675
+ Ref: gnat_rm/implementation_defined_pragmas pragma-component-alignment86849
+ Ref: 4086849
+ Node: Pragma Constant_After_Elaboration89583
+ Ref: gnat_rm/implementation_defined_pragmas id689749
+ Ref: 4189749
+ Ref: gnat_rm/implementation_defined_pragmas pragma-constant-after-elaboration89749
+ Ref: 4289749
+ Node: Pragma Contract_Cases90054
+ Ref: gnat_rm/implementation_defined_pragmas id790222
+ Ref: 4390222
+ Ref: gnat_rm/implementation_defined_pragmas pragma-contract-cases90222
+ Ref: 4490222
+ Node: Pragma Convention_Identifier93057
+ Ref: gnat_rm/implementation_defined_pragmas pragma-convention-identifier93208
+ Ref: 4593208
+ Node: Pragma CPP_Class94392
+ Ref: gnat_rm/implementation_defined_pragmas pragma-cpp-class94544
+ Ref: 4694544
+ Node: Pragma CPP_Constructor95658
+ Ref: gnat_rm/implementation_defined_pragmas pragma-cpp-constructor95800
+ Ref: 4895800
+ Node: Pragma CPP_Virtual97760
+ Ref: gnat_rm/implementation_defined_pragmas pragma-cpp-virtual97903
+ Ref: 4997903
+ Node: Pragma CPP_Vtable98373
+ Ref: gnat_rm/implementation_defined_pragmas pragma-cpp-vtable98504
+ Ref: 4a98504
+ Node: Pragma CPU98928
+ Ref: gnat_rm/implementation_defined_pragmas pragma-cpu99062
+ Ref: 4b99062
+ Node: Pragma Deadline_Floor99302
+ Ref: gnat_rm/implementation_defined_pragmas pragma-deadline-floor99431
+ Ref: 4c99431
+ Node: Pragma Debug99747
+ Ref: gnat_rm/implementation_defined_pragmas pragma-debug99885
+ Ref: 4d99885
+ Node: Pragma Debug_Policy100841
+ Ref: gnat_rm/implementation_defined_pragmas pragma-debug-policy100990
+ Ref: 4e100990
+ Node: Pragma Default_Initial_Condition101279
+ Ref: gnat_rm/implementation_defined_pragmas id8101451
+ Ref: 4f101451
+ Ref: gnat_rm/implementation_defined_pragmas pragma-default-initial-condition101451
+ Ref: 50101451
+ Node: Pragma Default_Scalar_Storage_Order101752
+ Ref: gnat_rm/implementation_defined_pragmas pragma-default-scalar-storage-order101932
+ Ref: 51101932
+ Node: Pragma Default_Storage_Pool104232
+ Ref: gnat_rm/implementation_defined_pragmas pragma-default-storage-pool104394
+ Ref: 52104394
+ Node: Pragma Depends104699
+ Ref: gnat_rm/implementation_defined_pragmas id9104848
+ Ref: 53104848
+ Ref: gnat_rm/implementation_defined_pragmas pragma-depends104848
+ Ref: 54104848
+ Node: Pragma Detect_Blocking105548
+ Ref: gnat_rm/implementation_defined_pragmas pragma-detect-blocking105707
+ Ref: 55105707
+ Node: Pragma Disable_Atomic_Synchronization106096
+ Ref: gnat_rm/implementation_defined_pragmas pragma-disable-atomic-synchronization106266
+ Ref: 56106266
+ Node: Pragma Dispatching_Domain107083
+ Ref: gnat_rm/implementation_defined_pragmas pragma-dispatching-domain107253
+ Ref: 57107253
+ Node: Pragma Effective_Reads107538
+ Ref: gnat_rm/implementation_defined_pragmas id10107694
+ Ref: 58107694
+ Ref: gnat_rm/implementation_defined_pragmas pragma-effective-reads107694
+ Ref: 59107694
+ Node: Pragma Effective_Writes107955
+ Ref: gnat_rm/implementation_defined_pragmas id11108111
+ Ref: 5a108111
+ Ref: gnat_rm/implementation_defined_pragmas pragma-effective-writes108111
+ Ref: 5b108111
+ Node: Pragma Elaboration_Checks108376
+ Ref: gnat_rm/implementation_defined_pragmas pragma-elaboration-checks108526
+ Ref: 5c108526
+ Node: Pragma Eliminate109358
+ Ref: gnat_rm/implementation_defined_pragmas pragma-eliminate109521
+ Ref: 5d109521
+ Node: Pragma Enable_Atomic_Synchronization115253
+ Ref: gnat_rm/implementation_defined_pragmas pragma-enable-atomic-synchronization115413
+ Ref: 5e115413
+ Node: Pragma Export_Function116329
+ Ref: gnat_rm/implementation_defined_pragmas pragma-export-function116493
+ Ref: 5f116493
+ Node: Pragma Export_Object118949
+ Ref: gnat_rm/implementation_defined_pragmas pragma-export-object119100
+ Ref: 60119100
+ Node: Pragma Export_Procedure119771
+ Ref: gnat_rm/implementation_defined_pragmas pragma-export-procedure119930
+ Ref: 61119930
+ Node: Pragma Export_Valued_Procedure121428
+ Ref: gnat_rm/implementation_defined_pragmas pragma-export-valued-procedure121587
+ Ref: 62121587
+ Node: Pragma Extend_System123440
+ Ref: gnat_rm/implementation_defined_pragmas pragma-extend-system123601
+ Ref: 63123601
+ Node: Pragma Extensions_Allowed125663
+ Ref: gnat_rm/implementation_defined_pragmas pragma-extensions-allowed125819
+ Ref: 64125819
+ Node: Pragma Extensions_Visible137049
+ Ref: gnat_rm/implementation_defined_pragmas id12137200
+ Ref: 65137200
+ Ref: gnat_rm/implementation_defined_pragmas pragma-extensions-visible137200
+ Ref: 66137200
+ Node: Pragma External137473
+ Ref: gnat_rm/implementation_defined_pragmas pragma-external137626
+ Ref: 67137626
+ Node: Pragma External_Name_Casing138193
+ Ref: gnat_rm/implementation_defined_pragmas pragma-external-name-casing138337
+ Ref: 68138337
+ Node: Pragma Fast_Math141345
+ Ref: gnat_rm/implementation_defined_pragmas pragma-fast-math141496
+ Ref: 69141496
+ Node: Pragma Favor_Top_Level142369
+ Ref: gnat_rm/implementation_defined_pragmas id13142521
+ Ref: 6a142521
+ Ref: gnat_rm/implementation_defined_pragmas pragma-favor-top-level142521
+ Ref: 6b142521
+ Node: Pragma Finalize_Storage_Only143194
+ Ref: gnat_rm/implementation_defined_pragmas pragma-finalize-storage-only143357
+ Ref: 6c143357
+ Node: Pragma Float_Representation144119
+ Ref: gnat_rm/implementation_defined_pragmas pragma-float-representation144272
+ Ref: 6d144272
+ Node: Pragma Ghost145127
+ Ref: gnat_rm/implementation_defined_pragmas id14145265
+ Ref: 6e145265
+ Ref: gnat_rm/implementation_defined_pragmas pragma-ghost145265
+ Ref: 6f145265
+ Node: Pragma Global145484
+ Ref: gnat_rm/implementation_defined_pragmas id15145607
+ Ref: 70145607
+ Ref: gnat_rm/implementation_defined_pragmas pragma-global145607
+ Ref: 71145607
+ Node: Pragma Ident146154
+ Ref: gnat_rm/implementation_defined_pragmas pragma-ident146285
+ Ref: 72146285
+ Node: Pragma Ignore_Pragma146521
+ Ref: gnat_rm/implementation_defined_pragmas pragma-ignore-pragma146668
+ Ref: 73146668
+ Node: Pragma Implementation_Defined147288
+ Ref: gnat_rm/implementation_defined_pragmas pragma-implementation-defined147441
+ Ref: 74147441
+ Node: Pragma Implemented148153
+ Ref: gnat_rm/implementation_defined_pragmas pragma-implemented148309
+ Ref: 75148309
+ Node: Pragma Implicit_Packing149928
+ Ref: gnat_rm/implementation_defined_pragmas pragma-implicit-packing150077
+ Ref: 76150077
+ Node: Pragma Import_Function151900
+ Ref: gnat_rm/implementation_defined_pragmas pragma-import-function152051
+ Ref: 77152051
+ Node: Pragma Import_Object154164
+ Ref: gnat_rm/implementation_defined_pragmas pragma-import-object154315
+ Ref: 78154315
+ Node: Pragma Import_Procedure155019
+ Ref: gnat_rm/implementation_defined_pragmas pragma-import-procedure155178
+ Ref: 79155178
+ Node: Pragma Import_Valued_Procedure156110
+ Ref: gnat_rm/implementation_defined_pragmas pragma-import-valued-procedure156267
+ Ref: 7a156267
+ Node: Pragma Independent158044
+ Ref: gnat_rm/implementation_defined_pragmas pragma-independent158207
+ Ref: 7b158207
+ Node: Pragma Independent_Components158884
+ Ref: gnat_rm/implementation_defined_pragmas pragma-independent-components159041
+ Ref: 7c159041
+ Node: Pragma Initial_Condition159703
+ Ref: gnat_rm/implementation_defined_pragmas id16159867
+ Ref: 7d159867
+ Ref: gnat_rm/implementation_defined_pragmas pragma-initial-condition159867
+ Ref: 7e159867
+ Node: Pragma Initialize_Scalars160125
+ Ref: gnat_rm/implementation_defined_pragmas pragma-initialize-scalars160278
+ Ref: 7f160278
+ Node: Pragma Initializes163962
+ Ref: gnat_rm/implementation_defined_pragmas id17164111
+ Ref: 80164111
+ Ref: gnat_rm/implementation_defined_pragmas pragma-initializes164111
+ Ref: 81164111
+ Node: Pragma Inline_Always164597
+ Ref: gnat_rm/implementation_defined_pragmas id18164742
+ Ref: 82164742
+ Ref: gnat_rm/implementation_defined_pragmas pragma-inline-always164742
+ Ref: 83164742
+ Node: Pragma Inline_Generic165382
+ Ref: gnat_rm/implementation_defined_pragmas pragma-inline-generic165525
+ Ref: 84165525
+ Node: Pragma Interface165907
+ Ref: gnat_rm/implementation_defined_pragmas pragma-interface166051
+ Ref: 85166051
+ Node: Pragma Interface_Name167024
+ Ref: gnat_rm/implementation_defined_pragmas pragma-interface-name167171
+ Ref: 86167171
+ Node: Pragma Interrupt_Handler167689
+ Ref: gnat_rm/implementation_defined_pragmas pragma-interrupt-handler167842
+ Ref: 87167842
+ Node: Pragma Interrupt_State168098
+ Ref: gnat_rm/implementation_defined_pragmas pragma-interrupt-state168246
+ Ref: 88168246
+ Node: Pragma Invariant171446
+ Ref: gnat_rm/implementation_defined_pragmas id19171587
+ Ref: 89171587
+ Ref: gnat_rm/implementation_defined_pragmas pragma-invariant171587
+ Ref: 8a171587
+ Node: Pragma Keep_Names173243
+ Ref: gnat_rm/implementation_defined_pragmas pragma-keep-names173376
+ Ref: 8b173376
+ Node: Pragma License173992
+ Ref: gnat_rm/implementation_defined_pragmas pragma-license174125
+ Ref: 8c174125
+ Node: Pragma Link_With177223
+ Ref: gnat_rm/implementation_defined_pragmas pragma-link-with177358
+ Ref: 8d177358
+ Node: Pragma Linker_Alias177999
+ Ref: gnat_rm/implementation_defined_pragmas pragma-linker-alias178145
+ Ref: 8e178145
+ Node: Pragma Linker_Constructor179424
+ Ref: gnat_rm/implementation_defined_pragmas pragma-linker-constructor179578
+ Ref: 8f179578
+ Node: Pragma Linker_Destructor180807
+ Ref: gnat_rm/implementation_defined_pragmas pragma-linker-destructor180963
+ Ref: 90180963
+ Node: Pragma Linker_Section181742
+ Ref: gnat_rm/implementation_defined_pragmas id20181889
+ Ref: 91181889
+ Ref: gnat_rm/implementation_defined_pragmas pragma-linker-section181889
+ Ref: 92181889
+ Node: Pragma Lock_Free184938
+ Ref: gnat_rm/implementation_defined_pragmas id21185082
+ Ref: 93185082
+ Ref: gnat_rm/implementation_defined_pragmas pragma-lock-free185082
+ Ref: 94185082
+ Node: Pragma Loop_Invariant186405
+ Ref: gnat_rm/implementation_defined_pragmas pragma-loop-invariant186548
+ Ref: 95186548
+ Node: Pragma Loop_Optimize187740
+ Ref: gnat_rm/implementation_defined_pragmas pragma-loop-optimize187886
+ Ref: 96187886
+ Node: Pragma Loop_Variant189628
+ Ref: gnat_rm/implementation_defined_pragmas pragma-loop-variant189777
+ Ref: 97189777
+ Node: Pragma Machine_Attribute191586
+ Ref: gnat_rm/implementation_defined_pragmas pragma-machine-attribute191726
+ Ref: 98191726
+ Node: Pragma Main192697
+ Ref: gnat_rm/implementation_defined_pragmas pragma-main192837
+ Ref: 99192837
+ Node: Pragma Main_Storage193275
+ Ref: gnat_rm/implementation_defined_pragmas pragma-main-storage193414
+ Ref: 9a193414
+ Node: Pragma Max_Queue_Length193821
+ Ref: gnat_rm/implementation_defined_pragmas id22193963
+ Ref: 9b193963
+ Ref: gnat_rm/implementation_defined_pragmas pragma-max-queue-length193963
+ Ref: 9c193963
+ Node: Pragma No_Body194389
+ Ref: gnat_rm/implementation_defined_pragmas pragma-no-body194529
+ Ref: 9d194529
+ Node: Pragma No_Caching195312
+ Ref: gnat_rm/implementation_defined_pragmas id23195459
+ Ref: 9e195459
+ Ref: gnat_rm/implementation_defined_pragmas pragma-no-caching195459
+ Ref: 9f195459
+ Node: Pragma No_Component_Reordering195702
+ Ref: gnat_rm/implementation_defined_pragmas pragma-no-component-reordering195865
+ Ref: a0195865
+ Node: Pragma No_Elaboration_Code_All196525
+ Ref: gnat_rm/implementation_defined_pragmas id24196698
+ Ref: a1196698
+ Ref: gnat_rm/implementation_defined_pragmas pragma-no-elaboration-code-all196698
+ Ref: a2196698
+ Node: Pragma No_Heap_Finalization197353
+ Ref: gnat_rm/implementation_defined_pragmas pragma-no-heap-finalization197512
+ Ref: a3197512
+ Node: Pragma No_Inline198664
+ Ref: gnat_rm/implementation_defined_pragmas id25198809
+ Ref: a4198809
+ Ref: gnat_rm/implementation_defined_pragmas pragma-no-inline198809
+ Ref: a5198809
+ Node: Pragma No_Return199324
+ Ref: gnat_rm/implementation_defined_pragmas pragma-no-return199467
+ Ref: a6199467
+ Node: Pragma No_Strict_Aliasing200440
+ Ref: gnat_rm/implementation_defined_pragmas pragma-no-strict-aliasing200591
+ Ref: a7200591
+ Node: Pragma No_Tagged_Streams201317
+ Ref: gnat_rm/implementation_defined_pragmas id26201476
+ Ref: a8201476
+ Ref: gnat_rm/implementation_defined_pragmas pragma-no-tagged-streams201476
+ Ref: a9201476
+ Node: Pragma Normalize_Scalars203251
+ Ref: gnat_rm/implementation_defined_pragmas pragma-normalize-scalars203403
+ Ref: aa203403
+ Node: Pragma Obsolescent206373
+ Ref: gnat_rm/implementation_defined_pragmas id27206526
+ Ref: ab206526
+ Ref: gnat_rm/implementation_defined_pragmas pragma-obsolescent206526
+ Ref: ac206526
+ Node: Pragma Optimize_Alignment209981
+ Ref: gnat_rm/implementation_defined_pragmas pragma-optimize-alignment210124
+ Ref: ad210124
+ Node: Pragma Ordered213635
+ Ref: gnat_rm/implementation_defined_pragmas pragma-ordered213780
+ Ref: ae213780
+ Node: Pragma Overflow_Mode216900
+ Ref: gnat_rm/implementation_defined_pragmas pragma-overflow-mode217047
+ Ref: af217047
+ Node: Pragma Overriding_Renamings218385
+ Ref: gnat_rm/implementation_defined_pragmas pragma-overriding-renamings218532
+ Ref: b0218532
+ Node: Pragma Part_Of219194
+ Ref: gnat_rm/implementation_defined_pragmas id28219356
+ Ref: b1219356
+ Ref: gnat_rm/implementation_defined_pragmas pragma-part-of219356
+ Ref: b2219356
+ Node: Pragma Partition_Elaboration_Policy219602
+ Ref: gnat_rm/implementation_defined_pragmas pragma-partition-elaboration-policy219751
+ Ref: b3219751
+ Node: Pragma Passive220127
+ Ref: gnat_rm/implementation_defined_pragmas pragma-passive220283
+ Ref: b4220283
+ Node: Pragma Persistent_BSS221141
+ Ref: gnat_rm/implementation_defined_pragmas id29221273
+ Ref: b5221273
+ Ref: gnat_rm/implementation_defined_pragmas pragma-persistent-bss221273
+ Ref: b6221273
+ Node: Pragma Post222469
+ Ref: gnat_rm/implementation_defined_pragmas pragma-post222607
+ Ref: b7222607
+ Node: Pragma Postcondition223122
+ Ref: gnat_rm/implementation_defined_pragmas pragma-postcondition223256
+ Ref: b8223256
+ Node: Pragma Post_Class229004
+ Ref: gnat_rm/implementation_defined_pragmas pragma-post-class229137
+ Ref: b9229137
+ Node: Pragma Pre230194
+ Ref: gnat_rm/implementation_defined_pragmas pragma-pre230326
+ Ref: ba230326
+ Node: Pragma Precondition230836
+ Ref: gnat_rm/implementation_defined_pragmas pragma-precondition230967
+ Ref: bb230967
+ Node: Pragma Predicate232914
+ Ref: gnat_rm/implementation_defined_pragmas id30233059
+ Ref: bc233059
+ Ref: gnat_rm/implementation_defined_pragmas pragma-predicate233059
+ Ref: bd233059
+ Node: Pragma Predicate_Failure234815
+ Ref: gnat_rm/implementation_defined_pragmas pragma-predicate-failure234976
+ Ref: be234976
+ Node: Pragma Preelaborable_Initialization235333
+ Ref: gnat_rm/implementation_defined_pragmas pragma-preelaborable-initialization235510
+ Ref: bf235510
+ Node: Pragma Prefix_Exception_Messages235828
+ Ref: gnat_rm/implementation_defined_pragmas pragma-prefix-exception-messages235997
+ Ref: c0235997
+ Node: Pragma Pre_Class236918
+ Ref: gnat_rm/implementation_defined_pragmas pragma-pre-class237088
+ Ref: c1237088
+ Node: Pragma Priority_Specific_Dispatching238136
+ Ref: gnat_rm/implementation_defined_pragmas pragma-priority-specific-dispatching238288
+ Ref: c2238288
+ Node: Pragma Profile238887
+ Ref: gnat_rm/implementation_defined_pragmas pragma-profile239046
+ Ref: c3239046
+ Node: Pragma Profile_Warnings245983
+ Ref: gnat_rm/implementation_defined_pragmas pragma-profile-warnings246133
+ Ref: c4246133
+ Node: Pragma Propagate_Exceptions246572
+ Ref: gnat_rm/implementation_defined_pragmas pragma-propagate-exceptions246738
+ Ref: c5246738
+ Node: Pragma Provide_Shift_Operators247136
+ Ref: gnat_rm/implementation_defined_pragmas pragma-provide-shift-operators247298
+ Ref: c6247298
+ Node: Pragma Psect_Object247861
+ Ref: gnat_rm/implementation_defined_pragmas pragma-psect-object248016
+ Ref: c7248016
+ Node: Pragma Pure_Function248369
+ Ref: gnat_rm/implementation_defined_pragmas id31248509
+ Ref: c8248509
+ Ref: gnat_rm/implementation_defined_pragmas pragma-pure-function248509
+ Ref: c9248509
+ Node: Pragma Rational251555
+ Ref: gnat_rm/implementation_defined_pragmas pragma-rational251692
+ Ref: ca251692
+ Node: Pragma Ravenscar251908
+ Ref: gnat_rm/implementation_defined_pragmas pragma-ravenscar252047
+ Ref: cb252047
+ Node: Pragma Refined_Depends252338
+ Ref: gnat_rm/implementation_defined_pragmas id32252483
+ Ref: cc252483
+ Ref: gnat_rm/implementation_defined_pragmas pragma-refined-depends252483
+ Ref: cd252483
+ Node: Pragma Refined_Global253217
+ Ref: gnat_rm/implementation_defined_pragmas id33253365
+ Ref: ce253365
+ Ref: gnat_rm/implementation_defined_pragmas pragma-refined-global253365
+ Ref: cf253365
+ Node: Pragma Refined_Post253946
+ Ref: gnat_rm/implementation_defined_pragmas id34254092
+ Ref: d0254092
+ Ref: gnat_rm/implementation_defined_pragmas pragma-refined-post254092
+ Ref: d1254092
+ Node: Pragma Refined_State254332
+ Ref: gnat_rm/implementation_defined_pragmas id35254481
+ Ref: d2254481
+ Ref: gnat_rm/implementation_defined_pragmas pragma-refined-state254481
+ Ref: d3254481
+ Node: Pragma Relative_Deadline255006
+ Ref: gnat_rm/implementation_defined_pragmas pragma-relative-deadline255161
+ Ref: d4255161
+ Node: Pragma Remote_Access_Type255455
+ Ref: gnat_rm/implementation_defined_pragmas id36255610
+ Ref: d5255610
+ Ref: gnat_rm/implementation_defined_pragmas pragma-remote-access-type255610
+ Ref: d6255610
+ Node: Pragma Rename_Pragma256488
+ Ref: gnat_rm/implementation_defined_pragmas pragma-rename-pragma256645
+ Ref: d7256645
+ Node: Pragma Restricted_Run_Time257808
+ Ref: gnat_rm/implementation_defined_pragmas pragma-restricted-run-time257967
+ Ref: d8257967
+ Node: Pragma Restriction_Warnings258293
+ Ref: gnat_rm/implementation_defined_pragmas pragma-restriction-warnings258449
+ Ref: d9258449
+ Node: Pragma Reviewable259737
+ Ref: gnat_rm/implementation_defined_pragmas pragma-reviewable259894
+ Ref: da259894
+ Node: Pragma Secondary_Stack_Size262490
+ Ref: gnat_rm/implementation_defined_pragmas id37262640
+ Ref: db262640
+ Ref: gnat_rm/implementation_defined_pragmas pragma-secondary-stack-size262640
+ Ref: dc262640
+ Node: Pragma Share_Generic264116
+ Ref: gnat_rm/implementation_defined_pragmas pragma-share-generic264262
+ Ref: dd264262
+ Node: Pragma Shared264654
+ Ref: gnat_rm/implementation_defined_pragmas id38264800
+ Ref: de264800
+ Ref: gnat_rm/implementation_defined_pragmas pragma-shared264800
+ Ref: df264800
+ Node: Pragma Short_Circuit_And_Or264955
+ Ref: gnat_rm/implementation_defined_pragmas pragma-short-circuit-and-or265105
+ Ref: e0265105
+ Node: Pragma Short_Descriptors265759
+ Ref: gnat_rm/implementation_defined_pragmas pragma-short-descriptors265927
+ Ref: e1265927
+ Node: Pragma Simple_Storage_Pool_Type266169
+ Ref: gnat_rm/implementation_defined_pragmas id39266333
+ Ref: e2266333
+ Ref: gnat_rm/implementation_defined_pragmas pragma-simple-storage-pool-type266333
+ Ref: e3266333
+ Node: Pragma Source_File_Name268623
+ Ref: gnat_rm/implementation_defined_pragmas id40268794
+ Ref: e5268794
+ Ref: gnat_rm/implementation_defined_pragmas pragma-source-file-name268794
+ Ref: e6268794
+ Node: Pragma Source_File_Name_Project272269
+ Ref: gnat_rm/implementation_defined_pragmas id41272432
+ Ref: e8272432
+ Ref: gnat_rm/implementation_defined_pragmas pragma-source-file-name-project272432
+ Ref: e7272432
+ Node: Pragma Source_Reference273207
+ Ref: gnat_rm/implementation_defined_pragmas pragma-source-reference273364
+ Ref: e9273364
+ Node: Pragma SPARK_Mode274209
+ Ref: gnat_rm/implementation_defined_pragmas id42274368
+ Ref: ea274368
+ Ref: gnat_rm/implementation_defined_pragmas pragma-spark-mode274368
+ Ref: eb274368
+ Node: Pragma Static_Elaboration_Desired276385
+ Ref: gnat_rm/implementation_defined_pragmas pragma-static-elaboration-desired276542
+ Ref: ec276542
+ Node: Pragma Stream_Convert277552
+ Ref: gnat_rm/implementation_defined_pragmas pragma-stream-convert277711
+ Ref: ed277711
+ Node: Pragma Style_Checks280880
+ Ref: gnat_rm/implementation_defined_pragmas pragma-style-checks281021
+ Ref: ee281021
+ Node: Pragma Subtitle283361
+ Ref: gnat_rm/implementation_defined_pragmas pragma-subtitle283496
+ Ref: ef283496
+ Node: Pragma Suppress283698
+ Ref: gnat_rm/implementation_defined_pragmas pragma-suppress283833
+ Ref: f0283833
+ Node: Pragma Suppress_All286704
+ Ref: gnat_rm/implementation_defined_pragmas pragma-suppress-all286850
+ Ref: f1286850
+ Node: Pragma Suppress_Debug_Info287392
+ Ref: gnat_rm/implementation_defined_pragmas id43287558
+ Ref: f2287558
+ Ref: gnat_rm/implementation_defined_pragmas pragma-suppress-debug-info287558
+ Ref: f3287558
+ Node: Pragma Suppress_Exception_Locations287890
+ Ref: gnat_rm/implementation_defined_pragmas pragma-suppress-exception-locations288067
+ Ref: f4288067
+ Node: Pragma Suppress_Initialization288998
+ Ref: gnat_rm/implementation_defined_pragmas id44289165
+ Ref: f5289165
+ Ref: gnat_rm/implementation_defined_pragmas pragma-suppress-initialization289165
+ Ref: f6289165
+ Node: Pragma Task_Name290729
+ Ref: gnat_rm/implementation_defined_pragmas pragma-task-name290880
+ Ref: f7290880
+ Node: Pragma Task_Storage292459
+ Ref: gnat_rm/implementation_defined_pragmas pragma-task-storage292596
+ Ref: f8292596
+ Node: Pragma Test_Case293131
+ Ref: gnat_rm/implementation_defined_pragmas id45293279
+ Ref: f9293279
+ Ref: gnat_rm/implementation_defined_pragmas pragma-test-case293279
+ Ref: fa293279
+ Node: Pragma Thread_Local_Storage295373
+ Ref: gnat_rm/implementation_defined_pragmas id46295519
+ Ref: fb295519
+ Ref: gnat_rm/implementation_defined_pragmas pragma-thread-local-storage295519
+ Ref: fc295519
+ Node: Pragma Time_Slice296732
+ Ref: gnat_rm/implementation_defined_pragmas pragma-time-slice296874
+ Ref: fd296874
+ Node: Pragma Title297258
+ Ref: gnat_rm/implementation_defined_pragmas pragma-title297394
+ Ref: fe297394
+ Node: Pragma Type_Invariant298111
+ Ref: gnat_rm/implementation_defined_pragmas pragma-type-invariant298257
+ Ref: ff298257
+ Node: Pragma Type_Invariant_Class298797
+ Ref: gnat_rm/implementation_defined_pragmas id47298953
+ Ref: 100298953
+ Ref: gnat_rm/implementation_defined_pragmas pragma-type-invariant-class298953
+ Ref: 101298953
+ Node: Pragma Unchecked_Union299868
+ Ref: gnat_rm/implementation_defined_pragmas pragma-unchecked-union300032
+ Ref: 102300032
+ Node: Pragma Unevaluated_Use_Of_Old300598
+ Ref: gnat_rm/implementation_defined_pragmas pragma-unevaluated-use-of-old300760
+ Ref: 103300760
+ Node: Pragma Unimplemented_Unit302687
+ Ref: gnat_rm/implementation_defined_pragmas pragma-unimplemented-unit302852
+ Ref: 104302852
+ Node: Pragma Universal_Aliasing303387
+ Ref: gnat_rm/implementation_defined_pragmas id48303540
+ Ref: 105303540
+ Ref: gnat_rm/implementation_defined_pragmas pragma-universal-aliasing303540
+ Ref: 106303540
+ Node: Pragma Unmodified304181
+ Ref: gnat_rm/implementation_defined_pragmas id49304328
+ Ref: 107304328
+ Ref: gnat_rm/implementation_defined_pragmas pragma-unmodified304328
+ Ref: 108304328
+ Node: Pragma Unreferenced305406
+ Ref: gnat_rm/implementation_defined_pragmas id50305555
+ Ref: 109305555
+ Ref: gnat_rm/implementation_defined_pragmas pragma-unreferenced305555
+ Ref: 10a305555
+ Node: Pragma Unreferenced_Objects308233
+ Ref: gnat_rm/implementation_defined_pragmas id51308396
+ Ref: 10b308396
+ Ref: gnat_rm/implementation_defined_pragmas pragma-unreferenced-objects308396
+ Ref: 10c308396
+ Node: Pragma Unreserve_All_Interrupts309173
+ Ref: gnat_rm/implementation_defined_pragmas pragma-unreserve-all-interrupts309334
+ Ref: 10d309334
+ Node: Pragma Unsuppress310839
+ Ref: gnat_rm/implementation_defined_pragmas pragma-unsuppress310986
+ Ref: 10e310986
+ Node: Pragma Unused312256
+ Ref: gnat_rm/implementation_defined_pragmas id52312392
+ Ref: 10f312392
+ Ref: gnat_rm/implementation_defined_pragmas pragma-unused312392
+ Ref: 110312392
+ Node: Pragma Use_VADS_Size313568
+ Ref: gnat_rm/implementation_defined_pragmas pragma-use-vads-size313709
+ Ref: 111313709
+ Node: Pragma Validity_Checks314270
+ Ref: gnat_rm/implementation_defined_pragmas pragma-validity-checks314413
+ Ref: 112314413
+ Node: Pragma Volatile316184
+ Ref: gnat_rm/implementation_defined_pragmas id53316334
+ Ref: 113316334
+ Ref: gnat_rm/implementation_defined_pragmas pragma-volatile316334
+ Ref: 114316334
+ Node: Pragma Volatile_Full_Access316804
+ Ref: gnat_rm/implementation_defined_pragmas id54316956
+ Ref: 115316956
+ Ref: gnat_rm/implementation_defined_pragmas pragma-volatile-full-access316956
+ Ref: 116316956
+ Node: Pragma Volatile_Function318024
+ Ref: gnat_rm/implementation_defined_pragmas id55318184
+ Ref: 117318184
+ Ref: gnat_rm/implementation_defined_pragmas pragma-volatile-function318184
+ Ref: 118318184
+ Node: Pragma Warning_As_Error318455
+ Ref: gnat_rm/implementation_defined_pragmas pragma-warning-as-error318603
+ Ref: 119318603
+ Node: Pragma Warnings321975
+ Ref: gnat_rm/implementation_defined_pragmas id56322119
+ Ref: 11b322119
+ Ref: gnat_rm/implementation_defined_pragmas pragma-warnings322119
+ Ref: 11a322119
+ Node: Pragma Weak_External329586
+ Ref: gnat_rm/implementation_defined_pragmas pragma-weak-external329737
+ Ref: 11c329737
+ Node: Pragma Wide_Character_Encoding331418
+ Ref: gnat_rm/implementation_defined_pragmas pragma-wide-character-encoding331545
+ Ref: 11d331545
+ Node: Implementation Defined Aspects332677
+ Ref: gnat_rm/implementation_defined_aspects doc332829
+ Ref: 11e332829
+ Ref: gnat_rm/implementation_defined_aspects id1332829
+ Ref: 11f332829
+ Ref: gnat_rm/implementation_defined_aspects implementation-defined-aspects332829
+ Ref: 120332829
+ Node: Aspect Abstract_State336045
+ Ref: gnat_rm/implementation_defined_aspects aspect-abstract-state336158
+ Ref: 121336158
+ Node: Aspect Annotate336274
+ Ref: gnat_rm/implementation_defined_aspects aspect-annotate336416
+ Ref: 122336416
+ Node: Aspect Async_Readers336887
+ Ref: gnat_rm/implementation_defined_aspects aspect-async-readers337028
+ Ref: 123337028
+ Node: Aspect Async_Writers337149
+ Ref: gnat_rm/implementation_defined_aspects aspect-async-writers337308
+ Ref: 124337308
+ Node: Aspect Constant_After_Elaboration337429
+ Ref: gnat_rm/implementation_defined_aspects aspect-constant-after-elaboration337589
+ Ref: 125337589
+ Node: Aspect Contract_Cases337741
+ Ref: gnat_rm/implementation_defined_aspects aspect-contract-cases337895
+ Ref: 126337895
+ Node: Aspect Depends338107
+ Ref: gnat_rm/implementation_defined_aspects aspect-depends338260
+ Ref: 127338260
+ Node: Aspect Default_Initial_Condition338355
+ Ref: gnat_rm/implementation_defined_aspects aspect-default-initial-condition338503
+ Ref: 128338503
+ Node: Aspect Dimension338652
+ Ref: gnat_rm/implementation_defined_aspects aspect-dimension338809
+ Ref: 129338809
+ Node: Aspect Dimension_System340029
+ Ref: gnat_rm/implementation_defined_aspects aspect-dimension-system340179
+ Ref: 12a340179
+ Node: Aspect Disable_Controlled342729
+ Ref: gnat_rm/implementation_defined_aspects aspect-disable-controlled342885
+ Ref: 12b342885
+ Node: Aspect Effective_Reads343326
+ Ref: gnat_rm/implementation_defined_aspects aspect-effective-reads343482
+ Ref: 12c343482
+ Node: Aspect Effective_Writes343603
+ Ref: gnat_rm/implementation_defined_aspects aspect-effective-writes343759
+ Ref: 12d343759
+ Node: Aspect Extensions_Visible343883
+ Ref: gnat_rm/implementation_defined_aspects aspect-extensions-visible344039
+ Ref: 12e344039
+ Node: Aspect Favor_Top_Level344169
+ Ref: gnat_rm/implementation_defined_aspects aspect-favor-top-level344314
+ Ref: 12f344314
+ Node: Aspect Ghost344443
+ Ref: gnat_rm/implementation_defined_aspects aspect-ghost344576
+ Ref: 130344576
+ Node: Aspect Global344667
+ Ref: gnat_rm/implementation_defined_aspects aspect-global344802
+ Ref: 131344802
+ Node: Aspect Initial_Condition344896
+ Ref: gnat_rm/implementation_defined_aspects aspect-initial-condition345037
+ Ref: 132345037
+ Node: Aspect Initializes345164
+ Ref: gnat_rm/implementation_defined_aspects aspect-initializes345312
+ Ref: 133345312
+ Node: Aspect Inline_Always345421
+ Ref: gnat_rm/implementation_defined_aspects aspect-inline-always345561
+ Ref: 134345561
+ Node: Aspect Invariant345684
+ Ref: gnat_rm/implementation_defined_aspects aspect-invariant345830
+ Ref: 135345830
+ Node: Aspect Invariant’Class346082
+ Ref: gnat_rm/implementation_defined_aspects aspect-invariant-class346223
+ Ref: 136346223
+ Node: Aspect Iterable346507
+ Ref: gnat_rm/implementation_defined_aspects aspect-iterable346653
+ Ref: 137346653
+ Node: Aspect Linker_Section349260
+ Ref: gnat_rm/implementation_defined_aspects aspect-linker-section349398
+ Ref: 138349398
+ Node: Aspect Lock_Free349516
+ Ref: gnat_rm/implementation_defined_aspects aspect-lock-free349662
+ Ref: 139349662
+ Node: Aspect Max_Queue_Length349773
+ Ref: gnat_rm/implementation_defined_aspects aspect-max-queue-length349915
+ Ref: 13a349915
+ Node: Aspect No_Caching350039
+ Ref: gnat_rm/implementation_defined_aspects aspect-no-caching350195
+ Ref: 13b350195
+ Node: Aspect No_Elaboration_Code_All350309
+ Ref: gnat_rm/implementation_defined_aspects aspect-no-elaboration-code-all350458
+ Ref: 13c350458
+ Node: Aspect No_Inline350623
+ Ref: gnat_rm/implementation_defined_aspects aspect-no-inline350779
+ Ref: 13d350779
+ Node: Aspect No_Tagged_Streams350890
+ Ref: gnat_rm/implementation_defined_aspects aspect-no-tagged-streams351036
+ Ref: 13e351036
+ Node: Aspect No_Task_Parts351265
+ Ref: gnat_rm/implementation_defined_aspects aspect-no-task-parts351413
+ Ref: 13f351413
+ Node: Aspect Object_Size351919
+ Ref: gnat_rm/implementation_defined_aspects aspect-object-size352061
+ Ref: 140352061
+ Node: Aspect Obsolescent352174
+ Ref: gnat_rm/implementation_defined_aspects aspect-obsolescent352310
+ Ref: 142352310
+ Node: Aspect Part_Of352538
+ Ref: gnat_rm/implementation_defined_aspects aspect-part-of352677
+ Ref: 143352677
+ Node: Aspect Persistent_BSS352774
+ Ref: gnat_rm/implementation_defined_aspects aspect-persistent-bss352911
+ Ref: 144352911
+ Node: Aspect Predicate353037
+ Ref: gnat_rm/implementation_defined_aspects aspect-predicate353180
+ Ref: 145353180
+ Node: Aspect Pure_Function353569
+ Ref: gnat_rm/implementation_defined_aspects aspect-pure-function353713
+ Ref: 146353713
+ Node: Aspect Refined_Depends353836
+ Ref: gnat_rm/implementation_defined_aspects aspect-refined-depends353985
+ Ref: 147353985
+ Node: Aspect Refined_Global354106
+ Ref: gnat_rm/implementation_defined_aspects aspect-refined-global354254
+ Ref: 148354254
+ Node: Aspect Refined_Post354372
+ Ref: gnat_rm/implementation_defined_aspects aspect-refined-post354518
+ Ref: 149354518
+ Node: Aspect Refined_State354630
+ Ref: gnat_rm/implementation_defined_aspects aspect-refined-state354784
+ Ref: 14a354784
+ Node: Aspect Relaxed_Initialization354899
+ Ref: gnat_rm/implementation_defined_aspects aspect-relaxed-initialization355059
+ Ref: 14b355059
+ Node: Aspect Remote_Access_Type355227
+ Ref: gnat_rm/implementation_defined_aspects aspect-remote-access-type355394
+ Ref: 14c355394
+ Node: Aspect Secondary_Stack_Size355524
+ Ref: gnat_rm/implementation_defined_aspects aspect-secondary-stack-size355689
+ Ref: 14d355689
+ Node: Aspect Scalar_Storage_Order355825
+ Ref: gnat_rm/implementation_defined_aspects aspect-scalar-storage-order355978
+ Ref: 14e355978
+ Node: Aspect Shared356120
+ Ref: gnat_rm/implementation_defined_aspects aspect-shared356272
+ Ref: 150356272
+ Node: Aspect Simple_Storage_Pool356421
+ Ref: gnat_rm/implementation_defined_aspects aspect-simple-storage-pool356577
+ Ref: 151356577
+ Node: Aspect Simple_Storage_Pool_Type356713
+ Ref: gnat_rm/implementation_defined_aspects aspect-simple-storage-pool-type356873
+ Ref: 152356873
+ Node: Aspect SPARK_Mode357029
+ Ref: gnat_rm/implementation_defined_aspects aspect-spark-mode357189
+ Ref: 153357189
+ Node: Aspect Suppress_Debug_Info357393
+ Ref: gnat_rm/implementation_defined_aspects aspect-suppress-debug-info357552
+ Ref: 154357552
+ Node: Aspect Suppress_Initialization357693
+ Ref: gnat_rm/implementation_defined_aspects aspect-suppress-initialization357851
+ Ref: 155357851
+ Node: Aspect Test_Case358004
+ Ref: gnat_rm/implementation_defined_aspects aspect-test-case358163
+ Ref: 156358163
+ Node: Aspect Thread_Local_Storage358266
+ Ref: gnat_rm/implementation_defined_aspects aspect-thread-local-storage358420
+ Ref: 157358420
+ Node: Aspect Universal_Aliasing358564
+ Ref: gnat_rm/implementation_defined_aspects aspect-universal-aliasing358719
+ Ref: 158358719
+ Node: Aspect Unmodified358858
+ Ref: gnat_rm/implementation_defined_aspects aspect-unmodified359005
+ Ref: 159359005
+ Node: Aspect Unreferenced359120
+ Ref: gnat_rm/implementation_defined_aspects aspect-unreferenced359269
+ Ref: 15a359269
+ Node: Aspect Unreferenced_Objects359554
+ Ref: gnat_rm/implementation_defined_aspects aspect-unreferenced-objects359703
+ Ref: 15b359703
+ Node: Aspect Value_Size359848
+ Ref: gnat_rm/implementation_defined_aspects aspect-value-size360005
+ Ref: 15c360005
+ Node: Aspect Volatile_Full_Access360115
+ Ref: gnat_rm/implementation_defined_aspects aspect-volatile-full-access360269
+ Ref: 15e360269
+ Node: Aspect Volatile_Function360414
+ Ref: gnat_rm/implementation_defined_aspects aspect-volatile-function360566
+ Ref: 15f360566
+ Node: Aspect Warnings360702
+ Ref: gnat_rm/implementation_defined_aspects aspect-warnings360818
+ Ref: 160360818
+ Node: Implementation Defined Attributes361033
+ Ref: gnat_rm/implementation_defined_attributes doc361203
+ Ref: 161361203
+ Ref: gnat_rm/implementation_defined_attributes id1361203
+ Ref: 162361203
+ Ref: gnat_rm/implementation_defined_attributes implementation-defined-attributes361203
+ Ref: 8361203
+ Node: Attribute Abort_Signal364395
+ Ref: gnat_rm/implementation_defined_attributes attribute-abort-signal364519
+ Ref: 163364519
+ Node: Attribute Address_Size364954
+ Ref: gnat_rm/implementation_defined_attributes attribute-address-size365106
+ Ref: 164365106
+ Node: Attribute Asm_Input365487
+ Ref: gnat_rm/implementation_defined_attributes attribute-asm-input365637
+ Ref: 165365637
+ Node: Attribute Asm_Output366262
+ Ref: gnat_rm/implementation_defined_attributes attribute-asm-output366423
+ Ref: 167366423
+ Node: Attribute Atomic_Always_Lock_Free367199
+ Ref: gnat_rm/implementation_defined_attributes attribute-atomic-always-lock-free367354
+ Ref: 168367354
+ Node: Attribute Bit367693
+ Ref: gnat_rm/implementation_defined_attributes attribute-bit367850
+ Ref: 169367850
+ Node: Attribute Bit_Position368935
+ Ref: gnat_rm/implementation_defined_attributes attribute-bit-position369081
+ Ref: 16a369081
+ Node: Attribute Code_Address369531
+ Ref: gnat_rm/implementation_defined_attributes attribute-code-address369690
+ Ref: 16b369690
+ Node: Attribute Compiler_Version371024
+ Ref: gnat_rm/implementation_defined_attributes attribute-compiler-version371182
+ Ref: 16c371182
+ Node: Attribute Constrained371452
+ Ref: gnat_rm/implementation_defined_attributes attribute-constrained371615
+ Ref: 16d371615
+ Node: Attribute Default_Bit_Order372089
+ Ref: gnat_rm/implementation_defined_attributes attribute-default-bit-order372264
+ Ref: 16e372264
+ Node: Attribute Default_Scalar_Storage_Order372636
+ Ref: gnat_rm/implementation_defined_attributes attribute-default-scalar-storage-order372805
+ Ref: 16f372805
+ Node: Attribute Deref373226
+ Ref: gnat_rm/implementation_defined_attributes attribute-deref373393
+ Ref: 170373393
+ Node: Attribute Descriptor_Size373823
+ Ref: gnat_rm/implementation_defined_attributes attribute-descriptor-size373972
+ Ref: 171373972
+ Node: Attribute Elaborated374974
+ Ref: gnat_rm/implementation_defined_attributes attribute-elaborated375127
+ Ref: 172375127
+ Node: Attribute Elab_Body375669
+ Ref: gnat_rm/implementation_defined_attributes attribute-elab-body375816
+ Ref: 173375816
+ Node: Attribute Elab_Spec376366
+ Ref: gnat_rm/implementation_defined_attributes attribute-elab-spec376517
+ Ref: 174376517
+ Node: Attribute Elab_Subp_Body377067
+ Ref: gnat_rm/implementation_defined_attributes attribute-elab-subp-body377213
+ Ref: 175377213
+ Node: Attribute Emax377635
+ Ref: gnat_rm/implementation_defined_attributes attribute-emax377779
+ Ref: 176377779
+ Node: Attribute Enabled377983
+ Ref: gnat_rm/implementation_defined_attributes attribute-enabled378121
+ Ref: 177378121
+ Node: Attribute Enum_Rep379243
+ Ref: gnat_rm/implementation_defined_attributes attribute-enum-rep379385
+ Ref: 178379385
+ Node: Attribute Enum_Val380878
+ Ref: gnat_rm/implementation_defined_attributes attribute-enum-val381020
+ Ref: 179381020
+ Node: Attribute Epsilon381746
+ Ref: gnat_rm/implementation_defined_attributes attribute-epsilon381889
+ Ref: 17a381889
+ Node: Attribute Fast_Math382102
+ Ref: gnat_rm/implementation_defined_attributes attribute-fast-math382254
+ Ref: 17b382254
+ Node: Attribute Finalization_Size382476
+ Ref: gnat_rm/implementation_defined_attributes attribute-finalization-size382632
+ Ref: 17c382632
+ Node: Attribute Fixed_Value383246
+ Ref: gnat_rm/implementation_defined_attributes attribute-fixed-value383401
+ Ref: 17d383401
+ Node: Attribute From_Any384103
+ Ref: gnat_rm/implementation_defined_attributes attribute-from-any384258
+ Ref: 17e384258
+ Node: Attribute Has_Access_Values384435
+ Ref: gnat_rm/implementation_defined_attributes attribute-has-access-values384596
+ Ref: 17f384596
+ Node: Attribute Has_Discriminants385122
+ Ref: gnat_rm/implementation_defined_attributes attribute-has-discriminants385292
+ Ref: 180385292
+ Node: Attribute Has_Tagged_Values385733
+ Ref: gnat_rm/implementation_defined_attributes attribute-has-tagged-values385889
+ Ref: 181385889
+ Node: Attribute Img386419
+ Ref: gnat_rm/implementation_defined_attributes attribute-img386569
+ Ref: 182386569
+ Node: Attribute Initialized387236
+ Ref: gnat_rm/implementation_defined_attributes attribute-initialized387382
+ Ref: 183387382
+ Node: Attribute Integer_Value387537
+ Ref: gnat_rm/implementation_defined_attributes attribute-integer-value387693
+ Ref: 184387693
+ Node: Attribute Invalid_Value388457
+ Ref: gnat_rm/implementation_defined_attributes attribute-invalid-value388610
+ Ref: 185388610
+ Node: Attribute Iterable389084
+ Ref: gnat_rm/implementation_defined_attributes attribute-iterable389229
+ Ref: 186389229
+ Node: Attribute Large389310
+ Ref: gnat_rm/implementation_defined_attributes attribute-large389455
+ Ref: 187389455
+ Node: Attribute Library_Level389662
+ Ref: gnat_rm/implementation_defined_attributes attribute-library-level389809
+ Ref: 188389809
+ Node: Attribute Loop_Entry390445
+ Ref: gnat_rm/implementation_defined_attributes attribute-loop-entry390599
+ Ref: 189390599
+ Node: Attribute Machine_Size391845
+ Ref: gnat_rm/implementation_defined_attributes attribute-machine-size391994
+ Ref: 18a391994
+ Node: Attribute Mantissa392194
+ Ref: gnat_rm/implementation_defined_attributes attribute-mantissa392350
+ Ref: 18b392350
+ Node: Attribute Maximum_Alignment392566
+ Ref: gnat_rm/implementation_defined_attributes attribute-maximum-alignment392726
+ Ref: 18c392726
+ Ref: gnat_rm/implementation_defined_attributes id2392726
+ Ref: 18d392726
+ Node: Attribute Max_Integer_Size393067
+ Ref: gnat_rm/implementation_defined_attributes attribute-max-integer-size393233
+ Ref: 18e393233
+ Node: Attribute Mechanism_Code393480
+ Ref: gnat_rm/implementation_defined_attributes attribute-mechanism-code393643
+ Ref: 18f393643
+ Node: Attribute Null_Parameter394087
+ Ref: gnat_rm/implementation_defined_attributes attribute-null-parameter394245
+ Ref: 190394245
+ Node: Attribute Object_Size394970
+ Ref: gnat_rm/implementation_defined_attributes attribute-object-size395117
+ Ref: 141395117
+ Ref: gnat_rm/implementation_defined_attributes id3395117
+ Ref: 191395117
+ Node: Attribute Old397349
+ Ref: gnat_rm/implementation_defined_attributes attribute-old397501
+ Ref: 192397501
+ Node: Attribute Passed_By_Reference397959
+ Ref: gnat_rm/implementation_defined_attributes attribute-passed-by-reference398112
+ Ref: 193398112
+ Node: Attribute Pool_Address398526
+ Ref: gnat_rm/implementation_defined_attributes attribute-pool-address398688
+ Ref: 194398688
+ Node: Attribute Range_Length399444
+ Ref: gnat_rm/implementation_defined_attributes attribute-range-length399602
+ Ref: 195399602
+ Node: Attribute Restriction_Set399988
+ Ref: gnat_rm/implementation_defined_attributes attribute-restriction-set400140
+ Ref: 196400140
+ Node: Attribute Result402614
+ Ref: gnat_rm/implementation_defined_attributes attribute-result402763
+ Ref: 197402763
+ Node: Attribute Safe_Emax403165
+ Ref: gnat_rm/implementation_defined_attributes attribute-safe-emax403309
+ Ref: 198403309
+ Node: Attribute Safe_Large403527
+ Ref: gnat_rm/implementation_defined_attributes attribute-safe-large403675
+ Ref: 199403675
+ Node: Attribute Safe_Small403896
+ Ref: gnat_rm/implementation_defined_attributes attribute-safe-small404055
+ Ref: 19a404055
+ Node: Attribute Scalar_Storage_Order404276
+ Ref: gnat_rm/implementation_defined_attributes attribute-scalar-storage-order404444
+ Ref: 14f404444
+ Ref: gnat_rm/implementation_defined_attributes id4404444
+ Ref: 19b404444
+ Node: Attribute Simple_Storage_Pool410268
+ Ref: gnat_rm/implementation_defined_attributes attribute-simple-storage-pool410431
+ Ref: e4410431
+ Ref: gnat_rm/implementation_defined_attributes id5410431
+ Ref: 19c410431
+ Node: Attribute Small413064
+ Ref: gnat_rm/implementation_defined_attributes attribute-small413224
+ Ref: 19d413224
+ Node: Attribute Small_Denominator413591
+ Ref: gnat_rm/implementation_defined_attributes attribute-small-denominator413747
+ Ref: 19e413747
+ Node: Attribute Small_Numerator414023
+ Ref: gnat_rm/implementation_defined_attributes attribute-small-numerator414186
+ Ref: 19f414186
+ Node: Attribute Storage_Unit414454
+ Ref: gnat_rm/implementation_defined_attributes attribute-storage-unit414609
+ Ref: 1a0414609
+ Node: Attribute Stub_Type414793
+ Ref: gnat_rm/implementation_defined_attributes attribute-stub-type414959
+ Ref: 1a1414959
+ Node: Attribute System_Allocator_Alignment415914
+ Ref: gnat_rm/implementation_defined_attributes attribute-system-allocator-alignment416079
+ Ref: 1a2416079
+ Node: Attribute Target_Name416555
+ Ref: gnat_rm/implementation_defined_attributes attribute-target-name416721
+ Ref: 1a3416721
+ Node: Attribute To_Address417096
+ Ref: gnat_rm/implementation_defined_attributes attribute-to-address417242
+ Ref: 1a4417242
+ Node: Attribute To_Any418065
+ Ref: gnat_rm/implementation_defined_attributes attribute-to-any418210
+ Ref: 1a5418210
+ Node: Attribute Type_Class418383
+ Ref: gnat_rm/implementation_defined_attributes attribute-type-class418526
+ Ref: 1a6418526
+ Node: Attribute Type_Key419391
+ Ref: gnat_rm/implementation_defined_attributes attribute-type-key419536
+ Ref: 1a7419536
+ Node: Attribute TypeCode419845
+ Ref: gnat_rm/implementation_defined_attributes attribute-typecode419999
+ Ref: 1a8419999
+ Node: Attribute Unconstrained_Array420176
+ Ref: gnat_rm/implementation_defined_attributes attribute-unconstrained-array420346
+ Ref: 1a9420346
+ Node: Attribute Universal_Literal_String420762
+ Ref: gnat_rm/implementation_defined_attributes attribute-universal-literal-string420943
+ Ref: 1aa420943
+ Node: Attribute Unrestricted_Access421635
+ Ref: gnat_rm/implementation_defined_attributes attribute-unrestricted-access421803
+ Ref: 1ab421803
+ Node: Attribute Update428123
+ Ref: gnat_rm/implementation_defined_attributes attribute-update428278
+ Ref: 1ac428278
+ Node: Attribute Valid_Value431109
+ Ref: gnat_rm/implementation_defined_attributes attribute-valid-value431258
+ Ref: 1ad431258
+ Node: Attribute Valid_Scalars431595
+ Ref: gnat_rm/implementation_defined_attributes attribute-valid-scalars431747
+ Ref: 1ae431747
+ Node: Attribute VADS_Size433405
+ Ref: gnat_rm/implementation_defined_attributes attribute-vads-size433556
+ Ref: 1af433556
+ Node: Attribute Value_Size434197
+ Ref: gnat_rm/implementation_defined_attributes attribute-value-size434347
+ Ref: 15d434347
+ Ref: gnat_rm/implementation_defined_attributes id6434347
+ Ref: 1b0434347
+ Node: Attribute Wchar_T_Size434592
+ Ref: gnat_rm/implementation_defined_attributes attribute-wchar-t-size434742
+ Ref: 1b1434742
+ Node: Attribute Word_Size435046
+ Ref: gnat_rm/implementation_defined_attributes attribute-word-size435167
+ Ref: 1b2435167
+ Node: Standard and Implementation Defined Restrictions435365
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions doc435526
+ Ref: 1b3435526
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions id1435526
+ Ref: 1b4435526
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions standard-and-implementation-defined-restrictions435526
+ Ref: 9435526
+ Node: Partition-Wide Restrictions436057
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions id2436210
+ Ref: 1b5436210
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions partition-wide-restrictions436210
+ Ref: 1b6436210
+ Node: Immediate_Reclamation438551
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions immediate-reclamation438677
+ Ref: 1b7438677
+ Node: Max_Asynchronous_Select_Nesting438990
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions max-asynchronous-select-nesting439147
+ Ref: 1b8439147
+ Node: Max_Entry_Queue_Length439480
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions max-entry-queue-length439637
+ Ref: 1b9439637
+ Node: Max_Protected_Entries440333
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions max-protected-entries440482
+ Ref: 1ba440482
+ Node: Max_Select_Alternatives440767
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions max-select-alternatives440917
+ Ref: 1bb440917
+ Node: Max_Storage_At_Blocking441056
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions max-storage-at-blocking441201
+ Ref: 1bc441201
+ Node: Max_Task_Entries441459
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions max-task-entries441590
+ Ref: 1bd441590
+ Node: Max_Tasks441851
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions max-tasks441978
+ Ref: 1be441978
+ Node: No_Abort_Statements442306
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-abort-statements442447
+ Ref: 1bf442447
+ Node: No_Access_Parameter_Allocators442599
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-access-parameter-allocators442752
+ Ref: 1c0442752
+ Node: No_Access_Subprograms442974
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-access-subprograms443121
+ Ref: 1c1443121
+ Node: No_Allocators443293
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-allocators443433
+ Ref: 1c2443433
+ Node: No_Anonymous_Allocators443574
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-anonymous-allocators443716
+ Ref: 1c3443716
+ Node: No_Asynchronous_Control443902
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-asynchronous-control444042
+ Ref: 1c4444042
+ Node: No_Calendar444249
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-calendar444381
+ Ref: 1c5444381
+ Node: No_Coextensions444529
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-coextensions444663
+ Ref: 1c6444663
+ Node: No_Default_Initialization444806
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-default-initialization444937
+ Ref: 1c7444937
+ Node: No_Delay445637
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-delay445766
+ Ref: 1c8445766
+ Node: No_Dependence445934
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-dependence446065
+ Ref: 1c9446065
+ Node: No_Direct_Boolean_Operators446386
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-direct-boolean-operators446520
+ Ref: 1ca446520
+ Node: No_Dispatch446920
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-dispatch447061
+ Ref: 1cb447061
+ Node: No_Dispatching_Calls447233
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-dispatching-calls447368
+ Ref: 1cc447368
+ Node: No_Dynamic_Attachment449464
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-attachment449609
+ Ref: 1cd449609
+ Node: No_Dynamic_Priorities450152
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-priorities450311
+ Ref: 1ce450311
+ Node: No_Entry_Calls_In_Elaboration_Code450450
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-entry-calls-in-elaboration-code450607
+ Ref: 1cf450607
+ Node: No_Enumeration_Maps450967
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-enumeration-maps451124
+ Ref: 1d0451124
+ Node: No_Exception_Handlers451350
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-exception-handlers451497
+ Ref: 1d1451497
+ Node: No_Exception_Propagation452370
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-exception-propagation452523
+ Ref: 1d2452523
+ Node: No_Exception_Registration453196
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-exception-registration453341
+ Ref: 1d3453341
+ Node: No_Exceptions453822
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-exceptions453958
+ Ref: 1d4453958
+ Node: No_Finalization454185
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-finalization454310
+ Ref: 1d5454310
+ Node: No_Fixed_Point455142
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-fixed-point455271
+ Ref: 1d6455271
+ Node: No_Floating_Point455434
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-floating-point455572
+ Ref: 1d7455572
+ Node: No_Implicit_Conditionals455744
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implicit-conditionals455892
+ Ref: 1d8455892
+ Node: No_Implicit_Dynamic_Code456527
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implicit-dynamic-code456686
+ Ref: 1d9456686
+ Node: No_Implicit_Heap_Allocations457907
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implicit-heap-allocations458082
+ Ref: 1da458082
+ Node: No_Implicit_Protected_Object_Allocations458226
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implicit-protected-object-allocations458405
+ Ref: 1db458405
+ Node: No_Implicit_Task_Allocations458593
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implicit-task-allocations458765
+ Ref: 1dc458765
+ Node: No_Initialize_Scalars458917
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-initialize-scalars459054
+ Ref: 1dd459054
+ Node: No_IO459398
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-io459526
+ Ref: 1de459526
+ Node: No_Local_Allocators459744
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-local-allocators459877
+ Ref: 1df459877
+ Node: No_Local_Protected_Objects460091
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-local-protected-objects460240
+ Ref: 1e0460240
+ Node: No_Local_Tagged_Types460423
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-local-tagged-types460575
+ Ref: 1e1460575
+ Node: No_Local_Timing_Events460741
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-local-timing-events460888
+ Ref: 1e2460888
+ Node: No_Long_Long_Integers461055
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-long-long-integers461204
+ Ref: 1e3461204
+ Node: No_Multiple_Elaboration461514
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-multiple-elaboration461663
+ Ref: 1e4461663
+ Node: No_Nested_Finalization462306
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-nested-finalization462462
+ Ref: 1e5462462
+ Node: No_Protected_Type_Allocators462603
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-protected-type-allocators462754
+ Ref: 1e6462754
+ Node: No_Protected_Types462962
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-protected-types463103
+ Ref: 1e7463103
+ Node: No_Recursion463279
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-recursion463405
+ Ref: 1e8463405
+ Node: No_Reentrancy463542
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-reentrancy463667
+ Ref: 1e9463667
+ Node: No_Relative_Delay463812
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-relative-delay463946
+ Ref: 1ea463946
+ Node: No_Requeue_Statements464174
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-requeue-statements464313
+ Ref: 1eb464313
+ Node: No_Secondary_Stack464780
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-secondary-stack464922
+ Ref: 1ec464922
+ Node: No_Select_Statements465327
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-select-statements465480
+ Ref: 1ed465480
+ Node: No_Specific_Termination_Handlers465685
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-specific-termination-handlers465846
+ Ref: 1ee465846
+ Node: No_Specification_of_Aspect466046
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-specification-of-aspect466227
+ Ref: 1ef466227
+ Node: No_Standard_Allocators_After_Elaboration466448
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-standard-allocators-after-elaboration466622
+ Ref: 1f0466622
+ Node: No_Standard_Storage_Pools466937
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-standard-storage-pools467108
+ Ref: 1f1467108
+ Node: No_Stream_Optimizations467403
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-stream-optimizations467544
+ Ref: 1f2467544
+ Node: No_Streams467977
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-streams468120
+ Ref: 1f3468120
+ Node: No_Tagged_Type_Registration468841
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-tagged-type-registration468979
+ Ref: 1f4468979
+ Node: No_Task_Allocators469461
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-task-allocators469618
+ Ref: 1f5469618
+ Node: No_Task_At_Interrupt_Priority469760
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-task-at-interrupt-priority469916
+ Ref: 1f6469916
+ Node: No_Task_Attributes_Package470218
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-task-attributes-package470373
+ Ref: 1f7470373
+ Node: No_Task_Hierarchy470845
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-task-hierarchy470990
+ Ref: 1f8470990
+ Node: No_Task_Termination471137
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-task-termination471266
+ Ref: 1f9471266
+ Node: No_Tasking471367
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-tasking471504
+ Ref: 1fa471504
+ Node: No_Terminate_Alternatives471824
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-terminate-alternatives471961
+ Ref: 1fb471961
+ Node: No_Unchecked_Access472098
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-access472248
+ Ref: 1fc472248
+ Node: No_Unchecked_Conversion472419
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-conversion472569
+ Ref: 1fd472569
+ Node: No_Unchecked_Deallocation472780
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-deallocation472927
+ Ref: 1fe472927
+ Node: No_Use_Of_Entity473145
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-use-of-entity473282
+ Ref: 1ff473282
+ Node: Pure_Barriers473580
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions pure-barriers473707
+ Ref: 200473707
+ Node: Simple_Barriers474412
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions simple-barriers474540
+ Ref: 201474540
+ Node: Static_Priorities475139
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions static-priorities475273
+ Ref: 202475273
+ Node: Static_Storage_Size475494
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions static-storage-size475604
+ Ref: 203475604
+ Node: Program Unit Level Restrictions475805
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions id3475958
+ Ref: 204475958
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions program-unit-level-restrictions475958
+ Ref: 205475958
+ Node: No_Elaboration_Code476717
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-elaboration-code476845
+ Ref: 206476845
+ Node: No_Dynamic_Accessibility_Checks479444
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-accessibility-checks479605
+ Ref: 207479605
+ Node: No_Dynamic_Sized_Objects481415
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-sized-objects481571
+ Ref: 208481571
+ Node: No_Entry_Queue482293
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-entry-queue482457
+ Ref: 209482457
+ Node: No_Implementation_Aspect_Specifications482843
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implementation-aspect-specifications483011
+ Ref: 20a483011
+ Node: No_Implementation_Attributes483305
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implementation-attributes483488
+ Ref: 20b483488
+ Node: No_Implementation_Identifiers483766
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implementation-identifiers483935
+ Ref: 20c483935
+ Node: No_Implementation_Pragmas484189
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implementation-pragmas484360
+ Ref: 20d484360
+ Node: No_Implementation_Restrictions484626
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implementation-restrictions484791
+ Ref: 20e484791
+ Node: No_Implementation_Units485156
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implementation-units485316
+ Ref: 20f485316
+ Node: No_Implicit_Aliasing485562
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implicit-aliasing485709
+ Ref: 210485709
+ Node: No_Implicit_Loops486263
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implicit-loops486410
+ Ref: 211486410
+ Node: No_Obsolescent_Features487146
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-obsolescent-features487291
+ Ref: 212487291
+ Node: No_Wide_Characters487498
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions no-wide-characters487648
+ Ref: 213487648
+ Node: Static_Dispatch_Tables488012
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions static-dispatch-tables488147
+ Ref: 214488147
+ Node: SPARK_05488346
+ Ref: gnat_rm/standard_and_implementation_defined_restrictions spark-05488454
+ Ref: 215488454
+ Node: Implementation Advice488913
+ Ref: gnat_rm/implementation_advice doc489079
+ Ref: 216489079
+ Ref: gnat_rm/implementation_advice id1489079
+ Ref: 217489079
+ Ref: gnat_rm/implementation_advice implementation-advice489079
+ Ref: a489079
+ Node: RM 1 1 3 20 Error Detection494984
+ Ref: gnat_rm/implementation_advice rm-1-1-3-20-error-detection495102
+ Ref: 218495102
+ Node: RM 1 1 3 31 Child Units495447
+ Ref: gnat_rm/implementation_advice rm-1-1-3-31-child-units495600
+ Ref: 219495600
+ Node: RM 1 1 5 12 Bounded Errors495889
+ Ref: gnat_rm/implementation_advice rm-1-1-5-12-bounded-errors496032
+ Ref: 21a496032
+ Node: RM 2 8 16 Pragmas496371
+ Ref: gnat_rm/implementation_advice id2496511
+ Ref: 21b496511
+ Ref: gnat_rm/implementation_advice rm-2-8-16-pragmas496511
+ Ref: 21c496511
+ Node: RM 2 8 17-19 Pragmas498192
+ Ref: gnat_rm/implementation_advice rm-2-8-17-19-pragmas498343
+ Ref: 21d498343
+ Node: RM 3 5 2 5 Alternative Character Sets498777
+ Ref: gnat_rm/implementation_advice rm-3-5-2-5-alternative-character-sets498936
+ Ref: 21e498936
+ Node: RM 3 5 4 28 Integer Types500093
+ Ref: gnat_rm/implementation_advice rm-3-5-4-28-integer-types500257
+ Ref: 21f500257
+ Node: RM 3 5 4 29 Integer Types500931
+ Ref: gnat_rm/implementation_advice rm-3-5-4-29-integer-types501087
+ Ref: 220501087
+ Node: RM 3 5 5 8 Enumeration Values501405
+ Ref: gnat_rm/implementation_advice rm-3-5-5-8-enumeration-values501559
+ Ref: 221501559
+ Node: RM 3 5 7 17 Float Types502108
+ Ref: gnat_rm/implementation_advice rm-3-5-7-17-float-types502272
+ Ref: 222502272
+ Node: RM 3 6 2 11 Multidimensional Arrays503381
+ Ref: gnat_rm/implementation_advice rm-3-6-2-11-multidimensional-arrays503545
+ Ref: 223503545
+ Node: RM 9 6 30-31 Duration’Small504045
+ Ref: gnat_rm/implementation_advice rm-9-6-30-31-duration-small504224
+ Ref: 224504224
+ Node: RM 10 2 1 12 Consistent Representation504646
+ Ref: gnat_rm/implementation_advice rm-10-2-1-12-consistent-representation504824
+ Ref: 225504824
+ Node: RM 11 4 1 19 Exception Information505614
+ Ref: gnat_rm/implementation_advice rm-11-4-1-19-exception-information505795
+ Ref: 226505795
+ Node: RM 11 5 28 Suppression of Checks506937
+ Ref: gnat_rm/implementation_advice rm-11-5-28-suppression-of-checks507116
+ Ref: 227507116
+ Node: RM 13 1 21-24 Representation Clauses507316
+ Ref: gnat_rm/implementation_advice rm-13-1-21-24-representation-clauses507485
+ Ref: 228507485
+ Node: RM 13 2 6-8 Packed Types508899
+ Ref: gnat_rm/implementation_advice rm-13-2-6-8-packed-types509065
+ Ref: 229509065
+ Node: RM 13 3 14-19 Address Clauses510298
+ Ref: gnat_rm/implementation_advice rm-13-3-14-19-address-clauses510459
+ Ref: 22a510459
+ Node: RM 13 3 29-35 Alignment Clauses511594
+ Ref: gnat_rm/implementation_advice rm-13-3-29-35-alignment-clauses511757
+ Ref: 22b511757
+ Node: RM 13 3 42-43 Size Clauses512958
+ Ref: gnat_rm/implementation_advice rm-13-3-42-43-size-clauses513118
+ Ref: 22c513118
+ Node: RM 13 3 50-56 Size Clauses513583
+ Ref: gnat_rm/implementation_advice rm-13-3-50-56-size-clauses513748
+ Ref: 22d513748
+ Node: RM 13 3 71-73 Component Size Clauses515122
+ Ref: gnat_rm/implementation_advice rm-13-3-71-73-component-size-clauses515308
+ Ref: 22e515308
+ Node: RM 13 4 9-10 Enumeration Representation Clauses516116
+ Ref: gnat_rm/implementation_advice rm-13-4-9-10-enumeration-representation-clauses516321
+ Ref: 22f516321
+ Node: RM 13 5 1 17-22 Record Representation Clauses516743
+ Ref: gnat_rm/implementation_advice rm-13-5-1-17-22-record-representation-clauses516948
+ Ref: 230516948
+ Node: RM 13 5 2 5 Storage Place Attributes518651
+ Ref: gnat_rm/implementation_advice rm-13-5-2-5-storage-place-attributes518835
+ Ref: 231518835
+ Node: RM 13 5 3 7-8 Bit Ordering519447
+ Ref: gnat_rm/implementation_advice rm-13-5-3-7-8-bit-ordering519615
+ Ref: 232519615
+ Node: RM 13 7 37 Address as Private520059
+ Ref: gnat_rm/implementation_advice rm-13-7-37-address-as-private520222
+ Ref: 233520222
+ Node: RM 13 7 1 16 Address Operations520363
+ Ref: gnat_rm/implementation_advice rm-13-7-1-16-address-operations520534
+ Ref: 234520534
+ Node: RM 13 9 14-17 Unchecked Conversion521073
+ Ref: gnat_rm/implementation_advice rm-13-9-14-17-unchecked-conversion521249
+ Ref: 235521249
+ Node: RM 13 11 23-25 Implicit Heap Usage522641
+ Ref: gnat_rm/implementation_advice rm-13-11-23-25-implicit-heap-usage522822
+ Ref: 236522822
+ Node: RM 13 11 2 17 Unchecked Deallocation523841
+ Ref: gnat_rm/implementation_advice rm-13-11-2-17-unchecked-deallocation524029
+ Ref: 237524029
+ Node: RM 13 13 2 1 6 Stream Oriented Attributes524223
+ Ref: gnat_rm/implementation_advice rm-13-13-2-1-6-stream-oriented-attributes524420
+ Ref: 238524420
+ Node: RM A 1 52 Names of Predefined Numeric Types525384
+ Ref: gnat_rm/implementation_advice rm-a-1-52-names-of-predefined-numeric-types525580
+ Ref: 239525580
+ Node: RM A 3 2 49 Ada Characters Handling526018
+ Ref: gnat_rm/implementation_advice rm-a-3-2-49-ada-characters-handling526216
+ Ref: 23a526216
+ Node: RM A 4 4 106 Bounded-Length String Handling526608
+ Ref: gnat_rm/implementation_advice rm-a-4-4-106-bounded-length-string-handling526802
+ Ref: 23b526802
+ Node: RM A 5 2 46-47 Random Number Generation527081
+ Ref: gnat_rm/implementation_advice rm-a-5-2-46-47-random-number-generation527266
+ Ref: 23c527266
+ Node: RM A 10 7 23 Get_Immediate528098
+ Ref: gnat_rm/implementation_advice rm-a-10-7-23-get-immediate528258
+ Ref: 23d528258
+ Node: RM A 18 Containers529110
+ Ref: gnat_rm/implementation_advice rm-a-18-containers529257
+ Ref: 23e529257
+ Node: RM B 1 39-41 Pragma Export529888
+ Ref: gnat_rm/implementation_advice rm-b-1-39-41-pragma-export530040
+ Ref: 23f530040
+ Node: RM B 2 12-13 Package Interfaces531580
+ Ref: gnat_rm/implementation_advice rm-b-2-12-13-package-interfaces531745
+ Ref: 240531745
+ Node: RM B 3 63-71 Interfacing with C532558
+ Ref: gnat_rm/implementation_advice rm-b-3-63-71-interfacing-with-c532732
+ Ref: 241532732
+ Node: RM B 4 95-98 Interfacing with COBOL534667
+ Ref: gnat_rm/implementation_advice rm-b-4-95-98-interfacing-with-cobol534847
+ Ref: 242534847
+ Node: RM B 5 22-26 Interfacing with Fortran535581
+ Ref: gnat_rm/implementation_advice rm-b-5-22-26-interfacing-with-fortran535769
+ Ref: 243535769
+ Node: RM C 1 3-5 Access to Machine Operations536857
+ Ref: gnat_rm/implementation_advice rm-c-1-3-5-access-to-machine-operations537051
+ Ref: 244537051
+ Node: RM C 1 10-16 Access to Machine Operations538027
+ Ref: gnat_rm/implementation_advice rm-c-1-10-16-access-to-machine-operations538211
+ Ref: 245538211
+ Node: RM C 3 28 Interrupt Support539481
+ Ref: gnat_rm/implementation_advice rm-c-3-28-interrupt-support539669
+ Ref: 246539669
+ Node: RM C 3 1 20-21 Protected Procedure Handlers540135
+ Ref: gnat_rm/implementation_advice rm-c-3-1-20-21-protected-procedure-handlers540312
+ Ref: 247540312
+ Node: RM C 3 2 25 Package Interrupts540816
+ Ref: gnat_rm/implementation_advice rm-c-3-2-25-package-interrupts541004
+ Ref: 248541004
+ Node: RM C 4 14 Pre-elaboration Requirements541474
+ Ref: gnat_rm/implementation_advice rm-c-4-14-pre-elaboration-requirements541648
+ Ref: 249541648
+ Node: RM C 5 8 Pragma Discard_Names542088
+ Ref: gnat_rm/implementation_advice rm-c-5-8-pragma-discard-names542271
+ Ref: 24a542271
+ Node: RM C 7 2 30 The Package Task_Attributes542535
+ Ref: gnat_rm/implementation_advice rm-c-7-2-30-the-package-task-attributes542706
+ Ref: 24b542706
+ Node: RM D 3 17 Locking Policies543442
+ Ref: gnat_rm/implementation_advice rm-d-3-17-locking-policies543616
+ Ref: 24c543616
+ Node: RM D 4 16 Entry Queuing Policies543989
+ Ref: gnat_rm/implementation_advice rm-d-4-16-entry-queuing-policies544152
+ Ref: 24d544152
+ Node: RM D 6 9-10 Preemptive Abort544416
+ Ref: gnat_rm/implementation_advice rm-d-6-9-10-preemptive-abort544583
+ Ref: 24e544583
+ Node: RM D 7 21 Tasking Restrictions545157
+ Ref: gnat_rm/implementation_advice rm-d-7-21-tasking-restrictions545319
+ Ref: 24f545319
+ Node: RM D 8 47-49 Monotonic Time545821
+ Ref: gnat_rm/implementation_advice rm-d-8-47-49-monotonic-time546001
+ Ref: 250546001
+ Node: RM E 5 28-29 Partition Communication Subsystem546676
+ Ref: gnat_rm/implementation_advice rm-e-5-28-29-partition-communication-subsystem546846
+ Ref: 251546846
+ Node: RM F 7 COBOL Support547540
+ Ref: gnat_rm/implementation_advice rm-f-7-cobol-support547713
+ Ref: 252547713
+ Node: RM F 1 2 Decimal Radix Support548264
+ Ref: gnat_rm/implementation_advice rm-f-1-2-decimal-radix-support548404
+ Ref: 253548404
+ Node: RM G Numerics548718
+ Ref: gnat_rm/implementation_advice rm-g-numerics548866
+ Ref: 254548866
+ Node: RM G 1 1 56-58 Complex Types549396
+ Ref: gnat_rm/implementation_advice rm-g-1-1-56-58-complex-types549554
+ Ref: 255549554
+ Node: RM G 1 2 49 Complex Elementary Functions552383
+ Ref: gnat_rm/implementation_advice rm-g-1-2-49-complex-elementary-functions552561
+ Ref: 256552561
+ Node: RM G 2 4 19 Accuracy Requirements553294
+ Ref: gnat_rm/implementation_advice rm-g-2-4-19-accuracy-requirements553483
+ Ref: 257553483
+ Node: RM G 2 6 15 Complex Arithmetic Accuracy554098
+ Ref: gnat_rm/implementation_advice rm-g-2-6-15-complex-arithmetic-accuracy554294
+ Ref: 258554294
+ Node: RM H 6 15/2 Pragma Partition_Elaboration_Policy554717
+ Ref: gnat_rm/implementation_advice rm-h-6-15-2-pragma-partition-elaboration-policy554871
+ Ref: 259554871
+ Node: Implementation Defined Characteristics555253
+ Ref: gnat_rm/implementation_defined_characteristics doc555392
+ Ref: 25a555392
+ Ref: gnat_rm/implementation_defined_characteristics id1555392
+ Ref: 25b555392
+ Ref: gnat_rm/implementation_defined_characteristics implementation-defined-characteristics555392
+ Ref: b555392
+ Node: Intrinsic Subprograms607273
+ Ref: gnat_rm/intrinsic_subprograms doc607425
+ Ref: 25d607425
+ Ref: gnat_rm/intrinsic_subprograms id1607425
+ Ref: 25e607425
+ Ref: gnat_rm/intrinsic_subprograms intrinsic-subprograms607425
+ Ref: c607425
+ Node: Intrinsic Operators608405
+ Ref: gnat_rm/intrinsic_subprograms id2608512
+ Ref: 25f608512
+ Ref: gnat_rm/intrinsic_subprograms intrinsic-operators608512
+ Ref: 260608512
+ Node: Compilation_ISO_Date609511
+ Ref: gnat_rm/intrinsic_subprograms compilation-iso-date609643
+ Ref: 261609643
+ Ref: gnat_rm/intrinsic_subprograms id3609643
+ Ref: 262609643
+ Node: Compilation_Date610064
+ Ref: gnat_rm/intrinsic_subprograms compilation-date610193
+ Ref: 263610193
+ Ref: gnat_rm/intrinsic_subprograms id4610193
+ Ref: 264610193
+ Node: Compilation_Time610313
+ Ref: gnat_rm/intrinsic_subprograms compilation-time610438
+ Ref: 265610438
+ Ref: gnat_rm/intrinsic_subprograms id5610438
+ Ref: 266610438
+ Node: Enclosing_Entity610845
+ Ref: gnat_rm/intrinsic_subprograms enclosing-entity610975
+ Ref: 267610975
+ Ref: gnat_rm/intrinsic_subprograms id6610975
+ Ref: 268610975
+ Node: Exception_Information611396
+ Ref: gnat_rm/intrinsic_subprograms exception-information611527
+ Ref: 269611527
+ Ref: gnat_rm/intrinsic_subprograms id7611527
+ Ref: 26a611527
+ Node: Exception_Message611957
+ Ref: gnat_rm/intrinsic_subprograms exception-message612086
+ Ref: 26b612086
+ Ref: gnat_rm/intrinsic_subprograms id8612086
+ Ref: 26c612086
+ Node: Exception_Name612490
+ Ref: gnat_rm/intrinsic_subprograms exception-name612602
+ Ref: 26d612602
+ Ref: gnat_rm/intrinsic_subprograms id9612602
+ Ref: 26e612602
+ Node: File612981
+ Ref: gnat_rm/intrinsic_subprograms file613080
+ Ref: 26f613080
+ Ref: gnat_rm/intrinsic_subprograms id10613080
+ Ref: 270613080
+ Node: Line613412
+ Ref: gnat_rm/intrinsic_subprograms id11613515
+ Ref: 271613515
+ Ref: gnat_rm/intrinsic_subprograms line613515
+ Ref: 272613515
+ Node: Shifts and Rotates613858
+ Ref: gnat_rm/intrinsic_subprograms id12613972
+ Ref: 273613972
+ Ref: gnat_rm/intrinsic_subprograms shifts-and-rotates613972
+ Ref: 274613972
+ Node: Source_Location615210
+ Ref: gnat_rm/intrinsic_subprograms id13615311
+ Ref: 275615311
+ Ref: gnat_rm/intrinsic_subprograms source-location615311
+ Ref: 276615311
+ Node: Representation Clauses and Pragmas615682
+ Ref: gnat_rm/representation_clauses_and_pragmas doc615821
+ Ref: 277615821
+ Ref: gnat_rm/representation_clauses_and_pragmas id1615821
+ Ref: 278615821
+ Ref: gnat_rm/representation_clauses_and_pragmas representation-clauses-and-pragmas615821
+ Ref: d615821
+ Node: Alignment Clauses617007
+ Ref: gnat_rm/representation_clauses_and_pragmas alignment-clauses617117
+ Ref: 279617117
+ Ref: gnat_rm/representation_clauses_and_pragmas id2617117
+ Ref: 27a617117
+ Node: Size Clauses621563
+ Ref: gnat_rm/representation_clauses_and_pragmas id3621702
+ Ref: 27b621702
+ Ref: gnat_rm/representation_clauses_and_pragmas size-clauses621702
+ Ref: 27c621702
+ Node: Storage_Size Clauses624486
+ Ref: gnat_rm/representation_clauses_and_pragmas id4624638
+ Ref: 27d624638
+ Ref: gnat_rm/representation_clauses_and_pragmas storage-size-clauses624638
+ Ref: 27e624638
+ Node: Size of Variant Record Objects627170
+ Ref: gnat_rm/representation_clauses_and_pragmas id5627331
+ Ref: 27f627331
+ Ref: gnat_rm/representation_clauses_and_pragmas size-of-variant-record-objects627331
+ Ref: 280627331
+ Node: Biased Representation630443
+ Ref: gnat_rm/representation_clauses_and_pragmas biased-representation630618
+ Ref: 281630618
+ Ref: gnat_rm/representation_clauses_and_pragmas id6630618
+ Ref: 282630618
+ Node: Value_Size and Object_Size Clauses631662
+ Ref: gnat_rm/representation_clauses_and_pragmas id7631829
+ Ref: 283631829
+ Ref: gnat_rm/representation_clauses_and_pragmas value-size-and-object-size-clauses631829
+ Ref: 284631829
+ Node: Component_Size Clauses641487
+ Ref: gnat_rm/representation_clauses_and_pragmas component-size-clauses641650
+ Ref: 285641650
+ Ref: gnat_rm/representation_clauses_and_pragmas id8641650
+ Ref: 286641650
+ Node: Bit_Order Clauses643284
+ Ref: gnat_rm/representation_clauses_and_pragmas bit-order-clauses643449
+ Ref: 287643449
+ Ref: gnat_rm/representation_clauses_and_pragmas id9643449
+ Ref: 288643449
+ Node: Effect of Bit_Order on Byte Ordering646894
+ Ref: gnat_rm/representation_clauses_and_pragmas effect-of-bit-order-on-byte-ordering647059
+ Ref: 289647059
+ Ref: gnat_rm/representation_clauses_and_pragmas id10647059
+ Ref: 28a647059
+ Node: Pragma Pack for Arrays656514
+ Ref: gnat_rm/representation_clauses_and_pragmas id11656685
+ Ref: 28b656685
+ Ref: gnat_rm/representation_clauses_and_pragmas pragma-pack-for-arrays656685
+ Ref: 28c656685
+ Node: Pragma Pack for Records661190
+ Ref: gnat_rm/representation_clauses_and_pragmas id12661354
+ Ref: 28d661354
+ Ref: gnat_rm/representation_clauses_and_pragmas pragma-pack-for-records661354
+ Ref: 28e661354
+ Node: Record Representation Clauses663914
+ Ref: gnat_rm/representation_clauses_and_pragmas id13664086
+ Ref: 28f664086
+ Ref: gnat_rm/representation_clauses_and_pragmas record-representation-clauses664086
+ Ref: 290664086
+ Node: Handling of Records with Holes666974
+ Ref: gnat_rm/representation_clauses_and_pragmas handling-of-records-with-holes667142
+ Ref: 291667142
+ Ref: gnat_rm/representation_clauses_and_pragmas id14667142
+ Ref: 292667142
+ Node: Enumeration Clauses669404
+ Ref: gnat_rm/representation_clauses_and_pragmas enumeration-clauses669558
+ Ref: 293669558
+ Ref: gnat_rm/representation_clauses_and_pragmas id15669558
+ Ref: 294669558
+ Node: Address Clauses670994
+ Ref: gnat_rm/representation_clauses_and_pragmas address-clauses671162
+ Ref: 295671162
+ Ref: gnat_rm/representation_clauses_and_pragmas id16671162
+ Ref: 296671162
+ Node: Use of Address Clauses for Memory-Mapped I/O682654
+ Ref: gnat_rm/representation_clauses_and_pragmas id17682841
+ Ref: 297682841
+ Ref: gnat_rm/representation_clauses_and_pragmas use-of-address-clauses-for-memory-mapped-i-o682841
+ Ref: 298682841
+ Node: Effect of Convention on Representation684709
+ Ref: gnat_rm/representation_clauses_and_pragmas effect-of-convention-on-representation684919
+ Ref: 299684919
+ Ref: gnat_rm/representation_clauses_and_pragmas id18684919
+ Ref: 29a684919
+ Node: Conventions and Anonymous Access Types688044
+ Ref: gnat_rm/representation_clauses_and_pragmas conventions-and-anonymous-access-types688256
+ Ref: 29b688256
+ Ref: gnat_rm/representation_clauses_and_pragmas id19688256
+ Ref: 29c688256
+ Node: Determining the Representations chosen by GNAT690747
+ Ref: gnat_rm/representation_clauses_and_pragmas determining-the-representations-chosen-by-gnat690912
+ Ref: 29d690912
+ Ref: gnat_rm/representation_clauses_and_pragmas id20690912
+ Ref: 29e690912
+ Node: Standard Library Routines695511
+ Ref: gnat_rm/standard_library_routines doc695663
+ Ref: 29f695663
+ Ref: gnat_rm/standard_library_routines id1695663
+ Ref: 2a0695663
+ Ref: gnat_rm/standard_library_routines standard-library-routines695663
+ Ref: e695663
+ Node: The Implementation of Standard I/O722772
+ Ref: gnat_rm/the_implementation_of_standard_i_o doc722906
+ Ref: 2a1722906
+ Ref: gnat_rm/the_implementation_of_standard_i_o id1722906
+ Ref: 2a2722906
+ Ref: gnat_rm/the_implementation_of_standard_i_o the-implementation-of-standard-i-o722906
+ Ref: f722906
+ Node: Standard I/O Packages724956
+ Ref: gnat_rm/the_implementation_of_standard_i_o id2725070
+ Ref: 2a3725070
+ Ref: gnat_rm/the_implementation_of_standard_i_o standard-i-o-packages725070
+ Ref: 2a4725070
+ Node: FORM Strings726409
+ Ref: gnat_rm/the_implementation_of_standard_i_o form-strings726541
+ Ref: 2a5726541
+ Ref: gnat_rm/the_implementation_of_standard_i_o id3726541
+ Ref: 2a6726541
+ Node: Direct_IO727155
+ Ref: gnat_rm/the_implementation_of_standard_i_o direct-io727279
+ Ref: 2a7727279
+ Ref: gnat_rm/the_implementation_of_standard_i_o id4727279
+ Ref: 2a8727279
+ Node: Sequential_IO728056
+ Ref: gnat_rm/the_implementation_of_standard_i_o id5728175
+ Ref: 2a9728175
+ Ref: gnat_rm/the_implementation_of_standard_i_o sequential-io728175
+ Ref: 2aa728175
+ Node: Text_IO730012
+ Ref: gnat_rm/the_implementation_of_standard_i_o id6730134
+ Ref: 2ab730134
+ Ref: gnat_rm/the_implementation_of_standard_i_o text-io730134
+ Ref: 2ac730134
+ Node: Stream Pointer Positioning732622
+ Ref: gnat_rm/the_implementation_of_standard_i_o id7732739
+ Ref: 2ad732739
+ Ref: gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning732739
+ Ref: 2ae732739
+ Node: Reading and Writing Non-Regular Files734186
+ Ref: gnat_rm/the_implementation_of_standard_i_o id8734325
+ Ref: 2af734325
+ Ref: gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files734325
+ Ref: 2b0734325
+ Node: Get_Immediate736099
+ Ref: gnat_rm/the_implementation_of_standard_i_o get-immediate736245
+ Ref: 2b1736245
+ Ref: gnat_rm/the_implementation_of_standard_i_o id9736245
+ Ref: 2b2736245
+ Node: Treating Text_IO Files as Streams736938
+ Ref: gnat_rm/the_implementation_of_standard_i_o id10737065
+ Ref: 2b3737065
+ Ref: gnat_rm/the_implementation_of_standard_i_o treating-text-io-files-as-streams737065
+ Ref: 2b4737065
+ Node: Text_IO Extensions737653
+ Ref: gnat_rm/the_implementation_of_standard_i_o id11737807
+ Ref: 2b5737807
+ Ref: gnat_rm/the_implementation_of_standard_i_o text-io-extensions737807
+ Ref: 2b6737807
+ Node: Text_IO Facilities for Unbounded Strings738424
+ Ref: gnat_rm/the_implementation_of_standard_i_o id12738536
+ Ref: 2b7738536
+ Ref: gnat_rm/the_implementation_of_standard_i_o text-io-facilities-for-unbounded-strings738536
+ Ref: 2b8738536
+ Node: Wide_Text_IO740110
+ Ref: gnat_rm/the_implementation_of_standard_i_o id13740236
+ Ref: 2b9740236
+ Ref: gnat_rm/the_implementation_of_standard_i_o wide-text-io740236
+ Ref: 2ba740236
+ Node: Stream Pointer Positioning<2>747213
+ Ref: gnat_rm/the_implementation_of_standard_i_o id14747341
+ Ref: 2bb747341
+ Ref: gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-1747341
+ Ref: 2bc747341
+ Node: Reading and Writing Non-Regular Files<2>748259
+ Ref: gnat_rm/the_implementation_of_standard_i_o id15748387
+ Ref: 2bd748387
+ Ref: gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-1748387
+ Ref: 2be748387
+ Node: Wide_Wide_Text_IO748796
+ Ref: gnat_rm/the_implementation_of_standard_i_o id16748924
+ Ref: 2bf748924
+ Ref: gnat_rm/the_implementation_of_standard_i_o wide-wide-text-io748924
+ Ref: 2c0748924
+ Node: Stream Pointer Positioning<3>752605
+ Ref: gnat_rm/the_implementation_of_standard_i_o id17752738
+ Ref: 2c1752738
+ Ref: gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-2752738
+ Ref: 2c2752738
+ Node: Reading and Writing Non-Regular Files<3>753688
+ Ref: gnat_rm/the_implementation_of_standard_i_o id18753821
+ Ref: 2c3753821
+ Ref: gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-2753821
+ Ref: 2c4753821
+ Node: Stream_IO754230
+ Ref: gnat_rm/the_implementation_of_standard_i_o id19754362
+ Ref: 2c5754362
+ Ref: gnat_rm/the_implementation_of_standard_i_o stream-io754362
+ Ref: 2c6754362
+ Node: Text Translation754879
+ Ref: gnat_rm/the_implementation_of_standard_i_o id20755006
+ Ref: 2c7755006
+ Ref: gnat_rm/the_implementation_of_standard_i_o text-translation755006
+ Ref: 2c8755006
+ Node: Shared Files755806
+ Ref: gnat_rm/the_implementation_of_standard_i_o id21755942
+ Ref: 2c9755942
+ Ref: gnat_rm/the_implementation_of_standard_i_o shared-files755942
+ Ref: 2ca755942
+ Node: Filenames encoding758688
+ Ref: gnat_rm/the_implementation_of_standard_i_o filenames-encoding758829
+ Ref: 2cb758829
+ Ref: gnat_rm/the_implementation_of_standard_i_o id22758829
+ Ref: 2cc758829
+ Node: File content encoding759639
+ Ref: gnat_rm/the_implementation_of_standard_i_o file-content-encoding759778
+ Ref: 2cd759778
+ Ref: gnat_rm/the_implementation_of_standard_i_o id23759778
+ Ref: 2ce759778
+ Node: Open Modes760302
+ Ref: gnat_rm/the_implementation_of_standard_i_o id24760446
+ Ref: 2cf760446
+ Ref: gnat_rm/the_implementation_of_standard_i_o open-modes760446
+ Ref: 2d0760446
+ Node: Operations on C Streams762440
+ Ref: gnat_rm/the_implementation_of_standard_i_o id25762587
+ Ref: 2d1762587
+ Ref: gnat_rm/the_implementation_of_standard_i_o operations-on-c-streams762587
+ Ref: 2d2762587
+ Node: Interfacing to C Streams769391
+ Ref: gnat_rm/the_implementation_of_standard_i_o id26769519
+ Ref: 2d3769519
+ Ref: gnat_rm/the_implementation_of_standard_i_o interfacing-to-c-streams769519
+ Ref: 2d4769519
+ Node: The GNAT Library772831
+ Ref: gnat_rm/the_gnat_library doc772970
+ Ref: 2d5772970
+ Ref: gnat_rm/the_gnat_library id1772970
+ Ref: 2d6772970
+ Ref: gnat_rm/the_gnat_library the-gnat-library772970
+ Ref: 10772970
+ Node: Ada Characters Latin_9 a-chlat9 ads785850
+ Ref: gnat_rm/the_gnat_library ada-characters-latin-9-a-chlat9-ads785988
+ Ref: 2d7785988
+ Ref: gnat_rm/the_gnat_library id2785988
+ Ref: 2d8785988
+ Node: Ada Characters Wide_Latin_1 a-cwila1 ads786398
+ Ref: gnat_rm/the_gnat_library ada-characters-wide-latin-1-a-cwila1-ads786585
+ Ref: 2d9786585
+ Ref: gnat_rm/the_gnat_library id3786585
+ Ref: 2da786585
+ Node: Ada Characters Wide_Latin_9 a-cwila9 ads787037
+ Ref: gnat_rm/the_gnat_library ada-characters-wide-latin-9-a-cwila9-ads787234
+ Ref: 2db787234
+ Ref: gnat_rm/the_gnat_library id4787234
+ Ref: 2dc787234
+ Node: Ada Characters Wide_Wide_Latin_1 a-chzla1 ads787688
+ Ref: gnat_rm/the_gnat_library ada-characters-wide-wide-latin-1-a-chzla1-ads787890
+ Ref: 2dd787890
+ Ref: gnat_rm/the_gnat_library id5787890
+ Ref: 2de787890
+ Node: Ada Characters Wide_Wide_Latin_9 a-chzla9 ads788357
+ Ref: gnat_rm/the_gnat_library ada-characters-wide-wide-latin-9-a-chzla9-ads788562
+ Ref: 2df788562
+ Ref: gnat_rm/the_gnat_library id6788562
+ Ref: 2e0788562
+ Node: Ada Containers Bounded_Holders a-coboho ads789031
+ Ref: gnat_rm/the_gnat_library ada-containers-bounded-holders-a-coboho-ads789232
+ Ref: 2e1789232
+ Ref: gnat_rm/the_gnat_library id7789232
+ Ref: 2e2789232
+ Node: Ada Command_Line Environment a-colien ads789465
+ Ref: gnat_rm/the_gnat_library ada-command-line-environment-a-colien-ads789657
+ Ref: 2e3789657
+ Ref: gnat_rm/the_gnat_library id8789657
+ Ref: 2e4789657
+ Node: Ada Command_Line Remove a-colire ads789907
+ Ref: gnat_rm/the_gnat_library ada-command-line-remove-a-colire-ads790099
+ Ref: 2e5790099
+ Ref: gnat_rm/the_gnat_library id9790099
+ Ref: 2e6790099
+ Node: Ada Command_Line Response_File a-clrefi ads790472
+ Ref: gnat_rm/the_gnat_library ada-command-line-response-file-a-clrefi-ads790659
+ Ref: 2e7790659
+ Ref: gnat_rm/the_gnat_library id10790659
+ Ref: 2e8790659
+ Node: Ada Direct_IO C_Streams a-diocst ads791071
+ Ref: gnat_rm/the_gnat_library ada-direct-io-c-streams-a-diocst-ads791268
+ Ref: 2e9791268
+ Ref: gnat_rm/the_gnat_library id11791268
+ Ref: 2ea791268
+ Node: Ada Exceptions Is_Null_Occurrence a-einuoc ads791619
+ Ref: gnat_rm/the_gnat_library ada-exceptions-is-null-occurrence-a-einuoc-ads791820
+ Ref: 2eb791820
+ Ref: gnat_rm/the_gnat_library id12791820
+ Ref: 2ec791820
+ Node: Ada Exceptions Last_Chance_Handler a-elchha ads792084
+ Ref: gnat_rm/the_gnat_library ada-exceptions-last-chance-handler-a-elchha-ads792286
+ Ref: 2ed792286
+ Ref: gnat_rm/the_gnat_library id13792286
+ Ref: 2ee792286
+ Node: Ada Exceptions Traceback a-exctra ads792616
+ Ref: gnat_rm/the_gnat_library ada-exceptions-traceback-a-exctra-ads792812
+ Ref: 2ef792812
+ Ref: gnat_rm/the_gnat_library id14792812
+ Ref: 2f0792812
+ Node: Ada Sequential_IO C_Streams a-siocst ads793057
+ Ref: gnat_rm/the_gnat_library ada-sequential-io-c-streams-a-siocst-ads793250
+ Ref: 2f1793250
+ Ref: gnat_rm/the_gnat_library id15793250
+ Ref: 2f2793250
+ Node: Ada Streams Stream_IO C_Streams a-ssicst ads793613
+ Ref: gnat_rm/the_gnat_library ada-streams-stream-io-c-streams-a-ssicst-ads793811
+ Ref: 2f3793811
+ Ref: gnat_rm/the_gnat_library id16793811
+ Ref: 2f4793811
+ Node: Ada Strings Unbounded Text_IO a-suteio ads794178
+ Ref: gnat_rm/the_gnat_library ada-strings-unbounded-text-io-a-suteio-ads794388
+ Ref: 2f5794388
+ Ref: gnat_rm/the_gnat_library id17794388
+ Ref: 2f6794388
+ Node: Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads794653
+ Ref: gnat_rm/the_gnat_library ada-strings-wide-unbounded-wide-text-io-a-swuwti-ads794881
+ Ref: 2f7794881
+ Ref: gnat_rm/the_gnat_library id18794881
+ Ref: 2f8794881
+ Node: Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads795176
+ Ref: gnat_rm/the_gnat_library ada-strings-wide-wide-unbounded-wide-wide-text-io-a-szuzti-ads795398
+ Ref: 2f9795398
+ Ref: gnat_rm/the_gnat_library id19795398
+ Ref: 2fa795398
+ Node: Ada Task_Initialization a-tasini ads795723
+ Ref: gnat_rm/the_gnat_library ada-task-initialization-a-tasini-ads795927
+ Ref: 2fb795927
+ Ref: gnat_rm/the_gnat_library id20795927
+ Ref: 2fc795927
+ Node: Ada Text_IO C_Streams a-tiocst ads796296
+ Ref: gnat_rm/the_gnat_library ada-text-io-c-streams-a-tiocst-ads796483
+ Ref: 2fd796483
+ Ref: gnat_rm/the_gnat_library id21796483
+ Ref: 2fe796483
+ Node: Ada Text_IO Reset_Standard_Files a-tirsfi ads796828
+ Ref: gnat_rm/the_gnat_library ada-text-io-reset-standard-files-a-tirsfi-ads797019
+ Ref: 2ff797019
+ Ref: gnat_rm/the_gnat_library id22797019
+ Ref: 300797019
+ Node: Ada Wide_Characters Unicode a-wichun ads797438
+ Ref: gnat_rm/the_gnat_library ada-wide-characters-unicode-a-wichun-ads797634
+ Ref: 301797634
+ Ref: gnat_rm/the_gnat_library id23797634
+ Ref: 302797634
+ Node: Ada Wide_Text_IO C_Streams a-wtcstr ads797868
+ Ref: gnat_rm/the_gnat_library ada-wide-text-io-c-streams-a-wtcstr-ads798069
+ Ref: 303798069
+ Ref: gnat_rm/the_gnat_library id24798069
+ Ref: 304798069
+ Node: Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads798429
+ Ref: gnat_rm/the_gnat_library ada-wide-text-io-reset-standard-files-a-wrstfi-ads798635
+ Ref: 305798635
+ Ref: gnat_rm/the_gnat_library id25798635
+ Ref: 306798635
+ Node: Ada Wide_Wide_Characters Unicode a-zchuni ads799069
+ Ref: gnat_rm/the_gnat_library ada-wide-wide-characters-unicode-a-zchuni-ads799280
+ Ref: 307799280
+ Ref: gnat_rm/the_gnat_library id26799280
+ Ref: 308799280
+ Node: Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads799529
+ Ref: gnat_rm/the_gnat_library ada-wide-wide-text-io-c-streams-a-ztcstr-ads799745
+ Ref: 309799745
+ Ref: gnat_rm/the_gnat_library id27799745
+ Ref: 30a799745
+ Node: Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads800120
+ Ref: gnat_rm/the_gnat_library ada-wide-wide-text-io-reset-standard-files-a-zrstfi-ads800316
+ Ref: 30b800316
+ Ref: gnat_rm/the_gnat_library id28800316
+ Ref: 30c800316
+ Node: GNAT Altivec g-altive ads800765
+ Ref: gnat_rm/the_gnat_library gnat-altivec-g-altive-ads800954
+ Ref: 30d800954
+ Ref: gnat_rm/the_gnat_library id29800954
+ Ref: 30e800954
+ Node: GNAT Altivec Conversions g-altcon ads801185
+ Ref: gnat_rm/the_gnat_library gnat-altivec-conversions-g-altcon-ads801362
+ Ref: 30f801362
+ Ref: gnat_rm/the_gnat_library id30801362
+ Ref: 310801362
+ Node: GNAT Altivec Vector_Operations g-alveop ads801531
+ Ref: gnat_rm/the_gnat_library gnat-altivec-vector-operations-g-alveop-ads801721
+ Ref: 311801721
+ Ref: gnat_rm/the_gnat_library id31801721
+ Ref: 312801721
+ Node: GNAT Altivec Vector_Types g-alvety ads802081
+ Ref: gnat_rm/the_gnat_library gnat-altivec-vector-types-g-alvety-ads802272
+ Ref: 313802272
+ Ref: gnat_rm/the_gnat_library id32802272
+ Ref: 314802272
+ Node: GNAT Altivec Vector_Views g-alvevi ads802477
+ Ref: gnat_rm/the_gnat_library gnat-altivec-vector-views-g-alvevi-ads802654
+ Ref: 315802654
+ Ref: gnat_rm/the_gnat_library id33802654
+ Ref: 316802654
+ Node: GNAT Array_Split g-arrspl ads803025
+ Ref: gnat_rm/the_gnat_library gnat-array-split-g-arrspl-ads803182
+ Ref: 317803182
+ Ref: gnat_rm/the_gnat_library id34803182
+ Ref: 318803182
+ Node: GNAT AWK g-awk ads803437
+ Ref: gnat_rm/the_gnat_library gnat-awk-g-awk-ads803587
+ Ref: 319803587
+ Ref: gnat_rm/the_gnat_library id35803587
+ Ref: 31a803587
+ Node: GNAT Binary_Search g-binsea ads803882
+ Ref: gnat_rm/the_gnat_library gnat-binary-search-g-binsea-ads804037
+ Ref: 31b804037
+ Ref: gnat_rm/the_gnat_library id36804037
+ Ref: 31c804037
+ Node: GNAT Bind_Environment g-binenv ads804257
+ Ref: gnat_rm/the_gnat_library gnat-bind-environment-g-binenv-ads804429
+ Ref: 31d804429
+ Ref: gnat_rm/the_gnat_library id37804429
+ Ref: 31e804429
+ Node: GNAT Branch_Prediction g-brapre ads804682
+ Ref: gnat_rm/the_gnat_library gnat-branch-prediction-g-brapre-ads804856
+ Ref: 31f804856
+ Ref: gnat_rm/the_gnat_library id38804856
+ Ref: 320804856
+ Node: GNAT Bounded_Buffers g-boubuf ads805040
+ Ref: gnat_rm/the_gnat_library gnat-bounded-buffers-g-boubuf-ads805215
+ Ref: 321805215
+ Ref: gnat_rm/the_gnat_library id39805215
+ Ref: 322805215
+ Node: GNAT Bounded_Mailboxes g-boumai ads805483
+ Ref: gnat_rm/the_gnat_library gnat-bounded-mailboxes-g-boumai-ads805652
+ Ref: 323805652
+ Ref: gnat_rm/the_gnat_library id40805652
+ Ref: 324805652
+ Node: GNAT Bubble_Sort g-bubsor ads805836
+ Ref: gnat_rm/the_gnat_library gnat-bubble-sort-g-bubsor-ads806003
+ Ref: 325806003
+ Ref: gnat_rm/the_gnat_library id41806003
+ Ref: 326806003
+ Node: GNAT Bubble_Sort_A g-busora ads806275
+ Ref: gnat_rm/the_gnat_library gnat-bubble-sort-a-g-busora-ads806438
+ Ref: 327806438
+ Ref: gnat_rm/the_gnat_library id42806438
+ Ref: 328806438
+ Node: GNAT Bubble_Sort_G g-busorg ads806817
+ Ref: gnat_rm/the_gnat_library gnat-bubble-sort-g-g-busorg-ads806984
+ Ref: 329806984
+ Ref: gnat_rm/the_gnat_library id43806984
+ Ref: 32a806984
+ Node: GNAT Byte_Order_Mark g-byorma ads807328
+ Ref: gnat_rm/the_gnat_library gnat-byte-order-mark-g-byorma-ads807495
+ Ref: 32b807495
+ Ref: gnat_rm/the_gnat_library id44807495
+ Ref: 32c807495
+ Node: GNAT Byte_Swapping g-bytswa ads807865
+ Ref: gnat_rm/the_gnat_library gnat-byte-swapping-g-bytswa-ads808027
+ Ref: 32d808027
+ Ref: gnat_rm/the_gnat_library id45808027
+ Ref: 32e808027
+ Node: GNAT Calendar g-calend ads808262
+ Ref: gnat_rm/the_gnat_library gnat-calendar-g-calend-ads808425
+ Ref: 32f808425
+ Ref: gnat_rm/the_gnat_library id46808425
+ Ref: 330808425
+ Node: GNAT Calendar Time_IO g-catiio ads808762
+ Ref: gnat_rm/the_gnat_library gnat-calendar-time-io-g-catiio-ads808916
+ Ref: 331808916
+ Ref: gnat_rm/the_gnat_library id47808916
+ Ref: 332808916
+ Node: GNAT CRC32 g-crc32 ads809019
+ Ref: gnat_rm/the_gnat_library gnat-crc32-g-crc32-ads809174
+ Ref: 333809174
+ Ref: gnat_rm/the_gnat_library id48809174
+ Ref: 334809174
+ Node: GNAT Case_Util g-casuti ads809504
+ Ref: gnat_rm/the_gnat_library gnat-case-util-g-casuti-ads809643
+ Ref: 335809643
+ Ref: gnat_rm/the_gnat_library id49809643
+ Ref: 336809643
+ Node: GNAT CGI g-cgi ads809886
+ Ref: gnat_rm/the_gnat_library gnat-cgi-g-cgi-ads810031
+ Ref: 337810031
+ Ref: gnat_rm/the_gnat_library id50810031
+ Ref: 338810031
+ Node: GNAT CGI Cookie g-cgicoo ads810413
+ Ref: gnat_rm/the_gnat_library gnat-cgi-cookie-g-cgicoo-ads810558
+ Ref: 339810558
+ Ref: gnat_rm/the_gnat_library id51810558
+ Ref: 33a810558
+ Node: GNAT CGI Debug g-cgideb ads810855
+ Ref: gnat_rm/the_gnat_library gnat-cgi-debug-g-cgideb-ads811012
+ Ref: 33b811012
+ Ref: gnat_rm/the_gnat_library id52811012
+ Ref: 33c811012
+ Node: GNAT Command_Line g-comlin ads811194
+ Ref: gnat_rm/the_gnat_library gnat-command-line-g-comlin-ads811357
+ Ref: 33d811357
+ Ref: gnat_rm/the_gnat_library id53811357
+ Ref: 33e811357
+ Node: GNAT Compiler_Version g-comver ads811645
+ Ref: gnat_rm/the_gnat_library gnat-compiler-version-g-comver-ads811805
+ Ref: 33f811805
+ Ref: gnat_rm/the_gnat_library id54811805
+ Ref: 340811805
+ Node: GNAT Ctrl_C g-ctrl_c ads812209
+ Ref: gnat_rm/the_gnat_library gnat-ctrl-c-g-ctrl-c-ads812374
+ Ref: 341812374
+ Ref: gnat_rm/the_gnat_library id55812374
+ Ref: 342812374
+ Node: GNAT Current_Exception g-curexc ads812520
+ Ref: gnat_rm/the_gnat_library gnat-current-exception-g-curexc-ads812680
+ Ref: 343812680
+ Ref: gnat_rm/the_gnat_library id56812680
+ Ref: 344812680
+ Node: GNAT Debug_Pools g-debpoo ads813096
+ Ref: gnat_rm/the_gnat_library gnat-debug-pools-g-debpoo-ads813265
+ Ref: 345813265
+ Ref: gnat_rm/the_gnat_library id57813265
+ Ref: 346813265
+ Node: GNAT Debug_Utilities g-debuti ads813524
+ Ref: gnat_rm/the_gnat_library gnat-debug-utilities-g-debuti-ads813689
+ Ref: 347813689
+ Ref: gnat_rm/the_gnat_library id58813689
+ Ref: 348813689
+ Node: GNAT Decode_String g-decstr ads813972
+ Ref: gnat_rm/the_gnat_library gnat-decode-string-g-decstr-ads814144
+ Ref: 349814144
+ Ref: gnat_rm/the_gnat_library id59814144
+ Ref: 34a814144
+ Node: GNAT Decode_UTF8_String g-deutst ads814652
+ Ref: gnat_rm/the_gnat_library gnat-decode-utf8-string-g-deutst-ads814829
+ Ref: 34b814829
+ Ref: gnat_rm/the_gnat_library id60814829
+ Ref: 34c814829
+ Node: GNAT Directory_Operations g-dirope ads814999
+ Ref: gnat_rm/the_gnat_library gnat-directory-operations-g-dirope-ads815193
+ Ref: 34d815193
+ Ref: gnat_rm/the_gnat_library id61815193
+ Ref: 34e815193
+ Node: GNAT Directory_Operations Iteration g-diopit ads815467
+ Ref: gnat_rm/the_gnat_library gnat-directory-operations-iteration-g-diopit-ads815658
+ Ref: 34f815658
+ Ref: gnat_rm/the_gnat_library id62815658
+ Ref: 350815658
+ Node: GNAT Dynamic_HTables g-dynhta ads815899
+ Ref: gnat_rm/the_gnat_library gnat-dynamic-htables-g-dynhta-ads816084
+ Ref: 351816084
+ Ref: gnat_rm/the_gnat_library id63816084
+ Ref: 352816084
+ Node: GNAT Dynamic_Tables g-dyntab ads816665
+ Ref: gnat_rm/the_gnat_library gnat-dynamic-tables-g-dyntab-ads816833
+ Ref: 353816833
+ Ref: gnat_rm/the_gnat_library id64816833
+ Ref: 354816833
+ Node: GNAT Encode_String g-encstr ads817316
+ Ref: gnat_rm/the_gnat_library gnat-encode-string-g-encstr-ads817487
+ Ref: 355817487
+ Ref: gnat_rm/the_gnat_library id65817487
+ Ref: 356817487
+ Node: GNAT Encode_UTF8_String g-enutst ads817866
+ Ref: gnat_rm/the_gnat_library gnat-encode-utf8-string-g-enutst-ads818040
+ Ref: 357818040
+ Ref: gnat_rm/the_gnat_library id66818040
+ Ref: 358818040
+ Node: GNAT Exception_Actions g-excact ads818210
+ Ref: gnat_rm/the_gnat_library gnat-exception-actions-g-excact-ads818387
+ Ref: 359818387
+ Ref: gnat_rm/the_gnat_library id67818387
+ Ref: 35a818387
+ Node: GNAT Exception_Traces g-exctra ads818698
+ Ref: gnat_rm/the_gnat_library gnat-exception-traces-g-exctra-ads818867
+ Ref: 35b818867
+ Ref: gnat_rm/the_gnat_library id68818867
+ Ref: 35c818867
+ Node: GNAT Exceptions g-except ads819058
+ Ref: gnat_rm/the_gnat_library gnat-exceptions-g-except-ads819216
+ Ref: 35d819216
+ Ref: gnat_rm/the_gnat_library id69819216
+ Ref: 35e819216
+ Node: GNAT Expect g-expect ads819710
+ Ref: gnat_rm/the_gnat_library gnat-expect-g-expect-ads819862
+ Ref: 35f819862
+ Ref: gnat_rm/the_gnat_library id70819862
+ Ref: 360819862
+ Node: GNAT Expect TTY g-exptty ads820393
+ Ref: gnat_rm/the_gnat_library gnat-expect-tty-g-exptty-ads820548
+ Ref: 361820548
+ Ref: gnat_rm/the_gnat_library id71820548
+ Ref: 362820548
+ Node: GNAT Float_Control g-flocon ads820856
+ Ref: gnat_rm/the_gnat_library gnat-float-control-g-flocon-ads821021
+ Ref: 363821021
+ Ref: gnat_rm/the_gnat_library id72821021
+ Ref: 364821021
+ Node: GNAT Formatted_String g-forstr ads821400
+ Ref: gnat_rm/the_gnat_library gnat-formatted-string-g-forstr-ads821582
+ Ref: 365821582
+ Ref: gnat_rm/the_gnat_library id73821582
+ Ref: 366821582
+ Node: GNAT Generic_Fast_Math_Functions g-gfmafu ads821973
+ Ref: gnat_rm/the_gnat_library gnat-generic-fast-math-functions-g-gfmafu-ads822151
+ Ref: 367822151
+ Ref: gnat_rm/the_gnat_library id74822151
+ Ref: 368822151
+ Node: GNAT Heap_Sort g-heasor ads822824
+ Ref: gnat_rm/the_gnat_library gnat-heap-sort-g-heasor-ads822997
+ Ref: 369822997
+ Ref: gnat_rm/the_gnat_library id75822997
+ Ref: 36a822997
+ Node: GNAT Heap_Sort_A g-hesora ads823375
+ Ref: gnat_rm/the_gnat_library gnat-heap-sort-a-g-hesora-ads823532
+ Ref: 36b823532
+ Ref: gnat_rm/the_gnat_library id76823532
+ Ref: 36c823532
+ Node: GNAT Heap_Sort_G g-hesorg ads824025
+ Ref: gnat_rm/the_gnat_library gnat-heap-sort-g-g-hesorg-ads824179
+ Ref: 36d824179
+ Ref: gnat_rm/the_gnat_library id77824179
+ Ref: 36e824179
+ Node: GNAT HTable g-htable ads824517
+ Ref: gnat_rm/the_gnat_library gnat-htable-g-htable-ads824658
+ Ref: 36f824658
+ Ref: gnat_rm/the_gnat_library id78824658
+ Ref: 370824658
+ Node: GNAT IO g-io ads824933
+ Ref: gnat_rm/the_gnat_library gnat-io-g-io-ads825069
+ Ref: 371825069
+ Ref: gnat_rm/the_gnat_library id79825069
+ Ref: 372825069
+ Node: GNAT IO_Aux g-io_aux ads825378
+ Ref: gnat_rm/the_gnat_library gnat-io-aux-g-io-aux-ads825518
+ Ref: 373825518
+ Ref: gnat_rm/the_gnat_library id80825518
+ Ref: 374825518
+ Node: GNAT Lock_Files g-locfil ads825744
+ Ref: gnat_rm/the_gnat_library gnat-lock-files-g-locfil-ads825906
+ Ref: 375825906
+ Ref: gnat_rm/the_gnat_library id81825906
+ Ref: 376825906
+ Node: GNAT MBBS_Discrete_Random g-mbdira ads826111
+ Ref: gnat_rm/the_gnat_library gnat-mbbs-discrete-random-g-mbdira-ads826284
+ Ref: 377826284
+ Ref: gnat_rm/the_gnat_library id82826284
+ Ref: 378826284
+ Node: GNAT MBBS_Float_Random g-mbflra ads826521
+ Ref: gnat_rm/the_gnat_library gnat-mbbs-float-random-g-mbflra-ads826684
+ Ref: 379826684
+ Ref: gnat_rm/the_gnat_library id83826684
+ Ref: 37a826684
+ Node: GNAT MD5 g-md5 ads826912
+ Ref: gnat_rm/the_gnat_library gnat-md5-g-md5-ads827066
+ Ref: 37b827066
+ Ref: gnat_rm/the_gnat_library id84827066
+ Ref: 37c827066
+ Node: GNAT Memory_Dump g-memdum ads827300
+ Ref: gnat_rm/the_gnat_library gnat-memory-dump-g-memdum-ads827458
+ Ref: 37d827458
+ Ref: gnat_rm/the_gnat_library id85827458
+ Ref: 37e827458
+ Node: GNAT Most_Recent_Exception g-moreex ads827693
+ Ref: gnat_rm/the_gnat_library gnat-most-recent-exception-g-moreex-ads827857
+ Ref: 37f827857
+ Ref: gnat_rm/the_gnat_library id86827857
+ Ref: 380827857
+ Node: GNAT OS_Lib g-os_lib ads828157
+ Ref: gnat_rm/the_gnat_library gnat-os-lib-g-os-lib-ads828333
+ Ref: 381828333
+ Ref: gnat_rm/the_gnat_library id87828333
+ Ref: 382828333
+ Node: GNAT Perfect_Hash_Generators g-pehage ads828664
+ Ref: gnat_rm/the_gnat_library gnat-perfect-hash-generators-g-pehage-ads828833
+ Ref: 383828833
+ Ref: gnat_rm/the_gnat_library id88828833
+ Ref: 384828833
+ Node: GNAT Random_Numbers g-rannum ads829485
+ Ref: gnat_rm/the_gnat_library gnat-random-numbers-g-rannum-ads829654
+ Ref: 385829654
+ Ref: gnat_rm/the_gnat_library id89829654
+ Ref: 386829654
+ Node: GNAT Regexp g-regexp ads829879
+ Ref: gnat_rm/the_gnat_library gnat-regexp-g-regexp-ads830033
+ Ref: 25c830033
+ Ref: gnat_rm/the_gnat_library id90830033
+ Ref: 387830033
+ Node: GNAT Registry g-regist ads830389
+ Ref: gnat_rm/the_gnat_library gnat-registry-g-regist-ads830535
+ Ref: 388830535
+ Ref: gnat_rm/the_gnat_library id91830535
+ Ref: 389830535
+ Node: GNAT Regpat g-regpat ads830889
+ Ref: gnat_rm/the_gnat_library gnat-regpat-g-regpat-ads831041
+ Ref: 38a831041
+ Ref: gnat_rm/the_gnat_library id92831041
+ Ref: 38b831041
+ Node: GNAT Rewrite_Data g-rewdat ads831330
+ Ref: gnat_rm/the_gnat_library gnat-rewrite-data-g-rewdat-ads831494
+ Ref: 38c831494
+ Ref: gnat_rm/the_gnat_library id93831494
+ Ref: 38d831494
+ Node: GNAT Secondary_Stack_Info g-sestin ads831858
+ Ref: gnat_rm/the_gnat_library gnat-secondary-stack-info-g-sestin-ads832026
+ Ref: 38e832026
+ Ref: gnat_rm/the_gnat_library id94832026
+ Ref: 38f832026
+ Node: GNAT Semaphores g-semaph ads832232
+ Ref: gnat_rm/the_gnat_library gnat-semaphores-g-semaph-ads832409
+ Ref: 390832409
+ Ref: gnat_rm/the_gnat_library id95832409
+ Ref: 391832409
+ Node: GNAT Serial_Communications g-sercom ads832572
+ Ref: gnat_rm/the_gnat_library gnat-serial-communications-g-sercom-ads832731
+ Ref: 392832731
+ Ref: gnat_rm/the_gnat_library id96832731
+ Ref: 393832731
+ Node: GNAT SHA1 g-sha1 ads832967
+ Ref: gnat_rm/the_gnat_library gnat-sha1-g-sha1-ads833122
+ Ref: 394833122
+ Ref: gnat_rm/the_gnat_library id97833122
+ Ref: 395833122
+ Node: GNAT SHA224 g-sha224 ads833379
+ Ref: gnat_rm/the_gnat_library gnat-sha224-g-sha224-ads833519
+ Ref: 396833519
+ Ref: gnat_rm/the_gnat_library id98833519
+ Ref: 397833519
+ Node: GNAT SHA256 g-sha256 ads833775
+ Ref: gnat_rm/the_gnat_library gnat-sha256-g-sha256-ads833919
+ Ref: 398833919
+ Ref: gnat_rm/the_gnat_library id99833919
+ Ref: 399833919
+ Node: GNAT SHA384 g-sha384 ads834175
+ Ref: gnat_rm/the_gnat_library gnat-sha384-g-sha384-ads834319
+ Ref: 39a834319
+ Ref: gnat_rm/the_gnat_library id100834319
+ Ref: 39b834319
+ Node: GNAT SHA512 g-sha512 ads834575
+ Ref: gnat_rm/the_gnat_library gnat-sha512-g-sha512-ads834720
+ Ref: 39c834720
+ Ref: gnat_rm/the_gnat_library id101834720
+ Ref: 39d834720
+ Node: GNAT Signals g-signal ads834978
+ Ref: gnat_rm/the_gnat_library gnat-signals-g-signal-ads835124
+ Ref: 39e835124
+ Ref: gnat_rm/the_gnat_library id102835124
+ Ref: 39f835124
+ Node: GNAT Sockets g-socket ads835299
+ Ref: gnat_rm/the_gnat_library gnat-sockets-g-socket-ads835450
+ Ref: 3a0835450
+ Ref: gnat_rm/the_gnat_library id103835450
+ Ref: 3a1835450
+ Node: GNAT Source_Info g-souinf ads835846
+ Ref: gnat_rm/the_gnat_library gnat-source-info-g-souinf-ads836006
+ Ref: 3a2836006
+ Ref: gnat_rm/the_gnat_library id104836006
+ Ref: 3a3836006
+ Node: GNAT Spelling_Checker g-speche ads836372
+ Ref: gnat_rm/the_gnat_library gnat-spelling-checker-g-speche-ads836549
+ Ref: 3a4836549
+ Ref: gnat_rm/the_gnat_library id105836549
+ Ref: 3a5836549
+ Node: GNAT Spelling_Checker_Generic g-spchge ads836761
+ Ref: gnat_rm/the_gnat_library gnat-spelling-checker-generic-g-spchge-ads836943
+ Ref: 3a6836943
+ Ref: gnat_rm/the_gnat_library id106836943
+ Ref: 3a7836943
+ Node: GNAT Spitbol Patterns g-spipat ads837223
+ Ref: gnat_rm/the_gnat_library gnat-spitbol-patterns-g-spipat-ads837396
+ Ref: 3a8837396
+ Ref: gnat_rm/the_gnat_library id107837396
+ Ref: 3a9837396
+ Node: GNAT Spitbol g-spitbo ads837803
+ Ref: gnat_rm/the_gnat_library gnat-spitbol-g-spitbo-ads837973
+ Ref: 3aa837973
+ Ref: gnat_rm/the_gnat_library id108837973
+ Ref: 3ab837973
+ Node: GNAT Spitbol Table_Boolean g-sptabo ads838383
+ Ref: gnat_rm/the_gnat_library gnat-spitbol-table-boolean-g-sptabo-ads838558
+ Ref: 3ac838558
+ Ref: gnat_rm/the_gnat_library id109838558
+ Ref: 3ad838558
+ Node: GNAT Spitbol Table_Integer g-sptain ads838828
+ Ref: gnat_rm/the_gnat_library gnat-spitbol-table-integer-g-sptain-ads839017
+ Ref: 3ae839017
+ Ref: gnat_rm/the_gnat_library id110839017
+ Ref: 3af839017
+ Node: GNAT Spitbol Table_VString g-sptavs ads839300
+ Ref: gnat_rm/the_gnat_library gnat-spitbol-table-vstring-g-sptavs-ads839468
+ Ref: 3b0839468
+ Ref: gnat_rm/the_gnat_library id111839468
+ Ref: 3b1839468
+ Node: GNAT SSE g-sse ads839755
+ Ref: gnat_rm/the_gnat_library gnat-sse-g-sse-ads839918
+ Ref: 3b2839918
+ Ref: gnat_rm/the_gnat_library id112839918
+ Ref: 3b3839918
+ Node: GNAT SSE Vector_Types g-ssvety ads840245
+ Ref: gnat_rm/the_gnat_library gnat-sse-vector-types-g-ssvety-ads840398
+ Ref: 3b4840398
+ Ref: gnat_rm/the_gnat_library id113840398
+ Ref: 3b5840398
+ Node: GNAT String_Hash g-strhas ads840558
+ Ref: gnat_rm/the_gnat_library gnat-string-hash-g-strhas-ads840718
+ Ref: 3b6840718
+ Ref: gnat_rm/the_gnat_library id114840718
+ Ref: 3b7840718
+ Node: GNAT Strings g-string ads840940
+ Ref: gnat_rm/the_gnat_library gnat-strings-g-string-ads841096
+ Ref: 3b8841096
+ Ref: gnat_rm/the_gnat_library id115841096
+ Ref: 3b9841096
+ Node: GNAT String_Split g-strspl ads841311
+ Ref: gnat_rm/the_gnat_library gnat-string-split-g-strspl-ads841460
+ Ref: 3ba841460
+ Ref: gnat_rm/the_gnat_library id116841460
+ Ref: 3bb841460
+ Node: GNAT Table g-table ads841779
+ Ref: gnat_rm/the_gnat_library gnat-table-g-table-ads841930
+ Ref: 3bc841930
+ Ref: gnat_rm/the_gnat_library id117841930
+ Ref: 3bd841930
+ Node: GNAT Task_Lock g-tasloc ads842413
+ Ref: gnat_rm/the_gnat_library gnat-task-lock-g-tasloc-ads842562
+ Ref: 3be842562
+ Ref: gnat_rm/the_gnat_library id118842562
+ Ref: 3bf842562
+ Node: GNAT Time_Stamp g-timsta ads842844
+ Ref: gnat_rm/the_gnat_library gnat-time-stamp-g-timsta-ads842996
+ Ref: 3c0842996
+ Ref: gnat_rm/the_gnat_library id119842996
+ Ref: 3c1842996
+ Node: GNAT Threads g-thread ads843322
+ Ref: gnat_rm/the_gnat_library gnat-threads-g-thread-ads843474
+ Ref: 3c2843474
+ Ref: gnat_rm/the_gnat_library id120843474
+ Ref: 3c3843474
+ Node: GNAT Traceback g-traceb ads843830
+ Ref: gnat_rm/the_gnat_library gnat-traceback-g-traceb-ads843990
+ Ref: 3c4843990
+ Ref: gnat_rm/the_gnat_library id121843990
+ Ref: 3c5843990
+ Node: GNAT Traceback Symbolic g-trasym ads844192
+ Ref: gnat_rm/the_gnat_library gnat-traceback-symbolic-g-trasym-ads844351
+ Ref: 3c6844351
+ Ref: gnat_rm/the_gnat_library id122844351
+ Ref: 3c7844351
+ Node: GNAT UTF_32 g-utf_32 ads844460
+ Ref: gnat_rm/the_gnat_library gnat-utf-32-g-utf-32-ads844633
+ Ref: 3c8844633
+ Ref: gnat_rm/the_gnat_library id123844633
+ Ref: 3c9844633
+ Node: GNAT UTF_32_Spelling_Checker g-u3spch ads845197
+ Ref: gnat_rm/the_gnat_library gnat-utf-32-spelling-checker-g-u3spch-ads845373
+ Ref: 3ca845373
+ Ref: gnat_rm/the_gnat_library id124845373
+ Ref: 3cb845373
+ Node: GNAT Wide_Spelling_Checker g-wispch ads845709
+ Ref: gnat_rm/the_gnat_library gnat-wide-spelling-checker-g-wispch-ads845896
+ Ref: 3cc845896
+ Ref: gnat_rm/the_gnat_library id125845896
+ Ref: 3cd845896
+ Node: GNAT Wide_String_Split g-wistsp ads846128
+ Ref: gnat_rm/the_gnat_library gnat-wide-string-split-g-wistsp-ads846318
+ Ref: 3ce846318
+ Ref: gnat_rm/the_gnat_library id126846318
+ Ref: 3cf846318
+ Node: GNAT Wide_Wide_Spelling_Checker g-zspche ads846657
+ Ref: gnat_rm/the_gnat_library gnat-wide-wide-spelling-checker-g-zspche-ads846848
+ Ref: 3d0846848
+ Ref: gnat_rm/the_gnat_library id127846848
+ Ref: 3d1846848
+ Node: GNAT Wide_Wide_String_Split g-zistsp ads847100
+ Ref: gnat_rm/the_gnat_library gnat-wide-wide-string-split-g-zistsp-ads847292
+ Ref: 3d2847292
+ Ref: gnat_rm/the_gnat_library id128847292
+ Ref: 3d3847292
+ Node: Interfaces C Extensions i-cexten ads847651
+ Ref: gnat_rm/the_gnat_library id129847832
+ Ref: 3d4847832
+ Ref: gnat_rm/the_gnat_library interfaces-c-extensions-i-cexten-ads847832
+ Ref: 3d5847832
+ Node: Interfaces C Streams i-cstrea ads848088
+ Ref: gnat_rm/the_gnat_library id130848267
+ Ref: 3d6848267
+ Ref: gnat_rm/the_gnat_library interfaces-c-streams-i-cstrea-ads848267
+ Ref: 3d7848267
+ Node: Interfaces Packed_Decimal i-pacdec ads848449
+ Ref: gnat_rm/the_gnat_library id131848623
+ Ref: 3d8848623
+ Ref: gnat_rm/the_gnat_library interfaces-packed-decimal-i-pacdec-ads848623
+ Ref: 3d9848623
+ Node: Interfaces VxWorks i-vxwork ads848874
+ Ref: gnat_rm/the_gnat_library id132849061
+ Ref: 3da849061
+ Ref: gnat_rm/the_gnat_library interfaces-vxworks-i-vxwork-ads849061
+ Ref: 3db849061
+ Node: Interfaces VxWorks Int_Connection i-vxinco ads849298
+ Ref: gnat_rm/the_gnat_library id133849481
+ Ref: 3dc849481
+ Ref: gnat_rm/the_gnat_library interfaces-vxworks-int-connection-i-vxinco-ads849481
+ Ref: 3dd849481
+ Node: Interfaces VxWorks IO i-vxwoio ads849741
+ Ref: gnat_rm/the_gnat_library id134849926
+ Ref: 3de849926
+ Ref: gnat_rm/the_gnat_library interfaces-vxworks-io-i-vxwoio-ads849926
+ Ref: 3df849926
+ Node: System Address_Image s-addima ads850250
+ Ref: gnat_rm/the_gnat_library id135850419
+ Ref: 3e0850419
+ Ref: gnat_rm/the_gnat_library system-address-image-s-addima-ads850419
+ Ref: 3e1850419
+ Node: System Assertions s-assert ads850651
+ Ref: gnat_rm/the_gnat_library id136850821
+ Ref: 3e2850821
+ Ref: gnat_rm/the_gnat_library system-assertions-s-assert-ads850821
+ Ref: 3e3850821
+ Node: System Atomic_Counters s-atocou ads851087
+ Ref: gnat_rm/the_gnat_library id137851250
+ Ref: 3e4851250
+ Ref: gnat_rm/the_gnat_library system-atomic-counters-s-atocou-ads851250
+ Ref: 3e5851250
+ Node: System Memory s-memory ads851696
+ Ref: gnat_rm/the_gnat_library id138851864
+ Ref: 3e6851864
+ Ref: gnat_rm/the_gnat_library system-memory-s-memory-ads851864
+ Ref: 3e7851864
+ Node: System Multiprocessors s-multip ads852472
+ Ref: gnat_rm/the_gnat_library id139852660
+ Ref: 3e8852660
+ Ref: gnat_rm/the_gnat_library system-multiprocessors-s-multip-ads852660
+ Ref: 3e9852660
+ Node: System Multiprocessors Dispatching_Domains s-mudido ads852958
+ Ref: gnat_rm/the_gnat_library id140853159
+ Ref: 3ea853159
+ Ref: gnat_rm/the_gnat_library system-multiprocessors-dispatching-domains-s-mudido-ads853159
+ Ref: 3eb853159
+ Node: System Partition_Interface s-parint ads853497
+ Ref: gnat_rm/the_gnat_library id141853694
+ Ref: 3ec853694
+ Ref: gnat_rm/the_gnat_library system-partition-interface-s-parint-ads853694
+ Ref: 3ed853694
+ Node: System Pool_Global s-pooglo ads853955
+ Ref: gnat_rm/the_gnat_library id142854127
+ Ref: 3ee854127
+ Ref: gnat_rm/the_gnat_library system-pool-global-s-pooglo-ads854127
+ Ref: 3ef854127
+ Node: System Pool_Local s-pooloc ads854469
+ Ref: gnat_rm/the_gnat_library id143854634
+ Ref: 3f0854634
+ Ref: gnat_rm/the_gnat_library system-pool-local-s-pooloc-ads854634
+ Ref: 3f1854634
+ Node: System Restrictions s-restri ads855009
+ Ref: gnat_rm/the_gnat_library id144855169
+ Ref: 3f2855169
+ Ref: gnat_rm/the_gnat_library system-restrictions-s-restri-ads855169
+ Ref: 3f3855169
+ Node: System Rident s-rident ads855607
+ Ref: gnat_rm/the_gnat_library id145855775
+ Ref: 3f4855775
+ Ref: gnat_rm/the_gnat_library system-rident-s-rident-ads855775
+ Ref: 3f5855775
+ Node: System Strings Stream_Ops s-ststop ads856174
+ Ref: gnat_rm/the_gnat_library id146856344
+ Ref: 3f6856344
+ Ref: gnat_rm/the_gnat_library system-strings-stream-ops-s-ststop-ads856344
+ Ref: 3f7856344
+ Node: System Unsigned_Types s-unstyp ads856739
+ Ref: gnat_rm/the_gnat_library id147856910
+ Ref: 3f8856910
+ Ref: gnat_rm/the_gnat_library system-unsigned-types-s-unstyp-ads856910
+ Ref: 3f9856910
+ Node: System Wch_Cnv s-wchcnv ads857346
+ Ref: gnat_rm/the_gnat_library id148857506
+ Ref: 3fa857506
+ Ref: gnat_rm/the_gnat_library system-wch-cnv-s-wchcnv-ads857506
+ Ref: 3fb857506
+ Node: System Wch_Con s-wchcon ads857849
+ Ref: gnat_rm/the_gnat_library id149857966
+ Ref: 3fc857966
+ Ref: gnat_rm/the_gnat_library system-wch-con-s-wchcon-ads857966
+ Ref: 3fd857966
+ Node: Interfacing to Other Languages858252
+ Ref: gnat_rm/interfacing_to_other_languages doc858382
+ Ref: 3fe858382
+ Ref: gnat_rm/interfacing_to_other_languages id1858382
+ Ref: 3ff858382
+ Ref: gnat_rm/interfacing_to_other_languages interfacing-to-other-languages858382
+ Ref: 11858382
+ Node: Interfacing to C858734
+ Ref: gnat_rm/interfacing_to_other_languages id2858845
+ Ref: 400858845
+ Ref: gnat_rm/interfacing_to_other_languages interfacing-to-c858845
+ Ref: 401858845
+ Node: Interfacing to C++861648
+ Ref: gnat_rm/interfacing_to_other_languages id3861788
+ Ref: 47861788
+ Ref: gnat_rm/interfacing_to_other_languages id4861788
+ Ref: 402861788
+ Node: Interfacing to COBOL863996
+ Ref: gnat_rm/interfacing_to_other_languages id5864142
+ Ref: 403864142
+ Ref: gnat_rm/interfacing_to_other_languages interfacing-to-cobol864142
+ Ref: 404864142
+ Node: Interfacing to Fortran864286
+ Ref: gnat_rm/interfacing_to_other_languages id6864446
+ Ref: 405864446
+ Ref: gnat_rm/interfacing_to_other_languages interfacing-to-fortran864446
+ Ref: 406864446
+ Node: Interfacing to non-GNAT Ada code864772
+ Ref: gnat_rm/interfacing_to_other_languages id7864903
+ Ref: 407864903
+ Ref: gnat_rm/interfacing_to_other_languages interfacing-to-non-gnat-ada-code864903
+ Ref: 408864903
+ Node: Specialized Needs Annexes865930
+ Ref: gnat_rm/specialized_needs_annexes doc866083
+ Ref: 409866083
+ Ref: gnat_rm/specialized_needs_annexes id1866083
+ Ref: 40a866083
+ Ref: gnat_rm/specialized_needs_annexes specialized-needs-annexes866083
+ Ref: 12866083
+ Node: Implementation of Specific Ada Features867178
+ Ref: gnat_rm/implementation_of_specific_ada_features doc867336
+ Ref: 40b867336
+ Ref: gnat_rm/implementation_of_specific_ada_features id1867336
+ Ref: 40c867336
+ Ref: gnat_rm/implementation_of_specific_ada_features implementation-of-specific-ada-features867336
+ Ref: 13867336
+ Node: Machine Code Insertions867825
+ Ref: gnat_rm/implementation_of_specific_ada_features id2867964
+ Ref: 40d867964
+ Ref: gnat_rm/implementation_of_specific_ada_features machine-code-insertions867964
+ Ref: 166867964
+ Node: GNAT Implementation of Tasking875390
+ Ref: gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-tasking875584
+ Ref: 40e875584
+ Ref: gnat_rm/implementation_of_specific_ada_features id3875584
+ Ref: 40f875584
+ Node: Mapping Ada Tasks onto the Underlying Kernel Threads875998
+ Ref: gnat_rm/implementation_of_specific_ada_features id4876171
+ Ref: 410876171
+ Ref: gnat_rm/implementation_of_specific_ada_features mapping-ada-tasks-onto-the-underlying-kernel-threads876171
+ Ref: 411876171
+ Node: Ensuring Compliance with the Real-Time Annex878327
+ Ref: gnat_rm/implementation_of_specific_ada_features ensuring-compliance-with-the-real-time-annex878537
+ Ref: 412878537
+ Ref: gnat_rm/implementation_of_specific_ada_features id5878537
+ Ref: 413878537
+ Node: Support for Locking Policies880453
+ Ref: gnat_rm/implementation_of_specific_ada_features support-for-locking-policies880602
+ Ref: 414880602
+ Node: GNAT Implementation of Shared Passive Packages881761
+ Ref: gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-shared-passive-packages881968
+ Ref: 415881968
+ Ref: gnat_rm/implementation_of_specific_ada_features id6881968
+ Ref: 416881968
+ Node: Code Generation for Array Aggregates885094
+ Ref: gnat_rm/implementation_of_specific_ada_features code-generation-for-array-aggregates885331
+ Ref: 417885331
+ Ref: gnat_rm/implementation_of_specific_ada_features id7885331
+ Ref: 418885331
+ Node: Static constant aggregates with static bounds886754
+ Ref: gnat_rm/implementation_of_specific_ada_features id8886934
+ Ref: 419886934
+ Ref: gnat_rm/implementation_of_specific_ada_features static-constant-aggregates-with-static-bounds886934
+ Ref: 41a886934
+ Node: Constant aggregates with unconstrained nominal types888337
+ Ref: gnat_rm/implementation_of_specific_ada_features constant-aggregates-with-unconstrained-nominal-types888555
+ Ref: 41b888555
+ Ref: gnat_rm/implementation_of_specific_ada_features id9888555
+ Ref: 41c888555
+ Node: Aggregates with static bounds889055
+ Ref: gnat_rm/implementation_of_specific_ada_features aggregates-with-static-bounds889260
+ Ref: 41d889260
+ Ref: gnat_rm/implementation_of_specific_ada_features id10889260
+ Ref: 41e889260
+ Node: Aggregates with nonstatic bounds889894
+ Ref: gnat_rm/implementation_of_specific_ada_features aggregates-with-nonstatic-bounds890082
+ Ref: 41f890082
+ Ref: gnat_rm/implementation_of_specific_ada_features id11890082
+ Ref: 420890082
+ Node: Aggregates in assignment statements890490
+ Ref: gnat_rm/implementation_of_specific_ada_features aggregates-in-assignment-statements890640
+ Ref: 421890640
+ Ref: gnat_rm/implementation_of_specific_ada_features id12890640
+ Ref: 422890640
+ Node: The Size of Discriminated Records with Default Discriminants891898
+ Ref: gnat_rm/implementation_of_specific_ada_features id13892121
+ Ref: 423892121
+ Ref: gnat_rm/implementation_of_specific_ada_features the-size-of-discriminated-records-with-default-discriminants892121
+ Ref: 424892121
+ Node: Image Values For Nonscalar Types895073
+ Ref: gnat_rm/implementation_of_specific_ada_features id14895306
+ Ref: 425895306
+ Ref: gnat_rm/implementation_of_specific_ada_features image-values-for-nonscalar-types895306
+ Ref: 426895306
+ Node: Strict Conformance to the Ada Reference Manual896369
+ Ref: gnat_rm/implementation_of_specific_ada_features id15896533
+ Ref: 427896533
+ Ref: gnat_rm/implementation_of_specific_ada_features strict-conformance-to-the-ada-reference-manual896533
+ Ref: 428896533
+ Node: Implementation of Ada 2012 Features897976
+ Ref: gnat_rm/implementation_of_ada_2012_features doc898136
+ Ref: 429898136
+ Ref: gnat_rm/implementation_of_ada_2012_features id1898136
+ Ref: 42a898136
+ Ref: gnat_rm/implementation_of_ada_2012_features implementation-of-ada-2012-features898136
+ Ref: 14898136
+ Node: Security Hardening Features947080
+ Ref: gnat_rm/security_hardening_features doc947221
+ Ref: 42b947221
+ Ref: gnat_rm/security_hardening_features id1947221
+ Ref: 42c947221
+ Ref: gnat_rm/security_hardening_features security-hardening-features947221
+ Ref: 15947221
+ Node: Register Scrubbing947587
+ Ref: gnat_rm/security_hardening_features register-scrubbing947694
+ Ref: 42d947694
+ Node: Stack Scrubbing948603
+ Ref: gnat_rm/security_hardening_features stack-scrubbing948740
+ Ref: 42e948740
+ Node: Hardened Conditionals953721
+ Ref: gnat_rm/security_hardening_features hardened-conditionals953857
+ Ref: 42f953857
+ Node: Hardened Booleans956459
+ Ref: gnat_rm/security_hardening_features hardened-booleans956603
+ Ref: 430956603
+ Node: Control Flow Redundancy958481
+ Ref: gnat_rm/security_hardening_features control-flow-redundancy958595
+ Ref: 431958595
+ Node: Obsolescent Features964279
+ Ref: gnat_rm/obsolescent_features doc964416
+ Ref: 432964416
+ Ref: gnat_rm/obsolescent_features id1964416
+ Ref: 433964416
+ Ref: gnat_rm/obsolescent_features obsolescent-features964416
+ Ref: 16964416
+ Node: pragma No_Run_Time964880
+ Ref: gnat_rm/obsolescent_features id2964981
+ Ref: 434964981
+ Ref: gnat_rm/obsolescent_features pragma-no-run-time964981
+ Ref: 435964981
+ Node: pragma Ravenscar965513
+ Ref: gnat_rm/obsolescent_features id3965649
+ Ref: 436965649
+ Ref: gnat_rm/obsolescent_features pragma-ravenscar965649
+ Ref: 437965649
+ Node: pragma Restricted_Run_Time965865
+ Ref: gnat_rm/obsolescent_features id4965999
+ Ref: 438965999
+ Ref: gnat_rm/obsolescent_features pragma-restricted-run-time965999
+ Ref: 439965999
+ Node: pragma Task_Info966303
+ Ref: gnat_rm/obsolescent_features id5966458
+ Ref: 43a966458
+ Ref: gnat_rm/obsolescent_features pragma-task-info966458
+ Ref: 43b966458
+ Node: package System Task_Info s-tasinf ads967323
+ Ref: gnat_rm/obsolescent_features package-system-task-info967443
+ Ref: 43c967443
+ Ref: gnat_rm/obsolescent_features package-system-task-info-s-tasinf-ads967443
+ Ref: 43d967443
+ Node: Compatibility and Porting Guide967809
+ Ref: gnat_rm/compatibility_and_porting_guide doc967949
+ Ref: 43e967949
+ Ref: gnat_rm/compatibility_and_porting_guide compatibility-and-porting-guide967949
+ Ref: 17967949
+ Ref: gnat_rm/compatibility_and_porting_guide id1967949
+ Ref: 43f967949
+ Node: Writing Portable Fixed-Point Declarations968588
+ Ref: gnat_rm/compatibility_and_porting_guide id2968732
+ Ref: 440968732
+ Ref: gnat_rm/compatibility_and_porting_guide writing-portable-fixed-point-declarations968732
+ Ref: 441968732
+ Node: Compatibility with Ada 83972630
+ Ref: gnat_rm/compatibility_and_porting_guide compatibility-with-ada-83972824
+ Ref: 442972824
+ Ref: gnat_rm/compatibility_and_porting_guide id3972824
+ Ref: 443972824
+ Node: Legal Ada 83 programs that are illegal in Ada 95973698
+ Ref: gnat_rm/compatibility_and_porting_guide id4973846
+ Ref: 444973846
+ Ref: gnat_rm/compatibility_and_porting_guide legal-ada-83-programs-that-are-illegal-in-ada-95973846
+ Ref: 445973846
+ Node: More deterministic semantics978428
+ Ref: gnat_rm/compatibility_and_porting_guide id5978602
+ Ref: 446978602
+ Ref: gnat_rm/compatibility_and_porting_guide more-deterministic-semantics978602
+ Ref: 447978602
+ Node: Changed semantics979538
+ Ref: gnat_rm/compatibility_and_porting_guide changed-semantics979699
+ Ref: 448979699
+ Ref: gnat_rm/compatibility_and_porting_guide id6979699
+ Ref: 449979699
+ Node: Other language compatibility issues981286
+ Ref: gnat_rm/compatibility_and_porting_guide id7981410
+ Ref: 44a981410
+ Ref: gnat_rm/compatibility_and_porting_guide other-language-compatibility-issues981410
+ Ref: 44b981410
+ Node: Compatibility between Ada 95 and Ada 2005982707
+ Ref: gnat_rm/compatibility_and_porting_guide compatibility-between-ada-95-and-ada-2005982900
+ Ref: 44c982900
+ Ref: gnat_rm/compatibility_and_porting_guide id8982900
+ Ref: 44d982900
+ Node: Implementation-dependent characteristics985357
+ Ref: gnat_rm/compatibility_and_porting_guide id9985561
+ Ref: 44e985561
+ Ref: gnat_rm/compatibility_and_porting_guide implementation-dependent-characteristics985561
+ Ref: 44f985561
+ Node: Implementation-defined pragmas986348
+ Ref: gnat_rm/compatibility_and_porting_guide id10986498
+ Ref: 450986498
+ Ref: gnat_rm/compatibility_and_porting_guide implementation-defined-pragmas986498
+ Ref: 451986498
+ Node: Implementation-defined attributes987482
+ Ref: gnat_rm/compatibility_and_porting_guide id11987650
+ Ref: 452987650
+ Ref: gnat_rm/compatibility_and_porting_guide implementation-defined-attributes987650
+ Ref: 453987650
+ Node: Libraries988202
+ Ref: gnat_rm/compatibility_and_porting_guide id12988357
+ Ref: 454988357
+ Ref: gnat_rm/compatibility_and_porting_guide libraries988357
+ Ref: 455988357
+ Node: Elaboration order989261
+ Ref: gnat_rm/compatibility_and_porting_guide elaboration-order989406
+ Ref: 456989406
+ Ref: gnat_rm/compatibility_and_porting_guide id13989406
+ Ref: 457989406
+ Node: Target-specific aspects990866
+ Ref: gnat_rm/compatibility_and_porting_guide id14990993
+ Ref: 458990993
+ Ref: gnat_rm/compatibility_and_porting_guide target-specific-aspects990993
+ Ref: 459990993
+ Node: Compatibility with Other Ada Systems991756
+ Ref: gnat_rm/compatibility_and_porting_guide compatibility-with-other-ada-systems991941
+ Ref: 45b991941
+ Ref: gnat_rm/compatibility_and_porting_guide id15991941
+ Ref: 45c991941
+ Node: Representation Clauses993497
+ Ref: gnat_rm/compatibility_and_porting_guide id16993670
+ Ref: 45d993670
+ Ref: gnat_rm/compatibility_and_porting_guide representation-clauses993670
+ Ref: 45a993670
+ Node: Compatibility with HP Ada 83998321
+ Ref: gnat_rm/compatibility_and_porting_guide compatibility-with-hp-ada-83998449
+ Ref: 45e998449
+ Ref: gnat_rm/compatibility_and_porting_guide id17998449
+ Ref: 45f998449
+ Node: GNU Free Documentation License999335
+ Ref: share/gnu_free_documentation_license doc999460
+ Ref: 460999460
+ Ref: share/gnu_free_documentation_license gnu-fdl999460
+ Ref: 1999460
+ Ref: share/gnu_free_documentation_license gnu-free-documentation-license999460
+ Ref: 461999460
+ Node: Index1022918
+ 
+ End Tag Table
+ 
+ 
+ Local Variables:
+ coding: utf-8
+ End:
diff -Nrcpad gcc-13.3.0/gcc/doc/gnat_ugn.info gcc-13.4.0/gcc/doc/gnat_ugn.info
*** gcc-13.3.0/gcc/doc/gnat_ugn.info	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/doc/gnat_ugn.info	Thu Jun  5 16:30:23 2025
***************
*** 0 ****
--- 1,25075 ----
+ This is gnat_ugn.info, produced by makeinfo version 6.8 from
+ gnat_ugn.texi.
+ 
+      GNAT User’s Guide for Native Platforms , Jan 03, 2023
+ 
+      AdaCore
+ 
+      Copyright © 2008-2023, Free Software Foundation
+ 
+ INFO-DIR-SECTION GNU Ada Tools
+ START-INFO-DIR-ENTRY
+ * gnat_ugn: (gnat_ugn.info). gnat_ugn
+ END-INFO-DIR-ENTRY
+ 
+ 
+    Generated by Sphinx 5.2.3.
+ 
+ 
+ File: gnat_ugn.info,  Node: Top,  Next: About This Guide,  Up: (dir)
+ 
+ GNAT User’s Guide for Native Platforms
+ **************************************
+ 
+      GNAT User’s Guide for Native Platforms , Jan 03, 2023
+ 
+      AdaCore
+ 
+      Copyright © 2008-2023, Free Software Foundation
+ 
+ ‘GNAT, The GNU Ada Development Environment’
+ 
+ GCC version 13.4.0
+ AdaCore
+ 
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3 or
+ any later version published by the Free Software Foundation; with no
+ Invariant Sections, with the Front-Cover Texts being “GNAT User’s Guide
+ for Native Platforms”, and with no Back-Cover Texts.  A copy of the
+ license is included in the section entitled *note GNU Free Documentation
+ License: 1.
+ 
+ * Menu:
+ 
+ * About This Guide::
+ * Getting Started with GNAT::
+ * The GNAT Compilation Model::
+ * Building Executable Programs with GNAT::
+ * GNAT Utility Programs::
+ * GNAT and Program Execution::
+ * Platform-Specific Information::
+ * Example of Binder Output File::
+ * Elaboration Order Handling in GNAT::
+ * Inline Assembler::
+ * GNU Free Documentation License::
+ * Index::
+ 
+  — The Detailed Node Listing —
+ 
+ About This Guide
+ 
+ * What This Guide Contains::
+ * What You Should Know before Reading This Guide::
+ * Related Information::
+ * Conventions::
+ 
+ Getting Started with GNAT
+ 
+ * System Requirements::
+ * Running GNAT::
+ * Running a Simple Ada Program::
+ * Running a Program with Multiple Units::
+ 
+ The GNAT Compilation Model
+ 
+ * Source Representation::
+ * Foreign Language Representation::
+ * File Naming Topics and Utilities::
+ * Configuration Pragmas::
+ * Generating Object Files::
+ * Source Dependencies::
+ * The Ada Library Information Files::
+ * Binding an Ada Program::
+ * GNAT and Libraries::
+ * Conditional Compilation::
+ * Mixed Language Programming::
+ * GNAT and Other Compilation Models::
+ * Using GNAT Files with External Tools::
+ 
+ Foreign Language Representation
+ 
+ * Latin-1::
+ * Other 8-Bit Codes::
+ * Wide_Character Encodings::
+ * Wide_Wide_Character Encodings::
+ 
+ File Naming Topics and Utilities
+ 
+ * File Naming Rules::
+ * Using Other File Names::
+ * Alternative File Naming Schemes::
+ * Handling Arbitrary File Naming Conventions with gnatname::
+ * File Name Krunching with gnatkr::
+ * Renaming Files with gnatchop::
+ 
+ Handling Arbitrary File Naming Conventions with gnatname
+ 
+ * Arbitrary File Naming Conventions::
+ * Running gnatname::
+ * Switches for gnatname::
+ * Examples of gnatname Usage::
+ 
+ File Name Krunching with gnatkr
+ 
+ * About gnatkr::
+ * Using gnatkr::
+ * Krunching Method::
+ * Examples of gnatkr Usage::
+ 
+ Renaming Files with gnatchop
+ 
+ * Handling Files with Multiple Units::
+ * Operating gnatchop in Compilation Mode::
+ * Command Line for gnatchop::
+ * Switches for gnatchop::
+ * Examples of gnatchop Usage::
+ 
+ Configuration Pragmas
+ 
+ * Handling of Configuration Pragmas::
+ * The Configuration Pragmas Files::
+ 
+ GNAT and Libraries
+ 
+ * Introduction to Libraries in GNAT::
+ * General Ada Libraries::
+ * Stand-alone Ada Libraries::
+ * Rebuilding the GNAT Run-Time Library::
+ 
+ General Ada Libraries
+ 
+ * Building a library::
+ * Installing a library::
+ * Using a library::
+ 
+ Stand-alone Ada Libraries
+ 
+ * Introduction to Stand-alone Libraries::
+ * Building a Stand-alone Library::
+ * Creating a Stand-alone Library to be used in a non-Ada context::
+ * Restrictions in Stand-alone Libraries::
+ 
+ Conditional Compilation
+ 
+ * Modeling Conditional Compilation in Ada::
+ * Preprocessing with gnatprep::
+ * Integrated Preprocessing::
+ 
+ Modeling Conditional Compilation in Ada
+ 
+ * Use of Boolean Constants::
+ * Debugging - A Special Case::
+ * Conditionalizing Declarations::
+ * Use of Alternative Implementations::
+ * Preprocessing::
+ 
+ Preprocessing with gnatprep
+ 
+ * Preprocessing Symbols::
+ * Using gnatprep::
+ * Switches for gnatprep::
+ * Form of Definitions File::
+ * Form of Input Text for gnatprep::
+ 
+ Mixed Language Programming
+ 
+ * Interfacing to C::
+ * Calling Conventions::
+ * Building Mixed Ada and C++ Programs::
+ * Generating Ada Bindings for C and C++ headers::
+ * Generating C Headers for Ada Specifications::
+ 
+ Building Mixed Ada and C++ Programs
+ 
+ * Interfacing to C++::
+ * Linking a Mixed C++ & Ada Program::
+ * A Simple Example::
+ * Interfacing with C++ constructors::
+ * Interfacing with C++ at the Class Level::
+ 
+ Generating Ada Bindings for C and C++ headers
+ 
+ * Running the Binding Generator::
+ * Generating Bindings for C++ Headers::
+ * Switches::
+ 
+ Generating C Headers for Ada Specifications
+ 
+ * Running the C Header Generator::
+ 
+ GNAT and Other Compilation Models
+ 
+ * Comparison between GNAT and C/C++ Compilation Models::
+ * Comparison between GNAT and Conventional Ada Library Models::
+ 
+ Using GNAT Files with External Tools
+ 
+ * Using Other Utility Programs with GNAT::
+ * The External Symbol Naming Scheme of GNAT::
+ 
+ Building Executable Programs with GNAT
+ 
+ * Building with gnatmake::
+ * Compiling with gcc::
+ * Compiler Switches::
+ * Linker Switches::
+ * Binding with gnatbind::
+ * Linking with gnatlink::
+ * Using the GNU make Utility::
+ 
+ Building with gnatmake
+ 
+ * Running gnatmake::
+ * Switches for gnatmake::
+ * Mode Switches for gnatmake::
+ * Notes on the Command Line::
+ * How gnatmake Works::
+ * Examples of gnatmake Usage::
+ 
+ Compiling with gcc
+ 
+ * Compiling Programs::
+ * Search Paths and the Run-Time Library (RTL): Search Paths and the Run-Time Library RTL.
+ * Order of Compilation Issues::
+ * Examples::
+ 
+ Compiler Switches
+ 
+ * Alphabetical List of All Switches::
+ * Output and Error Message Control::
+ * Warning Message Control::
+ * Debugging and Assertion Control::
+ * Validity Checking::
+ * Style Checking::
+ * Run-Time Checks::
+ * Using gcc for Syntax Checking::
+ * Using gcc for Semantic Checking::
+ * Compiling Different Versions of Ada::
+ * Character Set Control::
+ * File Naming Control::
+ * Subprogram Inlining Control::
+ * Auxiliary Output Control::
+ * Debugging Control::
+ * Exception Handling Control::
+ * Units to Sources Mapping Files::
+ * Code Generation Control::
+ 
+ Binding with gnatbind
+ 
+ * Running gnatbind::
+ * Switches for gnatbind::
+ * Command-Line Access::
+ * Search Paths for gnatbind::
+ * Examples of gnatbind Usage::
+ 
+ Switches for gnatbind
+ 
+ * Consistency-Checking Modes::
+ * Binder Error Message Control::
+ * Elaboration Control::
+ * Output Control::
+ * Dynamic Allocation Control::
+ * Binding with Non-Ada Main Programs::
+ * Binding Programs with No Main Subprogram::
+ 
+ Linking with gnatlink
+ 
+ * Running gnatlink::
+ * Switches for gnatlink::
+ 
+ Using the GNU make Utility
+ 
+ * Using gnatmake in a Makefile::
+ * Automatically Creating a List of Directories::
+ * Generating the Command Line Switches::
+ * Overcoming Command Line Length Limits::
+ 
+ GNAT Utility Programs
+ 
+ * The File Cleanup Utility gnatclean::
+ * The GNAT Library Browser gnatls::
+ 
+ The File Cleanup Utility gnatclean
+ 
+ * Running gnatclean::
+ * Switches for gnatclean::
+ 
+ The GNAT Library Browser gnatls
+ 
+ * Running gnatls::
+ * Switches for gnatls::
+ * Example of gnatls Usage::
+ 
+ GNAT and Program Execution
+ 
+ * Running and Debugging Ada Programs::
+ * Profiling::
+ * Improving Performance::
+ * Overflow Check Handling in GNAT::
+ * Performing Dimensionality Analysis in GNAT::
+ * Stack Related Facilities::
+ * Memory Management Issues::
+ 
+ Running and Debugging Ada Programs
+ 
+ * The GNAT Debugger GDB::
+ * Running GDB::
+ * Introduction to GDB Commands::
+ * Using Ada Expressions::
+ * Calling User-Defined Subprograms::
+ * Using the next Command in a Function::
+ * Stopping When Ada Exceptions Are Raised::
+ * Ada Tasks::
+ * Debugging Generic Units::
+ * Remote Debugging with gdbserver::
+ * GNAT Abnormal Termination or Failure to Terminate::
+ * Naming Conventions for GNAT Source Files::
+ * Getting Internal Debugging Information::
+ * Stack Traceback::
+ * Pretty-Printers for the GNAT runtime::
+ 
+ Stack Traceback
+ 
+ * Non-Symbolic Traceback::
+ * Symbolic Traceback::
+ 
+ Profiling
+ 
+ * Profiling an Ada Program with gprof::
+ 
+ Profiling an Ada Program with gprof
+ 
+ * Compilation for profiling::
+ * Program execution::
+ * Running gprof::
+ * Interpretation of profiling results::
+ 
+ Improving Performance
+ 
+ * Performance Considerations::
+ * Text_IO Suggestions::
+ * Reducing Size of Executables with Unused Subprogram/Data Elimination::
+ 
+ Performance Considerations
+ 
+ * Controlling Run-Time Checks::
+ * Use of Restrictions::
+ * Optimization Levels::
+ * Debugging Optimized Code::
+ * Inlining of Subprograms::
+ * Floating Point Operations::
+ * Vectorization of loops::
+ * Other Optimization Switches::
+ * Optimization and Strict Aliasing::
+ * Aliased Variables and Optimization::
+ * Atomic Variables and Optimization::
+ * Passive Task Optimization::
+ 
+ Reducing Size of Executables with Unused Subprogram/Data Elimination
+ 
+ * About unused subprogram/data elimination::
+ * Compilation options::
+ * Example of unused subprogram/data elimination::
+ 
+ Overflow Check Handling in GNAT
+ 
+ * Background::
+ * Management of Overflows in GNAT::
+ * Specifying the Desired Mode::
+ * Default Settings::
+ * Implementation Notes::
+ 
+ Stack Related Facilities
+ 
+ * Stack Overflow Checking::
+ * Static Stack Usage Analysis::
+ * Dynamic Stack Usage Analysis::
+ 
+ Memory Management Issues
+ 
+ * Some Useful Memory Pools::
+ * The GNAT Debug Pool Facility::
+ 
+ Platform-Specific Information
+ 
+ * Run-Time Libraries::
+ * Specifying a Run-Time Library::
+ * GNU/Linux Topics::
+ * Microsoft Windows Topics::
+ * Mac OS Topics::
+ 
+ Run-Time Libraries
+ 
+ * Summary of Run-Time Configurations::
+ 
+ Specifying a Run-Time Library
+ 
+ * Choosing the Scheduling Policy::
+ 
+ GNU/Linux Topics
+ 
+ * Required Packages on GNU/Linux::
+ * A GNU/Linux Debug Quirk::
+ 
+ Microsoft Windows Topics
+ 
+ * Using GNAT on Windows::
+ * Using a network installation of GNAT::
+ * CONSOLE and WINDOWS subsystems::
+ * Temporary Files::
+ * Disabling Command Line Argument Expansion::
+ * Windows Socket Timeouts::
+ * Mixed-Language Programming on Windows::
+ * Windows Specific Add-Ons::
+ 
+ Mixed-Language Programming on Windows
+ 
+ * Windows Calling Conventions::
+ * Introduction to Dynamic Link Libraries (DLLs): Introduction to Dynamic Link Libraries DLLs.
+ * Using DLLs with GNAT::
+ * Building DLLs with GNAT Project files::
+ * Building DLLs with GNAT::
+ * Building DLLs with gnatdll::
+ * Ada DLLs and Finalization::
+ * Creating a Spec for Ada DLLs::
+ * GNAT and Windows Resources::
+ * Using GNAT DLLs from Microsoft Visual Studio Applications::
+ * Debugging a DLL::
+ * Setting Stack Size from gnatlink::
+ * Setting Heap Size from gnatlink::
+ 
+ Windows Calling Conventions
+ 
+ * C Calling Convention::
+ * Stdcall Calling Convention::
+ * Win32 Calling Convention::
+ * DLL Calling Convention::
+ 
+ Using DLLs with GNAT
+ 
+ * Creating an Ada Spec for the DLL Services::
+ * Creating an Import Library::
+ 
+ Building DLLs with gnatdll
+ 
+ * Limitations When Using Ada DLLs from Ada::
+ * Exporting Ada Entities::
+ * Ada DLLs and Elaboration::
+ 
+ Creating a Spec for Ada DLLs
+ 
+ * Creating the Definition File::
+ * Using gnatdll::
+ 
+ GNAT and Windows Resources
+ 
+ * Building Resources::
+ * Compiling Resources::
+ * Using Resources::
+ 
+ Debugging a DLL
+ 
+ * Program and DLL Both Built with GCC/GNAT::
+ * Program Built with Foreign Tools and DLL Built with GCC/GNAT::
+ 
+ Windows Specific Add-Ons
+ 
+ * Win32Ada::
+ * wPOSIX::
+ 
+ Mac OS Topics
+ 
+ * Codesigning the Debugger::
+ 
+ Elaboration Order Handling in GNAT
+ 
+ * Elaboration Code::
+ * Elaboration Order::
+ * Checking the Elaboration Order::
+ * Controlling the Elaboration Order in Ada::
+ * Controlling the Elaboration Order in GNAT::
+ * Mixing Elaboration Models::
+ * ABE Diagnostics::
+ * SPARK Diagnostics::
+ * Elaboration Circularities::
+ * Resolving Elaboration Circularities::
+ * Elaboration-related Compiler Switches::
+ * Summary of Procedures for Elaboration Control::
+ * Inspecting the Chosen Elaboration Order::
+ 
+ Inline Assembler
+ 
+ * Basic Assembler Syntax::
+ * A Simple Example of Inline Assembler::
+ * Output Variables in Inline Assembler::
+ * Input Variables in Inline Assembler::
+ * Inlining Inline Assembler Code::
+ * Other Asm Functionality::
+ 
+ Other Asm Functionality
+ 
+ * The Clobber Parameter::
+ * The Volatile Parameter::
+ 
+ 
+ 
+ File: gnat_ugn.info,  Node: About This Guide,  Next: Getting Started with GNAT,  Prev: Top,  Up: Top
+ 
+ 1 About This Guide
+ ******************
+ 
+ This guide describes the use of GNAT, a compiler and software
+ development toolset for the full Ada programming language.  It documents
+ the features of the compiler and tools, and explains how to use them to
+ build Ada applications.
+ 
+ GNAT implements Ada 95, Ada 2005, Ada 2012, and Ada 202x, and it may
+ also be invoked in Ada 83 compatibility mode.  By default, GNAT assumes
+ Ada 2012, but you can override with a compiler switch (*note Compiling
+ Different Versions of Ada: 6.) to explicitly specify the language
+ version.  Throughout this manual, references to ‘Ada’ without a year
+ suffix apply to all Ada versions of the language, starting with Ada 95.
+ 
+ * Menu:
+ 
+ * What This Guide Contains::
+ * What You Should Know before Reading This Guide::
+ * Related Information::
+ * Conventions::
+ 
+ 
+ File: gnat_ugn.info,  Node: What This Guide Contains,  Next: What You Should Know before Reading This Guide,  Up: About This Guide
+ 
+ 1.1 What This Guide Contains
+ ============================
+ 
+ This guide contains the following chapters:
+ 
+    * *note Getting Started with GNAT: 8. describes how to get started
+      compiling and running Ada programs with the GNAT Ada programming
+      environment.
+ 
+    * *note The GNAT Compilation Model: 9. describes the compilation
+      model used by GNAT.
+ 
+    * *note Building Executable Programs with GNAT: a. describes how to
+      use the main GNAT tools to build executable programs, and it also
+      gives examples of using the GNU make utility with GNAT.
+ 
+    * *note GNAT Utility Programs: b. explains the various utility
+      programs that are included in the GNAT environment
+ 
+    * *note GNAT and Program Execution: c. covers a number of topics
+      related to running, debugging, and tuning the performace of
+      programs developed with GNAT
+ 
+ Appendices cover several additional topics:
+ 
+    * *note Platform-Specific Information: d. describes the different
+      run-time library implementations and also presents information on
+      how to use GNAT on several specific platforms
+ 
+    * *note Example of Binder Output File: e. shows the source code for
+      the binder output file for a sample program.
+ 
+    * *note Elaboration Order Handling in GNAT: f. describes how GNAT
+      helps you deal with elaboration order issues.
+ 
+    * *note Inline Assembler: 10. shows how to use the inline assembly
+      facility in an Ada program.
+ 
+ 
+ File: gnat_ugn.info,  Node: What You Should Know before Reading This Guide,  Next: Related Information,  Prev: What This Guide Contains,  Up: About This Guide
+ 
+ 1.2 What You Should Know before Reading This Guide
+ ==================================================
+ 
+ This guide assumes a basic familiarity with the Ada 95 language, as
+ described in the International Standard ANSI/ISO/IEC-8652:1995, January
+ 1995.  Reference manuals for Ada 95, Ada 2005, and Ada 2012 are included
+ in the GNAT documentation package.
+ 
+ 
+ File: gnat_ugn.info,  Node: Related Information,  Next: Conventions,  Prev: What You Should Know before Reading This Guide,  Up: About This Guide
+ 
+ 1.3 Related Information
+ =======================
+ 
+ For further information about Ada and related tools, please refer to the
+ following documents:
+ 
+    * ‘Ada 95 Reference Manual’, ‘Ada 2005 Reference Manual’, and ‘Ada
+      2012 Reference Manual’, which contain reference material for the
+      several revisions of the Ada language standard.
+ 
+    * ‘GNAT Reference_Manual’, which contains all reference material for
+      the GNAT implementation of Ada.
+ 
+    * ‘Using GNAT Studio’, which describes the GNAT Studio Integrated
+      Development Environment.
+ 
+    * ‘GNAT Studio Tutorial’, which introduces the main GNAT Studio
+      features through examples.
+ 
+    * ‘Debugging with GDB’, for all details on the use of the GNU
+      source-level debugger.
+ 
+    * ‘GNU Emacs Manual’, for full information on the extensible editor
+      and programming environment Emacs.
+ 
+ 
+ File: gnat_ugn.info,  Node: Conventions,  Prev: Related Information,  Up: About This Guide
+ 
+ 1.4 Conventions
+ ===============
+ 
+ Following are examples of the typographical and graphic conventions used
+ in this guide:
+ 
+    * ‘Functions’, ‘utility program names’, ‘standard names’, and
+      ‘classes’.
+ 
+    * ‘Option flags’
+ 
+    * ‘File names’
+ 
+    * ‘Variables’
+ 
+    * ‘Emphasis’
+ 
+    * [optional information or parameters]
+ 
+    * Examples are described by text
+ 
+           and then shown this way.
+ 
+    * Commands that are entered by the user are shown as preceded by a
+      prompt string comprising the ‘$’ character followed by a space.
+ 
+    * Full file names are shown with the ‘/’ character as the directory
+      separator; e.g., ‘parent-dir/subdir/myfile.adb’.  If you are using
+      GNAT on a Windows platform, please note that the ‘\’ character
+      should be used instead.
+ 
+ 
+ File: gnat_ugn.info,  Node: Getting Started with GNAT,  Next: The GNAT Compilation Model,  Prev: About This Guide,  Up: Top
+ 
+ 2 Getting Started with GNAT
+ ***************************
+ 
+ This chapter describes how to use GNAT’s command line interface to build
+ executable Ada programs.  On most platforms a visually oriented
+ Integrated Development Environment is also available: GNAT Studio.  GNAT
+ Studio offers a graphical “look and feel”, support for development in
+ other programming languages, comprehensive browsing features, and many
+ other capabilities.  For information on GNAT Studio please refer to the
+ ‘GNAT Studio documentation’.
+ 
+ * Menu:
+ 
+ * System Requirements::
+ * Running GNAT::
+ * Running a Simple Ada Program::
+ * Running a Program with Multiple Units::
+ 
+ 
+ File: gnat_ugn.info,  Node: System Requirements,  Next: Running GNAT,  Up: Getting Started with GNAT
+ 
+ 2.1 System Requirements
+ =======================
+ 
+ Even though any machine can run the GNAT toolset and GNAT Studio IDE, in
+ order to get the best experience, we recommend using a machine with as
+ many cores as possible since all individual compilations can run in
+ parallel.  A comfortable setup for a compiler server is a machine with
+ 24 physical cores or more, with at least 48 GB of memory (2 GB per
+ core).
+ 
+ For a desktop machine, a minimum of 4 cores is recommended (8
+ preferred), with at least 2GB per core (so 8 to 16GB).
+ 
+ In addition, for running and navigating sources in GNAT Studio smoothly,
+ we recommend at least 1.5 GB plus 3 GB of RAM per 1 million source line
+ of code.  In other words, we recommend at least 3 GB for for 500K lines
+ of code and 7.5 GB for 2 million lines of code.
+ 
+ Note that using local and fast drives will also make a difference in
+ terms of build and link time.  Network drives such as NFS, SMB, or
+ worse, configuration management filesystems (such as ClearCase dynamic
+ views) should be avoided as much as possible and will produce very
+ degraded performance (typically 2 to 3 times slower than on local fast
+ drives).  If such slow drives cannot be avoided for accessing the source
+ code, then you should at least configure your project file so that the
+ result of the compilation is stored on a drive local to the machine
+ performing the run.  This can be achieved by setting the ‘Object_Dir’
+ project file attribute.
+ 
+ 
+ File: gnat_ugn.info,  Node: Running GNAT,  Next: Running a Simple Ada Program,  Prev: System Requirements,  Up: Getting Started with GNAT
+ 
+ 2.2 Running GNAT
+ ================
+ 
+ Three steps are needed to create an executable file from an Ada source
+ file:
+ 
+    * The source file(s) must be compiled.
+ 
+    * The file(s) must be bound using the GNAT binder.
+ 
+    * All appropriate object files must be linked to produce an
+      executable.
+ 
+ All three steps are most commonly handled by using the ‘gnatmake’
+ utility program that, given the name of the main program, automatically
+ performs the necessary compilation, binding and linking steps.
+ 
+ 
+ File: gnat_ugn.info,  Node: Running a Simple Ada Program,  Next: Running a Program with Multiple Units,  Prev: Running GNAT,  Up: Getting Started with GNAT
+ 
+ 2.3 Running a Simple Ada Program
+ ================================
+ 
+ Any text editor may be used to prepare an Ada program.  (If Emacs is
+ used, the optional Ada mode may be helpful in laying out the program.)
+ The program text is a normal text file.  We will assume in our initial
+ example that you have used your editor to prepare the following standard
+ format text file:
+ 
+      with Ada.Text_IO; use Ada.Text_IO;
+      procedure Hello is
+      begin
+         Put_Line ("Hello WORLD!");
+      end Hello;
+ 
+ This file should be named ‘hello.adb’.  With the normal default file
+ naming conventions, GNAT requires that each file contain a single
+ compilation unit whose file name is the unit name, with periods replaced
+ by hyphens; the extension is ‘ads’ for a spec and ‘adb’ for a body.  You
+ can override this default file naming convention by use of the special
+ pragma ‘Source_File_Name’ (for further information please see *note
+ Using Other File Names: 1c.).  Alternatively, if you want to rename your
+ files according to this default convention, which is probably more
+ convenient if you will be using GNAT for all your compilations, then the
+ ‘gnatchop’ utility can be used to generate correctly-named source files
+ (see *note Renaming Files with gnatchop: 1d.).
+ 
+ You can compile the program using the following command (‘$’ is used as
+ the command prompt in the examples in this document):
+ 
+      $ gcc -c hello.adb
+ 
+ ‘gcc’ is the command used to run the compiler.  This compiler is capable
+ of compiling programs in several languages, including Ada and C. It
+ assumes that you have given it an Ada program if the file extension is
+ either ‘.ads’ or ‘.adb’, and it will then call the GNAT compiler to
+ compile the specified file.
+ 
+ The ‘-c’ switch is required.  It tells ‘gcc’ to only do a compilation.
+ (For C programs, ‘gcc’ can also do linking, but this capability is not
+ used directly for Ada programs, so the ‘-c’ switch must always be
+ present.)
+ 
+ This compile command generates a file ‘hello.o’, which is the object
+ file corresponding to your Ada program.  It also generates an ‘Ada
+ Library Information’ file ‘hello.ali’, which contains additional
+ information used to check that an Ada program is consistent.
+ 
+ To build an executable file, use either ‘gnatmake’ or gprbuild with the
+ name of the main file: these tools are builders that will take care of
+ all the necessary build steps in the correct order.  In particular,
+ these builders automatically recompile any sources that have been
+ modified since they were last compiled, or sources that depend on such
+ modified sources, so that ‘version skew’ is avoided.
+ 
+      $ gnatmake hello.adb
+ 
+ The result is an executable program called ‘hello’, which can be run by
+ entering:
+ 
+      $ hello
+ 
+ assuming that the current directory is on the search path for executable
+ programs.
+ 
+ and, if all has gone well, you will see:
+ 
+      Hello WORLD!
+ 
+ appear in response to this command.
+ 
+ 
+ File: gnat_ugn.info,  Node: Running a Program with Multiple Units,  Prev: Running a Simple Ada Program,  Up: Getting Started with GNAT
+ 
+ 2.4 Running a Program with Multiple Units
+ =========================================
+ 
+ Consider a slightly more complicated example that has three files: a
+ main program, and the spec and body of a package:
+ 
+      package Greetings is
+         procedure Hello;
+         procedure Goodbye;
+      end Greetings;
+ 
+      with Ada.Text_IO; use Ada.Text_IO;
+      package body Greetings is
+         procedure Hello is
+         begin
+            Put_Line ("Hello WORLD!");
+         end Hello;
+ 
+         procedure Goodbye is
+         begin
+            Put_Line ("Goodbye WORLD!");
+         end Goodbye;
+      end Greetings;
+ 
+      with Greetings;
+      procedure Gmain is
+      begin
+         Greetings.Hello;
+         Greetings.Goodbye;
+      end Gmain;
+ 
+ Following the one-unit-per-file rule, place this program in the
+ following three separate files:
+ 
+ ‘greetings.ads’
+ 
+      spec of package ‘Greetings’
+ 
+ ‘greetings.adb’
+ 
+      body of package ‘Greetings’
+ 
+ ‘gmain.adb’
+ 
+      body of main program
+ 
+ Note that there is no required order of compilation when using GNAT. In
+ particular it is perfectly fine to compile the main program first.
+ Also, it is not necessary to compile package specs in the case where
+ there is an accompanying body; you only need to compile the body.  If
+ you want to submit these files to the compiler for semantic checking and
+ not code generation, then use the ‘-gnatc’ switch:
+ 
+      $ gcc -c greetings.ads -gnatc
+ 
+ Although the compilation can be done in separate steps, in practice it
+ is almost always more convenient to use the ‘gnatmake’ or ‘gprbuild’
+ tools:
+ 
+      $ gnatmake gmain.adb
+ 
+ 
+ File: gnat_ugn.info,  Node: The GNAT Compilation Model,  Next: Building Executable Programs with GNAT,  Prev: Getting Started with GNAT,  Up: Top
+ 
+ 3 The GNAT Compilation Model
+ ****************************
+ 
+ This chapter describes the compilation model used by GNAT. Although
+ similar to that used by other languages such as C and C++, this model is
+ substantially different from the traditional Ada compilation models,
+ which are based on a centralized program library.  The chapter covers
+ the following material:
+ 
+    * Topics related to source file makeup and naming
+ 
+         * *note Source Representation: 22.
+ 
+         * *note Foreign Language Representation: 23.
+ 
+         * *note File Naming Topics and Utilities: 24.
+ 
+    * *note Configuration Pragmas: 25.
+ 
+    * *note Generating Object Files: 26.
+ 
+    * *note Source Dependencies: 27.
+ 
+    * *note The Ada Library Information Files: 28.
+ 
+    * *note Binding an Ada Program: 29.
+ 
+    * *note GNAT and Libraries: 2a.
+ 
+    * *note Conditional Compilation: 2b.
+ 
+    * *note Mixed Language Programming: 2c.
+ 
+    * *note GNAT and Other Compilation Models: 2d.
+ 
+    * *note Using GNAT Files with External Tools: 2e.
+ 
+ * Menu:
+ 
+ * Source Representation::
+ * Foreign Language Representation::
+ * File Naming Topics and Utilities::
+ * Configuration Pragmas::
+ * Generating Object Files::
+ * Source Dependencies::
+ * The Ada Library Information Files::
+ * Binding an Ada Program::
+ * GNAT and Libraries::
+ * Conditional Compilation::
+ * Mixed Language Programming::
+ * GNAT and Other Compilation Models::
+ * Using GNAT Files with External Tools::
+ 
+ 
+ File: gnat_ugn.info,  Node: Source Representation,  Next: Foreign Language Representation,  Up: The GNAT Compilation Model
+ 
+ 3.1 Source Representation
+ =========================
+ 
+ Ada source programs are represented in standard text files, using
+ Latin-1 coding.  Latin-1 is an 8-bit code that includes the familiar
+ 7-bit ASCII set, plus additional characters used for representing
+ foreign languages (see *note Foreign Language Representation: 23. for
+ support of non-USA character sets).  The format effector characters are
+ represented using their standard ASCII encodings, as follows:
+ 
+      Character       Effect                      Code
+                                                  
+                                                  
+      ‘VT’            Vertical tab                ‘16#0B#’
+                                                  
+                                                  
+      ‘HT’            Horizontal tab              ‘16#09#’
+                                                  
+                                                  
+      ‘CR’            Carriage return             ‘16#0D#’
+                                                  
+                                                  
+      ‘LF’            Line feed                   ‘16#0A#’
+                                                  
+                                                  
+      ‘FF’            Form feed                   ‘16#0C#’
+                                                  
+ 
+ Source files are in standard text file format.  In addition, GNAT will
+ recognize a wide variety of stream formats, in which the end of physical
+ lines is marked by any of the following sequences: ‘LF’, ‘CR’, ‘CR-LF’,
+ or ‘LF-CR’.  This is useful in accommodating files that are imported
+ from other operating systems.
+ 
+ The end of a source file is normally represented by the physical end of
+ file.  However, the control character ‘16#1A#’ (‘SUB’) is also
+ recognized as signalling the end of the source file.  Again, this is
+ provided for compatibility with other operating systems where this code
+ is used to represent the end of file.
+ 
+ Each file contains a single Ada compilation unit, including any pragmas
+ associated with the unit.  For example, this means you must place a
+ package declaration (a package ‘spec’) and the corresponding body in
+ separate files.  An Ada ‘compilation’ (which is a sequence of
+ compilation units) is represented using a sequence of files.  Similarly,
+ you will place each subunit or child unit in a separate file.
+ 
+ 
+ File: gnat_ugn.info,  Node: Foreign Language Representation,  Next: File Naming Topics and Utilities,  Prev: Source Representation,  Up: The GNAT Compilation Model
+ 
+ 3.2 Foreign Language Representation
+ ===================================
+ 
+ GNAT supports the standard character sets defined in Ada as well as
+ several other non-standard character sets for use in localized versions
+ of the compiler (*note Character Set Control: 31.).
+ 
+ * Menu:
+ 
+ * Latin-1::
+ * Other 8-Bit Codes::
+ * Wide_Character Encodings::
+ * Wide_Wide_Character Encodings::
+ 
+ 
+ File: gnat_ugn.info,  Node: Latin-1,  Next: Other 8-Bit Codes,  Up: Foreign Language Representation
+ 
+ 3.2.1 Latin-1
+ -------------
+ 
+ The basic character set is Latin-1.  This character set is defined by
+ ISO standard 8859, part 1.  The lower half (character codes ‘16#00#’ …
+ ‘16#7F#)’ is identical to standard ASCII coding, but the upper half is
+ used to represent additional characters.  These include extended letters
+ used by European languages, such as French accents, the vowels with
+ umlauts used in German, and the extra letter A-ring used in Swedish.
+ 
+ For a complete list of Latin-1 codes and their encodings, see the source
+ file of library unit ‘Ada.Characters.Latin_1’ in file ‘a-chlat1.ads’.
+ You may use any of these extended characters freely in character or
+ string literals.  In addition, the extended characters that represent
+ letters can be used in identifiers.
+ 
+ 
+ File: gnat_ugn.info,  Node: Other 8-Bit Codes,  Next: Wide_Character Encodings,  Prev: Latin-1,  Up: Foreign Language Representation
+ 
+ 3.2.2 Other 8-Bit Codes
+ -----------------------
+ 
+ GNAT also supports several other 8-bit coding schemes:
+ 
+ ‘ISO 8859-2 (Latin-2)’
+ 
+      Latin-2 letters allowed in identifiers, with uppercase and
+      lowercase equivalence.
+ 
+ ‘ISO 8859-3 (Latin-3)’
+ 
+      Latin-3 letters allowed in identifiers, with uppercase and
+      lowercase equivalence.
+ 
+ ‘ISO 8859-4 (Latin-4)’
+ 
+      Latin-4 letters allowed in identifiers, with uppercase and
+      lowercase equivalence.
+ 
+ ‘ISO 8859-5 (Cyrillic)’
+ 
+      ISO 8859-5 letters (Cyrillic) allowed in identifiers, with
+      uppercase and lowercase equivalence.
+ 
+ ‘ISO 8859-15 (Latin-9)’
+ 
+      ISO 8859-15 (Latin-9) letters allowed in identifiers, with
+      uppercase and lowercase equivalence
+ 
+ ‘IBM PC (code page 437)’
+ 
+      This code page is the normal default for PCs in the U.S. It
+      corresponds to the original IBM PC character set.  This set has
+      some, but not all, of the extended Latin-1 letters, but these
+      letters do not have the same encoding as Latin-1.  In this mode,
+      these letters are allowed in identifiers with uppercase and
+      lowercase equivalence.
+ 
+ ‘IBM PC (code page 850)’
+ 
+      This code page is a modification of 437 extended to include all the
+      Latin-1 letters, but still not with the usual Latin-1 encoding.  In
+      this mode, all these letters are allowed in identifiers with
+      uppercase and lowercase equivalence.
+ 
+ ‘Full Upper 8-bit’
+ 
+      Any character in the range 80-FF allowed in identifiers, and all
+      are considered distinct.  In other words, there are no uppercase
+      and lowercase equivalences in this range.  This is useful in
+      conjunction with certain encoding schemes used for some foreign
+      character sets (e.g., the typical method of representing Chinese
+      characters on the PC).
+ 
+ ‘No Upper-Half’
+ 
+      No upper-half characters in the range 80-FF are allowed in
+      identifiers.  This gives Ada 83 compatibility for identifier names.
+ 
+ For precise data on the encodings permitted, and the uppercase and
+ lowercase equivalences that are recognized, see the file ‘csets.adb’ in
+ the GNAT compiler sources.  You will need to obtain a full source
+ release of GNAT to obtain this file.
+ 
+ 
+ File: gnat_ugn.info,  Node: Wide_Character Encodings,  Next: Wide_Wide_Character Encodings,  Prev: Other 8-Bit Codes,  Up: Foreign Language Representation
+ 
+ 3.2.3 Wide_Character Encodings
+ ------------------------------
+ 
+ GNAT allows wide character codes to appear in character and string
+ literals, and also optionally in identifiers, by means of the following
+ possible encoding schemes:
+ 
+ ‘Hex Coding’
+ 
+      In this encoding, a wide character is represented by the following
+      five character sequence:
+ 
+           ESC a b c d
+ 
+      where ‘a’, ‘b’, ‘c’, ‘d’ are the four hexadecimal characters (using
+      uppercase letters) of the wide character code.  For example, ESC
+      A345 is used to represent the wide character with code ‘16#A345#’.
+      This scheme is compatible with use of the full Wide_Character set.
+ 
+ ‘Upper-Half Coding’
+ 
+      The wide character with encoding ‘16#abcd#’ where the upper bit is
+      on (in other words, ‘a’ is in the range 8-F) is represented as two
+      bytes, ‘16#ab#’ and ‘16#cd#’.  The second byte cannot be a format
+      control character, but is not required to be in the upper half.
+      This method can be also used for shift-JIS or EUC, where the
+      internal coding matches the external coding.
+ 
+ ‘Shift JIS Coding’
+ 
+      A wide character is represented by a two-character sequence,
+      ‘16#ab#’ and ‘16#cd#’, with the restrictions described for
+      upper-half encoding as described above.  The internal character
+      code is the corresponding JIS character according to the standard
+      algorithm for Shift-JIS conversion.  Only characters defined in the
+      JIS code set table can be used with this encoding method.
+ 
+ ‘EUC Coding’
+ 
+      A wide character is represented by a two-character sequence
+      ‘16#ab#’ and ‘16#cd#’, with both characters being in the upper
+      half.  The internal character code is the corresponding JIS
+      character according to the EUC encoding algorithm.  Only characters
+      defined in the JIS code set table can be used with this encoding
+      method.
+ 
+ ‘UTF-8 Coding’
+ 
+      A wide character is represented using UCS Transformation Format 8
+      (UTF-8) as defined in Annex R of ISO 10646-1/Am.2.  Depending on
+      the character value, the representation is a one, two, or three
+      byte sequence:
+ 
+           16#0000#-16#007f#: 2#0xxxxxxx#
+           16#0080#-16#07ff#: 2#110xxxxx# 2#10xxxxxx#
+           16#0800#-16#ffff#: 2#1110xxxx# 2#10xxxxxx# 2#10xxxxxx#
+ 
+      where the ‘xxx’ bits correspond to the left-padded bits of the
+      16-bit character value.  Note that all lower half ASCII characters
+      are represented as ASCII bytes and all upper half characters and
+      other wide characters are represented as sequences of upper-half
+      (The full UTF-8 scheme allows for encoding 31-bit characters as
+      6-byte sequences, and in the following section on wide wide
+      characters, the use of these sequences is documented).
+ 
+ ‘Brackets Coding’
+ 
+      In this encoding, a wide character is represented by the following
+      eight character sequence:
+ 
+           [ " a b c d " ]
+ 
+      where ‘a’, ‘b’, ‘c’, ‘d’ are the four hexadecimal characters (using
+      uppercase letters) of the wide character code.  For example,
+      [‘A345’] is used to represent the wide character with code
+      ‘16#A345#’.  It is also possible (though not required) to use the
+      Brackets coding for upper half characters.  For example, the code
+      ‘16#A3#’ can be represented as ‘['A3']’.
+ 
+      This scheme is compatible with use of the full Wide_Character set,
+      and is also the method used for wide character encoding in some
+      standard ACATS (Ada Conformity Assessment Test Suite) test suite
+      distributions.
+ 
+      Note: Some of these coding schemes do not permit the full use of
+      the Ada character set.  For example, neither Shift JIS nor EUC
+      allow the use of the upper half of the Latin-1 set.
+ 
+ 
+ File: gnat_ugn.info,  Node: Wide_Wide_Character Encodings,  Prev: Wide_Character Encodings,  Up: Foreign Language Representation
+ 
+ 3.2.4 Wide_Wide_Character Encodings
+ -----------------------------------
+ 
+ GNAT allows wide wide character codes to appear in character and string
+ literals, and also optionally in identifiers, by means of the following
+ possible encoding schemes:
+ 
+ ‘UTF-8 Coding’
+ 
+      A wide character is represented using UCS Transformation Format 8
+      (UTF-8) as defined in Annex R of ISO 10646-1/Am.2.  Depending on
+      the character value, the representation of character codes with
+      values greater than 16#FFFF# is a is a four, five, or six byte
+      sequence:
+ 
+           16#01_0000#-16#10_FFFF#:     11110xxx 10xxxxxx 10xxxxxx
+                                        10xxxxxx
+           16#0020_0000#-16#03FF_FFFF#: 111110xx 10xxxxxx 10xxxxxx
+                                        10xxxxxx 10xxxxxx
+           16#0400_0000#-16#7FFF_FFFF#: 1111110x 10xxxxxx 10xxxxxx
+                                        10xxxxxx 10xxxxxx 10xxxxxx
+ 
+      where the ‘xxx’ bits correspond to the left-padded bits of the
+      32-bit character value.
+ 
+ ‘Brackets Coding’
+ 
+      In this encoding, a wide wide character is represented by the
+      following ten or twelve byte character sequence:
+ 
+           [ " a b c d e f " ]
+           [ " a b c d e f g h " ]
+ 
+      where ‘a-h’ are the six or eight hexadecimal characters (using
+      uppercase letters) of the wide wide character code.  For example,
+      [“1F4567”] is used to represent the wide wide character with code
+      ‘16#001F_4567#’.
+ 
+      This scheme is compatible with use of the full Wide_Wide_Character
+      set, and is also the method used for wide wide character encoding
+      in some standard ACATS (Ada Conformity Assessment Test Suite) test
+      suite distributions.
+ 
+ 
+ File: gnat_ugn.info,  Node: File Naming Topics and Utilities,  Next: Configuration Pragmas,  Prev: Foreign Language Representation,  Up: The GNAT Compilation Model
+ 
+ 3.3 File Naming Topics and Utilities
+ ====================================
+ 
+ GNAT has a default file naming scheme and also provides the user with a
+ high degree of control over how the names and extensions of the source
+ files correspond to the Ada compilation units that they contain.
+ 
+ * Menu:
+ 
+ * File Naming Rules::
+ * Using Other File Names::
+ * Alternative File Naming Schemes::
+ * Handling Arbitrary File Naming Conventions with gnatname::
+ * File Name Krunching with gnatkr::
+ * Renaming Files with gnatchop::
+ 
+ 
+ File: gnat_ugn.info,  Node: File Naming Rules,  Next: Using Other File Names,  Up: File Naming Topics and Utilities
+ 
+ 3.3.1 File Naming Rules
+ -----------------------
+ 
+ The default file name is determined by the name of the unit that the
+ file contains.  The name is formed by taking the full expanded name of
+ the unit and replacing the separating dots with hyphens and using
+ lowercase for all letters.
+ 
+ An exception arises if the file name generated by the above rules starts
+ with one of the characters ‘a’, ‘g’, ‘i’, or ‘s’, and the second
+ character is a minus.  In this case, the character tilde is used in
+ place of the minus.  The reason for this special rule is to avoid
+ clashes with the standard names for child units of the packages System,
+ Ada, Interfaces, and GNAT, which use the prefixes ‘s-’, ‘a-’, ‘i-’, and
+ ‘g-’, respectively.
+ 
+ The file extension is ‘.ads’ for a spec and ‘.adb’ for a body.  The
+ following table shows some examples of these rules.
+ 
+      Source File                      Ada Compilation Unit
+                                       
+                                       
+      ‘main.ads’                       Main (spec)
+                                       
+                                       
+      ‘main.adb’                       Main (body)
+                                       
+                                       
+      ‘arith_functions.ads’            Arith_Functions (package spec)
+                                       
+                                       
+      ‘arith_functions.adb’            Arith_Functions (package body)
+                                       
+                                       
+      ‘func-spec.ads’                  Func.Spec (child package spec)
+                                       
+                                       
+      ‘func-spec.adb’                  Func.Spec (child package body)
+                                       
+                                       
+      ‘main-sub.adb’                   Sub (subunit of Main)
+                                       
+                                       
+      ‘a~bad.adb’                      A.Bad (child package body)
+                                       
+ 
+ Following these rules can result in excessively long file names if
+ corresponding unit names are long (for example, if child units or
+ subunits are heavily nested).  An option is available to shorten such
+ long file names (called file name ‘krunching’).  This may be
+ particularly useful when programs being developed with GNAT are to be
+ used on operating systems with limited file name lengths.  *note Using
+ gnatkr: 3d.
+ 
+ Of course, no file shortening algorithm can guarantee uniqueness over
+ all possible unit names; if file name krunching is used, it is your
+ responsibility to ensure no name clashes occur.  Alternatively you can
+ specify the exact file names that you want used, as described in the
+ next section.  Finally, if your Ada programs are migrating from a
+ compiler with a different naming convention, you can use the gnatchop
+ utility to produce source files that follow the GNAT naming conventions.
+ (For details see *note Renaming Files with gnatchop: 1d.)
+ 
+ Note: in the case of Windows or Mac OS operating systems, case is not
+ significant.  So for example on Windows if the canonical name is
+ ‘main-sub.adb’, you can use the file name ‘Main-Sub.adb’ instead.
+ However, case is significant for other operating systems, so for
+ example, if you want to use other than canonically cased file names on a
+ Unix system, you need to follow the procedures described in the next
+ section.
+ 
+ 
+ File: gnat_ugn.info,  Node: Using Other File Names,  Next: Alternative File Naming Schemes,  Prev: File Naming Rules,  Up: File Naming Topics and Utilities
+ 
+ 3.3.2 Using Other File Names
+ ----------------------------
+ 
+ In the previous section, we have described the default rules used by
+ GNAT to determine the file name in which a given unit resides.  It is
+ often convenient to follow these default rules, and if you follow them,
+ the compiler knows without being explicitly told where to find all the
+ files it needs.
+ 
+ However, in some cases, particularly when a program is imported from
+ another Ada compiler environment, it may be more convenient for the
+ programmer to specify which file names contain which units.  GNAT allows
+ arbitrary file names to be used by means of the Source_File_Name pragma.
+ The form of this pragma is as shown in the following examples:
+ 
+      pragma Source_File_Name (My_Utilities.Stacks,
+        Spec_File_Name => "myutilst_a.ada");
+      pragma Source_File_name (My_Utilities.Stacks,
+        Body_File_Name => "myutilst.ada");
+ 
+ As shown in this example, the first argument for the pragma is the unit
+ name (in this example a child unit).  The second argument has the form
+ of a named association.  The identifier indicates whether the file name
+ is for a spec or a body; the file name itself is given by a string
+ literal.
+ 
+ The source file name pragma is a configuration pragma, which means that
+ normally it will be placed in the ‘gnat.adc’ file used to hold
+ configuration pragmas that apply to a complete compilation environment.
+ For more details on how the ‘gnat.adc’ file is created and used see
+ *note Handling of Configuration Pragmas: 3f.
+ 
+ GNAT allows completely arbitrary file names to be specified using the
+ source file name pragma.  However, if the file name specified has an
+ extension other than ‘.ads’ or ‘.adb’ it is necessary to use a special
+ syntax when compiling the file.  The name in this case must be preceded
+ by the special sequence ‘-x’ followed by a space and the name of the
+ language, here ‘ada’, as in:
+ 
+      $ gcc -c -x ada peculiar_file_name.sim
+ 
+ ‘gnatmake’ handles non-standard file names in the usual manner (the
+ non-standard file name for the main program is simply used as the
+ argument to gnatmake).  Note that if the extension is also non-standard,
+ then it must be included in the ‘gnatmake’ command, it may not be
+ omitted.
+ 
+ 
+ File: gnat_ugn.info,  Node: Alternative File Naming Schemes,  Next: Handling Arbitrary File Naming Conventions with gnatname,  Prev: Using Other File Names,  Up: File Naming Topics and Utilities
+ 
+ 3.3.3 Alternative File Naming Schemes
+ -------------------------------------
+ 
+ The previous section described the use of the ‘Source_File_Name’ pragma
+ to allow arbitrary names to be assigned to individual source files.
+ However, this approach requires one pragma for each file, and especially
+ in large systems can result in very long ‘gnat.adc’ files, and also
+ create a maintenance problem.
+ 
+ GNAT also provides a facility for specifying systematic file naming
+ schemes other than the standard default naming scheme previously
+ described.  An alternative scheme for naming is specified by the use of
+ ‘Source_File_Name’ pragmas having the following format:
+ 
+      pragma Source_File_Name (
+         Spec_File_Name  => FILE_NAME_PATTERN
+       [ , Casing          => CASING_SPEC]
+       [ , Dot_Replacement => STRING_LITERAL ] );
+ 
+      pragma Source_File_Name (
+         Body_File_Name  => FILE_NAME_PATTERN
+       [ , Casing          => CASING_SPEC ]
+       [ , Dot_Replacement => STRING_LITERAL ] ) ;
+ 
+      pragma Source_File_Name (
+         Subunit_File_Name  => FILE_NAME_PATTERN
+       [ , Casing          => CASING_SPEC ]
+       [ , Dot_Replacement => STRING_LITERAL ] ) ;
+ 
+      FILE_NAME_PATTERN ::= STRING_LITERAL
+      CASING_SPEC ::= Lowercase | Uppercase | Mixedcase
+ 
+ The ‘FILE_NAME_PATTERN’ string shows how the file name is constructed.
+ It contains a single asterisk character, and the unit name is
+ substituted systematically for this asterisk.  The optional parameter
+ ‘Casing’ indicates whether the unit name is to be all upper-case
+ letters, all lower-case letters, or mixed-case.  If no ‘Casing’
+ parameter is used, then the default is all lower-case.
+ 
+ The optional ‘Dot_Replacement’ string is used to replace any periods
+ that occur in subunit or child unit names.  If no ‘Dot_Replacement’
+ argument is used then separating dots appear unchanged in the resulting
+ file name.  Although the above syntax indicates that the ‘Casing’
+ argument must appear before the ‘Dot_Replacement’ argument, but it is
+ also permissible to write these arguments in the opposite order.
+ 
+ As indicated, it is possible to specify different naming schemes for
+ bodies, specs, and subunits.  Quite often the rule for subunits is the
+ same as the rule for bodies, in which case, there is no need to give a
+ separate ‘Subunit_File_Name’ rule, and in this case the ‘Body_File_name’
+ rule is used for subunits as well.
+ 
+ The separate rule for subunits can also be used to implement the rather
+ unusual case of a compilation environment (e.g., a single directory)
+ which contains a subunit and a child unit with the same unit name.
+ Although both units cannot appear in the same partition, the Ada
+ Reference Manual allows (but does not require) the possibility of the
+ two units coexisting in the same environment.
+ 
+ The file name translation works in the following steps:
+ 
+    * If there is a specific ‘Source_File_Name’ pragma for the given
+      unit, then this is always used, and any general pattern rules are
+      ignored.
+ 
+    * If there is a pattern type ‘Source_File_Name’ pragma that applies
+      to the unit, then the resulting file name will be used if the file
+      exists.  If more than one pattern matches, the latest one will be
+      tried first, and the first attempt resulting in a reference to a
+      file that exists will be used.
+ 
+    * If no pattern type ‘Source_File_Name’ pragma that applies to the
+      unit for which the corresponding file exists, then the standard
+      GNAT default naming rules are used.
+ 
+ As an example of the use of this mechanism, consider a commonly used
+ scheme in which file names are all lower case, with separating periods
+ copied unchanged to the resulting file name, and specs end with
+ ‘.1.ada’, and bodies end with ‘.2.ada’.  GNAT will follow this scheme if
+ the following two pragmas appear:
+ 
+      pragma Source_File_Name
+        (Spec_File_Name => ".1.ada");
+      pragma Source_File_Name
+        (Body_File_Name => ".2.ada");
+ 
+ The default GNAT scheme is actually implemented by providing the
+ following default pragmas internally:
+ 
+      pragma Source_File_Name
+        (Spec_File_Name => ".ads", Dot_Replacement => "-");
+      pragma Source_File_Name
+        (Body_File_Name => ".adb", Dot_Replacement => "-");
+ 
+ Our final example implements a scheme typically used with one of the Ada
+ 83 compilers, where the separator character for subunits was ‘__’ (two
+ underscores), specs were identified by adding ‘_.ADA’, bodies by adding
+ ‘.ADA’, and subunits by adding ‘.SEP’.  All file names were upper case.
+ Child units were not present of course since this was an Ada 83
+ compiler, but it seems reasonable to extend this scheme to use the same
+ double underscore separator for child units.
+ 
+      pragma Source_File_Name
+        (Spec_File_Name => "_.ADA",
+         Dot_Replacement => "__",
+         Casing = Uppercase);
+      pragma Source_File_Name
+        (Body_File_Name => ".ADA",
+         Dot_Replacement => "__",
+         Casing = Uppercase);
+      pragma Source_File_Name
+        (Subunit_File_Name => ".SEP",
+         Dot_Replacement => "__",
+         Casing = Uppercase);
+ 
+ 
+ File: gnat_ugn.info,  Node: Handling Arbitrary File Naming Conventions with gnatname,  Next: File Name Krunching with gnatkr,  Prev: Alternative File Naming Schemes,  Up: File Naming Topics and Utilities
+ 
+ 3.3.4 Handling Arbitrary File Naming Conventions with ‘gnatname’
+ ----------------------------------------------------------------
+ 
+ * Menu:
+ 
+ * Arbitrary File Naming Conventions::
+ * Running gnatname::
+ * Switches for gnatname::
+ * Examples of gnatname Usage::
+ 
+ 
+ File: gnat_ugn.info,  Node: Arbitrary File Naming Conventions,  Next: Running gnatname,  Up: Handling Arbitrary File Naming Conventions with gnatname
+ 
+ 3.3.4.1 Arbitrary File Naming Conventions
+ .........................................
+ 
+ The GNAT compiler must be able to know the source file name of a
+ compilation unit.  When using the standard GNAT default file naming
+ conventions (‘.ads’ for specs, ‘.adb’ for bodies), the GNAT compiler
+ does not need additional information.
+ 
+ When the source file names do not follow the standard GNAT default file
+ naming conventions, the GNAT compiler must be given additional
+ information through a configuration pragmas file (*note Configuration
+ Pragmas: 25.) or a project file.  When the non-standard file naming
+ conventions are well-defined, a small number of pragmas
+ ‘Source_File_Name’ specifying a naming pattern (*note Alternative File
+ Naming Schemes: 40.) may be sufficient.  However, if the file naming
+ conventions are irregular or arbitrary, a number of pragma
+ ‘Source_File_Name’ for individual compilation units must be defined.  To
+ help maintain the correspondence between compilation unit names and
+ source file names within the compiler, GNAT provides a tool ‘gnatname’
+ to generate the required pragmas for a set of files.
+ 
+ 
+ File: gnat_ugn.info,  Node: Running gnatname,  Next: Switches for gnatname,  Prev: Arbitrary File Naming Conventions,  Up: Handling Arbitrary File Naming Conventions with gnatname
+ 
+ 3.3.4.2 Running ‘gnatname’
+ ..........................
+ 
+ The usual form of the ‘gnatname’ command is:
+ 
+      $ gnatname [ switches ]  naming_pattern  [ naming_patterns ]
+          [--and [ switches ]  naming_pattern  [ naming_patterns ]]
+ 
+ All of the arguments are optional.  If invoked without any argument,
+ ‘gnatname’ will display its usage.
+ 
+ When used with at least one naming pattern, ‘gnatname’ will attempt to
+ find all the compilation units in files that follow at least one of the
+ naming patterns.  To find these compilation units, ‘gnatname’ will use
+ the GNAT compiler in syntax-check-only mode on all regular files.
+ 
+ One or several Naming Patterns may be given as arguments to ‘gnatname’.
+ Each Naming Pattern is enclosed between double quotes (or single quotes
+ on Windows).  A Naming Pattern is a regular expression similar to the
+ wildcard patterns used in file names by the Unix shells or the DOS
+ prompt.
+ 
+ ‘gnatname’ may be called with several sections of directories/patterns.
+ Sections are separated by the switch ‘--and’.  In each section, there
+ must be at least one pattern.  If no directory is specified in a
+ section, the current directory (or the project directory if ‘-P’ is
+ used) is implied.  The options other that the directory switches and the
+ patterns apply globally even if they are in different sections.
+ 
+ Examples of Naming Patterns are:
+ 
+      "*.[12].ada"
+      "*.ad[sb]*"
+      "body_*"    "spec_*"
+ 
+ For a more complete description of the syntax of Naming Patterns, see
+ the second kind of regular expressions described in ‘g-regexp.ads’ (the
+ ‘Glob’ regular expressions).
+ 
+ When invoked without the switch ‘-P’, ‘gnatname’ will create a
+ configuration pragmas file ‘gnat.adc’ in the current working directory,
+ with pragmas ‘Source_File_Name’ for each file that contains a valid Ada
+ unit.
+ 
+ 
+ File: gnat_ugn.info,  Node: Switches for gnatname,  Next: Examples of gnatname Usage,  Prev: Running gnatname,  Up: Handling Arbitrary File Naming Conventions with gnatname
+ 
+ 3.3.4.3 Switches for ‘gnatname’
+ ...............................
+ 
+ Switches for ‘gnatname’ must precede any specified Naming Pattern.
+ 
+ You may specify any of the following switches to ‘gnatname’:
+ 
+ ‘--version’
+ 
+      Display Copyright and version, then exit disregarding all other
+      options.
+ 
+ ‘--help’
+ 
+      If ‘--version’ was not used, display usage, then exit disregarding
+      all other options.
+ 
+ ‘--subdirs=`dir'’
+ 
+      Real object, library or exec directories are subdirectories <dir>
+      of the specified ones.
+ 
+ ‘--no-backup’
+ 
+      Do not create a backup copy of an existing project file.
+ 
+ ‘--and’
+ 
+      Start another section of directories/patterns.
+ 
+ ‘-c`filename'’
+ 
+      Create a configuration pragmas file ‘filename’ (instead of the
+      default ‘gnat.adc’).  There may be zero, one or more space between
+      ‘-c’ and ‘filename’.  ‘filename’ may include directory information.
+      ‘filename’ must be writable.  There may be only one switch ‘-c’.
+      When a switch ‘-c’ is specified, no switch ‘-P’ may be specified
+      (see below).
+ 
+ ‘-d`dir'’
+ 
+      Look for source files in directory ‘dir’.  There may be zero, one
+      or more spaces between ‘-d’ and ‘dir’.  ‘dir’ may end with ‘/**’,
+      that is it may be of the form ‘root_dir/**’.  In this case, the
+      directory ‘root_dir’ and all of its subdirectories, recursively,
+      have to be searched for sources.  When a switch ‘-d’ is specified,
+      the current working directory will not be searched for source
+      files, unless it is explicitly specified with a ‘-d’ or ‘-D’
+      switch.  Several switches ‘-d’ may be specified.  If ‘dir’ is a
+      relative path, it is relative to the directory of the configuration
+      pragmas file specified with switch ‘-c’, or to the directory of the
+      project file specified with switch ‘-P’ or, if neither switch ‘-c’
+      nor switch ‘-P’ are specified, it is relative to the current
+      working directory.  The directory specified with switch ‘-d’ must
+      exist and be readable.
+ 
+ ‘-D`filename'’
+ 
+      Look for source files in all directories listed in text file
+      ‘filename’.  There may be zero, one or more spaces between ‘-D’ and
+      ‘filename’.  ‘filename’ must be an existing, readable text file.
+      Each nonempty line in ‘filename’ must be a directory.  Specifying
+      switch ‘-D’ is equivalent to specifying as many switches ‘-d’ as
+      there are nonempty lines in ‘file’.
+ 
+ ‘-eL’
+ 
+      Follow symbolic links when processing project files.
+ 
+ ‘-f`pattern'’
+ 
+      Foreign patterns.  Using this switch, it is possible to add sources
+      of languages other than Ada to the list of sources of a project
+      file.  It is only useful if a -P switch is used.  For example,
+ 
+           gnatname -Pprj -f"*.c" "*.ada"
+ 
+      will look for Ada units in all files with the ‘.ada’ extension, and
+      will add to the list of file for project ‘prj.gpr’ the C files with
+      extension ‘.c’.
+ 
+ ‘-h’
+ 
+      Output usage (help) information.  The output is written to
+      ‘stdout’.
+ 
+ ‘-P`proj'’
+ 
+      Create or update project file ‘proj’.  There may be zero, one or
+      more space between ‘-P’ and ‘proj’.  ‘proj’ may include directory
+      information.  ‘proj’ must be writable.  There may be only one
+      switch ‘-P’.  When a switch ‘-P’ is specified, no switch ‘-c’ may
+      be specified.  On all platforms, except on VMS, when ‘gnatname’ is
+      invoked for an existing project file <proj>.gpr, a backup copy of
+      the project file is created in the project directory with file name
+      <proj>.gpr.saved_x.  ‘x’ is the first non negative number that
+      makes this backup copy a new file.
+ 
+ ‘-v’
+ 
+      Verbose mode.  Output detailed explanation of behavior to ‘stdout’.
+      This includes name of the file written, the name of the directories
+      to search and, for each file in those directories whose name
+      matches at least one of the Naming Patterns, an indication of
+      whether the file contains a unit, and if so the name of the unit.
+ 
+ ‘-v -v’
+ 
+      Very Verbose mode.  In addition to the output produced in verbose
+      mode, for each file in the searched directories whose name matches
+      none of the Naming Patterns, an indication is given that there is
+      no match.
+ 
+ ‘-x`pattern'’
+ 
+      Excluded patterns.  Using this switch, it is possible to exclude
+      some files that would match the name patterns.  For example,
+ 
+           gnatname -x "*_nt.ada" "*.ada"
+ 
+      will look for Ada units in all files with the ‘.ada’ extension,
+      except those whose names end with ‘_nt.ada’.
+ 
+ 
+ File: gnat_ugn.info,  Node: Examples of gnatname Usage,  Prev: Switches for gnatname,  Up: Handling Arbitrary File Naming Conventions with gnatname
+ 
+ 3.3.4.4 Examples of ‘gnatname’ Usage
+ ....................................
+ 
+      $ gnatname -c /home/me/names.adc -d sources "[a-z]*.ada*"
+ 
+ In this example, the directory ‘/home/me’ must already exist and be
+ writable.  In addition, the directory ‘/home/me/sources’ (specified by
+ ‘-d sources’) must exist and be readable.
+ 
+ Note the optional spaces after ‘-c’ and ‘-d’.
+ 
+      $ gnatname -P/home/me/proj -x "*_nt_body.ada"
+      -dsources -dsources/plus -Dcommon_dirs.txt "body_*" "spec_*"
+ 
+ Note that several switches ‘-d’ may be used, even in conjunction with
+ one or several switches ‘-D’.  Several Naming Patterns and one excluded
+ pattern are used in this example.
+ 
+ 
+ File: gnat_ugn.info,  Node: File Name Krunching with gnatkr,  Next: Renaming Files with gnatchop,  Prev: Handling Arbitrary File Naming Conventions with gnatname,  Up: File Naming Topics and Utilities
+ 
+ 3.3.5 File Name Krunching with ‘gnatkr’
+ ---------------------------------------
+ 
+ This section discusses the method used by the compiler to shorten the
+ default file names chosen for Ada units so that they do not exceed the
+ maximum length permitted.  It also describes the ‘gnatkr’ utility that
+ can be used to determine the result of applying this shortening.
+ 
+ * Menu:
+ 
+ * About gnatkr::
+ * Using gnatkr::
+ * Krunching Method::
+ * Examples of gnatkr Usage::
+ 
+ 
+ File: gnat_ugn.info,  Node: About gnatkr,  Next: Using gnatkr,  Up: File Name Krunching with gnatkr
+ 
+ 3.3.5.1 About ‘gnatkr’
+ ......................
+ 
+ The default file naming rule in GNAT is that the file name must be
+ derived from the unit name.  The exact default rule is as follows:
+ 
+    * Take the unit name and replace all dots by hyphens.
+ 
+    * If such a replacement occurs in the second character position of a
+      name, and the first character is ‘a’, ‘g’, ‘s’, or ‘i’, then
+      replace the dot by the character ‘~’ (tilde) instead of a minus.
+ 
+      The reason for this exception is to avoid clashes with the standard
+      names for children of System, Ada, Interfaces, and GNAT, which use
+      the prefixes ‘s-’, ‘a-’, ‘i-’, and ‘g-’, respectively.
+ 
+ The ‘-gnatk`nn'’ switch of the compiler activates a ‘krunching’ circuit
+ that limits file names to nn characters (where nn is a decimal integer).
+ 
+ The ‘gnatkr’ utility can be used to determine the krunched name for a
+ given file, when krunched to a specified maximum length.
+ 
+ 
+ File: gnat_ugn.info,  Node: Using gnatkr,  Next: Krunching Method,  Prev: About gnatkr,  Up: File Name Krunching with gnatkr
+ 
+ 3.3.5.2 Using ‘gnatkr’
+ ......................
+ 
+ The ‘gnatkr’ command has the form:
+ 
+      $ gnatkr name [ length ]
+ 
+ ‘name’ is the uncrunched file name, derived from the name of the unit in
+ the standard manner described in the previous section (i.e., in
+ particular all dots are replaced by hyphens).  The file name may or may
+ not have an extension (defined as a suffix of the form period followed
+ by arbitrary characters other than period).  If an extension is present
+ then it will be preserved in the output.  For example, when krunching
+ ‘hellofile.ads’ to eight characters, the result will be hellofil.ads.
+ 
+ Note: for compatibility with previous versions of ‘gnatkr’ dots may
+ appear in the name instead of hyphens, but the last dot will always be
+ taken as the start of an extension.  So if ‘gnatkr’ is given an argument
+ such as ‘Hello.World.adb’ it will be treated exactly as if the first
+ period had been a hyphen, and for example krunching to eight characters
+ gives the result ‘hellworl.adb’.
+ 
+ Note that the result is always all lower case.  Characters of the other
+ case are folded as required.
+ 
+ ‘length’ represents the length of the krunched name.  The default when
+ no argument is given is 8 characters.  A length of zero stands for
+ unlimited, in other words do not chop except for system files where the
+ implied crunching length is always eight characters.
+ 
+ The output is the krunched name.  The output has an extension only if
+ the original argument was a file name with an extension.
+ 
+ 
+ File: gnat_ugn.info,  Node: Krunching Method,  Next: Examples of gnatkr Usage,  Prev: Using gnatkr,  Up: File Name Krunching with gnatkr
+ 
+ 3.3.5.3 Krunching Method
+ ........................
+ 
+ The initial file name is determined by the name of the unit that the
+ file contains.  The name is formed by taking the full expanded name of
+ the unit and replacing the separating dots with hyphens and using
+ lowercase for all letters, except that a hyphen in the second character
+ position is replaced by a tilde if the first character is ‘a’, ‘i’, ‘g’,
+ or ‘s’.  The extension is ‘.ads’ for a spec and ‘.adb’ for a body.
+ Krunching does not affect the extension, but the file name is shortened
+ to the specified length by following these rules:
+ 
+    * The name is divided into segments separated by hyphens, tildes or
+      underscores and all hyphens, tildes, and underscores are
+      eliminated.  If this leaves the name short enough, we are done.
+ 
+    * If the name is too long, the longest segment is located (left-most
+      if there are two of equal length), and shortened by dropping its
+      last character.  This is repeated until the name is short enough.
+ 
+      As an example, consider the krunching of
+      ‘our-strings-wide_fixed.adb’ to fit the name into 8 characters as
+      required by some operating systems:
+ 
+           our-strings-wide_fixed 22
+           our strings wide fixed 19
+           our string  wide fixed 18
+           our strin   wide fixed 17
+           our stri    wide fixed 16
+           our stri    wide fixe  15
+           our str     wide fixe  14
+           our str     wid  fixe  13
+           our str     wid  fix   12
+           ou  str     wid  fix   11
+           ou  st      wid  fix   10
+           ou  st      wi   fix   9
+           ou  st      wi   fi    8
+           Final file name: oustwifi.adb
+ 
+    * The file names for all predefined units are always krunched to
+      eight characters.  The krunching of these predefined units uses the
+      following special prefix replacements:
+ 
+      Prefix                    Replacement
+                                
+                                
+      ‘ada-’                    ‘a-’
+                                
+                                
+      ‘gnat-’                   ‘g-’
+                                
+                                
+      ‘interfac es-’            ‘i-’
+                                
+                                
+      ‘system-’                 ‘s-’
+                                
+ 
+      These system files have a hyphen in the second character position.
+      That is why normal user files replace such a character with a
+      tilde, to avoid confusion with system file names.
+ 
+      As an example of this special rule, consider
+      ‘ada-strings-wide_fixed.adb’, which gets krunched as follows:
+ 
+           ada-strings-wide_fixed 22
+           a-  strings wide fixed 18
+           a-  string  wide fixed 17
+           a-  strin   wide fixed 16
+           a-  stri    wide fixed 15
+           a-  stri    wide fixe  14
+           a-  str     wide fixe  13
+           a-  str     wid  fixe  12
+           a-  str     wid  fix   11
+           a-  st      wid  fix   10
+           a-  st      wi   fix   9
+           a-  st      wi   fi    8
+           Final file name: a-stwifi.adb
+ 
+ Of course no file shortening algorithm can guarantee uniqueness over all
+ possible unit names, and if file name krunching is used then it is your
+ responsibility to ensure that no name clashes occur.  The utility
+ program ‘gnatkr’ is supplied for conveniently determining the krunched
+ name of a file.
+ 
+ 
+ File: gnat_ugn.info,  Node: Examples of gnatkr Usage,  Prev: Krunching Method,  Up: File Name Krunching with gnatkr
+ 
+ 3.3.5.4 Examples of ‘gnatkr’ Usage
+ ..................................
+ 
+      $ gnatkr very_long_unit_name.ads      --> velounna.ads
+      $ gnatkr grandparent-parent-child.ads --> grparchi.ads
+      $ gnatkr Grandparent.Parent.Child.ads --> grparchi.ads
+      $ gnatkr grandparent-parent-child     --> grparchi
+      $ gnatkr very_long_unit_name.ads/count=6 --> vlunna.ads
+      $ gnatkr very_long_unit_name.ads/count=0 --> very_long_unit_name.ads
+ 
+ 
+ File: gnat_ugn.info,  Node: Renaming Files with gnatchop,  Prev: File Name Krunching with gnatkr,  Up: File Naming Topics and Utilities
+ 
+ 3.3.6 Renaming Files with ‘gnatchop’
+ ------------------------------------
+ 
+ This section discusses how to handle files with multiple units by using
+ the ‘gnatchop’ utility.  This utility is also useful in renaming files
+ to meet the standard GNAT default file naming conventions.
+ 
+ * Menu:
+ 
+ * Handling Files with Multiple Units::
+ * Operating gnatchop in Compilation Mode::
+ * Command Line for gnatchop::
+ * Switches for gnatchop::
+ * Examples of gnatchop Usage::
+ 
+ 
+ File: gnat_ugn.info,  Node: Handling Files with Multiple Units,  Next: Operating gnatchop in Compilation Mode,  Up: Renaming Files with gnatchop
+ 
+ 3.3.6.1 Handling Files with Multiple Units
+ ..........................................
+ 
+ The basic compilation model of GNAT requires that a file submitted to
+ the compiler have only one unit and there be a strict correspondence
+ between the file name and the unit name.
+ 
+ If you want to keep your files with multiple units, perhaps to maintain
+ compatibility with some other Ada compilation system, you can use
+ ‘gnatname’ to generate or update your project files.  Generated or
+ modified project files can be processed by GNAT.
+ 
+ See *note Handling Arbitrary File Naming Conventions with gnatname: 42.
+ for more details on how to use ‘gnatname’.
+ 
+ Alternatively, if you want to permanently restructure a set of ‘foreign’
+ files so that they match the GNAT rules, and do the remaining
+ development using the GNAT structure, you can simply use ‘gnatchop’
+ once, generate the new set of files and work with them from that point
+ on.
+ 
+ Note that if your file containing multiple units starts with a byte
+ order mark (BOM) specifying UTF-8 encoding, then the files generated by
+ gnatchop will each start with a copy of this BOM, meaning that they can
+ be compiled automatically in UTF-8 mode without needing to specify an
+ explicit encoding.
+ 
+ 
+ File: gnat_ugn.info,  Node: Operating gnatchop in Compilation Mode,  Next: Command Line for gnatchop,  Prev: Handling Files with Multiple Units,  Up: Renaming Files with gnatchop
+ 
+ 3.3.6.2 Operating gnatchop in Compilation Mode
+ ..............................................
+ 
+ The basic function of ‘gnatchop’ is to take a file with multiple units
+ and split it into separate files.  The boundary between files is
+ reasonably clear, except for the issue of comments and pragmas.  In
+ default mode, the rule is that any pragmas between units belong to the
+ previous unit, except that configuration pragmas always belong to the
+ following unit.  Any comments belong to the following unit.  These rules
+ almost always result in the right choice of the split point without
+ needing to mark it explicitly and most users will find this default to
+ be what they want.  In this default mode it is incorrect to submit a
+ file containing only configuration pragmas, or one that ends in
+ configuration pragmas, to ‘gnatchop’.
+ 
+ However, using a special option to activate ‘compilation mode’,
+ ‘gnatchop’ can perform another function, which is to provide exactly the
+ semantics required by the RM for handling of configuration pragmas in a
+ compilation.  In the absence of configuration pragmas (at the main file
+ level), this option has no effect, but it causes such configuration
+ pragmas to be handled in a quite different manner.
+ 
+ First, in compilation mode, if ‘gnatchop’ is given a file that consists
+ of only configuration pragmas, then this file is appended to the
+ ‘gnat.adc’ file in the current directory.  This behavior provides the
+ required behavior described in the RM for the actions to be taken on
+ submitting such a file to the compiler, namely that these pragmas should
+ apply to all subsequent compilations in the same compilation
+ environment.  Using GNAT, the current directory, possibly containing a
+ ‘gnat.adc’ file is the representation of a compilation environment.  For
+ more information on the ‘gnat.adc’ file, see *note Handling of
+ Configuration Pragmas: 3f.
+ 
+ Second, in compilation mode, if ‘gnatchop’ is given a file that starts
+ with configuration pragmas, and contains one or more units, then these
+ configuration pragmas are prepended to each of the chopped files.  This
+ behavior provides the required behavior described in the RM for the
+ actions to be taken on compiling such a file, namely that the pragmas
+ apply to all units in the compilation, but not to subsequently compiled
+ units.
+ 
+ Finally, if configuration pragmas appear between units, they are
+ appended to the previous unit.  This results in the previous unit being
+ illegal, since the compiler does not accept configuration pragmas that
+ follow a unit.  This provides the required RM behavior that forbids
+ configuration pragmas other than those preceding the first compilation
+ unit of a compilation.
+ 
+ For most purposes, ‘gnatchop’ will be used in default mode.  The
+ compilation mode described above is used only if you need exactly
+ accurate behavior with respect to compilations, and you have files that
+ contain multiple units and configuration pragmas.  In this circumstance
+ the use of ‘gnatchop’ with the compilation mode switch provides the
+ required behavior, and is for example the mode in which GNAT processes
+ the ACVC tests.
+ 
+ 
+ File: gnat_ugn.info,  Node: Command Line for gnatchop,  Next: Switches for gnatchop,  Prev: Operating gnatchop in Compilation Mode,  Up: Renaming Files with gnatchop
+ 
+ 3.3.6.3 Command Line for ‘gnatchop’
+ ...................................
+ 
+ The ‘gnatchop’ command has the form:
+ 
+      $ gnatchop switches file_name [file_name ...]
+            [directory]
+ 
+ The only required argument is the file name of the file to be chopped.
+ There are no restrictions on the form of this file name.  The file
+ itself contains one or more Ada units, in normal GNAT format,
+ concatenated together.  As shown, more than one file may be presented to
+ be chopped.
+ 
+ When run in default mode, ‘gnatchop’ generates one output file in the
+ current directory for each unit in each of the files.
+ 
+ ‘directory’, if specified, gives the name of the directory to which the
+ output files will be written.  If it is not specified, all files are
+ written to the current directory.
+ 
+ For example, given a file called ‘hellofiles’ containing
+ 
+      procedure Hello;
+ 
+      with Ada.Text_IO; use Ada.Text_IO;
+      procedure Hello is
+      begin
+         Put_Line ("Hello");
+      end Hello;
+ 
+ the command
+ 
+      $ gnatchop hellofiles
+ 
+ generates two files in the current directory, one called ‘hello.ads’
+ containing the single line that is the procedure spec, and the other
+ called ‘hello.adb’ containing the remaining text.  The original file is
+ not affected.  The generated files can be compiled in the normal manner.
+ 
+ When gnatchop is invoked on a file that is empty or that contains only
+ empty lines and/or comments, gnatchop will not fail, but will not
+ produce any new sources.
+ 
+ For example, given a file called ‘toto.txt’ containing
+ 
+      --  Just a comment
+ 
+ the command
+ 
+      $ gnatchop toto.txt
+ 
+ will not produce any new file and will result in the following warnings:
+ 
+      toto.txt:1:01: warning: empty file, contains no compilation units
+      no compilation units found
+      no source files written
+ 
+ 
+ File: gnat_ugn.info,  Node: Switches for gnatchop,  Next: Examples of gnatchop Usage,  Prev: Command Line for gnatchop,  Up: Renaming Files with gnatchop
+ 
+ 3.3.6.4 Switches for ‘gnatchop’
+ ...............................
+ 
+ ‘gnatchop’ recognizes the following switches:
+ 
+ ‘--version’
+ 
+      Display Copyright and version, then exit disregarding all other
+      options.
+ 
+ ‘--help’
+ 
+      If ‘--version’ was not used, display usage, then exit disregarding
+      all other options.
+ 
+ ‘-c’
+ 
+      Causes ‘gnatchop’ to operate in compilation mode, in which
+      configuration pragmas are handled according to strict RM rules.
+      See previous section for a full description of this mode.
+ 
+ ‘-gnat`xxx'’
+ 
+      This passes the given ‘-gnat`xxx'’ switch to ‘gnat’ which is used
+      to parse the given file.  Not all ‘xxx’ options make sense, but for
+      example, the use of ‘-gnati2’ allows ‘gnatchop’ to process a source
+      file that uses Latin-2 coding for identifiers.
+ 
+ ‘-h’
+ 
+      Causes ‘gnatchop’ to generate a brief help summary to the standard
+      output file showing usage information.
+ 
+ ‘-k`mm'’
+ 
+      Limit generated file names to the specified number ‘mm’ of
+      characters.  This is useful if the resulting set of files is
+      required to be interoperable with systems which limit the length of
+      file names.  No space is allowed between the ‘-k’ and the numeric
+      value.  The numeric value may be omitted in which case a default of
+      ‘-k8’, suitable for use with DOS-like file systems, is used.  If no
+      ‘-k’ switch is present then there is no limit on the length of file
+      names.
+ 
+ ‘-p’
+ 
+      Causes the file modification time stamp of the input file to be
+      preserved and used for the time stamp of the output file(s).  This
+      may be useful for preserving coherency of time stamps in an
+      environment where ‘gnatchop’ is used as part of a standard build
+      process.
+ 
+ ‘-q’
+ 
+      Causes output of informational messages indicating the set of
+      generated files to be suppressed.  Warnings and error messages are
+      unaffected.
+ 
+ ‘-r’
+ 
+      Generate ‘Source_Reference’ pragmas.  Use this switch if the output
+      files are regarded as temporary and development is to be done in
+      terms of the original unchopped file.  This switch causes
+      ‘Source_Reference’ pragmas to be inserted into each of the
+      generated files to refers back to the original file name and line
+      number.  The result is that all error messages refer back to the
+      original unchopped file.  In addition, the debugging information
+      placed into the object file (when the ‘-g’ switch of ‘gcc’ or
+      ‘gnatmake’ is specified) also refers back to this original file so
+      that tools like profilers and debuggers will give information in
+      terms of the original unchopped file.
+ 
+      If the original file to be chopped itself contains a
+      ‘Source_Reference’ pragma referencing a third file, then gnatchop
+      respects this pragma, and the generated ‘Source_Reference’ pragmas
+      in the chopped file refer to the original file, with appropriate
+      line numbers.  This is particularly useful when ‘gnatchop’ is used
+      in conjunction with ‘gnatprep’ to compile files that contain
+      preprocessing statements and multiple units.
+ 
+ ‘-v’
+ 
+      Causes ‘gnatchop’ to operate in verbose mode.  The version number
+      and copyright notice are output, as well as exact copies of the
+      gnat1 commands spawned to obtain the chop control information.
+ 
+ ‘-w’
+ 
+      Overwrite existing file names.  Normally ‘gnatchop’ regards it as a
+      fatal error if there is already a file with the same name as a file
+      it would otherwise output, in other words if the files to be
+      chopped contain duplicated units.  This switch bypasses this check,
+      and causes all but the last instance of such duplicated units to be
+      skipped.
+ 
+ ‘--GCC=`xxxx'’
+ 
+      Specify the path of the GNAT parser to be used.  When this switch
+      is used, no attempt is made to add the prefix to the GNAT parser
+      executable.
+ 
+ 
+ File: gnat_ugn.info,  Node: Examples of gnatchop Usage,  Prev: Switches for gnatchop,  Up: Renaming Files with gnatchop
+ 
+ 3.3.6.5 Examples of ‘gnatchop’ Usage
+ ....................................
+ 
+      $ gnatchop -w hello_s.ada prerelease/files
+ 
+ Chops the source file ‘hello_s.ada’.  The output files will be placed in
+ the directory ‘prerelease/files’, overwriting any files with matching
+ names in that directory (no files in the current directory are
+ modified).
+ 
+      $ gnatchop archive
+ 
+ Chops the source file ‘archive’ into the current directory.  One useful
+ application of ‘gnatchop’ is in sending sets of sources around, for
+ example in email messages.  The required sources are simply concatenated
+ (for example, using a Unix ‘cat’ command), and then ‘gnatchop’ is used
+ at the other end to reconstitute the original file names.
+ 
+      $ gnatchop file1 file2 file3 direc
+ 
+ Chops all units in files ‘file1’, ‘file2’, ‘file3’, placing the
+ resulting files in the directory ‘direc’.  Note that if any units occur
+ more than once anywhere within this set of files, an error message is
+ generated, and no files are written.  To override this check, use the
+ ‘-w’ switch, in which case the last occurrence in the last file will be
+ the one that is output, and earlier duplicate occurrences for a given
+ unit will be skipped.
+ 
+ 
+ File: gnat_ugn.info,  Node: Configuration Pragmas,  Next: Generating Object Files,  Prev: File Naming Topics and Utilities,  Up: The GNAT Compilation Model
+ 
+ 3.4 Configuration Pragmas
+ =========================
+ 
+ Configuration pragmas include those pragmas described as such in the Ada
+ Reference Manual, as well as implementation-dependent pragmas that are
+ configuration pragmas.  See the ‘Implementation_Defined_Pragmas’ chapter
+ in the ‘GNAT_Reference_Manual’ for details on these additional
+ GNAT-specific configuration pragmas.  Most notably, the pragma
+ ‘Source_File_Name’, which allows specifying non-default names for source
+ files, is a configuration pragma.  The following is a complete list of
+ configuration pragmas recognized by GNAT:
+ 
+      Ada_83
+      Ada_95
+      Ada_05
+      Ada_2005
+      Ada_12
+      Ada_2012
+      Ada_2022
+      Aggregate_Individually_Assign
+      Allow_Integer_Address
+      Annotate
+      Assertion_Policy
+      Assume_No_Invalid_Values
+      C_Pass_By_Copy
+      Check_Float_Overflow
+      Check_Name
+      Check_Policy
+      Component_Alignment
+      Convention_Identifier
+      Debug_Policy
+      Default_Scalar_Storage_Order
+      Default_Storage_Pool
+      Detect_Blocking
+      Disable_Atomic_Synchronization
+      Discard_Names
+      Elaboration_Checks
+      Eliminate
+      Enable_Atomic_Synchronization
+      Extend_System
+      Extensions_Allowed
+      External_Name_Casing
+      Fast_Math
+      Favor_Top_Level
+      Ignore_Pragma
+      Implicit_Packing
+      Initialize_Scalars
+      Interrupt_State
+      License
+      Locking_Policy
+      No_Component_Reordering
+      No_Heap_Finalization
+      No_Strict_Aliasing
+      Normalize_Scalars
+      Optimize_Alignment
+      Overflow_Mode
+      Overriding_Renamings
+      Partition_Elaboration_Policy
+      Persistent_BSS
+      Prefix_Exception_Messages
+      Priority_Specific_Dispatching
+      Profile
+      Profile_Warnings
+      Queuing_Policy
+      Rename_Pragma
+      Restrictions
+      Restriction_Warnings
+      Reviewable
+      Short_Circuit_And_Or
+      Source_File_Name
+      Source_File_Name_Project
+      SPARK_Mode
+      Style_Checks
+      Suppress
+      Suppress_Exception_Locations
+      Task_Dispatching_Policy
+      Unevaluated_Use_Of_Old
+      Unsuppress
+      Use_VADS_Size
+      Validity_Checks
+      Warning_As_Error
+      Warnings
+      Wide_Character_Encoding
+ 
+ * Menu:
+ 
+ * Handling of Configuration Pragmas::
+ * The Configuration Pragmas Files::
+ 
+ 
+ File: gnat_ugn.info,  Node: Handling of Configuration Pragmas,  Next: The Configuration Pragmas Files,  Up: Configuration Pragmas
+ 
+ 3.4.1 Handling of Configuration Pragmas
+ ---------------------------------------
+ 
+ Configuration pragmas may either appear at the start of a compilation
+ unit, or they can appear in a configuration pragma file to apply to all
+ compilations performed in a given compilation environment.
+ 
+ GNAT also provides the ‘gnatchop’ utility to provide an automatic way to
+ handle configuration pragmas following the semantics for compilations
+ (that is, files with multiple units), described in the RM. See *note
+ Operating gnatchop in Compilation Mode: 59. for details.  However, for
+ most purposes, it will be more convenient to edit the ‘gnat.adc’ file
+ that contains configuration pragmas directly, as described in the
+ following section.
+ 
+ In the case of ‘Restrictions’ pragmas appearing as configuration pragmas
+ in individual compilation units, the exact handling depends on the type
+ of restriction.
+ 
+ Restrictions that require partition-wide consistency (like ‘No_Tasking’)
+ are recognized wherever they appear and can be freely inherited, e.g.
+ from a ‘with’ed unit to the ‘with’ing unit.  This makes sense since the
+ binder will in any case insist on seeing consistent use, so any unit not
+ conforming to any restrictions that are anywhere in the partition will
+ be rejected, and you might as well find that out at compile time rather
+ than at bind time.
+ 
+ For restrictions that do not require partition-wide consistency, e.g.
+ SPARK or No_Implementation_Attributes, in general the restriction
+ applies only to the unit in which the pragma appears, and not to any
+ other units.
+ 
+ The exception is No_Elaboration_Code which always applies to the entire
+ object file from a compilation, i.e.  to the body, spec, and all
+ subunits.  This restriction can be specified in a configuration pragma
+ file, or it can be on the body and/or the spec (in either case it
+ applies to all the relevant units).  It can appear on a subunit only if
+ it has previously appeared in the body of spec.
+ 
+ 
+ File: gnat_ugn.info,  Node: The Configuration Pragmas Files,  Prev: Handling of Configuration Pragmas,  Up: Configuration Pragmas
+ 
+ 3.4.2 The Configuration Pragmas Files
+ -------------------------------------
+ 
+ In GNAT a compilation environment is defined by the current directory at
+ the time that a compile command is given.  This current directory is
+ searched for a file whose name is ‘gnat.adc’.  If this file is present,
+ it is expected to contain one or more configuration pragmas that will be
+ applied to the current compilation.  However, if the switch ‘-gnatA’ is
+ used, ‘gnat.adc’ is not considered.  When taken into account, ‘gnat.adc’
+ is added to the dependencies, so that if ‘gnat.adc’ is modified later,
+ an invocation of ‘gnatmake’ will recompile the source.
+ 
+ Configuration pragmas may be entered into the ‘gnat.adc’ file either by
+ running ‘gnatchop’ on a source file that consists only of configuration
+ pragmas, or more conveniently by direct editing of the ‘gnat.adc’ file,
+ which is a standard format source file.
+ 
+ Besides ‘gnat.adc’, additional files containing configuration pragmas
+ may be applied to the current compilation using the switch
+ ‘-gnatec=`path'’ where ‘path’ must designate an existing file that
+ contains only configuration pragmas.  These configuration pragmas are in
+ addition to those found in ‘gnat.adc’ (provided ‘gnat.adc’ is present
+ and switch ‘-gnatA’ is not used).
+ 
+ It is allowable to specify several switches ‘-gnatec=’, all of which
+ will be taken into account.
+ 
+ Files containing configuration pragmas specified with switches
+ ‘-gnatec=’ are added to the dependencies, unless they are temporary
+ files.  A file is considered temporary if its name ends in ‘.tmp’ or
+ ‘.TMP’.  Certain tools follow this naming convention because they pass
+ information to ‘gcc’ via temporary files that are immediately deleted;
+ it doesn’t make sense to depend on a file that no longer exists.  Such
+ tools include ‘gprbuild’, ‘gnatmake’, and ‘gnatcheck’.
+ 
+ By default, configuration pragma files are stored by their absolute
+ paths in ALI files.  You can use the ‘-gnateb’ switch in order to store
+ them by their basename instead.
+ 
+ If you are using project file, a separate mechanism is provided using
+ project attributes.
+ 
+ 
+ File: gnat_ugn.info,  Node: Generating Object Files,  Next: Source Dependencies,  Prev: Configuration Pragmas,  Up: The GNAT Compilation Model
+ 
+ 3.5 Generating Object Files
+ ===========================
+ 
+ An Ada program consists of a set of source files, and the first step in
+ compiling the program is to generate the corresponding object files.
+ These are generated by compiling a subset of these source files.  The
+ files you need to compile are the following:
+ 
+    * If a package spec has no body, compile the package spec to produce
+      the object file for the package.
+ 
+    * If a package has both a spec and a body, compile the body to
+      produce the object file for the package.  The source file for the
+      package spec need not be compiled in this case because there is
+      only one object file, which contains the code for both the spec and
+      body of the package.
+ 
+    * For a subprogram, compile the subprogram body to produce the object
+      file for the subprogram.  The spec, if one is present, is as usual
+      in a separate file, and need not be compiled.
+ 
+    * In the case of subunits, only compile the parent unit.  A single
+      object file is generated for the entire subunit tree, which
+      includes all the subunits.
+ 
+    * Compile child units independently of their parent units (though, of
+      course, the spec of all the ancestor unit must be present in order
+      to compile a child unit).
+ 
+    * Compile generic units in the same manner as any other units.  The
+      object files in this case are small dummy files that contain at
+      most the flag used for elaboration checking.  This is because GNAT
+      always handles generic instantiation by means of macro expansion.
+      However, it is still necessary to compile generic units, for
+      dependency checking and elaboration purposes.
+ 
+ The preceding rules describe the set of files that must be compiled to
+ generate the object files for a program.  Each object file has the same
+ name as the corresponding source file, except that the extension is ‘.o’
+ as usual.
+ 
+ You may wish to compile other files for the purpose of checking their
+ syntactic and semantic correctness.  For example, in the case where a
+ package has a separate spec and body, you would not normally compile the
+ spec.  However, it is convenient in practice to compile the spec to make
+ sure it is error-free before compiling clients of this spec, because
+ such compilations will fail if there is an error in the spec.
+ 
+ GNAT provides an option for compiling such files purely for the purposes
+ of checking correctness; such compilations are not required as part of
+ the process of building a program.  To compile a file in this checking
+ mode, use the ‘-gnatc’ switch.
+ 
+ 
+ File: gnat_ugn.info,  Node: Source Dependencies,  Next: The Ada Library Information Files,  Prev: Generating Object Files,  Up: The GNAT Compilation Model
+ 
+ 3.6 Source Dependencies
+ =======================
+ 
+ A given object file clearly depends on the source file which is compiled
+ to produce it.  Here we are using “depends” in the sense of a typical
+ ‘make’ utility; in other words, an object file depends on a source file
+ if changes to the source file require the object file to be recompiled.
+ In addition to this basic dependency, a given object may depend on
+ additional source files as follows:
+ 
+    * If a file being compiled ‘with’s a unit ‘X’, the object file
+      depends on the file containing the spec of unit ‘X’.  This includes
+      files that are ‘with’ed implicitly either because they are parents
+      of ‘with’ed child units or they are run-time units required by the
+      language constructs used in a particular unit.
+ 
+    * If a file being compiled instantiates a library level generic unit,
+      the object file depends on both the spec and body files for this
+      generic unit.
+ 
+    * If a file being compiled instantiates a generic unit defined within
+      a package, the object file depends on the body file for the package
+      as well as the spec file.
+ 
+    * If a file being compiled contains a call to a subprogram for which
+      pragma ‘Inline’ applies and inlining is activated with the ‘-gnatn’
+      switch, the object file depends on the file containing the body of
+      this subprogram as well as on the file containing the spec.  Note
+      that for inlining to actually occur as a result of the use of this
+      switch, it is necessary to compile in optimizing mode.
+ 
+      The use of ‘-gnatN’ activates inlining optimization that is
+      performed by the front end of the compiler.  This inlining does not
+      require that the code generation be optimized.  Like ‘-gnatn’, the
+      use of this switch generates additional dependencies.
+ 
+      When using a gcc-based back end, then the use of ‘-gnatN’ is
+      deprecated, and the use of ‘-gnatn’ is preferred.  Historically
+      front end inlining was more extensive than the gcc back end
+      inlining, but that is no longer the case.
+ 
+    * If an object file ‘O’ depends on the proper body of a subunit
+      through inlining or instantiation, it depends on the parent unit of
+      the subunit.  This means that any modification of the parent unit
+      or one of its subunits affects the compilation of ‘O’.
+ 
+    * The object file for a parent unit depends on all its subunit body
+      files.
+ 
+    * The previous two rules meant that for purposes of computing
+      dependencies and recompilation, a body and all its subunits are
+      treated as an indivisible whole.
+ 
+      These rules are applied transitively: if unit ‘A’ ‘with’s unit ‘B’,
+      whose elaboration calls an inlined procedure in package ‘C’, the
+      object file for unit ‘A’ will depend on the body of ‘C’, in file
+      ‘c.adb’.
+ 
+      The set of dependent files described by these rules includes all
+      the files on which the unit is semantically dependent, as dictated
+      by the Ada language standard.  However, it is a superset of what
+      the standard describes, because it includes generic, inline, and
+      subunit dependencies.
+ 
+      An object file must be recreated by recompiling the corresponding
+      source file if any of the source files on which it depends are
+      modified.  For example, if the ‘make’ utility is used to control
+      compilation, the rule for an Ada object file must mention all the
+      source files on which the object file depends, according to the
+      above definition.  The determination of the necessary
+      recompilations is done automatically when one uses ‘gnatmake’.
+ 
+ 
+ File: gnat_ugn.info,  Node: The Ada Library Information Files,  Next: Binding an Ada Program,  Prev: Source Dependencies,  Up: The GNAT Compilation Model
+ 
+ 3.7 The Ada Library Information Files
+ =====================================
+ 
+ Each compilation actually generates two output files.  The first of
+ these is the normal object file that has a ‘.o’ extension.  The second
+ is a text file containing full dependency information.  It has the same
+ name as the source file, but an ‘.ali’ extension.  This file is known as
+ the Ada Library Information (‘ALI’) file.  The following information is
+ contained in the ‘ALI’ file.
+ 
+    * Version information (indicates which version of GNAT was used to
+      compile the unit(s) in question)
+ 
+    * Main program information (including priority and time slice
+      settings, as well as the wide character encoding used during
+      compilation).
+ 
+    * List of arguments used in the ‘gcc’ command for the compilation
+ 
+    * Attributes of the unit, including configuration pragmas used, an
+      indication of whether the compilation was successful, exception
+      model used etc.
+ 
+    * A list of relevant restrictions applying to the unit (used for
+      consistency) checking.
+ 
+    * Categorization information (e.g., use of pragma ‘Pure’).
+ 
+    * Information on all ‘with’ed units, including presence of
+      ‘Elaborate’ or ‘Elaborate_All’ pragmas.
+ 
+    * Information from any ‘Linker_Options’ pragmas used in the unit
+ 
+    * Information on the use of ‘Body_Version’ or ‘Version’ attributes in
+      the unit.
+ 
+    * Dependency information.  This is a list of files, together with
+      time stamp and checksum information.  These are files on which the
+      unit depends in the sense that recompilation is required if any of
+      these units are modified.
+ 
+    * Cross-reference data.  Contains information on all entities
+      referenced in the unit.  Used by some tools to provide
+      cross-reference information.
+ 
+ For a full detailed description of the format of the ‘ALI’ file, see the
+ source of the body of unit ‘Lib.Writ’, contained in file ‘lib-writ.adb’
+ in the GNAT compiler sources.
+ 
+ 
+ File: gnat_ugn.info,  Node: Binding an Ada Program,  Next: GNAT and Libraries,  Prev: The Ada Library Information Files,  Up: The GNAT Compilation Model
+ 
+ 3.8 Binding an Ada Program
+ ==========================
+ 
+ When using languages such as C and C++, once the source files have been
+ compiled the only remaining step in building an executable program is
+ linking the object modules together.  This means that it is possible to
+ link an inconsistent version of a program, in which two units have
+ included different versions of the same header.
+ 
+ The rules of Ada do not permit such an inconsistent program to be built.
+ For example, if two clients have different versions of the same package,
+ it is illegal to build a program containing these two clients.  These
+ rules are enforced by the GNAT binder, which also determines an
+ elaboration order consistent with the Ada rules.
+ 
+ The GNAT binder is run after all the object files for a program have
+ been created.  It is given the name of the main program unit, and from
+ this it determines the set of units required by the program, by reading
+ the corresponding ALI files.  It generates error messages if the program
+ is inconsistent or if no valid order of elaboration exists.
+ 
+ If no errors are detected, the binder produces a main program, in Ada by
+ default, that contains calls to the elaboration procedures of those
+ compilation unit that require them, followed by a call to the main
+ program.  This Ada program is compiled to generate the object file for
+ the main program.  The name of the Ada file is ‘b~xxx’.adb‘ (with the
+ corresponding spec ‘b~xxx’.ads‘) where ‘xxx’ is the name of the main
+ program unit.
+ 
+ Finally, the linker is used to build the resulting executable program,
+ using the object from the main program from the bind step as well as the
+ object files for the Ada units of the program.
+ 
+ 
+ File: gnat_ugn.info,  Node: GNAT and Libraries,  Next: Conditional Compilation,  Prev: Binding an Ada Program,  Up: The GNAT Compilation Model
+ 
+ 3.9 GNAT and Libraries
+ ======================
+ 
+ This section describes how to build and use libraries with GNAT, and
+ also shows how to recompile the GNAT run-time library.  You should be
+ familiar with the Project Manager facility (see the
+ ‘GNAT_Project_Manager’ chapter of the ‘GPRbuild User’s Guide’) before
+ reading this chapter.
+ 
+ * Menu:
+ 
+ * Introduction to Libraries in GNAT::
+ * General Ada Libraries::
+ * Stand-alone Ada Libraries::
+ * Rebuilding the GNAT Run-Time Library::
+ 
+ 
+ File: gnat_ugn.info,  Node: Introduction to Libraries in GNAT,  Next: General Ada Libraries,  Up: GNAT and Libraries
+ 
+ 3.9.1 Introduction to Libraries in GNAT
+ ---------------------------------------
+ 
+ A library is, conceptually, a collection of objects which does not have
+ its own main thread of execution, but rather provides certain services
+ to the applications that use it.  A library can be either statically
+ linked with the application, in which case its code is directly included
+ in the application, or, on platforms that support it, be dynamically
+ linked, in which case its code is shared by all applications making use
+ of this library.
+ 
+ GNAT supports both types of libraries.  In the static case, the compiled
+ code can be provided in different ways.  The simplest approach is to
+ provide directly the set of objects resulting from compilation of the
+ library source files.  Alternatively, you can group the objects into an
+ archive using whatever commands are provided by the operating system.
+ For the latter case, the objects are grouped into a shared library.
+ 
+ In the GNAT environment, a library has three types of components:
+ 
+    * Source files,
+ 
+    * ‘ALI’ files (see *note The Ada Library Information Files: 28.), and
+ 
+    * Object files, an archive or a shared library.
+ 
+ A GNAT library may expose all its source files, which is useful for
+ documentation purposes.  Alternatively, it may expose only the units
+ needed by an external user to make use of the library.  That is to say,
+ the specs reflecting the library services along with all the units
+ needed to compile those specs, which can include generic bodies or any
+ body implementing an inlined routine.  In the case of ‘stand-alone
+ libraries’ those exposed units are called ‘interface units’ (*note
+ Stand-alone Ada Libraries: 6b.).
+ 
+ All compilation units comprising an application, including those in a
+ library, need to be elaborated in an order partially defined by Ada’s
+ semantics.  GNAT computes the elaboration order from the ‘ALI’ files and
+ this is why they constitute a mandatory part of GNAT libraries.
+ ‘Stand-alone libraries’ are the exception to this rule because a
+ specific library elaboration routine is produced independently of the
+ application(s) using the library.
+ 
+ 
+ File: gnat_ugn.info,  Node: General Ada Libraries,  Next: Stand-alone Ada Libraries,  Prev: Introduction to Libraries in GNAT,  Up: GNAT and Libraries
+ 
+ 3.9.2 General Ada Libraries
+ ---------------------------
+ 
+ * Menu:
+ 
+ * Building a library::
+ * Installing a library::
+ * Using a library::
+ 
+ 
+ File: gnat_ugn.info,  Node: Building a library,  Next: Installing a library,  Up: General Ada Libraries
+ 
+ 3.9.2.1 Building a library
+ ..........................
+ 
+ The easiest way to build a library is to use the Project Manager, which
+ supports a special type of project called a ‘Library Project’ (see the
+ ‘Library Projects’ section in the ‘GNAT Project Manager’ chapter of the
+ ‘GPRbuild User’s Guide’).
+ 
+ A project is considered a library project, when two project-level
+ attributes are defined in it: ‘Library_Name’ and ‘Library_Dir’.  In
+ order to control different aspects of library configuration, additional
+ optional project-level attributes can be specified:
+ 
+    * 
+      ‘Library_Kind’
+ 
+           This attribute controls whether the library is to be static or
+           dynamic
+ 
+    * 
+      ‘Library_Version’
+ 
+           This attribute specifies the library version; this value is
+           used during dynamic linking of shared libraries to determine
+           if the currently installed versions of the binaries are
+           compatible.
+ 
+    * ‘Library_Options’
+ 
+    * 
+      ‘Library_GCC’
+ 
+           These attributes specify additional low-level options to be
+           used during library generation, and redefine the actual
+           application used to generate library.
+ 
+ The GNAT Project Manager takes full care of the library maintenance
+ task, including recompilation of the source files for which objects do
+ not exist or are not up to date, assembly of the library archive, and
+ installation of the library (i.e., copying associated source, object and
+ ‘ALI’ files to the specified location).
+ 
+ Here is a simple library project file:
+ 
+      project My_Lib is
+        for Source_Dirs use ("src1", "src2");
+        for Object_Dir use "obj";
+        for Library_Name use "mylib";
+        for Library_Dir use "lib";
+        for Library_Kind use "dynamic";
+      end My_lib;
+ 
+ and the compilation command to build and install the library:
+ 
+      $ gnatmake -Pmy_lib
+ 
+ It is not entirely trivial to perform manually all the steps required to
+ produce a library.  We recommend that you use the GNAT Project Manager
+ for this task.  In special cases where this is not desired, the
+ necessary steps are discussed below.
+ 
+ There are various possibilities for compiling the units that make up the
+ library: for example with a Makefile (*note Using the GNU make Utility:
+ 70.) or with a conventional script.  For simple libraries, it is also
+ possible to create a dummy main program which depends upon all the
+ packages that comprise the interface of the library.  This dummy main
+ program can then be given to ‘gnatmake’, which will ensure that all
+ necessary objects are built.
+ 
+ After this task is accomplished, you should follow the standard
+ procedure of the underlying operating system to produce the static or
+ shared library.
+ 
+ Here is an example of such a dummy program:
+ 
+      with My_Lib.Service1;
+      with My_Lib.Service2;
+      with My_Lib.Service3;
+      procedure My_Lib_Dummy is
+      begin
+         null;
+      end;
+ 
+ Here are the generic commands that will build an archive or a shared
+ library.
+ 
+      # compiling the library
+      $ gnatmake -c my_lib_dummy.adb
+ 
+      # we don't need the dummy object itself
+      $ rm my_lib_dummy.o my_lib_dummy.ali
+ 
+      # create an archive with the remaining objects
+      $ ar rc libmy_lib.a *.o
+      # some systems may require "ranlib" to be run as well
+ 
+      # or create a shared library
+      $ gcc -shared -o libmy_lib.so *.o
+      # some systems may require the code to have been compiled with -fPIC
+ 
+      # remove the object files that are now in the library
+      $ rm *.o
+ 
+      # Make the ALI files read-only so that gnatmake will not try to
+      # regenerate the objects that are in the library
+      $ chmod -w *.ali
+ 
+ Please note that the library must have a name of the form ‘lib`xxx'.a’
+ or ‘lib`xxx'.so’ (or ‘lib`xxx'.dll’ on Windows) in order to be accessed
+ by the directive ‘-l`xxx'’ at link time.
+ 
+ 
+ File: gnat_ugn.info,  Node: Installing a library,  Next: Using a library,  Prev: Building a library,  Up: General Ada Libraries
+ 
+ 3.9.2.2 Installing a library
+ ............................
+ 
+ If you use project files, library installation is part of the library
+ build process (see the ‘Installing a Library with Project Files’ section
+ of the ‘GNAT Project Manager’ chapter of the ‘GPRbuild User’s Guide’).
+ 
+ When project files are not an option, it is also possible, but not
+ recommended, to install the library so that the sources needed to use
+ the library are on the Ada source path and the ALI files & libraries be
+ on the Ada Object path (see *note Search Paths and the Run-Time Library
+ (RTL): 73.  Alternatively, the system administrator can place
+ general-purpose libraries in the default compiler paths, by specifying
+ the libraries’ location in the configuration files ‘ada_source_path’ and
+ ‘ada_object_path’.  These configuration files must be located in the
+ GNAT installation tree at the same place as the gcc spec file.  The
+ location of the gcc spec file can be determined as follows:
+ 
+      $ gcc -v
+ 
+ The configuration files mentioned above have a simple format: each line
+ must contain one unique directory name.  Those names are added to the
+ corresponding path in their order of appearance in the file.  The names
+ can be either absolute or relative; in the latter case, they are
+ relative to where theses files are located.
+ 
+ The files ‘ada_source_path’ and ‘ada_object_path’ might not be present
+ in a GNAT installation, in which case, GNAT will look for its run-time
+ library in the directories ‘adainclude’ (for the sources) and ‘adalib’
+ (for the objects and ‘ALI’ files).  When the files exist, the compiler
+ does not look in ‘adainclude’ and ‘adalib’, and thus the
+ ‘ada_source_path’ file must contain the location for the GNAT run-time
+ sources (which can simply be ‘adainclude’).  In the same way, the
+ ‘ada_object_path’ file must contain the location for the GNAT run-time
+ objects (which can simply be ‘adalib’).
+ 
+ You can also specify a new default path to the run-time library at
+ compilation time with the switch ‘--RTS=rts-path’.  You can thus choose
+ / change the run-time library you want your program to be compiled with.
+ This switch is recognized by ‘gcc’, ‘gnatmake’, ‘gnatbind’, ‘gnatls’,
+ and all project aware tools.
+ 
+ It is possible to install a library before or after the standard GNAT
+ library, by reordering the lines in the configuration files.  In
+ general, a library must be installed before the GNAT library if it
+ redefines any part of it.
+ 
+ 
+ File: gnat_ugn.info,  Node: Using a library,  Prev: Installing a library,  Up: General Ada Libraries
+ 
+ 3.9.2.3 Using a library
+ .......................
+ 
+ Once again, the project facility greatly simplifies the use of
+ libraries.  In this context, using a library is just a matter of adding
+ a ‘with’ clause in the user project.  For instance, to make use of the
+ library ‘My_Lib’ shown in examples in earlier sections, you can write:
+ 
+      with "my_lib";
+      project My_Proj is
+        ...
+      end My_Proj;
+ 
+ Even if you have a third-party, non-Ada library, you can still use
+ GNAT’s Project Manager facility to provide a wrapper for it.  For
+ example, the following project, when ‘with’ed by your main project, will
+ link with the third-party library ‘liba.a’:
+ 
+      project Liba is
+         for Externally_Built use "true";
+         for Source_Files use ();
+         for Library_Dir use "lib";
+         for Library_Name use "a";
+         for Library_Kind use "static";
+      end Liba;
+ 
+ This is an alternative to the use of ‘pragma Linker_Options’.  It is
+ especially interesting in the context of systems with several
+ interdependent static libraries where finding a proper linker order is
+ not easy and best be left to the tools having visibility over project
+ dependence information.
+ 
+ In order to use an Ada library manually, you need to make sure that this
+ library is on both your source and object path (see *note Search Paths
+ and the Run-Time Library (RTL): 73. and *note Search Paths for gnatbind:
+ 76.).  Furthermore, when the objects are grouped in an archive or a
+ shared library, you need to specify the desired library at link time.
+ 
+ For example, you can use the library ‘mylib’ installed in
+ ‘/dir/my_lib_src’ and ‘/dir/my_lib_obj’ with the following commands:
+ 
+      $ gnatmake -aI/dir/my_lib_src -aO/dir/my_lib_obj my_appl \\
+        -largs -lmy_lib
+ 
+ This can be expressed more simply:
+ 
+      $ gnatmake my_appl
+ 
+ when the following conditions are met:
+ 
+    * ‘/dir/my_lib_src’ has been added by the user to the environment
+      variable ‘ADA_INCLUDE_PATH’, or by the administrator to the file
+      ‘ada_source_path’
+ 
+    * ‘/dir/my_lib_obj’ has been added by the user to the environment
+      variable ‘ADA_OBJECTS_PATH’, or by the administrator to the file
+      ‘ada_object_path’
+ 
+    * a pragma ‘Linker_Options’ has been added to one of the sources.
+      For example:
+ 
+           pragma Linker_Options ("-lmy_lib");
+ 
+ Note that you may also load a library dynamically at run time given its
+ filename, as illustrated in the GNAT ‘plugins’ example in the directory
+ ‘share/examples/gnat/plugins’ within the GNAT install area.
+ 
+ 
+ File: gnat_ugn.info,  Node: Stand-alone Ada Libraries,  Next: Rebuilding the GNAT Run-Time Library,  Prev: General Ada Libraries,  Up: GNAT and Libraries
+ 
+ 3.9.3 Stand-alone Ada Libraries
+ -------------------------------
+ 
+ * Menu:
+ 
+ * Introduction to Stand-alone Libraries::
+ * Building a Stand-alone Library::
+ * Creating a Stand-alone Library to be used in a non-Ada context::
+ * Restrictions in Stand-alone Libraries::
+ 
+ 
+ File: gnat_ugn.info,  Node: Introduction to Stand-alone Libraries,  Next: Building a Stand-alone Library,  Up: Stand-alone Ada Libraries
+ 
+ 3.9.3.1 Introduction to Stand-alone Libraries
+ .............................................
+ 
+ A Stand-alone Library (abbreviated ‘SAL’) is a library that contains the
+ necessary code to elaborate the Ada units that are included in the
+ library.  In contrast with an ordinary library, which consists of all
+ sources, objects and ‘ALI’ files of the library, a SAL may specify a
+ restricted subset of compilation units to serve as a library interface.
+ In this case, the fully self-sufficient set of files will normally
+ consist of an objects archive, the sources of interface units’ specs,
+ and the ‘ALI’ files of interface units.  If an interface spec contains a
+ generic unit or an inlined subprogram, the body’s source must also be
+ provided; if the units that must be provided in the source form depend
+ on other units, the source and ‘ALI’ files of those must also be
+ provided.
+ 
+ The main purpose of a SAL is to minimize the recompilation overhead of
+ client applications when a new version of the library is installed.
+ Specifically, if the interface sources have not changed, client
+ applications do not need to be recompiled.  If, furthermore, a SAL is
+ provided in the shared form and its version, controlled by
+ ‘Library_Version’ attribute, is not changed, then the clients do not
+ need to be relinked.
+ 
+ SALs also allow the library providers to minimize the amount of library
+ source text exposed to the clients.  Such ‘information hiding’ might be
+ useful or necessary for various reasons.
+ 
+ Stand-alone libraries are also well suited to be used in an executable
+ whose main routine is not written in Ada.
+ 
+ 
+ File: gnat_ugn.info,  Node: Building a Stand-alone Library,  Next: Creating a Stand-alone Library to be used in a non-Ada context,  Prev: Introduction to Stand-alone Libraries,  Up: Stand-alone Ada Libraries
+ 
+ 3.9.3.2 Building a Stand-alone Library
+ ......................................
+ 
+ GNAT’s Project facility provides a simple way of building and installing
+ stand-alone libraries; see the ‘Stand-alone Library Projects’ section in
+ the ‘GNAT Project Manager’ chapter of the ‘GPRbuild User’s Guide’.  To
+ be a Stand-alone Library Project, in addition to the two attributes that
+ make a project a Library Project (‘Library_Name’ and ‘Library_Dir’; see
+ the ‘Library Projects’ section in the ‘GNAT Project Manager’ chapter of
+ the ‘GPRbuild User’s Guide’), the attribute ‘Library_Interface’ must be
+ defined.  For example:
+ 
+      for Library_Dir use "lib_dir";
+      for Library_Name use "dummy";
+      for Library_Interface use ("int1", "int1.child");
+ 
+ Attribute ‘Library_Interface’ has a non-empty string list value, each
+ string in the list designating a unit contained in an immediate source
+ of the project file.
+ 
+ When a Stand-alone Library is built, first the binder is invoked to
+ build a package whose name depends on the library name (‘b~dummy.ads/b’
+ in the example above).  This binder-generated package includes
+ initialization and finalization procedures whose names depend on the
+ library name (‘dummyinit’ and ‘dummyfinal’ in the example above).  The
+ object corresponding to this package is included in the library.
+ 
+ You must ensure timely (e.g., prior to any use of interfaces in the SAL)
+ calling of these procedures if a static SAL is built, or if a shared SAL
+ is built with the project-level attribute ‘Library_Auto_Init’ set to
+ ‘"false"’.
+ 
+ For a Stand-Alone Library, only the ‘ALI’ files of the Interface Units
+ (those that are listed in attribute ‘Library_Interface’) are copied to
+ the Library Directory.  As a consequence, only the Interface Units may
+ be imported from Ada units outside of the library.  If other units are
+ imported, the binding phase will fail.
+ 
+ It is also possible to build an encapsulated library where not only the
+ code to elaborate and finalize the library is embedded but also ensuring
+ that the library is linked only against static libraries.  So an
+ encapsulated library only depends on system libraries, all other code,
+ including the GNAT runtime, is embedded.  To build an encapsulated
+ library the attribute ‘Library_Standalone’ must be set to
+ ‘encapsulated’:
+ 
+      for Library_Dir use "lib_dir";
+      for Library_Name use "dummy";
+      for Library_Kind use "dynamic";
+      for Library_Interface use ("int1", "int1.child");
+      for Library_Standalone use "encapsulated";
+ 
+ The default value for this attribute is ‘standard’ in which case a
+ stand-alone library is built.
+ 
+ The attribute ‘Library_Src_Dir’ may be specified for a Stand-Alone
+ Library.  ‘Library_Src_Dir’ is a simple attribute that has a single
+ string value.  Its value must be the path (absolute or relative to the
+ project directory) of an existing directory.  This directory cannot be
+ the object directory or one of the source directories, but it can be the
+ same as the library directory.  The sources of the Interface Units of
+ the library that are needed by an Ada client of the library will be
+ copied to the designated directory, called the Interface Copy directory.
+ These sources include the specs of the Interface Units, but they may
+ also include bodies and subunits, when pragmas ‘Inline’ or
+ ‘Inline_Always’ are used, or when there is a generic unit in the spec.
+ Before the sources are copied to the Interface Copy directory, an
+ attempt is made to delete all files in the Interface Copy directory.
+ 
+ Building stand-alone libraries by hand is somewhat tedious, but for
+ those occasions when it is necessary here are the steps that you need to
+ perform:
+ 
+    * Compile all library sources.
+ 
+    * Invoke the binder with the switch ‘-n’ (No Ada main program), with
+      all the ‘ALI’ files of the interfaces, and with the switch ‘-L’ to
+      give specific names to the ‘init’ and ‘final’ procedures.  For
+      example:
+ 
+           $ gnatbind -n int1.ali int2.ali -Lsal1
+ 
+    * Compile the binder generated file:
+ 
+           $ gcc -c b~int2.adb
+ 
+    * Link the dynamic library with all the necessary object files,
+      indicating to the linker the names of the ‘init’ (and possibly
+      ‘final’) procedures for automatic initialization (and
+      finalization).  The built library should be placed in a directory
+      different from the object directory.
+ 
+    * Copy the ‘ALI’ files of the interface to the library directory, add
+      in this copy an indication that it is an interface to a SAL (i.e.,
+      add a word ‘SL’ on the line in the ‘ALI’ file that starts with
+      letter ‘P’) and make the modified copy of the ‘ALI’ file read-only.
+ 
+ Using SALs is not different from using other libraries (see *note Using
+ a library: 75.).
+ 
+ 
+ File: gnat_ugn.info,  Node: Creating a Stand-alone Library to be used in a non-Ada context,  Next: Restrictions in Stand-alone Libraries,  Prev: Building a Stand-alone Library,  Up: Stand-alone Ada Libraries
+ 
+ 3.9.3.3 Creating a Stand-alone Library to be used in a non-Ada context
+ ......................................................................
+ 
+ It is easy to adapt the SAL build procedure discussed above for use of a
+ SAL in a non-Ada context.
+ 
+ The only extra step required is to ensure that library interface
+ subprograms are compatible with the main program, by means of ‘pragma
+ Export’ or ‘pragma Convention’.
+ 
+ Here is an example of simple library interface for use with C main
+ program:
+ 
+      package My_Package is
+ 
+         procedure Do_Something;
+         pragma Export (C, Do_Something, "do_something");
+ 
+         procedure Do_Something_Else;
+         pragma Export (C, Do_Something_Else, "do_something_else");
+ 
+      end My_Package;
+ 
+ On the foreign language side, you must provide a ‘foreign’ view of the
+ library interface; remember that it should contain elaboration routines
+ in addition to interface subprograms.
+ 
+ The example below shows the content of ‘mylib_interface.h’ (note that
+ there is no rule for the naming of this file, any name can be used)
+ 
+      /* the library elaboration procedure */
+      extern void mylibinit (void);
+ 
+      /* the library finalization procedure */
+      extern void mylibfinal (void);
+ 
+      /* the interface exported by the library */
+      extern void do_something (void);
+      extern void do_something_else (void);
+ 
+ Libraries built as explained above can be used from any program,
+ provided that the elaboration procedures (named ‘mylibinit’ in the
+ previous example) are called before the library services are used.  Any
+ number of libraries can be used simultaneously, as long as the
+ elaboration procedure of each library is called.
+ 
+ Below is an example of a C program that uses the ‘mylib’ library.
+ 
+      #include "mylib_interface.h"
+ 
+      int
+      main (void)
+      {
+         /* First, elaborate the library before using it */
+         mylibinit ();
+ 
+         /* Main program, using the library exported entities */
+         do_something ();
+         do_something_else ();
+ 
+         /* Library finalization at the end of the program */
+         mylibfinal ();
+         return 0;
+      }
+ 
+ Note that invoking any library finalization procedure generated by
+ ‘gnatbind’ shuts down the Ada run-time environment.  Consequently, the
+ finalization of all Ada libraries must be performed at the end of the
+ program.  No call to these libraries or to the Ada run-time library
+ should be made after the finalization phase.
+ 
+ Note also that special care must be taken with multi-tasks applications.
+ The initialization and finalization routines are not protected against
+ concurrent access.  If such requirement is needed it must be ensured at
+ the application level using a specific operating system services like a
+ mutex or a critical-section.
+ 
+ 
+ File: gnat_ugn.info,  Node: Restrictions in Stand-alone Libraries,  Prev: Creating a Stand-alone Library to be used in a non-Ada context,  Up: Stand-alone Ada Libraries
+ 
+ 3.9.3.4 Restrictions in Stand-alone Libraries
+ .............................................
+ 
+ The pragmas listed below should be used with caution inside libraries,
+ as they can create incompatibilities with other Ada libraries:
+ 
+    * pragma ‘Locking_Policy’
+ 
+    * pragma ‘Partition_Elaboration_Policy’
+ 
+    * pragma ‘Queuing_Policy’
+ 
+    * pragma ‘Task_Dispatching_Policy’
+ 
+    * pragma ‘Unreserve_All_Interrupts’
+ 
+ When using a library that contains such pragmas, the user must make sure
+ that all libraries use the same pragmas with the same values.
+ Otherwise, ‘Program_Error’ will be raised during the elaboration of the
+ conflicting libraries.  The usage of these pragmas and its consequences
+ for the user should therefore be well documented.
+ 
+ Similarly, the traceback in the exception occurrence mechanism should be
+ enabled or disabled in a consistent manner across all libraries.
+ Otherwise, Program_Error will be raised during the elaboration of the
+ conflicting libraries.
+ 
+ If the ‘Version’ or ‘Body_Version’ attributes are used inside a library,
+ then you need to perform a ‘gnatbind’ step that specifies all ‘ALI’
+ files in all libraries, so that version identifiers can be properly
+ computed.  In practice these attributes are rarely used, so this is
+ unlikely to be a consideration.
+ 
+ 
+ File: gnat_ugn.info,  Node: Rebuilding the GNAT Run-Time Library,  Prev: Stand-alone Ada Libraries,  Up: GNAT and Libraries
+ 
+ 3.9.4 Rebuilding the GNAT Run-Time Library
+ ------------------------------------------
+ 
+ It may be useful to recompile the GNAT library in various debugging or
+ experimentation contexts.  A project file called ‘libada.gpr’ is
+ provided to that effect and can be found in the directory containing the
+ GNAT library.  The location of this directory depends on the way the
+ GNAT environment has been installed and can be determined by means of
+ the command:
+ 
+      $ gnatls -v
+ 
+ The last entry in the source search path usually contains the gnat
+ library (the ‘adainclude’ directory).  This project file contains its
+ own documentation and in particular the set of instructions needed to
+ rebuild a new library and to use it.
+ 
+ Note that rebuilding the GNAT Run-Time is only recommended for temporary
+ experiments or debugging, and is not supported.
+ 
+ 
+ File: gnat_ugn.info,  Node: Conditional Compilation,  Next: Mixed Language Programming,  Prev: GNAT and Libraries,  Up: The GNAT Compilation Model
+ 
+ 3.10 Conditional Compilation
+ ============================
+ 
+ This section presents some guidelines for modeling conditional
+ compilation in Ada and describes the gnatprep preprocessor utility.
+ 
+ * Menu:
+ 
+ * Modeling Conditional Compilation in Ada::
+ * Preprocessing with gnatprep::
+ * Integrated Preprocessing::
+ 
+ 
+ File: gnat_ugn.info,  Node: Modeling Conditional Compilation in Ada,  Next: Preprocessing with gnatprep,  Up: Conditional Compilation
+ 
+ 3.10.1 Modeling Conditional Compilation in Ada
+ ----------------------------------------------
+ 
+ It is often necessary to arrange for a single source program to serve
+ multiple purposes, where it is compiled in different ways to achieve
+ these different goals.  Some examples of the need for this feature are
+ 
+    * Adapting a program to a different hardware environment
+ 
+    * Adapting a program to a different target architecture
+ 
+    * Turning debugging features on and off
+ 
+    * Arranging for a program to compile with different compilers
+ 
+ In C, or C++, the typical approach would be to use the preprocessor that
+ is defined as part of the language.  The Ada language does not contain
+ such a feature.  This is not an oversight, but rather a very deliberate
+ design decision, based on the experience that overuse of the
+ preprocessing features in C and C++ can result in programs that are
+ extremely difficult to maintain.  For example, if we have ten switches
+ that can be on or off, this means that there are a thousand separate
+ programs, any one of which might not even be syntactically correct, and
+ even if syntactically correct, the resulting program might not work
+ correctly.  Testing all combinations can quickly become impossible.
+ 
+ Nevertheless, the need to tailor programs certainly exists, and in this
+ section we will discuss how this can be achieved using Ada in general,
+ and GNAT in particular.
+ 
+ * Menu:
+ 
+ * Use of Boolean Constants::
+ * Debugging - A Special Case::
+ * Conditionalizing Declarations::
+ * Use of Alternative Implementations::
+ * Preprocessing::
+ 
+ 
+ File: gnat_ugn.info,  Node: Use of Boolean Constants,  Next: Debugging - A Special Case,  Up: Modeling Conditional Compilation in Ada
+ 
+ 3.10.1.1 Use of Boolean Constants
+ .................................
+ 
+ In the case where the difference is simply which code sequence is
+ executed, the cleanest solution is to use Boolean constants to control
+ which code is executed.
+ 
+      FP_Initialize_Required : constant Boolean := True;
+      ...
+      if FP_Initialize_Required then
+      ...
+      end if;
+ 
+ Not only will the code inside the ‘if’ statement not be executed if the
+ constant Boolean is ‘False’, but it will also be completely deleted from
+ the program.  However, the code is only deleted after the ‘if’ statement
+ has been checked for syntactic and semantic correctness.  (In contrast,
+ with preprocessors the code is deleted before the compiler ever gets to
+ see it, so it is not checked until the switch is turned on.)
+ 
+ Typically the Boolean constants will be in a separate package, something
+ like:
+ 
+      package Config is
+         FP_Initialize_Required : constant Boolean := True;
+         Reset_Available        : constant Boolean := False;
+         ...
+      end Config;
+ 
+ The ‘Config’ package exists in multiple forms for the various targets,
+ with an appropriate script selecting the version of ‘Config’ needed.
+ Then any other unit requiring conditional compilation can do a ‘with’ of
+ ‘Config’ to make the constants visible.
+ 
+ 
+ File: gnat_ugn.info,  Node: Debugging - A Special Case,  Next: Conditionalizing Declarations,  Prev: Use of Boolean Constants,  Up: Modeling Conditional Compilation in Ada
+ 
+ 3.10.1.2 Debugging - A Special Case
+ ...................................
+ 
+ A common use of conditional code is to execute statements (for example
+ dynamic checks, or output of intermediate results) under control of a
+ debug switch, so that the debugging behavior can be turned on and off.
+ This can be done using a Boolean constant to control whether the code is
+ active:
+ 
+      if Debugging then
+         Put_Line ("got to the first stage!");
+      end if;
+ 
+ or
+ 
+      if Debugging and then Temperature > 999.0 then
+         raise Temperature_Crazy;
+      end if;
+ 
+ Since this is a common case, there are special features to deal with
+ this in a convenient manner.  For the case of tests, Ada 2005 has added
+ a pragma ‘Assert’ that can be used for such tests.  This pragma is
+ modeled on the ‘Assert’ pragma that has always been available in GNAT,
+ so this feature may be used with GNAT even if you are not using Ada 2005
+ features.  The use of pragma ‘Assert’ is described in the
+ ‘GNAT_Reference_Manual’, but as an example, the last test could be
+ written:
+ 
+      pragma Assert (Temperature <= 999.0, "Temperature Crazy");
+ 
+ or simply
+ 
+      pragma Assert (Temperature <= 999.0);
+ 
+ In both cases, if assertions are active and the temperature is
+ excessive, the exception ‘Assert_Failure’ will be raised, with the given
+ string in the first case or a string indicating the location of the
+ pragma in the second case used as the exception message.
+ 
+ You can turn assertions on and off by using the ‘Assertion_Policy’
+ pragma.
+ 
+ This is an Ada 2005 pragma which is implemented in all modes by GNAT.
+ Alternatively, you can use the ‘-gnata’ switch to enable assertions from
+ the command line, which applies to all versions of Ada.
+ 
+ For the example above with the ‘Put_Line’, the GNAT-specific pragma
+ ‘Debug’ can be used:
+ 
+      pragma Debug (Put_Line ("got to the first stage!"));
+ 
+ If debug pragmas are enabled, the argument, which must be of the form of
+ a procedure call, is executed (in this case, ‘Put_Line’ will be called).
+ Only one call can be present, but of course a special debugging
+ procedure containing any code you like can be included in the program
+ and then called in a pragma ‘Debug’ argument as needed.
+ 
+ One advantage of pragma ‘Debug’ over the ‘if Debugging then’ construct
+ is that pragma ‘Debug’ can appear in declarative contexts, such as at
+ the very beginning of a procedure, before local declarations have been
+ elaborated.
+ 
+ Debug pragmas are enabled using either the ‘-gnata’ switch that also
+ controls assertions, or with a separate Debug_Policy pragma.
+ 
+ The latter pragma is new in the Ada 2005 versions of GNAT (but it can be
+ used in Ada 95 and Ada 83 programs as well), and is analogous to pragma
+ ‘Assertion_Policy’ to control assertions.
+ 
+ ‘Assertion_Policy’ and ‘Debug_Policy’ are configuration pragmas, and
+ thus they can appear in ‘gnat.adc’ if you are not using a project file,
+ or in the file designated to contain configuration pragmas in a project
+ file.  They then apply to all subsequent compilations.  In practice the
+ use of the ‘-gnata’ switch is often the most convenient method of
+ controlling the status of these pragmas.
+ 
+ Note that a pragma is not a statement, so in contexts where a statement
+ sequence is required, you can’t just write a pragma on its own.  You
+ have to add a ‘null’ statement.
+ 
+      if ... then
+         ... -- some statements
+      else
+         pragma Assert (Num_Cases < 10);
+         null;
+      end if;
+ 
+ 
+ File: gnat_ugn.info,  Node: Conditionalizing Declarations,  Next: Use of Alternative Implementations,  Prev: Debugging - A Special Case,  Up: Modeling Conditional Compilation in Ada
+ 
+ 3.10.1.3 Conditionalizing Declarations
+ ......................................
+ 
+ In some cases it may be necessary to conditionalize declarations to meet
+ different requirements.  For example we might want a bit string whose
+ length is set to meet some hardware message requirement.
+ 
+ This may be possible using declare blocks controlled by conditional
+ constants:
+ 
+      if Small_Machine then
+         declare
+            X : Bit_String (1 .. 10);
+         begin
+            ...
+         end;
+      else
+         declare
+            X : Large_Bit_String (1 .. 1000);
+         begin
+            ...
+         end;
+      end if;
+ 
+ Note that in this approach, both declarations are analyzed by the
+ compiler so this can only be used where both declarations are legal,
+ even though one of them will not be used.
+ 
+ Another approach is to define integer constants, e.g., ‘Bits_Per_Word’,
+ or Boolean constants, e.g., ‘Little_Endian’, and then write declarations
+ that are parameterized by these constants.  For example
+ 
+      for Rec use
+        Field1 at 0 range Boolean'Pos (Little_Endian) * 10 .. Bits_Per_Word;
+      end record;
+ 
+ If ‘Bits_Per_Word’ is set to 32, this generates either
+ 
+      for Rec use
+        Field1 at 0 range 0 .. 32;
+      end record;
+ 
+ for the big endian case, or
+ 
+      for Rec use record
+          Field1 at 0 range 10 .. 32;
+      end record;
+ 
+ for the little endian case.  Since a powerful subset of Ada expression
+ notation is usable for creating static constants, clever use of this
+ feature can often solve quite difficult problems in conditionalizing
+ compilation (note incidentally that in Ada 95, the little endian
+ constant was introduced as ‘System.Default_Bit_Order’, so you do not
+ need to define this one yourself).
+ 
+ 
+ File: gnat_ugn.info,  Node: Use of Alternative Implementations,  Next: Preprocessing,  Prev: Conditionalizing Declarations,  Up: Modeling Conditional Compilation in Ada
+ 
+ 3.10.1.4 Use of Alternative Implementations
+ ...........................................
+ 
+ In some cases, none of the approaches described above are adequate.
+ This can occur for example if the set of declarations required is
+ radically different for two different configurations.
+ 
+ In this situation, the official Ada way of dealing with conditionalizing
+ such code is to write separate units for the different cases.  As long
+ as this does not result in excessive duplication of code, this can be
+ done without creating maintenance problems.  The approach is to share
+ common code as far as possible, and then isolate the code and
+ declarations that are different.  Subunits are often a convenient method
+ for breaking out a piece of a unit that is to be conditionalized, with
+ separate files for different versions of the subunit for different
+ targets, where the build script selects the right one to give to the
+ compiler.
+ 
+ As an example, consider a situation where a new feature in Ada 2005
+ allows something to be done in a really nice way.  But your code must be
+ able to compile with an Ada 95 compiler.  Conceptually you want to say:
+ 
+      if Ada_2005 then
+         ... neat Ada 2005 code
+      else
+         ... not quite as neat Ada 95 code
+      end if;
+ 
+ where ‘Ada_2005’ is a Boolean constant.
+ 
+ But this won’t work when ‘Ada_2005’ is set to ‘False’, since the ‘then’
+ clause will be illegal for an Ada 95 compiler.  (Recall that although
+ such unreachable code would eventually be deleted by the compiler, it
+ still needs to be legal.  If it uses features introduced in Ada 2005, it
+ will be illegal in Ada 95.)
+ 
+ So instead we write
+ 
+      procedure Insert is separate;
+ 
+ Then we have two files for the subunit ‘Insert’, with the two sets of
+ code.  If the package containing this is called ‘File_Queries’, then we
+ might have two files
+ 
+    * ‘file_queries-insert-2005.adb’
+ 
+    * ‘file_queries-insert-95.adb’
+ 
+ and the build script renames the appropriate file to
+ ‘file_queries-insert.adb’ and then carries out the compilation.
+ 
+ This can also be done with project files’ naming schemes.  For example:
+ 
+      for body ("File_Queries.Insert") use "file_queries-insert-2005.ada";
+ 
+ Note also that with project files it is desirable to use a different
+ extension than ‘ads’ / ‘adb’ for alternative versions.  Otherwise a
+ naming conflict may arise through another commonly used feature: to
+ declare as part of the project a set of directories containing all the
+ sources obeying the default naming scheme.
+ 
+ The use of alternative units is certainly feasible in all situations,
+ and for example the Ada part of the GNAT run-time is conditionalized
+ based on the target architecture using this approach.  As a specific
+ example, consider the implementation of the AST feature in VMS. There is
+ one spec: ‘s-asthan.ads’ which is the same for all architectures, and
+ three bodies:
+ 
+    * 
+      ‘s-asthan.adb’
+ 
+           used for all non-VMS operating systems
+ 
+    * 
+      ‘s-asthan-vms-alpha.adb’
+ 
+           used for VMS on the Alpha
+ 
+    * 
+      ‘s-asthan-vms-ia64.adb’
+ 
+           used for VMS on the ia64
+ 
+ The dummy version ‘s-asthan.adb’ simply raises exceptions noting that
+ this operating system feature is not available, and the two remaining
+ versions interface with the corresponding versions of VMS to provide
+ VMS-compatible AST handling.  The GNAT build script knows the
+ architecture and operating system, and automatically selects the right
+ version, renaming it if necessary to ‘s-asthan.adb’ before the run-time
+ build.
+ 
+ Another style for arranging alternative implementations is through Ada’s
+ access-to-subprogram facility.  In case some functionality is to be
+ conditionally included, you can declare an access-to-procedure variable
+ ‘Ref’ that is initialized to designate a ‘do nothing’ procedure, and
+ then invoke ‘Ref.all’ when appropriate.  In some library package, set
+ ‘Ref’ to ‘Proc'Access’ for some procedure ‘Proc’ that performs the
+ relevant processing.  The initialization only occurs if the library
+ package is included in the program.  The same idea can also be
+ implemented using tagged types and dispatching calls.
+ 
+ 
+ File: gnat_ugn.info,  Node: Preprocessing,  Prev: Use of Alternative Implementations,  Up: Modeling Conditional Compilation in Ada
+ 
+ 3.10.1.5 Preprocessing
+ ......................
+ 
+ Although it is quite possible to conditionalize code without the use of
+ C-style preprocessing, as described earlier in this section, it is
+ nevertheless convenient in some cases to use the C approach.  Moreover,
+ older Ada compilers have often provided some preprocessing capability,
+ so legacy code may depend on this approach, even though it is not
+ standard.
+ 
+ To accommodate such use, GNAT provides a preprocessor (modeled to a
+ large extent on the various preprocessors that have been used with
+ legacy code on other compilers, to enable easier transition).
+ 
+ The preprocessor may be used in two separate modes.  It can be used
+ quite separately from the compiler, to generate a separate output source
+ file that is then fed to the compiler as a separate step.  This is the
+ ‘gnatprep’ utility, whose use is fully described in *note Preprocessing
+ with gnatprep: 8f.
+ 
+ The preprocessing language allows such constructs as
+ 
+      #if DEBUG or else (PRIORITY > 4) then
+         sequence of declarations
+      #else
+         completely different sequence of declarations
+      #end if;
+ 
+ The values of the symbols ‘DEBUG’ and ‘PRIORITY’ can be defined either
+ on the command line or in a separate file.
+ 
+ The other way of running the preprocessor is even closer to the C style
+ and often more convenient.  In this approach the preprocessing is
+ integrated into the compilation process.  The compiler is given the
+ preprocessor input which includes ‘#if’ lines etc, and then the compiler
+ carries out the preprocessing internally and processes the resulting
+ output.  For more details on this approach, see *note Integrated
+ Preprocessing: 90.
+ 
+ 
+ File: gnat_ugn.info,  Node: Preprocessing with gnatprep,  Next: Integrated Preprocessing,  Prev: Modeling Conditional Compilation in Ada,  Up: Conditional Compilation
+ 
+ 3.10.2 Preprocessing with ‘gnatprep’
+ ------------------------------------
+ 
+ This section discusses how to use GNAT’s ‘gnatprep’ utility for simple
+ preprocessing.  Although designed for use with GNAT, ‘gnatprep’ does not
+ depend on any special GNAT features.  For further discussion of
+ conditional compilation in general, see *note Conditional Compilation:
+ 2b.
+ 
+ * Menu:
+ 
+ * Preprocessing Symbols::
+ * Using gnatprep::
+ * Switches for gnatprep::
+ * Form of Definitions File::
+ * Form of Input Text for gnatprep::
+ 
+ 
+ File: gnat_ugn.info,  Node: Preprocessing Symbols,  Next: Using gnatprep,  Up: Preprocessing with gnatprep
+ 
+ 3.10.2.1 Preprocessing Symbols
+ ..............................
+ 
+ Preprocessing symbols are defined in ‘definition files’ and referenced
+ in the sources to be preprocessed.  A preprocessing symbol is an
+ identifier, following normal Ada (case-insensitive) rules for its
+ syntax, with the restriction that all characters need to be in the ASCII
+ set (no accented letters).
+ 
+ 
+ File: gnat_ugn.info,  Node: Using gnatprep,  Next: Switches for gnatprep,  Prev: Preprocessing Symbols,  Up: Preprocessing with gnatprep
+ 
+ 3.10.2.2 Using ‘gnatprep’
+ .........................
+ 
+ To call ‘gnatprep’ use:
+ 
+      $ gnatprep [ switches ] infile outfile [ deffile ]
+ 
+ where
+ 
+    * 
+      ‘switches’
+ 
+           is an optional sequence of switches as described in the next
+           section.
+ 
+    * 
+      ‘infile’
+ 
+           is the full name of the input file, which is an Ada source
+           file containing preprocessor directives.
+ 
+    * 
+      ‘outfile’
+ 
+           is the full name of the output file, which is an Ada source in
+           standard Ada form.  When used with GNAT, this file name will
+           normally have an ‘ads’ or ‘adb’ suffix.
+ 
+    * 
+      ‘deffile’
+ 
+           is the full name of a text file containing definitions of
+           preprocessing symbols to be referenced by the preprocessor.
+           This argument is optional, and can be replaced by the use of
+           the ‘-D’ switch.
+ 
+ 
+ File: gnat_ugn.info,  Node: Switches for gnatprep,  Next: Form of Definitions File,  Prev: Using gnatprep,  Up: Preprocessing with gnatprep
+ 
+ 3.10.2.3 Switches for ‘gnatprep’
+ ................................
+ 
+ ‘--version’
+ 
+      Display Copyright and version, then exit disregarding all other
+      options.
+ 
+ ‘--help’
+ 
+      If ‘--version’ was not used, display usage and then exit
+      disregarding all other options.
+ 
+ ‘-b’
+ 
+      Causes both preprocessor lines and the lines deleted by
+      preprocessing to be replaced by blank lines in the output source
+      file, preserving line numbers in the output file.
+ 
+ ‘-c’
+ 
+      Causes both preprocessor lines and the lines deleted by
+      preprocessing to be retained in the output source as comments
+      marked with the special string ‘"--! "’.  This option will result
+      in line numbers being preserved in the output file.
+ 
+ ‘-C’
+ 
+      Causes comments to be scanned.  Normally comments are ignored by
+      gnatprep.  If this option is specified, then comments are scanned
+      and any $symbol substitutions performed as in program text.  This
+      is particularly useful when structured comments are used (e.g., for
+      programs written in a pre-2014 version of the SPARK Ada subset).
+      Note that this switch is not available when doing integrated
+      preprocessing (it would be useless in this context since comments
+      are ignored by the compiler in any case).
+ 
+ ‘-D`symbol'[=`value']’
+ 
+      Defines a new preprocessing symbol with the specified value.  If no
+      value is given on the command line, then symbol is considered to be
+      ‘True’.  This switch can be used in place of a definition file.
+ 
+ ‘-r’
+ 
+      Causes a ‘Source_Reference’ pragma to be generated that references
+      the original input file, so that error messages will use the file
+      name of this original file.  The use of this switch implies that
+      preprocessor lines are not to be removed from the file, so its use
+      will force ‘-b’ mode if ‘-c’ has not been specified explicitly.
+ 
+      Note that if the file to be preprocessed contains multiple units,
+      then it will be necessary to ‘gnatchop’ the output file from
+      ‘gnatprep’.  If a ‘Source_Reference’ pragma is present in the
+      preprocessed file, it will be respected by ‘gnatchop -r’ so that
+      the final chopped files will correctly refer to the original input
+      source file for ‘gnatprep’.
+ 
+ ‘-s’
+ 
+      Causes a sorted list of symbol names and values to be listed on the
+      standard output file.
+ 
+ ‘-T’
+ 
+      Use LF as line terminators when writing files.  By default the line
+      terminator of the host (LF under unix, CR/LF under Windows) is
+      used.
+ 
+ ‘-u’
+ 
+      Causes undefined symbols to be treated as having the value FALSE in
+      the context of a preprocessor test.  In the absence of this option,
+      an undefined symbol in a ‘#if’ or ‘#elsif’ test will be treated as
+      an error.
+ 
+ ‘-v’
+ 
+      Verbose mode: generates more output about work done.
+ 
+ Note: if neither ‘-b’ nor ‘-c’ is present, then preprocessor lines and
+ deleted lines are completely removed from the output, unless -r is
+ specified, in which case -b is assumed.
+ 
+ 
+ File: gnat_ugn.info,  Node: Form of Definitions File,  Next: Form of Input Text for gnatprep,  Prev: Switches for gnatprep,  Up: Preprocessing with gnatprep
+ 
+ 3.10.2.4 Form of Definitions File
+ .................................
+ 
+ The definitions file contains lines of the form:
+ 
+      symbol := value
+ 
+ where ‘symbol’ is a preprocessing symbol, and ‘value’ is one of the
+ following:
+ 
+    * Empty, corresponding to a null substitution,
+ 
+    * A string literal using normal Ada syntax, or
+ 
+    * Any sequence of characters from the set {letters, digits, period,
+      underline}.
+ 
+ Comment lines may also appear in the definitions file, starting with the
+ usual ‘--’, and comments may be added to the definitions lines.
+ 
+ 
+ File: gnat_ugn.info,  Node: Form of Input Text for gnatprep,  Prev: Form of Definitions File,  Up: Preprocessing with gnatprep
+ 
+ 3.10.2.5 Form of Input Text for ‘gnatprep’
+ ..........................................
+ 
+ The input text may contain preprocessor conditional inclusion lines, as
+ well as general symbol substitution sequences.
+ 
+ The preprocessor conditional inclusion commands have the form:
+ 
+      #if <expression> [then]
+         lines
+      #elsif <expression> [then]
+         lines
+      #elsif <expression> [then]
+         lines
+      ...
+      #else
+         lines
+      #end if;
+ 
+ In this example, <expression> is defined by the following grammar:
+ 
+      <expression> ::=  <symbol>
+      <expression> ::=  <symbol> = "<value>"
+      <expression> ::=  <symbol> = <symbol>
+      <expression> ::=  <symbol> = <integer>
+      <expression> ::=  <symbol> > <integer>
+      <expression> ::=  <symbol> >= <integer>
+      <expression> ::=  <symbol> < <integer>
+      <expression> ::=  <symbol> <= <integer>
+      <expression> ::=  <symbol> 'Defined
+      <expression> ::=  not <expression>
+      <expression> ::=  <expression> and <expression>
+      <expression> ::=  <expression> or <expression>
+      <expression> ::=  <expression> and then <expression>
+      <expression> ::=  <expression> or else <expression>
+      <expression> ::=  ( <expression> )
+ 
+ Note the following restriction: it is not allowed to have “and” or “or”
+ following “not” in the same expression without parentheses.  For
+ example, this is not allowed:
+ 
+      not X or Y
+ 
+ This can be expressed instead as one of the following forms:
+ 
+      (not X) or Y
+      not (X or Y)
+ 
+ For the first test (<expression> ::= <symbol>) the symbol must have
+ either the value true or false, that is to say the right-hand of the
+ symbol definition must be one of the (case-insensitive) literals ‘True’
+ or ‘False’.  If the value is true, then the corresponding lines are
+ included, and if the value is false, they are excluded.
+ 
+ When comparing a symbol to an integer, the integer is any non negative
+ literal integer as defined in the Ada Reference Manual, such as 3,
+ 16#FF# or 2#11#.  The symbol value must also be a non negative integer.
+ Integer values in the range 0 ..  2**31-1 are supported.
+ 
+ The test (<expression> ::= <symbol>’Defined) is true only if the symbol
+ has been defined in the definition file or by a ‘-D’ switch on the
+ command line.  Otherwise, the test is false.
+ 
+ The equality tests are case insensitive, as are all the preprocessor
+ lines.
+ 
+ If the symbol referenced is not defined in the symbol definitions file,
+ then the effect depends on whether or not switch ‘-u’ is specified.  If
+ so, then the symbol is treated as if it had the value false and the test
+ fails.  If this switch is not specified, then it is an error to
+ reference an undefined symbol.  It is also an error to reference a
+ symbol that is defined with a value other than ‘True’ or ‘False’.
+ 
+ The use of the ‘not’ operator inverts the sense of this logical test.
+ The ‘not’ operator cannot be combined with the ‘or’ or ‘and’ operators,
+ without parentheses.  For example, “if not X or Y then” is not allowed,
+ but “if (not X) or Y then” and “if not (X or Y) then” are.
+ 
+ The ‘then’ keyword is optional as shown
+ 
+ The ‘#’ must be the first non-blank character on a line, but otherwise
+ the format is free form.  Spaces or tabs may appear between the ‘#’ and
+ the keyword.  The keywords and the symbols are case insensitive as in
+ normal Ada code.  Comments may be used on a preprocessor line, but other
+ than that, no other tokens may appear on a preprocessor line.  Any
+ number of ‘elsif’ clauses can be present, including none at all.  The
+ ‘else’ is optional, as in Ada.
+ 
+ The ‘#’ marking the start of a preprocessor line must be the first
+ non-blank character on the line, i.e., it must be preceded only by
+ spaces or horizontal tabs.
+ 
+ Symbol substitution outside of preprocessor lines is obtained by using
+ the sequence:
+ 
+      $symbol
+ 
+ anywhere within a source line, except in a comment or within a string
+ literal.  The identifier following the ‘$’ must match one of the symbols
+ defined in the symbol definition file, and the result is to substitute
+ the value of the symbol in place of ‘$symbol’ in the output file.
+ 
+ Note that although the substitution of strings within a string literal
+ is not possible, it is possible to have a symbol whose defined value is
+ a string literal.  So instead of setting XYZ to ‘hello’ and writing:
+ 
+      Header : String := "$XYZ";
+ 
+ you should set XYZ to ‘"hello"’ and write:
+ 
+      Header : String := $XYZ;
+ 
+ and then the substitution will occur as desired.
+ 
+ 
+ File: gnat_ugn.info,  Node: Integrated Preprocessing,  Prev: Preprocessing with gnatprep,  Up: Conditional Compilation
+ 
+ 3.10.3 Integrated Preprocessing
+ -------------------------------
+ 
+ As noted above, a file to be preprocessed consists of Ada source code in
+ which preprocessing lines have been inserted.  However, instead of using
+ ‘gnatprep’ to explicitly preprocess a file as a separate step before
+ compilation, you can carry out the preprocessing implicitly as part of
+ compilation.  Such ‘integrated preprocessing’, which is the common style
+ with C, is performed when either or both of the following switches are
+ passed to the compiler:
+ 
+         * ‘-gnatep’, which specifies the ‘preprocessor data file’.  This
+           file dictates how the source files will be preprocessed (e.g.,
+           which symbol definition files apply to which sources).
+ 
+         * ‘-gnateD’, which defines values for preprocessing symbols.
+ 
+ Integrated preprocessing applies only to Ada source files, it is not
+ available for configuration pragma files.
+ 
+ With integrated preprocessing, the output from the preprocessor is not,
+ by default, written to any external file.  Instead it is passed
+ internally to the compiler.  To preserve the result of preprocessing in
+ a file, either run ‘gnatprep’ in standalone mode or else supply the
+ ‘-gnateG’ switch (described below) to the compiler.
+ 
+ When using project files:
+ 
+         * the builder switch ‘-x’ should be used if any Ada source is
+           compiled with ‘gnatep=’, so that the compiler finds the
+           ‘preprocessor data file’.
+ 
+         * the preprocessing data file and the symbol definition files
+           should be located in the source directories of the project.
+ 
+ Note that the ‘gnatmake’ switch ‘-m’ will almost always trigger
+ recompilation for sources that are preprocessed, because ‘gnatmake’
+ cannot compute the checksum of the source after preprocessing.
+ 
+ The actual preprocessing function is described in detail in *note
+ Preprocessing with gnatprep: 8f.  This section explains the switches
+ that relate to integrated preprocessing.
+ 
+ ‘-gnatep=`preprocessor_data_file'’
+ 
+      This switch specifies the file name (without directory information)
+      of the preprocessor data file.  Either place this file in one of
+      the source directories, or, when using project files, reference the
+      project file’s directory via the ‘project_name'Project_Dir’ project
+      attribute; e.g:
+ 
+                project Prj is
+                   package Compiler is
+                      for Switches ("Ada") use
+                        ("-gnatep=" & Prj'Project_Dir & "prep.def");
+                   end Compiler;
+                end Prj;
+ 
+      A preprocessor data file is a text file that contains ‘preprocessor
+      control lines’.  A preprocessor control line directs the
+      preprocessing of either a particular source file, or, analogous to
+      ‘others’ in Ada, all sources not specified elsewhere in the
+      preprocessor data file.  A preprocessor control line can optionally
+      identify a ‘definition file’ that assigns values to preprocessor
+      symbols, as well as a list of switches that relate to
+      preprocessing.  Empty lines and comments (using Ada syntax) are
+      also permitted, with no semantic effect.
+ 
+      Here’s an example of a preprocessor data file:
+ 
+                "toto.adb"  "prep.def" -u
+                --  Preprocess toto.adb, using definition file prep.def
+                --  Undefined symbols are treated as False
+ 
+                * -c -DVERSION=V101
+                --  Preprocess all other sources without using a definition file
+                --  Suppressed lined are commented
+                --  Symbol VERSION has the value V101
+ 
+                "tata.adb" "prep2.def" -s
+                --  Preprocess tata.adb, using definition file prep2.def
+                --  List all symbols with their values
+ 
+      A preprocessor control line has the following syntax:
+ 
+                <preprocessor_control_line> ::=
+                   <preprocessor_input> [ <definition_file_name> ] { <switch> }
+ 
+                <preprocessor_input> ::= <source_file_name> | '*'
+ 
+                <definition_file_name> ::= <string_literal>
+ 
+                <source_file_name> := <string_literal>
+ 
+                <switch> := (See below for list)
+ 
+      Thus each preprocessor control line starts with either a literal
+      string or the character ‘*’:
+ 
+         * A literal string is the file name (without directory
+           information) of the source file that will be input to the
+           preprocessor.
+ 
+         * The character ‘*’ is a wild-card indicator; the additional
+           parameters on the line indicate the preprocessing for all the
+           sources that are not specified explicitly on other lines (the
+           order of the lines is not significant).
+ 
+      It is an error to have two lines with the same file name or two
+      lines starting with the character ‘*’.
+ 
+      After the file name or ‘*’, an optional literal string specifies
+      the name of the definition file to be used for preprocessing (*note
+      Form of Definitions File: 98.).  The definition files are found by
+      the compiler in one of the source directories.  In some cases, when
+      compiling a source in a directory other than the current directory,
+      if the definition file is in the current directory, it may be
+      necessary to add the current directory as a source directory
+      through the ‘-I’ switch; otherwise the compiler would not find the
+      definition file.
+ 
+      Finally, switches similar to those of ‘gnatprep’ may optionally
+      appear:
+ 
+      ‘-b’
+ 
+           Causes both preprocessor lines and the lines deleted by
+           preprocessing to be replaced by blank lines, preserving the
+           line number.  This switch is always implied; however, if
+           specified after ‘-c’ it cancels the effect of ‘-c’.
+ 
+      ‘-c’
+ 
+           Causes both preprocessor lines and the lines deleted by
+           preprocessing to be retained as comments marked with the
+           special string ‘‘–!’’.
+ 
+      ‘-D`symbol'=`new_value'’
+ 
+           Define or redefine ‘symbol’ to have ‘new_value’ as its value.
+           The permitted form for ‘symbol’ is either an Ada identifier,
+           or any Ada reserved word aside from ‘if’, ‘else’, ‘elsif’,
+           ‘end’, ‘and’, ‘or’ and ‘then’.  The permitted form for
+           ‘new_value’ is a literal string, an Ada identifier or any Ada
+           reserved word.  A symbol declared with this switch replaces a
+           symbol with the same name defined in a definition file.
+ 
+      ‘-s’
+ 
+           Causes a sorted list of symbol names and values to be listed
+           on the standard output file.
+ 
+      ‘-u’
+ 
+           Causes undefined symbols to be treated as having the value
+           ‘FALSE’ in the context of a preprocessor test.  In the absence
+           of this option, an undefined symbol in a ‘#if’ or ‘#elsif’
+           test will be treated as an error.
+ 
+ ‘-gnateD`symbol'[=`new_value']’
+ 
+      Define or redefine ‘symbol’ to have ‘new_value’ as its value.  If
+      no value is supplied, then the value of ‘symbol’ is ‘True’.  The
+      form of ‘symbol’ is an identifier, following normal Ada
+      (case-insensitive) rules for its syntax, and ‘new_value’ is either
+      an arbitrary string between double quotes or any sequence
+      (including an empty sequence) of characters from the set (letters,
+      digits, period, underline).  Ada reserved words may be used as
+      symbols, with the exceptions of ‘if’, ‘else’, ‘elsif’, ‘end’,
+      ‘and’, ‘or’ and ‘then’.
+ 
+      Examples:
+ 
+                -gnateDToto=Tata
+                -gnateDFoo
+                -gnateDFoo=\"Foo-Bar\"
+ 
+      A symbol declared with this switch on the command line replaces a
+      symbol with the same name either in a definition file or specified
+      with a switch ‘-D’ in the preprocessor data file.
+ 
+      This switch is similar to switch ‘-D’ of ‘gnatprep’.
+ 
+ ‘-gnateG’
+ 
+      When integrated preprocessing is performed on source file
+      ‘filename.extension’, create or overwrite ‘filename.extension.prep’
+      to contain the result of the preprocessing.  For example if the
+      source file is ‘foo.adb’ then the output file will be
+      ‘foo.adb.prep’.
+ 
+ 
+ File: gnat_ugn.info,  Node: Mixed Language Programming,  Next: GNAT and Other Compilation Models,  Prev: Conditional Compilation,  Up: The GNAT Compilation Model
+ 
+ 3.11 Mixed Language Programming
+ ===============================
+ 
+ This section describes how to develop a mixed-language program, with a
+ focus on combining Ada with C or C++.
+ 
+ * Menu:
+ 
+ * Interfacing to C::
+ * Calling Conventions::
+ * Building Mixed Ada and C++ Programs::
+ * Generating Ada Bindings for C and C++ headers::
+ * Generating C Headers for Ada Specifications::
+ 
+ 
+ File: gnat_ugn.info,  Node: Interfacing to C,  Next: Calling Conventions,  Up: Mixed Language Programming
+ 
+ 3.11.1 Interfacing to C
+ -----------------------
+ 
+ Interfacing Ada with a foreign language such as C involves using
+ compiler directives to import and/or export entity definitions in each
+ language – using ‘extern’ statements in C, for instance, and the
+ ‘Import’, ‘Export’, and ‘Convention’ pragmas in Ada.  A full treatment
+ of these topics is provided in Appendix B, section 1 of the Ada
+ Reference Manual.
+ 
+ There are two ways to build a program using GNAT that contains some Ada
+ sources and some foreign language sources, depending on whether or not
+ the main subprogram is written in Ada.  Here is a source example with
+ the main subprogram in Ada:
+ 
+      /* file1.c */
+      #include <stdio.h>
+ 
+      void print_num (int num)
+      {
+        printf ("num is %d.\\n", num);
+        return;
+      }
+ 
+      /* file2.c */
+ 
+      /* num_from_Ada is declared in my_main.adb */
+      extern int num_from_Ada;
+ 
+      int get_num (void)
+      {
+        return num_from_Ada;
+      }
+ 
+      --  my_main.adb
+      procedure My_Main is
+ 
+         --  Declare then export an Integer entity called num_from_Ada
+         My_Num : Integer := 10;
+         pragma Export (C, My_Num, "num_from_Ada");
+ 
+         --  Declare an Ada function spec for Get_Num, then use
+         --  C function get_num for the implementation.
+         function Get_Num return Integer;
+         pragma Import (C, Get_Num, "get_num");
+ 
+         --  Declare an Ada procedure spec for Print_Num, then use
+         --  C function print_num for the implementation.
+         procedure Print_Num (Num : Integer);
+         pragma Import (C, Print_Num, "print_num");
+ 
+      begin
+         Print_Num (Get_Num);
+      end My_Main;
+ 
+ To build this example:
+ 
+    * First compile the foreign language files to generate object files:
+ 
+           $ gcc -c file1.c
+           $ gcc -c file2.c
+ 
+    * Then, compile the Ada units to produce a set of object files and
+      ALI files:
+ 
+           $ gnatmake -c my_main.adb
+ 
+    * Run the Ada binder on the Ada main program:
+ 
+           $ gnatbind my_main.ali
+ 
+    * Link the Ada main program, the Ada objects and the other language
+      objects:
+ 
+           $ gnatlink my_main.ali file1.o file2.o
+ 
+ The last three steps can be grouped in a single command:
+ 
+      $ gnatmake my_main.adb -largs file1.o file2.o
+ 
+ If the main program is in a language other than Ada, then you may have
+ more than one entry point into the Ada subsystem.  You must use a
+ special binder option to generate callable routines that initialize and
+ finalize the Ada units (*note Binding with Non-Ada Main Programs: a0.).
+ Calls to the initialization and finalization routines must be inserted
+ in the main program, or some other appropriate point in the code.  The
+ call to initialize the Ada units must occur before the first Ada
+ subprogram is called, and the call to finalize the Ada units must occur
+ after the last Ada subprogram returns.  The binder will place the
+ initialization and finalization subprograms into the ‘b~xxx.adb’ file
+ where they can be accessed by your C sources.  To illustrate, we have
+ the following example:
+ 
+      /* main.c */
+      extern void adainit (void);
+      extern void adafinal (void);
+      extern int add (int, int);
+      extern int sub (int, int);
+ 
+      int main (int argc, char *argv[])
+      {
+         int a = 21, b = 7;
+ 
+         adainit();
+ 
+         /* Should print "21 + 7 = 28" */
+         printf ("%d + %d = %d\\n", a, b, add (a, b));
+ 
+         /* Should print "21 - 7 = 14" */
+         printf ("%d - %d = %d\\n", a, b, sub (a, b));
+ 
+         adafinal();
+      }
+ 
+      --  unit1.ads
+      package Unit1 is
+         function Add (A, B : Integer) return Integer;
+         pragma Export (C, Add, "add");
+      end Unit1;
+ 
+      --  unit1.adb
+      package body Unit1 is
+         function Add (A, B : Integer) return Integer is
+         begin
+            return A + B;
+         end Add;
+      end Unit1;
+ 
+      --  unit2.ads
+      package Unit2 is
+         function Sub (A, B : Integer) return Integer;
+         pragma Export (C, Sub, "sub");
+      end Unit2;
+ 
+      --  unit2.adb
+      package body Unit2 is
+         function Sub (A, B : Integer) return Integer is
+         begin
+            return A - B;
+         end Sub;
+      end Unit2;
+ 
+ The build procedure for this application is similar to the last
+ example’s:
+ 
+    * First, compile the foreign language files to generate object files:
+ 
+           $ gcc -c main.c
+ 
+    * Next, compile the Ada units to produce a set of object files and
+      ALI files:
+ 
+           $ gnatmake -c unit1.adb
+           $ gnatmake -c unit2.adb
+ 
+    * Run the Ada binder on every generated ALI file.  Make sure to use
+      the ‘-n’ option to specify a foreign main program:
+ 
+           $ gnatbind -n unit1.ali unit2.ali
+ 
+    * Link the Ada main program, the Ada objects and the foreign language
+      objects.  You need only list the last ALI file here:
+ 
+           $ gnatlink unit2.ali main.o -o exec_file
+ 
+      This procedure yields a binary executable called ‘exec_file’.
+ 
+ Depending on the circumstances (for example when your non-Ada main
+ object does not provide symbol ‘main’), you may also need to instruct
+ the GNAT linker not to include the standard startup objects by passing
+ the ‘-nostartfiles’ switch to ‘gnatlink’.
+ 
+ 
+ File: gnat_ugn.info,  Node: Calling Conventions,  Next: Building Mixed Ada and C++ Programs,  Prev: Interfacing to C,  Up: Mixed Language Programming
+ 
+ 3.11.2 Calling Conventions
+ --------------------------
+ 
+ GNAT follows standard calling sequence conventions and will thus
+ interface to any other language that also follows these conventions.
+ The following Convention identifiers are recognized by GNAT:
+ 
+ ‘Ada’
+ 
+      This indicates that the standard Ada calling sequence will be used
+      and all Ada data items may be passed without any limitations in the
+      case where GNAT is used to generate both the caller and callee.  It
+      is also possible to mix GNAT generated code and code generated by
+      another Ada compiler.  In this case, the data types should be
+      restricted to simple cases, including primitive types.  Whether
+      complex data types can be passed depends on the situation.
+      Probably it is safe to pass simple arrays, such as arrays of
+      integers or floats.  Records may or may not work, depending on
+      whether both compilers lay them out identically.  Complex
+      structures involving variant records, access parameters, tasks, or
+      protected types, are unlikely to be able to be passed.
+ 
+      Note that in the case of GNAT running on a platform that supports
+      HP Ada 83, a higher degree of compatibility can be guaranteed, and
+      in particular records are laid out in an identical manner in the
+      two compilers.  Note also that if output from two different
+      compilers is mixed, the program is responsible for dealing with
+      elaboration issues.  Probably the safest approach is to write the
+      main program in the version of Ada other than GNAT, so that it
+      takes care of its own elaboration requirements, and then call the
+      GNAT-generated adainit procedure to ensure elaboration of the GNAT
+      components.  Consult the documentation of the other Ada compiler
+      for further details on elaboration.
+ 
+      However, it is not possible to mix the tasking run time of GNAT and
+      HP Ada 83, All the tasking operations must either be entirely
+      within GNAT compiled sections of the program, or entirely within HP
+      Ada 83 compiled sections of the program.
+ 
+ ‘Assembler’
+ 
+      Specifies assembler as the convention.  In practice this has the
+      same effect as convention Ada (but is not equivalent in the sense
+      of being considered the same convention).
+ 
+ ‘Asm’
+ 
+      Equivalent to Assembler.
+ 
+ ‘COBOL’
+ 
+      Data will be passed according to the conventions described in
+      section B.4 of the Ada Reference Manual.
+ 
+ ‘C’
+ 
+      Data will be passed according to the conventions described in
+      section B.3 of the Ada Reference Manual.
+ 
+      A note on interfacing to a C ‘varargs’ function:
+ 
+           In C, ‘varargs’ allows a function to take a variable number of
+           arguments.  There is no direct equivalent in this to Ada.  One
+           approach that can be used is to create a C wrapper for each
+           different profile and then interface to this C wrapper.  For
+           example, to print an ‘int’ value using ‘printf’, create a C
+           function ‘printfi’ that takes two arguments, a pointer to a
+           string and an int, and calls ‘printf’.  Then in the Ada
+           program, use pragma ‘Import’ to interface to ‘printfi’.
+ 
+           It may work on some platforms to directly interface to a
+           ‘varargs’ function by providing a specific Ada profile for a
+           particular call.  However, this does not work on all
+           platforms, since there is no guarantee that the calling
+           sequence for a two argument normal C function is the same as
+           for calling a ‘varargs’ C function with the same two
+           arguments.
+ 
+ ‘Default’
+ 
+      Equivalent to C.
+ 
+ ‘External’
+ 
+      Equivalent to C.
+ 
+ ‘C_Plus_Plus’ (or ‘CPP’)
+ 
+      This stands for C++.  For most purposes this is identical to C. See
+      the separate description of the specialized GNAT pragmas relating
+      to C++ interfacing for further details.
+ 
+ ‘Fortran’
+ 
+      Data will be passed according to the conventions described in
+      section B.5 of the Ada Reference Manual.
+ 
+ ‘Intrinsic’
+ 
+      This applies to an intrinsic operation, as defined in the Ada
+      Reference Manual.  If a pragma Import (Intrinsic) applies to a
+      subprogram, this means that the body of the subprogram is provided
+      by the compiler itself, usually by means of an efficient code
+      sequence, and that the user does not supply an explicit body for
+      it.  In an application program, the pragma may be applied to the
+      following sets of names:
+ 
+         * Rotate_Left, Rotate_Right, Shift_Left, Shift_Right,
+           Shift_Right_Arithmetic.  The corresponding subprogram
+           declaration must have two formal parameters.  The first one
+           must be a signed integer type or a modular type with a binary
+           modulus, and the second parameter must be of type Natural.
+           The return type must be the same as the type of the first
+           argument.  The size of this type can only be 8, 16, 32, or 64.
+ 
+         * Binary arithmetic operators: ‘+’, ‘-’, ‘*’, ‘/’.  The
+           corresponding operator declaration must have parameters and
+           result type that have the same root numeric type (for example,
+           all three are long_float types).  This simplifies the
+           definition of operations that use type checking to perform
+           dimensional checks:
+ 
+             type Distance is new Long_Float;
+             type Time     is new Long_Float;
+             type Velocity is new Long_Float;
+             function "/" (D : Distance; T : Time)
+               return Velocity;
+             pragma Import (Intrinsic, "/");
+ 
+           This common idiom is often programmed with a generic definition and an
+           explicit body. The pragma makes it simpler to introduce such declarations.
+           It incurs no overhead in compilation time or code size, because it is
+           implemented as a single machine instruction.
+ 
+         * General subprogram entities.  This is used to bind an Ada
+           subprogram declaration to a compiler builtin by name with
+           back-ends where such interfaces are available.  A typical
+           example is the set of ‘__builtin’ functions exposed by the GCC
+           back-end, as in the following example:
+ 
+                function builtin_sqrt (F : Float) return Float;
+                pragma Import (Intrinsic, builtin_sqrt, "__builtin_sqrtf");
+ 
+           Most of the GCC builtins are accessible this way, and as for
+           other import conventions (e.g.  C), it is the user’s
+           responsibility to ensure that the Ada subprogram profile
+           matches the underlying builtin expectations.
+ 
+ ‘Stdcall’
+ 
+      This is relevant only to Windows implementations of GNAT, and
+      specifies that the ‘Stdcall’ calling sequence will be used, as
+      defined by the NT API. Nevertheless, to ease building
+      cross-platform bindings this convention will be handled as a ‘C’
+      calling convention on non-Windows platforms.
+ 
+ ‘DLL’
+ 
+      This is equivalent to ‘Stdcall’.
+ 
+ ‘Win32’
+ 
+      This is equivalent to ‘Stdcall’.
+ 
+ ‘Stubbed’
+ 
+      This is a special convention that indicates that the compiler
+      should provide a stub body that raises ‘Program_Error’.
+ 
+ GNAT additionally provides a useful pragma ‘Convention_Identifier’ that
+ can be used to parameterize conventions and allow additional synonyms to
+ be specified.  For example if you have legacy code in which the
+ convention identifier Fortran77 was used for Fortran, you can use the
+ configuration pragma:
+ 
+      pragma Convention_Identifier (Fortran77, Fortran);
+ 
+ And from now on the identifier Fortran77 may be used as a convention
+ identifier (for example in an ‘Import’ pragma) with the same meaning as
+ Fortran.
+ 
+ 
+ File: gnat_ugn.info,  Node: Building Mixed Ada and C++ Programs,  Next: Generating Ada Bindings for C and C++ headers,  Prev: Calling Conventions,  Up: Mixed Language Programming
+ 
+ 3.11.3 Building Mixed Ada and C++ Programs
+ ------------------------------------------
+ 
+ A programmer inexperienced with mixed-language development may find that
+ building an application containing both Ada and C++ code can be a
+ challenge.  This section gives a few hints that should make this task
+ easier.
+ 
+ * Menu:
+ 
+ * Interfacing to C++::
+ * Linking a Mixed C++ & Ada Program::
+ * A Simple Example::
+ * Interfacing with C++ constructors::
+ * Interfacing with C++ at the Class Level::
+ 
+ 
+ File: gnat_ugn.info,  Node: Interfacing to C++,  Next: Linking a Mixed C++ & Ada Program,  Up: Building Mixed Ada and C++ Programs
+ 
+ 3.11.3.1 Interfacing to C++
+ ...........................
+ 
+ GNAT supports interfacing with the G++ compiler (or any C++ compiler
+ generating code that is compatible with the G++ Application Binary
+ Interface —see ‘http://itanium-cxx-abi.github.io/cxx-abi/abi.html’).
+ 
+ Interfacing can be done at 3 levels: simple data, subprograms, and
+ classes.  In the first two cases, GNAT offers a specific ‘Convention
+ C_Plus_Plus’ (or ‘CPP’) that behaves exactly like ‘Convention C’.
+ Usually, C++ mangles the names of subprograms.  To generate proper
+ mangled names automatically, see *note Generating Ada Bindings for C and
+ C++ headers: a7.).  This problem can also be addressed manually in two
+ ways:
+ 
+    * by modifying the C++ code in order to force a C convention using
+      the ‘extern "C"’ syntax.
+ 
+    * by figuring out the mangled name (using e.g.  ‘nm’) and using it as
+      the Link_Name argument of the pragma import.
+ 
+ Interfacing at the class level can be achieved by using the GNAT
+ specific pragmas such as ‘CPP_Constructor’.  See the
+ ‘GNAT_Reference_Manual’ for additional information.
+ 
+ 
+ File: gnat_ugn.info,  Node: Linking a Mixed C++ & Ada Program,  Next: A Simple Example,  Prev: Interfacing to C++,  Up: Building Mixed Ada and C++ Programs
+ 
+ 3.11.3.2 Linking a Mixed C++ & Ada Program
+ ..........................................
+ 
+ Usually the linker of the C++ development system must be used to link
+ mixed applications because most C++ systems will resolve elaboration
+ issues (such as calling constructors on global class instances)
+ transparently during the link phase.  GNAT has been adapted to ease the
+ use of a foreign linker for the last phase.  Three cases can be
+ considered:
+ 
+    * Using GNAT and G++ (GNU C++ compiler) from the same GCC
+      installation: The C++ linker can simply be called by using the C++
+      specific driver called ‘g++’.
+ 
+      Note that if the C++ code uses inline functions, you will need to
+      compile your C++ code with the ‘-fkeep-inline-functions’ switch in
+      order to provide an existing function implementation that the Ada
+      code can link with.
+ 
+           $ g++ -c -fkeep-inline-functions file1.C
+           $ g++ -c -fkeep-inline-functions file2.C
+           $ gnatmake ada_unit -largs file1.o file2.o --LINK=g++
+ 
+    * Using GNAT and G++ from two different GCC installations: If both
+      compilers are on the :envvar‘PATH‘, the previous method may be
+      used.  It is important to note that environment variables such as
+      ‘C_INCLUDE_PATH’, ‘GCC_EXEC_PREFIX’, ‘BINUTILS_ROOT’, and
+      ‘GCC_ROOT’ will affect both compilers at the same time and may make
+      one of the two compilers operate improperly if set during
+      invocation of the wrong compiler.  It is also very important that
+      the linker uses the proper ‘libgcc.a’ GCC library – that is, the
+      one from the C++ compiler installation.  The implicit link command
+      as suggested in the ‘gnatmake’ command from the former example can
+      be replaced by an explicit link command with the full-verbosity
+      option in order to verify which library is used:
+ 
+           $ gnatbind ada_unit
+           $ gnatlink -v -v ada_unit file1.o file2.o --LINK=c++
+ 
+      If there is a problem due to interfering environment variables, it
+      can be worked around by using an intermediate script.  The
+      following example shows the proper script to use when GNAT has not
+      been installed at its default location and g++ has been installed
+      at its default location:
+ 
+           $ cat ./my_script
+           #!/bin/sh
+           unset BINUTILS_ROOT
+           unset GCC_ROOT
+           c++ $*
+           $ gnatlink -v -v ada_unit file1.o file2.o --LINK=./my_script
+ 
+    * Using a non-GNU C++ compiler: The commands previously described can
+      be used to insure that the C++ linker is used.  Nonetheless, you
+      need to add a few more parameters to the link command line,
+      depending on the exception mechanism used.
+ 
+      If the ‘setjmp’ / ‘longjmp’ exception mechanism is used, only the
+      paths to the ‘libgcc’ libraries are required:
+ 
+           $ cat ./my_script
+           #!/bin/sh
+           CC $* gcc -print-file-name=libgcc.a gcc -print-file-name=libgcc_eh.a
+           $ gnatlink ada_unit file1.o file2.o --LINK=./my_script
+ 
+      where CC is the name of the non-GNU C++ compiler.
+ 
+      If the “zero cost” exception mechanism is used, and the platform
+      supports automatic registration of exception tables (e.g.,
+      Solaris), paths to more objects are required:
+ 
+           $ cat ./my_script
+           #!/bin/sh
+           CC gcc -print-file-name=crtbegin.o $* \\
+           gcc -print-file-name=libgcc.a gcc -print-file-name=libgcc_eh.a \\
+           gcc -print-file-name=crtend.o
+           $ gnatlink ada_unit file1.o file2.o --LINK=./my_script
+ 
+      If the “zero cost exception” mechanism is used, and the platform
+      doesn’t support automatic registration of exception tables (e.g.,
+      HP-UX or AIX), the simple approach described above will not work
+      and a pre-linking phase using GNAT will be necessary.
+ 
+ Another alternative is to use the ‘gprbuild’ multi-language builder
+ which has a large knowledge base and knows how to link Ada and C++ code
+ together automatically in most cases.
+ 
+ 
+ File: gnat_ugn.info,  Node: A Simple Example,  Next: Interfacing with C++ constructors,  Prev: Linking a Mixed C++ & Ada Program,  Up: Building Mixed Ada and C++ Programs
+ 
+ 3.11.3.3 A Simple Example
+ .........................
+ 
+ The following example, provided as part of the GNAT examples, shows how
+ to achieve procedural interfacing between Ada and C++ in both
+ directions.  The C++ class A has two methods.  The first method is
+ exported to Ada by the means of an extern C wrapper function.  The
+ second method calls an Ada subprogram.  On the Ada side, the C++ calls
+ are modelled by a limited record with a layout comparable to the C++
+ class.  The Ada subprogram, in turn, calls the C++ method.  So, starting
+ from the C++ main program, the process passes back and forth between the
+ two languages.
+ 
+ Here are the compilation commands:
+ 
+      $ gnatmake -c simple_cpp_interface
+      $ g++ -c cpp_main.C
+      $ g++ -c ex7.C
+      $ gnatbind -n simple_cpp_interface
+      $ gnatlink simple_cpp_interface -o cpp_main --LINK=g++ -lstdc++ ex7.o cpp_main.o
+ 
+ Here are the corresponding sources:
+ 
+      //cpp_main.C
+ 
+      #include "ex7.h"
+ 
+      extern "C" {
+        void adainit (void);
+        void adafinal (void);
+        void method1 (A *t);
+      }
+ 
+      void method1 (A *t)
+      {
+        t->method1 ();
+      }
+ 
+      int main ()
+      {
+        A obj;
+        adainit ();
+        obj.method2 (3030);
+        adafinal ();
+      }
+ 
+      //ex7.h
+ 
+      class Origin {
+       public:
+        int o_value;
+      };
+      class A : public Origin {
+       public:
+        void method1 (void);
+        void method2 (int v);
+        A();
+        int   a_value;
+      };
+ 
+      //ex7.C
+ 
+      #include "ex7.h"
+      #include <stdio.h>
+ 
+      extern "C" { void ada_method2 (A *t, int v);}
+ 
+      void A::method1 (void)
+      {
+        a_value = 2020;
+        printf ("in A::method1, a_value = %d \\n",a_value);
+      }
+ 
+      void A::method2 (int v)
+      {
+         ada_method2 (this, v);
+         printf ("in A::method2, a_value = %d \\n",a_value);
+      }
+ 
+      A::A(void)
+      {
+         a_value = 1010;
+        printf ("in A::A, a_value = %d \\n",a_value);
+      }
+ 
+      -- simple_cpp_interface.ads
+      with System;
+      package Simple_Cpp_Interface is
+         type A is limited
+            record
+               Vptr    : System.Address;
+               O_Value : Integer;
+               A_Value : Integer;
+            end record;
+         pragma Convention (C, A);
+ 
+         procedure Method1 (This : in out A);
+         pragma Import (C, Method1);
+ 
+         procedure Ada_Method2 (This : in out A; V : Integer);
+         pragma Export (C, Ada_Method2);
+ 
+      end Simple_Cpp_Interface;
+ 
+      -- simple_cpp_interface.adb
+      package body Simple_Cpp_Interface is
+ 
+         procedure Ada_Method2 (This : in out A; V : Integer) is
+         begin
+            Method1 (This);
+            This.A_Value := V;
+         end Ada_Method2;
+ 
+      end Simple_Cpp_Interface;
+ 
+ 
+ File: gnat_ugn.info,  Node: Interfacing with C++ constructors,  Next: Interfacing with C++ at the Class Level,  Prev: A Simple Example,  Up: Building Mixed Ada and C++ Programs
+ 
+ 3.11.3.4 Interfacing with C++ constructors
+ ..........................................
+ 
+ In order to interface with C++ constructors GNAT provides the ‘pragma
+ CPP_Constructor’ (see the ‘GNAT_Reference_Manual’ for additional
+ information).  In this section we present some common uses of C++
+ constructors in mixed-languages programs in GNAT.
+ 
+ Let us assume that we need to interface with the following C++ class:
+ 
+      class Root {
+      public:
+        int  a_value;
+        int  b_value;
+        virtual int Get_Value ();
+        Root();              // Default constructor
+        Root(int v);         // 1st non-default constructor
+        Root(int v, int w);  // 2nd non-default constructor
+      };
+ 
+ For this purpose we can write the following package spec (further
+ information on how to build this spec is available in *note Interfacing
+ with C++ at the Class Level: ae. and *note Generating Ada Bindings for C
+ and C++ headers: a7.).
+ 
+      with Interfaces.C; use Interfaces.C;
+      package Pkg_Root is
+        type Root is tagged limited record
+           A_Value : int;
+           B_Value : int;
+        end record;
+        pragma Import (CPP, Root);
+ 
+        function Get_Value (Obj : Root) return int;
+        pragma Import (CPP, Get_Value);
+ 
+        function Constructor return Root;
+        pragma Cpp_Constructor (Constructor, "_ZN4RootC1Ev");
+ 
+        function Constructor (v : Integer) return Root;
+        pragma Cpp_Constructor (Constructor, "_ZN4RootC1Ei");
+ 
+        function Constructor (v, w : Integer) return Root;
+        pragma Cpp_Constructor (Constructor, "_ZN4RootC1Eii");
+      end Pkg_Root;
+ 
+ On the Ada side the constructor is represented by a function (whose name
+ is arbitrary) that returns the classwide type corresponding to the
+ imported C++ class.  Although the constructor is described as a
+ function, it is typically a procedure with an extra implicit argument
+ (the object being initialized) at the implementation level.  GNAT issues
+ the appropriate call, whatever it is, to get the object properly
+ initialized.
+ 
+ Constructors can only appear in the following contexts:
+ 
+    * On the right side of an initialization of an object of type ‘T’.
+ 
+    * On the right side of an initialization of a record component of
+      type ‘T’.
+ 
+    * In an Ada 2005 limited aggregate.
+ 
+    * In an Ada 2005 nested limited aggregate.
+ 
+    * In an Ada 2005 limited aggregate that initializes an object built
+      in place by an extended return statement.
+ 
+ In a declaration of an object whose type is a class imported from C++,
+ either the default C++ constructor is implicitly called by GNAT, or else
+ the required C++ constructor must be explicitly called in the expression
+ that initializes the object.  For example:
+ 
+      Obj1 : Root;
+      Obj2 : Root := Constructor;
+      Obj3 : Root := Constructor (v => 10);
+      Obj4 : Root := Constructor (30, 40);
+ 
+ The first two declarations are equivalent: in both cases the default C++
+ constructor is invoked (in the former case the call to the constructor
+ is implicit, and in the latter case the call is explicit in the object
+ declaration).  ‘Obj3’ is initialized by the C++ non-default constructor
+ that takes an integer argument, and ‘Obj4’ is initialized by the
+ non-default C++ constructor that takes two integers.
+ 
+ Let us derive the imported C++ class in the Ada side.  For example:
+ 
+      type DT is new Root with record
+         C_Value : Natural := 2009;
+      end record;
+ 
+ In this case the components DT inherited from the C++ side must be
+ initialized by a C++ constructor, and the additional Ada components of
+ type DT are initialized by GNAT. The initialization of such an object is
+ done either by default, or by means of a function returning an aggregate
+ of type DT, or by means of an extension aggregate.
+ 
+      Obj5 : DT;
+      Obj6 : DT := Function_Returning_DT (50);
+      Obj7 : DT := (Constructor (30,40) with C_Value => 50);
+ 
+ The declaration of ‘Obj5’ invokes the default constructors: the C++
+ default constructor of the parent type takes care of the initialization
+ of the components inherited from Root, and GNAT takes care of the
+ default initialization of the additional Ada components of type DT (that
+ is, ‘C_Value’ is initialized to value 2009).  The order of invocation of
+ the constructors is consistent with the order of elaboration required by
+ Ada and C++.  That is, the constructor of the parent type is always
+ called before the constructor of the derived type.
+ 
+ Let us now consider a record that has components whose type is imported
+ from C++.  For example:
+ 
+      type Rec1 is limited record
+         Data1 : Root := Constructor (10);
+         Value : Natural := 1000;
+      end record;
+ 
+      type Rec2 (D : Integer := 20) is limited record
+         Rec   : Rec1;
+         Data2 : Root := Constructor (D, 30);
+      end record;
+ 
+ The initialization of an object of type ‘Rec2’ will call the non-default
+ C++ constructors specified for the imported components.  For example:
+ 
+      Obj8 : Rec2 (40);
+ 
+ Using Ada 2005 we can use limited aggregates to initialize an object
+ invoking C++ constructors that differ from those specified in the type
+ declarations.  For example:
+ 
+      Obj9 : Rec2 := (Rec => (Data1 => Constructor (15, 16),
+                              others => <>),
+                      others => <>);
+ 
+ The above declaration uses an Ada 2005 limited aggregate to initialize
+ ‘Obj9’, and the C++ constructor that has two integer arguments is
+ invoked to initialize the ‘Data1’ component instead of the constructor
+ specified in the declaration of type ‘Rec1’.  In Ada 2005 the box in the
+ aggregate indicates that unspecified components are initialized using
+ the expression (if any) available in the component declaration.  That
+ is, in this case discriminant ‘D’ is initialized to value ‘20’, ‘Value’
+ is initialized to value 1000, and the non-default C++ constructor that
+ handles two integers takes care of initializing component ‘Data2’ with
+ values ‘20,30’.
+ 
+ In Ada 2005 we can use the extended return statement to build the Ada
+ equivalent to C++ non-default constructors.  For example:
+ 
+      function Constructor (V : Integer) return Rec2 is
+      begin
+         return Obj : Rec2 := (Rec => (Data1  => Constructor (V, 20),
+                                       others => <>),
+                               others => <>) do
+            --  Further actions required for construction of
+            --  objects of type Rec2
+            ...
+         end record;
+      end Constructor;
+ 
+ In this example the extended return statement construct is used to build
+ in place the returned object whose components are initialized by means
+ of a limited aggregate.  Any further action associated with the
+ constructor can be placed inside the construct.
+ 
+ 
+ File: gnat_ugn.info,  Node: Interfacing with C++ at the Class Level,  Prev: Interfacing with C++ constructors,  Up: Building Mixed Ada and C++ Programs
+ 
+ 3.11.3.5 Interfacing with C++ at the Class Level
+ ................................................
+ 
+ In this section we demonstrate the GNAT features for interfacing with
+ C++ by means of an example making use of Ada 2005 abstract interface
+ types.  This example consists of a classification of animals; classes
+ have been used to model our main classification of animals, and
+ interfaces provide support for the management of secondary
+ classifications.  We first demonstrate a case in which the types and
+ constructors are defined on the C++ side and imported from the Ada side,
+ and latter the reverse case.
+ 
+ The root of our derivation will be the ‘Animal’ class, with a single
+ private attribute (the ‘Age’ of the animal), a constructor, and two
+ public primitives to set and get the value of this attribute.
+ 
+      class Animal {
+       public:
+         virtual void Set_Age (int New_Age);
+         virtual int Age ();
+         Animal() {Age_Count = 0;};
+       private:
+         int Age_Count;
+      };
+ 
+ Abstract interface types are defined in C++ by means of classes with
+ pure virtual functions and no data members.  In our example we will use
+ two interfaces that provide support for the common management of
+ ‘Carnivore’ and ‘Domestic’ animals:
+ 
+      class Carnivore {
+      public:
+         virtual int Number_Of_Teeth () = 0;
+      };
+ 
+      class Domestic {
+      public:
+         virtual void Set_Owner (char* Name) = 0;
+      };
+ 
+ Using these declarations, we can now say that a ‘Dog’ is an animal that
+ is both Carnivore and Domestic, that is:
+ 
+      class Dog : Animal, Carnivore, Domestic {
+       public:
+         virtual int  Number_Of_Teeth ();
+         virtual void Set_Owner (char* Name);
+ 
+         Dog(); // Constructor
+       private:
+         int  Tooth_Count;
+         char *Owner;
+      };
+ 
+ In the following examples we will assume that the previous declarations
+ are located in a file named ‘animals.h’.  The following package
+ demonstrates how to import these C++ declarations from the Ada side:
+ 
+      with Interfaces.C.Strings; use Interfaces.C.Strings;
+      package Animals is
+        type Carnivore is limited interface;
+        pragma Convention (C_Plus_Plus, Carnivore);
+        function Number_Of_Teeth (X : Carnivore)
+           return Natural is abstract;
+ 
+        type Domestic is limited interface;
+        pragma Convention (C_Plus_Plus, Domestic);
+        procedure Set_Owner
+          (X    : in out Domestic;
+           Name : Chars_Ptr) is abstract;
+ 
+        type Animal is tagged limited record
+          Age : Natural;
+        end record;
+        pragma Import (C_Plus_Plus, Animal);
+ 
+        procedure Set_Age (X : in out Animal; Age : Integer);
+        pragma Import (C_Plus_Plus, Set_Age);
+ 
+        function Age (X : Animal) return Integer;
+        pragma Import (C_Plus_Plus, Age);
+ 
+        function New_Animal return Animal;
+        pragma CPP_Constructor (New_Animal);
+        pragma Import (CPP, New_Animal, "_ZN6AnimalC1Ev");
+ 
+        type Dog is new Animal and Carnivore and Domestic with record
+          Tooth_Count : Natural;
+          Owner       : Chars_Ptr;
+        end record;
+        pragma Import (C_Plus_Plus, Dog);
+ 
+        function Number_Of_Teeth (A : Dog) return Natural;
+        pragma Import (C_Plus_Plus, Number_Of_Teeth);
+ 
+        procedure Set_Owner (A : in out Dog; Name : Chars_Ptr);
+        pragma Import (C_Plus_Plus, Set_Owner);
+ 
+        function New_Dog return Dog;
+        pragma CPP_Constructor (New_Dog);
+        pragma Import (CPP, New_Dog, "_ZN3DogC2Ev");
+      end Animals;
+ 
+ Thanks to the compatibility between GNAT run-time structures and the C++
+ ABI, interfacing with these C++ classes is easy.  The only requirement
+ is that all the primitives and components must be declared exactly in
+ the same order in the two languages.
+ 
+ Regarding the abstract interfaces, we must indicate to the GNAT compiler
+ by means of a ‘pragma Convention (C_Plus_Plus)’, the convention used to
+ pass the arguments to the called primitives will be the same as for C++.
+ For the imported classes we use ‘pragma Import’ with convention
+ ‘C_Plus_Plus’ to indicate that they have been defined on the C++ side;
+ this is required because the dispatch table associated with these tagged
+ types will be built in the C++ side and therefore will not contain the
+ predefined Ada primitives which Ada would otherwise expect.
+ 
+ As the reader can see there is no need to indicate the C++ mangled names
+ associated with each subprogram because it is assumed that all the calls
+ to these primitives will be dispatching calls.  The only exception is
+ the constructor, which must be registered with the compiler by means of
+ ‘pragma CPP_Constructor’ and needs to provide its associated C++ mangled
+ name because the Ada compiler generates direct calls to it.
+ 
+ With the above packages we can now declare objects of type Dog on the
+ Ada side and dispatch calls to the corresponding subprograms on the C++
+ side.  We can also extend the tagged type Dog with further fields and
+ primitives, and override some of its C++ primitives on the Ada side.
+ For example, here we have a type derivation defined on the Ada side that
+ inherits all the dispatching primitives of the ancestor from the C++
+ side.
+ 
+      with Animals; use Animals;
+      package Vaccinated_Animals is
+        type Vaccinated_Dog is new Dog with null record;
+        function Vaccination_Expired (A : Vaccinated_Dog) return Boolean;
+      end Vaccinated_Animals;
+ 
+ It is important to note that, because of the ABI compatibility, the
+ programmer does not need to add any further information to indicate
+ either the object layout or the dispatch table entry associated with
+ each dispatching operation.
+ 
+ Now let us define all the types and constructors on the Ada side and
+ export them to C++, using the same hierarchy of our previous example:
+ 
+      with Interfaces.C.Strings;
+      use Interfaces.C.Strings;
+      package Animals is
+        type Carnivore is limited interface;
+        pragma Convention (C_Plus_Plus, Carnivore);
+        function Number_Of_Teeth (X : Carnivore)
+           return Natural is abstract;
+ 
+        type Domestic is limited interface;
+        pragma Convention (C_Plus_Plus, Domestic);
+        procedure Set_Owner
+          (X    : in out Domestic;
+           Name : Chars_Ptr) is abstract;
+ 
+        type Animal is tagged record
+          Age : Natural;
+        end record;
+        pragma Convention (C_Plus_Plus, Animal);
+ 
+        procedure Set_Age (X : in out Animal; Age : Integer);
+        pragma Export (C_Plus_Plus, Set_Age);
+ 
+        function Age (X : Animal) return Integer;
+        pragma Export (C_Plus_Plus, Age);
+ 
+        function New_Animal return Animal'Class;
+        pragma Export (C_Plus_Plus, New_Animal);
+ 
+        type Dog is new Animal and Carnivore and Domestic with record
+          Tooth_Count : Natural;
+          Owner       : String (1 .. 30);
+        end record;
+        pragma Convention (C_Plus_Plus, Dog);
+ 
+        function Number_Of_Teeth (A : Dog) return Natural;
+        pragma Export (C_Plus_Plus, Number_Of_Teeth);
+ 
+        procedure Set_Owner (A : in out Dog; Name : Chars_Ptr);
+        pragma Export (C_Plus_Plus, Set_Owner);
+ 
+        function New_Dog return Dog'Class;
+        pragma Export (C_Plus_Plus, New_Dog);
+      end Animals;
+ 
+ Compared with our previous example the only differences are the use of
+ ‘pragma Convention’ (instead of ‘pragma Import’), and the use of ‘pragma
+ Export’ to indicate to the GNAT compiler that the primitives will be
+ available to C++.  Thanks to the ABI compatibility, on the C++ side
+ there is nothing else to be done; as explained above, the only
+ requirement is that all the primitives and components are declared in
+ exactly the same order.
+ 
+ For completeness, let us see a brief C++ main program that uses the
+ declarations available in ‘animals.h’ (presented in our first example)
+ to import and use the declarations from the Ada side, properly
+ initializing and finalizing the Ada run-time system along the way:
+ 
+      #include "animals.h"
+      #include <iostream>
+      using namespace std;
+ 
+      void Check_Carnivore (Carnivore *obj) {...}
+      void Check_Domestic (Domestic *obj)   {...}
+      void Check_Animal (Animal *obj)       {...}
+      void Check_Dog (Dog *obj)             {...}
+ 
+      extern "C" {
+        void adainit (void);
+        void adafinal (void);
+        Dog* new_dog ();
+      }
+ 
+      void test ()
+      {
+        Dog *obj = new_dog();  // Ada constructor
+        Check_Carnivore (obj); // Check secondary DT
+        Check_Domestic (obj);  // Check secondary DT
+        Check_Animal (obj);    // Check primary DT
+        Check_Dog (obj);       // Check primary DT
+      }
+ 
+      int main ()
+      {
+        adainit ();  test();  adafinal ();
+        return 0;
+      }
+ 
+ 
+ File: gnat_ugn.info,  Node: Generating Ada Bindings for C and C++ headers,  Next: Generating C Headers for Ada Specifications,  Prev: Building Mixed Ada and C++ Programs,  Up: Mixed Language Programming
+ 
+ 3.11.4 Generating Ada Bindings for C and C++ headers
+ ----------------------------------------------------
+ 
+ GNAT includes a binding generator for C and C++ headers which is
+ intended to do 95% of the tedious work of generating Ada specs from C or
+ C++ header files.
+ 
+ Note that this capability is not intended to generate 100% correct Ada
+ specs, and will is some cases require manual adjustments, although it
+ can often be used out of the box in practice.
+ 
+ Some of the known limitations include:
+ 
+    * only very simple character constant macros are translated into Ada
+      constants.  Function macros (macros with arguments) are partially
+      translated as comments, to be completed manually if needed.
+ 
+    * some extensions (e.g.  vector types) are not supported
+ 
+    * pointers to pointers are mapped to System.Address
+ 
+    * identifiers with identical name (except casing) may generate
+      compilation errors (e.g.  ‘shm_get’ vs ‘SHM_GET’).
+ 
+ The code is generated using Ada 2012 syntax, which makes it easier to
+ interface with other languages.  In most cases you can still use the
+ generated binding even if your code is compiled using earlier versions
+ of Ada (e.g.  ‘-gnat95’).
+ 
+ * Menu:
+ 
+ * Running the Binding Generator::
+ * Generating Bindings for C++ Headers::
+ * Switches::
+ 
+ 
+ File: gnat_ugn.info,  Node: Running the Binding Generator,  Next: Generating Bindings for C++ Headers,  Up: Generating Ada Bindings for C and C++ headers
+ 
+ 3.11.4.1 Running the Binding Generator
+ ......................................
+ 
+ The binding generator is part of the ‘gcc’ compiler and can be invoked
+ via the ‘-fdump-ada-spec’ switch, which will generate Ada spec files for
+ the header files specified on the command line, and all header files
+ needed by these files transitively.  For example:
+ 
+      $ gcc -c -fdump-ada-spec -C /usr/include/time.h
+      $ gcc -c *.ads
+ 
+ will generate, under GNU/Linux, the following files: ‘time_h.ads’,
+ ‘bits_time_h.ads’, ‘stddef_h.ads’, ‘bits_types_h.ads’ which correspond
+ to the files ‘/usr/include/time.h’, ‘/usr/include/bits/time.h’, etc…,
+ and then compile these Ada specs.  That is to say, the name of the Ada
+ specs is in keeping with the relative path under ‘/usr/include/’ of the
+ header files.  This behavior is specific to paths ending with
+ ‘/include/’; in all the other cases, the name of the Ada specs is
+ derived from the simple name of the header files instead.
+ 
+ The ‘-C’ switch tells ‘gcc’ to extract comments from headers, and will
+ attempt to generate corresponding Ada comments.
+ 
+ If you want to generate a single Ada file and not the transitive
+ closure, you can use instead the ‘-fdump-ada-spec-slim’ switch.
+ 
+ You can optionally specify a parent unit, of which all generated units
+ will be children, using ‘-fada-spec-parent=`unit'’.
+ 
+ The simple ‘gcc’-based command works only for C headers.  For C++
+ headers you need to use either the ‘g++’ command or the combination ‘gcc
+ -x c++’.
+ 
+ In some cases, the generated bindings will be more complete or more
+ meaningful when defining some macros, which you can do via the ‘-D’
+ switch.  This is for example the case with ‘Xlib.h’ under GNU/Linux:
+ 
+      $ gcc -c -fdump-ada-spec -DXLIB_ILLEGAL_ACCESS -C /usr/include/X11/Xlib.h
+ 
+ The above will generate more complete bindings than a straight call
+ without the ‘-DXLIB_ILLEGAL_ACCESS’ switch.
+ 
+ In other cases, it is not possible to parse a header file in a
+ stand-alone manner, because other include files need to be included
+ first.  In this case, the solution is to create a small header file
+ including the needed ‘#include’ and possible ‘#define’ directives.  For
+ example, to generate Ada bindings for ‘readline/readline.h’, you need to
+ first include ‘stdio.h’, so you can create a file with the following two
+ lines in e.g.  ‘readline1.h’:
+ 
+      #include <stdio.h>
+      #include <readline/readline.h>
+ 
+ and then generate Ada bindings from this file:
+ 
+      $ gcc -c -fdump-ada-spec readline1.h
+ 
+ 
+ File: gnat_ugn.info,  Node: Generating Bindings for C++ Headers,  Next: Switches,  Prev: Running the Binding Generator,  Up: Generating Ada Bindings for C and C++ headers
+ 
+ 3.11.4.2 Generating Bindings for C++ Headers
+ ............................................
+ 
+ Generating bindings for C++ headers is done using the same options,
+ always with the ‘g++’ compiler.  Note that generating Ada spec from C++
+ headers is a much more complex job and support for C++ headers is much
+ more limited that support for C headers.  As a result, you will need to
+ modify the resulting bindings by hand more extensively when using C++
+ headers.
+ 
+ In this mode, C++ classes will be mapped to Ada tagged types,
+ constructors will be mapped using the ‘CPP_Constructor’ pragma, and when
+ possible, multiple inheritance of abstract classes will be mapped to Ada
+ interfaces (see the ‘Interfacing to C++’ section in the ‘GNAT Reference
+ Manual’ for additional information on interfacing to C++).
+ 
+ For example, given the following C++ header file:
+ 
+      class Carnivore {
+      public:
+         virtual int Number_Of_Teeth () = 0;
+      };
+ 
+      class Domestic {
+      public:
+         virtual void Set_Owner (char* Name) = 0;
+      };
+ 
+      class Animal {
+      public:
+        int Age_Count;
+        virtual void Set_Age (int New_Age);
+      };
+ 
+      class Dog : Animal, Carnivore, Domestic {
+       public:
+        int  Tooth_Count;
+        char *Owner;
+ 
+        virtual int  Number_Of_Teeth ();
+        virtual void Set_Owner (char* Name);
+ 
+        Dog();
+      };
+ 
+ The corresponding Ada code is generated:
+ 
+      package Class_Carnivore is
+        type Carnivore is limited interface;
+        pragma Import (CPP, Carnivore);
+ 
+        function Number_Of_Teeth (this : access Carnivore) return int is abstract;
+      end;
+      use Class_Carnivore;
+ 
+      package Class_Domestic is
+        type Domestic is limited interface;
+        pragma Import (CPP, Domestic);
+ 
+        procedure Set_Owner
+          (this : access Domestic;
+           Name : Interfaces.C.Strings.chars_ptr) is abstract;
+      end;
+      use Class_Domestic;
+ 
+      package Class_Animal is
+        type Animal is tagged limited record
+          Age_Count : aliased int;
+        end record;
+        pragma Import (CPP, Animal);
+ 
+        procedure Set_Age (this : access Animal; New_Age : int);
+        pragma Import (CPP, Set_Age, "_ZN6Animal7Set_AgeEi");
+      end;
+      use Class_Animal;
+ 
+      package Class_Dog is
+        type Dog is new Animal and Carnivore and Domestic with record
+          Tooth_Count : aliased int;
+          Owner : Interfaces.C.Strings.chars_ptr;
+        end record;
+        pragma Import (CPP, Dog);
+ 
+        function Number_Of_Teeth (this : access Dog) return int;
+        pragma Import (CPP, Number_Of_Teeth, "_ZN3Dog15Number_Of_TeethEv");
+ 
+        procedure Set_Owner
+          (this : access Dog; Name : Interfaces.C.Strings.chars_ptr);
+        pragma Import (CPP, Set_Owner, "_ZN3Dog9Set_OwnerEPc");
+ 
+        function New_Dog return Dog;
+        pragma CPP_Constructor (New_Dog);
+        pragma Import (CPP, New_Dog, "_ZN3DogC1Ev");
+      end;
+      use Class_Dog;
+ 
+ 
+ File: gnat_ugn.info,  Node: Switches,  Prev: Generating Bindings for C++ Headers,  Up: Generating Ada Bindings for C and C++ headers
+ 
+ 3.11.4.3 Switches
+ .................
+ 
+ ‘-fdump-ada-spec’
+ 
+      Generate Ada spec files for the given header files transitively
+      (including all header files that these headers depend upon).
+ 
+ ‘-fdump-ada-spec-slim’
+ 
+      Generate Ada spec files for the header files specified on the
+      command line only.
+ 
+ ‘-fada-spec-parent=`unit'’
+ 
+      Specifies that all files generated by ‘-fdump-ada-spec’ are to be
+      child units of the specified parent unit.
+ 
+ ‘-C’
+ 
+      Extract comments from headers and generate Ada comments in the Ada
+      spec files.
+ 
+ 
+ File: gnat_ugn.info,  Node: Generating C Headers for Ada Specifications,  Prev: Generating Ada Bindings for C and C++ headers,  Up: Mixed Language Programming
+ 
+ 3.11.5 Generating C Headers for Ada Specifications
+ --------------------------------------------------
+ 
+ GNAT includes a C header generator for Ada specifications which supports
+ Ada types that have a direct mapping to C types.  This includes in
+ particular support for:
+ 
+    * Scalar types
+ 
+    * Constrained arrays
+ 
+    * Records (untagged)
+ 
+    * Composition of the above types
+ 
+    * Constant declarations
+ 
+    * Object declarations
+ 
+    * Subprogram declarations
+ 
+ * Menu:
+ 
+ * Running the C Header Generator::
+ 
+ 
+ File: gnat_ugn.info,  Node: Running the C Header Generator,  Up: Generating C Headers for Ada Specifications
+ 
+ 3.11.5.1 Running the C Header Generator
+ .......................................
+ 
+ The C header generator is part of the GNAT compiler and can be invoked
+ via the ‘-gnatceg’ combination of switches, which will generate a ‘.h’
+ file corresponding to the given input file (Ada spec or body).  Note
+ that only spec files are processed in any case, so giving a spec or a
+ body file as input is equivalent.  For example:
+ 
+      $ gcc -c -gnatceg pack1.ads
+ 
+ will generate a self-contained file called ‘pack1.h’ including common
+ definitions from the Ada Standard package, followed by the definitions
+ included in ‘pack1.ads’, as well as all the other units withed by this
+ file.
+ 
+ For instance, given the following Ada files:
+ 
+      package Pack2 is
+         type Int is range 1 .. 10;
+      end Pack2;
+ 
+      with Pack2;
+ 
+      package Pack1 is
+         type Rec is record
+            Field1, Field2 : Pack2.Int;
+         end record;
+ 
+         Global : Rec := (1, 2);
+ 
+         procedure Proc1 (R : Rec);
+         procedure Proc2 (R : in out Rec);
+      end Pack1;
+ 
+ The above ‘gcc’ command will generate the following ‘pack1.h’ file:
+ 
+      /* Standard definitions skipped */
+      #ifndef PACK2_ADS
+      #define PACK2_ADS
+      typedef short_short_integer pack2__TintB;
+      typedef pack2__TintB pack2__int;
+      #endif /* PACK2_ADS */
+ 
+      #ifndef PACK1_ADS
+      #define PACK1_ADS
+      typedef struct _pack1__rec {
+        pack2__int field1;
+        pack2__int field2;
+      } pack1__rec;
+      extern pack1__rec pack1__global;
+      extern void pack1__proc1(const pack1__rec r);
+      extern void pack1__proc2(pack1__rec *r);
+      #endif /* PACK1_ADS */
+ 
+ You can then ‘include’ ‘pack1.h’ from a C source file and use the types,
+ call subprograms, reference objects, and constants.
+ 
+ 
+ File: gnat_ugn.info,  Node: GNAT and Other Compilation Models,  Next: Using GNAT Files with External Tools,  Prev: Mixed Language Programming,  Up: The GNAT Compilation Model
+ 
+ 3.12 GNAT and Other Compilation Models
+ ======================================
+ 
+ This section compares the GNAT model with the approaches taken in other
+ environments, first the C/C++ model and then the mechanism that has been
+ used in other Ada systems, in particular those traditionally used for
+ Ada 83.
+ 
+ * Menu:
+ 
+ * Comparison between GNAT and C/C++ Compilation Models::
+ * Comparison between GNAT and Conventional Ada Library Models::
+ 
+ 
+ File: gnat_ugn.info,  Node: Comparison between GNAT and C/C++ Compilation Models,  Next: Comparison between GNAT and Conventional Ada Library Models,  Up: GNAT and Other Compilation Models
+ 
+ 3.12.1 Comparison between GNAT and C/C++ Compilation Models
+ -----------------------------------------------------------
+ 
+ The GNAT model of compilation is close to the C and C++ models.  You can
+ think of Ada specs as corresponding to header files in C. As in C, you
+ don’t need to compile specs; they are compiled when they are used.  The
+ Ada ‘with’ is similar in effect to the ‘#include’ of a C header.
+ 
+ One notable difference is that, in Ada, you may compile specs separately
+ to check them for semantic and syntactic accuracy.  This is not always
+ possible with C headers because they are fragments of programs that have
+ less specific syntactic or semantic rules.
+ 
+ The other major difference is the requirement for running the binder,
+ which performs two important functions.  First, it checks for
+ consistency.  In C or C++, the only defense against assembling
+ inconsistent programs lies outside the compiler, in a makefile, for
+ example.  The binder satisfies the Ada requirement that it be impossible
+ to construct an inconsistent program when the compiler is used in normal
+ mode.
+ 
+ The other important function of the binder is to deal with elaboration
+ issues.  There are also elaboration issues in C++ that are handled
+ automatically.  This automatic handling has the advantage of being
+ simpler to use, but the C++ programmer has no control over elaboration.
+ Where ‘gnatbind’ might complain there was no valid order of elaboration,
+ a C++ compiler would simply construct a program that malfunctioned at
+ run time.
+ 
+ 
+ File: gnat_ugn.info,  Node: Comparison between GNAT and Conventional Ada Library Models,  Prev: Comparison between GNAT and C/C++ Compilation Models,  Up: GNAT and Other Compilation Models
+ 
+ 3.12.2 Comparison between GNAT and Conventional Ada Library Models
+ ------------------------------------------------------------------
+ 
+ This section is intended for Ada programmers who have used an Ada
+ compiler implementing the traditional Ada library model, as described in
+ the Ada Reference Manual.
+ 
+ In GNAT, there is no ‘library’ in the normal sense.  Instead, the set of
+ source files themselves acts as the library.  Compiling Ada programs
+ does not generate any centralized information, but rather an object file
+ and a ALI file, which are of interest only to the binder and linker.  In
+ a traditional system, the compiler reads information not only from the
+ source file being compiled, but also from the centralized library.  This
+ means that the effect of a compilation depends on what has been
+ previously compiled.  In particular:
+ 
+    * When a unit is ‘with’ed, the unit seen by the compiler corresponds
+      to the version of the unit most recently compiled into the library.
+ 
+    * Inlining is effective only if the necessary body has already been
+      compiled into the library.
+ 
+    * Compiling a unit may obsolete other units in the library.
+ 
+ In GNAT, compiling one unit never affects the compilation of any other
+ units because the compiler reads only source files.  Only changes to
+ source files can affect the results of a compilation.  In particular:
+ 
+    * When a unit is ‘with’ed, the unit seen by the compiler corresponds
+      to the source version of the unit that is currently accessible to
+      the compiler.
+ 
+    * Inlining requires the appropriate source files for the package or
+      subprogram bodies to be available to the compiler.  Inlining is
+      always effective, independent of the order in which units are
+      compiled.
+ 
+    * Compiling a unit never affects any other compilations.  The editing
+      of sources may cause previous compilations to be out of date if
+      they depended on the source file being modified.
+ 
+ The most important result of these differences is that order of
+ compilation is never significant in GNAT. There is no situation in which
+ one is required to do one compilation before another.  What shows up as
+ order of compilation requirements in the traditional Ada library
+ becomes, in GNAT, simple source dependencies; in other words, there is
+ only a set of rules saying what source files must be present when a file
+ is compiled.
+ 
+ 
+ File: gnat_ugn.info,  Node: Using GNAT Files with External Tools,  Prev: GNAT and Other Compilation Models,  Up: The GNAT Compilation Model
+ 
+ 3.13 Using GNAT Files with External Tools
+ =========================================
+ 
+ This section explains how files that are produced by GNAT may be used
+ with tools designed for other languages.
+ 
+ * Menu:
+ 
+ * Using Other Utility Programs with GNAT::
+ * The External Symbol Naming Scheme of GNAT::
+ 
+ 
+ File: gnat_ugn.info,  Node: Using Other Utility Programs with GNAT,  Next: The External Symbol Naming Scheme of GNAT,  Up: Using GNAT Files with External Tools
+ 
+ 3.13.1 Using Other Utility Programs with GNAT
+ ---------------------------------------------
+ 
+ The object files generated by GNAT are in standard system format and in
+ particular the debugging information uses this format.  This means
+ programs generated by GNAT can be used with existing utilities that
+ depend on these formats.
+ 
+ In general, any utility program that works with C will also often work
+ with Ada programs generated by GNAT. This includes software utilities
+ such as gprof (a profiling program), gdb (the FSF debugger), and
+ utilities such as Purify.
+ 
+ 
+ File: gnat_ugn.info,  Node: The External Symbol Naming Scheme of GNAT,  Prev: Using Other Utility Programs with GNAT,  Up: Using GNAT Files with External Tools
+ 
+ 3.13.2 The External Symbol Naming Scheme of GNAT
+ ------------------------------------------------
+ 
+ In order to interpret the output from GNAT, when using tools that are
+ originally intended for use with other languages, it is useful to
+ understand the conventions used to generate link names from the Ada
+ entity names.
+ 
+ All link names are in all lowercase letters.  With the exception of
+ library procedure names, the mechanism used is simply to use the full
+ expanded Ada name with dots replaced by double underscores.  For
+ example, suppose we have the following package spec:
+ 
+      package QRS is
+         MN : Integer;
+      end QRS;
+ 
+ The variable ‘MN’ has a full expanded Ada name of ‘QRS.MN’, so the
+ corresponding link name is ‘qrs__mn’.  Of course if a ‘pragma Export’ is
+ used this may be overridden:
+ 
+      package Exports is
+         Var1 : Integer;
+         pragma Export (Var1, C, External_Name => "var1_name");
+         Var2 : Integer;
+         pragma Export (Var2, C, Link_Name => "var2_link_name");
+      end Exports;
+ 
+ In this case, the link name for ‘Var1’ is whatever link name the C
+ compiler would assign for the C function ‘var1_name’.  This typically
+ would be either ‘var1_name’ or ‘_var1_name’, depending on operating
+ system conventions, but other possibilities exist.  The link name for
+ ‘Var2’ is ‘var2_link_name’, and this is not operating system dependent.
+ 
+ One exception occurs for library level procedures.  A potential
+ ambiguity arises between the required name ‘_main’ for the C main
+ program, and the name we would otherwise assign to an Ada library level
+ procedure called ‘Main’ (which might well not be the main program).
+ 
+ To avoid this ambiguity, we attach the prefix ‘_ada_’ to such names.  So
+ if we have a library level procedure such as:
+ 
+      procedure Hello (S : String);
+ 
+ the external name of this procedure will be ‘_ada_hello’.
+ 
+ 
+ File: gnat_ugn.info,  Node: Building Executable Programs with GNAT,  Next: GNAT Utility Programs,  Prev: The GNAT Compilation Model,  Up: Top
+ 
+ 4 Building Executable Programs with GNAT
+ ****************************************
+ 
+ This chapter describes first the gnatmake tool (*note Building with
+ gnatmake: c6.), which automatically determines the set of sources needed
+ by an Ada compilation unit and executes the necessary (re)compilations,
+ binding and linking.  It also explains how to use each tool
+ individually: the compiler (gcc, see *note Compiling with gcc: c7.),
+ binder (gnatbind, see *note Binding with gnatbind: c8.), and linker
+ (gnatlink, see *note Linking with gnatlink: c9.) to build executable
+ programs.  Finally, this chapter provides examples of how to make use of
+ the general GNU make mechanism in a GNAT context (see *note Using the
+ GNU make Utility: 70.).
+ 
+ * Menu:
+ 
+ * Building with gnatmake::
+ * Compiling with gcc::
+ * Compiler Switches::
+ * Linker Switches::
+ * Binding with gnatbind::
+ * Linking with gnatlink::
+ * Using the GNU make Utility::
+ 
+ 
+ File: gnat_ugn.info,  Node: Building with gnatmake,  Next: Compiling with gcc,  Up: Building Executable Programs with GNAT
+ 
+ 4.1 Building with ‘gnatmake’
+ ============================
+ 
+ A typical development cycle when working on an Ada program consists of
+ the following steps:
+ 
+   1. Edit some sources to fix bugs;
+ 
+   2. Add enhancements;
+ 
+   3. Compile all sources affected;
+ 
+   4. Rebind and relink; and
+ 
+   5. Test.
+ 
+ The third step in particular can be tricky, because not only do the
+ modified files have to be compiled, but any files depending on these
+ files must also be recompiled.  The dependency rules in Ada can be quite
+ complex, especially in the presence of overloading, ‘use’ clauses,
+ generics and inlined subprograms.
+ 
+ ‘gnatmake’ automatically takes care of the third and fourth steps of
+ this process.  It determines which sources need to be compiled, compiles
+ them, and binds and links the resulting object files.
+ 
+ Unlike some other Ada make programs, the dependencies are always
+ accurately recomputed from the new sources.  The source based approach
+ of the GNAT compilation model makes this possible.  This means that if
+ changes to the source program cause corresponding changes in
+ dependencies, they will always be tracked exactly correctly by
+ ‘gnatmake’.
+ 
+ Note that for advanced forms of project structure, we recommend creating
+ a project file as explained in the ‘GNAT_Project_Manager’ chapter in the
+ ‘GPRbuild User’s Guide’, and using the ‘gprbuild’ tool which supports
+ building with project files and works similarly to ‘gnatmake’.
+ 
+ * Menu:
+ 
+ * Running gnatmake::
+ * Switches for gnatmake::
+ * Mode Switches for gnatmake::
+ * Notes on the Command Line::
+ * How gnatmake Works::
+ * Examples of gnatmake Usage::
+ 
+ 
+ File: gnat_ugn.info,  Node: Running gnatmake,  Next: Switches for gnatmake,  Up: Building with gnatmake
+ 
+ 4.1.1 Running ‘gnatmake’
+ ------------------------
+ 
+ The usual form of the ‘gnatmake’ command is
+ 
+      $ gnatmake [<switches>] <file_name> [<file_names>] [<mode_switches>]
+ 
+ The only required argument is one ‘file_name’, which specifies a
+ compilation unit that is a main program.  Several ‘file_names’ can be
+ specified: this will result in several executables being built.  If
+ ‘switches’ are present, they can be placed before the first ‘file_name’,
+ between ‘file_names’ or after the last ‘file_name’.  If ‘mode_switches’
+ are present, they must always be placed after the last ‘file_name’ and
+ all ‘switches’.
+ 
+ If you are using standard file extensions (‘.adb’ and ‘.ads’), then the
+ extension may be omitted from the ‘file_name’ arguments.  However, if
+ you are using non-standard extensions, then it is required that the
+ extension be given.  A relative or absolute directory path can be
+ specified in a ‘file_name’, in which case, the input source file will be
+ searched for in the specified directory only.  Otherwise, the input
+ source file will first be searched in the directory where ‘gnatmake’ was
+ invoked and if it is not found, it will be search on the source path of
+ the compiler as described in *note Search Paths and the Run-Time Library
+ (RTL): 73.
+ 
+ All ‘gnatmake’ output (except when you specify ‘-M’) is sent to
+ ‘stderr’.  The output produced by the ‘-M’ switch is sent to ‘stdout’.
+ 
+ 
+ File: gnat_ugn.info,  Node: Switches for gnatmake,  Next: Mode Switches for gnatmake,  Prev: Running gnatmake,  Up: Building with gnatmake
+ 
+ 4.1.2 Switches for ‘gnatmake’
+ -----------------------------
+ 
+ You may specify any of the following switches to ‘gnatmake’:
+ 
+ ‘--version’
+ 
+      Display Copyright and version, then exit disregarding all other
+      options.
+ 
+ ‘--help’
+ 
+      If ‘--version’ was not used, display usage, then exit disregarding
+      all other options.
+ 
+ ‘-P`project'’
+ 
+      Build GNAT project file ‘project’ using GPRbuild.  When this switch
+      is present, all other command-line switches are treated as GPRbuild
+      switches and not ‘gnatmake’ switches.
+ 
+ ‘--GCC=`compiler_name'’
+ 
+      Program used for compiling.  The default is ‘gcc’.  You need to use
+      quotes around ‘compiler_name’ if ‘compiler_name’ contains spaces or
+      other separator characters.  As an example ‘--GCC="foo -x -y"’ will
+      instruct ‘gnatmake’ to use ‘foo -x -y’ as your compiler.  A
+      limitation of this syntax is that the name and path name of the
+      executable itself must not include any embedded spaces.  Note that
+      switch ‘-c’ is always inserted after your command name.  Thus in
+      the above example the compiler command that will be used by
+      ‘gnatmake’ will be ‘foo -c -x -y’.  If several
+      ‘--GCC=compiler_name’ are used, only the last ‘compiler_name’ is
+      taken into account.  However, all the additional switches are also
+      taken into account.  Thus, ‘--GCC="foo -x -y" --GCC="bar -z -t"’ is
+      equivalent to ‘--GCC="bar -x -y -z -t"’.
+ 
+ ‘--GNATBIND=`binder_name'’
+ 
+      Program used for binding.  The default is ‘gnatbind’.  You need to
+      use quotes around ‘binder_name’ if ‘binder_name’ contains spaces or
+      other separator characters.  As an example ‘--GNATBIND="bar -x -y"’
+      will instruct ‘gnatmake’ to use ‘bar -x -y’ as your binder.  Binder
+      switches that are normally appended by ‘gnatmake’ to ‘gnatbind’ are
+      now appended to the end of ‘bar -x -y’.  A limitation of this
+      syntax is that the name and path name of the executable itself must
+      not include any embedded spaces.
+ 
+ ‘--GNATLINK=`linker_name'’
+ 
+      Program used for linking.  The default is ‘gnatlink’.  You need to
+      use quotes around ‘linker_name’ if ‘linker_name’ contains spaces or
+      other separator characters.  As an example ‘--GNATLINK="lan -x -y"’
+      will instruct ‘gnatmake’ to use ‘lan -x -y’ as your linker.  Linker
+      switches that are normally appended by ‘gnatmake’ to ‘gnatlink’ are
+      now appended to the end of ‘lan -x -y’.  A limitation of this
+      syntax is that the name and path name of the executable itself must
+      not include any embedded spaces.
+ 
+ ‘--create-map-file’
+ 
+      When linking an executable, create a map file.  The name of the map
+      file has the same name as the executable with extension “.map”.
+ 
+ ‘--create-map-file=`mapfile'’
+ 
+      When linking an executable, create a map file with the specified
+      name.
+ 
+ ‘--create-missing-dirs’
+ 
+      When using project files (‘-P`project'’), automatically create
+      missing object directories, library directories and exec
+      directories.
+ 
+ ‘--single-compile-per-obj-dir’
+ 
+      Disallow simultaneous compilations in the same object directory
+      when project files are used.
+ 
+ ‘--subdirs=`subdir'’
+ 
+      Actual object directory of each project file is the subdirectory
+      subdir of the object directory specified or defaulted in the
+      project file.
+ 
+ ‘--unchecked-shared-lib-imports’
+ 
+      By default, shared library projects are not allowed to import
+      static library projects.  When this switch is used on the command
+      line, this restriction is relaxed.
+ 
+ ‘--source-info=`source info file'’
+ 
+      Specify a source info file.  This switch is active only when
+      project files are used.  If the source info file is specified as a
+      relative path, then it is relative to the object directory of the
+      main project.  If the source info file does not exist, then after
+      the Project Manager has successfully parsed and processed the
+      project files and found the sources, it creates the source info
+      file.  If the source info file already exists and can be read
+      successfully, then the Project Manager will get all the needed
+      information about the sources from the source info file and will
+      not look for them.  This reduces the time to process the project
+      files, especially when looking for sources that take a long time.
+      If the source info file exists but cannot be parsed successfully,
+      the Project Manager will attempt to recreate it.  If the Project
+      Manager fails to create the source info file, a message is issued,
+      but gnatmake does not fail.  ‘gnatmake’ “trusts” the source info
+      file.  This means that if the source files have changed (addition,
+      deletion, moving to a different source directory), then the source
+      info file need to be deleted and recreated.
+ 
+ ‘-a’
+ 
+      Consider all files in the make process, even the GNAT internal
+      system files (for example, the predefined Ada library files), as
+      well as any locked files.  Locked files are files whose ALI file is
+      write-protected.  By default, ‘gnatmake’ does not check these
+      files, because the assumption is that the GNAT internal files are
+      properly up to date, and also that any write protected ALI files
+      have been properly installed.  Note that if there is an
+      installation problem, such that one of these files is not up to
+      date, it will be properly caught by the binder.  You may have to
+      specify this switch if you are working on GNAT itself.  The switch
+      ‘-a’ is also useful in conjunction with ‘-f’ if you need to
+      recompile an entire application, including run-time files, using
+      special configuration pragmas, such as a ‘Normalize_Scalars’
+      pragma.
+ 
+      By default ‘gnatmake -a’ compiles all GNAT internal files with ‘gcc
+      -c -gnatpg’ rather than ‘gcc -c’.
+ 
+ ‘-b’
+ 
+      Bind only.  Can be combined with ‘-c’ to do compilation and
+      binding, but no link.  Can be combined with ‘-l’ to do binding and
+      linking.  When not combined with ‘-c’ all the units in the closure
+      of the main program must have been previously compiled and must be
+      up to date.  The root unit specified by ‘file_name’ may be given
+      without extension, with the source extension or, if no GNAT Project
+      File is specified, with the ALI file extension.
+ 
+ ‘-c’
+ 
+      Compile only.  Do not perform binding, except when ‘-b’ is also
+      specified.  Do not perform linking, except if both ‘-b’ and ‘-l’
+      are also specified.  If the root unit specified by ‘file_name’ is
+      not a main unit, this is the default.  Otherwise ‘gnatmake’ will
+      attempt binding and linking unless all objects are up to date and
+      the executable is more recent than the objects.
+ 
+ ‘-C’
+ 
+      Use a temporary mapping file.  A mapping file is a way to
+      communicate to the compiler two mappings: from unit names to file
+      names (without any directory information) and from file names to
+      path names (with full directory information).  A mapping file can
+      make the compiler’s file searches faster, especially if there are
+      many source directories, or the sources are read over a slow
+      network connection.  If ‘-P’ is used, a mapping file is always
+      used, so ‘-C’ is unnecessary; in this case the mapping file is
+      initially populated based on the project file.  If ‘-C’ is used
+      without ‘-P’, the mapping file is initially empty.  Each invocation
+      of the compiler will add any newly accessed sources to the mapping
+      file.
+ 
+ ‘-C=`file'’
+ 
+      Use a specific mapping file.  The file, specified as a path name
+      (absolute or relative) by this switch, should already exist,
+      otherwise the switch is ineffective.  The specified mapping file
+      will be communicated to the compiler.  This switch is not
+      compatible with a project file (-P‘file‘) or with multiple
+      compiling processes (-jnnn, when nnn is greater than 1).
+ 
+ ‘-d’
+ 
+      Display progress for each source, up to date or not, as a single
+      line:
+ 
+           completed x out of y (zz%)
+ 
+      If the file needs to be compiled this is displayed after the
+      invocation of the compiler.  These lines are displayed even in
+      quiet output mode.
+ 
+ ‘-D `dir'’
+ 
+      Put all object files and ALI file in directory ‘dir’.  If the ‘-D’
+      switch is not used, all object files and ALI files go in the
+      current working directory.
+ 
+      This switch cannot be used when using a project file.
+ 
+ ‘-eI`nnn'’
+ 
+      Indicates that the main source is a multi-unit source and the rank
+      of the unit in the source file is nnn.  nnn needs to be a positive
+      number and a valid index in the source.  This switch cannot be used
+      when ‘gnatmake’ is invoked for several mains.
+ 
+ ‘-eL’
+ 
+      Follow all symbolic links when processing project files.  This
+      should be used if your project uses symbolic links for files or
+      directories, but is not needed in other cases.
+ 
+      This also assumes that no directory matches the naming scheme for
+      files (for instance that you do not have a directory called
+      “sources.ads” when using the default GNAT naming scheme).
+ 
+      When you do not have to use this switch (i.e., by default),
+      gnatmake is able to save a lot of system calls (several per source
+      file and object file), which can result in a significant speed up
+      to load and manipulate a project file, especially when using source
+      files from a remote system.
+ 
+ ‘-eS’
+ 
+      Output the commands for the compiler, the binder and the linker on
+      standard output, instead of standard error.
+ 
+ ‘-f’
+ 
+      Force recompilations.  Recompile all sources, even though some
+      object files may be up to date, but don’t recompile predefined or
+      GNAT internal files or locked files (files with a write-protected
+      ALI file), unless the ‘-a’ switch is also specified.
+ 
+ ‘-F’
+ 
+      When using project files, if some errors or warnings are detected
+      during parsing and verbose mode is not in effect (no use of switch
+      -v), then error lines start with the full path name of the project
+      file, rather than its simple file name.
+ 
+ ‘-g’
+ 
+      Enable debugging.  This switch is simply passed to the compiler and
+      to the linker.
+ 
+ ‘-i’
+ 
+      In normal mode, ‘gnatmake’ compiles all object files and ALI files
+      into the current directory.  If the ‘-i’ switch is used, then
+      instead object files and ALI files that already exist are
+      overwritten in place.  This means that once a large project is
+      organized into separate directories in the desired manner, then
+      ‘gnatmake’ will automatically maintain and update this
+      organization.  If no ALI files are found on the Ada object path
+      (see *note Search Paths and the Run-Time Library (RTL): 73.), the
+      new object and ALI files are created in the directory containing
+      the source being compiled.  If another organization is desired,
+      where objects and sources are kept in different directories, a
+      useful technique is to create dummy ALI files in the desired
+      directories.  When detecting such a dummy file, ‘gnatmake’ will be
+      forced to recompile the corresponding source file, and it will be
+      put the resulting object and ALI files in the directory where it
+      found the dummy file.
+ 
+ ‘-j`n'’
+ 
+      Use ‘n’ processes to carry out the (re)compilations.  On a
+      multiprocessor machine compilations will occur in parallel.  If ‘n’
+      is 0, then the maximum number of parallel compilations is the
+      number of core processors on the platform.  In the event of
+      compilation errors, messages from various compilations might get
+      interspersed (but ‘gnatmake’ will give you the full ordered list of
+      failing compiles at the end).  If this is problematic, rerun the
+      make process with n set to 1 to get a clean list of messages.
+ 
+ ‘-k’
+ 
+      Keep going.  Continue as much as possible after a compilation
+      error.  To ease the programmer’s task in case of compilation
+      errors, the list of sources for which the compile fails is given
+      when ‘gnatmake’ terminates.
+ 
+      If ‘gnatmake’ is invoked with several ‘file_names’ and with this
+      switch, if there are compilation errors when building an
+      executable, ‘gnatmake’ will not attempt to build the following
+      executables.
+ 
+ ‘-l’
+ 
+      Link only.  Can be combined with ‘-b’ to binding and linking.
+      Linking will not be performed if combined with ‘-c’ but not with
+      ‘-b’.  When not combined with ‘-b’ all the units in the closure of
+      the main program must have been previously compiled and must be up
+      to date, and the main program needs to have been bound.  The root
+      unit specified by ‘file_name’ may be given without extension, with
+      the source extension or, if no GNAT Project File is specified, with
+      the ALI file extension.
+ 
+ ‘-m’
+ 
+      Specify that the minimum necessary amount of recompilations be
+      performed.  In this mode ‘gnatmake’ ignores time stamp differences
+      when the only modifications to a source file consist in
+      adding/removing comments, empty lines, spaces or tabs.  This means
+      that if you have changed the comments in a source file or have
+      simply reformatted it, using this switch will tell ‘gnatmake’ not
+      to recompile files that depend on it (provided other sources on
+      which these files depend have undergone no semantic modifications).
+      Note that the debugging information may be out of date with respect
+      to the sources if the ‘-m’ switch causes a compilation to be
+      switched, so the use of this switch represents a trade-off between
+      compilation time and accurate debugging information.
+ 
+ ‘-M’
+ 
+      Check if all objects are up to date.  If they are, output the
+      object dependences to ‘stdout’ in a form that can be directly
+      exploited in a ‘Makefile’.  By default, each source file is
+      prefixed with its (relative or absolute) directory name.  This name
+      is whatever you specified in the various ‘-aI’ and ‘-I’ switches.
+      If you use ‘gnatmake -M’ ‘-q’ (see below), only the source file
+      names, without relative paths, are output.  If you just specify the
+      ‘-M’ switch, dependencies of the GNAT internal system files are
+      omitted.  This is typically what you want.  If you also specify the
+      ‘-a’ switch, dependencies of the GNAT internal files are also
+      listed.  Note that dependencies of the objects in external Ada
+      libraries (see switch ‘-aL`dir'’ in the following list) are never
+      reported.
+ 
+ ‘-n’
+ 
+      Don’t compile, bind, or link.  Checks if all objects are up to
+      date.  If they are not, the full name of the first file that needs
+      to be recompiled is printed.  Repeated use of this option, followed
+      by compiling the indicated source file, will eventually result in
+      recompiling all required units.
+ 
+ ‘-o `exec_name'’
+ 
+      Output executable name.  The name of the final executable program
+      will be ‘exec_name’.  If the ‘-o’ switch is omitted the default
+      name for the executable will be the name of the input file in
+      appropriate form for an executable file on the host system.
+ 
+      This switch cannot be used when invoking ‘gnatmake’ with several
+      ‘file_names’.
+ 
+ ‘-p’
+ 
+      Same as ‘--create-missing-dirs’
+ 
+ ‘-q’
+ 
+      Quiet.  When this flag is not set, the commands carried out by
+      ‘gnatmake’ are displayed.
+ 
+ ‘-s’
+ 
+      Recompile if compiler switches have changed since last compilation.
+      All compiler switches but -I and -o are taken into account in the
+      following way: orders between different ‘first letter’ switches are
+      ignored, but orders between same switches are taken into account.
+      For example, ‘-O -O2’ is different than ‘-O2 -O’, but ‘-g -O’ is
+      equivalent to ‘-O -g’.
+ 
+      This switch is recommended when Integrated Preprocessing is used.
+ 
+ ‘-u’
+ 
+      Unique.  Recompile at most the main files.  It implies -c.
+      Combined with -f, it is equivalent to calling the compiler
+      directly.  Note that using -u with a project file and no main has a
+      special meaning.
+ 
+ ‘-U’
+ 
+      When used without a project file or with one or several mains on
+      the command line, is equivalent to -u.  When used with a project
+      file and no main on the command line, all sources of all project
+      files are checked and compiled if not up to date, and libraries are
+      rebuilt, if necessary.
+ 
+ ‘-v’
+ 
+      Verbose.  Display the reason for all recompilations ‘gnatmake’
+      decides are necessary, with the highest verbosity level.
+ 
+ ‘-vl’
+ 
+      Verbosity level Low.  Display fewer lines than in verbosity Medium.
+ 
+ ‘-vm’
+ 
+      Verbosity level Medium.  Potentially display fewer lines than in
+      verbosity High.
+ 
+ ‘-vh’
+ 
+      Verbosity level High.  Equivalent to -v.
+ 
+ ‘-vP`x'’
+ 
+      Indicate the verbosity of the parsing of GNAT project files.  See
+      *note Switches Related to Project Files: cf.
+ 
+ ‘-x’
+ 
+      Indicate that sources that are not part of any Project File may be
+      compiled.  Normally, when using Project Files, only sources that
+      are part of a Project File may be compile.  When this switch is
+      used, a source outside of all Project Files may be compiled.  The
+      ALI file and the object file will be put in the object directory of
+      the main Project.  The compilation switches used will only be those
+      specified on the command line.  Even when ‘-x’ is used, mains
+      specified on the command line need to be sources of a project file.
+ 
+ ‘-X`name'=`value'’
+ 
+      Indicate that external variable ‘name’ has the value ‘value’.  The
+      Project Manager will use this value for occurrences of
+      ‘external(name)’ when parsing the project file.  *note Switches
+      Related to Project Files: cf.
+ 
+ ‘-z’
+ 
+      No main subprogram.  Bind and link the program even if the unit
+      name given on the command line is a package name.  The resulting
+      executable will execute the elaboration routines of the package and
+      its closure, then the finalization routines.
+ 
+ GCC switches
+ ............
+ 
+ Any uppercase or multi-character switch that is not a ‘gnatmake’ switch
+ is passed to ‘gcc’ (e.g., ‘-O’, ‘-gnato,’ etc.)
+ 
+ Source and library search path switches
+ .......................................
+ 
+ ‘-aI`dir'’
+ 
+      When looking for source files also look in directory ‘dir’.  The
+      order in which source files search is undertaken is described in
+      *note Search Paths and the Run-Time Library (RTL): 73.
+ 
+ ‘-aL`dir'’
+ 
+      Consider ‘dir’ as being an externally provided Ada library.
+      Instructs ‘gnatmake’ to skip compilation units whose ‘.ALI’ files
+      have been located in directory ‘dir’.  This allows you to have
+      missing bodies for the units in ‘dir’ and to ignore out of date
+      bodies for the same units.  You still need to specify the location
+      of the specs for these units by using the switches ‘-aI`dir'’ or
+      ‘-I`dir'’.  Note: this switch is provided for compatibility with
+      previous versions of ‘gnatmake’.  The easier method of causing
+      standard libraries to be excluded from consideration is to
+      write-protect the corresponding ALI files.
+ 
+ ‘-aO`dir'’
+ 
+      When searching for library and object files, look in directory
+      ‘dir’.  The order in which library files are searched is described
+      in *note Search Paths for gnatbind: 76.
+ 
+ ‘-A`dir'’
+ 
+      Equivalent to ‘-aL`dir'’ ‘-aI`dir'’.
+ 
+ ‘-I`dir'’
+ 
+      Equivalent to ‘-aO`dir' -aI`dir'’.
+ 
+ ‘-I-’
+ 
+      Do not look for source files in the directory containing the source
+      file named in the command line.  Do not look for ALI or object
+      files in the directory where ‘gnatmake’ was invoked.
+ 
+ ‘-L`dir'’
+ 
+      Add directory ‘dir’ to the list of directories in which the linker
+      will search for libraries.  This is equivalent to ‘-largs’
+      ‘-L`dir'’.  Furthermore, under Windows, the sources pointed to by
+      the libraries path set in the registry are not searched for.
+ 
+ ‘-nostdinc’
+ 
+      Do not look for source files in the system default directory.
+ 
+ ‘-nostdlib’
+ 
+      Do not look for library files in the system default directory.
+ 
+ ‘--RTS=`rts-path'’
+ 
+      Specifies the default location of the run-time library.  GNAT looks
+      for the run-time in the following directories, and stops as soon as
+      a valid run-time is found (‘adainclude’ or ‘ada_source_path’, and
+      ‘adalib’ or ‘ada_object_path’ present):
+ 
+         * ‘<current directory>/$rts_path’
+ 
+         * ‘<default-search-dir>/$rts_path’
+ 
+         * ‘<default-search-dir>/rts-$rts_path’
+ 
+         * The selected path is handled like a normal RTS path.
+ 
+ 
+ File: gnat_ugn.info,  Node: Mode Switches for gnatmake,  Next: Notes on the Command Line,  Prev: Switches for gnatmake,  Up: Building with gnatmake
+ 
+ 4.1.3 Mode Switches for ‘gnatmake’
+ ----------------------------------
+ 
+ The mode switches (referred to as ‘mode_switches’) allow the inclusion
+ of switches that are to be passed to the compiler itself, the binder or
+ the linker.  The effect of a mode switch is to cause all subsequent
+ switches up to the end of the switch list, or up to the next mode
+ switch, to be interpreted as switches to be passed on to the designated
+ component of GNAT.
+ 
+ ‘-cargs `switches'’
+ 
+      Compiler switches.  Here ‘switches’ is a list of switches that are
+      valid switches for ‘gcc’.  They will be passed on to all compile
+      steps performed by ‘gnatmake’.
+ 
+ ‘-bargs `switches'’
+ 
+      Binder switches.  Here ‘switches’ is a list of switches that are
+      valid switches for ‘gnatbind’.  They will be passed on to all bind
+      steps performed by ‘gnatmake’.
+ 
+ ‘-largs `switches'’
+ 
+      Linker switches.  Here ‘switches’ is a list of switches that are
+      valid switches for ‘gnatlink’.  They will be passed on to all link
+      steps performed by ‘gnatmake’.
+ 
+ ‘-margs `switches'’
+ 
+      Make switches.  The switches are directly interpreted by
+      ‘gnatmake’, regardless of any previous occurrence of ‘-cargs’,
+      ‘-bargs’ or ‘-largs’.
+ 
+ 
+ File: gnat_ugn.info,  Node: Notes on the Command Line,  Next: How gnatmake Works,  Prev: Mode Switches for gnatmake,  Up: Building with gnatmake
+ 
+ 4.1.4 Notes on the Command Line
+ -------------------------------
+ 
+ This section contains some additional useful notes on the operation of
+ the ‘gnatmake’ command.
+ 
+    * If ‘gnatmake’ finds no ALI files, it recompiles the main program
+      and all other units required by the main program.  This means that
+      ‘gnatmake’ can be used for the initial compile, as well as during
+      subsequent steps of the development cycle.
+ 
+    * If you enter ‘gnatmake foo.adb’, where ‘foo’ is a subunit or body
+      of a generic unit, ‘gnatmake’ recompiles ‘foo.adb’ (because it
+      finds no ALI) and stops, issuing a warning.
+ 
+    * In ‘gnatmake’ the switch ‘-I’ is used to specify both source and
+      library file paths.  Use ‘-aI’ instead if you just want to specify
+      source paths only and ‘-aO’ if you want to specify library paths
+      only.
+ 
+    * ‘gnatmake’ will ignore any files whose ALI file is write-protected.
+      This may conveniently be used to exclude standard libraries from
+      consideration and in particular it means that the use of the ‘-f’
+      switch will not recompile these files unless ‘-a’ is also
+      specified.
+ 
+    * ‘gnatmake’ has been designed to make the use of Ada libraries
+      particularly convenient.  Assume you have an Ada library organized
+      as follows: ‘obj-dir’ contains the objects and ALI files for of
+      your Ada compilation units, whereas ‘include-dir’ contains the
+      specs of these units, but no bodies.  Then to compile a unit stored
+      in ‘main.adb’, which uses this Ada library you would just type:
+ 
+           $ gnatmake -aI`include-dir`  -aL`obj-dir`  main
+ 
+    * Using ‘gnatmake’ along with the ‘-m (minimal recompilation)’ switch
+      provides a mechanism for avoiding unnecessary recompilations.
+      Using this switch, you can update the comments/format of your
+      source files without having to recompile everything.  Note,
+      however, that adding or deleting lines in a source files may render
+      its debugging info obsolete.  If the file in question is a spec,
+      the impact is rather limited, as that debugging info will only be
+      useful during the elaboration phase of your program.  For bodies
+      the impact can be more significant.  In all events, your debugger
+      will warn you if a source file is more recent than the
+      corresponding object, and alert you to the fact that the debugging
+      information may be out of date.
+ 
+ 
+ File: gnat_ugn.info,  Node: How gnatmake Works,  Next: Examples of gnatmake Usage,  Prev: Notes on the Command Line,  Up: Building with gnatmake
+ 
+ 4.1.5 How ‘gnatmake’ Works
+ --------------------------
+ 
+ Generally ‘gnatmake’ automatically performs all necessary recompilations
+ and you don’t need to worry about how it works.  However, it may be
+ useful to have some basic understanding of the ‘gnatmake’ approach and
+ in particular to understand how it uses the results of previous
+ compilations without incorrectly depending on them.
+ 
+ First a definition: an object file is considered ‘up to date’ if the
+ corresponding ALI file exists and if all the source files listed in the
+ dependency section of this ALI file have time stamps matching those in
+ the ALI file.  This means that neither the source file itself nor any
+ files that it depends on have been modified, and hence there is no need
+ to recompile this file.
+ 
+ ‘gnatmake’ works by first checking if the specified main unit is up to
+ date.  If so, no compilations are required for the main unit.  If not,
+ ‘gnatmake’ compiles the main program to build a new ALI file that
+ reflects the latest sources.  Then the ALI file of the main unit is
+ examined to find all the source files on which the main program depends,
+ and ‘gnatmake’ recursively applies the above procedure on all these
+ files.
+ 
+ This process ensures that ‘gnatmake’ only trusts the dependencies in an
+ existing ALI file if they are known to be correct.  Otherwise it always
+ recompiles to determine a new, guaranteed accurate set of dependencies.
+ As a result the program is compiled ‘upside down’ from what may be more
+ familiar as the required order of compilation in some other Ada systems.
+ In particular, clients are compiled before the units on which they
+ depend.  The ability of GNAT to compile in any order is critical in
+ allowing an order of compilation to be chosen that guarantees that
+ ‘gnatmake’ will recompute a correct set of new dependencies if
+ necessary.
+ 
+ When invoking ‘gnatmake’ with several ‘file_names’, if a unit is
+ imported by several of the executables, it will be recompiled at most
+ once.
+ 
+ Note: when using non-standard naming conventions (*note Using Other File
+ Names: 1c.), changing through a configuration pragmas file the version
+ of a source and invoking ‘gnatmake’ to recompile may have no effect, if
+ the previous version of the source is still accessible by ‘gnatmake’.
+ It may be necessary to use the switch -f.
+ 
+ 
+ File: gnat_ugn.info,  Node: Examples of gnatmake Usage,  Prev: How gnatmake Works,  Up: Building with gnatmake
+ 
+ 4.1.6 Examples of ‘gnatmake’ Usage
+ ----------------------------------
+ 
+ ‘gnatmake hello.adb’
+ 
+      Compile all files necessary to bind and link the main program
+      ‘hello.adb’ (containing unit ‘Hello’) and bind and link the
+      resulting object files to generate an executable file ‘hello’.
+ 
+ ‘gnatmake main1 main2 main3’
+ 
+      Compile all files necessary to bind and link the main programs
+      ‘main1.adb’ (containing unit ‘Main1’), ‘main2.adb’ (containing unit
+      ‘Main2’) and ‘main3.adb’ (containing unit ‘Main3’) and bind and
+      link the resulting object files to generate three executable files
+      ‘main1’, ‘main2’ and ‘main3’.
+ 
+ ‘gnatmake -q Main_Unit -cargs -O2 -bargs -l’
+ 
+      Compile all files necessary to bind and link the main program unit
+      ‘Main_Unit’ (from file ‘main_unit.adb’).  All compilations will be
+      done with optimization level 2 and the order of elaboration will be
+      listed by the binder.  ‘gnatmake’ will operate in quiet mode, not
+      displaying commands it is executing.
+ 
+ 
+ File: gnat_ugn.info,  Node: Compiling with gcc,  Next: Compiler Switches,  Prev: Building with gnatmake,  Up: Building Executable Programs with GNAT
+ 
+ 4.2 Compiling with ‘gcc’
+ ========================
+ 
+ This section discusses how to compile Ada programs using the ‘gcc’
+ command.  It also describes the set of switches that can be used to
+ control the behavior of the compiler.
+ 
+ * Menu:
+ 
+ * Compiling Programs::
+ * Search Paths and the Run-Time Library (RTL): Search Paths and the Run-Time Library RTL.
+ * Order of Compilation Issues::
+ * Examples::
+ 
+ 
+ File: gnat_ugn.info,  Node: Compiling Programs,  Next: Search Paths and the Run-Time Library RTL,  Up: Compiling with gcc
+ 
+ 4.2.1 Compiling Programs
+ ------------------------
+ 
+ The first step in creating an executable program is to compile the units
+ of the program using the ‘gcc’ command.  You must compile the following
+ files:
+ 
+    * the body file (‘.adb’) for a library level subprogram or generic
+      subprogram
+ 
+    * the spec file (‘.ads’) for a library level package or generic
+      package that has no body
+ 
+    * the body file (‘.adb’) for a library level package or generic
+      package that has a body
+ 
+ You need ‘not’ compile the following files
+ 
+    * the spec of a library unit which has a body
+ 
+    * subunits
+ 
+ because they are compiled as part of compiling related units.  GNAT
+ package specs when the corresponding body is compiled, and subunits when
+ the parent is compiled.
+ 
+ If you attempt to compile any of these files, you will get one of the
+ following error messages (where ‘fff’ is the name of the file you
+ compiled):
+ 
+           cannot generate code for file ``fff`` (package spec)
+           to check package spec, use -gnatc
+ 
+           cannot generate code for file ``fff`` (missing subunits)
+           to check parent unit, use -gnatc
+ 
+           cannot generate code for file ``fff`` (subprogram spec)
+           to check subprogram spec, use -gnatc
+ 
+           cannot generate code for file ``fff`` (subunit)
+           to check subunit, use -gnatc
+ 
+ As indicated by the above error messages, if you want to submit one of
+ these files to the compiler to check for correct semantics without
+ generating code, then use the ‘-gnatc’ switch.
+ 
+ The basic command for compiling a file containing an Ada unit is:
+ 
+      $ gcc -c [switches] <file name>
+ 
+ where ‘file name’ is the name of the Ada file (usually having an
+ extension ‘.ads’ for a spec or ‘.adb’ for a body).  You specify the ‘-c’
+ switch to tell ‘gcc’ to compile, but not link, the file.  The result of
+ a successful compilation is an object file, which has the same name as
+ the source file but an extension of ‘.o’ and an Ada Library Information
+ (ALI) file, which also has the same name as the source file, but with
+ ‘.ali’ as the extension.  GNAT creates these two output files in the
+ current directory, but you may specify a source file in any directory
+ using an absolute or relative path specification containing the
+ directory information.
+ 
+ TESTING: the ‘--foobar`NN'’ switch
+ 
+ ‘gcc’ is actually a driver program that looks at the extensions of the
+ file arguments and loads the appropriate compiler.  For example, the GNU
+ C compiler is ‘cc1’, and the Ada compiler is ‘gnat1’.  These programs
+ are in directories known to the driver program (in some configurations
+ via environment variables you set), but need not be in your path.  The
+ ‘gcc’ driver also calls the assembler and any other utilities needed to
+ complete the generation of the required object files.
+ 
+ It is possible to supply several file names on the same ‘gcc’ command.
+ This causes ‘gcc’ to call the appropriate compiler for each file.  For
+ example, the following command lists two separate files to be compiled:
+ 
+      $ gcc -c x.adb y.adb
+ 
+ calls ‘gnat1’ (the Ada compiler) twice to compile ‘x.adb’ and ‘y.adb’.
+ The compiler generates two object files ‘x.o’ and ‘y.o’ and the two ALI
+ files ‘x.ali’ and ‘y.ali’.
+ 
+ Any switches apply to all the files listed, see *note Compiler Switches:
+ db. for a list of available ‘gcc’ switches.
+ 
+ 
+ File: gnat_ugn.info,  Node: Search Paths and the Run-Time Library RTL,  Next: Order of Compilation Issues,  Prev: Compiling Programs,  Up: Compiling with gcc
+ 
+ 4.2.2 Search Paths and the Run-Time Library (RTL)
+ -------------------------------------------------
+ 
+ With the GNAT source-based library system, the compiler must be able to
+ find source files for units that are needed by the unit being compiled.
+ Search paths are used to guide this process.
+ 
+ The compiler compiles one source file whose name must be given
+ explicitly on the command line.  In other words, no searching is done
+ for this file.  To find all other source files that are needed (the most
+ common being the specs of units), the compiler examines the following
+ directories, in the following order:
+ 
+    * The directory containing the source file of the main unit being
+      compiled (the file name on the command line).
+ 
+    * Each directory named by an ‘-I’ switch given on the ‘gcc’ command
+      line, in the order given.
+ 
+    * Each of the directories listed in the text file whose name is given
+      by the ‘ADA_PRJ_INCLUDE_FILE’ environment variable.
+      ‘ADA_PRJ_INCLUDE_FILE’ is normally set by gnatmake or by the gnat
+      driver when project files are used.  It should not normally be set
+      by other means.
+ 
+    * Each of the directories listed in the value of the
+      ‘ADA_INCLUDE_PATH’ environment variable.  Construct this value
+      exactly as the ‘PATH’ environment variable: a list of directory
+      names separated by colons (semicolons when working with the NT
+      version).
+ 
+    * The content of the ‘ada_source_path’ file which is part of the GNAT
+      installation tree and is used to store standard libraries such as
+      the GNAT Run Time Library (RTL) source files.  *note Installing a
+      library: 72.
+ 
+ Specifying the switch ‘-I-’ inhibits the use of the directory containing
+ the source file named in the command line.  You can still have this
+ directory on your search path, but in this case it must be explicitly
+ requested with a ‘-I’ switch.
+ 
+ Specifying the switch ‘-nostdinc’ inhibits the search of the default
+ location for the GNAT Run Time Library (RTL) source files.
+ 
+ The compiler outputs its object files and ALI files in the current
+ working directory.  Caution: The object file can be redirected with the
+ ‘-o’ switch; however, ‘gcc’ and ‘gnat1’ have not been coordinated on
+ this so the ‘ALI’ file will not go to the right place.  Therefore, you
+ should avoid using the ‘-o’ switch.
+ 
+ The packages ‘Ada’, ‘System’, and ‘Interfaces’ and their children make
+ up the GNAT RTL, together with the simple ‘System.IO’ package used in
+ the ‘"Hello World"’ example.  The sources for these units are needed by
+ the compiler and are kept together in one directory.  Not all of the
+ bodies are needed, but all of the sources are kept together anyway.  In
+ a normal installation, you need not specify these directory names when
+ compiling or binding.  Either the environment variables or the built-in
+ defaults cause these files to be found.
+ 
+ In addition to the language-defined hierarchies (‘System’, ‘Ada’ and
+ ‘Interfaces’), the GNAT distribution provides a fourth hierarchy,
+ consisting of child units of ‘GNAT’.  This is a collection of generally
+ useful types, subprograms, etc.  See the ‘GNAT_Reference_Manual’ for
+ further details.
+ 
+ Besides simplifying access to the RTL, a major use of search paths is in
+ compiling sources from multiple directories.  This can make development
+ environments much more flexible.
+ 
+ 
+ File: gnat_ugn.info,  Node: Order of Compilation Issues,  Next: Examples,  Prev: Search Paths and the Run-Time Library RTL,  Up: Compiling with gcc
+ 
+ 4.2.3 Order of Compilation Issues
+ ---------------------------------
+ 
+ If, in our earlier example, there was a spec for the ‘hello’ procedure,
+ it would be contained in the file ‘hello.ads’; yet this file would not
+ have to be explicitly compiled.  This is the result of the model we
+ chose to implement library management.  Some of the consequences of this
+ model are as follows:
+ 
+    * There is no point in compiling specs (except for package specs with
+      no bodies) because these are compiled as needed by clients.  If you
+      attempt a useless compilation, you will receive an error message.
+      It is also useless to compile subunits because they are compiled as
+      needed by the parent.
+ 
+    * There are no order of compilation requirements: performing a
+      compilation never obsoletes anything.  The only way you can
+      obsolete something and require recompilations is to modify one of
+      the source files on which it depends.
+ 
+    * There is no library as such, apart from the ALI files (*note The
+      Ada Library Information Files: 28, for information on the format of
+      these files).  For now we find it convenient to create separate ALI
+      files, but eventually the information therein may be incorporated
+      into the object file directly.
+ 
+    * When you compile a unit, the source files for the specs of all
+      units that it ‘with’s, all its subunits, and the bodies of any
+      generics it instantiates must be available (reachable by the
+      search-paths mechanism described above), or you will receive a
+      fatal error message.
+ 
+ 
+ File: gnat_ugn.info,  Node: Examples,  Prev: Order of Compilation Issues,  Up: Compiling with gcc
+ 
+ 4.2.4 Examples
+ --------------
+ 
+ The following are some typical Ada compilation command line examples:
+ 
+      $ gcc -c xyz.adb
+ 
+ Compile body in file ‘xyz.adb’ with all default options.
+ 
+      $ gcc -c -O2 -gnata xyz-def.adb
+ 
+ Compile the child unit package in file ‘xyz-def.adb’ with extensive
+ optimizations, and pragma ‘Assert’/‘Debug’ statements enabled.
+ 
+      $ gcc -c -gnatc abc-def.adb
+ 
+ Compile the subunit in file ‘abc-def.adb’ in semantic-checking-only
+ mode.
+ 
+ 
+ File: gnat_ugn.info,  Node: Compiler Switches,  Next: Linker Switches,  Prev: Compiling with gcc,  Up: Building Executable Programs with GNAT
+ 
+ 4.3 Compiler Switches
+ =====================
+ 
+ The ‘gcc’ command accepts switches that control the compilation process.
+ These switches are fully described in this section: first an
+ alphabetical listing of all switches with a brief description, and then
+ functionally grouped sets of switches with more detailed information.
+ 
+ More switches exist for GCC than those documented here, especially for
+ specific targets.  However, their use is not recommended as they may
+ change code generation in ways that are incompatible with the Ada
+ run-time library, or can cause inconsistencies between compilation
+ units.
+ 
+ * Menu:
+ 
+ * Alphabetical List of All Switches::
+ * Output and Error Message Control::
+ * Warning Message Control::
+ * Debugging and Assertion Control::
+ * Validity Checking::
+ * Style Checking::
+ * Run-Time Checks::
+ * Using gcc for Syntax Checking::
+ * Using gcc for Semantic Checking::
+ * Compiling Different Versions of Ada::
+ * Character Set Control::
+ * File Naming Control::
+ * Subprogram Inlining Control::
+ * Auxiliary Output Control::
+ * Debugging Control::
+ * Exception Handling Control::
+ * Units to Sources Mapping Files::
+ * Code Generation Control::
+ 
+ 
+ File: gnat_ugn.info,  Node: Alphabetical List of All Switches,  Next: Output and Error Message Control,  Up: Compiler Switches
+ 
+ 4.3.1 Alphabetical List of All Switches
+ ---------------------------------------
+ 
+ ‘-b `target'’
+ 
+      Compile your program to run on ‘target’, which is the name of a
+      system configuration.  You must have a GNAT cross-compiler built if
+      ‘target’ is not the same as your host system.
+ 
+ ‘-B`dir'’
+ 
+      Load compiler executables (for example, ‘gnat1’, the Ada compiler)
+      from ‘dir’ instead of the default location.  Only use this switch
+      when multiple versions of the GNAT compiler are available.  See the
+      “Options for Directory Search” section in the ‘Using the GNU
+      Compiler Collection (GCC)’ manual for further details.  You would
+      normally use the ‘-b’ or ‘-V’ switch instead.
+ 
+ ‘-c’
+ 
+      Compile.  Always use this switch when compiling Ada programs.
+ 
+      Note: for some other languages when using ‘gcc’, notably in the
+      case of C and C++, it is possible to use use ‘gcc’ without a ‘-c’
+      switch to compile and link in one step.  In the case of GNAT, you
+      cannot use this approach, because the binder must be run and ‘gcc’
+      cannot be used to run the GNAT binder.
+ 
+ ‘-fcallgraph-info[=su,da]’
+ 
+      Makes the compiler output callgraph information for the program, on
+      a per-file basis.  The information is generated in the VCG format.
+      It can be decorated with additional, per-node and/or per-edge
+      information, if a list of comma-separated markers is additionally
+      specified.  When the ‘su’ marker is specified, the callgraph is
+      decorated with stack usage information; it is equivalent to
+      ‘-fstack-usage’.  When the ‘da’ marker is specified, the callgraph
+      is decorated with information about dynamically allocated objects.
+ 
+ ‘-fdiagnostics-format=json’
+ 
+      Makes GNAT emit warning and error messages as JSON. Inhibits
+      printing of text warning and errors messages except if ‘-gnatv’ or
+      ‘-gnatl’ are present.  Uses absolute file paths when used along
+      ‘-gnatef’.
+ 
+ ‘-fdump-scos’
+ 
+      Generates SCO (Source Coverage Obligation) information in the ALI
+      file.  This information is used by advanced coverage tools.  See
+      unit ‘SCOs’ in the compiler sources for details in files ‘scos.ads’
+      and ‘scos.adb’.
+ 
+ ‘-fgnat-encodings=[all|gdb|minimal]’
+ 
+      This switch controls the balance between GNAT encodings and
+      standard DWARF emitted in the debug information.
+ 
+ ‘-flto[=`n']’
+ 
+      Enables Link Time Optimization.  This switch must be used in
+      conjunction with the ‘-Ox’ switches (but not with the ‘-gnatn’
+      switch since it is a full replacement for the latter) and instructs
+      the compiler to defer most optimizations until the link stage.  The
+      advantage of this approach is that the compiler can do a
+      whole-program analysis and choose the best interprocedural
+      optimization strategy based on a complete view of the program,
+      instead of a fragmentary view with the usual approach.  This can
+      also speed up the compilation of big programs and reduce the size
+      of the executable, compared with a traditional per-unit compilation
+      with inlining across units enabled by the ‘-gnatn’ switch.  The
+      drawback of this approach is that it may require more memory and
+      that the debugging information generated by -g with it might be
+      hardly usable.  The switch, as well as the accompanying ‘-Ox’
+      switches, must be specified both for the compilation and the link
+      phases.  If the ‘n’ parameter is specified, the optimization and
+      final code generation at link time are executed using ‘n’ parallel
+      jobs by means of an installed ‘make’ program.
+ 
+ ‘-fno-inline’
+ 
+      Suppresses all inlining, unless requested with pragma
+      ‘Inline_Always’.  The effect is enforced regardless of other
+      optimization or inlining switches.  Note that inlining can also be
+      suppressed on a finer-grained basis with pragma ‘No_Inline’.
+ 
+ ‘-fno-inline-functions’
+ 
+      Suppresses automatic inlining of subprograms, which is enabled if
+      ‘-O3’ is used.
+ 
+ ‘-fno-inline-small-functions’
+ 
+      Suppresses automatic inlining of small subprograms, which is
+      enabled if ‘-O2’ is used.
+ 
+ ‘-fno-inline-functions-called-once’
+ 
+      Suppresses inlining of subprograms local to the unit and called
+      once from within it, which is enabled if ‘-O1’ is used.
+ 
+ ‘-fno-ivopts’
+ 
+      Suppresses high-level loop induction variable optimizations, which
+      are enabled if ‘-O1’ is used.  These optimizations are generally
+      profitable but, for some specific cases of loops with numerous uses
+      of the iteration variable that follow a common pattern, they may
+      end up destroying the regularity that could be exploited at a lower
+      level and thus producing inferior code.
+ 
+ ‘-fno-strict-aliasing’
+ 
+      Causes the compiler to avoid assumptions regarding non-aliasing of
+      objects of different types.  See *note Optimization and Strict
+      Aliasing: e4. for details.
+ 
+ ‘-fno-strict-overflow’
+ 
+      Causes the compiler to avoid assumptions regarding the rules of
+      signed integer overflow.  These rules specify that signed integer
+      overflow will result in a Constraint_Error exception at run time
+      and are enforced in default mode by the compiler, so this switch
+      should not be necessary in normal operating mode.  It might be
+      useful in conjunction with ‘-gnato0’ for very peculiar cases of
+      low-level programming.
+ 
+ ‘-fstack-check’
+ 
+      Activates stack checking.  See *note Stack Overflow Checking: e5.
+      for details.
+ 
+ ‘-fstack-usage’
+ 
+      Makes the compiler output stack usage information for the program,
+      on a per-subprogram basis.  See *note Static Stack Usage Analysis:
+      e6. for details.
+ 
+ ‘-g’
+ 
+      Generate debugging information.  This information is stored in the
+      object file and copied from there to the final executable file by
+      the linker, where it can be read by the debugger.  You must use the
+      ‘-g’ switch if you plan on using the debugger.
+ 
+ ‘-gnat05’
+ 
+      Allow full Ada 2005 features.
+ 
+ ‘-gnat12’
+ 
+      Allow full Ada 2012 features.
+ 
+ ‘-gnat2005’
+ 
+      Allow full Ada 2005 features (same as ‘-gnat05’)
+ 
+ ‘-gnat2012’
+ 
+      Allow full Ada 2012 features (same as ‘-gnat12’)
+ 
+ ‘-gnat2022’
+ 
+      Allow full Ada 2022 features
+ 
+ ‘-gnat83’
+ 
+      Enforce Ada 83 restrictions.
+ 
+ ‘-gnat95’
+ 
+      Enforce Ada 95 restrictions.
+ 
+      Note: for compatibility with some Ada 95 compilers which support
+      only the ‘overriding’ keyword of Ada 2005, the ‘-gnatd.D’ switch
+      can be used along with ‘-gnat95’ to achieve a similar effect with
+      GNAT.
+ 
+      ‘-gnatd.D’ instructs GNAT to consider ‘overriding’ as a keyword and
+      handle its associated semantic checks, even in Ada 95 mode.
+ 
+ ‘-gnata’
+ 
+      Assertions enabled.  ‘Pragma Assert’ and ‘pragma Debug’ to be
+      activated.  Note that these pragmas can also be controlled using
+      the configuration pragmas ‘Assertion_Policy’ and ‘Debug_Policy’.
+      It also activates pragmas ‘Check’, ‘Precondition’, and
+      ‘Postcondition’.  Note that these pragmas can also be controlled
+      using the configuration pragma ‘Check_Policy’.  In Ada 2012, it
+      also activates all assertions defined in the RM as aspects:
+      preconditions, postconditions, type invariants and (sub)type
+      predicates.  In all Ada modes, corresponding pragmas for type
+      invariants and (sub)type predicates are also activated.  The
+      default is that all these assertions are disabled, and have no
+      effect, other than being checked for syntactic validity, and in the
+      case of subtype predicates, constructions such as membership tests
+      still test predicates even if assertions are turned off.
+ 
+ ‘-gnatA’
+ 
+      Avoid processing ‘gnat.adc’.  If a ‘gnat.adc’ file is present, it
+      will be ignored.
+ 
+ ‘-gnatb’
+ 
+      Generate brief messages to ‘stderr’ even if verbose mode set.
+ 
+ ‘-gnatB’
+ 
+      Assume no invalid (bad) values except for ‘Valid attribute use
+      (*note Validity Checking: e7.).
+ 
+ ‘-gnatc’
+ 
+      Check syntax and semantics only (no code generation attempted).
+      When the compiler is invoked by ‘gnatmake’, if the switch ‘-gnatc’
+      is only given to the compiler (after ‘-cargs’ or in package
+      Compiler of the project file), ‘gnatmake’ will fail because it will
+      not find the object file after compilation.  If ‘gnatmake’ is
+      called with ‘-gnatc’ as a builder switch (before ‘-cargs’ or in
+      package Builder of the project file) then ‘gnatmake’ will not fail
+      because it will not look for the object files after compilation,
+      and it will not try to build and link.
+ 
+ ‘-gnatC’
+ 
+      Generate CodePeer intermediate format (no code generation
+      attempted).  This switch will generate an intermediate
+      representation suitable for use by CodePeer (‘.scil’ files).  This
+      switch is not compatible with code generation (it will, among other
+      things, disable some switches such as -gnatn, and enable others
+      such as -gnata).
+ 
+ ‘-gnatd’
+ 
+      Specify debug options for the compiler.  The string of characters
+      after the ‘-gnatd’ specifies the specific debug options.  The
+      possible characters are 0-9, a-z, A-Z, optionally preceded by a dot
+      or underscore.  See compiler source file ‘debug.adb’ for details of
+      the implemented debug options.  Certain debug options are relevant
+      to applications programmers, and these are documented at
+      appropriate points in this users guide.
+ 
+ ‘-gnatD’
+ 
+      Create expanded source files for source level debugging.  This
+      switch also suppresses generation of cross-reference information
+      (see ‘-gnatx’).  Note that this switch is not allowed if a previous
+      -gnatR switch has been given, since these two switches are not
+      compatible.
+ 
+ ‘-gnateA’
+ 
+      Check that the actual parameters of a subprogram call are not
+      aliases of one another.  To qualify as aliasing, their memory
+      locations must be identical or overlapping, at least one of the
+      corresponding formal parameters must be of mode OUT or IN OUT, and
+      at least one of the corresponding formal parameters must have its
+      parameter passing mechanism not specified.
+ 
+           type Rec_Typ is record
+              Data : Integer := 0;
+           end record;
+ 
+           function Self (Val : Rec_Typ) return Rec_Typ is
+           begin
+              return Val;
+           end Self;
+ 
+           procedure Detect_Aliasing (Val_1 : in out Rec_Typ; Val_2 : Rec_Typ) is
+           begin
+              null;
+           end Detect_Aliasing;
+ 
+           Obj : Rec_Typ;
+ 
+           Detect_Aliasing (Obj, Obj);
+           Detect_Aliasing (Obj, Self (Obj));
+ 
+      In the example above, the first call to ‘Detect_Aliasing’ fails
+      with a ‘Program_Error’ at run time because the actuals for ‘Val_1’
+      and ‘Val_2’ denote the same object.  The second call executes
+      without raising an exception because ‘Self(Obj)’ produces an
+      anonymous object which does not share the memory location of ‘Obj’.
+ 
+ ‘-gnateb’
+ 
+      Store configuration files by their basename in ALI files.  This
+      switch is used for instance by gprbuild for distributed builds in
+      order to prevent issues where machine-specific absolute paths could
+      end up being stored in ALI files.
+ 
+ ‘-gnatec=`path'’
+ 
+      Specify a configuration pragma file (the equal sign is optional)
+      (*note The Configuration Pragmas Files: 63.).
+ 
+ ‘-gnateC’
+ 
+      Generate CodePeer messages in a compiler-like format.  This switch
+      is only effective if ‘-gnatcC’ is also specified and requires an
+      installation of CodePeer.
+ 
+ ‘-gnated’
+ 
+      Disable atomic synchronization
+ 
+ ‘-gnateDsymbol[=`value']’
+ 
+      Defines a symbol, associated with ‘value’, for preprocessing.
+      (*note Integrated Preprocessing: 90.).
+ 
+ ‘-gnateE’
+ 
+      Generate extra information in exception messages.  In particular,
+      display extra column information and the value and range associated
+      with index and range check failures, and extra column information
+      for access checks.  In cases where the compiler is able to
+      determine at compile time that a check will fail, it gives a
+      warning, and the extra information is not produced at run time.
+ 
+ ‘-gnatef’
+ 
+      Display full source path name in brief error messages and absolute
+      paths in ‘-fdiagnostics-format=json’’s output.
+ 
+ ‘-gnateF’
+ 
+      Check for overflow on all floating-point operations, including
+      those for unconstrained predefined types.  See description of
+      pragma ‘Check_Float_Overflow’ in GNAT RM.
+ 
+ ‘-gnateg’ ‘-gnatceg’
+ 
+      The ‘-gnatc’ switch must always be specified before this switch,
+      e.g.  ‘-gnatceg’.  Generate a C header from the Ada input file.
+      See *note Generating C Headers for Ada Specifications: b7. for more
+      information.
+ 
+ ‘-gnateG’
+ 
+      Save result of preprocessing in a text file.
+ 
+ ‘-gnatei`nnn'’
+ 
+      Set maximum number of instantiations during compilation of a single
+      unit to ‘nnn’.  This may be useful in increasing the default
+      maximum of 8000 for the rare case when a single unit legitimately
+      exceeds this limit.
+ 
+ ‘-gnateI`nnn'’
+ 
+      Indicates that the source is a multi-unit source and that the index
+      of the unit to compile is ‘nnn’.  ‘nnn’ needs to be a positive
+      number and need to be a valid index in the multi-unit source.
+ 
+ ‘-gnatel’
+ 
+      This switch can be used with the static elaboration model to issue
+      info messages showing where implicit ‘pragma Elaborate’ and ‘pragma
+      Elaborate_All’ are generated.  This is useful in diagnosing
+      elaboration circularities caused by these implicit pragmas when
+      using the static elaboration model.  See See the section in this
+      guide on elaboration checking for further details.  These messages
+      are not generated by default, and are intended only for temporary
+      use when debugging circularity problems.
+ 
+ ‘-gnateL’
+ 
+      This switch turns off the info messages about implicit elaboration
+      pragmas.
+ 
+ ‘-gnatem=`path'’
+ 
+      Specify a mapping file (the equal sign is optional) (*note Units to
+      Sources Mapping Files: e8.).
+ 
+ ‘-gnatep=`file'’
+ 
+      Specify a preprocessing data file (the equal sign is optional)
+      (*note Integrated Preprocessing: 90.).
+ 
+ ‘-gnateP’
+ 
+      Turn categorization dependency errors into warnings.  Ada requires
+      that units that WITH one another have compatible categories, for
+      example a Pure unit cannot WITH a Preelaborate unit.  If this
+      switch is used, these errors become warnings (which can be ignored,
+      or suppressed in the usual manner).  This can be useful in some
+      specialized circumstances such as the temporary use of special test
+      software.
+ 
+ ‘-gnateS’
+ 
+      Synonym of ‘-fdump-scos’, kept for backwards compatibility.
+ 
+ ‘-gnatet=`path'’
+ 
+      Generate target dependent information.  The format of the output
+      file is described in the section about switch ‘-gnateT’.
+ 
+ ‘-gnateT=`path'’
+ 
+      Read target dependent information, such as endianness or sizes and
+      alignments of base type.  If this switch is passed, the default
+      target dependent information of the compiler is replaced by the one
+      read from the input file.  This is used by tools other than the
+      compiler, e.g.  to do semantic analysis of programs that will run
+      on some other target than the machine on which the tool is run.
+ 
+      The following target dependent values should be defined, where
+      ‘Nat’ denotes a natural integer value, ‘Pos’ denotes a positive
+      integer value, and fields marked with a question mark are boolean
+      fields, where a value of 0 is False, and a value of 1 is True:
+ 
+           Bits_BE                    : Nat; -- Bits stored big-endian?
+           Bits_Per_Unit              : Pos; -- Bits in a storage unit
+           Bits_Per_Word              : Pos; -- Bits in a word
+           Bytes_BE                   : Nat; -- Bytes stored big-endian?
+           Char_Size                  : Pos; -- Standard.Character'Size
+           Double_Float_Alignment     : Nat; -- Alignment of double float
+           Double_Scalar_Alignment    : Nat; -- Alignment of double length scalar
+           Double_Size                : Pos; -- Standard.Long_Float'Size
+           Float_Size                 : Pos; -- Standard.Float'Size
+           Float_Words_BE             : Nat; -- Float words stored big-endian?
+           Int_Size                   : Pos; -- Standard.Integer'Size
+           Long_Double_Size           : Pos; -- Standard.Long_Long_Float'Size
+           Long_Long_Long_Size        : Pos; -- Standard.Long_Long_Long_Integer'Size
+           Long_Long_Size             : Pos; -- Standard.Long_Long_Integer'Size
+           Long_Size                  : Pos; -- Standard.Long_Integer'Size
+           Maximum_Alignment          : Pos; -- Maximum permitted alignment
+           Max_Unaligned_Field        : Pos; -- Maximum size for unaligned bit field
+           Pointer_Size               : Pos; -- System.Address'Size
+           Short_Enums                : Nat; -- Foreign enums use short size?
+           Short_Size                 : Pos; -- Standard.Short_Integer'Size
+           Strict_Alignment           : Nat; -- Strict alignment?
+           System_Allocator_Alignment : Nat; -- Alignment for malloc calls
+           Wchar_T_Size               : Pos; -- Interfaces.C.wchar_t'Size
+           Words_BE                   : Nat; -- Words stored big-endian?
+ 
+      ‘Bits_Per_Unit’ is the number of bits in a storage unit, the
+      equivalent of GCC macro ‘BITS_PER_UNIT’ documented as follows:
+      ‘Define this macro to be the number of bits in an addressable
+      storage unit (byte); normally 8.’
+ 
+      ‘Bits_Per_Word’ is the number of bits in a machine word, the
+      equivalent of GCC macro ‘BITS_PER_WORD’ documented as follows:
+      ‘Number of bits in a word; normally 32.’
+ 
+      ‘Double_Float_Alignment’, if not zero, is the maximum alignment
+      that the compiler can choose by default for a 64-bit floating-point
+      type or object.
+ 
+      ‘Double_Scalar_Alignment’, if not zero, is the maximum alignment
+      that the compiler can choose by default for a 64-bit or larger
+      scalar type or object.
+ 
+      ‘Maximum_Alignment’ is the maximum alignment that the compiler can
+      choose by default for a type or object, which is also the maximum
+      alignment that can be specified in GNAT. It is computed for GCC
+      backends as ‘BIGGEST_ALIGNMENT / BITS_PER_UNIT’ where GCC macro
+      ‘BIGGEST_ALIGNMENT’ is documented as follows: ‘Biggest alignment
+      that any data type can require on this machine, in bits.’
+ 
+      ‘Max_Unaligned_Field’ is the maximum size for unaligned bit field,
+      which is 64 for the majority of GCC targets (but can be different
+      on some targets).
+ 
+      ‘Strict_Alignment’ is the equivalent of GCC macro
+      ‘STRICT_ALIGNMENT’ documented as follows: ‘Define this macro to be
+      the value 1 if instructions will fail to work if given data not on
+      the nominal alignment. If instructions will merely go slower in
+      that case, define this macro as 0.’
+ 
+      ‘System_Allocator_Alignment’ is the guaranteed alignment of data
+      returned by calls to ‘malloc’.
+ 
+      The format of the input file is as follows.  First come the values
+      of the variables defined above, with one line per value:
+ 
+           name  value
+ 
+      where ‘name’ is the name of the parameter, spelled out in full, and
+      cased as in the above list, and ‘value’ is an unsigned decimal
+      integer.  Two or more blanks separates the name from the value.
+ 
+      All the variables must be present, in alphabetical order (i.e.  the
+      same order as the list above).
+ 
+      Then there is a blank line to separate the two parts of the file.
+      Then come the lines showing the floating-point types to be
+      registered, with one line per registered mode:
+ 
+           name  digs float_rep size alignment
+ 
+      where ‘name’ is the string name of the type (which can have single
+      spaces embedded in the name, e.g.  long double), ‘digs’ is the
+      number of digits for the floating-point type, ‘float_rep’ is the
+      float representation (I for IEEE-754-Binary, which is the only one
+      supported at this time), ‘size’ is the size in bits, ‘alignment’ is
+      the alignment in bits.  The name is followed by at least two
+      blanks, fields are separated by at least one blank, and a LF
+      character immediately follows the alignment field.
+ 
+      Here is an example of a target parameterization file:
+ 
+           Bits_BE                       0
+           Bits_Per_Unit                 8
+           Bits_Per_Word                64
+           Bytes_BE                      0
+           Char_Size                     8
+           Double_Float_Alignment        0
+           Double_Scalar_Alignment       0
+           Double_Size                  64
+           Float_Size                   32
+           Float_Words_BE                0
+           Int_Size                     64
+           Long_Double_Size            128
+           Long_Long_Long_Size         128
+           Long_Long_Size               64
+           Long_Size                    64
+           Maximum_Alignment            16
+           Max_Unaligned_Field          64
+           Pointer_Size                 64
+           Short_Size                   16
+           Strict_Alignment              0
+           System_Allocator_Alignment   16
+           Wchar_T_Size                 32
+           Words_BE                      0
+ 
+           float         15  I  64  64
+           double        15  I  64  64
+           long double   18  I  80 128
+           TF            33  I 128 128
+ 
+ ‘-gnateu’
+ 
+      Ignore unrecognized validity, warning, and style switches that
+      appear after this switch is given.  This may be useful when
+      compiling sources developed on a later version of the compiler with
+      an earlier version.  Of course the earlier version must support
+      this switch.
+ 
+ ‘-gnateV’
+ 
+      Check that all actual parameters of a subprogram call are valid
+      according to the rules of validity checking (*note Validity
+      Checking: e7.).
+ 
+ ‘-gnateY’
+ 
+      Ignore all STYLE_CHECKS pragmas.  Full legality checks are still
+      carried out, but the pragmas have no effect on what style checks
+      are active.  This allows all style checking options to be
+      controlled from the command line.
+ 
+ ‘-gnatE’
+ 
+      Dynamic elaboration checking mode enabled.  For further details see
+      *note Elaboration Order Handling in GNAT: f.
+ 
+ ‘-gnatf’
+ 
+      Full errors.  Multiple errors per line, all undefined references,
+      do not attempt to suppress cascaded errors.
+ 
+ ‘-gnatF’
+ 
+      Externals names are folded to all uppercase.
+ 
+ ‘-gnatg’
+ 
+      Internal GNAT implementation mode.  This should not be used for
+      applications programs, it is intended only for use by the compiler
+      and its run-time library.  For documentation, see the GNAT sources.
+      Note that ‘-gnatg’ implies ‘-gnatw.ge’ and ‘-gnatyg’ so that all
+      standard warnings and all standard style options are turned on.
+      All warnings and style messages are treated as errors.
+ 
+ ‘-gnatG=nn’
+ 
+      List generated expanded code in source form.
+ 
+ ‘-gnath’
+ 
+      Output usage information.  The output is written to ‘stdout’.
+ 
+ ‘-gnatH’
+ 
+      Legacy elaboration-checking mode enabled.  When this switch is in
+      effect, the pre-18.x access-before-elaboration model becomes the de
+      facto model.  For further details see *note Elaboration Order
+      Handling in GNAT: f.
+ 
+ ‘-gnati`c'’
+ 
+      Identifier character set (‘c’ = 1/2/3/4/5/9/p/8/f/n/w).  For
+      details of the possible selections for ‘c’, see *note Character Set
+      Control: 31.
+ 
+ ‘-gnatI’
+ 
+      Ignore representation clauses.  When this switch is used,
+      representation clauses are treated as comments.  This is useful
+      when initially porting code where you want to ignore rep clause
+      problems, and also for compiling foreign code (particularly for use
+      with ASIS). The representation clauses that are ignored are:
+      enumeration_representation_clause, record_representation_clause,
+      and attribute_definition_clause for the following attributes:
+      Address, Alignment, Bit_Order, Component_Size, Machine_Radix,
+      Object_Size, Scalar_Storage_Order, Size, Small, Stream_Size, and
+      Value_Size.  Pragma Default_Scalar_Storage_Order is also ignored.
+      Note that this option should be used only for compiling – the code
+      is likely to malfunction at run time.
+ 
+ ‘-gnatj`nn'’
+ 
+      Reformat error messages to fit on ‘nn’ character lines
+ 
+ ‘-gnatJ’
+ 
+      Permissive elaboration-checking mode enabled.  When this switch is
+      in effect, the post-18.x access-before-elaboration model ignores
+      potential issues with:
+ 
+         - Accept statements
+ 
+         - Activations of tasks defined in instances
+ 
+         - Assertion pragmas
+ 
+         - Calls from within an instance to its enclosing context
+ 
+         - Calls through generic formal parameters
+ 
+         - Calls to subprograms defined in instances
+ 
+         - Entry calls
+ 
+         - Indirect calls using ‘Access
+ 
+         - Requeue statements
+ 
+         - Select statements
+ 
+         - Synchronous task suspension
+ 
+      and does not emit compile-time diagnostics or run-time checks.  For
+      further details see *note Elaboration Order Handling in GNAT: f.
+ 
+ ‘-gnatk=`n'’
+ 
+      Limit file names to ‘n’ (1-999) characters (‘k’ = krunch).
+ 
+ ‘-gnatl’
+ 
+      Output full source listing with embedded error messages.
+ 
+ ‘-gnatL’
+ 
+      Used in conjunction with -gnatG or -gnatD to intersperse original
+      source lines (as comment lines with line numbers) in the expanded
+      source output.
+ 
+ ‘-gnatm=`n'’
+ 
+      Limit number of detected error or warning messages to ‘n’ where ‘n’
+      is in the range 1..999999.  The default setting if no switch is
+      given is 9999.  If the number of warnings reaches this limit, then
+      a message is output and further warnings are suppressed, but the
+      compilation is continued.  If the number of error messages reaches
+      this limit, then a message is output and the compilation is
+      abandoned.  The equal sign here is optional.  A value of zero means
+      that no limit applies.
+ 
+ ‘-gnatn[12]’
+ 
+      Activate inlining across units for subprograms for which pragma
+      ‘Inline’ is specified.  This inlining is performed by the GCC
+      back-end.  An optional digit sets the inlining level: 1 for
+      moderate inlining across units or 2 for full inlining across units.
+      If no inlining level is specified, the compiler will pick it based
+      on the optimization level.
+ 
+ ‘-gnatN’
+ 
+      Activate front end inlining for subprograms for which pragma
+      ‘Inline’ is specified.  This inlining is performed by the front end
+      and will be visible in the ‘-gnatG’ output.
+ 
+      When using a gcc-based back end, then the use of ‘-gnatN’ is
+      deprecated, and the use of ‘-gnatn’ is preferred.  Historically
+      front end inlining was more extensive than the gcc back end
+      inlining, but that is no longer the case.
+ 
+ ‘-gnato0’
+ 
+      Suppresses overflow checking.  This causes the behavior of the
+      compiler to match the default for older versions where overflow
+      checking was suppressed by default.  This is equivalent to having
+      ‘pragma Suppress (Overflow_Check)’ in a configuration pragma file.
+ 
+ ‘-gnato??’
+ 
+      Set default mode for handling generation of code to avoid
+      intermediate arithmetic overflow.  Here ‘??’ is two digits, a
+      single digit, or nothing.  Each digit is one of the digits ‘1’
+      through ‘3’:
+ 
+      Digit     Interpretation
+                
+                
+      ‘1’       All intermediate overflows checked against base type (‘STRICT’)
+                
+                
+      ‘2’       Minimize intermediate overflows (‘MINIMIZED’)
+                
+                
+      ‘3’       Eliminate intermediate overflows (‘ELIMINATED’)
+                
+ 
+      If only one digit appears, then it applies to all cases; if two
+      digits are given, then the first applies outside assertions,
+      pre/postconditions, and type invariants, and the second applies
+      within assertions, pre/postconditions, and type invariants.
+ 
+      If no digits follow the ‘-gnato’, then it is equivalent to
+      ‘-gnato11’, causing all intermediate overflows to be handled in
+      strict mode.
+ 
+      This switch also causes arithmetic overflow checking to be
+      performed (as though ‘pragma Unsuppress (Overflow_Check)’ had been
+      specified).
+ 
+      The default if no option ‘-gnato’ is given is that overflow
+      handling is in ‘STRICT’ mode (computations done using the base
+      type), and that overflow checking is enabled.
+ 
+      Note that division by zero is a separate check that is not
+      controlled by this switch (divide-by-zero checking is on by
+      default).
+ 
+      See also *note Specifying the Desired Mode: e9.
+ 
+ ‘-gnatp’
+ 
+      Suppress all checks.  See *note Run-Time Checks: ea. for details.
+      This switch has no effect if cancelled by a subsequent ‘-gnat-p’
+      switch.
+ 
+ ‘-gnat-p’
+ 
+      Cancel effect of previous ‘-gnatp’ switch.
+ 
+ ‘-gnatq’
+ 
+      Don’t quit.  Try semantics, even if parse errors.
+ 
+ ‘-gnatQ’
+ 
+      Don’t quit.  Generate ‘ALI’ and tree files even if illegalities.
+      Note that code generation is still suppressed in the presence of
+      any errors, so even with ‘-gnatQ’ no object file is generated.
+ 
+ ‘-gnatr’
+ 
+      Treat pragma Restrictions as Restriction_Warnings.
+ 
+ ‘-gnatR[0|1|2|3|4][e][j][m][s]’
+ 
+      Output representation information for declared types, objects and
+      subprograms.  Note that this switch is not allowed if a previous
+      ‘-gnatD’ switch has been given, since these two switches are not
+      compatible.
+ 
+ ‘-gnats’
+ 
+      Syntax check only.
+ 
+ ‘-gnatS’
+ 
+      Print package Standard.
+ 
+ ‘-gnatT`nnn'’
+ 
+      All compiler tables start at ‘nnn’ times usual starting size.
+ 
+ ‘-gnatu’
+ 
+      List units for this compilation.
+ 
+ ‘-gnatU’
+ 
+      Tag all error messages with the unique string ‘error:’
+ 
+ ‘-gnatv’
+ 
+      Verbose mode.  Full error output with source lines to ‘stdout’.
+ 
+ ‘-gnatV’
+ 
+      Control level of validity checking (*note Validity Checking: e7.).
+ 
+ ‘-gnatw`xxx'’
+ 
+      Warning mode where ‘xxx’ is a string of option letters that denotes
+      the exact warnings that are enabled or disabled (*note Warning
+      Message Control: eb.).
+ 
+ ‘-gnatW`e'’
+ 
+      Wide character encoding method (‘e’=n/h/u/s/e/8).
+ 
+ ‘-gnatx’
+ 
+      Suppress generation of cross-reference information.
+ 
+ ‘-gnatX’
+ 
+      Enable core GNAT implementation extensions and latest Ada version.
+ 
+ ‘-gnatX0’
+ 
+      Enable all GNAT implementation extensions and latest Ada version.
+ 
+ ‘-gnaty’
+ 
+      Enable built-in style checks (*note Style Checking: ec.).
+ 
+ ‘-gnatz`m'’
+ 
+      Distribution stub generation and compilation (‘m’=r/c for
+      receiver/caller stubs).
+ 
+ ‘-I`dir'’
+ 
+      Direct GNAT to search the ‘dir’ directory for source files needed
+      by the current compilation (see *note Search Paths and the Run-Time
+      Library (RTL): 73.).
+ 
+ ‘-I-’
+ 
+      Except for the source file named in the command line, do not look
+      for source files in the directory containing the source file named
+      in the command line (see *note Search Paths and the Run-Time
+      Library (RTL): 73.).
+ 
+ ‘-o `file'’
+ 
+      This switch is used in ‘gcc’ to redirect the generated object file
+      and its associated ALI file.  Beware of this switch with GNAT,
+      because it may cause the object file and ALI file to have different
+      names which in turn may confuse the binder and the linker.
+ 
+ ‘-nostdinc’
+ 
+      Inhibit the search of the default location for the GNAT Run Time
+      Library (RTL) source files.
+ 
+ ‘-nostdlib’
+ 
+      Inhibit the search of the default location for the GNAT Run Time
+      Library (RTL) ALI files.
+ 
+ ‘-O[`n']’
+ 
+      ‘n’ controls the optimization level:
+ 
+      ‘n’         Effect
+                  
+                  
+      ‘0’         No optimization, the default setting if no ‘-O’ appears
+                  
+                  
+      ‘1’         Normal optimization, the default if you specify ‘-O’ without an operand.
+                  A good compromise between code quality and compilation time.
+                  
+                  
+      ‘2’         Extensive optimization, may improve execution time, possibly at the cost
+                  of substantially increased compilation time.
+                  
+                  
+      ‘3’         Same as ‘-O2’, and also includes inline expansion for small subprograms in
+                  the same unit.
+                  
+                  
+      ‘s’         Optimize space usage
+                  
+ 
+      See also *note Optimization Levels: ed.
+ 
+ ‘-pass-exit-codes’
+ 
+      Catch exit codes from the compiler and use the most meaningful as
+      exit status.
+ 
+ ‘--RTS=`rts-path'’
+ 
+      Specifies the default location of the run-time library.  Same
+      meaning as the equivalent ‘gnatmake’ flag (*note Switches for
+      gnatmake: ce.).
+ 
+ ‘-S’
+ 
+      Used in place of ‘-c’ to cause the assembler source file to be
+      generated, using ‘.s’ as the extension, instead of the object file.
+      This may be useful if you need to examine the generated assembly
+      code.
+ 
+ ‘-fverbose-asm’
+ 
+      Used in conjunction with ‘-S’ to cause the generated assembly code
+      file to be annotated with variable names, making it significantly
+      easier to follow.
+ 
+ ‘-v’
+ 
+      Show commands generated by the ‘gcc’ driver.  Normally used only
+      for debugging purposes or if you need to be sure what version of
+      the compiler you are executing.
+ 
+ ‘-V `ver'’
+ 
+      Execute ‘ver’ version of the compiler.  This is the ‘gcc’ version,
+      not the GNAT version.
+ 
+ ‘-w’
+ 
+      Turn off warnings generated by the back end of the compiler.  Use
+      of this switch also causes the default for front end warnings to be
+      set to suppress (as though ‘-gnatws’ had appeared at the start of
+      the options).
+ 
+ You may combine a sequence of GNAT switches into a single switch.  For
+ example, the combined switch
+ 
+           -gnatofi3
+ 
+ is equivalent to specifying the following sequence of switches:
+ 
+           -gnato -gnatf -gnati3
+ 
+ The following restrictions apply to the combination of switches in this
+ manner:
+ 
+    * The switch ‘-gnatc’ if combined with other switches must come first
+      in the string.
+ 
+    * The switch ‘-gnats’ if combined with other switches must come first
+      in the string.
+ 
+    * The switches ‘-gnatzc’ and ‘-gnatzr’ may not be combined with any
+      other switches, and only one of them may appear in the command
+      line.
+ 
+    * The switch ‘-gnat-p’ may not be combined with any other switch.
+ 
+    * Once a ‘y’ appears in the string (that is a use of the ‘-gnaty’
+      switch), then all further characters in the switch are interpreted
+      as style modifiers (see description of ‘-gnaty’).
+ 
+    * Once a ‘d’ appears in the string (that is a use of the ‘-gnatd’
+      switch), then all further characters in the switch are interpreted
+      as debug flags (see description of ‘-gnatd’).
+ 
+    * Once a ‘w’ appears in the string (that is a use of the ‘-gnatw’
+      switch), then all further characters in the switch are interpreted
+      as warning mode modifiers (see description of ‘-gnatw’).
+ 
+    * Once a ‘V’ appears in the string (that is a use of the ‘-gnatV’
+      switch), then all further characters in the switch are interpreted
+      as validity checking options (*note Validity Checking: e7.).
+ 
+    * Option ‘em’, ‘ec’, ‘ep’, ‘l=’ and ‘R’ must be the last options in a
+      combined list of options.
+ 
+ 
+ File: gnat_ugn.info,  Node: Output and Error Message Control,  Next: Warning Message Control,  Prev: Alphabetical List of All Switches,  Up: Compiler Switches
+ 
+ 4.3.2 Output and Error Message Control
+ --------------------------------------
+ 
+ The standard default format for error messages is called ‘brief format’.
+ Brief format messages are written to ‘stderr’ (the standard error file)
+ and have the following form:
+ 
+      e.adb:3:04: Incorrect spelling of keyword "function"
+      e.adb:4:20: ";" should be "is"
+ 
+ The first integer after the file name is the line number in the file,
+ and the second integer is the column number within the line.  ‘GNAT
+ Studio’ can parse the error messages and point to the referenced
+ character.  The following switches provide control over the error
+ message format:
+ 
+ ‘-gnatv’
+ 
+      The ‘v’ stands for verbose.  The effect of this setting is to write
+      long-format error messages to ‘stdout’ (the standard output file).
+      The same program compiled with the ‘-gnatv’ switch would generate:
+ 
+           3. funcion X (Q : Integer)
+              |
+           >>> Incorrect spelling of keyword "function"
+           4. return Integer;
+                            |
+           >>> ";" should be "is"
+ 
+      The vertical bar indicates the location of the error, and the ‘>>>’
+      prefix can be used to search for error messages.  When this switch
+      is used the only source lines output are those with errors.
+ 
+ ‘-gnatl’
+ 
+      The ‘l’ stands for list.  This switch causes a full listing of the
+      file to be generated.  In the case where a body is compiled, the
+      corresponding spec is also listed, along with any subunits.
+      Typical output from compiling a package body ‘p.adb’ might look
+      like:
+ 
+           Compiling: p.adb
+ 
+                1. package body p is
+                2.    procedure a;
+                3.    procedure a is separate;
+                4. begin
+                5.    null
+                          |
+                   >>> missing ";"
+ 
+                6. end;
+ 
+           Compiling: p.ads
+ 
+                1. package p is
+                2.    pragma Elaborate_Body
+                                           |
+                   >>> missing ";"
+ 
+                3. end p;
+ 
+           Compiling: p-a.adb
+ 
+                1. separate p
+                           |
+                   >>> missing "("
+ 
+                2. procedure a is
+                3. begin
+                4.    null
+                          |
+                   >>> missing ";"
+ 
+                5. end;
+ 
+      When you specify the ‘-gnatv’ or ‘-gnatl’ switches and standard
+      output is redirected, a brief summary is written to ‘stderr’
+      (standard error) giving the number of error messages and warning
+      messages generated.
+ 
+ ‘-gnatl=`fname'’
+ 
+      This has the same effect as ‘-gnatl’ except that the output is
+      written to a file instead of to standard output.  If the given name
+      ‘fname’ does not start with a period, then it is the full name of
+      the file to be written.  If ‘fname’ is an extension, it is appended
+      to the name of the file being compiled.  For example, if file
+      ‘xyz.adb’ is compiled with ‘-gnatl=.lst’, then the output is
+      written to file xyz.adb.lst.
+ 
+ ‘-gnatU’
+ 
+      This switch forces all error messages to be preceded by the unique
+      string ‘error:’.  This means that error messages take a few more
+      characters in space, but allows easy searching for and
+      identification of error messages.
+ 
+ ‘-gnatb’
+ 
+      The ‘b’ stands for brief.  This switch causes GNAT to generate the
+      brief format error messages to ‘stderr’ (the standard error file)
+      as well as the verbose format message or full listing (which as
+      usual is written to ‘stdout’, the standard output file).
+ 
+ ‘-gnatm=`n'’
+ 
+      The ‘m’ stands for maximum.  ‘n’ is a decimal integer in the range
+      of 1 to 999999 and limits the number of error or warning messages
+      to be generated.  For example, using ‘-gnatm2’ might yield
+ 
+           e.adb:3:04: Incorrect spelling of keyword "function"
+           e.adb:5:35: missing ".."
+           fatal error: maximum number of errors detected
+           compilation abandoned
+ 
+      The default setting if no switch is given is 9999.  If the number
+      of warnings reaches this limit, then a message is output and
+      further warnings are suppressed, but the compilation is continued.
+      If the number of error messages reaches this limit, then a message
+      is output and the compilation is abandoned.  A value of zero means
+      that no limit applies.
+ 
+      Note that the equal sign is optional, so the switches ‘-gnatm2’ and
+      ‘-gnatm=2’ are equivalent.
+ 
+ ‘-gnatf’
+ 
+      The ‘f’ stands for full.  Normally, the compiler suppresses error
+      messages that are likely to be redundant.  This switch causes all
+      error messages to be generated.  In particular, in the case of
+      references to undefined variables.  If a given variable is
+      referenced several times, the normal format of messages is
+ 
+           e.adb:7:07: "V" is undefined (more references follow)
+ 
+      where the parenthetical comment warns that there are additional
+      references to the variable ‘V’.  Compiling the same program with
+      the ‘-gnatf’ switch yields
+ 
+           e.adb:7:07: "V" is undefined
+           e.adb:8:07: "V" is undefined
+           e.adb:8:12: "V" is undefined
+           e.adb:8:16: "V" is undefined
+           e.adb:9:07: "V" is undefined
+           e.adb:9:12: "V" is undefined
+ 
+      The ‘-gnatf’ switch also generates additional information for some
+      error messages.  Some examples are:
+ 
+         * Details on possibly non-portable unchecked conversion
+ 
+         * List possible interpretations for ambiguous calls
+ 
+         * Additional details on incorrect parameters
+ 
+ ‘-gnatjnn’
+ 
+      In normal operation mode (or if ‘-gnatj0’ is used), then error
+      messages with continuation lines are treated as though the
+      continuation lines were separate messages (and so a warning with
+      two continuation lines counts as three warnings, and is listed as
+      three separate messages).
+ 
+      If the ‘-gnatjnn’ switch is used with a positive value for nn, then
+      messages are output in a different manner.  A message and all its
+      continuation lines are treated as a unit, and count as only one
+      warning or message in the statistics totals.  Furthermore, the
+      message is reformatted so that no line is longer than nn
+      characters.
+ 
+ ‘-gnatq’
+ 
+      The ‘q’ stands for quit (really ‘don’t quit’).  In normal operation
+      mode, the compiler first parses the program and determines if there
+      are any syntax errors.  If there are, appropriate error messages
+      are generated and compilation is immediately terminated.  This
+      switch tells GNAT to continue with semantic analysis even if syntax
+      errors have been found.  This may enable the detection of more
+      errors in a single run.  On the other hand, the semantic analyzer
+      is more likely to encounter some internal fatal error when given a
+      syntactically invalid tree.
+ 
+ ‘-gnatQ’
+ 
+      In normal operation mode, the ‘ALI’ file is not generated if any
+      illegalities are detected in the program.  The use of ‘-gnatQ’
+      forces generation of the ‘ALI’ file.  This file is marked as being
+      in error, so it cannot be used for binding purposes, but it does
+      contain reasonably complete cross-reference information, and thus
+      may be useful for use by tools (e.g., semantic browsing tools or
+      integrated development environments) that are driven from the ‘ALI’
+      file.  This switch implies ‘-gnatq’, since the semantic phase must
+      be run to get a meaningful ALI file.
+ 
+      When ‘-gnatQ’ is used and the generated ‘ALI’ file is marked as
+      being in error, ‘gnatmake’ will attempt to recompile the source
+      when it finds such an ‘ALI’ file, including with switch ‘-gnatc’.
+ 
+      Note that ‘-gnatQ’ has no effect if ‘-gnats’ is specified, since
+      ALI files are never generated if ‘-gnats’ is set.
+ 
+ 
+ File: gnat_ugn.info,  Node: Warning Message Control,  Next: Debugging and Assertion Control,  Prev: Output and Error Message Control,  Up: Compiler Switches
+ 
+ 4.3.3 Warning Message Control
+ -----------------------------
+ 
+ In addition to error messages, which correspond to illegalities as
+ defined in the Ada Reference Manual, the compiler detects two kinds of
+ warning situations.
+ 
+ First, the compiler considers some constructs suspicious and generates a
+ warning message to alert you to a possible error.  Second, if the
+ compiler detects a situation that is sure to raise an exception at run
+ time, it generates a warning message.  The following shows an example of
+ warning messages:
+ 
+      e.adb:4:24: warning: creation of object may raise Storage_Error
+      e.adb:10:17: warning: static value out of range
+      e.adb:10:17: warning: "Constraint_Error" will be raised at run time
+ 
+ GNAT considers a large number of situations as appropriate for the
+ generation of warning messages.  As always, warnings are not definite
+ indications of errors.  For example, if you do an out-of-range
+ assignment with the deliberate intention of raising a ‘Constraint_Error’
+ exception, then the warning that may be issued does not indicate an
+ error.  Some of the situations for which GNAT issues warnings (at least
+ some of the time) are given in the following list.  This list is not
+ complete, and new warnings are often added to subsequent versions of
+ GNAT. The list is intended to give a general idea of the kinds of
+ warnings that are generated.
+ 
+    * Possible infinitely recursive calls
+ 
+    * Out-of-range values being assigned
+ 
+    * Possible order of elaboration problems
+ 
+    * Size not a multiple of alignment for a record type
+ 
+    * Assertions (pragma Assert) that are sure to fail
+ 
+    * Unreachable code
+ 
+    * Address clauses with possibly unaligned values, or where an attempt
+      is made to overlay a smaller variable with a larger one.
+ 
+    * Fixed-point type declarations with a null range
+ 
+    * Direct_IO or Sequential_IO instantiated with a type that has access
+      values
+ 
+    * Variables that are never assigned a value
+ 
+    * Variables that are referenced before being initialized
+ 
+    * Task entries with no corresponding ‘accept’ statement
+ 
+    * Duplicate accepts for the same task entry in a ‘select’
+ 
+    * Objects that take too much storage
+ 
+    * Unchecked conversion between types of differing sizes
+ 
+    * Missing ‘return’ statement along some execution path in a function
+ 
+    * Incorrect (unrecognized) pragmas
+ 
+    * Incorrect external names
+ 
+    * Allocation from empty storage pool
+ 
+    * Potentially blocking operation in protected type
+ 
+    * Suspicious parenthesization of expressions
+ 
+    * Mismatching bounds in an aggregate
+ 
+    * Attempt to return local value by reference
+ 
+    * Premature instantiation of a generic body
+ 
+    * Attempt to pack aliased components
+ 
+    * Out of bounds array subscripts
+ 
+    * Wrong length on string assignment
+ 
+    * Violations of style rules if style checking is enabled
+ 
+    * Unused ‘with’ clauses
+ 
+    * ‘Bit_Order’ usage that does not have any effect
+ 
+    * ‘Standard.Duration’ used to resolve universal fixed expression
+ 
+    * Dereference of possibly null value
+ 
+    * Declaration that is likely to cause storage error
+ 
+    * Internal GNAT unit ‘with’ed by application unit
+ 
+    * Values known to be out of range at compile time
+ 
+    * Unreferenced or unmodified variables.  Note that a special
+      exemption applies to variables which contain any of the substrings
+      ‘DISCARD, DUMMY, IGNORE, JUNK, UNUSED’, in any casing.  Such
+      variables are considered likely to be intentionally used in a
+      situation where otherwise a warning would be given, so warnings of
+      this kind are always suppressed for such variables.
+ 
+    * Address overlays that could clobber memory
+ 
+    * Unexpected initialization when address clause present
+ 
+    * Bad alignment for address clause
+ 
+    * Useless type conversions
+ 
+    * Redundant assignment statements and other redundant constructs
+ 
+    * Useless exception handlers
+ 
+    * Accidental hiding of name by child unit
+ 
+    * Access before elaboration detected at compile time
+ 
+    * A range in a ‘for’ loop that is known to be null or might be null
+ 
+ The following section lists compiler switches that are available to
+ control the handling of warning messages.  It is also possible to
+ exercise much finer control over what warnings are issued and suppressed
+ using the GNAT pragma Warnings (see the description of the pragma in the
+ ‘GNAT_Reference_manual’).
+ 
+ ‘-gnatwa’
+ 
+      ‘Activate most optional warnings.’
+ 
+      This switch activates most optional warning messages.  See the
+      remaining list in this section for details on optional warning
+      messages that can be individually controlled.  The warnings that
+      are not turned on by this switch are:
+ 
+         * ‘-gnatwd’ (implicit dereferencing)
+ 
+         * ‘-gnatw.d’ (tag warnings with -gnatw switch)
+ 
+         * ‘-gnatwh’ (hiding)
+ 
+         * ‘-gnatw.h’ (holes in record layouts)
+ 
+         * ‘-gnatw.j’ (late primitives of tagged types)
+ 
+         * ‘-gnatw.k’ (redefinition of names in standard)
+ 
+         * ‘-gnatwl’ (elaboration warnings)
+ 
+         * ‘-gnatw.l’ (inherited aspects)
+ 
+         * ‘-gnatw.n’ (atomic synchronization)
+ 
+         * ‘-gnatwo’ (address clause overlay)
+ 
+         * ‘-gnatw.o’ (values set by out parameters ignored)
+ 
+         * ‘-gnatw.q’ (questionable layout of record types)
+ 
+         * ‘-gnatw_q’ (ignored equality)
+ 
+         * ‘-gnatw_r’ (out-of-order record representation clauses)
+ 
+         * ‘-gnatw.s’ (overridden size clause)
+ 
+         * ‘-gnatwt’ (tracking of deleted conditional code)
+ 
+         * ‘-gnatw.u’ (unordered enumeration)
+ 
+         * ‘-gnatw.w’ (use of Warnings Off)
+ 
+         * ‘-gnatw.y’ (reasons for package needing body)
+ 
+      All other optional warnings are turned on.
+ 
+ ‘-gnatwA’
+ 
+      ‘Suppress all optional errors.’
+ 
+      This switch suppresses all optional warning messages, see remaining
+      list in this section for details on optional warning messages that
+      can be individually controlled.  Note that unlike switch ‘-gnatws’,
+      the use of switch ‘-gnatwA’ does not suppress warnings that are
+      normally given unconditionally and cannot be individually
+      controlled (for example, the warning about a missing exit path in a
+      function).  Also, again unlike switch ‘-gnatws’, warnings
+      suppressed by the use of switch ‘-gnatwA’ can be individually
+      turned back on.  For example the use of switch ‘-gnatwA’ followed
+      by switch ‘-gnatwd’ will suppress all optional warnings except the
+      warnings for implicit dereferencing.
+ 
+ ‘-gnatw.a’
+ 
+      ‘Activate warnings on failing assertions.’
+ 
+      This switch activates warnings for assertions where the compiler
+      can tell at compile time that the assertion will fail.  Note that
+      this warning is given even if assertions are disabled.  The default
+      is that such warnings are generated.
+ 
+ ‘-gnatw.A’
+ 
+      ‘Suppress warnings on failing assertions.’
+ 
+      This switch suppresses warnings for assertions where the compiler
+      can tell at compile time that the assertion will fail.
+ 
+ ‘-gnatw_a’
+ 
+      ‘Activate warnings on anonymous allocators.’
+ 
+      This switch activates warnings for allocators of anonymous access
+      types, which can involve run-time accessibility checks and lead to
+      unexpected accessibility violations.  For more details on the rules
+      involved, see RM 3.10.2 (14).
+ 
+ ‘-gnatw_A’
+ 
+      ‘Supress warnings on anonymous allocators.’
+ 
+      This switch suppresses warnings for anonymous access type
+      allocators.
+ 
+ ‘-gnatwb’
+ 
+      ‘Activate warnings on bad fixed values.’
+ 
+      This switch activates warnings for static fixed-point expressions
+      whose value is not an exact multiple of Small.  Such values are
+      implementation dependent, since an implementation is free to choose
+      either of the multiples that surround the value.  GNAT always
+      chooses the closer one, but this is not required behavior, and it
+      is better to specify a value that is an exact multiple, ensuring
+      predictable execution.  The default is that such warnings are not
+      generated.
+ 
+ ‘-gnatwB’
+ 
+      ‘Suppress warnings on bad fixed values.’
+ 
+      This switch suppresses warnings for static fixed-point expressions
+      whose value is not an exact multiple of Small.
+ 
+ ‘-gnatw.b’
+ 
+      ‘Activate warnings on biased representation.’
+ 
+      This switch activates warnings when a size clause, value size
+      clause, component clause, or component size clause forces the use
+      of biased representation for an integer type (e.g.  representing a
+      range of 10..11 in a single bit by using 0/1 to represent 10/11).
+      The default is that such warnings are generated.
+ 
+ ‘-gnatw.B’
+ 
+      ‘Suppress warnings on biased representation.’
+ 
+      This switch suppresses warnings for representation clauses that
+      force the use of biased representation.
+ 
+ ‘-gnatwc’
+ 
+      ‘Activate warnings on conditionals.’
+ 
+      This switch activates warnings for conditional expressions used in
+      tests that are known to be True or False at compile time.  The
+      default is that such warnings are not generated.  Note that this
+      warning does not get issued for the use of boolean constants whose
+      values are known at compile time, since this is a standard
+      technique for conditional compilation in Ada, and this would
+      generate too many false positive warnings.
+ 
+      This warning option also activates a special test for comparisons
+      using the operators ‘>=’ and’ <=’.  If the compiler can tell that
+      only the equality condition is possible, then it will warn that the
+      ‘>’ or ‘<’ part of the test is useless and that the operator could
+      be replaced by ‘=’.  An example would be comparing a ‘Natural’
+      variable <= 0.
+ 
+      This warning option also generates warnings if one or both tests is
+      optimized away in a membership test for integer values if the
+      result can be determined at compile time.  Range tests on
+      enumeration types are not included, since it is common for such
+      tests to include an end point.
+ 
+      This warning can also be turned on using ‘-gnatwa’.
+ 
+ ‘-gnatwC’
+ 
+      ‘Suppress warnings on conditionals.’
+ 
+      This switch suppresses warnings for conditional expressions used in
+      tests that are known to be True or False at compile time.
+ 
+ ‘-gnatw.c’
+ 
+      ‘Activate warnings on missing component clauses.’
+ 
+      This switch activates warnings for record components where a record
+      representation clause is present and has component clauses for the
+      majority, but not all, of the components.  A warning is given for
+      each component for which no component clause is present.
+ 
+ ‘-gnatw.C’
+ 
+      ‘Suppress warnings on missing component clauses.’
+ 
+      This switch suppresses warnings for record components that are
+      missing a component clause in the situation described above.
+ 
+ ‘-gnatw_c’
+ 
+      ‘Activate warnings on unknown condition in Compile_Time_Warning.’
+ 
+      This switch activates warnings on a pragma Compile_Time_Warning or
+      Compile_Time_Error whose condition has a value that is not known at
+      compile time.  The default is that such warnings are generated.
+ 
+ ‘-gnatw_C’
+ 
+      ‘Suppress warnings on unknown condition in Compile_Time_Warning.’
+ 
+      This switch supresses warnings on a pragma Compile_Time_Warning or
+      Compile_Time_Error whose condition has a value that is not known at
+      compile time.
+ 
+ ‘-gnatwd’
+ 
+      ‘Activate warnings on implicit dereferencing.’
+ 
+      If this switch is set, then the use of a prefix of an access type
+      in an indexed component, slice, or selected component without an
+      explicit ‘.all’ will generate a warning.  With this warning
+      enabled, access checks occur only at points where an explicit
+      ‘.all’ appears in the source code (assuming no warnings are
+      generated as a result of this switch).  The default is that such
+      warnings are not generated.
+ 
+ ‘-gnatwD’
+ 
+      ‘Suppress warnings on implicit dereferencing.’
+ 
+      This switch suppresses warnings for implicit dereferences in
+      indexed components, slices, and selected components.
+ 
+ ‘-gnatw.d’
+ 
+      ‘Activate tagging of warning and info messages.’
+ 
+      If this switch is set, then warning messages are tagged, with one
+      of the following strings:
+ 
+              - ‘[-gnatw?]’ Used to tag warnings controlled by the switch
+                ‘-gnatwx’ where x is a letter a-z.
+ 
+              - ‘[-gnatw.?]’ Used to tag warnings controlled by the
+                switch ‘-gnatw.x’ where x is a letter a-z.
+ 
+              - ‘[-gnatel]’ Used to tag elaboration information (info)
+                messages generated when the static model of elaboration
+                is used and the ‘-gnatel’ switch is set.
+ 
+              - ‘[restriction warning]’ Used to tag warning messages for
+                restriction violations, activated by use of the pragma
+                ‘Restriction_Warnings’.
+ 
+              - ‘[warning-as-error]’ Used to tag warning messages that
+                have been converted to error messages by use of the
+                pragma Warning_As_Error.  Note that such warnings are
+                prefixed by the string “error: ” rather than “warning: “.
+ 
+              - ‘[enabled by default]’ Used to tag all other warnings
+                that are always given by default, unless warnings are
+                completely suppressed using pragma ‘Warnings(Off)’ or the
+                switch ‘-gnatws’.
+ 
+ ‘-gnatw.D’
+ 
+      ‘Deactivate tagging of warning and info messages messages.’
+ 
+      If this switch is set, then warning messages return to the default
+      mode in which warnings and info messages are not tagged as
+      described above for ‘-gnatw.d’.
+ 
+ ‘-gnatwe’
+ 
+      ‘Treat warnings and style checks as errors.’
+ 
+      This switch causes warning messages and style check messages to be
+      treated as errors.  The warning string still appears, but the
+      warning messages are counted as errors, and prevent the generation
+      of an object file.  Note that this is the only -gnatw switch that
+      affects the handling of style check messages.  Note also that this
+      switch has no effect on info (information) messages, which are not
+      treated as errors if this switch is present.
+ 
+ ‘-gnatw.e’
+ 
+      ‘Activate every optional warning.’
+ 
+      This switch activates all optional warnings, including those which
+      are not activated by ‘-gnatwa’.  The use of this switch is not
+      recommended for normal use.  If you turn this switch on, it is
+      almost certain that you will get large numbers of useless warnings.
+      The warnings that are excluded from ‘-gnatwa’ are typically highly
+      specialized warnings that are suitable for use only in code that
+      has been specifically designed according to specialized coding
+      rules.
+ 
+ ‘-gnatwE’
+ 
+      ‘Treat all run-time exception warnings as errors.’
+ 
+      This switch causes warning messages regarding errors that will be
+      raised during run-time execution to be treated as errors.
+ 
+ ‘-gnatwf’
+ 
+      ‘Activate warnings on unreferenced formals.’
+ 
+      This switch causes a warning to be generated if a formal parameter
+      is not referenced in the body of the subprogram.  This warning can
+      also be turned on using ‘-gnatwu’.  The default is that these
+      warnings are not generated.
+ 
+ ‘-gnatwF’
+ 
+      ‘Suppress warnings on unreferenced formals.’
+ 
+      This switch suppresses warnings for unreferenced formal parameters.
+      Note that the combination ‘-gnatwu’ followed by ‘-gnatwF’ has the
+      effect of warning on unreferenced entities other than subprogram
+      formals.
+ 
+ ‘-gnatwg’
+ 
+      ‘Activate warnings on unrecognized pragmas.’
+ 
+      This switch causes a warning to be generated if an unrecognized
+      pragma is encountered.  Apart from issuing this warning, the pragma
+      is ignored and has no effect.  The default is that such warnings
+      are issued (satisfying the Ada Reference Manual requirement that
+      such warnings appear).
+ 
+ ‘-gnatwG’
+ 
+      ‘Suppress warnings on unrecognized pragmas.’
+ 
+      This switch suppresses warnings for unrecognized pragmas.
+ 
+ ‘-gnatw.g’
+ 
+      ‘Warnings used for GNAT sources.’
+ 
+      This switch sets the warning categories that are used by the
+      standard GNAT style.  Currently this is equivalent to
+      ‘-gnatwAao.q.s.CI.V.X.Z’ but more warnings may be added in the
+      future without advanced notice.
+ 
+ ‘-gnatwh’
+ 
+      ‘Activate warnings on hiding.’
+ 
+      This switch activates warnings on hiding declarations that are
+      considered potentially confusing.  Not all cases of hiding cause
+      warnings; for example an overriding declaration hides an implicit
+      declaration, which is just normal code.  The default is that
+      warnings on hiding are not generated.
+ 
+ ‘-gnatwH’
+ 
+      ‘Suppress warnings on hiding.’
+ 
+      This switch suppresses warnings on hiding declarations.
+ 
+ ‘-gnatw.h’
+ 
+      ‘Activate warnings on holes/gaps in records.’
+ 
+      This switch activates warnings on component clauses in record
+      representation clauses that leave holes (gaps) in the record
+      layout.  If a record representation clause does not specify a
+      location for every component of the record type, then the warnings
+      generated (or not generated) are unspecified.  For example, there
+      may be gaps for which either no warning is generated or a warning
+      is generated that incorrectly describes the location of the gap.
+      This undesirable situation can sometimes be avoided by adding (and
+      specifying the location for) unused fill fields.
+ 
+ ‘-gnatw.H’
+ 
+      ‘Suppress warnings on holes/gaps in records.’
+ 
+      This switch suppresses warnings on component clauses in record
+      representation clauses that leave holes (haps) in the record
+      layout.
+ 
+ ‘-gnatwi’
+ 
+      ‘Activate warnings on implementation units.’
+ 
+      This switch activates warnings for a ‘with’ of an internal GNAT
+      implementation unit, defined as any unit from the ‘Ada’,
+      ‘Interfaces’, ‘GNAT’, or ‘System’ hierarchies that is not
+      documented in either the Ada Reference Manual or the GNAT
+      Programmer’s Reference Manual.  Such units are intended only for
+      internal implementation purposes and should not be ‘with’ed by user
+      programs.  The default is that such warnings are generated
+ 
+ ‘-gnatwI’
+ 
+      ‘Disable warnings on implementation units.’
+ 
+      This switch disables warnings for a ‘with’ of an internal GNAT
+      implementation unit.
+ 
+ ‘-gnatw.i’
+ 
+      ‘Activate warnings on overlapping actuals.’
+ 
+      This switch enables a warning on statically detectable overlapping
+      actuals in a subprogram call, when one of the actuals is an in-out
+      parameter, and the types of the actuals are not by-copy types.
+      This warning is off by default.
+ 
+ ‘-gnatw.I’
+ 
+      ‘Disable warnings on overlapping actuals.’
+ 
+      This switch disables warnings on overlapping actuals in a call.
+ 
+ ‘-gnatwj’
+ 
+      ‘Activate warnings on obsolescent features (Annex J).’
+ 
+      If this warning option is activated, then warnings are generated
+      for calls to subprograms marked with ‘pragma Obsolescent’ and for
+      use of features in Annex J of the Ada Reference Manual.  In the
+      case of Annex J, not all features are flagged.  In particular, uses
+      of package ‘ASCII’ are not flagged, since these are very common and
+      would generate many annoying positive warnings.  The default is
+      that such warnings are not generated.
+ 
+      In addition to the above cases, warnings are also generated for
+      GNAT features that have been provided in past versions but which
+      have been superseded (typically by features in the new Ada
+      standard).  For example, ‘pragma Ravenscar’ will be flagged since
+      its function is replaced by ‘pragma Profile(Ravenscar)’, and
+      ‘pragma Interface_Name’ will be flagged since its function is
+      replaced by ‘pragma Import’.
+ 
+      Note that this warning option functions differently from the
+      restriction ‘No_Obsolescent_Features’ in two respects.  First, the
+      restriction applies only to annex J features.  Second, the
+      restriction does flag uses of package ‘ASCII’.
+ 
+ ‘-gnatwJ’
+ 
+      ‘Suppress warnings on obsolescent features (Annex J).’
+ 
+      This switch disables warnings on use of obsolescent features.
+ 
+ ‘-gnatw.j’
+ 
+      ‘Activate warnings on late declarations of tagged type primitives.’
+ 
+      This switch activates warnings on visible primitives added to a
+      tagged type after deriving a private extension from it.
+ 
+ ‘-gnatw.J’
+ 
+      ‘Suppress warnings on late declarations of tagged type primitives.’
+ 
+      This switch suppresses warnings on visible primitives added to a
+      tagged type after deriving a private extension from it.
+ 
+ ‘-gnatwk’
+ 
+      ‘Activate warnings on variables that could be constants.’
+ 
+      This switch activates warnings for variables that are initialized
+      but never modified, and then could be declared constants.  The
+      default is that such warnings are not given.
+ 
+ ‘-gnatwK’
+ 
+      ‘Suppress warnings on variables that could be constants.’
+ 
+      This switch disables warnings on variables that could be declared
+      constants.
+ 
+ ‘-gnatw.k’
+ 
+      ‘Activate warnings on redefinition of names in standard.’
+ 
+      This switch activates warnings for declarations that declare a name
+      that is defined in package Standard.  Such declarations can be
+      confusing, especially since the names in package Standard continue
+      to be directly visible, meaning that use visibiliy on such
+      redeclared names does not work as expected.  Names of discriminants
+      and components in records are not included in this check.
+ 
+ ‘-gnatw.K’
+ 
+      ‘Suppress warnings on redefinition of names in standard.’
+ 
+      This switch disables warnings for declarations that declare a name
+      that is defined in package Standard.
+ 
+ ‘-gnatwl’
+ 
+      ‘Activate warnings for elaboration pragmas.’
+ 
+      This switch activates warnings for possible elaboration problems,
+      including suspicious use of ‘Elaborate’ pragmas, when using the
+      static elaboration model, and possible situations that may raise
+      ‘Program_Error’ when using the dynamic elaboration model.  See the
+      section in this guide on elaboration checking for further details.
+      The default is that such warnings are not generated.
+ 
+ ‘-gnatwL’
+ 
+      ‘Suppress warnings for elaboration pragmas.’
+ 
+      This switch suppresses warnings for possible elaboration problems.
+ 
+ ‘-gnatw.l’
+ 
+      ‘List inherited aspects.’
+ 
+      This switch causes the compiler to list inherited invariants,
+      preconditions, and postconditions from Type_Invariant’Class,
+      Invariant’Class, Pre’Class, and Post’Class aspects.  Also list
+      inherited subtype predicates.
+ 
+ ‘-gnatw.L’
+ 
+      ‘Suppress listing of inherited aspects.’
+ 
+      This switch suppresses listing of inherited aspects.
+ 
+ ‘-gnatwm’
+ 
+      ‘Activate warnings on modified but unreferenced variables.’
+ 
+      This switch activates warnings for variables that are assigned
+      (using an initialization value or with one or more assignment
+      statements) but whose value is never read.  The warning is
+      suppressed for volatile variables and also for variables that are
+      renamings of other variables or for which an address clause is
+      given.  The default is that these warnings are not given.
+ 
+ ‘-gnatwM’
+ 
+      ‘Disable warnings on modified but unreferenced variables.’
+ 
+      This switch disables warnings for variables that are assigned or
+      initialized, but never read.
+ 
+ ‘-gnatw.m’
+ 
+      ‘Activate warnings on suspicious modulus values.’
+ 
+      This switch activates warnings for modulus values that seem
+      suspicious.  The cases caught are where the size is the same as the
+      modulus (e.g.  a modulus of 7 with a size of 7 bits), and modulus
+      values of 32 or 64 with no size clause.  The guess in both cases is
+      that 2**x was intended rather than x.  In addition expressions of
+      the form 2*x for small x generate a warning (the almost certainly
+      accurate guess being that 2**x was intended).  This switch also
+      activates warnings for negative literal values of a modular type,
+      which are interpreted as large positive integers after wrap-around.
+      The default is that these warnings are given.
+ 
+ ‘-gnatw.M’
+ 
+      ‘Disable warnings on suspicious modulus values.’
+ 
+      This switch disables warnings for suspicious modulus values.
+ 
+ ‘-gnatwn’
+ 
+      ‘Set normal warnings mode.’
+ 
+      This switch sets normal warning mode, in which enabled warnings are
+      issued and treated as warnings rather than errors.  This is the
+      default mode.  the switch ‘-gnatwn’ can be used to cancel the
+      effect of an explicit ‘-gnatws’ or ‘-gnatwe’.  It also cancels the
+      effect of the implicit ‘-gnatwe’ that is activated by the use of
+      ‘-gnatg’.
+ 
+ ‘-gnatw.n’
+ 
+      ‘Activate warnings on atomic synchronization.’
+ 
+      This switch actives warnings when an access to an atomic variable
+      requires the generation of atomic synchronization code.  These
+      warnings are off by default.
+ 
+ ‘-gnatw.N’
+ 
+      ‘Suppress warnings on atomic synchronization.’
+ 
+      This switch suppresses warnings when an access to an atomic
+      variable requires the generation of atomic synchronization code.
+ 
+ ‘-gnatwo’
+ 
+      ‘Activate warnings on address clause overlays.’
+ 
+      This switch activates warnings for possibly unintended
+      initialization effects of defining address clauses that cause one
+      variable to overlap another.  The default is that such warnings are
+      generated.
+ 
+ ‘-gnatwO’
+ 
+      ‘Suppress warnings on address clause overlays.’
+ 
+      This switch suppresses warnings on possibly unintended
+      initialization effects of defining address clauses that cause one
+      variable to overlap another.
+ 
+ ‘-gnatw.o’
+ 
+      ‘Activate warnings on modified but unreferenced out parameters.’
+ 
+      This switch activates warnings for variables that are modified by
+      using them as actuals for a call to a procedure with an out mode
+      formal, where the resulting assigned value is never read.  It is
+      applicable in the case where there is more than one out mode
+      formal.  If there is only one out mode formal, the warning is
+      issued by default (controlled by -gnatwu).  The warning is
+      suppressed for volatile variables and also for variables that are
+      renamings of other variables or for which an address clause is
+      given.  The default is that these warnings are not given.
+ 
+ ‘-gnatw.O’
+ 
+      ‘Disable warnings on modified but unreferenced out parameters.’
+ 
+      This switch suppresses warnings for variables that are modified by
+      using them as actuals for a call to a procedure with an out mode
+      formal, where the resulting assigned value is never read.
+ 
+ ‘-gnatwp’
+ 
+      ‘Activate warnings on ineffective pragma Inlines.’
+ 
+      This switch activates warnings for failure of front end inlining
+      (activated by ‘-gnatN’) to inline a particular call.  There are
+      many reasons for not being able to inline a call, including most
+      commonly that the call is too complex to inline.  The default is
+      that such warnings are not given.  Warnings on ineffective inlining
+      by the gcc back-end can be activated separately, using the gcc
+      switch -Winline.
+ 
+ ‘-gnatwP’
+ 
+      ‘Suppress warnings on ineffective pragma Inlines.’
+ 
+      This switch suppresses warnings on ineffective pragma Inlines.  If
+      the inlining mechanism cannot inline a call, it will simply ignore
+      the request silently.
+ 
+ ‘-gnatw.p’
+ 
+      ‘Activate warnings on parameter ordering.’
+ 
+      This switch activates warnings for cases of suspicious parameter
+      ordering when the list of arguments are all simple identifiers that
+      match the names of the formals, but are in a different order.  The
+      warning is suppressed if any use of named parameter notation is
+      used, so this is the appropriate way to suppress a false positive
+      (and serves to emphasize that the “misordering” is deliberate).
+      The default is that such warnings are not given.
+ 
+ ‘-gnatw.P’
+ 
+      ‘Suppress warnings on parameter ordering.’
+ 
+      This switch suppresses warnings on cases of suspicious parameter
+      ordering.
+ 
+ ‘-gnatw_p’
+ 
+      ‘Activate warnings for pedantic checks.’
+ 
+      This switch activates warnings for the failure of certain pedantic
+      checks.  The only case currently supported is a check that the
+      subtype_marks given for corresponding formal parameter and function
+      results in a subprogram declaration and its body denote the same
+      subtype declaration.  The default is that such warnings are not
+      given.
+ 
+ ‘-gnatw_P’
+ 
+      ‘Suppress warnings for pedantic checks.’
+ 
+      This switch suppresses warnings on violations of pedantic checks.
+ 
+ ‘-gnatwq’
+ 
+      ‘Activate warnings on questionable missing parentheses.’
+ 
+      This switch activates warnings for cases where parentheses are not
+      used and the result is potential ambiguity from a readers point of
+      view.  For example (not a > b) when a and b are modular means ((not
+      a) > b) and very likely the programmer intended (not (a > b)).
+      Similarly (-x mod 5) means (-(x mod 5)) and quite likely ((-x) mod
+      5) was intended.  In such situations it seems best to follow the
+      rule of always parenthesizing to make the association clear, and
+      this warning switch warns if such parentheses are not present.  The
+      default is that these warnings are given.
+ 
+ ‘-gnatwQ’
+ 
+      ‘Suppress warnings on questionable missing parentheses.’
+ 
+      This switch suppresses warnings for cases where the association is
+      not clear and the use of parentheses is preferred.
+ 
+ ‘-gnatw.q’
+ 
+      ‘Activate warnings on questionable layout of record types.’
+ 
+      This switch activates warnings for cases where the default layout
+      of a record type, that is to say the layout of its components in
+      textual order of the source code, would very likely cause
+      inefficiencies in the code generated by the compiler, both in terms
+      of space and speed during execution.  One warning is issued for
+      each problematic component without representation clause in the
+      nonvariant part and then in each variant recursively, if any.
+ 
+      The purpose of these warnings is neither to prescribe an optimal
+      layout nor to force the use of representation clauses, but rather
+      to get rid of the most blatant inefficiencies in the layout.
+      Therefore, the default layout is matched against the following
+      synthetic ordered layout and the deviations are flagged on a
+      component-by-component basis:
+ 
+         * first all components or groups of components whose length is
+           fixed and a multiple of the storage unit,
+ 
+         * then the remaining components whose length is fixed and not a
+           multiple of the storage unit,
+ 
+         * then the remaining components whose length doesn’t depend on
+           discriminants (that is to say, with variable but uniform
+           length for all objects),
+ 
+         * then all components whose length depends on discriminants,
+ 
+         * finally the variant part (if any),
+ 
+      for the nonvariant part and for each variant recursively, if any.
+ 
+      The exact wording of the warning depends on whether the compiler is
+      allowed to reorder the components in the record type or precluded
+      from doing it by means of pragma ‘No_Component_Reordering’.
+ 
+      The default is that these warnings are not given.
+ 
+ ‘-gnatw.Q’
+ 
+      ‘Suppress warnings on questionable layout of record types.’
+ 
+      This switch suppresses warnings for cases where the default layout
+      of a record type would very likely cause inefficiencies.
+ 
+ ‘-gnatw_q’
+ 
+      ‘Activate warnings for ignored equality operators.’
+ 
+      This switch activates warnings for a user-defined “=” function that
+      does not compose (i.e.  is ignored for a predefined “=” for a
+      composite type containing a component whose type has the
+      user-defined “=” as primitive).  Note that the user-defined “=”
+      must be a primitive operator in order to trigger the warning.  See
+      RM-4.5.2(14/3-15/5, 21, 24/3, 32.1/1) for the exact Ada rules on
+      composability of “=”.
+ 
+      The default is that these warnings are not given.
+ 
+ ‘-gnatw_Q’
+ 
+      ‘Suppress warnings for ignored equality operators.’
+ 
+ ‘-gnatwr’
+ 
+      ‘Activate warnings on redundant constructs.’
+ 
+      This switch activates warnings for redundant constructs.  The
+      following is the current list of constructs regarded as redundant:
+ 
+         * Assignment of an item to itself.
+ 
+         * Type conversion that converts an expression to its own type.
+ 
+         * Use of the attribute ‘Base’ where ‘typ'Base’ is the same as
+           ‘typ’.
+ 
+         * Use of pragma ‘Pack’ when all components are placed by a
+           record representation clause.
+ 
+         * Exception handler containing only a reraise statement (raise
+           with no operand) which has no effect.
+ 
+         * Use of the operator abs on an operand that is known at compile
+           time to be non-negative
+ 
+         * Comparison of an object or (unary or binary) operation of
+           boolean type to an explicit True value.
+ 
+         * Import of parent package.
+ 
+      The default is that warnings for redundant constructs are not
+      given.
+ 
+ ‘-gnatwR’
+ 
+      ‘Suppress warnings on redundant constructs.’
+ 
+      This switch suppresses warnings for redundant constructs.
+ 
+ ‘-gnatw.r’
+ 
+      ‘Activate warnings for object renaming function.’
+ 
+      This switch activates warnings for an object renaming that renames
+      a function call, which is equivalent to a constant declaration (as
+      opposed to renaming the function itself).  The default is that
+      these warnings are given.
+ 
+ ‘-gnatw.R’
+ 
+      ‘Suppress warnings for object renaming function.’
+ 
+      This switch suppresses warnings for object renaming function.
+ 
+ ‘-gnatw_r’
+ 
+      ‘Activate warnings for out-of-order record representation clauses.’
+ 
+      This switch activates warnings for record representation clauses,
+      if the order of component declarations, component clauses, and
+      bit-level layout do not all agree.  The default is that these
+      warnings are not given.
+ 
+ ‘-gnatw_R’
+ 
+      ‘Suppress warnings for out-of-order record representation clauses.’
+ 
+ ‘-gnatws’
+ 
+      ‘Suppress all warnings.’
+ 
+      This switch completely suppresses the output of all warning
+      messages from the GNAT front end, including both warnings that can
+      be controlled by switches described in this section, and those that
+      are normally given unconditionally.  The effect of this suppress
+      action can only be cancelled by a subsequent use of the switch
+      ‘-gnatwn’.
+ 
+      Note that switch ‘-gnatws’ does not suppress warnings from the
+      ‘gcc’ back end.  To suppress these back end warnings as well, use
+      the switch ‘-w’ in addition to ‘-gnatws’.  Also this switch has no
+      effect on the handling of style check messages.
+ 
+ ‘-gnatw.s’
+ 
+      ‘Activate warnings on overridden size clauses.’
+ 
+      This switch activates warnings on component clauses in record
+      representation clauses where the length given overrides that
+      specified by an explicit size clause for the component type.  A
+      warning is similarly given in the array case if a specified
+      component size overrides an explicit size clause for the array
+      component type.
+ 
+ ‘-gnatw.S’
+ 
+      ‘Suppress warnings on overridden size clauses.’
+ 
+      This switch suppresses warnings on component clauses in record
+      representation clauses that override size clauses, and similar
+      warnings when an array component size overrides a size clause.
+ 
+ ‘-gnatwt’
+ 
+      ‘Activate warnings for tracking of deleted conditional code.’
+ 
+      This switch activates warnings for tracking of code in conditionals
+      (IF and CASE statements) that is detected to be dead code which
+      cannot be executed, and which is removed by the front end.  This
+      warning is off by default.  This may be useful for detecting
+      deactivated code in certified applications.
+ 
+ ‘-gnatwT’
+ 
+      ‘Suppress warnings for tracking of deleted conditional code.’
+ 
+      This switch suppresses warnings for tracking of deleted conditional
+      code.
+ 
+ ‘-gnatw.t’
+ 
+      ‘Activate warnings on suspicious contracts.’
+ 
+      This switch activates warnings on suspicious contracts.  This
+      includes warnings on suspicious postconditions (whether a pragma
+      ‘Postcondition’ or a ‘Post’ aspect in Ada 2012) and suspicious
+      contract cases (pragma or aspect ‘Contract_Cases’).  A function
+      postcondition or contract case is suspicious when no postcondition
+      or contract case for this function mentions the result of the
+      function.  A procedure postcondition or contract case is suspicious
+      when it only refers to the pre-state of the procedure, because in
+      that case it should rather be expressed as a precondition.  This
+      switch also controls warnings on suspicious cases of expressions
+      typically found in contracts like quantified expressions and uses
+      of Update attribute.  The default is that such warnings are
+      generated.
+ 
+ ‘-gnatw.T’
+ 
+      ‘Suppress warnings on suspicious contracts.’
+ 
+      This switch suppresses warnings on suspicious contracts.
+ 
+ ‘-gnatwu’
+ 
+      ‘Activate warnings on unused entities.’
+ 
+      This switch activates warnings to be generated for entities that
+      are declared but not referenced, and for units that are ‘with’ed
+      and not referenced.  In the case of packages, a warning is also
+      generated if no entities in the package are referenced.  This means
+      that if a with’ed package is referenced but the only references are
+      in ‘use’ clauses or ‘renames’ declarations, a warning is still
+      generated.  A warning is also generated for a generic package that
+      is ‘with’ed but never instantiated.  In the case where a package or
+      subprogram body is compiled, and there is a ‘with’ on the
+      corresponding spec that is only referenced in the body, a warning
+      is also generated, noting that the ‘with’ can be moved to the body.
+      The default is that such warnings are not generated.  This switch
+      also activates warnings on unreferenced formals (it includes the
+      effect of ‘-gnatwf’).
+ 
+ ‘-gnatwU’
+ 
+      ‘Suppress warnings on unused entities.’
+ 
+      This switch suppresses warnings for unused entities and packages.
+      It also turns off warnings on unreferenced formals (and thus
+      includes the effect of ‘-gnatwF’).
+ 
+ ‘-gnatw.u’
+ 
+      ‘Activate warnings on unordered enumeration types.’
+ 
+      This switch causes enumeration types to be considered as
+      conceptually unordered, unless an explicit pragma ‘Ordered’ is
+      given for the type.  The effect is to generate warnings in clients
+      that use explicit comparisons or subranges, since these constructs
+      both treat objects of the type as ordered.  (A ‘client’ is defined
+      as a unit that is other than the unit in which the type is
+      declared, or its body or subunits.)  Please refer to the
+      description of pragma ‘Ordered’ in the ‘GNAT Reference Manual’ for
+      further details.  The default is that such warnings are not
+      generated.
+ 
+ ‘-gnatw.U’
+ 
+      ‘Deactivate warnings on unordered enumeration types.’
+ 
+      This switch causes all enumeration types to be considered as
+      ordered, so that no warnings are given for comparisons or subranges
+      for any type.
+ 
+ ‘-gnatwv’
+ 
+      ‘Activate warnings on unassigned variables.’
+ 
+      This switch activates warnings for access to variables which may
+      not be properly initialized.  The default is that such warnings are
+      generated.  This switch will also be emitted when initializing an
+      array or record object via the following aggregate:
+ 
+           Array_Or_Record : XXX := (others => <>);
+ 
+      unless the relevant type fully initializes all components.
+ 
+ ‘-gnatwV’
+ 
+      ‘Suppress warnings on unassigned variables.’
+ 
+      This switch suppresses warnings for access to variables which may
+      not be properly initialized.
+ 
+ ‘-gnatw.v’
+ 
+      ‘Activate info messages for non-default bit order.’
+ 
+      This switch activates messages (labeled “info”, they are not
+      warnings, just informational messages) about the effects of
+      non-default bit-order on records to which a component clause is
+      applied.  The effect of specifying non-default bit ordering is a
+      bit subtle (and changed with Ada 2005), so these messages, which
+      are given by default, are useful in understanding the exact
+      consequences of using this feature.
+ 
+ ‘-gnatw.V’
+ 
+      ‘Suppress info messages for non-default bit order.’
+ 
+      This switch suppresses information messages for the effects of
+      specifying non-default bit order on record components with
+      component clauses.
+ 
+ ‘-gnatww’
+ 
+      ‘Activate warnings on wrong low bound assumption.’
+ 
+      This switch activates warnings for indexing an unconstrained string
+      parameter with a literal or S’Length.  This is a case where the
+      code is assuming that the low bound is one, which is in general not
+      true (for example when a slice is passed).  The default is that
+      such warnings are generated.
+ 
+ ‘-gnatwW’
+ 
+      ‘Suppress warnings on wrong low bound assumption.’
+ 
+      This switch suppresses warnings for indexing an unconstrained
+      string parameter with a literal or S’Length.  Note that this
+      warning can also be suppressed in a particular case by adding an
+      assertion that the lower bound is 1, as shown in the following
+      example:
+ 
+           procedure K (S : String) is
+              pragma Assert (S'First = 1);
+              ...
+ 
+ ‘-gnatw.w’
+ 
+      ‘Activate warnings on Warnings Off pragmas.’
+ 
+      This switch activates warnings for use of ‘pragma Warnings (Off,
+      entity)’ where either the pragma is entirely useless (because it
+      suppresses no warnings), or it could be replaced by ‘pragma
+      Unreferenced’ or ‘pragma Unmodified’.  Also activates warnings for
+      the case of Warnings (Off, String), where either there is no
+      matching Warnings (On, String), or the Warnings (Off) did not
+      suppress any warning.  The default is that these warnings are not
+      given.
+ 
+ ‘-gnatw.W’
+ 
+      ‘Suppress warnings on unnecessary Warnings Off pragmas.’
+ 
+      This switch suppresses warnings for use of ‘pragma Warnings (Off,
+      ...)’.
+ 
+ ‘-gnatwx’
+ 
+      ‘Activate warnings on Export/Import pragmas.’
+ 
+      This switch activates warnings on Export/Import pragmas when the
+      compiler detects a possible conflict between the Ada and foreign
+      language calling sequences.  For example, the use of default
+      parameters in a convention C procedure is dubious because the C
+      compiler cannot supply the proper default, so a warning is issued.
+      The default is that such warnings are generated.
+ 
+ ‘-gnatwX’
+ 
+      ‘Suppress warnings on Export/Import pragmas.’
+ 
+      This switch suppresses warnings on Export/Import pragmas.  The
+      sense of this is that you are telling the compiler that you know
+      what you are doing in writing the pragma, and it should not
+      complain at you.
+ 
+ ‘-gnatw.x’
+ 
+      ‘Activate warnings for No_Exception_Propagation mode.’
+ 
+      This switch activates warnings for exception usage when pragma
+      Restrictions (No_Exception_Propagation) is in effect.  Warnings are
+      given for implicit or explicit exception raises which are not
+      covered by a local handler, and for exception handlers which do not
+      cover a local raise.  The default is that these warnings are given
+      for units that contain exception handlers.
+ 
+ ‘-gnatw.X’
+ 
+      ‘Disable warnings for No_Exception_Propagation mode.’
+ 
+      This switch disables warnings for exception usage when pragma
+      Restrictions (No_Exception_Propagation) is in effect.
+ 
+ ‘-gnatwy’
+ 
+      ‘Activate warnings for Ada compatibility issues.’
+ 
+      For the most part, newer versions of Ada are upwards compatible
+      with older versions.  For example, Ada 2005 programs will almost
+      always work when compiled as Ada 2012.  However there are some
+      exceptions (for example the fact that ‘some’ is now a reserved word
+      in Ada 2012).  This switch activates several warnings to help in
+      identifying and correcting such incompatibilities.  The default is
+      that these warnings are generated.  Note that at one point Ada 2005
+      was called Ada 0Y, hence the choice of character.
+ 
+ ‘-gnatwY’
+ 
+      ‘Disable warnings for Ada compatibility issues.’
+ 
+      This switch suppresses the warnings intended to help in identifying
+      incompatibilities between Ada language versions.
+ 
+ ‘-gnatw.y’
+ 
+      ‘Activate information messages for why package spec needs body.’
+ 
+      There are a number of cases in which a package spec needs a body.
+      For example, the use of pragma Elaborate_Body, or the declaration
+      of a procedure specification requiring a completion.  This switch
+      causes information messages to be output showing why a package
+      specification requires a body.  This can be useful in the case of a
+      large package specification which is unexpectedly requiring a body.
+      The default is that such information messages are not output.
+ 
+ ‘-gnatw.Y’
+ 
+      ‘Disable information messages for why package spec needs body.’
+ 
+      This switch suppresses the output of information messages showing
+      why a package specification needs a body.
+ 
+ ‘-gnatwz’
+ 
+      ‘Activate warnings on unchecked conversions.’
+ 
+      This switch activates warnings for unchecked conversions where the
+      types are known at compile time to have different sizes.  The
+      default is that such warnings are generated.  Warnings are also
+      generated for subprogram pointers with different conventions.
+ 
+ ‘-gnatwZ’
+ 
+      ‘Suppress warnings on unchecked conversions.’
+ 
+      This switch suppresses warnings for unchecked conversions where the
+      types are known at compile time to have different sizes or
+      conventions.
+ 
+ ‘-gnatw.z’
+ 
+      ‘Activate warnings for size not a multiple of alignment.’
+ 
+      This switch activates warnings for cases of array and record types
+      with specified ‘Size’ and ‘Alignment’ attributes where the size is
+      not a multiple of the alignment, resulting in an object size that
+      is greater than the specified size.  The default is that such
+      warnings are generated.
+ 
+ ‘-gnatw.Z’
+ 
+      ‘Suppress warnings for size not a multiple of alignment.’
+ 
+      This switch suppresses warnings for cases of array and record types
+      with specified ‘Size’ and ‘Alignment’ attributes where the size is
+      not a multiple of the alignment, resulting in an object size that
+      is greater than the specified size.  The warning can also be
+      suppressed by giving an explicit ‘Object_Size’ value.
+ 
+ ‘-Wunused’
+ 
+      The warnings controlled by the ‘-gnatw’ switch are generated by the
+      front end of the compiler.  The GCC back end can provide additional
+      warnings and they are controlled by the ‘-W’ switch.  For example,
+      ‘-Wunused’ activates back end warnings for entities that are
+      declared but not referenced.
+ 
+ ‘-Wuninitialized’
+ 
+      Similarly, ‘-Wuninitialized’ activates the back end warning for
+      uninitialized variables.  This switch must be used in conjunction
+      with an optimization level greater than zero.
+ 
+ ‘-Wstack-usage=`len'’
+ 
+      Warn if the stack usage of a subprogram might be larger than ‘len’
+      bytes.  See *note Static Stack Usage Analysis: e6. for details.
+ 
+ ‘-Wall’
+ 
+      This switch enables most warnings from the GCC back end.  The code
+      generator detects a number of warning situations that are missed by
+      the GNAT front end, and this switch can be used to activate them.
+      The use of this switch also sets the default front-end warning mode
+      to ‘-gnatwa’, that is, most front-end warnings are activated as
+      well.
+ 
+ ‘-w’
+ 
+      Conversely, this switch suppresses warnings from the GCC back end.
+      The use of this switch also sets the default front-end warning mode
+      to ‘-gnatws’, that is, front-end warnings are suppressed as well.
+ 
+ ‘-Werror’
+ 
+      This switch causes warnings from the GCC back end to be treated as
+      errors.  The warning string still appears, but the warning messages
+      are counted as errors, and prevent the generation of an object
+      file.  The use of this switch also sets the default front-end
+      warning mode to ‘-gnatwe’, that is, front-end warning messages and
+      style check messages are treated as errors as well.
+ 
+ A string of warning parameters can be used in the same parameter.  For
+ example:
+ 
+      -gnatwaGe
+ 
+ will turn on all optional warnings except for unrecognized pragma
+ warnings, and also specify that warnings should be treated as errors.
+ 
+ When no switch ‘-gnatw’ is used, this is equivalent to:
+ 
+         * ‘-gnatw.a’
+ 
+         * ‘-gnatwB’
+ 
+         * ‘-gnatw.b’
+ 
+         * ‘-gnatwC’
+ 
+         * ‘-gnatw.C’
+ 
+         * ‘-gnatwD’
+ 
+         * ‘-gnatw.D’
+ 
+         * ‘-gnatwF’
+ 
+         * ‘-gnatw.F’
+ 
+         * ‘-gnatwg’
+ 
+         * ‘-gnatwH’
+ 
+         * ‘-gnatw.H’
+ 
+         * ‘-gnatwi’
+ 
+         * ‘-gnatwJ’
+ 
+         * ‘-gnatw.J’
+ 
+         * ‘-gnatwK’
+ 
+         * ‘-gnatw.K’
+ 
+         * ‘-gnatwL’
+ 
+         * ‘-gnatw.L’
+ 
+         * ‘-gnatwM’
+ 
+         * ‘-gnatw.m’
+ 
+         * ‘-gnatwn’
+ 
+         * ‘-gnatw.N’
+ 
+         * ‘-gnatwo’
+ 
+         * ‘-gnatw.O’
+ 
+         * ‘-gnatwP’
+ 
+         * ‘-gnatw.P’
+ 
+         * ‘-gnatwq’
+ 
+         * ‘-gnatw.Q’
+ 
+         * ‘-gnatwR’
+ 
+         * ‘-gnatw.R’
+ 
+         * ‘-gnatw.S’
+ 
+         * ‘-gnatwT’
+ 
+         * ‘-gnatw.t’
+ 
+         * ‘-gnatwU’
+ 
+         * ‘-gnatw.U’
+ 
+         * ‘-gnatwv’
+ 
+         * ‘-gnatw.v’
+ 
+         * ‘-gnatww’
+ 
+         * ‘-gnatw.W’
+ 
+         * ‘-gnatwx’
+ 
+         * ‘-gnatw.X’
+ 
+         * ‘-gnatwy’
+ 
+         * ‘-gnatw.Y’
+ 
+         * ‘-gnatwz’
+ 
+         * ‘-gnatw.z’
+ 
+ 
+ File: gnat_ugn.info,  Node: Debugging and Assertion Control,  Next: Validity Checking,  Prev: Warning Message Control,  Up: Compiler Switches
+ 
+ 4.3.4 Debugging and Assertion Control
+ -------------------------------------
+ 
+ ‘-gnata’
+ 
+      The ‘-gnata’ option is equivalent to the following
+      ‘Assertion_Policy’ pragma:
+ 
+           pragma Assertion_Policy (Check);
+ 
+      Which is a shorthand for:
+ 
+           pragma Assertion_Policy
+           --  Ada RM assertion pragmas
+             (Assert                    => Check,
+              Static_Predicate          => Check,
+              Dynamic_Predicate         => Check,
+              Pre                       => Check,
+              Pre'Class                 => Check,
+              Post                      => Check,
+              Post'Class                => Check,
+              Type_Invariant            => Check,
+              Type_Invariant'Class      => Check,
+              Default_Initial_Condition => Check,
+           --  GNAT specific assertion pragmas
+              Assert_And_Cut            => Check,
+              Assume                    => Check,
+              Contract_Cases            => Check,
+              Debug                     => Check,
+              Ghost                     => Check,
+              Initial_Condition         => Check,
+              Loop_Invariant            => Check,
+              Loop_Variant              => Check,
+              Postcondition             => Check,
+              Precondition              => Check,
+              Predicate                 => Check,
+              Refined_Post              => Check,
+              Subprogram_Variant        => Check);
+ 
+      The pragmas ‘Assert’ and ‘Debug’ normally have no effect and are
+      ignored.  This switch, where ‘a’ stands for ‘assert’, causes
+      pragmas ‘Assert’ and ‘Debug’ to be activated.  This switch also
+      causes preconditions, postconditions, subtype predicates, and type
+      invariants to be activated.
+ 
+      The pragmas have the form:
+ 
+           pragma Assert (<Boolean-expression> [, <static-string-expression>])
+           pragma Debug (<procedure call>)
+           pragma Type_Invariant (<type-local-name>, <Boolean-expression>)
+           pragma Predicate (<type-local-name>, <Boolean-expression>)
+           pragma Precondition (<Boolean-expression>, <string-expression>)
+           pragma Postcondition (<Boolean-expression>, <string-expression>)
+ 
+      The aspects have the form:
+ 
+           with [Pre|Post|Type_Invariant|Dynamic_Predicate|Static_Predicate]
+             => <Boolean-expression>;
+ 
+      The ‘Assert’ pragma causes ‘Boolean-expression’ to be tested.  If
+      the result is ‘True’, the pragma has no effect (other than possible
+      side effects from evaluating the expression).  If the result is
+      ‘False’, the exception ‘Assert_Failure’ declared in the package
+      ‘System.Assertions’ is raised (passing ‘static-string-expression’,
+      if present, as the message associated with the exception).  If no
+      string expression is given, the default is a string containing the
+      file name and line number of the pragma.
+ 
+      The ‘Debug’ pragma causes ‘procedure’ to be called.  Note that
+      ‘pragma Debug’ may appear within a declaration sequence, allowing
+      debugging procedures to be called between declarations.
+ 
+      For the aspect specification, the ‘Boolean-expression’ is
+      evaluated.  If the result is ‘True’, the aspect has no effect.  If
+      the result is ‘False’, the exception ‘Assert_Failure’ is raised.
+ 
+ 
+ File: gnat_ugn.info,  Node: Validity Checking,  Next: Style Checking,  Prev: Debugging and Assertion Control,  Up: Compiler Switches
+ 
+ 4.3.5 Validity Checking
+ -----------------------
+ 
+ The Ada Reference Manual defines the concept of invalid values (see RM
+ 13.9.1).  The primary source of invalid values is uninitialized
+ variables.  A scalar variable that is left uninitialized may contain an
+ invalid value; the concept of invalid does not apply to access or
+ composite types.
+ 
+ It is an error to read an invalid value, but the RM does not require
+ run-time checks to detect such errors, except for some minimal checking
+ to prevent erroneous execution (i.e.  unpredictable behavior).  This
+ corresponds to the ‘-gnatVd’ switch below, which is the default.  For
+ example, by default, if the expression of a case statement is invalid,
+ it will raise Constraint_Error rather than causing a wild jump, and if
+ an array index on the left-hand side of an assignment is invalid, it
+ will raise Constraint_Error rather than overwriting an arbitrary memory
+ location.
+ 
+ The ‘-gnatVa’ may be used to enable additional validity checks, which
+ are not required by the RM. These checks are often very expensive (which
+ is why the RM does not require them).  These checks are useful in
+ tracking down uninitialized variables, but they are not usually
+ recommended for production builds, and in particular we do not recommend
+ using these extra validity checking options in combination with
+ optimization, since this can confuse the optimizer.  If performance is a
+ consideration, leading to the need to optimize, then the validity
+ checking options should not be used.
+ 
+ The other ‘-gnatV`x'’ switches below allow finer-grained control; you
+ can enable whichever validity checks you desire.  However, for most
+ debugging purposes, ‘-gnatVa’ is sufficient, and the default ‘-gnatVd’
+ (i.e.  standard Ada behavior) is usually sufficient for non-debugging
+ use.
+ 
+ The ‘-gnatB’ switch tells the compiler to assume that all values are
+ valid (that is, within their declared subtype range) except in the
+ context of a use of the Valid attribute.  This means the compiler can
+ generate more efficient code, since the range of values is better known
+ at compile time.  However, an uninitialized variable can cause wild
+ jumps and memory corruption in this mode.
+ 
+ The ‘-gnatV`x'’ switch allows control over the validity checking mode as
+ described below.  The ‘x’ argument is a string of letters that indicate
+ validity checks that are performed or not performed in addition to the
+ default checks required by Ada as described above.
+ 
+ ‘-gnatVa’
+ 
+      ‘All validity checks.’
+ 
+      All validity checks are turned on.  That is, ‘-gnatVa’ is
+      equivalent to ‘gnatVcdefimoprst’.
+ 
+ ‘-gnatVc’
+ 
+      ‘Validity checks for copies.’
+ 
+      The right-hand side of assignments, and the (explicit) initializing
+      values of object declarations are validity checked.
+ 
+ ‘-gnatVd’
+ 
+      ‘Default (RM) validity checks.’
+ 
+      Some validity checks are required by Ada (see RM 13.9.1 (9-11));
+      these (and only these) validity checks are enabled by default.  For
+      case statements (and case expressions) that lack a “when others =>”
+      choice, a check is made that the value of the selector expression
+      belongs to its nominal subtype.  If it does not, Constraint_Error
+      is raised.  For assignments to array components (and for indexed
+      components in some other contexts), a check is made that each index
+      expression belongs to the corresponding index subtype.  If it does
+      not, Constraint_Error is raised.  Both these validity checks may be
+      turned off using switch ‘-gnatVD’.  They are turned on by default.
+      If ‘-gnatVD’ is specified, a subsequent switch ‘-gnatVd’ will leave
+      the checks turned on.  Switch ‘-gnatVD’ should be used only if you
+      are sure that all such expressions have valid values.  If you use
+      this switch and invalid values are present, then the program is
+      erroneous, and wild jumps or memory overwriting may occur.
+ 
+ ‘-gnatVe’
+ 
+      ‘Validity checks for scalar components.’
+ 
+      In the absence of this switch, assignments to scalar components of
+      enclosing record or array objects are not validity checked, even if
+      validity checks for assignments generally (‘-gnatVc’) are turned
+      on.  Specifying this switch enables such checks.  This switch has
+      no effect if the ‘-gnatVc’ switch is not specified.
+ 
+ ‘-gnatVf’
+ 
+      ‘Validity checks for floating-point values.’
+ 
+      Specifying this switch enables validity checking for floating-point
+      values in the same contexts where validity checking is enabled for
+      other scalar values.  In the absence of this switch, validity
+      checking is not performed for floating-point values.  This takes
+      precedence over other statements about performing validity checking
+      for scalar objects in various scenarios.  One way to look at it is
+      that if this switch is not set, then whenever any of the other
+      rules in this section use the word “scalar” they really mean
+      “scalar and not floating-point”.  If ‘-gnatVf’ is specified, then
+      validity checking also applies for floating-point values, and NaNs
+      and infinities are considered invalid, as well as out-of-range
+      values for constrained types.  The exact contexts in which
+      floating-point values are checked depends on the setting of other
+      options.  For example, ‘-gnatVif’ or ‘-gnatVfi’ (the order does not
+      matter) specifies that floating-point parameters of mode ‘in’
+      should be validity checked.
+ 
+ ‘-gnatVi’
+ 
+      ‘Validity checks for ‘‘in‘‘ mode parameters.’
+ 
+      Arguments for parameters of mode ‘in’ are validity checked in
+      function and procedure calls at the point of call.
+ 
+ ‘-gnatVm’
+ 
+      ‘Validity checks for ‘‘in out‘‘ mode parameters.’
+ 
+      Arguments for parameters of mode ‘in out’ are validity checked in
+      procedure calls at the point of call.  The ‘'m'’ here stands for
+      modify, since this concerns parameters that can be modified by the
+      call.  Note that there is no specific option to test ‘out’
+      parameters, but any reference within the subprogram will be tested
+      in the usual manner, and if an invalid value is copied back, any
+      reference to it will be subject to validity checking.
+ 
+ ‘-gnatVn’
+ 
+      ‘No validity checks.’
+ 
+      This switch turns off all validity checking, including the default
+      checking for case statements and left hand side subscripts.  Note
+      that the use of the switch ‘-gnatp’ suppresses all run-time checks,
+      including validity checks, and thus implies ‘-gnatVn’.  When this
+      switch is used, it cancels any other ‘-gnatV’ previously issued.
+ 
+ ‘-gnatVo’
+ 
+      ‘Validity checks for operator and attribute operands.’
+ 
+      Scalar arguments for predefined operators and for attributes are
+      validity checked.  This includes all operators in package
+      ‘Standard’, the shift operators defined as intrinsic in package
+      ‘Interfaces’ and operands for attributes such as ‘Pos’.  Checks are
+      also made on individual component values for composite comparisons,
+      and on the expressions in type conversions and qualified
+      expressions.  Checks are also made on explicit ranges using ‘..’
+      (e.g., slices, loops etc).
+ 
+ ‘-gnatVp’
+ 
+      ‘Validity checks for parameters.’
+ 
+      This controls the treatment of formal parameters within a
+      subprogram (as opposed to ‘-gnatVi’ and ‘-gnatVm’, which control
+      validity testing of actual parameters of a call).  If either of
+      these call options is specified, then normally an assumption is
+      made within a subprogram that the validity of any incoming formal
+      parameters of the corresponding mode(s) has already been checked at
+      the point of call and does not need rechecking.  If ‘-gnatVp’ is
+      set, then this assumption is not made and so their validity may be
+      checked (or rechecked) within the subprogram.  If neither of the
+      two call-related options is specified, then this switch has no
+      effect.
+ 
+ ‘-gnatVr’
+ 
+      ‘Validity checks for function returns.’
+ 
+      The expression in simple ‘return’ statements in functions is
+      validity checked.
+ 
+ ‘-gnatVs’
+ 
+      ‘Validity checks for subscripts.’
+ 
+      All subscript expressions are checked for validity, whatever
+      context they occur in (in default mode some subscripts are not
+      validity checked; for example, validity checking may be omitted in
+      some cases involving a read of a component of an array).
+ 
+ ‘-gnatVt’
+ 
+      ‘Validity checks for tests.’
+ 
+      Expressions used as conditions in ‘if’, ‘while’ or ‘exit’
+      statements are checked, as well as guard expressions in entry
+      calls.
+ 
+ The ‘-gnatV’ switch may be followed by a string of letters to turn on a
+ series of validity checking options.  For example, ‘-gnatVcr’ specifies
+ that in addition to the default validity checking, copies and function
+ return expressions are to be validity checked.  In order to make it
+ easier to specify the desired combination of effects, the upper case
+ letters ‘CDFIMORST’ may be used to turn off the corresponding lower case
+ option.  Thus ‘-gnatVaM’ turns on all validity checking options except
+ for checking of ‘in out’ parameters.
+ 
+ The specification of additional validity checking generates extra code
+ (and in the case of ‘-gnatVa’ the code expansion can be substantial).
+ However, these additional checks can be very useful in detecting
+ uninitialized variables, incorrect use of unchecked conversion, and
+ other errors leading to invalid values.  The use of pragma
+ ‘Initialize_Scalars’ is useful in conjunction with the extra validity
+ checking, since this ensures that wherever possible uninitialized
+ variables have invalid values.
+ 
+ See also the pragma ‘Validity_Checks’ which allows modification of the
+ validity checking mode at the program source level, and also allows for
+ temporary disabling of validity checks.
+ 
+ 
+ File: gnat_ugn.info,  Node: Style Checking,  Next: Run-Time Checks,  Prev: Validity Checking,  Up: Compiler Switches
+ 
+ 4.3.6 Style Checking
+ --------------------
+ 
+ The ‘-gnatyx’ switch causes the compiler to enforce specified style
+ rules.  A limited set of style rules has been used in writing the GNAT
+ sources themselves.  This switch allows user programs to activate all or
+ some of these checks.  If the source program fails a specified style
+ check, an appropriate message is given, preceded by the character
+ sequence ‘(style)’.  This message does not prevent successful
+ compilation (unless the ‘-gnatwe’ switch is used).
+ 
+ Note that this is by no means intended to be a general facility for
+ checking arbitrary coding standards.  It is simply an embedding of the
+ style rules we have chosen for the GNAT sources.  If you are starting a
+ project which does not have established style standards, you may find it
+ useful to adopt the entire set of GNAT coding standards, or some subset
+ of them.
+ 
+ The string ‘x’ is a sequence of letters or digits indicating the
+ particular style checks to be performed.  The following checks are
+ defined:
+ 
+ ‘-gnaty0’
+ 
+      ‘Specify indentation level.’
+ 
+      If a digit from 1-9 appears in the string after ‘-gnaty’ then
+      proper indentation is checked, with the digit indicating the
+      indentation level required.  A value of zero turns off this style
+      check.  The rule checks that the following constructs start on a
+      column that is a multiple of the alignment level:
+ 
+         * beginnings of declarations (except record component
+           declarations) and statements;
+ 
+         * beginnings of the structural components of compound
+           statements;
+ 
+         * ‘end’ keyword that completes the declaration of a program unit
+           declaration or body or that completes a compound statement.
+ 
+      Full line comments must be aligned with the ‘--’ starting on a
+      column that is a multiple of the alignment level, or they may be
+      aligned the same way as the following non-blank line (this is
+      useful when full line comments appear in the middle of a statement,
+      or they may be aligned with the source line on the previous
+      non-blank line.
+ 
+ ‘-gnatya’
+ 
+      ‘Check attribute casing.’
+ 
+      Attribute names, including the case of keywords such as ‘digits’
+      used as attributes names, must be written in mixed case, that is,
+      the initial letter and any letter following an underscore must be
+      uppercase.  All other letters must be lowercase.
+ 
+ ‘-gnatyA’
+ 
+      ‘Use of array index numbers in array attributes.’
+ 
+      When using the array attributes First, Last, Range, or Length, the
+      index number must be omitted for one-dimensional arrays and is
+      required for multi-dimensional arrays.
+ 
+ ‘-gnatyb’
+ 
+      ‘Blanks not allowed at statement end.’
+ 
+      Trailing blanks are not allowed at the end of statements.  The
+      purpose of this rule, together with h (no horizontal tabs), is to
+      enforce a canonical format for the use of blanks to separate source
+      tokens.
+ 
+ ‘-gnatyB’
+ 
+      ‘Check Boolean operators.’
+ 
+      The use of AND/OR operators is not permitted except in the cases of
+      modular operands, array operands, and simple stand-alone boolean
+      variables or boolean constants.  In all other cases ‘and then’/‘or
+      else’ are required.
+ 
+ ‘-gnatyc’
+ 
+      ‘Check comments, double space.’
+ 
+      Comments must meet the following set of rules:
+ 
+         * The ‘--’ that starts the column must either start in column
+           one, or else at least one blank must precede this sequence.
+ 
+         * Comments that follow other tokens on a line must have at least
+           one blank following the ‘--’ at the start of the comment.
+ 
+         * Full line comments must have at least two blanks following the
+           ‘--’ that starts the comment, with the following exceptions.
+ 
+         * A line consisting only of the ‘--’ characters, possibly
+           preceded by blanks is permitted.
+ 
+         * A comment starting with ‘--x’ where ‘x’ is a special character
+           is permitted.  This allows proper processing of the output
+           from specialized tools such as ‘gnatprep’ (where ‘--!’ is
+           used) and in earlier versions of the SPARK annotation language
+           (where ‘--#’ is used).  For the purposes of this rule, a
+           special character is defined as being in one of the ASCII
+           ranges ‘16#21#...16#2F#’ or ‘16#3A#...16#3F#’.  Note that this
+           usage is not permitted in GNAT implementation units (i.e.,
+           when ‘-gnatg’ is used).
+ 
+         * A line consisting entirely of minus signs, possibly preceded
+           by blanks, is permitted.  This allows the construction of box
+           comments where lines of minus signs are used to form the top
+           and bottom of the box.
+ 
+         * A comment that starts and ends with ‘--’ is permitted as long
+           as at least one blank follows the initial ‘--’.  Together with
+           the preceding rule, this allows the construction of box
+           comments, as shown in the following example:
+ 
+                ---------------------------
+                -- This is a box comment --
+                -- with two text lines.  --
+                ---------------------------
+ 
+ ‘-gnatyC’
+ 
+      ‘Check comments, single space.’
+ 
+      This is identical to ‘c’ except that only one space is required
+      following the ‘--’ of a comment instead of two.
+ 
+ ‘-gnatyd’
+ 
+      ‘Check no DOS line terminators present.’
+ 
+      All lines must be terminated by a single ASCII.LF character (in
+      particular the DOS line terminator sequence CR/LF is not allowed).
+ 
+ ‘-gnatyD’
+ 
+      ‘Check declared identifiers in mixed case.’
+ 
+      Declared identifiers must be in mixed case, as in
+      This_Is_An_Identifier.  Use -gnatyr in addition to ensure that
+      references match declarations.
+ 
+ ‘-gnatye’
+ 
+      ‘Check end/exit labels.’
+ 
+      Optional labels on ‘end’ statements ending subprograms and on
+      ‘exit’ statements exiting named loops, are required to be present.
+ 
+ ‘-gnatyf’
+ 
+      ‘No form feeds or vertical tabs.’
+ 
+      Neither form feeds nor vertical tab characters are permitted in the
+      source text.
+ 
+ ‘-gnatyg’
+ 
+      ‘GNAT style mode.’
+ 
+      The set of style check switches is set to match that used by the
+      GNAT sources.  This may be useful when developing code that is
+      eventually intended to be incorporated into GNAT. Currently this is
+      equivalent to ‘-gnatyydISux’) but additional style switches may be
+      added to this set in the future without advance notice.
+ 
+ ‘-gnatyh’
+ 
+      ‘No horizontal tabs.’
+ 
+      Horizontal tab characters are not permitted in the source text.
+      Together with the b (no blanks at end of line) check, this enforces
+      a canonical form for the use of blanks to separate source tokens.
+ 
+ ‘-gnatyi’
+ 
+      ‘Check if-then layout.’
+ 
+      The keyword ‘then’ must appear either on the same line as
+      corresponding ‘if’, or on a line on its own, lined up under the
+      ‘if’.
+ 
+ ‘-gnatyI’
+ 
+      ‘check mode IN keywords.’
+ 
+      Mode ‘in’ (the default mode) is not allowed to be given explicitly.
+      ‘in out’ is fine, but not ‘in’ on its own.
+ 
+ ‘-gnatyk’
+ 
+      ‘Check keyword casing.’
+ 
+      All keywords must be in lower case (with the exception of keywords
+      such as ‘digits’ used as attribute names to which this check does
+      not apply).  A single error is reported for each line breaking this
+      rule even if multiple casing issues exist on a same line.
+ 
+ ‘-gnatyl’
+ 
+      ‘Check layout.’
+ 
+      Layout of statement and declaration constructs must follow the
+      recommendations in the Ada Reference Manual, as indicated by the
+      form of the syntax rules.  For example an ‘else’ keyword must be
+      lined up with the corresponding ‘if’ keyword.
+ 
+      There are two respects in which the style rule enforced by this
+      check option are more liberal than those in the Ada Reference
+      Manual.  First in the case of record declarations, it is
+      permissible to put the ‘record’ keyword on the same line as the
+      ‘type’ keyword, and then the ‘end’ in ‘end record’ must line up
+      under ‘type’.  This is also permitted when the type declaration is
+      split on two lines.  For example, any of the following three
+      layouts is acceptable:
+ 
+           type q is record
+              a : integer;
+              b : integer;
+           end record;
+ 
+           type q is
+              record
+                 a : integer;
+                 b : integer;
+              end record;
+ 
+           type q is
+              record
+                 a : integer;
+                 b : integer;
+           end record;
+ 
+      Second, in the case of a block statement, a permitted alternative
+      is to put the block label on the same line as the ‘declare’ or
+      ‘begin’ keyword, and then line the ‘end’ keyword up under the block
+      label.  For example both the following are permitted:
+ 
+           Block : declare
+              A : Integer := 3;
+           begin
+              Proc (A, A);
+           end Block;
+ 
+           Block :
+              declare
+                 A : Integer := 3;
+              begin
+                 Proc (A, A);
+              end Block;
+ 
+      The same alternative format is allowed for loops.  For example,
+      both of the following are permitted:
+ 
+           Clear : while J < 10 loop
+              A (J) := 0;
+           end loop Clear;
+ 
+           Clear :
+              while J < 10 loop
+                 A (J) := 0;
+              end loop Clear;
+ 
+ ‘-gnatyL’
+ 
+      ‘Set maximum nesting level.’
+ 
+      The maximum level of nesting of constructs (including subprograms,
+      loops, blocks, packages, and conditionals) may not exceed the given
+      value ‘nnn’.  A value of zero disconnects this style check.
+ 
+ ‘-gnatym’
+ 
+      ‘Check maximum line length.’
+ 
+      The length of source lines must not exceed 79 characters, including
+      any trailing blanks.  The value of 79 allows convenient display on
+      an 80 character wide device or window, allowing for possible
+      special treatment of 80 character lines.  Note that this count is
+      of characters in the source text.  This means that a tab character
+      counts as one character in this count and a wide character sequence
+      counts as a single character (however many bytes are needed in the
+      encoding).
+ 
+ ‘-gnatyM’
+ 
+      ‘Set maximum line length.’
+ 
+      The length of lines must not exceed the given value ‘nnn’.  The
+      maximum value that can be specified is 32767.  If neither style
+      option for setting the line length is used, then the default is
+      255.  This also controls the maximum length of lexical elements,
+      where the only restriction is that they must fit on a single line.
+ 
+ ‘-gnatyn’
+ 
+      ‘Check casing of entities in Standard.’
+ 
+      Any identifier from Standard must be cased to match the
+      presentation in the Ada Reference Manual (for example, ‘Integer’
+      and ‘ASCII.NUL’).
+ 
+ ‘-gnatyN’
+ 
+      ‘Turn off all style checks.’
+ 
+      All style check options are turned off.
+ 
+ ‘-gnatyo’
+ 
+      ‘Check order of subprogram bodies.’
+ 
+      All subprogram bodies in a given scope (e.g., a package body) must
+      be in alphabetical order.  The ordering rule uses normal Ada rules
+      for comparing strings, ignoring casing of letters, except that if
+      there is a trailing numeric suffix, then the value of this suffix
+      is used in the ordering (e.g., Junk2 comes before Junk10).
+ 
+ ‘-gnatyO’
+ 
+      ‘Check that overriding subprograms are explicitly marked as such.’
+ 
+      This applies to all subprograms of a derived type that override a
+      primitive operation of the type, for both tagged and untagged
+      types.  In particular, the declaration of a primitive operation of
+      a type extension that overrides an inherited operation must carry
+      an overriding indicator.  Another case is the declaration of a
+      function that overrides a predefined operator (such as an equality
+      operator).
+ 
+ ‘-gnatyp’
+ 
+      ‘Check pragma casing.’
+ 
+      Pragma names must be written in mixed case, that is, the initial
+      letter and any letter following an underscore must be uppercase.
+      All other letters must be lowercase.  An exception is that
+      SPARK_Mode is allowed as an alternative for Spark_Mode.
+ 
+ ‘-gnatyr’
+ 
+      ‘Check references.’
+ 
+      All identifier references must be cased in the same way as the
+      corresponding declaration.  No specific casing style is imposed on
+      identifiers.  The only requirement is for consistency of references
+      with declarations.
+ 
+ ‘-gnatys’
+ 
+      ‘Check separate specs.’
+ 
+      Separate declarations (‘specs’) are required for subprograms (a
+      body is not allowed to serve as its own declaration).  The only
+      exception is that parameterless library level procedures are not
+      required to have a separate declaration.  This exception covers the
+      most frequent form of main program procedures.
+ 
+ ‘-gnatyS’
+ 
+      ‘Check no statements after then/else.’
+ 
+      No statements are allowed on the same line as a ‘then’ or ‘else’
+      keyword following the keyword in an ‘if’ statement.  ‘or else’ and
+      ‘and then’ are not affected, and a special exception allows a
+      pragma to appear after ‘else’.
+ 
+ ‘-gnatyt’
+ 
+      ‘Check token spacing.’
+ 
+      The following token spacing rules are enforced:
+ 
+         * The keywords ‘abs’ and ‘not’ must be followed by a space.
+ 
+         * The token ‘=>’ must be surrounded by spaces.
+ 
+         * The token ‘<>’ must be preceded by a space or a left
+           parenthesis.
+ 
+         * Binary operators other than ‘**’ must be surrounded by spaces.
+           There is no restriction on the layout of the ‘**’ binary
+           operator.
+ 
+         * Colon must be surrounded by spaces.
+ 
+         * Colon-equal (assignment, initialization) must be surrounded by
+           spaces.
+ 
+         * Comma must be the first non-blank character on the line, or be
+           immediately preceded by a non-blank character, and must be
+           followed by a space.
+ 
+         * If the token preceding a left parenthesis ends with a letter
+           or digit, then a space must separate the two tokens.
+ 
+         * If the token following a right parenthesis starts with a
+           letter or digit, then a space must separate the two tokens.
+ 
+         * A right parenthesis must either be the first non-blank
+           character on a line, or it must be preceded by a non-blank
+           character.
+ 
+         * A semicolon must not be preceded by a space, and must not be
+           followed by a non-blank character.
+ 
+         * A unary plus or minus may not be followed by a space.
+ 
+         * A vertical bar must be surrounded by spaces.
+ 
+      Exactly one blank (and no other white space) must appear between a
+      ‘not’ token and a following ‘in’ token.
+ 
+ ‘-gnatyu’
+ 
+      ‘Check unnecessary blank lines.’
+ 
+      Unnecessary blank lines are not allowed.  A blank line is
+      considered unnecessary if it appears at the end of the file, or if
+      more than one blank line occurs in sequence.
+ 
+ ‘-gnatyx’
+ 
+      ‘Check extra parentheses.’
+ 
+      Unnecessary extra level of parentheses (C-style) are not allowed
+      around conditions in ‘if’ statements, ‘while’ statements and ‘exit’
+      statements.
+ 
+ ‘-gnatyy’
+ 
+      ‘Set all standard style check options.’
+ 
+      This is equivalent to ‘gnaty3aAbcefhiklmnprst’, that is all
+      checking options enabled with the exception of ‘-gnatyB’,
+      ‘-gnatyd’, ‘-gnatyI’, ‘-gnatyLnnn’, ‘-gnatyo’, ‘-gnatyO’,
+      ‘-gnatyS’, ‘-gnatyu’, and ‘-gnatyx’.
+ 
+ ‘-gnaty-’
+ 
+      ‘Remove style check options.’
+ 
+      This causes any subsequent options in the string to act as
+      canceling the corresponding style check option.  To cancel maximum
+      nesting level control, use the ‘L’ parameter without any integer
+      value after that, because any digit following ‘-’ in the parameter
+      string of the ‘-gnaty’ option will be treated as canceling the
+      indentation check.  The same is true for the ‘M’ parameter.  ‘y’
+      and ‘N’ parameters are not allowed after ‘-’.
+ 
+ ‘-gnaty+’
+ 
+      ‘Enable style check options.’
+ 
+      This causes any subsequent options in the string to enable the
+      corresponding style check option.  That is, it cancels the effect
+      of a previous -, if any.
+ 
+ In the above rules, appearing in column one is always permitted, that
+ is, counts as meeting either a requirement for a required preceding
+ space, or as meeting a requirement for no preceding space.
+ 
+ Appearing at the end of a line is also always permitted, that is, counts
+ as meeting either a requirement for a following space, or as meeting a
+ requirement for no following space.
+ 
+ If any of these style rules is violated, a message is generated giving
+ details on the violation.  The initial characters of such messages are
+ always ‘‘(style)’’.  Note that these messages are treated as warning
+ messages, so they normally do not prevent the generation of an object
+ file.  The ‘-gnatwe’ switch can be used to treat warning messages,
+ including style messages, as fatal errors.
+ 
+ The switch ‘-gnaty’ on its own (that is not followed by any letters or
+ digits) is equivalent to the use of ‘-gnatyy’ as described above, that
+ is all built-in standard style check options are enabled.
+ 
+ The switch ‘-gnatyN’ clears any previously set style checks.
+ 
+ 
+ File: gnat_ugn.info,  Node: Run-Time Checks,  Next: Using gcc for Syntax Checking,  Prev: Style Checking,  Up: Compiler Switches
+ 
+ 4.3.7 Run-Time Checks
+ ---------------------
+ 
+ By default, the following checks are suppressed: stack overflow checks,
+ and checks for access before elaboration on subprogram calls.  All other
+ checks, including overflow checks, range checks and array bounds checks,
+ are turned on by default.  The following ‘gcc’ switches refine this
+ default behavior.
+ 
+ ‘-gnatp’
+ 
+      This switch causes the unit to be compiled as though ‘pragma
+      Suppress (All_checks)’ had been present in the source.  Validity
+      checks are also eliminated (in other words ‘-gnatp’ also implies
+      ‘-gnatVn’.  Use this switch to improve the performance of the code
+      at the expense of safety in the presence of invalid data or program
+      bugs.
+ 
+      Note that when checks are suppressed, the compiler is allowed, but
+      not required, to omit the checking code.  If the run-time cost of
+      the checking code is zero or near-zero, the compiler will generate
+      it even if checks are suppressed.  In particular, if the compiler
+      can prove that a certain check will necessarily fail, it will
+      generate code to do an unconditional ‘raise’, even if checks are
+      suppressed.  The compiler warns in this case.  Another case in
+      which checks may not be eliminated is when they are embedded in
+      certain run-time routines such as math library routines.
+ 
+      Of course, run-time checks are omitted whenever the compiler can
+      prove that they will not fail, whether or not checks are
+      suppressed.
+ 
+      Note that if you suppress a check that would have failed, program
+      execution is erroneous, which means the behavior is totally
+      unpredictable.  The program might crash, or print wrong answers, or
+      do anything else.  It might even do exactly what you wanted it to
+      do (and then it might start failing mysteriously next week or next
+      year).  The compiler will generate code based on the assumption
+      that the condition being checked is true, which can result in
+      erroneous execution if that assumption is wrong.
+ 
+      The checks subject to suppression include all the checks defined by
+      the Ada standard, the additional implementation defined checks
+      ‘Alignment_Check’, ‘Duplicated_Tag_Check’, ‘Predicate_Check’,
+      ‘Container_Checks’, ‘Tampering_Check’, and ‘Validity_Check’, as
+      well as any checks introduced using ‘pragma Check_Name’.  Note that
+      ‘Atomic_Synchronization’ is not automatically suppressed by use of
+      this option.
+ 
+      If the code depends on certain checks being active, you can use
+      pragma ‘Unsuppress’ either as a configuration pragma or as a local
+      pragma to make sure that a specified check is performed even if
+      ‘gnatp’ is specified.
+ 
+      The ‘-gnatp’ switch has no effect if a subsequent ‘-gnat-p’ switch
+      appears.
+ 
+ ‘-gnat-p’
+ 
+      This switch cancels the effect of a previous ‘gnatp’ switch.
+ 
+ ‘-gnato??’
+ 
+      This switch controls the mode used for computing intermediate
+      arithmetic integer operations, and also enables overflow checking.
+      For a full description of overflow mode and checking control, see
+      the ‘Overflow Check Handling in GNAT’ appendix in this User’s
+      Guide.
+ 
+      Overflow checks are always enabled by this switch.  The argument
+      controls the mode, using the codes
+ 
+      ‘1 = STRICT’
+ 
+           In STRICT mode, intermediate operations are always done using
+           the base type, and overflow checking ensures that the result
+           is within the base type range.
+ 
+      ‘2 = MINIMIZED’
+ 
+           In MINIMIZED mode, overflows in intermediate operations are
+           avoided where possible by using a larger integer type for the
+           computation (typically ‘Long_Long_Integer’).  Overflow
+           checking ensures that the result fits in this larger integer
+           type.
+ 
+      ‘3 = ELIMINATED’
+ 
+           In ELIMINATED mode, overflows in intermediate operations are
+           avoided by using multi-precision arithmetic.  In this case,
+           overflow checking has no effect on intermediate operations
+           (since overflow is impossible).
+ 
+      If two digits are present after ‘-gnato’ then the first digit sets
+      the mode for expressions outside assertions, and the second digit
+      sets the mode for expressions within assertions.  Here assertions
+      is used in the technical sense (which includes for example
+      precondition and postcondition expressions).
+ 
+      If one digit is present, the corresponding mode is applicable to
+      both expressions within and outside assertion expressions.
+ 
+      If no digits are present, the default is to enable overflow checks
+      and set STRICT mode for both kinds of expressions.  This is
+      compatible with the use of ‘-gnato’ in previous versions of GNAT.
+ 
+      Note that the ‘-gnato??’ switch does not affect the code generated
+      for any floating-point operations; it applies only to integer
+      semantics.  For floating-point, GNAT has the ‘Machine_Overflows’
+      attribute set to ‘False’ and the normal mode of operation is to
+      generate IEEE NaN and infinite values on overflow or invalid
+      operations (such as dividing 0.0 by 0.0).
+ 
+      The reason that we distinguish overflow checking from other kinds
+      of range constraint checking is that a failure of an overflow
+      check, unlike for example the failure of a range check, can result
+      in an incorrect value, but cannot cause random memory destruction
+      (like an out of range subscript), or a wild jump (from an out of
+      range case value).  Overflow checking is also quite expensive in
+      time and space, since in general it requires the use of double
+      length arithmetic.
+ 
+      Note again that the default is ‘-gnato11’ (equivalent to
+      ‘-gnato1’), so overflow checking is performed in STRICT mode by
+      default.
+ 
+ ‘-gnatE’
+ 
+      Enables dynamic checks for access-before-elaboration on subprogram
+      calls and generic instantiations.  Note that ‘-gnatE’ is not
+      necessary for safety, because in the default mode, GNAT ensures
+      statically that the checks would not fail.  For full details of the
+      effect and use of this switch, *note Compiling with gcc: c7.
+ 
+ ‘-fstack-check’
+ 
+      Activates stack overflow checking.  For full details of the effect
+      and use of this switch see *note Stack Overflow Checking: e5.
+ 
+ The setting of these switches only controls the default setting of the
+ checks.  You may modify them using either ‘Suppress’ (to remove checks)
+ or ‘Unsuppress’ (to add back suppressed checks) pragmas in the program
+ source.
+ 
+ 
+ File: gnat_ugn.info,  Node: Using gcc for Syntax Checking,  Next: Using gcc for Semantic Checking,  Prev: Run-Time Checks,  Up: Compiler Switches
+ 
+ 4.3.8 Using ‘gcc’ for Syntax Checking
+ -------------------------------------
+ 
+ ‘-gnats’
+ 
+      The ‘s’ stands for ‘syntax’.
+ 
+      Run GNAT in syntax checking only mode.  For example, the command
+ 
+           $ gcc -c -gnats x.adb
+ 
+      compiles file ‘x.adb’ in syntax-check-only mode.  You can check a
+      series of files in a single command , and can use wildcards to
+      specify such a group of files.  Note that you must specify the ‘-c’
+      (compile only) flag in addition to the ‘-gnats’ flag.
+ 
+      You may use other switches in conjunction with ‘-gnats’.  In
+      particular, ‘-gnatl’ and ‘-gnatv’ are useful to control the format
+      of any generated error messages.
+ 
+      When the source file is empty or contains only empty lines and/or
+      comments, the output is a warning:
+ 
+           $ gcc -c -gnats -x ada toto.txt
+           toto.txt:1:01: warning: empty file, contains no compilation units
+           $
+ 
+      Otherwise, the output is simply the error messages, if any.  No
+      object file or ALI file is generated by a syntax-only compilation.
+      Also, no units other than the one specified are accessed.  For
+      example, if a unit ‘X’ ‘with’s a unit ‘Y’, compiling unit ‘X’ in
+      syntax check only mode does not access the source file containing
+      unit ‘Y’.
+ 
+      Normally, GNAT allows only a single unit in a source file.
+      However, this restriction does not apply in syntax-check-only mode,
+      and it is possible to check a file containing multiple compilation
+      units concatenated together.  This is primarily used by the
+      ‘gnatchop’ utility (*note Renaming Files with gnatchop: 1d.).
+ 
+ 
+ File: gnat_ugn.info,  Node: Using gcc for Semantic Checking,  Next: Compiling Different Versions of Ada,  Prev: Using gcc for Syntax Checking,  Up: Compiler Switches
+ 
+ 4.3.9 Using ‘gcc’ for Semantic Checking
+ ---------------------------------------
+ 
+ ‘-gnatc’
+ 
+      The ‘c’ stands for ‘check’.  Causes the compiler to operate in
+      semantic check mode, with full checking for all illegalities
+      specified in the Ada Reference Manual, but without generation of
+      any object code (no object file is generated).
+ 
+      Because dependent files must be accessed, you must follow the GNAT
+      semantic restrictions on file structuring to operate in this mode:
+ 
+         * The needed source files must be accessible (see *note Search
+           Paths and the Run-Time Library (RTL): 73.).
+ 
+         * Each file must contain only one compilation unit.
+ 
+         * The file name and unit name must match (*note File Naming
+           Rules: 3b.).
+ 
+      The output consists of error messages as appropriate.  No object
+      file is generated.  An ‘ALI’ file is generated for use in the
+      context of cross-reference tools, but this file is marked as not
+      being suitable for binding (since no object file is generated).
+      The checking corresponds exactly to the notion of legality in the
+      Ada Reference Manual.
+ 
+      Any unit can be compiled in semantics-checking-only mode, including
+      units that would not normally be compiled (subunits, and
+      specifications where a separate body is present).
+ 
+ 
+ File: gnat_ugn.info,  Node: Compiling Different Versions of Ada,  Next: Character Set Control,  Prev: Using gcc for Semantic Checking,  Up: Compiler Switches
+ 
+ 4.3.10 Compiling Different Versions of Ada
+ ------------------------------------------
+ 
+ The switches described in this section allow you to explicitly specify
+ the version of the Ada language that your programs are written in.  The
+ default mode is Ada 2012, but you can also specify Ada 95, Ada 2005
+ mode, or indicate Ada 83 compatibility mode.
+ 
+ ‘-gnat83’ (Ada 83 Compatibility Mode)
+ 
+      Although GNAT is primarily an Ada 95 / Ada 2005 compiler, this
+      switch specifies that the program is to be compiled in Ada 83 mode.
+      With ‘-gnat83’, GNAT rejects most post-Ada 83 extensions and
+      applies Ada 83 semantics where this can be done easily.  It is not
+      possible to guarantee this switch does a perfect job; some subtle
+      tests, such as are found in earlier ACVC tests (and that have been
+      removed from the ACATS suite for Ada 95), might not compile
+      correctly.  Nevertheless, this switch may be useful in some
+      circumstances, for example where, due to contractual reasons,
+      existing code needs to be maintained using only Ada 83 features.
+ 
+      With few exceptions (most notably the need to use ‘<>’ on
+      unconstrained generic formal parameters, the use of the new Ada 95
+      / Ada 2005 reserved words, and the use of packages with optional
+      bodies), it is not necessary to specify the ‘-gnat83’ switch when
+      compiling Ada 83 programs, because, with rare exceptions, Ada 95
+      and Ada 2005 are upwardly compatible with Ada 83.  Thus a correct
+      Ada 83 program is usually also a correct program in these later
+      versions of the language standard.  For further information please
+      refer to the ‘Compatibility and Porting Guide’ chapter in the ‘GNAT
+      Reference Manual’.
+ 
+ ‘-gnat95’ (Ada 95 mode)
+ 
+      This switch directs the compiler to implement the Ada 95 version of
+      the language.  Since Ada 95 is almost completely upwards compatible
+      with Ada 83, Ada 83 programs may generally be compiled using this
+      switch (see the description of the ‘-gnat83’ switch for further
+      information about Ada 83 mode).  If an Ada 2005 program is compiled
+      in Ada 95 mode, uses of the new Ada 2005 features will cause error
+      messages or warnings.
+ 
+      This switch also can be used to cancel the effect of a previous
+      ‘-gnat83’, ‘-gnat05/2005’, or ‘-gnat12/2012’ switch earlier in the
+      command line.
+ 
+ ‘-gnat05’ or ‘-gnat2005’ (Ada 2005 mode)
+ 
+      This switch directs the compiler to implement the Ada 2005 version
+      of the language, as documented in the official Ada standards
+      document.  Since Ada 2005 is almost completely upwards compatible
+      with Ada 95 (and thus also with Ada 83), Ada 83 and Ada 95 programs
+      may generally be compiled using this switch (see the description of
+      the ‘-gnat83’ and ‘-gnat95’ switches for further information).
+ 
+ ‘-gnat12’ or ‘-gnat2012’ (Ada 2012 mode)
+ 
+      This switch directs the compiler to implement the Ada 2012 version
+      of the language (also the default).  Since Ada 2012 is almost
+      completely upwards compatible with Ada 2005 (and thus also with Ada
+      83, and Ada 95), Ada 83 and Ada 95 programs may generally be
+      compiled using this switch (see the description of the ‘-gnat83’,
+      ‘-gnat95’, and ‘-gnat05/2005’ switches for further information).
+ 
+ ‘-gnat2022’ (Ada 2022 mode)
+ 
+      This switch directs the compiler to implement the Ada 2022 version
+      of the language.
+ 
+ ‘-gnatX0’ (Enable GNAT Extensions)
+ 
+      This switch directs the compiler to implement the latest version of
+      the language (currently Ada 2022) and also to enable certain GNAT
+      implementation extensions that are not part of any Ada standard.
+      For a full list of these extensions, see the GNAT reference manual,
+      ‘Pragma Extensions_Allowed’.
+ 
+ ‘-gnatX’ (Enable core GNAT Extensions)
+ 
+      This switch is similar to -gnatX0 except that only some, not all,
+      of the GNAT-defined language extensions are enabled.  For a list of
+      the extensions enabled by this switch, see the GNAT reference
+      manual ‘Pragma Extensions_Allowed’ and the description of that
+      pragma’s “On” (as opposed to “All”) argument.
+ 
+ 
+ File: gnat_ugn.info,  Node: Character Set Control,  Next: File Naming Control,  Prev: Compiling Different Versions of Ada,  Up: Compiler Switches
+ 
+ 4.3.11 Character Set Control
+ ----------------------------
+ 
+ ‘-gnati`c'’
+ 
+      Normally GNAT recognizes the Latin-1 character set in source
+      program identifiers, as described in the Ada Reference Manual.
+      This switch causes GNAT to recognize alternate character sets in
+      identifiers.  ‘c’ is a single character indicating the character
+      set, as follows:
+ 
+      ‘1’            ISO 8859-1 (Latin-1) identifiers
+                     
+                     
+      ‘2’            ISO 8859-2 (Latin-2) letters allowed in identifiers
+                     
+                     
+      ‘3’            ISO 8859-3 (Latin-3) letters allowed in identifiers
+                     
+                     
+      ‘4’            ISO 8859-4 (Latin-4) letters allowed in identifiers
+                     
+                     
+      ‘5’            ISO 8859-5 (Cyrillic) letters allowed in identifiers
+                     
+                     
+      ‘9’            ISO 8859-15 (Latin-9) letters allowed in identifiers
+                     
+                     
+      ‘p’            IBM PC letters (code page 437) allowed in identifiers
+                     
+                     
+      ‘8’            IBM PC letters (code page 850) allowed in identifiers
+                     
+                     
+      ‘f’            Full upper-half codes allowed in identifiers
+                     
+                     
+      ‘n’            No upper-half codes allowed in identifiers
+                     
+                     
+      ‘w’            Wide-character codes (that is, codes greater than 255)
+                     allowed in identifiers
+                     
+ 
+      See *note Foreign Language Representation: 23. for full details on
+      the implementation of these character sets.
+ 
+ ‘-gnatW`e'’
+ 
+      Specify the method of encoding for wide characters.  ‘e’ is one of
+      the following:
+ 
+      ‘h’            Hex encoding (brackets coding also recognized)
+                     
+                     
+      ‘u’            Upper half encoding (brackets encoding also recognized)
+                     
+                     
+      ‘s’            Shift/JIS encoding (brackets encoding also recognized)
+                     
+                     
+      ‘e’            EUC encoding (brackets encoding also recognized)
+                     
+                     
+      ‘8’            UTF-8 encoding (brackets encoding also recognized)
+                     
+                     
+      ‘b’            Brackets encoding only (default value)
+                     
+ 
+      For full details on these encoding methods see *note Wide_Character
+      Encodings: 37.  Note that brackets coding is always accepted, even
+      if one of the other options is specified, so for example ‘-gnatW8’
+      specifies that both brackets and UTF-8 encodings will be
+      recognized.  The units that are with’ed directly or indirectly will
+      be scanned using the specified representation scheme, and so if one
+      of the non-brackets scheme is used, it must be used consistently
+      throughout the program.  However, since brackets encoding is always
+      recognized, it may be conveniently used in standard libraries,
+      allowing these libraries to be used with any of the available
+      coding schemes.
+ 
+      Note that brackets encoding only applies to program text.  Within
+      comments, brackets are considered to be normal graphic characters,
+      and bracket sequences are never recognized as wide characters.
+ 
+      If no ‘-gnatW?’ parameter is present, then the default
+      representation is normally Brackets encoding only.  However, if the
+      first three characters of the file are 16#EF# 16#BB# 16#BF# (the
+      standard byte order mark or BOM for UTF-8), then these three
+      characters are skipped and the default representation for the file
+      is set to UTF-8.
+ 
+      Note that the wide character representation that is specified
+      (explicitly or by default) for the main program also acts as the
+      default encoding used for Wide_Text_IO files if not specifically
+      overridden by a WCEM form parameter.
+ 
+ When no ‘-gnatW?’ is specified, then characters (other than wide
+ characters represented using brackets notation) are treated as 8-bit
+ Latin-1 codes.  The codes recognized are the Latin-1 graphic characters,
+ and ASCII format effectors (CR, LF, HT, VT). Other lower half control
+ characters in the range 16#00#..16#1F# are not accepted in program text
+ or in comments.  Upper half control characters (16#80#..16#9F#) are
+ rejected in program text, but allowed and ignored in comments.  Note in
+ particular that the Next Line (NEL) character whose encoding is 16#85#
+ is not recognized as an end of line in this default mode.  If your
+ source program contains instances of the NEL character used as a line
+ terminator, you must use UTF-8 encoding for the whole source program.
+ In default mode, all lines must be ended by a standard end of line
+ sequence (CR, CR/LF, or LF).
+ 
+ Note that the convention of simply accepting all upper half characters
+ in comments means that programs that use standard ASCII for program
+ text, but UTF-8 encoding for comments are accepted in default mode,
+ providing that the comments are ended by an appropriate (CR, or CR/LF,
+ or LF) line terminator.  This is a common mode for many programs with
+ foreign language comments.
+ 
+ 
+ File: gnat_ugn.info,  Node: File Naming Control,  Next: Subprogram Inlining Control,  Prev: Character Set Control,  Up: Compiler Switches
+ 
+ 4.3.12 File Naming Control
+ --------------------------
+ 
+ ‘-gnatk`n'’
+ 
+      Activates file name ‘krunching’.  ‘n’, a decimal integer in the
+      range 1-999, indicates the maximum allowable length of a file name
+      (not including the ‘.ads’ or ‘.adb’ extension).  The default is not
+      to enable file name krunching.
+ 
+      For the source file naming rules, *note File Naming Rules: 3b.
+ 
+ 
+ File: gnat_ugn.info,  Node: Subprogram Inlining Control,  Next: Auxiliary Output Control,  Prev: File Naming Control,  Up: Compiler Switches
+ 
+ 4.3.13 Subprogram Inlining Control
+ ----------------------------------
+ 
+ ‘-gnatn[12]’
+ 
+      The ‘n’ here is intended to suggest the first syllable of the word
+      ‘inline’.  GNAT recognizes and processes ‘Inline’ pragmas.
+      However, for inlining to actually occur, optimization must be
+      enabled and, by default, inlining of subprograms across units is
+      not performed.  If you want to additionally enable inlining of
+      subprograms specified by pragma ‘Inline’ across units, you must
+      also specify this switch.
+ 
+      In the absence of this switch, GNAT does not attempt inlining
+      across units and does not access the bodies of subprograms for
+      which ‘pragma Inline’ is specified if they are not in the current
+      unit.
+ 
+      You can optionally specify the inlining level: 1 for moderate
+      inlining across units, which is a good compromise between
+      compilation times and performances at run time, or 2 for full
+      inlining across units, which may bring about longer compilation
+      times.  If no inlining level is specified, the compiler will pick
+      it based on the optimization level: 1 for ‘-O1’, ‘-O2’ or ‘-Os’ and
+      2 for ‘-O3’.
+ 
+      If you specify this switch the compiler will access these bodies,
+      creating an extra source dependency for the resulting object file,
+      and where possible, the call will be inlined.  For further details
+      on when inlining is possible see *note Inlining of Subprograms:
+      100.
+ 
+ ‘-gnatN’
+ 
+      This switch activates front-end inlining which also generates
+      additional dependencies.
+ 
+      When using a gcc-based back end, then the use of ‘-gnatN’ is
+      deprecated, and the use of ‘-gnatn’ is preferred.  Historically
+      front end inlining was more extensive than the gcc back end
+      inlining, but that is no longer the case.
+ 
+ 
+ File: gnat_ugn.info,  Node: Auxiliary Output Control,  Next: Debugging Control,  Prev: Subprogram Inlining Control,  Up: Compiler Switches
+ 
+ 4.3.14 Auxiliary Output Control
+ -------------------------------
+ 
+ ‘-gnatu’
+ 
+      Print a list of units required by this compilation on ‘stdout’.
+      The listing includes all units on which the unit being compiled
+      depends either directly or indirectly.
+ 
+ ‘-pass-exit-codes’
+ 
+      If this switch is not used, the exit code returned by ‘gcc’ when
+      compiling multiple files indicates whether all source files have
+      been successfully used to generate object files or not.
+ 
+      When ‘-pass-exit-codes’ is used, ‘gcc’ exits with an extended exit
+      status and allows an integrated development environment to better
+      react to a compilation failure.  Those exit status are:
+ 
+      ‘5’            There was an error in at least one source file.
+                     
+                     
+      ‘3’            At least one source file did not generate an object file.
+                     
+                     
+      ‘2’            The compiler died unexpectedly (internal error for example).
+                     
+                     
+      ‘0’            An object file has been generated for every source file.
+                     
+ 
+ 
+ File: gnat_ugn.info,  Node: Debugging Control,  Next: Exception Handling Control,  Prev: Auxiliary Output Control,  Up: Compiler Switches
+ 
+ 4.3.15 Debugging Control
+ ------------------------
+ 
+ ‘-gnatd`x'’
+ 
+      Activate internal debugging switches.  ‘x’ is a letter or digit, or
+      string of letters or digits, which specifies the type of debugging
+      outputs desired.  Normally these are used only for internal
+      development or system debugging purposes.  You can find full
+      documentation for these switches in the body of the ‘Debug’ unit in
+      the compiler source file ‘debug.adb’.
+ 
+ ‘-gnatG[=`nn']’
+ 
+      This switch causes the compiler to generate auxiliary output
+      containing a pseudo-source listing of the generated expanded code.
+      Like most Ada compilers, GNAT works by first transforming the high
+      level Ada code into lower level constructs.  For example, tasking
+      operations are transformed into calls to the tasking run-time
+      routines.  A unique capability of GNAT is to list this expanded
+      code in a form very close to normal Ada source.  This is very
+      useful in understanding the implications of various Ada usage on
+      the efficiency of the generated code.  There are many cases in Ada
+      (e.g., the use of controlled types), where simple Ada statements
+      can generate a lot of run-time code.  By using ‘-gnatG’ you can
+      identify these cases, and consider whether it may be desirable to
+      modify the coding approach to improve efficiency.
+ 
+      The optional parameter ‘nn’ if present after -gnatG specifies an
+      alternative maximum line length that overrides the normal default
+      of 72.  This value is in the range 40-999999, values less than 40
+      being silently reset to 40.  The equal sign is optional.
+ 
+      The format of the output is very similar to standard Ada source,
+      and is easily understood by an Ada programmer.  The following
+      special syntactic additions correspond to low level features used
+      in the generated code that do not have any exact analogies in pure
+      Ada source form.  The following is a partial list of these special
+      constructions.  See the spec of package ‘Sprint’ in file
+      ‘sprint.ads’ for a full list.
+ 
+      If the switch ‘-gnatL’ is used in conjunction with ‘-gnatG’, then
+      the original source lines are interspersed in the expanded source
+      (as comment lines with the original line number).
+ 
+      ‘new XXX [storage_pool = YYY]’
+ 
+           Shows the storage pool being used for an allocator.
+ 
+      ‘at end PROCEDURE-NAME;’
+ 
+           Shows the finalization (cleanup) procedure for a scope.
+ 
+      ‘(if EXPR then EXPR else EXPR)’
+ 
+           Conditional expression equivalent to the ‘x?y:z’ construction
+           in C.
+ 
+      ‘TARGET^(SOURCE)’
+ 
+           A conversion with floating-point truncation instead of
+           rounding.
+ 
+      ‘TARGET?(SOURCE)’
+ 
+           A conversion that bypasses normal Ada semantic checking.  In
+           particular enumeration types and fixed-point types are treated
+           simply as integers.
+ 
+      ‘TARGET?^(SOURCE)’
+ 
+           Combines the above two cases.
+ 
+      ‘X #/ Y’
+ 
+      ‘X #mod Y’
+ 
+      ‘X # Y’
+ 
+      ‘X #rem Y’
+ 
+           A division or multiplication of fixed-point values which are
+           treated as integers without any kind of scaling.
+ 
+      ‘free EXPR [storage_pool = XXX]’
+ 
+           Shows the storage pool associated with a ‘free’ statement.
+ 
+      ‘[subtype or type declaration]’
+ 
+           Used to list an equivalent declaration for an internally
+           generated type that is referenced elsewhere in the listing.
+ 
+      ‘freeze TYPE-NAME [ACTIONS]’
+ 
+           Shows the point at which ‘type-name’ is frozen, with possible
+           associated actions to be performed at the freeze point.
+ 
+      ‘reference ITYPE’
+ 
+           Reference (and hence definition) to internal type ‘itype’.
+ 
+      ‘FUNCTION-NAME! (ARG, ARG, ARG)’
+ 
+           Intrinsic function call.
+ 
+      ‘LABEL-NAME : label’
+ 
+           Declaration of label ‘labelname’.
+ 
+      ‘#$ SUBPROGRAM-NAME’
+ 
+           An implicit call to a run-time support routine (to meet the
+           requirement of H.3.1(9) in a convenient manner).
+ 
+      ‘EXPR && EXPR && EXPR ... && EXPR’
+ 
+           A multiple concatenation (same effect as ‘expr’ & ‘expr’ &
+           ‘expr’, but handled more efficiently).
+ 
+      ‘[constraint_error]’
+ 
+           Raise the ‘Constraint_Error’ exception.
+ 
+      ‘EXPRESSION'reference’
+ 
+           A pointer to the result of evaluating {expression}.
+ 
+      ‘TARGET-TYPE!(SOURCE-EXPRESSION)’
+ 
+           An unchecked conversion of ‘source-expression’ to
+           ‘target-type’.
+ 
+      ‘[NUMERATOR/DENOMINATOR]’
+ 
+           Used to represent internal real literals (that) have no exact
+           representation in base 2-16 (for example, the result of
+           compile time evaluation of the expression 1.0/27.0).
+ 
+ ‘-gnatD[=nn]’
+ 
+      When used in conjunction with ‘-gnatG’, this switch causes the
+      expanded source, as described above for ‘-gnatG’ to be written to
+      files with names ‘xxx.dg’, where ‘xxx’ is the normal file name,
+      instead of to the standard output file.  For example, if the source
+      file name is ‘hello.adb’, then a file ‘hello.adb.dg’ will be
+      written.  The debugging information generated by the ‘gcc’ ‘-g’
+      switch will refer to the generated ‘xxx.dg’ file.  This allows you
+      to do source level debugging using the generated code which is
+      sometimes useful for complex code, for example to find out exactly
+      which part of a complex construction raised an exception.  This
+      switch also suppresses generation of cross-reference information
+      (see ‘-gnatx’) since otherwise the cross-reference information
+      would refer to the ‘.dg’ file, which would cause confusion since
+      this is not the original source file.
+ 
+      Note that ‘-gnatD’ actually implies ‘-gnatG’ automatically, so it
+      is not necessary to give both options.  In other words ‘-gnatD’ is
+      equivalent to ‘-gnatDG’).
+ 
+      If the switch ‘-gnatL’ is used in conjunction with ‘-gnatDG’, then
+      the original source lines are interspersed in the expanded source
+      (as comment lines with the original line number).
+ 
+      The optional parameter ‘nn’ if present after -gnatD specifies an
+      alternative maximum line length that overrides the normal default
+      of 72.  This value is in the range 40-999999, values less than 40
+      being silently reset to 40.  The equal sign is optional.
+ 
+ ‘-gnatr’
+ 
+      This switch causes pragma Restrictions to be treated as
+      Restriction_Warnings so that violation of restrictions causes
+      warnings rather than illegalities.  This is useful during the
+      development process when new restrictions are added or
+      investigated.  The switch also causes pragma Profile to be treated
+      as Profile_Warnings, and pragma Restricted_Run_Time and pragma
+      Ravenscar set restriction warnings rather than restrictions.
+ 
+ ‘-gnatR[0|1|2|3|4][e][j][m][s]’
+ 
+      This switch controls output from the compiler of a listing showing
+      representation information for declared types, objects and
+      subprograms.  For ‘-gnatR0’, no information is output (equivalent
+      to omitting the ‘-gnatR’ switch).  For ‘-gnatR1’ (which is the
+      default, so ‘-gnatR’ with no parameter has the same effect), size
+      and alignment information is listed for declared array and record
+      types.
+ 
+      For ‘-gnatR2’, size and alignment information is listed for all
+      declared types and objects.  The ‘Linker_Section’ is also listed
+      for any entity for which the ‘Linker_Section’ is set explicitly or
+      implicitly (the latter case occurs for objects of a type for which
+      a ‘Linker_Section’ is set).
+ 
+      For ‘-gnatR3’, symbolic expressions for values that are computed at
+      run time for records are included.  These symbolic expressions have
+      a mostly obvious format with #n being used to represent the value
+      of the n’th discriminant.  See source files ‘repinfo.ads/adb’ in
+      the GNAT sources for full details on the format of ‘-gnatR3’
+      output.
+ 
+      For ‘-gnatR4’, information for relevant compiler-generated types is
+      also listed, i.e.  when they are structurally part of other
+      declared types and objects.
+ 
+      If the switch is followed by an ‘e’ (e.g.  ‘-gnatR2e’), then
+      extended representation information for record sub-components of
+      records is included.
+ 
+      If the switch is followed by an ‘m’ (e.g.  ‘-gnatRm’), then
+      subprogram conventions and parameter passing mechanisms for all the
+      subprograms are included.
+ 
+      If the switch is followed by a ‘j’ (e.g., ‘-gnatRj’), then the
+      output is in the JSON data interchange format specified by the
+      ECMA-404 standard.  The semantic description of this JSON output is
+      available in the specification of the Repinfo unit present in the
+      compiler sources.
+ 
+      If the switch is followed by an ‘s’ (e.g., ‘-gnatR3s’), then the
+      output is to a file with the name ‘file.rep’ where ‘file’ is the
+      name of the corresponding source file, except if ‘j’ is also
+      specified, in which case the file name is ‘file.json’.
+ 
+      Note that it is possible for record components to have zero size.
+      In this case, the component clause uses an obvious extension of
+      permitted Ada syntax, for example ‘at 0 range 0 .. -1’.
+ 
+ ‘-gnatS’
+ 
+      The use of the switch ‘-gnatS’ for an Ada compilation will cause
+      the compiler to output a representation of package Standard in a
+      form very close to standard Ada.  It is not quite possible to do
+      this entirely in standard Ada (since new numeric base types cannot
+      be created in standard Ada), but the output is easily readable to
+      any Ada programmer, and is useful to determine the characteristics
+      of target dependent types in package Standard.
+ 
+ ‘-gnatx’
+ 
+      Normally the compiler generates full cross-referencing information
+      in the ‘ALI’ file.  This information is used by a number of tools.
+      The ‘-gnatx’ switch suppresses this information.  This saves some
+      space and may slightly speed up compilation, but means that tools
+      depending on this information cannot be used.
+ 
+ ‘-fgnat-encodings=[all|gdb|minimal]’
+ 
+      This switch controls the balance between GNAT encodings and
+      standard DWARF emitted in the debug information.
+ 
+      Historically, old debug formats like stabs were not powerful enough
+      to express some Ada types (for instance, variant records or
+      fixed-point types).  To work around this, GNAT introduced
+      proprietary encodings that embed the missing information (“GNAT
+      encodings”).
+ 
+      Recent versions of the DWARF debug information format are now able
+      to correctly describe most of these Ada constructs (“standard
+      DWARF”).  As third-party tools started to use this format, GNAT has
+      been enhanced to generate it.  However, most tools (including GDB)
+      are still relying on GNAT encodings.
+ 
+      To support all tools, GNAT needs to be versatile about the balance
+      between generation of GNAT encodings and standard DWARF. This is
+      what ‘-fgnat-encodings’ is about.
+ 
+         * ‘=all’: Emit all GNAT encodings, and then emit as much
+           standard DWARF as possible so it does not conflict with GNAT
+           encodings.
+ 
+         * ‘=gdb’: Emit as much standard DWARF as possible as long as the
+           current GDB handles it.  Emit GNAT encodings for the rest.
+ 
+         * ‘=minimal’: Emit as much standard DWARF as possible and emit
+           GNAT encodings for the rest.
+ 
+ 
+ File: gnat_ugn.info,  Node: Exception Handling Control,  Next: Units to Sources Mapping Files,  Prev: Debugging Control,  Up: Compiler Switches
+ 
+ 4.3.16 Exception Handling Control
+ ---------------------------------
+ 
+ GNAT uses two methods for handling exceptions at run time.  The
+ ‘setjmp/longjmp’ method saves the context when entering a frame with an
+ exception handler.  Then when an exception is raised, the context can be
+ restored immediately, without the need for tracing stack frames.  This
+ method provides very fast exception propagation, but introduces
+ significant overhead for the use of exception handlers, even if no
+ exception is raised.
+ 
+ The other approach is called ‘zero cost’ exception handling.  With this
+ method, the compiler builds static tables to describe the exception
+ ranges.  No dynamic code is required when entering a frame containing an
+ exception handler.  When an exception is raised, the tables are used to
+ control a back trace of the subprogram invocation stack to locate the
+ required exception handler.  This method has considerably poorer
+ performance for the propagation of exceptions, but there is no overhead
+ for exception handlers if no exception is raised.  Note that in this
+ mode and in the context of mixed Ada and C/C++ programming, to propagate
+ an exception through a C/C++ code, the C/C++ code must be compiled with
+ the ‘-funwind-tables’ GCC’s option.
+ 
+ The following switches may be used to control which of the two exception
+ handling methods is used.
+ 
+ ‘--RTS=sjlj’
+ 
+      This switch causes the setjmp/longjmp run-time (when available) to
+      be used for exception handling.  If the default mechanism for the
+      target is zero cost exceptions, then this switch can be used to
+      modify this default, and must be used for all units in the
+      partition.  This option is rarely used.  One case in which it may
+      be advantageous is if you have an application where exception
+      raising is common and the overall performance of the application is
+      improved by favoring exception propagation.
+ 
+ ‘--RTS=zcx’
+ 
+      This switch causes the zero cost approach to be used for exception
+      handling.  If this is the default mechanism for the target (see
+      below), then this switch is unneeded.  If the default mechanism for
+      the target is setjmp/longjmp exceptions, then this switch can be
+      used to modify this default, and must be used for all units in the
+      partition.  This option can only be used if the zero cost approach
+      is available for the target in use, otherwise it will generate an
+      error.
+ 
+ The same option ‘--RTS’ must be used both for ‘gcc’ and ‘gnatbind’.
+ Passing this option to ‘gnatmake’ (*note Switches for gnatmake: ce.)
+ will ensure the required consistency through the compilation and binding
+ steps.
+ 
+ 
+ File: gnat_ugn.info,  Node: Units to Sources Mapping Files,  Next: Code Generation Control,  Prev: Exception Handling Control,  Up: Compiler Switches
+ 
+ 4.3.17 Units to Sources Mapping Files
+ -------------------------------------
+ 
+ ‘-gnatem=`path'’
+ 
+      A mapping file is a way to communicate to the compiler two
+      mappings: from unit names to file names (without any directory
+      information) and from file names to path names (with full directory
+      information).  These mappings are used by the compiler to
+      short-circuit the path search.
+ 
+      The use of mapping files is not required for correct operation of
+      the compiler, but mapping files can improve efficiency,
+      particularly when sources are read over a slow network connection.
+      In normal operation, you need not be concerned with the format or
+      use of mapping files, and the ‘-gnatem’ switch is not a switch that
+      you would use explicitly.  It is intended primarily for use by
+      automatic tools such as ‘gnatmake’ running under the project file
+      facility.  The description here of the format of mapping files is
+      provided for completeness and for possible use by other tools.
+ 
+      A mapping file is a sequence of sets of three lines.  In each set,
+      the first line is the unit name, in lower case, with ‘%s’ appended
+      for specs and ‘%b’ appended for bodies; the second line is the file
+      name; and the third line is the path name.
+ 
+      Example:
+ 
+           main%b
+           main.2.ada
+           /gnat/project1/sources/main.2.ada
+ 
+      When the switch ‘-gnatem’ is specified, the compiler will create in
+      memory the two mappings from the specified file.  If there is any
+      problem (nonexistent file, truncated file or duplicate entries), no
+      mapping will be created.
+ 
+      Several ‘-gnatem’ switches may be specified; however, only the last
+      one on the command line will be taken into account.
+ 
+      When using a project file, ‘gnatmake’ creates a temporary mapping
+      file and communicates it to the compiler using this switch.
+ 
+ 
+ File: gnat_ugn.info,  Node: Code Generation Control,  Prev: Units to Sources Mapping Files,  Up: Compiler Switches
+ 
+ 4.3.18 Code Generation Control
+ ------------------------------
+ 
+ The GCC technology provides a wide range of target dependent ‘-m’
+ switches for controlling details of code generation with respect to
+ different versions of architectures.  This includes variations in
+ instruction sets (e.g., different members of the power pc family), and
+ different requirements for optimal arrangement of instructions (e.g.,
+ different members of the x86 family).  The list of available ‘-m’
+ switches may be found in the GCC documentation.
+ 
+ Use of these ‘-m’ switches may in some cases result in improved code
+ performance.
+ 
+ The GNAT technology is tested and qualified without any ‘-m’ switches,
+ so generally the most reliable approach is to avoid the use of these
+ switches.  However, we generally expect most of these switches to work
+ successfully with GNAT, and many customers have reported successful use
+ of these options.
+ 
+ Our general advice is to avoid the use of ‘-m’ switches unless special
+ needs lead to requirements in this area.  In particular, there is no
+ point in using ‘-m’ switches to improve performance unless you actually
+ see a performance improvement.
+ 
+ 
+ File: gnat_ugn.info,  Node: Linker Switches,  Next: Binding with gnatbind,  Prev: Compiler Switches,  Up: Building Executable Programs with GNAT
+ 
+ 4.4 Linker Switches
+ ===================
+ 
+ Linker switches can be specified after ‘-largs’ builder switch.
+ 
+ ‘-fuse-ld=`name'’
+ 
+      Linker to be used.  The default is ‘bfd’ for ‘ld.bfd’; ‘gold’ (for
+      ‘ld.gold’) and ‘mold’ (for ‘ld.mold’) are more recent and faster
+      alternatives, but only available on GNU/Linux platforms.
+ 
+ 
+ File: gnat_ugn.info,  Node: Binding with gnatbind,  Next: Linking with gnatlink,  Prev: Linker Switches,  Up: Building Executable Programs with GNAT
+ 
+ 4.5 Binding with ‘gnatbind’
+ ===========================
+ 
+ This chapter describes the GNAT binder, ‘gnatbind’, which is used to
+ bind compiled GNAT objects.
+ 
+ The ‘gnatbind’ program performs four separate functions:
+ 
+    * Checks that a program is consistent, in accordance with the rules
+      in Chapter 10 of the Ada Reference Manual.  In particular, error
+      messages are generated if a program uses inconsistent versions of a
+      given unit.
+ 
+    * Checks that an acceptable order of elaboration exists for the
+      program and issues an error message if it cannot find an order of
+      elaboration that satisfies the rules in Chapter 10 of the Ada
+      Language Manual.
+ 
+    * Generates a main program incorporating the given elaboration order.
+      This program is a small Ada package (body and spec) that must be
+      subsequently compiled using the GNAT compiler.  The necessary
+      compilation step is usually performed automatically by ‘gnatlink’.
+      The two most important functions of this program are to call the
+      elaboration routines of units in an appropriate order and to call
+      the main program.
+ 
+    * Determines the set of object files required by the given main
+      program.  This information is output in the forms of comments in
+      the generated program, to be read by the ‘gnatlink’ utility used to
+      link the Ada application.
+ 
+ * Menu:
+ 
+ * Running gnatbind::
+ * Switches for gnatbind::
+ * Command-Line Access::
+ * Search Paths for gnatbind::
+ * Examples of gnatbind Usage::
+ 
+ 
+ File: gnat_ugn.info,  Node: Running gnatbind,  Next: Switches for gnatbind,  Up: Binding with gnatbind
+ 
+ 4.5.1 Running ‘gnatbind’
+ ------------------------
+ 
+ The form of the ‘gnatbind’ command is
+ 
+      $ gnatbind [ switches ] mainprog[.ali] [ switches ]
+ 
+ where ‘mainprog.adb’ is the Ada file containing the main program unit
+ body.  ‘gnatbind’ constructs an Ada package in two files whose names are
+ ‘b~mainprog.ads’, and ‘b~mainprog.adb’.  For example, if given the
+ parameter ‘hello.ali’, for a main program contained in file ‘hello.adb’,
+ the binder output files would be ‘b~hello.ads’ and ‘b~hello.adb’.
+ 
+ When doing consistency checking, the binder takes into consideration any
+ source files it can locate.  For example, if the binder determines that
+ the given main program requires the package ‘Pack’, whose ‘.ALI’ file is
+ ‘pack.ali’ and whose corresponding source spec file is ‘pack.ads’, it
+ attempts to locate the source file ‘pack.ads’ (using the same search
+ path conventions as previously described for the ‘gcc’ command).  If it
+ can locate this source file, it checks that the time stamps or source
+ checksums of the source and its references to in ‘ALI’ files match.  In
+ other words, any ‘ALI’ files that mentions this spec must have resulted
+ from compiling this version of the source file (or in the case where the
+ source checksums match, a version close enough that the difference does
+ not matter).
+ 
+ The effect of this consistency checking, which includes source files, is
+ that the binder ensures that the program is consistent with the latest
+ version of the source files that can be located at bind time.  Editing a
+ source file without compiling files that depend on the source file cause
+ error messages to be generated by the binder.
+ 
+ For example, suppose you have a main program ‘hello.adb’ and a package
+ ‘P’, from file ‘p.ads’ and you perform the following steps:
+ 
+    * Enter ‘gcc -c hello.adb’ to compile the main program.
+ 
+    * Enter ‘gcc -c p.ads’ to compile package ‘P’.
+ 
+    * Edit file ‘p.ads’.
+ 
+    * Enter ‘gnatbind hello’.
+ 
+ At this point, the file ‘p.ali’ contains an out-of-date time stamp
+ because the file ‘p.ads’ has been edited.  The attempt at binding fails,
+ and the binder generates the following error messages:
+ 
+      error: "hello.adb" must be recompiled ("p.ads" has been modified)
+      error: "p.ads" has been modified and must be recompiled
+ 
+ Now both files must be recompiled as indicated, and then the bind can
+ succeed, generating a main program.  You need not normally be concerned
+ with the contents of this file, but for reference purposes a sample
+ binder output file is given in *note Example of Binder Output File: e.
+ 
+ In most normal usage, the default mode of ‘gnatbind’ which is to
+ generate the main package in Ada, as described in the previous section.
+ In particular, this means that any Ada programmer can read and
+ understand the generated main program.  It can also be debugged just
+ like any other Ada code provided the ‘-g’ switch is used for ‘gnatbind’
+ and ‘gnatlink’.
+ 
+ 
+ File: gnat_ugn.info,  Node: Switches for gnatbind,  Next: Command-Line Access,  Prev: Running gnatbind,  Up: Binding with gnatbind
+ 
+ 4.5.2 Switches for ‘gnatbind’
+ -----------------------------
+ 
+ The following switches are available with ‘gnatbind’; details will be
+ presented in subsequent sections.
+ 
+ ‘--version’
+ 
+      Display Copyright and version, then exit disregarding all other
+      options.
+ 
+ ‘--help’
+ 
+      If ‘--version’ was not used, display usage, then exit disregarding
+      all other options.
+ 
+ ‘-a’
+ 
+      Indicates that, if supported by the platform, the adainit procedure
+      should be treated as an initialisation routine by the linker (a
+      constructor).  This is intended to be used by the Project Manager
+      to automatically initialize shared Stand-Alone Libraries.
+ 
+ ‘-aO’
+ 
+      Specify directory to be searched for ALI files.
+ 
+ ‘-aI’
+ 
+      Specify directory to be searched for source file.
+ 
+ ‘-A[=`filename']’
+ 
+      Output ALI list (to standard output or to the named file).
+ 
+ ‘-b’
+ 
+      Generate brief messages to ‘stderr’ even if verbose mode set.
+ 
+ ‘-c’
+ 
+      Check only, no generation of binder output file.
+ 
+ ‘-d`nn'[k|m]’
+ 
+      This switch can be used to change the default task stack size value
+      to a specified size ‘nn’, which is expressed in bytes by default,
+      or in kilobytes when suffixed with ‘k’ or in megabytes when
+      suffixed with ‘m’.  In the absence of a ‘[k|m]’ suffix, this switch
+      is equivalent, in effect, to completing all task specs with
+ 
+           pragma Storage_Size (nn);
+ 
+      When they do not already have such a pragma.
+ 
+ ‘-D`nn'[k|m]’
+ 
+      Set the default secondary stack size to ‘nn’.  The suffix indicates
+      whether the size is in bytes (no suffix), kilobytes (‘k’ suffix) or
+      megabytes (‘m’ suffix).
+ 
+      The secondary stack holds objects of unconstrained types that are
+      returned by functions, for example unconstrained Strings.  The size
+      of the secondary stack can be dynamic or fixed depending on the
+      target.
+ 
+      For most targets, the secondary stack grows on demand and is
+      implemented as a chain of blocks in the heap.  In this case, the
+      default secondary stack size determines the initial size of the
+      secondary stack for each task and the smallest amount the secondary
+      stack can grow by.
+ 
+      For Ravenscar, ZFP, and Cert run-times the size of the secondary
+      stack is fixed.  This switch can be used to change the default size
+      of these stacks.  The default secondary stack size can be
+      overridden on a per-task basis if individual tasks have different
+      secondary stack requirements.  This is achieved through the
+      Secondary_Stack_Size aspect that takes the size of the secondary
+      stack in bytes.
+ 
+ ‘-e’
+ 
+      Output complete list of elaboration-order dependencies.
+ 
+ ‘-Ea’
+ 
+      Store tracebacks in exception occurrences when the target supports
+      it.  The “a” is for “address”; tracebacks will contain hexadecimal
+      addresses, unless symbolic tracebacks are enabled.
+ 
+      See also the packages ‘GNAT.Traceback’ and
+      ‘GNAT.Traceback.Symbolic’ for more information.  Note that on x86
+      ports, you must not use ‘-fomit-frame-pointer’ ‘gcc’ option.
+ 
+ ‘-Es’
+ 
+      Store tracebacks in exception occurrences when the target supports
+      it.  The “s” is for “symbolic”; symbolic tracebacks are enabled.
+ 
+ ‘-E’
+ 
+      Currently the same as ‘-Ea’.
+ 
+ ‘-f`elab-order'’
+ 
+      Force elaboration order.  For further details see *note Elaboration
+      Control: 111. and *note Elaboration Order Handling in GNAT: f.
+ 
+ ‘-F’
+ 
+      Force the checks of elaboration flags.  ‘gnatbind’ does not
+      normally generate checks of elaboration flags for the main
+      executable, except when a Stand-Alone Library is used.  However,
+      there are cases when this cannot be detected by gnatbind.  An
+      example is importing an interface of a Stand-Alone Library through
+      a pragma Import and only specifying through a linker switch this
+      Stand-Alone Library.  This switch is used to guarantee that
+      elaboration flag checks are generated.
+ 
+ ‘-h’
+ 
+      Output usage (help) information.
+ 
+ ‘-H’
+ 
+      Legacy elaboration order model enabled.  For further details see
+      *note Elaboration Order Handling in GNAT: f.
+ 
+ ‘-H32’
+ 
+      Use 32-bit allocations for ‘__gnat_malloc’ (and thus for access
+      types).  For further details see *note Dynamic Allocation Control:
+      112.
+ 
+ ‘-H64’
+ 
+      Use 64-bit allocations for ‘__gnat_malloc’ (and thus for access
+      types).  For further details see *note Dynamic Allocation Control:
+      112.
+ 
+ ‘-I’
+ 
+      Specify directory to be searched for source and ALI files.
+ 
+ ‘-I-’
+ 
+      Do not look for sources in the current directory where ‘gnatbind’
+      was invoked, and do not look for ALI files in the directory
+      containing the ALI file named in the ‘gnatbind’ command line.
+ 
+ ‘-k’
+ 
+      Disable checking of elaboration flags.  When using ‘-n’ either
+      explicitly or implicitly, ‘-F’ is also implied, unless ‘-k’ is
+      used.  This switch should be used with care and you should ensure
+      manually that elaboration routines are not called twice
+      unintentionally.
+ 
+ ‘-K’
+ 
+      Give list of linker options specified for link.
+ 
+ ‘-l’
+ 
+      Output chosen elaboration order.
+ 
+ ‘-L`xxx'’
+ 
+      Bind the units for library building.  In this case the ‘adainit’
+      and ‘adafinal’ procedures (*note Binding with Non-Ada Main
+      Programs: a0.) are renamed to ‘XXXinit’ and ‘XXXfinal’.  Implies
+      -n.  (*note GNAT and Libraries: 2a, for more details.)
+ 
+ ‘-M`xyz'’
+ 
+      Rename generated main program from main to xyz.  This option is
+      supported on cross environments only.
+ 
+ ‘-m`n'’
+ 
+      Limit number of detected errors or warnings to ‘n’, where ‘n’ is in
+      the range 1..999999.  The default value if no switch is given is
+      9999.  If the number of warnings reaches this limit, then a message
+      is output and further warnings are suppressed, the bind continues
+      in this case.  If the number of errors reaches this limit, then a
+      message is output and the bind is abandoned.  A value of zero means
+      that no limit is enforced.  The equal sign is optional.
+ 
+ ‘-minimal’
+ 
+      Generate a binder file suitable for space-constrained applications.
+      When active, binder-generated objects not required for program
+      operation are no longer generated.  ‘Warning:’ this option comes
+      with the following limitations:
+ 
+         * Starting the program’s execution in the debugger will cause it
+           to stop at the start of the ‘main’ function instead of the
+           main subprogram.  This can be worked around by manually
+           inserting a breakpoint on that subprogram and resuming the
+           program’s execution until reaching that breakpoint.
+ 
+         * Programs using GNAT.Compiler_Version will not link.
+ 
+ ‘-n’
+ 
+      No main program.
+ 
+ ‘-nostdinc’
+ 
+      Do not look for sources in the system default directory.
+ 
+ ‘-nostdlib’
+ 
+      Do not look for library files in the system default directory.
+ 
+ ‘--RTS=`rts-path'’
+ 
+      Specifies the default location of the run-time library.  Same
+      meaning as the equivalent ‘gnatmake’ flag (*note Switches for
+      gnatmake: ce.).
+ 
+ ‘-o `file'’
+ 
+      Name the output file ‘file’ (default is ‘b~`xxx’.adb‘).  Note that
+      if this option is used, then linking must be done manually,
+      gnatlink cannot be used.
+ 
+ ‘-O[=`filename']’
+ 
+      Output object list (to standard output or to the named file).
+ 
+ ‘-p’
+ 
+      Pessimistic (worst-case) elaboration order.
+ 
+ ‘-P’
+ 
+      Generate binder file suitable for CodePeer.
+ 
+ ‘-R’
+ 
+      Output closure source list, which includes all non-run-time units
+      that are included in the bind.
+ 
+ ‘-Ra’
+ 
+      Like ‘-R’ but the list includes run-time units.
+ 
+ ‘-s’
+ 
+      Require all source files to be present.
+ 
+ ‘-S`xxx'’
+ 
+      Specifies the value to be used when detecting uninitialized scalar
+      objects with pragma Initialize_Scalars.  The ‘xxx’ string specified
+      with the switch is one of:
+ 
+         * ‘in’ for an invalid value.
+ 
+           If zero is invalid for the discrete type in question, then the
+           scalar value is set to all zero bits.  For signed discrete
+           types, the largest possible negative value of the underlying
+           scalar is set (i.e.  a one bit followed by all zero bits).
+           For unsigned discrete types, the underlying scalar value is
+           set to all one bits.  For floating-point types, a NaN value is
+           set (see body of package System.Scalar_Values for exact
+           values).
+ 
+         * ‘lo’ for low value.
+ 
+           If zero is invalid for the discrete type in question, then the
+           scalar value is set to all zero bits.  For signed discrete
+           types, the largest possible negative value of the underlying
+           scalar is set (i.e.  a one bit followed by all zero bits).
+           For unsigned discrete types, the underlying scalar value is
+           set to all zero bits.  For floating-point, a small value is
+           set (see body of package System.Scalar_Values for exact
+           values).
+ 
+         * ‘hi’ for high value.
+ 
+           If zero is invalid for the discrete type in question, then the
+           scalar value is set to all one bits.  For signed discrete
+           types, the largest possible positive value of the underlying
+           scalar is set (i.e.  a zero bit followed by all one bits).
+           For unsigned discrete types, the underlying scalar value is
+           set to all one bits.  For floating-point, a large value is set
+           (see body of package System.Scalar_Values for exact values).
+ 
+         * ‘xx’ for hex value (two hex digits).
+ 
+           The underlying scalar is set to a value consisting of repeated
+           bytes, whose value corresponds to the given value.  For
+           example if ‘BF’ is given, then a 32-bit scalar value will be
+           set to the bit patterm ‘16#BFBFBFBF#’.
+ 
+      In addition, you can specify ‘-Sev’ to indicate that the value is
+      to be set at run time.  In this case, the program will look for an
+      environment variable of the form ‘GNAT_INIT_SCALARS=YY’, where ‘yy’
+      is one of ‘in/lo/hi/XX’ with the same meanings as above.  If no
+      environment variable is found, or if it does not have a valid
+      value, then the default is ‘in’ (invalid values).
+ 
+ ‘-static’
+ 
+      Link against a static GNAT run-time.
+ 
+ ‘-shared’
+ 
+      Link against a shared GNAT run-time when available.
+ 
+ ‘-t’
+ 
+      Tolerate time stamp and other consistency errors.
+ 
+ ‘-T`n'’
+ 
+      Set the time slice value to ‘n’ milliseconds.  If the system
+      supports the specification of a specific time slice value, then the
+      indicated value is used.  If the system does not support specific
+      time slice values, but does support some general notion of
+      round-robin scheduling, then any nonzero value will activate
+      round-robin scheduling.
+ 
+      A value of zero is treated specially.  It turns off time slicing,
+      and in addition, indicates to the tasking run-time that the
+      semantics should match as closely as possible the Annex D
+      requirements of the Ada RM, and in particular sets the default
+      scheduling policy to ‘FIFO_Within_Priorities’.
+ 
+ ‘-u`n'’
+ 
+      Enable dynamic stack usage, with ‘n’ results stored and displayed
+      at program termination.  A result is generated when a task
+      terminates.  Results that can’t be stored are displayed on the fly,
+      at task termination.  This option is currently not supported on
+      Itanium platforms.  (See *note Dynamic Stack Usage Analysis: 113.
+      for details.)
+ 
+ ‘-v’
+ 
+      Verbose mode.  Write error messages, header, summary output to
+      ‘stdout’.
+ 
+ ‘-V`key'=`value'’
+ 
+      Store the given association of ‘key’ to ‘value’ in the bind
+      environment.  Values stored this way can be retrieved at run time
+      using ‘GNAT.Bind_Environment’.
+ 
+ ‘-w`x'’
+ 
+      Warning mode; ‘x’ = s/e for suppress/treat as error.
+ 
+ ‘-Wx`e'’
+ 
+      Override default wide character encoding for standard Text_IO
+      files.
+ 
+ ‘-x’
+ 
+      Exclude source files (check object consistency only).
+ 
+ ‘-xdr’
+ 
+      Use the target-independent XDR protocol for stream oriented
+      attributes instead of the default implementation which is based on
+      direct binary representations and is therefore target-and
+      endianness-dependent.  However it does not support 128-bit integer
+      types and the exception ‘Ada.IO_Exceptions.Device_Error’ is raised
+      if any attempt is made at streaming 128-bit integer types with it.
+ 
+ ‘-X`nnn'’
+ 
+      Set default exit status value, normally 0 for POSIX compliance.
+ 
+ ‘-y’
+ 
+      Enable leap seconds support in ‘Ada.Calendar’ and its children.
+ 
+ ‘-z’
+ 
+      No main subprogram.
+ 
+ You may obtain this listing of switches by running ‘gnatbind’ with no
+ arguments.
+ 
+ * Menu:
+ 
+ * Consistency-Checking Modes::
+ * Binder Error Message Control::
+ * Elaboration Control::
+ * Output Control::
+ * Dynamic Allocation Control::
+ * Binding with Non-Ada Main Programs::
+ * Binding Programs with No Main Subprogram::
+ 
+ 
+ File: gnat_ugn.info,  Node: Consistency-Checking Modes,  Next: Binder Error Message Control,  Up: Switches for gnatbind
+ 
+ 4.5.2.1 Consistency-Checking Modes
+ ..................................
+ 
+ As described earlier, by default ‘gnatbind’ checks that object files are
+ consistent with one another and are consistent with any source files it
+ can locate.  The following switches control binder access to sources.
+ 
+ ‘-s’
+ 
+      Require source files to be present.  In this mode, the binder must
+      be able to locate all source files that are referenced, in order to
+      check their consistency.  In normal mode, if a source file cannot
+      be located it is simply ignored.  If you specify this switch, a
+      missing source file is an error.
+ 
+ ‘-Wx`e'’
+ 
+      Override default wide character encoding for standard Text_IO
+      files.  Normally the default wide character encoding method used
+      for standard [Wide_[Wide_]]Text_IO files is taken from the encoding
+      specified for the main source input (see description of switch
+      ‘-gnatWx’ for the compiler).  The use of this switch for the binder
+      (which has the same set of possible arguments) overrides this
+      default as specified.
+ 
+ ‘-x’
+ 
+      Exclude source files.  In this mode, the binder only checks that
+      ALI files are consistent with one another.  Source files are not
+      accessed.  The binder runs faster in this mode, and there is still
+      a guarantee that the resulting program is self-consistent.  If a
+      source file has been edited since it was last compiled, and you
+      specify this switch, the binder will not detect that the object
+      file is out of date with respect to the source file.  Note that
+      this is the mode that is automatically used by ‘gnatmake’ because
+      in this case the checking against sources has already been
+      performed by ‘gnatmake’ in the course of compilation (i.e., before
+      binding).
+ 
+ 
+ File: gnat_ugn.info,  Node: Binder Error Message Control,  Next: Elaboration Control,  Prev: Consistency-Checking Modes,  Up: Switches for gnatbind
+ 
+ 4.5.2.2 Binder Error Message Control
+ ....................................
+ 
+ The following switches provide control over the generation of error
+ messages from the binder:
+ 
+ ‘-v’
+ 
+      Verbose mode.  In the normal mode, brief error messages are
+      generated to ‘stderr’.  If this switch is present, a header is
+      written to ‘stdout’ and any error messages are directed to
+      ‘stdout’.  All that is written to ‘stderr’ is a brief summary
+      message.
+ 
+ ‘-b’
+ 
+      Generate brief error messages to ‘stderr’ even if verbose mode is
+      specified.  This is relevant only when used with the ‘-v’ switch.
+ 
+ ‘-m`n'’
+ 
+      Limits the number of error messages to ‘n’, a decimal integer in
+      the range 1-999.  The binder terminates immediately if this limit
+      is reached.
+ 
+ ‘-M`xxx'’
+ 
+      Renames the generated main program from ‘main’ to ‘xxx’.  This is
+      useful in the case of some cross-building environments, where the
+      actual main program is separate from the one generated by
+      ‘gnatbind’.
+ 
+ ‘-ws’
+ 
+      Suppress all warning messages.
+ 
+ ‘-we’
+ 
+      Treat any warning messages as fatal errors.
+ 
+ ‘-t’
+ 
+      The binder performs a number of consistency checks including:
+ 
+         * Check that time stamps of a given source unit are consistent
+ 
+         * Check that checksums of a given source unit are consistent
+ 
+         * Check that consistent versions of ‘GNAT’ were used for
+           compilation
+ 
+         * Check consistency of configuration pragmas as required
+ 
+      Normally failure of such checks, in accordance with the consistency
+      requirements of the Ada Reference Manual, causes error messages to
+      be generated which abort the binder and prevent the output of a
+      binder file and subsequent link to obtain an executable.
+ 
+      The ‘-t’ switch converts these error messages into warnings, so
+      that binding and linking can continue to completion even in the
+      presence of such errors.  The result may be a failed link (due to
+      missing symbols), or a non-functional executable which has
+      undefined semantics.
+ 
+           Note: This means that ‘-t’ should be used only in unusual
+           situations, with extreme care.
+ 
+ 
+ File: gnat_ugn.info,  Node: Elaboration Control,  Next: Output Control,  Prev: Binder Error Message Control,  Up: Switches for gnatbind
+ 
+ 4.5.2.3 Elaboration Control
+ ...........................
+ 
+ The following switches provide additional control over the elaboration
+ order.  For further details see *note Elaboration Order Handling in
+ GNAT: f.
+ 
+ ‘-f`elab-order'’
+ 
+      Force elaboration order.
+ 
+      ‘elab-order’ should be the name of a “forced elaboration order
+      file”, that is, a text file containing library item names, one per
+      line.  A name of the form “some.unit%s” or “some.unit (spec)”
+      denotes the spec of Some.Unit.  A name of the form “some.unit%b” or
+      “some.unit (body)” denotes the body of Some.Unit.  Each pair of
+      lines is taken to mean that there is an elaboration dependence of
+      the second line on the first.  For example, if the file contains:
+ 
+           this (spec)
+           this (body)
+           that (spec)
+           that (body)
+ 
+      then the spec of This will be elaborated before the body of This,
+      and the body of This will be elaborated before the spec of That,
+      and the spec of That will be elaborated before the body of That.
+      The first and last of these three dependences are already required
+      by Ada rules, so this file is really just forcing the body of This
+      to be elaborated before the spec of That.
+ 
+      The given order must be consistent with Ada rules, or else
+      ‘gnatbind’ will give elaboration cycle errors.  For example, if you
+      say x (body) should be elaborated before x (spec), there will be a
+      cycle, because Ada rules require x (spec) to be elaborated before x
+      (body); you can’t have the spec and body both elaborated before
+      each other.
+ 
+      If you later add “with That;” to the body of This, there will be a
+      cycle, in which case you should erase either “this (body)” or “that
+      (spec)” from the above forced elaboration order file.
+ 
+      Blank lines and Ada-style comments are ignored.  Unit names that do
+      not exist in the program are ignored.  Units in the GNAT predefined
+      library are also ignored.
+ 
+ ‘-p’
+ 
+      Pessimistic elaboration order
+ 
+      This switch is only applicable to the pre-20.x legacy elaboration
+      models.  The post-20.x elaboration model uses a more informed
+      approach of ordering the units.
+ 
+      Normally the binder attempts to choose an elaboration order that is
+      likely to minimize the likelihood of an elaboration order error
+      resulting in raising a ‘Program_Error’ exception.  This switch
+      reverses the action of the binder, and requests that it
+      deliberately choose an order that is likely to maximize the
+      likelihood of an elaboration error.  This is useful in ensuring
+      portability and avoiding dependence on accidental fortuitous
+      elaboration ordering.
+ 
+      Normally it only makes sense to use the ‘-p’ switch if dynamic
+      elaboration checking is used (‘-gnatE’ switch used for
+      compilation).  This is because in the default static elaboration
+      mode, all necessary ‘Elaborate’ and ‘Elaborate_All’ pragmas are
+      implicitly inserted.  These implicit pragmas are still respected by
+      the binder in ‘-p’ mode, so a safe elaboration order is assured.
+ 
+      Note that ‘-p’ is not intended for production use; it is more for
+      debugging/experimental use.
+ 
+ 
+ File: gnat_ugn.info,  Node: Output Control,  Next: Dynamic Allocation Control,  Prev: Elaboration Control,  Up: Switches for gnatbind
+ 
+ 4.5.2.4 Output Control
+ ......................
+ 
+ The following switches allow additional control over the output
+ generated by the binder.
+ 
+ ‘-c’
+ 
+      Check only.  Do not generate the binder output file.  In this mode
+      the binder performs all error checks but does not generate an
+      output file.
+ 
+ ‘-e’
+ 
+      Output complete list of elaboration-order dependencies, showing the
+      reason for each dependency.  This output can be rather extensive
+      but may be useful in diagnosing problems with elaboration order.
+      The output is written to ‘stdout’.
+ 
+ ‘-h’
+ 
+      Output usage information.  The output is written to ‘stdout’.
+ 
+ ‘-K’
+ 
+      Output linker options to ‘stdout’.  Includes library search paths,
+      contents of pragmas Ident and Linker_Options, and libraries added
+      by ‘gnatbind’.
+ 
+ ‘-l’
+ 
+      Output chosen elaboration order.  The output is written to
+      ‘stdout’.
+ 
+ ‘-O’
+ 
+      Output full names of all the object files that must be linked to
+      provide the Ada component of the program.  The output is written to
+      ‘stdout’.  This list includes the files explicitly supplied and
+      referenced by the user as well as implicitly referenced run-time
+      unit files.  The latter are omitted if the corresponding units
+      reside in shared libraries.  The directory names for the run-time
+      units depend on the system configuration.
+ 
+ ‘-o `file'’
+ 
+      Set name of output file to ‘file’ instead of the normal
+      ‘b~`mainprog’.adb‘ default.  Note that ‘file’ denote the Ada binder
+      generated body filename.  Note that if this option is used, then
+      linking must be done manually.  It is not possible to use gnatlink
+      in this case, since it cannot locate the binder file.
+ 
+ ‘-r’
+ 
+      Generate list of ‘pragma Restrictions’ that could be applied to the
+      current unit.  This is useful for code audit purposes, and also may
+      be used to improve code generation in some cases.
+ 
+ 
+ File: gnat_ugn.info,  Node: Dynamic Allocation Control,  Next: Binding with Non-Ada Main Programs,  Prev: Output Control,  Up: Switches for gnatbind
+ 
+ 4.5.2.5 Dynamic Allocation Control
+ ..................................
+ 
+ The heap control switches – ‘-H32’ and ‘-H64’ – determine whether
+ dynamic allocation uses 32-bit or 64-bit memory.  They only affect
+ compiler-generated allocations via ‘__gnat_malloc’; explicit calls to
+ ‘malloc’ and related functions from the C run-time library are
+ unaffected.
+ 
+ ‘-H32’
+ 
+      Allocate memory on 32-bit heap
+ 
+ ‘-H64’
+ 
+      Allocate memory on 64-bit heap.  This is the default unless
+      explicitly overridden by a ‘'Size’ clause on the access type.
+ 
+ These switches are only effective on VMS platforms.
+ 
+ 
+ File: gnat_ugn.info,  Node: Binding with Non-Ada Main Programs,  Next: Binding Programs with No Main Subprogram,  Prev: Dynamic Allocation Control,  Up: Switches for gnatbind
+ 
+ 4.5.2.6 Binding with Non-Ada Main Programs
+ ..........................................
+ 
+ The description so far has assumed that the main program is in Ada, and
+ that the task of the binder is to generate a corresponding function
+ ‘main’ that invokes this Ada main program.  GNAT also supports the
+ building of executable programs where the main program is not in Ada,
+ but some of the called routines are written in Ada and compiled using
+ GNAT (*note Mixed Language Programming: 2c.).  The following switch is
+ used in this situation:
+ 
+ ‘-n’
+ 
+      No main program.  The main program is not in Ada.
+ 
+ In this case, most of the functions of the binder are still required,
+ but instead of generating a main program, the binder generates a file
+ containing the following callable routines:
+ 
+      ‘adainit’
+ 
+           You must call this routine to initialize the Ada part of the
+           program by calling the necessary elaboration routines.  A call
+           to ‘adainit’ is required before the first call to an Ada
+           subprogram.
+ 
+           Note that it is assumed that the basic execution environment
+           must be setup to be appropriate for Ada execution at the point
+           where the first Ada subprogram is called.  In particular, if
+           the Ada code will do any floating-point operations, then the
+           FPU must be setup in an appropriate manner.  For the case of
+           the x86, for example, full precision mode is required.  The
+           procedure GNAT.Float_Control.Reset may be used to ensure that
+           the FPU is in the right state.
+ 
+      ‘adafinal’
+ 
+           You must call this routine to perform any library-level
+           finalization required by the Ada subprograms.  A call to
+           ‘adafinal’ is required after the last call to an Ada
+           subprogram, and before the program terminates.
+ 
+ If the ‘-n’ switch is given, more than one ALI file may appear on the
+ command line for ‘gnatbind’.  The normal ‘closure’ calculation is
+ performed for each of the specified units.  Calculating the closure
+ means finding out the set of units involved by tracing ‘with’
+ references.  The reason it is necessary to be able to specify more than
+ one ALI file is that a given program may invoke two or more quite
+ separate groups of Ada units.
+ 
+ The binder takes the name of its output file from the last specified ALI
+ file, unless overridden by the use of the ‘-o file’.
+ 
+ The output is an Ada unit in source form that can be compiled with GNAT.
+ This compilation occurs automatically as part of the ‘gnatlink’
+ processing.
+ 
+ Currently the GNAT run-time requires a FPU using 80 bits mode precision.
+ Under targets where this is not the default it is required to call
+ GNAT.Float_Control.Reset before using floating point numbers (this
+ include float computation, float input and output) in the Ada code.  A
+ side effect is that this could be the wrong mode for the foreign code
+ where floating point computation could be broken after this call.
+ 
+ 
+ File: gnat_ugn.info,  Node: Binding Programs with No Main Subprogram,  Prev: Binding with Non-Ada Main Programs,  Up: Switches for gnatbind
+ 
+ 4.5.2.7 Binding Programs with No Main Subprogram
+ ................................................
+ 
+ It is possible to have an Ada program which does not have a main
+ subprogram.  This program will call the elaboration routines of all the
+ packages, then the finalization routines.
+ 
+ The following switch is used to bind programs organized in this manner:
+ 
+ ‘-z’
+ 
+      Normally the binder checks that the unit name given on the command
+      line corresponds to a suitable main subprogram.  When this switch
+      is used, a list of ALI files can be given, and the execution of the
+      program consists of elaboration of these units in an appropriate
+      order.  Note that the default wide character encoding method for
+      standard Text_IO files is always set to Brackets if this switch is
+      set (you can use the binder switch ‘-Wx’ to override this default).
+ 
+ 
+ File: gnat_ugn.info,  Node: Command-Line Access,  Next: Search Paths for gnatbind,  Prev: Switches for gnatbind,  Up: Binding with gnatbind
+ 
+ 4.5.3 Command-Line Access
+ -------------------------
+ 
+ The package ‘Ada.Command_Line’ provides access to the command-line
+ arguments and program name.  In order for this interface to operate
+ correctly, the two variables
+ 
+      int gnat_argc;
+      char **gnat_argv;
+ 
+ are declared in one of the GNAT library routines.  These variables must
+ be set from the actual ‘argc’ and ‘argv’ values passed to the main
+ program.  With no ‘n’ present, ‘gnatbind’ generates the C main program
+ to automatically set these variables.  If the ‘n’ switch is used, there
+ is no automatic way to set these variables.  If they are not set, the
+ procedures in ‘Ada.Command_Line’ will not be available, and any attempt
+ to use them will raise ‘Constraint_Error’.  If command line access is
+ required, your main program must set ‘gnat_argc’ and ‘gnat_argv’ from
+ the ‘argc’ and ‘argv’ values passed to it.
+ 
+ 
+ File: gnat_ugn.info,  Node: Search Paths for gnatbind,  Next: Examples of gnatbind Usage,  Prev: Command-Line Access,  Up: Binding with gnatbind
+ 
+ 4.5.4 Search Paths for ‘gnatbind’
+ ---------------------------------
+ 
+ The binder takes the name of an ALI file as its argument and needs to
+ locate source files as well as other ALI files to verify object
+ consistency.
+ 
+ For source files, it follows exactly the same search rules as ‘gcc’ (see
+ *note Search Paths and the Run-Time Library (RTL): 73.).  For ALI files
+ the directories searched are:
+ 
+    * The directory containing the ALI file named in the command line,
+      unless the switch ‘-I-’ is specified.
+ 
+    * All directories specified by ‘-I’ switches on the ‘gnatbind’
+      command line, in the order given.
+ 
+    * Each of the directories listed in the text file whose name is given
+      by the ‘ADA_PRJ_OBJECTS_FILE’ environment variable.
+ 
+      ‘ADA_PRJ_OBJECTS_FILE’ is normally set by gnatmake or by the gnat
+      driver when project files are used.  It should not normally be set
+      by other means.
+ 
+    * Each of the directories listed in the value of the
+      ‘ADA_OBJECTS_PATH’ environment variable.  Construct this value
+      exactly as the ‘PATH’ environment variable: a list of directory
+      names separated by colons (semicolons when working with the NT
+      version of GNAT).
+ 
+    * The content of the ‘ada_object_path’ file which is part of the GNAT
+      installation tree and is used to store standard libraries such as
+      the GNAT Run-Time Library (RTL) unless the switch ‘-nostdlib’ is
+      specified.  See *note Installing a library: 72.
+ 
+ In the binder the switch ‘-I’ is used to specify both source and library
+ file paths.  Use ‘-aI’ instead if you want to specify source paths only,
+ and ‘-aO’ if you want to specify library paths only.  This means that
+ for the binder ‘-I`dir'’ is equivalent to ‘-aI`dir'’ ‘-aO``dir'’.  The
+ binder generates the bind file (a C language source file) in the current
+ working directory.
+ 
+ The packages ‘Ada’, ‘System’, and ‘Interfaces’ and their children make
+ up the GNAT Run-Time Library, together with the package GNAT and its
+ children, which contain a set of useful additional library functions
+ provided by GNAT. The sources for these units are needed by the compiler
+ and are kept together in one directory.  The ALI files and object files
+ generated by compiling the RTL are needed by the binder and the linker
+ and are kept together in one directory, typically different from the
+ directory containing the sources.  In a normal installation, you need
+ not specify these directory names when compiling or binding.  Either the
+ environment variables or the built-in defaults cause these files to be
+ found.
+ 
+ Besides simplifying access to the RTL, a major use of search paths is in
+ compiling sources from multiple directories.  This can make development
+ environments much more flexible.
+ 
+ 
+ File: gnat_ugn.info,  Node: Examples of gnatbind Usage,  Prev: Search Paths for gnatbind,  Up: Binding with gnatbind
+ 
+ 4.5.5 Examples of ‘gnatbind’ Usage
+ ----------------------------------
+ 
+ Here are some examples of ‘gnatbind’ invocations:
+ 
+           gnatbind hello
+ 
+      The main program ‘Hello’ (source program in ‘hello.adb’) is bound
+      using the standard switch settings.  The generated main program is
+      ‘b~hello.adb’.  This is the normal, default use of the binder.
+ 
+           gnatbind hello -o mainprog.adb
+ 
+      The main program ‘Hello’ (source program in ‘hello.adb’) is bound
+      using the standard switch settings.  The generated main program is
+      ‘mainprog.adb’ with the associated spec in ‘mainprog.ads’.  Note
+      that you must specify the body here not the spec.  Note that if
+      this option is used, then linking must be done manually, since
+      gnatlink will not be able to find the generated file.
+ 
+ 
+ File: gnat_ugn.info,  Node: Linking with gnatlink,  Next: Using the GNU make Utility,  Prev: Binding with gnatbind,  Up: Building Executable Programs with GNAT
+ 
+ 4.6 Linking with ‘gnatlink’
+ ===========================
+ 
+ This chapter discusses ‘gnatlink’, a tool that links an Ada program and
+ builds an executable file.  This utility invokes the system linker (via
+ the ‘gcc’ command) with a correct list of object files and library
+ references.  ‘gnatlink’ automatically determines the list of files and
+ references for the Ada part of a program.  It uses the binder file
+ generated by the ‘gnatbind’ to determine this list.
+ 
+ * Menu:
+ 
+ * Running gnatlink::
+ * Switches for gnatlink::
+ 
+ 
+ File: gnat_ugn.info,  Node: Running gnatlink,  Next: Switches for gnatlink,  Up: Linking with gnatlink
+ 
+ 4.6.1 Running ‘gnatlink’
+ ------------------------
+ 
+ The form of the ‘gnatlink’ command is
+ 
+      $ gnatlink [ switches ] mainprog [.ali]
+                 [ non-Ada objects ] [ linker options ]
+ 
+ The arguments of ‘gnatlink’ (switches, main ‘ALI’ file, non-Ada objects
+ or linker options) may be in any order, provided that no non-Ada object
+ may be mistaken for a main ‘ALI’ file.  Any file name ‘F’ without the
+ ‘.ali’ extension will be taken as the main ‘ALI’ file if a file exists
+ whose name is the concatenation of ‘F’ and ‘.ali’.
+ 
+ ‘mainprog.ali’ references the ALI file of the main program.  The ‘.ali’
+ extension of this file can be omitted.  From this reference, ‘gnatlink’
+ locates the corresponding binder file ‘b~mainprog.adb’ and, using the
+ information in this file along with the list of non-Ada objects and
+ linker options, constructs a linker command file to create the
+ executable.
+ 
+ The arguments other than the ‘gnatlink’ switches and the main ‘ALI’ file
+ are passed to the linker uninterpreted.  They typically include the
+ names of object files for units written in other languages than Ada and
+ any library references required to resolve references in any of these
+ foreign language units, or in ‘Import’ pragmas in any Ada units.
+ 
+ ‘linker options’ is an optional list of linker specific switches.  The
+ default linker called by gnatlink is ‘gcc’ which in turn calls the
+ appropriate system linker.
+ 
+ One useful option for the linker is ‘-s’: it reduces the size of the
+ executable by removing all symbol table and relocation information from
+ the executable.
+ 
+ Standard options for the linker such as ‘-lmy_lib’ or ‘-Ldir’ can be
+ added as is.  For options that are not recognized by ‘gcc’ as linker
+ options, use the ‘gcc’ switches ‘-Xlinker’ or ‘-Wl,’.
+ 
+ Refer to the GCC documentation for details.
+ 
+ Here is an example showing how to generate a linker map:
+ 
+      $ gnatlink my_prog -Wl,-Map,MAPFILE
+ 
+ Using ‘linker options’ it is possible to set the program stack and heap
+ size.  See *note Setting Stack Size from gnatlink: 127. and *note
+ Setting Heap Size from gnatlink: 128.
+ 
+ ‘gnatlink’ determines the list of objects required by the Ada program
+ and prepends them to the list of objects passed to the linker.
+ ‘gnatlink’ also gathers any arguments set by the use of ‘pragma
+ Linker_Options’ and adds them to the list of arguments presented to the
+ linker.
+ 
+ 
+ File: gnat_ugn.info,  Node: Switches for gnatlink,  Prev: Running gnatlink,  Up: Linking with gnatlink
+ 
+ 4.6.2 Switches for ‘gnatlink’
+ -----------------------------
+ 
+ The following switches are available with the ‘gnatlink’ utility:
+ 
+ ‘--version’
+ 
+      Display Copyright and version, then exit disregarding all other
+      options.
+ 
+ ‘--help’
+ 
+      If ‘--version’ was not used, display usage, then exit disregarding
+      all other options.
+ 
+ ‘-f’
+ 
+      On some targets, the command line length is limited, and ‘gnatlink’
+      will generate a separate file for the linker if the list of object
+      files is too long.  The ‘-f’ switch forces this file to be
+      generated even if the limit is not exceeded.  This is useful in
+      some cases to deal with special situations where the command line
+      length is exceeded.
+ 
+ ‘-g’
+ 
+      The option to include debugging information causes the Ada bind
+      file (in other words, ‘b~mainprog.adb’) to be compiled with ‘-g’.
+      In addition, the binder does not delete the ‘b~mainprog.adb’,
+      ‘b~mainprog.o’ and ‘b~mainprog.ali’ files.  Without ‘-g’, the
+      binder removes these files by default.
+ 
+ ‘-n’
+ 
+      Do not compile the file generated by the binder.  This may be used
+      when a link is rerun with different options, but there is no need
+      to recompile the binder file.
+ 
+ ‘-v’
+ 
+      Verbose mode.  Causes additional information to be output,
+      including a full list of the included object files.  This switch
+      option is most useful when you want to see what set of object files
+      are being used in the link step.
+ 
+ ‘-v -v’
+ 
+      Very verbose mode.  Requests that the compiler operate in verbose
+      mode when it compiles the binder file, and that the system linker
+      run in verbose mode.
+ 
+ ‘-o `exec-name'’
+ 
+      ‘exec-name’ specifies an alternate name for the generated
+      executable program.  If this switch is omitted, the executable has
+      the same name as the main unit.  For example, ‘gnatlink try.ali’
+      creates an executable called ‘try’.
+ 
+ ‘-B`dir'’
+ 
+      Load compiler executables (for example, ‘gnat1’, the Ada compiler)
+      from ‘dir’ instead of the default location.  Only use this switch
+      when multiple versions of the GNAT compiler are available.  See the
+      ‘Directory Options’ section in ‘The_GNU_Compiler_Collection’ for
+      further details.  You would normally use the ‘-b’ or ‘-V’ switch
+      instead.
+ 
+ ‘-M’
+ 
+      When linking an executable, create a map file.  The name of the map
+      file has the same name as the executable with extension “.map”.
+ 
+ ‘-M=`mapfile'’
+ 
+      When linking an executable, create a map file.  The name of the map
+      file is ‘mapfile’.
+ 
+ ‘--GCC=`compiler_name'’
+ 
+      Program used for compiling the binder file.  The default is ‘gcc’.
+      You need to use quotes around ‘compiler_name’ if ‘compiler_name’
+      contains spaces or other separator characters.  As an example
+      ‘--GCC="foo -x -y"’ will instruct ‘gnatlink’ to use ‘foo -x -y’ as
+      your compiler.  Note that switch ‘-c’ is always inserted after your
+      command name.  Thus in the above example the compiler command that
+      will be used by ‘gnatlink’ will be ‘foo -c -x -y’.  A limitation of
+      this syntax is that the name and path name of the executable itself
+      must not include any embedded spaces.  If the compiler executable
+      is different from the default one (gcc or <prefix>-gcc), then the
+      back-end switches in the ALI file are not used to compile the
+      binder generated source.  For example, this is the case with
+      ‘--GCC="foo -x -y"’.  But the back end switches will be used for
+      ‘--GCC="gcc -gnatv"’.  If several ‘--GCC=compiler_name’ are used,
+      only the last ‘compiler_name’ is taken into account.  However, all
+      the additional switches are also taken into account.  Thus,
+      ‘--GCC="foo -x -y" --GCC="bar -z -t"’ is equivalent to ‘--GCC="bar
+      -x -y -z -t"’.
+ 
+ ‘--LINK=`name'’
+ 
+      ‘name’ is the name of the linker to be invoked.  This is especially
+      useful in mixed language programs since languages such as C++
+      require their own linker to be used.  When this switch is omitted,
+      the default name for the linker is ‘gcc’.  When this switch is
+      used, the specified linker is called instead of ‘gcc’ with exactly
+      the same parameters that would have been passed to ‘gcc’ so if the
+      desired linker requires different parameters it is necessary to use
+      a wrapper script that massages the parameters before invoking the
+      real linker.  It may be useful to control the exact invocation by
+      using the verbose switch.
+ 
+ 
+ File: gnat_ugn.info,  Node: Using the GNU make Utility,  Prev: Linking with gnatlink,  Up: Building Executable Programs with GNAT
+ 
+ 4.7 Using the GNU ‘make’ Utility
+ ================================
+ 
+ This chapter offers some examples of makefiles that solve specific
+ problems.  It does not explain how to write a makefile, nor does it try
+ to replace the ‘gnatmake’ utility (*note Building with gnatmake: c6.).
+ 
+ All the examples in this section are specific to the GNU version of
+ make.  Although ‘make’ is a standard utility, and the basic language is
+ the same, these examples use some advanced features found only in ‘GNU
+ make’.
+ 
+ * Menu:
+ 
+ * Using gnatmake in a Makefile::
+ * Automatically Creating a List of Directories::
+ * Generating the Command Line Switches::
+ * Overcoming Command Line Length Limits::
+ 
+ 
+ File: gnat_ugn.info,  Node: Using gnatmake in a Makefile,  Next: Automatically Creating a List of Directories,  Up: Using the GNU make Utility
+ 
+ 4.7.1 Using gnatmake in a Makefile
+ ----------------------------------
+ 
+ Complex project organizations can be handled in a very powerful way by
+ using GNU make combined with gnatmake.  For instance, here is a Makefile
+ which allows you to build each subsystem of a big project into a
+ separate shared library.  Such a makefile allows you to significantly
+ reduce the link time of very big applications while maintaining full
+ coherence at each step of the build process.
+ 
+ The list of dependencies are handled automatically by ‘gnatmake’.  The
+ Makefile is simply used to call gnatmake in each of the appropriate
+ directories.
+ 
+ Note that you should also read the example on how to automatically
+ create the list of directories (*note Automatically Creating a List of
+ Directories: 12e.) which might help you in case your project has a lot
+ of subdirectories.
+ 
+      ## This Makefile is intended to be used with the following directory
+      ## configuration:
+      ##  - The sources are split into a series of csc (computer software components)
+      ##    Each of these csc is put in its own directory.
+      ##    Their name are referenced by the directory names.
+      ##    They will be compiled into shared library (although this would also work
+      ##    with static libraries)
+      ##  - The main program (and possibly other packages that do not belong to any
+      ##    csc) is put in the top level directory (where the Makefile is).
+      ##       toplevel_dir __ first_csc  (sources) __ lib (will contain the library)
+      ##                    \\_ second_csc (sources) __ lib (will contain the library)
+      ##                    \\_ ...
+      ## Although this Makefile is build for shared library, it is easy to modify
+      ## to build partial link objects instead (modify the lines with -shared and
+      ## gnatlink below)
+      ##
+      ## With this makefile, you can change any file in the system or add any new
+      ## file, and everything will be recompiled correctly (only the relevant shared
+      ## objects will be recompiled, and the main program will be re-linked).
+ 
+      # The list of computer software component for your project. This might be
+      # generated automatically.
+      CSC_LIST=aa bb cc
+ 
+      # Name of the main program (no extension)
+      MAIN=main
+ 
+      # If we need to build objects with -fPIC, uncomment the following line
+      #NEED_FPIC=-fPIC
+ 
+      # The following variable should give the directory containing libgnat.so
+      # You can get this directory through 'gnatls -v'. This is usually the last
+      # directory in the Object_Path.
+      GLIB=...
+ 
+      # The directories for the libraries
+      # (This macro expands the list of CSC to the list of shared libraries, you
+      # could simply use the expanded form:
+      # LIB_DIR=aa/lib/libaa.so bb/lib/libbb.so cc/lib/libcc.so
+      LIB_DIR=${foreach dir,${CSC_LIST},${dir}/lib/lib${dir}.so}
+ 
+      ${MAIN}: objects ${LIB_DIR}
+          gnatbind ${MAIN} ${CSC_LIST:%=-aO%/lib} -shared
+          gnatlink ${MAIN} ${CSC_LIST:%=-l%}
+ 
+      objects::
+          # recompile the sources
+          gnatmake -c -i ${MAIN}.adb ${NEED_FPIC} ${CSC_LIST:%=-I%}
+ 
+      # Note: In a future version of GNAT, the following commands will be simplified
+      # by a new tool, gnatmlib
+      ${LIB_DIR}:
+          mkdir -p ${dir $@ }
+          cd ${dir $@ } && gcc -shared -o ${notdir $@ } ../*.o -L${GLIB} -lgnat
+          cd ${dir $@ } && cp -f ../*.ali .
+ 
+      # The dependencies for the modules
+      # Note that we have to force the expansion of *.o, since in some cases
+      # make won't be able to do it itself.
+      aa/lib/libaa.so: ${wildcard aa/*.o}
+      bb/lib/libbb.so: ${wildcard bb/*.o}
+      cc/lib/libcc.so: ${wildcard cc/*.o}
+ 
+      # Make sure all of the shared libraries are in the path before starting the
+      # program
+      run::
+          LD_LIBRARY_PATH=`pwd`/aa/lib:`pwd`/bb/lib:`pwd`/cc/lib ./${MAIN}
+ 
+      clean::
+          ${RM} -rf ${CSC_LIST:%=%/lib}
+          ${RM} ${CSC_LIST:%=%/*.ali}
+          ${RM} ${CSC_LIST:%=%/*.o}
+          ${RM} *.o *.ali ${MAIN}
+ 
+ 
+ File: gnat_ugn.info,  Node: Automatically Creating a List of Directories,  Next: Generating the Command Line Switches,  Prev: Using gnatmake in a Makefile,  Up: Using the GNU make Utility
+ 
+ 4.7.2 Automatically Creating a List of Directories
+ --------------------------------------------------
+ 
+ In most makefiles, you will have to specify a list of directories, and
+ store it in a variable.  For small projects, it is often easier to
+ specify each of them by hand, since you then have full control over what
+ is the proper order for these directories, which ones should be
+ included.
+ 
+ However, in larger projects, which might involve hundreds of
+ subdirectories, it might be more convenient to generate this list
+ automatically.
+ 
+ The example below presents two methods.  The first one, although less
+ general, gives you more control over the list.  It involves wildcard
+ characters, that are automatically expanded by ‘make’.  Its shortcoming
+ is that you need to explicitly specify some of the organization of your
+ project, such as for instance the directory tree depth, whether some
+ directories are found in a separate tree, etc.
+ 
+ The second method is the most general one.  It requires an external
+ program, called ‘find’, which is standard on all Unix systems.  All the
+ directories found under a given root directory will be added to the
+ list.
+ 
+      # The examples below are based on the following directory hierarchy:
+      # All the directories can contain any number of files
+      # ROOT_DIRECTORY ->  a  ->  aa  ->  aaa
+      #                       ->  ab
+      #                       ->  ac
+      #                ->  b  ->  ba  ->  baa
+      #                       ->  bb
+      #                       ->  bc
+      # This Makefile creates a variable called DIRS, that can be reused any time
+      # you need this list (see the other examples in this section)
+ 
+      # The root of your project's directory hierarchy
+      ROOT_DIRECTORY=.
+ 
+      ####
+      # First method: specify explicitly the list of directories
+      # This allows you to specify any subset of all the directories you need.
+      ####
+ 
+      DIRS := a/aa/ a/ab/ b/ba/
+ 
+      ####
+      # Second method: use wildcards
+      # Note that the argument(s) to wildcard below should end with a '/'.
+      # Since wildcards also return file names, we have to filter them out
+      # to avoid duplicate directory names.
+      # We thus use make's ``dir`` and ``sort`` functions.
+      # It sets DIRs to the following value (note that the directories aaa and baa
+      # are not given, unless you change the arguments to wildcard).
+      # DIRS= ./a/a/ ./b/ ./a/aa/ ./a/ab/ ./a/ac/ ./b/ba/ ./b/bb/ ./b/bc/
+      ####
+ 
+      DIRS := ${sort ${dir ${wildcard ${ROOT_DIRECTORY}/*/
+                          ${ROOT_DIRECTORY}/*/*/}}}
+ 
+      ####
+      # Third method: use an external program
+      # This command is much faster if run on local disks, avoiding NFS slowdowns.
+      # This is the most complete command: it sets DIRs to the following value:
+      # DIRS= ./a ./a/aa ./a/aa/aaa ./a/ab ./a/ac ./b ./b/ba ./b/ba/baa ./b/bb ./b/bc
+      ####
+ 
+      DIRS := ${shell find ${ROOT_DIRECTORY} -type d -print}
+ 
+ 
+ File: gnat_ugn.info,  Node: Generating the Command Line Switches,  Next: Overcoming Command Line Length Limits,  Prev: Automatically Creating a List of Directories,  Up: Using the GNU make Utility
+ 
+ 4.7.3 Generating the Command Line Switches
+ ------------------------------------------
+ 
+ Once you have created the list of directories as explained in the
+ previous section (*note Automatically Creating a List of Directories:
+ 12e.), you can easily generate the command line arguments to pass to
+ gnatmake.
+ 
+ For the sake of completeness, this example assumes that the source path
+ is not the same as the object path, and that you have two separate lists
+ of directories.
+ 
+      # see "Automatically creating a list of directories" to create
+      # these variables
+      SOURCE_DIRS=
+      OBJECT_DIRS=
+ 
+      GNATMAKE_SWITCHES := ${patsubst %,-aI%,${SOURCE_DIRS}}
+      GNATMAKE_SWITCHES += ${patsubst %,-aO%,${OBJECT_DIRS}}
+ 
+      all:
+              gnatmake ${GNATMAKE_SWITCHES} main_unit
+ 
+ 
+ File: gnat_ugn.info,  Node: Overcoming Command Line Length Limits,  Prev: Generating the Command Line Switches,  Up: Using the GNU make Utility
+ 
+ 4.7.4 Overcoming Command Line Length Limits
+ -------------------------------------------
+ 
+ One problem that might be encountered on big projects is that many
+ operating systems limit the length of the command line.  It is thus hard
+ to give gnatmake the list of source and object directories.
+ 
+ This example shows how you can set up environment variables, which will
+ make ‘gnatmake’ behave exactly as if the directories had been specified
+ on the command line, but have a much higher length limit (or even none
+ on most systems).
+ 
+ It assumes that you have created a list of directories in your Makefile,
+ using one of the methods presented in *note Automatically Creating a
+ List of Directories: 12e.  For the sake of completeness, we assume that
+ the object path (where the ALI files are found) is different from the
+ sources patch.
+ 
+ Note a small trick in the Makefile below: for efficiency reasons, we
+ create two temporary variables (SOURCE_LIST and OBJECT_LIST), that are
+ expanded immediately by ‘make’.  This way we overcome the standard make
+ behavior which is to expand the variables only when they are actually
+ used.
+ 
+ On Windows, if you are using the standard Windows command shell, you
+ must replace colons with semicolons in the assignments to these
+ variables.
+ 
+      # In this example, we create both ADA_INCLUDE_PATH and ADA_OBJECTS_PATH.
+      # This is the same thing as putting the -I arguments on the command line.
+      # (the equivalent of using -aI on the command line would be to define
+      #  only ADA_INCLUDE_PATH, the equivalent of -aO is ADA_OBJECTS_PATH).
+      # You can of course have different values for these variables.
+      #
+      # Note also that we need to keep the previous values of these variables, since
+      # they might have been set before running 'make' to specify where the GNAT
+      # library is installed.
+ 
+      # see "Automatically creating a list of directories" to create these
+      # variables
+      SOURCE_DIRS=
+      OBJECT_DIRS=
+ 
+      empty:=
+      space:=${empty} ${empty}
+      SOURCE_LIST := ${subst ${space},:,${SOURCE_DIRS}}
+      OBJECT_LIST := ${subst ${space},:,${OBJECT_DIRS}}
+      ADA_INCLUDE_PATH += ${SOURCE_LIST}
+      ADA_OBJECTS_PATH += ${OBJECT_LIST}
+      export ADA_INCLUDE_PATH
+      export ADA_OBJECTS_PATH
+ 
+      all:
+              gnatmake main_unit
+ 
+ 
+ File: gnat_ugn.info,  Node: GNAT Utility Programs,  Next: GNAT and Program Execution,  Prev: Building Executable Programs with GNAT,  Up: Top
+ 
+ 5 GNAT Utility Programs
+ ***********************
+ 
+ This chapter describes a number of utility programs:
+ 
+    * *note The File Cleanup Utility gnatclean: 136.
+ 
+    * *note The GNAT Library Browser gnatls: 137.
+ 
+ Other GNAT utilities are described elsewhere in this manual:
+ 
+    * *note Handling Arbitrary File Naming Conventions with gnatname: 42.
+ 
+    * *note File Name Krunching with gnatkr: 4c.
+ 
+    * *note Renaming Files with gnatchop: 1d.
+ 
+    * *note Preprocessing with gnatprep: 8f.
+ 
+ * Menu:
+ 
+ * The File Cleanup Utility gnatclean::
+ * The GNAT Library Browser gnatls::
+ 
+ 
+ File: gnat_ugn.info,  Node: The File Cleanup Utility gnatclean,  Next: The GNAT Library Browser gnatls,  Up: GNAT Utility Programs
+ 
+ 5.1 The File Cleanup Utility ‘gnatclean’
+ ========================================
+ 
+ ‘gnatclean’ is a tool that allows the deletion of files produced by the
+ compiler, binder and linker, including ALI files, object files, tree
+ files, expanded source files, library files, interface copy source
+ files, binder generated files and executable files.
+ 
+ * Menu:
+ 
+ * Running gnatclean::
+ * Switches for gnatclean::
+ 
+ 
+ File: gnat_ugn.info,  Node: Running gnatclean,  Next: Switches for gnatclean,  Up: The File Cleanup Utility gnatclean
+ 
+ 5.1.1 Running ‘gnatclean’
+ -------------------------
+ 
+ The ‘gnatclean’ command has the form:
+ 
+           $ gnatclean switches names
+ 
+ where ‘names’ is a list of source file names.  Suffixes ‘.ads’ and ‘adb’
+ may be omitted.  If a project file is specified using switch ‘-P’, then
+ ‘names’ may be completely omitted.
+ 
+ In normal mode, ‘gnatclean’ delete the files produced by the compiler
+ and, if switch ‘-c’ is not specified, by the binder and the linker.  In
+ informative-only mode, specified by switch ‘-n’, the list of files that
+ would have been deleted in normal mode is listed, but no file is
+ actually deleted.
+ 
+ 
+ File: gnat_ugn.info,  Node: Switches for gnatclean,  Prev: Running gnatclean,  Up: The File Cleanup Utility gnatclean
+ 
+ 5.1.2 Switches for ‘gnatclean’
+ ------------------------------
+ 
+ ‘gnatclean’ recognizes the following switches:
+ 
+ ‘--version’
+ 
+      Display copyright and version, then exit disregarding all other
+      options.
+ 
+ ‘--help’
+ 
+      If ‘--version’ was not used, display usage, then exit disregarding
+      all other options.
+ 
+ ‘--subdirs=`subdir'’
+ 
+      Actual object directory of each project file is the subdirectory
+      subdir of the object directory specified or defaulted in the
+      project file.
+ 
+ ‘--unchecked-shared-lib-imports’
+ 
+      By default, shared library projects are not allowed to import
+      static library projects.  When this switch is used on the command
+      line, this restriction is relaxed.
+ 
+ ‘-c’
+ 
+      Only attempt to delete the files produced by the compiler, not
+      those produced by the binder or the linker.  The files that are not
+      to be deleted are library files, interface copy files, binder
+      generated files and executable files.
+ 
+ ‘-D `dir'’
+ 
+      Indicate that ALI and object files should normally be found in
+      directory ‘dir’.
+ 
+ ‘-F’
+ 
+      When using project files, if some errors or warnings are detected
+      during parsing and verbose mode is not in effect (no use of switch
+      -v), then error lines start with the full path name of the project
+      file, rather than its simple file name.
+ 
+ ‘-h’
+ 
+      Output a message explaining the usage of ‘gnatclean’.
+ 
+ ‘-n’
+ 
+      Informative-only mode.  Do not delete any files.  Output the list
+      of the files that would have been deleted if this switch was not
+      specified.
+ 
+ ‘-P`project'’
+ 
+      Use project file ‘project’.  Only one such switch can be used.
+      When cleaning a project file, the files produced by the compilation
+      of the immediate sources or inherited sources of the project files
+      are to be deleted.  This is not depending on the presence or not of
+      executable names on the command line.
+ 
+ ‘-q’
+ 
+      Quiet output.  If there are no errors, do not output anything,
+      except in verbose mode (switch -v) or in informative-only mode
+      (switch -n).
+ 
+ ‘-r’
+ 
+      When a project file is specified (using switch -P), clean all
+      imported and extended project files, recursively.  If this switch
+      is not specified, only the files related to the main project file
+      are to be deleted.  This switch has no effect if no project file is
+      specified.
+ 
+ ‘-v’
+ 
+      Verbose mode.
+ 
+ ‘-vP`x'’
+ 
+      Indicates the verbosity of the parsing of GNAT project files.
+      *note Switches Related to Project Files: cf.
+ 
+ ‘-X`name'=`value'’
+ 
+      Indicates that external variable ‘name’ has the value ‘value’.  The
+      Project Manager will use this value for occurrences of
+      ‘external(name)’ when parsing the project file.  See *note Switches
+      Related to Project Files: cf.
+ 
+ ‘-aO`dir'’
+ 
+      When searching for ALI and object files, look in directory ‘dir’.
+ 
+ ‘-I`dir'’
+ 
+      Equivalent to ‘-aO`dir'’.
+ 
+ ‘-I-’
+ 
+      Do not look for ALI or object files in the directory where
+      ‘gnatclean’ was invoked.
+ 
+ 
+ File: gnat_ugn.info,  Node: The GNAT Library Browser gnatls,  Prev: The File Cleanup Utility gnatclean,  Up: GNAT Utility Programs
+ 
+ 5.2 The GNAT Library Browser ‘gnatls’
+ =====================================
+ 
+ ‘gnatls’ is a tool that outputs information about compiled units.  It
+ gives the relationship between objects, unit names and source files.  It
+ can also be used to check the source dependencies of a unit as well as
+ various characteristics.
+ 
+ * Menu:
+ 
+ * Running gnatls::
+ * Switches for gnatls::
+ * Example of gnatls Usage::
+ 
+ 
+ File: gnat_ugn.info,  Node: Running gnatls,  Next: Switches for gnatls,  Up: The GNAT Library Browser gnatls
+ 
+ 5.2.1 Running ‘gnatls’
+ ----------------------
+ 
+ The ‘gnatls’ command has the form
+ 
+           $ gnatls switches object_or_ali_file
+ 
+ The main argument is the list of object or ‘ali’ files (see *note The
+ Ada Library Information Files: 28.) for which information is requested.
+ 
+ In normal mode, without additional option, ‘gnatls’ produces a
+ four-column listing.  Each line represents information for a specific
+ object.  The first column gives the full path of the object, the second
+ column gives the name of the principal unit in this object, the third
+ column gives the status of the source and the fourth column gives the
+ full path of the source representing this unit.  Here is a simple
+ example of use:
+ 
+           $ gnatls *.o
+           ./demo1.o            demo1            DIF demo1.adb
+           ./demo2.o            demo2             OK demo2.adb
+           ./hello.o            h1                OK hello.adb
+           ./instr-child.o      instr.child      MOK instr-child.adb
+           ./instr.o            instr             OK instr.adb
+           ./tef.o              tef              DIF tef.adb
+           ./text_io_example.o  text_io_example   OK text_io_example.adb
+           ./tgef.o             tgef             DIF tgef.adb
+ 
+ The first line can be interpreted as follows: the main unit which is
+ contained in object file ‘demo1.o’ is demo1, whose main source is in
+ ‘demo1.adb’.  Furthermore, the version of the source used for the
+ compilation of demo1 has been modified (DIF). Each source file has a
+ status qualifier which can be:
+ 
+ ‘OK (unchanged)’
+ 
+      The version of the source file used for the compilation of the
+      specified unit corresponds exactly to the actual source file.
+ 
+ ‘MOK (slightly modified)’
+ 
+      The version of the source file used for the compilation of the
+      specified unit differs from the actual source file but not enough
+      to require recompilation.  If you use gnatmake with the option ‘-m’
+      (minimal recompilation), a file marked MOK will not be recompiled.
+ 
+ ‘DIF (modified)’
+ 
+      No version of the source found on the path corresponds to the
+      source used to build this object.
+ 
+ ‘??? (file not found)’
+ 
+      No source file was found for this unit.
+ 
+ ‘HID (hidden, unchanged version not first on PATH)’
+ 
+      The version of the source that corresponds exactly to the source
+      used for compilation has been found on the path but it is hidden by
+      another version of the same source that has been modified.
+ 
+ 
+ File: gnat_ugn.info,  Node: Switches for gnatls,  Next: Example of gnatls Usage,  Prev: Running gnatls,  Up: The GNAT Library Browser gnatls
+ 
+ 5.2.2 Switches for ‘gnatls’
+ ---------------------------
+ 
+ ‘gnatls’ recognizes the following switches:
+ 
+ ‘--version’
+ 
+      Display copyright and version, then exit disregarding all other
+      options.
+ 
+ ‘--help’
+ 
+      If ‘--version’ was not used, display usage, then exit disregarding
+      all other options.
+ 
+ ‘-a’
+ 
+      Consider all units, including those of the predefined Ada library.
+      Especially useful with ‘-d’.
+ 
+ ‘-d’
+ 
+      List sources from which specified units depend on.
+ 
+ ‘-h’
+ 
+      Output the list of options.
+ 
+ ‘-o’
+ 
+      Only output information about object files.
+ 
+ ‘-s’
+ 
+      Only output information about source files.
+ 
+ ‘-u’
+ 
+      Only output information about compilation units.
+ 
+ ‘-files=`file'’
+ 
+      Take as arguments the files listed in text file ‘file’.  Text file
+      ‘file’ may contain empty lines that are ignored.  Each nonempty
+      line should contain the name of an existing file.  Several such
+      switches may be specified simultaneously.
+ 
+ ‘-aO`dir'’, ‘-aI`dir'’, ‘-I`dir'’, ‘-I-’, ‘-nostdinc’
+ 
+      Source path manipulation.  Same meaning as the equivalent
+      ‘gnatmake’ flags (*note Switches for gnatmake: ce.).
+ 
+ ‘-aP`dir'’
+ 
+      Add ‘dir’ at the beginning of the project search dir.
+ 
+ ‘--RTS=`rts-path'’
+ 
+      Specifies the default location of the runtime library.  Same
+      meaning as the equivalent ‘gnatmake’ flag (*note Switches for
+      gnatmake: ce.).
+ 
+ ‘-v’
+ 
+      Verbose mode.  Output the complete source, object and project
+      paths.  Do not use the default column layout but instead use long
+      format giving as much as information possible on each requested
+      units, including special characteristics such as:
+ 
+         * ‘Preelaborable’: The unit is preelaborable in the Ada sense.
+ 
+         * ‘No_Elab_Code’: No elaboration code has been produced by the
+           compiler for this unit.
+ 
+         * ‘Pure’: The unit is pure in the Ada sense.
+ 
+         * ‘Elaborate_Body’: The unit contains a pragma Elaborate_Body.
+ 
+         * ‘Remote_Types’: The unit contains a pragma Remote_Types.
+ 
+         * ‘Shared_Passive’: The unit contains a pragma Shared_Passive.
+ 
+         * ‘Predefined’: This unit is part of the predefined environment
+           and cannot be modified by the user.
+ 
+         * ‘Remote_Call_Interface’: The unit contains a pragma
+           Remote_Call_Interface.
+ 
+ 
+ File: gnat_ugn.info,  Node: Example of gnatls Usage,  Prev: Switches for gnatls,  Up: The GNAT Library Browser gnatls
+ 
+ 5.2.3 Example of ‘gnatls’ Usage
+ -------------------------------
+ 
+ Example of using the verbose switch.  Note how the source and object
+ paths are affected by the -I switch.
+ 
+           $ gnatls -v -I.. demo1.o
+ 
+           GNATLS 5.03w (20041123-34)
+           Copyright 1997-2004 Free Software Foundation, Inc.
+ 
+           Source Search Path:
+              <Current_Directory>
+              ../
+              /home/comar/local/adainclude/
+ 
+           Object Search Path:
+              <Current_Directory>
+              ../
+              /home/comar/local/lib/gcc-lib/x86-linux/3.4.3/adalib/
+ 
+           Project Search Path:
+              <Current_Directory>
+              /home/comar/local/lib/gnat/
+ 
+           ./demo1.o
+              Unit =>
+                Name   => demo1
+                Kind   => subprogram body
+                Flags  => No_Elab_Code
+                Source => demo1.adb    modified
+ 
+ The following is an example of use of the dependency list.  Note the use
+ of the -s switch which gives a straight list of source files.  This can
+ be useful for building specialized scripts.
+ 
+           $ gnatls -d demo2.o
+           ./demo2.o   demo2        OK demo2.adb
+                                    OK gen_list.ads
+                                    OK gen_list.adb
+                                    OK instr.ads
+                                    OK instr-child.ads
+ 
+           $ gnatls -d -s -a demo1.o
+           demo1.adb
+           /home/comar/local/adainclude/ada.ads
+           /home/comar/local/adainclude/a-finali.ads
+           /home/comar/local/adainclude/a-filico.ads
+           /home/comar/local/adainclude/a-stream.ads
+           /home/comar/local/adainclude/a-tags.ads
+           gen_list.ads
+           gen_list.adb
+           /home/comar/local/adainclude/gnat.ads
+           /home/comar/local/adainclude/g-io.ads
+           instr.ads
+           /home/comar/local/adainclude/system.ads
+           /home/comar/local/adainclude/s-exctab.ads
+           /home/comar/local/adainclude/s-finimp.ads
+           /home/comar/local/adainclude/s-finroo.ads
+           /home/comar/local/adainclude/s-secsta.ads
+           /home/comar/local/adainclude/s-stalib.ads
+           /home/comar/local/adainclude/s-stoele.ads
+           /home/comar/local/adainclude/s-stratt.ads
+           /home/comar/local/adainclude/s-tasoli.ads
+           /home/comar/local/adainclude/s-unstyp.ads
+           /home/comar/local/adainclude/unchconv.ads
+ 
+ 
+ File: gnat_ugn.info,  Node: GNAT and Program Execution,  Next: Platform-Specific Information,  Prev: GNAT Utility Programs,  Up: Top
+ 
+ 6 GNAT and Program Execution
+ ****************************
+ 
+ This chapter covers several topics:
+ 
+    * *note Running and Debugging Ada Programs: 146.
+ 
+    * *note Profiling: 147.
+ 
+    * *note Improving Performance: 148.
+ 
+    * *note Overflow Check Handling in GNAT: 149.
+ 
+    * *note Performing Dimensionality Analysis in GNAT: 14a.
+ 
+    * *note Stack Related Facilities: 14b.
+ 
+    * *note Memory Management Issues: 14c.
+ 
+ * Menu:
+ 
+ * Running and Debugging Ada Programs::
+ * Profiling::
+ * Improving Performance::
+ * Overflow Check Handling in GNAT::
+ * Performing Dimensionality Analysis in GNAT::
+ * Stack Related Facilities::
+ * Memory Management Issues::
+ 
+ 
+ File: gnat_ugn.info,  Node: Running and Debugging Ada Programs,  Next: Profiling,  Up: GNAT and Program Execution
+ 
+ 6.1 Running and Debugging Ada Programs
+ ======================================
+ 
+ This section discusses how to debug Ada programs.
+ 
+ An incorrect Ada program may be handled in three ways by the GNAT
+ compiler:
+ 
+    * The illegality may be a violation of the static semantics of Ada.
+      In that case GNAT diagnoses the constructs in the program that are
+      illegal.  It is then a straightforward matter for the user to
+      modify those parts of the program.
+ 
+    * The illegality may be a violation of the dynamic semantics of Ada.
+      In that case the program compiles and executes, but may generate
+      incorrect results, or may terminate abnormally with some exception.
+ 
+    * When presented with a program that contains convoluted errors, GNAT
+      itself may terminate abnormally without providing full diagnostics
+      on the incorrect user program.
+ 
+ * Menu:
+ 
+ * The GNAT Debugger GDB::
+ * Running GDB::
+ * Introduction to GDB Commands::
+ * Using Ada Expressions::
+ * Calling User-Defined Subprograms::
+ * Using the next Command in a Function::
+ * Stopping When Ada Exceptions Are Raised::
+ * Ada Tasks::
+ * Debugging Generic Units::
+ * Remote Debugging with gdbserver::
+ * GNAT Abnormal Termination or Failure to Terminate::
+ * Naming Conventions for GNAT Source Files::
+ * Getting Internal Debugging Information::
+ * Stack Traceback::
+ * Pretty-Printers for the GNAT runtime::
+ 
+ 
+ File: gnat_ugn.info,  Node: The GNAT Debugger GDB,  Next: Running GDB,  Up: Running and Debugging Ada Programs
+ 
+ 6.1.1 The GNAT Debugger GDB
+ ---------------------------
+ 
+ ‘GDB’ is a general purpose, platform-independent debugger that can be
+ used to debug mixed-language programs compiled with ‘gcc’, and in
+ particular is capable of debugging Ada programs compiled with GNAT. The
+ latest versions of ‘GDB’ are Ada-aware and can handle complex Ada data
+ structures.
+ 
+ See ‘Debugging with GDB’, for full details on the usage of ‘GDB’,
+ including a section on its usage on programs.  This manual should be
+ consulted for full details.  The section that follows is a brief
+ introduction to the philosophy and use of ‘GDB’.
+ 
+ When GNAT programs are compiled, the compiler optionally writes
+ debugging information into the generated object file, including
+ information on line numbers, and on declared types and variables.  This
+ information is separate from the generated code.  It makes the object
+ files considerably larger, but it does not add to the size of the actual
+ executable that will be loaded into memory, and has no impact on
+ run-time performance.  The generation of debug information is triggered
+ by the use of the ‘-g’ switch in the ‘gcc’ or ‘gnatmake’ command used to
+ carry out the compilations.  It is important to emphasize that the use
+ of these options does not change the generated code.
+ 
+ The debugging information is written in standard system formats that are
+ used by many tools, including debuggers and profilers.  The format of
+ the information is typically designed to describe C types and semantics,
+ but GNAT implements a translation scheme which allows full details about
+ Ada types and variables to be encoded into these standard C formats.
+ Details of this encoding scheme may be found in the file exp_dbug.ads in
+ the GNAT source distribution.  However, the details of this encoding
+ are, in general, of no interest to a user, since ‘GDB’ automatically
+ performs the necessary decoding.
+ 
+ When a program is bound and linked, the debugging information is
+ collected from the object files, and stored in the executable image of
+ the program.  Again, this process significantly increases the size of
+ the generated executable file, but it does not increase the size of the
+ executable program itself.  Furthermore, if this program is run in the
+ normal manner, it runs exactly as if the debug information were not
+ present, and takes no more actual memory.
+ 
+ However, if the program is run under control of ‘GDB’, the debugger is
+ activated.  The image of the program is loaded, at which point it is
+ ready to run.  If a run command is given, then the program will run
+ exactly as it would have if ‘GDB’ were not present.  This is a crucial
+ part of the ‘GDB’ design philosophy.  ‘GDB’ is entirely non-intrusive
+ until a breakpoint is encountered.  If no breakpoint is ever hit, the
+ program will run exactly as it would if no debugger were present.  When
+ a breakpoint is hit, ‘GDB’ accesses the debugging information and can
+ respond to user commands to inspect variables, and more generally to
+ report on the state of execution.
+ 
+ 
+ File: gnat_ugn.info,  Node: Running GDB,  Next: Introduction to GDB Commands,  Prev: The GNAT Debugger GDB,  Up: Running and Debugging Ada Programs
+ 
+ 6.1.2 Running GDB
+ -----------------
+ 
+ This section describes how to initiate the debugger.
+ 
+ The debugger can be launched from a ‘GNAT Studio’ menu or directly from
+ the command line.  The description below covers the latter use.  All the
+ commands shown can be used in the ‘GNAT Studio’ debug console window,
+ but there are usually more GUI-based ways to achieve the same effect.
+ 
+ The command to run ‘GDB’ is
+ 
+           $ gdb program
+ 
+ where ‘program’ is the name of the executable file.  This activates the
+ debugger and results in a prompt for debugger commands.  The simplest
+ command is simply ‘run’, which causes the program to run exactly as if
+ the debugger were not present.  The following section describes some of
+ the additional commands that can be given to ‘GDB’.
+ 
+ 
+ File: gnat_ugn.info,  Node: Introduction to GDB Commands,  Next: Using Ada Expressions,  Prev: Running GDB,  Up: Running and Debugging Ada Programs
+ 
+ 6.1.3 Introduction to GDB Commands
+ ----------------------------------
+ 
+ ‘GDB’ contains a large repertoire of commands.  See ‘Debugging with GDB’
+ for extensive documentation on the use of these commands, together with
+ examples of their use.  Furthermore, the command ‘help’ invoked from
+ within GDB activates a simple help facility which summarizes the
+ available commands and their options.  In this section we summarize a
+ few of the most commonly used commands to give an idea of what ‘GDB’ is
+ about.  You should create a simple program with debugging information
+ and experiment with the use of these ‘GDB’ commands on the program as
+ you read through the following section.
+ 
+    * 
+      ‘set args ARGUMENTS’
+ 
+           The ‘arguments’ list above is a list of arguments to be passed
+           to the program on a subsequent run command, just as though the
+           arguments had been entered on a normal invocation of the
+           program.  The ‘set args’ command is not needed if the program
+           does not require arguments.
+ 
+    * 
+      ‘run’
+ 
+           The ‘run’ command causes execution of the program to start
+           from the beginning.  If the program is already running, that
+           is to say if you are currently positioned at a breakpoint,
+           then a prompt will ask for confirmation that you want to
+           abandon the current execution and restart.
+ 
+    * 
+      ‘breakpoint LOCATION’
+ 
+           The breakpoint command sets a breakpoint, that is to say a
+           point at which execution will halt and ‘GDB’ will await
+           further commands.  ‘location’ is either a line number within a
+           file, given in the format ‘file:linenumber’, or it is the name
+           of a subprogram.  If you request that a breakpoint be set on a
+           subprogram that is overloaded, a prompt will ask you to
+           specify on which of those subprograms you want to breakpoint.
+           You can also specify that all of them should be breakpointed.
+           If the program is run and execution encounters the breakpoint,
+           then the program stops and ‘GDB’ signals that the breakpoint
+           was encountered by printing the line of code before which the
+           program is halted.
+ 
+    * 
+      ‘catch exception NAME’
+ 
+           This command causes the program execution to stop whenever
+           exception ‘name’ is raised.  If ‘name’ is omitted, then the
+           execution is suspended when any exception is raised.
+ 
+    * 
+      ‘print EXPRESSION’
+ 
+           This will print the value of the given expression.  Most
+           simple Ada expression formats are properly handled by ‘GDB’,
+           so the expression can contain function calls, variables,
+           operators, and attribute references.
+ 
+    * 
+      ‘continue’
+ 
+           Continues execution following a breakpoint, until the next
+           breakpoint or the termination of the program.
+ 
+    * 
+      ‘step’
+ 
+           Executes a single line after a breakpoint.  If the next
+           statement is a subprogram call, execution continues into (the
+           first statement of) the called subprogram.
+ 
+    * 
+      ‘next’
+ 
+           Executes a single line.  If this line is a subprogram call,
+           executes and returns from the call.
+ 
+    * 
+      ‘list’
+ 
+           Lists a few lines around the current source location.  In
+           practice, it is usually more convenient to have a separate
+           edit window open with the relevant source file displayed.
+           Successive applications of this command print subsequent
+           lines.  The command can be given an argument which is a line
+           number, in which case it displays a few lines around the
+           specified one.
+ 
+    * 
+      ‘backtrace’
+ 
+           Displays a backtrace of the call chain.  This command is
+           typically used after a breakpoint has occurred, to examine the
+           sequence of calls that leads to the current breakpoint.  The
+           display includes one line for each activation record (frame)
+           corresponding to an active subprogram.
+ 
+    * 
+      ‘up’
+ 
+           At a breakpoint, ‘GDB’ can display the values of variables
+           local to the current frame.  The command ‘up’ can be used to
+           examine the contents of other active frames, by moving the
+           focus up the stack, that is to say from callee to caller, one
+           frame at a time.
+ 
+    * 
+      ‘down’
+ 
+           Moves the focus of ‘GDB’ down from the frame currently being
+           examined to the frame of its callee (the reverse of the
+           previous command),
+ 
+    * 
+      ‘frame N’
+ 
+           Inspect the frame with the given number.  The value 0 denotes
+           the frame of the current breakpoint, that is to say the top of
+           the call stack.
+ 
+    * 
+      ‘kill’
+ 
+           Kills the child process in which the program is running under
+           GDB. This may be useful for several purposes:
+ 
+              * It allows you to recompile and relink your program, since
+                on many systems you cannot regenerate an executable file
+                while it is running in a process.
+ 
+              * You can run your program outside the debugger, on systems
+                that do not permit executing a program outside GDB while
+                breakpoints are set within GDB.
+ 
+              * It allows you to debug a core dump rather than a running
+                process.
+ 
+ The above list is a very short introduction to the commands that ‘GDB’
+ provides.  Important additional capabilities, including conditional
+ breakpoints, the ability to execute command sequences on a breakpoint,
+ the ability to debug at the machine instruction level and many other
+ features are described in detail in ‘Debugging with GDB’. Note that most
+ commands can be abbreviated (for example, c for continue, bt for
+ backtrace).
+ 
+ 
+ File: gnat_ugn.info,  Node: Using Ada Expressions,  Next: Calling User-Defined Subprograms,  Prev: Introduction to GDB Commands,  Up: Running and Debugging Ada Programs
+ 
+ 6.1.4 Using Ada Expressions
+ ---------------------------
+ 
+ ‘GDB’ supports a fairly large subset of Ada expression syntax, with some
+ extensions.  The philosophy behind the design of this subset is
+ 
+         * That ‘GDB’ should provide basic literals and access to
+           operations for arithmetic, dereferencing, field selection,
+           indexing, and subprogram calls, leaving more sophisticated
+           computations to subprograms written into the program (which
+           therefore may be called from ‘GDB’).
+ 
+         * That type safety and strict adherence to Ada language
+           restrictions are not particularly relevant in a debugging
+           context.
+ 
+         * That brevity is important to the ‘GDB’ user.
+ 
+ Thus, for brevity, the debugger acts as if there were implicit ‘with’
+ and ‘use’ clauses in effect for all user-written packages, thus making
+ it unnecessary to fully qualify most names with their packages,
+ regardless of context.  Where this causes ambiguity, ‘GDB’ asks the
+ user’s intent.
+ 
+ For details on the supported Ada syntax, see ‘Debugging with GDB’.
+ 
+ 
+ File: gnat_ugn.info,  Node: Calling User-Defined Subprograms,  Next: Using the next Command in a Function,  Prev: Using Ada Expressions,  Up: Running and Debugging Ada Programs
+ 
+ 6.1.5 Calling User-Defined Subprograms
+ --------------------------------------
+ 
+ An important capability of ‘GDB’ is the ability to call user-defined
+ subprograms while debugging.  This is achieved simply by entering a
+ subprogram call statement in the form:
+ 
+           call subprogram-name (parameters)
+ 
+ The keyword ‘call’ can be omitted in the normal case where the
+ ‘subprogram-name’ does not coincide with any of the predefined ‘GDB’
+ commands.
+ 
+ The effect is to invoke the given subprogram, passing it the list of
+ parameters that is supplied.  The parameters can be expressions and can
+ include variables from the program being debugged.  The subprogram must
+ be defined at the library level within your program, and ‘GDB’ will call
+ the subprogram within the environment of your program execution (which
+ means that the subprogram is free to access or even modify variables
+ within your program).
+ 
+ The most important use of this facility is in allowing the inclusion of
+ debugging routines that are tailored to particular data structures in
+ your program.  Such debugging routines can be written to provide a
+ suitably high-level description of an abstract type, rather than a
+ low-level dump of its physical layout.  After all, the standard ‘GDB
+ print’ command only knows the physical layout of your types, not their
+ abstract meaning.  Debugging routines can provide information at the
+ desired semantic level and are thus enormously useful.
+ 
+ For example, when debugging GNAT itself, it is crucial to have access to
+ the contents of the tree nodes used to represent the program internally.
+ But tree nodes are represented simply by an integer value (which in turn
+ is an index into a table of nodes).  Using the ‘print’ command on a tree
+ node would simply print this integer value, which is not very useful.
+ But the PN routine (defined in file treepr.adb in the GNAT sources)
+ takes a tree node as input, and displays a useful high level
+ representation of the tree node, which includes the syntactic category
+ of the node, its position in the source, the integers that denote
+ descendant nodes and parent node, as well as varied semantic
+ information.  To study this example in more detail, you might want to
+ look at the body of the PN procedure in the stated file.
+ 
+ Another useful application of this capability is to deal with situations
+ of complex data which are not handled suitably by GDB. For example, if
+ you specify Convention Fortran for a multi-dimensional array, GDB does
+ not know that the ordering of array elements has been switched and will
+ not properly address the array elements.  In such a case, instead of
+ trying to print the elements directly from GDB, you can write a callable
+ procedure that prints the elements in the desired format.
+ 
+ 
+ File: gnat_ugn.info,  Node: Using the next Command in a Function,  Next: Stopping When Ada Exceptions Are Raised,  Prev: Calling User-Defined Subprograms,  Up: Running and Debugging Ada Programs
+ 
+ 6.1.6 Using the ‘next’ Command in a Function
+ --------------------------------------------
+ 
+ When you use the ‘next’ command in a function, the current source
+ location will advance to the next statement as usual.  A special case
+ arises in the case of a ‘return’ statement.
+ 
+ Part of the code for a return statement is the ‘epilogue’ of the
+ function.  This is the code that returns to the caller.  There is only
+ one copy of this epilogue code, and it is typically associated with the
+ last return statement in the function if there is more than one return.
+ In some implementations, this epilogue is associated with the first
+ statement of the function.
+ 
+ The result is that if you use the ‘next’ command from a return statement
+ that is not the last return statement of the function you may see a
+ strange apparent jump to the last return statement or to the start of
+ the function.  You should simply ignore this odd jump.  The value
+ returned is always that from the first return statement that was stepped
+ through.
+ 
+ 
+ File: gnat_ugn.info,  Node: Stopping When Ada Exceptions Are Raised,  Next: Ada Tasks,  Prev: Using the next Command in a Function,  Up: Running and Debugging Ada Programs
+ 
+ 6.1.7 Stopping When Ada Exceptions Are Raised
+ ---------------------------------------------
+ 
+ You can set catchpoints that stop the program execution when your
+ program raises selected exceptions.
+ 
+    * 
+      ‘catch exception’
+ 
+           Set a catchpoint that stops execution whenever (any task in
+           the) program raises any exception.
+ 
+    * 
+      ‘catch exception NAME’
+ 
+           Set a catchpoint that stops execution whenever (any task in
+           the) program raises the exception ‘name’.
+ 
+    * 
+      ‘catch exception unhandled’
+ 
+           Set a catchpoint that stops executing whenever (any task in
+           the) program raises an exception for which there is no
+           handler.
+ 
+    * 
+      ‘info exceptions’, ‘info exceptions REGEXP’
+ 
+           The ‘info exceptions’ command permits the user to examine all
+           defined exceptions within Ada programs.  With a regular
+           expression, ‘regexp’, as argument, prints out only those
+           exceptions whose name matches ‘regexp’.
+ 
+ 
+ File: gnat_ugn.info,  Node: Ada Tasks,  Next: Debugging Generic Units,  Prev: Stopping When Ada Exceptions Are Raised,  Up: Running and Debugging Ada Programs
+ 
+ 6.1.8 Ada Tasks
+ ---------------
+ 
+ ‘GDB’ allows the following task-related commands:
+ 
+    * 
+      ‘info tasks’
+ 
+           This command shows a list of current Ada tasks, as in the
+           following example:
+ 
+                (gdb) info tasks
+                  ID       TID P-ID   Thread Pri State                 Name
+                   1   8088000   0   807e000  15 Child Activation Wait main_task
+                   2   80a4000   1   80ae000  15 Accept/Select Wait    b
+                   3   809a800   1   80a4800  15 Child Activation Wait a
+                *  4   80ae800   3   80b8000  15 Running               c
+ 
+           In this listing, the asterisk before the first task indicates
+           it to be the currently running task.  The first column lists
+           the task ID that is used to refer to tasks in the following
+           commands.
+ 
+    * ‘break’ ‘linespec’ ‘task’ ‘taskid’, ‘break’ ‘linespec’ ‘task’
+      ‘taskid’ ‘if’ …
+ 
+           These commands are like the ‘break ... thread ...’.
+           ‘linespec’ specifies source lines.
+ 
+           Use the qualifier ‘task TASKID’ with a breakpoint command to
+           specify that you only want ‘GDB’ to stop the program when a
+           particular Ada task reaches this breakpoint.  ‘taskid’ is one
+           of the numeric task identifiers assigned by ‘GDB’, shown in
+           the first column of the ‘info tasks’ display.
+ 
+           If you do not specify ‘task TASKID’ when you set a breakpoint,
+           the breakpoint applies to ‘all’ tasks of your program.
+ 
+           You can use the ‘task’ qualifier on conditional breakpoints as
+           well; in this case, place ‘task TASKID’ before the breakpoint
+           condition (before the ‘if’).
+ 
+    * ‘task TASKNO’
+ 
+           This command allows switching to the task referred by
+           ‘taskno’.  In particular, this allows browsing of the
+           backtrace of the specified task.  It is advisable to switch
+           back to the original task before continuing execution
+           otherwise the scheduling of the program may be perturbed.
+ 
+ For more detailed information on the tasking support, see ‘Debugging
+ with GDB’.
+ 
+ 
+ File: gnat_ugn.info,  Node: Debugging Generic Units,  Next: Remote Debugging with gdbserver,  Prev: Ada Tasks,  Up: Running and Debugging Ada Programs
+ 
+ 6.1.9 Debugging Generic Units
+ -----------------------------
+ 
+ GNAT always uses code expansion for generic instantiation.  This means
+ that each time an instantiation occurs, a complete copy of the original
+ code is made, with appropriate substitutions of formals by actuals.
+ 
+ It is not possible to refer to the original generic entities in ‘GDB’,
+ but it is always possible to debug a particular instance of a generic,
+ by using the appropriate expanded names.  For example, if we have
+ 
+           procedure g is
+ 
+              generic package k is
+                 procedure kp (v1 : in out integer);
+              end k;
+ 
+              package body k is
+                 procedure kp (v1 : in out integer) is
+                 begin
+                    v1 := v1 + 1;
+                 end kp;
+              end k;
+ 
+              package k1 is new k;
+              package k2 is new k;
+ 
+              var : integer := 1;
+ 
+           begin
+              k1.kp (var);
+              k2.kp (var);
+              k1.kp (var);
+              k2.kp (var);
+           end;
+ 
+ Then to break on a call to procedure kp in the k2 instance, simply use
+ the command:
+ 
+           (gdb) break g.k2.kp
+ 
+ When the breakpoint occurs, you can step through the code of the
+ instance in the normal manner and examine the values of local variables,
+ as for other units.
+ 
+ 
+ File: gnat_ugn.info,  Node: Remote Debugging with gdbserver,  Next: GNAT Abnormal Termination or Failure to Terminate,  Prev: Debugging Generic Units,  Up: Running and Debugging Ada Programs
+ 
+ 6.1.10 Remote Debugging with gdbserver
+ --------------------------------------
+ 
+ On platforms where gdbserver is supported, it is possible to use this
+ tool to debug your application remotely.  This can be useful in
+ situations where the program needs to be run on a target host that is
+ different from the host used for development, particularly when the
+ target has a limited amount of resources (either CPU and/or memory).
+ 
+ To do so, start your program using gdbserver on the target machine.
+ gdbserver then automatically suspends the execution of your program at
+ its entry point, waiting for a debugger to connect to it.  The following
+ commands starts an application and tells gdbserver to wait for a
+ connection with the debugger on localhost port 4444.
+ 
+           $ gdbserver localhost:4444 program
+           Process program created; pid = 5685
+           Listening on port 4444
+ 
+ Once gdbserver has started listening, we can tell the debugger to
+ establish a connection with this gdbserver, and then start the same
+ debugging session as if the program was being debugged on the same host,
+ directly under the control of GDB.
+ 
+           $ gdb program
+           (gdb) target remote targethost:4444
+           Remote debugging using targethost:4444
+           0x00007f29936d0af0 in ?? () from /lib64/ld-linux-x86-64.so.
+           (gdb) b foo.adb:3
+           Breakpoint 1 at 0x401f0c: file foo.adb, line 3.
+           (gdb) continue
+           Continuing.
+ 
+           Breakpoint 1, foo () at foo.adb:4
+           4       end foo;
+ 
+ It is also possible to use gdbserver to attach to an already running
+ program, in which case the execution of that program is simply suspended
+ until the connection between the debugger and gdbserver is established.
+ 
+ For more information on how to use gdbserver, see the ‘Using the
+ gdbserver Program’ section in ‘Debugging with GDB’. GNAT provides
+ support for gdbserver on x86-linux, x86-windows and x86_64-linux.
+ 
+ 
+ File: gnat_ugn.info,  Node: GNAT Abnormal Termination or Failure to Terminate,  Next: Naming Conventions for GNAT Source Files,  Prev: Remote Debugging with gdbserver,  Up: Running and Debugging Ada Programs
+ 
+ 6.1.11 GNAT Abnormal Termination or Failure to Terminate
+ --------------------------------------------------------
+ 
+ When presented with programs that contain serious errors in syntax or
+ semantics, GNAT may on rare occasions experience problems in operation,
+ such as aborting with a segmentation fault or illegal memory access,
+ raising an internal exception, terminating abnormally, or failing to
+ terminate at all.  In such cases, you can activate various features of
+ GNAT that can help you pinpoint the construct in your program that is
+ the likely source of the problem.
+ 
+ The following strategies are presented in increasing order of
+ difficulty, corresponding to your experience in using GNAT and your
+ familiarity with compiler internals.
+ 
+    * Run ‘gcc’ with the ‘-gnatf’.  This first switch causes all errors
+      on a given line to be reported.  In its absence, only the first
+      error on a line is displayed.
+ 
+      The ‘-gnatdO’ switch causes errors to be displayed as soon as they
+      are encountered, rather than after compilation is terminated.  If
+      GNAT terminates prematurely or goes into an infinite loop, the last
+      error message displayed may help to pinpoint the culprit.
+ 
+    * Run ‘gcc’ with the ‘-v’ (verbose) switch.  In this mode, ‘gcc’
+      produces ongoing information about the progress of the compilation
+      and provides the name of each procedure as code is generated.  This
+      switch allows you to find which Ada procedure was being compiled
+      when it encountered a code generation problem.
+ 
+    * Run ‘gcc’ with the ‘-gnatdc’ switch.  This is a GNAT specific
+      switch that does for the front-end what ‘-v’ does for the back end.
+      The system prints the name of each unit, either a compilation unit
+      or nested unit, as it is being analyzed.
+ 
+    * Finally, you can start ‘gdb’ directly on the ‘gnat1’ executable.
+      ‘gnat1’ is the front-end of GNAT, and can be run independently
+      (normally it is just called from ‘gcc’).  You can use ‘gdb’ on
+      ‘gnat1’ as you would on a C program (but *note The GNAT Debugger
+      GDB: 14f. for caveats).  The ‘where’ command is the first line of
+      attack; the variable ‘lineno’ (seen by ‘print lineno’), used by the
+      second phase of ‘gnat1’ and by the ‘gcc’ backend, indicates the
+      source line at which the execution stopped, and ‘input_file name’
+      indicates the name of the source file.
+ 
+ 
+ File: gnat_ugn.info,  Node: Naming Conventions for GNAT Source Files,  Next: Getting Internal Debugging Information,  Prev: GNAT Abnormal Termination or Failure to Terminate,  Up: Running and Debugging Ada Programs
+ 
+ 6.1.12 Naming Conventions for GNAT Source Files
+ -----------------------------------------------
+ 
+ In order to examine the workings of the GNAT system, the following brief
+ description of its organization may be helpful:
+ 
+    * Files with prefix ‘sc’ contain the lexical scanner.
+ 
+    * All files prefixed with ‘par’ are components of the parser.  The
+      numbers correspond to chapters of the Ada Reference Manual.  For
+      example, parsing of select statements can be found in
+      ‘par-ch9.adb’.
+ 
+    * All files prefixed with ‘sem’ perform semantic analysis.  The
+      numbers correspond to chapters of the Ada standard.  For example,
+      all issues involving context clauses can be found in
+      ‘sem_ch10.adb’.  In addition, some features of the language require
+      sufficient special processing to justify their own semantic files:
+      sem_aggr for aggregates, sem_disp for dynamic dispatching, etc.
+ 
+    * All files prefixed with ‘exp’ perform normalization and expansion
+      of the intermediate representation (abstract syntax tree, or AST).
+      these files use the same numbering scheme as the parser and
+      semantics files.  For example, the construction of record
+      initialization procedures is done in ‘exp_ch3.adb’.
+ 
+    * The files prefixed with ‘bind’ implement the binder, which verifies
+      the consistency of the compilation, determines an order of
+      elaboration, and generates the bind file.
+ 
+    * The files ‘atree.ads’ and ‘atree.adb’ detail the low-level data
+      structures used by the front-end.
+ 
+    * The files ‘sinfo.ads’ and ‘sinfo.adb’ detail the structure of the
+      abstract syntax tree as produced by the parser.
+ 
+    * The files ‘einfo.ads’ and ‘einfo.adb’ detail the attributes of all
+      entities, computed during semantic analysis.
+ 
+    * Library management issues are dealt with in files with prefix
+      ‘lib’.
+ 
+    * Ada files with the prefix ‘a-’ are children of ‘Ada’, as defined in
+      Annex A.
+ 
+    * Files with prefix ‘i-’ are children of ‘Interfaces’, as defined in
+      Annex B.
+ 
+    * Files with prefix ‘s-’ are children of ‘System’.  This includes
+      both language-defined children and GNAT run-time routines.
+ 
+    * Files with prefix ‘g-’ are children of ‘GNAT’.  These are useful
+      general-purpose packages, fully documented in their specs.  All the
+      other ‘.c’ files are modifications of common ‘gcc’ files.
+ 
+ 
+ File: gnat_ugn.info,  Node: Getting Internal Debugging Information,  Next: Stack Traceback,  Prev: Naming Conventions for GNAT Source Files,  Up: Running and Debugging Ada Programs
+ 
+ 6.1.13 Getting Internal Debugging Information
+ ---------------------------------------------
+ 
+ Most compilers have internal debugging switches and modes.  GNAT does
+ also, except GNAT internal debugging switches and modes are not secret.
+ A summary and full description of all the compiler and binder debug
+ flags are in the file ‘debug.adb’.  You must obtain the sources of the
+ compiler to see the full detailed effects of these flags.
+ 
+ The switches that print the source of the program (reconstructed from
+ the internal tree) are of general interest for user programs, as are the
+ options to print the full internal tree, and the entity table (the
+ symbol table information).  The reconstructed source provides a readable
+ version of the program after the front-end has completed analysis and
+ expansion, and is useful when studying the performance of specific
+ constructs.  For example, constraint checks are indicated, complex
+ aggregates are replaced with loops and assignments, and tasking
+ primitives are replaced with run-time calls.
+ 
+ 
+ File: gnat_ugn.info,  Node: Stack Traceback,  Next: Pretty-Printers for the GNAT runtime,  Prev: Getting Internal Debugging Information,  Up: Running and Debugging Ada Programs
+ 
+ 6.1.14 Stack Traceback
+ ----------------------
+ 
+ Traceback is a mechanism to display the sequence of subprogram calls
+ that leads to a specified execution point in a program.  Often (but not
+ always) the execution point is an instruction at which an exception has
+ been raised.  This mechanism is also known as ‘stack unwinding’ because
+ it obtains its information by scanning the run-time stack and recovering
+ the activation records of all active subprograms.  Stack unwinding is
+ one of the most important tools for program debugging.
+ 
+ The first entry stored in traceback corresponds to the deepest calling
+ level, that is to say the subprogram currently executing the instruction
+ from which we want to obtain the traceback.
+ 
+ Note that there is no runtime performance penalty when stack traceback
+ is enabled, and no exception is raised during program execution.
+ 
+ * Menu:
+ 
+ * Non-Symbolic Traceback::
+ * Symbolic Traceback::
+ 
+ 
+ File: gnat_ugn.info,  Node: Non-Symbolic Traceback,  Next: Symbolic Traceback,  Up: Stack Traceback
+ 
+ 6.1.14.1 Non-Symbolic Traceback
+ ...............................
+ 
+ Note: this feature is not supported on all platforms.  See
+ ‘GNAT.Traceback’ spec in ‘g-traceb.ads’ for a complete list of supported
+ platforms.
+ 
+ Tracebacks From an Unhandled Exception
+ ......................................
+ 
+ A runtime non-symbolic traceback is a list of addresses of call
+ instructions.  To enable this feature you must use the ‘-E’ ‘gnatbind’
+ option.  With this option a stack traceback is stored as part of
+ exception information.
+ 
+ You can translate this information using the ‘addr2line’ tool, provided
+ that the program is compiled with debugging options (see *note Compiler
+ Switches: db.) and linked at a fixed position with ‘-no-pie’.
+ 
+ Here is a simple example with ‘gnatmake’:
+ 
+           procedure STB is
+ 
+              procedure P1 is
+              begin
+                 raise Constraint_Error;
+              end P1;
+ 
+              procedure P2 is
+              begin
+                 P1;
+              end P2;
+ 
+           begin
+              P2;
+           end STB;
+ 
+           $ gnatmake stb -g -bargs -E -largs -no-pie
+           $ stb
+ 
+           Execution of stb terminated by unhandled exception
+           raised CONSTRAINT_ERROR : stb.adb:5 explicit raise
+           Load address: 0x400000
+           Call stack traceback locations:
+           0x401373 0x40138b 0x40139c 0x401335 0x4011c4 0x4011f1 0x77e892a4
+ 
+ As we see the traceback lists a sequence of addresses for the unhandled
+ exception ‘CONSTRAINT_ERROR’ raised in procedure P1.  It is easy to
+ guess that this exception come from procedure P1.  To translate these
+ addresses into the source lines where the calls appear, the ‘addr2line’
+ tool needs to be invoked like this:
+ 
+           $ addr2line -e stb 0x401373 0x40138b 0x40139c 0x401335 0x4011c4
+              0x4011f1 0x77e892a4
+ 
+           d:/stb/stb.adb:5
+           d:/stb/stb.adb:10
+           d:/stb/stb.adb:14
+           d:/stb/b~stb.adb:197
+           crtexe.c:?
+           crtexe.c:?
+           ??:0
+ 
+ The ‘addr2line’ tool has several other useful options:
+ 
+      ‘-a --addresses’              to show the addresses alongside the line numbers
+                                    
+                                    
+      ‘-f --functions’              to get the function name corresponding to a location
+                                    
+                                    
+      ‘-p --pretty-print’           to print all the information on a single line
+                                    
+                                    
+      ‘--demangle=gnat’             to use the GNAT decoding mode for the function names
+                                    
+ 
+           $ addr2line -e stb -a -f -p --demangle=gnat 0x401373 0x40138b
+              0x40139c 0x401335 0x4011c4 0x4011f1 0x77e892a4
+ 
+           0x00401373: stb.p1 at d:/stb/stb.adb:5
+           0x0040138B: stb.p2 at d:/stb/stb.adb:10
+           0x0040139C: stb at d:/stb/stb.adb:14
+           0x00401335: main at d:/stb/b~stb.adb:197
+           0x004011c4: ?? at crtexe.c:?
+           0x004011f1: ?? at crtexe.c:?
+           0x77e892a4: ?? ??:0
+ 
+ From this traceback we can see that the exception was raised in
+ ‘stb.adb’ at line 5, which was reached from a procedure call in
+ ‘stb.adb’ at line 10, and so on.  The ‘b~std.adb’ is the binder file,
+ which contains the call to the main program.  *note Running gnatbind:
+ 10e.  The remaining entries are assorted runtime routines and the output
+ will vary from platform to platform.
+ 
+ It is also possible to use ‘GDB’ with these traceback addresses to debug
+ the program.  For example, we can break at a given code location, as
+ reported in the stack traceback:
+ 
+      $ gdb -nw stb
+ 
+      (gdb) break *0x401373
+      Breakpoint 1 at 0x401373: file stb.adb, line 5.
+ 
+ It is important to note that the stack traceback addresses do not change
+ when debug information is included.  This is particularly useful because
+ it makes it possible to release software without debug information (to
+ minimize object size), get a field report that includes a stack
+ traceback whenever an internal bug occurs, and then be able to retrieve
+ the sequence of calls with the same program compiled with debug
+ information.
+ 
+ However the ‘addr2line’ tool does not work with Position-Independent
+ Code (PIC), the historical example being Linux dynamic libraries and
+ Windows DLLs, which nowadays encompasse Position-Independent Executables
+ (PIE) on recent Linux and Windows versions.
+ 
+ In order to translate addresses the source lines with
+ Position-Independent Executables on recent Linux and Windows versions,
+ in other words without using the switch ‘-no-pie’ during linking, you
+ need to use the ‘gnatsymbolize’ tool with ‘--load’ instead of the
+ ‘addr2line’ tool.  The main difference is that you need to copy the Load
+ Address output in the traceback ahead of the sequence of addresses.  And
+ the default mode of ‘gnatsymbolize’ is equivalent to that of ‘addr2line’
+ with the above switches, so none of them is needed:
+ 
+      $ gnatmake stb -g -bargs -E
+      $ stb
+ 
+      Execution of stb terminated by unhandled exception
+      raised CONSTRAINT_ERROR : stb.adb:5 explicit raise
+      Load address: 0x400000
+      Call stack traceback locations:
+      0x401373 0x40138b 0x40139c 0x401335 0x4011c4 0x4011f1 0x77e892a4
+ 
+      $ gnatsymbolize --load stb 0x400000 0x401373 0x40138b 0x40139c 0x401335 \
+         0x4011c4 0x4011f1 0x77e892a4
+ 
+      0x00401373 Stb.P1 at stb.adb:5
+      0x0040138B Stb.P2 at stb.adb:10
+      0x0040139C Stb at stb.adb:14
+      0x00401335 Main at b~stb.adb:197
+      0x004011c4 __tmainCRTStartup at ???
+      0x004011f1 mainCRTStartup at ???
+      0x77e892a4 ??? at ???
+ 
+ Tracebacks From Exception Occurrences
+ .....................................
+ 
+ Non-symbolic tracebacks are obtained by using the ‘-E’ binder argument.
+ The stack traceback is attached to the exception information string, and
+ can be retrieved in an exception handler within the Ada program, by
+ means of the Ada facilities defined in ‘Ada.Exceptions’.  Here is a
+ simple example:
+ 
+           with Ada.Text_IO;
+           with Ada.Exceptions;
+ 
+           procedure STB is
+ 
+              use Ada;
+              use Ada.Exceptions;
+ 
+              procedure P1 is
+                 K : Positive := 1;
+              begin
+                 K := K - 1;
+              exception
+                 when E : others =>
+                    Text_IO.Put_Line (Exception_Information (E));
+              end P1;
+ 
+              procedure P2 is
+              begin
+                 P1;
+              end P2;
+ 
+           begin
+              P2;
+           end STB;
+ 
+           $ gnatmake stb -g -bargs -E -largs -no-pie
+           $ stb
+ 
+           raised CONSTRAINT_ERROR : stb.adb:12 range check failed
+           Load address: 0x400000
+           Call stack traceback locations:
+           0x4015e4 0x401633 0x401644 0x401461 0x4011c4 0x4011f1 0x77e892a4
+ 
+ Tracebacks From Anywhere in a Program
+ .....................................
+ 
+ It is also possible to retrieve a stack traceback from anywhere in a
+ program.  For this you need to use the ‘GNAT.Traceback’ API. This
+ package includes a procedure called ‘Call_Chain’ that computes a
+ complete stack traceback, as well as useful display procedures described
+ below.  It is not necessary to use the ‘-E’ ‘gnatbind’ option in this
+ case, because the stack traceback mechanism is invoked explicitly.
+ 
+ In the following example we compute a traceback at a specific location
+ in the program, and we display it using ‘GNAT.Debug_Utilities.Image’ to
+ convert addresses to strings:
+ 
+           with Ada.Text_IO;
+           with GNAT.Traceback;
+           with GNAT.Debug_Utilities;
+           with System;
+ 
+           procedure STB is
+ 
+              use Ada;
+              use Ada.Text_IO;
+              use GNAT;
+              use GNAT.Traceback;
+              use System;
+ 
+              LA : constant Address := Executable_Load_Address;
+ 
+              procedure P1 is
+                 TB  : Tracebacks_Array (1 .. 10);
+                 --  We are asking for a maximum of 10 stack frames.
+                 Len : Natural;
+                 --  Len will receive the actual number of stack frames returned.
+              begin
+                 Call_Chain (TB, Len);
+ 
+                 Put ("In STB.P1 : ");
+ 
+                 for K in 1 .. Len loop
+                    Put (Debug_Utilities.Image_C (TB (K)));
+                    Put (' ');
+                 end loop;
+ 
+                 New_Line;
+              end P1;
+ 
+              procedure P2 is
+              begin
+                 P1;
+              end P2;
+ 
+           begin
+              if LA /= Null_Address then
+                 Put_Line ("Load address: " & Debug_Utilities.Image_C (LA));
+              end if;
+ 
+              P2;
+           end STB;
+ 
+           $ gnatmake stb -g
+           $ stb
+ 
+           Load address: 0x400000
+           In STB.P1 : 0x40F1E4 0x4014F2 0x40170B 0x40171C 0x401461 0x4011C4 \
+             0x4011F1 0x77E892A4
+ 
+ You can then get further information by invoking the ‘addr2line’ tool or
+ the ‘gnatsymbolize’ tool as described earlier (note that the hexadecimal
+ addresses need to be specified in C format, with a leading ‘0x’).
+ 
+ 
+ File: gnat_ugn.info,  Node: Symbolic Traceback,  Prev: Non-Symbolic Traceback,  Up: Stack Traceback
+ 
+ 6.1.14.2 Symbolic Traceback
+ ...........................
+ 
+ A symbolic traceback is a stack traceback in which procedure names are
+ associated with each code location.
+ 
+ Note that this feature is not supported on all platforms.  See
+ ‘GNAT.Traceback.Symbolic’ spec in ‘g-trasym.ads’ for a complete list of
+ currently supported platforms.
+ 
+ Note that the symbolic traceback requires that the program be compiled
+ with debug information.  If it is not compiled with debug information
+ only the non-symbolic information will be valid.
+ 
+ Tracebacks From Exception Occurrences
+ .....................................
+ 
+ Here is an example:
+ 
+           with Ada.Text_IO;
+           with GNAT.Traceback.Symbolic;
+ 
+           procedure STB is
+ 
+              procedure P1 is
+              begin
+                 raise Constraint_Error;
+              end P1;
+ 
+              procedure P2 is
+              begin
+                 P1;
+              end P2;
+ 
+              procedure P3 is
+              begin
+                 P2;
+              end P3;
+ 
+           begin
+              P3;
+           exception
+              when E : others =>
+                 Ada.Text_IO.Put_Line (GNAT.Traceback.Symbolic.Symbolic_Traceback (E));
+           end STB;
+ 
+           $ gnatmake -g stb -bargs -E
+           $ stb
+ 
+           0040149F in stb.p1 at stb.adb:8
+           004014B7 in stb.p2 at stb.adb:13
+           004014CF in stb.p3 at stb.adb:18
+           004015DD in ada.stb at stb.adb:22
+           00401461 in main at b~stb.adb:168
+           004011C4 in __mingw_CRTStartup at crt1.c:200
+           004011F1 in mainCRTStartup at crt1.c:222
+           77E892A4 in ?? at ??:0
+ 
+ Tracebacks From Anywhere in a Program
+ .....................................
+ 
+ It is possible to get a symbolic stack traceback from anywhere in a
+ program, just as for non-symbolic tracebacks.  The first step is to
+ obtain a non-symbolic traceback, and then call ‘Symbolic_Traceback’ to
+ compute the symbolic information.  Here is an example:
+ 
+           with Ada.Text_IO;
+           with GNAT.Traceback;
+           with GNAT.Traceback.Symbolic;
+ 
+           procedure STB is
+ 
+              use Ada;
+              use GNAT.Traceback;
+              use GNAT.Traceback.Symbolic;
+ 
+              procedure P1 is
+                 TB  : Tracebacks_Array (1 .. 10);
+                 --  We are asking for a maximum of 10 stack frames.
+                 Len : Natural;
+                 --  Len will receive the actual number of stack frames returned.
+              begin
+                 Call_Chain (TB, Len);
+                 Text_IO.Put_Line (Symbolic_Traceback (TB (1 .. Len)));
+              end P1;
+ 
+              procedure P2 is
+              begin
+                 P1;
+              end P2;
+ 
+           begin
+              P2;
+           end STB;
+ 
+ Automatic Symbolic Tracebacks
+ .............................
+ 
+ Symbolic tracebacks may also be enabled by using the -Es switch to
+ gnatbind (as in ‘gprbuild -g ... -bargs -Es’).  This will cause the
+ Exception_Information to contain a symbolic traceback, which will also
+ be printed if an unhandled exception terminates the program.
+ 
+ 
+ File: gnat_ugn.info,  Node: Pretty-Printers for the GNAT runtime,  Prev: Stack Traceback,  Up: Running and Debugging Ada Programs
+ 
+ 6.1.15 Pretty-Printers for the GNAT runtime
+ -------------------------------------------
+ 
+ As discussed in ‘Calling User-Defined Subprograms’, GDB’s ‘print’
+ command only knows about the physical layout of program data structures
+ and therefore normally displays only low-level dumps, which are often
+ hard to understand.
+ 
+ An example of this is when trying to display the contents of an Ada
+ standard container, such as ‘Ada.Containers.Ordered_Maps.Map’:
+ 
+           with Ada.Containers.Ordered_Maps;
+ 
+           procedure PP is
+              package Int_To_Nat is
+                 new Ada.Containers.Ordered_Maps (Integer, Natural);
+ 
+              Map : Int_To_Nat.Map;
+           begin
+              Map.Insert (1, 10);
+              Map.Insert (2, 20);
+              Map.Insert (3, 30);
+ 
+              Map.Clear; --  BREAK HERE
+           end PP;
+ 
+ When this program is built with debugging information and run under GDB
+ up to the ‘Map.Clear’ statement, trying to print ‘Map’ will yield
+ information that is only relevant to the developers of our standard
+ containers:
+ 
+           (gdb) print map
+           $1 = (
+             tree => (
+               first => 0x64e010,
+               last => 0x64e070,
+               root => 0x64e040,
+               length => 3,
+               tc => (
+                 busy => 0,
+                 lock => 0
+               )
+             )
+           )
+ 
+ Fortunately, GDB has a feature called pretty-printers(1), which allows
+ customizing how GDB displays data structures.  The GDB shipped with GNAT
+ embeds such pretty-printers for the most common containers in the
+ standard library.  To enable them, either run the following command
+ manually under GDB or add it to your ‘.gdbinit’ file:
+ 
+           python import gnatdbg; gnatdbg.setup()
+ 
+ Once this is done, GDB’s ‘print’ command will automatically use these
+ pretty-printers when appropriate.  Using the previous example:
+ 
+           (gdb) print map
+           $1 = pp.int_to_nat.map of length 3 = {
+             [1] = 10,
+             [2] = 20,
+             [3] = 30
+           }
+ 
+ Pretty-printers are invoked each time GDB tries to display a value,
+ including when displaying the arguments of a called subprogram (in GDB’s
+ ‘backtrace’ command) or when printing the value returned by a function
+ (in GDB’s ‘finish’ command).
+ 
+ To display a value without involving pretty-printers, ‘print’ can be
+ invoked with its ‘/r’ option:
+ 
+           (gdb) print/r map
+           $1 = (
+             tree => (...
+ 
+ Finer control of pretty-printers is also possible: see GDB’s online
+ documentation(2) for more information.
+ 
+    ---------- Footnotes ----------
+ 
+    (1) 
+ http://docs.adacore.com/gdb-docs/html/gdb.html#Pretty_002dPrinter-Introduction
+ 
+    (2) 
+ http://docs.adacore.com/gdb-docs/html/gdb.html#Pretty_002dPrinter-Commands
+ 
+ 
+ File: gnat_ugn.info,  Node: Profiling,  Next: Improving Performance,  Prev: Running and Debugging Ada Programs,  Up: GNAT and Program Execution
+ 
+ 6.2 Profiling
+ =============
+ 
+ This section describes how to use the ‘gprof’ profiler tool on Ada
+ programs.
+ 
+ * Menu:
+ 
+ * Profiling an Ada Program with gprof::
+ 
+ 
+ File: gnat_ugn.info,  Node: Profiling an Ada Program with gprof,  Up: Profiling
+ 
+ 6.2.1 Profiling an Ada Program with gprof
+ -----------------------------------------
+ 
+ This section is not meant to be an exhaustive documentation of ‘gprof’.
+ Full documentation for it can be found in the ‘GNU Profiler User’s
+ Guide’ documentation that is part of this GNAT distribution.
+ 
+ Profiling a program helps determine the parts of a program that are
+ executed most often, and are therefore the most time-consuming.
+ 
+ ‘gprof’ is the standard GNU profiling tool; it has been enhanced to
+ better handle Ada programs and multitasking.  It is currently supported
+ on the following platforms
+ 
+    * Linux x86/x86_64
+ 
+    * Windows x86/x86_64 (without PIE support)
+ 
+ In order to profile a program using ‘gprof’, several steps are needed:
+ 
+   1. Instrument the code, which requires a full recompilation of the
+      project with the proper switches.
+ 
+   2. Execute the program under the analysis conditions, i.e.  with the
+      desired input.
+ 
+   3. Analyze the results using the ‘gprof’ tool.
+ 
+ The following sections detail the different steps, and indicate how to
+ interpret the results.
+ 
+ * Menu:
+ 
+ * Compilation for profiling::
+ * Program execution::
+ * Running gprof::
+ * Interpretation of profiling results::
+ 
+ 
+ File: gnat_ugn.info,  Node: Compilation for profiling,  Next: Program execution,  Up: Profiling an Ada Program with gprof
+ 
+ 6.2.1.1 Compilation for profiling
+ .................................
+ 
+ In order to profile a program the first step is to tell the compiler to
+ generate the necessary profiling information.  The compiler switch to be
+ used is ‘-pg’, which must be added to other compilation switches.  This
+ switch needs to be specified both during compilation and link stages,
+ and can be specified once when using gnatmake:
+ 
+           $ gnatmake -f -pg -P my_project
+ 
+ Note that only the objects that were compiled with the ‘-pg’ switch will
+ be profiled; if you need to profile your whole project, use the ‘-f’
+ gnatmake switch to force full recompilation.
+ 
+ Note that on Windows, gprof does not support PIE. The ‘-no-pie’ switch
+ should be added to the linker flags to disable this feature.
+ 
+ 
+ File: gnat_ugn.info,  Node: Program execution,  Next: Running gprof,  Prev: Compilation for profiling,  Up: Profiling an Ada Program with gprof
+ 
+ 6.2.1.2 Program execution
+ .........................
+ 
+ Once the program has been compiled for profiling, you can run it as
+ usual.
+ 
+ The only constraint imposed by profiling is that the program must
+ terminate normally.  An interrupted program (via a Ctrl-C, kill, etc.)
+ will not be properly analyzed.
+ 
+ Once the program completes execution, a data file called ‘gmon.out’ is
+ generated in the directory where the program was launched from.  If this
+ file already exists, it will be overwritten.
+ 
+ 
+ File: gnat_ugn.info,  Node: Running gprof,  Next: Interpretation of profiling results,  Prev: Program execution,  Up: Profiling an Ada Program with gprof
+ 
+ 6.2.1.3 Running gprof
+ .....................
+ 
+ The ‘gprof’ tool is called as follow:
+ 
+           $ gprof my_prog gmon.out
+ 
+ or simply:
+ 
+           $ gprof my_prog
+ 
+ The complete form of the gprof command line is the following:
+ 
+           $ gprof [switches] [executable [data-file]]
+ 
+ ‘gprof’ supports numerous switches.  The order of these switch does not
+ matter.  The full list of options can be found in the GNU Profiler
+ User’s Guide documentation that comes with this documentation.
+ 
+ The following is the subset of those switches that is most relevant:
+ 
+ ‘--demangle[=STYLE]’, ‘--no-demangle’
+ 
+      These options control whether symbol names should be demangled when
+      printing output.  The default is to demangle C++ symbols.  The
+      ‘--no-demangle’ option may be used to turn off demangling.
+      Different compilers have different mangling styles.  The optional
+      demangling style argument can be used to choose an appropriate
+      demangling style for your compiler, in particular Ada symbols
+      generated by GNAT can be demangled using ‘--demangle=gnat’.
+ 
+ ‘-e FUNCTION_NAME’
+ 
+      The ‘-e FUNCTION’ option tells ‘gprof’ not to print information
+      about the function ‘function_name’ (and its children…) in the call
+      graph.  The function will still be listed as a child of any
+      functions that call it, but its index number will be shown as ‘[not
+      printed]’.  More than one ‘-e’ option may be given; only one
+      ‘function_name’ may be indicated with each ‘-e’ option.
+ 
+ ‘-E FUNCTION_NAME’
+ 
+      The ‘-E FUNCTION’ option works like the ‘-e’ option, but execution
+      time spent in the function (and children who were not called from
+      anywhere else), will not be used to compute the percentages-of-time
+      for the call graph.  More than one ‘-E’ option may be given; only
+      one ‘function_name’ may be indicated with each ‘-E`’ option.
+ 
+ ‘-f FUNCTION_NAME’
+ 
+      The ‘-f FUNCTION’ option causes ‘gprof’ to limit the call graph to
+      the function ‘function_name’ and its children (and their
+      children…).  More than one ‘-f’ option may be given; only one
+      ‘function_name’ may be indicated with each ‘-f’ option.
+ 
+ ‘-F FUNCTION_NAME’
+ 
+      The ‘-F FUNCTION’ option works like the ‘-f’ option, but only time
+      spent in the function and its children (and their children…) will
+      be used to determine total-time and percentages-of-time for the
+      call graph.  More than one ‘-F’ option may be given; only one
+      ‘function_name’ may be indicated with each ‘-F’ option.  The ‘-F’
+      option overrides the ‘-E’ option.
+ 
+ 
+ File: gnat_ugn.info,  Node: Interpretation of profiling results,  Prev: Running gprof,  Up: Profiling an Ada Program with gprof
+ 
+ 6.2.1.4 Interpretation of profiling results
+ ...........................................
+ 
+ The results of the profiling analysis are represented by two arrays: the
+ ‘flat profile’ and the ‘call graph’.  Full documentation of those
+ outputs can be found in the GNU Profiler User’s Guide.
+ 
+ The flat profile shows the time spent in each function of the program,
+ and how many time it has been called.  This allows you to locate easily
+ the most time-consuming functions.
+ 
+ The call graph shows, for each subprogram, the subprograms that call it,
+ and the subprograms that it calls.  It also provides an estimate of the
+ time spent in each of those callers/called subprograms.
+ 
+ 
+ File: gnat_ugn.info,  Node: Improving Performance,  Next: Overflow Check Handling in GNAT,  Prev: Profiling,  Up: GNAT and Program Execution
+ 
+ 6.3 Improving Performance
+ =========================
+ 
+ This section presents several topics related to program performance.  It
+ first describes some of the tradeoffs that need to be considered and
+ some of the techniques for making your program run faster.
+ 
+ It then documents the unused subprogram/data elimination feature, which
+ can reduce the size of program executables.
+ 
+ * Menu:
+ 
+ * Performance Considerations::
+ * Text_IO Suggestions::
+ * Reducing Size of Executables with Unused Subprogram/Data Elimination::
+ 
+ 
+ File: gnat_ugn.info,  Node: Performance Considerations,  Next: Text_IO Suggestions,  Up: Improving Performance
+ 
+ 6.3.1 Performance Considerations
+ --------------------------------
+ 
+ The GNAT system provides a number of options that allow a trade-off
+ between
+ 
+    * performance of the generated code
+ 
+    * speed of compilation
+ 
+    * minimization of dependences and recompilation
+ 
+    * the degree of run-time checking.
+ 
+ The defaults (if no options are selected) aim at improving the speed of
+ compilation and minimizing dependences, at the expense of performance of
+ the generated code:
+ 
+    * no optimization
+ 
+    * no inlining of subprogram calls
+ 
+    * all run-time checks enabled except overflow and elaboration checks
+ 
+ These options are suitable for most program development purposes.  This
+ section describes how you can modify these choices, and also provides
+ some guidelines on debugging optimized code.
+ 
+ * Menu:
+ 
+ * Controlling Run-Time Checks::
+ * Use of Restrictions::
+ * Optimization Levels::
+ * Debugging Optimized Code::
+ * Inlining of Subprograms::
+ * Floating Point Operations::
+ * Vectorization of loops::
+ * Other Optimization Switches::
+ * Optimization and Strict Aliasing::
+ * Aliased Variables and Optimization::
+ * Atomic Variables and Optimization::
+ * Passive Task Optimization::
+ 
+ 
+ File: gnat_ugn.info,  Node: Controlling Run-Time Checks,  Next: Use of Restrictions,  Up: Performance Considerations
+ 
+ 6.3.1.1 Controlling Run-Time Checks
+ ...................................
+ 
+ By default, GNAT generates all run-time checks, except stack overflow
+ checks, and checks for access before elaboration on subprogram calls.
+ The latter are not required in default mode, because all necessary
+ checking is done at compile time.
+ 
+ The gnat switch, ‘-gnatp’ allows this default to be modified.  See *note
+ Run-Time Checks: ea.
+ 
+ Our experience is that the default is suitable for most development
+ purposes.
+ 
+ Elaboration checks are off by default, and also not needed by default,
+ since GNAT uses a static elaboration analysis approach that avoids the
+ need for run-time checking.  This manual contains a full chapter
+ discussing the issue of elaboration checks, and if the default is not
+ satisfactory for your use, you should read this chapter.
+ 
+ For validity checks, the minimal checks required by the Ada Reference
+ Manual (for case statements and assignments to array elements) are on by
+ default.  These can be suppressed by use of the ‘-gnatVn’ switch.  Note
+ that in Ada 83, there were no validity checks, so if the Ada 83 mode is
+ acceptable (or when comparing GNAT performance with an Ada 83 compiler),
+ it may be reasonable to routinely use ‘-gnatVn’.  Validity checks are
+ also suppressed entirely if ‘-gnatp’ is used.
+ 
+ Note that the setting of the switches controls the default setting of
+ the checks.  They may be modified using either ‘pragma Suppress’ (to
+ remove checks) or ‘pragma Unsuppress’ (to add back suppressed checks) in
+ the program source.
+ 
+ 
+ File: gnat_ugn.info,  Node: Use of Restrictions,  Next: Optimization Levels,  Prev: Controlling Run-Time Checks,  Up: Performance Considerations
+ 
+ 6.3.1.2 Use of Restrictions
+ ...........................
+ 
+ The use of pragma Restrictions allows you to control which features are
+ permitted in your program.  Apart from the obvious point that if you
+ avoid relatively expensive features like finalization (enforceable by
+ the use of pragma Restrictions (No_Finalization)), the use of this
+ pragma does not affect the generated code in most cases.
+ 
+ One notable exception to this rule is that the possibility of task abort
+ results in some distributed overhead, particularly if finalization or
+ exception handlers are used.  The reason is that certain sections of
+ code have to be marked as non-abortable.
+ 
+ If you use neither the ‘abort’ statement, nor asynchronous transfer of
+ control (‘select ... then abort’), then this distributed overhead is
+ removed, which may have a general positive effect in improving overall
+ performance.  Especially code involving frequent use of tasking
+ constructs and controlled types will show much improved performance.
+ The relevant restrictions pragmas are
+ 
+           pragma Restrictions (No_Abort_Statements);
+           pragma Restrictions (Max_Asynchronous_Select_Nesting => 0);
+ 
+ It is recommended that these restriction pragmas be used if possible.
+ Note that this also means that you can write code without worrying about
+ the possibility of an immediate abort at any point.
+ 
+ 
+ File: gnat_ugn.info,  Node: Optimization Levels,  Next: Debugging Optimized Code,  Prev: Use of Restrictions,  Up: Performance Considerations
+ 
+ 6.3.1.3 Optimization Levels
+ ...........................
+ 
+ Without any optimization option, the compiler’s goal is to reduce the
+ cost of compilation and to make debugging produce the expected results.
+ Statements are independent: if you stop the program with a breakpoint
+ between statements, you can then assign a new value to any variable or
+ change the program counter to any other statement in the subprogram and
+ get exactly the results you would expect from the source code.
+ 
+ Turning on optimization makes the compiler attempt to improve the
+ performance and/or code size at the expense of compilation time and
+ possibly the ability to debug the program.
+ 
+ If you use multiple -O options, with or without level numbers, the last
+ such option is the one that is effective.
+ 
+ The default is optimization off.  This results in the fastest compile
+ times, but GNAT makes absolutely no attempt to optimize, and the
+ generated programs are considerably larger and slower than when
+ optimization is enabled.  You can use the ‘-O’ switch (the permitted
+ forms are ‘-O0’, ‘-O1’ ‘-O2’, ‘-O3’, and ‘-Os’) to ‘gcc’ to control the
+ optimization level:
+ 
+    * 
+      ‘-O0’
+ 
+           No optimization (the default); generates unoptimized code but
+           has the fastest compilation time.
+ 
+           Note that many other compilers do substantial optimization
+           even if ‘no optimization’ is specified.  With gcc, it is very
+           unusual to use ‘-O0’ for production if execution time is of
+           any concern, since ‘-O0’ means (almost) no optimization.  This
+           difference between gcc and other compilers should be kept in
+           mind when doing performance comparisons.
+ 
+    * 
+      ‘-O1’
+ 
+           Moderate optimization; optimizes reasonably well but does not
+           degrade compilation time significantly.
+ 
+    * 
+      ‘-O2’
+ 
+           Full optimization; generates highly optimized code and has the
+           slowest compilation time.
+ 
+    * 
+      ‘-O3’
+ 
+           Full optimization as in ‘-O2’; also uses more aggressive
+           automatic inlining of subprograms within a unit (*note
+           Inlining of Subprograms: 100.) and attempts to vectorize
+           loops.
+ 
+    * 
+      ‘-Os’
+ 
+           Optimize space usage (code and data) of resulting program.
+ 
+ Higher optimization levels perform more global transformations on the
+ program and apply more expensive analysis algorithms in order to
+ generate faster and more compact code.  The price in compilation time,
+ and the resulting improvement in execution time, both depend on the
+ particular application and the hardware environment.  You should
+ experiment to find the best level for your application.
+ 
+ Since the precise set of optimizations done at each level will vary from
+ release to release (and sometime from target to target), it is best to
+ think of the optimization settings in general terms.  See the ‘Options
+ That Control Optimization’ section in ‘Using the GNU Compiler Collection
+ (GCC)’ for details about the ‘-O’ settings and a number of ‘-f’ options
+ that individually enable or disable specific optimizations.
+ 
+ Unlike some other compilation systems, ‘gcc’ has been tested extensively
+ at all optimization levels.  There are some bugs which appear only with
+ optimization turned on, but there have also been bugs which show up only
+ in ‘unoptimized’ code.  Selecting a lower level of optimization does not
+ improve the reliability of the code generator, which in practice is
+ highly reliable at all optimization levels.
+ 
+ Note regarding the use of ‘-O3’: The use of this optimization level
+ ought not to be automatically preferred over that of level ‘-O2’, since
+ it often results in larger executables which may run more slowly.  See
+ further discussion of this point in *note Inlining of Subprograms: 100.
+ 
+ 
+ File: gnat_ugn.info,  Node: Debugging Optimized Code,  Next: Inlining of Subprograms,  Prev: Optimization Levels,  Up: Performance Considerations
+ 
+ 6.3.1.4 Debugging Optimized Code
+ ................................
+ 
+ Although it is possible to do a reasonable amount of debugging at
+ nonzero optimization levels, the higher the level the more likely that
+ source-level constructs will have been eliminated by optimization.  For
+ example, if a loop is strength-reduced, the loop control variable may be
+ completely eliminated and thus cannot be displayed in the debugger.
+ This can only happen at ‘-O2’ or ‘-O3’.  Explicit temporary variables
+ that you code might be eliminated at level ‘-O1’ or higher.
+ 
+ The use of the ‘-g’ switch, which is needed for source-level debugging,
+ affects the size of the program executable on disk, and indeed the
+ debugging information can be quite large.  However, it has no effect on
+ the generated code (and thus does not degrade performance)
+ 
+ Since the compiler generates debugging tables for a compilation unit
+ before it performs optimizations, the optimizing transformations may
+ invalidate some of the debugging data.  You therefore need to anticipate
+ certain anomalous situations that may arise while debugging optimized
+ code.  These are the most common cases:
+ 
+    * ‘The ‘hopping Program Counter’:’ Repeated ‘step’ or ‘next’ commands
+      show the PC bouncing back and forth in the code.  This may result
+      from any of the following optimizations:
+ 
+         - ‘Common subexpression elimination:’ using a single instance of
+           code for a quantity that the source computes several times.
+           As a result you may not be able to stop on what looks like a
+           statement.
+ 
+         - ‘Invariant code motion:’ moving an expression that does not
+           change within a loop, to the beginning of the loop.
+ 
+         - ‘Instruction scheduling:’ moving instructions so as to overlap
+           loads and stores (typically) with other code, or in general to
+           move computations of values closer to their uses.  Often this
+           causes you to pass an assignment statement without the
+           assignment happening and then later bounce back to the
+           statement when the value is actually needed.  Placing a
+           breakpoint on a line of code and then stepping over it may,
+           therefore, not always cause all the expected side-effects.
+ 
+    * ‘The ‘big leap’:’ More commonly known as ‘cross-jumping’, in which
+      two identical pieces of code are merged and the program counter
+      suddenly jumps to a statement that is not supposed to be executed,
+      simply because it (and the code following) translates to the same
+      thing as the code that ‘was’ supposed to be executed.  This effect
+      is typically seen in sequences that end in a jump, such as a
+      ‘goto’, a ‘return’, or a ‘break’ in a C ‘switch’ statement.
+ 
+    * ‘The ‘roving variable’:’ The symptom is an unexpected value in a
+      variable.  There are various reasons for this effect:
+ 
+         - In a subprogram prologue, a parameter may not yet have been
+           moved to its ‘home’.
+ 
+         - A variable may be dead, and its register re-used.  This is
+           probably the most common cause.
+ 
+         - As mentioned above, the assignment of a value to a variable
+           may have been moved.
+ 
+         - A variable may be eliminated entirely by value propagation or
+           other means.  In this case, GCC may incorrectly generate
+           debugging information for the variable
+ 
+      In general, when an unexpected value appears for a local variable
+      or parameter you should first ascertain if that value was actually
+      computed by your program, as opposed to being incorrectly reported
+      by the debugger.  Record fields or array elements in an object
+      designated by an access value are generally less of a problem, once
+      you have ascertained that the access value is sensible.  Typically,
+      this means checking variables in the preceding code and in the
+      calling subprogram to verify that the value observed is explainable
+      from other values (one must apply the procedure recursively to
+      those other values); or re-running the code and stopping a little
+      earlier (perhaps before the call) and stepping to better see how
+      the variable obtained the value in question; or continuing to step
+      ‘from’ the point of the strange value to see if code motion had
+      simply moved the variable’s assignments later.
+ 
+ In light of such anomalies, a recommended technique is to use ‘-O0’
+ early in the software development cycle, when extensive debugging
+ capabilities are most needed, and then move to ‘-O1’ and later ‘-O2’ as
+ the debugger becomes less critical.  Whether to use the ‘-g’ switch in
+ the release version is a release management issue.  Note that if you use
+ ‘-g’ you can then use the ‘strip’ program on the resulting executable,
+ which removes both debugging information and global symbols.
+ 
+ 
+ File: gnat_ugn.info,  Node: Inlining of Subprograms,  Next: Floating Point Operations,  Prev: Debugging Optimized Code,  Up: Performance Considerations
+ 
+ 6.3.1.5 Inlining of Subprograms
+ ...............................
+ 
+ A call to a subprogram in the current unit is inlined if all the
+ following conditions are met:
+ 
+    * The optimization level is at least ‘-O1’.
+ 
+    * The called subprogram is suitable for inlining: It must be small
+      enough and not contain something that ‘gcc’ cannot support in
+      inlined subprograms.
+ 
+    * Any one of the following applies: ‘pragma Inline’ is applied to the
+      subprogram; the subprogram is local to the unit and called once
+      from within it; the subprogram is small and optimization level
+      ‘-O2’ is specified; optimization level ‘-O3’ is specified.
+ 
+ Calls to subprograms in ‘with’ed units are normally not inlined.  To
+ achieve actual inlining (that is, replacement of the call by the code in
+ the body of the subprogram), the following conditions must all be true:
+ 
+    * The optimization level is at least ‘-O1’.
+ 
+    * The called subprogram is suitable for inlining: It must be small
+      enough and not contain something that ‘gcc’ cannot support in
+      inlined subprograms.
+ 
+    * There is a ‘pragma Inline’ for the subprogram.
+ 
+    * The ‘-gnatn’ switch is used on the command line.
+ 
+ Even if all these conditions are met, it may not be possible for the
+ compiler to inline the call, due to the length of the body, or features
+ in the body that make it impossible for the compiler to do the inlining.
+ 
+ Note that specifying the ‘-gnatn’ switch causes additional compilation
+ dependencies.  Consider the following:
+ 
+           package R is
+              procedure Q;
+              pragma Inline (Q);
+           end R;
+           package body R is
+              ...
+           end R;
+ 
+           with R;
+           procedure Main is
+           begin
+              ...
+              R.Q;
+           end Main;
+ 
+ With the default behavior (no ‘-gnatn’ switch specified), the
+ compilation of the ‘Main’ procedure depends only on its own source,
+ ‘main.adb’, and the spec of the package in file ‘r.ads’.  This means
+ that editing the body of ‘R’ does not require recompiling ‘Main’.
+ 
+ On the other hand, the call ‘R.Q’ is not inlined under these
+ circumstances.  If the ‘-gnatn’ switch is present when ‘Main’ is
+ compiled, the call will be inlined if the body of ‘Q’ is small enough,
+ but now ‘Main’ depends on the body of ‘R’ in ‘r.adb’ as well as on the
+ spec.  This means that if this body is edited, the main program must be
+ recompiled.  Note that this extra dependency occurs whether or not the
+ call is in fact inlined by ‘gcc’.
+ 
+ The use of front end inlining with ‘-gnatN’ generates similar additional
+ dependencies.
+ 
+ Note: The ‘-fno-inline’ switch overrides all other conditions and
+ ensures that no inlining occurs, unless requested with pragma
+ Inline_Always for ‘gcc’ back-ends.  The extra dependences resulting from
+ ‘-gnatn’ will still be active, even if this switch is used to suppress
+ the resulting inlining actions.
+ 
+ Note: The ‘-fno-inline-functions’ switch can be used to prevent
+ automatic inlining of subprograms if ‘-O3’ is used.
+ 
+ Note: The ‘-fno-inline-small-functions’ switch can be used to prevent
+ automatic inlining of small subprograms if ‘-O2’ is used.
+ 
+ Note: The ‘-fno-inline-functions-called-once’ switch can be used to
+ prevent inlining of subprograms local to the unit and called once from
+ within it if ‘-O1’ is used.
+ 
+ Note regarding the use of ‘-O3’: ‘-gnatn’ is made up of two sub-switches
+ ‘-gnatn1’ and ‘-gnatn2’ that can be directly specified in lieu of it,
+ ‘-gnatn’ being translated into one of them based on the optimization
+ level.  With ‘-O2’ or below, ‘-gnatn’ is equivalent to ‘-gnatn1’ which
+ activates pragma ‘Inline’ with moderate inlining across modules.  With
+ ‘-O3’, ‘-gnatn’ is equivalent to ‘-gnatn2’ which activates pragma
+ ‘Inline’ with full inlining across modules.  If you have used pragma
+ ‘Inline’ in appropriate cases, then it is usually much better to use
+ ‘-O2’ and ‘-gnatn’ and avoid the use of ‘-O3’ which has the additional
+ effect of inlining subprograms you did not think should be inlined.  We
+ have found that the use of ‘-O3’ may slow down the compilation and
+ increase the code size by performing excessive inlining, leading to
+ increased instruction cache pressure from the increased code size and
+ thus minor performance improvements.  So the bottom line here is that
+ you should not automatically assume that ‘-O3’ is better than ‘-O2’, and
+ indeed you should use ‘-O3’ only if tests show that it actually improves
+ performance for your program.
+ 
+ 
+ File: gnat_ugn.info,  Node: Floating Point Operations,  Next: Vectorization of loops,  Prev: Inlining of Subprograms,  Up: Performance Considerations
+ 
+ 6.3.1.6 Floating Point Operations
+ .................................
+ 
+ On almost all targets, GNAT maps Float and Long_Float to the 32-bit and
+ 64-bit standard IEEE floating-point representations, and operations will
+ use standard IEEE arithmetic as provided by the processor.  On most, but
+ not all, architectures, the attribute Machine_Overflows is False for
+ these types, meaning that the semantics of overflow is
+ implementation-defined.  In the case of GNAT, these semantics correspond
+ to the normal IEEE treatment of infinities and NaN (not a number)
+ values.  For example, 1.0 / 0.0 yields plus infinitiy and 0.0 / 0.0
+ yields a NaN. By avoiding explicit overflow checks, the performance is
+ greatly improved on many targets.  However, if required, floating-point
+ overflow can be enabled by the use of the pragma Check_Float_Overflow.
+ 
+ Another consideration that applies specifically to x86 32-bit
+ architectures is which form of floating-point arithmetic is used.  By
+ default the operations use the old style x86 floating-point, which
+ implements an 80-bit extended precision form (on these architectures the
+ type Long_Long_Float corresponds to that form).  In addition, generation
+ of efficient code in this mode means that the extended precision form
+ will be used for intermediate results.  This may be helpful in improving
+ the final precision of a complex expression.  However it means that the
+ results obtained on the x86 will be different from those on other
+ architectures, and for some algorithms, the extra intermediate precision
+ can be detrimental.
+ 
+ In addition to this old-style floating-point, all modern x86 chips
+ implement an alternative floating-point operation model referred to as
+ SSE2.  In this model there is no extended form, and furthermore
+ execution performance is significantly enhanced.  To force GNAT to use
+ this more modern form, use both of the switches:
+ 
+      -msse2 -mfpmath=sse
+ 
+ A unit compiled with these switches will automatically use the more
+ efficient SSE2 instruction set for Float and Long_Float operations.
+ Note that the ABI has the same form for both floating-point models, so
+ it is permissible to mix units compiled with and without these switches.
+ 
+ 
+ File: gnat_ugn.info,  Node: Vectorization of loops,  Next: Other Optimization Switches,  Prev: Floating Point Operations,  Up: Performance Considerations
+ 
+ 6.3.1.7 Vectorization of loops
+ ..............................
+ 
+ You can take advantage of the auto-vectorizer present in the ‘gcc’ back
+ end to vectorize loops with GNAT. The corresponding command line switch
+ is ‘-ftree-vectorize’ but, as it is enabled by default at ‘-O3’ and
+ other aggressive optimizations helpful for vectorization also are
+ enabled by default at this level, using ‘-O3’ directly is recommended.
+ 
+ You also need to make sure that the target architecture features a
+ supported SIMD instruction set.  For example, for the x86 architecture,
+ you should at least specify ‘-msse2’ to get significant vectorization
+ (but you don’t need to specify it for x86-64 as it is part of the base
+ 64-bit architecture).  Similarly, for the PowerPC architecture, you
+ should specify ‘-maltivec’.
+ 
+ The preferred loop form for vectorization is the ‘for’ iteration scheme.
+ Loops with a ‘while’ iteration scheme can also be vectorized if they are
+ very simple, but the vectorizer will quickly give up otherwise.  With
+ either iteration scheme, the flow of control must be straight, in
+ particular no ‘exit’ statement may appear in the loop body.  The loop
+ may however contain a single nested loop, if it can be vectorized when
+ considered alone:
+ 
+           A : array (1..4, 1..4) of Long_Float;
+           S : array (1..4) of Long_Float;
+ 
+           procedure Sum is
+           begin
+              for I in A'Range(1) loop
+                 for J in A'Range(2) loop
+                    S (I) := S (I) + A (I, J);
+                 end loop;
+              end loop;
+           end Sum;
+ 
+ The vectorizable operations depend on the targeted SIMD instruction set,
+ but the adding and some of the multiplying operators are generally
+ supported, as well as the logical operators for modular types.  Note
+ that compiling with ‘-gnatp’ might well reveal cases where some checks
+ do thwart vectorization.
+ 
+ Type conversions may also prevent vectorization if they involve
+ semantics that are not directly supported by the code generator or the
+ SIMD instruction set.  A typical example is direct conversion from
+ floating-point to integer types.  The solution in this case is to use
+ the following idiom:
+ 
+           Integer (S'Truncation (F))
+ 
+ if ‘S’ is the subtype of floating-point object ‘F’.
+ 
+ In most cases, the vectorizable loops are loops that iterate over
+ arrays.  All kinds of array types are supported, i.e.  constrained array
+ types with static bounds:
+ 
+           type Array_Type is array (1 .. 4) of Long_Float;
+ 
+ constrained array types with dynamic bounds:
+ 
+           type Array_Type is array (1 .. Q.N) of Long_Float;
+ 
+           type Array_Type is array (Q.K .. 4) of Long_Float;
+ 
+           type Array_Type is array (Q.K .. Q.N) of Long_Float;
+ 
+ or unconstrained array types:
+ 
+           type Array_Type is array (Positive range <>) of Long_Float;
+ 
+ The quality of the generated code decreases when the dynamic aspect of
+ the array type increases, the worst code being generated for
+ unconstrained array types.  This is so because, the less information the
+ compiler has about the bounds of the array, the more fallback code it
+ needs to generate in order to fix things up at run time.
+ 
+ It is possible to specify that a given loop should be subject to
+ vectorization preferably to other optimizations by means of pragma
+ ‘Loop_Optimize’:
+ 
+           pragma Loop_Optimize (Vector);
+ 
+ placed immediately within the loop will convey the appropriate hint to
+ the compiler for this loop.
+ 
+ It is also possible to help the compiler generate better vectorized code
+ for a given loop by asserting that there are no loop-carried
+ dependencies in the loop.  Consider for example the procedure:
+ 
+           type Arr is array (1 .. 4) of Long_Float;
+ 
+           procedure Add (X, Y : not null access Arr; R : not null access Arr) is
+           begin
+             for I in Arr'Range loop
+               R(I) := X(I) + Y(I);
+             end loop;
+           end;
+ 
+ By default, the compiler cannot unconditionally vectorize the loop
+ because assigning to a component of the array designated by R in one
+ iteration could change the value read from the components of the array
+ designated by X or Y in a later iteration.  As a result, the compiler
+ will generate two versions of the loop in the object code, one
+ vectorized and the other not vectorized, as well as a test to select the
+ appropriate version at run time.  This can be overcome by another hint:
+ 
+           pragma Loop_Optimize (Ivdep);
+ 
+ placed immediately within the loop will tell the compiler that it can
+ safely omit the non-vectorized version of the loop as well as the
+ run-time test.
+ 
+ 
+ File: gnat_ugn.info,  Node: Other Optimization Switches,  Next: Optimization and Strict Aliasing,  Prev: Vectorization of loops,  Up: Performance Considerations
+ 
+ 6.3.1.8 Other Optimization Switches
+ ...................................
+ 
+ Since GNAT uses the ‘gcc’ back end, all the specialized ‘gcc’
+ optimization switches are potentially usable.  These switches have not
+ been extensively tested with GNAT but can generally be expected to work.
+ Examples of switches in this category are ‘-funroll-loops’ and the
+ various target-specific ‘-m’ options (in particular, it has been
+ observed that ‘-march=xxx’ can significantly improve performance on
+ appropriate machines).  For full details of these switches, see the
+ ‘Submodel Options’ section in the ‘Hardware Models and Configurations’
+ chapter of ‘Using the GNU Compiler Collection (GCC)’.
+ 
+ 
+ File: gnat_ugn.info,  Node: Optimization and Strict Aliasing,  Next: Aliased Variables and Optimization,  Prev: Other Optimization Switches,  Up: Performance Considerations
+ 
+ 6.3.1.9 Optimization and Strict Aliasing
+ ........................................
+ 
+ The strong typing capabilities of Ada allow an optimizer to generate
+ efficient code in situations where other languages would be forced to
+ make worst case assumptions preventing such optimizations.  Consider the
+ following example:
+ 
+           procedure R is
+              type Int1 is new Integer;
+              type Int2 is new Integer;
+              type Int1A is access Int1;
+              type Int2A is access Int2;
+              Int1V : Int1A;
+              Int2V : Int2A;
+              ...
+ 
+           begin
+              ...
+              for J in Data'Range loop
+                 if Data (J) = Int1V.all then
+                    Int2V.all := Int2V.all + 1;
+                 end if;
+              end loop;
+              ...
+           end R;
+ 
+ In this example, since the variable ‘Int1V’ can only access objects of
+ type ‘Int1’, and ‘Int2V’ can only access objects of type ‘Int2’, there
+ is no possibility that the assignment to ‘Int2V.all’ affects the value
+ of ‘Int1V.all’.  This means that the compiler optimizer can “know” that
+ the value ‘Int1V.all’ is constant for all iterations of the loop and
+ avoid the extra memory reference required to dereference it each time
+ through the loop.
+ 
+ This kind of optimization, called strict aliasing analysis, is triggered
+ by specifying an optimization level of ‘-O2’ or higher or ‘-Os’ and
+ allows GNAT to generate more efficient code when access values are
+ involved.
+ 
+ However, although this optimization is always correct in terms of the
+ formal semantics of the Ada Reference Manual, difficulties can arise if
+ features like ‘Unchecked_Conversion’ are used to break the typing
+ system.  Consider the following complete program example:
+ 
+           package p1 is
+              type int1 is new integer;
+              type int2 is new integer;
+              type a1 is access int1;
+              type a2 is access int2;
+           end p1;
+ 
+           with p1; use p1;
+           package p2 is
+              function to_a2 (Input : a1) return a2;
+           end p2;
+ 
+           with Ada.Unchecked_Conversion;
+           package body p2 is
+              function to_a2 (Input : a1) return a2 is
+                 function to_a2u is
+                   new Ada.Unchecked_Conversion (a1, a2);
+              begin
+                 return to_a2u (Input);
+              end to_a2;
+           end p2;
+ 
+           with p2; use p2;
+           with p1; use p1;
+           with Text_IO; use Text_IO;
+           procedure m is
+              v1 : a1 := new int1;
+              v2 : a2 := to_a2 (v1);
+           begin
+              v1.all := 1;
+              v2.all := 0;
+              put_line (int1'image (v1.all));
+           end;
+ 
+ This program prints out 0 in ‘-O0’ or ‘-O1’ mode, but it prints out 1 in
+ ‘-O2’ mode.  That’s because in strict aliasing mode, the compiler can
+ and does assume that the assignment to ‘v2.all’ could not affect the
+ value of ‘v1.all’, since different types are involved.
+ 
+ This behavior is not a case of non-conformance with the standard, since
+ the Ada RM specifies that an unchecked conversion where the resulting
+ bit pattern is not a correct value of the target type can result in an
+ abnormal value and attempting to reference an abnormal value makes the
+ execution of a program erroneous.  That’s the case here since the result
+ does not point to an object of type ‘int2’.  This means that the effect
+ is entirely unpredictable.
+ 
+ However, although that explanation may satisfy a language lawyer, in
+ practice an applications programmer expects an unchecked conversion
+ involving pointers to create true aliases and the behavior of printing 1
+ seems plain wrong.  In this case, the strict aliasing optimization is
+ unwelcome.
+ 
+ Indeed the compiler recognizes this possibility, and the unchecked
+ conversion generates a warning:
+ 
+           p2.adb:5:07: warning: possible aliasing problem with type "a2"
+           p2.adb:5:07: warning: use -fno-strict-aliasing switch for references
+           p2.adb:5:07: warning:  or use "pragma No_Strict_Aliasing (a2);"
+ 
+ Unfortunately the problem is recognized when compiling the body of
+ package ‘p2’, but the actual “bad” code is generated while compiling the
+ body of ‘m’ and this latter compilation does not see the suspicious
+ ‘Unchecked_Conversion’.
+ 
+ As implied by the warning message, there are approaches you can use to
+ avoid the unwanted strict aliasing optimization in a case like this.
+ 
+ One possibility is to simply avoid the use of ‘-O2’, but that is a bit
+ drastic, since it throws away a number of useful optimizations that do
+ not involve strict aliasing assumptions.
+ 
+ A less drastic approach is to compile the program using the option
+ ‘-fno-strict-aliasing’.  Actually it is only the unit containing the
+ dereferencing of the suspicious pointer that needs to be compiled.  So
+ in this case, if we compile unit ‘m’ with this switch, then we get the
+ expected value of zero printed.  Analyzing which units might need the
+ switch can be painful, so a more reasonable approach is to compile the
+ entire program with options ‘-O2’ and ‘-fno-strict-aliasing’.  If the
+ performance is satisfactory with this combination of options, then the
+ advantage is that the entire issue of possible “wrong” optimization due
+ to strict aliasing is avoided.
+ 
+ To avoid the use of compiler switches, the configuration pragma
+ ‘No_Strict_Aliasing’ with no parameters may be used to specify that for
+ all access types, the strict aliasing optimization should be suppressed.
+ 
+ However, these approaches are still overkill, in that they causes all
+ manipulations of all access values to be deoptimized.  A more refined
+ approach is to concentrate attention on the specific access type
+ identified as problematic.
+ 
+ First, if a careful analysis of uses of the pointer shows that there are
+ no possible problematic references, then the warning can be suppressed
+ by bracketing the instantiation of ‘Unchecked_Conversion’ to turn the
+ warning off:
+ 
+           pragma Warnings (Off);
+           function to_a2u is
+             new Ada.Unchecked_Conversion (a1, a2);
+           pragma Warnings (On);
+ 
+ Of course that approach is not appropriate for this particular example,
+ since indeed there is a problematic reference.  In this case we can take
+ one of two other approaches.
+ 
+ The first possibility is to move the instantiation of unchecked
+ conversion to the unit in which the type is declared.  In this example,
+ we would move the instantiation of ‘Unchecked_Conversion’ from the body
+ of package ‘p2’ to the spec of package ‘p1’.  Now the warning
+ disappears.  That’s because any use of the access type knows there is a
+ suspicious unchecked conversion, and the strict aliasing optimization is
+ automatically suppressed for the type.
+ 
+ If it is not practical to move the unchecked conversion to the same unit
+ in which the destination access type is declared (perhaps because the
+ source type is not visible in that unit), you may use pragma
+ ‘No_Strict_Aliasing’ for the type.  This pragma must occur in the same
+ declarative sequence as the declaration of the access type:
+ 
+           type a2 is access int2;
+           pragma No_Strict_Aliasing (a2);
+ 
+ Here again, the compiler now knows that the strict aliasing optimization
+ should be suppressed for any reference to type ‘a2’ and the expected
+ behavior is obtained.
+ 
+ Finally, note that although the compiler can generate warnings for
+ simple cases of unchecked conversions, there are tricker and more
+ indirect ways of creating type incorrect aliases which the compiler
+ cannot detect.  Examples are the use of address overlays and unchecked
+ conversions involving composite types containing access types as
+ components.  In such cases, no warnings are generated, but there can
+ still be aliasing problems.  One safe coding practice is to forbid the
+ use of address clauses for type overlaying, and to allow unchecked
+ conversion only for primitive types.  This is not really a significant
+ restriction since any possible desired effect can be achieved by
+ unchecked conversion of access values.
+ 
+ The aliasing analysis done in strict aliasing mode can certainly have
+ significant benefits.  We have seen cases of large scale application
+ code where the time is increased by up to 5% by turning this
+ optimization off.  If you have code that includes significant usage of
+ unchecked conversion, you might want to just stick with ‘-O1’ and avoid
+ the entire issue.  If you get adequate performance at this level of
+ optimization level, that’s probably the safest approach.  If tests show
+ that you really need higher levels of optimization, then you can
+ experiment with ‘-O2’ and ‘-O2 -fno-strict-aliasing’ to see how much
+ effect this has on size and speed of the code.  If you really need to
+ use ‘-O2’ with strict aliasing in effect, then you should review any
+ uses of unchecked conversion of access types, particularly if you are
+ getting the warnings described above.
+ 
+ 
+ File: gnat_ugn.info,  Node: Aliased Variables and Optimization,  Next: Atomic Variables and Optimization,  Prev: Optimization and Strict Aliasing,  Up: Performance Considerations
+ 
+ 6.3.1.10 Aliased Variables and Optimization
+ ...........................................
+ 
+ There are scenarios in which programs may use low level techniques to
+ modify variables that otherwise might be considered to be unassigned.
+ For example, a variable can be passed to a procedure by reference, which
+ takes the address of the parameter and uses the address to modify the
+ variable’s value, even though it is passed as an IN parameter.  Consider
+ the following example:
+ 
+           procedure P is
+              Max_Length : constant Natural := 16;
+              type Char_Ptr is access all Character;
+ 
+              procedure Get_String(Buffer: Char_Ptr; Size : Integer);
+              pragma Import (C, Get_String, "get_string");
+ 
+              Name : aliased String (1 .. Max_Length) := (others => ' ');
+              Temp : Char_Ptr;
+ 
+              function Addr (S : String) return Char_Ptr is
+                 function To_Char_Ptr is
+                   new Ada.Unchecked_Conversion (System.Address, Char_Ptr);
+              begin
+                 return To_Char_Ptr (S (S'First)'Address);
+              end;
+ 
+           begin
+              Temp := Addr (Name);
+              Get_String (Temp, Max_Length);
+           end;
+ 
+ where Get_String is a C function that uses the address in Temp to modify
+ the variable ‘Name’.  This code is dubious, and arguably erroneous, and
+ the compiler would be entitled to assume that ‘Name’ is never modified,
+ and generate code accordingly.
+ 
+ However, in practice, this would cause some existing code that seems to
+ work with no optimization to start failing at high levels of
+ optimization.
+ 
+ What the compiler does for such cases is to assume that marking a
+ variable as aliased indicates that some “funny business” may be going
+ on.  The optimizer recognizes the aliased keyword and inhibits
+ optimizations that assume the value cannot be assigned.  This means that
+ the above example will in fact “work” reliably, that is, it will produce
+ the expected results.
+ 
+ 
+ File: gnat_ugn.info,  Node: Atomic Variables and Optimization,  Next: Passive Task Optimization,  Prev: Aliased Variables and Optimization,  Up: Performance Considerations
+ 
+ 6.3.1.11 Atomic Variables and Optimization
+ ..........................................
+ 
+ There are two considerations with regard to performance when atomic
+ variables are used.
+ 
+ First, the RM only guarantees that access to atomic variables be atomic,
+ it has nothing to say about how this is achieved, though there is a
+ strong implication that this should not be achieved by explicit locking
+ code.  Indeed GNAT will never generate any locking code for atomic
+ variable access (it will simply reject any attempt to make a variable or
+ type atomic if the atomic access cannot be achieved without such locking
+ code).
+ 
+ That being said, it is important to understand that you cannot assume
+ that the entire variable will always be accessed.  Consider this
+ example:
+ 
+           type R is record
+              A,B,C,D : Character;
+           end record;
+           for R'Size use 32;
+           for R'Alignment use 4;
+ 
+           RV : R;
+           pragma Atomic (RV);
+           X : Character;
+           ...
+           X := RV.B;
+ 
+ You cannot assume that the reference to ‘RV.B’ will read the entire
+ 32-bit variable with a single load instruction.  It is perfectly
+ legitimate if the hardware allows it to do a byte read of just the B
+ field.  This read is still atomic, which is all the RM requires.  GNAT
+ can and does take advantage of this, depending on the architecture and
+ optimization level.  Any assumption to the contrary is non-portable and
+ risky.  Even if you examine the assembly language and see a full 32-bit
+ load, this might change in a future version of the compiler.
+ 
+ If your application requires that all accesses to ‘RV’ in this example
+ be full 32-bit loads, you need to make a copy for the access as in:
+ 
+           declare
+              RV_Copy : constant R := RV;
+           begin
+              X := RV_Copy.B;
+           end;
+ 
+ Now the reference to RV must read the whole variable.  Actually one can
+ imagine some compiler which figures out that the whole copy is not
+ required (because only the B field is actually accessed), but GNAT
+ certainly won’t do that, and we don’t know of any compiler that would
+ not handle this right, and the above code will in practice work portably
+ across all architectures (that permit the Atomic declaration).
+ 
+ The second issue with atomic variables has to do with the possible
+ requirement of generating synchronization code.  For more details on
+ this, consult the sections on the pragmas
+ Enable/Disable_Atomic_Synchronization in the GNAT Reference Manual.  If
+ performance is critical, and such synchronization code is not required,
+ it may be useful to disable it.
+ 
+ 
+ File: gnat_ugn.info,  Node: Passive Task Optimization,  Prev: Atomic Variables and Optimization,  Up: Performance Considerations
+ 
+ 6.3.1.12 Passive Task Optimization
+ ..................................
+ 
+ A passive task is one which is sufficiently simple that in theory a
+ compiler could recognize it an implement it efficiently without creating
+ a new thread.  The original design of Ada 83 had in mind this kind of
+ passive task optimization, but only a few Ada 83 compilers attempted it.
+ The problem was that it was difficult to determine the exact conditions
+ under which the optimization was possible.  The result is a very fragile
+ optimization where a very minor change in the program can suddenly
+ silently make a task non-optimizable.
+ 
+ With the revisiting of this issue in Ada 95, there was general agreement
+ that this approach was fundamentally flawed, and the notion of protected
+ types was introduced.  When using protected types, the restrictions are
+ well defined, and you KNOW that the operations will be optimized, and
+ furthermore this optimized performance is fully portable.
+ 
+ Although it would theoretically be possible for GNAT to attempt to do
+ this optimization, but it really doesn’t make sense in the context of
+ Ada 95, and none of the Ada 95 compilers implement this optimization as
+ far as we know.  In particular GNAT never attempts to perform this
+ optimization.
+ 
+ In any new Ada 95 code that is written, you should always use protected
+ types in place of tasks that might be able to be optimized in this
+ manner.  Of course this does not help if you have legacy Ada 83 code
+ that depends on this optimization, but it is unusual to encounter a case
+ where the performance gains from this optimization are significant.
+ 
+ Your program should work correctly without this optimization.  If you
+ have performance problems, then the most practical approach is to figure
+ out exactly where these performance problems arise, and update those
+ particular tasks to be protected types.  Note that typically clients of
+ the tasks who call entries, will not have to be modified, only the task
+ definition itself.
+ 
+ 
+ File: gnat_ugn.info,  Node: Text_IO Suggestions,  Next: Reducing Size of Executables with Unused Subprogram/Data Elimination,  Prev: Performance Considerations,  Up: Improving Performance
+ 
+ 6.3.2 ‘Text_IO’ Suggestions
+ ---------------------------
+ 
+ The ‘Ada.Text_IO’ package has fairly high overheads due in part to the
+ requirement of maintaining page and line counts.  If performance is
+ critical, a recommendation is to use ‘Stream_IO’ instead of ‘Text_IO’
+ for volume output, since this package has less overhead.
+ 
+ If ‘Text_IO’ must be used, note that by default output to the standard
+ output and standard error files is unbuffered (this provides better
+ behavior when output statements are used for debugging, or if the
+ progress of a program is observed by tracking the output, e.g.  by using
+ the Unix ‘tail -f’ command to watch redirected output).
+ 
+ If you are generating large volumes of output with ‘Text_IO’ and
+ performance is an important factor, use a designated file instead of the
+ standard output file, or change the standard output file to be buffered
+ using ‘Interfaces.C_Streams.setvbuf’.
+ 
+ 
+ File: gnat_ugn.info,  Node: Reducing Size of Executables with Unused Subprogram/Data Elimination,  Prev: Text_IO Suggestions,  Up: Improving Performance
+ 
+ 6.3.3 Reducing Size of Executables with Unused Subprogram/Data Elimination
+ --------------------------------------------------------------------------
+ 
+ This section describes how you can eliminate unused subprograms and data
+ from your executable just by setting options at compilation time.
+ 
+ * Menu:
+ 
+ * About unused subprogram/data elimination::
+ * Compilation options::
+ * Example of unused subprogram/data elimination::
+ 
+ 
+ File: gnat_ugn.info,  Node: About unused subprogram/data elimination,  Next: Compilation options,  Up: Reducing Size of Executables with Unused Subprogram/Data Elimination
+ 
+ 6.3.3.1 About unused subprogram/data elimination
+ ................................................
+ 
+ By default, an executable contains all code and data of its composing
+ objects (directly linked or coming from statically linked libraries),
+ even data or code never used by this executable.
+ 
+ This feature will allow you to eliminate such unused code from your
+ executable, making it smaller (in disk and in memory).
+ 
+ This functionality is available on all Linux platforms except for the
+ IA-64 architecture and on all cross platforms using the ELF binary file
+ format.  In both cases GNU binutils version 2.16 or later are required
+ to enable it.
+ 
+ 
+ File: gnat_ugn.info,  Node: Compilation options,  Next: Example of unused subprogram/data elimination,  Prev: About unused subprogram/data elimination,  Up: Reducing Size of Executables with Unused Subprogram/Data Elimination
+ 
+ 6.3.3.2 Compilation options
+ ...........................
+ 
+ The operation of eliminating the unused code and data from the final
+ executable is directly performed by the linker.
+ 
+ In order to do this, it has to work with objects compiled with the
+ following options: ‘-ffunction-sections’ ‘-fdata-sections’.
+ 
+ These options are usable with C and Ada files.  They will place
+ respectively each function or data in a separate section in the
+ resulting object file.
+ 
+ Once the objects and static libraries are created with these options,
+ the linker can perform the dead code elimination.  You can do this by
+ setting the ‘-Wl,--gc-sections’ option to gcc command or in the ‘-largs’
+ section of ‘gnatmake’.  This will perform a garbage collection of code
+ and data never referenced.
+ 
+ If the linker performs a partial link (‘-r’ linker option), then you
+ will need to provide the entry point using the ‘-e’ / ‘--entry’ linker
+ option.
+ 
+ Note that objects compiled without the ‘-ffunction-sections’ and
+ ‘-fdata-sections’ options can still be linked with the executable.
+ However, no dead code elimination will be performed on those objects
+ (they will be linked as is).
+ 
+ The GNAT static library is now compiled with -ffunction-sections and
+ -fdata-sections on some platforms.  This allows you to eliminate the
+ unused code and data of the GNAT library from your executable.
+ 
+ 
+ File: gnat_ugn.info,  Node: Example of unused subprogram/data elimination,  Prev: Compilation options,  Up: Reducing Size of Executables with Unused Subprogram/Data Elimination
+ 
+ 6.3.3.3 Example of unused subprogram/data elimination
+ .....................................................
+ 
+ Here is a simple example:
+ 
+           with Aux;
+ 
+           procedure Test is
+           begin
+              Aux.Used (10);
+           end Test;
+ 
+           package Aux is
+              Used_Data   : Integer;
+              Unused_Data : Integer;
+ 
+              procedure Used   (Data : Integer);
+              procedure Unused (Data : Integer);
+           end Aux;
+ 
+           package body Aux is
+              procedure Used (Data : Integer) is
+              begin
+                 Used_Data := Data;
+              end Used;
+ 
+              procedure Unused (Data : Integer) is
+              begin
+                 Unused_Data := Data;
+              end Unused;
+           end Aux;
+ 
+ ‘Unused’ and ‘Unused_Data’ are never referenced in this code excerpt,
+ and hence they may be safely removed from the final executable.
+ 
+           $ gnatmake test
+ 
+           $ nm test | grep used
+           020015f0 T aux__unused
+           02005d88 B aux__unused_data
+           020015cc T aux__used
+           02005d84 B aux__used_data
+ 
+           $ gnatmake test -cargs -fdata-sections -ffunction-sections \\
+                -largs -Wl,--gc-sections
+ 
+           $ nm test | grep used
+           02005350 T aux__used
+           0201ffe0 B aux__used_data
+ 
+ It can be observed that the procedure ‘Unused’ and the object
+ ‘Unused_Data’ are removed by the linker when using the appropriate
+ options.
+ 
+ 
+ File: gnat_ugn.info,  Node: Overflow Check Handling in GNAT,  Next: Performing Dimensionality Analysis in GNAT,  Prev: Improving Performance,  Up: GNAT and Program Execution
+ 
+ 6.4 Overflow Check Handling in GNAT
+ ===================================
+ 
+ This section explains how to control the handling of overflow checks.
+ 
+ * Menu:
+ 
+ * Background::
+ * Management of Overflows in GNAT::
+ * Specifying the Desired Mode::
+ * Default Settings::
+ * Implementation Notes::
+ 
+ 
+ File: gnat_ugn.info,  Node: Background,  Next: Management of Overflows in GNAT,  Up: Overflow Check Handling in GNAT
+ 
+ 6.4.1 Background
+ ----------------
+ 
+ Overflow checks are checks that the compiler may make to ensure that
+ intermediate results are not out of range.  For example:
+ 
+           A : Integer;
+           ...
+           A := A + 1;
+ 
+ If ‘A’ has the value ‘Integer'Last’, then the addition may cause
+ overflow since the result is out of range of the type ‘Integer’.  In
+ this case ‘Constraint_Error’ will be raised if checks are enabled.
+ 
+ A trickier situation arises in examples like the following:
+ 
+           A, C : Integer;
+           ...
+           A := (A + 1) + C;
+ 
+ where ‘A’ is ‘Integer'Last’ and ‘C’ is ‘-1’.  Now the final result of
+ the expression on the right hand side is ‘Integer'Last’ which is in
+ range, but the question arises whether the intermediate addition of ‘(A
+ + 1)’ raises an overflow error.
+ 
+ The (perhaps surprising) answer is that the Ada language definition does
+ not answer this question.  Instead it leaves it up to the implementation
+ to do one of two things if overflow checks are enabled.
+ 
+    * raise an exception (‘Constraint_Error’), or
+ 
+    * yield the correct mathematical result which is then used in
+      subsequent operations.
+ 
+ If the compiler chooses the first approach, then the assignment of this
+ example will indeed raise ‘Constraint_Error’ if overflow checking is
+ enabled, or result in erroneous execution if overflow checks are
+ suppressed.
+ 
+ But if the compiler chooses the second approach, then it can perform
+ both additions yielding the correct mathematical result, which is in
+ range, so no exception will be raised, and the right result is obtained,
+ regardless of whether overflow checks are suppressed.
+ 
+ Note that in the first example an exception will be raised in either
+ case, since if the compiler gives the correct mathematical result for
+ the addition, it will be out of range of the target type of the
+ assignment, and thus fails the range check.
+ 
+ This lack of specified behavior in the handling of overflow for
+ intermediate results is a source of non-portability, and can thus be
+ problematic when programs are ported.  Most typically this arises in a
+ situation where the original compiler did not raise an exception, and
+ then the application is moved to a compiler where the check is performed
+ on the intermediate result and an unexpected exception is raised.
+ 
+ Furthermore, when using Ada 2012’s preconditions and other assertion
+ forms, another issue arises.  Consider:
+ 
+           procedure P (A, B : Integer) with
+             Pre => A + B <= Integer'Last;
+ 
+ One often wants to regard arithmetic in a context like this from a
+ mathematical point of view.  So for example, if the two actual
+ parameters for a call to ‘P’ are both ‘Integer'Last’, then the
+ precondition should be regarded as False.  If we are executing in a mode
+ with run-time checks enabled for preconditions, then we would like this
+ precondition to fail, rather than raising an exception because of the
+ intermediate overflow.
+ 
+ However, the language definition leaves the specification of whether the
+ above condition fails (raising ‘Assert_Error’) or causes an intermediate
+ overflow (raising ‘Constraint_Error’) up to the implementation.
+ 
+ The situation is worse in a case such as the following:
+ 
+           procedure Q (A, B, C : Integer) with
+             Pre => A + B + C <= Integer'Last;
+ 
+ Consider the call
+ 
+           Q (A => Integer'Last, B => 1, C => -1);
+ 
+ From a mathematical point of view the precondition is True, but at run
+ time we may (but are not guaranteed to) get an exception raised because
+ of the intermediate overflow (and we really would prefer this
+ precondition to be considered True at run time).
+ 
+ 
+ File: gnat_ugn.info,  Node: Management of Overflows in GNAT,  Next: Specifying the Desired Mode,  Prev: Background,  Up: Overflow Check Handling in GNAT
+ 
+ 6.4.2 Management of Overflows in GNAT
+ -------------------------------------
+ 
+ To deal with the portability issue, and with the problem of mathematical
+ versus run-time interpretation of the expressions in assertions, GNAT
+ provides comprehensive control over the handling of intermediate
+ overflow.  GNAT can operate in three modes, and furthermore, permits
+ separate selection of operating modes for the expressions within
+ assertions (here the term ‘assertions’ is used in the technical sense,
+ which includes preconditions and so forth) and for expressions appearing
+ outside assertions.
+ 
+ The three modes are:
+ 
+    * ‘Use base type for intermediate operations’ (‘STRICT’)
+ 
+      In this mode, all intermediate results for predefined arithmetic
+      operators are computed using the base type, and the result must be
+      in range of the base type.  If this is not the case then either an
+      exception is raised (if overflow checks are enabled) or the
+      execution is erroneous (if overflow checks are suppressed).  This
+      is the normal default mode.
+ 
+    * ‘Most intermediate overflows avoided’ (‘MINIMIZED’)
+ 
+      In this mode, the compiler attempts to avoid intermediate overflows
+      by using a larger integer type, typically ‘Long_Long_Integer’, as
+      the type in which arithmetic is performed for predefined arithmetic
+      operators.  This may be slightly more expensive at run time
+      (compared to suppressing intermediate overflow checks), though the
+      cost is negligible on modern 64-bit machines.  For the examples
+      given earlier, no intermediate overflows would have resulted in
+      exceptions, since the intermediate results are all in the range of
+      ‘Long_Long_Integer’ (typically 64-bits on nearly all
+      implementations of GNAT). In addition, if checks are enabled, this
+      reduces the number of checks that must be made, so this choice may
+      actually result in an improvement in space and time behavior.
+ 
+      However, there are cases where ‘Long_Long_Integer’ is not large
+      enough, consider the following example:
+ 
+                procedure R (A, B, C, D : Integer) with
+                  Pre => (A**2 * B**2) / (C**2 * D**2) <= 10;
+ 
+      where ‘A’ = ‘B’ = ‘C’ = ‘D’ = ‘Integer'Last’.  Now the intermediate
+      results are out of the range of ‘Long_Long_Integer’ even though the
+      final result is in range and the precondition is True (from a
+      mathematical point of view).  In such a case, operating in this
+      mode, an overflow occurs for the intermediate computation (which is
+      why this mode says ‘most’ intermediate overflows are avoided).  In
+      this case, an exception is raised if overflow checks are enabled,
+      and the execution is erroneous if overflow checks are suppressed.
+ 
+    * ‘All intermediate overflows avoided’ (‘ELIMINATED’)
+ 
+      In this mode, the compiler avoids all intermediate overflows by
+      using arbitrary precision arithmetic as required.  In this mode,
+      the above example with ‘A**2 * B**2’ would not cause intermediate
+      overflow, because the intermediate result would be evaluated using
+      sufficient precision, and the result of evaluating the precondition
+      would be True.
+ 
+      This mode has the advantage of avoiding any intermediate overflows,
+      but at the expense of significant run-time overhead, including the
+      use of a library (included automatically in this mode) for
+      multiple-precision arithmetic.
+ 
+      This mode provides cleaner semantics for assertions, since now the
+      run-time behavior emulates true arithmetic behavior for the
+      predefined arithmetic operators, meaning that there is never a
+      conflict between the mathematical view of the assertion, and its
+      run-time behavior.
+ 
+      Note that in this mode, the behavior is unaffected by whether or
+      not overflow checks are suppressed, since overflow does not occur.
+      It is possible for gigantic intermediate expressions to raise
+      ‘Storage_Error’ as a result of attempting to compute the results of
+      such expressions (e.g.  ‘Integer'Last ** Integer'Last’) but
+      overflow is impossible.
+ 
+ Note that these modes apply only to the evaluation of predefined
+ arithmetic, membership, and comparison operators for signed integer
+ arithmetic.
+ 
+ For fixed-point arithmetic, checks can be suppressed.  But if checks are
+ enabled then fixed-point values are always checked for overflow against
+ the base type for intermediate expressions (that is such checks always
+ operate in the equivalent of ‘STRICT’ mode).
+ 
+ For floating-point, on nearly all architectures, ‘Machine_Overflows’ is
+ False, and IEEE infinities are generated, so overflow exceptions are
+ never raised.  If you want to avoid infinities, and check that final
+ results of expressions are in range, then you can declare a constrained
+ floating-point type, and range checks will be carried out in the normal
+ manner (with infinite values always failing all range checks).
+ 
+ 
+ File: gnat_ugn.info,  Node: Specifying the Desired Mode,  Next: Default Settings,  Prev: Management of Overflows in GNAT,  Up: Overflow Check Handling in GNAT
+ 
+ 6.4.3 Specifying the Desired Mode
+ ---------------------------------
+ 
+ The desired mode of for handling intermediate overflow can be specified
+ using either the ‘Overflow_Mode’ pragma or an equivalent compiler
+ switch.  The pragma has the form
+ 
+           pragma Overflow_Mode ([General =>] MODE [, [Assertions =>] MODE]);
+ 
+ where ‘MODE’ is one of
+ 
+    * ‘STRICT’: intermediate overflows checked (using base type)
+ 
+    * ‘MINIMIZED’: minimize intermediate overflows
+ 
+    * ‘ELIMINATED’: eliminate intermediate overflows
+ 
+ The case is ignored, so ‘MINIMIZED’, ‘Minimized’ and ‘minimized’ all
+ have the same effect.
+ 
+ If only the ‘General’ parameter is present, then the given ‘MODE’
+ applies to expressions both within and outside assertions.  If both
+ arguments are present, then ‘General’ applies to expressions outside
+ assertions, and ‘Assertions’ applies to expressions within assertions.
+ For example:
+ 
+           pragma Overflow_Mode
+             (General => Minimized, Assertions => Eliminated);
+ 
+ specifies that general expressions outside assertions be evaluated in
+ ‘minimize intermediate overflows’ mode, and expressions within
+ assertions be evaluated in ‘eliminate intermediate overflows’ mode.
+ This is often a reasonable choice, avoiding excessive overhead outside
+ assertions, but assuring a high degree of portability when importing
+ code from another compiler, while incurring the extra overhead for
+ assertion expressions to ensure that the behavior at run time matches
+ the expected mathematical behavior.
+ 
+ The ‘Overflow_Mode’ pragma has the same scoping and placement rules as
+ pragma ‘Suppress’, so it can occur either as a configuration pragma,
+ specifying a default for the whole program, or in a declarative scope,
+ where it applies to the remaining declarations and statements in that
+ scope.
+ 
+ Note that pragma ‘Overflow_Mode’ does not affect whether overflow checks
+ are enabled or suppressed.  It only controls the method used to compute
+ intermediate values.  To control whether overflow checking is enabled or
+ suppressed, use pragma ‘Suppress’ or ‘Unsuppress’ in the usual manner.
+ 
+ Additionally, a compiler switch ‘-gnato?’ or ‘-gnato??’ can be used to
+ control the checking mode default (which can be subsequently overridden
+ using pragmas).
+ 
+ Here ‘?’ is one of the digits ‘1’ through ‘3’:
+ 
+      ‘1’        use base type for intermediate operations (‘STRICT’)
+                 
+                 
+      ‘2’        minimize intermediate overflows (‘MINIMIZED’)
+                 
+                 
+      ‘3’        eliminate intermediate overflows (‘ELIMINATED’)
+                 
+ 
+ As with the pragma, if only one digit appears then it applies to all
+ cases; if two digits are given, then the first applies outside
+ assertions, and the second within assertions.  Thus the equivalent of
+ the example pragma above would be ‘-gnato23’.
+ 
+ If no digits follow the ‘-gnato’, then it is equivalent to ‘-gnato11’,
+ causing all intermediate operations to be computed using the base type
+ (‘STRICT’ mode).
+ 
+ 
+ File: gnat_ugn.info,  Node: Default Settings,  Next: Implementation Notes,  Prev: Specifying the Desired Mode,  Up: Overflow Check Handling in GNAT
+ 
+ 6.4.4 Default Settings
+ ----------------------
+ 
+ The default mode for overflow checks is
+ 
+           General => Strict
+ 
+ which causes all computations both inside and outside assertions to use
+ the base type.
+ 
+ This retains compatibility with previous versions of GNAT which
+ suppressed overflow checks by default and always used the base type for
+ computation of intermediate results.
+ 
+ The switch ‘-gnato’ (with no digits following) is equivalent to
+ 
+           General => Strict
+ 
+ which causes overflow checking of all intermediate overflows both inside
+ and outside assertions against the base type.
+ 
+ The pragma ‘Suppress (Overflow_Check)’ disables overflow checking, but
+ it has no effect on the method used for computing intermediate results.
+ 
+ The pragma ‘Unsuppress (Overflow_Check)’ enables overflow checking, but
+ it has no effect on the method used for computing intermediate results.
+ 
+ 
+ File: gnat_ugn.info,  Node: Implementation Notes,  Prev: Default Settings,  Up: Overflow Check Handling in GNAT
+ 
+ 6.4.5 Implementation Notes
+ --------------------------
+ 
+ In practice on typical 64-bit machines, the ‘MINIMIZED’ mode is
+ reasonably efficient, and can be generally used.  It also helps to
+ ensure compatibility with code imported from some other compiler to
+ GNAT.
+ 
+ Setting all intermediate overflows checking (‘CHECKED’ mode) makes sense
+ if you want to make sure that your code is compatible with any other
+ possible Ada implementation.  This may be useful in ensuring portability
+ for code that is to be exported to some other compiler than GNAT.
+ 
+ The Ada standard allows the reassociation of expressions at the same
+ precedence level if no parentheses are present.  For example, ‘A+B+C’
+ parses as though it were ‘(A+B)+C’, but the compiler can reintepret this
+ as ‘A+(B+C)’, possibly introducing or eliminating an overflow exception.
+ The GNAT compiler never takes advantage of this freedom, and the
+ expression ‘A+B+C’ will be evaluated as ‘(A+B)+C’.  If you need the
+ other order, you can write the parentheses explicitly ‘A+(B+C)’ and GNAT
+ will respect this order.
+ 
+ The use of ‘ELIMINATED’ mode will cause the compiler to automatically
+ include an appropriate arbitrary precision integer arithmetic package.
+ The compiler will make calls to this package, though only in cases where
+ it cannot be sure that ‘Long_Long_Integer’ is sufficient to guard
+ against intermediate overflows.  This package does not use dynamic
+ allocation, but it does use the secondary stack, so an appropriate
+ secondary stack package must be present (this is always true for
+ standard full Ada, but may require specific steps for restricted run
+ times such as ZFP).
+ 
+ Although ‘ELIMINATED’ mode causes expressions to use arbitrary precision
+ arithmetic, avoiding overflow, the final result must be in an
+ appropriate range.  This is true even if the final result is of type
+ ‘[Long_[Long_]]Integer'Base’, which still has the same bounds as its
+ associated constrained type at run-time.
+ 
+ Currently, the ‘ELIMINATED’ mode is only available on target platforms
+ for which ‘Long_Long_Integer’ is 64-bits (nearly all GNAT platforms).
+ 
+ 
+ File: gnat_ugn.info,  Node: Performing Dimensionality Analysis in GNAT,  Next: Stack Related Facilities,  Prev: Overflow Check Handling in GNAT,  Up: GNAT and Program Execution
+ 
+ 6.5 Performing Dimensionality Analysis in GNAT
+ ==============================================
+ 
+ The GNAT compiler supports dimensionality checking.  The user can
+ specify physical units for objects, and the compiler will verify that
+ uses of these objects are compatible with their dimensions, in a fashion
+ that is familiar to engineering practice.  The dimensions of algebraic
+ expressions (including powers with static exponents) are computed from
+ their constituents.
+ 
+ This feature depends on Ada 2012 aspect specifications, and is available
+ from version 7.0.1 of GNAT onwards.  The GNAT-specific aspect
+ ‘Dimension_System’ allows you to define a system of units; the aspect
+ ‘Dimension’ then allows the user to declare dimensioned quantities
+ within a given system.  (These aspects are described in the
+ ‘Implementation Defined Aspects’ chapter of the ‘GNAT Reference
+ Manual’).
+ 
+ The major advantage of this model is that it does not require the
+ declaration of multiple operators for all possible combinations of
+ types: it is only necessary to use the proper subtypes in object
+ declarations.
+ 
+ The simplest way to impose dimensionality checking on a computation is
+ to make use of one of the instantiations of the package
+ ‘System.Dim.Generic_Mks’, which are part of the GNAT library.  This
+ generic package defines a floating-point type ‘MKS_Type’, for which a
+ sequence of dimension names are specified, together with their
+ conventional abbreviations.  The following should be read together with
+ the full specification of the package, in file ‘s-digemk.ads’.
+ 
+           type Mks_Type is new Float_Type
+             with
+              Dimension_System => (
+                (Unit_Name => Meter,    Unit_Symbol => 'm',   Dim_Symbol => 'L'),
+                (Unit_Name => Kilogram, Unit_Symbol => "kg",  Dim_Symbol => 'M'),
+                (Unit_Name => Second,   Unit_Symbol => 's',   Dim_Symbol => 'T'),
+                (Unit_Name => Ampere,   Unit_Symbol => 'A',   Dim_Symbol => 'I'),
+                (Unit_Name => Kelvin,   Unit_Symbol => 'K',   Dim_Symbol => "Theta"),
+                (Unit_Name => Mole,     Unit_Symbol => "mol", Dim_Symbol => 'N'),
+                (Unit_Name => Candela,  Unit_Symbol => "cd",  Dim_Symbol => 'J'));
+ 
+ The package then defines a series of subtypes that correspond to these
+ conventional units.  For example:
+ 
+           subtype Length is Mks_Type
+             with
+              Dimension => (Symbol => 'm', Meter  => 1, others => 0);
+ 
+ and similarly for ‘Mass’, ‘Time’, ‘Electric_Current’,
+ ‘Thermodynamic_Temperature’, ‘Amount_Of_Substance’, and
+ ‘Luminous_Intensity’ (the standard set of units of the SI system).
+ 
+ The package also defines conventional names for values of each unit, for
+ example:
+ 
+           m   : constant Length           := 1.0;
+           kg  : constant Mass             := 1.0;
+           s   : constant Time             := 1.0;
+           A   : constant Electric_Current := 1.0;
+ 
+ as well as useful multiples of these units:
+ 
+            cm  : constant Length := 1.0E-02;
+            g   : constant Mass   := 1.0E-03;
+            min : constant Time   := 60.0;
+            day : constant Time   := 60.0 * 24.0 * min;
+           ...
+ 
+ There are three instantiations of ‘System.Dim.Generic_Mks’ defined in
+ the GNAT library:
+ 
+    * ‘System.Dim.Float_Mks’ based on ‘Float’ defined in ‘s-diflmk.ads’.
+ 
+    * ‘System.Dim.Long_Mks’ based on ‘Long_Float’ defined in
+      ‘s-dilomk.ads’.
+ 
+    * ‘System.Dim.Mks’ based on ‘Long_Long_Float’ defined in
+      ‘s-dimmks.ads’.
+ 
+ Using one of these packages, you can then define a derived unit by
+ providing the aspect that specifies its dimensions within the MKS
+ system, as well as the string to be used for output of a value of that
+ unit:
+ 
+           subtype Acceleration is Mks_Type
+             with Dimension => ("m/sec^2",
+                                Meter => 1,
+                                Second => -2,
+                                others => 0);
+ 
+ Here is a complete example of use:
+ 
+           with System.Dim.MKS; use System.Dim.Mks;
+           with System.Dim.Mks_IO; use System.Dim.Mks_IO;
+           with Text_IO; use Text_IO;
+           procedure Free_Fall is
+             subtype Acceleration is Mks_Type
+               with Dimension => ("m/sec^2", 1, 0, -2, others => 0);
+             G : constant acceleration := 9.81 * m / (s ** 2);
+             T : Time := 10.0*s;
+             Distance : Length;
+ 
+           begin
+             Put ("Gravitational constant: ");
+             Put (G, Aft => 2, Exp => 0); Put_Line ("");
+             Distance := 0.5 * G * T ** 2;
+             Put ("distance travelled in 10 seconds of free fall ");
+             Put (Distance, Aft => 2, Exp => 0);
+             Put_Line ("");
+           end Free_Fall;
+ 
+ Execution of this program yields:
+ 
+           Gravitational constant:  9.81 m/sec^2
+           distance travelled in 10 seconds of free fall 490.50 m
+ 
+ However, incorrect assignments such as:
+ 
+           Distance := 5.0;
+           Distance := 5.0 * kg;
+ 
+ are rejected with the following diagnoses:
+ 
+           Distance := 5.0;
+              >>> dimensions mismatch in assignment
+              >>> left-hand side has dimension [L]
+              >>> right-hand side is dimensionless
+ 
+           Distance := 5.0 * kg:
+              >>> dimensions mismatch in assignment
+              >>> left-hand side has dimension [L]
+              >>> right-hand side has dimension [M]
+ 
+ The dimensions of an expression are properly displayed, even if there is
+ no explicit subtype for it.  If we add to the program:
+ 
+           Put ("Final velocity: ");
+           Put (G * T, Aft =>2, Exp =>0);
+           Put_Line ("");
+ 
+ then the output includes:
+ 
+           Final velocity: 98.10 m.s**(-1)
+ 
+ The type ‘Mks_Type’ is said to be a ‘dimensionable type’ since it has a
+ ‘Dimension_System’ aspect, and the subtypes ‘Length’, ‘Mass’, etc., are
+ said to be ‘dimensioned subtypes’ since each one has a ‘Dimension’
+ aspect.
+ 
+ The ‘Dimension’ aspect of a dimensioned subtype ‘S’ defines a mapping
+ from the base type’s Unit_Names to integer (or, more generally,
+ rational) values.  This mapping is the ‘dimension vector’ (also referred
+ to as the ‘dimensionality’) for that subtype, denoted by ‘DV(S)’, and
+ thus for each object of that subtype.  Intuitively, the value specified
+ for each ‘Unit_Name’ is the exponent associated with that unit; a zero
+ value means that the unit is not used.  For example:
+ 
+           declare
+              Acc : Acceleration;
+              ...
+           begin
+              ...
+           end;
+ 
+ Here ‘DV(Acc)’ = ‘DV(Acceleration)’ = ‘(Meter=>1, Kilogram=>0,
+ Second=>-2, Ampere=>0, Kelvin=>0, Mole=>0, Candela=>0)’.  Symbolically,
+ we can express this as ‘Meter / Second**2’.
+ 
+ The dimension vector of an arithmetic expression is synthesized from the
+ dimension vectors of its components, with compile-time dimensionality
+ checks that help prevent mismatches such as using an ‘Acceleration’
+ where a ‘Length’ is required.
+ 
+ The dimension vector of the result of an arithmetic expression ‘expr’,
+ or ‘DV(EXPR)’, is defined as follows, assuming conventional mathematical
+ definitions for the vector operations that are used:
+ 
+    * If ‘expr’ is of the type ‘universal_real’, or is not of a
+      dimensioned subtype, then ‘expr’ is dimensionless; ‘DV(EXPR)’ is
+      the empty vector.
+ 
+    * ‘DV(OP EXPR)’, where ‘op’ is a unary operator, is ‘DV(EXPR)’
+ 
+    * ‘DV(EXPR1 OP EXPR2)’ where ‘op’ is “+” or “-” is ‘DV(EXPR1)’
+      provided that ‘DV(EXPR1)’ = ‘DV(EXPR2)’.  If this condition is not
+      met then the construct is illegal.
+ 
+    * ‘DV(EXPR1 * EXPR2)’ is ‘DV(EXPR1)’ + ‘DV(EXPR2)’, and ‘DV(EXPR1 /
+      EXPR2)’ = ‘DV(EXPR1)’ - ‘DV(EXPR2)’.  In this context if one of the
+      ‘expr’s is dimensionless then its empty dimension vector is treated
+      as ‘(others => 0)’.
+ 
+    * ‘DV(EXPR ** POWER)’ is ‘power’ * ‘DV(EXPR)’, provided that ‘power’
+      is a static rational value.  If this condition is not met then the
+      construct is illegal.
+ 
+ Note that, by the above rules, it is illegal to use binary “+” or “-” to
+ combine a dimensioned and dimensionless value.  Thus an expression such
+ as ‘acc-10.0’ is illegal, where ‘acc’ is an object of subtype
+ ‘Acceleration’.
+ 
+ The dimensionality checks for relationals use the same rules as for “+”
+ and “-”, except when comparing to a literal; thus
+ 
+           acc > len
+ 
+ is equivalent to
+ 
+           acc-len > 0.0
+ 
+ and is thus illegal, but
+ 
+           acc > 10.0
+ 
+ is accepted with a warning.  Analogously a conditional expression
+ requires the same dimension vector for each branch (with no exception
+ for literals).
+ 
+ The dimension vector of a type conversion ‘T(EXPR)’ is defined as
+ follows, based on the nature of ‘T’:
+ 
+    * If ‘T’ is a dimensioned subtype then ‘DV(T(EXPR))’ is ‘DV(T)’
+      provided that either ‘expr’ is dimensionless or ‘DV(T)’ =
+      ‘DV(EXPR)’.  The conversion is illegal if ‘expr’ is dimensioned and
+      ‘DV(EXPR)’ /= ‘DV(T)’.  Note that vector equality does not require
+      that the corresponding Unit_Names be the same.
+ 
+      As a consequence of the above rule, it is possible to convert
+      between different dimension systems that follow the same
+      international system of units, with the seven physical components
+      given in the standard order (length, mass, time, etc.).  Thus a
+      length in meters can be converted to a length in inches (with a
+      suitable conversion factor) but cannot be converted, for example,
+      to a mass in pounds.
+ 
+    * If ‘T’ is the base type for ‘expr’ (and the dimensionless root type
+      of the dimension system), then ‘DV(T(EXPR))’ is ‘DV(expr)’.  Thus,
+      if ‘expr’ is of a dimensioned subtype of ‘T’, the conversion may be
+      regarded as a “view conversion” that preserves dimensionality.
+ 
+      This rule makes it possible to write generic code that can be
+      instantiated with compatible dimensioned subtypes.  The generic
+      unit will contain conversions that will consequently be present in
+      instantiations, but conversions to the base type will preserve
+      dimensionality and make it possible to write generic code that is
+      correct with respect to dimensionality.
+ 
+    * Otherwise (i.e., ‘T’ is neither a dimensioned subtype nor a
+      dimensionable base type), ‘DV(T(EXPR))’ is the empty vector.  Thus
+      a dimensioned value can be explicitly converted to a
+      non-dimensioned subtype, which of course then escapes
+      dimensionality analysis.
+ 
+ The dimension vector for a type qualification ‘T'(EXPR)’ is the same as
+ for the type conversion ‘T(EXPR)’.
+ 
+ An assignment statement
+ 
+           Source := Target;
+ 
+ requires ‘DV(Source)’ = ‘DV(Target)’, and analogously for parameter
+ passing (the dimension vector for the actual parameter must be equal to
+ the dimension vector for the formal parameter).
+ 
+ 
+ File: gnat_ugn.info,  Node: Stack Related Facilities,  Next: Memory Management Issues,  Prev: Performing Dimensionality Analysis in GNAT,  Up: GNAT and Program Execution
+ 
+ 6.6 Stack Related Facilities
+ ============================
+ 
+ This section describes some useful tools associated with stack checking
+ and analysis.  In particular, it deals with dynamic and static stack
+ usage measurements.
+ 
+ * Menu:
+ 
+ * Stack Overflow Checking::
+ * Static Stack Usage Analysis::
+ * Dynamic Stack Usage Analysis::
+ 
+ 
+ File: gnat_ugn.info,  Node: Stack Overflow Checking,  Next: Static Stack Usage Analysis,  Up: Stack Related Facilities
+ 
+ 6.6.1 Stack Overflow Checking
+ -----------------------------
+ 
+ For most operating systems, ‘gcc’ does not perform stack overflow
+ checking by default.  This means that if the main environment task or
+ some other task exceeds the available stack space, then unpredictable
+ behavior will occur.  Most native systems offer some level of protection
+ by adding a guard page at the end of each task stack.  This mechanism is
+ usually not enough for dealing properly with stack overflow situations
+ because a large local variable could “jump” above the guard page.
+ Furthermore, when the guard page is hit, there may not be any space left
+ on the stack for executing the exception propagation code.  Enabling
+ stack checking avoids such situations.
+ 
+ To activate stack checking, compile all units with the ‘gcc’ option
+ ‘-fstack-check’.  For example:
+ 
+           $ gcc -c -fstack-check package1.adb
+ 
+ Units compiled with this option will generate extra instructions to
+ check that any use of the stack (for procedure calls or for declaring
+ local variables in declare blocks) does not exceed the available stack
+ space.  If the space is exceeded, then a ‘Storage_Error’ exception is
+ raised.
+ 
+ For declared tasks, the default stack size is defined by the GNAT
+ runtime, whose size may be modified at bind time through the ‘-d’ bind
+ switch (*note Switches for gnatbind: 110.).  Task specific stack sizes
+ may be set using the ‘Storage_Size’ pragma.
+ 
+ For the environment task, the stack size is determined by the operating
+ system.  Consequently, to modify the size of the environment task please
+ refer to your operating system documentation.
+ 
+ 
+ File: gnat_ugn.info,  Node: Static Stack Usage Analysis,  Next: Dynamic Stack Usage Analysis,  Prev: Stack Overflow Checking,  Up: Stack Related Facilities
+ 
+ 6.6.2 Static Stack Usage Analysis
+ ---------------------------------
+ 
+ A unit compiled with ‘-fstack-usage’ will generate an extra file that
+ specifies the maximum amount of stack used, on a per-function basis.
+ The file has the same basename as the target object file with a ‘.su’
+ extension.  Each line of this file is made up of three fields:
+ 
+    * The name of the function.
+ 
+    * A number of bytes.
+ 
+    * One or more qualifiers: ‘static’, ‘dynamic’, ‘bounded’.
+ 
+ The second field corresponds to the size of the known part of the
+ function frame.
+ 
+ The qualifier ‘static’ means that the function frame size is purely
+ static.  It usually means that all local variables have a static size.
+ In this case, the second field is a reliable measure of the function
+ stack utilization.
+ 
+ The qualifier ‘dynamic’ means that the function frame size is not
+ static.  It happens mainly when some local variables have a dynamic
+ size.  When this qualifier appears alone, the second field is not a
+ reliable measure of the function stack analysis.  When it is qualified
+ with ‘bounded’, it means that the second field is a reliable maximum of
+ the function stack utilization.
+ 
+ A unit compiled with ‘-Wstack-usage’ will issue a warning for each
+ subprogram whose stack usage might be larger than the specified amount
+ of bytes.  The wording is in keeping with the qualifier documented
+ above.
+ 
+ 
+ File: gnat_ugn.info,  Node: Dynamic Stack Usage Analysis,  Prev: Static Stack Usage Analysis,  Up: Stack Related Facilities
+ 
+ 6.6.3 Dynamic Stack Usage Analysis
+ ----------------------------------
+ 
+ It is possible to measure the maximum amount of stack used by a task, by
+ adding a switch to ‘gnatbind’, as:
+ 
+           $ gnatbind -u0 file
+ 
+ With this option, at each task termination, its stack usage is output on
+ ‘stderr’.  Note that this switch is not compatible with tools like
+ Valgrind and DrMemory; they will report errors.
+ 
+ It is not always convenient to output the stack usage when the program
+ is still running.  Hence, it is possible to delay this output until
+ program termination.  for a given number of tasks specified as the
+ argument of the ‘-u’ option.  For instance:
+ 
+           $ gnatbind -u100 file
+ 
+ will buffer the stack usage information of the first 100 tasks to
+ terminate and output this info at program termination.  Results are
+ displayed in four columns:
+ 
+           Index | Task Name | Stack Size | Stack Usage
+ 
+ where:
+ 
+    * ‘Index’ is a number associated with each task.
+ 
+    * ‘Task Name’ is the name of the task analyzed.
+ 
+    * ‘Stack Size’ is the maximum size for the stack.
+ 
+    * ‘Stack Usage’ is the measure done by the stack analyzer.  In order
+      to prevent overflow, the stack is not entirely analyzed, and it’s
+      not possible to know exactly how much has actually been used.
+ 
+ By default the environment task stack, the stack that contains the main
+ unit, is not processed.  To enable processing of the environment task
+ stack, the environment variable GNAT_STACK_LIMIT needs to be set to the
+ maximum size of the environment task stack.  This amount is given in
+ kilobytes.  For example:
+ 
+           $ set GNAT_STACK_LIMIT 1600
+ 
+ would specify to the analyzer that the environment task stack has a
+ limit of 1.6 megabytes.  Any stack usage beyond this will be ignored by
+ the analysis.
+ 
+ The package ‘GNAT.Task_Stack_Usage’ provides facilities to get
+ stack-usage reports at run time.  See its body for the details.
+ 
+ 
+ File: gnat_ugn.info,  Node: Memory Management Issues,  Prev: Stack Related Facilities,  Up: GNAT and Program Execution
+ 
+ 6.7 Memory Management Issues
+ ============================
+ 
+ This section describes some useful memory pools provided in the GNAT
+ library and in particular the GNAT Debug Pool facility, which can be
+ used to detect incorrect uses of access values (including ‘dangling
+ references’).
+ 
+ * Menu:
+ 
+ * Some Useful Memory Pools::
+ * The GNAT Debug Pool Facility::
+ 
+ 
+ File: gnat_ugn.info,  Node: Some Useful Memory Pools,  Next: The GNAT Debug Pool Facility,  Up: Memory Management Issues
+ 
+ 6.7.1 Some Useful Memory Pools
+ ------------------------------
+ 
+ The ‘System.Pool_Global’ package offers the Unbounded_No_Reclaim_Pool
+ storage pool.  Allocations use the standard system call ‘malloc’ while
+ deallocations use the standard system call ‘free’.  No reclamation is
+ performed when the pool goes out of scope.  For performance reasons, the
+ standard default Ada allocators/deallocators do not use any explicit
+ storage pools but if they did, they could use this storage pool without
+ any change in behavior.  That is why this storage pool is used when the
+ user manages to make the default implicit allocator explicit as in this
+ example:
+ 
+           type T1 is access Something;
+            -- no Storage pool is defined for T2
+ 
+           type T2 is access Something_Else;
+           for T2'Storage_Pool use T1'Storage_Pool;
+           -- the above is equivalent to
+           for T2'Storage_Pool use System.Pool_Global.Global_Pool_Object;
+ 
+ The ‘System.Pool_Local’ package offers the ‘Unbounded_Reclaim_Pool’
+ storage pool.  The allocation strategy is similar to ‘Pool_Local’ except
+ that the all storage allocated with this pool is reclaimed when the pool
+ object goes out of scope.  This pool provides a explicit mechanism
+ similar to the implicit one provided by several Ada 83 compilers for
+ allocations performed through a local access type and whose purpose was
+ to reclaim memory when exiting the scope of a given local access.  As an
+ example, the following program does not leak memory even though it does
+ not perform explicit deallocation:
+ 
+           with System.Pool_Local;
+           procedure Pooloc1 is
+              procedure Internal is
+                 type A is access Integer;
+                 X : System.Pool_Local.Unbounded_Reclaim_Pool;
+                 for A'Storage_Pool use X;
+                 v : A;
+              begin
+                 for I in  1 .. 50 loop
+                    v := new Integer;
+                 end loop;
+              end Internal;
+           begin
+              for I in  1 .. 100 loop
+                 Internal;
+              end loop;
+           end Pooloc1;
+ 
+ The ‘System.Pool_Size’ package implements the ‘Stack_Bounded_Pool’ used
+ when ‘Storage_Size’ is specified for an access type.  The whole storage
+ for the pool is allocated at once, usually on the stack at the point
+ where the access type is elaborated.  It is automatically reclaimed when
+ exiting the scope where the access type is defined.  This package is not
+ intended to be used directly by the user and it is implicitly used for
+ each such declaration:
+ 
+           type T1 is access Something;
+           for T1'Storage_Size use 10_000;
+ 
+ 
+ File: gnat_ugn.info,  Node: The GNAT Debug Pool Facility,  Prev: Some Useful Memory Pools,  Up: Memory Management Issues
+ 
+ 6.7.2 The GNAT Debug Pool Facility
+ ----------------------------------
+ 
+ The use of unchecked deallocation and unchecked conversion can easily
+ lead to incorrect memory references.  The problems generated by such
+ references are usually difficult to tackle because the symptoms can be
+ very remote from the origin of the problem.  In such cases, it is very
+ helpful to detect the problem as early as possible.  This is the purpose
+ of the Storage Pool provided by ‘GNAT.Debug_Pools’.
+ 
+ In order to use the GNAT specific debugging pool, the user must
+ associate a debug pool object with each of the access types that may be
+ related to suspected memory problems.  See Ada Reference Manual 13.11.
+ 
+           type Ptr is access Some_Type;
+           Pool : GNAT.Debug_Pools.Debug_Pool;
+           for Ptr'Storage_Pool use Pool;
+ 
+ ‘GNAT.Debug_Pools’ is derived from a GNAT-specific kind of pool: the
+ ‘Checked_Pool’.  Such pools, like standard Ada storage pools, allow the
+ user to redefine allocation and deallocation strategies.  They also
+ provide a checkpoint for each dereference, through the use of the
+ primitive operation ‘Dereference’ which is implicitly called at each
+ dereference of an access value.
+ 
+ Once an access type has been associated with a debug pool, operations on
+ values of the type may raise four distinct exceptions, which correspond
+ to four potential kinds of memory corruption:
+ 
+    * ‘GNAT.Debug_Pools.Accessing_Not_Allocated_Storage’
+ 
+    * ‘GNAT.Debug_Pools.Accessing_Deallocated_Storage’
+ 
+    * ‘GNAT.Debug_Pools.Freeing_Not_Allocated_Storage’
+ 
+    * ‘GNAT.Debug_Pools.Freeing_Deallocated_Storage’
+ 
+ For types associated with a Debug_Pool, dynamic allocation is performed
+ using the standard GNAT allocation routine.  References to all allocated
+ chunks of memory are kept in an internal dictionary.  Several
+ deallocation strategies are provided, whereupon the user can choose to
+ release the memory to the system, keep it allocated for further invalid
+ access checks, or fill it with an easily recognizable pattern for debug
+ sessions.  The memory pattern is the old IBM hexadecimal convention:
+ ‘16#DEADBEEF#’.
+ 
+ See the documentation in the file g-debpoo.ads for more information on
+ the various strategies.
+ 
+ Upon each dereference, a check is made that the access value denotes a
+ properly allocated memory location.  Here is a complete example of use
+ of ‘Debug_Pools’, that includes typical instances of memory corruption:
+ 
+           with GNAT.IO; use GNAT.IO;
+           with Ada.Unchecked_Deallocation;
+           with Ada.Unchecked_Conversion;
+           with GNAT.Debug_Pools;
+           with System.Storage_Elements;
+           with Ada.Exceptions; use Ada.Exceptions;
+           procedure Debug_Pool_Test is
+ 
+              type T is access Integer;
+              type U is access all T;
+ 
+              P : GNAT.Debug_Pools.Debug_Pool;
+              for T'Storage_Pool use P;
+ 
+              procedure Free is new Ada.Unchecked_Deallocation (Integer, T);
+              function UC is new Ada.Unchecked_Conversion (U, T);
+              A, B : aliased T;
+ 
+              procedure Info is new GNAT.Debug_Pools.Print_Info(Put_Line);
+ 
+           begin
+              Info (P);
+              A := new Integer;
+              B := new Integer;
+              B := A;
+              Info (P);
+              Free (A);
+              begin
+                 Put_Line (Integer'Image(B.all));
+              exception
+                 when E : others => Put_Line ("raised: " & Exception_Name (E));
+              end;
+              begin
+                 Free (B);
+              exception
+                 when E : others => Put_Line ("raised: " & Exception_Name (E));
+              end;
+              B := UC(A'Access);
+              begin
+                 Put_Line (Integer'Image(B.all));
+              exception
+                 when E : others => Put_Line ("raised: " & Exception_Name (E));
+              end;
+              begin
+                 Free (B);
+              exception
+                 when E : others => Put_Line ("raised: " & Exception_Name (E));
+              end;
+              Info (P);
+           end Debug_Pool_Test;
+ 
+ The debug pool mechanism provides the following precise diagnostics on
+ the execution of this erroneous program:
+ 
+           Debug Pool info:
+             Total allocated bytes :  0
+             Total deallocated bytes :  0
+             Current Water Mark:  0
+             High Water Mark:  0
+ 
+           Debug Pool info:
+             Total allocated bytes :  8
+             Total deallocated bytes :  0
+             Current Water Mark:  8
+             High Water Mark:  8
+ 
+           raised: GNAT.DEBUG_POOLS.ACCESSING_DEALLOCATED_STORAGE
+           raised: GNAT.DEBUG_POOLS.FREEING_DEALLOCATED_STORAGE
+           raised: GNAT.DEBUG_POOLS.ACCESSING_NOT_ALLOCATED_STORAGE
+           raised: GNAT.DEBUG_POOLS.FREEING_NOT_ALLOCATED_STORAGE
+           Debug Pool info:
+             Total allocated bytes :  8
+             Total deallocated bytes :  4
+             Current Water Mark:  4
+             High Water Mark:  8
+ 
+ 
+ File: gnat_ugn.info,  Node: Platform-Specific Information,  Next: Example of Binder Output File,  Prev: GNAT and Program Execution,  Up: Top
+ 
+ 7 Platform-Specific Information
+ *******************************
+ 
+ This appendix contains information relating to the implementation of
+ run-time libraries on various platforms and also covers topics related
+ to the GNAT implementation on specific Operating Systems.
+ 
+ * Menu:
+ 
+ * Run-Time Libraries::
+ * Specifying a Run-Time Library::
+ * GNU/Linux Topics::
+ * Microsoft Windows Topics::
+ * Mac OS Topics::
+ 
+ 
+ File: gnat_ugn.info,  Node: Run-Time Libraries,  Next: Specifying a Run-Time Library,  Up: Platform-Specific Information
+ 
+ 7.1 Run-Time Libraries
+ ======================
+ 
+ The GNAT run-time implementation may vary with respect to both the
+ underlying threads library and the exception-handling scheme.  For
+ threads support, the default run-time will bind to the thread package of
+ the underlying operating system.
+ 
+ For exception handling, either or both of two models are supplied:
+ 
+    * ‘Zero-Cost Exceptions’ (“ZCX”), which uses binder-generated tables
+      that are interrogated at run time to locate a handler.
+ 
+    * ‘setjmp / longjmp’ (‘SJLJ’), which uses dynamically-set data to
+      establish the set of handlers
+ 
+ Most programs should experience a substantial speed improvement by being
+ compiled with a ZCX run-time.  This is especially true for tasking
+ applications or applications with many exception handlers.  Note however
+ that the ZCX run-time does not support asynchronous abort of tasks
+ (‘abort’ and ‘select-then-abort’ constructs) and will instead implement
+ abort by polling points in the runtime.  You can also add additional
+ polling points explicitly if needed in your application via ‘pragma
+ Abort_Defer’.
+ 
+ This section summarizes which combinations of threads and exception
+ support are supplied on various GNAT platforms.
+ 
+ * Menu:
+ 
+ * Summary of Run-Time Configurations::
+ 
+ 
+ File: gnat_ugn.info,  Node: Summary of Run-Time Configurations,  Up: Run-Time Libraries
+ 
+ 7.1.1 Summary of Run-Time Configurations
+ ----------------------------------------
+ 
+ Platform              Run-Time           Tasking                       Exceptions
+                                                                        
+ ----------------------------------------------------------------------------------------
+                                                                        
+ GNU/Linux             rts-native         pthread library               ZCX
+                       (default)                                        
+                       
+                                          
+ rts-sjlj              pthread library    SJLJ
+                                          
+                                                                        
+ Windows               rts-native         native Win32 threads          ZCX
+                       (default)                                        
+                       
+                                          
+ rts-sjlj              native Win32       SJLJ
+                       threads            
+                       
+                                                                        
+ Mac OS                rts-native         pthread library               ZCX
+                                                                        
+ 
+ 
+ File: gnat_ugn.info,  Node: Specifying a Run-Time Library,  Next: GNU/Linux Topics,  Prev: Run-Time Libraries,  Up: Platform-Specific Information
+ 
+ 7.2 Specifying a Run-Time Library
+ =================================
+ 
+ The ‘adainclude’ subdirectory containing the sources of the GNAT
+ run-time library, and the ‘adalib’ subdirectory containing the ‘ALI’
+ files and the static and/or shared GNAT library, are located in the gcc
+ target-dependent area:
+ 
+           target=$prefix/lib/gcc/gcc-*dumpmachine*/gcc-*dumpversion*/
+ 
+ As indicated above, on some platforms several run-time libraries are
+ supplied.  These libraries are installed in the target dependent area
+ and contain a complete source and binary subdirectory.  The detailed
+ description below explains the differences between the different
+ libraries in terms of their thread support.
+ 
+ The default run-time library (when GNAT is installed) is ‘rts-native’.
+ This default run-time is selected by the means of soft links.  For
+ example on x86-linux:
+ 
+                     $(target-dir)
+                    __/ /      \ \___
+            _______/   /        \    \_________________
+           /          /          \                     \
+          /          /            \                     \
+      ADAINCLUDE  ADALIB      rts-native             rts-sjlj
+         :          :            /    \                 /   \
+         :          :           /      \               /     \
+         :          :          /        \             /       \
+         :          :         /          \           /         \
+         +-------------> adainclude     adalib   adainclude   adalib
+                    :                     ^
+                    :                     :
+                    +---------------------+
+ 
+                    Run-Time Library Directory Structure
+         (Upper-case names and dotted/dashed arrows represent soft links)
+ 
+ If the ‘rts-sjlj’ library is to be selected on a permanent basis, these
+ soft links can be modified with the following commands:
+ 
+           $ cd $target
+           $ rm -f adainclude adalib
+           $ ln -s rts-sjlj/adainclude adainclude
+           $ ln -s rts-sjlj/adalib adalib
+ 
+ Alternatively, you can specify ‘rts-sjlj/adainclude’ in the file
+ ‘$target/ada_source_path’ and ‘rts-sjlj/adalib’ in
+ ‘$target/ada_object_path’.
+ 
+ Selecting another run-time library temporarily can be achieved by using
+ the ‘--RTS’ switch, e.g., ‘--RTS=sjlj’
+ 
+ * Menu:
+ 
+ * Choosing the Scheduling Policy::
+ 
+ 
+ File: gnat_ugn.info,  Node: Choosing the Scheduling Policy,  Up: Specifying a Run-Time Library
+ 
+ 7.2.1 Choosing the Scheduling Policy
+ ------------------------------------
+ 
+ When using a POSIX threads implementation, you have a choice of several
+ scheduling policies: ‘SCHED_FIFO’, ‘SCHED_RR’ and ‘SCHED_OTHER’.
+ 
+ Typically, the default is ‘SCHED_OTHER’, while using ‘SCHED_FIFO’ or
+ ‘SCHED_RR’ requires special (e.g., root) privileges.
+ 
+ By default, GNAT uses the ‘SCHED_OTHER’ policy.  To specify
+ ‘SCHED_FIFO’, you can use one of the following:
+ 
+    * ‘pragma Time_Slice (0.0)’
+ 
+    * the corresponding binder option ‘-T0’
+ 
+    * ‘pragma Task_Dispatching_Policy (FIFO_Within_Priorities)’
+ 
+ To specify ‘SCHED_RR’, you should use ‘pragma Time_Slice’ with a value
+ greater than 0.0, or else use the corresponding ‘-T’ binder option.
+ 
+ To make sure a program is running as root, you can put something like
+ this in a library package body in your application:
+ 
+           function geteuid return Integer;
+           pragma Import (C, geteuid, "geteuid");
+           Ignore : constant Boolean :=
+             (if geteuid = 0 then True else raise Program_Error with "must be root");
+ 
+ It gets the effective user id, and if it’s not 0 (i.e.  root), it raises
+ Program_Error.  Note that if you re running the code in a container,
+ this may not be sufficient, as you may have sufficient priviledge on the
+ container, but not on the host machine running the container, so check
+ that you also have sufficient priviledge for running the container
+ image.
+ 
+ 
+ File: gnat_ugn.info,  Node: GNU/Linux Topics,  Next: Microsoft Windows Topics,  Prev: Specifying a Run-Time Library,  Up: Platform-Specific Information
+ 
+ 7.3 GNU/Linux Topics
+ ====================
+ 
+ This section describes topics that are specific to GNU/Linux platforms.
+ 
+ * Menu:
+ 
+ * Required Packages on GNU/Linux::
+ * A GNU/Linux Debug Quirk::
+ 
+ 
+ File: gnat_ugn.info,  Node: Required Packages on GNU/Linux,  Next: A GNU/Linux Debug Quirk,  Up: GNU/Linux Topics
+ 
+ 7.3.1 Required Packages on GNU/Linux
+ ------------------------------------
+ 
+ GNAT requires the C library developer’s package to be installed.  The
+ name of of that package depends on your GNU/Linux distribution:
+ 
+    * RedHat, SUSE: ‘glibc-devel’;
+ 
+    * Debian, Ubuntu: ‘libc6-dev’ (normally installed by default).
+ 
+ If using the 32-bit version of GNAT on a 64-bit version of GNU/Linux,
+ you’ll need the 32-bit version of the following packages:
+ 
+    * RedHat, SUSE: ‘glibc.i686’, ‘glibc-devel.i686’, ‘ncurses-libs.i686’
+ 
+    * SUSE: ‘glibc-locale-base-32bit’
+ 
+    * Debian, Ubuntu: ‘libc6:i386’, ‘libc6-dev:i386’, ‘lib32ncursesw5’
+ 
+ Other GNU/Linux distributions might be choosing a different name for
+ those packages.
+ 
+ 
+ File: gnat_ugn.info,  Node: A GNU/Linux Debug Quirk,  Prev: Required Packages on GNU/Linux,  Up: GNU/Linux Topics
+ 
+ 7.3.2 A GNU/Linux Debug Quirk
+ -----------------------------
+ 
+ On SuSE 15, some kernels have a defect causing issues when debugging
+ programs using threads or Ada tasks.  Due to the lack of documentation
+ found regarding this kernel issue, we can only provide limited
+ information about which kernels are impacted: kernel version 5.3.18 is
+ known to be impacted, and kernels in the 5.14 range or newer are
+ believed to fix this problem.
+ 
+ The bug affects the debugging of 32-bit processes on a 64-bit system.
+ Symptoms can vary: Unexpected ‘SIGABRT’ signals being received by the
+ program, “The futex facility returned an unexpected error code” error
+ message, and inferior programs hanging indefinitely range among the
+ symptoms most commonly observed.
+ 
+ 
+ File: gnat_ugn.info,  Node: Microsoft Windows Topics,  Next: Mac OS Topics,  Prev: GNU/Linux Topics,  Up: Platform-Specific Information
+ 
+ 7.4 Microsoft Windows Topics
+ ============================
+ 
+ This section describes topics that are specific to the Microsoft Windows
+ platforms.
+ 
+ * Menu:
+ 
+ * Using GNAT on Windows::
+ * Using a network installation of GNAT::
+ * CONSOLE and WINDOWS subsystems::
+ * Temporary Files::
+ * Disabling Command Line Argument Expansion::
+ * Windows Socket Timeouts::
+ * Mixed-Language Programming on Windows::
+ * Windows Specific Add-Ons::
+ 
+ 
+ File: gnat_ugn.info,  Node: Using GNAT on Windows,  Next: Using a network installation of GNAT,  Up: Microsoft Windows Topics
+ 
+ 7.4.1 Using GNAT on Windows
+ ---------------------------
+ 
+ One of the strengths of the GNAT technology is that its tool set (‘gcc’,
+ ‘gnatbind’, ‘gnatlink’, ‘gnatmake’, the ‘gdb’ debugger, etc.)  is used
+ in the same way regardless of the platform.
+ 
+ On Windows this tool set is complemented by a number of
+ Microsoft-specific tools that have been provided to facilitate
+ interoperability with Windows when this is required.  With these tools:
+ 
+    * You can build applications using the ‘CONSOLE’ or ‘WINDOWS’
+      subsystems.
+ 
+    * You can use any Dynamically Linked Library (DLL) in your Ada code
+      (both relocatable and non-relocatable DLLs are supported).
+ 
+    * You can build Ada DLLs for use in other applications.  These
+      applications can be written in a language other than Ada (e.g., C,
+      C++, etc).  Again both relocatable and non-relocatable Ada DLLs are
+      supported.
+ 
+    * You can include Windows resources in your Ada application.
+ 
+    * You can use or create COM/DCOM objects.
+ 
+ Immediately below are listed all known general GNAT-for-Windows
+ restrictions.  Other restrictions about specific features like Windows
+ Resources and DLLs are listed in separate sections below.
+ 
+    * It is not possible to use ‘GetLastError’ and ‘SetLastError’ when
+      tasking, protected records, or exceptions are used.  In these
+      cases, in order to implement Ada semantics, the GNAT run-time
+      system calls certain Win32 routines that set the last error
+      variable to 0 upon success.  It should be possible to use
+      ‘GetLastError’ and ‘SetLastError’ when tasking, protected record,
+      and exception features are not used, but it is not guaranteed to
+      work.
+ 
+    * It is not possible to link against Microsoft C++ libraries except
+      for import libraries.  Interfacing must be done by the mean of
+      DLLs.
+ 
+    * It is possible to link against Microsoft C libraries.  Yet the
+      preferred solution is to use C/C++ compiler that comes with GNAT,
+      since it doesn’t require having two different development
+      environments and makes the inter-language debugging experience
+      smoother.
+ 
+    * When the compilation environment is located on FAT32 drives, users
+      may experience recompilations of the source files that have not
+      changed if Daylight Saving Time (DST) state has changed since the
+      last time files were compiled.  NTFS drives do not have this
+      problem.
+ 
+    * No components of the GNAT toolset use any entries in the Windows
+      registry.  The only entries that can be created are file
+      associations and PATH settings, provided the user has chosen to
+      create them at installation time, as well as some minimal
+      book-keeping information needed to correctly uninstall or integrate
+      different GNAT products.
+ 
+ 
+ File: gnat_ugn.info,  Node: Using a network installation of GNAT,  Next: CONSOLE and WINDOWS subsystems,  Prev: Using GNAT on Windows,  Up: Microsoft Windows Topics
+ 
+ 7.4.2 Using a network installation of GNAT
+ ------------------------------------------
+ 
+ Make sure the system on which GNAT is installed is accessible from the
+ current machine, i.e., the install location is shared over the network.
+ Shared resources are accessed on Windows by means of UNC paths, which
+ have the format ‘\\\\server\\sharename\\path’
+ 
+ In order to use such a network installation, simply add the UNC path of
+ the ‘bin’ directory of your GNAT installation in front of your PATH. For
+ example, if GNAT is installed in ‘\GNAT’ directory of a share location
+ called ‘c-drive’ on a machine ‘LOKI’, the following command will make it
+ available:
+ 
+           $ path \\loki\c-drive\gnat\bin;%path%`
+ 
+ Be aware that every compilation using the network installation results
+ in the transfer of large amounts of data across the network and will
+ likely cause serious performance penalty.
+ 
+ 
+ File: gnat_ugn.info,  Node: CONSOLE and WINDOWS subsystems,  Next: Temporary Files,  Prev: Using a network installation of GNAT,  Up: Microsoft Windows Topics
+ 
+ 7.4.3 CONSOLE and WINDOWS subsystems
+ ------------------------------------
+ 
+ There are two main subsystems under Windows.  The ‘CONSOLE’ subsystem
+ (which is the default subsystem) will always create a console when
+ launching the application.  This is not something desirable when the
+ application has a Windows GUI. To get rid of this console the
+ application must be using the ‘WINDOWS’ subsystem.  To do so the
+ ‘-mwindows’ linker option must be specified.
+ 
+           $ gnatmake winprog -largs -mwindows
+ 
+ 
+ File: gnat_ugn.info,  Node: Temporary Files,  Next: Disabling Command Line Argument Expansion,  Prev: CONSOLE and WINDOWS subsystems,  Up: Microsoft Windows Topics
+ 
+ 7.4.4 Temporary Files
+ ---------------------
+ 
+ It is possible to control where temporary files gets created by setting
+ the ‘TMP’ environment variable.  The file will be created:
+ 
+    * Under the directory pointed to by the ‘TMP’ environment variable if
+      this directory exists.
+ 
+    * Under ‘c:\temp’, if the ‘TMP’ environment variable is not set (or
+      not pointing to a directory) and if this directory exists.
+ 
+    * Under the current working directory otherwise.
+ 
+ This allows you to determine exactly where the temporary file will be
+ created.  This is particularly useful in networked environments where
+ you may not have write access to some directories.
+ 
+ 
+ File: gnat_ugn.info,  Node: Disabling Command Line Argument Expansion,  Next: Windows Socket Timeouts,  Prev: Temporary Files,  Up: Microsoft Windows Topics
+ 
+ 7.4.5 Disabling Command Line Argument Expansion
+ -----------------------------------------------
+ 
+ By default, an executable compiled for the Windows platform will do the
+ following postprocessing on the arguments passed on the command line:
+ 
+    * If the argument contains the characters ‘*’ and/or ‘?’, then file
+      expansion will be attempted.  For example, if the current directory
+      contains ‘a.txt’ and ‘b.txt’, then when calling:
+ 
+           $ my_ada_program *.txt
+ 
+      The following arguments will effectively be passed to the main
+      program (for example when using ‘Ada.Command_Line.Argument’):
+ 
+           Ada.Command_Line.Argument (1) -> "a.txt"
+           Ada.Command_Line.Argument (2) -> "b.txt"
+ 
+    * Filename expansion can be disabled for a given argument by using
+      single quotes.  Thus, calling:
+ 
+           $ my_ada_program '*.txt'
+ 
+      will result in:
+ 
+           Ada.Command_Line.Argument (1) -> "*.txt"
+ 
+ Note that if the program is launched from a shell such as Cygwin Bash
+ then quote removal might be performed by the shell.
+ 
+ In some contexts it might be useful to disable this feature (for example
+ if the program performs its own argument expansion).  In order to do
+ this, a C symbol needs to be defined and set to ‘0’.  You can do this by
+ adding the following code fragment in one of your Ada units:
+ 
+      Do_Argv_Expansion : Integer := 0;
+      pragma Export (C, Do_Argv_Expansion, "__gnat_do_argv_expansion");
+ 
+ The results of previous examples will be respectively:
+ 
+      Ada.Command_Line.Argument (1) -> "*.txt"
+ 
+ and:
+ 
+      Ada.Command_Line.Argument (1) -> "'*.txt'"
+ 
+ 
+ File: gnat_ugn.info,  Node: Windows Socket Timeouts,  Next: Mixed-Language Programming on Windows,  Prev: Disabling Command Line Argument Expansion,  Up: Microsoft Windows Topics
+ 
+ 7.4.6 Windows Socket Timeouts
+ -----------------------------
+ 
+ Microsoft Windows desktops older than ‘8.0’ and Microsoft Windows
+ Servers older than ‘2019’ set a socket timeout 500 milliseconds longer
+ than the value set by setsockopt with ‘SO_RCVTIMEO’ and ‘SO_SNDTIMEO’
+ options.  The GNAT runtime makes a correction for the difference in the
+ corresponding Windows versions.  For Windows Server starting with
+ version ‘2019’, the user must provide a manifest file for the GNAT
+ runtime to be able to recognize that the Windows version does not need
+ the timeout correction.  The manifest file should be located in the same
+ directory as the executable file, and its file name must match the
+ executable name suffixed by ‘.manifest’.  For example, if the executable
+ name is ‘sock_wto.exe’, then the manifest file name has to be
+ ‘sock_wto.exe.manifest’.  The manifest file must contain at least the
+ following data:
+ 
+      <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+      <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
+      <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
+      <application>
+         <!-- Windows Vista -->
+         <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
+         <!-- Windows 7 -->
+         <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
+         <!-- Windows 8 -->
+         <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
+         <!-- Windows 8.1 -->
+         <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
+         <!-- Windows 10 -->
+         <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
+      </application>
+      </compatibility>
+      </assembly>
+ 
+ Without the manifest file, the socket timeout is going to be
+ overcorrected on these Windows Server versions and the actual time is
+ going to be 500 milliseconds shorter than what was set with
+ GNAT.Sockets.Set_Socket_Option.  Note that on Microsoft Windows versions
+ where correction is necessary, there is no way to set a socket timeout
+ shorter than 500 ms.  If a socket timeout shorter than 500 ms is needed
+ on these Windows versions, a call to Check_Selector should be added
+ before any socket read or write operations.
+ 
+ 
+ File: gnat_ugn.info,  Node: Mixed-Language Programming on Windows,  Next: Windows Specific Add-Ons,  Prev: Windows Socket Timeouts,  Up: Microsoft Windows Topics
+ 
+ 7.4.7 Mixed-Language Programming on Windows
+ -------------------------------------------
+ 
+ Developing pure Ada applications on Windows is no different than on
+ other GNAT-supported platforms.  However, when developing or porting an
+ application that contains a mix of Ada and C/C++, the choice of your
+ Windows C/C++ development environment conditions your overall
+ interoperability strategy.
+ 
+ If you use ‘gcc’ or Microsoft C to compile the non-Ada part of your
+ application, there are no Windows-specific restrictions that affect the
+ overall interoperability with your Ada code.  If you do want to use the
+ Microsoft tools for your C++ code, you have two choices:
+ 
+    * Encapsulate your C++ code in a DLL to be linked with your Ada
+      application.  In this case, use the Microsoft or whatever
+      environment to build the DLL and use GNAT to build your executable
+      (*note Using DLLs with GNAT: 1cf.).
+ 
+    * Or you can encapsulate your Ada code in a DLL to be linked with the
+      other part of your application.  In this case, use GNAT to build
+      the DLL (*note Building DLLs with GNAT Project files: 1d0.) and use
+      the Microsoft or whatever environment to build your executable.
+ 
+ In addition to the description about C main in *note Mixed Language
+ Programming: 2c. section, if the C main uses a stand-alone library it is
+ required on x86-windows to setup the SEH context.  For this the C main
+ must looks like this:
+ 
+           /* main.c */
+           extern void adainit (void);
+           extern void adafinal (void);
+           extern void __gnat_initialize(void*);
+           extern void call_to_ada (void);
+ 
+           int main (int argc, char *argv[])
+           {
+             int SEH [2];
+ 
+             /* Initialize the SEH context */
+             __gnat_initialize (&SEH);
+ 
+             adainit();
+ 
+             /* Then call Ada services in the stand-alone library */
+ 
+             call_to_ada();
+ 
+             adafinal();
+           }
+ 
+ Note that this is not needed on x86_64-windows where the Windows native
+ SEH support is used.
+ 
+ * Menu:
+ 
+ * Windows Calling Conventions::
+ * Introduction to Dynamic Link Libraries (DLLs): Introduction to Dynamic Link Libraries DLLs.
+ * Using DLLs with GNAT::
+ * Building DLLs with GNAT Project files::
+ * Building DLLs with GNAT::
+ * Building DLLs with gnatdll::
+ * Ada DLLs and Finalization::
+ * Creating a Spec for Ada DLLs::
+ * GNAT and Windows Resources::
+ * Using GNAT DLLs from Microsoft Visual Studio Applications::
+ * Debugging a DLL::
+ * Setting Stack Size from gnatlink::
+ * Setting Heap Size from gnatlink::
+ 
+ 
+ File: gnat_ugn.info,  Node: Windows Calling Conventions,  Next: Introduction to Dynamic Link Libraries DLLs,  Up: Mixed-Language Programming on Windows
+ 
+ 7.4.7.1 Windows Calling Conventions
+ ...................................
+ 
+ This section pertain only to Win32.  On Win64 there is a single native
+ calling convention.  All convention specifiers are ignored on this
+ platform.
+ 
+ When a subprogram ‘F’ (caller) calls a subprogram ‘G’ (callee), there
+ are several ways to push ‘G’‘s parameters on the stack and there are
+ several possible scenarios to clean up the stack upon ‘G’‘s return.  A
+ calling convention is an agreed upon software protocol whereby the
+ responsibilities between the caller (‘F’) and the callee (‘G’) are
+ clearly defined.  Several calling conventions are available for Windows:
+ 
+    * ‘C’ (Microsoft defined)
+ 
+    * ‘Stdcall’ (Microsoft defined)
+ 
+    * ‘Win32’ (GNAT specific)
+ 
+    * ‘DLL’ (GNAT specific)
+ 
+ * Menu:
+ 
+ * C Calling Convention::
+ * Stdcall Calling Convention::
+ * Win32 Calling Convention::
+ * DLL Calling Convention::
+ 
+ 
+ File: gnat_ugn.info,  Node: C Calling Convention,  Next: Stdcall Calling Convention,  Up: Windows Calling Conventions
+ 
+ 7.4.7.2 ‘C’ Calling Convention
+ ..............................
+ 
+ This is the default calling convention used when interfacing to C/C++
+ routines compiled with either ‘gcc’ or Microsoft Visual C++.
+ 
+ In the ‘C’ calling convention subprogram parameters are pushed on the
+ stack by the caller from right to left.  The caller itself is in charge
+ of cleaning up the stack after the call.  In addition, the name of a
+ routine with ‘C’ calling convention is mangled by adding a leading
+ underscore.
+ 
+ The name to use on the Ada side when importing (or exporting) a routine
+ with ‘C’ calling convention is the name of the routine.  For instance
+ the C function:
+ 
+           int get_val (long);
+ 
+ should be imported from Ada as follows:
+ 
+           function Get_Val (V : Interfaces.C.long) return Interfaces.C.int;
+           pragma Import (C, Get_Val, External_Name => "get_val");
+ 
+ Note that in this particular case the ‘External_Name’ parameter could
+ have been omitted since, when missing, this parameter is taken to be the
+ name of the Ada entity in lower case.  When the ‘Link_Name’ parameter is
+ missing, as in the above example, this parameter is set to be the
+ ‘External_Name’ with a leading underscore.
+ 
+ When importing a variable defined in C, you should always use the ‘C’
+ calling convention unless the object containing the variable is part of
+ a DLL (in which case you should use the ‘Stdcall’ calling convention,
+ *note Stdcall Calling Convention: 1d5.).
+ 
+ 
+ File: gnat_ugn.info,  Node: Stdcall Calling Convention,  Next: Win32 Calling Convention,  Prev: C Calling Convention,  Up: Windows Calling Conventions
+ 
+ 7.4.7.3 ‘Stdcall’ Calling Convention
+ ....................................
+ 
+ This convention, which was the calling convention used for Pascal
+ programs, is used by Microsoft for all the routines in the Win32 API for
+ efficiency reasons.  It must be used to import any routine for which
+ this convention was specified.
+ 
+ In the ‘Stdcall’ calling convention subprogram parameters are pushed on
+ the stack by the caller from right to left.  The callee (and not the
+ caller) is in charge of cleaning the stack on routine exit.  In
+ addition, the name of a routine with ‘Stdcall’ calling convention is
+ mangled by adding a leading underscore (as for the ‘C’ calling
+ convention) and a trailing ‘@NN’, where ‘nn’ is the overall size (in
+ bytes) of the parameters passed to the routine.
+ 
+ The name to use on the Ada side when importing a C routine with a
+ ‘Stdcall’ calling convention is the name of the C routine.  The leading
+ underscore and trailing ‘@NN’ are added automatically by the compiler.
+ For instance the Win32 function:
+ 
+           APIENTRY int get_val (long);
+ 
+ should be imported from Ada as follows:
+ 
+           function Get_Val (V : Interfaces.C.long) return Interfaces.C.int;
+           pragma Import (Stdcall, Get_Val);
+           --  On the x86 a long is 4 bytes, so the Link_Name is "_get_val@4"
+ 
+ As for the ‘C’ calling convention, when the ‘External_Name’ parameter is
+ missing, it is taken to be the name of the Ada entity in lower case.  If
+ instead of writing the above import pragma you write:
+ 
+           function Get_Val (V : Interfaces.C.long) return Interfaces.C.int;
+           pragma Import (Stdcall, Get_Val, External_Name => "retrieve_val");
+ 
+ then the imported routine is ‘_retrieve_val@4’.  However, if instead of
+ specifying the ‘External_Name’ parameter you specify the ‘Link_Name’ as
+ in the following example:
+ 
+           function Get_Val (V : Interfaces.C.long) return Interfaces.C.int;
+           pragma Import (Stdcall, Get_Val, Link_Name => "retrieve_val");
+ 
+ then the imported routine is ‘retrieve_val’, that is, there is no
+ decoration at all.  No leading underscore and no Stdcall suffix ‘@NN’.
+ 
+ This is especially important as in some special cases a DLL’s entry
+ point name lacks a trailing ‘@NN’ while the exported name generated for
+ a call has it.
+ 
+ It is also possible to import variables defined in a DLL by using an
+ import pragma for a variable.  As an example, if a DLL contains a
+ variable defined as:
+ 
+           int my_var;
+ 
+ then, to access this variable from Ada you should write:
+ 
+           My_Var : Interfaces.C.int;
+           pragma Import (Stdcall, My_Var);
+ 
+ Note that to ease building cross-platform bindings this convention will
+ be handled as a ‘C’ calling convention on non-Windows platforms.
+ 
+ 
+ File: gnat_ugn.info,  Node: Win32 Calling Convention,  Next: DLL Calling Convention,  Prev: Stdcall Calling Convention,  Up: Windows Calling Conventions
+ 
+ 7.4.7.4 ‘Win32’ Calling Convention
+ ..................................
+ 
+ This convention, which is GNAT-specific is fully equivalent to the
+ ‘Stdcall’ calling convention described above.
+ 
+ 
+ File: gnat_ugn.info,  Node: DLL Calling Convention,  Prev: Win32 Calling Convention,  Up: Windows Calling Conventions
+ 
+ 7.4.7.5 ‘DLL’ Calling Convention
+ ................................
+ 
+ This convention, which is GNAT-specific is fully equivalent to the
+ ‘Stdcall’ calling convention described above.
+ 
+ 
+ File: gnat_ugn.info,  Node: Introduction to Dynamic Link Libraries DLLs,  Next: Using DLLs with GNAT,  Prev: Windows Calling Conventions,  Up: Mixed-Language Programming on Windows
+ 
+ 7.4.7.6 Introduction to Dynamic Link Libraries (DLLs)
+ .....................................................
+ 
+ A Dynamically Linked Library (DLL) is a library that can be shared by
+ several applications running under Windows.  A DLL can contain any
+ number of routines and variables.
+ 
+ One advantage of DLLs is that you can change and enhance them without
+ forcing all the applications that depend on them to be relinked or
+ recompiled.  However, you should be aware than all calls to DLL routines
+ are slower since, as you will understand below, such calls are indirect.
+ 
+ To illustrate the remainder of this section, suppose that an application
+ wants to use the services of a DLL ‘API.dll’.  To use the services
+ provided by ‘API.dll’ you must statically link against the DLL or an
+ import library which contains a jump table with an entry for each
+ routine and variable exported by the DLL. In the Microsoft world this
+ import library is called ‘API.lib’.  When using GNAT this import library
+ is called either ‘libAPI.dll.a’, ‘libapi.dll.a’, ‘libAPI.a’ or
+ ‘libapi.a’ (names are case insensitive).
+ 
+ After you have linked your application with the DLL or the import
+ library and you run your application, here is what happens:
+ 
+    * Your application is loaded into memory.
+ 
+    * The DLL ‘API.dll’ is mapped into the address space of your
+      application.  This means that:
+ 
+         - The DLL will use the stack of the calling thread.
+ 
+         - The DLL will use the virtual address space of the calling
+           process.
+ 
+         - The DLL will allocate memory from the virtual address space of
+           the calling process.
+ 
+         - Handles (pointers) can be safely exchanged between routines in
+           the DLL routines and routines in the application using the
+           DLL.
+ 
+    * The entries in the jump table (from the import library
+      ‘libAPI.dll.a’ or ‘API.lib’ or automatically created when linking
+      against a DLL) which is part of your application are initialized
+      with the addresses of the routines and variables in ‘API.dll’.
+ 
+    * If present in ‘API.dll’, routines ‘DllMain’ or ‘DllMainCRTStartup’
+      are invoked.  These routines typically contain the initialization
+      code needed for the well-being of the routines and variables
+      exported by the DLL.
+ 
+ There is an additional point which is worth mentioning.  In the Windows
+ world there are two kind of DLLs: relocatable and non-relocatable DLLs.
+ Non-relocatable DLLs can only be loaded at a very specific address in
+ the target application address space.  If the addresses of two
+ non-relocatable DLLs overlap and these happen to be used by the same
+ application, a conflict will occur and the application will run
+ incorrectly.  Hence, when possible, it is always preferable to use and
+ build relocatable DLLs.  Both relocatable and non-relocatable DLLs are
+ supported by GNAT. Note that the ‘-s’ linker option (see GNU Linker
+ User’s Guide) removes the debugging symbols from the DLL but the DLL can
+ still be relocated.
+ 
+ As a side note, an interesting difference between Microsoft DLLs and
+ Unix shared libraries, is the fact that on most Unix systems all public
+ routines are exported by default in a Unix shared library, while under
+ Windows it is possible (but not required) to list exported routines in a
+ definition file (see *note The Definition File: 1dd.).
+ 
+ 
+ File: gnat_ugn.info,  Node: Using DLLs with GNAT,  Next: Building DLLs with GNAT Project files,  Prev: Introduction to Dynamic Link Libraries DLLs,  Up: Mixed-Language Programming on Windows
+ 
+ 7.4.7.7 Using DLLs with GNAT
+ ............................
+ 
+ To use the services of a DLL, say ‘API.dll’, in your Ada application you
+ must have:
+ 
+    * The Ada spec for the routines and/or variables you want to access
+      in ‘API.dll’.  If not available this Ada spec must be built from
+      the C/C++ header files provided with the DLL.
+ 
+    * The import library (‘libAPI.dll.a’ or ‘API.lib’).  As previously
+      mentioned an import library is a statically linked library
+      containing the import table which will be filled at load time to
+      point to the actual ‘API.dll’ routines.  Sometimes you don’t have
+      an import library for the DLL you want to use.  The following
+      sections will explain how to build one.  Note that this is
+      optional.
+ 
+    * The actual DLL, ‘API.dll’.
+ 
+ Once you have all the above, to compile an Ada application that uses the
+ services of ‘API.dll’ and whose main subprogram is ‘My_Ada_App’, you
+ simply issue the command
+ 
+           $ gnatmake my_ada_app -largs -lAPI
+ 
+ The argument ‘-largs -lAPI’ at the end of the ‘gnatmake’ command tells
+ the GNAT linker to look for an import library.  The linker will look for
+ a library name in this specific order:
+ 
+    * ‘libAPI.dll.a’
+ 
+    * ‘API.dll.a’
+ 
+    * ‘libAPI.a’
+ 
+    * ‘API.lib’
+ 
+    * ‘libAPI.dll’
+ 
+    * ‘API.dll’
+ 
+ The first three are the GNU style import libraries.  The third is the
+ Microsoft style import libraries.  The last two are the actual DLL
+ names.
+ 
+ Note that if the Ada package spec for ‘API.dll’ contains the following
+ pragma
+ 
+           pragma Linker_Options ("-lAPI");
+ 
+ you do not have to add ‘-largs -lAPI’ at the end of the ‘gnatmake’
+ command.
+ 
+ If any one of the items above is missing you will have to create it
+ yourself.  The following sections explain how to do so using as an
+ example a fictitious DLL called ‘API.dll’.
+ 
+ * Menu:
+ 
+ * Creating an Ada Spec for the DLL Services::
+ * Creating an Import Library::
+ 
+ 
+ File: gnat_ugn.info,  Node: Creating an Ada Spec for the DLL Services,  Next: Creating an Import Library,  Up: Using DLLs with GNAT
+ 
+ 7.4.7.8 Creating an Ada Spec for the DLL Services
+ .................................................
+ 
+ A DLL typically comes with a C/C++ header file which provides the
+ definitions of the routines and variables exported by the DLL. The Ada
+ equivalent of this header file is a package spec that contains
+ definitions for the imported entities.  If the DLL you intend to use
+ does not come with an Ada spec you have to generate one such spec
+ yourself.  For example if the header file of ‘API.dll’ is a file ‘api.h’
+ containing the following two definitions:
+ 
+           int some_var;
+           int get (char *);
+ 
+ then the equivalent Ada spec could be:
+ 
+           with Interfaces.C.Strings;
+           package API is
+              use Interfaces;
+ 
+              Some_Var : C.int;
+              function Get (Str : C.Strings.Chars_Ptr) return C.int;
+ 
+           private
+              pragma Import (C, Get);
+              pragma Import (DLL, Some_Var);
+           end API;
+ 
+ 
+ File: gnat_ugn.info,  Node: Creating an Import Library,  Prev: Creating an Ada Spec for the DLL Services,  Up: Using DLLs with GNAT
+ 
+ 7.4.7.9 Creating an Import Library
+ ..................................
+ 
+ If a Microsoft-style import library ‘API.lib’ or a GNAT-style import
+ library ‘libAPI.dll.a’ or ‘libAPI.a’ is available with ‘API.dll’ you can
+ skip this section.  You can also skip this section if ‘API.dll’ or
+ ‘libAPI.dll’ is built with GNU tools as in this case it is possible to
+ link directly against the DLL. Otherwise read on.
+ 
+ The Definition File
+ ...................
+ 
+ As previously mentioned, and unlike Unix systems, the list of symbols
+ that are exported from a DLL must be provided explicitly in Windows.
+ The main goal of a definition file is precisely that: list the symbols
+ exported by a DLL. A definition file (usually a file with a ‘.def’
+ suffix) has the following structure:
+ 
+           [LIBRARY ``name``]
+           [DESCRIPTION ``string``]
+           EXPORTS
+              ``symbol1``
+              ``symbol2``
+              ...
+ 
+ ‘LIBRARY name’
+ 
+      This section, which is optional, gives the name of the DLL.
+ 
+ ‘DESCRIPTION string’
+ 
+      This section, which is optional, gives a description string that
+      will be embedded in the import library.
+ 
+ ‘EXPORTS’
+ 
+      This section gives the list of exported symbols (procedures,
+      functions or variables).  For instance in the case of ‘API.dll’ the
+      ‘EXPORTS’ section of ‘API.def’ looks like:
+ 
+           EXPORTS
+              some_var
+              get
+ 
+ Note that you must specify the correct suffix (‘@NN’) (see *note Windows
+ Calling Conventions: 1d2.) for a Stdcall calling convention function in
+ the exported symbols list.
+ 
+ There can actually be other sections in a definition file, but these
+ sections are not relevant to the discussion at hand.
+ 
+ Creating a Definition File Automatically
+ ........................................
+ 
+ You can automatically create the definition file ‘API.def’ (see *note
+ The Definition File: 1dd.) from a DLL. For that use the ‘dlltool’
+ program as follows:
+ 
+           $ dlltool API.dll -z API.def --export-all-symbols
+ 
+      Note that if some routines in the DLL have the ‘Stdcall’ convention
+      (*note Windows Calling Conventions: 1d2.) with stripped ‘@NN’
+      suffix then you’ll have to edit ‘api.def’ to add it, and specify
+      ‘-k’ to ‘gnatdll’ when creating the import library.
+ 
+      Here are some hints to find the right ‘@NN’ suffix.
+ 
+         - If you have the Microsoft import library (.lib), it is
+           possible to get the right symbols by using Microsoft ‘dumpbin’
+           tool (see the corresponding Microsoft documentation for
+           further details).
+ 
+                $ dumpbin /exports api.lib
+ 
+         - If you have a message about a missing symbol at link time the
+           compiler tells you what symbol is expected.  You just have to
+           go back to the definition file and add the right suffix.
+ 
+ GNAT-Style Import Library
+ .........................
+ 
+ To create a static import library from ‘API.dll’ with the GNAT tools you
+ should create the .def file, then use ‘gnatdll’ tool (see *note Using
+ gnatdll: 1e5.) as follows:
+ 
+           $ gnatdll -e API.def -d API.dll
+ 
+      ‘gnatdll’ takes as input a definition file ‘API.def’ and the name
+      of the DLL containing the services listed in the definition file
+      ‘API.dll’.  The name of the static import library generated is
+      computed from the name of the definition file as follows: if the
+      definition file name is ‘xyz.def’, the import library name will be
+      ‘libxyz.a’.  Note that in the previous example option ‘-e’ could
+      have been removed because the name of the definition file (before
+      the ‘.def’ suffix) is the same as the name of the DLL (*note Using
+      gnatdll: 1e5. for more information about ‘gnatdll’).
+ 
+ Microsoft-Style Import Library
+ ..............................
+ 
+ A Microsoft import library is needed only if you plan to make an Ada DLL
+ available to applications developed with Microsoft tools (*note
+ Mixed-Language Programming on Windows: 1ce.).
+ 
+ To create a Microsoft-style import library for ‘API.dll’ you should
+ create the .def file, then build the actual import library using
+ Microsoft’s ‘lib’ utility:
+ 
+           $ lib -machine:IX86 -def:API.def -out:API.lib
+ 
+      If you use the above command the definition file ‘API.def’ must
+      contain a line giving the name of the DLL:
+ 
+           LIBRARY      "API"
+ 
+      See the Microsoft documentation for further details about the usage
+      of ‘lib’.
+ 
+ 
+ File: gnat_ugn.info,  Node: Building DLLs with GNAT Project files,  Next: Building DLLs with GNAT,  Prev: Using DLLs with GNAT,  Up: Mixed-Language Programming on Windows
+ 
+ 7.4.7.10 Building DLLs with GNAT Project files
+ ..............................................
+ 
+ There is nothing specific to Windows in the build process.  See the
+ ‘Library Projects’ section in the ‘GNAT Project Manager’ chapter of the
+ ‘GPRbuild User’s Guide’.
+ 
+ Due to a system limitation, it is not possible under Windows to create
+ threads when inside the ‘DllMain’ routine which is used for
+ auto-initialization of shared libraries, so it is not possible to have
+ library level tasks in SALs.
+ 
+ 
+ File: gnat_ugn.info,  Node: Building DLLs with GNAT,  Next: Building DLLs with gnatdll,  Prev: Building DLLs with GNAT Project files,  Up: Mixed-Language Programming on Windows
+ 
+ 7.4.7.11 Building DLLs with GNAT
+ ................................
+ 
+ This section explain how to build DLLs using the GNAT built-in DLL
+ support.  With the following procedure it is straight forward to build
+ and use DLLs with GNAT.
+ 
+    * Building object files.  The first step is to build all objects
+      files that are to be included into the DLL. This is done by using
+      the standard ‘gnatmake’ tool.
+ 
+    * Building the DLL. To build the DLL you must use the ‘gcc’ ‘-shared’
+      and ‘-shared-libgcc’ options.  It is quite simple to use this
+      method:
+ 
+           $ gcc -shared -shared-libgcc -o api.dll obj1.o obj2.o ...
+ 
+      It is important to note that in this case all symbols found in the
+      object files are automatically exported.  It is possible to
+      restrict the set of symbols to export by passing to ‘gcc’ a
+      definition file (see *note The Definition File: 1dd.).  For
+      example:
+ 
+           $ gcc -shared -shared-libgcc -o api.dll api.def obj1.o obj2.o ...
+ 
+      If you use a definition file you must export the elaboration
+      procedures for every package that required one.  Elaboration
+      procedures are named using the package name followed by “_E”.
+ 
+    * Preparing DLL to be used.  For the DLL to be used by client
+      programs the bodies must be hidden from it and the .ali set with
+      read-only attribute.  This is very important otherwise GNAT will
+      recompile all packages and will not actually use the code in the
+      DLL. For example:
+ 
+           $ mkdir apilib
+           $ copy *.ads *.ali api.dll apilib
+           $ attrib +R apilib\\*.ali
+ 
+ At this point it is possible to use the DLL by directly linking against
+ it.  Note that you must use the GNAT shared runtime when using GNAT
+ shared libraries.  This is achieved by using the ‘-shared’ binder
+ option.
+ 
+           $ gnatmake main -Iapilib -bargs -shared -largs -Lapilib -lAPI
+ 
+ 
+ File: gnat_ugn.info,  Node: Building DLLs with gnatdll,  Next: Ada DLLs and Finalization,  Prev: Building DLLs with GNAT,  Up: Mixed-Language Programming on Windows
+ 
+ 7.4.7.12 Building DLLs with gnatdll
+ ...................................
+ 
+ Note that it is preferred to use GNAT Project files (*note Building DLLs
+ with GNAT Project files: 1d0.) or the built-in GNAT DLL support (*note
+ Building DLLs with GNAT: 1e8.) or to build DLLs.
+ 
+ This section explains how to build DLLs containing Ada code using
+ ‘gnatdll’.  These DLLs will be referred to as Ada DLLs in the remainder
+ of this section.
+ 
+ The steps required to build an Ada DLL that is to be used by Ada as well
+ as non-Ada applications are as follows:
+ 
+    * You need to mark each Ada entity exported by the DLL with a ‘C’ or
+      ‘Stdcall’ calling convention to avoid any Ada name mangling for the
+      entities exported by the DLL (see *note Exporting Ada Entities:
+      1ec.).  You can skip this step if you plan to use the Ada DLL only
+      from Ada applications.
+ 
+    * Your Ada code must export an initialization routine which calls the
+      routine ‘adainit’ generated by ‘gnatbind’ to perform the
+      elaboration of the Ada code in the DLL (*note Ada DLLs and
+      Elaboration: 1ed.).  The initialization routine exported by the Ada
+      DLL must be invoked by the clients of the DLL to initialize the
+      DLL.
+ 
+    * When useful, the DLL should also export a finalization routine
+      which calls routine ‘adafinal’ generated by ‘gnatbind’ to perform
+      the finalization of the Ada code in the DLL (*note Ada DLLs and
+      Finalization: 1ee.).  The finalization routine exported by the Ada
+      DLL must be invoked by the clients of the DLL when the DLL services
+      are no further needed.
+ 
+    * You must provide a spec for the services exported by the Ada DLL in
+      each of the programming languages to which you plan to make the DLL
+      available.
+ 
+    * You must provide a definition file listing the exported entities
+      (*note The Definition File: 1dd.).
+ 
+    * Finally you must use ‘gnatdll’ to produce the DLL and the import
+      library (*note Using gnatdll: 1e5.).
+ 
+ Note that a relocatable DLL stripped using the ‘strip’ binutils tool
+ will not be relocatable anymore.  To build a DLL without debug
+ information pass ‘-largs -s’ to ‘gnatdll’.  This restriction does not
+ apply to a DLL built using a Library Project.  See the ‘Library
+ Projects’ section in the ‘GNAT Project Manager’ chapter of the ‘GPRbuild
+ User’s Guide’.
+ 
+ * Menu:
+ 
+ * Limitations When Using Ada DLLs from Ada::
+ * Exporting Ada Entities::
+ * Ada DLLs and Elaboration::
+ 
+ 
+ File: gnat_ugn.info,  Node: Limitations When Using Ada DLLs from Ada,  Next: Exporting Ada Entities,  Up: Building DLLs with gnatdll
+ 
+ 7.4.7.13 Limitations When Using Ada DLLs from Ada
+ .................................................
+ 
+ When using Ada DLLs from Ada applications there is a limitation users
+ should be aware of.  Because on Windows the GNAT run-time is not in a
+ DLL of its own, each Ada DLL includes a part of the GNAT run-time.
+ Specifically, each Ada DLL includes the services of the GNAT run-time
+ that are necessary to the Ada code inside the DLL. As a result, when an
+ Ada program uses an Ada DLL there are two independent GNAT run-times:
+ one in the Ada DLL and one in the main program.
+ 
+ It is therefore not possible to exchange GNAT run-time objects between
+ the Ada DLL and the main Ada program.  Example of GNAT run-time objects
+ are file handles (e.g., ‘Text_IO.File_Type’), tasks types, protected
+ objects types, etc.
+ 
+ It is completely safe to exchange plain elementary, array or record
+ types, Windows object handles, etc.
+ 
+ 
+ File: gnat_ugn.info,  Node: Exporting Ada Entities,  Next: Ada DLLs and Elaboration,  Prev: Limitations When Using Ada DLLs from Ada,  Up: Building DLLs with gnatdll
+ 
+ 7.4.7.14 Exporting Ada Entities
+ ...............................
+ 
+ Building a DLL is a way to encapsulate a set of services usable from any
+ application.  As a result, the Ada entities exported by a DLL should be
+ exported with the ‘C’ or ‘Stdcall’ calling conventions to avoid any Ada
+ name mangling.  As an example here is an Ada package ‘API’, spec and
+ body, exporting two procedures, a function, and a variable:
+ 
+           with Interfaces.C; use Interfaces;
+           package API is
+              Count : C.int := 0;
+              function Factorial (Val : C.int) return C.int;
+ 
+              procedure Initialize_API;
+              procedure Finalize_API;
+              --  Initialization & Finalization routines. More in the next section.
+           private
+              pragma Export (C, Initialize_API);
+              pragma Export (C, Finalize_API);
+              pragma Export (C, Count);
+              pragma Export (C, Factorial);
+           end API;
+ 
+           package body API is
+              function Factorial (Val : C.int) return C.int is
+                 Fact : C.int := 1;
+              begin
+                 Count := Count + 1;
+                 for K in 1 .. Val loop
+                    Fact := Fact * K;
+                 end loop;
+                 return Fact;
+              end Factorial;
+ 
+              procedure Initialize_API is
+                 procedure Adainit;
+                 pragma Import (C, Adainit);
+              begin
+                 Adainit;
+              end Initialize_API;
+ 
+              procedure Finalize_API is
+                 procedure Adafinal;
+                 pragma Import (C, Adafinal);
+              begin
+                 Adafinal;
+              end Finalize_API;
+           end API;
+ 
+ If the Ada DLL you are building will only be used by Ada applications
+ you do not have to export Ada entities with a ‘C’ or ‘Stdcall’
+ convention.  As an example, the previous package could be written as
+ follows:
+ 
+           package API is
+              Count : Integer := 0;
+              function Factorial (Val : Integer) return Integer;
+ 
+              procedure Initialize_API;
+              procedure Finalize_API;
+              --  Initialization and Finalization routines.
+           end API;
+ 
+           package body API is
+              function Factorial (Val : Integer) return Integer is
+                 Fact : Integer := 1;
+              begin
+                 Count := Count + 1;
+                 for K in 1 .. Val loop
+                    Fact := Fact * K;
+                 end loop;
+                 return Fact;
+              end Factorial;
+ 
+              ...
+              --  The remainder of this package body is unchanged.
+           end API;
+ 
+ Note that if you do not export the Ada entities with a ‘C’ or ‘Stdcall’
+ convention you will have to provide the mangled Ada names in the
+ definition file of the Ada DLL (*note Creating the Definition File:
+ 1f1.).
+ 
+ 
+ File: gnat_ugn.info,  Node: Ada DLLs and Elaboration,  Prev: Exporting Ada Entities,  Up: Building DLLs with gnatdll
+ 
+ 7.4.7.15 Ada DLLs and Elaboration
+ .................................
+ 
+ The DLL that you are building contains your Ada code as well as all the
+ routines in the Ada library that are needed by it.  The first thing a
+ user of your DLL must do is elaborate the Ada code (*note Elaboration
+ Order Handling in GNAT: f.).
+ 
+ To achieve this you must export an initialization routine
+ (‘Initialize_API’ in the previous example), which must be invoked before
+ using any of the DLL services.  This elaboration routine must call the
+ Ada elaboration routine ‘adainit’ generated by the GNAT binder (*note
+ Binding with Non-Ada Main Programs: a0.).  See the body of
+ ‘Initialize_Api’ for an example.  Note that the GNAT binder is
+ automatically invoked during the DLL build process by the ‘gnatdll’ tool
+ (*note Using gnatdll: 1e5.).
+ 
+ When a DLL is loaded, Windows systematically invokes a routine called
+ ‘DllMain’.  It would therefore be possible to call ‘adainit’ directly
+ from ‘DllMain’ without having to provide an explicit initialization
+ routine.  Unfortunately, it is not possible to call ‘adainit’ from the
+ ‘DllMain’ if your program has library level tasks because access to the
+ ‘DllMain’ entry point is serialized by the system (that is, only a
+ single thread can execute ‘through’ it at a time), which means that the
+ GNAT run-time will deadlock waiting for the newly created task to
+ complete its initialization.
+ 
+ 
+ File: gnat_ugn.info,  Node: Ada DLLs and Finalization,  Next: Creating a Spec for Ada DLLs,  Prev: Building DLLs with gnatdll,  Up: Mixed-Language Programming on Windows
+ 
+ 7.4.7.16 Ada DLLs and Finalization
+ ..................................
+ 
+ When the services of an Ada DLL are no longer needed, the client code
+ should invoke the DLL finalization routine, if available.  The DLL
+ finalization routine is in charge of releasing all resources acquired by
+ the DLL. In the case of the Ada code contained in the DLL, this is
+ achieved by calling routine ‘adafinal’ generated by the GNAT binder
+ (*note Binding with Non-Ada Main Programs: a0.).  See the body of
+ ‘Finalize_Api’ for an example.  As already pointed out the GNAT binder
+ is automatically invoked during the DLL build process by the ‘gnatdll’
+ tool (*note Using gnatdll: 1e5.).
+ 
+ 
+ File: gnat_ugn.info,  Node: Creating a Spec for Ada DLLs,  Next: GNAT and Windows Resources,  Prev: Ada DLLs and Finalization,  Up: Mixed-Language Programming on Windows
+ 
+ 7.4.7.17 Creating a Spec for Ada DLLs
+ .....................................
+ 
+ To use the services exported by the Ada DLL from another programming
+ language (e.g., C), you have to translate the specs of the exported Ada
+ entities in that language.  For instance in the case of ‘API.dll’, the
+ corresponding C header file could look like:
+ 
+           extern int *_imp__count;
+           #define count (*_imp__count)
+           int factorial (int);
+ 
+ It is important to understand that when building an Ada DLL to be used
+ by other Ada applications, you need two different specs for the packages
+ contained in the DLL: one for building the DLL and the other for using
+ the DLL. This is because the ‘DLL’ calling convention is needed to use a
+ variable defined in a DLL, but when building the DLL, the variable must
+ have either the ‘Ada’ or ‘C’ calling convention.  As an example consider
+ a DLL comprising the following package ‘API’:
+ 
+           package API is
+              Count : Integer := 0;
+              ...
+              --  Remainder of the package omitted.
+           end API;
+ 
+ After producing a DLL containing package ‘API’, the spec that must be
+ used to import ‘API.Count’ from Ada code outside of the DLL is:
+ 
+           package API is
+              Count : Integer;
+              pragma Import (DLL, Count);
+           end API;
+ 
+ * Menu:
+ 
+ * Creating the Definition File::
+ * Using gnatdll::
+ 
+ 
+ File: gnat_ugn.info,  Node: Creating the Definition File,  Next: Using gnatdll,  Up: Creating a Spec for Ada DLLs
+ 
+ 7.4.7.18 Creating the Definition File
+ .....................................
+ 
+ The definition file is the last file needed to build the DLL. It lists
+ the exported symbols.  As an example, the definition file for a DLL
+ containing only package ‘API’ (where all the entities are exported with
+ a ‘C’ calling convention) is:
+ 
+           EXPORTS
+               count
+               factorial
+               finalize_api
+               initialize_api
+ 
+ If the ‘C’ calling convention is missing from package ‘API’, then the
+ definition file contains the mangled Ada names of the above entities,
+ which in this case are:
+ 
+           EXPORTS
+               api__count
+               api__factorial
+               api__finalize_api
+               api__initialize_api
+ 
+ 
+ File: gnat_ugn.info,  Node: Using gnatdll,  Prev: Creating the Definition File,  Up: Creating a Spec for Ada DLLs
+ 
+ 7.4.7.19 Using ‘gnatdll’
+ ........................
+ 
+ ‘gnatdll’ is a tool to automate the DLL build process once all the Ada
+ and non-Ada sources that make up your DLL have been compiled.  ‘gnatdll’
+ is actually in charge of two distinct tasks: build the static import
+ library for the DLL and the actual DLL. The form of the ‘gnatdll’
+ command is
+ 
+           $ gnatdll [ switches ] list-of-files [ -largs opts ]
+ 
+ where ‘list-of-files’ is a list of ALI and object files.  The object
+ file list must be the exact list of objects corresponding to the non-Ada
+ sources whose services are to be included in the DLL. The ALI file list
+ must be the exact list of ALI files for the corresponding Ada sources
+ whose services are to be included in the DLL. If ‘list-of-files’ is
+ missing, only the static import library is generated.
+ 
+ You may specify any of the following switches to ‘gnatdll’:
+ 
+ ‘-a[`address']’
+ 
+      Build a non-relocatable DLL at ‘address’.  If ‘address’ is not
+      specified the default address ‘0x11000000’ will be used.  By
+      default, when this switch is missing, ‘gnatdll’ builds relocatable
+      DLL. We advise the reader to build relocatable DLL.
+ 
+ ‘-b `address'’
+ 
+      Set the relocatable DLL base address.  By default the address is
+      ‘0x11000000’.
+ 
+ ‘-bargs `opts'’
+ 
+      Binder options.  Pass ‘opts’ to the binder.
+ 
+ ‘-d `dllfile'’
+ 
+      ‘dllfile’ is the name of the DLL. This switch must be present for
+      ‘gnatdll’ to do anything.  The name of the generated import library
+      is obtained algorithmically from ‘dllfile’ as shown in the
+      following example: if ‘dllfile’ is ‘xyz.dll’, the import library
+      name is ‘libxyz.dll.a’.  The name of the definition file to use (if
+      not specified by option ‘-e’) is obtained algorithmically from
+      ‘dllfile’ as shown in the following example: if ‘dllfile’ is
+      ‘xyz.dll’, the definition file used is ‘xyz.def’.
+ 
+ ‘-e `deffile'’
+ 
+      ‘deffile’ is the name of the definition file.
+ 
+ ‘-g’
+ 
+      Generate debugging information.  This information is stored in the
+      object file and copied from there to the final DLL file by the
+      linker, where it can be read by the debugger.  You must use the
+      ‘-g’ switch if you plan on using the debugger or the symbolic stack
+      traceback.
+ 
+ ‘-h’
+ 
+      Help mode.  Displays ‘gnatdll’ switch usage information.
+ 
+ ‘-I`dir'’
+ 
+      Direct ‘gnatdll’ to search the ‘dir’ directory for source and
+      object files needed to build the DLL. (*note Search Paths and the
+      Run-Time Library (RTL): 73.).
+ 
+ ‘-k’
+ 
+      Removes the ‘@NN’ suffix from the import library’s exported names,
+      but keeps them for the link names.  You must specify this option if
+      you want to use a ‘Stdcall’ function in a DLL for which the ‘@NN’
+      suffix has been removed.  This is the case for most of the Windows
+      NT DLL for example.  This option has no effect when ‘-n’ option is
+      specified.
+ 
+ ‘-l `file'’
+ 
+      The list of ALI and object files used to build the DLL are listed
+      in ‘file’, instead of being given in the command line.  Each line
+      in ‘file’ contains the name of an ALI or object file.
+ 
+ ‘-n’
+ 
+      No Import.  Do not create the import library.
+ 
+ ‘-q’
+ 
+      Quiet mode.  Do not display unnecessary messages.
+ 
+ ‘-v’
+ 
+      Verbose mode.  Display extra information.
+ 
+ ‘-largs `opts'’
+ 
+      Linker options.  Pass ‘opts’ to the linker.
+ 
+ ‘gnatdll’ Example
+ .................
+ 
+ As an example the command to build a relocatable DLL from ‘api.adb’ once
+ ‘api.adb’ has been compiled and ‘api.def’ created is
+ 
+           $ gnatdll -d api.dll api.ali
+ 
+ The above command creates two files: ‘libapi.dll.a’ (the import library)
+ and ‘api.dll’ (the actual DLL). If you want to create only the DLL, just
+ type:
+ 
+           $ gnatdll -d api.dll -n api.ali
+ 
+ Alternatively if you want to create just the import library, type:
+ 
+           $ gnatdll -d api.dll
+ 
+ ‘gnatdll’ behind the Scenes
+ ...........................
+ 
+ This section details the steps involved in creating a DLL. ‘gnatdll’
+ does these steps for you.  Unless you are interested in understanding
+ what goes on behind the scenes, you should skip this section.
+ 
+ We use the previous example of a DLL containing the Ada package ‘API’,
+ to illustrate the steps necessary to build a DLL. The starting point is
+ a set of objects that will make up the DLL and the corresponding ALI
+ files.  In the case of this example this means that ‘api.o’ and
+ ‘api.ali’ are available.  To build a relocatable DLL, ‘gnatdll’ does the
+ following:
+ 
+    * ‘gnatdll’ builds the base file (‘api.base’).  A base file gives the
+      information necessary to generate relocation information for the
+      DLL.
+ 
+           $ gnatbind -n api
+           $ gnatlink api -o api.jnk -mdll -Wl,--base-file,api.base
+ 
+      In addition to the base file, the ‘gnatlink’ command generates an
+      output file ‘api.jnk’ which can be discarded.  The ‘-mdll’ switch
+      asks ‘gnatlink’ to generate the routines ‘DllMain’ and
+      ‘DllMainCRTStartup’ that are called by the Windows loader when the
+      DLL is loaded into memory.
+ 
+    * ‘gnatdll’ uses ‘dlltool’ (see *note Using dlltool: 1f8.) to build
+      the export table (‘api.exp’).  The export table contains the
+      relocation information in a form which can be used during the final
+      link to ensure that the Windows loader is able to place the DLL
+      anywhere in memory.
+ 
+           $ dlltool --dllname api.dll --def api.def --base-file api.base \\
+                     --output-exp api.exp
+ 
+    * ‘gnatdll’ builds the base file using the new export table.  Note
+      that ‘gnatbind’ must be called once again since the binder
+      generated file has been deleted during the previous call to
+      ‘gnatlink’.
+ 
+           $ gnatbind -n api
+           $ gnatlink api -o api.jnk api.exp -mdll
+                 -Wl,--base-file,api.base
+ 
+    * ‘gnatdll’ builds the new export table using the new base file and
+      generates the DLL import library ‘libAPI.dll.a’.
+ 
+           $ dlltool --dllname api.dll --def api.def --base-file api.base \\
+                     --output-exp api.exp --output-lib libAPI.a
+ 
+    * Finally ‘gnatdll’ builds the relocatable DLL using the final export
+      table.
+ 
+           $ gnatbind -n api
+           $ gnatlink api api.exp -o api.dll -mdll
+ 
+ Using ‘dlltool’
+ ...............
+ 
+ ‘dlltool’ is the low-level tool used by ‘gnatdll’ to build DLLs and
+ static import libraries.  This section summarizes the most common
+ ‘dlltool’ switches.  The form of the ‘dlltool’ command is
+ 
+           $ dlltool [`switches`]
+ 
+ ‘dlltool’ switches include:
+ 
+ ‘--base-file `basefile'’
+ 
+      Read the base file ‘basefile’ generated by the linker.  This switch
+      is used to create a relocatable DLL.
+ 
+ ‘--def `deffile'’
+ 
+      Read the definition file.
+ 
+ ‘--dllname `name'’
+ 
+      Gives the name of the DLL. This switch is used to embed the name of
+      the DLL in the static import library generated by ‘dlltool’ with
+      switch ‘--output-lib’.
+ 
+ ‘-k’
+ 
+      Kill ‘@NN’ from exported names (*note Windows Calling Conventions:
+      1d2. for a discussion about ‘Stdcall’-style symbols).
+ 
+ ‘--help’
+ 
+      Prints the ‘dlltool’ switches with a concise description.
+ 
+ ‘--output-exp `exportfile'’
+ 
+      Generate an export file ‘exportfile’.  The export file contains the
+      export table (list of symbols in the DLL) and is used to create the
+      DLL.
+ 
+ ‘--output-lib `libfile'’
+ 
+      Generate a static import library ‘libfile’.
+ 
+ ‘-v’
+ 
+      Verbose mode.
+ 
+ ‘--as `assembler-name'’
+ 
+      Use ‘assembler-name’ as the assembler.  The default is ‘as’.
+ 
+ 
+ File: gnat_ugn.info,  Node: GNAT and Windows Resources,  Next: Using GNAT DLLs from Microsoft Visual Studio Applications,  Prev: Creating a Spec for Ada DLLs,  Up: Mixed-Language Programming on Windows
+ 
+ 7.4.7.20 GNAT and Windows Resources
+ ...................................
+ 
+ Resources are an easy way to add Windows specific objects to your
+ application.  The objects that can be added as resources include:
+ 
+    * menus
+ 
+    * accelerators
+ 
+    * dialog boxes
+ 
+    * string tables
+ 
+    * bitmaps
+ 
+    * cursors
+ 
+    * icons
+ 
+    * fonts
+ 
+    * version information
+ 
+ For example, a version information resource can be defined as follow and
+ embedded into an executable or DLL:
+ 
+ A version information resource can be used to embed information into an
+ executable or a DLL. These information can be viewed using the file
+ properties from the Windows Explorer.  Here is an example of a version
+ information resource:
+ 
+           1 VERSIONINFO
+           FILEVERSION     1,0,0,0
+           PRODUCTVERSION  1,0,0,0
+           BEGIN
+             BLOCK "StringFileInfo"
+             BEGIN
+               BLOCK "080904E4"
+               BEGIN
+                 VALUE "CompanyName", "My Company Name"
+                 VALUE "FileDescription", "My application"
+                 VALUE "FileVersion", "1.0"
+                 VALUE "InternalName", "my_app"
+                 VALUE "LegalCopyright", "My Name"
+                 VALUE "OriginalFilename", "my_app.exe"
+                 VALUE "ProductName", "My App"
+                 VALUE "ProductVersion", "1.0"
+               END
+             END
+ 
+             BLOCK "VarFileInfo"
+             BEGIN
+               VALUE "Translation", 0x809, 1252
+             END
+           END
+ 
+ The value ‘0809’ (langID) is for the U.K English language and ‘04E4’
+ (charsetID), which is equal to ‘1252’ decimal, for multilingual.
+ 
+ This section explains how to build, compile and use resources.  Note
+ that this section does not cover all resource objects, for a complete
+ description see the corresponding Microsoft documentation.
+ 
+ * Menu:
+ 
+ * Building Resources::
+ * Compiling Resources::
+ * Using Resources::
+ 
+ 
+ File: gnat_ugn.info,  Node: Building Resources,  Next: Compiling Resources,  Up: GNAT and Windows Resources
+ 
+ 7.4.7.21 Building Resources
+ ...........................
+ 
+ A resource file is an ASCII file.  By convention resource files have an
+ ‘.rc’ extension.  The easiest way to build a resource file is to use
+ Microsoft tools such as ‘imagedit.exe’ to build bitmaps, icons and
+ cursors and ‘dlgedit.exe’ to build dialogs.  It is always possible to
+ build an ‘.rc’ file yourself by writing a resource script.
+ 
+ It is not our objective to explain how to write a resource file.  A
+ complete description of the resource script language can be found in the
+ Microsoft documentation.
+ 
+ 
+ File: gnat_ugn.info,  Node: Compiling Resources,  Next: Using Resources,  Prev: Building Resources,  Up: GNAT and Windows Resources
+ 
+ 7.4.7.22 Compiling Resources
+ ............................
+ 
+ This section describes how to build a GNAT-compatible (COFF) object file
+ containing the resources.  This is done using the Resource Compiler
+ ‘windres’ as follows:
+ 
+           $ windres -i myres.rc -o myres.o
+ 
+ By default ‘windres’ will run ‘gcc’ to preprocess the ‘.rc’ file.  You
+ can specify an alternate preprocessor (usually named ‘cpp.exe’) using
+ the ‘windres’ ‘--preprocessor’ parameter.  A list of all possible
+ options may be obtained by entering the command ‘windres’ ‘--help’.
+ 
+ It is also possible to use the Microsoft resource compiler ‘rc.exe’ to
+ produce a ‘.res’ file (binary resource file).  See the corresponding
+ Microsoft documentation for further details.  In this case you need to
+ use ‘windres’ to translate the ‘.res’ file to a GNAT-compatible object
+ file as follows:
+ 
+           $ windres -i myres.res -o myres.o
+ 
+ 
+ File: gnat_ugn.info,  Node: Using Resources,  Prev: Compiling Resources,  Up: GNAT and Windows Resources
+ 
+ 7.4.7.23 Using Resources
+ ........................
+ 
+ To include the resource file in your program just add the
+ GNAT-compatible object file for the resource(s) to the linker arguments.
+ With ‘gnatmake’ this is done by using the ‘-largs’ option:
+ 
+           $ gnatmake myprog -largs myres.o
+ 
+ 
+ File: gnat_ugn.info,  Node: Using GNAT DLLs from Microsoft Visual Studio Applications,  Next: Debugging a DLL,  Prev: GNAT and Windows Resources,  Up: Mixed-Language Programming on Windows
+ 
+ 7.4.7.24 Using GNAT DLLs from Microsoft Visual Studio Applications
+ ..................................................................
+ 
+ This section describes a common case of mixed GNAT/Microsoft Visual
+ Studio application development, where the main program is developed
+ using MSVS, and is linked with a DLL developed using GNAT. Such a mixed
+ application should be developed following the general guidelines
+ outlined above; below is the cookbook-style sequence of steps to follow:
+ 
+   1. First develop and build the GNAT shared library using a library
+      project (let’s assume the project is ‘mylib.gpr’, producing the
+      library ‘libmylib.dll’):
+ 
+           $ gprbuild -p mylib.gpr
+ 
+   2. Produce a .def file for the symbols you need to interface with,
+      either by hand or automatically with possibly some manual
+      adjustments (see *note Creating Definition File Automatically:
+      1e3.):
+ 
+           $ dlltool libmylib.dll -z libmylib.def --export-all-symbols
+ 
+   3. Make sure that MSVS command-line tools are accessible on the path.
+ 
+   4. Create the Microsoft-style import library (see *note MSVS-Style
+      Import Library: 1e6.):
+ 
+           $ lib -machine:IX86 -def:libmylib.def -out:libmylib.lib
+ 
+ If you are using a 64-bit toolchain, the above becomes…
+ 
+           $ lib -machine:X64 -def:libmylib.def -out:libmylib.lib
+ 
+   5. Build the C main
+ 
+           $ cl /O2 /MD main.c libmylib.lib
+ 
+   6. Before running the executable, make sure you have set the PATH to
+      the DLL, or copy the DLL into into the directory containing the
+      .exe.
+ 
+ 
+ File: gnat_ugn.info,  Node: Debugging a DLL,  Next: Setting Stack Size from gnatlink,  Prev: Using GNAT DLLs from Microsoft Visual Studio Applications,  Up: Mixed-Language Programming on Windows
+ 
+ 7.4.7.25 Debugging a DLL
+ ........................
+ 
+ Debugging a DLL is similar to debugging a standard program.  But we have
+ to deal with two different executable parts: the DLL and the program
+ that uses it.  We have the following four possibilities:
+ 
+    * The program and the DLL are built with GCC/GNAT.
+ 
+    * The program is built with foreign tools and the DLL is built with
+      GCC/GNAT.
+ 
+    * The program is built with GCC/GNAT and the DLL is built with
+      foreign tools.
+ 
+ In this section we address only cases one and two above.  There is no
+ point in trying to debug a DLL with GNU/GDB, if there is no
+ GDB-compatible debugging information in it.  To do so you must use a
+ debugger compatible with the tools suite used to build the DLL.
+ 
+ * Menu:
+ 
+ * Program and DLL Both Built with GCC/GNAT::
+ * Program Built with Foreign Tools and DLL Built with GCC/GNAT::
+ 
+ 
+ File: gnat_ugn.info,  Node: Program and DLL Both Built with GCC/GNAT,  Next: Program Built with Foreign Tools and DLL Built with GCC/GNAT,  Up: Debugging a DLL
+ 
+ 7.4.7.26 Program and DLL Both Built with GCC/GNAT
+ .................................................
+ 
+ This is the simplest case.  Both the DLL and the program have ‘GDB’
+ compatible debugging information.  It is then possible to break anywhere
+ in the process.  Let’s suppose here that the main procedure is named
+ ‘ada_main’ and that in the DLL there is an entry point named ‘ada_dll’.
+ 
+ The DLL (*note Introduction to Dynamic Link Libraries (DLLs): 1dc.) and
+ program must have been built with the debugging information (see GNAT -g
+ switch).  Here are the step-by-step instructions for debugging it:
+ 
+    * Launch ‘GDB’ on the main program.
+ 
+           $ gdb -nw ada_main
+ 
+    * Start the program and stop at the beginning of the main procedure
+ 
+           (gdb) start
+ 
+      This step is required to be able to set a breakpoint inside the
+      DLL. As long as the program is not run, the DLL is not loaded.
+      This has the consequence that the DLL debugging information is also
+      not loaded, so it is not possible to set a breakpoint in the DLL.
+ 
+    * Set a breakpoint inside the DLL
+ 
+           (gdb) break ada_dll
+           (gdb) cont
+ 
+ At this stage a breakpoint is set inside the DLL. From there on you can
+ use the standard approach to debug the whole program (*note Running and
+ Debugging Ada Programs: 14d.).
+ 
+ 
+ File: gnat_ugn.info,  Node: Program Built with Foreign Tools and DLL Built with GCC/GNAT,  Prev: Program and DLL Both Built with GCC/GNAT,  Up: Debugging a DLL
+ 
+ 7.4.7.27 Program Built with Foreign Tools and DLL Built with GCC/GNAT
+ .....................................................................
+ 
+ In this case things are slightly more complex because it is not possible
+ to start the main program and then break at the beginning to load the
+ DLL and the associated DLL debugging information.  It is not possible to
+ break at the beginning of the program because there is no ‘GDB’
+ debugging information, and therefore there is no direct way of getting
+ initial control.  This section addresses this issue by describing some
+ methods that can be used to break somewhere in the DLL to debug it.
+ 
+ First suppose that the main procedure is named ‘main’ (this is for
+ example some C code built with Microsoft Visual C) and that there is a
+ DLL named ‘test.dll’ containing an Ada entry point named ‘ada_dll’.
+ 
+ The DLL (see *note Introduction to Dynamic Link Libraries (DLLs): 1dc.)
+ must have been built with debugging information (see the GNAT ‘-g’
+ option).
+ 
+ Debugging the DLL Directly
+ ..........................
+ 
+    * Find out the executable starting address
+ 
+           $ objdump --file-header main.exe
+ 
+      The starting address is reported on the last line.  For example:
+ 
+           main.exe:     file format pei-i386
+           architecture: i386, flags 0x0000010a:
+           EXEC_P, HAS_DEBUG, D_PAGED
+           start address 0x00401010
+ 
+    * Launch the debugger on the executable.
+ 
+           $ gdb main.exe
+ 
+    * Set a breakpoint at the starting address, and launch the program.
+ 
+           $ (gdb) break *0x00401010
+           $ (gdb) run
+ 
+      The program will stop at the given address.
+ 
+    * Set a breakpoint on a DLL subroutine.
+ 
+           (gdb) break ada_dll.adb:45
+ 
+      Or if you want to break using a symbol on the DLL, you need first
+      to select the Ada language (language used by the DLL).
+ 
+           (gdb) set language ada
+           (gdb) break ada_dll
+ 
+    * Continue the program.
+ 
+           (gdb) cont
+ 
+      This will run the program until it reaches the breakpoint that has
+      been set.  From that point you can use the standard way to debug a
+      program as described in (*note Running and Debugging Ada Programs:
+      14d.).
+ 
+ It is also possible to debug the DLL by attaching to a running process.
+ 
+ Attaching to a Running Process
+ ..............................
+ 
+ With ‘GDB’ it is always possible to debug a running process by attaching
+ to it.  It is possible to debug a DLL this way.  The limitation of this
+ approach is that the DLL must run long enough to perform the attach
+ operation.  It may be useful for instance to insert a time wasting loop
+ in the code of the DLL to meet this criterion.
+ 
+    * Launch the main program ‘main.exe’.
+ 
+           $ main
+ 
+    * Use the Windows ‘Task Manager’ to find the process ID. Let’s say
+      that the process PID for ‘main.exe’ is 208.
+ 
+    * Launch gdb.
+ 
+           $ gdb
+ 
+    * Attach to the running process to be debugged.
+ 
+           (gdb) attach 208
+ 
+    * Load the process debugging information.
+ 
+           (gdb) symbol-file main.exe
+ 
+    * Break somewhere in the DLL.
+ 
+           (gdb) break ada_dll
+ 
+    * Continue process execution.
+ 
+           (gdb) cont
+ 
+ This last step will resume the process execution, and stop at the
+ breakpoint we have set.  From there you can use the standard approach to
+ debug a program as described in *note Running and Debugging Ada
+ Programs: 14d.
+ 
+ 
+ File: gnat_ugn.info,  Node: Setting Stack Size from gnatlink,  Next: Setting Heap Size from gnatlink,  Prev: Debugging a DLL,  Up: Mixed-Language Programming on Windows
+ 
+ 7.4.7.28 Setting Stack Size from ‘gnatlink’
+ ...........................................
+ 
+ It is possible to specify the program stack size at link time.  On
+ modern versions of Windows, starting with XP, this is mostly useful to
+ set the size of the main stack (environment task).  The other task
+ stacks are set with pragma Storage_Size or with the ‘gnatbind -d’
+ command.
+ 
+ Since older versions of Windows (2000, NT4, etc.)  do not allow setting
+ the reserve size of individual tasks, the link-time stack size applies
+ to all tasks, and pragma Storage_Size has no effect.  In particular,
+ Stack Overflow checks are made against this link-time specified size.
+ 
+ This setting can be done with ‘gnatlink’ using either of the following:
+ 
+    * ‘-Xlinker’ linker option
+ 
+           $ gnatlink hello -Xlinker --stack=0x10000,0x1000
+ 
+      This sets the stack reserve size to 0x10000 bytes and the stack
+      commit size to 0x1000 bytes.
+ 
+    * ‘-Wl’ linker option
+ 
+           $ gnatlink hello -Wl,--stack=0x1000000
+ 
+      This sets the stack reserve size to 0x1000000 bytes.  Note that
+      with ‘-Wl’ option it is not possible to set the stack commit size
+      because the comma is a separator for this option.
+ 
+ 
+ File: gnat_ugn.info,  Node: Setting Heap Size from gnatlink,  Prev: Setting Stack Size from gnatlink,  Up: Mixed-Language Programming on Windows
+ 
+ 7.4.7.29 Setting Heap Size from ‘gnatlink’
+ ..........................................
+ 
+ Under Windows systems, it is possible to specify the program heap size
+ from ‘gnatlink’ using either of the following:
+ 
+    * ‘-Xlinker’ linker option
+ 
+           $ gnatlink hello -Xlinker --heap=0x10000,0x1000
+ 
+      This sets the heap reserve size to 0x10000 bytes and the heap
+      commit size to 0x1000 bytes.
+ 
+    * ‘-Wl’ linker option
+ 
+           $ gnatlink hello -Wl,--heap=0x1000000
+ 
+      This sets the heap reserve size to 0x1000000 bytes.  Note that with
+      ‘-Wl’ option it is not possible to set the heap commit size because
+      the comma is a separator for this option.
+ 
+ 
+ File: gnat_ugn.info,  Node: Windows Specific Add-Ons,  Prev: Mixed-Language Programming on Windows,  Up: Microsoft Windows Topics
+ 
+ 7.4.8 Windows Specific Add-Ons
+ ------------------------------
+ 
+ This section describes the Windows specific add-ons.
+ 
+ * Menu:
+ 
+ * Win32Ada::
+ * wPOSIX::
+ 
+ 
+ File: gnat_ugn.info,  Node: Win32Ada,  Next: wPOSIX,  Up: Windows Specific Add-Ons
+ 
+ 7.4.8.1 Win32Ada
+ ................
+ 
+ Win32Ada is a binding for the Microsoft Win32 API. This binding can be
+ easily installed from the provided installer.  To use the Win32Ada
+ binding you need to use a project file, and adding a single with_clause
+ will give you full access to the Win32Ada binding sources and ensure
+ that the proper libraries are passed to the linker.
+ 
+           with "win32ada";
+           project P is
+              for Sources use ...;
+           end P;
+ 
+ To build the application you just need to call gprbuild for the
+ application’s project, here p.gpr:
+ 
+           gprbuild p.gpr
+ 
+ 
+ File: gnat_ugn.info,  Node: wPOSIX,  Prev: Win32Ada,  Up: Windows Specific Add-Ons
+ 
+ 7.4.8.2 wPOSIX
+ ..............
+ 
+ wPOSIX is a minimal POSIX binding whose goal is to help with building
+ cross-platforms applications.  This binding is not complete though, as
+ the Win32 API does not provide the necessary support for all POSIX APIs.
+ 
+ To use the wPOSIX binding you need to use a project file, and adding a
+ single with_clause will give you full access to the wPOSIX binding
+ sources and ensure that the proper libraries are passed to the linker.
+ 
+           with "wposix";
+           project P is
+              for Sources use ...;
+           end P;
+ 
+ To build the application you just need to call gprbuild for the
+ application’s project, here p.gpr:
+ 
+           gprbuild p.gpr
+ 
+ 
+ File: gnat_ugn.info,  Node: Mac OS Topics,  Prev: Microsoft Windows Topics,  Up: Platform-Specific Information
+ 
+ 7.5 Mac OS Topics
+ =================
+ 
+ This section describes topics that are specific to Apple’s OS X
+ platform.
+ 
+ * Menu:
+ 
+ * Codesigning the Debugger::
+ 
+ 
+ File: gnat_ugn.info,  Node: Codesigning the Debugger,  Up: Mac OS Topics
+ 
+ 7.5.1 Codesigning the Debugger
+ ------------------------------
+ 
+ The Darwin Kernel requires the debugger to have special permissions
+ before it is allowed to control other processes.  These permissions are
+ granted by codesigning the GDB executable.  Without these permissions,
+ the debugger will report error messages such as:
+ 
+      Starting program: /x/y/foo
+      Unable to find Mach task port for process-id 28885: (os/kern) failure (0x5).
+      (please check gdb is codesigned - see taskgated(8))
+ 
+ Codesigning requires a certificate.  The following procedure explains
+ how to create one:
+ 
+    * Start the Keychain Access application (in
+      /Applications/Utilities/Keychain Access.app)
+ 
+    * Select the Keychain Access -> Certificate Assistant -> Create a
+      Certificate… menu
+ 
+    * Then:
+ 
+         * Choose a name for the new certificate (this procedure will use
+           “gdb-cert” as an example)
+ 
+         * Set “Identity Type” to “Self Signed Root”
+ 
+         * Set “Certificate Type” to “Code Signing”
+ 
+         * Activate the “Let me override defaults” option
+ 
+    * Click several times on “Continue” until the “Specify a Location For
+      The Certificate” screen appears, then set “Keychain” to “System”
+ 
+    * Click on “Continue” until the certificate is created
+ 
+    * Finally, in the view, double-click on the new certificate, and set
+      “When using this certificate” to “Always Trust”
+ 
+    * Exit the Keychain Access application and restart the computer (this
+      is unfortunately required)
+ 
+ Once a certificate has been created, the debugger can be codesigned as
+ follow.  In a Terminal, run the following command:
+ 
+           $ codesign -f -s  "gdb-cert"  <gnat_install_prefix>/bin/gdb
+ 
+ where “gdb-cert” should be replaced by the actual certificate name
+ chosen above, and <gnat_install_prefix> should be replaced by the
+ location where you installed GNAT. Also, be sure that users are in the
+ Unix group ‘_developer’.
+ 
+ 
+ File: gnat_ugn.info,  Node: Example of Binder Output File,  Next: Elaboration Order Handling in GNAT,  Prev: Platform-Specific Information,  Up: Top
+ 
+ 8 Example of Binder Output File
+ *******************************
+ 
+ This Appendix displays the source code for the output file generated by
+ ‘gnatbind’ for a simple ‘Hello World’ program.  Comments have been added
+ for clarification purposes.
+ 
+      --  The package is called Ada_Main unless this name is actually used
+      --  as a unit name in the partition, in which case some other unique
+      --  name is used.
+ 
+      pragma Ada_95;
+      with System;
+      package ada_main is
+         pragma Warnings (Off);
+ 
+         --  The main program saves the parameters (argument count,
+         --  argument values, environment pointer) in global variables
+         --  for later access by other units including
+         --  Ada.Command_Line.
+ 
+         gnat_argc : Integer;
+         gnat_argv : System.Address;
+         gnat_envp : System.Address;
+ 
+         --  The actual variables are stored in a library routine. This
+         --  is useful for some shared library situations, where there
+         --  are problems if variables are not in the library.
+ 
+         pragma Import (C, gnat_argc);
+         pragma Import (C, gnat_argv);
+         pragma Import (C, gnat_envp);
+ 
+         --  The exit status is similarly an external location
+ 
+         gnat_exit_status : Integer;
+         pragma Import (C, gnat_exit_status);
+ 
+         GNAT_Version : constant String :=
+                          "GNAT Version: Pro 7.4.0w (20141119-49)" & ASCII.NUL;
+         pragma Export (C, GNAT_Version, "__gnat_version");
+ 
+         Ada_Main_Program_Name : constant String := "_ada_hello" & ASCII.NUL;
+         pragma Export (C, Ada_Main_Program_Name, "__gnat_ada_main_program_name");
+ 
+         --  This is the generated adainit routine that performs
+         --  initialization at the start of execution. In the case
+         --  where Ada is the main program, this main program makes
+         --  a call to adainit at program startup.
+ 
+         procedure adainit;
+         pragma Export (C, adainit, "adainit");
+ 
+         --  This is the generated adafinal routine that performs
+         --  finalization at the end of execution. In the case where
+         --  Ada is the main program, this main program makes a call
+         --  to adafinal at program termination.
+ 
+         procedure adafinal;
+         pragma Export (C, adafinal, "adafinal");
+ 
+         --  This routine is called at the start of execution. It is
+         --  a dummy routine that is used by the debugger to breakpoint
+         --  at the start of execution.
+ 
+         --  This is the actual generated main program (it would be
+         --  suppressed if the no main program switch were used). As
+         --  required by standard system conventions, this program has
+         --  the external name main.
+ 
+         function main
+           (argc : Integer;
+            argv : System.Address;
+            envp : System.Address)
+            return Integer;
+         pragma Export (C, main, "main");
+ 
+         --  The following set of constants give the version
+         --  identification values for every unit in the bound
+         --  partition. This identification is computed from all
+         --  dependent semantic units, and corresponds to the
+         --  string that would be returned by use of the
+         --  Body_Version or Version attributes.
+ 
+         --  The following Export pragmas export the version numbers
+         --  with symbolic names ending in B (for body) or S
+         --  (for spec) so that they can be located in a link. The
+         --  information provided here is sufficient to track down
+         --  the exact versions of units used in a given build.
+ 
+         type Version_32 is mod 2 ** 32;
+         u00001 : constant Version_32 := 16#8ad6e54a#;
+         pragma Export (C, u00001, "helloB");
+         u00002 : constant Version_32 := 16#fbff4c67#;
+         pragma Export (C, u00002, "system__standard_libraryB");
+         u00003 : constant Version_32 := 16#1ec6fd90#;
+         pragma Export (C, u00003, "system__standard_libraryS");
+         u00004 : constant Version_32 := 16#3ffc8e18#;
+         pragma Export (C, u00004, "adaS");
+         u00005 : constant Version_32 := 16#28f088c2#;
+         pragma Export (C, u00005, "ada__text_ioB");
+         u00006 : constant Version_32 := 16#f372c8ac#;
+         pragma Export (C, u00006, "ada__text_ioS");
+         u00007 : constant Version_32 := 16#2c143749#;
+         pragma Export (C, u00007, "ada__exceptionsB");
+         u00008 : constant Version_32 := 16#f4f0cce8#;
+         pragma Export (C, u00008, "ada__exceptionsS");
+         u00009 : constant Version_32 := 16#a46739c0#;
+         pragma Export (C, u00009, "ada__exceptions__last_chance_handlerB");
+         u00010 : constant Version_32 := 16#3aac8c92#;
+         pragma Export (C, u00010, "ada__exceptions__last_chance_handlerS");
+         u00011 : constant Version_32 := 16#1d274481#;
+         pragma Export (C, u00011, "systemS");
+         u00012 : constant Version_32 := 16#a207fefe#;
+         pragma Export (C, u00012, "system__soft_linksB");
+         u00013 : constant Version_32 := 16#467d9556#;
+         pragma Export (C, u00013, "system__soft_linksS");
+         u00014 : constant Version_32 := 16#b01dad17#;
+         pragma Export (C, u00014, "system__parametersB");
+         u00015 : constant Version_32 := 16#630d49fe#;
+         pragma Export (C, u00015, "system__parametersS");
+         u00016 : constant Version_32 := 16#b19b6653#;
+         pragma Export (C, u00016, "system__secondary_stackB");
+         u00017 : constant Version_32 := 16#b6468be8#;
+         pragma Export (C, u00017, "system__secondary_stackS");
+         u00018 : constant Version_32 := 16#39a03df9#;
+         pragma Export (C, u00018, "system__storage_elementsB");
+         u00019 : constant Version_32 := 16#30e40e85#;
+         pragma Export (C, u00019, "system__storage_elementsS");
+         u00020 : constant Version_32 := 16#41837d1e#;
+         pragma Export (C, u00020, "system__stack_checkingB");
+         u00021 : constant Version_32 := 16#93982f69#;
+         pragma Export (C, u00021, "system__stack_checkingS");
+         u00022 : constant Version_32 := 16#393398c1#;
+         pragma Export (C, u00022, "system__exception_tableB");
+         u00023 : constant Version_32 := 16#b33e2294#;
+         pragma Export (C, u00023, "system__exception_tableS");
+         u00024 : constant Version_32 := 16#ce4af020#;
+         pragma Export (C, u00024, "system__exceptionsB");
+         u00025 : constant Version_32 := 16#75442977#;
+         pragma Export (C, u00025, "system__exceptionsS");
+         u00026 : constant Version_32 := 16#37d758f1#;
+         pragma Export (C, u00026, "system__exceptions__machineS");
+         u00027 : constant Version_32 := 16#b895431d#;
+         pragma Export (C, u00027, "system__exceptions_debugB");
+         u00028 : constant Version_32 := 16#aec55d3f#;
+         pragma Export (C, u00028, "system__exceptions_debugS");
+         u00029 : constant Version_32 := 16#570325c8#;
+         pragma Export (C, u00029, "system__img_intB");
+         u00030 : constant Version_32 := 16#1ffca443#;
+         pragma Export (C, u00030, "system__img_intS");
+         u00031 : constant Version_32 := 16#b98c3e16#;
+         pragma Export (C, u00031, "system__tracebackB");
+         u00032 : constant Version_32 := 16#831a9d5a#;
+         pragma Export (C, u00032, "system__tracebackS");
+         u00033 : constant Version_32 := 16#9ed49525#;
+         pragma Export (C, u00033, "system__traceback_entriesB");
+         u00034 : constant Version_32 := 16#1d7cb2f1#;
+         pragma Export (C, u00034, "system__traceback_entriesS");
+         u00035 : constant Version_32 := 16#8c33a517#;
+         pragma Export (C, u00035, "system__wch_conB");
+         u00036 : constant Version_32 := 16#065a6653#;
+         pragma Export (C, u00036, "system__wch_conS");
+         u00037 : constant Version_32 := 16#9721e840#;
+         pragma Export (C, u00037, "system__wch_stwB");
+         u00038 : constant Version_32 := 16#2b4b4a52#;
+         pragma Export (C, u00038, "system__wch_stwS");
+         u00039 : constant Version_32 := 16#92b797cb#;
+         pragma Export (C, u00039, "system__wch_cnvB");
+         u00040 : constant Version_32 := 16#09eddca0#;
+         pragma Export (C, u00040, "system__wch_cnvS");
+         u00041 : constant Version_32 := 16#6033a23f#;
+         pragma Export (C, u00041, "interfacesS");
+         u00042 : constant Version_32 := 16#ece6fdb6#;
+         pragma Export (C, u00042, "system__wch_jisB");
+         u00043 : constant Version_32 := 16#899dc581#;
+         pragma Export (C, u00043, "system__wch_jisS");
+         u00044 : constant Version_32 := 16#10558b11#;
+         pragma Export (C, u00044, "ada__streamsB");
+         u00045 : constant Version_32 := 16#2e6701ab#;
+         pragma Export (C, u00045, "ada__streamsS");
+         u00046 : constant Version_32 := 16#db5c917c#;
+         pragma Export (C, u00046, "ada__io_exceptionsS");
+         u00047 : constant Version_32 := 16#12c8cd7d#;
+         pragma Export (C, u00047, "ada__tagsB");
+         u00048 : constant Version_32 := 16#ce72c228#;
+         pragma Export (C, u00048, "ada__tagsS");
+         u00049 : constant Version_32 := 16#c3335bfd#;
+         pragma Export (C, u00049, "system__htableB");
+         u00050 : constant Version_32 := 16#99e5f76b#;
+         pragma Export (C, u00050, "system__htableS");
+         u00051 : constant Version_32 := 16#089f5cd0#;
+         pragma Export (C, u00051, "system__string_hashB");
+         u00052 : constant Version_32 := 16#3bbb9c15#;
+         pragma Export (C, u00052, "system__string_hashS");
+         u00053 : constant Version_32 := 16#807fe041#;
+         pragma Export (C, u00053, "system__unsigned_typesS");
+         u00054 : constant Version_32 := 16#d27be59e#;
+         pragma Export (C, u00054, "system__val_lluB");
+         u00055 : constant Version_32 := 16#fa8db733#;
+         pragma Export (C, u00055, "system__val_lluS");
+         u00056 : constant Version_32 := 16#27b600b2#;
+         pragma Export (C, u00056, "system__val_utilB");
+         u00057 : constant Version_32 := 16#b187f27f#;
+         pragma Export (C, u00057, "system__val_utilS");
+         u00058 : constant Version_32 := 16#d1060688#;
+         pragma Export (C, u00058, "system__case_utilB");
+         u00059 : constant Version_32 := 16#392e2d56#;
+         pragma Export (C, u00059, "system__case_utilS");
+         u00060 : constant Version_32 := 16#84a27f0d#;
+         pragma Export (C, u00060, "interfaces__c_streamsB");
+         u00061 : constant Version_32 := 16#8bb5f2c0#;
+         pragma Export (C, u00061, "interfaces__c_streamsS");
+         u00062 : constant Version_32 := 16#6db6928f#;
+         pragma Export (C, u00062, "system__crtlS");
+         u00063 : constant Version_32 := 16#4e6a342b#;
+         pragma Export (C, u00063, "system__file_ioB");
+         u00064 : constant Version_32 := 16#ba56a5e4#;
+         pragma Export (C, u00064, "system__file_ioS");
+         u00065 : constant Version_32 := 16#b7ab275c#;
+         pragma Export (C, u00065, "ada__finalizationB");
+         u00066 : constant Version_32 := 16#19f764ca#;
+         pragma Export (C, u00066, "ada__finalizationS");
+         u00067 : constant Version_32 := 16#95817ed8#;
+         pragma Export (C, u00067, "system__finalization_rootB");
+         u00068 : constant Version_32 := 16#52d53711#;
+         pragma Export (C, u00068, "system__finalization_rootS");
+         u00069 : constant Version_32 := 16#769e25e6#;
+         pragma Export (C, u00069, "interfaces__cB");
+         u00070 : constant Version_32 := 16#4a38bedb#;
+         pragma Export (C, u00070, "interfaces__cS");
+         u00071 : constant Version_32 := 16#07e6ee66#;
+         pragma Export (C, u00071, "system__os_libB");
+         u00072 : constant Version_32 := 16#d7b69782#;
+         pragma Export (C, u00072, "system__os_libS");
+         u00073 : constant Version_32 := 16#1a817b8e#;
+         pragma Export (C, u00073, "system__stringsB");
+         u00074 : constant Version_32 := 16#639855e7#;
+         pragma Export (C, u00074, "system__stringsS");
+         u00075 : constant Version_32 := 16#e0b8de29#;
+         pragma Export (C, u00075, "system__file_control_blockS");
+         u00076 : constant Version_32 := 16#b5b2aca1#;
+         pragma Export (C, u00076, "system__finalization_mastersB");
+         u00077 : constant Version_32 := 16#69316dc1#;
+         pragma Export (C, u00077, "system__finalization_mastersS");
+         u00078 : constant Version_32 := 16#57a37a42#;
+         pragma Export (C, u00078, "system__address_imageB");
+         u00079 : constant Version_32 := 16#bccbd9bb#;
+         pragma Export (C, u00079, "system__address_imageS");
+         u00080 : constant Version_32 := 16#7268f812#;
+         pragma Export (C, u00080, "system__img_boolB");
+         u00081 : constant Version_32 := 16#e8fe356a#;
+         pragma Export (C, u00081, "system__img_boolS");
+         u00082 : constant Version_32 := 16#d7aac20c#;
+         pragma Export (C, u00082, "system__ioB");
+         u00083 : constant Version_32 := 16#8365b3ce#;
+         pragma Export (C, u00083, "system__ioS");
+         u00084 : constant Version_32 := 16#6d4d969a#;
+         pragma Export (C, u00084, "system__storage_poolsB");
+         u00085 : constant Version_32 := 16#e87cc305#;
+         pragma Export (C, u00085, "system__storage_poolsS");
+         u00086 : constant Version_32 := 16#e34550ca#;
+         pragma Export (C, u00086, "system__pool_globalB");
+         u00087 : constant Version_32 := 16#c88d2d16#;
+         pragma Export (C, u00087, "system__pool_globalS");
+         u00088 : constant Version_32 := 16#9d39c675#;
+         pragma Export (C, u00088, "system__memoryB");
+         u00089 : constant Version_32 := 16#445a22b5#;
+         pragma Export (C, u00089, "system__memoryS");
+         u00090 : constant Version_32 := 16#6a859064#;
+         pragma Export (C, u00090, "system__storage_pools__subpoolsB");
+         u00091 : constant Version_32 := 16#e3b008dc#;
+         pragma Export (C, u00091, "system__storage_pools__subpoolsS");
+         u00092 : constant Version_32 := 16#63f11652#;
+         pragma Export (C, u00092, "system__storage_pools__subpools__finalizationB");
+         u00093 : constant Version_32 := 16#fe2f4b3a#;
+         pragma Export (C, u00093, "system__storage_pools__subpools__finalizationS");
+ 
+         --  BEGIN ELABORATION ORDER
+         --  ada%s
+         --  interfaces%s
+         --  system%s
+         --  system.case_util%s
+         --  system.case_util%b
+         --  system.htable%s
+         --  system.img_bool%s
+         --  system.img_bool%b
+         --  system.img_int%s
+         --  system.img_int%b
+         --  system.io%s
+         --  system.io%b
+         --  system.parameters%s
+         --  system.parameters%b
+         --  system.crtl%s
+         --  interfaces.c_streams%s
+         --  interfaces.c_streams%b
+         --  system.standard_library%s
+         --  system.exceptions_debug%s
+         --  system.exceptions_debug%b
+         --  system.storage_elements%s
+         --  system.storage_elements%b
+         --  system.stack_checking%s
+         --  system.stack_checking%b
+         --  system.string_hash%s
+         --  system.string_hash%b
+         --  system.htable%b
+         --  system.strings%s
+         --  system.strings%b
+         --  system.os_lib%s
+         --  system.traceback_entries%s
+         --  system.traceback_entries%b
+         --  ada.exceptions%s
+         --  system.soft_links%s
+         --  system.unsigned_types%s
+         --  system.val_llu%s
+         --  system.val_util%s
+         --  system.val_util%b
+         --  system.val_llu%b
+         --  system.wch_con%s
+         --  system.wch_con%b
+         --  system.wch_cnv%s
+         --  system.wch_jis%s
+         --  system.wch_jis%b
+         --  system.wch_cnv%b
+         --  system.wch_stw%s
+         --  system.wch_stw%b
+         --  ada.exceptions.last_chance_handler%s
+         --  ada.exceptions.last_chance_handler%b
+         --  system.address_image%s
+         --  system.exception_table%s
+         --  system.exception_table%b
+         --  ada.io_exceptions%s
+         --  ada.tags%s
+         --  ada.streams%s
+         --  ada.streams%b
+         --  interfaces.c%s
+         --  system.exceptions%s
+         --  system.exceptions%b
+         --  system.exceptions.machine%s
+         --  system.finalization_root%s
+         --  system.finalization_root%b
+         --  ada.finalization%s
+         --  ada.finalization%b
+         --  system.storage_pools%s
+         --  system.storage_pools%b
+         --  system.finalization_masters%s
+         --  system.storage_pools.subpools%s
+         --  system.storage_pools.subpools.finalization%s
+         --  system.storage_pools.subpools.finalization%b
+         --  system.memory%s
+         --  system.memory%b
+         --  system.standard_library%b
+         --  system.pool_global%s
+         --  system.pool_global%b
+         --  system.file_control_block%s
+         --  system.file_io%s
+         --  system.secondary_stack%s
+         --  system.file_io%b
+         --  system.storage_pools.subpools%b
+         --  system.finalization_masters%b
+         --  interfaces.c%b
+         --  ada.tags%b
+         --  system.soft_links%b
+         --  system.os_lib%b
+         --  system.secondary_stack%b
+         --  system.address_image%b
+         --  system.traceback%s
+         --  ada.exceptions%b
+         --  system.traceback%b
+         --  ada.text_io%s
+         --  ada.text_io%b
+         --  hello%b
+         --  END ELABORATION ORDER
+ 
+      end ada_main;
+ 
+      pragma Ada_95;
+      --  The following source file name pragmas allow the generated file
+      --  names to be unique for different main programs. They are needed
+      --  since the package name will always be Ada_Main.
+ 
+      pragma Source_File_Name (ada_main, Spec_File_Name => "b~hello.ads");
+      pragma Source_File_Name (ada_main, Body_File_Name => "b~hello.adb");
+ 
+      pragma Suppress (Overflow_Check);
+      with Ada.Exceptions;
+ 
+      --  Generated package body for Ada_Main starts here
+ 
+      package body ada_main is
+         pragma Warnings (Off);
+ 
+         --  These values are reference counter associated to units which have
+         --  been elaborated. It is also used to avoid elaborating the
+         --  same unit twice.
+ 
+         E72 : Short_Integer; pragma Import (Ada, E72, "system__os_lib_E");
+         E13 : Short_Integer; pragma Import (Ada, E13, "system__soft_links_E");
+         E23 : Short_Integer; pragma Import (Ada, E23, "system__exception_table_E");
+         E46 : Short_Integer; pragma Import (Ada, E46, "ada__io_exceptions_E");
+         E48 : Short_Integer; pragma Import (Ada, E48, "ada__tags_E");
+         E45 : Short_Integer; pragma Import (Ada, E45, "ada__streams_E");
+         E70 : Short_Integer; pragma Import (Ada, E70, "interfaces__c_E");
+         E25 : Short_Integer; pragma Import (Ada, E25, "system__exceptions_E");
+         E68 : Short_Integer; pragma Import (Ada, E68, "system__finalization_root_E");
+         E66 : Short_Integer; pragma Import (Ada, E66, "ada__finalization_E");
+         E85 : Short_Integer; pragma Import (Ada, E85, "system__storage_pools_E");
+         E77 : Short_Integer; pragma Import (Ada, E77, "system__finalization_masters_E");
+         E91 : Short_Integer; pragma Import (Ada, E91, "system__storage_pools__subpools_E");
+         E87 : Short_Integer; pragma Import (Ada, E87, "system__pool_global_E");
+         E75 : Short_Integer; pragma Import (Ada, E75, "system__file_control_block_E");
+         E64 : Short_Integer; pragma Import (Ada, E64, "system__file_io_E");
+         E17 : Short_Integer; pragma Import (Ada, E17, "system__secondary_stack_E");
+         E06 : Short_Integer; pragma Import (Ada, E06, "ada__text_io_E");
+ 
+         Local_Priority_Specific_Dispatching : constant String := "";
+         Local_Interrupt_States : constant String := "";
+ 
+         Is_Elaborated : Boolean := False;
+ 
+         procedure finalize_library is
+         begin
+            E06 := E06 - 1;
+            declare
+               procedure F1;
+               pragma Import (Ada, F1, "ada__text_io__finalize_spec");
+            begin
+               F1;
+            end;
+            E77 := E77 - 1;
+            E91 := E91 - 1;
+            declare
+               procedure F2;
+               pragma Import (Ada, F2, "system__file_io__finalize_body");
+            begin
+               E64 := E64 - 1;
+               F2;
+            end;
+            declare
+               procedure F3;
+               pragma Import (Ada, F3, "system__file_control_block__finalize_spec");
+            begin
+               E75 := E75 - 1;
+               F3;
+            end;
+            E87 := E87 - 1;
+            declare
+               procedure F4;
+               pragma Import (Ada, F4, "system__pool_global__finalize_spec");
+            begin
+               F4;
+            end;
+            declare
+               procedure F5;
+               pragma Import (Ada, F5, "system__storage_pools__subpools__finalize_spec");
+            begin
+               F5;
+            end;
+            declare
+               procedure F6;
+               pragma Import (Ada, F6, "system__finalization_masters__finalize_spec");
+            begin
+               F6;
+            end;
+            declare
+               procedure Reraise_Library_Exception_If_Any;
+               pragma Import (Ada, Reraise_Library_Exception_If_Any, "__gnat_reraise_library_exception_if_any");
+            begin
+               Reraise_Library_Exception_If_Any;
+            end;
+         end finalize_library;
+ 
+         -------------
+         -- adainit --
+         -------------
+ 
+         procedure adainit is
+ 
+            Main_Priority : Integer;
+            pragma Import (C, Main_Priority, "__gl_main_priority");
+            Time_Slice_Value : Integer;
+            pragma Import (C, Time_Slice_Value, "__gl_time_slice_val");
+            WC_Encoding : Character;
+            pragma Import (C, WC_Encoding, "__gl_wc_encoding");
+            Locking_Policy : Character;
+            pragma Import (C, Locking_Policy, "__gl_locking_policy");
+            Queuing_Policy : Character;
+            pragma Import (C, Queuing_Policy, "__gl_queuing_policy");
+            Task_Dispatching_Policy : Character;
+            pragma Import (C, Task_Dispatching_Policy, "__gl_task_dispatching_policy");
+            Priority_Specific_Dispatching : System.Address;
+            pragma Import (C, Priority_Specific_Dispatching, "__gl_priority_specific_dispatching");
+            Num_Specific_Dispatching : Integer;
+            pragma Import (C, Num_Specific_Dispatching, "__gl_num_specific_dispatching");
+            Main_CPU : Integer;
+            pragma Import (C, Main_CPU, "__gl_main_cpu");
+            Interrupt_States : System.Address;
+            pragma Import (C, Interrupt_States, "__gl_interrupt_states");
+            Num_Interrupt_States : Integer;
+            pragma Import (C, Num_Interrupt_States, "__gl_num_interrupt_states");
+            Unreserve_All_Interrupts : Integer;
+            pragma Import (C, Unreserve_All_Interrupts, "__gl_unreserve_all_interrupts");
+            Detect_Blocking : Integer;
+            pragma Import (C, Detect_Blocking, "__gl_detect_blocking");
+            Default_Stack_Size : Integer;
+            pragma Import (C, Default_Stack_Size, "__gl_default_stack_size");
+            Leap_Seconds_Support : Integer;
+            pragma Import (C, Leap_Seconds_Support, "__gl_leap_seconds_support");
+ 
+            procedure Runtime_Initialize;
+            pragma Import (C, Runtime_Initialize, "__gnat_runtime_initialize");
+ 
+            Finalize_Library_Objects : No_Param_Proc;
+            pragma Import (C, Finalize_Library_Objects, "__gnat_finalize_library_objects");
+ 
+         --  Start of processing for adainit
+ 
+         begin
+ 
+            --  Record various information for this partition.  The values
+            --  are derived by the binder from information stored in the ali
+            --  files by the compiler.
+ 
+            if Is_Elaborated then
+               return;
+            end if;
+            Is_Elaborated := True;
+            Main_Priority := -1;
+            Time_Slice_Value := -1;
+            WC_Encoding := 'b';
+            Locking_Policy := ' ';
+            Queuing_Policy := ' ';
+            Task_Dispatching_Policy := ' ';
+            Priority_Specific_Dispatching :=
+              Local_Priority_Specific_Dispatching'Address;
+            Num_Specific_Dispatching := 0;
+            Main_CPU := -1;
+            Interrupt_States := Local_Interrupt_States'Address;
+            Num_Interrupt_States := 0;
+            Unreserve_All_Interrupts := 0;
+            Detect_Blocking := 0;
+            Default_Stack_Size := -1;
+            Leap_Seconds_Support := 0;
+ 
+            Runtime_Initialize;
+ 
+            Finalize_Library_Objects := finalize_library'access;
+ 
+            --  Now we have the elaboration calls for all units in the partition.
+            --  The Elab_Spec and Elab_Body attributes generate references to the
+            --  implicit elaboration procedures generated by the compiler for
+            --  each unit that requires elaboration. Increment a counter of
+            --  reference for each unit.
+ 
+            System.Soft_Links'Elab_Spec;
+            System.Exception_Table'Elab_Body;
+            E23 := E23 + 1;
+            Ada.Io_Exceptions'Elab_Spec;
+            E46 := E46 + 1;
+            Ada.Tags'Elab_Spec;
+            Ada.Streams'Elab_Spec;
+            E45 := E45 + 1;
+            Interfaces.C'Elab_Spec;
+            System.Exceptions'Elab_Spec;
+            E25 := E25 + 1;
+            System.Finalization_Root'Elab_Spec;
+            E68 := E68 + 1;
+            Ada.Finalization'Elab_Spec;
+            E66 := E66 + 1;
+            System.Storage_Pools'Elab_Spec;
+            E85 := E85 + 1;
+            System.Finalization_Masters'Elab_Spec;
+            System.Storage_Pools.Subpools'Elab_Spec;
+            System.Pool_Global'Elab_Spec;
+            E87 := E87 + 1;
+            System.File_Control_Block'Elab_Spec;
+            E75 := E75 + 1;
+            System.File_Io'Elab_Body;
+            E64 := E64 + 1;
+            E91 := E91 + 1;
+            System.Finalization_Masters'Elab_Body;
+            E77 := E77 + 1;
+            E70 := E70 + 1;
+            Ada.Tags'Elab_Body;
+            E48 := E48 + 1;
+            System.Soft_Links'Elab_Body;
+            E13 := E13 + 1;
+            System.Os_Lib'Elab_Body;
+            E72 := E72 + 1;
+            System.Secondary_Stack'Elab_Body;
+            E17 := E17 + 1;
+            Ada.Text_Io'Elab_Spec;
+            Ada.Text_Io'Elab_Body;
+            E06 := E06 + 1;
+         end adainit;
+ 
+         --------------
+         -- adafinal --
+         --------------
+ 
+         procedure adafinal is
+            procedure s_stalib_adafinal;
+            pragma Import (C, s_stalib_adafinal, "system__standard_library__adafinal");
+ 
+            procedure Runtime_Finalize;
+            pragma Import (C, Runtime_Finalize, "__gnat_runtime_finalize");
+ 
+         begin
+            if not Is_Elaborated then
+               return;
+            end if;
+            Is_Elaborated := False;
+            Runtime_Finalize;
+            s_stalib_adafinal;
+         end adafinal;
+ 
+         --  We get to the main program of the partition by using
+         --  pragma Import because if we try to with the unit and
+         --  call it Ada style, then not only do we waste time
+         --  recompiling it, but also, we don't really know the right
+         --  switches (e.g.@: identifier character set) to be used
+         --  to compile it.
+ 
+         procedure Ada_Main_Program;
+         pragma Import (Ada, Ada_Main_Program, "_ada_hello");
+ 
+         ----------
+         -- main --
+         ----------
+ 
+         --  main is actually a function, as in the ANSI C standard,
+         --  defined to return the exit status. The three parameters
+         --  are the argument count, argument values and environment
+         --  pointer.
+ 
+         function main
+           (argc : Integer;
+            argv : System.Address;
+            envp : System.Address)
+            return Integer
+         is
+            --  The initialize routine performs low level system
+            --  initialization using a standard library routine which
+            --  sets up signal handling and performs any other
+            --  required setup. The routine can be found in file
+            --  a-init.c.
+ 
+            procedure initialize;
+            pragma Import (C, initialize, "__gnat_initialize");
+ 
+            --  The finalize routine performs low level system
+            --  finalization using a standard library routine. The
+            --  routine is found in file a-final.c and in the standard
+            --  distribution is a dummy routine that does nothing, so
+            --  really this is a hook for special user finalization.
+ 
+            procedure finalize;
+            pragma Import (C, finalize, "__gnat_finalize");
+ 
+            --  The following is to initialize the SEH exceptions
+ 
+            SEH : aliased array (1 .. 2) of Integer;
+ 
+            Ensure_Reference : aliased System.Address := Ada_Main_Program_Name'Address;
+            pragma Volatile (Ensure_Reference);
+ 
+         --  Start of processing for main
+ 
+         begin
+            --  Save global variables
+ 
+            gnat_argc := argc;
+            gnat_argv := argv;
+            gnat_envp := envp;
+ 
+            --  Call low level system initialization
+ 
+            Initialize (SEH'Address);
+ 
+            --  Call our generated Ada initialization routine
+ 
+            adainit;
+ 
+            --  Now we call the main program of the partition
+ 
+            Ada_Main_Program;
+ 
+            --  Perform Ada finalization
+ 
+            adafinal;
+ 
+            --  Perform low level system finalization
+ 
+            Finalize;
+ 
+            --  Return the proper exit status
+            return (gnat_exit_status);
+         end;
+ 
+      --  This section is entirely comments, so it has no effect on the
+      --  compilation of the Ada_Main package. It provides the list of
+      --  object files and linker options, as well as some standard
+      --  libraries needed for the link. The gnatlink utility parses
+      --  this b~hello.adb file to read these comment lines to generate
+      --  the appropriate command line arguments for the call to the
+      --  system linker. The BEGIN/END lines are used for sentinels for
+      --  this parsing operation.
+ 
+      --  The exact file names will of course depend on the environment,
+      --  host/target and location of files on the host system.
+ 
+      -- BEGIN Object file/option list
+         --   ./hello.o
+         --   -L./
+         --   -L/usr/local/gnat/lib/gcc-lib/i686-pc-linux-gnu/2.8.1/adalib/
+         --   /usr/local/gnat/lib/gcc-lib/i686-pc-linux-gnu/2.8.1/adalib/libgnat.a
+      -- END Object file/option list
+ 
+      end ada_main;
+ 
+ The Ada code in the above example is exactly what is generated by the
+ binder.  We have added comments to more clearly indicate the function of
+ each part of the generated ‘Ada_Main’ package.
+ 
+ The code is standard Ada in all respects, and can be processed by any
+ tools that handle Ada.  In particular, it is possible to use the
+ debugger in Ada mode to debug the generated ‘Ada_Main’ package.  For
+ example, suppose that for reasons that you do not understand, your
+ program is crashing during elaboration of the body of ‘Ada.Text_IO’.  To
+ locate this bug, you can place a breakpoint on the call:
+ 
+           Ada.Text_Io'Elab_Body;
+ 
+ and trace the elaboration routine for this package to find out where the
+ problem might be (more usually of course you would be debugging
+ elaboration code in your own application).
+ 
+ 
+ File: gnat_ugn.info,  Node: Elaboration Order Handling in GNAT,  Next: Inline Assembler,  Prev: Example of Binder Output File,  Up: Top
+ 
+ 9 Elaboration Order Handling in GNAT
+ ************************************
+ 
+ This appendix describes the handling of elaboration code in Ada and
+ GNAT, and discusses how the order of elaboration of program units can be
+ controlled in GNAT, either automatically or with explicit programming
+ features.
+ 
+ * Menu:
+ 
+ * Elaboration Code::
+ * Elaboration Order::
+ * Checking the Elaboration Order::
+ * Controlling the Elaboration Order in Ada::
+ * Controlling the Elaboration Order in GNAT::
+ * Mixing Elaboration Models::
+ * ABE Diagnostics::
+ * SPARK Diagnostics::
+ * Elaboration Circularities::
+ * Resolving Elaboration Circularities::
+ * Elaboration-related Compiler Switches::
+ * Summary of Procedures for Elaboration Control::
+ * Inspecting the Chosen Elaboration Order::
+ 
+ 
+ File: gnat_ugn.info,  Node: Elaboration Code,  Next: Elaboration Order,  Up: Elaboration Order Handling in GNAT
+ 
+ 9.1 Elaboration Code
+ ====================
+ 
+ Ada defines the term ‘execution’ as the process by which a construct
+ achieves its run-time effect.  This process is also referred to as
+ ‘elaboration’ for declarations and ‘evaluation’ for expressions.
+ 
+ The execution model in Ada allows for certain sections of an Ada program
+ to be executed prior to execution of the program itself, primarily with
+ the intent of initializing data.  These sections are referred to as
+ ‘elaboration code’.  Elaboration code is executed as follows:
+ 
+    * All partitions of an Ada program are executed in parallel with one
+      another, possibly in a separate address space, and possibly on a
+      separate computer.
+ 
+    * The execution of a partition involves running the environment task
+      for that partition.
+ 
+    * The environment task executes all elaboration code (if available)
+      for all units within that partition.  This code is said to be
+      executed at ‘elaboration time’.
+ 
+    * The environment task executes the Ada program (if available) for
+      that partition.
+ 
+ In addition to the Ada terminology, this appendix defines the following
+ terms:
+ 
+    * ‘Invocation’
+ 
+      The act of calling a subprogram, instantiating a generic, or
+      activating a task.
+ 
+    * ‘Scenario’
+ 
+      A construct that is elaborated or invoked by elaboration code is
+      referred to as an ‘elaboration scenario’ or simply a ‘scenario’.
+      GNAT recognizes the following scenarios:
+ 
+         - ‘'Access’ of entries, operators, and subprograms
+ 
+         - Activation of tasks
+ 
+         - Calls to entries, operators, and subprograms
+ 
+         - Instantiations of generic templates
+ 
+    * ‘Target’
+ 
+      A construct elaborated by a scenario is referred to as ‘elaboration
+      target’ or simply ‘target’.  GNAT recognizes the following targets:
+ 
+         - For ‘'Access’ of entries, operators, and subprograms, the
+           target is the entry, operator, or subprogram being aliased.
+ 
+         - For activation of tasks, the target is the task body
+ 
+         - For calls to entries, operators, and subprograms, the target
+           is the entry, operator, or subprogram being invoked.
+ 
+         - For instantiations of generic templates, the target is the
+           generic template being instantiated.
+ 
+ Elaboration code may appear in two distinct contexts:
+ 
+    * ‘Library level’
+ 
+      A scenario appears at the library level when it is encapsulated by
+      a package [body] compilation unit, ignoring any other package
+      [body] declarations in between.
+ 
+           with Server;
+           package Client is
+              procedure Proc;
+ 
+              package Nested is
+                 Val : ... := Server.Func;
+              end Nested;
+           end Client;
+ 
+      In the example above, the call to ‘Server.Func’ is an elaboration
+      scenario because it appears at the library level of package
+      ‘Client’.  Note that the declaration of package ‘Nested’ is ignored
+      according to the definition given above.  As a result, the call to
+      ‘Server.Func’ will be invoked when the spec of unit ‘Client’ is
+      elaborated.
+ 
+    * ‘Package body statements’
+ 
+      A scenario appears within the statement sequence of a package body
+      when it is bounded by the region starting from the ‘begin’ keyword
+      of the package body and ending at the ‘end’ keyword of the package
+      body.
+ 
+           package body Client is
+              procedure Proc is
+              begin
+                 ...
+              end Proc;
+           begin
+              Proc;
+           end Client;
+ 
+      In the example above, the call to ‘Proc’ is an elaboration scenario
+      because it appears within the statement sequence of package body
+      ‘Client’.  As a result, the call to ‘Proc’ will be invoked when the
+      body of ‘Client’ is elaborated.
+ 
+ 
+ File: gnat_ugn.info,  Node: Elaboration Order,  Next: Checking the Elaboration Order,  Prev: Elaboration Code,  Up: Elaboration Order Handling in GNAT
+ 
+ 9.2 Elaboration Order
+ =====================
+ 
+ The sequence by which the elaboration code of all units within a
+ partition is executed is referred to as ‘elaboration order’.
+ 
+ Within a single unit, elaboration code is executed in sequential order.
+ 
+           package body Client is
+              Result : ... := Server.Func;
+ 
+              procedure Proc is
+                 package Inst is new Server.Gen;
+              begin
+                 Inst.Eval (Result);
+              end Proc;
+           begin
+              Proc;
+           end Client;
+ 
+ In the example above, the elaboration order within package body ‘Client’
+ is as follows:
+ 
+   1. The object declaration of ‘Result’ is elaborated.
+ 
+         * Function ‘Server.Func’ is invoked.
+ 
+   2. The subprogram body of ‘Proc’ is elaborated.
+ 
+   3. Procedure ‘Proc’ is invoked.
+ 
+         * Generic unit ‘Server.Gen’ is instantiated as ‘Inst’.
+ 
+         * Instance ‘Inst’ is elaborated.
+ 
+         * Procedure ‘Inst.Eval’ is invoked.
+ 
+ The elaboration order of all units within a partition depends on the
+ following factors:
+ 
+    * ‘with’ed units
+ 
+    * parent units
+ 
+    * purity of units
+ 
+    * preelaborability of units
+ 
+    * presence of elaboration-control pragmas
+ 
+    * invocations performed in elaboration code
+ 
+ A program may have several elaboration orders depending on its
+ structure.
+ 
+           package Server is
+              function Func (Index : Integer) return Integer;
+           end Server;
+ 
+           package body Server is
+              Results : array (1 .. 5) of Integer := (1, 2, 3, 4, 5);
+ 
+              function Func (Index : Integer) return Integer is
+              begin
+                 return Results (Index);
+              end Func;
+           end Server;
+ 
+           with Server;
+           package Client is
+              Val : constant Integer := Server.Func (3);
+           end Client;
+ 
+           with Client;
+           procedure Main is begin null; end Main;
+ 
+ The following elaboration order exhibits a fundamental problem referred
+ to as ‘access-before-elaboration’ or simply ‘ABE’.
+ 
+           spec of Server
+           spec of Client
+           body of Server
+           body of Main
+ 
+ The elaboration of ‘Server’’s spec materializes function ‘Func’, making
+ it callable.  The elaboration of ‘Client’’s spec elaborates the
+ declaration of ‘Val’.  This invokes function ‘Server.Func’, however the
+ body of ‘Server.Func’ has not been elaborated yet because ‘Server’’s
+ body comes after ‘Client’’s spec in the elaboration order.  As a result,
+ the value of constant ‘Val’ is now undefined.
+ 
+ Without any guarantees from the language, an undetected ABE problem may
+ hinder proper initialization of data, which in turn may lead to
+ undefined behavior at run time.  To prevent such ABE problems, Ada
+ employs dynamic checks in the same vein as index or null exclusion
+ checks.  A failed ABE check raises exception ‘Program_Error’.
+ 
+ The following elaboration order avoids the ABE problem and the program
+ can be successfully elaborated.
+ 
+           spec of Server
+           body of Server
+           spec of Client
+           body of Main
+ 
+ Ada states that a total elaboration order must exist, but it does not
+ define what this order is.  A compiler is thus tasked with choosing a
+ suitable elaboration order which satisfies the dependencies imposed by
+ ‘with’ clauses, unit categorization, elaboration-control pragmas, and
+ invocations performed in elaboration code.  Ideally an order that avoids
+ ABE problems should be chosen, however a compiler may not always find
+ such an order due to complications with respect to control and data
+ flow.
+ 
+ 
+ File: gnat_ugn.info,  Node: Checking the Elaboration Order,  Next: Controlling the Elaboration Order in Ada,  Prev: Elaboration Order,  Up: Elaboration Order Handling in GNAT
+ 
+ 9.3 Checking the Elaboration Order
+ ==================================
+ 
+ To avoid placing the entire elaboration-order burden on the programmer,
+ Ada provides three lines of defense:
+ 
+    * ‘Static semantics’
+ 
+      Static semantic rules restrict the possible choice of elaboration
+      order.  For instance, if unit Client ‘with’s unit Server, then the
+      spec of Server is always elaborated prior to Client.  The same
+      principle applies to child units - the spec of a parent unit is
+      always elaborated prior to the child unit.
+ 
+    * ‘Dynamic semantics’
+ 
+      Dynamic checks are performed at run time, to ensure that a target
+      is elaborated prior to a scenario that invokes it, thus avoiding
+      ABE problems.  A failed run-time check raises exception
+      ‘Program_Error’.  The following restrictions apply:
+ 
+         - ‘Restrictions on calls’
+ 
+           An entry, operator, or subprogram can be called from
+           elaboration code only when the corresponding body has been
+           elaborated.
+ 
+         - ‘Restrictions on instantiations’
+ 
+           A generic unit can be instantiated by elaboration code only
+           when the corresponding body has been elaborated.
+ 
+         - ‘Restrictions on task activation’
+ 
+           A task can be activated by elaboration code only when the body
+           of the associated task type has been elaborated.
+ 
+      The restrictions above can be summarized by the following rule:
+ 
+      ‘If a target has a body, then this body must be elaborated prior to
+      the scenario that invokes the target.’
+ 
+    * ‘Elaboration control’
+ 
+      Pragmas are provided for the programmer to specify the desired
+      elaboration order.
+ 
+ 
+ File: gnat_ugn.info,  Node: Controlling the Elaboration Order in Ada,  Next: Controlling the Elaboration Order in GNAT,  Prev: Checking the Elaboration Order,  Up: Elaboration Order Handling in GNAT
+ 
+ 9.4 Controlling the Elaboration Order in Ada
+ ============================================
+ 
+ Ada provides several idioms and pragmas to aid the programmer with
+ specifying the desired elaboration order and avoiding ABE problems
+ altogether.
+ 
+    * ‘Packages without a body’
+ 
+      A library package which does not require a completing body does not
+      suffer from ABE problems.
+ 
+           package Pack is
+              generic
+                 type Element is private;
+              package Containers is
+                 type Element_Array is array (1 .. 10) of Element;
+              end Containers;
+           end Pack;
+ 
+      In the example above, package ‘Pack’ does not require a body
+      because it does not contain any constructs which require completion
+      in a body.  As a result, generic ‘Pack.Containers’ can be
+      instantiated without encountering any ABE problems.
+ 
+    * ‘pragma Pure’
+ 
+      Pragma ‘Pure’ places sufficient restrictions on a unit to guarantee
+      that no scenario within the unit can result in an ABE problem.
+ 
+    * ‘pragma Preelaborate’
+ 
+      Pragma ‘Preelaborate’ is slightly less restrictive than pragma
+      ‘Pure’, but still strong enough to prevent ABE problems within a
+      unit.
+ 
+    * ‘pragma Elaborate_Body’
+ 
+      Pragma ‘Elaborate_Body’ requires that the body of a unit is
+      elaborated immediately after its spec.  This restriction guarantees
+      that no client scenario can invoke a server target before the
+      target body has been elaborated because the spec and body are
+      effectively “glued” together.
+ 
+           package Server is
+              pragma Elaborate_Body;
+ 
+              function Func return Integer;
+           end Server;
+ 
+           package body Server is
+              function Func return Integer is
+              begin
+                 ...
+              end Func;
+           end Server;
+ 
+           with Server;
+           package Client is
+              Val : constant Integer := Server.Func;
+           end Client;
+ 
+      In the example above, pragma ‘Elaborate_Body’ guarantees the
+      following elaboration order:
+ 
+           spec of Server
+           body of Server
+           spec of Client
+ 
+      because the spec of ‘Server’ must be elaborated prior to ‘Client’
+      by virtue of the ‘with’ clause, and in addition the body of
+      ‘Server’ must be elaborated immediately after the spec of ‘Server’.
+ 
+      Removing pragma ‘Elaborate_Body’ could result in the following
+      incorrect elaboration order:
+ 
+           spec of Server
+           spec of Client
+           body of Server
+ 
+      where ‘Client’ invokes ‘Server.Func’, but the body of ‘Server.Func’
+      has not been elaborated yet.
+ 
+ The pragmas outlined above allow a server unit to guarantee safe
+ elaboration use by client units.  Thus it is a good rule to mark units
+ as ‘Pure’ or ‘Preelaborate’, and if this is not possible, mark them as
+ ‘Elaborate_Body’.
+ 
+ There are however situations where ‘Pure’, ‘Preelaborate’, and
+ ‘Elaborate_Body’ are not applicable.  Ada provides another set of
+ pragmas for use by client units to help ensure the elaboration safety of
+ server units they depend on.
+ 
+    * ‘pragma Elaborate (Unit)’
+ 
+      Pragma ‘Elaborate’ can be placed in the context clauses of a unit,
+      after a ‘with’ clause.  It guarantees that both the spec and body
+      of its argument will be elaborated prior to the unit with the
+      pragma.  Note that other unrelated units may be elaborated in
+      between the spec and the body.
+ 
+           package Server is
+              function Func return Integer;
+           end Server;
+ 
+           package body Server is
+              function Func return Integer is
+              begin
+                 ...
+              end Func;
+           end Server;
+ 
+           with Server;
+           pragma Elaborate (Server);
+           package Client is
+              Val : constant Integer := Server.Func;
+           end Client;
+ 
+      In the example above, pragma ‘Elaborate’ guarantees the following
+      elaboration order:
+ 
+           spec of Server
+           body of Server
+           spec of Client
+ 
+      Removing pragma ‘Elaborate’ could result in the following incorrect
+      elaboration order:
+ 
+           spec of Server
+           spec of Client
+           body of Server
+ 
+      where ‘Client’ invokes ‘Server.Func’, but the body of ‘Server.Func’
+      has not been elaborated yet.
+ 
+    * ‘pragma Elaborate_All (Unit)’
+ 
+      Pragma ‘Elaborate_All’ is placed in the context clauses of a unit,
+      after a ‘with’ clause.  It guarantees that both the spec and body
+      of its argument will be elaborated prior to the unit with the
+      pragma, as well as all units ‘with’ed by the spec and body of the
+      argument, recursively.  Note that other unrelated units may be
+      elaborated in between the spec and the body.
+ 
+           package Math is
+              function Factorial (Val : Natural) return Natural;
+           end Math;
+ 
+           package body Math is
+              function Factorial (Val : Natural) return Natural is
+              begin
+                 ...;
+              end Factorial;
+           end Math;
+ 
+           package Computer is
+              type Operation_Kind is (None, Op_Factorial);
+ 
+              function Compute
+                (Val : Natural;
+                 Op  : Operation_Kind) return Natural;
+           end Computer;
+ 
+           with Math;
+           package body Computer is
+              function Compute
+                (Val : Natural;
+                 Op  : Operation_Kind) return Natural
+              is
+                 if Op = Op_Factorial then
+                    return Math.Factorial (Val);
+                 end if;
+ 
+                 return 0;
+              end Compute;
+           end Computer;
+ 
+           with Computer;
+           pragma Elaborate_All (Computer);
+           package Client is
+              Val : constant Natural :=
+                      Computer.Compute (123, Computer.Op_Factorial);
+           end Client;
+ 
+      In the example above, pragma ‘Elaborate_All’ can result in the
+      following elaboration order:
+ 
+           spec of Math
+           body of Math
+           spec of Computer
+           body of Computer
+           spec of Client
+ 
+      Note that there are several allowable suborders for the specs and
+      bodies of ‘Math’ and ‘Computer’, but the point is that these specs
+      and bodies will be elaborated prior to ‘Client’.
+ 
+      Removing pragma ‘Elaborate_All’ could result in the following
+      incorrect elaboration order:
+ 
+           spec of Math
+           spec of Computer
+           body of Computer
+           spec of Client
+           body of Math
+ 
+      where ‘Client’ invokes ‘Computer.Compute’, which in turn invokes
+      ‘Math.Factorial’, but the body of ‘Math.Factorial’ has not been
+      elaborated yet.
+ 
+ All pragmas shown above can be summarized by the following rule:
+ 
+ ‘If a client unit elaborates a server target directly or indirectly,
+ then if the server unit requires a body and does not have pragma Pure,
+ Preelaborate, or Elaborate_Body, then the client unit should have pragma
+ Elaborate or Elaborate_All for the server unit.’
+ 
+ If the rule outlined above is not followed, then a program may fall in
+ one of the following states:
+ 
+    * ‘No elaboration order exists’
+ 
+      In this case a compiler must diagnose the situation, and refuse to
+      build an executable program.
+ 
+    * ‘One or more incorrect elaboration orders exist’
+ 
+      In this case a compiler can build an executable program, but
+      ‘Program_Error’ will be raised when the program is run.
+ 
+    * ‘Several elaboration orders exist, some correct, some incorrect’
+ 
+      In this case the programmer has not controlled the elaboration
+      order.  As a result, a compiler may or may not pick one of the
+      correct orders, and the program may or may not raise
+      ‘Program_Error’ when it is run.  This is the worst possible state
+      because the program may fail on another compiler, or even another
+      version of the same compiler.
+ 
+    * ‘One or more correct orders exist’
+ 
+      In this case a compiler can build an executable program, and the
+      program is run successfully.  This state may be guaranteed by
+      following the outlined rules, or may be the result of good program
+      architecture.
+ 
+ Note that one additional advantage of using ‘Elaborate’ and
+ ‘Elaborate_All’ is that the program continues to stay in the last state
+ (one or more correct orders exist) even if maintenance changes the
+ bodies of targets.
+ 
+ 
+ File: gnat_ugn.info,  Node: Controlling the Elaboration Order in GNAT,  Next: Mixing Elaboration Models,  Prev: Controlling the Elaboration Order in Ada,  Up: Elaboration Order Handling in GNAT
+ 
+ 9.5 Controlling the Elaboration Order in GNAT
+ =============================================
+ 
+ In addition to Ada semantics and rules synthesized from them, GNAT
+ offers three elaboration models to aid the programmer with specifying
+ the correct elaboration order and to diagnose elaboration problems.
+ 
+    * ‘Dynamic elaboration model’
+ 
+      This is the most permissive of the three elaboration models and
+      emulates the behavior specified by the Ada Reference Manual.  When
+      the dynamic model is in effect, GNAT makes the following
+      assumptions:
+ 
+         - All code within all units in a partition is considered to be
+           elaboration code.
+ 
+         - Some of the invocations in elaboration code may not take place
+           at run time due to conditional execution.
+ 
+      GNAT performs extensive diagnostics on a unit-by-unit basis for all
+      scenarios that invoke internal targets.  In addition, GNAT
+      generates run-time checks for all external targets and for all
+      scenarios that may exhibit ABE problems.
+ 
+      The elaboration order is obtained by honoring all ‘with’ clauses,
+      purity and preelaborability of units, and elaboration-control
+      pragmas.  The dynamic model attempts to take all invocations in
+      elaboration code into account.  If an invocation leads to a
+      circularity, GNAT ignores the invocation based on the assumptions
+      stated above.  An order obtained using the dynamic model may fail
+      an ABE check at run time when GNAT ignored an invocation.
+ 
+      The dynamic model is enabled with compiler switch ‘-gnatE’.
+ 
+    * ‘Static elaboration model’
+ 
+      This is the middle ground of the three models.  When the static
+      model is in effect, GNAT makes the following assumptions:
+ 
+         - Only code at the library level and in package body statements
+           within all units in a partition is considered to be
+           elaboration code.
+ 
+         - All invocations in elaboration will take place at run time,
+           regardless of conditional execution.
+ 
+      GNAT performs extensive diagnostics on a unit-by-unit basis for all
+      scenarios that invoke internal targets.  In addition, GNAT
+      generates run-time checks for all external targets and for all
+      scenarios that may exhibit ABE problems.
+ 
+      The elaboration order is obtained by honoring all ‘with’ clauses,
+      purity and preelaborability of units, presence of
+      elaboration-control pragmas, and all invocations in elaboration
+      code.  An order obtained using the static model is guaranteed to be
+      ABE problem-free, excluding dispatching calls and
+      access-to-subprogram types.
+ 
+      The static model is the default model in GNAT.
+ 
+    * ‘SPARK elaboration model’
+ 
+      This is the most conservative of the three models and enforces the
+      SPARK rules of elaboration as defined in the SPARK Reference
+      Manual, section 7.7.  The SPARK model is in effect only when a
+      scenario and a target reside in a region subject to ‘SPARK_Mode
+      On’, otherwise the dynamic or static model is in effect.
+ 
+      The SPARK model is enabled with compiler switch ‘-gnatd.v’.
+ 
+    * ‘Legacy elaboration models’
+ 
+      In addition to the three elaboration models outlined above, GNAT
+      provides the following legacy models:
+ 
+         - ‘Legacy elaboration-checking model’ available in pre-18.x
+           versions of GNAT. This model is enabled with compiler switch
+           ‘-gnatH’.
+ 
+         - ‘Legacy elaboration-order model’ available in pre-20.x
+           versions of GNAT. This model is enabled with binder switch
+           ‘-H’.
+ 
+ The dynamic, legacy, and static models can be relaxed using compiler
+ switch ‘-gnatJ’, making them more permissive.  Note that in this mode,
+ GNAT may not diagnose certain elaboration issues or install run-time
+ checks.
+ 
+ 
+ File: gnat_ugn.info,  Node: Mixing Elaboration Models,  Next: ABE Diagnostics,  Prev: Controlling the Elaboration Order in GNAT,  Up: Elaboration Order Handling in GNAT
+ 
+ 9.6 Mixing Elaboration Models
+ =============================
+ 
+ It is possible to mix units compiled with a different elaboration model,
+ however the following rules must be observed:
+ 
+    * A client unit compiled with the dynamic model can only ‘with’ a
+      server unit that meets at least one of the following criteria:
+ 
+         - The server unit is compiled with the dynamic model.
+ 
+         - The server unit is a GNAT implementation unit from the ‘Ada’,
+           ‘GNAT’, ‘Interfaces’, or ‘System’ hierarchies.
+ 
+         - The server unit has pragma ‘Pure’ or ‘Preelaborate’.
+ 
+         - The client unit has an explicit ‘Elaborate_All’ pragma for the
+           server unit.
+ 
+ These rules ensure that elaboration checks are not omitted.  If the
+ rules are violated, the binder emits a warning:
+ 
+           warning: "x.ads" has dynamic elaboration checks and with's
+           warning:   "y.ads" which has static elaboration checks
+ 
+ The warnings can be suppressed by binder switch ‘-ws’.
+ 
+ 
+ File: gnat_ugn.info,  Node: ABE Diagnostics,  Next: SPARK Diagnostics,  Prev: Mixing Elaboration Models,  Up: Elaboration Order Handling in GNAT
+ 
+ 9.7 ABE Diagnostics
+ ===================
+ 
+ GNAT performs extensive diagnostics on a unit-by-unit basis for all
+ scenarios that invoke internal targets, regardless of whether the
+ dynamic, SPARK, or static model is in effect.
+ 
+ Note that GNAT emits warnings rather than hard errors whenever it
+ encounters an elaboration problem.  This is because the elaboration
+ model in effect may be too conservative, or a particular scenario may
+ not be invoked due conditional execution.  The warnings can be
+ suppressed selectively with ‘pragma Warnings (Off)’ or globally with
+ compiler switch ‘-gnatwL’.
+ 
+ A ‘guaranteed ABE’ arises when the body of a target is not elaborated
+ early enough, and causes ‘all’ scenarios that directly invoke the target
+ to fail.
+ 
+           package body Guaranteed_ABE is
+              function ABE return Integer;
+ 
+              Val : constant Integer := ABE;
+ 
+              function ABE return Integer is
+              begin
+                ...
+              end ABE;
+           end Guaranteed_ABE;
+ 
+ In the example above, the elaboration of ‘Guaranteed_ABE’’s body
+ elaborates the declaration of ‘Val’.  This invokes function ‘ABE’,
+ however the body of ‘ABE’ has not been elaborated yet.  GNAT emits the
+ following diagnostic:
+ 
+           4.    Val : constant Integer := ABE;
+                                           |
+              >>> warning: cannot call "ABE" before body seen
+              >>> warning: Program_Error will be raised at run time
+ 
+ A ‘conditional ABE’ arises when the body of a target is not elaborated
+ early enough, and causes ‘some’ scenarios that directly invoke the
+ target to fail.
+ 
+            1. package body Conditional_ABE is
+            2.    procedure Force_Body is null;
+            3.
+            4.    generic
+            5.       with function Func return Integer;
+            6.    package Gen is
+            7.       Val : constant Integer := Func;
+            8.    end Gen;
+            9.
+           10.    function ABE return Integer;
+           11.
+           12.    function Cause_ABE return Boolean is
+           13.       package Inst is new Gen (ABE);
+           14.    begin
+           15.       ...
+           16.    end Cause_ABE;
+           17.
+           18.    Val : constant Boolean := Cause_ABE;
+           19.
+           20.    function ABE return Integer is
+           21.    begin
+           22.       ...
+           23.    end ABE;
+           24.
+           25.    Safe : constant Boolean := Cause_ABE;
+           26. end Conditional_ABE;
+ 
+ In the example above, the elaboration of package body ‘Conditional_ABE’
+ elaborates the declaration of ‘Val’.  This invokes function ‘Cause_ABE’,
+ which instantiates generic unit ‘Gen’ as ‘Inst’.  The elaboration of
+ ‘Inst’ invokes function ‘ABE’, however the body of ‘ABE’ has not been
+ elaborated yet.  GNAT emits the following diagnostic:
+ 
+           13.       package Inst is new Gen (ABE);
+                     |
+               >>> warning: in instantiation at line 7
+               >>> warning: cannot call "ABE" before body seen
+               >>> warning: Program_Error may be raised at run time
+               >>> warning:   body of unit "Conditional_ABE" elaborated
+               >>> warning:   function "Cause_ABE" called at line 18
+               >>> warning:   function "ABE" called at line 7, instance at line 13
+ 
+ Note that the same ABE problem does not occur with the elaboration of
+ declaration ‘Safe’ because the body of function ‘ABE’ has already been
+ elaborated at that point.
+ 
+ 
+ File: gnat_ugn.info,  Node: SPARK Diagnostics,  Next: Elaboration Circularities,  Prev: ABE Diagnostics,  Up: Elaboration Order Handling in GNAT
+ 
+ 9.8 SPARK Diagnostics
+ =====================
+ 
+ GNAT enforces the SPARK rules of elaboration as defined in the SPARK
+ Reference Manual section 7.7 when compiler switch ‘-gnatd.v’ is in
+ effect.  Note that GNAT emits hard errors whenever it encounters a
+ violation of the SPARK rules.
+ 
+           1. with Server;
+           2. package body SPARK_Diagnostics with SPARK_Mode is
+           3.    Val : constant Integer := Server.Func;
+                                                 |
+              >>> call to "Func" during elaboration in SPARK
+              >>> unit "SPARK_Diagnostics" requires pragma "Elaborate_All" for "Server"
+              >>>   body of unit "SPARK_Model" elaborated
+              >>>   function "Func" called at line 3
+ 
+           4. end SPARK_Diagnostics;
+ 
+ 
+ File: gnat_ugn.info,  Node: Elaboration Circularities,  Next: Resolving Elaboration Circularities,  Prev: SPARK Diagnostics,  Up: Elaboration Order Handling in GNAT
+ 
+ 9.9 Elaboration Circularities
+ =============================
+ 
+ An ‘elaboration circularity’ occurs whenever the elaboration of a set of
+ units enters a deadlocked state, where each unit is waiting for another
+ unit to be elaborated.  This situation may be the result of improper use
+ of ‘with’ clauses, elaboration-control pragmas, or invocations in
+ elaboration code.
+ 
+ The following example exhibits an elaboration circularity.
+ 
+           with B; pragma Elaborate (B);
+           package A is
+           end A;
+ 
+           package B is
+              procedure Force_Body;
+           end B;
+ 
+           with C;
+           package body B is
+              procedure Force_Body is null;
+ 
+              Elab : constant Integer := C.Func;
+           end B;
+ 
+           package C is
+              function Func return Integer;
+           end C;
+ 
+           with A;
+           package body C is
+              function Func return Integer is
+              begin
+                 ...
+              end Func;
+           end C;
+ 
+ The binder emits the following diagnostic:
+ 
+           error: Elaboration circularity detected
+           info:
+           info:    Reason:
+           info:
+           info:      unit "a (spec)" depends on its own elaboration
+           info:
+           info:    Circularity:
+           info:
+           info:      unit "a (spec)" has with clause and pragma Elaborate for unit "b (spec)"
+           info:      unit "b (body)" is in the closure of pragma Elaborate
+           info:      unit "b (body)" invokes a construct of unit "c (body)" at elaboration time
+           info:      unit "c (body)" has with clause for unit "a (spec)"
+           info:
+           info:    Suggestions:
+           info:
+           info:      remove pragma Elaborate for unit "b (body)" in unit "a (spec)"
+           info:      use the dynamic elaboration model (compiler switch -gnatE)
+ 
+ The diagnostic consist of the following sections:
+ 
+    * Reason
+ 
+      This section provides a short explanation describing why the set of
+      units could not be ordered.
+ 
+    * Circularity
+ 
+      This section enumerates the units comprising the deadlocked set,
+      along with their interdependencies.
+ 
+    * Suggestions
+ 
+      This section enumerates various tactics for eliminating the
+      circularity.
+ 
+ 
+ File: gnat_ugn.info,  Node: Resolving Elaboration Circularities,  Next: Elaboration-related Compiler Switches,  Prev: Elaboration Circularities,  Up: Elaboration Order Handling in GNAT
+ 
+ 9.10 Resolving Elaboration Circularities
+ ========================================
+ 
+ The most desirable option from the point of view of long-term
+ maintenance is to rearrange the program so that the elaboration problems
+ are avoided.  One useful technique is to place the elaboration code into
+ separate child packages.  Another is to move some of the initialization
+ code to explicitly invoked subprograms, where the program controls the
+ order of initialization explicitly.  Although this is the most desirable
+ option, it may be impractical and involve too much modification,
+ especially in the case of complex legacy code.
+ 
+ When faced with an elaboration circularity, the programmer should also
+ consider the tactics given in the suggestions section of the circularity
+ diagnostic.  Depending on the units involved in the circularity, their
+ ‘with’ clauses, purity, preelaborability, presence of
+ elaboration-control pragmas and invocations at elaboration time, the
+ binder may suggest one or more of the following tactics to eliminate the
+ circularity:
+ 
+    * Pragma Elaborate elimination
+ 
+           remove pragma Elaborate for unit "..." in unit "..."
+ 
+      This tactic is suggested when the binder has determined that pragma
+      ‘Elaborate’:
+ 
+         - Prevents a set of units from being elaborated.
+ 
+         - The removal of the pragma will not eliminate the semantic
+           effects of the pragma.  In other words, the argument of the
+           pragma will still be elaborated prior to the unit containing
+           the pragma.
+ 
+         - The removal of the pragma will enable the successful ordering
+           of the units.
+ 
+      The programmer should remove the pragma as advised, and rebuild the
+      program.
+ 
+    * Pragma Elaborate_All elimination
+ 
+           remove pragma Elaborate_All for unit "..." in unit "..."
+ 
+      This tactic is suggested when the binder has determined that pragma
+      ‘Elaborate_All’:
+ 
+         - Prevents a set of units from being elaborated.
+ 
+         - The removal of the pragma will not eliminate the semantic
+           effects of the pragma.  In other words, the argument of the
+           pragma along with its ‘with’ closure will still be elaborated
+           prior to the unit containing the pragma.
+ 
+         - The removal of the pragma will enable the successful ordering
+           of the units.
+ 
+      The programmer should remove the pragma as advised, and rebuild the
+      program.
+ 
+    * Pragma Elaborate_All downgrade
+ 
+           change pragma Elaborate_All for unit "..." to Elaborate in unit "..."
+ 
+      This tactic is always suggested with the pragma ‘Elaborate_All’
+      elimination tactic.  It offers a different alternative of
+      guaranteeing that the argument of the pragma will still be
+      elaborated prior to the unit containing the pragma.
+ 
+      The programmer should update the pragma as advised, and rebuild the
+      program.
+ 
+    * Pragma Elaborate_Body elimination
+ 
+           remove pragma Elaborate_Body in unit "..."
+ 
+      This tactic is suggested when the binder has determined that pragma
+      ‘Elaborate_Body’:
+ 
+         - Prevents a set of units from being elaborated.
+ 
+         - The removal of the pragma will enable the successful ordering
+           of the units.
+ 
+      Note that the binder cannot determine whether the pragma is
+      required for other purposes, such as guaranteeing the
+      initialization of a variable declared in the spec by elaboration
+      code in the body.
+ 
+      The programmer should remove the pragma as advised, and rebuild the
+      program.
+ 
+    * Use of pragma Restrictions
+ 
+           use pragma Restrictions (No_Entry_Calls_In_Elaboration_Code)
+ 
+      This tactic is suggested when the binder has determined that a task
+      activation at elaboration time:
+ 
+         - Prevents a set of units from being elaborated.
+ 
+      Note that the binder cannot determine with certainty whether the
+      task will block at elaboration time.
+ 
+      The programmer should create a configuration file, place the pragma
+      within, update the general compilation arguments, and rebuild the
+      program.
+ 
+    * Use of dynamic elaboration model
+ 
+           use the dynamic elaboration model (compiler switch -gnatE)
+ 
+      This tactic is suggested when the binder has determined that an
+      invocation at elaboration time:
+ 
+         - Prevents a set of units from being elaborated.
+ 
+         - The use of the dynamic model will enable the successful
+           ordering of the units.
+ 
+      The programmer has two options:
+ 
+         - Determine the units involved in the invocation using the
+           detailed invocation information, and add compiler switch
+           ‘-gnatE’ to the compilation arguments of selected files only.
+           This approach will yield safer elaboration orders compared to
+           the other option because it will minimize the opportunities
+           presented to the dynamic model for ignoring invocations.
+ 
+         - Add compiler switch ‘-gnatE’ to the general compilation
+           arguments.
+ 
+    * Use of detailed invocation information
+ 
+           use detailed invocation information (compiler switch -gnatd_F)
+ 
+      This tactic is always suggested with the use of the dynamic model
+      tactic.  It causes the circularity section of the circularity
+      diagnostic to describe the flow of elaboration code from a unit to
+      a unit, enumerating all such paths in the process.
+ 
+      The programmer should analyze this information to determine which
+      units should be compiled with the dynamic model.
+ 
+    * Forced-dependency elimination
+ 
+           remove the dependency of unit "..." on unit "..." from the argument of switch -f
+ 
+      This tactic is suggested when the binder has determined that a
+      dependency present in the forced-elaboration-order file indicated
+      by binder switch ‘-f’:
+ 
+         - Prevents a set of units from being elaborated.
+ 
+         - The removal of the dependency will enable the successful
+           ordering of the units.
+ 
+      The programmer should edit the forced-elaboration-order file,
+      remove the dependency, and rebind the program.
+ 
+    * All forced-dependency elimination
+ 
+           remove switch -f
+ 
+      This tactic is suggested in case editing the
+      forced-elaboration-order file is not an option.
+ 
+      The programmer should remove binder switch ‘-f’ from the binder
+      arguments, and rebind.
+ 
+    * Multiple-circularities diagnostic
+ 
+           diagnose all circularities (binder switch -d_C)
+ 
+      By default, the binder will diagnose only the highest-precedence
+      circularity.  If the program contains multiple circularities, the
+      binder will suggest the use of binder switch ‘-d_C’ in order to
+      obtain the diagnostics of all circularities.
+ 
+      The programmer should add binder switch ‘-d_C’ to the binder
+      arguments, and rebind.
+ 
+ If none of the tactics suggested by the binder eliminate the elaboration
+ circularity, the programmer should consider using one of the legacy
+ elaboration models, in the following order:
+ 
+    * Use the pre-20.x legacy elaboration-order model, with binder switch
+      ‘-H’.
+ 
+    * Use both pre-18.x and pre-20.x legacy elaboration models, with
+      compiler switch ‘-gnatH’ and binder switch ‘-H’.
+ 
+    * Use the relaxed static-elaboration model, with compiler switches
+      ‘-gnatH’ ‘-gnatJ’ and binder switch ‘-H’.
+ 
+    * Use the relaxed dynamic-elaboration model, with compiler switches
+      ‘-gnatH’ ‘-gnatJ’ ‘-gnatE’ and binder switch ‘-H’.
+ 
+ 
+ File: gnat_ugn.info,  Node: Elaboration-related Compiler Switches,  Next: Summary of Procedures for Elaboration Control,  Prev: Resolving Elaboration Circularities,  Up: Elaboration Order Handling in GNAT
+ 
+ 9.11 Elaboration-related Compiler Switches
+ ==========================================
+ 
+ GNAT has several switches that affect the elaboration model and
+ consequently the elaboration order chosen by the binder.
+ 
+ ‘-gnatE’
+ 
+      Dynamic elaboration checking mode enabled
+ 
+      When this switch is in effect, GNAT activates the dynamic model.
+ 
+ ‘-gnatel’
+ 
+      Turn on info messages on generated Elaborate[_All] pragmas
+ 
+      This switch is only applicable to the pre-20.x legacy elaboration
+      models.  The post-20.x elaboration model no longer relies on
+      implicitly generated ‘Elaborate’ and ‘Elaborate_All’ pragmas to
+      order units.
+ 
+      When this switch is in effect, GNAT will emit the following
+      supplementary information depending on the elaboration model in
+      effect.
+ 
+         - ‘Dynamic model’
+ 
+           GNAT will indicate missing ‘Elaborate’ and ‘Elaborate_All’
+           pragmas for all library-level scenarios within the partition.
+ 
+         - ‘Static model’
+ 
+           GNAT will indicate all scenarios invoked during elaboration.
+           In addition, it will provide detailed traceback when an
+           implicit ‘Elaborate’ or ‘Elaborate_All’ pragma is generated.
+ 
+         - ‘SPARK model’
+ 
+           GNAT will indicate how an elaboration requirement is met by
+           the context of a unit.  This diagnostic requires compiler
+           switch ‘-gnatd.v’.
+ 
+                1. with Server; pragma Elaborate_All (Server);
+                2. package Client with SPARK_Mode is
+                3.    Val : constant Integer := Server.Func;
+                                                      |
+                   >>> info: call to "Func" during elaboration in SPARK
+                   >>> info: "Elaborate_All" requirement for unit "Server" met by pragma at line 1
+ 
+                4. end Client;
+ 
+ ‘-gnatH’
+ 
+      Legacy elaboration checking mode enabled
+ 
+      When this switch is in effect, GNAT will utilize the pre-18.x
+      elaboration model.
+ 
+ ‘-gnatJ’
+ 
+      Relaxed elaboration checking mode enabled
+ 
+      When this switch is in effect, GNAT will not process certain
+      scenarios, resulting in a more permissive elaboration model.  Note
+      that this may eliminate some diagnostics and run-time checks.
+ 
+ ‘-gnatw.f’
+ 
+      Turn on warnings for suspicious Subp’Access
+ 
+      When this switch is in effect, GNAT will treat ‘'Access’ of an
+      entry, operator, or subprogram as a potential call to the target
+      and issue warnings:
+ 
+            1. package body Attribute_Call is
+            2.    function Func return Integer;
+            3.    type Func_Ptr is access function return Integer;
+            4.
+            5.    Ptr : constant Func_Ptr := Func'Access;
+                                                 |
+               >>> warning: "Access" attribute of "Func" before body seen
+               >>> warning: possible Program_Error on later references
+               >>> warning:   body of unit "Attribute_Call" elaborated
+               >>> warning:   "Access" of "Func" taken at line 5
+ 
+            6.
+            7.    function Func return Integer is
+            8.    begin
+            9.       ...
+           10.    end Func;
+           11. end Attribute_Call;
+ 
+      In the example above, the elaboration of declaration ‘Ptr’ is
+      assigned ‘Func'Access’ before the body of ‘Func’ has been
+      elaborated.
+ 
+ ‘-gnatwl’
+ 
+      Turn on warnings for elaboration problems
+ 
+      When this switch is in effect, GNAT emits diagnostics in the form
+      of warnings concerning various elaboration problems.  The warnings
+      are enabled by default.  The switch is provided in case all
+      warnings are suppressed, but elaboration warnings are still
+      desired.
+ 
+ ‘-gnatwL’
+ 
+      Turn off warnings for elaboration problems
+ 
+      When this switch is in effect, GNAT no longer emits any diagnostics
+      in the form of warnings.  Selective suppression of elaboration
+      problems is possible using ‘pragma Warnings (Off)’.
+ 
+            1. package body Selective_Suppression is
+            2.    function ABE return Integer;
+            3.
+            4.    Val_1 : constant Integer := ABE;
+                                              |
+               >>> warning: cannot call "ABE" before body seen
+               >>> warning: Program_Error will be raised at run time
+ 
+            5.
+            6.    pragma Warnings (Off);
+            7.    Val_2 : constant Integer := ABE;
+            8.    pragma Warnings (On);
+            9.
+           10.    function ABE return Integer is
+           11.    begin
+           12.       ...
+           13.    end ABE;
+           14. end Selective_Suppression;
+ 
+      Note that suppressing elaboration warnings does not eliminate
+      run-time checks.  The example above will still fail at run time
+      with an ABE.
+ 
+ 
+ File: gnat_ugn.info,  Node: Summary of Procedures for Elaboration Control,  Next: Inspecting the Chosen Elaboration Order,  Prev: Elaboration-related Compiler Switches,  Up: Elaboration Order Handling in GNAT
+ 
+ 9.12 Summary of Procedures for Elaboration Control
+ ==================================================
+ 
+ A programmer should first compile the program with the default options,
+ using none of the binder or compiler switches.  If the binder succeeds
+ in finding an elaboration order, then apart from possible cases
+ involving dispatching calls and access-to-subprogram types, the program
+ is free of elaboration errors.
+ 
+ If it is important for the program to be portable to compilers other
+ than GNAT, then the programmer should use compiler switch ‘-gnatel’ and
+ consider the messages about missing or implicitly created ‘Elaborate’
+ and ‘Elaborate_All’ pragmas.
+ 
+ If the binder reports an elaboration circularity, the programmer has
+ several options:
+ 
+    * Ensure that elaboration warnings are enabled.  This will allow the
+      static model to output trace information of elaboration issues.
+      The trace information could shed light on previously unforeseen
+      dependencies, as well as their origins.  Elaboration warnings are
+      enabled with compiler switch ‘-gnatwl’.
+ 
+    * Cosider the tactics given in the suggestions section of the
+      circularity diagnostic.
+ 
+    * If none of the steps outlined above resolve the circularity, use a
+      more permissive elaboration model, in the following order:
+ 
+         - Use the pre-20.x legacy elaboration-order model, with binder
+           switch ‘-H’.
+ 
+         - Use both pre-18.x and pre-20.x legacy elaboration models, with
+           compiler switch ‘-gnatH’ and binder switch ‘-H’.
+ 
+         - Use the relaxed static elaboration model, with compiler
+           switches ‘-gnatH’ ‘-gnatJ’ and binder switch ‘-H’.
+ 
+         - Use the relaxed dynamic elaboration model, with compiler
+           switches ‘-gnatH’ ‘-gnatJ’ ‘-gnatE’ and binder switch ‘-H’.
+ 
+ 
+ File: gnat_ugn.info,  Node: Inspecting the Chosen Elaboration Order,  Prev: Summary of Procedures for Elaboration Control,  Up: Elaboration Order Handling in GNAT
+ 
+ 9.13 Inspecting the Chosen Elaboration Order
+ ============================================
+ 
+ To see the elaboration order chosen by the binder, inspect the contents
+ of file ‘b~xxx.adb’.  On certain targets, this file appears as
+ ‘b_xxx.adb’.  The elaboration order appears as a sequence of calls to
+ ‘Elab_Body’ and ‘Elab_Spec’, interspersed with assignments to ‘Exxx’
+ which indicates that a particular unit is elaborated.  For example:
+ 
+           System.Soft_Links'Elab_Body;
+           E14 := True;
+           System.Secondary_Stack'Elab_Body;
+           E18 := True;
+           System.Exception_Table'Elab_Body;
+           E24 := True;
+           Ada.Io_Exceptions'Elab_Spec;
+           E67 := True;
+           Ada.Tags'Elab_Spec;
+           Ada.Streams'Elab_Spec;
+           E43 := True;
+           Interfaces.C'Elab_Spec;
+           E69 := True;
+           System.Finalization_Root'Elab_Spec;
+           E60 := True;
+           System.Os_Lib'Elab_Body;
+           E71 := True;
+           System.Finalization_Implementation'Elab_Spec;
+           System.Finalization_Implementation'Elab_Body;
+           E62 := True;
+           Ada.Finalization'Elab_Spec;
+           E58 := True;
+           Ada.Finalization.List_Controller'Elab_Spec;
+           E76 := True;
+           System.File_Control_Block'Elab_Spec;
+           E74 := True;
+           System.File_Io'Elab_Body;
+           E56 := True;
+           Ada.Tags'Elab_Body;
+           E45 := True;
+           Ada.Text_Io'Elab_Spec;
+           Ada.Text_Io'Elab_Body;
+           E07 := True;
+ 
+ Note also binder switch ‘-l’, which outputs the chosen elaboration order
+ and provides a more readable form of the above:
+ 
+           ada (spec)
+           interfaces (spec)
+           system (spec)
+           system.case_util (spec)
+           system.case_util (body)
+           system.concat_2 (spec)
+           system.concat_2 (body)
+           system.concat_3 (spec)
+           system.concat_3 (body)
+           system.htable (spec)
+           system.parameters (spec)
+           system.parameters (body)
+           system.crtl (spec)
+           interfaces.c_streams (spec)
+           interfaces.c_streams (body)
+           system.restrictions (spec)
+           system.restrictions (body)
+           system.standard_library (spec)
+           system.exceptions (spec)
+           system.exceptions (body)
+           system.storage_elements (spec)
+           system.storage_elements (body)
+           system.secondary_stack (spec)
+           system.stack_checking (spec)
+           system.stack_checking (body)
+           system.string_hash (spec)
+           system.string_hash (body)
+           system.htable (body)
+           system.strings (spec)
+           system.strings (body)
+           system.traceback (spec)
+           system.traceback (body)
+           system.traceback_entries (spec)
+           system.traceback_entries (body)
+           ada.exceptions (spec)
+           ada.exceptions.last_chance_handler (spec)
+           system.soft_links (spec)
+           system.soft_links (body)
+           ada.exceptions.last_chance_handler (body)
+           system.secondary_stack (body)
+           system.exception_table (spec)
+           system.exception_table (body)
+           ada.io_exceptions (spec)
+           ada.tags (spec)
+           ada.streams (spec)
+           interfaces.c (spec)
+           interfaces.c (body)
+           system.finalization_root (spec)
+           system.finalization_root (body)
+           system.memory (spec)
+           system.memory (body)
+           system.standard_library (body)
+           system.os_lib (spec)
+           system.os_lib (body)
+           system.unsigned_types (spec)
+           system.stream_attributes (spec)
+           system.stream_attributes (body)
+           system.finalization_implementation (spec)
+           system.finalization_implementation (body)
+           ada.finalization (spec)
+           ada.finalization (body)
+           ada.finalization.list_controller (spec)
+           ada.finalization.list_controller (body)
+           system.file_control_block (spec)
+           system.file_io (spec)
+           system.file_io (body)
+           system.val_uns (spec)
+           system.val_util (spec)
+           system.val_util (body)
+           system.val_uns (body)
+           system.wch_con (spec)
+           system.wch_con (body)
+           system.wch_cnv (spec)
+           system.wch_jis (spec)
+           system.wch_jis (body)
+           system.wch_cnv (body)
+           system.wch_stw (spec)
+           system.wch_stw (body)
+           ada.tags (body)
+           ada.exceptions (body)
+           ada.text_io (spec)
+           ada.text_io (body)
+           text_io (spec)
+           gdbstr (body)
+ 
+ 
+ File: gnat_ugn.info,  Node: Inline Assembler,  Next: GNU Free Documentation License,  Prev: Elaboration Order Handling in GNAT,  Up: Top
+ 
+ 10 Inline Assembler
+ *******************
+ 
+ If you need to write low-level software that interacts directly with the
+ hardware, Ada provides two ways to incorporate assembly language code
+ into your program.  First, you can import and invoke external routines
+ written in assembly language, an Ada feature fully supported by GNAT.
+ However, for small sections of code it may be simpler or more efficient
+ to include assembly language statements directly in your Ada source
+ program, using the facilities of the implementation-defined package
+ ‘System.Machine_Code’, which incorporates the gcc Inline Assembler.  The
+ Inline Assembler approach offers a number of advantages, including the
+ following:
+ 
+    * No need to use non-Ada tools
+ 
+    * Consistent interface over different targets
+ 
+    * Automatic usage of the proper calling conventions
+ 
+    * Access to Ada constants and variables
+ 
+    * Definition of intrinsic routines
+ 
+    * Possibility of inlining a subprogram comprising assembler code
+ 
+    * Code optimizer can take Inline Assembler code into account
+ 
+ This appendix presents a series of examples to show you how to use the
+ Inline Assembler.  Although it focuses on the Intel x86, the general
+ approach applies also to other processors.  It is assumed that you are
+ familiar with Ada and with assembly language programming.
+ 
+ * Menu:
+ 
+ * Basic Assembler Syntax::
+ * A Simple Example of Inline Assembler::
+ * Output Variables in Inline Assembler::
+ * Input Variables in Inline Assembler::
+ * Inlining Inline Assembler Code::
+ * Other Asm Functionality::
+ 
+ 
+ File: gnat_ugn.info,  Node: Basic Assembler Syntax,  Next: A Simple Example of Inline Assembler,  Up: Inline Assembler
+ 
+ 10.1 Basic Assembler Syntax
+ ===========================
+ 
+ The assembler used by GNAT and gcc is based not on the Intel assembly
+ language, but rather on a language that descends from the AT&T Unix
+ assembler ‘as’ (and which is often referred to as ‘AT&T syntax’).  The
+ following table summarizes the main features of ‘as’ syntax and points
+ out the differences from the Intel conventions.  See the gcc ‘as’ and
+ ‘gas’ (an ‘as’ macro pre-processor) documentation for further
+ information.
+ 
+      ‘Register names’ 
+           gcc / ‘as’: Prefix with ‘%’; for example ‘%eax’ 
+           Intel: No extra punctuation; for example ‘eax’ 
+ 
+      ‘Immediate operand’ 
+           gcc / ‘as’: Prefix with ‘$’; for example ‘$4’ 
+           Intel: No extra punctuation; for example ‘4’ 
+ 
+      ‘Address’ 
+           gcc / ‘as’: Prefix with ‘$’; for example ‘$loc’ 
+           Intel: No extra punctuation; for example ‘loc’ 
+ 
+      ‘Memory contents’ 
+           gcc / ‘as’: No extra punctuation; for example ‘loc’ 
+           Intel: Square brackets; for example ‘[loc]’ 
+ 
+      ‘Register contents’ 
+           gcc / ‘as’: Parentheses; for example ‘(%eax)’ 
+           Intel: Square brackets; for example ‘[eax]’ 
+ 
+      ‘Hexadecimal numbers’ 
+           gcc / ‘as’: Leading ‘0x’ (C language syntax); for example ‘0xA0’ 
+           Intel: Trailing ‘h’; for example ‘A0h’ 
+ 
+      ‘Operand size’ 
+           gcc / ‘as’: Explicit in op code; for example ‘movw’ to move a 16-bit word 
+           Intel: Implicit, deduced by assembler; for example ‘mov’ 
+ 
+      ‘Instruction repetition’ 
+           gcc / ‘as’: Split into two lines; for example 
+                ‘rep’ 
+                ‘stosl’ 
+           Intel: Keep on one line; for example ‘rep stosl’ 
+ 
+      ‘Order of operands’ 
+           gcc / ‘as’: Source first; for example ‘movw $4, %eax’ 
+           Intel: Destination first; for example ‘mov eax, 4’ 
+ 
+ 
+ File: gnat_ugn.info,  Node: A Simple Example of Inline Assembler,  Next: Output Variables in Inline Assembler,  Prev: Basic Assembler Syntax,  Up: Inline Assembler
+ 
+ 10.2 A Simple Example of Inline Assembler
+ =========================================
+ 
+ The following example will generate a single assembly language
+ statement, ‘nop’, which does nothing.  Despite its lack of run-time
+ effect, the example will be useful in illustrating the basics of the
+ Inline Assembler facility.
+ 
+           with System.Machine_Code; use System.Machine_Code;
+           procedure Nothing is
+           begin
+              Asm ("nop");
+           end Nothing;
+ 
+ ‘Asm’ is a procedure declared in package ‘System.Machine_Code’; here it
+ takes one parameter, a ‘template string’ that must be a static
+ expression and that will form the generated instruction.  ‘Asm’ may be
+ regarded as a compile-time procedure that parses the template string and
+ additional parameters (none here), from which it generates a sequence of
+ assembly language instructions.
+ 
+ The examples in this chapter will illustrate several of the forms for
+ invoking ‘Asm’; a complete specification of the syntax is found in the
+ ‘Machine_Code_Insertions’ section of the ‘GNAT Reference Manual’.
+ 
+ Under the standard GNAT conventions, the ‘Nothing’ procedure should be
+ in a file named ‘nothing.adb’.  You can build the executable in the
+ usual way:
+ 
+           $ gnatmake nothing
+ 
+ However, the interesting aspect of this example is not its run-time
+ behavior but rather the generated assembly code.  To see this output,
+ invoke the compiler as follows:
+ 
+           $ gcc -c -S -fomit-frame-pointer -gnatp nothing.adb
+ 
+ where the options are:
+ 
+    * 
+      ‘-c’
+ 
+           compile only (no bind or link)
+ 
+    * 
+      ‘-S’
+ 
+           generate assembler listing
+ 
+    * 
+      ‘-fomit-frame-pointer’
+ 
+           do not set up separate stack frames
+ 
+    * 
+      ‘-gnatp’
+ 
+           do not add runtime checks
+ 
+ This gives a human-readable assembler version of the code.  The
+ resulting file will have the same name as the Ada source file, but with
+ a ‘.s’ extension.  In our example, the file ‘nothing.s’ has the
+ following contents:
+ 
+           .file "nothing.adb"
+           gcc2_compiled.:
+           ___gnu_compiled_ada:
+           .text
+              .align 4
+           .globl __ada_nothing
+           __ada_nothing:
+           #APP
+              nop
+           #NO_APP
+              jmp L1
+              .align 2,0x90
+           L1:
+              ret
+ 
+ The assembly code you included is clearly indicated by the compiler,
+ between the ‘#APP’ and ‘#NO_APP’ delimiters.  The character before the
+ ‘APP’ and ‘NOAPP’ can differ on different targets.  For example,
+ GNU/Linux uses ‘#APP’ while on NT you will see ‘/APP’.
+ 
+ If you make a mistake in your assembler code (such as using the wrong
+ size modifier, or using a wrong operand for the instruction) GNAT will
+ report this error in a temporary file, which will be deleted when the
+ compilation is finished.  Generating an assembler file will help in such
+ cases, since you can assemble this file separately using the ‘as’
+ assembler that comes with gcc.
+ 
+ Assembling the file using the command
+ 
+           $ as nothing.s
+ 
+ will give you error messages whose lines correspond to the assembler
+ input file, so you can easily find and correct any mistakes you made.
+ If there are no errors, ‘as’ will generate an object file ‘nothing.out’.
+ 
+ 
+ File: gnat_ugn.info,  Node: Output Variables in Inline Assembler,  Next: Input Variables in Inline Assembler,  Prev: A Simple Example of Inline Assembler,  Up: Inline Assembler
+ 
+ 10.3 Output Variables in Inline Assembler
+ =========================================
+ 
+ The examples in this section, showing how to access the processor flags,
+ illustrate how to specify the destination operands for assembly language
+ statements.
+ 
+           with Interfaces; use Interfaces;
+           with Ada.Text_IO; use Ada.Text_IO;
+           with System.Machine_Code; use System.Machine_Code;
+           procedure Get_Flags is
+              Flags : Unsigned_32;
+              use ASCII;
+           begin
+              Asm ("pushfl"          & LF & HT & -- push flags on stack
+                   "popl %%eax"      & LF & HT & -- load eax with flags
+                   "movl %%eax, %0",             -- store flags in variable
+                   Outputs => Unsigned_32'Asm_Output ("=g", Flags));
+              Put_Line ("Flags register:" & Flags'Img);
+           end Get_Flags;
+ 
+ In order to have a nicely aligned assembly listing, we have separated
+ multiple assembler statements in the Asm template string with linefeed
+ (ASCII.LF) and horizontal tab (ASCII.HT) characters.  The resulting
+ section of the assembly output file is:
+ 
+           #APP
+              pushfl
+              popl %eax
+              movl %eax, -40(%ebp)
+           #NO_APP
+ 
+ It would have been legal to write the Asm invocation as:
+ 
+           Asm ("pushfl popl %%eax movl %%eax, %0")
+ 
+ but in the generated assembler file, this would come out as:
+ 
+           #APP
+              pushfl popl %eax movl %eax, -40(%ebp)
+           #NO_APP
+ 
+ which is not so convenient for the human reader.
+ 
+ We use Ada comments at the end of each line to explain what the
+ assembler instructions actually do.  This is a useful convention.
+ 
+ When writing Inline Assembler instructions, you need to precede each
+ register and variable name with a percent sign.  Since the assembler
+ already requires a percent sign at the beginning of a register name, you
+ need two consecutive percent signs for such names in the Asm template
+ string, thus ‘%%eax’.  In the generated assembly code, one of the
+ percent signs will be stripped off.
+ 
+ Names such as ‘%0’, ‘%1’, ‘%2’, etc., denote input or output variables:
+ operands you later define using ‘Input’ or ‘Output’ parameters to ‘Asm’.
+ An output variable is illustrated in the third statement in the Asm
+ template string:
+ 
+           movl %%eax, %0
+ 
+ The intent is to store the contents of the eax register in a variable
+ that can be accessed in Ada.  Simply writing ‘movl %%eax, Flags’ would
+ not necessarily work, since the compiler might optimize by using a
+ register to hold Flags, and the expansion of the ‘movl’ instruction
+ would not be aware of this optimization.  The solution is not to store
+ the result directly but rather to advise the compiler to choose the
+ correct operand form; that is the purpose of the ‘%0’ output variable.
+ 
+ Information about the output variable is supplied in the ‘Outputs’
+ parameter to ‘Asm’:
+ 
+           Outputs => Unsigned_32'Asm_Output ("=g", Flags));
+ 
+ The output is defined by the ‘Asm_Output’ attribute of the target type;
+ the general format is
+ 
+           Type'Asm_Output (constraint_string, variable_name)
+ 
+ The constraint string directs the compiler how to store/access the
+ associated variable.  In the example
+ 
+           Unsigned_32'Asm_Output ("=m", Flags);
+ 
+ the ‘"m"’ (memory) constraint tells the compiler that the variable
+ ‘Flags’ should be stored in a memory variable, thus preventing the
+ optimizer from keeping it in a register.  In contrast,
+ 
+           Unsigned_32'Asm_Output ("=r", Flags);
+ 
+ uses the ‘"r"’ (register) constraint, telling the compiler to store the
+ variable in a register.
+ 
+ If the constraint is preceded by the equal character ‘=’, it tells the
+ compiler that the variable will be used to store data into it.
+ 
+ In the ‘Get_Flags’ example, we used the ‘"g"’ (global) constraint,
+ allowing the optimizer to choose whatever it deems best.
+ 
+ There are a fairly large number of constraints, but the ones that are
+ most useful (for the Intel x86 processor) are the following:
+ 
+      ‘=’        output constraint
+                 
+                 
+      ‘g’        global (i.e., can be stored anywhere)
+                 
+                 
+      ‘m’        in memory
+                 
+                 
+      ‘I’        a constant
+                 
+                 
+      ‘a’        use eax
+                 
+                 
+      ‘b’        use ebx
+                 
+                 
+      ‘c’        use ecx
+                 
+                 
+      ‘d’        use edx
+                 
+                 
+      ‘S’        use esi
+                 
+                 
+      ‘D’        use edi
+                 
+                 
+      ‘r’        use one of eax, ebx, ecx or edx
+                 
+                 
+      ‘q’        use one of eax, ebx, ecx, edx, esi or edi
+                 
+ 
+ The full set of constraints is described in the gcc and ‘as’
+ documentation; note that it is possible to combine certain constraints
+ in one constraint string.
+ 
+ You specify the association of an output variable with an assembler
+ operand through the ‘%N’ notation, where ‘n’ is a non-negative integer.
+ Thus in
+ 
+           Asm ("pushfl"          & LF & HT & -- push flags on stack
+                "popl %%eax"      & LF & HT & -- load eax with flags
+                "movl %%eax, %0",             -- store flags in variable
+                Outputs => Unsigned_32'Asm_Output ("=g", Flags));
+ 
+ ‘%0’ will be replaced in the expanded code by the appropriate operand,
+ whatever the compiler decided for the ‘Flags’ variable.
+ 
+ In general, you may have any number of output variables:
+ 
+    * Count the operands starting at 0; thus ‘%0’, ‘%1’, etc.
+ 
+    * Specify the ‘Outputs’ parameter as a parenthesized comma-separated
+      list of ‘Asm_Output’ attributes
+ 
+ For example:
+ 
+           Asm ("movl %%eax, %0" & LF & HT &
+                "movl %%ebx, %1" & LF & HT &
+                "movl %%ecx, %2",
+                Outputs => (Unsigned_32'Asm_Output ("=g", Var_A),   --  %0 = Var_A
+                            Unsigned_32'Asm_Output ("=g", Var_B),   --  %1 = Var_B
+                            Unsigned_32'Asm_Output ("=g", Var_C))); --  %2 = Var_C
+ 
+ where ‘Var_A’, ‘Var_B’, and ‘Var_C’ are variables in the Ada program.
+ 
+ As a variation on the ‘Get_Flags’ example, we can use the constraints
+ string to direct the compiler to store the eax register into the ‘Flags’
+ variable, instead of including the store instruction explicitly in the
+ ‘Asm’ template string:
+ 
+           with Interfaces; use Interfaces;
+           with Ada.Text_IO; use Ada.Text_IO;
+           with System.Machine_Code; use System.Machine_Code;
+           procedure Get_Flags_2 is
+              Flags : Unsigned_32;
+              use ASCII;
+           begin
+              Asm ("pushfl"      & LF & HT & -- push flags on stack
+                   "popl %%eax",             -- save flags in eax
+                   Outputs => Unsigned_32'Asm_Output ("=a", Flags));
+              Put_Line ("Flags register:" & Flags'Img);
+           end Get_Flags_2;
+ 
+ The ‘"a"’ constraint tells the compiler that the ‘Flags’ variable will
+ come from the eax register.  Here is the resulting code:
+ 
+           #APP
+              pushfl
+              popl %eax
+           #NO_APP
+              movl %eax,-40(%ebp)
+ 
+ The compiler generated the store of eax into Flags after expanding the
+ assembler code.
+ 
+ Actually, there was no need to pop the flags into the eax register; more
+ simply, we could just pop the flags directly into the program variable:
+ 
+           with Interfaces; use Interfaces;
+           with Ada.Text_IO; use Ada.Text_IO;
+           with System.Machine_Code; use System.Machine_Code;
+           procedure Get_Flags_3 is
+              Flags : Unsigned_32;
+              use ASCII;
+           begin
+              Asm ("pushfl"  & LF & HT & -- push flags on stack
+                   "pop %0",             -- save flags in Flags
+                   Outputs => Unsigned_32'Asm_Output ("=g", Flags));
+              Put_Line ("Flags register:" & Flags'Img);
+           end Get_Flags_3;
+ 
+ 
+ File: gnat_ugn.info,  Node: Input Variables in Inline Assembler,  Next: Inlining Inline Assembler Code,  Prev: Output Variables in Inline Assembler,  Up: Inline Assembler
+ 
+ 10.4 Input Variables in Inline Assembler
+ ========================================
+ 
+ The example in this section illustrates how to specify the source
+ operands for assembly language statements.  The program simply
+ increments its input value by 1:
+ 
+           with Interfaces; use Interfaces;
+           with Ada.Text_IO; use Ada.Text_IO;
+           with System.Machine_Code; use System.Machine_Code;
+           procedure Increment is
+ 
+              function Incr (Value : Unsigned_32) return Unsigned_32 is
+                 Result : Unsigned_32;
+              begin
+                 Asm ("incl %0",
+                      Outputs => Unsigned_32'Asm_Output ("=a", Result),
+                      Inputs  => Unsigned_32'Asm_Input ("a", Value));
+                 return Result;
+              end Incr;
+ 
+              Value : Unsigned_32;
+ 
+           begin
+              Value := 5;
+              Put_Line ("Value before is" & Value'Img);
+              Value := Incr (Value);
+             Put_Line ("Value after is" & Value'Img);
+           end Increment;
+ 
+ The ‘Outputs’ parameter to ‘Asm’ specifies that the result will be in
+ the eax register and that it is to be stored in the ‘Result’ variable.
+ 
+ The ‘Inputs’ parameter looks much like the ‘Outputs’ parameter, but with
+ an ‘Asm_Input’ attribute.  The ‘"="’ constraint, indicating an output
+ value, is not present.
+ 
+ You can have multiple input variables, in the same way that you can have
+ more than one output variable.
+ 
+ The parameter count (%0, %1) etc, still starts at the first output
+ statement, and continues with the input statements.
+ 
+ Just as the ‘Outputs’ parameter causes the register to be stored into
+ the target variable after execution of the assembler statements, so does
+ the ‘Inputs’ parameter cause its variable to be loaded into the register
+ before execution of the assembler statements.
+ 
+ Thus the effect of the ‘Asm’ invocation is:
+ 
+    * load the 32-bit value of ‘Value’ into eax
+ 
+    * execute the ‘incl %eax’ instruction
+ 
+    * store the contents of eax into the ‘Result’ variable
+ 
+ The resulting assembler file (with ‘-O2’ optimization) contains:
+ 
+           _increment__incr.1:
+              subl $4,%esp
+              movl 8(%esp),%eax
+           #APP
+              incl %eax
+           #NO_APP
+              movl %eax,%edx
+              movl %ecx,(%esp)
+              addl $4,%esp
+              ret
+ 
+ 
+ File: gnat_ugn.info,  Node: Inlining Inline Assembler Code,  Next: Other Asm Functionality,  Prev: Input Variables in Inline Assembler,  Up: Inline Assembler
+ 
+ 10.5 Inlining Inline Assembler Code
+ ===================================
+ 
+ For a short subprogram such as the ‘Incr’ function in the previous
+ section, the overhead of the call and return (creating / deleting the
+ stack frame) can be significant, compared to the amount of code in the
+ subprogram body.  A solution is to apply Ada’s ‘Inline’ pragma to the
+ subprogram, which directs the compiler to expand invocations of the
+ subprogram at the point(s) of call, instead of setting up a stack frame
+ for out-of-line calls.  Here is the resulting program:
+ 
+           with Interfaces; use Interfaces;
+           with Ada.Text_IO; use Ada.Text_IO;
+           with System.Machine_Code; use System.Machine_Code;
+           procedure Increment_2 is
+ 
+              function Incr (Value : Unsigned_32) return Unsigned_32 is
+                 Result : Unsigned_32;
+              begin
+                 Asm ("incl %0",
+                      Outputs => Unsigned_32'Asm_Output ("=a", Result),
+                      Inputs  => Unsigned_32'Asm_Input ("a", Value));
+                 return Result;
+              end Incr;
+              pragma Inline (Increment);
+ 
+              Value : Unsigned_32;
+ 
+           begin
+              Value := 5;
+              Put_Line ("Value before is" & Value'Img);
+              Value := Increment (Value);
+              Put_Line ("Value after is" & Value'Img);
+           end Increment_2;
+ 
+ Compile the program with both optimization (‘-O2’) and inlining
+ (‘-gnatn’) enabled.
+ 
+ The ‘Incr’ function is still compiled as usual, but at the point in
+ ‘Increment’ where our function used to be called:
+ 
+           pushl %edi
+           call _increment__incr.1
+ 
+ the code for the function body directly appears:
+ 
+           movl %esi,%eax
+           #APP
+              incl %eax
+           #NO_APP
+              movl %eax,%edx
+ 
+ thus saving the overhead of stack frame setup and an out-of-line call.
+ 
+ 
+ File: gnat_ugn.info,  Node: Other Asm Functionality,  Prev: Inlining Inline Assembler Code,  Up: Inline Assembler
+ 
+ 10.6 Other ‘Asm’ Functionality
+ ==============================
+ 
+ This section describes two important parameters to the ‘Asm’ procedure:
+ ‘Clobber’, which identifies register usage; and ‘Volatile’, which
+ inhibits unwanted optimizations.
+ 
+ * Menu:
+ 
+ * The Clobber Parameter::
+ * The Volatile Parameter::
+ 
+ 
+ File: gnat_ugn.info,  Node: The Clobber Parameter,  Next: The Volatile Parameter,  Up: Other Asm Functionality
+ 
+ 10.6.1 The ‘Clobber’ Parameter
+ ------------------------------
+ 
+ One of the dangers of intermixing assembly language and a compiled
+ language such as Ada is that the compiler needs to be aware of which
+ registers are being used by the assembly code.  In some cases, such as
+ the earlier examples, the constraint string is sufficient to indicate
+ register usage (e.g., ‘"a"’ for the eax register).  But more generally,
+ the compiler needs an explicit identification of the registers that are
+ used by the Inline Assembly statements.
+ 
+ Using a register that the compiler doesn’t know about could be a side
+ effect of an instruction (like ‘mull’ storing its result in both eax and
+ edx).  It can also arise from explicit register usage in your assembly
+ code; for example:
+ 
+           Asm ("movl %0, %%ebx" & LF & HT &
+                "movl %%ebx, %1",
+                Outputs => Unsigned_32'Asm_Output ("=g", Var_Out),
+                Inputs  => Unsigned_32'Asm_Input  ("g", Var_In));
+ 
+ where the compiler (since it does not analyze the ‘Asm’ template string)
+ does not know you are using the ebx register.
+ 
+ In such cases you need to supply the ‘Clobber’ parameter to ‘Asm’, to
+ identify the registers that will be used by your assembly code:
+ 
+           Asm ("movl %0, %%ebx" & LF & HT &
+                "movl %%ebx, %1",
+                Outputs => Unsigned_32'Asm_Output ("=g", Var_Out),
+                Inputs  => Unsigned_32'Asm_Input  ("g", Var_In),
+                Clobber => "ebx");
+ 
+ The Clobber parameter is a static string expression specifying the
+ register(s) you are using.  Note that register names are ‘not’ prefixed
+ by a percent sign.  Also, if more than one register is used then their
+ names are separated by commas; e.g., ‘"eax, ebx"’
+ 
+ The ‘Clobber’ parameter has several additional uses:
+ 
+    * Use ‘register’ name ‘cc’ to indicate that flags might have changed
+ 
+    * Use ‘register’ name ‘memory’ if you changed a memory location
+ 
+ 
+ File: gnat_ugn.info,  Node: The Volatile Parameter,  Prev: The Clobber Parameter,  Up: Other Asm Functionality
+ 
+ 10.6.2 The ‘Volatile’ Parameter
+ -------------------------------
+ 
+ Compiler optimizations in the presence of Inline Assembler may sometimes
+ have unwanted effects.  For example, when an ‘Asm’ invocation with an
+ input variable is inside a loop, the compiler might move the loading of
+ the input variable outside the loop, regarding it as a one-time
+ initialization.
+ 
+ If this effect is not desired, you can disable such optimizations by
+ setting the ‘Volatile’ parameter to ‘True’; for example:
+ 
+           Asm ("movl %0, %%ebx" & LF & HT &
+                "movl %%ebx, %1",
+                Outputs  => Unsigned_32'Asm_Output ("=g", Var_Out),
+                Inputs   => Unsigned_32'Asm_Input  ("g", Var_In),
+                Clobber  => "ebx",
+                Volatile => True);
+ 
+ By default, ‘Volatile’ is set to ‘False’ unless there is no ‘Outputs’
+ parameter.
+ 
+ Although setting ‘Volatile’ to ‘True’ prevents unwanted optimizations,
+ it will also disable other optimizations that might be important for
+ efficiency.  In general, you should set ‘Volatile’ to ‘True’ only if the
+ compiler’s optimizations have created problems.
+ 
+ 
+ File: gnat_ugn.info,  Node: GNU Free Documentation License,  Next: Index,  Prev: Inline Assembler,  Up: Top
+ 
+ 11 GNU Free Documentation License
+ *********************************
+ 
+ Version 1.3, 3 November 2008
+ 
+ Copyright 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc
+ ‘https://fsf.org/’
+ 
+ Everyone is permitted to copy and distribute verbatim copies of this
+ license document, but changing it is not allowed.
+ 
+ ‘Preamble’
+ 
+ The purpose of this License is to make a manual, textbook, or other
+ functional and useful document “free” in the sense of freedom: to assure
+ everyone the effective freedom to copy and redistribute it, with or
+ without modifying it, either commercially or noncommercially.
+ Secondarily, this License preserves for the author and publisher a way
+ to get credit for their work, while not being considered responsible for
+ modifications made by others.
+ 
+ This License is a kind of “copyleft”, which means that derivative works
+ of the document must themselves be free in the same sense.  It
+ complements the GNU General Public License, which is a copyleft license
+ designed for free software.
+ 
+ We have designed this License in order to use it for manuals for free
+ software, because free software needs free documentation: a free program
+ should come with manuals providing the same freedoms that the software
+ does.  But this License is not limited to software manuals; it can be
+ used for any textual work, regardless of subject matter or whether it is
+ published as a printed book.  We recommend this License principally for
+ works whose purpose is instruction or reference.
+ 
+ ‘1.  APPLICABILITY AND DEFINITIONS’
+ 
+ This License applies to any manual or other work, in any medium, that
+ contains a notice placed by the copyright holder saying it can be
+ distributed under the terms of this License.  Such a notice grants a
+ world-wide, royalty-free license, unlimited in duration, to use that
+ work under the conditions stated herein.  The ‘Document’, below, refers
+ to any such manual or work.  Any member of the public is a licensee, and
+ is addressed as “‘you’”.  You accept the license if you copy, modify or
+ distribute the work in a way requiring permission under copyright law.
+ 
+ A “‘Modified Version’” of the Document means any work containing the
+ Document or a portion of it, either copied verbatim, or with
+ modifications and/or translated into another language.
+ 
+ A “‘Secondary Section’” is a named appendix or a front-matter section of
+ the Document that deals exclusively with the relationship of the
+ publishers or authors of the Document to the Document’s overall subject
+ (or to related matters) and contains nothing that could fall directly
+ within that overall subject.  (Thus, if the Document is in part a
+ textbook of mathematics, a Secondary Section may not explain any
+ mathematics.)  The relationship could be a matter of historical
+ connection with the subject or with related matters, or of legal,
+ commercial, philosophical, ethical or political position regarding them.
+ 
+ The “‘Invariant Sections’” are certain Secondary Sections whose titles
+ are designated, as being those of Invariant Sections, in the notice that
+ says that the Document is released under this License.  If a section
+ does not fit the above definition of Secondary then it is not allowed to
+ be designated as Invariant.  The Document may contain zero Invariant
+ Sections.  If the Document does not identify any Invariant Sections then
+ there are none.
+ 
+ The “‘Cover Texts’” are certain short passages of text that are listed,
+ as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+ the Document is released under this License.  A Front-Cover Text may be
+ at most 5 words, and a Back-Cover Text may be at most 25 words.
+ 
+ A “‘Transparent’” copy of the Document means a machine-readable copy,
+ represented in a format whose specification is available to the general
+ public, that is suitable for revising the document straightforwardly
+ with generic text editors or (for images composed of pixels) generic
+ paint programs or (for drawings) some widely available drawing editor,
+ and that is suitable for input to text formatters or for automatic
+ translation to a variety of formats suitable for input to text
+ formatters.  A copy made in an otherwise Transparent file format whose
+ markup, or absence of markup, has been arranged to thwart or discourage
+ subsequent modification by readers is not Transparent.  An image format
+ is not Transparent if used for any substantial amount of text.  A copy
+ that is not “Transparent” is called ‘Opaque’.
+ 
+ Examples of suitable formats for Transparent copies include plain ASCII
+ without markup, Texinfo input format, LaTeX input format, SGML or XML
+ using a publicly available DTD, and standard-conforming simple HTML,
+ PostScript or PDF designed for human modification.  Examples of
+ transparent image formats include PNG, XCF and JPG. Opaque formats
+ include proprietary formats that can be read and edited only by
+ proprietary word processors, SGML or XML for which the DTD and/or
+ processing tools are not generally available, and the machine-generated
+ HTML, PostScript or PDF produced by some word processors for output
+ purposes only.
+ 
+ The “‘Title Page’” means, for a printed book, the title page itself,
+ plus such following pages as are needed to hold, legibly, the material
+ this License requires to appear in the title page.  For works in formats
+ which do not have any title page as such, “Title Page” means the text
+ near the most prominent appearance of the work’s title, preceding the
+ beginning of the body of the text.
+ 
+ The “‘publisher’” means any person or entity that distributes copies of
+ the Document to the public.
+ 
+ A section “‘Entitled XYZ’” means a named subunit of the Document whose
+ title either is precisely XYZ or contains XYZ in parentheses following
+ text that translates XYZ in another language.  (Here XYZ stands for a
+ specific section name mentioned below, such as “‘Acknowledgements’”,
+ “‘Dedications’”, “‘Endorsements’”, or “‘History’”.)  To “‘Preserve the
+ Title’” of such a section when you modify the Document means that it
+ remains a section “Entitled XYZ” according to this definition.
+ 
+ The Document may include Warranty Disclaimers next to the notice which
+ states that this License applies to the Document.  These Warranty
+ Disclaimers are considered to be included by reference in this License,
+ but only as regards disclaiming warranties: any other implication that
+ these Warranty Disclaimers may have is void and has no effect on the
+ meaning of this License.
+ 
+ ‘2.  VERBATIM COPYING’
+ 
+ You may copy and distribute the Document in any medium, either
+ commercially or noncommercially, provided that this License, the
+ copyright notices, and the license notice saying this License applies to
+ the Document are reproduced in all copies, and that you add no other
+ conditions whatsoever to those of this License.  You may not use
+ technical measures to obstruct or control the reading or further copying
+ of the copies you make or distribute.  However, you may accept
+ compensation in exchange for copies.  If you distribute a large enough
+ number of copies you must also follow the conditions in section 3.
+ 
+ You may also lend copies, under the same conditions stated above, and
+ you may publicly display copies.
+ 
+ ‘3.  COPYING IN QUANTITY’
+ 
+ If you publish printed copies (or copies in media that commonly have
+ printed covers) of the Document, numbering more than 100, and the
+ Document’s license notice requires Cover Texts, you must enclose the
+ copies in covers that carry, clearly and legibly, all these Cover Texts:
+ Front-Cover Texts on the front cover, and Back-Cover Texts on the back
+ cover.  Both covers must also clearly and legibly identify you as the
+ publisher of these copies.  The front cover must present the full title
+ with all words of the title equally prominent and visible.  You may add
+ other material on the covers in addition.  Copying with changes limited
+ to the covers, as long as they preserve the title of the Document and
+ satisfy these conditions, can be treated as verbatim copying in other
+ respects.
+ 
+ If the required texts for either cover are too voluminous to fit
+ legibly, you should put the first ones listed (as many as fit
+ reasonably) on the actual cover, and continue the rest onto adjacent
+ pages.
+ 
+ If you publish or distribute Opaque copies of the Document numbering
+ more than 100, you must either include a machine-readable Transparent
+ copy along with each Opaque copy, or state in or with each Opaque copy a
+ computer-network location from which the general network-using public
+ has access to download using public-standard network protocols a
+ complete Transparent copy of the Document, free of added material.  If
+ you use the latter option, you must take reasonably prudent steps, when
+ you begin distribution of Opaque copies in quantity, to ensure that this
+ Transparent copy will remain thus accessible at the stated location
+ until at least one year after the last time you distribute an Opaque
+ copy (directly or through your agents or retailers) of that edition to
+ the public.
+ 
+ It is requested, but not required, that you contact the authors of the
+ Document well before redistributing any large number of copies, to give
+ them a chance to provide you with an updated version of the Document.
+ 
+ ‘4.  MODIFICATIONS’
+ 
+ You may copy and distribute a Modified Version of the Document under the
+ conditions of sections 2 and 3 above, provided that you release the
+ Modified Version under precisely this License, with the Modified Version
+ filling the role of the Document, thus licensing distribution and
+ modification of the Modified Version to whoever possesses a copy of it.
+ In addition, you must do these things in the Modified Version:
+ 
+   A. Use in the Title Page (and on the covers, if any) a title distinct
+      from that of the Document, and from those of previous versions
+      (which should, if there were any, be listed in the History section
+      of the Document).  You may use the same title as a previous version
+      if the original publisher of that version gives permission.
+ 
+   B. List on the Title Page, as authors, one or more persons or entities
+      responsible for authorship of the modifications in the Modified
+      Version, together with at least five of the principal authors of
+      the Document (all of its principal authors, if it has fewer than
+      five), unless they release you from this requirement.
+ 
+   C. State on the Title page the name of the publisher of the Modified
+      Version, as the publisher.
+ 
+   D. Preserve all the copyright notices of the Document.
+ 
+   E. Add an appropriate copyright notice for your modifications adjacent
+      to the other copyright notices.
+ 
+   F. Include, immediately after the copyright notices, a license notice
+      giving the public permission to use the Modified Version under the
+      terms of this License, in the form shown in the Addendum below.
+ 
+   G. Preserve in that license notice the full lists of Invariant
+      Sections and required Cover Texts given in the Document’s license
+      notice.
+ 
+   H. Include an unaltered copy of this License.
+ 
+   I. Preserve the section Entitled “History”, Preserve its Title, and
+      add to it an item stating at least the title, year, new authors,
+      and publisher of the Modified Version as given on the Title Page.
+      If there is no section Entitled “History” in the Document, create
+      one stating the title, year, authors, and publisher of the Document
+      as given on its Title Page, then add an item describing the
+      Modified Version as stated in the previous sentence.
+ 
+   J. Preserve the network location, if any, given in the Document for
+      public access to a Transparent copy of the Document, and likewise
+      the network locations given in the Document for previous versions
+      it was based on.  These may be placed in the “History” section.
+      You may omit a network location for a work that was published at
+      least four years before the Document itself, or if the original
+      publisher of the version it refers to gives permission.
+ 
+   K. For any section Entitled “Acknowledgements” or “Dedications”,
+      Preserve the Title of the section, and preserve in the section all
+      the substance and tone of each of the contributor acknowledgements
+      and/or dedications given therein.
+ 
+   L. Preserve all the Invariant Sections of the Document, unaltered in
+      their text and in their titles.  Section numbers or the equivalent
+      are not considered part of the section titles.
+ 
+   M. Delete any section Entitled “Endorsements”.  Such a section may not
+      be included in the Modified Version.
+ 
+   N. Do not retitle any existing section to be Entitled “Endorsements”
+      or to conflict in title with any Invariant Section.
+ 
+   O. Preserve any Warranty Disclaimers.
+ 
+ If the Modified Version includes new front-matter sections or appendices
+ that qualify as Secondary Sections and contain no material copied from
+ the Document, you may at your option designate some or all of these
+ sections as invariant.  To do this, add their titles to the list of
+ Invariant Sections in the Modified Version’s license notice.  These
+ titles must be distinct from any other section titles.
+ 
+ You may add a section Entitled “Endorsements”, provided it contains
+ nothing but endorsements of your Modified Version by various parties—for
+ example, statements of peer review or that the text has been approved by
+ an organization as the authoritative definition of a standard.
+ 
+ You may add a passage of up to five words as a Front-Cover Text, and a
+ passage of up to 25 words as a Back-Cover Text, to the end of the list
+ of Cover Texts in the Modified Version.  Only one passage of Front-Cover
+ Text and one of Back-Cover Text may be added by (or through arrangements
+ made by) any one entity.  If the Document already includes a cover text
+ for the same cover, previously added by you or by arrangement made by
+ the same entity you are acting on behalf of, you may not add another;
+ but you may replace the old one, on explicit permission from the
+ previous publisher that added the old one.
+ 
+ The author(s) and publisher(s) of the Document do not by this License
+ give permission to use their names for publicity for or to assert or
+ imply endorsement of any Modified Version.
+ 
+ ‘5.  COMBINING DOCUMENTS’
+ 
+ You may combine the Document with other documents released under this
+ License, under the terms defined in section 4 above for modified
+ versions, provided that you include in the combination all of the
+ Invariant Sections of all of the original documents, unmodified, and
+ list them all as Invariant Sections of your combined work in its license
+ notice, and that you preserve all their Warranty Disclaimers.
+ 
+ The combined work need only contain one copy of this License, and
+ multiple identical Invariant Sections may be replaced with a single
+ copy.  If there are multiple Invariant Sections with the same name but
+ different contents, make the title of each such section unique by adding
+ at the end of it, in parentheses, the name of the original author or
+ publisher of that section if known, or else a unique number.  Make the
+ same adjustment to the section titles in the list of Invariant Sections
+ in the license notice of the combined work.
+ 
+ In the combination, you must combine any sections Entitled “History” in
+ the various original documents, forming one section Entitled “History”;
+ likewise combine any sections Entitled “Acknowledgements”, and any
+ sections Entitled “Dedications”.  You must delete all sections Entitled
+ “Endorsements”.
+ 
+ ‘6.  COLLECTIONS OF DOCUMENTS’
+ 
+ You may make a collection consisting of the Document and other documents
+ released under this License, and replace the individual copies of this
+ License in the various documents with a single copy that is included in
+ the collection, provided that you follow the rules of this License for
+ verbatim copying of each of the documents in all other respects.
+ 
+ You may extract a single document from such a collection, and distribute
+ it individually under this License, provided you insert a copy of this
+ License into the extracted document, and follow this License in all
+ other respects regarding verbatim copying of that document.
+ 
+ ‘7.  AGGREGATION WITH INDEPENDENT WORKS’
+ 
+ A compilation of the Document or its derivatives with other separate and
+ independent documents or works, in or on a volume of a storage or
+ distribution medium, is called an “aggregate” if the copyright resulting
+ from the compilation is not used to limit the legal rights of the
+ compilation’s users beyond what the individual works permit.  When the
+ Document is included in an aggregate, this License does not apply to the
+ other works in the aggregate which are not themselves derivative works
+ of the Document.
+ 
+ If the Cover Text requirement of section 3 is applicable to these copies
+ of the Document, then if the Document is less than one half of the
+ entire aggregate, the Document’s Cover Texts may be placed on covers
+ that bracket the Document within the aggregate, or the electronic
+ equivalent of covers if the Document is in electronic form.  Otherwise
+ they must appear on printed covers that bracket the whole aggregate.
+ 
+ ‘8.  TRANSLATION’
+ 
+ Translation is considered a kind of modification, so you may distribute
+ translations of the Document under the terms of section 4.  Replacing
+ Invariant Sections with translations requires special permission from
+ their copyright holders, but you may include translations of some or all
+ Invariant Sections in addition to the original versions of these
+ Invariant Sections.  You may include a translation of this License, and
+ all the license notices in the Document, and any Warranty Disclaimers,
+ provided that you also include the original English version of this
+ License and the original versions of those notices and disclaimers.  In
+ case of a disagreement between the translation and the original version
+ of this License or a notice or disclaimer, the original version will
+ prevail.
+ 
+ If a section in the Document is Entitled “Acknowledgements”,
+ “Dedications”, or “History”, the requirement (section 4) to Preserve its
+ Title (section 1) will typically require changing the actual title.
+ 
+ ‘9.  TERMINATION’
+ 
+ You may not copy, modify, sublicense, or distribute the Document except
+ as expressly provided under this License.  Any attempt otherwise to
+ copy, modify, sublicense, or distribute it is void, and will
+ automatically terminate your rights under this License.
+ 
+ However, if you cease all violation of this License, then your license
+ from a particular copyright holder is reinstated (a) provisionally,
+ unless and until the copyright holder explicitly and finally terminates
+ your license, and (b) permanently, if the copyright holder fails to
+ notify you of the violation by some reasonable means prior to 60 days
+ after the cessation.
+ 
+ Moreover, your license from a particular copyright holder is reinstated
+ permanently if the copyright holder notifies you of the violation by
+ some reasonable means, this is the first time you have received notice
+ of violation of this License (for any work) from that copyright holder,
+ and you cure the violation prior to 30 days after your receipt of the
+ notice.
+ 
+ Termination of your rights under this section does not terminate the
+ licenses of parties who have received copies or rights from you under
+ this License.  If your rights have been terminated and not permanently
+ reinstated, receipt of a copy of some or all of the same material does
+ not give you any rights to use it.
+ 
+ ‘10.  FUTURE REVISIONS OF THIS LICENSE’
+ 
+ The Free Software Foundation may publish new, revised versions of the
+ GNU Free Documentation License from time to time.  Such new versions
+ will be similar in spirit to the present version, but may differ in
+ detail to address new problems or concerns.  See
+ ‘https://www.gnu.org/copyleft/’.
+ 
+ Each version of the License is given a distinguishing version number.
+ If the Document specifies that a particular numbered version of this
+ License “or any later version” applies to it, you have the option of
+ following the terms and conditions either of that specified version or
+ of any later version that has been published (not as a draft) by the
+ Free Software Foundation.  If the Document does not specify a version
+ number of this License, you may choose any version ever published (not
+ as a draft) by the Free Software Foundation.  If the Document specifies
+ that a proxy can decide which future versions of this License can be
+ used, that proxy’s public statement of acceptance of a version
+ permanently authorizes you to choose that version for the Document.
+ 
+ ‘11.  RELICENSING’
+ 
+ “Massive Multiauthor Collaboration Site” (or “MMC Site”) means any World
+ Wide Web server that publishes copyrightable works and also provides
+ prominent facilities for anybody to edit those works.  A public wiki
+ that anybody can edit is an example of such a server.  A “Massive
+ Multiauthor Collaboration” (or “MMC”) contained in the site means any
+ set of copyrightable works thus published on the MMC site.
+ 
+ “CC-BY-SA” means the Creative Commons Attribution-Share Alike 3.0
+ license published by Creative Commons Corporation, a not-for-profit
+ corporation with a principal place of business in San Francisco,
+ California, as well as future copyleft versions of that license
+ published by that same organization.
+ 
+ “Incorporate” means to publish or republish a Document, in whole or in
+ part, as part of another Document.
+ 
+ An MMC is “eligible for relicensing” if it is licensed under this
+ License, and if all works that were first published under this License
+ somewhere other than this MMC, and subsequently incorporated in whole or
+ in part into the MMC, (1) had no cover texts or invariant sections, and
+ (2) were thus incorporated prior to November 1, 2008.
+ 
+ The operator of an MMC Site may republish an MMC contained in the site
+ under CC-BY-SA on the same site at any time before August 1, 2009,
+ provided the MMC is eligible for relicensing.
+ 
+ ‘ADDENDUM: How to use this License for your documents’
+ 
+ To use this License in a document you have written, include a copy of
+ the License in the document and put the following copyright and license
+ notices just after the title page:
+ 
+      Copyright © YEAR YOUR NAME. Permission is granted to copy,
+      distribute and/or modify this document under the terms of the GNU
+      Free Documentation License, Version 1.3 or any later version
+      published by the Free Software Foundation; with no Invariant
+      Sections, no Front-Cover Texts, and no Back-Cover Texts.  A copy of
+      the license is included in the section entitled “GNU Free
+      Documentation License”.
+ 
+ If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+ replace the “with … Texts.” line with this:
+ 
+      with the Invariant Sections being LIST THEIR TITLES, with the
+      Front-Cover Texts being LIST, and with the Back-Cover Texts being
+      LIST.
+ 
+ If you have Invariant Sections without Cover Texts, or some other
+ combination of the three, merge those two alternatives to suit the
+ situation.
+ 
+ If your document contains nontrivial examples of program code, we
+ recommend releasing these examples in parallel under your choice of free
+ software license, such as the GNU General Public License, to permit
+ their use in free software.
+ 
+ 
+ File: gnat_ugn.info,  Node: Index,  Prev: GNU Free Documentation License,  Up: Top
+ 
+ Index
+ *****
+ 
+ [index]
+ * Menu:
+ 
+ * -a (gnatbind):                         Switches for gnatbind.
+                                                              (line   19)
+ * -A (gnatbind):                         Switches for gnatbind.
+                                                              (line   34)
+ * -a (gnatdll):                          Using gnatdll.      (line   23)
+ * -a (gnatls):                           Switches for gnatls.
+                                                              (line   18)
+ * -a (gnatmake):                         Switches for gnatmake.
+                                                              (line  116)
+ * -A (gnatmake):                         Switches for gnatmake.
+                                                              (line  464)
+ * -aI (gnatbind):                        Switches for gnatbind.
+                                                              (line   30)
+ * -aI (gnatbind) <1>:                    Search Paths for gnatbind.
+                                                              (line   38)
+ * -aI (gnatls):                          Switches for gnatls.
+                                                              (line   50)
+ * -aI (gnatmake):                        Switches for gnatmake.
+                                                              (line  439)
+ * -aL (gnatmake):                        Switches for gnatmake.
+                                                              (line  445)
+ * -aO (gnatbind):                        Switches for gnatbind.
+                                                              (line   26)
+ * -aO (gnatbind) <1>:                    Search Paths for gnatbind.
+                                                              (line   38)
+ * -aO (gnatclean):                       Switches for gnatclean.
+                                                              (line   97)
+ * -aO (gnatls):                          Switches for gnatls.
+                                                              (line   50)
+ * -aO (gnatmake):                        Switches for gnatmake.
+                                                              (line  458)
+ * -aP (gnatls):                          Switches for gnatls.
+                                                              (line   55)
+ * –as (dlltool):                         Using gnatdll.      (line  227)
+ * -b (gcc):                              Alphabetical List of All Switches.
+                                                              (line    6)
+ * -B (gcc):                              Alphabetical List of All Switches.
+                                                              (line   12)
+ * -b (gnatbind):                         Switches for gnatbind.
+                                                              (line   38)
+ * -b (gnatbind) <1>:                     Binder Error Message Control.
+                                                              (line   17)
+ * -b (gnatdll):                          Using gnatdll.      (line   30)
+ * -B (gnatlink):                         Switches for gnatlink.
+                                                              (line   61)
+ * -b (gnatmake):                         Switches for gnatmake.
+                                                              (line  136)
+ * -b (gnatprep):                         Switches for gnatprep.
+                                                              (line   16)
+ * -bargs (gnatdll):                      Using gnatdll.      (line   35)
+ * -bargs (gnatmake):                     Mode Switches for gnatmake.
+                                                              (line   19)
+ * –base-file (dlltool):                  Using gnatdll.      (line  189)
+ * -C (gcc):                              Switches.           (line   21)
+ * -c (gcc):                              Alphabetical List of All Switches.
+                                                              (line   21)
+ * -c (gnatbind):                         Switches for gnatbind.
+                                                              (line   42)
+ * -c (gnatbind) <1>:                     Output Control.     (line    9)
+ * -c (gnatchop):                         Switches for gnatchop.
+                                                              (line   18)
+ * -c (gnatclean):                        Switches for gnatclean.
+                                                              (line   30)
+ * -c (gnatmake):                         Switches for gnatmake.
+                                                              (line  146)
+ * -C (gnatmake):                         Switches for gnatmake.
+                                                              (line  155)
+ * -c (gnatname):                         Switches for gnatname.
+                                                              (line   33)
+ * -c (gnatprep):                         Switches for gnatprep.
+                                                              (line   22)
+ * -C (gnatprep):                         Switches for gnatprep.
+                                                              (line   29)
+ * -C= (gnatmake):                        Switches for gnatmake.
+                                                              (line  170)
+ * -cargs (gnatmake):                     Mode Switches for gnatmake.
+                                                              (line   13)
+ * –create-missing-dirs (gnatmake):       Switches for gnatmake.
+                                                              (line   72)
+ * -D (gnatbind):                         Switches for gnatbind.
+                                                              (line   58)
+ * -D (gnatclean):                        Switches for gnatclean.
+                                                              (line   37)
+ * -d (gnatdll):                          Using gnatdll.      (line   39)
+ * -d (gnatls):                           Switches for gnatls.
+                                                              (line   23)
+ * -d (gnatmake):                         Switches for gnatmake.
+                                                              (line  179)
+ * -D (gnatmake):                         Switches for gnatmake.
+                                                              (line  190)
+ * -d (gnatname):                         Switches for gnatname.
+                                                              (line   42)
+ * -D (gnatname):                         Switches for gnatname.
+                                                              (line   59)
+ * -D (gnatprep):                         Switches for gnatprep.
+                                                              (line   40)
+ * –def (dlltool):                        Using gnatdll.      (line  194)
+ * –demangle (gprof):                     Running gprof.      (line   24)
+ * –dllname (dlltool):                    Using gnatdll.      (line  198)
+ * -dnn[k|m] (gnatbind):                  Switches for gnatbind.
+                                                              (line   46)
+ * -e (gnatbind):                         Switches for gnatbind.
+                                                              (line   83)
+ * -E (gnatbind):                         Switches for gnatbind.
+                                                              (line  102)
+ * -e (gnatbind) <1>:                     Output Control.     (line   15)
+ * -e (gnatdll):                          Using gnatdll.      (line   50)
+ * -e (gprof):                            Running gprof.      (line   34)
+ * -E (gprof):                            Running gprof.      (line   43)
+ * -Ea (gnatbind):                        Switches for gnatbind.
+                                                              (line   87)
+ * -eI (gnatmake):                        Switches for gnatmake.
+                                                              (line  198)
+ * -eL (gnatmake):                        Switches for gnatmake.
+                                                              (line  205)
+ * -Es (gnatbind):                        Switches for gnatbind.
+                                                              (line   97)
+ * -eS (gnatmake):                        Switches for gnatmake.
+                                                              (line  221)
+ * -f (gnatbind):                         Switches for gnatbind.
+                                                              (line  106)
+ * -F (gnatbind):                         Switches for gnatbind.
+                                                              (line  111)
+ * -f (gnatbind) <1>:                     Elaboration Control.
+                                                              (line   10)
+ * -F (gnatclean):                        Switches for gnatclean.
+                                                              (line   42)
+ * -f (gnatlink):                         Switches for gnatlink.
+                                                              (line   18)
+ * -f (gnatmake):                         Switches for gnatmake.
+                                                              (line  226)
+ * -F (gnatmake):                         Switches for gnatmake.
+                                                              (line  233)
+ * -f (gnatname):                         Switches for gnatname.
+                                                              (line   72)
+ * -f (gprof):                            Running gprof.      (line   51)
+ * -F (gprof):                            Running gprof.      (line   58)
+ * -fada-spec-parent (gcc):               Switches.           (line   16)
+ * -fcallgraph-info (gcc):                Alphabetical List of All Switches.
+                                                              (line   31)
+ * -fdata-sections (gcc):                 Compilation options.
+                                                              (line    9)
+ * -fdiagnostics-format (gcc):            Alphabetical List of All Switches.
+                                                              (line   42)
+ * -fdump-ada-spec (gcc):                 Switches.           (line    6)
+ * -fdump-ada-spec-slim (gcc):            Switches.           (line   11)
+ * -fdump-scos (gcc):                     Alphabetical List of All Switches.
+                                                              (line   49)
+ * -ffunction-sections (gcc):             Compilation options.
+                                                              (line    9)
+ * -fgnat-encodings (gcc):                Alphabetical List of All Switches.
+                                                              (line   56)
+ * -fgnat-encodings (gcc) <1>:            Debugging Control.  (line  250)
+ * -files (gnatls):                       Switches for gnatls.
+                                                              (line   43)
+ * -flto (gcc):                           Alphabetical List of All Switches.
+                                                              (line   61)
+ * -fno-inline (gcc):                     Alphabetical List of All Switches.
+                                                              (line   82)
+ * -fno-inline (gcc) <1>:                 Inlining of Subprograms.
+                                                              (line   72)
+ * -fno-inline-functions (gcc):           Alphabetical List of All Switches.
+                                                              (line   89)
+ * -fno-inline-functions (gcc) <1>:       Inlining of Subprograms.
+                                                              (line   78)
+ * -fno-inline-functions-called-once (gcc): Alphabetical List of All Switches.
+                                                              (line   99)
+ * -fno-inline-functions-called-once (gcc) <1>: Inlining of Subprograms.
+                                                              (line   84)
+ * -fno-inline-small-functions (gcc):     Alphabetical List of All Switches.
+                                                              (line   94)
+ * -fno-inline-small-functions (gcc) <1>: Inlining of Subprograms.
+                                                              (line   81)
+ * -fno-ivopts (gcc):                     Alphabetical List of All Switches.
+                                                              (line  104)
+ * -fno-strict-aliasing (gcc):            Alphabetical List of All Switches.
+                                                              (line  113)
+ * -fno-strict-overflow (gcc):            Alphabetical List of All Switches.
+                                                              (line  119)
+ * -fstack-check (gcc):                   Alphabetical List of All Switches.
+                                                              (line  129)
+ * -fstack-check (gcc) <1>:               Run-Time Checks.    (line  137)
+ * -fstack-check (gcc) <2>:               Stack Overflow Checking.
+                                                              (line    6)
+ * -fstack-usage:                         Static Stack Usage Analysis.
+                                                              (line    6)
+ * -fstack-usage (gcc):                   Alphabetical List of All Switches.
+                                                              (line  134)
+ * -fuse-ld=name:                         Linker Switches.    (line    8)
+ * -fverbose-asm (gcc):                   Alphabetical List of All Switches.
+                                                              (line  911)
+ * -g (gcc):                              Alphabetical List of All Switches.
+                                                              (line  140)
+ * -g (gcc) <1>:                          Debugging Optimized Code.
+                                                              (line   14)
+ * -g (gnatdll):                          Using gnatdll.      (line   54)
+ * -g (gnatlink):                         Switches for gnatlink.
+                                                              (line   27)
+ * -g (gnatmake):                         Switches for gnatmake.
+                                                              (line  240)
+ * –GCC= (gnatchop):                      Switches for gnatchop.
+                                                              (line   98)
+ * –GCC=compiler_name (gnatlink):         Switches for gnatlink.
+                                                              (line   80)
+ * –GCC=compiler_name (gnatmake):         Switches for gnatmake.
+                                                              (line   24)
+ * -gnat-p (gcc):                         Alphabetical List of All Switches.
+                                                              (line  752)
+ * -gnat-p (gcc) <1>:                     Run-Time Checks.    (line   60)
+ * -gnat05 (gcc):                         Alphabetical List of All Switches.
+                                                              (line  147)
+ * -gnat05 (gcc) <1>:                     Compiling Different Versions of Ada.
+                                                              (line   49)
+ * -gnat12 (gcc):                         Alphabetical List of All Switches.
+                                                              (line  151)
+ * -gnat12 (gcc) <1>:                     Compiling Different Versions of Ada.
+                                                              (line   58)
+ * -gnat2005 (gcc):                       Alphabetical List of All Switches.
+                                                              (line  155)
+ * -gnat2005 (gcc) <1>:                   Compiling Different Versions of Ada.
+                                                              (line   49)
+ * -gnat2012 (gcc):                       Alphabetical List of All Switches.
+                                                              (line  159)
+ * -gnat2012 (gcc) <1>:                   Compiling Different Versions of Ada.
+                                                              (line   58)
+ * -gnat2022 (gcc):                       Alphabetical List of All Switches.
+                                                              (line  163)
+ * -gnat2022 (gcc) <1>:                   Compiling Different Versions of Ada.
+                                                              (line   67)
+ * -gnat83 (gcc):                         Alphabetical List of All Switches.
+                                                              (line  155)
+ * -gnat83 (gcc) <1>:                     Compiling Different Versions of Ada.
+                                                              (line   11)
+ * -gnat95 (gcc):                         Alphabetical List of All Switches.
+                                                              (line  171)
+ * -gnat95 (gcc) <1>:                     Compiling Different Versions of Ada.
+                                                              (line   35)
+ * -gnata (gcc):                          Alphabetical List of All Switches.
+                                                              (line  183)
+ * -gnatA (gcc):                          Alphabetical List of All Switches.
+                                                              (line  200)
+ * -gnata (gcc) <1>:                      Debugging and Assertion Control.
+                                                              (line    6)
+ * -gnata switch:                         Debugging - A Special Case.
+                                                              (line   45)
+ * -gnatb (gcc):                          Alphabetical List of All Switches.
+                                                              (line  205)
+ * -gnatB (gcc):                          Alphabetical List of All Switches.
+                                                              (line  209)
+ * -gnatb (gcc) <1>:                      Output and Error Message Control.
+                                                              (line  101)
+ * –GNATBIND=binder_name (gnatmake):      Switches for gnatmake.
+                                                              (line   40)
+ * -gnatc (gcc):                          Alphabetical List of All Switches.
+                                                              (line  214)
+ * -gnatC (gcc):                          Alphabetical List of All Switches.
+                                                              (line  226)
+ * -gnatc (gcc) <1>:                      Using gcc for Semantic Checking.
+                                                              (line    6)
+ * -gnatd (gcc):                          Alphabetical List of All Switches.
+                                                              (line  235)
+ * -gnatd (gcc) <1>:                      Debugging Control.  (line    6)
+ * -gnatD (gcc):                          Debugging Control.  (line  142)
+ * -gnatdc switch:                        GNAT Abnormal Termination or Failure to Terminate.
+                                                              (line   33)
+ * -gnatD[nn] (gcc):                      Alphabetical List of All Switches.
+                                                              (line  245)
+ * -gnatE (gcc):                          Alphabetical List of All Switches.
+                                                              (line  558)
+ * -gnatE (gcc) <1>:                      Run-Time Checks.    (line  129)
+ * -gnatE (gnat):                         Elaboration-related Compiler Switches.
+                                                              (line    9)
+ * -gnateA (gcc):                         Alphabetical List of All Switches.
+                                                              (line  253)
+ * -gnateb (gcc):                         Alphabetical List of All Switches.
+                                                              (line  287)
+ * -gnatec (gcc):                         Alphabetical List of All Switches.
+                                                              (line  294)
+ * -gnateC (gcc):                         Alphabetical List of All Switches.
+                                                              (line  299)
+ * -gnateD (gcc):                         Integrated Preprocessing.
+                                                              (line  162)
+ * -gnated (gcc):                         Alphabetical List of All Switches.
+                                                              (line  305)
+ * -gnateD (gcc) <1>:                     Alphabetical List of All Switches.
+                                                              (line  309)
+ * -gnateE (gcc):                         Alphabetical List of All Switches.
+                                                              (line  314)
+ * -gnatef (gcc):                         Alphabetical List of All Switches.
+                                                              (line  323)
+ * -gnateF (gcc):                         Alphabetical List of All Switches.
+                                                              (line  328)
+ * -gnateg (gcc):                         Alphabetical List of All Switches.
+                                                              (line  334)
+ * -gnateG (gcc):                         Alphabetical List of All Switches.
+                                                              (line  341)
+ * -gnatei (gcc):                         Alphabetical List of All Switches.
+                                                              (line  345)
+ * -gnateI (gcc):                         Alphabetical List of All Switches.
+                                                              (line  352)
+ * -gnatel (gcc):                         Alphabetical List of All Switches.
+                                                              (line  358)
+ * -gnatel (gcc) <1>:                     Alphabetical List of All Switches.
+                                                              (line  369)
+ * -gnatel (gnat):                        Elaboration-related Compiler Switches.
+                                                              (line   15)
+ * -gnatem (gcc):                         Alphabetical List of All Switches.
+                                                              (line  374)
+ * -gnatem (gcc) <1>:                     Units to Sources Mapping Files.
+                                                              (line    6)
+ * -gnatep (gcc):                         Integrated Preprocessing.
+                                                              (line   46)
+ * -gnatep (gcc) <1>:                     Alphabetical List of All Switches.
+                                                              (line  379)
+ * -gnateP (gcc):                         Alphabetical List of All Switches.
+                                                              (line  384)
+ * -gnateS (gcc):                         Alphabetical List of All Switches.
+                                                              (line  394)
+ * -gnateT (gcc):                         Alphabetical List of All Switches.
+                                                              (line  403)
+ * -gnatet=file (gcc):                    Alphabetical List of All Switches.
+                                                              (line  398)
+ * -gnateu (gcc):                         Alphabetical List of All Switches.
+                                                              (line  537)
+ * -gnateV (gcc):                         Alphabetical List of All Switches.
+                                                              (line  545)
+ * -gnateY (gcc):                         Alphabetical List of All Switches.
+                                                              (line  551)
+ * -gnatf (gcc):                          Alphabetical List of All Switches.
+                                                              (line  563)
+ * -gnatF (gcc):                          Alphabetical List of All Switches.
+                                                              (line  568)
+ * -gnatf (gcc) <1>:                      Output and Error Message Control.
+                                                              (line  129)
+ * -gnatg (gcc):                          Alphabetical List of All Switches.
+                                                              (line  572)
+ * -gnatG (gcc):                          Debugging Control.  (line   15)
+ * -gnatG[nn] (gcc):                      Alphabetical List of All Switches.
+                                                              (line  581)
+ * -gnath (gcc):                          Alphabetical List of All Switches.
+                                                              (line  585)
+ * -gnatH (gcc):                          Alphabetical List of All Switches.
+                                                              (line  589)
+ * -gnatH (gnat):                         Elaboration-related Compiler Switches.
+                                                              (line   54)
+ * -gnati (gcc):                          Alphabetical List of All Switches.
+                                                              (line  596)
+ * -gnatI (gcc):                          Alphabetical List of All Switches.
+                                                              (line  602)
+ * -gnati (gcc) <1>:                      Character Set Control.
+                                                              (line    6)
+ * -gnatJ (gcc):                          Alphabetical List of All Switches.
+                                                              (line  621)
+ * -gnatJ (gnat):                         Elaboration-related Compiler Switches.
+                                                              (line   61)
+ * -gnatjnn (gcc):                        Alphabetical List of All Switches.
+                                                              (line  617)
+ * -gnatjnn (gcc) <1>:                    Output and Error Message Control.
+                                                              (line  159)
+ * -gnatk (gcc):                          Alphabetical List of All Switches.
+                                                              (line  652)
+ * -gnatk (gcc) <1>:                      File Naming Control.
+                                                              (line    6)
+ * -gnatl (gcc):                          Alphabetical List of All Switches.
+                                                              (line  656)
+ * -gnatL (gcc):                          Alphabetical List of All Switches.
+                                                              (line  660)
+ * -gnatl (gcc) <1>:                      Output and Error Message Control.
+                                                              (line   36)
+ * -gnatL (gcc) <1>:                      Debugging Control.  (line   44)
+ * -gnatL (gcc) <2>:                      Debugging Control.  (line  163)
+ * -gnatl=fname (gcc):                    Output and Error Message Control.
+                                                              (line   84)
+ * –GNATLINK=linker_name (gnatmake):      Switches for gnatmake.
+                                                              (line   51)
+ * -gnatm (gcc):                          Alphabetical List of All Switches.
+                                                              (line  666)
+ * -gnatm (gcc) <1>:                      Output and Error Message Control.
+                                                              (line  108)
+ * -gnatn (gcc):                          Alphabetical List of All Switches.
+                                                              (line  677)
+ * -gnatN (gcc):                          Alphabetical List of All Switches.
+                                                              (line  686)
+ * -gnatn (gcc) <1>:                      Subprogram Inlining Control.
+                                                              (line    6)
+ * -gnatN (gcc) <1>:                      Subprogram Inlining Control.
+                                                              (line   35)
+ * -gnatn switch:                         Source Dependencies.
+                                                              (line   27)
+ * -gnatN switch:                         Source Dependencies.
+                                                              (line   34)
+ * -gnato (gcc):                          Controlling Run-Time Checks.
+                                                              (line   11)
+ * -gnato (gcc) <1>:                      Default Settings.   (line   17)
+ * -gnato0 (gcc):                         Alphabetical List of All Switches.
+                                                              (line  697)
+ * -gnato? (gcc):                         Specifying the Desired Mode.
+                                                              (line   52)
+ * -gnato?? (gcc):                        Alphabetical List of All Switches.
+                                                              (line  704)
+ * -gnato?? (gcc) <1>:                    Run-Time Checks.    (line   64)
+ * -gnato?? (gcc) <2>:                    Specifying the Desired Mode.
+                                                              (line   52)
+ * -gnatp (gcc):                          Alphabetical List of All Switches.
+                                                              (line  746)
+ * -gnatp (gcc) <1>:                      Run-Time Checks.    (line   12)
+ * -gnatp (gcc) <2>:                      Controlling Run-Time Checks.
+                                                              (line   11)
+ * -gnatq (gcc):                          Alphabetical List of All Switches.
+                                                              (line  756)
+ * -gnatQ (gcc):                          Alphabetical List of All Switches.
+                                                              (line  760)
+ * -gnatq (gcc) <1>:                      Output and Error Message Control.
+                                                              (line  174)
+ * -gnatQ (gcc) <1>:                      Output and Error Message Control.
+                                                              (line  186)
+ * -gnatr (gcc):                          Alphabetical List of All Switches.
+                                                              (line  766)
+ * -gnatR (gcc):                          Alphabetical List of All Switches.
+                                                              (line  770)
+ * -gnatr (gcc) <1>:                      Debugging Control.  (line  172)
+ * -gnatR (gcc) <1>:                      Debugging Control.  (line  182)
+ * -gnats (gcc):                          Alphabetical List of All Switches.
+                                                              (line  777)
+ * -gnatS (gcc):                          Alphabetical List of All Switches.
+                                                              (line  781)
+ * -gnats (gcc) <1>:                      Using gcc for Syntax Checking.
+                                                              (line    6)
+ * -gnatS (gcc) <1>:                      Debugging Control.  (line  232)
+ * -gnatT (gcc):                          Alphabetical List of All Switches.
+                                                              (line  785)
+ * -gnatu (gcc):                          Alphabetical List of All Switches.
+                                                              (line  789)
+ * -gnatU (gcc):                          Alphabetical List of All Switches.
+                                                              (line  793)
+ * -gnatU (gcc) <1>:                      Output and Error Message Control.
+                                                              (line   94)
+ * -gnatu (gcc) <1>:                      Auxiliary Output Control.
+                                                              (line    6)
+ * -gnatv (gcc):                          Alphabetical List of All Switches.
+                                                              (line  797)
+ * -gnatV (gcc):                          Alphabetical List of All Switches.
+                                                              (line  801)
+ * -gnatv (gcc) <1>:                      Output and Error Message Control.
+                                                              (line   19)
+ * -gnatVa (gcc):                         Validity Checking.  (line   50)
+ * -gnatVc (gcc):                         Validity Checking.  (line   57)
+ * -gnatVd (gcc):                         Validity Checking.  (line   64)
+ * -gnatVe (gcc):                         Validity Checking.  (line   84)
+ * -gnatVf (gcc):                         Validity Checking.  (line   94)
+ * -gnatVi (gcc):                         Validity Checking.  (line  115)
+ * -gnatVm (gcc):                         Validity Checking.  (line  122)
+ * -gnatVn (gcc):                         Validity Checking.  (line  134)
+ * -gnatVo (gcc):                         Validity Checking.  (line  144)
+ * -gnatVp (gcc):                         Validity Checking.  (line  157)
+ * -gnatVr (gcc):                         Validity Checking.  (line  173)
+ * -gnatVs (gcc):                         Validity Checking.  (line  180)
+ * -gnatVt (gcc):                         Validity Checking.  (line  189)
+ * -gnatw (gcc):                          Alphabetical List of All Switches.
+                                                              (line  805)
+ * -gnatW (gcc):                          Alphabetical List of All Switches.
+                                                              (line  811)
+ * -gnatW (gcc) <1>:                      Character Set Control.
+                                                              (line   51)
+ * -gnatw.a (gcc):                        Warning Message Control.
+                                                              (line  199)
+ * -gnatw.A (gcc):                        Warning Message Control.
+                                                              (line  208)
+ * -gnatw.b (gcc):                        Warning Message Control.
+                                                              (line  251)
+ * -gnatw.c (gcc):                        Warning Message Control.
+                                                              (line  302)
+ * -gnatw.C (gcc):                        Warning Message Control.
+                                                              (line  311)
+ * -gnatw.d (gcc):                        Warning Message Control.
+                                                              (line  353)
+ * -gnatw.d (gcc) <1>:                    Warning Message Control.
+                                                              (line  384)
+ * -gnatw.e (gcc):                        Warning Message Control.
+                                                              (line  404)
+ * -gnatw.f (gnat):                       Elaboration-related Compiler Switches.
+                                                              (line   69)
+ * -gnatw.g (gcc):                        Warning Message Control.
+                                                              (line  458)
+ * -gnatw.h (gcc):                        Warning Message Control.
+                                                              (line  483)
+ * -gnatw.H (gcc):                        Warning Message Control.
+                                                              (line  497)
+ * -gnatw.i (gcc):                        Warning Message Control.
+                                                              (line  524)
+ * -gnatw.I (gcc):                        Warning Message Control.
+                                                              (line  533)
+ * -gnatw.j (gcc):                        Warning Message Control.
+                                                              (line  570)
+ * -gnatw.J (gcc):                        Warning Message Control.
+                                                              (line  577)
+ * -gnatw.k (gcc):                        Warning Message Control.
+                                                              (line  599)
+ * -gnatw.l (gcc):                        Warning Message Control.
+                                                              (line  634)
+ * -gnatw.L (gcc):                        Warning Message Control.
+                                                              (line  643)
+ * -gnatw.m (gcc):                        Warning Message Control.
+                                                              (line  667)
+ * -gnatw.M (gcc):                        Warning Message Control.
+                                                              (line  682)
+ * -gnatw.n (gcc):                        Warning Message Control.
+                                                              (line  699)
+ * -gnatw.N (gcc):                        Warning Message Control.
+                                                              (line  707)
+ * -gnatw.o (gcc):                        Warning Message Control.
+                                                              (line  731)
+ * -gnatw.O (gcc):                        Warning Message Control.
+                                                              (line  745)
+ * -gnatw.p (gcc):                        Warning Message Control.
+                                                              (line  773)
+ * -gnatw.P (gcc):                        Warning Message Control.
+                                                              (line  785)
+ * -gnatw.q (gcc):                        Warning Message Control.
+                                                              (line  830)
+ * -gnatw.Q (gcc):                        Warning Message Control.
+                                                              (line  871)
+ * -gnatw.r (gcc):                        Warning Message Control.
+                                                              (line  933)
+ * -gnatw.R (gcc):                        Warning Message Control.
+                                                              (line  942)
+ * -gnatw.s (gcc):                        Warning Message Control.
+                                                              (line  977)
+ * -gnatw.S (gcc):                        Warning Message Control.
+                                                              (line  988)
+ * -gnatw.t (gcc):                        Warning Message Control.
+                                                              (line 1013)
+ * -gnatw.T (gcc):                        Warning Message Control.
+                                                              (line 1031)
+ * -gnatw.u (gcc):                        Warning Message Control.
+                                                              (line 1064)
+ * -gnatw.U (gcc):                        Warning Message Control.
+                                                              (line 1079)
+ * -gnatw.v (gcc):                        Warning Message Control.
+                                                              (line 1107)
+ * -gnatw.V (gcc):                        Warning Message Control.
+                                                              (line 1119)
+ * -gnatw.w (gcc):                        Warning Message Control.
+                                                              (line 1151)
+ * -gnatw.W (gcc):                        Warning Message Control.
+                                                              (line 1164)
+ * -gnatw.y (gcc):                        Warning Message Control.
+                                                              (line 1229)
+ * -gnatw.Y (gcc):                        Warning Message Control.
+                                                              (line 1241)
+ * -gnatw.z (gcc):                        Warning Message Control.
+                                                              (line 1265)
+ * -gnatw.Z (gcc):                        Warning Message Control.
+                                                              (line 1275)
+ * -gnatwa (gcc):                         Warning Message Control.
+                                                              (line  134)
+ * -gnatwA (gcc):                         Warning Message Control.
+                                                              (line  183)
+ * -gnatwb (gcc):                         Warning Message Control.
+                                                              (line  231)
+ * -gnatwB (gcc):                         Warning Message Control.
+                                                              (line  244)
+ * -gnatwB (gcc) <1>:                     Warning Message Control.
+                                                              (line  261)
+ * -gnatwc (gcc):                         Warning Message Control.
+                                                              (line  268)
+ * -gnatwC (gcc):                         Warning Message Control.
+                                                              (line  295)
+ * -gnatwd (gcc):                         Warning Message Control.
+                                                              (line  334)
+ * -gnatwD (gcc):                         Warning Message Control.
+                                                              (line  346)
+ * -gnatwe (gcc):                         Warning Message Control.
+                                                              (line  392)
+ * -gnatwE (gcc):                         Warning Message Control.
+                                                              (line  417)
+ * -gnatwf (gcc):                         Warning Message Control.
+                                                              (line  424)
+ * -gnatwF (gcc):                         Warning Message Control.
+                                                              (line  433)
+ * -gnatwg (gcc):                         Warning Message Control.
+                                                              (line  442)
+ * -gnatwG (gcc):                         Warning Message Control.
+                                                              (line  452)
+ * -gnatwh (gcc):                         Warning Message Control.
+                                                              (line  467)
+ * -gnatwH (gcc):                         Warning Message Control.
+                                                              (line  477)
+ * -gnatwi (gcc):                         Warning Message Control.
+                                                              (line  505)
+ * -gnatwI (gcc):                         Warning Message Control.
+                                                              (line  517)
+ * -gnatwj (gcc):                         Warning Message Control.
+                                                              (line  539)
+ * -gnatwJ (gcc):                         Warning Message Control.
+                                                              (line  564)
+ * -gnatwk (gcc):                         Warning Message Control.
+                                                              (line  584)
+ * -gnatwK (gcc):                         Warning Message Control.
+                                                              (line  592)
+ * -gnatwK (gcc) <1>:                     Warning Message Control.
+                                                              (line  610)
+ * -gnatwl (gcc):                         Warning Message Control.
+                                                              (line  617)
+ * -gnatwL (gcc):                         Warning Message Control.
+                                                              (line  628)
+ * -gnatwl (gnat):                        Elaboration-related Compiler Switches.
+                                                              (line   99)
+ * -gnatwm (gcc):                         Warning Message Control.
+                                                              (line  649)
+ * -gnatwM (gcc):                         Warning Message Control.
+                                                              (line  660)
+ * -gnatwm (gcc) <1>:                     Warning Message Control.
+                                                              (line 1191)
+ * -gnatwn (gcc):                         Warning Message Control.
+                                                              (line  688)
+ * -gnatwo (gcc):                         Warning Message Control.
+                                                              (line  714)
+ * -gnatwO (gcc):                         Warning Message Control.
+                                                              (line  723)
+ * -gnatwp (gcc):                         Warning Message Control.
+                                                              (line  753)
+ * -gnatwP (gcc):                         Warning Message Control.
+                                                              (line  765)
+ * -gnatwq (gcc):                         Warning Message Control.
+                                                              (line  809)
+ * -gnatwQ (gcc):                         Warning Message Control.
+                                                              (line  823)
+ * -gnatwr (gcc):                         Warning Message Control.
+                                                              (line  896)
+ * -gnatwR (gcc):                         Warning Message Control.
+                                                              (line  927)
+ * -gnatws (gcc):                         Warning Message Control.
+                                                              (line  961)
+ * -gnatwt (gcc):                         Warning Message Control.
+                                                              (line  996)
+ * -gnatwT (gcc):                         Warning Message Control.
+                                                              (line 1006)
+ * -gnatwu (gcc):                         Warning Message Control.
+                                                              (line 1037)
+ * -gnatwU (gcc):                         Warning Message Control.
+                                                              (line 1056)
+ * -gnatwv (gcc):                         Warning Message Control.
+                                                              (line 1087)
+ * -gnatwV (gcc):                         Warning Message Control.
+                                                              (line 1100)
+ * -gnatww (gcc):                         Warning Message Control.
+                                                              (line 1127)
+ * -gnatwW (gcc):                         Warning Message Control.
+                                                              (line 1137)
+ * -gnatwx (gcc):                         Warning Message Control.
+                                                              (line 1171)
+ * -gnatwX (gcc):                         Warning Message Control.
+                                                              (line 1182)
+ * -gnatwy (gcc):                         Warning Message Control.
+                                                              (line 1209)
+ * -gnatwY (gcc):                         Warning Message Control.
+                                                              (line 1222)
+ * -gnatwz (gcc):                         Warning Message Control.
+                                                              (line 1248)
+ * -gnatwZ (gcc):                         Warning Message Control.
+                                                              (line 1257)
+ * -gnatw_a:                              Warning Message Control.
+                                                              (line  215)
+ * -gnatw_A:                              Warning Message Control.
+                                                              (line  224)
+ * -gnatw_c (gcc):                        Warning Message Control.
+                                                              (line  318)
+ * -gnatw_C (gcc):                        Warning Message Control.
+                                                              (line  326)
+ * -gnatw_p (gcc):                        Warning Message Control.
+                                                              (line  792)
+ * -gnatw_P (gcc):                        Warning Message Control.
+                                                              (line  803)
+ * -gnatw_q (gcc):                        Warning Message Control.
+                                                              (line  878)
+ * -gnatw_Q (gcc):                        Warning Message Control.
+                                                              (line  892)
+ * -gnatw_r (gcc):                        Warning Message Control.
+                                                              (line  948)
+ * -gnatw_R (gcc):                        Warning Message Control.
+                                                              (line  957)
+ * -gnatx (gcc):                          Alphabetical List of All Switches.
+                                                              (line  815)
+ * -gnatX (gcc):                          Alphabetical List of All Switches.
+                                                              (line  819)
+ * -gnatX (gcc) <1>:                      Compiling Different Versions of Ada.
+                                                              (line   80)
+ * -gnatx (gcc) <1>:                      Debugging Control.  (line  242)
+ * -gnatX0 (gcc):                         Alphabetical List of All Switches.
+                                                              (line  823)
+ * -gnatX0 (gcc) <1>:                     Compiling Different Versions of Ada.
+                                                              (line   72)
+ * -gnaty (gcc):                          Alphabetical List of All Switches.
+                                                              (line  827)
+ * -gnaty (gcc) <1>:                      Style Checking.     (line    6)
+ * -gnaty+ (gcc):                         Style Checking.     (line  459)
+ * -gnaty- (gcc):                         Style Checking.     (line  447)
+ * -gnatya (gcc):                         Style Checking.     (line   51)
+ * -gnatyA (gcc):                         Style Checking.     (line   60)
+ * -gnatyb (gcc):                         Style Checking.     (line   68)
+ * -gnatyB (gcc):                         Style Checking.     (line   77)
+ * -gnatyc (gcc):                         Style Checking.     (line   86)
+ * -gnatyC (gcc):                         Style Checking.     (line  129)
+ * -gnatyd (gcc):                         Style Checking.     (line  136)
+ * -gnatyD (gcc):                         Style Checking.     (line  143)
+ * -gnatye (gcc):                         Style Checking.     (line  151)
+ * -gnatyf (gcc):                         Style Checking.     (line  158)
+ * -gnatyg (gcc):                         Style Checking.     (line  165)
+ * -gnatyh (gcc):                         Style Checking.     (line  175)
+ * -gnatyi (gcc):                         Style Checking.     (line  183)
+ * -gnatyI (gcc):                         Style Checking.     (line  191)
+ * -gnatyk (gcc):                         Style Checking.     (line  198)
+ * -gnatyl (gcc):                         Style Checking.     (line  207)
+ * -gnatyLnnn (gcc):                      Style Checking.     (line  272)
+ * -gnatym (gcc):                         Style Checking.     (line  280)
+ * -gnatyMnnn (gcc):                      Style Checking.     (line  293)
+ * -gnatyn (gcc):                         Style Checking.     (line  303)
+ * -gnatyN (gcc):                         Style Checking.     (line  311)
+ * -gnatyo (gcc):                         Style Checking.     (line  317)
+ * -gnatyO (gcc):                         Style Checking.     (line  327)
+ * -gnatyp (gcc):                         Style Checking.     (line  339)
+ * -gnatyr (gcc):                         Style Checking.     (line  348)
+ * -gnatys (gcc):                         Style Checking.     (line  357)
+ * -gnatyS (gcc):                         Style Checking.     (line  367)
+ * -gnatyt (gcc):                         Style Checking.     (line  376)
+ * -gnatyu (gcc):                         Style Checking.     (line  422)
+ * -gnatyx (gcc):                         Style Checking.     (line  430)
+ * -gnatyy (gcc):                         Style Checking.     (line  438)
+ * -gnaty[0-9] (gcc):                     Style Checking.     (line   25)
+ * -gnatz (gcc):                          Alphabetical List of All Switches.
+                                                              (line  831)
+ * -h (gnatbind):                         Switches for gnatbind.
+                                                              (line  122)
+ * -H (gnatbind):                         Switches for gnatbind.
+                                                              (line  126)
+ * -h (gnatbind) <1>:                     Output Control.     (line   22)
+ * -h (gnatclean):                        Switches for gnatclean.
+                                                              (line   49)
+ * -h (gnatdll):                          Using gnatdll.      (line   62)
+ * -h (gnatls):                           Switches for gnatls.
+                                                              (line   27)
+ * -h (gnatname):                         Switches for gnatname.
+                                                              (line   84)
+ * -H32 (gnatbind):                       Switches for gnatbind.
+                                                              (line  131)
+ * -H64 (gnatbind):                       Switches for gnatbind.
+                                                              (line  137)
+ * –help (dlltool):                       Using gnatdll.      (line  209)
+ * –help (gnatbind):                      Switches for gnatbind.
+                                                              (line   14)
+ * –help (gnatchop):                      Switches for gnatchop.
+                                                              (line   13)
+ * –help (gnatclean):                     Switches for gnatclean.
+                                                              (line   13)
+ * –help (gnatlink):                      Switches for gnatlink.
+                                                              (line   13)
+ * –help (gnatls):                        Switches for gnatls.
+                                                              (line   13)
+ * –help (gnatmake):                      Switches for gnatmake.
+                                                              (line   13)
+ * –help (gnatname):                      Switches for gnatname.
+                                                              (line   15)
+ * –help (gnatprep):                      Switches for gnatprep.
+                                                              (line   11)
+ * -I (gcc):                              Alphabetical List of All Switches.
+                                                              (line  836)
+ * -I (gnatbind):                         Switches for gnatbind.
+                                                              (line  143)
+ * -I (gnatbind) <1>:                     Search Paths for gnatbind.
+                                                              (line   38)
+ * -I (gnatclean):                        Switches for gnatclean.
+                                                              (line  101)
+ * -I (gnatdll):                          Using gnatdll.      (line   66)
+ * -I (gnatls):                           Switches for gnatls.
+                                                              (line   50)
+ * -i (gnatmake):                         Switches for gnatmake.
+                                                              (line  245)
+ * -I (gnatmake):                         Switches for gnatmake.
+                                                              (line  468)
+ * -I- (gcc):                             Alphabetical List of All Switches.
+                                                              (line  842)
+ * -I- (gnatbind):                        Switches for gnatbind.
+                                                              (line  147)
+ * -I- (gnatclean):                       Switches for gnatclean.
+                                                              (line  105)
+ * -I- (gnatls):                          Switches for gnatls.
+                                                              (line   50)
+ * -I- (gnatmake):                        Switches for gnatmake.
+                                                              (line  472)
+ * -j (gnatmake):                         Switches for gnatmake.
+                                                              (line  264)
+ * -k (dlltool):                          Using gnatdll.      (line  204)
+ * -k (gnatbind):                         Switches for gnatbind.
+                                                              (line  153)
+ * -K (gnatbind):                         Switches for gnatbind.
+                                                              (line  161)
+ * -K (gnatbind) <1>:                     Output Control.     (line   26)
+ * -k (gnatchop):                         Switches for gnatchop.
+                                                              (line   36)
+ * -k (gnatdll):                          Using gnatdll.      (line   72)
+ * -k (gnatmake):                         Switches for gnatmake.
+                                                              (line  275)
+ * -l (gnatbind):                         Switches for gnatbind.
+                                                              (line  165)
+ * -L (gnatbind):                         Switches for gnatbind.
+                                                              (line  169)
+ * -l (gnatbind) <1>:                     Output Control.     (line   32)
+ * -l (gnatdll):                          Using gnatdll.      (line   81)
+ * -l (gnatmake):                         Switches for gnatmake.
+                                                              (line  287)
+ * -L (gnatmake):                         Switches for gnatmake.
+                                                              (line  478)
+ * -largs (gnatdll):                      Using gnatdll.      (line   99)
+ * -largs (gnatmake):                     Mode Switches for gnatmake.
+                                                              (line   25)
+ * –LINK= (gnatlink):                     Switches for gnatlink.
+                                                              (line  101)
+ * -M (gnatbind):                         Switches for gnatbind.
+                                                              (line  176)
+ * -m (gnatbind):                         Switches for gnatbind.
+                                                              (line  181)
+ * -m (gnatbind) <1>:                     Binder Error Message Control.
+                                                              (line   22)
+ * -M (gnatbind) <1>:                     Binder Error Message Control.
+                                                              (line   28)
+ * -M (gnatlink):                         Switches for gnatlink.
+                                                              (line   70)
+ * -m (gnatmake):                         Switches for gnatmake.
+                                                              (line  298)
+ * -M (gnatmake):                         Switches for gnatmake.
+                                                              (line  313)
+ * -M= (gnatlink):                        Switches for gnatlink.
+                                                              (line   75)
+ * -margs (gnatmake):                     Mode Switches for gnatmake.
+                                                              (line   31)
+ * -minimal (gnatbind):                   Switches for gnatbind.
+                                                              (line  191)
+ * -mwindows:                             CONSOLE and WINDOWS subsystems.
+                                                              (line    6)
+ * -n (gnatbind):                         Switches for gnatbind.
+                                                              (line  206)
+ * -n (gnatbind) <1>:                     Binding with Non-Ada Main Programs.
+                                                              (line   14)
+ * -n (gnatbind) <2>:                     Binding with Non-Ada Main Programs.
+                                                              (line   45)
+ * -n (gnatclean):                        Switches for gnatclean.
+                                                              (line   53)
+ * -n (gnatdll):                          Using gnatdll.      (line   87)
+ * -n (gnatlink):                         Switches for gnatlink.
+                                                              (line   35)
+ * -n (gnatmake):                         Switches for gnatmake.
+                                                              (line  329)
+ * -nostdinc (gcc):                       Alphabetical List of All Switches.
+                                                              (line  856)
+ * -nostdinc (gnatbind):                  Switches for gnatbind.
+                                                              (line  210)
+ * -nostdinc (gnatmake):                  Switches for gnatmake.
+                                                              (line  485)
+ * -nostdlib (gcc):                       Alphabetical List of All Switches.
+                                                              (line  861)
+ * -nostdlib (gnatbind):                  Switches for gnatbind.
+                                                              (line  214)
+ * -nostdlib (gnatmake):                  Switches for gnatmake.
+                                                              (line  489)
+ * -o (gcc):                              Alphabetical List of All Switches.
+                                                              (line  849)
+ * -O (gcc):                              Alphabetical List of All Switches.
+                                                              (line  866)
+ * -O (gcc) <1>:                          Optimization Levels.
+                                                              (line    6)
+ * -o (gnatbind):                         Switches for gnatbind.
+                                                              (line  224)
+ * -O (gnatbind):                         Switches for gnatbind.
+                                                              (line  230)
+ * -O (gnatbind) <1>:                     Output Control.     (line   37)
+ * -o (gnatbind) <1>:                     Output Control.     (line   47)
+ * -o (gnatbind) <2>:                     Binding with Non-Ada Main Programs.
+                                                              (line   56)
+ * -o (gnatlink):                         Switches for gnatlink.
+                                                              (line   54)
+ * -o (gnatls):                           Switches for gnatls.
+                                                              (line   31)
+ * -o (gnatmake):                         Switches for gnatmake.
+                                                              (line  337)
+ * –output-exp (dlltool):                 Using gnatdll.      (line  213)
+ * –output-lib (dlltool):                 Using gnatdll.      (line  219)
+ * -p (gnatbind):                         Switches for gnatbind.
+                                                              (line  234)
+ * -P (gnatbind):                         Switches for gnatbind.
+                                                              (line  238)
+ * -p (gnatbind) <1>:                     Elaboration Control.
+                                                              (line   49)
+ * -p (gnatchop):                         Switches for gnatchop.
+                                                              (line   47)
+ * -P (gnatclean):                        Switches for gnatclean.
+                                                              (line   59)
+ * -P (gnatmake):                         Switches for gnatmake.
+                                                              (line   18)
+ * -p (gnatmake):                         Switches for gnatmake.
+                                                              (line  347)
+ * -P (gnatname):                         Switches for gnatname.
+                                                              (line   89)
+ * -pass-exit-codes (gcc):                Alphabetical List of All Switches.
+                                                              (line  893)
+ * -pass-exit-codes (gcc) <1>:            Auxiliary Output Control.
+                                                              (line   12)
+ * -pg (gcc):                             Compilation for profiling.
+                                                              (line    6)
+ * -pg (gnatlink):                        Compilation for profiling.
+                                                              (line    6)
+ * -q (gnatchop):                         Switches for gnatchop.
+                                                              (line   55)
+ * -q (gnatclean):                        Switches for gnatclean.
+                                                              (line   67)
+ * -q (gnatdll):                          Using gnatdll.      (line   91)
+ * -q (gnatmake):                         Switches for gnatmake.
+                                                              (line  351)
+ * -R (gnatbind):                         Switches for gnatbind.
+                                                              (line  242)
+ * -r (gnatbind):                         Output Control.     (line   55)
+ * -r (gnatchop):                         Switches for gnatchop.
+                                                              (line   61)
+ * -r (gnatclean):                        Switches for gnatclean.
+                                                              (line   73)
+ * -r (gnatprep):                         Switches for gnatprep.
+                                                              (line   46)
+ * -Ra (gnatbind):                        Switches for gnatbind.
+                                                              (line  247)
+ * –RTS (gcc):                            Alphabetical List of All Switches.
+                                                              (line  898)
+ * –RTS (gnatbind):                       Switches for gnatbind.
+                                                              (line  218)
+ * –RTS (gnatls):                         Switches for gnatls.
+                                                              (line   59)
+ * –RTS (gnatmake):                       Switches for gnatmake.
+                                                              (line  493)
+ * –RTS option:                           Specifying a Run-Time Library.
+                                                              (line   53)
+ * –RTS=sjlj (gnatmake):                  Exception Handling Control.
+                                                              (line   29)
+ * –RTS=zcx (gnatmake):                   Exception Handling Control.
+                                                              (line   40)
+ * -S (gcc):                              Alphabetical List of All Switches.
+                                                              (line  904)
+ * -s (gnatbind):                         Switches for gnatbind.
+                                                              (line  251)
+ * -S (gnatbind):                         Switches for gnatbind.
+                                                              (line  255)
+ * -s (gnatbind) <1>:                     Consistency-Checking Modes.
+                                                              (line   10)
+ * -s (gnatls):                           Switches for gnatls.
+                                                              (line   35)
+ * -s (gnatmake):                         Switches for gnatmake.
+                                                              (line  356)
+ * -s (gnatprep):                         Switches for gnatprep.
+                                                              (line   61)
+ * -shared (gnatbind):                    Switches for gnatbind.
+                                                              (line  311)
+ * -static (gnatbind):                    Switches for gnatbind.
+                                                              (line  307)
+ * -t (gnatbind):                         Switches for gnatbind.
+                                                              (line  315)
+ * -T (gnatbind):                         Switches for gnatbind.
+                                                              (line  319)
+ * -t (gnatbind) <1>:                     Binder Error Message Control.
+                                                              (line   43)
+ * -T (gnatprep):                         Switches for gnatprep.
+                                                              (line   66)
+ * -T0 option:                            Choosing the Scheduling Policy.
+                                                              (line   12)
+ * -u (gnatbind):                         Switches for gnatbind.
+                                                              (line  334)
+ * -u (gnatls):                           Switches for gnatls.
+                                                              (line   39)
+ * -u (gnatmake):                         Switches for gnatmake.
+                                                              (line  367)
+ * -U (gnatmake):                         Switches for gnatmake.
+                                                              (line  374)
+ * -u (gnatprep):                         Switches for gnatprep.
+                                                              (line   72)
+ * -v (dlltool):                          Using gnatdll.      (line  223)
+ * -v (gcc):                              Alphabetical List of All Switches.
+                                                              (line  917)
+ * -V (gcc):                              Alphabetical List of All Switches.
+                                                              (line  923)
+ * -v (gnatbind):                         Switches for gnatbind.
+                                                              (line  343)
+ * -V (gnatbind):                         Switches for gnatbind.
+                                                              (line  348)
+ * -v (gnatbind) <1>:                     Binder Error Message Control.
+                                                              (line    9)
+ * -v (gnatchop):                         Switches for gnatchop.
+                                                              (line   83)
+ * -v (gnatclean):                        Switches for gnatclean.
+                                                              (line   81)
+ * -v (gnatdll):                          Using gnatdll.      (line   95)
+ * -v (gnatlink):                         Switches for gnatlink.
+                                                              (line   41)
+ * -v (gnatls):                           Switches for gnatls.
+                                                              (line   65)
+ * -v (gnatmake):                         Switches for gnatmake.
+                                                              (line  382)
+ * -v (gnatname):                         Switches for gnatname.
+                                                              (line  101)
+ * -v (gnatprep):                         Switches for gnatprep.
+                                                              (line   79)
+ * -v -v (gnatlink):                      Switches for gnatlink.
+                                                              (line   48)
+ * -v -v (gnatname):                      Switches for gnatname.
+                                                              (line  109)
+ * –version (gnatbind):                   Switches for gnatbind.
+                                                              (line    9)
+ * –version (gnatchop):                   Switches for gnatchop.
+                                                              (line    8)
+ * –version (gnatclean):                  Switches for gnatclean.
+                                                              (line    8)
+ * –version (gnatlink):                   Switches for gnatlink.
+                                                              (line    8)
+ * –version (gnatls):                     Switches for gnatls.
+                                                              (line    8)
+ * –version (gnatmake):                   Switches for gnatmake.
+                                                              (line    8)
+ * –version (gnatname):                   Switches for gnatname.
+                                                              (line   10)
+ * –version (gnatprep):                   Switches for gnatprep.
+                                                              (line    6)
+ * -vl (gnatmake):                        Switches for gnatmake.
+                                                              (line  387)
+ * -vm (gnatmake):                        Switches for gnatmake.
+                                                              (line  391)
+ * -vm (gnatmake) <1>:                    Switches for gnatmake.
+                                                              (line  396)
+ * -vP (gnatclean):                       Switches for gnatclean.
+                                                              (line   85)
+ * -w (gcc):                              Alphabetical List of All Switches.
+                                                              (line  928)
+ * -w (gcc) <1>:                          Warning Message Control.
+                                                              (line 1313)
+ * -w (gnatbind):                         Switches for gnatbind.
+                                                              (line  354)
+ * -w (gnatchop):                         Switches for gnatchop.
+                                                              (line   89)
+ * -Wall (gcc):                           Warning Message Control.
+                                                              (line 1304)
+ * -we (gnatbind):                        Binder Error Message Control.
+                                                              (line   39)
+ * -Werror (gcc):                         Warning Message Control.
+                                                              (line 1319)
+ * -ws (gnatbind):                        Binder Error Message Control.
+                                                              (line   35)
+ * -Wstack-usage (gcc):                   Warning Message Control.
+                                                              (line 1299)
+ * -Wuninitialized (gcc):                 Warning Message Control.
+                                                              (line 1293)
+ * -Wunused (gcc):                        Warning Message Control.
+                                                              (line 1285)
+ * -Wx (gnatbind):                        Switches for gnatbind.
+                                                              (line  358)
+ * -Wx (gnatbind) <1>:                    Consistency-Checking Modes.
+                                                              (line   18)
+ * -x (gnatbind):                         Switches for gnatbind.
+                                                              (line  363)
+ * -x (gnatbind) <1>:                     Consistency-Checking Modes.
+                                                              (line   28)
+ * -X (gnatclean):                        Switches for gnatclean.
+                                                              (line   90)
+ * -x (gnatmake):                         Switches for gnatmake.
+                                                              (line  405)
+ * -x (gnatname):                         Switches for gnatname.
+                                                              (line  116)
+ * -xdr (gnatbind):                       Switches for gnatbind.
+                                                              (line  367)
+ * -Xnnn (gnatbind):                      Switches for gnatbind.
+                                                              (line  376)
+ * -y (gnatbind):                         Switches for gnatbind.
+                                                              (line  380)
+ * -z (gnatbind):                         Switches for gnatbind.
+                                                              (line  384)
+ * -z (gnatbind) <1>:                     Binding Programs with No Main Subprogram.
+                                                              (line   12)
+ * -z (gnatmake):                         Switches for gnatmake.
+                                                              (line  423)
+ * __gnat_malloc:                         Switches for gnatbind.
+                                                              (line  137)
+ * Abnormal Termination or Failure to Terminate: Remote Debugging with gdbserver.
+                                                              (line   46)
+ * Access before elaboration:             Run-Time Checks.    (line    6)
+ * access before elaboration:             Run-Time Checks.    (line    6)
+ * activate every optional warning:       Warning Message Control.
+                                                              (line  408)
+ * ACVC:                                  Compiling Different Versions of Ada.
+                                                              (line   11)
+ * Ada:                                   Search Paths for gnatbind.
+                                                              (line   45)
+ * Ada 2005 Language Reference Manual:    What You Should Know before Reading This Guide.
+                                                              (line    6)
+ * Ada 2005 mode:                         Compiling Different Versions of Ada.
+                                                              (line   49)
+ * Ada 2012 mode:                         Compiling Different Versions of Ada.
+                                                              (line   58)
+ * Ada 2022 mode:                         Compiling Different Versions of Ada.
+                                                              (line   67)
+ * Ada 83 mode:                           Compiling Different Versions of Ada.
+                                                              (line   11)
+ * Ada 83 tests:                          Compiling Different Versions of Ada.
+                                                              (line   11)
+ * Ada 95 Language Reference Manual:      What You Should Know before Reading This Guide.
+                                                              (line    6)
+ * Ada 95 mode:                           Compiling Different Versions of Ada.
+                                                              (line   35)
+ * Ada compatibility issues warnings:     Warning Message Control.
+                                                              (line 1209)
+ * Ada compatibility issues warnings <1>: Warning Message Control.
+                                                              (line 1222)
+ * Ada expressions (in gdb):              Using Ada Expressions.
+                                                              (line    6)
+ * Ada language extensions:               Compiling Different Versions of Ada.
+                                                              (line   72)
+ * Ada language extensions <1>:           Compiling Different Versions of Ada.
+                                                              (line   80)
+ * Ada Library Information files:         The Ada Library Information Files.
+                                                              (line    6)
+ * Ada.Characters.Latin_1:                Latin-1.            (line   13)
+ * adafinal:                              Binding with Non-Ada Main Programs.
+                                                              (line   38)
+ * adainit:                               Binding with Non-Ada Main Programs.
+                                                              (line   22)
+ * ADA_INCLUDE_PATH:                      Using a library.    (line   54)
+ * ADA_INCLUDE_PATH <1>:                  Search Paths and the Run-Time Library RTL.
+                                                              (line   28)
+ * ADA_INCLUDE_PATH <2>:                  Search Paths and the Run-Time Library RTL.
+                                                              (line   28)
+ * ADA_OBJECTS_PATH:                      Using a library.    (line   58)
+ * ADA_OBJECTS_PATH <1>:                  Search Paths for gnatbind.
+                                                              (line   27)
+ * ADA_OBJECTS_PATH <2>:                  Search Paths for gnatbind.
+                                                              (line   27)
+ * ADA_PRJ_INCLUDE_FILE:                  Search Paths and the Run-Time Library RTL.
+                                                              (line   22)
+ * ADA_PRJ_INCLUDE_FILE <1>:              Search Paths and the Run-Time Library RTL.
+                                                              (line   23)
+ * ADA_PRJ_INCLUDE_FILE <2>:              Search Paths and the Run-Time Library RTL.
+                                                              (line   23)
+ * ADA_PRJ_OBJECTS_FILE:                  Search Paths for gnatbind.
+                                                              (line   20)
+ * ADA_PRJ_OBJECTS_FILE <1>:              Search Paths for gnatbind.
+                                                              (line   21)
+ * ADA_PRJ_OBJECTS_FILE <2>:              Search Paths for gnatbind.
+                                                              (line   23)
+ * ADA_PROJECT_PATH:                      Installing a library.
+                                                              (line    6)
+ * Address Clauses:                       Warning Message Control.
+                                                              (line  714)
+ * ALI files:                             The Ada Library Information Files.
+                                                              (line    6)
+ * Aliasing:                              Optimization and Strict Aliasing.
+                                                              (line    6)
+ * Aliasing <1>:                          Aliased Variables and Optimization.
+                                                              (line    6)
+ * alternative:                           Alternative File Naming Schemes.
+                                                              (line    6)
+ * Annex A (in Ada Reference Manual):     Naming Conventions for GNAT Source Files.
+                                                              (line   45)
+ * Annex B (in Ada reference Manual):     Naming Conventions for GNAT Source Files.
+                                                              (line   48)
+ * Anonymous allocators:                  Warning Message Control.
+                                                              (line  219)
+ * Anonymous allocators <1>:              Warning Message Control.
+                                                              (line  228)
+ * APIENTRY:                              Windows Calling Conventions.
+                                                              (line    6)
+ * Asm:                                   Calling Conventions.
+                                                              (line   48)
+ * Assert:                                Debugging and Assertion Control.
+                                                              (line    8)
+ * Assert failures:                       Warning Message Control.
+                                                              (line  203)
+ * Assert failures <1>:                   Warning Message Control.
+                                                              (line  212)
+ * Assertions:                            Debugging and Assertion Control.
+                                                              (line    8)
+ * Atomic:                                Atomic Variables and Optimization.
+                                                              (line    6)
+ * Atomic Synchronization:                Warning Message Control.
+                                                              (line  699)
+ * Atomic Synchronization <1>:            Warning Message Control.
+                                                              (line  711)
+ * attach to process:                     Program Built with Foreign Tools and DLL Built with GCC/GNAT.
+                                                              (line   71)
+ * Bad fixed values:                      Warning Message Control.
+                                                              (line  235)
+ * Biased representation:                 Warning Message Control.
+                                                              (line  255)
+ * Binder:                                Binding with Non-Ada Main Programs.
+                                                              (line   45)
+ * Binder consistency checks:             Binder Error Message Control.
+                                                              (line   43)
+ * Binder output (example):               Example of Binder Output File.
+                                                              (line    6)
+ * Binder output file:                    Interfacing to C.   (line   83)
+ * Binding generation (for Ada specs):    Generating C Headers for Ada Specifications.
+                                                              (line    6)
+ * Binding generation (for C and C++ headers): Generating Ada Bindings for C and C++ headers.
+                                                              (line    6)
+ * BINUTILS_ROOT:                         Linking a Mixed C++ & Ada Program.
+                                                              (line   29)
+ * bit order warnings:                    Warning Message Control.
+                                                              (line 1107)
+ * Breakpoints and tasks:                 Ada Tasks.          (line   26)
+ * building:                              Building DLLs with GNAT Project files.
+                                                              (line    6)
+ * building <1>:                          Building DLLs with GNAT.
+                                                              (line    6)
+ * building <2>:                          Building DLLs with gnatdll.
+                                                              (line    6)
+ * building <3>:                          Building Resources. (line    6)
+ * Building the GNAT Run-Time Library:    Rebuilding the GNAT Run-Time Library.
+                                                              (line    6)
+ * C:                                     Calling Conventions.
+                                                              (line   57)
+ * C headers (binding generation):        Generating Ada Bindings for C and C++ headers.
+                                                              (line    6)
+ * C headers (binding generation) <1>:    Generating C Headers for Ada Specifications.
+                                                              (line    6)
+ * C varargs function:                    Calling Conventions.
+                                                              (line   64)
+ * C++:                                   Calling Conventions.
+                                                              (line   89)
+ * C++ headers (binding generation):      Generating Ada Bindings for C and C++ headers.
+                                                              (line    6)
+ * Calling Conventions:                   Calling Conventions.
+                                                              (line    6)
+ * cannot generate code:                  Compiling Programs. (line   29)
+ * Check:                                 Run-Time Checks.    (line   64)
+ * Check <1>:                             Run-Time Checks.    (line  129)
+ * Checks:                                Run-Time Checks.    (line    6)
+ * Checks <1>:                            Run-Time Checks.    (line    6)
+ * Checks <2>:                            Run-Time Checks.    (line    6)
+ * Checks <3>:                            Run-Time Checks.    (line   14)
+ * Checks <4>:                            Run-Time Checks.    (line   60)
+ * Checks <5>:                            Run-Time Checks.    (line  137)
+ * Checks <6>:                            Controlling Run-Time Checks.
+                                                              (line   31)
+ * Checks (overflow):                     Example of unused subprogram/data elimination.
+                                                              (line   56)
+ * COBOL:                                 Calling Conventions.
+                                                              (line   52)
+ * code page 437 (IBM PC):                Other 8-Bit Codes.  (line   33)
+ * code page 850 (IBM PC):                Other 8-Bit Codes.  (line   42)
+ * Combining GNAT switches:               Alphabetical List of All Switches.
+                                                              (line  935)
+ * Command Line Argument Expansion:       Disabling Command Line Argument Expansion.
+                                                              (line    6)
+ * Command line length:                   Switches for gnatlink.
+                                                              (line   18)
+ * Compatibility with Ada 83:             Compiling Different Versions of Ada.
+                                                              (line   11)
+ * compilation (definition):              Source Representation.
+                                                              (line   43)
+ * Compilation model:                     The GNAT Compilation Model.
+                                                              (line    6)
+ * Compile_Time_Error:                    Warning Message Control.
+                                                              (line  322)
+ * Compile_Time_Warning:                  Warning Message Control.
+                                                              (line  322)
+ * compiling:                             Compiling Resources.
+                                                              (line    6)
+ * Component clause:                      Warning Message Control.
+                                                              (line  306)
+ * Conditional compilation:               Rebuilding the GNAT Run-Time Library.
+                                                              (line   22)
+ * Conditional compilation <1>:           Conditional Compilation.
+                                                              (line    9)
+ * Conditionals:                          Warning Message Control.
+                                                              (line  272)
+ * configuration:                         Configuration Pragmas.
+                                                              (line    6)
+ * Configuration pragmas:                 Configuration Pragmas.
+                                                              (line    6)
+ * Consistency checks:                    Binder Error Message Control.
+                                                              (line   43)
+ * CONSOLE Subsystem:                     CONSOLE and WINDOWS subsystems.
+                                                              (line    6)
+ * constant:                              Warning Message Control.
+                                                              (line  272)
+ * Convention Ada:                        Calling Conventions.
+                                                              (line   10)
+ * Convention Asm:                        Calling Conventions.
+                                                              (line   48)
+ * Convention Assembler:                  Calling Conventions.
+                                                              (line   42)
+ * Convention C:                          Calling Conventions.
+                                                              (line   57)
+ * Convention C++:                        Calling Conventions.
+                                                              (line   89)
+ * Convention COBOL:                      Calling Conventions.
+                                                              (line   52)
+ * Convention Default:                    Calling Conventions.
+                                                              (line   81)
+ * Convention DLL:                        Calling Conventions.
+                                                              (line  159)
+ * Convention External:                   Calling Conventions.
+                                                              (line   85)
+ * Convention Fortran:                    Calling Conventions.
+                                                              (line   95)
+ * Convention Stdcall:                    Calling Conventions.
+                                                              (line  151)
+ * Convention Stubbed:                    Calling Conventions.
+                                                              (line  167)
+ * Convention Win32:                      Calling Conventions.
+                                                              (line  163)
+ * Conventions:                           Conventions.        (line    6)
+ * CR:                                    Source Representation.
+                                                              (line    6)
+ * Cyrillic:                              Other 8-Bit Codes.  (line   23)
+ * C_INCLUDE_PATH:                        Linking a Mixed C++ & Ada Program.
+                                                              (line   28)
+ * Deactivated code:                      Warning Message Control.
+                                                              (line  996)
+ * Debug:                                 Debugging and Assertion Control.
+                                                              (line    8)
+ * Debug Pool:                            The GNAT Debug Pool Facility.
+                                                              (line    6)
+ * Debugger:                              Running and Debugging Ada Programs.
+                                                              (line   24)
+ * Debugging:                             Running and Debugging Ada Programs.
+                                                              (line    6)
+ * Debugging Generic Units:               Ada Tasks.          (line   56)
+ * Debugging information:                 Switches for gnatlink.
+                                                              (line   27)
+ * Debugging optimized code:              Debugging Optimized Code.
+                                                              (line    6)
+ * Debugging options:                     Debugging Control.  (line    6)
+ * Default:                               Calling Conventions.
+                                                              (line   81)
+ * Definition file:                       Creating an Import Library.
+                                                              (line   12)
+ * Deleted code:                          Warning Message Control.
+                                                              (line  996)
+ * Dependencies:                          Switches for gnatmake.
+                                                              (line  313)
+ * Dependency rules (compilation):        Building with gnatmake.
+                                                              (line   19)
+ * Dereferencing:                         Warning Message Control.
+                                                              (line  350)
+ * Dimension aspect:                      Performing Dimensionality Analysis in GNAT.
+                                                              (line   13)
+ * Dimension aspect <1>:                  Performing Dimensionality Analysis in GNAT.
+                                                              (line  153)
+ * Dimension Vector (for a dimensioned subtype): Performing Dimensionality Analysis in GNAT.
+                                                              (line  153)
+ * Dimensionable type:                    Performing Dimensionality Analysis in GNAT.
+                                                              (line  148)
+ * Dimensionality analysis:               Performing Dimensionality Analysis in GNAT.
+                                                              (line    6)
+ * Dimensioned subtype:                   Performing Dimensionality Analysis in GNAT.
+                                                              (line  148)
+ * Dimension_System aspect:               Performing Dimensionality Analysis in GNAT.
+                                                              (line   13)
+ * Dimension_System aspect <1>:           Performing Dimensionality Analysis in GNAT.
+                                                              (line  153)
+ * Division by zero:                      Run-Time Checks.    (line    6)
+ * division by zero:                      Run-Time Checks.    (line    6)
+ * DLL:                                   Calling Conventions.
+                                                              (line  159)
+ * DLL <1>:                               Introduction to Dynamic Link Libraries DLLs.
+                                                              (line    6)
+ * DLL debugging:                         Debugging a DLL.    (line    6)
+ * DLL debugging <1>:                     Program Built with Foreign Tools and DLL Built with GCC/GNAT.
+                                                              (line   71)
+ * DLLs:                                  Building DLLs with GNAT Project files.
+                                                              (line    6)
+ * DLLs <1>:                              Building DLLs with GNAT.
+                                                              (line    6)
+ * DLLs <2>:                              Building DLLs with gnatdll.
+                                                              (line    6)
+ * DLLs and elaboration:                  Ada DLLs and Elaboration.
+                                                              (line    6)
+ * DLLs and finalization:                 Ada DLLs and Finalization.
+                                                              (line    6)
+ * Dynamic elaboration model:             Controlling the Elaboration Order in GNAT.
+                                                              (line   10)
+ * Elaboration:                           Warning Message Control.
+                                                              (line  621)
+ * elaboration:                           Run-Time Checks.    (line  129)
+ * Elaboration checks:                    Run-Time Checks.    (line  129)
+ * Elaboration control:                   Elaboration Order Handling in GNAT.
+                                                              (line    6)
+ * Elaboration order control:             Comparison between GNAT and C/C++ Compilation Models.
+                                                              (line   24)
+ * End of source file; Source file, end:  Source Representation.
+                                                              (line   37)
+ * environment variable; ADA_INCLUDE_PATH: Using a library.   (line   54)
+ * environment variable; ADA_INCLUDE_PATH <1>: Search Paths and the Run-Time Library RTL.
+                                                              (line   28)
+ * environment variable; ADA_OBJECTS_PATH: Using a library.   (line   58)
+ * environment variable; ADA_OBJECTS_PATH <1>: Search Paths for gnatbind.
+                                                              (line   27)
+ * environment variable; ADA_PRJ_INCLUDE_FILE: Search Paths and the Run-Time Library RTL.
+                                                              (line   23)
+ * environment variable; ADA_PRJ_INCLUDE_FILE <1>: Search Paths and the Run-Time Library RTL.
+                                                              (line   23)
+ * environment variable; ADA_PRJ_OBJECTS_FILE: Search Paths for gnatbind.
+                                                              (line   21)
+ * environment variable; ADA_PRJ_OBJECTS_FILE <1>: Search Paths for gnatbind.
+                                                              (line   23)
+ * environment variable; BINUTILS_ROOT:   Linking a Mixed C++ & Ada Program.
+                                                              (line   29)
+ * environment variable; C_INCLUDE_PATH:  Linking a Mixed C++ & Ada Program.
+                                                              (line   28)
+ * environment variable; GCC_EXEC_PREFIX: Linking a Mixed C++ & Ada Program.
+                                                              (line   29)
+ * environment variable; GCC_ROOT:        Linking a Mixed C++ & Ada Program.
+                                                              (line   29)
+ * environment variable; PATH:            Search Paths and the Run-Time Library RTL.
+                                                              (line   30)
+ * environment variable; PATH <1>:        Search Paths for gnatbind.
+                                                              (line   29)
+ * environment variable; TMP:             Temporary Files.    (line    7)
+ * environment variable; TMP <1>:         Temporary Files.    (line    9)
+ * environment variable; TMP <2>:         Temporary Files.    (line   12)
+ * Error messages:                        Output and Error Message Control.
+                                                              (line  131)
+ * EUC Coding:                            Wide_Character Encodings.
+                                                              (line   42)
+ * Exceptions (in gdb):                   Stopping When Ada Exceptions Are Raised.
+                                                              (line    6)
+ * Export table:                          Exporting Ada Entities.
+                                                              (line    6)
+ * Export/Import pragma warnings:         Warning Message Control.
+                                                              (line 1171)
+ * External:                              Calling Conventions.
+                                                              (line   85)
+ * Features:                              Warning Message Control.
+                                                              (line  543)
+ * FF:                                    Source Representation.
+                                                              (line    6)
+ * File cleanup tool:                     The File Cleanup Utility gnatclean.
+                                                              (line    6)
+ * File names:                            Using Other File Names.
+                                                              (line    6)
+ * File names <1>:                        Alternative File Naming Schemes.
+                                                              (line    6)
+ * File Naming Conventions:               Handling Arbitrary File Naming Conventions with gnatname.
+                                                              (line    6)
+ * File naming schemes:                   Alternative File Naming Schemes.
+                                                              (line    6)
+ * Fixed-point Small value:               Warning Message Control.
+                                                              (line  235)
+ * Floating-Point Operations:             Floating Point Operations.
+                                                              (line    6)
+ * for gnatmake:                          Switches for gnatmake.
+                                                              (line  464)
+ * for profiling:                         Compilation for profiling.
+                                                              (line    6)
+ * for profiling <1>:                     Compilation for profiling.
+                                                              (line    6)
+ * Foreign Languages:                     Calling Conventions.
+                                                              (line    6)
+ * Formals:                               Warning Message Control.
+                                                              (line  428)
+ * Fortran:                               Calling Conventions.
+                                                              (line   95)
+ * GCC_EXEC_PREFIX:                       Linking a Mixed C++ & Ada Program.
+                                                              (line   29)
+ * GCC_ROOT:                              Linking a Mixed C++ & Ada Program.
+                                                              (line   29)
+ * gdb:                                   Running and Debugging Ada Programs.
+                                                              (line   24)
+ * Generic formal parameters:             Compiling Different Versions of Ada.
+                                                              (line   25)
+ * Generics:                              Generating Object Files.
+                                                              (line   32)
+ * Generics <1>:                          Ada Tasks.          (line   55)
+ * GNAT:                                  Search Paths for gnatbind.
+                                                              (line   45)
+ * GNAT (package):                        Naming Conventions for GNAT Source Files.
+                                                              (line   54)
+ * GNAT compilation model:                The GNAT Compilation Model.
+                                                              (line    6)
+ * GNAT extensions:                       Compiling Different Versions of Ada.
+                                                              (line   72)
+ * GNAT extensions <1>:                   Compiling Different Versions of Ada.
+                                                              (line   80)
+ * GNAT library:                          Comparison between GNAT and Conventional Ada Library Models.
+                                                              (line   10)
+ * GNAT Run-Time Library:                 Rebuilding the GNAT Run-Time Library.
+                                                              (line    6)
+ * gnat.adc:                              Using Other File Names.
+                                                              (line   35)
+ * gnat.adc <1>:                          The Configuration Pragmas Files.
+                                                              (line    6)
+ * gnat1:                                 Compiling Programs. (line   66)
+ * gnatbind:                              Binding with gnatbind.
+                                                              (line    6)
+ * gnatchop:                              Renaming Files with gnatchop.
+                                                              (line    6)
+ * gnatclean:                             The File Cleanup Utility gnatclean.
+                                                              (line    6)
+ * gnatdll:                               Using gnatdll.      (line    6)
+ * gnatkr:                                File Name Krunching with gnatkr.
+                                                              (line    6)
+ * gnatlink:                              Linking with gnatlink.
+                                                              (line    6)
+ * gnatls:                                The GNAT Library Browser gnatls.
+                                                              (line    6)
+ * gnatmake:                              Building with gnatmake.
+                                                              (line    6)
+ * gnatname:                              Alternative File Naming Schemes.
+                                                              (line  117)
+ * gnatprep:                              Preprocessing.      (line   17)
+ * gnatprep <1>:                          Preprocessing with gnatprep.
+                                                              (line    6)
+ * gnat_argc:                             Command-Line Access.
+                                                              (line   13)
+ * gnat_argv:                             Command-Line Access.
+                                                              (line   13)
+ * GNAT_INIT_SCALARS:                     Switches for gnatbind.
+                                                              (line  300)
+ * GNU make:                              Using the GNU make Utility.
+                                                              (line    6)
+ * GNU/Linux:                             Choosing the Scheduling Policy.
+                                                              (line   38)
+ * gprof:                                 Profiling.          (line    9)
+ * GPR_PROJECT_PATH:                      Installing a library.
+                                                              (line    6)
+ * Hiding of Declarations:                Warning Message Control.
+                                                              (line  471)
+ * HT:                                    Source Representation.
+                                                              (line    6)
+ * implicit:                              Warning Message Control.
+                                                              (line  350)
+ * Implicit dereferencing:                Warning Message Control.
+                                                              (line  350)
+ * Import library:                        Creating an Import Library.
+                                                              (line    6)
+ * Improving performance:                 Improving Performance.
+                                                              (line    6)
+ * in binder:                             Binder Error Message Control.
+                                                              (line   43)
+ * in binder <1>:                         Binder Error Message Control.
+                                                              (line   43)
+ * including:                             Switches for gnatlink.
+                                                              (line   27)
+ * Inline:                                Source Dependencies.
+                                                              (line   27)
+ * Inline <1>:                            Inlining of Subprograms.
+                                                              (line   15)
+ * Inline Assembler:                      Inline Assembler.   (line    6)
+ * Inlining:                              Comparison between GNAT and Conventional Ada Library Models.
+                                                              (line   35)
+ * Inlining <1>:                          Warning Message Control.
+                                                              (line  753)
+ * Interfaces:                            Search Paths for gnatbind.
+                                                              (line   45)
+ * Interfacing to Ada:                    Calling Conventions.
+                                                              (line   10)
+ * Interfacing to Assembly:               Calling Conventions.
+                                                              (line   42)
+ * Interfacing to C:                      Calling Conventions.
+                                                              (line   57)
+ * Interfacing to C varargs function:     Calling Conventions.
+                                                              (line   64)
+ * Interfacing to C++:                    Calling Conventions.
+                                                              (line   89)
+ * Interfacing to COBOL:                  Calling Conventions.
+                                                              (line   52)
+ * Interfacing to Fortran:                Calling Conventions.
+                                                              (line   95)
+ * ISO 8859-15:                           Other 8-Bit Codes.  (line   28)
+ * ISO 8859-2:                            Other 8-Bit Codes.  (line    8)
+ * ISO 8859-3:                            Other 8-Bit Codes.  (line   13)
+ * ISO 8859-4:                            Other 8-Bit Codes.  (line   18)
+ * ISO 8859-5:                            Other 8-Bit Codes.  (line   23)
+ * Latin-1:                               Source Representation.
+                                                              (line    6)
+ * Latin-1 <1>:                           Latin-1.            (line    6)
+ * Latin-2:                               Other 8-Bit Codes.  (line    8)
+ * Latin-3:                               Other 8-Bit Codes.  (line   13)
+ * Latin-4:                               Other 8-Bit Codes.  (line   18)
+ * Latin-9:                               Other 8-Bit Codes.  (line   28)
+ * Layout:                                Warning Message Control.
+                                                              (line  830)
+ * Legacy elaboration models:             Controlling the Elaboration Order in GNAT.
+                                                              (line   74)
+ * LF:                                    Source Representation.
+                                                              (line    6)
+ * Library browser:                       The GNAT Library Browser gnatls.
+                                                              (line    6)
+ * Library building and using:            GNAT and Libraries. (line    6)
+ * Linker libraries:                      Switches for gnatmake.
+                                                              (line  478)
+ * Linux:                                 Choosing the Scheduling Policy.
+                                                              (line   39)
+ * Machine_Overflows:                     Run-Time Checks.    (line  109)
+ * make (GNU):                            Using the GNU make Utility.
+                                                              (line    6)
+ * memory corruption:                     The GNAT Debug Pool Facility.
+                                                              (line    6)
+ * Memory Pool:                           Some Useful Memory Pools.
+                                                              (line    6)
+ * Microsoft Visual Studio:               Using GNAT DLLs from Microsoft Visual Studio Applications.
+                                                              (line    6)
+ * missing:                               Warning Message Control.
+                                                              (line  306)
+ * Mixed Language Programming:            Mixed Language Programming.
+                                                              (line    6)
+ * MKS_Type type:                         Performing Dimensionality Analysis in GNAT.
+                                                              (line   26)
+ * multiple input files:                  Binding with Non-Ada Main Programs.
+                                                              (line   45)
+ * Multiple units:                        Using gcc for Syntax Checking.
+                                                              (line   37)
+ * naming scheme:                         Switches for gnatmake.
+                                                              (line  211)
+ * No information messages for why package spec needs body: Warning Message Control.
+                                                              (line 1241)
+ * non-symbolic:                          Stack Traceback.    (line   21)
+ * No_Strict_Aliasing:                    Optimization and Strict Aliasing.
+                                                              (line    6)
+ * obsolescent:                           Warning Message Control.
+                                                              (line  543)
+ * Obsolescent features:                  Warning Message Control.
+                                                              (line  543)
+ * Optimization and debugging:            Debugging Optimized Code.
+                                                              (line    6)
+ * Optimization Switches:                 Vectorization of loops.
+                                                              (line    6)
+ * Optimization Switches <1>:             Other Optimization Switches.
+                                                              (line    6)
+ * Order of elaboration:                  Elaboration Order Handling in GNAT.
+                                                              (line    6)
+ * OS X:                                  Mac OS Topics.      (line    6)
+ * Other Ada compilers:                   Calling Conventions.
+                                                              (line   10)
+ * overflow:                              Run-Time Checks.    (line   64)
+ * overflow <1>:                          Controlling Run-Time Checks.
+                                                              (line   31)
+ * Overflow checks:                       Run-Time Checks.    (line   64)
+ * Overflow checks <1>:                   Controlling Run-Time Checks.
+                                                              (line   31)
+ * Overflow checks <2>:                   Example of unused subprogram/data elimination.
+                                                              (line   57)
+ * Overflow mode:                         Run-Time Checks.    (line   64)
+ * Package spec needing body:             Warning Message Control.
+                                                              (line 1229)
+ * Parallel make:                         Switches for gnatmake.
+                                                              (line  264)
+ * Parameter order:                       Warning Message Control.
+                                                              (line  773)
+ * Parentheses:                           Warning Message Control.
+                                                              (line  809)
+ * Passive Task:                          Passive Task Optimization.
+                                                              (line    6)
+ * PATH:                                  Search Paths and the Run-Time Library RTL.
+                                                              (line   30)
+ * PATH <1>:                              Search Paths for gnatbind.
+                                                              (line   29)
+ * pool:                                  Some Useful Memory Pools.
+                                                              (line    6)
+ * pool <1>:                              The GNAT Debug Pool Facility.
+                                                              (line    6)
+ * Postcondition:                         Debugging and Assertion Control.
+                                                              (line    8)
+ * pragma Assert:                         Debugging - A Special Case.
+                                                              (line   22)
+ * pragma Assertion_Policy:               Debugging - A Special Case.
+                                                              (line   42)
+ * pragma Debug:                          Debugging - A Special Case.
+                                                              (line   49)
+ * pragma Debug_Policy:                   Debugging - A Special Case.
+                                                              (line   65)
+ * pragma Elaborate (Unit):               Controlling the Elaboration Order in Ada.
+                                                              (line   96)
+ * pragma Elaborate_All (Unit):           Controlling the Elaboration Order in Ada.
+                                                              (line  138)
+ * pragma Elaborate_Body:                 Controlling the Elaboration Order in Ada.
+                                                              (line   39)
+ * pragma Export:                         The External Symbol Naming Scheme of GNAT.
+                                                              (line   20)
+ * pragma Inline:                         Inlining of Subprograms.
+                                                              (line   15)
+ * pragma Overflow_Mode:                  Specifying the Desired Mode.
+                                                              (line    6)
+ * pragma Preelaborate:                   Controlling the Elaboration Order in Ada.
+                                                              (line   33)
+ * pragma Pure:                           Controlling the Elaboration Order in Ada.
+                                                              (line   28)
+ * pragma Restrictions:                   Debugging Control.  (line  172)
+ * pragma Suppress:                       Controlling Run-Time Checks.
+                                                              (line   31)
+ * pragma Task_Dispatching_Policy:        Choosing the Scheduling Policy.
+                                                              (line   12)
+ * pragma Time_Slice:                     Choosing the Scheduling Policy.
+                                                              (line   12)
+ * pragma Unsuppress:                     Controlling Run-Time Checks.
+                                                              (line   31)
+ * Pragmas:                               Configuration Pragmas.
+                                                              (line    6)
+ * Pragmas <1>:                           Warning Message Control.
+                                                              (line  446)
+ * Precondition:                          Debugging and Assertion Control.
+                                                              (line    8)
+ * Preprocessing:                         Preprocessing.      (line    6)
+ * Preprocessing (gnatprep):              Preprocessing with gnatprep.
+                                                              (line    6)
+ * Preprocessors (contrasted with conditional compilation): Use of Boolean Constants.
+                                                              (line   23)
+ * producing list:                        Switches for gnatmake.
+                                                              (line  313)
+ * Profiling:                             Pretty-Printers for the GNAT runtime.
+                                                              (line   80)
+ * Profiling <1>:                         Profiling.          (line    9)
+ * rc:                                    Compiling Resources.
+                                                              (line    6)
+ * rebuilding:                            Rebuilding the GNAT Run-Time Library.
+                                                              (line    6)
+ * rebuilding <1>:                        Rebuilding the GNAT Run-Time Library.
+                                                              (line    6)
+ * Rebuilding the GNAT Run-Time Library:  Rebuilding the GNAT Run-Time Library.
+                                                              (line    6)
+ * Recompilation (by gnatmake):           Notes on the Command Line.
+                                                              (line    9)
+ * Record Representation (component sizes): Warning Message Control.
+                                                              (line  977)
+ * Record Representation (gaps):          Warning Message Control.
+                                                              (line  487)
+ * Relaxed elaboration mode:              Controlling the Elaboration Order in GNAT.
+                                                              (line   87)
+ * Remote Debugging with gdbserver:       Debugging Generic Units.
+                                                              (line   47)
+ * Resources:                             GNAT and Windows Resources.
+                                                              (line    6)
+ * Resources <1>:                         Building Resources. (line    6)
+ * Resources <2>:                         Compiling Resources.
+                                                              (line    6)
+ * Resources <3>:                         Using Resources.    (line    6)
+ * RTL:                                   Alphabetical List of All Switches.
+                                                              (line  838)
+ * RTL <1>:                               Alphabetical List of All Switches.
+                                                              (line  844)
+ * Run-time libraries (platform-specific information): Run-Time Libraries.
+                                                              (line    6)
+ * Run-Time Library:                      Rebuilding the GNAT Run-Time Library.
+                                                              (line    6)
+ * s-digemk.ads file:                     Performing Dimensionality Analysis in GNAT.
+                                                              (line   34)
+ * SCHED_FIFO scheduling policy:          Specifying a Run-Time Library.
+                                                              (line   54)
+ * SCHED_OTHER scheduling policy:         Specifying a Run-Time Library.
+                                                              (line   56)
+ * SCHED_RR scheduling policy:            Specifying a Run-Time Library.
+                                                              (line   56)
+ * Search paths:                          Switches for gnatmake.
+                                                              (line  464)
+ * setjmp/longjmp Exception Model:        Run-Time Libraries. (line   16)
+ * Shift JIS Coding:                      Wide_Character Encodings.
+                                                              (line   33)
+ * Size/Alignment warnings:               Warning Message Control.
+                                                              (line 1265)
+ * Size/Alignment warnings <1>:           Warning Message Control.
+                                                              (line 1275)
+ * SJLJ (setjmp/longjmp Exception Model): Run-Time Libraries. (line   16)
+ * Small value:                           Warning Message Control.
+                                                              (line  235)
+ * Source files:                          Switches for gnatmake.
+                                                              (line  472)
+ * Source files <1>:                      Running gnatbind.   (line   29)
+ * Source files <2>:                      Switches for gnatclean.
+                                                              (line  105)
+ * Source_File_Name pragma:               Using Other File Names.
+                                                              (line   12)
+ * Source_File_Name pragma <1>:           Alternative File Naming Schemes.
+                                                              (line   12)
+ * Source_Reference pragmas:              Switches for gnatchop.
+                                                              (line   61)
+ * SPARK elaboration model:               Controlling the Elaboration Order in GNAT.
+                                                              (line   64)
+ * spec (definition):                     Source Representation.
+                                                              (line   43)
+ * stack overflow checking:               Run-Time Checks.    (line    6)
+ * Stack Overflow Checking:               Run-Time Checks.    (line  137)
+ * stack overflow checking <1>:           Run-Time Checks.    (line  137)
+ * Stack Overflow Checking <1>:           Stack Overflow Checking.
+                                                              (line    6)
+ * stack traceback:                       Getting Internal Debugging Information.
+                                                              (line   22)
+ * stack unwinding:                       Getting Internal Debugging Information.
+                                                              (line   21)
+ * Stand-alone libraries:                 Stand-alone Ada Libraries.
+                                                              (line    6)
+ * Static elaboration model:              Controlling the Elaboration Order in GNAT.
+                                                              (line   38)
+ * Static Stack Usage Analysis:           Static Stack Usage Analysis.
+                                                              (line    6)
+ * Stdcall:                               Calling Conventions.
+                                                              (line  151)
+ * Stdcall <1>:                           Windows Calling Conventions.
+                                                              (line    6)
+ * stderr:                                Output and Error Message Control.
+                                                              (line    6)
+ * storage:                               Some Useful Memory Pools.
+                                                              (line    6)
+ * storage <1>:                           The GNAT Debug Pool Facility.
+                                                              (line    6)
+ * Strict Aliasing:                       Optimization and Strict Aliasing.
+                                                              (line    6)
+ * String indexing warnings:              Warning Message Control.
+                                                              (line 1127)
+ * Stubbed:                               Calling Conventions.
+                                                              (line  167)
+ * Style checking:                        Style Checking.     (line    6)
+ * SUB (control character):               Source Representation.
+                                                              (line   37)
+ * Subtype predicates:                    Debugging and Assertion Control.
+                                                              (line    8)
+ * Subunits:                              Generating Object Files.
+                                                              (line   24)
+ * Subunits (and conditional compilation): Use of Alternative Implementations.
+                                                              (line   21)
+ * Suppress:                              Run-Time Checks.    (line   60)
+ * Suppress <1>:                          Controlling Run-Time Checks.
+                                                              (line   31)
+ * suppressing:                           Output and Error Message Control.
+                                                              (line  131)
+ * suppressing <1>:                       Run-Time Checks.    (line   14)
+ * suppressing <2>:                       Run-Time Checks.    (line   60)
+ * Suppressing checks:                    Run-Time Checks.    (line   14)
+ * Suppressing checks <1>:                Run-Time Checks.    (line   60)
+ * suppressing search:                    Switches for gnatmake.
+                                                              (line  472)
+ * suppressing search <1>:                Switches for gnatclean.
+                                                              (line  105)
+ * symbolic:                              Non-Symbolic Traceback.
+                                                              (line  262)
+ * symbolic links:                        Switches for gnatmake.
+                                                              (line  205)
+ * syntax checking:                       Using gcc for Syntax Checking.
+                                                              (line   37)
+ * System:                                Search Paths for gnatbind.
+                                                              (line   45)
+ * System (package in Ada Reference Manual): Naming Conventions for GNAT Source Files.
+                                                              (line   51)
+ * System.Dim.Mks package (GNAT library): Performing Dimensionality Analysis in GNAT.
+                                                              (line   26)
+ * System.IO:                             Search Paths and the Run-Time Library RTL.
+                                                              (line   53)
+ * Task switching (in gdb):               Ada Tasks.          (line   45)
+ * Tasking and threads libraries:         Run-Time Libraries. (line    6)
+ * Tasks (in gdb):                        Stopping When Ada Exceptions Are Raised.
+                                                              (line   35)
+ * Temporary files:                       Temporary Files.    (line    6)
+ * Text_IO and performance:               Text_IO Suggestions.
+                                                              (line    6)
+ * Threads libraries and tasking:         Run-Time Libraries. (line    6)
+ * Time stamp checks:                     Binder Error Message Control.
+                                                              (line   43)
+ * TMP:                                   Temporary Files.    (line    7)
+ * TMP <1>:                               Temporary Files.    (line    9)
+ * TMP <2>:                               Temporary Files.    (line   12)
+ * traceback:                             Getting Internal Debugging Information.
+                                                              (line   22)
+ * traceback <1>:                         Stack Traceback.    (line   21)
+ * traceback <2>:                         Non-Symbolic Traceback.
+                                                              (line  263)
+ * treat as error:                        Warning Message Control.
+                                                              (line  392)
+ * treat as error <1>:                    Warning Message Control.
+                                                              (line  417)
+ * Type invariants:                       Debugging and Assertion Control.
+                                                              (line    8)
+ * typographical:                         Conventions.        (line    6)
+ * Typographical conventions:             Conventions.        (line    6)
+ * Unassigned variable warnings:          Warning Message Control.
+                                                              (line 1087)
+ * Unchecked_Conversion warnings:         Warning Message Control.
+                                                              (line 1248)
+ * unrecognized:                          Warning Message Control.
+                                                              (line  446)
+ * unreferenced:                          Warning Message Control.
+                                                              (line  428)
+ * Unsuppress:                            Run-Time Checks.    (line  142)
+ * Unsuppress <1>:                        Controlling Run-Time Checks.
+                                                              (line   31)
+ * Upper-Half Coding:                     Wide_Character Encodings.
+                                                              (line   24)
+ * use by binder:                         Running gnatbind.   (line   29)
+ * use with GNAT DLLs:                    Using GNAT DLLs from Microsoft Visual Studio Applications.
+                                                              (line    6)
+ * using:                                 Using Resources.    (line    6)
+ * Uunused subprogram/data elimination:   Reducing Size of Executables with Unused Subprogram/Data Elimination.
+                                                              (line    6)
+ * Validity Checking:                     Validity Checking.  (line    6)
+ * varargs function interfaces:           Calling Conventions.
+                                                              (line   64)
+ * Version skew (avoided by ‘‘gnatmake‘‘): Running a Simple Ada Program.
+                                                              (line   58)
+ * Volatile parameter:                    The Volatile Parameter.
+                                                              (line    6)
+ * VT:                                    Source Representation.
+                                                              (line    6)
+ * Warning messages:                      Warning Message Control.
+                                                              (line    6)
+ * Warnings:                              Warning Message Control.
+                                                              (line  392)
+ * Warnings <1>:                          Warning Message Control.
+                                                              (line  408)
+ * Warnings <2>:                          Warning Message Control.
+                                                              (line  417)
+ * warnings:                              Warning Message Control.
+                                                              (line  621)
+ * warnings <1>:                          Warning Message Control.
+                                                              (line  699)
+ * warnings <2>:                          Warning Message Control.
+                                                              (line  711)
+ * warnings <3>:                          Warning Message Control.
+                                                              (line  714)
+ * warnings <4>:                          Warning Message Control.
+                                                              (line  753)
+ * warnings <5>:                          Warning Message Control.
+                                                              (line  773)
+ * warnings <6>:                          Warning Message Control.
+                                                              (line  809)
+ * warnings <7>:                          Warning Message Control.
+                                                              (line  830)
+ * warnings <8>:                          Warning Message Control.
+                                                              (line  996)
+ * warnings <9>:                          Warning Message Control.
+                                                              (line  996)
+ * Warnings <3>:                          Binder Error Message Control.
+                                                              (line   35)
+ * Warnings Off control:                  Warning Message Control.
+                                                              (line 1151)
+ * Win32:                                 Calling Conventions.
+                                                              (line  163)
+ * Windows:                               A GNU/Linux Debug Quirk.
+                                                              (line   18)
+ * windows:                               GNAT and Windows Resources.
+                                                              (line    6)
+ * WINDOWS Subsystem:                     CONSOLE and WINDOWS subsystems.
+                                                              (line    6)
+ * windres:                               Compiling Resources.
+                                                              (line    6)
+ * ZCX (Zero-Cost Exceptions):            Run-Time Libraries. (line   13)
+ * Zero Cost Exceptions:                  Exception Handling Control.
+                                                              (line   40)
+ * Zero-Cost Exceptions:                  Run-Time Libraries. (line   13)
+ 
+                                                              
+ 
+ 
+ 
+ Tag Table:
+ Node: Top350
+ Ref: gnat_ugn doc634
+ Ref: 0634
+ Node: About This Guide12144
+ Ref: gnat_ugn/about_this_guide doc12248
+ Ref: 212248
+ Ref: gnat_ugn/about_this_guide about-this-guide12248
+ Ref: 312248
+ Ref: gnat_ugn/about_this_guide gnat-user-s-guide-for-native-platforms12248
+ Ref: 412248
+ Ref: gnat_ugn/about_this_guide id112248
+ Ref: 512248
+ Node: What This Guide Contains13073
+ Ref: gnat_ugn/about_this_guide what-this-guide-contains13207
+ Ref: 713207
+ Node: What You Should Know before Reading This Guide14643
+ Ref: gnat_ugn/about_this_guide what-you-should-know-before-reading-this-guide14805
+ Ref: 1114805
+ Node: Related Information15157
+ Ref: gnat_ugn/about_this_guide related-information15306
+ Ref: 1215306
+ Node: Conventions16192
+ Ref: gnat_ugn/about_this_guide conventions16286
+ Ref: 1316286
+ Node: Getting Started with GNAT17110
+ Ref: gnat_ugn/getting_started_with_gnat doc17237
+ Ref: 1417237
+ Ref: gnat_ugn/getting_started_with_gnat getting-started-with-gnat17237
+ Ref: 817237
+ Ref: gnat_ugn/getting_started_with_gnat id117237
+ Ref: 1517237
+ Node: System Requirements17883
+ Ref: gnat_ugn/getting_started_with_gnat id217987
+ Ref: 1617987
+ Ref: gnat_ugn/getting_started_with_gnat system-requirements17987
+ Ref: 1717987
+ Node: Running GNAT19434
+ Ref: gnat_ugn/getting_started_with_gnat id319575
+ Ref: 1819575
+ Ref: gnat_ugn/getting_started_with_gnat running-gnat19575
+ Ref: 1919575
+ Node: Running a Simple Ada Program20073
+ Ref: gnat_ugn/getting_started_with_gnat id420232
+ Ref: 1a20232
+ Ref: gnat_ugn/getting_started_with_gnat running-a-simple-ada-program20232
+ Ref: 1b20232
+ Node: Running a Program with Multiple Units23209
+ Ref: gnat_ugn/getting_started_with_gnat id523347
+ Ref: 1e23347
+ Ref: gnat_ugn/getting_started_with_gnat running-a-program-with-multiple-units23347
+ Ref: 1f23347
+ Node: The GNAT Compilation Model24956
+ Ref: gnat_ugn/the_gnat_compilation_model doc25105
+ Ref: 2025105
+ Ref: gnat_ugn/the_gnat_compilation_model id125105
+ Ref: 2125105
+ Ref: gnat_ugn/the_gnat_compilation_model the-gnat-compilation-model25105
+ Ref: 925105
+ Node: Source Representation26523
+ Ref: gnat_ugn/the_gnat_compilation_model id226649
+ Ref: 2f26649
+ Ref: gnat_ugn/the_gnat_compilation_model source-representation26649
+ Ref: 2226649
+ Node: Foreign Language Representation29113
+ Ref: gnat_ugn/the_gnat_compilation_model foreign-language-representation29280
+ Ref: 2329280
+ Ref: gnat_ugn/the_gnat_compilation_model id329280
+ Ref: 3029280
+ Node: Latin-129653
+ Ref: gnat_ugn/the_gnat_compilation_model id429756
+ Ref: 3229756
+ Ref: gnat_ugn/the_gnat_compilation_model latin-129756
+ Ref: 3329756
+ Node: Other 8-Bit Codes30544
+ Ref: gnat_ugn/the_gnat_compilation_model id530680
+ Ref: 3430680
+ Ref: gnat_ugn/the_gnat_compilation_model other-8-bit-codes30680
+ Ref: 3530680
+ Node: Wide_Character Encodings32903
+ Ref: gnat_ugn/the_gnat_compilation_model id633061
+ Ref: 3633061
+ Ref: gnat_ugn/the_gnat_compilation_model wide-character-encodings33061
+ Ref: 3733061
+ Node: Wide_Wide_Character Encodings36901
+ Ref: gnat_ugn/the_gnat_compilation_model id737033
+ Ref: 3837033
+ Ref: gnat_ugn/the_gnat_compilation_model wide-wide-character-encodings37033
+ Ref: 3937033
+ Node: File Naming Topics and Utilities38761
+ Ref: gnat_ugn/the_gnat_compilation_model file-naming-topics-and-utilities38928
+ Ref: 2438928
+ Ref: gnat_ugn/the_gnat_compilation_model id838928
+ Ref: 3a38928
+ Node: File Naming Rules39437
+ Ref: gnat_ugn/the_gnat_compilation_model file-naming-rules39556
+ Ref: 3b39556
+ Ref: gnat_ugn/the_gnat_compilation_model id939556
+ Ref: 3c39556
+ Node: Using Other File Names43087
+ Ref: gnat_ugn/the_gnat_compilation_model id1043246
+ Ref: 3e43246
+ Ref: gnat_ugn/the_gnat_compilation_model using-other-file-names43246
+ Ref: 1c43246
+ Node: Alternative File Naming Schemes45494
+ Ref: gnat_ugn/the_gnat_compilation_model alternative-file-naming-schemes45692
+ Ref: 4045692
+ Ref: gnat_ugn/the_gnat_compilation_model id1145692
+ Ref: 4145692
+ Node: Handling Arbitrary File Naming Conventions with gnatname50834
+ Ref: gnat_ugn/the_gnat_compilation_model handling-arbitrary-file-naming-conventions-with-gnatname51041
+ Ref: 4251041
+ Ref: gnat_ugn/the_gnat_compilation_model id1251041
+ Ref: 4351041
+ Node: Arbitrary File Naming Conventions51302
+ Ref: gnat_ugn/the_gnat_compilation_model arbitrary-file-naming-conventions51455
+ Ref: 4451455
+ Ref: gnat_ugn/the_gnat_compilation_model id1351455
+ Ref: 4551455
+ Node: Running gnatname52595
+ Ref: gnat_ugn/the_gnat_compilation_model id1452778
+ Ref: 4652778
+ Ref: gnat_ugn/the_gnat_compilation_model running-gnatname52778
+ Ref: 4752778
+ Node: Switches for gnatname54644
+ Ref: gnat_ugn/the_gnat_compilation_model id1554820
+ Ref: 4854820
+ Ref: gnat_ugn/the_gnat_compilation_model switches-for-gnatname54820
+ Ref: 4954820
+ Node: Examples of gnatname Usage59618
+ Ref: gnat_ugn/the_gnat_compilation_model examples-of-gnatname-usage59769
+ Ref: 4a59769
+ Ref: gnat_ugn/the_gnat_compilation_model id1659769
+ Ref: 4b59769
+ Node: File Name Krunching with gnatkr60464
+ Ref: gnat_ugn/the_gnat_compilation_model file-name-krunching-with-gnatkr60668
+ Ref: 4c60668
+ Ref: gnat_ugn/the_gnat_compilation_model id1760668
+ Ref: 4d60668
+ Node: About gnatkr61129
+ Ref: gnat_ugn/the_gnat_compilation_model about-gnatkr61232
+ Ref: 4e61232
+ Ref: gnat_ugn/the_gnat_compilation_model id1861232
+ Ref: 4f61232
+ Node: Using gnatkr62213
+ Ref: gnat_ugn/the_gnat_compilation_model id1962341
+ Ref: 5062341
+ Ref: gnat_ugn/the_gnat_compilation_model using-gnatkr62341
+ Ref: 3d62341
+ Node: Krunching Method63865
+ Ref: gnat_ugn/the_gnat_compilation_model id2064005
+ Ref: 5164005
+ Ref: gnat_ugn/the_gnat_compilation_model krunching-method64005
+ Ref: 5264005
+ Node: Examples of gnatkr Usage67493
+ Ref: gnat_ugn/the_gnat_compilation_model examples-of-gnatkr-usage67612
+ Ref: 5367612
+ Ref: gnat_ugn/the_gnat_compilation_model id2167612
+ Ref: 5467612
+ Node: Renaming Files with gnatchop68059
+ Ref: gnat_ugn/the_gnat_compilation_model id2268198
+ Ref: 5568198
+ Ref: gnat_ugn/the_gnat_compilation_model renaming-files-with-gnatchop68198
+ Ref: 1d68198
+ Node: Handling Files with Multiple Units68663
+ Ref: gnat_ugn/the_gnat_compilation_model handling-files-with-multiple-units68811
+ Ref: 5668811
+ Ref: gnat_ugn/the_gnat_compilation_model id2368811
+ Ref: 5768811
+ Node: Operating gnatchop in Compilation Mode70047
+ Ref: gnat_ugn/the_gnat_compilation_model id2470229
+ Ref: 5870229
+ Ref: gnat_ugn/the_gnat_compilation_model operating-gnatchop-in-compilation-mode70229
+ Ref: 5970229
+ Node: Command Line for gnatchop73377
+ Ref: gnat_ugn/the_gnat_compilation_model command-line-for-gnatchop73546
+ Ref: 5a73546
+ Ref: gnat_ugn/the_gnat_compilation_model id2573546
+ Ref: 5b73546
+ Node: Switches for gnatchop75367
+ Ref: gnat_ugn/the_gnat_compilation_model id2675524
+ Ref: 5c75524
+ Ref: gnat_ugn/the_gnat_compilation_model switches-for-gnatchop75524
+ Ref: 5d75524
+ Node: Examples of gnatchop Usage79547
+ Ref: gnat_ugn/the_gnat_compilation_model examples-of-gnatchop-usage79670
+ Ref: 5e79670
+ Ref: gnat_ugn/the_gnat_compilation_model id2779670
+ Ref: 5f79670
+ Node: Configuration Pragmas80910
+ Ref: gnat_ugn/the_gnat_compilation_model configuration-pragmas81069
+ Ref: 2581069
+ Ref: gnat_ugn/the_gnat_compilation_model id2881069
+ Ref: 6081069
+ Node: Handling of Configuration Pragmas83314
+ Ref: gnat_ugn/the_gnat_compilation_model handling-of-configuration-pragmas83447
+ Ref: 3f83447
+ Ref: gnat_ugn/the_gnat_compilation_model id2983447
+ Ref: 6183447
+ Node: The Configuration Pragmas Files85420
+ Ref: gnat_ugn/the_gnat_compilation_model id3085553
+ Ref: 6285553
+ Ref: gnat_ugn/the_gnat_compilation_model the-configuration-pragmas-files85553
+ Ref: 6385553
+ Node: Generating Object Files87749
+ Ref: gnat_ugn/the_gnat_compilation_model generating-object-files87895
+ Ref: 2687895
+ Ref: gnat_ugn/the_gnat_compilation_model id3187895
+ Ref: 6487895
+ Node: Source Dependencies90469
+ Ref: gnat_ugn/the_gnat_compilation_model id3290627
+ Ref: 6590627
+ Ref: gnat_ugn/the_gnat_compilation_model source-dependencies90627
+ Ref: 2790627
+ Node: The Ada Library Information Files94323
+ Ref: gnat_ugn/the_gnat_compilation_model id3394480
+ Ref: 6694480
+ Ref: gnat_ugn/the_gnat_compilation_model the-ada-library-information-files94480
+ Ref: 2894480
+ Node: Binding an Ada Program96501
+ Ref: gnat_ugn/the_gnat_compilation_model binding-an-ada-program96657
+ Ref: 2996657
+ Ref: gnat_ugn/the_gnat_compilation_model id3496657
+ Ref: 6796657
+ Node: GNAT and Libraries98359
+ Ref: gnat_ugn/the_gnat_compilation_model gnat-and-libraries98505
+ Ref: 2a98505
+ Ref: gnat_ugn/the_gnat_compilation_model id3598505
+ Ref: 6898505
+ Node: Introduction to Libraries in GNAT98991
+ Ref: gnat_ugn/the_gnat_compilation_model id3699111
+ Ref: 6999111
+ Ref: gnat_ugn/the_gnat_compilation_model introduction-to-libraries-in-gnat99111
+ Ref: 6a99111
+ Node: General Ada Libraries101256
+ Ref: gnat_ugn/the_gnat_compilation_model general-ada-libraries101410
+ Ref: 6c101410
+ Ref: gnat_ugn/the_gnat_compilation_model id37101410
+ Ref: 6d101410
+ Node: Building a library101545
+ Ref: gnat_ugn/the_gnat_compilation_model building-a-library101652
+ Ref: 6e101652
+ Ref: gnat_ugn/the_gnat_compilation_model id38101652
+ Ref: 6f101652
+ Node: Installing a library105536
+ Ref: gnat_ugn/the_gnat_compilation_model id39105667
+ Ref: 71105667
+ Ref: gnat_ugn/the_gnat_compilation_model installing-a-library105667
+ Ref: 72105667
+ Node: Using a library108184
+ Ref: gnat_ugn/the_gnat_compilation_model id40108288
+ Ref: 74108288
+ Ref: gnat_ugn/the_gnat_compilation_model using-a-library108288
+ Ref: 75108288
+ Node: Stand-alone Ada Libraries110866
+ Ref: gnat_ugn/the_gnat_compilation_model id41111023
+ Ref: 77111023
+ Ref: gnat_ugn/the_gnat_compilation_model stand-alone-ada-libraries111023
+ Ref: 6b111023
+ Node: Introduction to Stand-alone Libraries111284
+ Ref: gnat_ugn/the_gnat_compilation_model id42111424
+ Ref: 78111424
+ Ref: gnat_ugn/the_gnat_compilation_model introduction-to-stand-alone-libraries111424
+ Ref: 79111424
+ Node: Building a Stand-alone Library113046
+ Ref: gnat_ugn/the_gnat_compilation_model building-a-stand-alone-library113257
+ Ref: 7a113257
+ Ref: gnat_ugn/the_gnat_compilation_model id43113257
+ Ref: 7b113257
+ Node: Creating a Stand-alone Library to be used in a non-Ada context118115
+ Ref: gnat_ugn/the_gnat_compilation_model creating-a-stand-alone-library-to-be-used-in-a-non-ada-context118326
+ Ref: 7c118326
+ Ref: gnat_ugn/the_gnat_compilation_model id44118326
+ Ref: 7d118326
+ Node: Restrictions in Stand-alone Libraries121107
+ Ref: gnat_ugn/the_gnat_compilation_model id45121279
+ Ref: 7e121279
+ Ref: gnat_ugn/the_gnat_compilation_model restrictions-in-stand-alone-libraries121279
+ Ref: 7f121279
+ Node: Rebuilding the GNAT Run-Time Library122602
+ Ref: gnat_ugn/the_gnat_compilation_model id46122729
+ Ref: 80122729
+ Ref: gnat_ugn/the_gnat_compilation_model rebuilding-the-gnat-run-time-library122729
+ Ref: 81122729
+ Node: Conditional Compilation123571
+ Ref: gnat_ugn/the_gnat_compilation_model conditional-compilation123721
+ Ref: 2b123721
+ Ref: gnat_ugn/the_gnat_compilation_model id47123721
+ Ref: 82123721
+ Node: Modeling Conditional Compilation in Ada124027
+ Ref: gnat_ugn/the_gnat_compilation_model id48124164
+ Ref: 83124164
+ Ref: gnat_ugn/the_gnat_compilation_model modeling-conditional-compilation-in-ada124164
+ Ref: 84124164
+ Node: Use of Boolean Constants125724
+ Ref: gnat_ugn/the_gnat_compilation_model id49125861
+ Ref: 85125861
+ Ref: gnat_ugn/the_gnat_compilation_model use-of-boolean-constants125861
+ Ref: 86125861
+ Node: Debugging - A Special Case127174
+ Ref: gnat_ugn/the_gnat_compilation_model debugging-a-special-case127349
+ Ref: 87127349
+ Ref: gnat_ugn/the_gnat_compilation_model id50127349
+ Ref: 88127349
+ Node: Conditionalizing Declarations130856
+ Ref: gnat_ugn/the_gnat_compilation_model conditionalizing-declarations131041
+ Ref: 89131041
+ Ref: gnat_ugn/the_gnat_compilation_model id51131041
+ Ref: 8a131041
+ Node: Use of Alternative Implementations132769
+ Ref: gnat_ugn/the_gnat_compilation_model id52132941
+ Ref: 8b132941
+ Ref: gnat_ugn/the_gnat_compilation_model use-of-alternative-implementations132941
+ Ref: 8c132941
+ Node: Preprocessing137137
+ Ref: gnat_ugn/the_gnat_compilation_model id53137271
+ Ref: 8d137271
+ Ref: gnat_ugn/the_gnat_compilation_model preprocessing137271
+ Ref: 8e137271
+ Node: Preprocessing with gnatprep138953
+ Ref: gnat_ugn/the_gnat_compilation_model id54139123
+ Ref: 91139123
+ Ref: gnat_ugn/the_gnat_compilation_model preprocessing-with-gnatprep139123
+ Ref: 8f139123
+ Node: Preprocessing Symbols139642
+ Ref: gnat_ugn/the_gnat_compilation_model id55139752
+ Ref: 92139752
+ Ref: gnat_ugn/the_gnat_compilation_model preprocessing-symbols139752
+ Ref: 93139752
+ Node: Using gnatprep140122
+ Ref: gnat_ugn/the_gnat_compilation_model id56140262
+ Ref: 94140262
+ Ref: gnat_ugn/the_gnat_compilation_model using-gnatprep140262
+ Ref: 95140262
+ Node: Switches for gnatprep141172
+ Ref: gnat_ugn/the_gnat_compilation_model id57141315
+ Ref: 96141315
+ Ref: gnat_ugn/the_gnat_compilation_model switches-for-gnatprep141315
+ Ref: 97141315
+ Node: Form of Definitions File144430
+ Ref: gnat_ugn/the_gnat_compilation_model form-of-definitions-file144590
+ Ref: 98144590
+ Ref: gnat_ugn/the_gnat_compilation_model id58144590
+ Ref: 99144590
+ Node: Form of Input Text for gnatprep145152
+ Ref: gnat_ugn/the_gnat_compilation_model form-of-input-text-for-gnatprep145282
+ Ref: 9a145282
+ Ref: gnat_ugn/the_gnat_compilation_model id59145282
+ Ref: 9b145282
+ Node: Integrated Preprocessing149845
+ Ref: gnat_ugn/the_gnat_compilation_model id60149967
+ Ref: 9c149967
+ Ref: gnat_ugn/the_gnat_compilation_model integrated-preprocessing149967
+ Ref: 90149967
+ Node: Mixed Language Programming158359
+ Ref: gnat_ugn/the_gnat_compilation_model id61158524
+ Ref: 9d158524
+ Ref: gnat_ugn/the_gnat_compilation_model mixed-language-programming158524
+ Ref: 2c158524
+ Node: Interfacing to C158892
+ Ref: gnat_ugn/the_gnat_compilation_model id62159001
+ Ref: 9e159001
+ Ref: gnat_ugn/the_gnat_compilation_model interfacing-to-c159001
+ Ref: 9f159001
+ Node: Calling Conventions164211
+ Ref: gnat_ugn/the_gnat_compilation_model calling-conventions164364
+ Ref: a1164364
+ Ref: gnat_ugn/the_gnat_compilation_model id63164364
+ Ref: a2164364
+ Node: Building Mixed Ada and C++ Programs172186
+ Ref: gnat_ugn/the_gnat_compilation_model building-mixed-ada-and-c-programs172368
+ Ref: a3172368
+ Ref: gnat_ugn/the_gnat_compilation_model id64172368
+ Ref: a4172368
+ Node: Interfacing to C++172847
+ Ref: gnat_ugn/the_gnat_compilation_model id65172981
+ Ref: a5172981
+ Ref: gnat_ugn/the_gnat_compilation_model id66172981
+ Ref: a6172981
+ Node: Linking a Mixed C++ & Ada Program174094
+ Ref: gnat_ugn/the_gnat_compilation_model linking-a-mixed-c-ada-program174253
+ Ref: a8174253
+ Ref: gnat_ugn/the_gnat_compilation_model linking-a-mixed-c-and-ada-program174253
+ Ref: a9174253
+ Node: A Simple Example178291
+ Ref: gnat_ugn/the_gnat_compilation_model a-simple-example178465
+ Ref: aa178465
+ Ref: gnat_ugn/the_gnat_compilation_model id67178465
+ Ref: ab178465
+ Node: Interfacing with C++ constructors181184
+ Ref: gnat_ugn/the_gnat_compilation_model id68181364
+ Ref: ac181364
+ Ref: gnat_ugn/the_gnat_compilation_model interfacing-with-c-constructors181364
+ Ref: ad181364
+ Node: Interfacing with C++ at the Class Level188103
+ Ref: gnat_ugn/the_gnat_compilation_model id69188258
+ Ref: af188258
+ Ref: gnat_ugn/the_gnat_compilation_model interfacing-with-c-at-the-class-level188258
+ Ref: ae188258
+ Node: Generating Ada Bindings for C and C++ headers196955
+ Ref: gnat_ugn/the_gnat_compilation_model generating-ada-bindings-for-c-and-c-headers197161
+ Ref: a7197161
+ Ref: gnat_ugn/the_gnat_compilation_model id70197161
+ Ref: b0197161
+ Node: Running the Binding Generator198448
+ Ref: gnat_ugn/the_gnat_compilation_model id71198605
+ Ref: b1198605
+ Ref: gnat_ugn/the_gnat_compilation_model running-the-binding-generator198605
+ Ref: b2198605
+ Node: Generating Bindings for C++ Headers201184
+ Ref: gnat_ugn/the_gnat_compilation_model generating-bindings-for-c-headers201358
+ Ref: b3201358
+ Ref: gnat_ugn/the_gnat_compilation_model id72201358
+ Ref: b4201358
+ Node: Switches204287
+ Ref: gnat_ugn/the_gnat_compilation_model switches204423
+ Ref: b5204423
+ Ref: gnat_ugn/the_gnat_compilation_model switches-for-ada-binding-generation204423
+ Ref: b6204423
+ Node: Generating C Headers for Ada Specifications204994
+ Ref: gnat_ugn/the_gnat_compilation_model generating-c-headers-for-ada-specifications205156
+ Ref: b7205156
+ Ref: gnat_ugn/the_gnat_compilation_model id73205156
+ Ref: b8205156
+ Node: Running the C Header Generator205659
+ Ref: gnat_ugn/the_gnat_compilation_model running-the-c-header-generator205771
+ Ref: b9205771
+ Node: GNAT and Other Compilation Models207551
+ Ref: gnat_ugn/the_gnat_compilation_model gnat-and-other-compilation-models207729
+ Ref: 2d207729
+ Ref: gnat_ugn/the_gnat_compilation_model id74207729
+ Ref: ba207729
+ Node: Comparison between GNAT and C/C++ Compilation Models208163
+ Ref: gnat_ugn/the_gnat_compilation_model comparison-between-gnat-and-c-c-compilation-models208355
+ Ref: bb208355
+ Ref: gnat_ugn/the_gnat_compilation_model id75208355
+ Ref: bc208355
+ Node: Comparison between GNAT and Conventional Ada Library Models209880
+ Ref: gnat_ugn/the_gnat_compilation_model comparison-between-gnat-and-conventional-ada-library-models210072
+ Ref: bd210072
+ Ref: gnat_ugn/the_gnat_compilation_model id76210072
+ Ref: be210072
+ Node: Using GNAT Files with External Tools212459
+ Ref: gnat_ugn/the_gnat_compilation_model id77212602
+ Ref: bf212602
+ Ref: gnat_ugn/the_gnat_compilation_model using-gnat-files-with-external-tools212602
+ Ref: 2e212602
+ Node: Using Other Utility Programs with GNAT212898
+ Ref: gnat_ugn/the_gnat_compilation_model id78213061
+ Ref: c0213061
+ Ref: gnat_ugn/the_gnat_compilation_model using-other-utility-programs-with-gnat213061
+ Ref: c1213061
+ Node: The External Symbol Naming Scheme of GNAT213620
+ Ref: gnat_ugn/the_gnat_compilation_model id79213783
+ Ref: c2213783
+ Ref: gnat_ugn/the_gnat_compilation_model the-external-symbol-naming-scheme-of-gnat213783
+ Ref: c3213783
+ Node: Building Executable Programs with GNAT215693
+ Ref: gnat_ugn/building_executable_programs_with_gnat doc215838
+ Ref: c4215838
+ Ref: gnat_ugn/building_executable_programs_with_gnat building-executable-programs-with-gnat215838
+ Ref: a215838
+ Ref: gnat_ugn/building_executable_programs_with_gnat id1215838
+ Ref: c5215838
+ Node: Building with gnatmake216753
+ Ref: gnat_ugn/building_executable_programs_with_gnat building-with-gnatmake216879
+ Ref: ca216879
+ Ref: gnat_ugn/building_executable_programs_with_gnat the-gnat-make-program-gnatmake216879
+ Ref: c6216879
+ Node: Running gnatmake218508
+ Ref: gnat_ugn/building_executable_programs_with_gnat id2218615
+ Ref: cb218615
+ Ref: gnat_ugn/building_executable_programs_with_gnat running-gnatmake218615
+ Ref: cc218615
+ Node: Switches for gnatmake220089
+ Ref: gnat_ugn/building_executable_programs_with_gnat id3220231
+ Ref: cd220231
+ Ref: gnat_ugn/building_executable_programs_with_gnat switches-for-gnatmake220231
+ Ref: ce220231
+ Node: Mode Switches for gnatmake241581
+ Ref: gnat_ugn/building_executable_programs_with_gnat id4241732
+ Ref: d0241732
+ Ref: gnat_ugn/building_executable_programs_with_gnat mode-switches-for-gnatmake241732
+ Ref: d1241732
+ Node: Notes on the Command Line243027
+ Ref: gnat_ugn/building_executable_programs_with_gnat id5243175
+ Ref: d2243175
+ Ref: gnat_ugn/building_executable_programs_with_gnat notes-on-the-command-line243175
+ Ref: d3243175
+ Node: How gnatmake Works245660
+ Ref: gnat_ugn/building_executable_programs_with_gnat how-gnatmake-works245808
+ Ref: d4245808
+ Ref: gnat_ugn/building_executable_programs_with_gnat id6245808
+ Ref: d5245808
+ Node: Examples of gnatmake Usage248163
+ Ref: gnat_ugn/building_executable_programs_with_gnat examples-of-gnatmake-usage248277
+ Ref: d6248277
+ Ref: gnat_ugn/building_executable_programs_with_gnat id7248277
+ Ref: d7248277
+ Node: Compiling with gcc249372
+ Ref: gnat_ugn/building_executable_programs_with_gnat compiling-with-gcc249524
+ Ref: c7249524
+ Ref: gnat_ugn/building_executable_programs_with_gnat id8249524
+ Ref: d8249524
+ Node: Compiling Programs249925
+ Ref: gnat_ugn/building_executable_programs_with_gnat compiling-programs250050
+ Ref: d9250050
+ Ref: gnat_ugn/building_executable_programs_with_gnat id9250050
+ Ref: da250050
+ Node: Search Paths and the Run-Time Library RTL253497
+ Ref: gnat_ugn/building_executable_programs_with_gnat id10253658
+ Ref: dc253658
+ Ref: gnat_ugn/building_executable_programs_with_gnat search-paths-and-the-run-time-library-rtl253658
+ Ref: 73253658
+ Node: Order of Compilation Issues257091
+ Ref: gnat_ugn/building_executable_programs_with_gnat id11257242
+ Ref: dd257242
+ Ref: gnat_ugn/building_executable_programs_with_gnat order-of-compilation-issues257242
+ Ref: de257242
+ Node: Examples258815
+ Ref: gnat_ugn/building_executable_programs_with_gnat examples258916
+ Ref: df258916
+ Ref: gnat_ugn/building_executable_programs_with_gnat id12258916
+ Ref: e0258916
+ Node: Compiler Switches259398
+ Ref: gnat_ugn/building_executable_programs_with_gnat compiler-switches259543
+ Ref: e1259543
+ Ref: gnat_ugn/building_executable_programs_with_gnat switches-for-gcc259543
+ Ref: db259543
+ Node: Alphabetical List of All Switches260697
+ Ref: gnat_ugn/building_executable_programs_with_gnat alphabetical-list-of-all-switches260827
+ Ref: e2260827
+ Ref: gnat_ugn/building_executable_programs_with_gnat id13260827
+ Ref: e3260827
+ Node: Output and Error Message Control297403
+ Ref: gnat_ugn/building_executable_programs_with_gnat id14297565
+ Ref: ee297565
+ Ref: gnat_ugn/building_executable_programs_with_gnat output-and-error-message-control297565
+ Ref: ef297565
+ Node: Warning Message Control305641
+ Ref: gnat_ugn/building_executable_programs_with_gnat id15305801
+ Ref: f0305801
+ Ref: gnat_ugn/building_executable_programs_with_gnat warning-message-control305801
+ Ref: eb305801
+ Node: Debugging and Assertion Control356975
+ Ref: gnat_ugn/building_executable_programs_with_gnat debugging-and-assertion-control357120
+ Ref: f1357120
+ Ref: gnat_ugn/building_executable_programs_with_gnat id16357120
+ Ref: f2357120
+ Node: Validity Checking360567
+ Ref: gnat_ugn/building_executable_programs_with_gnat id17360703
+ Ref: f3360703
+ Ref: gnat_ugn/building_executable_programs_with_gnat validity-checking360703
+ Ref: e7360703
+ Node: Style Checking370795
+ Ref: gnat_ugn/building_executable_programs_with_gnat id18370915
+ Ref: f4370915
+ Ref: gnat_ugn/building_executable_programs_with_gnat style-checking370915
+ Ref: ec370915
+ Node: Run-Time Checks388664
+ Ref: gnat_ugn/building_executable_programs_with_gnat id19388796
+ Ref: f5388796
+ Ref: gnat_ugn/building_executable_programs_with_gnat run-time-checks388796
+ Ref: ea388796
+ Node: Using gcc for Syntax Checking395505
+ Ref: gnat_ugn/building_executable_programs_with_gnat id20395654
+ Ref: f6395654
+ Ref: gnat_ugn/building_executable_programs_with_gnat using-gcc-for-syntax-checking395654
+ Ref: f7395654
+ Node: Using gcc for Semantic Checking397344
+ Ref: gnat_ugn/building_executable_programs_with_gnat id21397513
+ Ref: f8397513
+ Ref: gnat_ugn/building_executable_programs_with_gnat using-gcc-for-semantic-checking397513
+ Ref: f9397513
+ Node: Compiling Different Versions of Ada398871
+ Ref: gnat_ugn/building_executable_programs_with_gnat compiling-different-versions-of-ada399032
+ Ref: 6399032
+ Ref: gnat_ugn/building_executable_programs_with_gnat id22399032
+ Ref: fa399032
+ Node: Character Set Control403297
+ Ref: gnat_ugn/building_executable_programs_with_gnat character-set-control403446
+ Ref: 31403446
+ Ref: gnat_ugn/building_executable_programs_with_gnat id23403446
+ Ref: fb403446
+ Node: File Naming Control408832
+ Ref: gnat_ugn/building_executable_programs_with_gnat file-naming-control408973
+ Ref: fc408973
+ Ref: gnat_ugn/building_executable_programs_with_gnat id24408973
+ Ref: fd408973
+ Node: Subprogram Inlining Control409381
+ Ref: gnat_ugn/building_executable_programs_with_gnat id25409525
+ Ref: fe409525
+ Ref: gnat_ugn/building_executable_programs_with_gnat subprogram-inlining-control409525
+ Ref: ff409525
+ Node: Auxiliary Output Control411402
+ Ref: gnat_ugn/building_executable_programs_with_gnat auxiliary-output-control411544
+ Ref: 101411544
+ Ref: gnat_ugn/building_executable_programs_with_gnat id26411544
+ Ref: 102411544
+ Node: Debugging Control412721
+ Ref: gnat_ugn/building_executable_programs_with_gnat debugging-control412862
+ Ref: 103412862
+ Ref: gnat_ugn/building_executable_programs_with_gnat id27412862
+ Ref: 104412862
+ Node: Exception Handling Control424716
+ Ref: gnat_ugn/building_executable_programs_with_gnat exception-handling-control424863
+ Ref: 105424863
+ Ref: gnat_ugn/building_executable_programs_with_gnat id28424863
+ Ref: 106424863
+ Node: Units to Sources Mapping Files427540
+ Ref: gnat_ugn/building_executable_programs_with_gnat id29427693
+ Ref: 107427693
+ Ref: gnat_ugn/building_executable_programs_with_gnat units-to-sources-mapping-files427693
+ Ref: e8427693
+ Node: Code Generation Control429632
+ Ref: gnat_ugn/building_executable_programs_with_gnat code-generation-control429750
+ Ref: 108429750
+ Ref: gnat_ugn/building_executable_programs_with_gnat id30429750
+ Ref: 109429750
+ Node: Linker Switches430922
+ Ref: gnat_ugn/building_executable_programs_with_gnat id31431070
+ Ref: 10a431070
+ Ref: gnat_ugn/building_executable_programs_with_gnat linker-switches431070
+ Ref: 10b431070
+ Node: Binding with gnatbind431432
+ Ref: gnat_ugn/building_executable_programs_with_gnat binding-with-gnatbind431584
+ Ref: c8431584
+ Ref: gnat_ugn/building_executable_programs_with_gnat id32431584
+ Ref: 10c431584
+ Node: Running gnatbind433108
+ Ref: gnat_ugn/building_executable_programs_with_gnat id33433214
+ Ref: 10d433214
+ Ref: gnat_ugn/building_executable_programs_with_gnat running-gnatbind433214
+ Ref: 10e433214
+ Node: Switches for gnatbind436246
+ Ref: gnat_ugn/building_executable_programs_with_gnat id34436380
+ Ref: 10f436380
+ Ref: gnat_ugn/building_executable_programs_with_gnat switches-for-gnatbind436380
+ Ref: 110436380
+ Node: Consistency-Checking Modes449727
+ Ref: gnat_ugn/building_executable_programs_with_gnat consistency-checking-modes449850
+ Ref: 114449850
+ Ref: gnat_ugn/building_executable_programs_with_gnat id35449850
+ Ref: 115449850
+ Node: Binder Error Message Control451669
+ Ref: gnat_ugn/building_executable_programs_with_gnat binder-error-message-control451820
+ Ref: 116451820
+ Ref: gnat_ugn/building_executable_programs_with_gnat id36451820
+ Ref: 117451820
+ Node: Elaboration Control454064
+ Ref: gnat_ugn/building_executable_programs_with_gnat elaboration-control454203
+ Ref: 111454203
+ Ref: gnat_ugn/building_executable_programs_with_gnat id37454203
+ Ref: 118454203
+ Node: Output Control457505
+ Ref: gnat_ugn/building_executable_programs_with_gnat id38457642
+ Ref: 119457642
+ Ref: gnat_ugn/building_executable_programs_with_gnat output-control457642
+ Ref: 11a457642
+ Node: Dynamic Allocation Control459639
+ Ref: gnat_ugn/building_executable_programs_with_gnat dynamic-allocation-control459791
+ Ref: 112459791
+ Ref: gnat_ugn/building_executable_programs_with_gnat id39459791
+ Ref: 11b459791
+ Node: Binding with Non-Ada Main Programs460412
+ Ref: gnat_ugn/building_executable_programs_with_gnat binding-with-non-ada-main-programs460590
+ Ref: a0460590
+ Ref: gnat_ugn/building_executable_programs_with_gnat id40460590
+ Ref: 11c460590
+ Node: Binding Programs with No Main Subprogram463604
+ Ref: gnat_ugn/building_executable_programs_with_gnat binding-programs-with-no-main-subprogram463747
+ Ref: 11d463747
+ Ref: gnat_ugn/building_executable_programs_with_gnat id41463747
+ Ref: 11e463747
+ Node: Command-Line Access464615
+ Ref: gnat_ugn/building_executable_programs_with_gnat command-line-access464758
+ Ref: 11f464758
+ Ref: gnat_ugn/building_executable_programs_with_gnat id42464758
+ Ref: 120464758
+ Node: Search Paths for gnatbind465676
+ Ref: gnat_ugn/building_executable_programs_with_gnat id43465824
+ Ref: 121465824
+ Ref: gnat_ugn/building_executable_programs_with_gnat search-paths-for-gnatbind465824
+ Ref: 76465824
+ Node: Examples of gnatbind Usage468641
+ Ref: gnat_ugn/building_executable_programs_with_gnat examples-of-gnatbind-usage468761
+ Ref: 122468761
+ Ref: gnat_ugn/building_executable_programs_with_gnat id44468761
+ Ref: 123468761
+ Node: Linking with gnatlink469609
+ Ref: gnat_ugn/building_executable_programs_with_gnat id45469772
+ Ref: 124469772
+ Ref: gnat_ugn/building_executable_programs_with_gnat linking-with-gnatlink469772
+ Ref: c9469772
+ Node: Running gnatlink470308
+ Ref: gnat_ugn/building_executable_programs_with_gnat id46470414
+ Ref: 125470414
+ Ref: gnat_ugn/building_executable_programs_with_gnat running-gnatlink470414
+ Ref: 126470414
+ Node: Switches for gnatlink472886
+ Ref: gnat_ugn/building_executable_programs_with_gnat id47472992
+ Ref: 129472992
+ Ref: gnat_ugn/building_executable_programs_with_gnat switches-for-gnatlink472992
+ Ref: 12a472992
+ Node: Using the GNU make Utility477702
+ Ref: gnat_ugn/building_executable_programs_with_gnat id48477835
+ Ref: 12b477835
+ Ref: gnat_ugn/building_executable_programs_with_gnat using-the-gnu-make-utility477835
+ Ref: 70477835
+ Node: Using gnatmake in a Makefile478523
+ Ref: gnat_ugn/building_executable_programs_with_gnat id49478669
+ Ref: 12c478669
+ Ref: gnat_ugn/building_executable_programs_with_gnat using-gnatmake-in-a-makefile478669
+ Ref: 12d478669
+ Node: Automatically Creating a List of Directories482697
+ Ref: gnat_ugn/building_executable_programs_with_gnat automatically-creating-a-list-of-directories482888
+ Ref: 12e482888
+ Ref: gnat_ugn/building_executable_programs_with_gnat id50482888
+ Ref: 12f482888
+ Node: Generating the Command Line Switches485843
+ Ref: gnat_ugn/building_executable_programs_with_gnat generating-the-command-line-switches486043
+ Ref: 130486043
+ Ref: gnat_ugn/building_executable_programs_with_gnat id51486043
+ Ref: 131486043
+ Node: Overcoming Command Line Length Limits486821
+ Ref: gnat_ugn/building_executable_programs_with_gnat id52486968
+ Ref: 132486968
+ Ref: gnat_ugn/building_executable_programs_with_gnat overcoming-command-line-length-limits486968
+ Ref: 133486968
+ Node: GNAT Utility Programs489273
+ Ref: gnat_ugn/gnat_utility_programs doc489418
+ Ref: 134489418
+ Ref: gnat_ugn/gnat_utility_programs gnat-utility-programs489418
+ Ref: b489418
+ Ref: gnat_ugn/gnat_utility_programs id1489418
+ Ref: 135489418
+ Node: The File Cleanup Utility gnatclean489985
+ Ref: gnat_ugn/gnat_utility_programs id2490119
+ Ref: 138490119
+ Ref: gnat_ugn/gnat_utility_programs the-file-cleanup-utility-gnatclean490119
+ Ref: 136490119
+ Node: Running gnatclean490530
+ Ref: gnat_ugn/gnat_utility_programs id3490651
+ Ref: 139490651
+ Ref: gnat_ugn/gnat_utility_programs running-gnatclean490651
+ Ref: 13a490651
+ Node: Switches for gnatclean491300
+ Ref: gnat_ugn/gnat_utility_programs id4491421
+ Ref: 13b491421
+ Ref: gnat_ugn/gnat_utility_programs switches-for-gnatclean491421
+ Ref: 13c491421
+ Node: The GNAT Library Browser gnatls494561
+ Ref: gnat_ugn/gnat_utility_programs id5494695
+ Ref: 13d494695
+ Ref: gnat_ugn/gnat_utility_programs the-gnat-library-browser-gnatls494695
+ Ref: 137494695
+ Node: Running gnatls495101
+ Ref: gnat_ugn/gnat_utility_programs id6495213
+ Ref: 13e495213
+ Ref: gnat_ugn/gnat_utility_programs running-gnatls495213
+ Ref: 13f495213
+ Node: Switches for gnatls497722
+ Ref: gnat_ugn/gnat_utility_programs id7497866
+ Ref: 140497866
+ Ref: gnat_ugn/gnat_utility_programs switches-for-gnatls497866
+ Ref: 141497866
+ Node: Example of gnatls Usage500324
+ Ref: gnat_ugn/gnat_utility_programs example-of-gnatls-usage500445
+ Ref: 142500445
+ Ref: gnat_ugn/gnat_utility_programs id8500445
+ Ref: 143500445
+ Node: GNAT and Program Execution502848
+ Ref: gnat_ugn/gnat_and_program_execution doc502984
+ Ref: 144502984
+ Ref: gnat_ugn/gnat_and_program_execution gnat-and-program-execution502984
+ Ref: c502984
+ Ref: gnat_ugn/gnat_and_program_execution id1502984
+ Ref: 145502984
+ Node: Running and Debugging Ada Programs503628
+ Ref: gnat_ugn/gnat_and_program_execution id2503745
+ Ref: 146503745
+ Ref: gnat_ugn/gnat_and_program_execution running-and-debugging-ada-programs503745
+ Ref: 14d503745
+ Node: The GNAT Debugger GDB505115
+ Ref: gnat_ugn/gnat_and_program_execution id3505229
+ Ref: 14e505229
+ Ref: gnat_ugn/gnat_and_program_execution the-gnat-debugger-gdb505229
+ Ref: 14f505229
+ Node: Running GDB508294
+ Ref: gnat_ugn/gnat_and_program_execution id4508445
+ Ref: 150508445
+ Ref: gnat_ugn/gnat_and_program_execution running-gdb508445
+ Ref: 151508445
+ Node: Introduction to GDB Commands509238
+ Ref: gnat_ugn/gnat_and_program_execution id5509389
+ Ref: 152509389
+ Ref: gnat_ugn/gnat_and_program_execution introduction-to-gdb-commands509389
+ Ref: 153509389
+ Node: Using Ada Expressions515345
+ Ref: gnat_ugn/gnat_and_program_execution id6515517
+ Ref: 154515517
+ Ref: gnat_ugn/gnat_and_program_execution using-ada-expressions515517
+ Ref: 155515517
+ Node: Calling User-Defined Subprograms516632
+ Ref: gnat_ugn/gnat_and_program_execution calling-user-defined-subprograms516812
+ Ref: 156516812
+ Ref: gnat_ugn/gnat_and_program_execution id7516812
+ Ref: 157516812
+ Node: Using the next Command in a Function519579
+ Ref: gnat_ugn/gnat_and_program_execution id8519777
+ Ref: 158519777
+ Ref: gnat_ugn/gnat_and_program_execution using-the-next-command-in-a-function519777
+ Ref: 159519777
+ Node: Stopping When Ada Exceptions Are Raised520805
+ Ref: gnat_ugn/gnat_and_program_execution id9520980
+ Ref: 15a520980
+ Ref: gnat_ugn/gnat_and_program_execution stopping-when-ada-exceptions-are-raised520980
+ Ref: 15b520980
+ Node: Ada Tasks522023
+ Ref: gnat_ugn/gnat_and_program_execution ada-tasks522185
+ Ref: 15c522185
+ Ref: gnat_ugn/gnat_and_program_execution id10522185
+ Ref: 15d522185
+ Node: Debugging Generic Units524429
+ Ref: gnat_ugn/gnat_and_program_execution debugging-generic-units524583
+ Ref: 15e524583
+ Ref: gnat_ugn/gnat_and_program_execution id11524583
+ Ref: 15f524583
+ Node: Remote Debugging with gdbserver525901
+ Ref: gnat_ugn/gnat_and_program_execution id12526095
+ Ref: 160526095
+ Ref: gnat_ugn/gnat_and_program_execution remote-debugging-with-gdbserver526095
+ Ref: 161526095
+ Node: GNAT Abnormal Termination or Failure to Terminate528031
+ Ref: gnat_ugn/gnat_and_program_execution gnat-abnormal-termination-or-failure-to-terminate528242
+ Ref: 162528242
+ Ref: gnat_ugn/gnat_and_program_execution id13528242
+ Ref: 163528242
+ Node: Naming Conventions for GNAT Source Files530721
+ Ref: gnat_ugn/gnat_and_program_execution id14530939
+ Ref: 164530939
+ Ref: gnat_ugn/gnat_and_program_execution naming-conventions-for-gnat-source-files530939
+ Ref: 165530939
+ Node: Getting Internal Debugging Information533414
+ Ref: gnat_ugn/gnat_and_program_execution getting-internal-debugging-information533598
+ Ref: 166533598
+ Ref: gnat_ugn/gnat_and_program_execution id15533598
+ Ref: 167533598
+ Node: Stack Traceback534632
+ Ref: gnat_ugn/gnat_and_program_execution id16534812
+ Ref: 168534812
+ Ref: gnat_ugn/gnat_and_program_execution stack-traceback534812
+ Ref: 169534812
+ Node: Non-Symbolic Traceback535733
+ Ref: gnat_ugn/gnat_and_program_execution id17535836
+ Ref: 16a535836
+ Ref: gnat_ugn/gnat_and_program_execution non-symbolic-traceback535836
+ Ref: 16b535836
+ Node: Symbolic Traceback545043
+ Ref: gnat_ugn/gnat_and_program_execution id18545146
+ Ref: 16c545146
+ Ref: gnat_ugn/gnat_and_program_execution symbolic-traceback545146
+ Ref: 16d545146
+ Node: Pretty-Printers for the GNAT runtime548220
+ Ref: gnat_ugn/gnat_and_program_execution id19548353
+ Ref: 16e548353
+ Ref: gnat_ugn/gnat_and_program_execution pretty-printers-for-the-gnat-runtime548353
+ Ref: 16f548353
+ Ref: Pretty-Printers for the GNAT runtime-Footnote-1550994
+ Ref: Pretty-Printers for the GNAT runtime-Footnote-2551082
+ Node: Profiling551166
+ Ref: gnat_ugn/gnat_and_program_execution id20551313
+ Ref: 170551313
+ Ref: gnat_ugn/gnat_and_program_execution profiling551313
+ Ref: 147551313
+ Node: Profiling an Ada Program with gprof551474
+ Ref: gnat_ugn/gnat_and_program_execution id21551557
+ Ref: 171551557
+ Ref: gnat_ugn/gnat_and_program_execution profiling-an-ada-program-with-gprof551557
+ Ref: 172551557
+ Node: Compilation for profiling552774
+ Ref: gnat_ugn/gnat_and_program_execution compilation-for-profiling552899
+ Ref: 173552899
+ Ref: gnat_ugn/gnat_and_program_execution id22552899
+ Ref: 174552899
+ Node: Program execution553683
+ Ref: gnat_ugn/gnat_and_program_execution id23553830
+ Ref: 175553830
+ Ref: gnat_ugn/gnat_and_program_execution program-execution553830
+ Ref: 176553830
+ Node: Running gprof554322
+ Ref: gnat_ugn/gnat_and_program_execution id24554479
+ Ref: 177554479
+ Ref: gnat_ugn/gnat_and_program_execution running-gprof554479
+ Ref: 178554479
+ Node: Interpretation of profiling results557187
+ Ref: gnat_ugn/gnat_and_program_execution id25557318
+ Ref: 179557318
+ Ref: gnat_ugn/gnat_and_program_execution interpretation-of-profiling-results557318
+ Ref: 17a557318
+ Node: Improving Performance557993
+ Ref: gnat_ugn/gnat_and_program_execution id26558137
+ Ref: 148558137
+ Ref: gnat_ugn/gnat_and_program_execution improving-performance558137
+ Ref: 17b558137
+ Node: Performance Considerations558647
+ Ref: gnat_ugn/gnat_and_program_execution id27558761
+ Ref: 17c558761
+ Ref: gnat_ugn/gnat_and_program_execution performance-considerations558761
+ Ref: 17d558761
+ Node: Controlling Run-Time Checks559930
+ Ref: gnat_ugn/gnat_and_program_execution controlling-run-time-checks560050
+ Ref: 17e560050
+ Ref: gnat_ugn/gnat_and_program_execution id28560050
+ Ref: 17f560050
+ Node: Use of Restrictions561608
+ Ref: gnat_ugn/gnat_and_program_execution id29561756
+ Ref: 180561756
+ Ref: gnat_ugn/gnat_and_program_execution use-of-restrictions561756
+ Ref: 181561756
+ Node: Optimization Levels563114
+ Ref: gnat_ugn/gnat_and_program_execution id30563259
+ Ref: 182563259
+ Ref: gnat_ugn/gnat_and_program_execution optimization-levels563259
+ Ref: ed563259
+ Node: Debugging Optimized Code567126
+ Ref: gnat_ugn/gnat_and_program_execution debugging-optimized-code567275
+ Ref: 183567275
+ Ref: gnat_ugn/gnat_and_program_execution id31567275
+ Ref: 184567275
+ Node: Inlining of Subprograms572227
+ Ref: gnat_ugn/gnat_and_program_execution id32572382
+ Ref: 185572382
+ Ref: gnat_ugn/gnat_and_program_execution inlining-of-subprograms572382
+ Ref: 100572382
+ Node: Floating Point Operations577066
+ Ref: gnat_ugn/gnat_and_program_execution floating-point-operations577219
+ Ref: 186577219
+ Ref: gnat_ugn/gnat_and_program_execution id33577219
+ Ref: 187577219
+ Node: Vectorization of loops579402
+ Ref: gnat_ugn/gnat_and_program_execution id34579559
+ Ref: 188579559
+ Ref: gnat_ugn/gnat_and_program_execution vectorization-of-loops579559
+ Ref: 189579559
+ Node: Other Optimization Switches584187
+ Ref: gnat_ugn/gnat_and_program_execution id35584351
+ Ref: 18a584351
+ Ref: gnat_ugn/gnat_and_program_execution other-optimization-switches584351
+ Ref: 18b584351
+ Node: Optimization and Strict Aliasing585056
+ Ref: gnat_ugn/gnat_and_program_execution id36585232
+ Ref: 18c585232
+ Ref: gnat_ugn/gnat_and_program_execution optimization-and-strict-aliasing585232
+ Ref: e4585232
+ Node: Aliased Variables and Optimization594263
+ Ref: gnat_ugn/gnat_and_program_execution aliased-variables-and-optimization594445
+ Ref: 18d594445
+ Ref: gnat_ugn/gnat_and_program_execution id37594445
+ Ref: 18e594445
+ Node: Atomic Variables and Optimization596437
+ Ref: gnat_ugn/gnat_and_program_execution atomic-variables-and-optimization596612
+ Ref: 18f596612
+ Ref: gnat_ugn/gnat_and_program_execution id38596612
+ Ref: 190596612
+ Node: Passive Task Optimization599212
+ Ref: gnat_ugn/gnat_and_program_execution id39599344
+ Ref: 191599344
+ Ref: gnat_ugn/gnat_and_program_execution passive-task-optimization599344
+ Ref: 192599344
+ Node: Text_IO Suggestions601319
+ Ref: gnat_ugn/gnat_and_program_execution id40601510
+ Ref: 193601510
+ Ref: gnat_ugn/gnat_and_program_execution text-io-suggestions601510
+ Ref: 194601510
+ Node: Reducing Size of Executables with Unused Subprogram/Data Elimination602450
+ Ref: gnat_ugn/gnat_and_program_execution id41602606
+ Ref: 195602606
+ Ref: gnat_ugn/gnat_and_program_execution reducing-size-of-executables-with-unused-subprogram-data-elimination602606
+ Ref: 196602606
+ Node: About unused subprogram/data elimination603026
+ Ref: gnat_ugn/gnat_and_program_execution about-unused-subprogram-data-elimination603201
+ Ref: 197603201
+ Ref: gnat_ugn/gnat_and_program_execution id42603201
+ Ref: 198603201
+ Node: Compilation options603842
+ Ref: gnat_ugn/gnat_and_program_execution compilation-options604071
+ Ref: 199604071
+ Ref: gnat_ugn/gnat_and_program_execution id43604071
+ Ref: 19a604071
+ Node: Example of unused subprogram/data elimination605460
+ Ref: gnat_ugn/gnat_and_program_execution example-of-unused-subprogram-data-elimination605640
+ Ref: 19b605640
+ Ref: gnat_ugn/gnat_and_program_execution id44605640
+ Ref: 19c605640
+ Node: Overflow Check Handling in GNAT607112
+ Ref: gnat_ugn/gnat_and_program_execution id45607289
+ Ref: 149607289
+ Ref: gnat_ugn/gnat_and_program_execution overflow-check-handling-in-gnat607289
+ Ref: 19d607289
+ Node: Background607572
+ Ref: gnat_ugn/gnat_and_program_execution background607692
+ Ref: 19e607692
+ Ref: gnat_ugn/gnat_and_program_execution id46607692
+ Ref: 19f607692
+ Node: Management of Overflows in GNAT611365
+ Ref: gnat_ugn/gnat_and_program_execution id47611521
+ Ref: 1a0611521
+ Ref: gnat_ugn/gnat_and_program_execution management-of-overflows-in-gnat611521
+ Ref: 1a1611521
+ Node: Specifying the Desired Mode616537
+ Ref: gnat_ugn/gnat_and_program_execution id48616699
+ Ref: 1a2616699
+ Ref: gnat_ugn/gnat_and_program_execution specifying-the-desired-mode616699
+ Ref: e9616699
+ Node: Default Settings619813
+ Ref: gnat_ugn/gnat_and_program_execution default-settings619964
+ Ref: 1a3619964
+ Ref: gnat_ugn/gnat_and_program_execution id49619964
+ Ref: 1a4619964
+ Node: Implementation Notes620858
+ Ref: gnat_ugn/gnat_and_program_execution id50620973
+ Ref: 1a5620973
+ Ref: gnat_ugn/gnat_and_program_execution implementation-notes620973
+ Ref: 1a6620973
+ Node: Performing Dimensionality Analysis in GNAT623115
+ Ref: gnat_ugn/gnat_and_program_execution id51623295
+ Ref: 14a623295
+ Ref: gnat_ugn/gnat_and_program_execution performing-dimensionality-analysis-in-gnat623295
+ Ref: 1a7623295
+ Node: Stack Related Facilities634400
+ Ref: gnat_ugn/gnat_and_program_execution id52634573
+ Ref: 14b634573
+ Ref: gnat_ugn/gnat_and_program_execution stack-related-facilities634573
+ Ref: 1a8634573
+ Node: Stack Overflow Checking634897
+ Ref: gnat_ugn/gnat_and_program_execution id53635019
+ Ref: 1a9635019
+ Ref: gnat_ugn/gnat_and_program_execution stack-overflow-checking635019
+ Ref: e5635019
+ Node: Static Stack Usage Analysis636659
+ Ref: gnat_ugn/gnat_and_program_execution id54636818
+ Ref: 1aa636818
+ Ref: gnat_ugn/gnat_and_program_execution static-stack-usage-analysis636818
+ Ref: e6636818
+ Node: Dynamic Stack Usage Analysis638217
+ Ref: gnat_ugn/gnat_and_program_execution dynamic-stack-usage-analysis638344
+ Ref: 113638344
+ Ref: gnat_ugn/gnat_and_program_execution id55638344
+ Ref: 1ab638344
+ Node: Memory Management Issues640289
+ Ref: gnat_ugn/gnat_and_program_execution id56640411
+ Ref: 14c640411
+ Ref: gnat_ugn/gnat_and_program_execution memory-management-issues640411
+ Ref: 1ac640411
+ Node: Some Useful Memory Pools640767
+ Ref: gnat_ugn/gnat_and_program_execution id57640891
+ Ref: 1ad640891
+ Ref: gnat_ugn/gnat_and_program_execution some-useful-memory-pools640891
+ Ref: 1ae640891
+ Node: The GNAT Debug Pool Facility643548
+ Ref: gnat_ugn/gnat_and_program_execution id58643672
+ Ref: 1af643672
+ Ref: gnat_ugn/gnat_and_program_execution the-gnat-debug-pool-facility643672
+ Ref: 1b0643672
+ Node: Platform-Specific Information648689
+ Ref: gnat_ugn/platform_specific_information doc648833
+ Ref: 1b1648833
+ Ref: gnat_ugn/platform_specific_information id1648833
+ Ref: 1b2648833
+ Ref: gnat_ugn/platform_specific_information platform-specific-information648833
+ Ref: d648833
+ Node: Run-Time Libraries649232
+ Ref: gnat_ugn/platform_specific_information id2649356
+ Ref: 1b3649356
+ Ref: gnat_ugn/platform_specific_information run-time-libraries649356
+ Ref: 1b4649356
+ Node: Summary of Run-Time Configurations650648
+ Ref: gnat_ugn/platform_specific_information id3650739
+ Ref: 1b5650739
+ Ref: gnat_ugn/platform_specific_information summary-of-run-time-configurations650739
+ Ref: 1b6650739
+ Node: Specifying a Run-Time Library652052
+ Ref: gnat_ugn/platform_specific_information id4652201
+ Ref: 1b7652201
+ Ref: gnat_ugn/platform_specific_information specifying-a-run-time-library652201
+ Ref: 1b8652201
+ Ref: gnat_ugn/platform_specific_information choosing-the-scheduling-policy654505
+ Ref: 1b9654505
+ Node: Choosing the Scheduling Policy654552
+ Ref: gnat_ugn/platform_specific_information id5654650
+ Ref: 1ba654650
+ Node: GNU/Linux Topics656134
+ Ref: gnat_ugn/platform_specific_information gnu-linux-topics656289
+ Ref: 1bb656289
+ Ref: gnat_ugn/platform_specific_information id6656289
+ Ref: 1bc656289
+ Node: Required Packages on GNU/Linux656478
+ Ref: gnat_ugn/platform_specific_information id7656595
+ Ref: 1bd656595
+ Ref: gnat_ugn/platform_specific_information required-packages-on-gnu-linux656595
+ Ref: 1be656595
+ Node: A GNU/Linux Debug Quirk657345
+ Ref: gnat_ugn/platform_specific_information a-gnu-linux-debug-quirk657462
+ Ref: 1bf657462
+ Ref: gnat_ugn/platform_specific_information id8657462
+ Ref: 1c0657462
+ Node: Microsoft Windows Topics658213
+ Ref: gnat_ugn/platform_specific_information id9658352
+ Ref: 1c1658352
+ Ref: gnat_ugn/platform_specific_information microsoft-windows-topics658352
+ Ref: 1c2658352
+ Node: Using GNAT on Windows658773
+ Ref: gnat_ugn/platform_specific_information id10658902
+ Ref: 1c3658902
+ Ref: gnat_ugn/platform_specific_information using-gnat-on-windows658902
+ Ref: 1c4658902
+ Node: Using a network installation of GNAT661721
+ Ref: gnat_ugn/platform_specific_information id11661889
+ Ref: 1c5661889
+ Ref: gnat_ugn/platform_specific_information using-a-network-installation-of-gnat661889
+ Ref: 1c6661889
+ Node: CONSOLE and WINDOWS subsystems662790
+ Ref: gnat_ugn/platform_specific_information console-and-windows-subsystems662952
+ Ref: 1c7662952
+ Ref: gnat_ugn/platform_specific_information id12662952
+ Ref: 1c8662952
+ Node: Temporary Files663465
+ Ref: gnat_ugn/platform_specific_information id13663632
+ Ref: 1c9663632
+ Ref: gnat_ugn/platform_specific_information temporary-files663632
+ Ref: 1ca663632
+ Node: Disabling Command Line Argument Expansion664308
+ Ref: gnat_ugn/platform_specific_information disabling-command-line-argument-expansion664468
+ Ref: 1cb664468
+ Node: Windows Socket Timeouts666090
+ Ref: gnat_ugn/platform_specific_information windows-socket-timeouts666272
+ Ref: 1cc666272
+ Node: Mixed-Language Programming on Windows668498
+ Ref: gnat_ugn/platform_specific_information id14668663
+ Ref: 1cd668663
+ Ref: gnat_ugn/platform_specific_information mixed-language-programming-on-windows668663
+ Ref: 1ce668663
+ Node: Windows Calling Conventions671210
+ Ref: gnat_ugn/platform_specific_information id15671365
+ Ref: 1d1671365
+ Ref: gnat_ugn/platform_specific_information windows-calling-conventions671365
+ Ref: 1d2671365
+ Node: C Calling Convention672295
+ Ref: gnat_ugn/platform_specific_information c-calling-convention672416
+ Ref: 1d3672416
+ Ref: gnat_ugn/platform_specific_information id16672416
+ Ref: 1d4672416
+ Node: Stdcall Calling Convention673896
+ Ref: gnat_ugn/platform_specific_information id17674050
+ Ref: 1d6674050
+ Ref: gnat_ugn/platform_specific_information stdcall-calling-convention674050
+ Ref: 1d5674050
+ Node: Win32 Calling Convention676839
+ Ref: gnat_ugn/platform_specific_information id18676995
+ Ref: 1d7676995
+ Ref: gnat_ugn/platform_specific_information win32-calling-convention676995
+ Ref: 1d8676995
+ Node: DLL Calling Convention677188
+ Ref: gnat_ugn/platform_specific_information dll-calling-convention677309
+ Ref: 1d9677309
+ Ref: gnat_ugn/platform_specific_information id19677309
+ Ref: 1da677309
+ Node: Introduction to Dynamic Link Libraries DLLs677498
+ Ref: gnat_ugn/platform_specific_information id20677682
+ Ref: 1db677682
+ Ref: gnat_ugn/platform_specific_information introduction-to-dynamic-link-libraries-dlls677682
+ Ref: 1dc677682
+ Node: Using DLLs with GNAT681079
+ Ref: gnat_ugn/platform_specific_information id21681273
+ Ref: 1de681273
+ Ref: gnat_ugn/platform_specific_information using-dlls-with-gnat681273
+ Ref: 1cf681273
+ Node: Creating an Ada Spec for the DLL Services683263
+ Ref: gnat_ugn/platform_specific_information creating-an-ada-spec-for-the-dll-services683398
+ Ref: 1df683398
+ Ref: gnat_ugn/platform_specific_information id22683398
+ Ref: 1e0683398
+ Node: Creating an Import Library684362
+ Ref: gnat_ugn/platform_specific_information creating-an-import-library684497
+ Ref: 1e1684497
+ Ref: gnat_ugn/platform_specific_information id23684497
+ Ref: 1e2684497
+ Ref: gnat_ugn/platform_specific_information the-definition-file684923
+ Ref: 1dd684923
+ Ref: gnat_ugn/platform_specific_information create-def-file-automatically686232
+ Ref: 1e3686232
+ Ref: gnat_ugn/platform_specific_information gnat-style-import-library687386
+ Ref: 1e4687386
+ Ref: gnat_ugn/platform_specific_information msvs-style-import-library688316
+ Ref: 1e6688316
+ Node: Building DLLs with GNAT Project files689037
+ Ref: gnat_ugn/platform_specific_information building-dlls-with-gnat-project-files689211
+ Ref: 1d0689211
+ Ref: gnat_ugn/platform_specific_information id24689211
+ Ref: 1e7689211
+ Node: Building DLLs with GNAT689722
+ Ref: gnat_ugn/platform_specific_information building-dlls-with-gnat689902
+ Ref: 1e8689902
+ Ref: gnat_ugn/platform_specific_information id25689902
+ Ref: 1e9689902
+ Node: Building DLLs with gnatdll691810
+ Ref: gnat_ugn/platform_specific_information building-dlls-with-gnatdll691978
+ Ref: 1ea691978
+ Ref: gnat_ugn/platform_specific_information id26691978
+ Ref: 1eb691978
+ Node: Limitations When Using Ada DLLs from Ada694475
+ Ref: gnat_ugn/platform_specific_information limitations-when-using-ada-dlls-from-ada694611
+ Ref: 1ef694611
+ Node: Exporting Ada Entities695522
+ Ref: gnat_ugn/platform_specific_information exporting-ada-entities695691
+ Ref: 1ec695691
+ Ref: gnat_ugn/platform_specific_information id27695691
+ Ref: 1f0695691
+ Node: Ada DLLs and Elaboration698580
+ Ref: gnat_ugn/platform_specific_information ada-dlls-and-elaboration698700
+ Ref: 1ed698700
+ Ref: gnat_ugn/platform_specific_information id28698700
+ Ref: 1f2698700
+ Node: Ada DLLs and Finalization700138
+ Ref: gnat_ugn/platform_specific_information ada-dlls-and-finalization700311
+ Ref: 1ee700311
+ Ref: gnat_ugn/platform_specific_information id29700311
+ Ref: 1f3700311
+ Node: Creating a Spec for Ada DLLs700982
+ Ref: gnat_ugn/platform_specific_information creating-a-spec-for-ada-dlls701155
+ Ref: 1f4701155
+ Ref: gnat_ugn/platform_specific_information id30701155
+ Ref: 1f5701155
+ Node: Creating the Definition File702564
+ Ref: gnat_ugn/platform_specific_information creating-the-definition-file702681
+ Ref: 1f1702681
+ Ref: gnat_ugn/platform_specific_information id31702681
+ Ref: 1f6702681
+ Node: Using gnatdll703439
+ Ref: gnat_ugn/platform_specific_information id32703556
+ Ref: 1f7703556
+ Ref: gnat_ugn/platform_specific_information using-gnatdll703556
+ Ref: 1e5703556
+ Ref: gnat_ugn/platform_specific_information using-dlltool710092
+ Ref: 1f8710092
+ Node: GNAT and Windows Resources711459
+ Ref: gnat_ugn/platform_specific_information gnat-and-windows-resources711664
+ Ref: 1f9711664
+ Ref: gnat_ugn/platform_specific_information id33711664
+ Ref: 1fa711664
+ Node: Building Resources713560
+ Ref: gnat_ugn/platform_specific_information building-resources713671
+ Ref: 1fb713671
+ Ref: gnat_ugn/platform_specific_information id34713671
+ Ref: 1fc713671
+ Node: Compiling Resources714249
+ Ref: gnat_ugn/platform_specific_information compiling-resources714384
+ Ref: 1fd714384
+ Ref: gnat_ugn/platform_specific_information id35714384
+ Ref: 1fe714384
+ Node: Using Resources715324
+ Ref: gnat_ugn/platform_specific_information id36715432
+ Ref: 1ff715432
+ Ref: gnat_ugn/platform_specific_information using-resources715432
+ Ref: 200715432
+ Node: Using GNAT DLLs from Microsoft Visual Studio Applications715726
+ Ref: gnat_ugn/platform_specific_information using-gnat-dll-from-msvs715918
+ Ref: 201715918
+ Ref: gnat_ugn/platform_specific_information using-gnat-dlls-from-microsoft-visual-studio-applications715918
+ Ref: 202715918
+ Node: Debugging a DLL717480
+ Ref: gnat_ugn/platform_specific_information debugging-a-dll717678
+ Ref: 203717678
+ Ref: gnat_ugn/platform_specific_information id37717678
+ Ref: 204717678
+ Node: Program and DLL Both Built with GCC/GNAT718542
+ Ref: gnat_ugn/platform_specific_information id38718705
+ Ref: 205718705
+ Ref: gnat_ugn/platform_specific_information program-and-dll-both-built-with-gcc-gnat718705
+ Ref: 206718705
+ Node: Program Built with Foreign Tools and DLL Built with GCC/GNAT720033
+ Ref: gnat_ugn/platform_specific_information id39720196
+ Ref: 207720196
+ Ref: gnat_ugn/platform_specific_information program-built-with-foreign-tools-and-dll-built-with-gcc-gnat720196
+ Ref: 208720196
+ Node: Setting Stack Size from gnatlink723602
+ Ref: gnat_ugn/platform_specific_information id40723774
+ Ref: 209723774
+ Ref: gnat_ugn/platform_specific_information setting-stack-size-from-gnatlink723774
+ Ref: 127723774
+ Node: Setting Heap Size from gnatlink724991
+ Ref: gnat_ugn/platform_specific_information id41725139
+ Ref: 20a725139
+ Ref: gnat_ugn/platform_specific_information setting-heap-size-from-gnatlink725139
+ Ref: 128725139
+ Node: Windows Specific Add-Ons725826
+ Ref: gnat_ugn/platform_specific_information win32-specific-addons725959
+ Ref: 20b725959
+ Ref: gnat_ugn/platform_specific_information windows-specific-add-ons725959
+ Ref: 20c725959
+ Node: Win32Ada726110
+ Ref: gnat_ugn/platform_specific_information id42726196
+ Ref: 20d726196
+ Ref: gnat_ugn/platform_specific_information win32ada726196
+ Ref: 20e726196
+ Node: wPOSIX726793
+ Ref: gnat_ugn/platform_specific_information id43726879
+ Ref: 20f726879
+ Ref: gnat_ugn/platform_specific_information wposix726879
+ Ref: 210726879
+ Node: Mac OS Topics727563
+ Ref: gnat_ugn/platform_specific_information id44727677
+ Ref: 211727677
+ Ref: gnat_ugn/platform_specific_information mac-os-topics727677
+ Ref: 212727677
+ Node: Codesigning the Debugger727830
+ Ref: gnat_ugn/platform_specific_information codesigning-the-debugger727906
+ Ref: 213727906
+ Node: Example of Binder Output File729889
+ Ref: gnat_ugn/example_of_binder_output doc730041
+ Ref: 214730041
+ Ref: gnat_ugn/example_of_binder_output example-of-binder-output-file730041
+ Ref: e730041
+ Ref: gnat_ugn/example_of_binder_output id1730041
+ Ref: 215730041
+ Node: Elaboration Order Handling in GNAT761128
+ Ref: gnat_ugn/elaboration_order_handling_in_gnat doc761267
+ Ref: 216761267
+ Ref: gnat_ugn/elaboration_order_handling_in_gnat elaboration-order-handling-in-gnat761267
+ Ref: f761267
+ Ref: gnat_ugn/elaboration_order_handling_in_gnat id1761267
+ Ref: 217761267
+ Node: Elaboration Code762021
+ Ref: gnat_ugn/elaboration_order_handling_in_gnat elaboration-code762136
+ Ref: 218762136
+ Ref: gnat_ugn/elaboration_order_handling_in_gnat id2762136
+ Ref: 219762136
+ Node: Elaboration Order766025
+ Ref: gnat_ugn/elaboration_order_handling_in_gnat elaboration-order766179
+ Ref: 21a766179
+ Ref: gnat_ugn/elaboration_order_handling_in_gnat id3766179
+ Ref: 21b766179
+ Node: Checking the Elaboration Order769841
+ Ref: gnat_ugn/elaboration_order_handling_in_gnat checking-the-elaboration-order770019
+ Ref: 21c770019
+ Ref: gnat_ugn/elaboration_order_handling_in_gnat id4770019
+ Ref: 21d770019
+ Node: Controlling the Elaboration Order in Ada771727
+ Ref: gnat_ugn/elaboration_order_handling_in_gnat controlling-the-elaboration-order-in-ada771929
+ Ref: 21e771929
+ Ref: gnat_ugn/elaboration_order_handling_in_gnat id5771929
+ Ref: 21f771929
+ Node: Controlling the Elaboration Order in GNAT780551
+ Ref: gnat_ugn/elaboration_order_handling_in_gnat controlling-the-elaboration-order-in-gnat780748
+ Ref: 220780748
+ Ref: gnat_ugn/elaboration_order_handling_in_gnat id6780748
+ Ref: 221780748
+ Node: Mixing Elaboration Models784603
+ Ref: gnat_ugn/elaboration_order_handling_in_gnat id7784775
+ Ref: 222784775
+ Ref: gnat_ugn/elaboration_order_handling_in_gnat mixing-elaboration-models784775
+ Ref: 223784775
+ Node: ABE Diagnostics785792
+ Ref: gnat_ugn/elaboration_order_handling_in_gnat abe-diagnostics785940
+ Ref: 224785940
+ Ref: gnat_ugn/elaboration_order_handling_in_gnat id8785940
+ Ref: 225785940
+ Node: SPARK Diagnostics789474
+ Ref: gnat_ugn/elaboration_order_handling_in_gnat id9789622
+ Ref: 226789622
+ Ref: gnat_ugn/elaboration_order_handling_in_gnat spark-diagnostics789622
+ Ref: 227789622
+ Node: Elaboration Circularities790393
+ Ref: gnat_ugn/elaboration_order_handling_in_gnat elaboration-circularities790561
+ Ref: 228790561
+ Ref: gnat_ugn/elaboration_order_handling_in_gnat id10790561
+ Ref: 229790561
+ Node: Resolving Elaboration Circularities792816
+ Ref: gnat_ugn/elaboration_order_handling_in_gnat id11793004
+ Ref: 22a793004
+ Ref: gnat_ugn/elaboration_order_handling_in_gnat resolving-elaboration-circularities793004
+ Ref: 22b793004
+ Node: Elaboration-related Compiler Switches800537
+ Ref: gnat_ugn/elaboration_order_handling_in_gnat elaboration-related-compiler-switches800745
+ Ref: 22c800745
+ Ref: gnat_ugn/elaboration_order_handling_in_gnat id12800745
+ Ref: 22d800745
+ Node: Summary of Procedures for Elaboration Control805586
+ Ref: gnat_ugn/elaboration_order_handling_in_gnat id13805798
+ Ref: 22e805798
+ Ref: gnat_ugn/elaboration_order_handling_in_gnat summary-of-procedures-for-elaboration-control805798
+ Ref: 22f805798
+ Node: Inspecting the Chosen Elaboration Order807649
+ Ref: gnat_ugn/elaboration_order_handling_in_gnat id14807815
+ Ref: 230807815
+ Ref: gnat_ugn/elaboration_order_handling_in_gnat inspecting-the-chosen-elaboration-order807815
+ Ref: 231807815
+ Node: Inline Assembler812430
+ Ref: gnat_ugn/inline_assembler doc812570
+ Ref: 232812570
+ Ref: gnat_ugn/inline_assembler id1812570
+ Ref: 233812570
+ Ref: gnat_ugn/inline_assembler inline-assembler812570
+ Ref: 10812570
+ Node: Basic Assembler Syntax814113
+ Ref: gnat_ugn/inline_assembler basic-assembler-syntax814235
+ Ref: 234814235
+ Ref: gnat_ugn/inline_assembler id2814235
+ Ref: 235814235
+ Node: A Simple Example of Inline Assembler816286
+ Ref: gnat_ugn/inline_assembler a-simple-example-of-inline-assembler816453
+ Ref: 236816453
+ Ref: gnat_ugn/inline_assembler id3816453
+ Ref: 237816453
+ Node: Output Variables in Inline Assembler819762
+ Ref: gnat_ugn/inline_assembler id4819942
+ Ref: 238819942
+ Ref: gnat_ugn/inline_assembler output-variables-in-inline-assembler819942
+ Ref: 239819942
+ Node: Input Variables in Inline Assembler828078
+ Ref: gnat_ugn/inline_assembler id5828252
+ Ref: 23a828252
+ Ref: gnat_ugn/inline_assembler input-variables-in-inline-assembler828252
+ Ref: 23b828252
+ Node: Inlining Inline Assembler Code830640
+ Ref: gnat_ugn/inline_assembler id6830801
+ Ref: 23c830801
+ Ref: gnat_ugn/inline_assembler inlining-inline-assembler-code830801
+ Ref: 23d830801
+ Node: Other Asm Functionality832700
+ Ref: gnat_ugn/inline_assembler id7832817
+ Ref: 23e832817
+ Ref: gnat_ugn/inline_assembler other-asm-functionality832817
+ Ref: 23f832817
+ Node: The Clobber Parameter833131
+ Ref: gnat_ugn/inline_assembler id8833245
+ Ref: 240833245
+ Ref: gnat_ugn/inline_assembler the-clobber-parameter833245
+ Ref: 241833245
+ Node: The Volatile Parameter835220
+ Ref: gnat_ugn/inline_assembler id9835334
+ Ref: 242835334
+ Ref: gnat_ugn/inline_assembler the-volatile-parameter835334
+ Ref: 243835334
+ Node: GNU Free Documentation License836490
+ Ref: share/gnu_free_documentation_license doc836601
+ Ref: 244836601
+ Ref: share/gnu_free_documentation_license gnu-fdl836601
+ Ref: 1836601
+ Ref: share/gnu_free_documentation_license gnu-free-documentation-license836601
+ Ref: 245836601
+ Node: Index860059
+ Ref: gnat_ugn/gnat_utility_programs switches-related-to-project-files999731
+ Ref: cf999761
+ 
+ End Tag Table
+ 
+ 
+ Local Variables:
+ coding: utf-8
+ End:
diff -Nrcpad gcc-13.3.0/gcc/doc/gpl.7 gcc-13.4.0/gcc/doc/gpl.7
*** gcc-13.3.0/gcc/doc/gpl.7	Tue May 21 07:50:34 2024
--- gcc-13.4.0/gcc/doc/gpl.7	Thu Jun  5 16:06:29 2025
***************
*** 133,139 ****
  .\" ========================================================================
  .\"
  .IX Title "GPL 7"
! .TH GPL 7 "2024-05-21" "gcc-13.3.0" "GNU"
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
--- 133,139 ----
  .\" ========================================================================
  .\"
  .IX Title "GPL 7"
! .TH GPL 7 "2025-06-05" "gcc-13.4.0" "GNU"
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
diff -Nrcpad gcc-13.3.0/gcc/doc/invoke.texi gcc-13.4.0/gcc/doc/invoke.texi
*** gcc-13.3.0/gcc/doc/invoke.texi	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/doc/invoke.texi	Thu Jun  5 16:02:58 2025
*************** the available options are shown at start
*** 16672,16679 ****
  @url{https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags}
  for a list of supported options.
  The option cannot be combined with @option{-fsanitize=thread} or
! @option{-fsanitize=hwaddress}.  Note that the only target
! @option{-fsanitize=hwaddress} is currently supported on is AArch64.
  
  To get more accurate stack traces, it is possible to use options such as
  @option{-O0}, @option{-O1}, or @option{-Og} (which, for instance, prevent
--- 16672,16681 ----
  @url{https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags}
  for a list of supported options.
  The option cannot be combined with @option{-fsanitize=thread} or
! @option{-fsanitize=hwaddress}.  Note that the only targets
! @option{-fsanitize=hwaddress} is currently supported on are x86-64
! (only with @code{-mlam=u48} or @code{-mlam=u57} options) and AArch64,
! in both cases only in ABIs with 64-bit pointers.
  
  To get more accurate stack traces, it is possible to use options such as
  @option{-O0}, @option{-O1}, or @option{-Og} (which, for instance, prevent
*************** By default, the dump will contain messag
*** 19189,19194 ****
--- 19191,19283 ----
  optimizations (equivalent to @option{-optimized}) together with
  low-level details about the analysis.
  
+ @opindex fdump-ipa-clones
+ @item -fdump-ipa-clones
+ 
+ Create a dump file containing information about creation of call graph
+ node clones and removals of call graph nodes during inter-procedural
+ optimizations and transformations.  Its main intended use is that tools
+ that create live-patches can determine the set of functions that need to
+ be live-patched to completely replace a particular function (see
+ @option{-flive-patching}).  The file name is generated by appending
+ suffix @code{ipa-clones} to the source file name, and the file is
+ created in the same directory as the output file.  Each entry in the
+ file is on a separate line containing semicolon separated fields.
+ 
+ In the case of call graph clone creation, the individual fields are:
+ 
+ @enumerate
+ @item
+ String @code{Callgraph clone}.
+ 
+ @item
+ Name of the function being cloned as it is presented to the assembler.
+ 
+ @item
+ A number that uniquely represents the function being cloned in the call
+ graph.  Note that the number is unique only within a compilation unit or
+ within whole-program analysis but is likely to be different in the two
+ phases.
+ 
+ @item
+ The file name of the source file where the function is defined.
+ 
+ @item
+ The line on which the function definition is located.
+ 
+ @item
+ The column where the function definition is located.
+ 
+ @item
+ Name of the new function clone as it is presented to the assembler.
+ 
+ @item
+ A number that uniquely represents the new function clone in the call
+ graph.  Note that the number is unique only within a compilation unit or
+ within whole-program analysis but is likely to be different in the two
+ phases.
+ 
+ @item
+ The file name of the source file where the source code location of the
+ new clone points to.
+ 
+ @item
+ The line to which the source code location of the new clone points to.
+ 
+ @item
+ The column to which the source code location of the new clone points to.
+ 
+ @item
+ A string that determines the reason for cloning.
+ 
+ @end enumerate
+ 
+ In the case of call graph clone removal, the individual fields are:
+ 
+ @enumerate
+ @item
+ String @code{Callgraph removal}.
+ 
+ @item
+ Name of the function being removed as it would be presented to the assembler.
+ 
+ @item
+ A number that uniquely represents the function being cloned in the call
+ graph.  Note that the number is unique only within a compilation unit or
+ within whole-program analysis but is likely to be different in the two
+ phases.
+ 
+ @item
+ The file name of the source file where the function is defined.
+ 
+ @item
+ The line on which the function definition is located.
+ 
+ @item
+ The column where the function definition is located.
+ 
+ @end enumerate
+ 
  @opindex fdump-lang
  @item -fdump-lang
  Dump language-specific information.  The file name is made by appending
*************** performance of the code.  Permissible va
*** 20315,20322 ****
  @samp{cortex-a78}, @samp{cortex-a78ae}, @samp{cortex-a78c},
  @samp{ares}, @samp{exynos-m1}, @samp{emag}, @samp{falkor},
  @samp{neoverse-512tvb}, @samp{neoverse-e1}, @samp{neoverse-n1},
! @samp{neoverse-n2}, @samp{neoverse-v1}, @samp{neoverse-v2}, @samp{qdf24xx},
! @samp{saphira}, @samp{phecda}, @samp{xgene1}, @samp{vulcan},
  @samp{octeontx}, @samp{octeontx81},  @samp{octeontx83},
  @samp{octeontx2}, @samp{octeontx2t98}, @samp{octeontx2t96}
  @samp{octeontx2t93}, @samp{octeontx2f95}, @samp{octeontx2f95n},
--- 20404,20411 ----
  @samp{cortex-a78}, @samp{cortex-a78ae}, @samp{cortex-a78c},
  @samp{ares}, @samp{exynos-m1}, @samp{emag}, @samp{falkor},
  @samp{neoverse-512tvb}, @samp{neoverse-e1}, @samp{neoverse-n1},
! @samp{neoverse-n2}, @samp{neoverse-v1}, @samp{neoverse-v2}, @samp{grace},
! @samp{qdf24xx}, @samp{saphira}, @samp{phecda}, @samp{xgene1}, @samp{vulcan},
  @samp{octeontx}, @samp{octeontx81},  @samp{octeontx83},
  @samp{octeontx2}, @samp{octeontx2t98}, @samp{octeontx2t96}
  @samp{octeontx2t93}, @samp{octeontx2f95}, @samp{octeontx2f95n},
*************** Intel Core 2 CPU with 64-bit extensions,
*** 32372,32377 ****
--- 32461,32467 ----
  SAHF and FXSR instruction set support.
  
  @item nehalem
+ @itemx corei7
  Intel Nehalem CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF and FXSR instruction set support.
  
*************** Intel Westmere CPU with 64-bit extension
*** 32380,32396 ****
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR and PCLMUL instruction set support.
  
  @item sandybridge
  Intel Sandy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE and PCLMUL instruction set
  support.
  
  @item ivybridge
  Intel Ivy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND
  and F16C instruction set support.
  
  @item haswell
! Intel Haswell CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE and HLE instruction set support.
  
--- 32470,32489 ----
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR and PCLMUL instruction set support.
  
  @item sandybridge
+ @itemx corei7-avx
  Intel Sandy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE and PCLMUL instruction set
  support.
  
  @item ivybridge
+ @itemx core-avx-i
  Intel Ivy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND
  and F16C instruction set support.
  
  @item haswell
! @itemx core-avx2
! Intel Haswell CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE and HLE instruction set support.
  
*************** SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR
*** 32406,32470 ****
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
  CLFLUSHOPT, XSAVEC, XSAVES and SGX instruction set support.
  
- @item bonnell
- Intel Bonnell CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3 and SSSE3
- instruction set support.
- 
- @item silvermont
- Intel Silvermont CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
- SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW and RDRND
- instruction set support.
- 
- @item goldmont
- Intel Goldmont CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
- SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, SHA,
- RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT and FSGSBASE instruction
- set support.
- 
- @item goldmont-plus
- Intel Goldmont Plus CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
- SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES,
- SHA, RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE,
- RDPID and SGX instruction set support.
- 
- @item tremont
- Intel Tremont CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
- SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, SHA,
- RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE, RDPID,
- SGX, CLWB, GFNI-SSE, MOVDIRI, MOVDIR64B, CLDEMOTE and WAITPKG instruction set
- support.
- 
- @item sierraforest
- Intel Sierra Forest CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
- SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
- XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI,
- MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT,
- PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL, AVX-VNNI,
- AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, ENQCMD and UINTR instruction set
- support.
- 
- @item grandridge
- Intel Grand Ridge CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
- SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
- XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI,
- MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT,
- PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL, AVX-VNNI,
- AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, ENQCMD and UINTR instruction set
- support.
- 
- @item knl
- Intel Knight's Landing CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
- SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
- RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
- AVX512PF, AVX512ER, AVX512F, AVX512CD and PREFETCHWT1 instruction set support.
- 
- @item knm
- Intel Knights Mill CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
- SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
- RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
- AVX512PF, AVX512ER, AVX512F, AVX512CD and PREFETCHWT1, AVX5124VNNIW,
- AVX5124FMAPS and AVX512VPOPCNTDQ instruction set support.
- 
  @item skylake-avx512
  Intel Skylake Server CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
--- 32499,32504 ----
*************** RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA
*** 32472,32487 ****
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW,
  AVX512DQ and AVX512CD instruction set support.
  
  @item cannonlake
! Intel Cannonlake Server CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2,
  SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL,
  FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX,
  PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
  AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA and SHA instruction set
  support.
  
  @item icelake-client
! Intel Icelake Client CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
--- 32506,32535 ----
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW,
  AVX512DQ and AVX512CD instruction set support.
  
+ @item cascadelake
+ Intel Cascade Lake CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
+ SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
+ F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
+ CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ,
+ AVX512CD and AVX512VNNI instruction set support.
+ 
  @item cannonlake
! Intel Cannon Lake Server CPU with 64-bit extensions, MMX, SSE, SSE2,
  SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL,
  FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX,
  PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
  AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA and SHA instruction set
  support.
  
+ @item cooperlake
+ Intel Cooper Lake CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
+ SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
+ F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
+ CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ,
+ AVX512CD, AVX512VNNI and AVX512BF16 instruction set support.
+ 
  @item icelake-client
! Intel Ice Lake Client CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
*************** AVX512CD, PKU, AVX512VBMI, AVX512IFMA, S
*** 32489,32495 ****
  , VPCLMULQDQ, AVX512BITALG, RDPID and AVX512VPOPCNTDQ instruction set support.
  
  @item icelake-server
! Intel Icelake Server CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
--- 32537,32543 ----
  , VPCLMULQDQ, AVX512BITALG, RDPID and AVX512VPOPCNTDQ instruction set support.
  
  @item icelake-server
! Intel Ice Lake Server CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
*************** AVX512CD, PKU, AVX512VBMI, AVX512IFMA, S
*** 32497,32518 ****
  , VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD and CLWB
  instruction set support.
  
- @item cascadelake
- Intel Cascadelake CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
- SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
- F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
- CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ,
- AVX512CD and AVX512VNNI instruction set support.
- 
- @item cooperlake
- Intel cooperlake CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
- SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
- F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
- CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ,
- AVX512CD, AVX512VNNI and AVX512BF16 instruction set support.
- 
  @item tigerlake
! Intel Tigerlake CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
  CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD
--- 32545,32552 ----
  , VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD and CLWB
  instruction set support.
  
  @item tigerlake
! Intel Tiger Lake CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
  SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
  CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD
*************** PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512
*** 32520,32554 ****
  VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, MOVDIRI, MOVDIR64B, CLWB,
  AVX512VP2INTERSECT and KEYLOCKER instruction set support.
  
- @item sapphirerapids
- Intel sapphirerapids CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
- SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
- RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
- AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
- AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2,
- VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD, CLWB,
- MOVDIRI, MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, TSXLDTRK,
- UINTR, AMX-BF16, AMX-TILE, AMX-INT8, AVX-VNNI, AVX512-FP16 and AVX512BF16
- instruction set support.
- 
- @item alderlake
- Intel Alderlake CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
- SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES,
- XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI, MOVDIR64B,
- CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT, PCONFIG, PKU,
- VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL and AVX-VNNI instruction set
- support.
- 
  @item rocketlake
! Intel Rocketlake CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3
! , SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
  CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD
  PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2,
  VPCLMULQDQ, AVX512BITALG, RDPID and AVX512VPOPCNTDQ instruction set support.
  
  @item graniterapids
! Intel graniterapids CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
--- 32554,32591 ----
  VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, MOVDIRI, MOVDIR64B, CLWB,
  AVX512VP2INTERSECT and KEYLOCKER instruction set support.
  
  @item rocketlake
! Intel Rocket Lake CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
! SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
  F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
  CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD
  PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2,
  VPCLMULQDQ, AVX512BITALG, RDPID and AVX512VPOPCNTDQ instruction set support.
  
+ @item alderlake
+ @itemx raptorlake
+ @itemx meteorlake
+ Intel Alder Lake/Raptor Lake/Meteor Lake CPU with 64-bit extensions, MOVBE, MMX,
+ SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND,
+ XSAVE, XSAVEC, XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB,
+ MOVDIRI, MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA,
+ LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL and
+ AVX-VNNI instruction set support.
+ 
+ @item sapphirerapids
+ @itemx emeraldrapids
+ Intel Sapphire Rapids/Emerald Rapids CPU with 64-bit extensions, MMX, SSE,
+ SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL,
+ FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX,
+ PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
+ AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES,
+ AVX512VBMI2, VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG,
+ WBNOINVD, CLWB, MOVDIRI, MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG,
+ SERIALIZE, TSXLDTRK, UINTR, AMX-BF16, AMX-TILE, AMX-INT8, AVX-VNNI, AVX512-FP16
+ and AVX512BF16 instruction set support.
+ 
  @item graniterapids
! Intel Granite Rapids CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
*************** UINTR, AMX-BF16, AMX-TILE, AMX-INT8, AVX
*** 32559,32565 ****
  and PREFETCHI instruction set support.
  
  @item graniterapids-d
! Intel graniterapids D CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
--- 32596,32602 ----
  and PREFETCHI instruction set support.
  
  @item graniterapids-d
! Intel Granite Rapids D CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3,
  SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
  RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
  AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
*************** MOVDIRI, MOVDIR64B, ENQCMD, CLDEMOTE, PT
*** 32569,32574 ****
--- 32606,32672 ----
  UINTR, AMX-BF16, AMX-TILE, AMX-INT8, AVX-VNNI, AVX512FP16, AVX512BF16, AMX-FP16,
  PREFETCHI and AMX-COMPLEX instruction set support.
  
+ @item bonnell
+ @itemx atom
+ Intel Bonnell CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3 and SSSE3
+ instruction set support.
+ 
+ @item silvermont
+ @itemx slm
+ Intel Silvermont CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
+ SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW and RDRND
+ instruction set support.
+ 
+ @item goldmont
+ Intel Goldmont CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
+ SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, SHA,
+ RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT and FSGSBASE instruction
+ set support.
+ 
+ @item goldmont-plus
+ Intel Goldmont Plus CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
+ SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES,
+ SHA, RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE,
+ RDPID and SGX instruction set support.
+ 
+ @item tremont
+ Intel Tremont CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
+ SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, SHA,
+ RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE, RDPID,
+ SGX, CLWB, GFNI-SSE, MOVDIRI, MOVDIR64B, CLDEMOTE and WAITPKG instruction set
+ support.
+ 
+ @item sierraforest
+ Intel Sierra Forest CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
+ SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
+ XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI,
+ MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT,
+ PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL, AVX-VNNI,
+ AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, ENQCMD and UINTR instruction set
+ support.
+ 
+ @item grandridge
+ Intel Grand Ridge CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
+ SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
+ XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI,
+ MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT,
+ PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL, AVX-VNNI,
+ AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, ENQCMD and UINTR instruction set
+ support.
+ 
+ @item knl
+ Intel Knights Landing CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
+ SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
+ RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
+ AVX512PF, AVX512ER, AVX512F, AVX512CD and PREFETCHWT1 instruction set support.
+ 
+ @item knm
+ Intel Knights Mill CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
+ SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
+ RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
+ AVX512PF, AVX512ER, AVX512F, AVX512CD and PREFETCHWT1, AVX5124VNNIW,
+ AVX5124FMAPS and AVX512VPOPCNTDQ instruction set support.
+ 
  @item k6
  AMD K6 CPU with MMX instruction set support.
  
*************** WBNOINVD, PKU, VPCLMULQDQ, VAES, AVX512F
*** 32660,32665 ****
--- 32758,32773 ----
  AVX512BW, AVX512VL, AVX512BF16, AVX512VBMI, AVX512VBMI2, AVX512VNNI,
  AVX512BITALG, AVX512VPOPCNTDQ, GFNI and 64-bit instruction set extensions.)
  
+ @item znver5
+ AMD Family 1ah core based CPUs with x86-64 instruction set support. (This
+ supersets BMI, BMI2, CLWB, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED,
+ MWAITX, SHA, CLZERO, AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A,
+ SSSE3, SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, RDPID,
+ WBNOINVD, PKU, VPCLMULQDQ, VAES, AVX512F, AVX512DQ, AVX512IFMA, AVX512CD,
+ AVX512BW, AVX512VL, AVX512BF16, AVX512VBMI, AVX512VBMI2, AVX512VNNI,
+ AVX512BITALG, AVX512VPOPCNTDQ, GFNI, AVXVNNI, MOVDIRI, MOVDIR64B,
+ AVX512VP2INTERSECT, PREFETCHI and 64-bit instruction set extensions.)
+ 
  @item btver1
  CPUs based on AMD Family 14h cores with x86-64 instruction set support.  (This
  supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM and 64-bit
*************** instruction set support.
*** 32743,32750 ****
  
  @item lujiazui
  ZHAOXIN lujiazui CPU with x86-64, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
! SSE4.2, AVX, POPCNT, AES, PCLMUL, RDRND, XSAVE, XSAVEOPT, FSGSBASE, CX16,
! ABM, BMI, BMI2, F16C, FXSR, RDSEED instruction set support.
  
  @item geode
  AMD Geode embedded processor with MMX and 3DNow!@: instruction set support.
--- 32851,32860 ----
  
  @item lujiazui
  ZHAOXIN lujiazui CPU with x86-64, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
! SSE4.2, POPCNT, AES, PCLMUL, RDRND, XSAVE, XSAVEOPT, FSGSBASE, CX16,
! ABM, BMI, BMI2, FXSR, RDSEED instruction set support.  While the CPUs
! do support AVX and F16C, these aren't enabled by @code{-march=lujiazui}
! for performance reasons.
  
  @item geode
  AMD Geode embedded processor with MMX and 3DNow!@: instruction set support.
diff -Nrcpad gcc-13.3.0/gcc/doc/lto-dump.1 gcc-13.4.0/gcc/doc/lto-dump.1
*** gcc-13.3.0/gcc/doc/lto-dump.1	Tue May 21 07:50:34 2024
--- gcc-13.4.0/gcc/doc/lto-dump.1	Thu Jun  5 16:06:29 2025
***************
*** 133,139 ****
  .\" ========================================================================
  .\"
  .IX Title "LTO-DUMP 1"
! .TH LTO-DUMP 1 "2024-05-21" "gcc-13.3.0" "GNU"
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
--- 133,139 ----
  .\" ========================================================================
  .\"
  .IX Title "LTO-DUMP 1"
! .TH LTO-DUMP 1 "2025-06-05" "gcc-13.4.0" "GNU"
  .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
  .\" way too many mistakes in technical documents.
  .if n .ad l
diff -Nrcpad gcc-13.3.0/gcc/doc/m2.info gcc-13.4.0/gcc/doc/m2.info
*** gcc-13.3.0/gcc/doc/m2.info	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/doc/m2.info	Thu Jun  5 16:25:59 2025
***************
*** 0 ****
--- 1,21354 ----
+ This is m2.info, produced by makeinfo version 6.8 from gm2.texi.
+ 
+ Copyright (C) 1999-2023 Free Software Foundation, Inc.
+ 
+    Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3 or
+ any later version published by the Free Software Foundation; with no
+ Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.  A
+ copy of the license is included in the section entitled "GNU Free
+ Documentation License".
+ INFO-DIR-SECTION Software development
+ START-INFO-DIR-ENTRY
+ * gm2: (gm2).               A GCC-based compiler for the Modula-2 language
+ END-INFO-DIR-ENTRY
+ 
+ 
+    Copyright (C) 1999-2023 Free Software Foundation, Inc.
+ 
+    Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3 or
+ any later version published by the Free Software Foundation; with no
+ Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.  A
+ copy of the license is included in the section entitled "GNU Free
+ Documentation License".
+ 
+ 
+ File: m2.info,  Node: Top,  Next: Overview,  Prev: (dir),  Up: (dir)
+ 
+ Introduction
+ ************
+ 
+ * Menu:
+ 
+ * Overview::         What is GNU Modula-2.
+ * Using::            Using GNU Modula-2.
+ * License::          License of GNU Modula-2
+ * Copying::          GNU Public License V3.
+ * Contributing::     Contributing to GNU Modula-2
+ * EBNF::             EBNF of GNU Modula-2
+ * Libraries::        PIM and ISO library definitions.
+ * Indices::          Document and function indices.
+ 
+ 
+ File: m2.info,  Node: Overview,  Next: Using,  Prev: Top,  Up: Top
+ 
+ 1 Overview of GNU Modula-2
+ **************************
+ 
+ * Menu:
+ 
+ * What is GNU Modula-2::  Brief description of GNU Modula-2.
+ * Why use GNU Modula-2::  Advantages of GNU Modula-2.
+ * Development::           How to get source code using git.
+ * Features::              GNU Modula-2 Features
+ 
+ 
+ File: m2.info,  Node: What is GNU Modula-2,  Next: Why use GNU Modula-2,  Up: Overview
+ 
+ 1.1 What is GNU Modula-2
+ ========================
+ 
+ GNU Modula-2 is a front end (http://gcc.gnu.org/frontends.html) for the
+ GNU Compiler Collection (GCC (http://gcc.gnu.org/)).  The GNU Modula-2
+ compiler is compliant with the PIM2, PIM3, PIM4 and ISO dialects.  Also
+ implemented are a complete set of free ISO libraries and PIM libraries.
+ 
+    (1)
+ 
+    ---------- Footnotes ----------
+ 
+    (1) The four Modula-2 dialects supported are defined in the following
+ references:
+ 
+    PIM2: 'Programming in Modula-2', 2nd Edition, Springer Verlag, 1982,
+ 1983 by Niklaus Wirth (PIM2).
+ 
+    PIM3: 'Programming in Modula-2', 3rd Corrected Edition, Springer
+ Verlag, 1985 (PIM3).
+ 
+    PIM4: 'Programming in Modula-2', 4th Edition, Springer Verlag, 1988
+ (PIM4 (http://freepages.modula2.org/report4/modula-2.html)).
+ 
+    ISO: the ISO Modula-2 language as defined in 'ISO/IEC Information
+ technology - programming languages - part 1: Modula-2 Language, ISO/IEC
+ 10514-1 (1996)'
+ 
+ 
+ File: m2.info,  Node: Why use GNU Modula-2,  Next: Development,  Prev: What is GNU Modula-2,  Up: Overview
+ 
+ 1.2 Why use GNU Modula-2
+ ========================
+ 
+ There are a number of advantages of using GNU Modula-2 rather than
+ translate an existing project into another language.
+ 
+    The first advantage is of maintainability of the original sources and
+ the ability to debug the original project source code using a
+ combination of gm2 and gdb.
+ 
+    The second advantage is that gcc runs on many processors and
+ platforms.  gm2 builds and runs on powerpc64le, amd64, i386, aarch64 to
+ name but a few processors.
+ 
+    gm2 can produce swig interface headers to allow access from Python
+ and other scripting languages.  It can also be used with C/C++ and
+ generate shared libraries.
+ 
+    The compiler provides semantic analysis and run time checking (full
+ ISO Modula-2 checking is implemented) and there is a plugin which can,
+ under certain conditions, detect run time errors at compile time.
+ 
+    The compiler supports PIM2, PIM3, PIM4 and ISO dialects of Modula-2,
+ work is underway to implement M2R10.  Many of the GCC builtins are
+ available and access to assembly programming is achieved using the same
+ syntax as that used by GCC.
+ 
+    The gm2 driver allows third party libraries to be installed alongside
+ gm2 libraries.  For example if the user specifies library 'foo' using
+ '-flibs=foo' the driver will check the standard GCC install directory
+ for a sub directory 'foo' containing the library contents.  The library
+ module search path is altered accordingly for compile and link.
+ 
+ 
+ File: m2.info,  Node: Development,  Next: Features,  Prev: Why use GNU Modula-2,  Up: Overview
+ 
+ 1.3 How to get source code using git
+ ====================================
+ 
+ GNU Modula-2 is now in the GCC git tree (https://gcc.gnu.org/git.html).
+ 
+ 
+ File: m2.info,  Node: Features,  Prev: Development,  Up: Overview
+ 
+ 1.4 GNU Modula-2 Features
+ =========================
+ 
+    * the compiler currently complies with Programming in Modula-2
+      Edition 2, 3, 4 and ISO Modula-2.  Users can switch on specific
+      language features by using: '-fpim', '-fpim2', '-fpim3', '-fpim4'
+      or '-fiso'.
+ 
+    * the option '-fswig' will automatically create a swig interface file
+      which corresponds to the definition module of the file being
+      compiled.
+ 
+    * exception handling is compatible with C++ and swig.  Modula-2 code
+      can be used with C or C++ code.
+ 
+    * Python can call GNU Modula-2 modules via swig.
+ 
+    * shared libraries can be built.
+ 
+    * fixed sized types are now available from 'SYSTEM'.
+ 
+    * variables can be declared at addresses.
+ 
+    * much better dwarf-2 debugging support and when used with 'gdb' the
+      programmer can display 'RECORD's, 'ARRAY's, 'SET's, subranges and
+      constant char literals in Modula-2 syntax.
+ 
+    * supports sets of any ordinal size (memory permitting).
+ 
+    * easy interface to C, and varargs can be passed to C routines.
+ 
+    * many Logitech libraries have been implemented and can be accessed
+      via: '-flibs=m2log,m2pim,m2iso'.
+ 
+    * coroutines have been implemented in the PIM style and these are
+      accessible from SYSTEM. A number of supporting libraries (executive
+      and file descriptor mapping to interrupt vector libraries are
+      available through the '-flibs=m2iso,m2pim' switch).
+ 
+    * can be built as a cross compiler (for embedded microprocessors such
+      as the AVR and the ARM).
+ 
+ 
+ File: m2.info,  Node: Using,  Next: License,  Prev: Overview,  Up: Top
+ 
+ 2 Using GNU Modula-2
+ ********************
+ 
+ * Menu:
+ 
+ * Example usage::         Example compile and link.
+ * Compiler options::      GNU Modula-2 compiler options.
+ * Linking::               Linking options in more detail.
+ * Elementary data types:: Data types supported by GNU Modula-2.
+ * Standard procedures::   Permanently accessible base procedures.
+ * High procedure function:: Behavior of the high procedure function.
+ * Dialect::               GNU Modula-2 supported dialects.
+ * Exceptions::            Exception implementation
+ * Semantic checking::     How to detect run time problems at compile time.
+ * Extensions::            GNU Modula-2 language extensions.
+ * Type compatibility::    Data type compatibility.
+ * Unbounded by reference::Explanation of a language optimization.
+ * Building a shared library:: How to build a shared library.
+ * Interface for Python::  How to produce swig interface files.
+ * Producing a Python module::  How to produce a Python module.
+ * Interface to C::        Interfacing GNU Modula-2 to C.
+ * Assembly language::     Interface to assembly language.
+ * Alignment::             Data type alignment.
+ * Packed::                Packing data types.
+ * Built-ins::             Accessing GNU Modula-2 Built-ins.
+ * The PIM system module:: SYSTEM data types and procedures.
+ * The ISO system module:: SYSTEM data types, procedures and run time.
+ * Release map:: Release map.
+ * Documentation:: Placeholder for how to access the documentation online.
+ * Regression tests:: How to run the testsuite.
+ * Limitations:: Current limitations.
+ * Objectives:: Objectives of the implementation.
+ * FAQ:: Frequently asked questions.
+ * Community:: How to join the community.
+ * Other languages:: Other languages for GCC.
+ 
+ This document contains the user and design issues relevant to the
+ Modula-2 front end to gcc.
+ 
+ 
+ File: m2.info,  Node: Example usage,  Next: Compiler options,  Prev: Using,  Up: Using
+ 
+ 2.1 Example compile and link
+ ============================
+ 
+ The 'gm2' command is the GNU compiler for the Modula-2 language and
+ supports many of the same options as 'gcc'.  *Note Option Summary:
+ (gcc)Option Summary.  This manual only documents the options specific to
+ 'gm2'.
+ 
+    This section describes how to compile and link a simple hello world
+ program.  It provides a few examples of using the different options
+ mentioned in *note (gm2)Compiler options::.  Assuming that you have a
+ file called 'hello.mod' in your current directory which contains:
+ 
+      MODULE hello ;
+ 
+      FROM StrIO IMPORT WriteString, WriteLn ;
+ 
+      BEGIN
+         WriteString ('hello world') ; WriteLn
+      END hello.
+ 
+    You can compile and link it by: 'gm2 -g hello.mod'.  The result will
+ be an 'a.out' file created in your directory.
+ 
+    You can split this command into two steps if you prefer.  The compile
+ step can be achieved by: 'gm2 -g -c -fscaffold-main hello.mod' and the
+ link via: 'gm2 -g hello.o'.
+ 
+    (1)
+ 
+    ---------- Footnotes ----------
+ 
+    (1) To see all the compile actions taken by 'gm2' users can also add
+ the '-v' flag at the command line, for example:
+ 
+    'gm2 -v -g -I. hello.mod'
+ 
+    This displays the sub processes initiated by 'gm2' which can be
+ useful when trouble shooting.
+ 
+ 
+ File: m2.info,  Node: Compiler options,  Next: Linking,  Prev: Example usage,  Up: Using
+ 
+ 2.2 Compiler options
+ ====================
+ 
+ This section describes the compiler options specific to GNU Modula-2 for
+ generic flags details *Note (gcc)Invoking GCC::.
+ 
+    For any given input file, the file name suffix determines what kind
+ of compilation is done.  The following kinds of input file names are
+ supported:
+ 
+ 'FILE.mod'
+      Modula-2 implementation or program source files.  See the '-fmod='
+      option if you wish to compile a project which uses a different
+      source file extension.
+ 'FILE.def'
+      Modula-2 definition module source files.  Definition modules are
+      not compiled separately, in GNU Modula-2 definition modules are
+      parsed as required when program or implementation modules are
+      compiled.  See the '-fdef=' option if you wish to compile a project
+      which uses a different source file extension.
+ 
+    You can specify more than one input file on the 'gm2' command line,
+ 
+ '-g'
+      create debugging information so that debuggers such as 'gdb' can
+      inspect and control executable.
+ 
+ '-I'
+      used to specify the search path for definition and implementation
+      modules.  An example is: 'gm2 -g -c -I.:../../libs foo.mod'.  If
+      this option is not specified then the default path is added which
+      consists of the current directory followed by the appropriate
+      language dialect library directories.
+ 
+ '-fauto-init'
+      turns on auto initialization of pointers to NIL. Whenever a block
+      is created all pointers declared within this scope will have their
+      addresses assigned to NIL.
+ 
+ '-fbounds'
+      turns on run time subrange, array index and indirection via 'NIL'
+      pointer checking.
+ 
+ '-fcase'
+      turns on compile time checking to check whether a 'CASE' statement
+      requires an 'ELSE' clause when on was not specified.
+ 
+ '-fcpp'
+      preprocess the source with 'cpp -lang-asm -traditional-cpp' For
+      further details about these options *Note (cpp)Invocation::.  If
+      '-fcpp' is supplied then all definition modules and implementation
+      modules which are parsed will be prepossessed by 'cpp'.
+ 
+ '-fdebug-builtins'
+      call a real function, rather than the builtin equivalent.  This can
+      be useful for debugging parameter values to a builtin function as
+      it allows users to single step code into a real function.
+ 
+ '-fdef='
+      recognize the specified suffix as a definition module filename.
+      The default implementation and module filename suffix is '.def'.
+      If this option is used GNU Modula-2 will still fall back to this
+      default if a requested definition module is not found.
+ 
+ '-fdump-system-exports'
+      display all inbuilt system items.  This is an internal command line
+      option.
+ 
+ '-fexceptions'
+      turn on exception handling code.  By default this option is on.
+      Exception handling can be disabled by '-fno-exceptions' and no
+      references are made to the run time exception libraries.
+ 
+ '-fextended-opaque'
+      allows opaque types to be implemented as any type.  This is a GNU
+      Modula-2 extension and it requires that the implementation module
+      defining the opaque type is available so that it can be resolved
+      when compiling the module which imports the opaque type.
+ 
+ '-ffloatvalue'
+      turns on run time checking to check whether a floating point number
+      is about to exceed range.
+ 
+ '-fgen-module-list=filename'
+      attempt to find all modules when linking and generate a module
+      list.  If the 'filename' is '-' then the contents are not written
+      and only used to force the linking of all module ctors.  This
+      option cannot be used if '-fuse-list=' is enabled.
+ 
+ '-findex'
+      generate code to check whether array index values are out of
+      bounds.  Array index checking can be disabled via '-fno-index'.
+ 
+ '-fiso'
+      turn on ISO standard features.  Currently this enables the ISO
+      'SYSTEM' module and alters the default library search path so that
+      the ISO libraries are searched before the PIM libraries.  It also
+      effects the behavior of 'DIV' and 'MOD' operators.  *Note
+      (gm2)Dialect::.
+ 
+ '-flibs='
+      modifies the default library search path.  The libraries supplied
+      are: m2pim, m2iso, m2min, m2log and m2cor.  These map onto the
+      Programming in Modula-2 base libraries, ISO standard libraries,
+      minimal library support, Logitech compatible library and
+      Programming in Modula-2 with coroutines.  Multiple libraries can be
+      specified and are comma separated with precedence going to the
+      first in the list.  It is not necessary to use -flibs=m2pim or
+      -flibs=m2iso if you also specify -fpim, -fpim2, -fpim3, -fpim4 or
+      -fiso.  Unless you are using -flibs=m2min you should include m2pim
+      as the they provide the base modules which all other dialects
+      utilize.  The option '-fno-libs=-' disables the 'gm2' driver from
+      modifying the search and library paths.
+ 
+ '-static-libgm2'
+      On systems that provide the m2 runtimes as both shared and static
+      libraries, this option forces the use of the static version.
+ 
+ '-fm2-g'
+      improve the debugging experience for new programmers at the expense
+      of generating 'nop' instructions if necessary to ensure single
+      stepping precision over all code related keywords.  An example of
+      this is in termination of a list of nested 'IF' statements where
+      multiple 'END' keywords are mapped onto a sequence of 'nop'
+      instructions.
+ 
+ '-fm2-lower-case'
+      render keywords in error messages using lower case.
+ 
+ '-fm2-pathname='
+      specify the module mangled prefix name for all modules in the
+      following include paths.
+ 
+ '-fm2-pathnameI'
+      for internal use only: used by the driver to copy the user facing
+      -I option.
+ 
+ '-fm2-plugin'
+      insert plugin to identify run time errors at compile time (default
+      on).
+ 
+ '-fm2-prefix='
+      specify the module mangled prefix name.  All exported symbols from
+      a definition module will have the prefix name.
+ 
+ '-fm2-statistics'
+      generates quadruple information: number of quadruples generated,
+      number of quadruples remaining after optimization and number of
+      source lines compiled.
+ 
+ '-fm2-strict-type'
+      experimental flag to turn on the new strict type checker.
+ 
+ '-fm2-whole-program'
+      compile all implementation modules and program module at once.
+      Notice that you need to take care if you are compiling different
+      dialect modules (particularly with the negative operands to
+      modulus).  But this option, when coupled together with '-O3', can
+      deliver huge performance improvements.
+ 
+ '-fmod='
+      recognize the specified suffix as implementation and module
+      filenames.  The default implementation and module filename suffix
+      is '.mod'.  If this option is used GNU Modula-2 will still fall
+      back to this default if it needs to read an implementation module
+      and the specified suffixed filename does not exist.
+ 
+ '-fnil'
+      generate code to detect accessing data through a 'NIL' value
+      pointer.  Dereferencing checking through a 'NIL' pointer can be
+      disabled by '-fno-nil'.
+ 
+ '-fpim'
+      turn on PIM standard features.  Currently this enables the PIM
+      'SYSTEM' module and determines which identifiers are pervasive
+      (declared in the base module).  If no other '-fpim[234]' switch is
+      used then division and modulus operators behave as defined in PIM4.
+      *Note (gm2)Dialect::.
+ 
+ '-fpim2'
+      turn on PIM-2 standard features.  Currently this removes 'SIZE'
+      from being a pervasive identifier (declared in the base module).
+      It places 'SIZE' in the 'SYSTEM' module.  It also effects the
+      behavior of 'DIV' and 'MOD' operators.  *Note (gm2)Dialect::.
+ 
+ '-fpim3'
+      turn on PIM-3 standard features.  Currently this only effects the
+      behavior of 'DIV' and 'MOD' operators.  *Note (gm2)Dialect::.
+ 
+ '-fpim4'
+      turn on PIM-4 standard features.  Currently this only effects the
+      behavior of 'DIV' and 'MOD' operators.  *Note (gm2)Dialect::.
+ 
+ '-fpositive-mod-floor-div'
+      forces the 'DIV' and 'MOD' operators to behave as defined by PIM4.
+      All modulus results are positive and the results from the division
+      are rounded to the floor.  *Note (gm2)Dialect::.
+ 
+ '-fpthread'
+      link against the pthread library.  By default this option is on.
+      It can be disabled by '-fno-pthread'.  GNU Modula-2 uses the GCC
+      pthread libraries to implement coroutines (see the SYSTEM
+      implementation module).
+ 
+ '-frange'
+      generate code to check the assignment range, return value range set
+      range and constructor range.  Range checking can be disabled via
+      '-fno-range'.
+ 
+ '-freturn'
+      generate code to check that functions always exit with a 'RETURN'
+      and do not fall out at the end.  Return checking can be disabled
+      via '-fno-return'.
+ 
+ '-fruntime-modules='
+      specify, using a comma separated list, the run time modules and
+      their order.  These modules will initialized first before any other
+      modules in the application dependency.  By default the run time
+      modules list is set to 'm2iso:RTentity,m2iso:Storage,m2iso:SYSTEM,'
+      'm2iso:M2RTS,m2iso:RTExceptions,m2iso:IOLink'.  Note that these
+      modules will only be linked into your executable if they are
+      required.  Adding a long list of dependent modules will not effect
+      the size of the executable it merely states the initialization
+      order should they be required.
+ 
+ '-fscaffold-dynamic'
+      the option ensures that 'gm2' will generate a dynamic scaffold
+      infrastructure when compiling implementation and program modules.
+      By default this option is on.  Use '-fno-scaffold-dynamic' to turn
+      it off or select '-fno-scaffold-static'.
+ 
+ '-fscaffold-c'
+      generate a C source scaffold for the current module being compiled.
+ 
+ '-fscaffold-c++'
+      generate a C++ source scaffold for the current module being
+      compiled.
+ 
+ '-fscaffold-main'
+      force the generation of the 'main' function.  This is not necessary
+      if the '-c' is omitted.
+ 
+ '-fscaffold-static'
+      the option ensures that 'gm2' will generate a static scaffold
+      within the program module.  The static scaffold consists of
+      sequences of calls to all dependent module initialization and
+      finalization procedures.  The static scaffold is useful for
+      debugging and single stepping the initialization blocks of
+      implementation modules.
+ 
+ '-fshared'
+      generate a shared library from the module.
+ 
+ '-fsoft-check-all'
+      turns on all run time checks.  This is the same as invoking GNU
+      Modula-2 using the command options '-fnil' '-frange' '-findex'
+      '-fwholevalue' '-fwholediv' '-fcase' '-freturn'.
+ 
+ '-fsources'
+      displays the path to the source of each module.  This option can be
+      used at compile time to check the correct definition module is
+      being used.
+ 
+ '-fswig'
+      generate a swig interface file.
+ 
+ '-funbounded-by-reference'
+      enable optimization of unbounded parameters by attempting to pass
+      non 'VAR' unbounded parameters by reference.  This optimization
+      avoids the implicit copy inside the callee procedure.  GNU Modula-2
+      will only allow unbounded parameters to be passed by reference if,
+      inside the callee procedure, they are not written to, no address is
+      calculated on the array and it is not passed as a 'VAR' parameter.
+      Note that it is possible to write code to break this optimization,
+      therefore this option should be used carefully.  For example it
+      would be possible to take the address of an array, pass the address
+      and the array to a procedure, read from the array in the procedure
+      and write to the location using the address parameter.
+ 
+      Due to the dangerous nature of this option it is not enabled when
+      the '-O' option is specified.
+ 
+ '-fuse-list=filename'
+      if '-fscaffold-static' is enabled then use the file 'filename' for
+      the initialization order of modules.  Whereas if
+      '-fscaffold-dynamic' is enabled then use this file to force linking
+      of all module ctors.  This option cannot be used if
+      '-fgen-module-list=' is enabled.
+ 
+ '-fwholediv'
+      generate code to detect whole number division by zero or modulus by
+      zero.
+ 
+ '-fwholevalue'
+      generate code to detect whole number overflow and underflow.
+ 
+ '-Wcase-enum'
+      generate a warning if a 'CASE' statement selects on an enumerated
+      type expression and the statement is missing one or more 'CASE'
+      labels.  No warning is issued if the 'CASE' statement has a default
+      'ELSE' clause.  The option '-Wall' will turn on this flag.
+ 
+ '-Wuninit-variable-checking'
+      issue a warning if a variable is used before it is initialized.
+      The checking only occurs in the first basic block in each
+      procedure.  It does not check parameters, array types or set types.
+ 
+ '-Wuninit-variable-checking=all,known,cond'
+      issue a warning if a variable is used before it is initialized.
+      The checking will only occur in the first basic block in each
+      procedure if 'known' is specified.  If 'cond' or 'all' is specified
+      then checking continues into conditional branches of the flow
+      graph.  All checking will stop when a procedure call is invoked or
+      the top of a loop is encountered.  The option '-Wall' will turn on
+      this flag with '-Wuninit-variable-checking=known'.  The
+      '-Wuninit-variable-checking=all' will increase compile time.
+ 
+ 
+ File: m2.info,  Node: Linking,  Next: Elementary data types,  Prev: Compiler options,  Up: Using
+ 
+ This section describes the linking related options.  There are three
+ linking strategies available which are dynamic scaffold, static scaffold
+ and user defined.  The dynamic scaffold is enabled by default and each
+ module will register itself to the run time 'M2RTS' via a constructor.
+ The static scaffold mechanism will invoke each modules '_init' and
+ '_finish' function in turn via a sequence of calls from within 'main'.
+ Lastly the user defined strategy can be implemented by turning off the
+ dynamic and static options via '-fno-scaffold-dynamic' and
+ '-fno-scaffold-static'.
+ 
+    In the simple test below:
+ 
+      $ gm2 hello.mod
+ 
+    the driver will add the options '-fscaffold-dynamic' and
+ '-fgen-module-list=-' which generate a list of application modules and
+ also creates the 'main' function with calls to 'M2RTS'.  It can be
+ useful to add the option '-fsources' which displays the source files as
+ they are parsed and summarizes whether the source file is required for
+ compilation or linking.
+ 
+    If you wish to split the above command line into a compile and link
+ then you could use these steps:
+ 
+      $ gm2 -c -fscaffold-main hello.mod
+      $ gm2 hello.o
+ 
+    The '-fscaffold-main' informs the compiler to generate the 'main'
+ function and scaffold.  You can enable the environment variable
+ 'GCC_M2LINK_RTFLAG' to trace the construction and destruction of the
+ application.  The values for 'GCC_M2LINK_RTFLAG' are shown in the table
+ below:
+ 
+      value   | meaning
+      =================
+      all     | turn on all flags below
+      module  | trace modules as they register themselves
+      hex     | display the hex address of the init/fini functions
+      warning | show any warnings
+      pre     | generate module list prior to dependency resolution
+      dep     | trace module dependency resolution
+      post    | generate module list after dependency resolution
+      force   | generate a module list after dependency and forced
+              | ordering is complete
+ 
+    The values can be combined using a comma separated list.
+ 
+    One of the advantages of the dynamic scaffold is that the driver
+ behaves in a similar way to the other front end drivers.  For example
+ consider a small project consisting of 4 definition implementation
+ modules ('a.def', 'a.mod', 'b.def', 'b.mod', 'c.def', 'c.mod', 'd.def',
+ 'd.mod') and a program module 'program.mod'.
+ 
+    To link this project we could:
+ 
+      $ gm2 -g -c a.mod
+      $ gm2 -g -c b.mod
+      $ gm2 -g -c c.mod
+      $ gm2 -g -c d.mod
+      $ gm2 -g program.mod a.o b.o c.o d.o
+ 
+    The module initialization sequence is defined by the ISO standard to
+ follow the import graph traversal.  The initialization order is the
+ order in which the corresponding separate modules finish the processing
+ of their import lists.
+ 
+    However, if required, you can override this using
+ '-fruntime-modules=a,b,c,d' for example which forces the initialization
+ sequence to 'a', 'b', 'c' and 'd'.
+ 
+ 
+ File: m2.info,  Node: Elementary data types,  Next: Standard procedures,  Prev: Linking,  Up: Using
+ 
+ 2.3 Elementary data types
+ =========================
+ 
+ This section describes the elementary data types supported by GNU
+ Modula-2.  It also describes the relationship between these data types
+ and the equivalent C data types.
+ 
+    The following data types are supported: 'INTEGER', 'LONGINT',
+ 'SHORTINT', 'CARDINAL', 'LONGCARD', 'SHORTCARD', 'BOOLEAN', 'REAL',
+ 'LONGREAL', 'SHORTREAL', 'COMPLEX', 'LONGCOMPLEX', 'SHORTCOMPLEX' and
+ 'CHAR'.
+ 
+    An equivalence table is given below:
+ 
+      GNU Modula-2              GNU C
+      ======================================
+      INTEGER                   int
+      LONGINT                   long long int
+      SHORTINT                  short int
+      CARDINAL                  unsigned int
+      LONGCARD                  long long unsigned int
+      SHORTCARD                 short unsigned int
+      BOOLEAN                   bool
+      REAL                      double
+      LONGREAL                  long double
+      SHORTREAL                 float
+      CHAR                      char
+      SHORTCOMPLEX              complex float
+      COMPLEX                   complex double
+      LONGCOMPLEX               complex long double
+ 
+    Note that GNU Modula-2 also supports fixed sized data types which are
+ exported from the 'SYSTEM' module.  *Note (gm2)The PIM system module::.
+ *Note (gm2)The ISO system module::.
+ 
+ 
+ File: m2.info,  Node: Standard procedures,  Next: High procedure function,  Prev: Elementary data types,  Up: Using
+ 
+ 2.4 Permanently accessible base procedures.
+ ===========================================
+ 
+ This section describes the procedures and functions which are always
+ visible.
+ 
+ 2.4.1 Standard procedures and functions common to PIM and ISO
+ -------------------------------------------------------------
+ 
+ The following procedures are implemented and conform with Programming in
+ Modula-2 and ISO Modula-2: 'NEW', 'DISPOSE', 'INC', 'DEC', 'INCL',
+ 'EXCL' and 'HALT'.  The standard functions are: 'ABS', 'CAP', 'CHR',
+ 'FLOAT', 'HIGH', 'LFLOAT', 'LTRUNC', 'MIN', 'MAX', 'ODD', 'SFLOAT',
+ 'STRUNC' 'TRUNC' and 'VAL'.  All these functions and procedures (except
+ 'HALT', 'NEW', 'DISPOSE' and, under non constant conditions, 'LENGTH')
+ generate in-line code for efficiency.
+ 
+ 
+      (*
+         ABS - returns the positive value of i.
+      *)
+ 
+      PROCEDURE ABS (i: <any signed type>) : <any signed type> ;
+ 
+ 
+ 
+      (*
+         CAP - returns the capital of character ch providing
+               ch lies within the range 'a'..'z'.  Otherwise ch
+               is returned unaltered.
+      *)
+ 
+      PROCEDURE CAP (ch: CHAR) : CHAR ;
+ 
+ 
+ 
+      (*
+         CHR - converts a value of a <whole number type> into a CHAR.
+               CHR(x) is shorthand for VAL(CHAR, x).
+      *)
+ 
+      PROCEDURE CHR (x: <whole number type>) : CHAR ;
+ 
+ 
+ 
+      (*
+         DISPOSE - the procedure DISPOSE is replaced by:
+                   DEALLOCATE(p, TSIZE(p^)) ;
+                   The user is expected to import the procedure DEALLOCATE
+                   (normally found in the module, Storage.)
+ 
+                   In:  a variable p: of any pointer type which has been
+                        initialized by a call to NEW.
+                   Out: the area of memory
+                        holding p^ is returned to the system.
+                        Note that the underlying procedure DEALLOCATE
+                        procedure in module Storage will assign p to NIL.
+      *)
+ 
+      PROCEDURE DISPOSE (VAR p:<any pointer type>) ;
+ 
+ 
+      (*
+         DEC - can either take one or two parameters.  If supplied
+               with one parameter then on the completion of the call to
+               DEC, v will have its predecessor value.  If two
+               parameters are supplied then the value v will have its
+               n'th predecessor.  For these reasons the value of n
+               must be >=0.
+      *)
+ 
+      PROCEDURE DEC (VAR v: <any base type>; [n: <any base type> = 1]) ;
+ 
+ 
+      (*
+         EXCL - excludes bit element e from a set type s.
+      *)
+ 
+      PROCEDURE EXCL (VAR s: <any set type>; e: <element of set type s>) ;
+ 
+ 
+      (*
+         FLOAT - will return a REAL number whose value is the same as o.
+      *)
+ 
+      PROCEDURE FLOAT (o: <any whole number type>) : REAL ;
+ 
+ 
+      (*
+         FLOATS - will return a SHORTREAL number whose value is the same as o.
+      *)
+ 
+      PROCEDURE FLOATS (o: <any whole number type>) : REAL ;
+ 
+ 
+      (*
+         FLOATL - will return a LONGREAL number whose value is the same as o.
+      *)
+ 
+      PROCEDURE FLOATL (o: <any whole number type>) : REAL ;
+ 
+ 
+      (*
+         HALT - will call the HALT procedure inside the module M2RTS.
+                Users can replace M2RTS.
+      *)
+ 
+      PROCEDURE HALT ;
+ 
+ 
+      (*
+         HIGH - returns the last accessible index of an parameter declared as
+                ARRAY OF CHAR.  Thus
+ 
+                PROCEDURE foo (a: ARRAY OF CHAR) ;
+                VAR
+                   c: CARDINAL ;
+                BEGIN
+                   c := HIGH(a)
+                END foo ;
+ 
+                BEGIN
+                   foo('hello')
+                END
+ 
+                will cause the local variable c to contain the value 5
+      *)
+ 
+      PROCEDURE HIGH (a: ARRAY OF CHAR) : CARDINAL ;
+ 
+ 
+      (*
+         INC - can either take one or two parameters.  If supplied
+               with one parameter then on the completion of the call to
+               INC, v will have its successor value.  If two
+               parameters are supplied then the value v will have its
+               n'th successor.  For these reasons the value of n
+               must be >=0.
+      *)
+ 
+      PROCEDURE INC (VAR v: <any base type>; [n: <any base type> = 1]) ;
+ 
+ 
+      (*
+         INCL - includes bit element e to a set type s.
+      *)
+ 
+      PROCEDURE INCL (VAR s: <any set type>; e: <element of set type s>) ;
+ 
+ 
+      (*
+         LFLOAT - will return a LONGREAL number whose value is the same as o.
+      *)
+ 
+      PROCEDURE LFLOAT (o: <any whole number type>) : LONGREAL ;
+ 
+ 
+      (*
+         LTRUNC - will return a LONG<type> number whose value is the
+                  same as o.  PIM2, PIM3 and ISO Modula-2 will return
+                  a LONGCARD whereas PIM4 returns LONGINT.
+      *)
+ 
+      PROCEDURE LTRUNC (o: <any floating point type>) : LONG<type> ;
+ 
+ 
+      (*
+         MIN - returns the lowest legal value of an ordinal type.
+      *)
+ 
+      PROCEDURE MIN (t: <ordinal type>) : <ordinal type> ;
+ 
+ 
+ 
+      (*
+         MAX - returns the largest legal value of an ordinal type.
+      *)
+ 
+      PROCEDURE MAX (t: <ordinal type>) : <ordinal type> ;
+ 
+ 
+ 
+      (*
+         NEW - the procedure NEW is replaced by:
+               ALLOCATE(p, TSIZE(p^)) ;
+               The user is expected to import the procedure ALLOCATE
+               (normally found in the module, Storage.)
+ 
+               In:  a variable p: of any pointer type.
+               Out: variable p is set to some allocated memory
+                    which is large enough to hold all the contents of p^.
+      *)
+ 
+      PROCEDURE NEW (VAR p:<any pointer type>) ;
+ 
+ 
+      (*
+         ODD - returns TRUE if the value is not divisible by 2.
+      *)
+ 
+      PROCEDURE ODD (x: <whole number type>) : BOOLEAN ;
+ 
+ 
+ 
+      (*
+         SFLOAT - will return a SHORTREAL number whose value is the same
+                  as o.
+      *)
+ 
+      PROCEDURE SFLOAT (o: <any whole number type>) : SHORTREAL ;
+ 
+ 
+      (*
+         STRUNC - will return a SHORT<type> number whose value is the same
+                  as o.  PIM2, PIM3 and ISO Modula-2 will return a
+                  SHORTCARD whereas PIM4 returns SHORTINT.
+      *)
+ 
+      PROCEDURE STRUNC (o: <any floating point type>) : SHORT<type> ;
+ 
+ 
+      (*
+         TRUNC - will return a <type> number whose value is the same as o.
+                 PIM2, PIM3 and ISO Modula-2 will return a CARDINAL
+                 whereas PIM4 returns INTEGER.
+      *)
+ 
+      PROCEDURE TRUNC (o: <any floating point type>) : <type> ;
+ 
+ 
+      (*
+         TRUNCS - will return a <type> number whose value is the same
+                  as o.  PIM2, PIM3 and ISO Modula-2 will return a
+                  SHORTCARD whereas PIM4 returns SHORTINT.
+      *)
+ 
+      PROCEDURE TRUNCS (o: <any floating point type>) : <type> ;
+ 
+ 
+      (*
+         TRUNCL - will return a <type> number whose value is the same
+                  as o.  PIM2, PIM3 and ISO Modula-2 will return a
+                  LONGCARD whereas PIM4 returns LONGINT.
+      *)
+ 
+      PROCEDURE TRUNCL (o: <any floating point type>) : <type> ;
+ 
+ 
+      (*
+         VAL - converts data i of <any simple data type 2> to
+               <any simple data type 1> and returns this value.
+               No range checking is performed during this conversion.
+      *)
+ 
+      PROCEDURE VAL (<any simple data type 1>,
+                     i: <any simple data type 2>) : <any simple data type 1> ;
+ 
+ 
+ 2.4.2 ISO specific standard procedures and functions
+ ----------------------------------------------------
+ 
+ The standard function 'LENGTH' is specific to ISO Modula-2 and is
+ defined as:
+ 
+ 
+      (*
+         IM - returns the imaginary component of a complex type.
+              The return value will the same type as the imaginary field
+              within the complex type.
+      *)
+ 
+      PROCEDURE IM (c: <any complex type>) : <floating point type> ;
+ 
+ 
+      (*
+         INT - returns an INTEGER value which has the same value as v.
+               This function is equivalent to: VAL(INTEGER, v).
+      *)
+ 
+      PROCEDURE INT (v: <any ordinal type>) : INTEGER ;
+ 
+ 
+      (*
+         LENGTH - returns the length of string a.
+      *)
+ 
+      PROCEDURE LENGTH (a: ARRAY OF CHAR) : CARDINAL ;
+ 
+    This function is evaluated at compile time, providing that string 'a'
+ is a constant.  If 'a' cannot be evaluated then a call is made to
+ 'M2RTS.Length'.
+ 
+ 
+      (*
+         ODD - returns a BOOLEAN indicating whether the whole number
+               value, v, is odd.
+      *)
+ 
+      PROCEDURE ODD (v: <any whole number type>) : BOOLEAN ;
+ 
+ 
+      (*
+         RE - returns the real component of a complex type.
+              The return value will the same type as the real field
+              within the complex type.
+      *)
+ 
+      PROCEDURE RE (c: <any complex type>) : <floating point type> ;
+ 
+ 
+ File: m2.info,  Node: High procedure function,  Next: Dialect,  Prev: Standard procedures,  Up: Using
+ 
+ 2.5 Behavior of the high procedure function
+ ===========================================
+ 
+ This section describes the behavior of the standard procedure function
+ 'HIGH' and it includes a table of parameters with the expected return
+ result.  The standard procedure function will return the last accessible
+ indice of an 'ARRAY'.  If the parameter to 'HIGH' is a static array then
+ the result will be a 'CARDINAL' value matching the upper bound in the
+ 'ARRAY' declaration.
+ 
+    The section also describes the behavior of a string literal actual
+ parameter and how it relates to 'HIGH'.  The PIM2, PIM3, PIM4 and ISO
+ standard is silent on the issue of whether a 'nul' is present in an
+ 'ARRAY' 'OF' 'CHAR' actual parameter.
+ 
+    If the first parameter to 'HIGH' is an unbounded 'ARRAY' the return
+ value from 'HIGH' will be the last accessible element in the array.  If
+ a constant string literal is passed as an actual parameter then it will
+ be 'nul' terminated.  The table and example code below describe the
+ effect of passing an actual parameter and the expected 'HIGH' value.
+ 
+      MODULE example1 ;
+ 
+      PROCEDURE test (a: ARRAY OF CHAR) ;
+      VAR
+         x: CARDINAL ;
+      BEGIN
+         x := HIGH (a) ;
+         ...
+      END test ;
+ 
+ 
+      BEGIN
+         test ('') ;
+         test ('1') ;
+         test ('12') ;
+         test ('123') ;
+      END example1.
+ 
+ 
+      Actual parameter | HIGH (a) | a[HIGH (a)] = nul
+      ===============================================
+       ''              | 0        | TRUE
+       '1'             | 1        | TRUE
+       '12'            | 2        | TRUE
+       '123'           | 3        | TRUE
+ 
+    A constant string literal will be passed to an 'ARRAY' 'OF' 'CHAR'
+ with an appended 'nul' 'CHAR'.  Thus if the constant string literal ''''
+ is passed as an actual parameter (in example1) then the result from
+ 'HIGH(a)' will be '0'.
+ 
+      MODULE example2 ;
+ 
+      PROCEDURE test (a: ARRAY OF CHAR) ;
+      VAR
+         x: CARDINAL ;
+      BEGIN
+         x := HIGH (a) ;
+         ...
+      END test ;
+ 
+      VAR
+         str0: ARRAY [0..0] OF CHAR ;
+         str1: ARRAY [0..1] OF CHAR ;
+         str2: ARRAY [0..2] OF CHAR ;
+         str3: ARRAY [0..3] OF CHAR ;
+      BEGIN
+         str0 := 'a' ;   (* No room for the nul terminator.  *)
+         test (str0) ;
+         str1 := 'ab' ;  (* No room for the nul terminator.  *)
+         test (str1) ;
+         str2 := 'ab' ;  (* Terminated with a nul.  *)
+         test (str2) ;
+         str2 := 'abc' ; (* Terminated with a nul.  *)
+         test (str3) ;
+      END example2.
+ 
+      Actual parameter | HIGH (a) | a[HIGH (a)] = nul
+      ===============================================
+       str0            | 0        | FALSE
+       str1            | 1        | FALSE
+       atr2            | 2        | TRUE
+       str3            | 3        | TRUE
+ 
+ 
+ File: m2.info,  Node: Dialect,  Next: Exceptions,  Prev: High procedure function,  Up: Using
+ 
+ 2.6 GNU Modula-2 supported dialects
+ ===================================
+ 
+ This section describes the dialects understood by GNU Modula-2.  It also
+ describes the differences between the dialects and any command line
+ switches which determine dialect behaviour.
+ 
+    The GNU Modula-2 compiler is compliant with four dialects of
+ Modula-2.  The language as defined in 'Programming in Modula-2' 2nd
+ Edition, Springer Verlag, 1982, 1983 by Niklaus Wirth (PIM2),
+ 'Programming in Modula-2', 3rd Corrected Edition, Springer Verlag, 1985
+ (PIM3) and 'Programming in Modula-2', 4th Edition, Springer Verlag, 1988
+ (PIM4) <http://freepages.modula2.org/report4/modula-2.html> and the ISO
+ Modula-2 language as defined in ISO/IEC Information technology -
+ programming languages - part 1: Modula-2 Language, ISO/IEC 10514-1
+ (1996) (ISO).
+ 
+    The command line switches '-fpim2', '-fpim3', '-fpim4' and '-fiso'
+ can be used to force mutually exclusive features.  However by default
+ the compiler will not aggressively fail if a non mutually exclusive
+ feature is used from another dialect.  For example it is possible to
+ specify '-fpim2' and still utilize 'DEFINITION' 'MODULES' which have no
+ export list.
+ 
+    Some dialect differences will force a compile time error, for example
+ in PIM2 the user must 'IMPORT' 'SIZE' from the module 'SYSTEM', whereas
+ in PIM3 and PIM4 'SIZE' is a pervasive function.  Thus compiling PIM4
+ source code with the '-fpim2' switch will cause a compile time error.
+ This can be fixed quickly with an additional 'IMPORT' or alternatively
+ by compiling with the '-fpim4' switch.
+ 
+    However there are some very important differences between the
+ dialects which are mutually exclusive and therefore it is vital that
+ users choose the dialects with care when these language features are
+ used.
+ 
+ 2.6.1 Integer division, remainder and modulus
+ ---------------------------------------------
+ 
+ The most dangerous set of mutually exclusive features found in the four
+ dialects supported by GNU Modula-2 are the 'INTEGER' division, remainder
+ and modulus arithmetic operators.  It is important to note that the same
+ source code can be compiled to give different run time results depending
+ upon these switches!  The reference manual for the various dialects of
+ Modula-2 are quite clear about this behavior and sadly there are three
+ distinct definitions.
+ 
+    The table below illustrates the problem when a negative operand is
+ used.
+ 
+                        Pim2/3          Pim4                ISO
+                     -----------    -----------    ----------------------
+      lval    rval   DIV     MOD    DIV     MOD    DIV    MOD    /    REM
+       31      10      3       1      3       1      3      1     3     1
+      -31      10     -3      -1     -4       9     -4      9    -3    -1
+       31     -10     -3       1     -3       1     Exception    -3     1
+      -31     -10      3      -1      4       9     Exception     3    -1
+ 
+    See also P24 of PIM2, P27 of PIM3, P29 of PIM4 and P201 of the ISO
+ Standard.  At present all dialect division, remainder and modulus are
+ implemented as above, apart from the exception calling in the ISO
+ dialect.  Instead of exception handling the results are the same as the
+ PIM4 dialect.  This is a temporary implementation situation.
+ 
+ 
+ File: m2.info,  Node: Exceptions,  Next: Semantic checking,  Prev: Dialect,  Up: Using
+ 
+ 2.7 Exception implementation
+ ============================
+ 
+ This section describes how exceptions are implemented in GNU Modula-2
+ and how command line switches affect their behavior.  The option
+ '-fsoft-check-all' enables all software checking of nil dereferences,
+ division by zero etc.  Additional code is produced to check these
+ conditions and exception handlers are invoked if the conditions prevail.
+ 
+    Without '-fsoft-check-all' these exceptions will be caught by
+ hardware (assuming the hardware support exists) and a signal handler is
+ invoked.  The signal handler will in turn 'THROW' an exception which
+ will be caught by the appropriate Modula-2 handler.  However the action
+ of throwing an exception from within a signal handler is implementation
+ defined (according to the C++ documentation).  For example on the x86_64
+ architecture this works whereas on the i686 architecture it does not.
+ Therefore to ensure portability it is recommended to use
+ '-fsoft-check-all'.
+ 
+    (1)
+ 
+    ---------- Footnotes ----------
+ 
+    (1) '-fsoft-check-all' can be effectively combined with '-O2' to
+ semantically analyze source code for possible run time errors at compile
+ time.
+ 
+ 
+ File: m2.info,  Node: Semantic checking,  Next: Extensions,  Prev: Exceptions,  Up: Using
+ 
+ 2.8 How to detect run time problems at compile time
+ ===================================================
+ 
+ Consider the following program:
+ 
+      MODULE assignvalue ;  (*!m2iso+gm2*)
+ 
+      PROCEDURE bad () : INTEGER ;
+      VAR
+         i: INTEGER ;
+      BEGIN
+         i := -1 ;
+         RETURN i
+      END bad ;
+ 
+      VAR
+         foo: CARDINAL ;
+      BEGIN
+         (* The m2rte plugin will detect this as an error, post
+            optimization.  *)
+         foo := bad ()
+      END assignvalue.
+ 
+    here we see that the programmer has overlooked that the return value
+ from 'bad' will cause an overflow to 'foo'.  If we compile the code with
+ the following options:
+ 
+      $ gm2 -g -fsoft-check-all -O2 -c assignvalue.mod
+      assignvalue.mod:16:0:inevitable that this error will occur at run time,
+      assignment will result in an overflow
+ 
+    The gm2 semantic plugin is automatically run and will generate a
+ warning message for every exception call which is known as reachable.
+ It is highly advised to run the optimizer ('-O2' or '-O3') with
+ '-fsoft-check-all' so that the compiler is able to run the optimizer and
+ perform variable and flow analysis before the semantic plugin is
+ invoked.
+ 
+    The '-Wuninit-variable-checking' can be used to identify
+ uninitialized variables within the first basic block in a procedure.
+ The checking is limited to variables so long as they are not an array or
+ set or a variant record or var parameter.
+ 
+    The following example detects whether a sub component within a record
+ is uninitialized.
+ 
+      MODULE testlarge2 ;
+ 
+      TYPE
+         color = RECORD
+                    r, g, b: CARDINAL ;
+                 END ;
+ 
+         pixel = RECORD
+                    fg, bg: color ;
+                 END ;
+ 
+      PROCEDURE test ;
+      VAR
+         p: pixel ;
+      BEGIN
+         p.fg.r := 1 ;
+         p.fg.g := 2 ;
+         p.fg.g := 3 ;   (* Deliberate typo should be p.fg.b.  *)
+         p.bg := p.fg ;  (* Accessing an uninitialized field.  *)
+      END test ;
+ 
+      BEGIN
+         test
+      END testlarge2.
+ 
+      $ gm2 -c -Wuninit-variable-checking testlarge2.mod
+      testlarge2.mod:19:13: warning: In procedure ‘test’: attempting to
+      access expression before it has been initialized
+         19 |    p.bg := p.fg ;  (* Accessing an uninitialized field.  *)
+            |            ~^~~
+ 
+    The following example detects if an individual field is
+ uninitialized.
+ 
+      MODULE testwithnoptr ;
+ 
+      TYPE
+         Vec =  RECORD
+                   x, y: CARDINAL ;
+                END ;
+ 
+      PROCEDURE test ;
+      VAR
+         p: Vec ;
+      BEGIN
+         WITH p DO
+            x := 1 ;
+            x := 2   (* Deliberate typo, user meant y.  *)
+         END ;
+         IF p.y = 2
+         THEN
+         END
+      END test ;
+ 
+      BEGIN
+         test
+      END testwithnoptr.
+ 
+    The following example detects a record is uninitialized via a pointer
+ variable in a 'WITH' block.
+ 
+      $ gm2 -g -c -Wuninit-variable-checking testwithnoptr.mod
+      testwithnoptr.mod:21:8: warning: In procedure ‘test’: attempting to
+      access expression before it has been initialized
+         21 |    IF p.y = 2
+            |       ~^~
+ 
+      MODULE testnew6 ;
+ 
+      FROM Storage IMPORT ALLOCATE ;
+ 
+      TYPE
+         PtrToVec = POINTER TO RECORD
+                                  x, y: INTEGER ;
+                               END ;
+ 
+      PROCEDURE test ;
+      VAR
+         p: PtrToVec ;
+      BEGIN
+         NEW (p) ;
+         WITH p^ DO
+            x := 1 ;
+            x := 2   (* Deliberate typo, user meant y.  *)
+         END ;
+         IF p^.y = 2
+         THEN
+         END
+      END test ;
+ 
+ 
+      BEGIN
+         test
+      END testnew6.
+ 
+      $ gm2 -g -c -Wuninit-variable-checking testnew6.mod
+      testnew6.mod:19:9: warning: In procedure ‘test’: attempting to
+      access expression before it has been initialized
+         19 |    IF p^.y = 2
+            |       ~~^~
+ 
+ 
+ File: m2.info,  Node: Extensions,  Next: Type compatibility,  Prev: Semantic checking,  Up: Using
+ 
+ 2.9 GNU Modula-2 language extensions
+ ====================================
+ 
+ This section introduces the GNU Modula-2 language extensions.  The GNU
+ Modula-2 compiler allows abstract data types to be any type, not just
+ restricted to a pointer type providing the '-fextended-opaque' option is
+ supplied *Note (gm2)Compiler options::.
+ 
+    Declarations can be made in any order, whether they are types,
+ constants, procedures, nested modules or variables.
+ 
+    GNU Modula-2 also allows programmers to interface to 'C' and assembly
+ language.
+ 
+    GNU Modula-2 provides support for the special tokens '__LINE__',
+ '__FILE__', '__FUNCTION__' and '__DATE__'.  Support for these tokens
+ will occur even if the '-fcpp' option is not supplied.  A table of these
+ identifiers and their data type and values is given below:
+ 
+      Scope       GNU Modula-2 token      Data type and example value
+ 
+      anywhere    __LINE__                Constant Literal compatible
+                                          with CARDINAL, INTEGER and WORD.
+                                          Example 1234
+ 
+      anywhere    __FILE__                Constant string compatible
+                                          with parameter ARRAY OF CHAR or
+                                          an ARRAY whose SIZE is >= string
+                                          length.  Example
+                                          "hello.mod"
+ 
+      procedure   __FUNCTION__            Constant string compatible
+                                          with parameter ARRAY OF CHAR or
+                                          an ARRAY whose SIZE is >= string
+                                          length.  Example
+                                          "calc"
+ 
+      module      __FUNCTION__            Example
+                                          "module hello initialization"
+ 
+      anywhere    __DATE__                Constant string compatible
+                                          with parameter ARRAY OF CHAR or
+                                          an ARRAY whose SIZE is >= string
+                                          length.  Example
+                                          "Thu Apr 29 10:07:16 BST 2004"
+ 
+      anywhere   __COLUMN__               Gives a constant literal number
+                                          determining the left hand column
+                                          where the first _ appears in
+                                          __COLUMN__.  The left most column
+                                          is 1.
+ 
+ 
+    The preprocessor 'cpp' can be invoked via the '-fcpp' command line
+ option.  This in turn invokes 'cpp' with the following arguments
+ '-traditional -lang-asm'.  These options preserve comments and all
+ quotations.  'gm2' treats a '#' character in the first column as a
+ preprocessor directive.
+ 
+    For example here is a module which calls 'FatalError' via the macro
+ 'ERROR'.
+ 
+      MODULE cpp ;
+ 
+      FROM SYSTEM IMPORT ADR, SIZE ;
+      FROM libc IMPORT exit, printf, malloc ;
+ 
+      PROCEDURE FatalError (a, file: ARRAY OF CHAR;
+                               line: CARDINAL;
+                               func: ARRAY OF CHAR) ;
+      BEGIN
+         printf ("%s:%d:fatal error, %s, in %s\n",
+                  ADR (file), line, ADR (a), ADR (func)) ;
+         exit (1)
+      END FatalError ;
+ 
+      #define ERROR(X)  FatalError(X, __FILE__, __LINE__, __FUNCTION__)
+ 
+      VAR
+         pc: POINTER TO CARDINAL;
+      BEGIN
+         pc := malloc (SIZE (CARDINAL)) ;
+         IF pc = NIL
+         THEN
+            ERROR ('out of memory')
+         END
+      END cpp.
+ 
+    Another use for the C preprocessor in Modula-2 might be to turn on
+ debugging code.  For example the library module 'FormatStrings.mod' uses
+ procedures from 'DynamicStrings.mod' and to track down memory leaks it
+ was useful to track the source file and line where each string was
+ created.  Here is a section of 'FormatStrings.mod' which shows how the
+ debugging code was enabled and disabled by adding '-fcpp' to the command
+ line.
+ 
+      FROM DynamicStrings IMPORT String, InitString, InitStringChar, Mark,
+                                 ConCat, Slice, Index, char,
+                                 Assign, Length, Mult, Dup, ConCatChar,
+                                 PushAllocation, PopAllocationExemption,
+                                 InitStringDB, InitStringCharStarDB,
+                                 InitStringCharDB, MultDB, DupDB, SliceDB ;
+ 
+      (*
+      #define InitString(X) InitStringDB(X, __FILE__, __LINE__)
+      #define InitStringCharStar(X) InitStringCharStarDB(X, __FILE__, \
+                                                         __LINE__)
+      #define InitStringChar(X) InitStringCharDB(X, __FILE__, __LINE__)
+      #define Mult(X,Y) MultDB(X, Y, __FILE__, __LINE__)
+      #define Dup(X) DupDB(X, __FILE__, __LINE__)
+      #define Slice(X,Y,Z) SliceDB(X, Y, Z, __FILE__, __LINE__)
+      *)
+ 
+      PROCEDURE doDSdbEnter ;
+      BEGIN
+         PushAllocation
+      END doDSdbEnter ;
+ 
+      PROCEDURE doDSdbExit (s: String) ;
+      BEGIN
+         s := PopAllocationExemption (TRUE, s)
+      END doDSdbExit ;
+ 
+      PROCEDURE DSdbEnter ;
+      BEGIN
+      END DSdbEnter ;
+ 
+      PROCEDURE DSdbExit (s: String) ;
+      BEGIN
+      END DSdbExit ;
+ 
+      (*
+      #define DBsbEnter doDBsbEnter
+      #define DBsbExit  doDBsbExit
+      *)
+ 
+      PROCEDURE Sprintf1 (s: String; w: ARRAY OF BYTE) : String ;
+      BEGIN
+         DSdbEnter ;
+         s := FormatString (HandleEscape (s), w) ;
+         DSdbExit (s) ;
+         RETURN s
+      END Sprintf1 ;
+ 
+    It is worth noting that the overhead of this code once '-fcpp' is not
+ present and -O2 is used will be zero since the local empty procedures
+ 'DSdbEnter' and 'DSdbExit' will be thrown away by the optimization
+ passes of the GCC backend.
+ 
+ 2.9.1 Optional procedure parameter
+ ----------------------------------
+ 
+ GNU Modula-2 allows the last parameter to a procedure or function
+ parameter to be optional.  For example in the ISO library
+ 'COROUTINES.def' the procedure 'NEWCOROUTINE' is defined as having an
+ optional fifth argument ('initProtection') which, if absent, is
+ automatically replaced by 'NIL'.
+ 
+      PROCEDURE NEWCOROUTINE (procBody: PROC; workspace: SYSTEM.ADDRESS;
+                              size: CARDINAL; VAR cr: COROUTINE;
+                              [initProtection: PROTECTION = NIL]);
+ 
+        (* Creates a new coroutine whose body is given by procBody,
+           and returns the identity of the coroutine in cr.
+           workspace is a pointer to the work space allocated to
+           the coroutine; size specifies the size of this workspace
+           in terms of SYSTEM.LOC.
+ 
+           The optional fifth argument may contain a single parameter
+           which specifies the initial protection level of the coroutine.
+        *)
+ 
+    The implementation module 'COROUTINES.mod' implements this procedure
+ using the following syntax:
+ 
+      PROCEDURE NEWCOROUTINE (procBody: PROC; workspace: SYSTEM.ADDRESS;
+                              size: CARDINAL; VAR cr: COROUTINE;
+                              [initProtection: PROTECTION]);
+      BEGIN
+ 
+      END NEWCOROUTINE ;
+ 
+    Note that it is illegal for this declaration to contain an
+ initializer value for 'initProtection'.  However it is necessary to
+ surround this parameter with the brackets '[' and ']'.  This serves to
+ remind the programmer that the last parameter was declared as optional
+ in the definition module.
+ 
+    Local procedures can be declared to have an optional final parameter
+ in which case the initializer is mandatory in the implementation or
+ program module.
+ 
+    GNU Modula-2 also provides additional fixed sized data types which
+ are all exported from the 'SYSTEM' module.  *Note (gm2)The PIM system
+ module::.  *Note (gm2)The ISO system module::.
+ 
+ 
+ File: m2.info,  Node: Type compatibility,  Next: Unbounded by reference,  Prev: Extensions,  Up: Using
+ 
+ 2.10 Type compatibility
+ =======================
+ 
+ This section discuss the issues surrounding assignment, expression and
+ parameter compatibility, their effect of the additional fixed sized
+ datatypes and also their effect of run time checking.  The data types
+ supported by the compiler are:
+ 
+      GNU Modula-2              scope      switches
+      =============================================
+      INTEGER                   pervasive
+      LONGINT                   pervasive
+      SHORTINT                  pervasive
+      CARDINAL                  pervasive
+      LONGCARD                  pervasive
+      SHORTCARD                 pervasive
+      BOOLEAN                   pervasive
+      BITSET                    pervasive
+      REAL                      pervasive
+      LONGREAL                  pervasive
+      SHORTREAL                 pervasive
+      CHAR                      pervasive
+      SHORTCOMPLEX              pervasive
+      COMPLEX                   pervasive
+      LONGCOMPLEX               pervasive
+ 
+      LOC                       SYSTEM     -fiso
+      BYTE                      SYSTEM
+      WORD                      SYSTEM
+      ADDRESS                   SYSTEM
+ 
+      The following extensions are supported for
+      most architectures (please check SYSTEM.def).
+      =============================================
+      INTEGER8                  SYSTEM
+      INTEGER16                 SYSTEM
+      INTEGER32                 SYSTEM
+      INTEGER64                 SYSTEM
+      CARDINAL8                 SYSTEM
+      CARDINAL16                SYSTEM
+      CARDINAL32                SYSTEM
+      CARDINAL64                SYSTEM
+      BITSET8                   SYSTEM
+      BITSET16                  SYSTEM
+      BITSET32                  SYSTEM
+      WORD16                    SYSTEM
+      WORD32                    SYSTEM
+      WORD64                    SYSTEM
+      REAL32                    SYSTEM
+      REAL64                    SYSTEM
+      REAL96                    SYSTEM
+      REAL128                   SYSTEM
+      COMPLEX32                 SYSTEM
+      COMPLEX64                 SYSTEM
+      COMPLEX96                 SYSTEM
+      COMPLEX128                SYSTEM
+ 
+    The Modula-2 language categorizes compatibility between entities of
+ possibly differing types into three sub components: expressions,
+ assignments, and parameters.  Parameter compatibility is further divided
+ into two sections for pass by reference and pass by value compatibility.
+ 
+    For more detail on the Modula-2 type compatibility see the Modula-2
+ ISO standard BS ISO/IEC 10514-1:1996 page 121-125.  For detail on the
+ PIM type compatibility see Programming in Modula-2 Edition 4 page 29,
+ (Elementary Data Types).
+ 
+ 2.10.1 Expression compatibility
+ -------------------------------
+ 
+ Modula-2 restricts the types of expressions to the same type.
+ Expression compatibility is a symmetric relation.
+ 
+    For example two sub expressions of 'INTEGER' and 'CARDINAL' are not
+ expression compatible
+ (<http://freepages.modula2.org/report4/modula-2.html> and ISO Modula-2).
+ 
+    In GNU Modula-2 this rule is also extended across all fixed sized
+ data types (imported from SYSTEM).
+ 
+ 2.10.2 Assignment compatibility
+ -------------------------------
+ 
+ This section discusses the assignment issues surrounding assignment
+ compatibility of elementary types ('INTEGER', 'CARDINAL', 'REAL' and
+ 'CHAR' for example).  The information here is found in more detail in
+ the Modula-2 ISO standard BS ISO/IEC 10514-1:1996 page 122.
+ 
+    Assignment compatibility exists between the same sized elementary
+ types.
+ 
+    Same type family of different sizes are also compatible as long as
+ the 'MAX('type')' and 'MIN('type')' is known.  So for example this
+ includes the 'INTEGER' family, 'CARDINAL' family and the 'REAL' family.
+ 
+    The reason for this is that when the assignment is performed the
+ compiler will check to see that the expression (on the right of the
+ ':=') lies within the range of the designator type (on the left hand
+ side of the ':=').  Thus these ordinal types can be assignment
+ compatible.  However it does mean that 'WORD32' is not compatible with
+ 'WORD16' as 'WORD32' does not have a minimum or maximum value and
+ therefore cannot be checked.  The compiler does not know which of the
+ two bytes from 'WORD32' should be copied into 'WORD16' and which two
+ should be ignored.  Currently the types 'BITSET8', 'BITSET16' and
+ 'BITSET32' are assignment incompatible.  However this restriction maybe
+ lifted when further run time checking is achieved.
+ 
+    Modula-2 does allow 'INTEGER' to be assignment compatible with 'WORD'
+ as they are the same size.  Likewise GNU Modula-2 allows 'INTEGER16' to
+ be compatible with 'WORD16' and the same for the other fixed sized types
+ and their sized equivalent in either 'WORD'n, 'BYTE' or 'LOC' types.
+ However it prohibits assignment between 'WORD' and 'WORD32' even though
+ on many systems these sizes will be the same.  The reasoning behind this
+ rule is that the extended fixed sized types are meant to be used by
+ applications requiring fixed sized data types and it is more portable to
+ forbid the blurring of the boundaries between fixed sized and machine
+ dependent sized types.
+ 
+    Intermediate code run time checking is always generated by the front
+ end.  However this intermediate code is only translated into actual code
+ if the appropriate command line switches are specified.  This allows the
+ compiler to perform limited range checking at compile time.  In the
+ future it will allow the extensive GCC optimizations to propagate
+ constant values through to the range checks which if they are found to
+ exceed the type range will result in a compile time error message.
+ 
+ 2.10.3 Parameter compatibility
+ ------------------------------
+ 
+ Parameter compatibility is divided into two areas, pass by value and
+ pass by reference ('VAR').  In the case of pass by value the rules are
+ exactly the same as assignment.  However in the second case, pass by
+ reference, the actual parameter and formal parameter must be the same
+ size and family.  Furthermore 'INTEGER' and 'CARDINAL's are not treated
+ as compatible in the pass by reference case.
+ 
+    The types 'BYTE', 'LOC', 'WORD' and 'WORD'n derivatives are
+ assignment and parameter compatible with any data type of the same size.
+ 
+ 
+ File: m2.info,  Node: Unbounded by reference,  Next: Building a shared library,  Prev: Type compatibility,  Up: Using
+ 
+ 2.11 Unbounded by reference
+ ===========================
+ 
+ This section documents a GNU Modula-2 compiler switch which implements a
+ language optimization surrounding the implementation of unbounded
+ arrays.  In GNU Modula-2 the unbounded array is implemented by utilizing
+ an internal structure 'struct {dataType *address, unsigned int high}'.
+ So given the Modula-2 procedure declaration:
+ 
+      PROCEDURE foo (VAR a: ARRAY OF dataType) ;
+      BEGIN
+         IF a[2]= (* etc *)
+      END foo ;
+ 
+    it is translated into GCC 'tree's, which can be represented in their
+ C form thus:
+ 
+      void foo (struct {dataType *address, unsigned int high} a)
+      {
+         if (a.address[2] == /* etc */
+      }
+ 
+    Whereas if the procedure 'foo' was declared as:
+ 
+      PROCEDURE foo (a: ARRAY OF dataType) ;
+      BEGIN
+         IF a[2]= (* etc *)
+      END foo ;
+ 
+    then it is implemented by being translated into the following GCC
+ 'tree's, which can be represented in their C form thus:
+ 
+      void foo (struct {dataType *address, unsigned int high} a)
+      {
+         dataType *copyContents = (dataType *)alloca (a.high+1);
+         memcpy(copyContents, a.address, a.high+1);
+         a.address = copyContents;
+ 
+         if (a.address[2] == /* etc */
+      }
+ 
+    This implementation works, but it makes a copy of each non VAR
+ unbounded array when a procedure is entered.  If the unbounded array is
+ not changed during procedure 'foo' then this implementation will be very
+ inefficient.  In effect Modula-2 lacks the 'REF' keyword of Ada.
+ Consequently the programmer maybe tempted to sacrifice semantic clarity
+ for greater efficiency by declaring the parameter using the 'VAR'
+ keyword in place of 'REF'.
+ 
+    The '-funbounded-by-reference' switch instructs the compiler to check
+ and see if the programmer is modifying the content of any unbounded
+ array.  If it is modified then a copy will be made upon entry into the
+ procedure.  Conversely if the content is only read and never modified
+ then this non 'VAR' unbounded array is a candidate for being passed by
+ reference.  It is only a candidate as it is still possible that passing
+ this parameter by reference could alter the meaning of the source code.
+ For example consider the following case:
+ 
+      PROCEDURE StrConCat (VAR a: ARRAY OF CHAR; b, c: ARRAY OF CHAR) ;
+      BEGIN
+         (* code which performs string a := b + c *)
+      END StrConCat ;
+ 
+      PROCEDURE foo ;
+      VAR
+         a: ARRAY [0..3] OF CHAR ;
+      BEGIN
+         a := 'q' ;
+         StrConCat(a, a, a)
+      END foo ;
+ 
+    In the code above we see that the same parameter, 'a', is being
+ passed three times to 'StrConCat'.  Clearly even though parameters 'b'
+ and 'c' are never modified it would be incorrect to implement them as
+ pass by reference.  Therefore the compiler checks to see if any non
+ 'VAR' parameter is type compatible with any 'VAR' parameter and if so it
+ generates run time procedure entry checks to determine whether the
+ contents of parameters 'b' or 'c' matches the contents of 'a'.  If a
+ match is detected then a copy is made and the 'address' in the unbounded
+ 'struct'ure is modified.
+ 
+    The compiler will check the address range of each candidate against
+ the address range of any 'VAR' parameter, providing they are type
+ compatible.  For example consider:
+ 
+      PROCEDURE foo (a: ARRAY OF BYTE; VAR f: REAL) ;
+      BEGIN
+         f := 3.14 ;
+         IF a[0]=BYTE(0)
+         THEN
+            (* etc *)
+         END
+      END foo ;
+ 
+      PROCEDURE bar ;
+      BEGIN
+         r := 2.0 ;
+         foo(r, r)
+      END bar ;
+ 
+    Here we see that although parameter, 'a', is a candidate for the
+ passing by reference, it would be incorrect to use this transformation.
+ Thus the compiler detects that parameters, 'a' and 'f' are type
+ compatible and will produce run time checking code to test whether the
+ address range of their respective contents intersect.
+ 
+ 
+ File: m2.info,  Node: Building a shared library,  Next: Interface for Python,  Prev: Unbounded by reference,  Up: Using
+ 
+ 2.12 Building a shared library
+ ==============================
+ 
+ This section describes building a tiny shared library implemented in
+ Modula-2 and built with 'libtool'.  Suppose a project consists of two
+ definition modules and two implementation modules and a program module
+ 'a.def', 'a.mod', 'b.def', 'b.mod' and 'c.mod'.  The first step is to
+ compile the modules using position independent code.  This can be
+ achieved by the following three commands:
+ 
+      libtool --tag=CC --mode=compile gm2 -g -c a.mod -o a.lo
+      libtool --tag=CC --mode=compile gm2 -g -c b.mod -o b.lo
+      libtool --tag=CC --mode=compile gm2 -g -c c.mod -o c.lo
+ 
+    The second step is to generate the shared library initialization and
+ finalization routines.  We can do this by asking gm2 to generate a list
+ of dependent modules and then use this to generate the scaffold.  We
+ also must compile the scaffold.
+ 
+      gm2 -c -g -fmakelist c.mod
+      gm2 -c -g -fmakeinit -fshared c.mod
+      libtool --tag=CC --mode=compile g++ -g -c c_m2.cpp -o c_m2.lo
+ 
+    The third step is to link all these '.lo' files.
+ 
+      libtool --mode=link gcc -g c_m2.lo a.lo b.lo c.lo \
+              -L$(prefix)/lib64 \
+              -rpath `pwd` -lgm2 -lstdc++ -lm -o libabc.la
+ 
+    At this point the shared library 'libabc.so' will have been created
+ inside the directory '.libs'.
+ 
+ 
+ File: m2.info,  Node: Interface for Python,  Next: Producing a Python module,  Prev: Building a shared library,  Up: Using
+ 
+ 2.13 How to produce swig interface files
+ ========================================
+ 
+ This section describes how Modula-2 implementation modules can be called
+ from Python (and other scripting languages such as TCL and Perl).  GNU
+ Modula-2 can be instructed to create a swig interface when it is
+ compiling an implementation module.  Swig then uses the interface file
+ to generate all the necessary wrapping to that the desired scripting
+ language may access the implementation module.
+ 
+    Here is an example of how you might call upon the services of the
+ Modula-2 library module 'NumberIO' from Python3.
+ 
+    The following commands can be used to generate the Python3 module:
+ 
+      export src='directory to the sources'
+      export prefix='directory to where the compiler is installed'
+      gm2 -I${src} -c -g -fswig ${src}/../../../gm2-libs/NumberIO.mod
+      gm2 -I${src} -c -g -fmakelist ${src}/../../../gm2-libs/NumberIO.mod
+ 
+      gm2 -I${src} -c -g -fmakeinit -fshared \
+         ${src}/../../../gm2-libs/NumberIO.mod
+ 
+      swig -c++ -python3 NumberIO.i
+ 
+      libtool --mode=compile g++ -g -c -I${src} NumberIO_m2.cpp \
+        -o NumberIO_m2.lo
+ 
+      libtool --tag=CC --mode=compile gm2 -g -c \
+        -I${src}../../../gm2-libs \
+        ${src}/../../../gm2-libs/NumberIO.mod -o NumberIO.lo
+ 
+      libtool --tag=CC --mode=compile g++ -g -c NumberIO_wrap.cxx \
+        -I/usr/include/python3 -o NumberIO_wrap.lo
+ 
+      libtool --mode=link gcc -g NumberIO_m2.lo NumberIO_wrap.lo \
+         -L${prefix}/lib64 \
+         -rpath `pwd` -lgm2 -lstdc++ -lm -o libNumberIO.la
+ 
+      cp .libs/libNumberIO.so _NumberIO.so
+ 
+    The first four commands, generate the swig interface file
+ 'NumberIO.i' and python wrap files 'NumberIO_wrap.cxx' and
+ 'NumberIO.py'.  The next three 'libtool' commnads compile the C++ and
+ Modula-2 source code into '.lo' objects.  The last 'libtool' command
+ links all the '.lo' files into a '.la' file and includes all shared
+ library dependencies.
+ 
+    Now it is possible to run the following Python script (called
+ 'testnum.py'):
+ 
+      import NumberIO
+ 
+      print ("1234 x 2 =", NumberIO.NumberIO_StrToInt("1234")*2)
+ 
+    like this:
+ 
+      $ python3 testnum.py
+      1234 x 2 = 2468
+ 
+    *Note (gm2)Producing a Python module:: for another example which uses
+ the 'UNQUALIFIED' keyword to reduce the module name clutter from the
+ viewport of Python3.
+ 
+ 2.13.1 Limitations of automatic generated of Swig files
+ -------------------------------------------------------
+ 
+ This section discusses the limitations of automatically generating swig
+ files.  From the previous example we see that the module 'NumberIO' had
+ a swig interface file 'NumberIO.i' automatically generated by the
+ compiler.  If we consider three of the procedure definitions in
+ 'NumberIO.def' we can see the success and limitations of the automatic
+ interface generation.
+ 
+      PROCEDURE StrToHex (a: ARRAY OF CHAR; VAR x: CARDINAL) ;
+      PROCEDURE StrToInt (a: ARRAY OF CHAR; VAR x: INTEGER) ;
+      PROCEDURE ReadInt (VAR x: CARDINAL) ;
+ 
+    Below are the swig interface prototypes:
+ 
+      extern void NumberIO_StrToHex (char *_m2_address_a,
+                                     int _m2_high_a, unsigned int *OUTPUT);
+      /*  parameters: x is known to be an OUTPUT */
+      extern void NumberIO_StrToInt (char *_m2_address_a,
+                                     int _m2_high_a, int *OUTPUT);
+      /*  parameters: x is guessed to be an OUTPUT */
+      extern void NumberIO_ReadInt (int *x);
+      /*  parameters: x is unknown */
+ 
+    In the case of 'StrToHex' it can be seen that the compiler detects
+ that the last parameter is an output.  It explicitly tells swig this by
+ using the parameter name 'OUTPUT' and in the following comment it
+ informs the user that it knows this to be an output parameter.  In the
+ second procedure 'StrToInt' it marks the final parameter as an output,
+ but it tells the user that this is only a guess.  Finally in 'ReadInt'
+ it informs the user that it does not know whether the parameter, 'x', is
+ an output, input or an inout parameter.
+ 
+    The compiler decides whether to mark a parameter as either: 'INPUT',
+ 'OUTPUT' or 'INOUT' if it is read before written or visa versa in the
+ first basic block.  At this point it will write output that the
+ parameter is known.  If it is not read or written in the first basic
+ block then subsequent basic blocks are searched and the result is
+ commented as a guess.  Finally if no read or write occurs then the
+ parameter is commented as unknown.  However, clearly it is possible to
+ fool this mechanism.  Nevertheless automatic generation of
+ implementation module into swig interface files was thought sufficiently
+ useful despite these limitations.
+ 
+    In conclusion it would be wise to check all parameters in any
+ automatically generated swig interface file.  Furthermore you can force
+ the automatic mechanism to generate correct interface files by reading
+ or writing to the 'VAR' parameter in the first basic block of a
+ procedure.
+ 
+ 
+ File: m2.info,  Node: Producing a Python module,  Next: Interface to C,  Prev: Interface for Python,  Up: Using
+ 
+ 2.14 How to produce a Python module
+ ===================================
+ 
+ This section describes how it is possible to produce a Python module
+ from Modula-2 code.  There are a number of advantages to this approach,
+ it ensures your code reaches a wider audience, maybe it is easier to
+ initialize your application in Python.
+ 
+    The example application here is a pedagogical two dimensional gravity
+ next event simulation.  The Python module needs to have a clear API
+ which should be placed in a single definition module.  Furthermore the
+ API should only use fundamental pervasive data types and strings.  Below
+ the API is contained in the file 'twoDsim.def':
+ 
+      DEFINITION MODULE twoDsim ;
+ 
+      EXPORT UNQUALIFIED gravity, box, poly3, poly5, poly6, mass,
+                         fix, circle, pivot, velocity, accel, fps,
+                         replayRate, simulateFor ;
+      (*
+         gravity - turn on gravity at: g m^2
+      *)
+ 
+      PROCEDURE gravity (g: REAL) ;
+ 
+ 
+      (*
+         box - place a box in the world at (x0,y0),(x0+i,y0+j)
+      *)
+ 
+      PROCEDURE box (x0, y0, i, j: REAL) : CARDINAL ;
+ 
+ 
+      (*
+         poly3 - place a triangle in the world at:
+                 (x0,y0),(x1,y1),(x2,y2)
+      *)
+ 
+      PROCEDURE poly3 (x0, y0, x1, y1, x2, y2: REAL) : CARDINAL ;
+ 
+ 
+      (*
+         poly5 - place a pentagon in the world at:
+                 (x0,y0),(x1,y1),(x2,y2),(x3,y3),(x4,y4)
+      *)
+ 
+      PROCEDURE poly5 (x0, y0, x1, y1,
+                       x2, y2, x3, y3, x4, y4: REAL) : CARDINAL ;
+ 
+ 
+      (*
+         poly6 - place a hexagon in the world at:
+                 (x0,y0),(x1,y1),(x2,y2),(x3,y3),(x4,y4),(x5,y5)
+      *)
+ 
+      PROCEDURE poly6 (x0, y0, x1, y1,
+                       x2, y2, x3, y3,
+                       x4, y4, x5, y5: REAL) : CARDINAL ;
+ 
+ 
+      (*
+         mass - specify the mass of an object and return the, id.
+      *)
+ 
+      PROCEDURE mass (id: CARDINAL; m: REAL) : CARDINAL ;
+ 
+ 
+      (*
+         fix - fix the object to the world.
+      *)
+ 
+      PROCEDURE fix (id: CARDINAL) : CARDINAL ;
+ 
+ 
+      (*
+         circle - adds a circle to the world.  Center
+                  defined by: x0, y0 radius, r.
+      *)
+ 
+      PROCEDURE circle (x0, y0, r: REAL) : CARDINAL ;
+ 
+ 
+      (*
+         velocity - give an object, id, a velocity, vx, vy.
+      *)
+ 
+      PROCEDURE velocity (id: CARDINAL; vx, vy: REAL) : CARDINAL ;
+ 
+ 
+      (*
+         accel - give an object, id, an acceleration, ax, ay.
+      *)
+ 
+      PROCEDURE accel (id: CARDINAL; ax, ay: REAL) : CARDINAL ;
+ 
+ 
+      (*
+         fps - set frames per second.
+      *)
+ 
+      PROCEDURE fps (f: REAL) ;
+ 
+ 
+      (*
+         replayRate - set frames per second during replay.
+      *)
+ 
+      PROCEDURE replayRate (f: REAL) ;
+ 
+ 
+      (*
+         simulateFor - render for, t, seconds.
+      *)
+ 
+      PROCEDURE simulateFor (t: REAL) ;
+ 
+ 
+      END twoDsim.
+ 
+    The keyword 'UNQUALIFIED' can be used to ensure that the compiler
+ will provide externally accessible functions 'gravity', 'box', 'poly3',
+ 'poly5', 'poly6', 'mass', 'fix', 'circle', 'pivot', 'velocity', 'accel',
+ 'fps', 'replayRate', 'simulateFor' rather than name mangled
+ alternatives.  Hence in our Python3 application we could write:
+ 
+      #!/usr/bin/env python3
+ 
+      from twoDsim import *
+ 
+      b = box (0.0, 0.0, 1.0, 1.0)
+      b = fix (b)
+      c1 = circle (0.7, 0.7, 0.05)
+      c1 = mass (c1, 0.01)
+      c2 = circle (0.7, 0.1, 0.05)
+      c2 = mass (c2, 0.01)
+      c2 = fix (c2)
+      gravity (-9.81)
+      fps (24.0*4.0)
+      replayRate (24.0)
+      print ("creating frames")
+      try:
+          simulateFor (1.0)
+          print ("all done")
+      except:
+          print ("exception raised")
+ 
+    which accesses the various functions defined and implemented by the
+ module 'twoDsim'.  The Modula-2 source code is compiled via:
+ 
+      $ gm2 -g -fiso -c -fswig twoDsim.mod
+      $ gm2 -g -fiso -c -fmakelist twoDsim.mod
+      $ gm2 -g -fiso -c -fmakeinit twoDsim.mod
+ 
+    The first command both compiles the source file creating 'twoDsim.o'
+ and produces a swig interface file 'swig.i'.  We now use 'swig' and
+ 'g++' to produce and compile the interface wrappers:
+ 
+      $ libtool --mode=compile g++ -g -c twoDsim_m2.cpp -o twoDsim_m2.lo
+      $ swig -c++ -python3 twoDsim.i
+      $ libtool --mode=compile g++ -c -fPIC twoDsim_wrap.cxx \
+         -I/usr/include/python3 -o twoDsim_wrap.lo
+      $ libtool --mode=compile gm2 -g -fPIC -fiso -c deviceGnuPic.mod
+      $ libtool --mode=compile gm2 -g -fPIC -fiso -c roots.mod
+      $ libtool --mode=compile gm2 -g -fPIC -fiso -c -fswig \
+         twoDsim.mod -o twoDsim.lo
+ 
+    Finally the application is linked into a shared library:
+ 
+      $ libtool --mode=link gcc -g twoDsim_m2.lo twoDsim_wrap.lo \
+        roots.lo deviceGnuPic.lo \
+         -L${prefix}/lib64 \
+         -rpath `pwd` -lgm2 -lstdc++ -lm -o libtwoDsim.la
+      cp .libs/libtwoDsim.so _twoDsim.so
+ 
+    The library name must start with '_' to comply with the Python3
+ module naming scheme.
+ 
+ 
+ File: m2.info,  Node: Interface to C,  Next: Assembly language,  Prev: Producing a Python module,  Up: Using
+ 
+ 2.15 Interfacing GNU Modula-2 to C
+ ==================================
+ 
+ The GNU Modula-2 compiler tries to use the C calling convention wherever
+ possible however some parameters have no C equivalent and thus a
+ language specific method is used.  For example unbounded arrays are
+ passed as a 'struct {void *address, unsigned int high}' and the contents
+ of these arrays are copied by callee functions when they are declared as
+ non 'VAR' parameters.  The 'VAR' equivalent unbounded array parameters
+ need no copy, but still use the 'struct' representation.
+ 
+    The recommended method of interfacing GNU Modula-2 to C is by telling
+ the definition module that the implementation is in the C language.
+ This is achieved by using the tokens 'DEFINITION MODULE FOR "C"'.  Here
+ is an example 'libprintf.def'.
+ 
+      DEFINITION MODULE FOR "C" libprintf ;
+ 
+      EXPORT UNQUALIFIED printf ;
+ 
+      PROCEDURE printf (a: ARRAY OF CHAR; ...) : [ INTEGER ] ;
+ 
+      END libprintf.
+ 
+    the 'UNQUALIFIED' keyword in the definition module informs GNU
+ Modula-2 not to prefix the module name to exported references in the
+ object file.
+ 
+    The 'printf' declaration states that the first parameter semantically
+ matches 'ARRAY OF CHAR' but since the module is for the C language it
+ will be mapped onto 'char *'.  The token '...' indicates a variable
+ number of arguments (varargs) and all parameters passed here are mapped
+ onto their C equivalents.  Arrays and constant strings are passed as
+ pointers.  Lastly '[ INTEGER ]' states that the caller can ignore the
+ function return result if desired.
+ 
+    The hello world program can be rewritten as:
+ 
+      MODULE hello ;
+ 
+      FROM libprintf IMPORT printf ;
+ 
+      BEGIN
+         printf ("hello world\n")
+      END hello.
+ 
+    and it can be compiled by:
+ 
+    'gm2 -g hello.mod -lc'
+ 
+    In reality the '-lc' is redundant as libc is always included in the
+ linking process.  It is shown here to emphasize that the C library or
+ object file containing 'printf' must be present.  The search path for
+ modules can be changed by using '-I'.
+ 
+    If a procedure function is declared using varargs then some parameter
+ values are converted.  The table below summarizes the default
+ conversions and default types used.
+ 
+      Actual Parameter       |  Default conversion  |   Type of actual
+                             |                      |   value passed
+      ===============================================================
+      123                    |  none                |   long long int
+      "hello world"          |  none                |   const char *
+      a: ARRAY OF CHAR       |  ADR (a)             |   char *
+      a: ARRAY [0..5] OF CHAR|  ADR (a)             |   char *
+      3.14                   |  none                |   long double
+ 
+    If you wish to pass 'int' values then you should explicitly convert
+ the constants using one of the conversion mechanisms.  For example:
+ 'INTEGER(10)' or 'VAL(INTEGER, 10)' or 'CAST(INTEGER, 10)'.
+ 
+ 
+ File: m2.info,  Node: Assembly language,  Next: Alignment,  Prev: Interface to C,  Up: Using
+ 
+ 2.16 Interface to assembly language
+ ===================================
+ 
+ The interface for GNU Modula-2 to assembly language is almost identical
+ to GNU C. The only alterations are that the keywords 'asm' and
+ 'volatile' are in capitals, following the Modula-2 convention.
+ 
+    A simple, but highly non optimal, example is given below.  Here we
+ want to add the two 'CARDINAL's 'foo' and 'bar' together and return the
+ result.  The target processor is assumed to be executing the x86_64
+ instruction set.
+ 
+      PROCEDURE Example (foo, bar: CARDINAL) : CARDINAL ;
+      VAR
+         myout: CARDINAL ;
+      BEGIN
+         ASM VOLATILE ("movq %1,%%rax; addq %2,%%rax; movq %%rax,%0"
+            : "=rm" (myout)            (* outputs *)
+            : "rm" (foo), "rm" (bar)   (* inputs  *)
+            : "rax") ;                 (* we trash *)
+         RETURN( myout )
+      END Example ;
+ 
+    For a full description of this interface we refer the reader to the
+ GNU C manual.
+ 
+    *Note Extensions to the C Language Family: (gcc)Extended Asm.
+ 
+    The same example can be written using the newer extensions of naming
+ the operands rather than using numbered arguments.
+ 
+      PROCEDURE Example (foo, bar: CARDINAL) : CARDINAL ;
+      VAR
+         myout: CARDINAL ;
+      BEGIN
+         ASM VOLATILE (
+          "movq %[left],%%rax; addq %[right],%%rax; movq %%rax,%[output]"
+            : [output] "=rm" (myout)                  (* outputs *)
+            : [left] "rm" (foo), [right] "rm" (bar)   (* inputs  *)
+            : "rax") ;                                (* we trash *)
+         RETURN( myout )
+      END Example ;
+ 
+    Both examples generate exactly the same code.  It is worth noting
+ that the specifier "rm" indicates that the operand can be either a
+ register or memory.  Of course you must choose an instruction which can
+ take either, but this allows the compiler to take make more efficient
+ choices depending upon the optimization level given to the compiler.
+ 
+ 
+ File: m2.info,  Node: Alignment,  Next: Packed,  Prev: Assembly language,  Up: Using
+ 
+ 2.17 Data type alignment
+ ========================
+ 
+ GNU Modula-2 allows you to specify alignment for types and variables.
+ The syntax for alignment is to use the ISO pragma directives '<*'
+ 'bytealignment (' expression ')' and '*>'.  These directives can be used
+ after type and variable declarations.
+ 
+    The ebnf of the alignment production is:
+ 
+      Alignment := [ ByteAlignment ] =:
+      ByteAlignment := '<*' AttributeExpression '*>' =:
+      AlignmentExpression := "(" ConstExpression ")" =:
+ 
+    The 'Alignment' ebnf statement may be used during construction of
+ types, records, record fields, arrays, pointers and variables.  Below is
+ an example of aligning a type so that the variable 'bar' is aligned on a
+ 1024 address.
+ 
+      MODULE align ;
+ 
+      TYPE
+         foo = INTEGER <* bytealignment(1024) *> ;
+ 
+      VAR
+         z  : INTEGER ;
+         bar: foo ;
+      BEGIN
+      END align.
+ 
+    The next example aligns a variable on a 1024 byte boundary.
+ 
+      MODULE align2 ;
+ 
+      VAR
+         x  : CHAR ;
+         z  : ARRAY [0..255] OF INTEGER <* bytealignment(1024) *> ;
+      BEGIN
+      END align2.
+ 
+    Here the example aligns a pointer on a 1024 byte boundary.
+ 
+      MODULE align4 ;
+ 
+      FROM SYSTEM IMPORT ADR ;
+      FROM libc IMPORT exit ;
+ 
+      VAR
+         x  : CHAR ;
+         z  : POINTER TO INTEGER <* bytealignment(1024) *> ;
+      BEGIN
+         IF ADR(z) MOD 1024=0
+         THEN
+            exit(0)
+         ELSE
+            exit(1)
+         END
+      END align4.
+ 
+    In example 'align5' record field 'y' is aligned on a 1024 byte
+ boundary.
+ 
+      MODULE align5 ;
+ 
+      FROM SYSTEM IMPORT ADR ;
+      FROM libc IMPORT exit ;
+ 
+      TYPE
+         rec = RECORD
+                  x: CHAR ;
+                  y: CHAR <* bytealignment(1024) *> ;
+               END ;
+      VAR
+         r: rec ;
+      BEGIN
+         IF ADR(r.y) MOD 1024=0
+         THEN
+            exit(0)
+         ELSE
+            exit(1)
+         END
+      END align5.
+ 
+    In the example below module 'align6' declares 'foo' as an array of
+ 256 'INTEGER's.  The array 'foo' is aligned on a 1024 byte boundary.
+ 
+      MODULE align6 ;
+ 
+      FROM SYSTEM IMPORT ADR ;
+      FROM libc IMPORT exit ;
+ 
+      TYPE
+         foo = ARRAY [0..255] OF INTEGER <* bytealignment(1024) *> ;
+ 
+      VAR
+         x  : CHAR ;
+         z  : foo ;
+      BEGIN
+         IF ADR(z) MOD 1024=0
+         THEN
+            exit(0)
+         ELSE
+            exit(1)
+         END
+      END align6.
+ 
+ 
+ File: m2.info,  Node: Packed,  Next: Built-ins,  Prev: Alignment,  Up: Using
+ 
+ 2.18 Packing data types
+ =======================
+ 
+ The pragma '<* bytealignment(0) *>' can be used to specify that the
+ fields within a 'RECORD' are to be packed.  Currently this only applies
+ to fields which are declared as subranges, ordinal types and enumerated
+ types.  Here is an example of how two subranges might be packed into a
+ byte.
+ 
+      TYPE
+         bits3c =  [0..7] ;
+         bits3i = [-4..3] ;
+ 
+         byte = RECORD
+                    <* bytealignment(0) *>
+                    x: bits3c ;
+                    <* bitsunused(2) *>
+                    y: bits3i ;
+                END ;
+ 
+    Notice that the user has specified that in between fields 'x' and 'y'
+ there are two bits unused.
+ 
+    Now the user wishes to create a record with byte numbers zero and one
+ occupied and then an 'INTEGER32' field which is four byte aligned.  In
+ this case byte numbers two and three will be unused.  The pragma
+ 'bytealignment' can be issued at the start of the record indicating the
+ default alignment for the whole record and this can be overridden by
+ individual fields if necessary.
+ 
+         rec = RECORD
+                  <* bytealignment (1) *> ;
+                  a, b: byte ;
+                  x: INTEGER32 <* bytealignment(4) *> ;
+               END ;
+ 
+    In the following example the user has specified that a record has two
+ fields 'p' and 'q' but that there are three bytes unused between these
+ fields.
+ 
+         header = RECORD
+                     <* bytealignment(1) *>
+                     p: byte ;
+                     <* bytesunused(3) *>
+                     q: byte ;
+                  END ;
+ 
+    The pragma '<* bytesunused(x) *>' can only be used if the current
+ field is on a byte boundary.  There is also a 'SYSTEM' pseudo procedure
+ function 'TBITSIZE(T)' which returns the minimum number of bits
+ necessary to represent type 'T'.
+ 
+    Another example of packing record bit fields is given below:
+ 
+      MODULE align21 ;
+ 
+      FROM libc IMPORT exit ;
+ 
+      TYPE
+         colour = (red, blue, green, purple, white, black) ;
+ 
+         soc = PACKEDSET OF colour ;
+ 
+         rec = RECORD
+                  <* bytealignment(0) *>
+                  x: soc ;
+                  y: [-1..1] ;
+               END ;
+ 
+      VAR
+         r: rec ;
+         v: CARDINAL ;
+      BEGIN
+         v := SIZE(r) ;
+         IF SIZE(r)#1
+         THEN
+            exit(1)
+         END ;
+         r.x := soc{blue} ;
+         IF r.x#soc{blue}
+         THEN
+            exit(2)
+         END
+      END align21.
+ 
+    Here we see that the total size of this record is one byte and
+ consists of a six bit set type followed by a 2 bit integer subrange.
+ 
+ 
+ File: m2.info,  Node: Built-ins,  Next: The PIM system module,  Prev: Packed,  Up: Using
+ 
+ 2.19 Accessing GNU Modula-2 Built-ins
+ =====================================
+ 
+ This section describes the built-in constants and functions defined in
+ GNU Modula-2.  The following compiler constants can be accessed using
+ the '__ATTRIBUTE__' '__BUILTIN__' keywords.  These are not part of the
+ Modula-2 language and they may differ depending upon the target
+ architecture but they provide a method whereby common libraries can
+ interface to a different underlying architecture.
+ 
+    The built-in constants are: 'BITS_PER_UNIT', 'BITS_PER_WORD',
+ 'BITS_PER_CHAR' and 'UNITS_PER_WORD'.  They are integrated into GNU
+ Modula-2 by an extension to the 'ConstFactor' rule:
+ 
+      ConstFactor := ConstQualidentOrSet | Number | ConstString |
+                     "(" ConstExpression ")" | "NOT" ConstFactor |
+                     ConstAttribute =:
+ 
+      ConstAttribute := "__ATTRIBUTE__" "__BUILTIN__" "(" "(" Ident ")" ")" =:
+ 
+    Here is an example taken from the ISO library 'SYSTEM.def':
+ 
+      CONST
+         BITSPERLOC    = __ATTRIBUTE__ __BUILTIN__ ((BITS_PER_UNIT)) ;
+         LOCSPERWORD   = __ATTRIBUTE__ __BUILTIN__ ((UNITS_PER_WORD)) ;
+ 
+    Built-in functions are transparent to the end user.  All built-in
+ functions are declared in 'DEFINITION MODULE's and are imported as and
+ when required.  Built-in functions are declared in definition modules by
+ using the '__BUILTIN__' keyword.  Here is a section of the ISO library
+ 'LongMath.def' which demonstrates this feature.
+ 
+      PROCEDURE __BUILTIN__ sqrt (x: LONGREAL): LONGREAL;
+        (* Returns the square root of x *)
+ 
+    This indicates that the function 'sqrt' will be implemented using the
+ gcc built-in maths library.  If gcc cannot utilize the built-in function
+ (for example if the programmer requested the address of 'sqrt') then
+ code is generated to call the alternative function implemented in the
+ 'IMPLEMENTATION' 'MODULE'.
+ 
+    Sometimes a function exported from the 'DEFINITION' 'MODULE' will
+ have a different name from the built-in function within gcc.  In such
+ cases the mapping between the GNU Modula-2 function name and the gcc
+ name is expressed using the keywords '__ATTRIBUTE__' '__BUILTIN__'
+ '((Ident))'.  For example the function 'sqrt' in 'LongMath.def' maps
+ onto the gcc built-in function 'sqrtl' and this is expressed as:
+ 
+      PROCEDURE __ATTRIBUTE__ __BUILTIN__ ((sqrtl)) sqrt
+                                          (x: LONGREAL) : LONGREAL;
+        (* Returns the positive square root of x *)
+ 
+    The following module 'Builtins.def' enumerates the list of built-in
+ functions which can be accessed in GNU Modula-2.  It also serves to
+ define the parameter and return value for each function:
+ 
+      DEFINITION MODULE Builtins ;
+ 
+      FROM SYSTEM IMPORT ADDRESS ;
+ 
+      (* floating point intrinsic procedure functions *)
+ 
+      PROCEDURE __BUILTIN__ isfinitef (x: SHORTREAL) : INTEGER ;
+      PROCEDURE __BUILTIN__ isfinite (x: REAL) : INTEGER ;
+      PROCEDURE __BUILTIN__ isfinitel (x: LONGREAL) : INTEGER ;
+ 
+      PROCEDURE __BUILTIN__ sinf (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE __BUILTIN__ sin (x: REAL) : REAL ;
+      PROCEDURE __BUILTIN__ sinl (x: LONGREAL) : LONGREAL ;
+ 
+      PROCEDURE __BUILTIN__ cosf (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE __BUILTIN__ cos (x: REAL) : REAL ;
+      PROCEDURE __BUILTIN__ cosl (x: LONGREAL) : LONGREAL ;
+ 
+      PROCEDURE __BUILTIN__ sqrtf (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE __BUILTIN__ sqrt (x: REAL) : REAL ;
+      PROCEDURE __BUILTIN__ sqrtl (x: LONGREAL) : LONGREAL ;
+ 
+      PROCEDURE __BUILTIN__ atan2f (x, y: SHORTREAL) : SHORTREAL ;
+      PROCEDURE __BUILTIN__ atan2 (x, y: REAL) : REAL ;
+      PROCEDURE __BUILTIN__ atan2l (x, y: LONGREAL) : LONGREAL ;
+ 
+      PROCEDURE __BUILTIN__ fabsf (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE __BUILTIN__ fabs (x: REAL) : REAL ;
+      PROCEDURE __BUILTIN__ fabsl (x: LONGREAL) : LONGREAL ;
+ 
+      PROCEDURE __BUILTIN__ logf (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE __BUILTIN__ log (x: REAL) : REAL ;
+      PROCEDURE __BUILTIN__ logl (x: LONGREAL) : LONGREAL ;
+ 
+      PROCEDURE __BUILTIN__ expf (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE __BUILTIN__ exp (x: REAL) : REAL ;
+      PROCEDURE __BUILTIN__ expl (x: LONGREAL) : LONGREAL ;
+ 
+      PROCEDURE __BUILTIN__ log10f (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE __BUILTIN__ log10 (x: REAL) : REAL ;
+      PROCEDURE __BUILTIN__ log10l (x: LONGREAL) : LONGREAL ;
+ 
+      PROCEDURE __BUILTIN__ exp10f (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE __BUILTIN__ exp10 (x: REAL) : REAL ;
+      PROCEDURE __BUILTIN__ exp10l (x: LONGREAL) : LONGREAL ;
+ 
+      PROCEDURE __BUILTIN__ ilogbf (x: SHORTREAL) : INTEGER ;
+      PROCEDURE __BUILTIN__ ilogb (x: REAL) : INTEGER ;
+      PROCEDURE __BUILTIN__ ilogbl (x: LONGREAL) : INTEGER ;
+ 
+      PROCEDURE __BUILTIN__ huge_val () : REAL ;
+      PROCEDURE __BUILTIN__ huge_valf () : SHORTREAL ;
+      PROCEDURE __BUILTIN__ huge_vall () : LONGREAL ;
+ 
+      PROCEDURE __BUILTIN__ modf (x: REAL; VAR y: REAL) : REAL ;
+      PROCEDURE __BUILTIN__ modff (x: SHORTREAL;
+                                   VAR y: SHORTREAL) : SHORTREAL ;
+      PROCEDURE __BUILTIN__ modfl (x: LONGREAL; VAR y: LONGREAL) : LONGREAL ;
+ 
+      PROCEDURE __BUILTIN__ signbit (r: REAL) : INTEGER ;
+      PROCEDURE __BUILTIN__ signbitf (s: SHORTREAL) : INTEGER ;
+      PROCEDURE __BUILTIN__ signbitl (l: LONGREAL) : INTEGER ;
+ 
+      PROCEDURE __BUILTIN__ nextafter (x, y: REAL) : REAL ;
+      PROCEDURE __BUILTIN__ nextafterf (x, y: SHORTREAL) : SHORTREAL ;
+      PROCEDURE __BUILTIN__ nextafterl (x, y: LONGREAL) : LONGREAL ;
+ 
+      PROCEDURE __BUILTIN__ nexttoward (x, y: REAL) : LONGREAL ;
+      PROCEDURE __BUILTIN__ nexttowardf (x, y: SHORTREAL) : LONGREAL ;
+      PROCEDURE __BUILTIN__ nexttowardl (x, y: LONGREAL) : LONGREAL ;
+ 
+      PROCEDURE __BUILTIN__ scalbln (x: REAL; n: LONGINT) : REAL ;
+      PROCEDURE __BUILTIN__ scalblnf (x: SHORTREAL; n: LONGINT) : SHORTREAL ;
+      PROCEDURE __BUILTIN__ scalblnl (x: LONGREAL; n: LONGINT) : LONGREAL ;
+ 
+      PROCEDURE __BUILTIN__ scalbn (x: REAL; n: INTEGER) : REAL ;
+      PROCEDURE __BUILTIN__ scalbnf (x: SHORTREAL; n: INTEGER) : SHORTREAL ;
+      PROCEDURE __BUILTIN__ scalbnl (x: LONGREAL; n: INTEGER) : LONGREAL ;
+ 
+      (* complex arithmetic intrincic procedure functions *)
+ 
+      PROCEDURE __BUILTIN__ cabsf (z: SHORTCOMPLEX) : SHORTREAL ;
+      PROCEDURE __BUILTIN__ cabs (z: COMPLEX) : REAL ;
+      PROCEDURE __BUILTIN__ cabsl (z: LONGCOMPLEX) : LONGREAL ;
+ 
+      PROCEDURE __BUILTIN__ cargf (z: SHORTCOMPLEX) : SHORTREAL ;
+      PROCEDURE __BUILTIN__ carg (z: COMPLEX) : REAL ;
+      PROCEDURE __BUILTIN__ cargl (z: LONGCOMPLEX) : LONGREAL ;
+ 
+      PROCEDURE __BUILTIN__ conjf (z: SHORTCOMPLEX) : SHORTCOMPLEX ;
+      PROCEDURE __BUILTIN__ conj (z: COMPLEX) : COMPLEX ;
+      PROCEDURE __BUILTIN__ conjl (z: LONGCOMPLEX) : LONGCOMPLEX ;
+ 
+      PROCEDURE __BUILTIN__ cpowerf (base: SHORTCOMPLEX;
+                                     exp: SHORTREAL) : SHORTCOMPLEX ;
+      PROCEDURE __BUILTIN__ cpower (base: COMPLEX; exp: REAL) : COMPLEX ;
+      PROCEDURE __BUILTIN__ cpowerl (base: LONGCOMPLEX;
+                                     exp: LONGREAL) : LONGCOMPLEX ;
+ 
+      PROCEDURE __BUILTIN__ csqrtf (z: SHORTCOMPLEX) : SHORTCOMPLEX ;
+      PROCEDURE __BUILTIN__ csqrt (z: COMPLEX) : COMPLEX ;
+      PROCEDURE __BUILTIN__ csqrtl (z: LONGCOMPLEX) : LONGCOMPLEX ;
+ 
+      PROCEDURE __BUILTIN__ cexpf (z: SHORTCOMPLEX) : SHORTCOMPLEX ;
+      PROCEDURE __BUILTIN__ cexp (z: COMPLEX) : COMPLEX ;
+      PROCEDURE __BUILTIN__ cexpl (z: LONGCOMPLEX) : LONGCOMPLEX ;
+ 
+      PROCEDURE __BUILTIN__ clnf (z: SHORTCOMPLEX) : SHORTCOMPLEX ;
+      PROCEDURE __BUILTIN__ cln (z: COMPLEX) : COMPLEX ;
+      PROCEDURE __BUILTIN__ clnl (z: LONGCOMPLEX) : LONGCOMPLEX ;
+ 
+      PROCEDURE __BUILTIN__ csinf (z: SHORTCOMPLEX) : SHORTCOMPLEX ;
+      PROCEDURE __BUILTIN__ csin (z: COMPLEX) : COMPLEX ;
+      PROCEDURE __BUILTIN__ csinl (z: LONGCOMPLEX) : LONGCOMPLEX ;
+ 
+      PROCEDURE __BUILTIN__ ccosf (z: SHORTCOMPLEX) : SHORTCOMPLEX ;
+      PROCEDURE __BUILTIN__ ccos (z: COMPLEX) : COMPLEX ;
+      PROCEDURE __BUILTIN__ ccosl (z: LONGCOMPLEX) : LONGCOMPLEX ;
+ 
+      PROCEDURE __BUILTIN__ ctanf (z: SHORTCOMPLEX) : SHORTCOMPLEX ;
+      PROCEDURE __BUILTIN__ ctan (z: COMPLEX) : COMPLEX ;
+      PROCEDURE __BUILTIN__ ctanl (z: LONGCOMPLEX) : LONGCOMPLEX ;
+ 
+      PROCEDURE __BUILTIN__ carcsinf (z: SHORTCOMPLEX) : SHORTCOMPLEX ;
+      PROCEDURE __BUILTIN__ carcsin (z: COMPLEX) : COMPLEX ;
+      PROCEDURE __BUILTIN__ carcsinl (z: LONGCOMPLEX) : LONGCOMPLEX ;
+ 
+      PROCEDURE __BUILTIN__ carccosf (z: SHORTCOMPLEX) : SHORTCOMPLEX ;
+      PROCEDURE __BUILTIN__ carccos (z: COMPLEX) : COMPLEX ;
+      PROCEDURE __BUILTIN__ carccosl (z: LONGCOMPLEX) : LONGCOMPLEX ;
+ 
+      PROCEDURE __BUILTIN__ carctanf (z: SHORTCOMPLEX) : SHORTCOMPLEX ;
+      PROCEDURE __BUILTIN__ carctan (z: COMPLEX) : COMPLEX ;
+      PROCEDURE __BUILTIN__ carctanl (z: LONGCOMPLEX) : LONGCOMPLEX ;
+ 
+      (* memory and string intrincic procedure functions *)
+ 
+      PROCEDURE __BUILTIN__ alloca (i: CARDINAL) : ADDRESS ;
+      PROCEDURE __BUILTIN__ memcpy (dest, src: ADDRESS;
+                                    nbytes: CARDINAL) : ADDRESS ;
+      PROCEDURE __BUILTIN__ index (s: ADDRESS; c: INTEGER) : ADDRESS ;
+      PROCEDURE __BUILTIN__ rindex (s: ADDRESS; c: INTEGER) : ADDRESS ;
+      PROCEDURE __BUILTIN__ memcmp (s1, s2: ADDRESS;
+                                    nbytes: CARDINAL) : INTEGER ;
+      PROCEDURE __BUILTIN__ memset (s: ADDRESS; c: INTEGER;
+                                    nbytes: CARDINAL) : ADDRESS ;
+      PROCEDURE __BUILTIN__ memmove (s1, s2: ADDRESS;
+                                     nbytes: CARDINAL) : ADDRESS ;
+      PROCEDURE __BUILTIN__ strcat (dest, src: ADDRESS) : ADDRESS ;
+      PROCEDURE __BUILTIN__ strncat (dest, src: ADDRESS;
+                                     nbytes: CARDINAL) : ADDRESS ;
+      PROCEDURE __BUILTIN__ strcpy (dest, src: ADDRESS) : ADDRESS ;
+      PROCEDURE __BUILTIN__ strncpy (dest, src: ADDRESS;
+                                     nbytes: CARDINAL) : ADDRESS ;
+      PROCEDURE __BUILTIN__ strcmp (s1, s2: ADDRESS) : INTEGER ;
+      PROCEDURE __BUILTIN__ strncmp (s1, s2: ADDRESS;
+                                     nbytes: CARDINAL) : INTEGER ;
+      PROCEDURE __BUILTIN__ strlen (s: ADDRESS) : INTEGER ;
+      PROCEDURE __BUILTIN__ strstr (haystack, needle: ADDRESS) : ADDRESS ;
+      PROCEDURE __BUILTIN__ strpbrk (s, accept: ADDRESS) : ADDRESS ;
+      PROCEDURE __BUILTIN__ strspn (s, accept: ADDRESS) : CARDINAL ;
+      PROCEDURE __BUILTIN__ strcspn (s, accept: ADDRESS) : CARDINAL ;
+      PROCEDURE __BUILTIN__ strchr (s: ADDRESS; c: INTEGER) : ADDRESS ;
+      PROCEDURE __BUILTIN__ strrchr (s: ADDRESS; c: INTEGER) : ADDRESS ;
+ 
+      (*
+         longjmp - this GCC builtin restricts the val to always 1.
+      *)
+      (* do not use these two builtins, as gcc, only really
+         anticipates that the Ada front end should use them
+         and it only uses them in its runtime exception handling.
+         We leave them here in the hope that someday they will
+         behave more like their libc counterparts.  *)
+ 
+      PROCEDURE __BUILTIN__ longjmp (env: ADDRESS; val: INTEGER) ;
+      PROCEDURE __BUILTIN__ setjmp (env: ADDRESS) : INTEGER ;
+ 
+ 
+      (*
+         frame_address - returns the address of the frame.
+                         The current frame is obtained if level is 0,
+                         the next level up if level is 1 etc.
+      *)
+ 
+      PROCEDURE __BUILTIN__ frame_address (level: CARDINAL) : ADDRESS ;
+ 
+ 
+      (*
+         return_address - returns the return address of function.
+                          The current function return address is
+                          obtained if level is 0,
+                          the next level up if level is 1 etc.
+      *)
+ 
+      PROCEDURE __BUILTIN__ return_address (level: CARDINAL) : ADDRESS ;
+ 
+ 
+      (*
+         alloca_trace - this is a no-op which is used for internal debugging.
+      *)
+ 
+      PROCEDURE alloca_trace (returned: ADDRESS; nBytes: CARDINAL) : ADDRESS ;
+ 
+ 
+      END Builtins.
+ 
+    Although this module exists and will result in the generation of
+ in-line code if optimization flags are passed to GNU Modula-2, users are
+ advised to utilize the same functions from more generic libraries.  The
+ built-in mechanism will be applied to these generic libraries where
+ appropriate.  Note for the mathematical routines to be in-lined you need
+ to specify the '-ffast-math -O' options.
+ 
+ 
+ File: m2.info,  Node: The PIM system module,  Next: The ISO system module,  Prev: Built-ins,  Up: Using
+ 
+ 2.20 The PIM system module
+ ==========================
+ 
+      DEFINITION MODULE SYSTEM ;
+ 
+      EXPORT QUALIFIED BITSPERBYTE, BYTESPERWORD,
+                       LOC, WORD, BYTE, ADDRESS, INTEGER8,
+                       INTEGER16, INTEGER32, INTEGER64, CARDINAL8,
+                       CARDINAL16, CARDINAL32, CARDINAL64, WORD16,
+                       WORD32, WORD64, BITSET8, BITSET16,
+                       BITSET32, REAL32, REAL64, REAL128,
+                       COMPLEX32, COMPLEX64, COMPLEX128, CSIZE_T,
+                       CSSIZE_T,
+                       ADR, TSIZE, ROTATE, SHIFT, THROW, TBITSIZE ;
+                       (* SIZE is also exported if -fpim2 is used.  *)
+ 
+      CONST
+        BITSPERBYTE   = __ATTRIBUTE__ __BUILTIN__ ((BITS_PER_UNIT)) ;
+        BYTESPERWORD  = __ATTRIBUTE__ __BUILTIN__ ((UNITS_PER_WORD)) ;
+ 
+      (* Note that the full list of system and sized datatypes include:
+         LOC, WORD, BYTE, ADDRESS,
+ 
+         (and the non language standard target types)
+ 
+         INTEGER8, INTEGER16, INTEGER32, INTEGER64,
+         CARDINAL8, CARDINAL16, CARDINAL32, CARDINAL64,
+         WORD16, WORD32, WORD64, BITSET8, BITSET16,
+         BITSET32, REAL32, REAL64, REAL128, COMPLEX32,
+         COMPLEX64, COMPLEX128, CSIZE_T, CSSIZE_T.
+ 
+         Also note that the non-standard data types will
+         move into another module in the future.  *)
+ 
+ 
+      (* The following types are supported on this target:
+      TYPE
+         LOC ;
+         WORD ;
+         BYTE ;
+         ADDRESS ;
+         INTEGER8 ;
+         INTEGER16 ;
+         INTEGER32 ;
+         INTEGER64 ;
+         CARDINAL8 ;
+         CARDINAL16 ;
+         CARDINAL32 ;
+         CARDINAL64 ;
+         WORD16 ;
+         WORD32 ;
+         WORD64 ;
+         BITSET8 ;
+         BITSET16 ;
+         BITSET32 ;
+         REAL32 ;
+         REAL64 ;
+         REAL128 ;
+         COMPLEX32 ;
+         COMPLEX64 ;
+         COMPLEX128 ;
+         CSIZE_T ;
+         CSSIZE_T ;
+      *)
+ 
+ 
+      (*
+         all the functions below are declared internally to gm2
+         ======================================================
+ 
+      PROCEDURE ADR (VAR v: <anytype>): ADDRESS;
+        (* Returns the address of variable v. *)
+ 
+      PROCEDURE SIZE (v: <type>) : ZType;
+        (* Returns the number of BYTES used to store a v of
+           any specified <type>.  Only available if -fpim2 is used.
+        *)
+ 
+      PROCEDURE TSIZE (<type>) : CARDINAL;
+        (* Returns the number of BYTES used to store a value of the
+           specified <type>.
+        *)
+ 
+      PROCEDURE ROTATE (val: <a set type>;
+                        num: INTEGER): <type of first parameter>;
+        (* Returns a bit sequence obtained from val by rotating up/right
+           or down/right by the absolute value of num.  The direction is
+           down/right if the sign of num is negative, otherwise the direction
+           is up/left.
+        *)
+ 
+      PROCEDURE SHIFT (val: <a set type>;
+                       num: INTEGER): <type of first parameter>;
+        (* Returns a bit sequence obtained from val by shifting up/left
+           or down/right by the absolute value of num, introducing
+           zeros as necessary.  The direction is down/right if the sign of
+           num is negative, otherwise the direction is up/left.
+        *)
+ 
+      PROCEDURE THROW (i: INTEGER) <* noreturn *> ;
+        (*
+           THROW is a GNU extension and was not part of the PIM or ISO
+           standards.  It throws an exception which will be caught by the
+           EXCEPT block (assuming it exists).  This is a compiler builtin
+           function which interfaces to the GCC exception handling runtime
+           system.
+           GCC uses the term throw, hence the naming distinction between
+           the GCC builtin and the Modula-2 runtime library procedure Raise.
+           The later library procedure Raise will call SYSTEM.THROW after
+           performing various housekeeping activities.
+        *)
+ 
+      PROCEDURE TBITSIZE (<type>) : CARDINAL ;
+        (* Returns the minimum number of bits necessary to represent
+           <type>.  This procedure function is only useful for determining
+           the number of bits used for any type field within a packed RECORD.
+           It is not particularly useful elsewhere since <type> might be
+           optimized for speed, for example a BOOLEAN could occupy a WORD.
+        *)
+      *)
+ 
+      (* The following procedures are invoked by GNU Modula-2 to
+         shift non word sized set types. They are not strictly part
+         of the core PIM Modula-2, however they are used
+         to implement the SHIFT procedure defined above,
+         which are in turn used by the Logitech compatible libraries.
+ 
+         Users will access these procedures by using the procedure
+         SHIFT above and GNU Modula-2 will map SHIFT onto one of
+         the following procedures.
+      *)
+ 
+      (*
+         ShiftVal - is a runtime procedure whose job is to implement
+                    the SHIFT procedure of ISO SYSTEM. GNU Modula-2 will
+                    inline a SHIFT of a single WORD sized set and will only
+                    call this routine for larger sets.
+      *)
+ 
+      PROCEDURE ShiftVal (VAR s, d: ARRAY OF BITSET;
+                          SetSizeInBits: CARDINAL;
+                          ShiftCount: INTEGER) ;
+ 
+ 
+      (*
+         ShiftLeft - performs the shift left for a multi word set.
+                     This procedure might be called by the back end of
+                     GNU Modula-2 depending whether amount is known at
+                     compile time.
+      *)
+ 
+      PROCEDURE ShiftLeft (VAR s, d: ARRAY OF BITSET;
+                           SetSizeInBits: CARDINAL;
+                           ShiftCount: CARDINAL) ;
+ 
+      (*
+         ShiftRight - performs the shift left for a multi word set.
+                      This procedure might be called by the back end of
+                      GNU Modula-2 depending whether amount is known at
+                      compile time.
+      *)
+ 
+      PROCEDURE ShiftRight (VAR s, d: ARRAY OF BITSET;
+                            SetSizeInBits: CARDINAL;
+                            ShiftCount: CARDINAL) ;
+ 
+ 
+      (*
+         RotateVal - is a runtime procedure whose job is to implement
+                     the ROTATE procedure of ISO SYSTEM. GNU Modula-2 will
+                     inline a ROTATE of a single WORD (or less)
+                     sized set and will only call this routine for larger
+                     sets.
+      *)
+ 
+      PROCEDURE RotateVal (VAR s, d: ARRAY OF BITSET;
+                           SetSizeInBits: CARDINAL;
+                           RotateCount: INTEGER) ;
+ 
+ 
+      (*
+         RotateLeft - performs the rotate left for a multi word set.
+                      This procedure might be called by the back end of
+                      GNU Modula-2 depending whether amount is known at
+                      compile time.
+      *)
+ 
+      PROCEDURE RotateLeft (VAR s, d: ARRAY OF BITSET;
+                            SetSizeInBits: CARDINAL;
+                            RotateCount: CARDINAL) ;
+ 
+ 
+      (*
+         RotateRight - performs the rotate right for a multi word set.
+                       This procedure might be called by the back end of
+                       GNU Modula-2 depending whether amount is known at
+                       compile time.
+      *)
+ 
+      PROCEDURE RotateRight (VAR s, d: ARRAY OF BITSET;
+                             SetSizeInBits: CARDINAL;
+                             RotateCount: CARDINAL) ;
+ 
+ 
+      END SYSTEM.
+ 
+    The different dialects of Modula-2 PIM-[234] and ISO Modula-2 declare
+ the function 'SIZE' in different places.  PIM-[34] and ISO Modula-2
+ declare 'SIZE' as a pervasive function (declared in the base module).
+ PIM-2 defined 'SIZE' in the 'SYSTEM' module (as shown above).
+ 
+    GNU Modula-2 allows users to specify the dialect of Modula-2 by using
+ the '-fiso' and '-fpim2' command line switches.
+ 
+    The data types 'CSIZE_T' and 'CSSIZE_T' are also exported from the
+ 'SYSTEM' module.  The type 'CSIZE_T' is unsigned and is mapped onto the
+ target C data type 'size_t' whereas the type 'CSSIZE_T' is mapped onto
+ the signed C data type 'ssize_t'.
+ 
+    It is anticipated that these should only be used to provide cross
+ platform definition modules for C libraries.
+ 
+    There are also a variety of fixed sized 'INTEGER' and 'CARDINAL'
+ types.  The variety of the fixed sized types will depend upon the target
+ architecture.
+ 
+ 
+ File: m2.info,  Node: The ISO system module,  Next: Release map,  Prev: The PIM system module,  Up: Using
+ 
+ 2.21 The ISO system module
+ ==========================
+ 
+      DEFINITION MODULE SYSTEM;
+ 
+        (* Gives access to system programming facilities that are probably
+           non portable. *)
+ 
+        (* The constants and types define underlying properties of storage *)
+ 
+      EXPORT QUALIFIED BITSPERLOC, LOCSPERWORD,
+                       LOC, ADDRESS, BYTE, WORD, INTEGER8,
+                       INTEGER16, INTEGER32, INTEGER64, CARDINAL8,
+                       CARDINAL16, CARDINAL32, CARDINAL64, WORD16,
+                       WORD32, WORD64, BITSET8, BITSET16,
+                       BITSET32, REAL32, REAL64, REAL128,
+                       COMPLEX32, COMPLEX64, COMPLEX128, CSIZE_T,
+                       CSSIZE_T,
+                       ADDADR, SUBADR, DIFADR, MAKEADR, ADR, ROTATE,
+                       SHIFT, CAST, TSIZE,
+ 
+                       (* Internal GM2 compiler functions *)
+                       ShiftVal, ShiftLeft, ShiftRight,
+                       RotateVal, RotateLeft, RotateRight,
+                       THROW, TBITSIZE ;
+ 
+      CONST
+                        (* <implementation-defined constant> ; *)
+        BITSPERLOC    = __ATTRIBUTE__ __BUILTIN__ ((BITS_PER_UNIT)) ;
+                        (* <implementation-defined constant> ; *)
+        LOCSPERWORD   = __ATTRIBUTE__ __BUILTIN__ ((UNITS_PER_WORD)) ;
+                        (* <implementation-defined constant> ; *)
+        LOCSPERBYTE = 8 DIV BITSPERLOC ;
+ 
+      (* Note that the full list of system and sized datatypes include:
+         LOC, WORD, BYTE, ADDRESS,
+ 
+         (and the non language standard target types)
+ 
+         INTEGER8, INTEGER16, INTEGER32, INTEGER64,
+         CARDINAL8, CARDINAL16, CARDINAL32, CARDINAL64,
+         WORD16, WORD32, WORD64, BITSET8, BITSET16,
+         BITSET32, REAL32, REAL64, REAL128, COMPLEX32,
+         COMPLEX64, COMPLEX128, CSIZE_T, CSSIZE_T.
+ 
+         Also note that the non-standard data types will
+         move into another module in the future.  *)
+ 
+      (*
+         All the data types and procedures below are declared internally.
+         ===============================================================
+ 
+      TYPE
+         LOC ;
+         ADDRESS ;
+         BYTE ;
+         WORD ;
+         INTEGER8 ;
+         INTEGER16 ;
+         INTEGER32 ;
+         INTEGER64 ;
+         CARDINAL8 ;
+         CARDINAL16 ;
+         CARDINAL32 ;
+         CARDINAL64 ;
+         WORD16 ;
+         WORD32 ;
+         WORD64 ;
+         BITSET8 ;
+         BITSET16 ;
+         BITSET32 ;
+         REAL32 ;
+         REAL64 ;
+         REAL128 ;
+         COMPLEX32 ;
+         COMPLEX64 ;
+         COMPLEX128 ;
+         CSIZE_T ;
+         CSSIZE_T ;
+ 
+      TYPE
+        LOC; (* A system basic type. Values are the uninterpreted
+                contents of the smallest addressable unit of storage *)
+        ADDRESS = POINTER TO LOC;
+        WORD = ARRAY [0 .. LOCSPERWORD-1] OF LOC;
+ 
+        (* BYTE and LOCSPERBYTE are provided if appropriate for machine *)
+ 
+      TYPE
+        BYTE = ARRAY [0 .. LOCSPERBYTE-1] OF LOC;
+ 
+      PROCEDURE ADDADR (addr: ADDRESS; offset: CARDINAL): ADDRESS;
+        (* Returns address given by (addr + offset), or may raise
+           an exception if this address is not valid.
+        *)
+ 
+      PROCEDURE SUBADR (addr: ADDRESS; offset: CARDINAL): ADDRESS;
+        (* Returns address given by (addr - offset), or may raise an
+           exception if this address is not valid.
+        *)
+ 
+      PROCEDURE DIFADR (addr1, addr2: ADDRESS): INTEGER;
+        (* Returns the difference between addresses (addr1 - addr2),
+           or may raise an exception if the arguments are invalid
+           or address space is non-contiguous.
+        *)
+ 
+      PROCEDURE MAKEADR (high: <some type>; ...): ADDRESS;
+        (* Returns an address constructed from a list of values whose
+           types are implementation-defined, or may raise an
+           exception if this address is not valid.
+ 
+           In GNU Modula-2, MAKEADR can take any number of arguments
+           which are mapped onto the type ADDRESS. The first parameter
+           maps onto the high address bits and subsequent parameters map
+           onto lower address bits. For example:
+ 
+           a := MAKEADR(BYTE(0FEH), BYTE(0DCH), BYTE(0BAH), BYTE(098H),
+                        BYTE(076H), BYTE(054H), BYTE(032H), BYTE(010H)) ;
+ 
+           then the value of, a, on a 64 bit machine is: 0FEDCBA9876543210H
+ 
+           The parameters do not have to be the same type, but constants
+           _must_ be typed.
+        *)
+ 
+      PROCEDURE ADR (VAR v: <anytype>): ADDRESS;
+        (* Returns the address of variable v. *)
+ 
+      PROCEDURE ROTATE (val: <a packedset type>;
+                        num: INTEGER): <type of first parameter>;
+        (* Returns a bit sequence obtained from val by rotating up/right
+           or down/right by the absolute value of num.  The direction is
+           down/right if the sign of num is negative, otherwise the direction
+           is up/left.
+        *)
+ 
+      PROCEDURE SHIFT (val: <a packedset type>;
+                       num: INTEGER): <type of first parameter>;
+        (* Returns a bit sequence obtained from val by shifting up/left
+           or down/right by the absolute value of num, introducing
+           zeros as necessary.  The direction is down/right if the sign of
+           num is negative, otherwise the direction is up/left.
+        *)
+ 
+      PROCEDURE CAST (<targettype>; val: <anytype>): <targettype>;
+        (* CAST is a type transfer function.  Given the expression
+           denoted by val, it returns a value of the type <targettype>.
+           An invalid value for the target value or a
+           physical address alignment problem may raise an exception.
+        *)
+ 
+      PROCEDURE TSIZE (<type>; ... ): CARDINAL;
+        (* Returns the number of LOCS used to store a value of the
+           specified <type>.   The extra parameters, if present,
+           are used to distinguish variants in a variant record.
+        *)
+ 
+      PROCEDURE THROW (i: INTEGER) <* noreturn *> ;
+        (*
+           THROW is a GNU extension and was not part of the PIM or ISO
+           standards.  It throws an exception which will be caught by the
+           EXCEPT block (assuming it exists).  This is a compiler builtin
+           function which interfaces to the GCC exception handling runtime
+           system.
+           GCC uses the term throw, hence the naming distinction between
+           the GCC builtin and the Modula-2 runtime library procedure Raise.
+           The later library procedure Raise will call SYSTEM.THROW after
+           performing various housekeeping activities.
+        *)
+ 
+      PROCEDURE TBITSIZE (<type>) : CARDINAL ;
+        (* Returns the minimum number of bits necessary to represent
+           <type>.  This procedure function is only useful for determining
+           the number of bits used for any type field within a packed RECORD.
+           It is not particularly useful elsewhere since <type> might be
+           optimized for speed, for example a BOOLEAN could occupy a WORD.
+        *)
+      *)
+ 
+ 
+      (* The following procedures are invoked by GNU Modula-2 to
+         shift non word set types. They are not part of ISO Modula-2
+         but are used to implement the SHIFT procedure defined above. *)
+ 
+      (*
+         ShiftVal - is a runtime procedure whose job is to implement
+                    the SHIFT procedure of ISO SYSTEM. GNU Modula-2 will
+                    inline a SHIFT of a single WORD sized set and will only
+                    call this routine for larger sets.
+      *)
+ 
+      PROCEDURE ShiftVal (VAR s, d: ARRAY OF BITSET;
+                          SetSizeInBits: CARDINAL;
+                          ShiftCount: INTEGER) ;
+ 
+ 
+      (*
+         ShiftLeft - performs the shift left for a multi word set.
+                     This procedure might be called by the back end of
+                     GNU Modula-2 depending whether amount is known at
+                     compile time.
+      *)
+ 
+      PROCEDURE ShiftLeft (VAR s, d: ARRAY OF BITSET;
+                           SetSizeInBits: CARDINAL;
+                           ShiftCount: CARDINAL) ;
+ 
+      (*
+         ShiftRight - performs the shift left for a multi word set.
+                      This procedure might be called by the back end of
+                      GNU Modula-2 depending whether amount is known at
+                      compile time.
+      *)
+ 
+      PROCEDURE ShiftRight (VAR s, d: ARRAY OF BITSET;
+                           SetSizeInBits: CARDINAL;
+                           ShiftCount: CARDINAL) ;
+ 
+ 
+      (*
+         RotateVal - is a runtime procedure whose job is to implement
+                     the ROTATE procedure of ISO SYSTEM. GNU Modula-2 will
+                     inline a ROTATE of a single WORD (or less)
+                     sized set and will only call this routine for larger
+                     sets.
+      *)
+ 
+      PROCEDURE RotateVal (VAR s, d: ARRAY OF BITSET;
+                           SetSizeInBits: CARDINAL;
+                           RotateCount: INTEGER) ;
+ 
+ 
+      (*
+         RotateLeft - performs the rotate left for a multi word set.
+                      This procedure might be called by the back end of
+                      GNU Modula-2 depending whether amount is known at
+                      compile time.
+      *)
+ 
+      PROCEDURE RotateLeft (VAR s, d: ARRAY OF BITSET;
+                            SetSizeInBits: CARDINAL;
+                            RotateCount: CARDINAL) ;
+ 
+ 
+      (*
+         RotateRight - performs the rotate right for a multi word set.
+                       This procedure might be called by the back end of
+                       GNU Modula-2 depending whether amount is known at
+                       compile time.
+      *)
+ 
+      PROCEDURE RotateRight (VAR s, d: ARRAY OF BITSET;
+                             SetSizeInBits: CARDINAL;
+                             RotateCount: CARDINAL) ;
+ 
+ 
+      END SYSTEM.
+ 
+    The data types 'CSIZE_T' and 'CSSIZE_T' are also exported from the
+ 'SYSTEM' module.  The type 'CSIZE_T' is unsigned and is mapped onto the
+ target C data type 'size_t' whereas the type 'CSSIZE_T' is mapped onto
+ the signed C data type 'ssize_t'.
+ 
+    It is anticipated that these should only be used to provide cross
+ platform definition modules for C libraries.
+ 
+    There are also a variety of fixed sized 'INTEGER' and 'CARDINAL'
+ types.  The variety of the fixed sized types will depend upon the target
+ architecture.
+ 
+ 
+ File: m2.info,  Node: Release map,  Next: Documentation,  Prev: The ISO system module,  Up: Using
+ 
+ 2.22 Release map
+ ================
+ 
+ GNU Modula-2 is now part of GCC and therefore will adopt the GCC release
+ schedule.  It is intended that GNU Modula-2 implement more of the GCC
+ builtins (vararg access) and GCC features.
+ 
+    There is an intention to implement the ISO generics and the M2R10
+ dialect of Modula-2.  It will also implement all language changes.  If
+ you wish to see something different please email <gm2@nongnu.org> with
+ your ideas.
+ 
+ 
+ File: m2.info,  Node: Documentation,  Next: Regression tests,  Prev: Release map,  Up: Using
+ 
+ 2.23 Documentation
+ ==================
+ 
+ The GNU Modula-2 documentation is available on line
+ <https://gcc.gnu.org/onlinedocs> or in the pdf, info, html file format.
+ 
+ 
+ File: m2.info,  Node: Regression tests,  Next: Limitations,  Prev: Documentation,  Up: Using
+ 
+ 2.24 Regression tests for gm2 in the repository
+ ===============================================
+ 
+ The regression testsuite can be run from the gcc build directory:
+ 
+      $ cd build-gcc
+      $ make check -j 24
+ 
+    which runs the complete testsuite for all compilers using 24 parallel
+ invocations of the compiler.  Individual language testsuites can be run
+ by specifying the language, for example the Modula-2 testsuite can be
+ run using:
+ 
+      $ cd build-gcc
+      $ make check-m2 -j 24
+ 
+    Finally the results of the testsuite can be emailed to the
+ gcc-testresults (https://gcc.gnu.org/lists.html) list using the
+ 'test_summary' script found in the gcc source tree:
+ 
+      $ 'directory to the sources'/contrib/test_summary
+ 
+ 
+ File: m2.info,  Node: Limitations,  Next: Objectives,  Prev: Regression tests,  Up: Using
+ 
+ 2.25 Limitations
+ ================
+ 
+ Logitech compatibility library is incomplete.  The principle modules for
+ this platform exist however for a comprehensive list of completed
+ modules please check the documentation <gm2.html>.
+ 
+ 
+ File: m2.info,  Node: Objectives,  Next: FAQ,  Prev: Limitations,  Up: Using
+ 
+ 2.26 Objectives
+ ===============
+ 
+    * The intention of GNU Modula-2 is to provide a production Modula-2
+      front end to GCC.
+ 
+    * It should support all Niklaus Wirth PIM Dialects [234] and also ISO
+      Modula-2 including a re-implementation of all the ISO modules.
+ 
+    * There should be an easy interface to C.
+ 
+    * Exploit the features of GCC.
+ 
+    * Listen to the requests of the users.
+ 
+ 
+ File: m2.info,  Node: FAQ,  Next: Community,  Prev: Objectives,  Up: Using
+ 
+ 2.27 FAQ
+ ========
+ 
+ 2.27.1 Why use the C++ exception mechanism in GCC, rather than a bespoke Modula-2 mechanism?
+ --------------------------------------------------------------------------------------------
+ 
+ The C++ mechanism is tried and tested, it also provides GNU Modula-2
+ with the ability to link with C++ modules and via swig it can raise
+ Python exceptions.
+ 
+ 
+ File: m2.info,  Node: Community,  Next: Other languages,  Prev: FAQ,  Up: Using
+ 
+ 2.28 Community
+ ==============
+ 
+ You can subscribe to the GNU Modula-2 mailing by sending an email to:
+ <gm2-subscribe@nongnu.org> or by
+ <http://lists.nongnu.org/mailman/listinfo/gm2>.  The mailing list
+ contents can be viewed <http://lists.gnu.org/archive/html/gm2>.
+ 
+ 
+ File: m2.info,  Node: Other languages,  Prev: Community,  Up: Using
+ 
+ 2.29 Other languages for GCC
+ ============================
+ 
+ These exist and can be found on the frontends web page on the gcc web
+ site (http://gcc.gnu.org/frontends.html).
+ 
+ 
+ File: m2.info,  Node: License,  Next: Copying,  Prev: Using,  Up: Top
+ 
+ 2.30 License of GNU Modula-2
+ ============================
+ 
+ GNU Modula-2 is free software, the compiler is held under the GPL v3
+ <http://www.gnu.org/licenses/gpl.txt>, its libraries (pim, iso and
+ Logitech compatible) are under the GPL v3 with the GCC run time library
+ exception clause.
+ 
+    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/>.
+ 
+    More information on how these licenses work is available
+ <http://www.gnu.org/licenses/licenses.html> on the GNU web site.
+ 
+ 
+ File: m2.info,  Node: Copying,  Next: Contributing,  Prev: License,  Up: Top
+ 
+ GNU General Public License
+ **************************
+ 
+                         Version 3, 29 June 2007
+ 
+      Copyright (C) 2007 Free Software Foundation, Inc. <https://www.fsf.org>
+ 
+      Everyone is permitted to copy and distribute verbatim copies of this
+      license document, but changing it is not allowed.
+ 
+ Preamble
+ ========
+ 
+ The GNU General Public License is a free, copyleft license for software
+ and other kinds of works.
+ 
+    The licenses for most software and other practical works are designed
+ to take away your freedom to share and change the works.  By contrast,
+ the GNU General Public License is intended to guarantee your freedom to
+ share and change all versions of a program-to make sure it remains free
+ software for all its users.  We, the Free Software Foundation, use the
+ GNU General Public License for most of our software; it applies also to
+ any other work released this way by its authors.  You can apply it to
+ your programs, too.
+ 
+    When we speak of free software, we are referring to freedom, not
+ price.  Our General Public Licenses are designed to make sure that you
+ have the freedom to distribute copies of free software (and charge for
+ them if you wish), that you receive source code or can get it if you
+ want it, that you can change the software or use pieces of it in new
+ free programs, and that you know you can do these things.
+ 
+    To protect your rights, we need to prevent others from denying you
+ these rights or asking you to surrender the rights.  Therefore, you have
+ certain responsibilities if you distribute copies of the software, or if
+ you modify it: responsibilities to respect the freedom of others.
+ 
+    For example, if you distribute copies of such a program, whether
+ gratis or for a fee, you must pass on to the recipients the same
+ freedoms that you received.  You must make sure that they, too, receive
+ or can get the source code.  And you must show them these terms so they
+ know their rights.
+ 
+    Developers that use the GNU GPL protect your rights with two steps:
+ (1) assert copyright on the software, and (2) offer you this License
+ giving you legal permission to copy, distribute and/or modify it.
+ 
+    For the developers' and authors' protection, the GPL clearly explains
+ that there is no warranty for this free software.  For both users' and
+ authors' sake, the GPL requires that modified versions be marked as
+ changed, so that their problems will not be attributed erroneously to
+ authors of previous versions.
+ 
+    Some devices are designed to deny users access to install or run
+ modified versions of the software inside them, although the manufacturer
+ can do so.  This is fundamentally incompatible with the aim of
+ protecting users' freedom to change the software.  The systematic
+ pattern of such abuse occurs in the area of products for individuals to
+ use, which is precisely where it is most unacceptable.  Therefore, we
+ have designed this version of the GPL to prohibit the practice for those
+ products.  If such problems arise substantially in other domains, we
+ stand ready to extend this provision to those domains in future versions
+ of the GPL, as needed to protect the freedom of users.
+ 
+    Finally, every program is threatened constantly by software patents.
+ States should not allow patents to restrict development and use of
+ software on general-purpose computers, but in those that do, we wish to
+ avoid the special danger that patents applied to a free program could
+ make it effectively proprietary.  To prevent this, the GPL assures that
+ patents cannot be used to render the program non-free.
+ 
+    The precise terms and conditions for copying, distribution and
+ modification follow.
+ 
+ TERMS AND CONDITIONS
+ ====================
+ 
+   0. Definitions.
+ 
+      "This License" refers to version 3 of the GNU General Public
+      License.
+ 
+      "Copyright" also means copyright-like laws that apply to other
+      kinds of works, such as semiconductor masks.
+ 
+      "The Program" refers to any copyrightable work licensed under this
+      License.  Each licensee is addressed as "you".  "Licensees" and
+      "recipients" may be individuals or organizations.
+ 
+      To "modify" a work means to copy from or adapt all or part of the
+      work in a fashion requiring copyright permission, other than the
+      making of an exact copy.  The resulting work is called a "modified
+      version" of the earlier work or a work "based on" the earlier work.
+ 
+      A "covered work" means either the unmodified Program or a work
+      based on the Program.
+ 
+      To "propagate" a work means to do anything with it that, without
+      permission, would make you directly or secondarily liable for
+      infringement under applicable copyright law, except executing it on
+      a computer or modifying a private copy.  Propagation includes
+      copying, distribution (with or without modification), making
+      available to the public, and in some countries other activities as
+      well.
+ 
+      To "convey" a work means any kind of propagation that enables other
+      parties to make or receive copies.  Mere interaction with a user
+      through a computer network, with no transfer of a copy, is not
+      conveying.
+ 
+      An interactive user interface displays "Appropriate Legal Notices"
+      to the extent that it includes a convenient and prominently visible
+      feature that (1) displays an appropriate copyright notice, and (2)
+      tells the user that there is no warranty for the work (except to
+      the extent that warranties are provided), that licensees may convey
+      the work under this License, and how to view a copy of this
+      License.  If the interface presents a list of user commands or
+      options, such as a menu, a prominent item in the list meets this
+      criterion.
+ 
+   1. Source Code.
+ 
+      The "source code" for a work means the preferred form of the work
+      for making modifications to it.  "Object code" means any non-source
+      form of a work.
+ 
+      A "Standard Interface" means an interface that either is an
+      official standard defined by a recognized standards body, or, in
+      the case of interfaces specified for a particular programming
+      language, one that is widely used among developers working in that
+      language.
+ 
+      The "System Libraries" of an executable work include anything,
+      other than the work as a whole, that (a) is included in the normal
+      form of packaging a Major Component, but which is not part of that
+      Major Component, and (b) serves only to enable use of the work with
+      that Major Component, or to implement a Standard Interface for
+      which an implementation is available to the public in source code
+      form.  A "Major Component", in this context, means a major
+      essential component (kernel, window system, and so on) of the
+      specific operating system (if any) on which the executable work
+      runs, or a compiler used to produce the work, or an object code
+      interpreter used to run it.
+ 
+      The "Corresponding Source" for a work in object code form means all
+      the source code needed to generate, install, and (for an executable
+      work) run the object code and to modify the work, including scripts
+      to control those activities.  However, it does not include the
+      work's System Libraries, or general-purpose tools or generally
+      available free programs which are used unmodified in performing
+      those activities but which are not part of the work.  For example,
+      Corresponding Source includes interface definition files associated
+      with source files for the work, and the source code for shared
+      libraries and dynamically linked subprograms that the work is
+      specifically designed to require, such as by intimate data
+      communication or control flow between those subprograms and other
+      parts of the work.
+ 
+      The Corresponding Source need not include anything that users can
+      regenerate automatically from other parts of the Corresponding
+      Source.
+ 
+      The Corresponding Source for a work in source code form is that
+      same work.
+ 
+   2. Basic Permissions.
+ 
+      All rights granted under this License are granted for the term of
+      copyright on the Program, and are irrevocable provided the stated
+      conditions are met.  This License explicitly affirms your unlimited
+      permission to run the unmodified Program.  The output from running
+      a covered work is covered by this License only if the output, given
+      its content, constitutes a covered work.  This License acknowledges
+      your rights of fair use or other equivalent, as provided by
+      copyright law.
+ 
+      You may make, run and propagate covered works that you do not
+      convey, without conditions so long as your license otherwise
+      remains in force.  You may convey covered works to others for the
+      sole purpose of having them make modifications exclusively for you,
+      or provide you with facilities for running those works, provided
+      that you comply with the terms of this License in conveying all
+      material for which you do not control copyright.  Those thus making
+      or running the covered works for you must do so exclusively on your
+      behalf, under your direction and control, on terms that prohibit
+      them from making any copies of your copyrighted material outside
+      their relationship with you.
+ 
+      Conveying under any other circumstances is permitted solely under
+      the conditions stated below.  Sublicensing is not allowed; section
+      10 makes it unnecessary.
+ 
+   3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+ 
+      No covered work shall be deemed part of an effective technological
+      measure under any applicable law fulfilling obligations under
+      article 11 of the WIPO copyright treaty adopted on 20 December
+      1996, or similar laws prohibiting or restricting circumvention of
+      such measures.
+ 
+      When you convey a covered work, you waive any legal power to forbid
+      circumvention of technological measures to the extent such
+      circumvention is effected by exercising rights under this License
+      with respect to the covered work, and you disclaim any intention to
+      limit operation or modification of the work as a means of
+      enforcing, against the work's users, your or third parties' legal
+      rights to forbid circumvention of technological measures.
+ 
+   4. Conveying Verbatim Copies.
+ 
+      You may convey verbatim copies of the Program's source code as you
+      receive it, in any medium, provided that you conspicuously and
+      appropriately publish on each copy an appropriate copyright notice;
+      keep intact all notices stating that this License and any
+      non-permissive terms added in accord with section 7 apply to the
+      code; keep intact all notices of the absence of any warranty; and
+      give all recipients a copy of this License along with the Program.
+ 
+      You may charge any price or no price for each copy that you convey,
+      and you may offer support or warranty protection for a fee.
+ 
+   5. Conveying Modified Source Versions.
+ 
+      You may convey a work based on the Program, or the modifications to
+      produce it from the Program, in the form of source code under the
+      terms of section 4, provided that you also meet all of these
+      conditions:
+ 
+        a. The work must carry prominent notices stating that you
+           modified it, and giving a relevant date.
+ 
+        b. The work must carry prominent notices stating that it is
+           released under this License and any conditions added under
+           section 7.  This requirement modifies the requirement in
+           section 4 to "keep intact all notices".
+ 
+        c. You must license the entire work, as a whole, under this
+           License to anyone who comes into possession of a copy.  This
+           License will therefore apply, along with any applicable
+           section 7 additional terms, to the whole of the work, and all
+           its parts, regardless of how they are packaged.  This License
+           gives no permission to license the work in any other way, but
+           it does not invalidate such permission if you have separately
+           received it.
+ 
+        d. If the work has interactive user interfaces, each must display
+           Appropriate Legal Notices; however, if the Program has
+           interactive interfaces that do not display Appropriate Legal
+           Notices, your work need not make them do so.
+ 
+      A compilation of a covered work with other separate and independent
+      works, which are not by their nature extensions of the covered
+      work, and which are not combined with it such as to form a larger
+      program, in or on a volume of a storage or distribution medium, is
+      called an "aggregate" if the compilation and its resulting
+      copyright are not used to limit the access or legal rights of the
+      compilation's users beyond what the individual works permit.
+      Inclusion of a covered work in an aggregate does not cause this
+      License to apply to the other parts of the aggregate.
+ 
+   6. Conveying Non-Source Forms.
+ 
+      You may convey a covered work in object code form under the terms
+      of sections 4 and 5, provided that you also convey the
+      machine-readable Corresponding Source under the terms of this
+      License, in one of these ways:
+ 
+        a. Convey the object code in, or embodied in, a physical product
+           (including a physical distribution medium), accompanied by the
+           Corresponding Source fixed on a durable physical medium
+           customarily used for software interchange.
+ 
+        b. Convey the object code in, or embodied in, a physical product
+           (including a physical distribution medium), accompanied by a
+           written offer, valid for at least three years and valid for as
+           long as you offer spare parts or customer support for that
+           product model, to give anyone who possesses the object code
+           either (1) a copy of the Corresponding Source for all the
+           software in the product that is covered by this License, on a
+           durable physical medium customarily used for software
+           interchange, for a price no more than your reasonable cost of
+           physically performing this conveying of source, or (2) access
+           to copy the Corresponding Source from a network server at no
+           charge.
+ 
+        c. Convey individual copies of the object code with a copy of the
+           written offer to provide the Corresponding Source.  This
+           alternative is allowed only occasionally and noncommercially,
+           and only if you received the object code with such an offer,
+           in accord with subsection 6b.
+ 
+        d. Convey the object code by offering access from a designated
+           place (gratis or for a charge), and offer equivalent access to
+           the Corresponding Source in the same way through the same
+           place at no further charge.  You need not require recipients
+           to copy the Corresponding Source along with the object code.
+           If the place to copy the object code is a network server, the
+           Corresponding Source may be on a different server (operated by
+           you or a third party) that supports equivalent copying
+           facilities, provided you maintain clear directions next to the
+           object code saying where to find the Corresponding Source.
+           Regardless of what server hosts the Corresponding Source, you
+           remain obligated to ensure that it is available for as long as
+           needed to satisfy these requirements.
+ 
+        e. Convey the object code using peer-to-peer transmission,
+           provided you inform other peers where the object code and
+           Corresponding Source of the work are being offered to the
+           general public at no charge under subsection 6d.
+ 
+      A separable portion of the object code, whose source code is
+      excluded from the Corresponding Source as a System Library, need
+      not be included in conveying the object code work.
+ 
+      A "User Product" is either (1) a "consumer product", which means
+      any tangible personal property which is normally used for personal,
+      family, or household purposes, or (2) anything designed or sold for
+      incorporation into a dwelling.  In determining whether a product is
+      a consumer product, doubtful cases shall be resolved in favor of
+      coverage.  For a particular product received by a particular user,
+      "normally used" refers to a typical or common use of that class of
+      product, regardless of the status of the particular user or of the
+      way in which the particular user actually uses, or expects or is
+      expected to use, the product.  A product is a consumer product
+      regardless of whether the product has substantial commercial,
+      industrial or non-consumer uses, unless such uses represent the
+      only significant mode of use of the product.
+ 
+      "Installation Information" for a User Product means any methods,
+      procedures, authorization keys, or other information required to
+      install and execute modified versions of a covered work in that
+      User Product from a modified version of its Corresponding Source.
+      The information must suffice to ensure that the continued
+      functioning of the modified object code is in no case prevented or
+      interfered with solely because modification has been made.
+ 
+      If you convey an object code work under this section in, or with,
+      or specifically for use in, a User Product, and the conveying
+      occurs as part of a transaction in which the right of possession
+      and use of the User Product is transferred to the recipient in
+      perpetuity or for a fixed term (regardless of how the transaction
+      is characterized), the Corresponding Source conveyed under this
+      section must be accompanied by the Installation Information.  But
+      this requirement does not apply if neither you nor any third party
+      retains the ability to install modified object code on the User
+      Product (for example, the work has been installed in ROM).
+ 
+      The requirement to provide Installation Information does not
+      include a requirement to continue to provide support service,
+      warranty, or updates for a work that has been modified or installed
+      by the recipient, or for the User Product in which it has been
+      modified or installed.  Access to a network may be denied when the
+      modification itself materially and adversely affects the operation
+      of the network or violates the rules and protocols for
+      communication across the network.
+ 
+      Corresponding Source conveyed, and Installation Information
+      provided, in accord with this section must be in a format that is
+      publicly documented (and with an implementation available to the
+      public in source code form), and must require no special password
+      or key for unpacking, reading or copying.
+ 
+   7. Additional Terms.
+ 
+      "Additional permissions" are terms that supplement the terms of
+      this License by making exceptions from one or more of its
+      conditions.  Additional permissions that are applicable to the
+      entire Program shall be treated as though they were included in
+      this License, to the extent that they are valid under applicable
+      law.  If additional permissions apply only to part of the Program,
+      that part may be used separately under those permissions, but the
+      entire Program remains governed by this License without regard to
+      the additional permissions.
+ 
+      When you convey a copy of a covered work, you may at your option
+      remove any additional permissions from that copy, or from any part
+      of it.  (Additional permissions may be written to require their own
+      removal in certain cases when you modify the work.)  You may place
+      additional permissions on material, added by you to a covered work,
+      for which you have or can give appropriate copyright permission.
+ 
+      Notwithstanding any other provision of this License, for material
+      you add to a covered work, you may (if authorized by the copyright
+      holders of that material) supplement the terms of this License with
+      terms:
+ 
+        a. Disclaiming warranty or limiting liability differently from
+           the terms of sections 15 and 16 of this License; or
+ 
+        b. Requiring preservation of specified reasonable legal notices
+           or author attributions in that material or in the Appropriate
+           Legal Notices displayed by works containing it; or
+ 
+        c. Prohibiting misrepresentation of the origin of that material,
+           or requiring that modified versions of such material be marked
+           in reasonable ways as different from the original version; or
+ 
+        d. Limiting the use for publicity purposes of names of licensors
+           or authors of the material; or
+ 
+        e. Declining to grant rights under trademark law for use of some
+           trade names, trademarks, or service marks; or
+ 
+        f. Requiring indemnification of licensors and authors of that
+           material by anyone who conveys the material (or modified
+           versions of it) with contractual assumptions of liability to
+           the recipient, for any liability that these contractual
+           assumptions directly impose on those licensors and authors.
+ 
+      All other non-permissive additional terms are considered "further
+      restrictions" within the meaning of section 10.  If the Program as
+      you received it, or any part of it, contains a notice stating that
+      it is governed by this License along with a term that is a further
+      restriction, you may remove that term.  If a license document
+      contains a further restriction but permits relicensing or conveying
+      under this License, you may add to a covered work material governed
+      by the terms of that license document, provided that the further
+      restriction does not survive such relicensing or conveying.
+ 
+      If you add terms to a covered work in accord with this section, you
+      must place, in the relevant source files, a statement of the
+      additional terms that apply to those files, or a notice indicating
+      where to find the applicable terms.
+ 
+      Additional terms, permissive or non-permissive, may be stated in
+      the form of a separately written license, or stated as exceptions;
+      the above requirements apply either way.
+ 
+   8. Termination.
+ 
+      You may not propagate or modify a covered work except as expressly
+      provided under this License.  Any attempt otherwise to propagate or
+      modify it is void, and will automatically terminate your rights
+      under this License (including any patent licenses granted under the
+      third paragraph of section 11).
+ 
+      However, if you cease all violation of this License, then your
+      license from a particular copyright holder is reinstated (a)
+      provisionally, unless and until the copyright holder explicitly and
+      finally terminates your license, and (b) permanently, if the
+      copyright holder fails to notify you of the violation by some
+      reasonable means prior to 60 days after the cessation.
+ 
+      Moreover, your license from a particular copyright holder is
+      reinstated permanently if the copyright holder notifies you of the
+      violation by some reasonable means, this is the first time you have
+      received notice of violation of this License (for any work) from
+      that copyright holder, and you cure the violation prior to 30 days
+      after your receipt of the notice.
+ 
+      Termination of your rights under this section does not terminate
+      the licenses of parties who have received copies or rights from you
+      under this License.  If your rights have been terminated and not
+      permanently reinstated, you do not qualify to receive new licenses
+      for the same material under section 10.
+ 
+   9. Acceptance Not Required for Having Copies.
+ 
+      You are not required to accept this License in order to receive or
+      run a copy of the Program.  Ancillary propagation of a covered work
+      occurring solely as a consequence of using peer-to-peer
+      transmission to receive a copy likewise does not require
+      acceptance.  However, nothing other than this License grants you
+      permission to propagate or modify any covered work.  These actions
+      infringe copyright if you do not accept this License.  Therefore,
+      by modifying or propagating a covered work, you indicate your
+      acceptance of this License to do so.
+ 
+   10. Automatic Licensing of Downstream Recipients.
+ 
+      Each time you convey a covered work, the recipient automatically
+      receives a license from the original licensors, to run, modify and
+      propagate that work, subject to this License.  You are not
+      responsible for enforcing compliance by third parties with this
+      License.
+ 
+      An "entity transaction" is a transaction transferring control of an
+      organization, or substantially all assets of one, or subdividing an
+      organization, or merging organizations.  If propagation of a
+      covered work results from an entity transaction, each party to that
+      transaction who receives a copy of the work also receives whatever
+      licenses to the work the party's predecessor in interest had or
+      could give under the previous paragraph, plus a right to possession
+      of the Corresponding Source of the work from the predecessor in
+      interest, if the predecessor has it or can get it with reasonable
+      efforts.
+ 
+      You may not impose any further restrictions on the exercise of the
+      rights granted or affirmed under this License.  For example, you
+      may not impose a license fee, royalty, or other charge for exercise
+      of rights granted under this License, and you may not initiate
+      litigation (including a cross-claim or counterclaim in a lawsuit)
+      alleging that any patent claim is infringed by making, using,
+      selling, offering for sale, or importing the Program or any portion
+      of it.
+ 
+   11. Patents.
+ 
+      A "contributor" is a copyright holder who authorizes use under this
+      License of the Program or a work on which the Program is based.
+      The work thus licensed is called the contributor's "contributor
+      version".
+ 
+      A contributor's "essential patent claims" are all patent claims
+      owned or controlled by the contributor, whether already acquired or
+      hereafter acquired, that would be infringed by some manner,
+      permitted by this License, of making, using, or selling its
+      contributor version, but do not include claims that would be
+      infringed only as a consequence of further modification of the
+      contributor version.  For purposes of this definition, "control"
+      includes the right to grant patent sublicenses in a manner
+      consistent with the requirements of this License.
+ 
+      Each contributor grants you a non-exclusive, worldwide,
+      royalty-free patent license under the contributor's essential
+      patent claims, to make, use, sell, offer for sale, import and
+      otherwise run, modify and propagate the contents of its contributor
+      version.
+ 
+      In the following three paragraphs, a "patent license" is any
+      express agreement or commitment, however denominated, not to
+      enforce a patent (such as an express permission to practice a
+      patent or covenant not to sue for patent infringement).  To "grant"
+      such a patent license to a party means to make such an agreement or
+      commitment not to enforce a patent against the party.
+ 
+      If you convey a covered work, knowingly relying on a patent
+      license, and the Corresponding Source of the work is not available
+      for anyone to copy, free of charge and under the terms of this
+      License, through a publicly available network server or other
+      readily accessible means, then you must either (1) cause the
+      Corresponding Source to be so available, or (2) arrange to deprive
+      yourself of the benefit of the patent license for this particular
+      work, or (3) arrange, in a manner consistent with the requirements
+      of this License, to extend the patent license to downstream
+      recipients.  "Knowingly relying" means you have actual knowledge
+      that, but for the patent license, your conveying the covered work
+      in a country, or your recipient's use of the covered work in a
+      country, would infringe one or more identifiable patents in that
+      country that you have reason to believe are valid.
+ 
+      If, pursuant to or in connection with a single transaction or
+      arrangement, you convey, or propagate by procuring conveyance of, a
+      covered work, and grant a patent license to some of the parties
+      receiving the covered work authorizing them to use, propagate,
+      modify or convey a specific copy of the covered work, then the
+      patent license you grant is automatically extended to all
+      recipients of the covered work and works based on it.
+ 
+      A patent license is "discriminatory" if it does not include within
+      the scope of its coverage, prohibits the exercise of, or is
+      conditioned on the non-exercise of one or more of the rights that
+      are specifically granted under this License.  You may not convey a
+      covered work if you are a party to an arrangement with a third
+      party that is in the business of distributing software, under which
+      you make payment to the third party based on the extent of your
+      activity of conveying the work, and under which the third party
+      grants, to any of the parties who would receive the covered work
+      from you, a discriminatory patent license (a) in connection with
+      copies of the covered work conveyed by you (or copies made from
+      those copies), or (b) primarily for and in connection with specific
+      products or compilations that contain the covered work, unless you
+      entered into that arrangement, or that patent license was granted,
+      prior to 28 March 2007.
+ 
+      Nothing in this License shall be construed as excluding or limiting
+      any implied license or other defenses to infringement that may
+      otherwise be available to you under applicable patent law.
+ 
+   12. No Surrender of Others' Freedom.
+ 
+      If conditions are imposed on you (whether by court order, agreement
+      or otherwise) that contradict the conditions of this License, they
+      do not excuse you from the conditions of this License.  If you
+      cannot convey a covered work so as to satisfy simultaneously your
+      obligations under this License and any other pertinent obligations,
+      then as a consequence you may not convey it at all.  For example,
+      if you agree to terms that obligate you to collect a royalty for
+      further conveying from those to whom you convey the Program, the
+      only way you could satisfy both those terms and this License would
+      be to refrain entirely from conveying the Program.
+ 
+   13. Use with the GNU Affero General Public License.
+ 
+      Notwithstanding any other provision of this License, you have
+      permission to link or combine any covered work with a work licensed
+      under version 3 of the GNU Affero General Public License into a
+      single combined work, and to convey the resulting work.  The terms
+      of this License will continue to apply to the part which is the
+      covered work, but the special requirements of the GNU Affero
+      General Public License, section 13, concerning interaction through
+      a network will apply to the combination as such.
+ 
+   14. Revised Versions of this License.
+ 
+      The Free Software Foundation may publish revised and/or new
+      versions of the GNU General Public License from time to time.  Such
+      new versions will be similar in spirit to the present version, but
+      may differ in detail to address new problems or concerns.
+ 
+      Each version is given a distinguishing version number.  If the
+      Program specifies that a certain numbered version of the GNU
+      General Public License "or any later version" applies to it, you
+      have the option of following the terms and conditions either of
+      that numbered version or of any later version published by the Free
+      Software Foundation.  If the Program does not specify a version
+      number of the GNU General Public License, you may choose any
+      version ever published by the Free Software Foundation.
+ 
+      If the Program specifies that a proxy can decide which future
+      versions of the GNU General Public License can be used, that
+      proxy's public statement of acceptance of a version permanently
+      authorizes you to choose that version for the Program.
+ 
+      Later license versions may give you additional or different
+      permissions.  However, no additional obligations are imposed on any
+      author or copyright holder as a result of your choosing to follow a
+      later version.
+ 
+   15. Disclaimer of Warranty.
+ 
+      THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+      APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
+      COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
+      WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
+      INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+      MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE
+      RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
+      SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
+      NECESSARY SERVICING, REPAIR OR CORRECTION.
+ 
+   16. Limitation of Liability.
+ 
+      IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+      WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
+      AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR
+      DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+      CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
+      THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
+      BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+      PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+      PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
+      THE POSSIBILITY OF SUCH DAMAGES.
+ 
+   17. Interpretation of Sections 15 and 16.
+ 
+      If the disclaimer of warranty and limitation of liability provided
+      above cannot be given local legal effect according to their terms,
+      reviewing courts shall apply local law that most closely
+      approximates an absolute waiver of all civil liability in
+      connection with the Program, unless a warranty or assumption of
+      liability accompanies a copy of the Program in return for a fee.
+ 
+ END OF TERMS AND CONDITIONS
+ ===========================
+ 
+ How to Apply These Terms to Your New Programs
+ =============================================
+ 
+ If you develop a new program, and you want it to be of the greatest
+ possible use to the public, the best way to achieve this is to make it
+ free software which everyone can redistribute and change under these
+ terms.
+ 
+    To do so, attach the following notices to the program.  It is safest
+ to attach them to the start of each source file to most effectively
+ state the exclusion of warranty; and each file should have at least the
+ "copyright" line and a pointer to where the full notice is found.
+ 
+      ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
+      Copyright (C) YEAR NAME OF AUTHOR
+ 
+      This program 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 of the License, or (at
+      your option) any later version.
+ 
+      This program 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 this program.  If not, see <https://www.gnu.org/licenses/>.
+ 
+    Also add information on how to contact you by electronic and paper
+ mail.
+ 
+    If the program does terminal interaction, make it output a short
+ notice like this when it starts in an interactive mode:
+ 
+      PROGRAM Copyright (C) YEAR NAME OF AUTHOR
+      This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'.
+      This is free software, and you are welcome to redistribute it
+      under certain conditions; type 'show c' for details.
+ 
+    The hypothetical commands 'show w' and 'show c' should show the
+ appropriate parts of the General Public License.  Of course, your
+ program's commands might be different; for a GUI interface, you would
+ use an "about box".
+ 
+    You should also get your employer (if you work as a programmer) or
+ school, if any, to sign a "copyright disclaimer" for the program, if
+ necessary.  For more information on this, and how to apply and follow
+ the GNU GPL, see <https://www.gnu.org/licenses/>.
+ 
+    The GNU General Public License does not permit incorporating your
+ program into proprietary programs.  If your program is a subroutine
+ library, you may consider it more useful to permit linking proprietary
+ applications with the library.  If this is what you want to do, use the
+ GNU Lesser General Public License instead of this License.  But first,
+ please read <https://www.gnu.org/licenses/why-not-lgpl.html>.
+ 
+ 
+ File: m2.info,  Node: Contributing,  Next: EBNF,  Prev: Copying,  Up: Top
+ 
+ Contributing to GNU Modula-2
+ ============================
+ 
+ Please do and please read the GNU Emacs info under
+ 
+      * Standards: (standards).       GNU coding standards.
+      * Intellectual Property::       Keeping Free Software Free
+      * Reading Non-Free Code::       Referring to Proprietary Programs
+      * Contributions::               Accepting Contributions
+ 
+    You might consider joining the GM2 Mailing list before you start
+ coding.  The mailing list may be subscribed via a web interface
+ <http://lists.nongnu.org/mailman/listinfo/gm2> or via email
+ <gm2-subscribe@nongnu.org>.
+ 
+    Many thanks and enjoy your coding!
+ 
+ 
+ File: m2.info,  Node: EBNF,  Next: Libraries,  Prev: Contributing,  Up: Top
+ 
+ 3 EBNF of GNU Modula-2
+ **********************
+ 
+ This chapter contains the EBNF of GNU Modula-2.  This grammar currently
+ supports both PIM and ISO dialects.  The rules here are automatically
+ extracted from the crammer files in GNU Modula-2 and serve to document
+ the syntax of the extensions described earlier and how they fit in with
+ the base language.
+ 
+    Note that the first six productions are built into the lexical
+ analysis phase.
+ 
+      Ident := is a builtin and checks for an identifier
+             =:
+ 
+      Integer := is a builtin and checks for an integer
+               =:
+ 
+      Real := is a builtin and checks for an real constant
+            =:
+ 
+      string := is a builtin and checks for an string constant
+              =:
+ 
+      FileUnit := ( DefinitionModule  |
+                    ImplementationOrProgramModule  )
+                =:
+ 
+      ProgramModule := 'MODULE' Ident [ Priority  ] ';' {
+         Import  } Block Ident '.'
+                     =:
+ 
+      ImplementationModule := 'IMPLEMENTATION' 'MODULE' Ident
+                              [ Priority  ] ';' { Import
+                                                    } Block
+                              Ident '.'
+                            =:
+ 
+      ImplementationOrProgramModule := ImplementationModule  |
+                                       ProgramModule
+                                     =:
+ 
+      Number := Integer  | Real
+              =:
+ 
+      Qualident := Ident { '.' Ident  }
+                 =:
+ 
+      ConstantDeclaration := Ident '=' ConstExpression
+                           =:
+ 
+      ConstExpression := SimpleConstExpr [ Relation SimpleConstExpr  ]
+                       =:
+ 
+      Relation := '='  | '#'  | '<>'  | '<'  | '<='  |
+                  '>'  | '>='  | 'IN'
+                =:
+ 
+      SimpleConstExpr := UnaryOrConstTerm { AddOperator
+                                             ConstTerm  }
+                       =:
+ 
+      UnaryOrConstTerm := '+' ConstTerm  |
+                          '-' ConstTerm  |
+                          ConstTerm
+                        =:
+ 
+      AddOperator := '+'  | '-'  | 'OR'
+                   =:
+ 
+      ConstTerm := ConstFactor { MulOperator ConstFactor  }
+                 =:
+ 
+      MulOperator := '*'  | '/'  | 'DIV'  | 'MOD'  |
+                     'REM'  | 'AND'  | '&'
+                   =:
+ 
+      ConstFactor := Number  | ConstString  |
+                     ConstSetOrQualidentOrFunction  |
+                     '(' ConstExpression ')'  |
+                     'NOT' ConstFactor  |
+                     ConstAttribute
+                   =:
+ 
+      ConstString := string
+                   =:
+ 
+      ComponentElement := ConstExpression [ '..' ConstExpression  ]
+                        =:
+ 
+      ComponentValue := ComponentElement [ 'BY' ConstExpression  ]
+                      =:
+ 
+      ArraySetRecordValue := ComponentValue { ',' ComponentValue  }
+                           =:
+ 
+      Constructor := '{' [ ArraySetRecordValue  ] '}'
+                   =:
+ 
+      ConstSetOrQualidentOrFunction := Constructor  |
+                                       Qualident [ Constructor  |
+                                                   ConstActualParameters  ]
+                                     =:
+ 
+      ConstActualParameters := '(' [ ExpList  ] ')'
+                             =:
+ 
+      ConstAttribute := '__ATTRIBUTE__' '__BUILTIN__' '('
+                        '(' ConstAttributeExpression ')'
+                        ')'
+                      =:
+ 
+      ConstAttributeExpression := Ident  | '<' Qualident
+                                  ',' Ident '>'
+                                =:
+ 
+      ByteAlignment := '<*' AttributeExpression '*>'
+                     =:
+ 
+      Alignment := [ ByteAlignment  ]
+                 =:
+ 
+      TypeDeclaration := Ident '=' Type Alignment
+                       =:
+ 
+      Type := SimpleType  | ArrayType  | RecordType  |
+              SetType  | PointerType  | ProcedureType
+            =:
+ 
+      SimpleType := Qualident [ SubrangeType  ]  |
+                    Enumeration  | SubrangeType
+                  =:
+ 
+      Enumeration := '(' IdentList ')'
+                   =:
+ 
+      IdentList := Ident { ',' Ident  }
+                 =:
+ 
+      SubrangeType := '[' ConstExpression '..' ConstExpression
+                      ']'
+                    =:
+ 
+      ArrayType := 'ARRAY' SimpleType { ',' SimpleType  }
+                   'OF' Type
+                 =:
+ 
+      RecordType := 'RECORD' [ DefaultRecordAttributes  ]
+                    FieldListSequence 'END'
+                  =:
+ 
+      DefaultRecordAttributes := '<*' AttributeExpression
+                                 '*>'
+                               =:
+ 
+      RecordFieldPragma := [ '<*' FieldPragmaExpression {
+         ',' FieldPragmaExpression  } '*>'  ]
+                         =:
+ 
+      FieldPragmaExpression := Ident [ '(' ConstExpression
+                                       ')'  ]
+                             =:
+ 
+      AttributeExpression := Ident '(' ConstExpression ')'
+                           =:
+ 
+      FieldListSequence := FieldListStatement { ';' FieldListStatement  }
+                         =:
+ 
+      FieldListStatement := [ FieldList  ]
+                          =:
+ 
+      FieldList := IdentList ':' Type RecordFieldPragma  |
+                   'CASE' CaseTag 'OF' Varient { '|' Varient  }
+                   [ 'ELSE' FieldListSequence  ] 'END'
+                 =:
+ 
+      TagIdent := [ Ident  ]
+                =:
+ 
+      CaseTag := TagIdent [ ':' Qualident  ]
+               =:
+ 
+      Varient := [ VarientCaseLabelList ':' FieldListSequence  ]
+               =:
+ 
+      VarientCaseLabelList := VarientCaseLabels { ',' VarientCaseLabels  }
+                            =:
+ 
+      VarientCaseLabels := ConstExpression [ '..' ConstExpression  ]
+                         =:
+ 
+      CaseLabelList := CaseLabels { ',' CaseLabels  }
+                     =:
+ 
+      CaseLabels := ConstExpression [ '..' ConstExpression  ]
+                  =:
+ 
+      SetType := ( 'SET'  | 'PACKEDSET'  ) 'OF' SimpleType
+               =:
+ 
+      PointerType := 'POINTER' 'TO' Type
+                   =:
+ 
+      ProcedureType := 'PROCEDURE' [ FormalTypeList  ]
+                     =:
+ 
+      FormalTypeList := '(' ( ')' FormalReturn  |
+                              ProcedureParameters ')' FormalReturn  )
+                      =:
+ 
+      FormalReturn := [ ':' OptReturnType  ]
+                    =:
+ 
+      OptReturnType := '[' Qualident ']'  |
+                       Qualident
+                     =:
+ 
+      ProcedureParameters := ProcedureParameter { ',' ProcedureParameter  }
+                           =:
+ 
+      ProcedureParameter := '...'  | 'VAR' FormalType  |
+                            FormalType
+                          =:
+ 
+      VarIdent := Ident [ '[' ConstExpression ']'  ]
+                =:
+ 
+      VariableDeclaration := VarIdentList ':' Type Alignment
+                           =:
+ 
+      VarIdentList := VarIdent { ',' VarIdent  }
+                    =:
+ 
+      Designator := Qualident { SubDesignator  }
+                  =:
+ 
+      SubDesignator := '.' Ident  | '[' ExpList ']'  |
+                       '^'
+                     =:
+ 
+      ExpList := Expression { ',' Expression  }
+               =:
+ 
+      Expression := SimpleExpression [ Relation SimpleExpression  ]
+                  =:
+ 
+      SimpleExpression := [ '+'  | '-'  ] Term { AddOperator
+                                                  Term  }
+                        =:
+ 
+      Term := Factor { MulOperator Factor  }
+            =:
+ 
+      Factor := Number  | string  | SetOrDesignatorOrFunction  |
+                '(' Expression ')'  |
+                'NOT' Factor  | ConstAttribute
+              =:
+ 
+      SetOrDesignatorOrFunction := ( Qualident [ Constructor  |
+                                                 SimpleDes
+                                                 [ ActualParameters  ]  ]  |
+                                     Constructor  )
+                                 =:
+ 
+      SimpleDes := { '.' Ident  | '[' ExpList ']'  |
+                      '^'  }
+                 =:
+ 
+      ActualParameters := '(' [ ExpList  ] ')'
+                        =:
+ 
+      Statement := [ AssignmentOrProcedureCall  |
+                     IfStatement  | CaseStatement  |
+                     WhileStatement  | RepeatStatement  |
+                     LoopStatement  | ForStatement  |
+                     WithStatement  | AsmStatement  |
+                     'EXIT'  | 'RETURN' [ Expression  ]  |
+                     RetryStatement  ]
+                 =:
+ 
+      RetryStatement := 'RETRY'
+                      =:
+ 
+      AssignmentOrProcedureCall := Designator ( ':=' Expression  |
+                                                ActualParameters  |
+                                                 )
+                                 =:
+ 
+      StatementSequence := Statement { ';' Statement  }
+                         =:
+ 
+      IfStatement := 'IF' Expression 'THEN' StatementSequence
+                     { 'ELSIF' Expression 'THEN' StatementSequence  }
+                     [ 'ELSE' StatementSequence  ] 'END'
+                   =:
+ 
+      CaseStatement := 'CASE' Expression 'OF' Case { '|'
+                                                      Case  }
+                       [ 'ELSE' StatementSequence  ] 'END'
+                     =:
+ 
+      Case := [ CaseLabelList ':' StatementSequence  ]
+            =:
+ 
+      WhileStatement := 'WHILE' Expression 'DO' StatementSequence
+                        'END'
+                      =:
+ 
+      RepeatStatement := 'REPEAT' StatementSequence 'UNTIL'
+                         Expression
+                       =:
+ 
+      ForStatement := 'FOR' Ident ':=' Expression 'TO' Expression
+                      [ 'BY' ConstExpression  ] 'DO' StatementSequence
+                      'END'
+                    =:
+ 
+      LoopStatement := 'LOOP' StatementSequence 'END'
+                     =:
+ 
+      WithStatement := 'WITH' Designator 'DO' StatementSequence
+                       'END'
+                     =:
+ 
+      ProcedureDeclaration := ProcedureHeading ';' ( ProcedureBlock
+                                                     Ident
+                                                      )
+                            =:
+ 
+      DefineBuiltinProcedure := [ '__ATTRIBUTE__' '__BUILTIN__'
+                                  '(' '(' Ident ')' ')'  |
+                                  '__INLINE__'  ]
+                              =:
+ 
+      ProcedureHeading := 'PROCEDURE' DefineBuiltinProcedure
+                          ( Ident [ FormalParameters  ] AttributeNoReturn  )
+                        =:
+ 
+      AttributeNoReturn := [ '<*' Ident '*>'  ]
+                         =:
+ 
+      AttributeUnused := [ '<*' Ident '*>'  ]
+                       =:
+ 
+      Builtin := [ '__BUILTIN__'  | '__INLINE__'  ]
+               =:
+ 
+      DefProcedureHeading := 'PROCEDURE' Builtin ( Ident
+                                                   [ DefFormalParameters  ]
+                                                   AttributeNoReturn  )
+ 
+                           =:
+ 
+      ProcedureBlock := { Declaration  } [ 'BEGIN' BlockBody  ]
+                        'END'
+                      =:
+ 
+      Block := { Declaration  } InitialBlock FinalBlock
+               'END'
+             =:
+ 
+      InitialBlock := [ 'BEGIN' BlockBody  ]
+                    =:
+ 
+      FinalBlock := [ 'FINALLY' BlockBody  ]
+                  =:
+ 
+      BlockBody := NormalPart [ 'EXCEPT' ExceptionalPart  ]
+                 =:
+ 
+      NormalPart := StatementSequence
+                  =:
+ 
+      ExceptionalPart := StatementSequence
+                       =:
+ 
+      Declaration := 'CONST' { ConstantDeclaration ';'  }  |
+                     'TYPE' { TypeDeclaration ';'  }  |
+                     'VAR' { VariableDeclaration ';'  }  |
+                     ProcedureDeclaration ';'  |
+                     ModuleDeclaration ';'
+                   =:
+ 
+      DefFormalParameters := '(' [ DefMultiFPSection  ] ')'
+                             FormalReturn
+                           =:
+ 
+      DefMultiFPSection := DefExtendedFP  |
+                           FPSection [ ';' DefMultiFPSection  ]
+                         =:
+ 
+      FormalParameters := '(' [ MultiFPSection  ] ')' FormalReturn
+                        =:
+ 
+      MultiFPSection := ExtendedFP  | FPSection [ ';' MultiFPSection  ]
+                      =:
+ 
+      FPSection := NonVarFPSection  | VarFPSection
+                 =:
+ 
+      DefExtendedFP := DefOptArg  | '...'
+                     =:
+ 
+      ExtendedFP := OptArg  | '...'
+                  =:
+ 
+      VarFPSection := 'VAR' IdentList ':' FormalType [ AttributeUnused  ]
+                    =:
+ 
+      NonVarFPSection := IdentList ':' FormalType [ AttributeUnused  ]
+                       =:
+ 
+      OptArg := '[' Ident ':' FormalType [ '=' ConstExpression  ]
+                ']'
+              =:
+ 
+      DefOptArg := '[' Ident ':' FormalType '=' ConstExpression
+                   ']'
+                 =:
+ 
+      FormalType := { 'ARRAY' 'OF'  } Qualident
+                  =:
+ 
+      ModuleDeclaration := 'MODULE' Ident [ Priority  ] ';'
+                           { Import  } [ Export  ] Block
+                           Ident
+                         =:
+ 
+      Priority := '[' ConstExpression ']'
+                =:
+ 
+      Export := 'EXPORT' ( 'QUALIFIED' IdentList  |
+                           'UNQUALIFIED' IdentList  |
+                           IdentList  ) ';'
+              =:
+ 
+      Import := 'FROM' Ident 'IMPORT' IdentList ';'  |
+                'IMPORT' IdentList ';'
+              =:
+ 
+      DefinitionModule := 'DEFINITION' 'MODULE' [ 'FOR' string
+                                                   ] Ident
+                          ';' { Import  } [ Export  ] {
+         Definition  } 'END' Ident '.'
+                        =:
+ 
+      Definition := 'CONST' { ConstantDeclaration ';'  }  |
+                    'TYPE' { Ident ( ';'  | '=' Type Alignment
+                                      ';'  )  }  |
+                    'VAR' { VariableDeclaration ';'  }  |
+                    DefProcedureHeading ';'
+                  =:
+ 
+      AsmStatement := 'ASM' [ 'VOLATILE'  ] '(' AsmOperands
+                      ')'
+                    =:
+ 
+      NamedOperand := '[' Ident ']'
+                    =:
+ 
+      AsmOperandName := [ NamedOperand  ]
+                      =:
+ 
+      AsmOperands := ConstExpression ':' AsmList [ ':' AsmList
+                                                   [ ':'
+                                                     TrashList  ]  ]
+                   =:
+ 
+      AsmList := [ AsmElement  ] { ',' AsmElement  }
+               =:
+ 
+      AsmElement := AsmOperandName ConstExpression '(' Expression
+                    ')'
+                  =:
+ 
+      TrashList := [ ConstExpression  ] { ',' ConstExpression  }
+                 =:
+ 
+ 
+ File: m2.info,  Node: Libraries,  Next: Indices,  Prev: EBNF,  Up: Top
+ 
+ 4 PIM and ISO library definitions
+ *********************************
+ 
+ This chapter contains M2F, PIM and ISO libraries.
+ 
+ * Menu:
+ 
+ * Base libraries::Basic M2F compatible libraries
+ * PIM and Logitech 3.0 Compatible::PIM and Logitech 3.0 compatible libraries
+ * PIM coroutine support::PIM compatible process support
+ * M2 ISO Libraries::ISO defined libraries
+ 
+ 
+ File: m2.info,  Node: Base libraries,  Next: PIM and Logitech 3.0 Compatible,  Up: Libraries
+ 
+ 4.1 Base libraries
+ ==================
+ 
+ These are the base libraries for the GNU Modula-2 compiler.  These
+ modules originally came from the M2F compiler and have been cleaned up
+ and extended.  They provide a basic interface to the underlying
+ operating system via libc.  They also include a number of libraries to
+ allow access to compiler built-ins.  Perhaps the largest difference to
+ PIM and ISO libraries is the 'DynamicString' module which declares the
+ type 'String'.  The heavy use of this opaque data type results in a
+ number of equivalent modules that can either handle 'ARRAY OF CHAR' or
+ 'String'.
+ 
+    These modules have been extensively tested and are used throughout
+ building the GNU Modula-2 compiler.
+ * Menu:
+ 
+ * gm2-libs/ASCII::ASCII.def
+ * gm2-libs/Args::Args.def
+ * gm2-libs/Assertion::Assertion.def
+ * gm2-libs/Break::Break.def
+ * gm2-libs/Builtins::Builtins.def
+ * gm2-libs/COROUTINES::COROUTINES.def
+ * gm2-libs/CmdArgs::CmdArgs.def
+ * gm2-libs/Debug::Debug.def
+ * gm2-libs/DynamicStrings::DynamicStrings.def
+ * gm2-libs/Environment::Environment.def
+ * gm2-libs/FIO::FIO.def
+ * gm2-libs/FormatStrings::FormatStrings.def
+ * gm2-libs/FpuIO::FpuIO.def
+ * gm2-libs/GetOpt::GetOpt.def
+ * gm2-libs/IO::IO.def
+ * gm2-libs/Indexing::Indexing.def
+ * gm2-libs/LMathLib0::LMathLib0.def
+ * gm2-libs/LegacyReal::LegacyReal.def
+ * gm2-libs/M2Dependent::M2Dependent.def
+ * gm2-libs/M2EXCEPTION::M2EXCEPTION.def
+ * gm2-libs/M2RTS::M2RTS.def
+ * gm2-libs/MathLib0::MathLib0.def
+ * gm2-libs/MemUtils::MemUtils.def
+ * gm2-libs/NumberIO::NumberIO.def
+ * gm2-libs/OptLib::OptLib.def
+ * gm2-libs/PushBackInput::PushBackInput.def
+ * gm2-libs/RTExceptions::RTExceptions.def
+ * gm2-libs/RTint::RTint.def
+ * gm2-libs/SArgs::SArgs.def
+ * gm2-libs/SCmdArgs::SCmdArgs.def
+ * gm2-libs/SEnvironment::SEnvironment.def
+ * gm2-libs/SFIO::SFIO.def
+ * gm2-libs/SMathLib0::SMathLib0.def
+ * gm2-libs/SYSTEM::SYSTEM.def
+ * gm2-libs/Scan::Scan.def
+ * gm2-libs/Selective::Selective.def
+ * gm2-libs/StdIO::StdIO.def
+ * gm2-libs/Storage::Storage.def
+ * gm2-libs/StrCase::StrCase.def
+ * gm2-libs/StrIO::StrIO.def
+ * gm2-libs/StrLib::StrLib.def
+ * gm2-libs/StringConvert::StringConvert.def
+ * gm2-libs/SysExceptions::SysExceptions.def
+ * gm2-libs/SysStorage::SysStorage.def
+ * gm2-libs/TimeString::TimeString.def
+ * gm2-libs/UnixArgs::UnixArgs.def
+ * gm2-libs/cbuiltin::cbuiltin.def
+ * gm2-libs/cgetopt::cgetopt.def
+ * gm2-libs/cxxabi::cxxabi.def
+ * gm2-libs/dtoa::dtoa.def
+ * gm2-libs/errno::errno.def
+ * gm2-libs/gdbif::gdbif.def
+ * gm2-libs/ldtoa::ldtoa.def
+ * gm2-libs/libc::libc.def
+ * gm2-libs/libm::libm.def
+ * gm2-libs/sckt::sckt.def
+ * gm2-libs/termios::termios.def
+ * gm2-libs/wrapc::wrapc.def
+ 
+ 
+ File: m2.info,  Node: gm2-libs/ASCII,  Next: gm2-libs/Args,  Up: Base libraries
+ 
+ 4.1.1 gm2-libs/ASCII
+ --------------------
+ 
+      DEFINITION MODULE ASCII ;
+ 
+      EXPORT QUALIFIED
+           nul, soh, stx, etx, eot, enq, ack, bel,
+           bs , ht , nl , vt , np , cr , so , si ,
+           dle, dc1, dc2, dc3, dc4, nak, syn, etb,
+           can, em , sub, esc, fs , gs , rs , us ,
+           sp ,  (* All the above are in order *)
+           lf, ff, eof, del, tab, EOL ;
+ 
+      (*
+         Note that lf, eof and EOL are added.
+      *)
+ 
+      CONST
+           nul=000C; soh=001C; stx=002C; etx=003C;
+           eot=004C; enq=005C; ack=006C; bel=007C;
+           bs =010C; ht =011C; nl =012C; vt =013C;
+           np =014C; cr =015C; so =016C; si =017C;
+           dle=020C; dc1=021C; dc2=022C; dc3=023C;
+           dc4=024C; nak=025C; syn=026C; etb=027C;
+           can=030C; em =031C; sub=032C; esc=033C;
+           fs =034C; gs =035C; rs =036C; us =037C;
+           sp =040C; (* All the above are in order *)
+           lf =nl  ; ff =np  ; eof=eot ; tab=ht  ;
+           del=177C; EOL=nl  ;
+ 
+      END ASCII.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/Args,  Next: gm2-libs/Assertion,  Prev: gm2-libs/ASCII,  Up: Base libraries
+ 
+ 4.1.2 gm2-libs/Args
+ -------------------
+ 
+      DEFINITION MODULE Args ;
+ 
+      EXPORT QUALIFIED GetArg, Narg ;
+ 
+ 
+      (*
+         GetArg - returns the nth argument from the command line.
+                  The success of the operation is returned.
+      *)
+ 
+      PROCEDURE GetArg (VAR a: ARRAY OF CHAR; n: CARDINAL) : BOOLEAN ;
+ 
+ 
+      (*
+         Narg - returns the number of arguments available from
+                command line.
+      *)
+ 
+      PROCEDURE Narg () : CARDINAL ;
+ 
+ 
+      END Args.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/Assertion,  Next: gm2-libs/Break,  Prev: gm2-libs/Args,  Up: Base libraries
+ 
+ 4.1.3 gm2-libs/Assertion
+ ------------------------
+ 
+      DEFINITION MODULE Assertion ;
+ 
+      EXPORT QUALIFIED Assert ;
+ 
+ 
+      (*
+         Assert - tests the boolean Condition, if it fails then HALT
+                  is called.
+      *)
+ 
+      PROCEDURE Assert (Condition: BOOLEAN) ;
+ 
+ 
+      END Assertion.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/Break,  Next: gm2-libs/Builtins,  Prev: gm2-libs/Assertion,  Up: Base libraries
+ 
+ 4.1.4 gm2-libs/Break
+ --------------------
+ 
+      DEFINITION MODULE Break ;
+ 
+      END Break.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/Builtins,  Next: gm2-libs/COROUTINES,  Prev: gm2-libs/Break,  Up: Base libraries
+ 
+ 4.1.5 gm2-libs/Builtins
+ -----------------------
+ 
+      DEFINITION MODULE Builtins ;
+ 
+      FROM SYSTEM IMPORT ADDRESS ;
+ 
+      (* floating point intrinsic procedure functions *)
+ 
+      PROCEDURE __BUILTIN__ isfinitef (x: SHORTREAL) : INTEGER ;
+      PROCEDURE __BUILTIN__ isfinite (x: REAL) : INTEGER ;
+      PROCEDURE __BUILTIN__ isfinitel (x: LONGREAL) : INTEGER ;
+ 
+      PROCEDURE __BUILTIN__ sinf (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE __BUILTIN__ sin (x: REAL) : REAL ;
+      PROCEDURE __BUILTIN__ sinl (x: LONGREAL) : LONGREAL ;
+ 
+      PROCEDURE __BUILTIN__ cosf (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE __BUILTIN__ cos (x: REAL) : REAL ;
+      PROCEDURE __BUILTIN__ cosl (x: LONGREAL) : LONGREAL ;
+ 
+      PROCEDURE __BUILTIN__ sqrtf (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE __BUILTIN__ sqrt (x: REAL) : REAL ;
+      PROCEDURE __BUILTIN__ sqrtl (x: LONGREAL) : LONGREAL ;
+ 
+      PROCEDURE __BUILTIN__ atan2f (x, y: SHORTREAL) : SHORTREAL ;
+      PROCEDURE __BUILTIN__ atan2 (x, y: REAL) : REAL ;
+      PROCEDURE __BUILTIN__ atan2l (x, y: LONGREAL) : LONGREAL ;
+ 
+      PROCEDURE __BUILTIN__ fabsf (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE __BUILTIN__ fabs (x: REAL) : REAL ;
+      PROCEDURE __BUILTIN__ fabsl (x: LONGREAL) : LONGREAL ;
+ 
+      PROCEDURE __BUILTIN__ logf (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE __BUILTIN__ log (x: REAL) : REAL ;
+      PROCEDURE __BUILTIN__ logl (x: LONGREAL) : LONGREAL ;
+ 
+      PROCEDURE __BUILTIN__ expf (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE __BUILTIN__ exp (x: REAL) : REAL ;
+      PROCEDURE __BUILTIN__ expl (x: LONGREAL) : LONGREAL ;
+ 
+      PROCEDURE __BUILTIN__ log10f (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE __BUILTIN__ log10 (x: REAL) : REAL ;
+      PROCEDURE __BUILTIN__ log10l (x: LONGREAL) : LONGREAL ;
+ 
+      PROCEDURE __BUILTIN__ exp10f (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE __BUILTIN__ exp10 (x: REAL) : REAL ;
+      PROCEDURE __BUILTIN__ exp10l (x: LONGREAL) : LONGREAL ;
+ 
+      PROCEDURE __BUILTIN__ ilogbf (x: SHORTREAL) : INTEGER ;
+      PROCEDURE __BUILTIN__ ilogb (x: REAL) : INTEGER ;
+      PROCEDURE __BUILTIN__ ilogbl (x: LONGREAL) : INTEGER ;
+ 
+      PROCEDURE __BUILTIN__ huge_val () : REAL ;
+      PROCEDURE __BUILTIN__ huge_valf () : SHORTREAL ;
+      PROCEDURE __BUILTIN__ huge_vall () : LONGREAL ;
+ 
+      PROCEDURE __BUILTIN__ modf (x: REAL; VAR y: REAL) : REAL ;
+      PROCEDURE __BUILTIN__ modff (x: SHORTREAL;
+                                   VAR y: SHORTREAL) : SHORTREAL ;
+      PROCEDURE __BUILTIN__ modfl (x: LONGREAL; VAR y: LONGREAL) : LONGREAL ;
+ 
+      PROCEDURE __BUILTIN__ signbit (r: REAL) : INTEGER ;
+      PROCEDURE __BUILTIN__ signbitf (s: SHORTREAL) : INTEGER ;
+      PROCEDURE __BUILTIN__ signbitl (l: LONGREAL) : INTEGER ;
+ 
+      PROCEDURE __BUILTIN__ nextafter (x, y: REAL) : REAL ;
+      PROCEDURE __BUILTIN__ nextafterf (x, y: SHORTREAL) : SHORTREAL ;
+      PROCEDURE __BUILTIN__ nextafterl (x, y: LONGREAL) : LONGREAL ;
+ 
+      PROCEDURE __BUILTIN__ nexttoward (x, y: REAL) : LONGREAL ;
+      PROCEDURE __BUILTIN__ nexttowardf (x, y: SHORTREAL) : LONGREAL ;
+      PROCEDURE __BUILTIN__ nexttowardl (x, y: LONGREAL) : LONGREAL ;
+ 
+      PROCEDURE __BUILTIN__ scalbln (x: REAL; n: LONGINT) : REAL ;
+      PROCEDURE __BUILTIN__ scalblnf (x: SHORTREAL; n: LONGINT) : SHORTREAL ;
+      PROCEDURE __BUILTIN__ scalblnl (x: LONGREAL; n: LONGINT) : LONGREAL ;
+ 
+      PROCEDURE __BUILTIN__ scalbn (x: REAL; n: INTEGER) : REAL ;
+      PROCEDURE __BUILTIN__ scalbnf (x: SHORTREAL; n: INTEGER) : SHORTREAL ;
+      PROCEDURE __BUILTIN__ scalbnl (x: LONGREAL; n: INTEGER) : LONGREAL ;
+ 
+      (* complex arithmetic intrincic procedure functions *)
+ 
+      PROCEDURE __BUILTIN__ cabsf (z: SHORTCOMPLEX) : SHORTREAL ;
+      PROCEDURE __BUILTIN__ cabs (z: COMPLEX) : REAL ;
+      PROCEDURE __BUILTIN__ cabsl (z: LONGCOMPLEX) : LONGREAL ;
+ 
+      PROCEDURE __BUILTIN__ cargf (z: SHORTCOMPLEX) : SHORTREAL ;
+      PROCEDURE __BUILTIN__ carg (z: COMPLEX) : REAL ;
+      PROCEDURE __BUILTIN__ cargl (z: LONGCOMPLEX) : LONGREAL ;
+ 
+      PROCEDURE __BUILTIN__ conjf (z: SHORTCOMPLEX) : SHORTCOMPLEX ;
+      PROCEDURE __BUILTIN__ conj (z: COMPLEX) : COMPLEX ;
+      PROCEDURE __BUILTIN__ conjl (z: LONGCOMPLEX) : LONGCOMPLEX ;
+ 
+      PROCEDURE __BUILTIN__ cpowerf (base: SHORTCOMPLEX;
+                                     exp: SHORTREAL) : SHORTCOMPLEX ;
+      PROCEDURE __BUILTIN__ cpower (base: COMPLEX; exp: REAL) : COMPLEX ;
+      PROCEDURE __BUILTIN__ cpowerl (base: LONGCOMPLEX;
+                                     exp: LONGREAL) : LONGCOMPLEX ;
+ 
+      PROCEDURE __BUILTIN__ csqrtf (z: SHORTCOMPLEX) : SHORTCOMPLEX ;
+      PROCEDURE __BUILTIN__ csqrt (z: COMPLEX) : COMPLEX ;
+      PROCEDURE __BUILTIN__ csqrtl (z: LONGCOMPLEX) : LONGCOMPLEX ;
+ 
+      PROCEDURE __BUILTIN__ cexpf (z: SHORTCOMPLEX) : SHORTCOMPLEX ;
+      PROCEDURE __BUILTIN__ cexp (z: COMPLEX) : COMPLEX ;
+      PROCEDURE __BUILTIN__ cexpl (z: LONGCOMPLEX) : LONGCOMPLEX ;
+ 
+      PROCEDURE __BUILTIN__ clnf (z: SHORTCOMPLEX) : SHORTCOMPLEX ;
+      PROCEDURE __BUILTIN__ cln (z: COMPLEX) : COMPLEX ;
+      PROCEDURE __BUILTIN__ clnl (z: LONGCOMPLEX) : LONGCOMPLEX ;
+ 
+      PROCEDURE __BUILTIN__ csinf (z: SHORTCOMPLEX) : SHORTCOMPLEX ;
+      PROCEDURE __BUILTIN__ csin (z: COMPLEX) : COMPLEX ;
+      PROCEDURE __BUILTIN__ csinl (z: LONGCOMPLEX) : LONGCOMPLEX ;
+ 
+      PROCEDURE __BUILTIN__ ccosf (z: SHORTCOMPLEX) : SHORTCOMPLEX ;
+      PROCEDURE __BUILTIN__ ccos (z: COMPLEX) : COMPLEX ;
+      PROCEDURE __BUILTIN__ ccosl (z: LONGCOMPLEX) : LONGCOMPLEX ;
+ 
+      PROCEDURE __BUILTIN__ ctanf (z: SHORTCOMPLEX) : SHORTCOMPLEX ;
+      PROCEDURE __BUILTIN__ ctan (z: COMPLEX) : COMPLEX ;
+      PROCEDURE __BUILTIN__ ctanl (z: LONGCOMPLEX) : LONGCOMPLEX ;
+ 
+      PROCEDURE __BUILTIN__ carcsinf (z: SHORTCOMPLEX) : SHORTCOMPLEX ;
+      PROCEDURE __BUILTIN__ carcsin (z: COMPLEX) : COMPLEX ;
+      PROCEDURE __BUILTIN__ carcsinl (z: LONGCOMPLEX) : LONGCOMPLEX ;
+ 
+      PROCEDURE __BUILTIN__ carccosf (z: SHORTCOMPLEX) : SHORTCOMPLEX ;
+      PROCEDURE __BUILTIN__ carccos (z: COMPLEX) : COMPLEX ;
+      PROCEDURE __BUILTIN__ carccosl (z: LONGCOMPLEX) : LONGCOMPLEX ;
+ 
+      PROCEDURE __BUILTIN__ carctanf (z: SHORTCOMPLEX) : SHORTCOMPLEX ;
+      PROCEDURE __BUILTIN__ carctan (z: COMPLEX) : COMPLEX ;
+      PROCEDURE __BUILTIN__ carctanl (z: LONGCOMPLEX) : LONGCOMPLEX ;
+ 
+      (* memory and string intrincic procedure functions *)
+ 
+      PROCEDURE __BUILTIN__ alloca (i: CARDINAL) : ADDRESS ;
+      PROCEDURE __BUILTIN__ memcpy (dest, src: ADDRESS;
+                                    nbytes: CARDINAL) : ADDRESS ;
+      PROCEDURE __BUILTIN__ index (s: ADDRESS; c: INTEGER) : ADDRESS ;
+      PROCEDURE __BUILTIN__ rindex (s: ADDRESS; c: INTEGER) : ADDRESS ;
+      PROCEDURE __BUILTIN__ memcmp (s1, s2: ADDRESS;
+                                    nbytes: CARDINAL) : INTEGER ;
+      PROCEDURE __BUILTIN__ memset (s: ADDRESS; c: INTEGER;
+                                    nbytes: CARDINAL) : ADDRESS ;
+      PROCEDURE __BUILTIN__ memmove (s1, s2: ADDRESS;
+                                     nbytes: CARDINAL) : ADDRESS ;
+      PROCEDURE __BUILTIN__ strcat (dest, src: ADDRESS) : ADDRESS ;
+      PROCEDURE __BUILTIN__ strncat (dest, src: ADDRESS;
+                                     nbytes: CARDINAL) : ADDRESS ;
+      PROCEDURE __BUILTIN__ strcpy (dest, src: ADDRESS) : ADDRESS ;
+      PROCEDURE __BUILTIN__ strncpy (dest, src: ADDRESS;
+                                     nbytes: CARDINAL) : ADDRESS ;
+      PROCEDURE __BUILTIN__ strcmp (s1, s2: ADDRESS) : INTEGER ;
+      PROCEDURE __BUILTIN__ strncmp (s1, s2: ADDRESS;
+                                     nbytes: CARDINAL) : INTEGER ;
+      PROCEDURE __BUILTIN__ strlen (s: ADDRESS) : INTEGER ;
+      PROCEDURE __BUILTIN__ strstr (haystack, needle: ADDRESS) : ADDRESS ;
+      PROCEDURE __BUILTIN__ strpbrk (s, accept: ADDRESS) : ADDRESS ;
+      PROCEDURE __BUILTIN__ strspn (s, accept: ADDRESS) : CARDINAL ;
+      PROCEDURE __BUILTIN__ strcspn (s, accept: ADDRESS) : CARDINAL ;
+      PROCEDURE __BUILTIN__ strchr (s: ADDRESS; c: INTEGER) : ADDRESS ;
+      PROCEDURE __BUILTIN__ strrchr (s: ADDRESS; c: INTEGER) : ADDRESS ;
+ 
+      (*
+         longjmp - this GCC builtin restricts the val to always 1.
+      *)
+      (* do not use these two builtins, as gcc, only really
+         anticipates that the Ada front end should use them
+         and it only uses them in its runtime exception handling.
+         We leave them here in the hope that someday they will
+         behave more like their libc counterparts.  *)
+ 
+      PROCEDURE __BUILTIN__ longjmp (env: ADDRESS; val: INTEGER) ;
+      PROCEDURE __BUILTIN__ setjmp (env: ADDRESS) : INTEGER ;
+ 
+ 
+      (*
+         frame_address - returns the address of the frame.
+                         The current frame is obtained if level is 0,
+                         the next level up if level is 1 etc.
+      *)
+ 
+      PROCEDURE __BUILTIN__ frame_address (level: CARDINAL) : ADDRESS ;
+ 
+ 
+      (*
+         return_address - returns the return address of function.
+                          The current function return address is
+                          obtained if level is 0,
+                          the next level up if level is 1 etc.
+      *)
+ 
+      PROCEDURE __BUILTIN__ return_address (level: CARDINAL) : ADDRESS ;
+ 
+ 
+      (*
+         alloca_trace - this is a no-op which is used for internal debugging.
+      *)
+ 
+      PROCEDURE alloca_trace (returned: ADDRESS; nBytes: CARDINAL) : ADDRESS ;
+ 
+ 
+      END Builtins.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/COROUTINES,  Next: gm2-libs/CmdArgs,  Prev: gm2-libs/Builtins,  Up: Base libraries
+ 
+ 4.1.6 gm2-libs/COROUTINES
+ -------------------------
+ 
+      DEFINITION MODULE FOR "C" COROUTINES ;
+ 
+      CONST
+         UnassignedPriority = 0 ;
+ 
+      TYPE
+         INTERRUPTSOURCE = CARDINAL ;
+         PROTECTION = [UnassignedPriority..7] ;
+ 
+      END COROUTINES.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/CmdArgs,  Next: gm2-libs/Debug,  Prev: gm2-libs/COROUTINES,  Up: Base libraries
+ 
+ 4.1.7 gm2-libs/CmdArgs
+ ----------------------
+ 
+      DEFINITION MODULE CmdArgs ;
+ 
+      EXPORT QUALIFIED GetArg, Narg ;
+ 
+ 
+      (*
+         GetArg - returns the nth argument from the command line, CmdLine
+                  the success of the operation is returned.
+      *)
+ 
+      PROCEDURE GetArg (CmdLine: ARRAY OF CHAR;
+                        n: CARDINAL; VAR Argi: ARRAY OF CHAR) : BOOLEAN ;
+ 
+ 
+      (*
+         Narg - returns the number of arguments available from
+                command line, CmdLine.
+      *)
+ 
+      PROCEDURE Narg (CmdLine: ARRAY OF CHAR) : CARDINAL ;
+ 
+ 
+      END CmdArgs.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/Debug,  Next: gm2-libs/DynamicStrings,  Prev: gm2-libs/CmdArgs,  Up: Base libraries
+ 
+ 4.1.8 gm2-libs/Debug
+ --------------------
+ 
+      DEFINITION MODULE Debug ;
+ 
+      (*
+          Description: provides some simple debugging routines.
+      *)
+ 
+      EXPORT QUALIFIED Halt, DebugString ;
+ 
+ 
+      (*
+         Halt - writes a message in the format:
+                Module:Function:Line:Message
+ 
+                It then terminates by calling HALT.
+      *)
+ 
+      PROCEDURE Halt (Message,
+                      Module,
+                      Function: ARRAY OF CHAR ;
+                      LineNo  : CARDINAL) ;
+ 
+ 
+      (*
+         DebugString - writes a string to the debugging device (Scn.Write).
+                       It interprets \n as carriage return, linefeed.
+      *)
+ 
+      PROCEDURE DebugString (a: ARRAY OF CHAR) ;
+ 
+ 
+      END Debug.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/DynamicStrings,  Next: gm2-libs/Environment,  Prev: gm2-libs/Debug,  Up: Base libraries
+ 
+ 4.1.9 gm2-libs/DynamicStrings
+ -----------------------------
+ 
+      DEFINITION MODULE DynamicStrings ;
+ 
+      FROM SYSTEM IMPORT ADDRESS ;
+      EXPORT QUALIFIED String,
+                       InitString, KillString, Fin, InitStringCharStar,
+                       InitStringChar, Index, RIndex,
+                       Mark, Length, ConCat, ConCatChar, Assign, Dup, Add,
+                       Equal, EqualCharStar, EqualArray, ToUpper, ToLower,
+                       CopyOut, Mult, Slice,
+                       RemoveWhitePrefix, RemoveWhitePostfix, RemoveComment,
+                       char, string,
+                       InitStringDB, InitStringCharStarDB, InitStringCharDB,
+                       MultDB, DupDB, SliceDB,
+                       PushAllocation, PopAllocation, PopAllocationExemption ;
+ 
+      TYPE
+         String ;
+ 
+ 
+      (*
+         InitString - creates and returns a String type object.
+                      Initial contents are, a.
+      *)
+ 
+      PROCEDURE InitString (a: ARRAY OF CHAR) : String ;
+ 
+ 
+      (*
+         KillString - frees String, s, and its contents.
+                      NIL is returned.
+      *)
+ 
+      PROCEDURE KillString (s: String) : String ;
+ 
+ 
+      (*
+         Fin - finishes with a string, it calls KillString with, s.
+               The purpose of the procedure is to provide a short cut
+               to calling KillString and then testing the return result.
+      *)
+ 
+      PROCEDURE Fin (s: String) ;
+ 
+ 
+      (*
+         InitStringCharStar - initializes and returns a String to contain
+                              the C string.
+      *)
+ 
+      PROCEDURE InitStringCharStar (a: ADDRESS) : String ;
+ 
+ 
+      (*
+         InitStringChar - initializes and returns a String to contain the
+                          single character, ch.
+      *)
+ 
+      PROCEDURE InitStringChar (ch: CHAR) : String ;
+ 
+ 
+      (*
+         Mark - marks String, s, ready for garbage collection.
+      *)
+ 
+      PROCEDURE Mark (s: String) : String ;
+ 
+ 
+      (*
+         Length - returns the length of the String, s.
+      *)
+ 
+      PROCEDURE Length (s: String) : CARDINAL ;
+ 
+ 
+      (*
+         ConCat - returns String, a, after the contents of, b,
+                  have been appended.
+      *)
+ 
+      PROCEDURE ConCat (a, b: String) : String ;
+ 
+ 
+      (*
+         ConCatChar - returns String, a, after character, ch,
+                      has been appended.
+      *)
+ 
+      PROCEDURE ConCatChar (a: String; ch: CHAR) : String ;
+ 
+ 
+      (*
+         Assign - assigns the contents of, b, into, a.
+                  String, a, is returned.
+      *)
+ 
+      PROCEDURE Assign (a, b: String) : String ;
+ 
+ 
+      (*
+         Dup - duplicate a String, s, returning the copy of s.
+      *)
+ 
+      PROCEDURE Dup (s: String) : String ;
+ 
+ 
+      (*
+         Add - returns a new String which contains the contents of a and b.
+      *)
+ 
+      PROCEDURE Add (a, b: String) : String ;
+ 
+ 
+      (*
+         Equal - returns TRUE if String, a, and, b, are equal.
+      *)
+ 
+      PROCEDURE Equal (a, b: String) : BOOLEAN ;
+ 
+ 
+      (*
+         EqualCharStar - returns TRUE if contents of String, s, is
+                         the same as the string, a.
+      *)
+ 
+      PROCEDURE EqualCharStar (s: String; a: ADDRESS) : BOOLEAN ;
+ 
+ 
+      (*
+         EqualArray - returns TRUE if contents of String, s, is the
+                      same as the string, a.
+      *)
+ 
+      PROCEDURE EqualArray (s: String; a: ARRAY OF CHAR) : BOOLEAN ;
+ 
+ 
+      (*
+         Mult - returns a new string which is n concatenations of String, s.
+                If n<=0 then an empty string is returned.
+      *)
+ 
+      PROCEDURE Mult (s: String; n: CARDINAL) : String ;
+ 
+ 
+      (*
+         Slice - returns a new string which contains the elements
+                 low..high-1
+ 
+                 strings start at element 0
+                 Slice(s, 0, 2)  will return elements 0, 1 but not 2
+                 Slice(s, 1, 3)  will return elements 1, 2 but not 3
+                 Slice(s, 2, 0)  will return elements 2..max
+                 Slice(s, 3, -1) will return elements 3..max-1
+                 Slice(s, 4, -2) will return elements 4..max-2
+      *)
+ 
+      PROCEDURE Slice (s: String; low, high: INTEGER) : String ;
+ 
+ 
+      (*
+         Index - returns the indice of the first occurance of, ch, in
+                 String, s. -1 is returned if, ch, does not exist.
+                 The search starts at position, o.
+      *)
+ 
+      PROCEDURE Index (s: String; ch: CHAR; o: CARDINAL) : INTEGER ;
+ 
+ 
+      (*
+         RIndex - returns the indice of the last occurance of, ch,
+                  in String, s. The search starts at position, o.
+                  -1 is returned if, ch, is not found.
+      *)
+ 
+      PROCEDURE RIndex (s: String; ch: CHAR; o: CARDINAL) : INTEGER ;
+ 
+ 
+      (*
+         RemoveComment - assuming that, comment, is a comment delimiter
+                         which indicates anything to its right is a comment
+                         then strip off the comment and also any white space
+                         on the remaining right hand side.
+                         It leaves any white space on the left hand side
+                         alone.
+      *)
+ 
+      PROCEDURE RemoveComment (s: String; comment: CHAR) : String ;
+ 
+ 
+      (*
+         RemoveWhitePrefix - removes any leading white space from String, s.
+                             A new string is returned.
+      *)
+ 
+      PROCEDURE RemoveWhitePrefix (s: String) : String ;
+ 
+ 
+      (*
+         RemoveWhitePostfix - removes any leading white space from String, s.
+                              A new string is returned.
+      *)
+ 
+      PROCEDURE RemoveWhitePostfix (s: String) : String ;
+ 
+ 
+      (*
+         ToUpper - returns string, s, after it has had its lower case
+                   characters replaced by upper case characters.
+                   The string, s, is not duplicated.
+      *)
+ 
+      PROCEDURE ToUpper (s: String) : String ;
+ 
+ 
+      (*
+         ToLower - returns string, s, after it has had its upper case
+                   characters replaced by lower case characters.
+                   The string, s, is not duplicated.
+      *)
+ 
+      PROCEDURE ToLower (s: String) : String ;
+ 
+ 
+      (*
+         CopyOut - copies string, s, to a.
+      *)
+ 
+      PROCEDURE CopyOut (VAR a: ARRAY OF CHAR; s: String) ;
+ 
+ 
+      (*
+         char - returns the character, ch, at position, i, in String, s.
+                As Slice the index can be negative so:
+ 
+                char(s, 0) will return the first character
+                char(s, 1) will return the second character
+                char(s, -1) will return the last character
+                char(s, -2) will return the penultimate character
+ 
+                a nul character is returned if the index is out of range.
+      *)
+ 
+      PROCEDURE char (s: String; i: INTEGER) : CHAR ;
+ 
+ 
+      (*
+         string - returns the C style char * of String, s.
+      *)
+ 
+      PROCEDURE string (s: String) : ADDRESS ;
+ 
+ 
+      (*
+         to easily debug an application using this library one could use
+         use the following macro processing defines:
+ 
+         #define InitString(X) InitStringDB(X, __FILE__, __LINE__)
+         #define InitStringCharStar(X) InitStringCharStarDB(X, \
+           __FILE__, __LINE__)
+         #define InitStringChar(X) InitStringCharDB(X, __FILE__, __LINE__)
+         #define Mult(X,Y) MultDB(X, Y, __FILE__, __LINE__)
+         #define Dup(X) DupDB(X, __FILE__, __LINE__)
+         #define Slice(X,Y,Z) SliceDB(X, Y, Z, __FILE__, __LINE__)
+ 
+         and then invoke gm2 with the -fcpp flag.
+      *)
+ 
+ 
+      (*
+         InitStringDB - the debug version of InitString.
+      *)
+ 
+      PROCEDURE InitStringDB (a: ARRAY OF CHAR;
+                              file: ARRAY OF CHAR; line: CARDINAL) : String ;
+ 
+ 
+      (*
+         InitStringCharStarDB - the debug version of InitStringCharStar.
+      *)
+ 
+      PROCEDURE InitStringCharStarDB (a: ADDRESS;
+                                      file: ARRAY OF CHAR;
+                                      line: CARDINAL) : String ;
+ 
+ 
+      (*
+         InitStringCharDB - the debug version of InitStringChar.
+      *)
+ 
+      PROCEDURE InitStringCharDB (ch: CHAR;
+                                  file: ARRAY OF CHAR;
+                                  line: CARDINAL) : String ;
+ 
+ 
+      (*
+         MultDB - the debug version of MultDB.
+      *)
+ 
+      PROCEDURE MultDB (s: String; n: CARDINAL;
+                        file: ARRAY OF CHAR; line: CARDINAL) : String ;
+ 
+ 
+      (*
+         DupDB - the debug version of Dup.
+      *)
+ 
+      PROCEDURE DupDB (s: String;
+                       file: ARRAY OF CHAR; line: CARDINAL) : String ;
+ 
+ 
+      (*
+         SliceDB - debug version of Slice.
+      *)
+ 
+      PROCEDURE SliceDB (s: String; low, high: INTEGER;
+                         file: ARRAY OF CHAR; line: CARDINAL) : String ;
+ 
+      (*
+         PushAllocation - pushes the current allocation/deallocation lists.
+      *)
+ 
+      PROCEDURE PushAllocation ;
+ 
+ 
+      (*
+         PopAllocation - test to see that all strings are deallocated since
+                         the last push.  Then it pops to the previous
+                         allocation/deallocation lists.
+ 
+                         If halt is true then the application terminates
+                         with an exit code of 1.
+      *)
+ 
+      PROCEDURE PopAllocation (halt: BOOLEAN) ;
+ 
+ 
+      (*
+         PopAllocationExemption - test to see that all strings are
+                                  deallocated, except string e since
+                                  the last push.
+                                  Post-condition: it pops to the previous
+                                  allocation/deallocation lists.
+ 
+                                  If halt is true then the application
+                                  terminates with an exit code of 1.
+ 
+                                  The string, e, is returned unmodified,
+      *)
+ 
+      PROCEDURE PopAllocationExemption (halt: BOOLEAN; e: String) : String ;
+ 
+ 
+      END DynamicStrings.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/Environment,  Next: gm2-libs/FIO,  Prev: gm2-libs/DynamicStrings,  Up: Base libraries
+ 
+ 4.1.10 gm2-libs/Environment
+ ---------------------------
+ 
+      DEFINITION MODULE Environment ;
+ 
+      EXPORT QUALIFIED GetEnvironment, PutEnvironment ;
+ 
+ 
+      (*
+         GetEnvironment - gets the environment variable Env and places
+            	       	    a copy of its value into string, dest.
+                          It returns TRUE if the string Env was found in
+                          the processes environment.
+      *)
+ 
+      PROCEDURE GetEnvironment (Env: ARRAY OF CHAR;
+                                VAR dest: ARRAY OF CHAR) : BOOLEAN ;
+ 
+ 
+      (*
+         PutEnvironment - change or add an environment variable definition
+                          EnvDef.
+                          TRUE is returned if the environment variable was
+                          set or changed successfully.
+      *)
+ 
+      PROCEDURE PutEnvironment (EnvDef: ARRAY OF CHAR) : BOOLEAN ;
+ 
+ 
+      END Environment.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/FIO,  Next: gm2-libs/FormatStrings,  Prev: gm2-libs/Environment,  Up: Base libraries
+ 
+ 4.1.11 gm2-libs/FIO
+ -------------------
+ 
+      DEFINITION MODULE FIO ;
+ 
+      (* Provides a simple buffered file input/output library.  *)
+ 
+ 
+      FROM SYSTEM IMPORT ADDRESS, BYTE ;
+ 
+      EXPORT QUALIFIED (* types *)
+                       File,
+                       (* procedures *)
+                       OpenToRead, OpenToWrite, OpenForRandom, Close,
+                       EOF, EOLN, WasEOLN, IsNoError, Exists, IsActive,
+                       exists, openToRead, openToWrite, openForRandom,
+                       SetPositionFromBeginning,
+                       SetPositionFromEnd,
+                       FindPosition,
+                       ReadChar, ReadString,
+                       WriteChar, WriteString, WriteLine,
+                       WriteCardinal, ReadCardinal,
+                       UnReadChar,
+                       WriteNBytes, ReadNBytes,
+                       FlushBuffer,
+                       GetUnixFileDescriptor,
+                       GetFileName, getFileName, getFileNameLength,
+                       FlushOutErr,
+                       (* variables *)
+                       StdIn, StdOut, StdErr ;
+ 
+      TYPE
+         File = CARDINAL ;
+ 
+      (* the following variables are initialized to their UNIX equivalents *)
+      VAR
+         StdIn, StdOut, StdErr: File ;
+ 
+ 
+ 
+      (*
+         IsNoError - returns a TRUE if no error has occured on file, f.
+      *)
+ 
+      PROCEDURE IsNoError (f: File) : BOOLEAN ;
+ 
+ 
+      (*
+         IsActive - returns TRUE if the file, f, is still active.
+      *)
+ 
+      PROCEDURE IsActive (f: File) : BOOLEAN ;
+ 
+ 
+      (*
+         Exists - returns TRUE if a file named, fname exists for reading.
+      *)
+ 
+      PROCEDURE Exists (fname: ARRAY OF CHAR) : BOOLEAN ;
+ 
+ 
+      (*
+         OpenToRead - attempts to open a file, fname, for reading and
+                      it returns this file.
+                      The success of this operation can be checked by
+                      calling IsNoError.
+      *)
+ 
+      PROCEDURE OpenToRead (fname: ARRAY OF CHAR) : File ;
+ 
+ 
+      (*
+         OpenToWrite - attempts to open a file, fname, for write and
+                       it returns this file.
+                       The success of this operation can be checked by
+                       calling IsNoError.
+      *)
+ 
+      PROCEDURE OpenToWrite (fname: ARRAY OF CHAR) : File ;
+ 
+ 
+      (*
+         OpenForRandom - attempts to open a file, fname, for random access
+                         read or write and it returns this file.
+                         The success of this operation can be checked by
+                         calling IsNoError.
+                         towrite, determines whether the file should be
+                         opened for writing or reading.
+                         newfile, determines whether a file should be
+                         created if towrite is TRUE or whether the
+                         previous file should be left alone,
+                         allowing this descriptor to seek
+                         and modify an existing file.
+      *)
+ 
+      PROCEDURE OpenForRandom (fname: ARRAY OF CHAR;
+                               towrite, newfile: BOOLEAN) : File ;
+ 
+ 
+      (*
+         Close - close a file which has been previously opened using:
+                 OpenToRead, OpenToWrite, OpenForRandom.
+                 It is correct to close a file which has an error status.
+      *)
+ 
+      PROCEDURE Close (f: File) ;
+ 
+ 
+      (* the following functions are functionally equivalent to the above
+         except they allow C style names.
+      *)
+ 
+      PROCEDURE exists        (fname: ADDRESS; flength: CARDINAL) : BOOLEAN ;
+      PROCEDURE openToRead    (fname: ADDRESS; flength: CARDINAL) : File ;
+      PROCEDURE openToWrite   (fname: ADDRESS; flength: CARDINAL) : File ;
+      PROCEDURE openForRandom (fname: ADDRESS; flength: CARDINAL;
+                               towrite, newfile: BOOLEAN) : File ;
+ 
+ 
+      (*
+         FlushBuffer - flush contents of the FIO file, f, to libc.
+      *)
+ 
+      PROCEDURE FlushBuffer (f: File) ;
+ 
+ 
+      (*
+         ReadNBytes - reads nBytes of a file into memory area, dest, returning
+                      the number of bytes actually read.
+                      This function will consume from the buffer and then
+                      perform direct libc reads. It is ideal for large reads.
+      *)
+ 
+      PROCEDURE ReadNBytes (f: File; nBytes: CARDINAL;
+                            dest: ADDRESS) : CARDINAL ;
+ 
+ 
+      (*
+         ReadAny - reads HIGH (a) + 1 bytes into, a.  All input
+                   is fully buffered, unlike ReadNBytes and thus is more
+                   suited to small reads.
+      *)
+ 
+      PROCEDURE ReadAny (f: File; VAR a: ARRAY OF BYTE) ;
+ 
+ 
+      (*
+         WriteNBytes - writes nBytes from memory area src to a file
+                       returning the number of bytes actually written.
+                       This function will flush the buffer and then
+                       write the nBytes using a direct write from libc.
+                       It is ideal for large writes.
+      *)
+ 
+      PROCEDURE WriteNBytes (f: File; nBytes: CARDINAL;
+                             src: ADDRESS) : CARDINAL ;
+ 
+ 
+      (*
+         WriteAny - writes HIGH (a) + 1 bytes onto, file, f.  All output
+                    is fully buffered, unlike WriteNBytes and thus is more
+                    suited to small writes.
+      *)
+ 
+      PROCEDURE WriteAny (f: File; VAR a: ARRAY OF BYTE) ;
+ 
+ 
+      (*
+         WriteChar - writes a single character to file, f.
+      *)
+ 
+      PROCEDURE WriteChar (f: File; ch: CHAR) ;
+ 
+ 
+      (*
+         EOF - tests to see whether a file, f, has reached end of file.
+      *)
+ 
+      PROCEDURE EOF (f: File) : BOOLEAN ;
+ 
+ 
+      (*
+         EOLN - tests to see whether a file, f, is about to read a newline.
+                It does NOT consume the newline.  It reads the next character
+                and then immediately unreads the character.
+      *)
+ 
+      PROCEDURE EOLN (f: File) : BOOLEAN ;
+ 
+ 
+      (*
+         WasEOLN - tests to see whether a file, f, has just read a newline
+                   character.
+      *)
+ 
+      PROCEDURE WasEOLN (f: File) : BOOLEAN ;
+ 
+ 
+      (*
+         ReadChar - returns a character read from file, f.
+                    Sensible to check with IsNoError or EOF after calling
+                    this function.
+      *)
+ 
+      PROCEDURE ReadChar (f: File) : CHAR ;
+ 
+ 
+      (*
+         UnReadChar - replaces a character, ch, back into file, f.
+                      This character must have been read by ReadChar
+                      and it does not allow successive calls.  It may
+                      only be called if the previous read was successful,
+                      end of file or end of line seen.
+      *)
+ 
+      PROCEDURE UnReadChar (f: File ; ch: CHAR) ;
+ 
+ 
+      (*
+         WriteLine - writes out a linefeed to file, f.
+      *)
+ 
+      PROCEDURE WriteLine (f: File) ;
+ 
+ 
+      (*
+         WriteString - writes a string to file, f.
+      *)
+ 
+      PROCEDURE WriteString (f: File; a: ARRAY OF CHAR) ;
+ 
+ 
+      (*
+         ReadString - reads a string from file, f, into string, a.
+                      It terminates the string if HIGH is reached or
+                      if a newline is seen or an error occurs.
+      *)
+ 
+      PROCEDURE ReadString (f: File; VAR a: ARRAY OF CHAR) ;
+ 
+ 
+      (*
+         WriteCardinal - writes a CARDINAL to file, f.
+                         It writes the binary image of the CARDINAL.
+                         to file, f.
+      *)
+ 
+      PROCEDURE WriteCardinal (f: File; c: CARDINAL) ;
+ 
+ 
+      (*
+         ReadCardinal - reads a CARDINAL from file, f.
+                        It reads a bit image of a CARDINAL
+                        from file, f.
+      *)
+ 
+      PROCEDURE ReadCardinal (f: File) : CARDINAL ;
+ 
+ 
+      (*
+         GetUnixFileDescriptor - returns the UNIX file descriptor of a file.
+                                 Useful when combining FIO.mod with select
+                                 (in Selective.def - but note the comments in
+                                  Selective about using read/write primatives)
+      *)
+ 
+      PROCEDURE GetUnixFileDescriptor (f: File) : INTEGER ;
+ 
+ 
+      (*
+         SetPositionFromBeginning - sets the position from the beginning
+                                    of the file.
+      *)
+ 
+      PROCEDURE SetPositionFromBeginning (f: File; pos: LONGINT) ;
+ 
+ 
+      (*
+         SetPositionFromEnd - sets the position from the end of the file.
+      *)
+ 
+      PROCEDURE SetPositionFromEnd (f: File; pos: LONGINT) ;
+ 
+ 
+      (*
+         FindPosition - returns the current absolute position in file, f.
+      *)
+ 
+      PROCEDURE FindPosition (f: File) : LONGINT ;
+ 
+ 
+      (*
+         GetFileName - assigns, a, with the filename associated with, f.
+      *)
+ 
+      PROCEDURE GetFileName (f: File; VAR a: ARRAY OF CHAR) ;
+ 
+ 
+      (*
+         getFileName - returns the address of the filename associated with, f.
+      *)
+ 
+      PROCEDURE getFileName (f: File) : ADDRESS ;
+ 
+ 
+      (*
+         getFileNameLength - returns the number of characters associated with
+                             filename, f.
+      *)
+ 
+      PROCEDURE getFileNameLength (f: File) : CARDINAL ;
+ 
+ 
+      (*
+         FlushOutErr - flushes, StdOut, and, StdErr.
+      *)
+ 
+      PROCEDURE FlushOutErr ;
+ 
+ 
+      END FIO.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/FormatStrings,  Next: gm2-libs/FpuIO,  Prev: gm2-libs/FIO,  Up: Base libraries
+ 
+ 4.1.12 gm2-libs/FormatStrings
+ -----------------------------
+ 
+      DEFINITION MODULE FormatStrings ;
+ 
+      FROM SYSTEM IMPORT BYTE ;
+      FROM DynamicStrings IMPORT String ;
+      EXPORT QUALIFIED Sprintf0, Sprintf1, Sprintf2, Sprintf3, Sprintf4,
+                       HandleEscape ;
+ 
+ 
+      (*
+         Sprintf0 - returns a String containing, fmt, after it has had its
+                    escape sequences translated.
+      *)
+ 
+      PROCEDURE Sprintf0 (fmt: String) : String ;
+ 
+ 
+      (*
+         Sprintf1 - returns a String containing, fmt, together with
+                    encapsulated entity, w. It only formats the
+                    first %s or %d with n.
+      *)
+ 
+      PROCEDURE Sprintf1 (fmt: String; w: ARRAY OF BYTE) : String ;
+ 
+ 
+      (*
+         Sprintf2 - returns a string, fmt, which has been formatted.
+      *)
+ 
+      PROCEDURE Sprintf2 (fmt: String; w1, w2: ARRAY OF BYTE) : String ;
+ 
+ 
+      (*
+         Sprintf3 - returns a string, fmt, which has been formatted.
+      *)
+ 
+      PROCEDURE Sprintf3 (fmt: String; w1, w2, w3: ARRAY OF BYTE) : String ;
+ 
+ 
+      (*
+         Sprintf4 - returns a string, fmt, which has been formatted.
+      *)
+ 
+      PROCEDURE Sprintf4 (fmt: String;
+                          w1, w2, w3, w4: ARRAY OF BYTE) : String ;
+ 
+ 
+      (*
+         HandleEscape - translates \a, \b, \e, \f, \n, \r, \x[hex] \[octal]
+                        into their respective ascii codes.  It also converts
+                        \[any] into a single [any] character.
+      *)
+ 
+      PROCEDURE HandleEscape (s: String) : String ;
+ 
+ 
+      END FormatStrings.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/FpuIO,  Next: gm2-libs/GetOpt,  Prev: gm2-libs/FormatStrings,  Up: Base libraries
+ 
+ 4.1.13 gm2-libs/FpuIO
+ ---------------------
+ 
+      DEFINITION MODULE FpuIO ;
+ 
+      EXPORT QUALIFIED ReadReal, WriteReal, StrToReal, RealToStr,
+                       ReadLongReal, WriteLongReal, StrToLongReal,
+                       LongRealToStr,
+                       ReadLongInt, WriteLongInt, StrToLongInt,
+                       LongIntToStr ;
+ 
+ 
+      PROCEDURE ReadReal (VAR x: REAL) ;
+      PROCEDURE WriteReal (x: REAL; TotalWidth, FractionWidth: CARDINAL) ;
+      PROCEDURE StrToReal (a: ARRAY OF CHAR ; VAR x: REAL) ;
+      PROCEDURE RealToStr (x: REAL; TotalWidth, FractionWidth: CARDINAL;
+                           VAR a: ARRAY OF CHAR) ;
+ 
+      PROCEDURE ReadLongReal (VAR x: LONGREAL) ;
+      PROCEDURE WriteLongReal (x: LONGREAL;
+                               TotalWidth, FractionWidth: CARDINAL) ;
+      PROCEDURE StrToLongReal (a: ARRAY OF CHAR ; VAR x: LONGREAL) ;
+      PROCEDURE LongRealToStr (x: LONGREAL;
+                               TotalWidth, FractionWidth: CARDINAL;
+                               VAR a: ARRAY OF CHAR) ;
+ 
+      PROCEDURE ReadLongInt (VAR x: LONGINT) ;
+      PROCEDURE WriteLongInt (x: LONGINT; n: CARDINAL) ;
+      PROCEDURE StrToLongInt (a: ARRAY OF CHAR ; VAR x: LONGINT) ;
+      PROCEDURE LongIntToStr (x: LONGINT; n: CARDINAL; VAR a: ARRAY OF CHAR) ;
+ 
+ 
+      END FpuIO.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/GetOpt,  Next: gm2-libs/IO,  Prev: gm2-libs/FpuIO,  Up: Base libraries
+ 
+ 4.1.14 gm2-libs/GetOpt
+ ----------------------
+ 
+      DEFINITION MODULE GetOpt ;
+ 
+      FROM SYSTEM IMPORT ADDRESS ;
+      FROM DynamicStrings IMPORT String ;
+ 
+      CONST
+         no_argument = 0 ;
+         required_argument = 1 ;
+         optional_argument = 2 ;
+ 
+      TYPE
+         LongOptions ;
+         PtrToInteger = POINTER TO INTEGER ;
+ 
+      (*
+         GetOpt - call C getopt and fill in the parameters:
+                  optarg, optind, opterr and optop.
+      *)
+ 
+      PROCEDURE GetOpt (argc: INTEGER; argv: ADDRESS; optstring: String;
+                        VAR optarg: String;
+                        VAR optind, opterr, optopt: INTEGER) : CHAR ;
+ 
+ 
+      (*
+         InitLongOptions - creates and returns a LongOptions empty array.
+      *)
+ 
+      PROCEDURE InitLongOptions () : LongOptions ;
+ 
+ 
+      (*
+         AddLongOption - appends long option {name, has_arg, flag, val} to the
+                         array of options and new long options array is
+                         returned.
+                         The old array, lo, should no longer be used.
+ 
+         (from man 3 getopt)
+             The meanings of the different fields are:
+ 
+             name   is the name of the long option.
+ 
+             has_arg
+                    is: no_argument (or 0) if the option does not take an
+                    argument; required_argument (or  1) if the option
+                    requires an argument; or optional_argument (or 2) if
+                    the option takes an optional argument.
+ 
+             flag   specifies how results are returned for a long option.
+                    If flag is NULL, then getopt_long() returns val.
+                    (For example, the calling program may set val to the
+                    equivalent short option character).  Otherwise,
+                    getopt_long() returns 0, and flag points to a
+                    variable which is set to val if the option is found,
+                    but left unchanged if the option is not found.
+ 
+             val    is the value to return, or to load into the variable
+                    pointed to by flag.
+ 
+             The last element of the array has to be filled with zeros.
+      *)
+ 
+      PROCEDURE AddLongOption (lo: LongOptions;
+                               name: String; has_arg: INTEGER;
+                               flag: PtrToInteger;
+                               val: INTEGER) : LongOptions ;
+ 
+ 
+      (*
+         KillLongOptions - returns NIL and also frees up memory
+                           associated with, lo.
+      *)
+ 
+      PROCEDURE KillLongOptions (lo: LongOptions) : LongOptions ;
+ 
+ 
+      (*
+         GetOptLong - works like GetOpt but will accept long options (using
+                      two dashes).  If the program only accepts long options
+                      then optstring should be an empty string, not NIL.
+      *)
+ 
+      PROCEDURE GetOptLong (argc: INTEGER; argv: ADDRESS; optstring: String;
+                            longopts: LongOptions;
+                            VAR longindex: INTEGER) : INTEGER ;
+ 
+ 
+      (*
+         GetOptLongOnly - works like GetOptLong except that a single dash
+                          can be used for a long option.
+      *)
+ 
+      PROCEDURE GetOptLongOnly (argc: INTEGER; argv: ADDRESS;
+                                optstring: String; longopts: LongOptions;
+                                VAR longindex: INTEGER) : INTEGER ;
+ 
+ 
+      END GetOpt.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/IO,  Next: gm2-libs/Indexing,  Prev: gm2-libs/GetOpt,  Up: Base libraries
+ 
+ 4.1.15 gm2-libs/IO
+ ------------------
+ 
+      DEFINITION MODULE IO ;
+ 
+      (*
+         Description: provides Read, Write, Errors procedures that map onto UNIX
+                      file descriptors 0, 1 and 2. This is achieved by using
+                      FIO if we are in buffered mode and using libc.write
+                      if not.
+      *)
+ 
+      EXPORT QUALIFIED Read, Write, Error,
+                       UnBufferedMode, BufferedMode,
+                       EchoOn, EchoOff ;
+ 
+ 
+      PROCEDURE Read (VAR ch: CHAR) ;
+      PROCEDURE Write (ch: CHAR) ;
+      PROCEDURE Error (ch: CHAR) ;
+ 
+ 
+      (*
+         UnBufferedMode - places file descriptor, fd, into an unbuffered mode.
+      *)
+ 
+      PROCEDURE UnBufferedMode (fd: INTEGER; input: BOOLEAN) ;
+ 
+ 
+      (*
+         BufferedMode - places file descriptor, fd, into a buffered mode.
+      *)
+ 
+      PROCEDURE BufferedMode (fd: INTEGER; input: BOOLEAN) ;
+ 
+ 
+      (*
+         EchoOn - turns on echoing for file descriptor, fd.  This
+                  only really makes sence for a file descriptor opened
+                  for terminal input or maybe some specific file descriptor
+                  which is attached to a particular piece of hardware.
+      *)
+ 
+      PROCEDURE EchoOn (fd: INTEGER; input: BOOLEAN) ;
+ 
+ 
+      (*
+         EchoOff - turns off echoing for file descriptor, fd.  This
+                   only really makes sence for a file descriptor opened
+                   for terminal input or maybe some specific file descriptor
+                   which is attached to a particular piece of hardware.
+      *)
+ 
+      PROCEDURE EchoOff (fd: INTEGER; input: BOOLEAN) ;
+ 
+ 
+      END IO.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/Indexing,  Next: gm2-libs/LMathLib0,  Prev: gm2-libs/IO,  Up: Base libraries
+ 
+ 4.1.16 gm2-libs/Indexing
+ ------------------------
+ 
+      DEFINITION MODULE Indexing ;
+ 
+      FROM SYSTEM IMPORT ADDRESS ;
+      EXPORT QUALIFIED Index, InitIndex, KillIndex, GetIndice, PutIndice,
+                       HighIndice, LowIndice, InBounds, IsIndiceInIndex,
+                       RemoveIndiceFromIndex, IncludeIndiceIntoIndex,
+                       ForeachIndiceInIndexDo, DeleteIndice, DebugIndex ;
+ 
+      TYPE
+         Index ;
+         IndexProcedure = PROCEDURE (ADDRESS) ;
+ 
+ 
+      (*
+         InitIndex - creates and returns an Index.
+      *)
+ 
+      PROCEDURE InitIndex (low: CARDINAL) : Index ;
+ 
+ 
+      (*
+         KillIndex - returns Index to free storage.
+      *)
+ 
+      PROCEDURE KillIndex (i: Index) : Index ;
+ 
+ 
+      (*
+         DebugIndex - turns on debugging within an index.
+      *)
+ 
+      PROCEDURE DebugIndex (i: Index) : Index ;
+ 
+ 
+      (*
+         InBounds - returns TRUE if indice, n, is within the bounds
+                    of the dynamic array.
+      *)
+ 
+      PROCEDURE InBounds (i: Index; n: CARDINAL) : BOOLEAN ;
+ 
+ 
+      (*
+         HighIndice - returns the last legally accessible indice of this array.
+      *)
+ 
+      PROCEDURE HighIndice (i: Index) : CARDINAL ;
+ 
+ 
+      (*
+         LowIndice - returns the first legally accessible indice of this array.
+      *)
+ 
+      PROCEDURE LowIndice (i: Index) : CARDINAL ;
+ 
+ 
+      (*
+         PutIndice - places, a, into the dynamic array at position i[n]
+      *)
+ 
+      PROCEDURE PutIndice (i: Index; n: CARDINAL; a: ADDRESS) ;
+ 
+ 
+      (*
+         GetIndice - retrieves, element i[n] from the dynamic array.
+      *)
+ 
+      PROCEDURE GetIndice (i: Index; n: CARDINAL) : ADDRESS ;
+ 
+ 
+      (*
+         IsIndiceInIndex - returns TRUE if, a, is in the index, i.
+      *)
+ 
+      PROCEDURE IsIndiceInIndex (i: Index; a: ADDRESS) : BOOLEAN ;
+ 
+ 
+      (*
+         RemoveIndiceFromIndex - removes, a, from Index, i.
+      *)
+ 
+      PROCEDURE RemoveIndiceFromIndex (i: Index; a: ADDRESS) ;
+ 
+ 
+      (*
+         DeleteIndice - delete i[j] from the array.
+      *)
+ 
+      PROCEDURE DeleteIndice (i: Index; j: CARDINAL) ;
+ 
+ 
+      (*
+         IncludeIndiceIntoIndex - if the indice is not in the index, then
+                                  add it at the end.
+      *)
+ 
+      PROCEDURE IncludeIndiceIntoIndex (i: Index; a: ADDRESS) ;
+ 
+ 
+      (*
+         ForeachIndiceInIndexDo - for each j indice of i, call procedure p(i[j])
+      *)
+ 
+      PROCEDURE ForeachIndiceInIndexDo (i: Index; p: IndexProcedure) ;
+ 
+ 
+      END Indexing.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/LMathLib0,  Next: gm2-libs/LegacyReal,  Prev: gm2-libs/Indexing,  Up: Base libraries
+ 
+ 4.1.17 gm2-libs/LMathLib0
+ -------------------------
+ 
+      DEFINITION MODULE LMathLib0 ;
+ 
+      CONST
+         pi   = 3.1415926535897932384626433832795028841972;
+         exp1 = 2.7182818284590452353602874713526624977572;
+ 
+ 
+      PROCEDURE __BUILTIN__ sqrt (x: LONGREAL) : LONGREAL ;
+      PROCEDURE exp (x: LONGREAL) : LONGREAL ;
+      PROCEDURE ln (x: LONGREAL) : LONGREAL ;
+      PROCEDURE __BUILTIN__ sin (x: LONGREAL) : LONGREAL ;
+      PROCEDURE __BUILTIN__ cos (x: LONGREAL) : LONGREAL ;
+      PROCEDURE tan (x: LONGREAL) : LONGREAL ;
+      PROCEDURE arctan (x: LONGREAL) : LONGREAL ;
+      PROCEDURE entier (x: LONGREAL) : INTEGER ;
+ 
+ 
+      END LMathLib0.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/LegacyReal,  Next: gm2-libs/M2Dependent,  Prev: gm2-libs/LMathLib0,  Up: Base libraries
+ 
+ 4.1.18 gm2-libs/LegacyReal
+ --------------------------
+ 
+      DEFINITION MODULE LegacyReal ;
+ 
+      TYPE
+         REAL = SHORTREAL ;
+ 
+ 
+      END LegacyReal.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/M2Dependent,  Next: gm2-libs/M2EXCEPTION,  Prev: gm2-libs/LegacyReal,  Up: Base libraries
+ 
+ 4.1.19 gm2-libs/M2Dependent
+ ---------------------------
+ 
+      DEFINITION MODULE M2Dependent ;
+ 
+      FROM SYSTEM IMPORT ADDRESS ;
+ 
+ 
+      TYPE
+         ArgCVEnvP = PROCEDURE (INTEGER, ADDRESS, ADDRESS) ;
+ 
+ 
+      PROCEDURE ConstructModules (applicationmodule, libname,
+                                  overrideliborder: ADDRESS;
+                                  argc: INTEGER; argv, envp: ADDRESS) ;
+ 
+      PROCEDURE DeconstructModules (applicationmodule, libname: ADDRESS;
+                                    argc: INTEGER; argv, envp: ADDRESS) ;
+ 
+ 
+      (*
+         RegisterModule - adds module name to the list of outstanding
+                          modules which need to have their dependencies
+                          explored to determine initialization order.
+      *)
+ 
+      PROCEDURE RegisterModule (modulename, libname: ADDRESS;
+                                init, fini:  ArgCVEnvP;
+                                dependencies: PROC) ;
+ 
+ 
+      (*
+         RequestDependant - used to specify that modulename:libname
+                            is dependant upon
+                            module dependantmodule:dependantlibname
+      *)
+ 
+      PROCEDURE RequestDependant (modulename, libname,
+                                  dependantmodule, dependantlibname: ADDRESS) ;
+ 
+ 
+      END M2Dependent.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/M2EXCEPTION,  Next: gm2-libs/M2RTS,  Prev: gm2-libs/M2Dependent,  Up: Base libraries
+ 
+ 4.1.20 gm2-libs/M2EXCEPTION
+ ---------------------------
+ 
+      DEFINITION MODULE M2EXCEPTION;
+ 
+ 
+      (* This enumerated list of exceptions must match the exceptions in gm2-libs-iso to
+         allow mixed module dialect projects.  *)
+ 
+      TYPE
+        M2Exceptions =
+          (indexException,     rangeException,         caseSelectException,  invalidLocation,
+           functionException,  wholeValueException,    wholeDivException,    realValueException,
+           realDivException,   complexValueException,  complexDivException,  protException,
+           sysException,       coException,            exException
+          );
+ 
+ 
+      (* If the program or coroutine is in the exception state then return the enumeration
+         value representing the exception cause.  If it is not in the exception state then
+         raises and exception (exException).  *)
+ 
+      PROCEDURE M2Exception () : M2Exceptions;
+ 
+      (* Returns TRUE if the program or coroutine is in the exception state.
+         Returns FALSE if the program or coroutine is not in the exception state.  *)
+ 
+      PROCEDURE IsM2Exception () : BOOLEAN;
+ 
+ 
+      END M2EXCEPTION.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/M2RTS,  Next: gm2-libs/MathLib0,  Prev: gm2-libs/M2EXCEPTION,  Up: Base libraries
+ 
+ 4.1.21 gm2-libs/M2RTS
+ ---------------------
+ 
+      DEFINITION MODULE M2RTS ;
+ 
+      FROM SYSTEM IMPORT ADDRESS ;
+ 
+ 
+      TYPE
+         ArgCVEnvP = PROCEDURE (INTEGER, ADDRESS, ADDRESS) ;
+ 
+ 
+      PROCEDURE ConstructModules (applicationmodule, libname,
+                                  overrideliborder: ADDRESS;
+                                  argc: INTEGER; argv, envp: ADDRESS) ;
+ 
+      PROCEDURE DeconstructModules (applicationmodule, libname: ADDRESS;
+                                    argc: INTEGER; argv, envp: ADDRESS) ;
+ 
+ 
+      (*
+         RegisterModule - adds module name to the list of outstanding
+                          modules which need to have their dependencies
+                          explored to determine initialization order.
+      *)
+ 
+      PROCEDURE RegisterModule (name, libname: ADDRESS;
+                                init, fini:  ArgCVEnvP;
+                                dependencies: PROC) ;
+ 
+ 
+      (*
+         RequestDependant - used to specify that modulename is dependant upon
+                            module dependantmodule.
+      *)
+ 
+      PROCEDURE RequestDependant (modulename, libname,
+                                  dependantmodule, dependantlibname: ADDRESS) ;
+ 
+ 
+      (*
+         InstallTerminationProcedure - installs a procedure, p, which will
+                                       be called when the procedure
+                                       ExecuteTerminationProcedures
+                                       is invoked.  It returns TRUE is the
+                                       procedure is installed.
+      *)
+ 
+      PROCEDURE InstallTerminationProcedure (p: PROC) : BOOLEAN ;
+ 
+ 
+      (*
+         ExecuteInitialProcedures - executes the initial procedures installed
+                                    by InstallInitialProcedure.
+      *)
+ 
+      PROCEDURE ExecuteInitialProcedures ;
+ 
+ 
+      (*
+         InstallInitialProcedure - installs a procedure to be executed just
+                                   before the BEGIN code section of the main
+                                   program module.
+      *)
+ 
+      PROCEDURE InstallInitialProcedure (p: PROC) : BOOLEAN ;
+ 
+ 
+      (*
+         ExecuteTerminationProcedures - calls each installed termination procedure
+                                        in reverse order.
+      *)
+ 
+      PROCEDURE ExecuteTerminationProcedures ;
+ 
+ 
+      (*
+         Terminate - provides compatibility for pim.  It call exit with
+                     the exitcode provided in a prior call to ExitOnHalt
+                     (or zero if ExitOnHalt was never called).  It does
+                     not call ExecuteTerminationProcedures.
+      *)
+ 
+      PROCEDURE Terminate <* noreturn *> ;
+ 
+ 
+      (*
+         HALT - terminate the current program.  The procedure Terminate
+                is called before the program is stopped.  The parameter
+                exitcode is optional.  If the parameter is not supplied
+                HALT will call libc 'abort', otherwise it will exit with
+                the code supplied.  Supplying a parameter to HALT has the
+                same effect as calling ExitOnHalt with the same code and
+                then calling HALT with no parameter.
+      *)
+ 
+      PROCEDURE HALT ([exitcode: INTEGER = -1]) <* noreturn *> ;
+ 
+ 
+      (*
+         Halt - provides a more user friendly version of HALT, which takes
+                 four parameters to aid debugging.  It writes an error message
+                 to stderr and calls exit (1).
+      *)
+ 
+      PROCEDURE Halt (description, filename, function: ARRAY OF CHAR;
+                      line: CARDINAL) <* noreturn *> ;
+ 
+ 
+      (*
+         HaltC - provides a more user friendly version of HALT, which takes
+                 four parameters to aid debugging.  It writes an error message
+                 to stderr and calls exit (1).
+      *)
+ 
+      PROCEDURE HaltC (description, filename, function: ADDRESS;
+                       line: CARDINAL) <* noreturn *> ;
+ 
+ 
+      (*
+         ExitOnHalt - if HALT is executed then call exit with the exit code, e.
+      *)
+ 
+      PROCEDURE ExitOnHalt (e: INTEGER) ;
+ 
+ 
+      (*
+         ErrorMessage - emits an error message to stderr and then calls exit (1).
+      *)
+ 
+      PROCEDURE ErrorMessage (message: ARRAY OF CHAR;
+                              filename: ARRAY OF CHAR;
+                              line: CARDINAL;
+                              function: ARRAY OF CHAR) <* noreturn *> ;
+ 
+ 
+      (*
+         Length - returns the length of a string, a. This is called whenever
+                  the user calls LENGTH and the parameter cannot be calculated
+                  at compile time.
+      *)
+ 
+      PROCEDURE Length (a: ARRAY OF CHAR) : CARDINAL ;
+ 
+ 
+      (*
+         The following are the runtime exception handler routines.
+      *)
+ 
+      PROCEDURE AssignmentException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE ReturnException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE IncException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE DecException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE InclException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE ExclException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE ShiftException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE RotateException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE StaticArraySubscriptException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE DynamicArraySubscriptException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE ForLoopBeginException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE ForLoopToException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE ForLoopEndException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE PointerNilException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE NoReturnException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE CaseException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE WholeNonPosDivException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE WholeNonPosModException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE WholeZeroDivException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE WholeZeroRemException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE WholeValueException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE RealValueException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE ParameterException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE NoException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+ 
+ 
+      END M2RTS.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/MathLib0,  Next: gm2-libs/MemUtils,  Prev: gm2-libs/M2RTS,  Up: Base libraries
+ 
+ 4.1.22 gm2-libs/MathLib0
+ ------------------------
+ 
+      DEFINITION MODULE MathLib0 ;
+ 
+      CONST
+         pi   = 3.1415926535897932384626433832795028841972;
+         exp1 = 2.7182818284590452353602874713526624977572;
+ 
+ 
+      PROCEDURE __BUILTIN__ sqrt (x: REAL) : REAL ;
+      PROCEDURE exp (x: REAL) : REAL ;
+      PROCEDURE ln (x: REAL) : REAL ;
+      PROCEDURE __BUILTIN__ sin (x: REAL) : REAL ;
+      PROCEDURE __BUILTIN__ cos (x: REAL) : REAL ;
+      PROCEDURE tan (x: REAL) : REAL ;
+      PROCEDURE arctan (x: REAL) : REAL ;
+      PROCEDURE entier (x: REAL) : INTEGER ;
+ 
+ 
+      END MathLib0.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/MemUtils,  Next: gm2-libs/NumberIO,  Prev: gm2-libs/MathLib0,  Up: Base libraries
+ 
+ 4.1.23 gm2-libs/MemUtils
+ ------------------------
+ 
+      DEFINITION MODULE MemUtils ;
+ 
+      FROM SYSTEM IMPORT ADDRESS ;
+      EXPORT QUALIFIED MemCopy, MemZero ;
+ 
+ 
+      (*
+         MemCopy - copys a region of memory to the required destination.
+      *)
+ 
+      PROCEDURE MemCopy (from: ADDRESS; length: CARDINAL; to: ADDRESS) ;
+ 
+ 
+      (*
+         MemZero - sets a region of memory: a..a+length to zero.
+      *)
+ 
+      PROCEDURE MemZero (a: ADDRESS; length: CARDINAL) ;
+ 
+ 
+      END MemUtils.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/NumberIO,  Next: gm2-libs/OptLib,  Prev: gm2-libs/MemUtils,  Up: Base libraries
+ 
+ 4.1.24 gm2-libs/NumberIO
+ ------------------------
+ 
+      DEFINITION MODULE NumberIO ;
+ 
+      EXPORT QUALIFIED ReadCard, WriteCard, ReadHex, WriteHex, ReadInt, WriteInt,
+                       CardToStr, StrToCard, StrToHex, HexToStr, StrToInt, IntToStr,
+                       ReadOct, WriteOct, OctToStr, StrToOct,
+                       ReadBin, WriteBin, BinToStr, StrToBin,
+                       StrToBinInt, StrToHexInt, StrToOctInt ;
+ 
+ 
+      PROCEDURE ReadCard (VAR x: CARDINAL) ;
+ 
+      PROCEDURE WriteCard (x, n: CARDINAL) ;
+ 
+      PROCEDURE ReadHex (VAR x: CARDINAL) ;
+ 
+      PROCEDURE WriteHex (x, n: CARDINAL) ;
+ 
+      PROCEDURE ReadInt (VAR x: INTEGER) ;
+ 
+      PROCEDURE WriteInt (x: INTEGER ; n: CARDINAL) ;
+ 
+      PROCEDURE CardToStr (x, n: CARDINAL ; VAR a: ARRAY OF CHAR) ;
+ 
+      PROCEDURE StrToCard (a: ARRAY OF CHAR ; VAR x: CARDINAL) ;
+ 
+      PROCEDURE HexToStr (x, n: CARDINAL ; VAR a: ARRAY OF CHAR) ;
+ 
+      PROCEDURE StrToHex (a: ARRAY OF CHAR ; VAR x: CARDINAL) ;
+ 
+      PROCEDURE IntToStr (x: INTEGER ; n: CARDINAL ; VAR a: ARRAY OF CHAR) ;
+ 
+      PROCEDURE StrToInt (a: ARRAY OF CHAR ; VAR x: INTEGER) ;
+ 
+      PROCEDURE ReadOct (VAR x: CARDINAL) ;
+ 
+      PROCEDURE WriteOct (x, n: CARDINAL) ;
+ 
+      PROCEDURE OctToStr (x, n: CARDINAL ; VAR a: ARRAY OF CHAR) ;
+ 
+      PROCEDURE StrToOct (a: ARRAY OF CHAR ; VAR x: CARDINAL) ;
+ 
+      PROCEDURE ReadBin (VAR x: CARDINAL) ;
+ 
+      PROCEDURE WriteBin (x, n: CARDINAL) ;
+ 
+      PROCEDURE BinToStr (x, n: CARDINAL ; VAR a: ARRAY OF CHAR) ;
+ 
+      PROCEDURE StrToBin (a: ARRAY OF CHAR ; VAR x: CARDINAL) ;
+ 
+      PROCEDURE StrToBinInt (a: ARRAY OF CHAR ; VAR x: INTEGER) ;
+ 
+      PROCEDURE StrToHexInt (a: ARRAY OF CHAR ; VAR x: INTEGER) ;
+ 
+      PROCEDURE StrToOctInt (a: ARRAY OF CHAR ; VAR x: INTEGER) ;
+ 
+ 
+      END NumberIO.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/OptLib,  Next: gm2-libs/PushBackInput,  Prev: gm2-libs/NumberIO,  Up: Base libraries
+ 
+ 4.1.25 gm2-libs/OptLib
+ ----------------------
+ 
+      DEFINITION MODULE OptLib ;
+ 
+      FROM SYSTEM IMPORT ADDRESS ;
+      FROM DynamicStrings IMPORT String ;
+ 
+      TYPE
+         Option ;
+ 
+ 
+      (*
+         InitOption - constructor for Option.
+      *)
+ 
+      PROCEDURE InitOption (argc: INTEGER; argv: ADDRESS) : Option ;
+ 
+ 
+      (*
+         KillOption - deconstructor for Option.
+      *)
+ 
+      PROCEDURE KillOption (o: Option) : Option ;
+ 
+ 
+      (*
+         Dup - duplicate the option array inside, o.
+               Notice that this does not duplicate all the contents
+               (strings) of argv.
+               Shallow copy of the top level indices.
+      *)
+ 
+      PROCEDURE Dup (o: Option) : Option ;
+ 
+ 
+      (*
+         Slice - return a new option which has elements [low:high] from the
+                 options, o.
+      *)
+ 
+      PROCEDURE Slice (o: Option; low, high: INTEGER) : Option ;
+ 
+ 
+      (*
+         IndexStrCmp - returns the index in the argv array which matches
+                       string, s.  -1 is returned if the string is not found.
+      *)
+ 
+      PROCEDURE IndexStrCmp (o: Option; s: String) : INTEGER ;
+ 
+ 
+      (*
+         IndexStrNCmp - returns the index in the argv array where the first
+                        characters are matched by string, s.
+                        -1 is returned if the string is not found.
+      *)
+ 
+      PROCEDURE IndexStrNCmp (o: Option; s: String) : INTEGER ;
+ 
+ 
+      (*
+         ConCat - returns the concatenation of a and b.
+      *)
+ 
+      PROCEDURE ConCat (a, b: Option) : Option ;
+ 
+ 
+      (*
+         GetArgv - return the argv component of option.
+      *)
+ 
+      PROCEDURE GetArgv (o: Option) : ADDRESS ;
+ 
+ 
+      (*
+         GetArgc - return the argc component of option.
+      *)
+ 
+      PROCEDURE GetArgc (o: Option) : INTEGER ;
+ 
+ 
+      END OptLib.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/PushBackInput,  Next: gm2-libs/RTExceptions,  Prev: gm2-libs/OptLib,  Up: Base libraries
+ 
+ 4.1.26 gm2-libs/PushBackInput
+ -----------------------------
+ 
+      DEFINITION MODULE PushBackInput ;
+ 
+      FROM FIO IMPORT File ;
+      FROM DynamicStrings IMPORT String ;
+ 
+      EXPORT QUALIFIED Open, PutCh, GetCh, Error, WarnError, WarnString,
+                       Close, SetDebug, GetExitStatus, PutStr,
+                       PutString, GetColumnPosition, GetCurrentLine ;
+ 
+ 
+      (*
+         Open - opens a file for reading.
+      *)
+ 
+      PROCEDURE Open (a: ARRAY OF CHAR) : File ;
+ 
+ 
+      (*
+         GetCh - gets a character from either the push back stack or
+                 from file, f.
+      *)
+ 
+      PROCEDURE GetCh (f: File) : CHAR ;
+ 
+ 
+      (*
+         PutCh - pushes a character onto the push back stack, it also
+                 returns the character which has been pushed.
+      *)
+ 
+      PROCEDURE PutCh (ch: CHAR) : CHAR ;
+ 
+ 
+      (*
+         PutString - pushes a string onto the push back stack.
+      *)
+ 
+      PROCEDURE PutString (a: ARRAY OF CHAR) ;
+ 
+ 
+      (*
+         PutStr - pushes a dynamic string onto the push back stack.
+                  The string, s, is not deallocated.
+      *)
+ 
+      PROCEDURE PutStr (s: String) ;
+ 
+ 
+      (*
+         Error - emits an error message with the appropriate file, line combination.
+      *)
+ 
+      PROCEDURE Error (a: ARRAY OF CHAR) ;
+ 
+ 
+      (*
+         WarnError - emits an error message with the appropriate file, line combination.
+                     It does not terminate but when the program finishes an exit status of
+                     1 will be issued.
+      *)
+ 
+      PROCEDURE WarnError (a: ARRAY OF CHAR) ;
+ 
+ 
+      (*
+         WarnString - emits an error message with the appropriate file, line combination.
+                      It does not terminate but when the program finishes an exit status of
+                      1 will be issued.
+      *)
+ 
+      PROCEDURE WarnString (s: String) ;
+ 
+ 
+      (*
+         Close - closes the opened file.
+      *)
+ 
+      PROCEDURE Close (f: File) ;
+ 
+ 
+      (*
+         GetExitStatus - returns the exit status which will be 1 if any warnings were issued.
+      *)
+ 
+      PROCEDURE GetExitStatus () : CARDINAL ;
+ 
+ 
+      (*
+         SetDebug - sets the debug flag on or off.
+      *)
+ 
+      PROCEDURE SetDebug (d: BOOLEAN) ;
+ 
+ 
+      (*
+         GetColumnPosition - returns the column position of the current character.
+      *)
+ 
+      PROCEDURE GetColumnPosition () : CARDINAL ;
+ 
+ 
+      (*
+         GetCurrentLine - returns the current line number.
+      *)
+ 
+      PROCEDURE GetCurrentLine () : CARDINAL ;
+ 
+ 
+      END PushBackInput.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/RTExceptions,  Next: gm2-libs/RTint,  Prev: gm2-libs/PushBackInput,  Up: Base libraries
+ 
+ 4.1.27 gm2-libs/RTExceptions
+ ----------------------------
+ 
+      DEFINITION MODULE RTExceptions ;
+ 
+      (* Runtime exception handler routines.  This should
+         be considered as a system module for GNU Modula-2
+         and allow the compiler to interface with exception
+         handling.  *)
+ 
+      FROM SYSTEM IMPORT ADDRESS ;
+      EXPORT QUALIFIED EHBlock,
+                       Raise, SetExceptionBlock, GetExceptionBlock,
+                       GetTextBuffer, GetTextBufferSize, GetNumber,
+                       InitExceptionBlock, KillExceptionBlock,
+                       PushHandler, PopHandler,
+                       BaseExceptionsThrow, DefaultErrorCatch,
+                       IsInExceptionState, SetExceptionState,
+                       SwitchExceptionState, GetBaseExceptionBlock,
+                       SetExceptionSource, GetExceptionSource ;
+ 
+      TYPE
+         EHBlock ;
+         ProcedureHandler = PROCEDURE ;
+ 
+ 
+      (*
+         Raise - invoke the exception handler associated with, number,
+                 in the active EHBlock.  It keeps a record of the number
+                 and message in the EHBlock for later use.
+      *)
+ 
+      PROCEDURE Raise (number: CARDINAL;
+                       file: ADDRESS; line: CARDINAL;
+                       column: CARDINAL; function: ADDRESS;
+                       message: ADDRESS) <* noreturn *> ;
+ 
+ 
+      (*
+         SetExceptionBlock - sets, source, as the active EHB.
+      *)
+ 
+      PROCEDURE SetExceptionBlock (source: EHBlock) ;
+ 
+ 
+      (*
+         GetExceptionBlock - returns the active EHB.
+      *)
+ 
+      PROCEDURE GetExceptionBlock () : EHBlock ;
+ 
+ 
+      (*
+         GetTextBuffer - returns the address of the EHB buffer.
+      *)
+ 
+      PROCEDURE GetTextBuffer (e: EHBlock) : ADDRESS ;
+ 
+ 
+      (*
+         GetTextBufferSize - return the size of the EHB text buffer.
+      *)
+ 
+      PROCEDURE GetTextBufferSize (e: EHBlock) : CARDINAL ;
+ 
+ 
+      (*
+         GetNumber - return the exception number associated with,
+                     source.
+      *)
+ 
+      PROCEDURE GetNumber (source: EHBlock) : CARDINAL ;
+ 
+ 
+      (*
+         InitExceptionBlock - creates and returns a new exception block.
+      *)
+ 
+      PROCEDURE InitExceptionBlock () : EHBlock ;
+ 
+ 
+      (*
+         KillExceptionBlock - destroys the EHB, e, and all its handlers.
+      *)
+ 
+      PROCEDURE KillExceptionBlock (e: EHBlock) : EHBlock ;
+ 
+ 
+      (*
+         PushHandler - install a handler in EHB, e.
+      *)
+ 
+      PROCEDURE PushHandler (e: EHBlock; number: CARDINAL; p: ProcedureHandler) ;
+ 
+ 
+      (*
+         PopHandler - removes the handler associated with, number, from
+                      EHB, e.
+      *)
+ 
+      PROCEDURE PopHandler (e: EHBlock; number: CARDINAL) ;
+ 
+ 
+      (*
+         DefaultErrorCatch - displays the current error message in
+                             the current exception block and then
+                             calls HALT.
+      *)
+ 
+      PROCEDURE DefaultErrorCatch ;
+ 
+ 
+      (*
+         BaseExceptionsThrow - configures the Modula-2 exceptions to call
+                               THROW which in turn can be caught by an
+                               exception block.  If this is not called then
+                               a Modula-2 exception will simply call an
+                               error message routine and then HALT.
+      *)
+ 
+      PROCEDURE BaseExceptionsThrow ;
+ 
+ 
+      (*
+         IsInExceptionState - returns TRUE if the program is currently
+                              in the exception state.
+      *)
+ 
+      PROCEDURE IsInExceptionState () : BOOLEAN ;
+ 
+ 
+      (*
+         SetExceptionState - returns the current exception state and
+                             then sets the current exception state to,
+                             to.
+      *)
+ 
+      PROCEDURE SetExceptionState (to: BOOLEAN) : BOOLEAN ;
+ 
+ 
+      (*
+         SwitchExceptionState - assigns, from, with the current exception
+                                state and then assigns the current exception
+                                to, to.
+      *)
+ 
+      PROCEDURE SwitchExceptionState (VAR from: BOOLEAN; to: BOOLEAN) ;
+ 
+ 
+      (*
+         GetBaseExceptionBlock - returns the initial language exception block
+                                 created.
+      *)
+ 
+      PROCEDURE GetBaseExceptionBlock () : EHBlock ;
+ 
+ 
+      (*
+         SetExceptionSource - sets the current exception source to, source.
+      *)
+ 
+      PROCEDURE SetExceptionSource (source: ADDRESS) ;
+ 
+ 
+      (*
+         GetExceptionSource - returns the current exception source.
+      *)
+ 
+      PROCEDURE GetExceptionSource () : ADDRESS ;
+ 
+ 
+      END RTExceptions.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/RTint,  Next: gm2-libs/SArgs,  Prev: gm2-libs/RTExceptions,  Up: Base libraries
+ 
+ 4.1.28 gm2-libs/RTint
+ ---------------------
+ 
+      DEFINITION MODULE RTint ;
+ 
+      (* Provides users of the COROUTINES library with the
+         ability to create interrupt sources based on
+         file descriptors and timeouts.  *)
+ 
+      FROM SYSTEM IMPORT ADDRESS ;
+ 
+      TYPE
+         DispatchVector = PROCEDURE (CARDINAL, CARDINAL, ADDRESS) ;
+ 
+ 
+      (*
+         InitInputVector - returns an interrupt vector which is associated
+                           with the file descriptor, fd.
+      *)
+ 
+      PROCEDURE InitInputVector (fd: INTEGER; pri: CARDINAL) : CARDINAL ;
+ 
+ 
+      (*
+         InitOutputVector - returns an interrupt vector which is associated
+                            with the file descriptor, fd.
+      *)
+ 
+      PROCEDURE InitOutputVector (fd: INTEGER; pri: CARDINAL) : CARDINAL ;
+ 
+ 
+      (*
+         InitTimeVector - returns an interrupt vector associated with
+                          the relative time.
+      *)
+ 
+      PROCEDURE InitTimeVector (micro, secs: CARDINAL; pri: CARDINAL) : CARDINAL ;
+ 
+ 
+      (*
+         ReArmTimeVector - reprimes the vector, vec, to deliver an interrupt
+                           at the new relative time.
+      *)
+ 
+      PROCEDURE ReArmTimeVector (vec: CARDINAL; micro, secs: CARDINAL) ;
+ 
+ 
+      (*
+         GetTimeVector - assigns, micro, and, secs, with the remaining
+                         time before this interrupt will expire.
+                         This value is only updated when a Listen
+                         occurs.
+      *)
+ 
+      PROCEDURE GetTimeVector (vec: CARDINAL; VAR micro, secs: CARDINAL) ;
+ 
+ 
+      (*
+         AttachVector - adds the pointer, p, to be associated with the interrupt
+                        vector. It returns the previous value attached to this
+                        vector.
+      *)
+ 
+      PROCEDURE AttachVector (vec: CARDINAL; ptr: ADDRESS) : ADDRESS ;
+ 
+ 
+      (*
+         IncludeVector - includes, vec, into the dispatcher list of
+                         possible interrupt causes.
+      *)
+ 
+      PROCEDURE IncludeVector (vec: CARDINAL) ;
+ 
+ 
+      (*
+         ExcludeVector - excludes, vec, from the dispatcher list of
+                         possible interrupt causes.
+      *)
+ 
+      PROCEDURE ExcludeVector (vec: CARDINAL) ;
+ 
+ 
+      (*
+         Listen - will either block indefinitely (until an interrupt)
+                  or alteratively will test to see whether any interrupts
+                  are pending.
+                  If a pending interrupt was found then, call, is called
+                  and then this procedure returns.
+                  It only listens for interrupts > pri.
+      *)
+ 
+      PROCEDURE Listen (untilInterrupt: BOOLEAN;
+                        call: DispatchVector;
+                        pri: CARDINAL) ;
+ 
+ 
+      (*
+         Init - allows the user to force the initialize order.
+      *)
+ 
+      PROCEDURE Init ;
+ 
+ 
+      END RTint.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/SArgs,  Next: gm2-libs/SCmdArgs,  Prev: gm2-libs/RTint,  Up: Base libraries
+ 
+ 4.1.29 gm2-libs/SArgs
+ ---------------------
+ 
+      DEFINITION MODULE SArgs ;
+ 
+      FROM DynamicStrings IMPORT String ;
+      EXPORT QUALIFIED GetArg, Narg ;
+ 
+ 
+      (*
+         GetArg - returns the nth argument from the command line.
+                  The success of the operation is returned.
+                  If TRUE is returned then the string, s, contains a
+                  new string, otherwise s is set to NIL.
+      *)
+ 
+      PROCEDURE GetArg (VAR s: String ; n: CARDINAL) : BOOLEAN ;
+ 
+ 
+      (*
+         Narg - returns the number of arguments available from
+                command line.
+      *)
+ 
+      PROCEDURE Narg() : CARDINAL ;
+ 
+ 
+      END SArgs.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/SCmdArgs,  Next: gm2-libs/SEnvironment,  Prev: gm2-libs/SArgs,  Up: Base libraries
+ 
+ 4.1.30 gm2-libs/SCmdArgs
+ ------------------------
+ 
+      DEFINITION MODULE SCmdArgs ;
+ 
+      FROM DynamicStrings IMPORT String ;
+ 
+      EXPORT QUALIFIED GetArg, Narg ;
+ 
+ 
+      (*
+         GetArg - returns the nth argument from the command line, CmdLine
+                  the success of the operation is returned.
+      *)
+ 
+      PROCEDURE GetArg (CmdLine: String;
+                        n: CARDINAL; VAR Argi: String) : BOOLEAN ;
+ 
+ 
+      (*
+         Narg - returns the number of arguments available from
+                command line, CmdLine.
+      *)
+ 
+      PROCEDURE Narg (CmdLine: String) : CARDINAL ;
+ 
+ 
+      END SCmdArgs.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/SEnvironment,  Next: gm2-libs/SFIO,  Prev: gm2-libs/SCmdArgs,  Up: Base libraries
+ 
+ 4.1.31 gm2-libs/SEnvironment
+ ----------------------------
+ 
+      DEFINITION MODULE SEnvironment ;
+ 
+ 
+      FROM DynamicStrings IMPORT String ;
+      EXPORT QUALIFIED GetEnvironment ;
+ 
+ 
+      (*
+         GetEnvironment - gets the environment variable Env and places
+            	       	    a copy of its value into String, dest.
+                          It returns TRUE if the string Env was found in
+                          the processes environment.
+      *)
+ 
+      PROCEDURE GetEnvironment (Env: String;
+                                VAR dest: String) : BOOLEAN ;
+ 
+ 
+      (*
+         PutEnvironment - change or add an environment variable definition EnvDef.
+                          TRUE is returned if the environment variable was
+                          set or changed successfully.
+      *)
+ 
+      PROCEDURE PutEnvironment (EnvDef: String) : BOOLEAN ;
+ 
+ 
+      END SEnvironment.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/SFIO,  Next: gm2-libs/SMathLib0,  Prev: gm2-libs/SEnvironment,  Up: Base libraries
+ 
+ 4.1.32 gm2-libs/SFIO
+ --------------------
+ 
+      DEFINITION MODULE SFIO ;
+ 
+      FROM DynamicStrings IMPORT String ;
+      FROM FIO IMPORT File ;
+ 
+      EXPORT QUALIFIED OpenToRead, OpenToWrite, OpenForRandom, Exists, WriteS, ReadS ;
+ 
+ 
+      (*
+         Exists - returns TRUE if a file named, fname exists for reading.
+      *)
+ 
+      PROCEDURE Exists (fname: String) : BOOLEAN ;
+ 
+ 
+      (*
+         OpenToRead - attempts to open a file, fname, for reading and
+                      it returns this file.
+                      The success of this operation can be checked by
+                      calling IsNoError.
+      *)
+ 
+      PROCEDURE OpenToRead (fname: String) : File ;
+ 
+ 
+      (*
+         OpenToWrite - attempts to open a file, fname, for write and
+                       it returns this file.
+                       The success of this operation can be checked by
+                       calling IsNoError.
+      *)
+ 
+      PROCEDURE OpenToWrite (fname: String) : File ;
+ 
+ 
+      (*
+         OpenForRandom - attempts to open a file, fname, for random access
+                         read or write and it returns this file.
+                         The success of this operation can be checked by
+                         calling IsNoError.
+                         towrite, determines whether the file should be
+                         opened for writing or reading.
+                         if towrite is TRUE or whether the previous file should
+                         be left alone, allowing this descriptor to seek
+                         and modify an existing file.
+      *)
+ 
+      PROCEDURE OpenForRandom (fname: String; towrite, newfile: BOOLEAN) : File ;
+ 
+ 
+      (*
+         WriteS - writes a string, s, to, file. It returns the String, s.
+      *)
+ 
+      PROCEDURE WriteS (file: File; s: String) : String ;
+ 
+ 
+      (*
+         ReadS - reads a string, s, from, file. It returns the String, s.
+                 It stops reading the string at the end of line or end of file.
+                 It consumes the newline at the end of line but does not place
+                 this into the returned string.
+      *)
+ 
+      PROCEDURE ReadS (file: File) : String ;
+ 
+ 
+      END SFIO.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/SMathLib0,  Next: gm2-libs/SYSTEM,  Prev: gm2-libs/SFIO,  Up: Base libraries
+ 
+ 4.1.33 gm2-libs/SMathLib0
+ -------------------------
+ 
+      DEFINITION MODULE SMathLib0 ;
+ 
+      CONST
+         pi   = 3.1415926535897932384626433832795028841972;
+         exp1 = 2.7182818284590452353602874713526624977572;
+ 
+ 
+      PROCEDURE __BUILTIN__ sqrt (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE exp (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE ln (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE __BUILTIN__ sin (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE __BUILTIN__ cos (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE tan (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE arctan (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE entier (x: SHORTREAL) : INTEGER ;
+ 
+ 
+      END SMathLib0.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/SYSTEM,  Next: gm2-libs/Scan,  Prev: gm2-libs/SMathLib0,  Up: Base libraries
+ 
+ 4.1.34 gm2-libs/SYSTEM
+ ----------------------
+ 
+      DEFINITION MODULE SYSTEM ;
+ 
+      EXPORT QUALIFIED BITSPERBYTE, BYTESPERWORD,
+                       LOC, WORD, BYTE, ADDRESS, INTEGER8,
+                       INTEGER16, INTEGER32, INTEGER64, CARDINAL8,
+                       CARDINAL16, CARDINAL32, CARDINAL64, WORD16,
+                       WORD32, WORD64, BITSET8, BITSET16,
+                       BITSET32, REAL32, REAL64, REAL128,
+                       COMPLEX32, COMPLEX64, COMPLEX128, CSIZE_T,
+                       CSSIZE_T,
+                       ADR, TSIZE, ROTATE, SHIFT, THROW, TBITSIZE ;
+                       (* SIZE is also exported if -fpim2 is used.  *)
+ 
+      CONST
+        BITSPERBYTE   = __ATTRIBUTE__ __BUILTIN__ ((BITS_PER_UNIT)) ;
+        BYTESPERWORD  = __ATTRIBUTE__ __BUILTIN__ ((UNITS_PER_WORD)) ;
+ 
+      (* Note that the full list of system and sized datatypes include:
+         LOC, WORD, BYTE, ADDRESS,
+ 
+         (and the non language standard target types)
+ 
+         INTEGER8, INTEGER16, INTEGER32, INTEGER64,
+         CARDINAL8, CARDINAL16, CARDINAL32, CARDINAL64,
+         WORD16, WORD32, WORD64, BITSET8, BITSET16,
+         BITSET32, REAL32, REAL64, REAL128, COMPLEX32,
+         COMPLEX64, COMPLEX128, CSIZE_T, CSSIZE_T.
+ 
+         Also note that the non-standard data types will
+         move into another module in the future.  *)
+ 
+ 
+      (* The following types are supported on this target:
+      TYPE
+         LOC ;
+         WORD ;
+         BYTE ;
+         ADDRESS ;
+         INTEGER8 ;
+         INTEGER16 ;
+         INTEGER32 ;
+         INTEGER64 ;
+         CARDINAL8 ;
+         CARDINAL16 ;
+         CARDINAL32 ;
+         CARDINAL64 ;
+         WORD16 ;
+         WORD32 ;
+         WORD64 ;
+         BITSET8 ;
+         BITSET16 ;
+         BITSET32 ;
+         REAL32 ;
+         REAL64 ;
+         REAL128 ;
+         COMPLEX32 ;
+         COMPLEX64 ;
+         COMPLEX128 ;
+         CSIZE_T ;
+         CSSIZE_T ;
+      *)
+ 
+ 
+      (*
+         all the functions below are declared internally to gm2
+         ======================================================
+ 
+      PROCEDURE ADR (VAR v: <anytype>): ADDRESS;
+        (* Returns the address of variable v. *)
+ 
+      PROCEDURE SIZE (v: <type>) : ZType;
+        (* Returns the number of BYTES used to store a v of
+           any specified <type>.  Only available if -fpim2 is used.
+        *)
+ 
+      PROCEDURE TSIZE (<type>) : CARDINAL;
+        (* Returns the number of BYTES used to store a value of the
+           specified <type>.
+        *)
+ 
+      PROCEDURE ROTATE (val: <a set type>;
+                        num: INTEGER): <type of first parameter>;
+        (* Returns a bit sequence obtained from val by rotating up/right
+           or down/right by the absolute value of num.  The direction is
+           down/right if the sign of num is negative, otherwise the direction
+           is up/left.
+        *)
+ 
+      PROCEDURE SHIFT (val: <a set type>;
+                       num: INTEGER): <type of first parameter>;
+        (* Returns a bit sequence obtained from val by shifting up/left
+           or down/right by the absolute value of num, introducing
+           zeros as necessary.  The direction is down/right if the sign of
+           num is negative, otherwise the direction is up/left.
+        *)
+ 
+      PROCEDURE THROW (i: INTEGER) <* noreturn *> ;
+        (*
+           THROW is a GNU extension and was not part of the PIM or ISO
+           standards.  It throws an exception which will be caught by the
+           EXCEPT block (assuming it exists).  This is a compiler builtin
+           function which interfaces to the GCC exception handling runtime
+           system.
+           GCC uses the term throw, hence the naming distinction between
+           the GCC builtin and the Modula-2 runtime library procedure Raise.
+           The later library procedure Raise will call SYSTEM.THROW after
+           performing various housekeeping activities.
+        *)
+ 
+      PROCEDURE TBITSIZE (<type>) : CARDINAL ;
+        (* Returns the minimum number of bits necessary to represent
+           <type>.  This procedure function is only useful for determining
+           the number of bits used for any type field within a packed RECORD.
+           It is not particularly useful elsewhere since <type> might be
+           optimized for speed, for example a BOOLEAN could occupy a WORD.
+        *)
+      *)
+ 
+      (* The following procedures are invoked by GNU Modula-2 to
+         shift non word sized set types. They are not strictly part
+         of the core PIM Modula-2, however they are used
+         to implement the SHIFT procedure defined above,
+         which are in turn used by the Logitech compatible libraries.
+ 
+         Users will access these procedures by using the procedure
+         SHIFT above and GNU Modula-2 will map SHIFT onto one of
+         the following procedures.
+      *)
+ 
+      (*
+         ShiftVal - is a runtime procedure whose job is to implement
+                    the SHIFT procedure of ISO SYSTEM. GNU Modula-2 will
+                    inline a SHIFT of a single WORD sized set and will only
+                    call this routine for larger sets.
+      *)
+ 
+      PROCEDURE ShiftVal (VAR s, d: ARRAY OF BITSET;
+                          SetSizeInBits: CARDINAL;
+                          ShiftCount: INTEGER) ;
+ 
+ 
+      (*
+         ShiftLeft - performs the shift left for a multi word set.
+                     This procedure might be called by the back end of
+                     GNU Modula-2 depending whether amount is known at
+                     compile time.
+      *)
+ 
+      PROCEDURE ShiftLeft (VAR s, d: ARRAY OF BITSET;
+                           SetSizeInBits: CARDINAL;
+                           ShiftCount: CARDINAL) ;
+ 
+      (*
+         ShiftRight - performs the shift left for a multi word set.
+                      This procedure might be called by the back end of
+                      GNU Modula-2 depending whether amount is known at
+                      compile time.
+      *)
+ 
+      PROCEDURE ShiftRight (VAR s, d: ARRAY OF BITSET;
+                            SetSizeInBits: CARDINAL;
+                            ShiftCount: CARDINAL) ;
+ 
+ 
+      (*
+         RotateVal - is a runtime procedure whose job is to implement
+                     the ROTATE procedure of ISO SYSTEM. GNU Modula-2 will
+                     inline a ROTATE of a single WORD (or less)
+                     sized set and will only call this routine for larger
+                     sets.
+      *)
+ 
+      PROCEDURE RotateVal (VAR s, d: ARRAY OF BITSET;
+                           SetSizeInBits: CARDINAL;
+                           RotateCount: INTEGER) ;
+ 
+ 
+      (*
+         RotateLeft - performs the rotate left for a multi word set.
+                      This procedure might be called by the back end of
+                      GNU Modula-2 depending whether amount is known at
+                      compile time.
+      *)
+ 
+      PROCEDURE RotateLeft (VAR s, d: ARRAY OF BITSET;
+                            SetSizeInBits: CARDINAL;
+                            RotateCount: CARDINAL) ;
+ 
+ 
+      (*
+         RotateRight - performs the rotate right for a multi word set.
+                       This procedure might be called by the back end of
+                       GNU Modula-2 depending whether amount is known at
+                       compile time.
+      *)
+ 
+      PROCEDURE RotateRight (VAR s, d: ARRAY OF BITSET;
+                             SetSizeInBits: CARDINAL;
+                             RotateCount: CARDINAL) ;
+ 
+ 
+      END SYSTEM.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/Scan,  Next: gm2-libs/Selective,  Prev: gm2-libs/SYSTEM,  Up: Base libraries
+ 
+ 4.1.35 gm2-libs/Scan
+ --------------------
+ 
+      DEFINITION MODULE Scan ;
+ 
+      (* Provides a primitive symbol fetching from input.
+         Symbols are delimited by spaces and tabs.
+         Limitation only allows one source file at
+         a time to deliver symbols.  *)
+ 
+ 
+      EXPORT QUALIFIED GetNextSymbol, WriteError,
+                       OpenSource, CloseSource,
+                       TerminateOnError, DefineComments ;
+ 
+ 
+      (* OpenSource - opens a source file for reading.                  *)
+ 
+      PROCEDURE OpenSource (a: ARRAY OF CHAR) : BOOLEAN ;
+ 
+ 
+      (* CloseSource - closes the current source file from reading.     *)
+ 
+      PROCEDURE CloseSource ;
+ 
+ 
+      (* GetNextSymbol gets the next source symbol and returns it in a. *)
+ 
+      PROCEDURE GetNextSymbol (VAR a: ARRAY OF CHAR) ;
+ 
+ 
+      (* WriteError writes a message, a, under the source line, which   *)
+      (* attempts to pinpoint the Symbol at fault.                      *)
+ 
+      PROCEDURE WriteError (a: ARRAY OF CHAR) ;
+ 
+ 
+      (*
+         TerminateOnError - exits with status 1 if we call WriteError.
+      *)
+ 
+      PROCEDURE TerminateOnError ;
+ 
+ 
+      (*
+         DefineComments - defines the start of comments within the source
+                          file.
+ 
+                          The characters in Start define the comment start
+                          and characters in End define the end.
+                          The BOOLEAN eoln determine whether the comment
+                          is terminated by end of line. If eoln is TRUE
+                          then End is ignored.
+ 
+                          If this procedure is never called then no comments
+                          are allowed.
+      *)
+ 
+      PROCEDURE DefineComments (Start, End: ARRAY OF CHAR; eoln: BOOLEAN) ;
+ 
+ 
+      END Scan.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/Selective,  Next: gm2-libs/StdIO,  Prev: gm2-libs/Scan,  Up: Base libraries
+ 
+ 4.1.36 gm2-libs/Selective
+ -------------------------
+ 
+      DEFINITION MODULE Selective ;
+ 
+      FROM SYSTEM IMPORT ADDRESS ;
+ 
+      EXPORT QUALIFIED SetOfFd, Timeval,
+                       InitSet, KillSet, InitTime, KillTime,
+                       GetTime, SetTime,
+                       FdZero, FdSet, FdClr, FdIsSet, Select,
+                       MaxFdsPlusOne, WriteCharRaw, ReadCharRaw,
+                       GetTimeOfDay ;
+ 
+      TYPE
+         SetOfFd = ADDRESS ;    (* Hidden type in Selective.c *)
+         Timeval = ADDRESS ;    (* Hidden type in Selective.c *)
+ 
+ 
+      PROCEDURE Select (nooffds: CARDINAL;
+                        readfds, writefds, exceptfds: SetOfFd;
+                        timeout: Timeval) : INTEGER ;
+ 
+      PROCEDURE InitTime (sec, usec: CARDINAL) : Timeval ;
+      PROCEDURE KillTime (t: Timeval) : Timeval ;
+      PROCEDURE GetTime (t: Timeval; VAR sec, usec: CARDINAL) ;
+      PROCEDURE SetTime (t: Timeval; sec, usec: CARDINAL) ;
+      PROCEDURE InitSet () : SetOfFd ;
+      PROCEDURE KillSet (s: SetOfFd) : SetOfFd ;
+      PROCEDURE FdZero (s: SetOfFd) ;
+      PROCEDURE FdSet (fd: INTEGER; s: SetOfFd) ;
+      PROCEDURE FdClr (fd: INTEGER; s: SetOfFd) ;
+      PROCEDURE FdIsSet (fd: INTEGER; s: SetOfFd) : BOOLEAN ;
+      PROCEDURE MaxFdsPlusOne (a, b: INTEGER) : INTEGER ;
+ 
+      (* you must use the raw routines with select - not the FIO buffered routines *)
+      PROCEDURE WriteCharRaw (fd: INTEGER; ch: CHAR) ;
+      PROCEDURE ReadCharRaw (fd: INTEGER) : CHAR ;
+ 
+      (*
+         GetTimeOfDay - fills in a record, Timeval, filled in with the
+                        current system time in seconds and microseconds.
+                        It returns zero (see man 3p gettimeofday)
+      *)
+ 
+      PROCEDURE GetTimeOfDay (tv: Timeval) : INTEGER ;
+ 
+ 
+      END Selective.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/StdIO,  Next: gm2-libs/Storage,  Prev: gm2-libs/Selective,  Up: Base libraries
+ 
+ 4.1.37 gm2-libs/StdIO
+ ---------------------
+ 
+      DEFINITION MODULE StdIO ;
+ 
+      EXPORT QUALIFIED ProcRead, ProcWrite,
+                       Read, Write,
+                       PushOutput, PopOutput, GetCurrentOutput,
+                       PushInput, PopInput, GetCurrentInput ;
+ 
+ 
+      TYPE
+         ProcWrite = PROCEDURE (CHAR) ;
+         ProcRead  = PROCEDURE (VAR CHAR) ;
+ 
+ 
+      (*
+         Read - is the generic procedure that all higher application layers
+                should use to receive a character.
+      *)
+ 
+      PROCEDURE Read (VAR ch: CHAR) ;
+ 
+ 
+      (*
+         Write - is the generic procedure that all higher application layers
+                 should use to emit a character.
+      *)
+ 
+      PROCEDURE Write (ch: CHAR) ;
+ 
+ 
+      (*
+         PushOutput - pushes the current Write procedure onto a stack,
+                      any future references to Write will actually invoke
+                      procedure, p.
+      *)
+ 
+      PROCEDURE PushOutput (p: ProcWrite) ;
+ 
+ 
+      (*
+         PopOutput - restores Write to use the previous output procedure.
+      *)
+ 
+      PROCEDURE PopOutput ;
+ 
+ 
+      (*
+         GetCurrentOutput - returns the current output procedure.
+      *)
+ 
+      PROCEDURE GetCurrentOutput () : ProcWrite ;
+ 
+ 
+      (*
+         PushInput - pushes the current Read procedure onto a stack,
+                     any future references to Read will actually invoke
+                     procedure, p.
+      *)
+ 
+      PROCEDURE PushInput (p: ProcRead) ;
+ 
+ 
+      (*
+         PopInput - restores Write to use the previous output procedure.
+      *)
+ 
+      PROCEDURE PopInput ;
+ 
+ 
+      (*
+         GetCurrentInput - returns the current input procedure.
+      *)
+ 
+      PROCEDURE GetCurrentInput () : ProcRead ;
+ 
+ 
+      END StdIO.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/Storage,  Next: gm2-libs/StrCase,  Prev: gm2-libs/StdIO,  Up: Base libraries
+ 
+ 4.1.38 gm2-libs/Storage
+ -----------------------
+ 
+      DEFINITION MODULE Storage ;
+ 
+      FROM SYSTEM IMPORT ADDRESS ;
+ 
+      EXPORT QUALIFIED ALLOCATE, DEALLOCATE, REALLOCATE, Available ;
+ 
+ 
+ 
+      (*
+         ALLOCATE - attempt to allocate memory from the heap.
+                    NIL is returned in, a, if ALLOCATE fails.
+      *)
+ 
+      PROCEDURE ALLOCATE (VAR a: ADDRESS ; Size: CARDINAL) ;
+ 
+ 
+      (*
+         DEALLOCATE - return, Size, bytes to the heap.
+                      The variable, a, is set to NIL.
+      *)
+ 
+      PROCEDURE DEALLOCATE (VAR a: ADDRESS ; Size: CARDINAL) ;
+ 
+ 
+      (*
+         REALLOCATE - attempts to reallocate storage. The address,
+                      a, should either be NIL in which case ALLOCATE
+                      is called, or alternatively it should have already
+                      been initialized by ALLOCATE. The allocated storage
+                      is resized accordingly.
+      *)
+ 
+      PROCEDURE REALLOCATE (VAR a: ADDRESS; Size: CARDINAL) ;
+ 
+ 
+      (*
+         Available - returns TRUE if, Size, bytes can be allocated.
+      *)
+ 
+      PROCEDURE Available (Size: CARDINAL) : BOOLEAN ;
+ 
+ 
+      END Storage.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/StrCase,  Next: gm2-libs/StrIO,  Prev: gm2-libs/Storage,  Up: Base libraries
+ 
+ 4.1.39 gm2-libs/StrCase
+ -----------------------
+ 
+      DEFINITION MODULE StrCase ;
+ 
+ 
+      EXPORT QUALIFIED StrToUpperCase, StrToLowerCase, Cap, Lower ;
+ 
+ 
+      (*
+         StrToUpperCase - converts string, a, to uppercase returning the
+                          result in, b.
+      *)
+ 
+      PROCEDURE StrToUpperCase (a: ARRAY OF CHAR ; VAR b: ARRAY OF CHAR) ;
+ 
+ 
+      (*
+         StrToLowerCase - converts string, a, to lowercase returning the
+                          result in, b.
+      *)
+ 
+      PROCEDURE StrToLowerCase (a: ARRAY OF CHAR ; VAR b: ARRAY OF CHAR) ;
+ 
+ 
+      (*
+         Cap - converts a lower case character into a capital character.
+               If the character is not a lower case character 'a'..'z'
+               then the character is simply returned unaltered.
+      *)
+ 
+      PROCEDURE Cap (ch: CHAR) : CHAR ;
+ 
+ 
+      (*
+         Lower - converts an upper case character into a lower case character.
+                 If the character is not an upper case character 'A'..'Z'
+                 then the character is simply returned unaltered.
+      *)
+ 
+      PROCEDURE Lower (ch: CHAR) : CHAR ;
+ 
+ 
+      END StrCase.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/StrIO,  Next: gm2-libs/StrLib,  Prev: gm2-libs/StrCase,  Up: Base libraries
+ 
+ 4.1.40 gm2-libs/StrIO
+ ---------------------
+ 
+      DEFINITION MODULE StrIO ;
+ 
+      EXPORT QUALIFIED ReadString, WriteString,
+                       WriteLn ;
+ 
+ 
+      (*
+         WriteLn - writes a carriage return and a newline
+                   character.
+      *)
+ 
+      PROCEDURE WriteLn ;
+ 
+ 
+      (*
+         ReadString - reads a sequence of characters into a string.
+                      Line editing accepts Del, Ctrl H, Ctrl W and
+                      Ctrl U.
+      *)
+ 
+      PROCEDURE ReadString (VAR a: ARRAY OF CHAR) ;
+ 
+ 
+      (*
+         WriteString - writes a string to the default output.
+      *)
+ 
+      PROCEDURE WriteString (a: ARRAY OF CHAR) ;
+ 
+ 
+      END StrIO.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/StrLib,  Next: gm2-libs/StringConvert,  Prev: gm2-libs/StrIO,  Up: Base libraries
+ 
+ 4.1.41 gm2-libs/StrLib
+ ----------------------
+ 
+      DEFINITION MODULE StrLib ;
+ 
+      EXPORT QUALIFIED StrConCat, StrLen, StrCopy, StrEqual, StrLess,
+            	       	 IsSubString, StrRemoveWhitePrefix ;
+ 
+ 
+      (*
+         StrConCat - combines a and b into c.
+      *)
+ 
+      PROCEDURE StrConCat (a, b: ARRAY OF CHAR; VAR c: ARRAY OF CHAR) ;
+ 
+ 
+      (*
+         StrLess - returns TRUE if string, a, alphabetically occurs before
+                   string, b.
+      *)
+ 
+      PROCEDURE StrLess (a, b: ARRAY OF CHAR) : BOOLEAN ;
+ 
+ 
+      (*
+         StrEqual - performs a = b on two strings.
+      *)
+ 
+      PROCEDURE StrEqual (a, b: ARRAY OF CHAR) : BOOLEAN ;
+ 
+ 
+      (*
+         StrLen - returns the length of string, a.
+      *)
+ 
+      PROCEDURE StrLen (a: ARRAY OF CHAR) : CARDINAL ;
+ 
+ 
+      (*
+         StrCopy - copy string src into string dest providing dest is large enough.
+                   If dest is smaller than a then src then the string is truncated when
+                   dest is full.  Add a nul character if there is room in dest.
+      *)
+ 
+      PROCEDURE StrCopy (src: ARRAY OF CHAR ; VAR dest: ARRAY OF CHAR) ;
+ 
+ 
+      (*
+         IsSubString - returns true if b is a subcomponent of a.
+      *)
+ 
+      PROCEDURE IsSubString (a, b: ARRAY OF CHAR) : BOOLEAN ;
+ 
+ 
+      (*
+         StrRemoveWhitePrefix - copies string, into string, b, excluding any white
+                                space infront of a.
+      *)
+ 
+      PROCEDURE StrRemoveWhitePrefix (a: ARRAY OF CHAR; VAR b: ARRAY OF CHAR) ;
+ 
+ 
+      END StrLib.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/StringConvert,  Next: gm2-libs/SysExceptions,  Prev: gm2-libs/StrLib,  Up: Base libraries
+ 
+ 4.1.42 gm2-libs/StringConvert
+ -----------------------------
+ 
+      DEFINITION MODULE StringConvert ;
+ 
+      FROM DynamicStrings IMPORT String ;
+      EXPORT QUALIFIED IntegerToString, StringToInteger,
+                       StringToLongInteger, LongIntegerToString,
+                       StringToCardinal, CardinalToString,
+                       StringToLongCardinal, LongCardinalToString,
+                       StringToShortCardinal, ShortCardinalToString,
+                       StringToLongreal, LongrealToString,
+                       ToSigFig,
+                       stoi, itos, ctos, stoc, hstoi, ostoi, bstoi,
+                       hstoc, ostoc, bstoc,
+                       stor, stolr ;
+ 
+ 
+      (*
+         IntegerToString - converts INTEGER, i, into a String. The field with
+                           can be specified if non zero. Leading characters
+                           are defined by padding and this function will
+                           prepend a + if sign is set to TRUE.
+                           The base allows the caller to generate binary,
+                           octal, decimal, hexidecimal numbers.
+                           The value of lower is only used when hexidecimal
+                           numbers are generated and if TRUE then digits
+                           abcdef are used, and if FALSE then ABCDEF are used.
+      *)
+ 
+      PROCEDURE IntegerToString (i: INTEGER; width: CARDINAL; padding: CHAR; sign: BOOLEAN;
+                                 base: CARDINAL; lower: BOOLEAN) : String ;
+ 
+ 
+      (*
+         CardinalToString - converts CARDINAL, c, into a String. The field
+                            width can be specified if non zero. Leading
+                            characters are defined by padding.
+                            The base allows the caller to generate binary,
+                            octal, decimal, hexidecimal numbers.
+                            The value of lower is only used when hexidecimal
+                            numbers are generated and if TRUE then digits
+                            abcdef are used, and if FALSE then ABCDEF are used.
+      *)
+ 
+      PROCEDURE CardinalToString (c: CARDINAL; width: CARDINAL; padding: CHAR;
+                                  base: CARDINAL; lower: BOOLEAN) : String ;
+ 
+ 
+      (*
+         StringToInteger - converts a string, s, of, base, into an INTEGER.
+                           Leading white space is ignored. It stops converting
+                           when either the string is exhausted or if an illegal
+                           numeral is found.
+                           The parameter found is set TRUE if a number was found.
+      *)
+ 
+      PROCEDURE StringToInteger (s: String; base: CARDINAL; VAR found: BOOLEAN) : INTEGER ;
+ 
+ 
+      (*
+         StringToCardinal - converts a string, s, of, base, into a CARDINAL.
+                            Leading white space is ignored. It stops converting
+                            when either the string is exhausted or if an illegal
+                            numeral is found.
+                            The parameter found is set TRUE if a number was found.
+      *)
+ 
+      PROCEDURE StringToCardinal (s: String; base: CARDINAL; VAR found: BOOLEAN) : CARDINAL ;
+ 
+ 
+      (*
+         LongIntegerToString - converts LONGINT, i, into a String. The field with
+                               can be specified if non zero. Leading characters
+                               are defined by padding and this function will
+                               prepend a + if sign is set to TRUE.
+                               The base allows the caller to generate binary,
+                               octal, decimal, hexidecimal numbers.
+                               The value of lower is only used when hexidecimal
+                               numbers are generated and if TRUE then digits
+                               abcdef are used, and if FALSE then ABCDEF are used.
+      *)
+ 
+      PROCEDURE LongIntegerToString (i: LONGINT; width: CARDINAL; padding: CHAR;
+                                     sign: BOOLEAN; base: CARDINAL; lower: BOOLEAN) : String ;
+ 
+ 
+ 
+      (*
+         StringToLongInteger - converts a string, s, of, base, into an LONGINT.
+                               Leading white space is ignored. It stops converting
+                               when either the string is exhausted or if an illegal
+                               numeral is found.
+                               The parameter found is set TRUE if a number was found.
+      *)
+ 
+      PROCEDURE StringToLongInteger (s: String; base: CARDINAL; VAR found: BOOLEAN) : LONGINT ;
+ 
+ 
+      (*
+         LongCardinalToString - converts LONGCARD, c, into a String. The field
+                                width can be specified if non zero. Leading
+                                characters are defined by padding.
+                                The base allows the caller to generate binary,
+                                octal, decimal, hexidecimal numbers.
+                                The value of lower is only used when hexidecimal
+                                numbers are generated and if TRUE then digits
+                                abcdef are used, and if FALSE then ABCDEF are used.
+      *)
+ 
+      PROCEDURE LongCardinalToString (c: LONGCARD; width: CARDINAL; padding: CHAR;
+                                      base: CARDINAL; lower: BOOLEAN) : String ;
+ 
+ 
+      (*
+         StringToLongCardinal - converts a string, s, of, base, into a LONGCARD.
+                                Leading white space is ignored. It stops converting
+                                when either the string is exhausted or if an illegal
+                                numeral is found.
+                                The parameter found is set TRUE if a number was found.
+      *)
+ 
+      PROCEDURE StringToLongCardinal (s: String; base: CARDINAL; VAR found: BOOLEAN) : LONGCARD ;
+ 
+ 
+      (*
+         ShortCardinalToString - converts SHORTCARD, c, into a String. The field
+                                 width can be specified if non zero. Leading
+                                 characters are defined by padding.
+                                 The base allows the caller to generate binary,
+                                 octal, decimal, hexidecimal numbers.
+                                 The value of lower is only used when hexidecimal
+                                 numbers are generated and if TRUE then digits
+                                 abcdef are used, and if FALSE then ABCDEF are used.
+      *)
+ 
+      PROCEDURE ShortCardinalToString (c: SHORTCARD; width: CARDINAL; padding: CHAR;
+                                       base: CARDINAL; lower: BOOLEAN) : String ;
+ 
+ 
+      (*
+         StringToShortCardinal - converts a string, s, of, base, into a SHORTCARD.
+                                 Leading white space is ignored. It stops converting
+                                 when either the string is exhausted or if an illegal
+                                 numeral is found.
+                                 The parameter found is set TRUE if a number was found.
+      *)
+ 
+      PROCEDURE StringToShortCardinal (s: String; base: CARDINAL;
+                                       VAR found: BOOLEAN) : SHORTCARD ;
+ 
+ 
+      (*
+         stoi - decimal string to INTEGER
+      *)
+ 
+      PROCEDURE stoi (s: String) : INTEGER ;
+ 
+ 
+      (*
+         itos - integer to decimal string.
+      *)
+ 
+      PROCEDURE itos (i: INTEGER; width: CARDINAL; padding: CHAR; sign: BOOLEAN) : String ;
+ 
+ 
+      (*
+         ctos - cardinal to decimal string.
+      *)
+ 
+      PROCEDURE ctos (c: CARDINAL; width: CARDINAL; padding: CHAR) : String ;
+ 
+ 
+      (*
+         stoc - decimal string to CARDINAL
+      *)
+ 
+      PROCEDURE stoc (s: String) : CARDINAL ;
+ 
+ 
+      (*
+         hstoi - hexidecimal string to INTEGER
+      *)
+ 
+      PROCEDURE hstoi (s: String) : INTEGER ;
+ 
+ 
+      (*
+         ostoi - octal string to INTEGER
+      *)
+ 
+      PROCEDURE ostoi (s: String) : INTEGER ;
+ 
+ 
+      (*
+         bstoi - binary string to INTEGER
+      *)
+ 
+      PROCEDURE bstoi (s: String) : INTEGER ;
+ 
+ 
+      (*
+         hstoc - hexidecimal string to CARDINAL
+      *)
+ 
+      PROCEDURE hstoc (s: String) : CARDINAL ;
+ 
+ 
+      (*
+         ostoc - octal string to CARDINAL
+      *)
+ 
+      PROCEDURE ostoc (s: String) : CARDINAL ;
+ 
+ 
+      (*
+         bstoc - binary string to CARDINAL
+      *)
+ 
+      PROCEDURE bstoc (s: String) : CARDINAL ;
+ 
+ 
+      (*
+         StringToLongreal - returns a LONGREAL and sets found to TRUE
+                            if a legal number is seen.
+      *)
+ 
+      PROCEDURE StringToLongreal (s: String; VAR found: BOOLEAN) : LONGREAL ;
+ 
+ 
+      (*
+         LongrealToString - converts a LONGREAL number, Real, which has,
+                            TotalWidth, and FractionWidth into a string.
+ 
+                            So for example:
+ 
+                            LongrealToString(1.0, 4, 2)  -> '1.00'
+                            LongrealToString(12.3, 5, 2) -> '12.30'
+                            LongrealToString(12.3, 6, 2) -> ' 12.30'
+                            LongrealToString(12.3, 6, 3) -> '12.300'
+ 
+                            if total width is too small then the fraction
+                            becomes truncated.
+ 
+                            LongrealToString(12.3, 5, 3) -> '12.30'
+ 
+                            If TotalWidth is 0 then the function
+                            will return the value of x which is converted
+                            into as a fixed point number with exhaustive
+                            precision.
+      *)
+ 
+      PROCEDURE LongrealToString (x: LONGREAL;
+                                  TotalWidth, FractionWidth: CARDINAL) : String ;
+ 
+ 
+      (*
+         stor - returns a REAL given a string.
+      *)
+ 
+      PROCEDURE stor (s: String) : REAL ;
+ 
+ 
+      (*
+         stolr - returns a LONGREAL given a string.
+      *)
+ 
+      PROCEDURE stolr (s: String) : LONGREAL ;
+ 
+ 
+      (*
+         ToSigFig - returns a floating point or base 10 integer
+                    string which is accurate to, n, significant
+                    figures.  It will return a new String
+                    and, s, will be destroyed.
+ 
+ 
+                    So:  12.345
+ 
+                    rounded to the following significant figures yields
+ 
+                    5      12.345
+                    4      12.34
+                    3      12.3
+                    2      12
+                    1      10
+      *)
+ 
+      PROCEDURE ToSigFig (s: String; n: CARDINAL) : String ;
+ 
+ 
+      (*
+         ToDecimalPlaces - returns a floating point or base 10 integer
+                           string which is accurate to, n, decimal
+                           places.  It will return a new String
+                           and, s, will be destroyed.
+                           Decimal places yields, n, digits after
+                           the .
+ 
+                           So:  12.345
+ 
+                           rounded to the following decimal places yields
+ 
+                           5      12.34500
+                           4      12.3450
+                           3      12.345
+                           2      12.34
+                           1      12.3
+      *)
+ 
+      PROCEDURE ToDecimalPlaces (s: String; n: CARDINAL) : String ;
+ 
+ 
+      END StringConvert.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/SysExceptions,  Next: gm2-libs/SysStorage,  Prev: gm2-libs/StringConvert,  Up: Base libraries
+ 
+ 4.1.43 gm2-libs/SysExceptions
+ -----------------------------
+ 
+      DEFINITION MODULE SysExceptions ;
+ 
+      (* Provides a mechanism for the underlying libraries to
+         configure the exception routines.  This mechanism
+         is used by both the ISO and PIM libraries.
+         It is written to be ISO compliant and this also
+         allows for mixed dialect projects.  *)
+ 
+      FROM SYSTEM IMPORT ADDRESS ;
+ 
+      TYPE
+         PROCEXCEPTION = PROCEDURE (ADDRESS) ;
+ 
+      PROCEDURE InitExceptionHandlers (indexf, range, casef, invalidloc,
+                                       function, wholevalue, wholediv,
+                                       realvalue, realdiv, complexvalue,
+                                       complexdiv, protection, systemf,
+                                       coroutine, exception: PROCEXCEPTION) ;
+ 
+ 
+      END SysExceptions.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/SysStorage,  Next: gm2-libs/TimeString,  Prev: gm2-libs/SysExceptions,  Up: Base libraries
+ 
+ 4.1.44 gm2-libs/SysStorage
+ --------------------------
+ 
+      DEFINITION MODULE SysStorage ;
+ 
+      (*  Provides dynamic allocation for the system components.
+          This allows the application to use the traditional Storage module
+          which can be handled differently.  *)
+ 
+      FROM SYSTEM IMPORT ADDRESS ;
+      EXPORT QUALIFIED ALLOCATE, DEALLOCATE, REALLOCATE, Available, Init ;
+ 
+ 
+      (*
+         ALLOCATE - attempt to allocate memory from the heap.
+                    NIL is returned in, a, if ALLOCATE fails.
+      *)
+ 
+      PROCEDURE ALLOCATE (VAR a: ADDRESS ; size: CARDINAL) ;
+ 
+ 
+      (*
+         DEALLOCATE - return, size, bytes to the heap.
+                      The variable, a, is set to NIL.
+      *)
+ 
+      PROCEDURE DEALLOCATE (VAR a: ADDRESS ; size: CARDINAL) ;
+ 
+ 
+      (*
+         REALLOCATE - attempts to reallocate storage. The address,
+                      a, should either be NIL in which case ALLOCATE
+                      is called, or alternatively it should have already
+                      been initialized by ALLOCATE. The allocated storage
+                      is resized accordingly.
+      *)
+ 
+      PROCEDURE REALLOCATE (VAR a: ADDRESS; size: CARDINAL) ;
+ 
+ 
+      (*
+         Available - returns TRUE if, size, bytes can be allocated.
+      *)
+ 
+      PROCEDURE Available (size: CARDINAL) : BOOLEAN;
+ 
+ 
+      (*
+         Init - initializes the heap.
+                This does nothing on a GNU/Linux system.
+                But it remains here since it might be used in an
+                embedded system.
+      *)
+ 
+      PROCEDURE Init ;
+ 
+ 
+      END SysStorage.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/TimeString,  Next: gm2-libs/UnixArgs,  Prev: gm2-libs/SysStorage,  Up: Base libraries
+ 
+ 4.1.45 gm2-libs/TimeString
+ --------------------------
+ 
+      DEFINITION MODULE TimeString ;
+ 
+      EXPORT QUALIFIED GetTimeString ;
+ 
+ 
+      (*
+         GetTimeString - places the time in ascii format into array, a.
+ 
+      *)
+ 
+      PROCEDURE GetTimeString (VAR a: ARRAY OF CHAR) ;
+ 
+ 
+      END TimeString.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/UnixArgs,  Next: gm2-libs/cbuiltin,  Prev: gm2-libs/TimeString,  Up: Base libraries
+ 
+ 4.1.46 gm2-libs/UnixArgs
+ ------------------------
+ 
+      DEFINITION MODULE UnixArgs ;
+ 
+      FROM SYSTEM IMPORT ADDRESS ;
+ 
+      EXPORT QUALIFIED GetArgC, GetArgV, GetEnvV ;
+ 
+      PROCEDURE GetArgC () : INTEGER ;
+      PROCEDURE GetArgV () : ADDRESS ;
+      PROCEDURE GetEnvV () : ADDRESS ;
+ 
+ 
+      END UnixArgs.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/cbuiltin,  Next: gm2-libs/cgetopt,  Prev: gm2-libs/UnixArgs,  Up: Base libraries
+ 
+ 4.1.47 gm2-libs/cbuiltin
+ ------------------------
+ 
+      DEFINITION MODULE FOR "C" cbuiltin ;
+ 
+      FROM SYSTEM IMPORT ADDRESS ;
+      EXPORT UNQUALIFIED alloca, memcpy,
+      		   isfinite, isfinitef, isfinitel,
+      		   isinf_sign, isinf_signf, isinf_signl,
+                         sinf, sinl, sin,
+                         cosf, cosl, cos,
+                         atan2f, atan2l, atan2,
+                         sqrtf, sqrtl, sqrt,
+                         fabsf, fabsl, fabs,
+                         logf, logl, log,
+                         expf, expl, exp,
+                         log10f, log10l, log10,
+                         exp10f, exp10l, exp10,
+                         ilogbf, ilogbl, ilogb,
+                         significand, significandf, significandl,
+                         modf, modff, modfl,
+                         nextafter, nextafterf, nextafterl,
+                         nexttoward, nexttowardf, nexttowardl,
+                         scalb, scalbf, scalbl,
+                         scalbn, scalbnf, scalbnl,
+                         scalbln, scalblnf, scalblnl,
+ 
+                         cabsf, cabsl, cabs,
+                         cargf, carg, cargl,
+                         conjf, conj, conjl,
+                         cpowf, cpow, cpowl,
+                         csqrtf, csqrt, csqrtl,
+                         cexpf, cexp, cexpl,
+                         clogf, clog, clogl,
+                         csinf, csin, csinl,
+                         ccosf, ccos, ccosl,
+                         ctanf, ctan, ctanl,
+                         casinf, casin, casinl,
+                         cacosf, cacos, cacosl,
+                         catanf, catan, catanl,
+ 
+                         index, rindex,
+                         memcmp, memset, memmove,
+                         strcat, strncat, strcpy, strncpy, strcmp, strncmp,
+                         strlen, strstr, strpbrk, strspn, strcspn, strchr, strrchr ;
+ 
+      PROCEDURE alloca (i: CARDINAL) : ADDRESS ;
+      PROCEDURE memcpy (dest, src: ADDRESS; n: CARDINAL) : ADDRESS ;
+      PROCEDURE isfinite (x: REAL) : BOOLEAN ;
+      PROCEDURE isfinitel (x: LONGREAL) : BOOLEAN ;
+      PROCEDURE isfinitef (x: SHORTREAL) : BOOLEAN ;
+      PROCEDURE isinf_sign (x: REAL) : BOOLEAN ;
+      PROCEDURE isinf_signl (x: LONGREAL) : BOOLEAN ;
+      PROCEDURE isinf_signf (x: SHORTREAL) : BOOLEAN ;
+      PROCEDURE sinf (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE sin (x: REAL) : REAL ;
+      PROCEDURE sinl (x: LONGREAL) : LONGREAL ;
+      PROCEDURE cosf (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE cos (x: REAL) : REAL ;
+      PROCEDURE cosl (x: LONGREAL) : LONGREAL ;
+      PROCEDURE atan2f (x, y: SHORTREAL) : SHORTREAL ;
+      PROCEDURE atan2 (x, y: REAL) : REAL ;
+      PROCEDURE atan2l (x, y: LONGREAL) : LONGREAL ;
+      PROCEDURE sqrtf (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE sqrt (x: REAL) : REAL ;
+      PROCEDURE sqrtl (x: LONGREAL) : LONGREAL ;
+      PROCEDURE fabsf (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE fabs (x: REAL) : REAL ;
+      PROCEDURE fabsl (x: LONGREAL) : LONGREAL ;
+      PROCEDURE logf (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE log (x: REAL) : REAL ;
+      PROCEDURE logl (x: LONGREAL) : LONGREAL ;
+      PROCEDURE expf (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE exp (x: REAL) : REAL ;
+      PROCEDURE expl (x: LONGREAL) : LONGREAL ;
+      PROCEDURE log10f (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE log10 (x: REAL) : REAL ;
+      PROCEDURE log10l (x: LONGREAL) : LONGREAL ;
+      PROCEDURE exp10f (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE exp10 (x: REAL) : REAL ;
+      PROCEDURE exp10l (x: LONGREAL) : LONGREAL ;
+      PROCEDURE ilogbf (x: SHORTREAL) : INTEGER ;
+      PROCEDURE ilogb (x: REAL) : INTEGER ;
+      PROCEDURE ilogbl (x: LONGREAL) : INTEGER ;
+ 
+      PROCEDURE significand (r: REAL) : REAL ;
+      PROCEDURE significandf (s: SHORTREAL) : SHORTREAL ;
+      PROCEDURE significandl (l: LONGREAL) : LONGREAL ;
+ 
+      PROCEDURE modf (x: REAL; VAR y: REAL) : REAL ;
+      PROCEDURE modff (x: SHORTREAL; VAR y: SHORTREAL) : SHORTREAL ;
+      PROCEDURE modfl (x: LONGREAL; VAR y: LONGREAL) : LONGREAL ;
+ 
+      PROCEDURE nextafter (x, y: REAL) : REAL ;
+      PROCEDURE nextafterf (x, y: SHORTREAL) : SHORTREAL ;
+      PROCEDURE nextafterl (x, y: LONGREAL) : LONGREAL ;
+ 
+      PROCEDURE nexttoward (x, y: REAL) : REAL ;
+      PROCEDURE nexttowardf (x, y: SHORTREAL) : SHORTREAL ;
+      PROCEDURE nexttowardl (x, y: LONGREAL) : LONGREAL ;
+ 
+      PROCEDURE scalb (x, n: REAL) : REAL ;
+      PROCEDURE scalbf (x, n: SHORTREAL) : SHORTREAL ;
+      PROCEDURE scalbl (x, n: LONGREAL) : LONGREAL ;
+ 
+      PROCEDURE scalbn (x: REAL; n: INTEGER) : REAL ;
+      PROCEDURE scalbnf (x: SHORTREAL; n: INTEGER) : SHORTREAL ;
+      PROCEDURE scalbnl (x: LONGREAL; n: INTEGER) : LONGREAL ;
+ 
+      PROCEDURE scalbln (x: REAL; n: LONGINT) : REAL ;
+      PROCEDURE scalblnf (x: SHORTREAL; n: LONGINT) : SHORTREAL ;
+      PROCEDURE scalblnl (x: LONGREAL; n: LONGINT) : LONGREAL ;
+ 
+      PROCEDURE cabsf (z: SHORTCOMPLEX) : SHORTREAL ;
+      PROCEDURE cabs (z: COMPLEX) : REAL ;
+      PROCEDURE cabsl (z: LONGCOMPLEX) : LONGREAL ;
+ 
+      PROCEDURE cargf (z: SHORTCOMPLEX) : SHORTREAL ;
+      PROCEDURE carg (z: COMPLEX) : REAL ;
+      PROCEDURE cargl (z: LONGCOMPLEX) : LONGREAL ;
+ 
+      PROCEDURE conjf (z: SHORTCOMPLEX) : SHORTCOMPLEX ;
+      PROCEDURE conj (z: COMPLEX) : COMPLEX ;
+      PROCEDURE conjl (z: LONGCOMPLEX) : LONGCOMPLEX ;
+ 
+      PROCEDURE cpowf (base: SHORTCOMPLEX; exp: SHORTREAL) : SHORTCOMPLEX ;
+      PROCEDURE cpow (base: COMPLEX; exp: REAL) : COMPLEX ;
+      PROCEDURE cpowl (base: LONGCOMPLEX; exp: LONGREAL) : LONGCOMPLEX ;
+ 
+      PROCEDURE csqrtf (z: SHORTCOMPLEX) : SHORTCOMPLEX ;
+      PROCEDURE csqrt (z: COMPLEX) : COMPLEX ;
+      PROCEDURE csqrtl (z: LONGCOMPLEX) : LONGCOMPLEX ;
+ 
+      PROCEDURE cexpf (z: SHORTCOMPLEX) : SHORTCOMPLEX ;
+      PROCEDURE cexp (z: COMPLEX) : COMPLEX ;
+      PROCEDURE cexpl (z: LONGCOMPLEX) : LONGCOMPLEX ;
+ 
+      PROCEDURE clogf (z: SHORTCOMPLEX) : SHORTCOMPLEX ;
+      PROCEDURE clog (z: COMPLEX) : COMPLEX ;
+      PROCEDURE clogl (z: LONGCOMPLEX) : LONGCOMPLEX ;
+ 
+      PROCEDURE csinf (z: SHORTCOMPLEX) : SHORTCOMPLEX ;
+      PROCEDURE csin (z: COMPLEX) : COMPLEX ;
+      PROCEDURE csinl (z: LONGCOMPLEX) : LONGCOMPLEX ;
+ 
+      PROCEDURE ccosf (z: SHORTCOMPLEX) : SHORTCOMPLEX ;
+      PROCEDURE ccos (z: COMPLEX) : COMPLEX ;
+      PROCEDURE ccosl (z: LONGCOMPLEX) : LONGCOMPLEX ;
+ 
+      PROCEDURE ctanf (z: SHORTCOMPLEX) : SHORTCOMPLEX ;
+      PROCEDURE ctan (z: COMPLEX) : COMPLEX ;
+      PROCEDURE ctanl (z: LONGCOMPLEX) : LONGCOMPLEX ;
+ 
+      PROCEDURE casinf (z: SHORTCOMPLEX) : SHORTCOMPLEX ;
+      PROCEDURE casin (z: COMPLEX) : COMPLEX ;
+      PROCEDURE casinl (z: LONGCOMPLEX) : LONGCOMPLEX ;
+ 
+      PROCEDURE cacosf (z: SHORTCOMPLEX) : SHORTCOMPLEX ;
+      PROCEDURE cacos (z: COMPLEX) : COMPLEX ;
+      PROCEDURE cacosl (z: LONGCOMPLEX) : LONGCOMPLEX ;
+ 
+      PROCEDURE catanf (z: SHORTCOMPLEX) : SHORTCOMPLEX ;
+      PROCEDURE catan (z: COMPLEX) : COMPLEX ;
+      PROCEDURE catanl (z: LONGCOMPLEX) : LONGCOMPLEX ;
+ 
+      PROCEDURE index (s: ADDRESS; c: INTEGER) : ADDRESS ;
+      PROCEDURE rindex (s: ADDRESS; c: INTEGER) : ADDRESS ;
+      PROCEDURE memcmp (s1, s2: ADDRESS; n: CARDINAL) : INTEGER ;
+      PROCEDURE memmove (s1, s2: ADDRESS; n: CARDINAL) : ADDRESS ;
+      PROCEDURE memset (s: ADDRESS; c: INTEGER; n: CARDINAL) : ADDRESS ;
+      PROCEDURE strcat (dest, src: ADDRESS) : ADDRESS ;
+      PROCEDURE strncat (dest, src: ADDRESS; n: CARDINAL) : ADDRESS ;
+      PROCEDURE strcpy (dest, src: ADDRESS) : ADDRESS ;
+      PROCEDURE strncpy (dest, src: ADDRESS; n: CARDINAL) : ADDRESS ;
+      PROCEDURE strcmp (s1, s2: ADDRESS) : INTEGER ;
+      PROCEDURE strncmp (s1, s2: ADDRESS; n: CARDINAL) : INTEGER ;
+      PROCEDURE strlen (s: ADDRESS) : INTEGER ;
+      PROCEDURE strstr (haystack, needle: ADDRESS) : ADDRESS ;
+      PROCEDURE strpbrk (s, accept: ADDRESS) : ADDRESS ;
+      PROCEDURE strspn (s, accept: ADDRESS) : CARDINAL ;
+      PROCEDURE strcspn (s, accept: ADDRESS) : CARDINAL ;
+      PROCEDURE strchr (s: ADDRESS; c: INTEGER) : ADDRESS ;
+      PROCEDURE strrchr (s: ADDRESS; c: INTEGER) : ADDRESS ;
+ 
+      END cbuiltin.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/cgetopt,  Next: gm2-libs/cxxabi,  Prev: gm2-libs/cbuiltin,  Up: Base libraries
+ 
+ 4.1.48 gm2-libs/cgetopt
+ -----------------------
+ 
+      DEFINITION MODULE cgetopt ;
+ 
+      FROM SYSTEM IMPORT ADDRESS ;
+ 
+ 
+      TYPE
+         Options = ADDRESS ;
+ 
+      VAR
+         optarg                : ADDRESS ;
+         optind, opterr, optopt: INTEGER ;
+ 
+ 
+      (*
+         getopt - the getopt() function parses the command-line arguments.
+                  Its arguments argc and argv are the argument count and array as
+                  passed to the main() function on program invocation.  An element of
+                  argv that starts with '-' (and is not exactly "-" or "--") is an
+                  option element.  The characters of this element (aside from the
+                  initial '-') are option characters.  If getopt() is called
+                  repeatedly, it returns successively each of the option characters
+                  from each of the option elements.
+      *)
+ 
+      PROCEDURE getopt (argc: INTEGER; argv: ADDRESS; optstring: ADDRESS) : CHAR ;
+ 
+ 
+      (*
+         getopt_long - works like getopt() except that it also accepts long options,
+                       started with two dashes.  (If the program accepts only long
+                       options, then optstring should be specified as an empty string (""),
+                       not NULL.)  Long option names may be abbreviated if the abbreviation
+                       is unique or is an exact match for some defined option.  A
+                       long option may take a parameter, of the form --arg=param or
+                       --arg param.
+      *)
+ 
+      PROCEDURE getopt_long (argc: INTEGER; argv: ADDRESS; optstring: ADDRESS;
+                             longopts: ADDRESS; VAR longindex: INTEGER) : INTEGER ;
+ 
+ 
+      (*
+         getopt_long_only - a wrapper for the C getopt_long_only.
+      *)
+ 
+      PROCEDURE getopt_long_only (argc: INTEGER; argv: ADDRESS; optstring: ADDRESS;
+                                  longopts: ADDRESS; VAR longindex: INTEGER) : INTEGER ;
+ 
+ 
+      (*
+         InitOptions - constructor for empty Options.
+      *)
+ 
+      PROCEDURE InitOptions () : Options ;
+ 
+ 
+      (*
+         KillOptions - deconstructor for empty Options.
+      *)
+ 
+      PROCEDURE KillOptions (o: Options) : Options ;
+ 
+ 
+      (*
+         SetOption - set option[index] with {name, has_arg, flag, val}.
+      *)
+ 
+      PROCEDURE SetOption (o: Options; index: CARDINAL;
+                           name: ADDRESS; has_arg: BOOLEAN;
+                           VAR flag: INTEGER; val: INTEGER) ;
+ 
+ 
+      (*
+         GetLongOptionArray - return a pointer to the C array containing all
+                              long options.
+      *)
+ 
+      PROCEDURE GetLongOptionArray (o: Options) : ADDRESS ;
+ 
+ 
+      END cgetopt.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/cxxabi,  Next: gm2-libs/dtoa,  Prev: gm2-libs/cgetopt,  Up: Base libraries
+ 
+ 4.1.49 gm2-libs/cxxabi
+ ----------------------
+ 
+      DEFINITION MODULE FOR "C" cxxabi ;
+ 
+      (* This should only be used by the compiler and it matches the
+          g++ implementation.  *)
+ 
+      FROM SYSTEM IMPORT ADDRESS ;
+      EXPORT UNQUALIFIED __cxa_begin_catch, __cxa_end_catch, __cxa_rethrow ;
+ 
+ 
+      PROCEDURE __cxa_begin_catch (a: ADDRESS) : ADDRESS ;
+      PROCEDURE __cxa_end_catch ;
+      PROCEDURE __cxa_rethrow ;
+ 
+ 
+      END cxxabi.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/dtoa,  Next: gm2-libs/errno,  Prev: gm2-libs/cxxabi,  Up: Base libraries
+ 
+ 4.1.50 gm2-libs/dtoa
+ --------------------
+ 
+      DEFINITION MODULE dtoa ;
+ 
+      FROM SYSTEM IMPORT ADDRESS ;
+ 
+      TYPE
+         Mode = (maxsignificant, decimaldigits) ;
+ 
+ 
+      (*
+         strtod - returns a REAL given a string, s.  It will set
+                  error to TRUE if the number is too large.
+      *)
+ 
+      PROCEDURE strtod (s: ADDRESS; VAR error: BOOLEAN) : REAL ;
+ 
+ 
+      (*
+         dtoa - converts a REAL, d, into a string.  The address of the
+                string is returned.
+                mode       indicates the type of conversion required.
+                ndigits    determines the number of digits according to mode.
+                decpt      the position of the decimal point.
+                sign       does the string have a sign?
+      *)
+ 
+      PROCEDURE dtoa (d        : REAL;
+                      mode     : Mode;
+                      ndigits  : INTEGER;
+      	        VAR decpt: INTEGER;
+      	        VAR sign : BOOLEAN) : ADDRESS ;
+ 
+ 
+      END dtoa.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/errno,  Next: gm2-libs/gdbif,  Prev: gm2-libs/dtoa,  Up: Base libraries
+ 
+ 4.1.51 gm2-libs/errno
+ ---------------------
+ 
+      DEFINITION MODULE errno ;
+ 
+      CONST
+          EINTR  =  4 ;   (* system call interrupted *)
+          ERANGE = 34 ;   (* result is too large     *)
+          EAGAIN = 11 ;   (* retry the system call   *)
+ 
+      PROCEDURE geterrno () : INTEGER ;
+ 
+ 
+      END errno.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/gdbif,  Next: gm2-libs/ldtoa,  Prev: gm2-libs/errno,  Up: Base libraries
+ 
+ 4.1.52 gm2-libs/gdbif
+ ---------------------
+ 
+      DEFINITION MODULE gdbif ;
+ 
+      (*  Provides interactive connectivity with gdb useful for debugging
+          Modula-2 shared libraries.  *)
+ 
+      EXPORT UNQUALIFIED sleepSpin, finishSpin, connectSpin ;
+ 
+ 
+      (*
+         finishSpin - sets boolean mustWait to FALSE.
+      *)
+ 
+      PROCEDURE finishSpin ;
+ 
+ 
+      (*
+         sleepSpin - waits for the boolean variable mustWait to become FALSE.
+                     It sleeps for a second between each test of the variable.
+      *)
+ 
+      PROCEDURE sleepSpin ;
+ 
+ 
+      (*
+         connectSpin - breakpoint placeholder.  Its only purpose is to allow users
+                       to set a breakpoint.  This procedure is called once
+                       sleepSpin is released from its spin (via a call from
+                       finishSpin).
+      *)
+ 
+      PROCEDURE connectSpin ;
+ 
+ 
+      END gdbif.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/ldtoa,  Next: gm2-libs/libc,  Prev: gm2-libs/gdbif,  Up: Base libraries
+ 
+ 4.1.53 gm2-libs/ldtoa
+ ---------------------
+ 
+      DEFINITION MODULE ldtoa ;
+ 
+      FROM SYSTEM IMPORT ADDRESS ;
+ 
+      TYPE
+         Mode = (maxsignificant, decimaldigits) ;
+ 
+ 
+      (*
+         strtold - returns a LONGREAL given a C string, s.  It will set
+                   error to TRUE if the number is too large or badly formed.
+      *)
+ 
+      PROCEDURE strtold (s: ADDRESS; VAR error: BOOLEAN) : LONGREAL ;
+ 
+ 
+      (*
+         ldtoa - converts a LONGREAL, d, into a string.  The address of the
+                 string is returned.
+                 mode       indicates the type of conversion required.
+                 ndigits    determines the number of digits according to mode.
+                 decpt      the position of the decimal point.
+                 sign       does the string have a sign?
+      *)
+ 
+      PROCEDURE ldtoa (d        : LONGREAL;
+                       mode     : Mode;
+                       ndigits  : INTEGER;
+                       VAR decpt: INTEGER;
+                       VAR sign : BOOLEAN) : ADDRESS ;
+ 
+ 
+      END ldtoa.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/libc,  Next: gm2-libs/libm,  Prev: gm2-libs/ldtoa,  Up: Base libraries
+ 
+ 4.1.54 gm2-libs/libc
+ --------------------
+ 
+      DEFINITION MODULE FOR "C" libc ;
+ 
+      FROM SYSTEM IMPORT ADDRESS, CSIZE_T, CSSIZE_T ;
+ 
+      EXPORT UNQUALIFIED time_t, timeb, tm, ptrToTM,
+                         write, read,
+                         system, abort,
+                         malloc, free,
+                         exit, isatty,
+                         getenv, putenv, getpid,
+                         dup, close, open, lseek,
+                         readv, writev,
+                         perror, creat,
+                         getcwd, chown, strlen, strcpy, strncpy,
+                         unlink, setenv,
+                         memcpy, memset, memmove, printf, realloc,
+                         rand, srand,
+                         time, localtime, ftime,
+                         shutdown, snprintf,
+                         rename, setjmp, longjmp, atexit,
+                         ttyname, sleep, execv ;
+ 
+ 
+      TYPE
+         time_t = LONGINT ;
+ 
+         ptrToTM = POINTER TO tm ;
+         tm = RECORD
+                 tm_sec: INTEGER ;     (* Seconds.     [0-60] (1 leap second) *)
+                 tm_min: INTEGER ;     (* Minutes.     [0-59]   *)
+                 tm_hour: INTEGER ;    (* Hours.       [0-23]   *)
+                 tm_mday: INTEGER ;    (* Day.         [1-31]   *)
+                 tm_mon: INTEGER ;     (* Month.       [0-11]   *)
+                 tm_year: INTEGER ;    (* Year - 1900.          *)
+                 tm_wday: INTEGER ;    (* Day of week. [0-6]    *)
+                 tm_yday: INTEGER ;    (* Days in year.[0-365]  *)
+                 tm_isdst: INTEGER ;   (* DST.         [-1/0/1] *)
+                 tm_gmtoff: LONGINT ;  (* Seconds east of UTC.  *)
+                 tm_zone: ADDRESS ;    (* char * zone name      *)
+              END ;
+ 
+         timeb = RECORD
+                    time    : time_t ;
+                    millitm : SHORTCARD ;
+                    timezone: SHORTCARD ;
+                    dstflag : SHORTCARD ;
+                 END ;
+ 
+         exitP = PROCEDURE () : INTEGER ;
+ 
+ 
+      (*
+           ssize_t write (int d, void *buf, size_t nbytes)
+      *)
+ 
+      PROCEDURE write (d: INTEGER; buf: ADDRESS; nbytes: CSIZE_T) : [ CSSIZE_T ] ;
+ 
+ 
+      (*
+           ssize_t read (int d, void *buf, size_t nbytes)
+      *)
+ 
+      PROCEDURE read (d: INTEGER; buf: ADDRESS; nbytes: CSIZE_T) : [ CSSIZE_T ] ;
+ 
+ 
+      (*
+           int system(string)
+           char *string;
+      *)
+ 
+      PROCEDURE system (a: ADDRESS) : [ INTEGER ] ;
+ 
+ 
+      (*
+           abort - generate a fault
+ 
+           abort() first closes all open files if possible, then sends
+           an IOT signal to the process.  This signal usually results
+           in termination with a core dump, which may be used for
+           debugging.
+ 
+           It is possible for abort() to return control if is caught or
+           ignored, in which case the value returned is that of the
+           kill(2V) system call.
+      *)
+ 
+      PROCEDURE abort <* noreturn *> ;
+ 
+ 
+      (*
+           malloc - memory allocator.
+ 
+           void *malloc(size_t size);
+ 
+           malloc() returns a pointer to a block of at least size
+           bytes, which is appropriately aligned.  If size is zero,
+           malloc() returns a non-NULL pointer, but this pointer should
+           not be dereferenced.
+      *)
+ 
+      PROCEDURE malloc (size: CSIZE_T) : ADDRESS ;
+ 
+ 
+      (*
+           free - memory deallocator.
+ 
+           free (void *ptr);
+ 
+           free() releases a previously allocated block.  Its argument
+           is a pointer to a block previously allocated by malloc,
+           calloc, realloc, malloc, or memalign.
+      *)
+ 
+      PROCEDURE free (ptr: ADDRESS) ;
+ 
+ 
+      (*
+           void *realloc (void *ptr, size_t size);
+ 
+           realloc changes the size of the memory block pointed to
+           by ptr to size bytes. The contents will be  unchanged  to
+           the minimum of the old and new sizes; newly allocated memory
+           will be uninitialized. If ptr is NIL, the call is
+           equivalent  to malloc(size); if size is equal to zero, the
+           call is equivalent to free(ptr). Unless ptr is NIL, it
+           must have been returned by an earlier call to malloc(),
+           realloc.
+      *)
+ 
+      PROCEDURE realloc (ptr: ADDRESS; size: CSIZE_T) : ADDRESS ;
+ 
+ 
+      (*
+         isatty - does this descriptor refer to a terminal.
+      *)
+ 
+      PROCEDURE isatty (fd: INTEGER) : INTEGER ;
+ 
+ 
+      (*
+         exit - returns control to the invoking process. Result, r, is
+                returned.
+      *)
+ 
+      PROCEDURE exit (r: INTEGER) <* noreturn *> ;
+ 
+ 
+      (*
+         getenv - returns the C string for the equivalent C environment
+                  variable.
+      *)
+ 
+      PROCEDURE getenv (s: ADDRESS) : ADDRESS ;
+ 
+ 
+      (*
+         putenv - change or add an environment variable.
+      *)
+ 
+      PROCEDURE putenv (s: ADDRESS) : INTEGER ;
+ 
+ 
+      (*
+         getpid - returns the UNIX process identification number.
+      *)
+ 
+      PROCEDURE getpid () : INTEGER ;
+ 
+ 
+      (*
+         dup - duplicates the file descriptor, d.
+      *)
+ 
+      PROCEDURE dup (d: INTEGER) : INTEGER ;
+ 
+ 
+      (*
+         close - closes the file descriptor, d.
+      *)
+ 
+      PROCEDURE close (d: INTEGER) : [ INTEGER ] ;
+ 
+ 
+      (*
+         open - open the file, filename with flag and mode.
+      *)
+ 
+      PROCEDURE open (filename: ADDRESS; oflag: INTEGER; ...) : INTEGER ;
+ 
+ 
+      (*
+         creat - creates a new file
+      *)
+ 
+      PROCEDURE creat (filename: ADDRESS; mode: CARDINAL) : INTEGER;
+ 
+ 
+      (*
+         lseek - calls unix lseek:
+ 
+                 off_t lseek(int fildes, off_t offset, int whence);
+      *)
+ 
+      PROCEDURE lseek (fd: INTEGER; offset: LONGINT; whence: INTEGER) : LONGINT ;
+ 
+ 
+      (*
+         perror - writes errno and string. (ARRAY OF CHAR is translated onto ADDRESS).
+      *)
+ 
+      PROCEDURE perror (string: ARRAY OF CHAR);
+ 
+ 
+      (*
+         readv - reads an io vector of bytes.
+      *)
+ 
+      PROCEDURE readv (fd: INTEGER; v: ADDRESS; n: INTEGER) : [ INTEGER ] ;
+ 
+ 
+      (*
+         writev - writes an io vector of bytes.
+      *)
+ 
+      PROCEDURE writev (fd: INTEGER; v: ADDRESS; n: INTEGER) : [ INTEGER ] ;
+ 
+ 
+      (*
+         getcwd - copies the absolute pathname of the
+                  current working directory to the array pointed to by buf,
+                  which is of length size.
+ 
+                  If the current absolute path name would require a buffer
+                  longer than size elements, NULL is returned, and errno is
+                  set to ERANGE; an application should check for this error,
+                  and allocate a larger buffer if necessary.
+      *)
+ 
+      PROCEDURE getcwd (buf: ADDRESS; size: CSIZE_T) : ADDRESS ;
+ 
+ 
+      (*
+         chown - The  owner  of  the  file  specified  by  path or by fd is
+                 changed.  Only the super-user may change the  owner  of  a
+                 file.   The  owner  of  a file may change the group of the
+                 file to any group of which that owner is  a  member.   The
+                 super-user may change the group arbitrarily.
+ 
+                 If  the owner or group is specified as -1, then that ID is
+                 not changed.
+ 
+                 On success, zero is returned.  On error, -1  is  returned,
+                 and errno is set appropriately.
+      *)
+ 
+      PROCEDURE chown (filename: ADDRESS; uid, gid: INTEGER) : [ INTEGER ] ;
+ 
+ 
+      (*
+         strlen - returns the length of string, a.
+      *)
+ 
+      PROCEDURE strlen (a: ADDRESS) : CSIZE_T ;
+ 
+ 
+      (*
+         strcpy - copies string, src, into, dest.
+                  It returns dest.
+      *)
+ 
+      PROCEDURE strcpy (dest, src: ADDRESS) : [ ADDRESS ] ;
+ 
+ 
+      (*
+         strncpy - copies string, src, into, dest, copying at most, n, bytes.
+                   It returns dest.
+      *)
+ 
+      PROCEDURE strncpy (dest, src: ADDRESS; n: CARDINAL) : [ ADDRESS ] ;
+ 
+ 
+      (*
+         unlink - removes file and returns 0 if successful.
+      *)
+ 
+      PROCEDURE unlink (file: ADDRESS) : [ INTEGER ] ;
+ 
+ 
+      (*
+         memcpy - copy memory area
+ 
+         SYNOPSIS
+ 
+         #include <string.h>
+ 
+         void *memcpy(void *dest, const void *src, size_t n);
+         It returns dest.
+      *)
+ 
+      PROCEDURE memcpy (dest, src: ADDRESS; size: CSIZE_T) : [ ADDRESS ] ;
+ 
+ 
+      (*
+         memset - fill memory with a constant byte
+ 
+         SYNOPSIS
+ 
+         #include <string.h>
+ 
+         void *memset(void *s, int c, size_t n);
+         It returns s.
+      *)
+ 
+      PROCEDURE memset (s: ADDRESS; c: INTEGER; size: CSIZE_T) : [ ADDRESS ] ;
+ 
+ 
+      (*
+         memmove - copy memory areas which may overlap
+ 
+         SYNOPSIS
+ 
+         #include <string.h>
+ 
+         void *memmove(void *dest, const void *src, size_t n);
+         It returns dest.
+      *)
+ 
+      PROCEDURE memmove (dest, src: ADDRESS; size: CSIZE_T) : [ ADDRESS ] ;
+ 
+ 
+      (*
+         int printf(const char *format, ...);
+      *)
+ 
+      PROCEDURE printf (format: ARRAY OF CHAR; ...) : [ INTEGER ] ;
+ 
+ 
+      (*
+         int snprintf(char *str, size_t size, const char *format, ...);
+      *)
+ 
+      PROCEDURE snprintf (dest: ADDRESS; size: CSIZE_T;
+                          format: ARRAY OF CHAR; ...) : [ INTEGER ] ;
+ 
+      (*
+         setenv - sets environment variable, name, to value.
+                  It will overwrite an existing value if, overwrite,
+                  is true.  It returns 0 on success and -1 for an error.
+      *)
+ 
+      PROCEDURE setenv (name: ADDRESS; value: ADDRESS; overwrite: INTEGER) : [ INTEGER ] ;
+ 
+ 
+      (*
+         srand - initialize the random number seed.
+      *)
+ 
+      PROCEDURE srand (seed: INTEGER) ;
+ 
+ 
+      (*
+         rand - return a random integer.
+      *)
+ 
+      PROCEDURE rand () : INTEGER ;
+ 
+ 
+      (*
+         time - returns a pointer to the time_t value. If, a,
+                is not NIL then the libc value is copied into
+                memory at address, a.
+      *)
+ 
+      PROCEDURE time (a: ADDRESS) : time_t ;
+ 
+ 
+      (*
+         localtime - returns a pointer to the libc copy of the tm
+                     structure.
+      *)
+ 
+      PROCEDURE localtime (VAR t: time_t) : ADDRESS ;
+ 
+ 
+      (*
+         ftime - return date and time.
+      *)
+ 
+      PROCEDURE ftime (VAR t: timeb) : [ INTEGER ] ;
+ 
+ 
+      (*
+         shutdown - shutdown a socket, s.
+                    if how = 0, then no more reads are allowed.
+                    if how = 1, then no more writes are allowed.
+                    if how = 2, then mo more reads or writes are allowed.
+      *)
+ 
+      PROCEDURE shutdown (s: INTEGER; how: INTEGER) : [ INTEGER ] ;
+ 
+ 
+      (*
+         rename - change the name or location of a file
+      *)
+ 
+      PROCEDURE rename (oldpath, newpath: ADDRESS) : [ INTEGER ] ;
+ 
+ 
+      (*
+         setjmp - returns 0 if returning directly, and non-zero
+                  when returning from longjmp using the saved
+                  context.
+      *)
+ 
+      PROCEDURE setjmp (env: ADDRESS) : INTEGER ;
+ 
+ 
+      (*
+         longjmp - restores the environment saved by the last call
+                   of setjmp with the corresponding env argument.
+                   After longjmp is completed, program execution
+                   continues as if the corresponding call of setjmp
+                   had just returned the value val.  The value of
+                   val must not be zero.
+      *)
+ 
+      PROCEDURE longjmp (env: ADDRESS; val: INTEGER) ;
+ 
+ 
+      (*
+         atexit - execute, proc, when the function exit is called.
+      *)
+ 
+      PROCEDURE atexit (proc: exitP) : [ INTEGER ] ;
+ 
+ 
+      (*
+         ttyname - returns a pointer to a string determining the ttyname.
+      *)
+ 
+      PROCEDURE ttyname (filedes: INTEGER) : ADDRESS ;
+ 
+ 
+      (*
+         sleep - calling thread sleeps for seconds.
+      *)
+ 
+      PROCEDURE sleep (seconds: CARDINAL) : [ CARDINAL ] ;
+ 
+ 
+      (*
+         execv - execute a file.
+      *)
+ 
+      PROCEDURE execv (pathname: ADDRESS; argv: ADDRESS) : [ INTEGER ] ;
+ 
+ 
+      END libc.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/libm,  Next: gm2-libs/sckt,  Prev: gm2-libs/libc,  Up: Base libraries
+ 
+ 4.1.55 gm2-libs/libm
+ --------------------
+ 
+      DEFINITION MODULE FOR "C" libm ;
+ 
+      (* Users are strongly advised to use MathLib0 or RealMath as calls
+         to functions within these modules will generate inline code.
+         This module is used by MathLib0 and RealMath when inline code cannot
+         be generated.  *)
+ 
+      EXPORT UNQUALIFIED sin, sinl, sinf,
+                         cos, cosl, cosf,
+                         tan, tanl, tanf,
+                         sqrt, sqrtl, sqrtf,
+                         asin, asinl, asinf,
+                         acos, acosl, acosf,
+                         atan, atanl, atanf,
+                         atan2, atan2l, atan2f,
+                         exp, expl, expf,
+                         log, logl, logf,
+                         exp10, exp10l, exp10f,
+                         pow, powl, powf,
+                         floor, floorl, floorf,
+                         ceil, ceill, ceilf ;
+ 
+      PROCEDURE sin (x: REAL) : REAL ;
+      PROCEDURE sinl (x: LONGREAL) : LONGREAL ;
+      PROCEDURE sinf (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE cos (x: REAL) : REAL ;
+      PROCEDURE cosl (x: LONGREAL) : LONGREAL ;
+      PROCEDURE cosf (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE tan (x: REAL) : REAL ;
+      PROCEDURE tanl (x: LONGREAL) : LONGREAL ;
+      PROCEDURE tanf (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE sqrt (x: REAL) : REAL ;
+      PROCEDURE sqrtl (x: LONGREAL) : LONGREAL ;
+      PROCEDURE sqrtf (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE asin (x: REAL) : REAL ;
+      PROCEDURE asinl (x: LONGREAL) : LONGREAL ;
+      PROCEDURE asinf (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE acos (x: REAL) : REAL ;
+      PROCEDURE acosl (x: LONGREAL) : LONGREAL ;
+      PROCEDURE acosf (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE atan (x: REAL) : REAL ;
+      PROCEDURE atanl (x: LONGREAL) : LONGREAL ;
+      PROCEDURE atanf (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE atan2 (x, y: REAL) : REAL ;
+      PROCEDURE atan2l (x, y: LONGREAL) : LONGREAL ;
+      PROCEDURE atan2f (x, y: SHORTREAL) : SHORTREAL ;
+      PROCEDURE exp (x: REAL) : REAL ;
+      PROCEDURE expl (x: LONGREAL) : LONGREAL ;
+      PROCEDURE expf (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE log (x: REAL) : REAL ;
+      PROCEDURE logl (x: LONGREAL) : LONGREAL ;
+      PROCEDURE logf (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE exp10 (x: REAL) : REAL ;
+      PROCEDURE exp10l (x: LONGREAL) : LONGREAL ;
+      PROCEDURE exp10f (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE pow (x, y: REAL) : REAL ;
+      PROCEDURE powl (x, y: LONGREAL) : LONGREAL ;
+      PROCEDURE powf (x, y: SHORTREAL) : SHORTREAL ;
+      PROCEDURE floor (x: REAL) : REAL ;
+      PROCEDURE floorl (x: LONGREAL) : LONGREAL ;
+      PROCEDURE floorf (x: SHORTREAL) : SHORTREAL ;
+      PROCEDURE ceil (x: REAL) : REAL ;
+      PROCEDURE ceill (x: LONGREAL) : LONGREAL ;
+      PROCEDURE ceilf (x: SHORTREAL) : SHORTREAL ;
+ 
+      END libm.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/sckt,  Next: gm2-libs/termios,  Prev: gm2-libs/libm,  Up: Base libraries
+ 
+ 4.1.56 gm2-libs/sckt
+ --------------------
+ 
+      DEFINITION MODULE sckt ;
+ 
+      FROM SYSTEM IMPORT ADDRESS ;
+      EXPORT QUALIFIED tcpServerState,
+                       tcpServerEstablish, tcpServerEstablishPort,
+                       tcpServerAccept, getLocalIP,
+                       tcpServerPortNo, tcpServerIP, tcpServerSocketFd,
+                       tcpServerClientIP, tcpServerClientPortNo,
+                       tcpClientState,
+                       tcpClientSocket, tcpClientSocketIP, tcpClientConnect,
+                       tcpClientPortNo, tcpClientIP, tcpClientSocketFd ;
+ 
+      TYPE
+         tcpServerState = ADDRESS ;
+         tcpClientState = ADDRESS ;
+ 
+ 
+      (*
+         tcpServerEstablish - returns a tcpState containing the relevant
+                              information about a socket declared to receive
+                              tcp connections.
+      *)
+ 
+      PROCEDURE tcpServerEstablish () : tcpServerState ;
+ 
+ 
+      (*
+         tcpServerEstablishPort - returns a tcpState containing the relevant
+                                  information about a socket declared to receive
+                                  tcp connections.  This method attempts to use
+                                  the port specified by the parameter.
+      *)
+ 
+      PROCEDURE tcpServerEstablishPort (port: CARDINAL) : tcpServerState ;
+ 
+ 
+      (*
+         tcpServerAccept - returns a file descriptor once a client has connected and
+                           been accepted.
+      *)
+ 
+      PROCEDURE tcpServerAccept (s: tcpServerState) : INTEGER ;
+ 
+ 
+      (*
+         tcpServerPortNo - returns the portNo from structure, s.
+      *)
+ 
+      PROCEDURE tcpServerPortNo (s: tcpServerState) : CARDINAL ;
+ 
+ 
+      (*
+         tcpSocketFd - returns the sockFd from structure, s.
+      *)
+ 
+      PROCEDURE tcpServerSocketFd (s: tcpServerState) : INTEGER ;
+ 
+ 
+      (*
+         getLocalIP - returns the IP address of this machine.
+      *)
+ 
+      PROCEDURE getLocalIP (s: tcpServerState) : CARDINAL ;
+ 
+ 
+      (*
+         tcpServerIP - returns the IP address from structure, s.
+      *)
+ 
+      PROCEDURE tcpServerIP (s: tcpServerState) : CARDINAL ;
+ 
+ 
+      (*
+         tcpServerClientIP - returns the IP address of the client who
+                             has connected to server, s.
+      *)
+ 
+      PROCEDURE tcpServerClientIP (s: tcpServerState) : CARDINAL ;
+ 
+ 
+      (*
+         tcpServerClientPortNo - returns the port number of the client who
+                                 has connected to server, s.
+      *)
+ 
+      PROCEDURE tcpServerClientPortNo (s: tcpServerState) : CARDINAL ;
+ 
+ 
+      (*
+         tcpClientSocket - returns a file descriptor (socket) which has
+                           connected to, serverName:portNo.
+      *)
+ 
+      PROCEDURE tcpClientSocket (serverName: ADDRESS; portNo: CARDINAL) : tcpClientState ;
+ 
+ 
+      (*
+         tcpClientSocketIP - returns a file descriptor (socket) which has
+                             connected to, ip:portNo.
+      *)
+ 
+      PROCEDURE tcpClientSocketIP (ip: CARDINAL; portNo: CARDINAL) : tcpClientState ;
+ 
+ 
+      (*
+         tcpClientConnect - returns the file descriptor associated with, s,
+                            once a connect has been performed.
+      *)
+ 
+      PROCEDURE tcpClientConnect (s: tcpClientState) : INTEGER ;
+ 
+ 
+      (*
+         tcpClientPortNo - returns the portNo from structure, s.
+      *)
+ 
+      PROCEDURE tcpClientPortNo (s: tcpClientState) : INTEGER ;
+ 
+ 
+      (*
+         tcpClientSocketFd - returns the sockFd from structure, s.
+      *)
+ 
+      PROCEDURE tcpClientSocketFd (s: tcpClientState) : INTEGER ;
+ 
+ 
+      (*
+         tcpClientIP - returns the IP address from structure, s.
+      *)
+ 
+      PROCEDURE tcpClientIP (s: tcpClientState) : CARDINAL ;
+ 
+ 
+      END sckt.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/termios,  Next: gm2-libs/wrapc,  Prev: gm2-libs/sckt,  Up: Base libraries
+ 
+ 4.1.57 gm2-libs/termios
+ -----------------------
+ 
+      DEFINITION MODULE termios ;
+ 
+      FROM SYSTEM IMPORT ADDRESS ;
+ 
+      TYPE
+         TERMIOS = ADDRESS ;
+ 
+         ControlChar = (vintr, vquit, verase, vkill, veof, vtime, vmin,
+                        vswtc, vstart, vstop, vsusp, veol, vreprint, vdiscard,
+                        vwerase, vlnext, veol2) ;
+ 
+         Flag = (
+                 (* input flag bits *)
+                 ignbrk, ibrkint, ignpar, iparmrk, inpck, istrip, inlcr,
+                 igncr, icrnl, iuclc, ixon, ixany, ixoff, imaxbel,
+                 (* output flag bits *)
+                 opost, olcuc, onlcr, ocrnl, onocr, onlret, ofill, ofdel,
+                 onl0, onl1, ocr0, ocr1, ocr2, ocr3,
+                 otab0, otab1, otab2, otab3, obs0, obs1, off0, off1, ovt0, ovt1,
+                 (* baud rate *)
+                 b0, b50, b75, b110, b135, b150, b200, b300, b600, b1200,
+                 b1800, b2400, b4800, b9600, b19200, b38400,
+                 b57600, b115200, b240400, b460800, b500000, b576000,
+                 b921600, b1000000, b1152000, b1500000, b2000000, b2500000,
+                 b3000000, b3500000, b4000000, maxbaud, crtscts,
+                 (* character size *)
+                 cs5, cs6, cs7, cs8, cstopb, cread, parenb, parodd, hupcl, clocal,
+                 (* local flags *)
+                 lisig, licanon, lxcase, lecho, lechoe, lechok, lechonl, lnoflsh,
+                 ltopstop, lechoctl, lechoprt, lechoke, lflusho, lpendin, liexten) ;
+ 
+ 
+      (*
+         InitTermios - new data structure.
+      *)
+ 
+      PROCEDURE InitTermios () : TERMIOS ;
+ 
+ 
+      (*
+         KillTermios - delete data structure.
+      *)
+ 
+      PROCEDURE KillTermios (t: TERMIOS) : TERMIOS ;
+ 
+ 
+      (*
+         cfgetospeed - return output baud rate.
+      *)
+ 
+      PROCEDURE cfgetospeed (t: TERMIOS) : INTEGER ;
+ 
+ 
+      (*
+         cfgetispeed - return input baud rate.
+      *)
+ 
+      PROCEDURE cfgetispeed (t: TERMIOS) : INTEGER ;
+ 
+ 
+      (*
+         cfsetospeed - set output baud rate.
+      *)
+ 
+      PROCEDURE cfsetospeed (t: TERMIOS; b: CARDINAL) : INTEGER ;
+ 
+ 
+      (*
+         cfsetispeed - set input baud rate.
+      *)
+ 
+      PROCEDURE cfsetispeed (t: TERMIOS; b: CARDINAL) : INTEGER ;
+ 
+ 
+      (*
+         cfsetspeed - set input and output baud rate.
+      *)
+ 
+      PROCEDURE cfsetspeed (t: TERMIOS; b: CARDINAL) : INTEGER ;
+ 
+ 
+      (*
+         tcgetattr - get state of, fd, into, t.
+      *)
+ 
+      PROCEDURE tcgetattr (fd: INTEGER; t: TERMIOS) : INTEGER ;
+ 
+ 
+      (*
+         The following three functions return the different option values.
+      *)
+ 
+      PROCEDURE tcsnow () : INTEGER ;   (* alter fd now *)
+      PROCEDURE tcsdrain () : INTEGER ; (* alter when all output has been sent *)
+      PROCEDURE tcsflush () : INTEGER ; (* like drain, except discard any pending input *)
+ 
+ 
+      (*
+         tcsetattr - set state of, fd, to, t, using option.
+      *)
+ 
+      PROCEDURE tcsetattr (fd: INTEGER; option: INTEGER; t: TERMIOS) : INTEGER ;
+ 
+ 
+      (*
+         cfmakeraw - sets, t, to raw mode.
+      *)
+ 
+      PROCEDURE cfmakeraw (t: TERMIOS) ;
+ 
+ 
+      (*
+         tcsendbreak - send zero bits for duration.
+      *)
+ 
+      PROCEDURE tcsendbreak (fd: INTEGER; duration: INTEGER) : INTEGER ;
+ 
+ 
+      (*
+         tcdrain - waits for pending output to be written on, fd.
+      *)
+ 
+      PROCEDURE tcdrain (fd: INTEGER) : INTEGER ;
+ 
+ 
+      (*
+         tcflushi - flush input.
+      *)
+ 
+      PROCEDURE tcflushi (fd: INTEGER) : INTEGER ;
+ 
+ 
+      (*
+         tcflusho - flush output.
+      *)
+ 
+      PROCEDURE tcflusho (fd: INTEGER) : INTEGER ;
+ 
+ 
+      (*
+         tcflushio - flush input and output.
+      *)
+ 
+      PROCEDURE tcflushio (fd: INTEGER) : INTEGER ;
+ 
+ 
+      (*
+         tcflowoni - restart input on, fd.
+      *)
+ 
+      PROCEDURE tcflowoni (fd: INTEGER) : INTEGER ;
+ 
+ 
+      (*
+         tcflowoffi - stop input on, fd.
+      *)
+ 
+      PROCEDURE tcflowoffi (fd: INTEGER) : INTEGER ;
+ 
+ 
+      (*
+         tcflowono - restart output on, fd.
+      *)
+ 
+      PROCEDURE tcflowono (fd: INTEGER) : INTEGER ;
+ 
+ 
+      (*
+         tcflowoffo - stop output on, fd.
+      *)
+ 
+      PROCEDURE tcflowoffo (fd: INTEGER) : INTEGER ;
+ 
+ 
+      (*
+         GetFlag - sets a flag value from, t, in, b, and returns TRUE
+                   if, t, supports, f.
+      *)
+ 
+      PROCEDURE GetFlag (t: TERMIOS; f: Flag; VAR b: BOOLEAN) : BOOLEAN ;
+ 
+ 
+      (*
+         SetFlag - sets a flag value in, t, to, b, and returns TRUE if
+                   this flag value is supported.
+      *)
+ 
+      PROCEDURE SetFlag (t: TERMIOS; f: Flag; b: BOOLEAN) : BOOLEAN ;
+ 
+ 
+      (*
+         GetChar - sets a CHAR, ch, value from, t, and returns TRUE if
+                   this value is supported.
+      *)
+ 
+      PROCEDURE GetChar (t: TERMIOS; c: ControlChar; VAR ch: CHAR) : BOOLEAN ;
+ 
+ 
+      (*
+         SetChar - sets a CHAR value in, t, and returns TRUE if, c,
+                   is supported.
+      *)
+ 
+      PROCEDURE SetChar (t: TERMIOS; c: ControlChar; ch: CHAR) : BOOLEAN ;
+ 
+ 
+      END termios.
+ 
+ 
+ File: m2.info,  Node: gm2-libs/wrapc,  Prev: gm2-libs/termios,  Up: Base libraries
+ 
+ 4.1.58 gm2-libs/wrapc
+ ---------------------
+ 
+      DEFINITION MODULE wrapc ;
+ 
+      FROM SYSTEM IMPORT ADDRESS ;
+ 
+      EXPORT QUALIFIED strtime, filesize, fileinode,
+                       getrand, getusername, filemtime,
+                       getnameuidgid, signbit, signbitf, signbitl,
+      		 isfinite, isfinitel, isfinitef ;
+ 
+ 
+      (*
+         strtime - returns the C string for the equivalent C asctime
+                   function.
+      *)
+ 
+      PROCEDURE strtime () : ADDRESS ;
+ 
+ 
+      (*
+         filesize - assigns the size of a file, f, into low, high and
+                    returns zero if successful.
+      *)
+ 
+      PROCEDURE filesize (f: INTEGER; VAR low, high: CARDINAL) : INTEGER ;
+ 
+ 
+      (*
+         fileinode - return the inode associated with file, f.
+      *)
+ 
+      PROCEDURE fileinode (f: INTEGER; VAR low, high: CARDINAL) : INTEGER ;
+ 
+ 
+      (*
+         filemtime - returns the mtime of a file, f.
+      *)
+ 
+      PROCEDURE filemtime (f: INTEGER) : INTEGER ;
+ 
+ 
+      (*
+         getrand - returns a random number between 0..n-1
+      *)
+ 
+      PROCEDURE getrand (n: INTEGER) : INTEGER ;
+ 
+ 
+      (*
+         getusername - returns a C string describing the current user.
+      *)
+ 
+      PROCEDURE getusername () : ADDRESS ;
+ 
+ 
+      (*
+         getnameuidgid - fills in the, uid, and, gid, which represents
+                         user, name.
+      *)
+ 
+      PROCEDURE getnameuidgid (name: ADDRESS; VAR uid, gid: INTEGER) ;
+ 
+ 
+      (*
+         in C these procedure functions are really macros, so we provide
+         real C functions and let gm2 call these if the builtins
+         are unavailable.
+      *)
+ 
+      PROCEDURE signbit (r: REAL) : INTEGER ;
+      PROCEDURE signbitf (s: SHORTREAL) : INTEGER ;
+      PROCEDURE signbitl (l: LONGREAL) : INTEGER ;
+ 
+ 
+      (*
+         isfinite - provide non builtin alternative to the gcc builtin isfinite.
+                    Returns 1 if x is finite and 0 if it is not.
+      *)
+ 
+      PROCEDURE isfinite (x: REAL) : INTEGER ;
+ 
+ 
+      (*
+         isfinitef - provide non builtin alternative to the gcc builtin isfinite.
+                     Returns 1 if x is finite and 0 if it is not.
+      *)
+ 
+      PROCEDURE isfinitef (x: SHORTREAL) : INTEGER ;
+ 
+ 
+      (*
+         isfinitel - provide non builtin alternative to the gcc builtin isfinite.
+                     Returns 1 if x is finite and 0 if it is not.
+      *)
+ 
+      PROCEDURE isfinitel (x: LONGREAL) : INTEGER ;
+ 
+ 
+      END wrapc.
+ 
+ 
+ File: m2.info,  Node: PIM and Logitech 3.0 Compatible,  Next: PIM coroutine support,  Prev: Base libraries,  Up: Libraries
+ 
+ 4.2 PIM and Logitech 3.0 Compatible
+ ===================================
+ 
+ These modules are provided to enable legacy Modula-2 applications to
+ build with GNU Modula-2.  It is advised that these module should not be
+ used for new projects, maybe the ISO libraries or the native compiler
+ PIM libraries (FIO) should be used instead.
+ 
+    Here is an outline of the module layering:
+ 
+ 
+      InOut  RealInOut  LongIO CardinalIO
+          \     |       |      /
+                 Terminal
+      -----------------------------------
+                    |
+                 Termbase
+                 /      \
+          Keyboard      Display
+ 
+ 
+    Above the line are user level PIM [234] and Logitech 3.0 compatible
+ modules.  Below the line Logitech 3.0 advised that these modules should
+ be considered part of the runtime system.  The libraries do not provide
+ all the features found in the Logitech libraries as a number of these
+ features were MS-DOS related.  Essentially the basic input/output, file
+ system, string manipulation and conversion routines are provided.
+ Access to DOSCALL, graphics, time and date are not as these were
+ constrained by the limitations of MS-DOS.
+ 
+    The following libraries are contained within the base GNU Modula-2
+ libraries and are also Logitech-3.0 compatible: *Note gm2-libs/ASCII::,
+ *Note gm2-libs/Storage:: and *Note gm2-libs/MathLib0::.  These libraries
+ are always available for any dialect of the language (although their
+ implementation and behaviour might differ, for example Storage ISO and
+ PIM).
+ 
+    The following libraries are Logitech-3.0 compatible but fall outside
+ the base GNU Modula-2 libraries.
+ * Menu:
+ 
+ * gm2-libs-log/BitBlockOps::BitBlockOps.def
+ * gm2-libs-log/BitByteOps::BitByteOps.def
+ * gm2-libs-log/BitWordOps::BitWordOps.def
+ * gm2-libs-log/BlockOps::BlockOps.def
+ * gm2-libs-log/Break::Break.def
+ * gm2-libs-log/CardinalIO::CardinalIO.def
+ * gm2-libs-log/Conversions::Conversions.def
+ * gm2-libs-log/DebugPMD::DebugPMD.def
+ * gm2-libs-log/DebugTrace::DebugTrace.def
+ * gm2-libs-log/Delay::Delay.def
+ * gm2-libs-log/Display::Display.def
+ * gm2-libs-log/ErrorCode::ErrorCode.def
+ * gm2-libs-log/FileSystem::FileSystem.def
+ * gm2-libs-log/FloatingUtilities::FloatingUtilities.def
+ * gm2-libs-log/InOut::InOut.def
+ * gm2-libs-log/Keyboard::Keyboard.def
+ * gm2-libs-log/LongIO::LongIO.def
+ * gm2-libs-log/NumberConversion::NumberConversion.def
+ * gm2-libs-log/Random::Random.def
+ * gm2-libs-log/RealConversions::RealConversions.def
+ * gm2-libs-log/RealInOut::RealInOut.def
+ * gm2-libs-log/Strings::Strings.def
+ * gm2-libs-log/Termbase::Termbase.def
+ * gm2-libs-log/Terminal::Terminal.def
+ * gm2-libs-log/TimeDate::TimeDate.def
+ 
+ 
+ File: m2.info,  Node: gm2-libs-log/BitBlockOps,  Next: gm2-libs-log/BitByteOps,  Up: PIM and Logitech 3.0 Compatible
+ 
+ 4.2.1 gm2-libs-log/BitBlockOps
+ ------------------------------
+ 
+      DEFINITION MODULE BitBlockOps ;
+ 
+ 
+      FROM SYSTEM IMPORT ADDRESS ;
+ 
+ 
+      (*
+         BlockAnd - performs a bitwise AND on blocks
+                    [dest..dest+size-1] := [dest..dest+size-1] AND
+                                           [src..src+size-1]
+      *)
+ 
+      PROCEDURE BlockAnd (dest, src: ADDRESS; size: CARDINAL) ;
+ 
+ 
+      (*
+         BlockOr - performs a bitwise OR on blocks
+                   [dest..dest+size-1] := [dest..dest+size-1] OR
+                                          [src..src+size-1]
+      *)
+ 
+      PROCEDURE BlockOr (dest, src: ADDRESS; size: CARDINAL) ;
+ 
+ 
+      (*
+         BlockXor - performs a bitwise XOR on blocks
+                    [dest..dest+size-1] := [dest..dest+size-1] XOR
+                                           [src..src+size-1]
+      *)
+ 
+      PROCEDURE BlockXor (dest, src: ADDRESS; size: CARDINAL) ;
+ 
+ 
+      (*
+         BlockNot - performs a bitsize NOT on the block as defined
+                    by:  [dest..dest+size-1]
+      *)
+ 
+      PROCEDURE BlockNot (dest: ADDRESS; size: CARDINAL) ;
+ 
+ 
+      (*
+         BlockShr - performs a block shift right of, count, bits.
+                    Where the block is defined as:
+                    [dest..dest+size-1].
+                    The block is considered to be an ARRAY OF BYTEs
+                    which is shifted, bit at a time over each byte in
+                    turn.  The left most byte is considered the byte
+                    located at the lowest address.
+                    If you require an endianness SHIFT use
+                    the SYSTEM.SHIFT procedure and declare the
+                    block as a POINTER TO set type.
+      *)
+ 
+      PROCEDURE BlockShr (dest: ADDRESS; size, count: CARDINAL) ;
+ 
+ 
+      (*
+         BlockShl - performs a block shift left of, count, bits.
+                    Where the block is defined as:
+                    [dest..dest+size-1].
+                    The block is considered to be an ARRAY OF BYTEs
+                    which is shifted, bit at a time over each byte in
+                    turn.  The left most byte is considered the byte
+                    located at the lowest address.
+                    If you require an endianness SHIFT use
+                    the SYSTEM.SHIFT procedure and declare the
+                    block as a POINTER TO set type.
+      *)
+ 
+      PROCEDURE BlockShl (dest: ADDRESS; size, count: CARDINAL) ;
+ 
+ 
+      (*
+         BlockRor - performs a block rotate right of, count, bits.
+                    Where the block is defined as:
+                    [dest..dest+size-1].
+                    The block is considered to be an ARRAY OF BYTEs
+                    which is rotated, bit at a time over each byte in
+                    turn.  The left most byte is considered the byte
+                    located at the lowest address.
+                    If you require an endianness ROTATE use
+                    the SYSTEM.ROTATE procedure and declare the
+                    block as a POINTER TO set type.
+      *)
+ 
+      PROCEDURE BlockRor (dest: ADDRESS; size, count: CARDINAL) ;
+ 
+ 
+      (*
+         BlockRol - performs a block rotate left of, count, bits.
+                    Where the block is defined as:
+                    [dest..dest+size-1].
+                    The block is considered to be an ARRAY OF BYTEs
+                    which is rotated, bit at a time over each byte in
+                    turn.  The left most byte is considered the byte
+                    located at the lowest address.
+                    If you require an endianness ROTATE use
+                    the SYSTEM.ROTATE procedure and declare the
+                    block as a POINTER TO set type.
+      *)
+ 
+      PROCEDURE BlockRol (dest: ADDRESS; size, count: CARDINAL) ;
+ 
+ 
+      END BitBlockOps.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-log/BitByteOps,  Next: gm2-libs-log/BitWordOps,  Prev: gm2-libs-log/BitBlockOps,  Up: PIM and Logitech 3.0 Compatible
+ 
+ 4.2.2 gm2-libs-log/BitByteOps
+ -----------------------------
+ 
+      DEFINITION MODULE BitByteOps ;
+ 
+      FROM SYSTEM IMPORT BYTE ;
+ 
+ 
+      (*
+         GetBits - returns the bits firstBit..lastBit from source.
+                   Bit 0 of byte maps onto the firstBit of source.
+      *)
+ 
+      PROCEDURE GetBits (source: BYTE; firstBit, lastBit: CARDINAL) : BYTE ;
+ 
+ 
+      (*
+         SetBits - sets bits in, byte, starting at, firstBit, and ending at,
+                   lastBit, with, pattern.  The bit zero of, pattern, will
+                   be placed into, byte, at position, firstBit.
+      *)
+ 
+      PROCEDURE SetBits (VAR byte: BYTE; firstBit, lastBit: CARDINAL;
+                         pattern: BYTE) ;
+ 
+ 
+      (*
+         ByteAnd - returns a bitwise (left AND right)
+      *)
+ 
+      PROCEDURE ByteAnd (left, right: BYTE) : BYTE ;
+ 
+ 
+      (*
+         ByteOr - returns a bitwise (left OR right)
+      *)
+ 
+      PROCEDURE ByteOr (left, right: BYTE) : BYTE ;
+ 
+ 
+      (*
+         ByteXor - returns a bitwise (left XOR right)
+      *)
+ 
+      PROCEDURE ByteXor (left, right: BYTE) : BYTE ;
+ 
+ 
+      (*
+         ByteNot - returns a byte with all bits inverted.
+      *)
+ 
+      PROCEDURE ByteNot (byte: BYTE) : BYTE ;
+ 
+ 
+      (*
+         ByteShr - returns a, byte, which has been shifted, count
+                   bits to the right.
+      *)
+ 
+      PROCEDURE ByteShr (byte: BYTE; count: CARDINAL) : BYTE ;
+ 
+ 
+      (*
+         ByteShl - returns a, byte, which has been shifted, count
+                   bits to the left.
+      *)
+ 
+      PROCEDURE ByteShl (byte: BYTE; count: CARDINAL) : BYTE ;
+ 
+ 
+      (*
+         ByteSar - shift byte arthemetic right.  Preserves the top
+                   end bit and as the value is shifted right.
+      *)
+ 
+      PROCEDURE ByteSar (byte: BYTE; count: CARDINAL) : BYTE ;
+ 
+ 
+      (*
+         ByteRor - returns a, byte, which has been rotated, count
+                   bits to the right.
+      *)
+ 
+      PROCEDURE ByteRor (byte: BYTE; count: CARDINAL) : BYTE ;
+ 
+ 
+      (*
+         ByteRol - returns a, byte, which has been rotated, count
+                   bits to the left.
+      *)
+ 
+      PROCEDURE ByteRol (byte: BYTE; count: CARDINAL) : BYTE ;
+ 
+ 
+      (*
+         HighNibble - returns the top nibble only from, byte.
+                      The top nibble of, byte, is extracted and
+                      returned in the bottom nibble of the return
+                      value.
+      *)
+ 
+      PROCEDURE HighNibble (byte: BYTE) : BYTE ;
+ 
+ 
+      (*
+         LowNibble - returns the low nibble only from, byte.
+                     The top nibble is replaced by zeros.
+      *)
+ 
+      PROCEDURE LowNibble (byte: BYTE) : BYTE ;
+ 
+ 
+      (*
+         Swap - swaps the low and high nibbles in the, byte.
+      *)
+ 
+      PROCEDURE Swap (byte: BYTE) : BYTE ;
+ 
+ 
+      END BitByteOps.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-log/BitWordOps,  Next: gm2-libs-log/BlockOps,  Prev: gm2-libs-log/BitByteOps,  Up: PIM and Logitech 3.0 Compatible
+ 
+ 4.2.3 gm2-libs-log/BitWordOps
+ -----------------------------
+ 
+      DEFINITION MODULE BitWordOps ;
+ 
+      FROM SYSTEM IMPORT WORD ;
+ 
+ 
+      (*
+         GetBits - returns the bits firstBit..lastBit from source.
+                   Bit 0 of word maps onto the firstBit of source.
+      *)
+ 
+      PROCEDURE GetBits (source: WORD; firstBit, lastBit: CARDINAL) : WORD ;
+ 
+ 
+      (*
+         SetBits - sets bits in, word, starting at, firstBit, and ending at,
+                   lastBit, with, pattern.  The bit zero of, pattern, will
+                   be placed into, word, at position, firstBit.
+      *)
+ 
+      PROCEDURE SetBits (VAR word: WORD; firstBit, lastBit: CARDINAL;
+                         pattern: WORD) ;
+ 
+ 
+      (*
+         WordAnd - returns a bitwise (left AND right)
+      *)
+ 
+      PROCEDURE WordAnd (left, right: WORD) : WORD ;
+ 
+ 
+      (*
+         WordOr - returns a bitwise (left OR right)
+      *)
+ 
+      PROCEDURE WordOr (left, right: WORD) : WORD ;
+ 
+ 
+      (*
+         WordXor - returns a bitwise (left XOR right)
+      *)
+ 
+      PROCEDURE WordXor (left, right: WORD) : WORD ;
+ 
+ 
+      (*
+         WordNot - returns a word with all bits inverted.
+      *)
+ 
+      PROCEDURE WordNot (word: WORD) : WORD ;
+ 
+ 
+      (*
+         WordShr - returns a, word, which has been shifted, count
+                   bits to the right.
+      *)
+ 
+      PROCEDURE WordShr (word: WORD; count: CARDINAL) : WORD ;
+ 
+ 
+      (*
+         WordShl - returns a, word, which has been shifted, count
+                   bits to the left.
+      *)
+ 
+      PROCEDURE WordShl (word: WORD; count: CARDINAL) : WORD ;
+ 
+ 
+      (*
+         WordSar - shift word arthemetic right.  Preserves the top
+                   end bit and as the value is shifted right.
+      *)
+ 
+      PROCEDURE WordSar (word: WORD; count: CARDINAL) : WORD ;
+ 
+ 
+      (*
+         WordRor - returns a, word, which has been rotated, count
+                   bits to the right.
+      *)
+ 
+      PROCEDURE WordRor (word: WORD; count: CARDINAL) : WORD ;
+ 
+ 
+      (*
+         WordRol - returns a, word, which has been rotated, count
+                   bits to the left.
+      *)
+ 
+      PROCEDURE WordRol (word: WORD; count: CARDINAL) : WORD ;
+ 
+ 
+      (*
+         HighByte - returns the top byte only from, word.
+                    The byte is returned in the bottom byte
+                    in the return value.
+      *)
+ 
+      PROCEDURE HighByte (word: WORD) : WORD ;
+ 
+ 
+      (*
+         LowByte - returns the low byte only from, word.
+                   The byte is returned in the bottom byte
+                   in the return value.
+      *)
+ 
+      PROCEDURE LowByte (word: WORD) : WORD ;
+ 
+ 
+      (*
+         Swap - byte flips the contents of word.
+      *)
+ 
+      PROCEDURE Swap (word: WORD) : WORD ;
+ 
+ 
+      END BitWordOps.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-log/BlockOps,  Next: gm2-libs-log/Break,  Prev: gm2-libs-log/BitWordOps,  Up: PIM and Logitech 3.0 Compatible
+ 
+ 4.2.4 gm2-libs-log/BlockOps
+ ---------------------------
+ 
+      DEFINITION MODULE BlockOps ;
+ 
+      FROM SYSTEM IMPORT ADDRESS ;
+ 
+ 
+      (*
+         MoveBlockForward - moves, n, bytes from, src, to, dest.
+                            Starts copying from src and keep copying
+                            until, n, bytes have been copied.
+      *)
+ 
+      PROCEDURE BlockMoveForward (dest, src: ADDRESS; n: CARDINAL) ;
+ 
+ 
+      (*
+         MoveBlockBackward - moves, n, bytes from, src, to, dest.
+                             Starts copying from src+n and keeps copying
+                             until, n, bytes have been copied.
+                             The last datum to be copied will be the byte
+                             at address, src.
+      *)
+ 
+      PROCEDURE BlockMoveBackward (dest, src: ADDRESS; n: CARDINAL) ;
+ 
+ 
+      (*
+         BlockClear - fills, block..block+n-1, with zero's.
+      *)
+ 
+      PROCEDURE BlockClear (block: ADDRESS; n: CARDINAL) ;
+ 
+ 
+      (*
+         BlockSet - fills, n, bytes starting at, block, with a pattern
+                    defined at address pattern..pattern+patternSize-1.
+      *)
+ 
+      PROCEDURE BlockSet (block: ADDRESS; n: CARDINAL;
+                          pattern: ADDRESS; patternSize: CARDINAL) ;
+ 
+ 
+      (*
+         BlockEqual - returns TRUE if the blocks defined, a..a+n-1, and,
+                      b..b+n-1 contain the same bytes.
+      *)
+ 
+      PROCEDURE BlockEqual (a, b: ADDRESS; n: CARDINAL) : BOOLEAN ;
+ 
+ 
+      (*
+         BlockPosition - searches for a pattern as defined by
+                         pattern..patternSize-1 in the block,
+                         block..block+blockSize-1.  It returns
+                         the offset from block indicating the
+                         first occurence of, pattern.
+                         MAX(CARDINAL) is returned if no match
+                         is detected.
+      *)
+ 
+      PROCEDURE BlockPosition (block: ADDRESS; blockSize: CARDINAL;
+                               pattern: ADDRESS; patternSize: CARDINAL) : CARDINAL ;
+ 
+ 
+      END BlockOps.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-log/Break,  Next: gm2-libs-log/CardinalIO,  Prev: gm2-libs-log/BlockOps,  Up: PIM and Logitech 3.0 Compatible
+ 
+ 4.2.5 gm2-libs-log/Break
+ ------------------------
+ 
+      DEFINITION MODULE Break ;
+ 
+ 
+      EXPORT QUALIFIED EnableBreak, DisableBreak, InstallBreak, UnInstallBreak ;
+ 
+ 
+      (*
+         EnableBreak - enable the current break handler.
+      *)
+ 
+      PROCEDURE EnableBreak ;
+ 
+ 
+      (*
+         DisableBreak - disable the current break handler (and all
+                        installed handlers).
+      *)
+ 
+      PROCEDURE DisableBreak ;
+ 
+ 
+      (*
+         InstallBreak - installs a procedure, p, to be invoked when
+                        a ctrl-c is caught. Any number of these
+                        procedures may be stacked. Only the top
+                        procedure is run when ctrl-c is caught.
+      *)
+ 
+      PROCEDURE InstallBreak (p: PROC) ;
+ 
+ 
+      (*
+         UnInstallBreak - pops the break handler stack.
+      *)
+ 
+      PROCEDURE UnInstallBreak ;
+ 
+ 
+      END Break.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-log/CardinalIO,  Next: gm2-libs-log/Conversions,  Prev: gm2-libs-log/Break,  Up: PIM and Logitech 3.0 Compatible
+ 
+ 4.2.6 gm2-libs-log/CardinalIO
+ -----------------------------
+ 
+      DEFINITION MODULE CardinalIO ;
+ 
+      EXPORT QUALIFIED Done,
+                       ReadCardinal, WriteCardinal, ReadHex, WriteHex,
+                       ReadLongCardinal, WriteLongCardinal, ReadLongHex,
+                       WriteLongHex,
+                       ReadShortCardinal, WriteShortCardinal, ReadShortHex,
+                       WriteShortHex ;
+ 
+ 
+      VAR
+         Done: BOOLEAN ;
+ 
+ 
+      (*
+         ReadCardinal - read an unsigned decimal number from the terminal.
+                        The read continues until a space, newline, esc or
+                        end of file is reached.
+      *)
+ 
+      PROCEDURE ReadCardinal (VAR c: CARDINAL) ;
+ 
+ 
+      (*
+         WriteCardinal - writes the value, c, to the terminal and ensures
+                         that at least, n, characters are written. The number
+                         will be padded out by preceeding spaces if necessary.
+      *)
+ 
+      PROCEDURE WriteCardinal (c: CARDINAL; n: CARDINAL) ;
+ 
+ 
+      (*
+         ReadHex - reads in an unsigned hexadecimal number from the terminal.
+                   The read continues until a space, newline, esc or
+                   end of file is reached.
+      *)
+ 
+      PROCEDURE ReadHex (VAR c: CARDINAL) ;
+ 
+ 
+      (*
+         WriteHex - writes out a CARDINAL, c, in hexadecimal format padding
+                    with, n, characters (leading with '0')
+      *)
+ 
+      PROCEDURE WriteHex (c: CARDINAL; n: CARDINAL) ;
+ 
+ 
+      (*
+         ReadLongCardinal - read an unsigned decimal number from the terminal.
+                            The read continues until a space, newline, esc or
+                            end of file is reached.
+      *)
+ 
+      PROCEDURE ReadLongCardinal (VAR c: LONGCARD) ;
+ 
+ 
+      (*
+         WriteLongCardinal - writes the value, c, to the terminal and ensures
+                             that at least, n, characters are written. The number
+                             will be padded out by preceeding spaces if necessary.
+      *)
+ 
+      PROCEDURE WriteLongCardinal (c: LONGCARD; n: CARDINAL) ;
+ 
+ 
+      (*
+         ReadLongHex - reads in an unsigned hexadecimal number from the terminal.
+                       The read continues until a space, newline, esc or
+                       end of file is reached.
+      *)
+ 
+      PROCEDURE ReadLongHex (VAR c: LONGCARD) ;
+ 
+ 
+      (*
+         WriteLongHex - writes out a LONGCARD, c, in hexadecimal format padding
+                        with, n, characters (leading with '0')
+      *)
+ 
+      PROCEDURE WriteLongHex (c: LONGCARD; n: CARDINAL) ;
+ 
+ 
+      (*
+         WriteShortCardinal - writes the value, c, to the terminal and ensures
+                             that at least, n, characters are written. The number
+                             will be padded out by preceeding spaces if necessary.
+      *)
+ 
+      PROCEDURE WriteShortCardinal (c: SHORTCARD; n: CARDINAL) ;
+ 
+ 
+      (*
+         ReadShortCardinal - read an unsigned decimal number from the terminal.
+                             The read continues until a space, newline, esc or
+                             end of file is reached.
+      *)
+ 
+      PROCEDURE ReadShortCardinal (VAR c: SHORTCARD) ;
+ 
+ 
+      (*
+         ReadShortHex - reads in an unsigned hexadecimal number from the terminal.
+                       The read continues until a space, newline, esc or
+                       end of file is reached.
+      *)
+ 
+      PROCEDURE ReadShortHex (VAR c: SHORTCARD) ;
+ 
+ 
+      (*
+         WriteShortHex - writes out a SHORTCARD, c, in hexadecimal format padding
+                        with, n, characters (leading with '0')
+      *)
+ 
+      PROCEDURE WriteShortHex (c: SHORTCARD; n: CARDINAL) ;
+ 
+ 
+      END CardinalIO.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-log/Conversions,  Next: gm2-libs-log/DebugPMD,  Prev: gm2-libs-log/CardinalIO,  Up: PIM and Logitech 3.0 Compatible
+ 
+ 4.2.7 gm2-libs-log/Conversions
+ ------------------------------
+ 
+      DEFINITION MODULE Conversions ;
+ 
+      EXPORT QUALIFIED ConvertOctal, ConvertHex, ConvertCardinal,
+                       ConvertInteger, ConvertLongInt, ConvertShortInt ;
+ 
+      (*
+         ConvertOctal - converts a CARDINAL, num, into an octal/hex/decimal
+                        string and right justifies the string. It adds
+                        spaces rather than '0' to pad out the string
+                        to len characters.
+ 
+                        If the length of str is < num then the number is
+                        truncated on the right.
+      *)
+ 
+      PROCEDURE ConvertOctal    (num, len: CARDINAL; VAR str: ARRAY OF CHAR) ;
+      PROCEDURE ConvertHex      (num, len: CARDINAL; VAR str: ARRAY OF CHAR) ;
+      PROCEDURE ConvertCardinal (num, len: CARDINAL; VAR str: ARRAY OF CHAR) ;
+ 
+      (*
+         The INTEGER counterparts will add a '-' if, num, is <0
+      *)
+ 
+      PROCEDURE ConvertInteger  (num: INTEGER; len: CARDINAL; VAR str: ARRAY OF CHAR) ;
+      PROCEDURE ConvertLongInt  (num: LONGINT; len: CARDINAL; VAR str: ARRAY OF CHAR) ;
+      PROCEDURE ConvertShortInt (num: SHORTINT; len: CARDINAL; VAR str: ARRAY OF CHAR) ;
+ 
+ 
+      END Conversions.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-log/DebugPMD,  Next: gm2-libs-log/DebugTrace,  Prev: gm2-libs-log/Conversions,  Up: PIM and Logitech 3.0 Compatible
+ 
+ 4.2.8 gm2-libs-log/DebugPMD
+ ---------------------------
+ 
+      DEFINITION MODULE DebugPMD ;
+ 
+      END DebugPMD.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-log/DebugTrace,  Next: gm2-libs-log/Delay,  Prev: gm2-libs-log/DebugPMD,  Up: PIM and Logitech 3.0 Compatible
+ 
+ 4.2.9 gm2-libs-log/DebugTrace
+ -----------------------------
+ 
+      DEFINITION MODULE DebugTrace ;
+ 
+      END DebugTrace.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-log/Delay,  Next: gm2-libs-log/Display,  Prev: gm2-libs-log/DebugTrace,  Up: PIM and Logitech 3.0 Compatible
+ 
+ 4.2.10 gm2-libs-log/Delay
+ -------------------------
+ 
+      DEFINITION MODULE Delay ;
+ 
+      EXPORT QUALIFIED Delay ;
+ 
+ 
+      (*
+         milliSec - delays the program by approximately, milliSec, milliseconds.
+      *)
+ 
+      PROCEDURE Delay (milliSec: INTEGER) ;
+ 
+ 
+      END Delay.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-log/Display,  Next: gm2-libs-log/ErrorCode,  Prev: gm2-libs-log/Delay,  Up: PIM and Logitech 3.0 Compatible
+ 
+ 4.2.11 gm2-libs-log/Display
+ ---------------------------
+ 
+      DEFINITION MODULE Display ;
+ 
+      EXPORT QUALIFIED Write ;
+ 
+ 
+      (*
+         Write - display a character to the stdout.
+                 ASCII.EOL moves to the beginning of the next line.
+                 ASCII.del erases the character to the left of the cursor.
+      *)
+ 
+      PROCEDURE Write (ch: CHAR) ;
+ 
+ 
+      END Display.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-log/ErrorCode,  Next: gm2-libs-log/FileSystem,  Prev: gm2-libs-log/Display,  Up: PIM and Logitech 3.0 Compatible
+ 
+ 4.2.12 gm2-libs-log/ErrorCode
+ -----------------------------
+ 
+      DEFINITION MODULE ErrorCode ;
+ 
+      EXPORT QUALIFIED SetErrorCode, GetErrorCode, ExitToOS ;
+ 
+ 
+      (*
+         SetErrorCode - sets the exit value which will be used if
+                        the application terminates normally.
+      *)
+ 
+      PROCEDURE SetErrorCode (value: INTEGER) ;
+ 
+ 
+      (*
+         GetErrorCode - returns the current value to be used upon
+                        application termination.
+      *)
+ 
+      PROCEDURE GetErrorCode (VAR value: INTEGER) ;
+ 
+ 
+      (*
+         ExitToOS - terminate the application and exit returning
+                    the last value set by SetErrorCode to the OS.
+      *)
+ 
+      PROCEDURE ExitToOS ;
+ 
+ 
+      END ErrorCode.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-log/FileSystem,  Next: gm2-libs-log/FloatingUtilities,  Prev: gm2-libs-log/ErrorCode,  Up: PIM and Logitech 3.0 Compatible
+ 
+ 4.2.13 gm2-libs-log/FileSystem
+ ------------------------------
+ 
+      DEFINITION MODULE FileSystem ;
+ 
+      (*  Use this module sparingly, FIO or the ISO file modules have a
+          much cleaner interface.  *)
+ 
+      FROM SYSTEM IMPORT WORD, BYTE, ADDRESS ;
+      IMPORT FIO ;
+      FROM DynamicStrings IMPORT String ;
+ 
+      EXPORT QUALIFIED File, Response, Flag, FlagSet,
+ 
+                       Create, Close, Lookup, Rename, Delete,
+                       SetRead, SetWrite, SetModify, SetOpen,
+                       Doio, SetPos, GetPos, Length, Reset,
+ 
+                       ReadWord, ReadChar, ReadByte, ReadNBytes,
+                       WriteWord, WriteChar, WriteByte, WriteNBytes ;
+ 
+      TYPE
+         File = RECORD
+                   res     : Response ;
+                   flags   : FlagSet ;
+                   eof     : BOOLEAN ;
+                   lastWord: WORD ;
+                   lastByte: BYTE ;
+                   fio     : FIO.File ;
+                   highpos,
+                   lowpos  : CARDINAL ;
+                   name    : String ;
+                END ;
+ 
+         Flag = (
+                 read,        (* read access mode *)
+                 write,       (* write access mode *)
+                 modify,
+                 truncate,    (* truncate file when closed *)
+                 again,       (* reread the last character *)
+                 temporary,   (* file is temporary *)
+                 opened       (* file has been opened *)
+                );
+ 
+         FlagSet = SET OF Flag;
+ 
+         Response = (done, notdone, notsupported, callerror,
+                     unknownfile, paramerror, toomanyfiles,
+                     userdeverror) ;
+ 
+         Command = (create, close, lookup, rename, delete,
+                    setread, setwrite, setmodify, setopen,
+                    doio, setpos, getpos, length) ;
+ 
+ 
+      (*
+         Create - creates a temporary file. To make the file perminant
+                  the file must be renamed.
+      *)
+ 
+      PROCEDURE Create (VAR f: File) ;
+ 
+ 
+      (*
+         Close - closes an open file.
+      *)
+ 
+      PROCEDURE Close (f: File) ;
+ 
+ 
+      (*
+         Lookup - looks for a file, filename. If the file is found
+                  then, f, is opened. If it is not found and, newFile,
+                  is TRUE then a new file is created and attached to, f.
+                  If, newFile, is FALSE and no file was found then f.res
+                  is set to notdone.
+      *)
+ 
+      PROCEDURE Lookup (VAR f: File; filename: ARRAY OF CHAR; newFile: BOOLEAN) ;
+ 
+ 
+      (*
+         Rename - rename a file and change a temporary file to a permanent
+                  file. f.res is set appropriately.
+      *)
+ 
+      PROCEDURE Rename (VAR f: File; newname: ARRAY OF CHAR) ;
+ 
+ 
+      (*
+         Delete - deletes a file, name, and sets the f.res field.
+                  f.res is set appropriately.
+      *)
+ 
+      PROCEDURE Delete (name: ARRAY OF CHAR; VAR f: File) ;
+ 
+ 
+      (*
+         ReadWord - reads a WORD, w, from file, f.
+                    f.res is set appropriately.
+      *)
+ 
+      PROCEDURE ReadWord (VAR f: File; VAR w: WORD) ;
+ 
+ 
+      (*
+         WriteWord - writes one word to a file, f.
+                     f.res is set appropriately.
+      *)
+ 
+      PROCEDURE WriteWord (VAR f: File; w: WORD) ;
+ 
+ 
+      (*
+         ReadChar - reads one character from a file, f.
+      *)
+ 
+      PROCEDURE ReadChar (VAR f: File; VAR ch: CHAR) ;
+ 
+ 
+      (*
+         WriteChar - writes a character, ch, to a file, f.
+                     f.res is set appropriately.
+      *)
+ 
+      PROCEDURE WriteChar (VAR f: File; ch: CHAR) ;
+ 
+ 
+      (*
+         ReadByte - reads a BYTE, b, from file, f.
+                    f.res is set appropriately.
+      *)
+ 
+      PROCEDURE ReadByte (VAR f: File; VAR b: BYTE) ;
+ 
+ 
+      (*
+         WriteByte - writes one BYTE, b, to a file, f.
+                     f.res is set appropriately.
+      *)
+ 
+      PROCEDURE WriteByte (VAR f: File; b: BYTE) ;
+ 
+ 
+      (*
+         ReadNBytes - reads a sequence of bytes from a file, f.
+      *)
+ 
+      PROCEDURE ReadNBytes (VAR f: File; a: ADDRESS; amount: CARDINAL;
+                            VAR actuallyRead: CARDINAL) ;
+ 
+ 
+      (*
+         WriteNBytes - writes a sequence of bytes to file, f.
+      *)
+ 
+      PROCEDURE WriteNBytes (VAR f: File; a: ADDRESS; amount: CARDINAL;
+                             VAR actuallyWritten: CARDINAL) ;
+ 
+ 
+      (*
+         Again - returns the last character read to the internal buffer
+                 so that it can be read again.
+      *)
+ 
+      PROCEDURE Again (VAR f: File) ;
+ 
+ 
+      (*
+         SetRead - puts the file, f, into the read state.
+                   The file position is unchanged.
+      *)
+ 
+      PROCEDURE SetRead (VAR f: File) ;
+ 
+ 
+      (*
+         SetWrite - puts the file, f, into the write state.
+                    The file position is unchanged.
+      *)
+ 
+      PROCEDURE SetWrite (VAR f: File) ;
+ 
+ 
+      (*
+         SetModify - puts the file, f, into the modify state.
+                     The file position is unchanged but the file can be
+                     read and written.
+      *)
+ 
+      PROCEDURE SetModify (VAR f: File) ;
+ 
+ 
+      (*
+         SetOpen - places a file, f, into the open state. The file may
+                   have been in the read/write/modify state before and
+                   in which case the previous buffer contents are flushed
+                   and the file state is reset to open. The position is
+                   unaltered.
+      *)
+ 
+      PROCEDURE SetOpen (VAR f: File) ;
+ 
+ 
+      (*
+         Reset - places a file, f, into the open state and reset the
+                 position to the start of the file.
+      *)
+ 
+      PROCEDURE Reset (VAR f: File) ;
+ 
+ 
+      (*
+         SetPos - lseek to a position within a file.
+      *)
+ 
+      PROCEDURE SetPos (VAR f: File; high, low: CARDINAL) ;
+ 
+ 
+      (*
+         GetPos - return the position within a file.
+      *)
+ 
+      PROCEDURE GetPos (VAR f: File; VAR high, low: CARDINAL) ;
+ 
+ 
+      (*
+         Length - returns the length of file, in, high, and, low.
+      *)
+ 
+      PROCEDURE Length (VAR f: File; VAR high, low: CARDINAL) ;
+ 
+ 
+      (*
+         Doio - effectively flushes a file in write mode, rereads the
+                current buffer from disk if in read mode and writes
+                and rereads the buffer if in modify mode.
+      *)
+ 
+      PROCEDURE Doio (VAR f: File) ;
+ 
+ 
+      (*
+         FileNameChar - checks to see whether the character, ch, is
+                        legal in a filename. nul is returned if the
+                        character was illegal.
+      *)
+ 
+      PROCEDURE FileNameChar (ch: CHAR) ;
+ 
+ 
+      END FileSystem.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-log/FloatingUtilities,  Next: gm2-libs-log/InOut,  Prev: gm2-libs-log/FileSystem,  Up: PIM and Logitech 3.0 Compatible
+ 
+ 4.2.14 gm2-libs-log/FloatingUtilities
+ -------------------------------------
+ 
+      DEFINITION MODULE FloatingUtilities ;
+ 
+      EXPORT QUALIFIED Frac, Round, Float, Trunc,
+                       Fracl, Roundl, Floatl, Truncl ;
+ 
+ 
+      (*
+         Frac - returns the fractional component of, r.
+      *)
+ 
+      PROCEDURE Frac (r: REAL) : REAL ;
+ 
+ 
+      (*
+         Int - returns the integer part of r. It rounds the value towards zero.
+      *)
+ 
+      PROCEDURE Int (r: REAL) : INTEGER ;
+ 
+ 
+      (*
+         Round - returns the number rounded to the nearest integer.
+      *)
+ 
+      PROCEDURE Round (r: REAL) : INTEGER ;
+ 
+ 
+      (*
+         Float - returns a REAL value corresponding to, i.
+      *)
+ 
+      PROCEDURE Float (i: INTEGER) : REAL ;
+ 
+ 
+      (*
+         Trunc - round to the nearest integer not larger in absolute
+                 value.
+      *)
+ 
+      PROCEDURE Trunc (r: REAL) : INTEGER ;
+ 
+ 
+      (*
+         Fracl - returns the fractional component of, r.
+      *)
+ 
+      PROCEDURE Fracl (r: LONGREAL) : LONGREAL ;
+ 
+ 
+      (*
+         Intl - returns the integer part of r. It rounds the value towards zero.
+      *)
+ 
+      PROCEDURE Intl (r: LONGREAL) : LONGINT ;
+ 
+ 
+      (*
+         Roundl - returns the number rounded to the nearest integer.
+      *)
+ 
+      PROCEDURE Roundl (r: LONGREAL) : LONGINT ;
+ 
+ 
+      (*
+         Floatl - returns a REAL value corresponding to, i.
+      *)
+ 
+      PROCEDURE Floatl (i: INTEGER) : LONGREAL ;
+ 
+ 
+      (*
+         Truncl - round to the nearest integer not larger in absolute
+                  value.
+      *)
+ 
+      PROCEDURE Truncl (r: LONGREAL) : LONGINT ;
+ 
+ 
+      END FloatingUtilities.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-log/InOut,  Next: gm2-libs-log/Keyboard,  Prev: gm2-libs-log/FloatingUtilities,  Up: PIM and Logitech 3.0 Compatible
+ 
+ 4.2.15 gm2-libs-log/InOut
+ -------------------------
+ 
+      DEFINITION MODULE InOut ;
+ 
+      IMPORT ASCII ;
+      FROM DynamicStrings IMPORT String ;
+      EXPORT QUALIFIED EOL, Done, termCH, OpenInput, OpenOutput,
+                       CloseInput, CloseOutput,
+                       Read, ReadString, ReadInt, ReadCard,
+                       Write, WriteLn, WriteString, WriteInt, WriteCard,
+                       WriteOct, WriteHex,
+                       ReadS, WriteS ;
+ 
+      CONST
+         EOL = ASCII.EOL ;
+ 
+      VAR
+         Done  : BOOLEAN ;
+         termCH: CHAR ;
+ 
+ 
+      (*
+         OpenInput - reads a string from stdin as the filename for reading.
+                     If the filename ends with `.' then it appends the defext
+                     extension. The global variable Done is set if all
+                     was successful.
+      *)
+ 
+      PROCEDURE OpenInput (defext: ARRAY OF CHAR) ;
+ 
+ 
+      (*
+         CloseInput - closes an opened input file and returns input back to
+                      StdIn.
+      *)
+ 
+      PROCEDURE CloseInput ;
+ 
+ 
+      (*
+         OpenOutput - reads a string from stdin as the filename for writing.
+                      If the filename ends with `.' then it appends the defext
+                      extension. The global variable Done is set if all
+                      was successful.
+      *)
+ 
+      PROCEDURE OpenOutput (defext: ARRAY OF CHAR) ;
+ 
+ 
+      (*
+         CloseOutput - closes an opened output file and returns output back to
+                       StdOut.
+      *)
+ 
+      PROCEDURE CloseOutput ;
+ 
+ 
+      (*
+         Read - reads a single character from the current input file.
+                Done is set to FALSE if end of file is reached or an
+                error occurs.
+      *)
+ 
+      PROCEDURE Read (VAR ch: CHAR) ;
+ 
+ 
+      (*
+         ReadString - reads a sequence of characters. Leading white space
+                      is ignored and the string is terminated with a character
+                      <= ' '
+      *)
+ 
+      PROCEDURE ReadString (VAR s: ARRAY OF CHAR) ;
+ 
+ 
+      (*
+         WriteString - writes a string to the output file.
+      *)
+ 
+      PROCEDURE WriteString (s: ARRAY OF CHAR) ;
+ 
+ 
+      (*
+         Write - writes out a single character, ch, to the current output file.
+      *)
+ 
+      PROCEDURE Write (ch: CHAR) ;
+ 
+ 
+      (*
+         WriteLn - writes a newline to the output file.
+      *)
+ 
+      PROCEDURE WriteLn ;
+ 
+ 
+      (*
+         ReadInt - reads a string and converts it into an INTEGER, x.
+                   Done is set if an INTEGER is read.
+      *)
+ 
+      PROCEDURE ReadInt (VAR x: INTEGER) ;
+ 
+ 
+      (*
+         ReadInt - reads a string and converts it into an INTEGER, x.
+                   Done is set if an INTEGER is read.
+      *)
+ 
+      PROCEDURE ReadCard (VAR x: CARDINAL) ;
+ 
+ 
+      (*
+         WriteCard - writes the CARDINAL, x, to the output file. It ensures
+                     that the number occupies, n, characters. Leading spaces
+                     are added if required.
+      *)
+ 
+      PROCEDURE WriteCard (x, n: CARDINAL) ;
+ 
+ 
+      (*
+         WriteInt - writes the INTEGER, x, to the output file. It ensures
+                    that the number occupies, n, characters. Leading spaces
+                    are added if required.
+      *)
+ 
+      PROCEDURE WriteInt (x: INTEGER; n: CARDINAL) ;
+ 
+ 
+      (*
+         WriteOct - writes the CARDINAL, x, to the output file in octal.
+                    It ensures that the number occupies, n, characters.
+                    Leading spaces are added if required.
+      *)
+ 
+      PROCEDURE WriteOct (x, n: CARDINAL) ;
+ 
+ 
+      (*
+         WriteHex - writes the CARDINAL, x, to the output file in hexadecimal.
+                    It ensures that the number occupies, n, characters.
+                    Leading spaces are added if required.
+      *)
+ 
+      PROCEDURE WriteHex (x, n: CARDINAL) ;
+ 
+ 
+      (*
+         ReadS - returns a string which has is a sequence of characters.
+                 Leading white space is ignored and string is terminated
+                 with a character <= ' '.
+      *)
+ 
+      PROCEDURE ReadS () : String ;
+ 
+ 
+      (*
+         WriteS - writes a String to the output device.
+                  It returns the string, s.
+      *)
+ 
+      PROCEDURE WriteS (s: String) : String ;
+ 
+ 
+      END InOut.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-log/Keyboard,  Next: gm2-libs-log/LongIO,  Prev: gm2-libs-log/InOut,  Up: PIM and Logitech 3.0 Compatible
+ 
+ 4.2.16 gm2-libs-log/Keyboard
+ ----------------------------
+ 
+      DEFINITION MODULE Keyboard ;
+ 
+      EXPORT QUALIFIED Read, KeyPressed ;
+ 
+ 
+      (*
+         Read - reads a character from StdIn. If necessary it will wait
+                for a key to become present on StdIn.
+      *)
+ 
+      PROCEDURE Read (VAR ch: CHAR) ;
+ 
+ 
+      (*
+         KeyPressed - returns TRUE if a character can be read from StdIn
+                      without blocking the caller.
+      *)
+ 
+      PROCEDURE KeyPressed () : BOOLEAN ;
+ 
+ 
+      END Keyboard.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-log/LongIO,  Next: gm2-libs-log/NumberConversion,  Prev: gm2-libs-log/Keyboard,  Up: PIM and Logitech 3.0 Compatible
+ 
+ 4.2.17 gm2-libs-log/LongIO
+ --------------------------
+ 
+      DEFINITION MODULE LongIO ;
+ 
+      EXPORT QUALIFIED Done, ReadLongInt, WriteLongInt ;
+ 
+      VAR
+         Done: BOOLEAN ;
+ 
+      PROCEDURE ReadLongInt (VAR i: LONGINT) ;
+      PROCEDURE WriteLongInt (i: LONGINT; n: CARDINAL) ;
+ 
+ 
+      END LongIO.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-log/NumberConversion,  Next: gm2-libs-log/Random,  Prev: gm2-libs-log/LongIO,  Up: PIM and Logitech 3.0 Compatible
+ 
+ 4.2.18 gm2-libs-log/NumberConversion
+ ------------------------------------
+ 
+      DEFINITION MODULE NumberConversion ;
+ 
+      (* --fixme-- finish this.  *)
+ 
+      END NumberConversion.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-log/Random,  Next: gm2-libs-log/RealConversions,  Prev: gm2-libs-log/NumberConversion,  Up: PIM and Logitech 3.0 Compatible
+ 
+ 4.2.19 gm2-libs-log/Random
+ --------------------------
+ 
+      DEFINITION MODULE Random ;
+ 
+      FROM SYSTEM IMPORT BYTE ;
+      EXPORT QUALIFIED Randomize, RandomInit, RandomBytes, RandomCard, RandomInt, RandomReal, RandomLongReal ;
+ 
+ 
+      (*
+         Randomize - initialize the random number generator with a seed
+                     based on the microseconds.
+      *)
+ 
+      PROCEDURE Randomize ;
+ 
+ 
+      (*
+         RandomInit - initialize the random number generator with value, seed.
+      *)
+ 
+      PROCEDURE RandomInit (seed: CARDINAL) ;
+ 
+ 
+      (*
+         RandomBytes - fills in an array with random values.
+      *)
+ 
+      PROCEDURE RandomBytes (VAR a: ARRAY OF BYTE) ;
+ 
+ 
+      (*
+         RandomInt - return an INTEGER in the range 0..bound-1
+      *)
+ 
+      PROCEDURE RandomInt (bound: INTEGER) : INTEGER ;
+ 
+ 
+      (*
+         RandomCard - return a CARDINAL in the range 0..bound-1
+      *)
+ 
+      PROCEDURE RandomCard (bound: CARDINAL) : CARDINAL ;
+ 
+ 
+      (*
+         RandomReal - return a REAL number in the range 0.0..1.0
+      *)
+ 
+      PROCEDURE RandomReal () : REAL ;
+ 
+ 
+      (*
+         RandomLongReal - return a LONGREAL number in the range 0.0..1.0
+      *)
+ 
+      PROCEDURE RandomLongReal () : LONGREAL ;
+ 
+ 
+      END Random.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-log/RealConversions,  Next: gm2-libs-log/RealInOut,  Prev: gm2-libs-log/Random,  Up: PIM and Logitech 3.0 Compatible
+ 
+ 4.2.20 gm2-libs-log/RealConversions
+ -----------------------------------
+ 
+      DEFINITION MODULE RealConversions ;
+ 
+      EXPORT QUALIFIED SetNoOfExponentDigits,
+                       RealToString, StringToReal,
+                       LongRealToString, StringToLongReal ;
+ 
+ 
+      (*
+         SetNoOfExponentDigits - sets the number of exponent digits to be
+                                 used during future calls of LongRealToString
+                                 and RealToString providing that the width
+                                 is sufficient.
+                                 If this value is set to 0 (the default) then
+                                 the number digits used is the minimum necessary.
+      *)
+ 
+      PROCEDURE SetNoOfExponentDigits (places: CARDINAL) ;
+ 
+ 
+      (*
+         RealToString - converts a real, r, into a right justified string, str.
+                        The number of digits to the right of the decimal point
+                        is given in, digits.  The value, width, represents the
+                        maximum number of characters to be used in the string,
+                        str.
+ 
+                        If digits is negative then exponent notation is used
+                        whereas if digits is positive then fixed point notation
+                        is used.
+ 
+                        If, r, is less than 0.0 then a '-' preceeds the value,
+                        str.  However, if, r, is >= 0.0 a '+' is not added.
+ 
+                        If the conversion of, r, to a string requires more
+                        than, width, characters then the string, str, is set
+                        to a nul string and, ok is assigned FALSE.
+ 
+                        For fixed point notation the minimum width required is
+                        ABS(width)+8
+ 
+                        For exponent notation the minimum width required is
+                        ABS(digits)+2+log10(magnitude).
+ 
+                        if r is a NaN then the string 'nan' is returned formatted and
+                        ok will be FALSE.
+      *)
+ 
+      PROCEDURE RealToString (r: REAL; digits, width: INTEGER;
+                              VAR str: ARRAY OF CHAR; VAR ok: BOOLEAN) ;
+ 
+ 
+      (*
+         LongRealToString - converts a real, r, into a right justified string, str.
+                            The number of digits to the right of the decimal point
+                            is given in, digits. The value, width, represents the
+                            maximum number of characters to be used in the string,
+                            str.
+ 
+                            If digits is negative then exponent notation is used
+                            whereas if digits is positive then fixed point notation
+                            is used.
+ 
+                            If, r, is less than 0.0 then a '-' preceeds the value,
+                            str. However, if, r, is >= 0.0 a '+' is not added.
+ 
+                            If the conversion of, r, to a string requires more
+                            than, width, characters then the string, str, is set
+                            to a nul string and, ok is assigned FALSE.
+ 
+                            For fixed point notation the minimum width required is
+                            ABS(width)+8
+ 
+                            For exponent notation the minimum width required is
+                            ABS(digits)+2+log10(magnitude).
+ 
+                            Examples:
+                            RealToString(100.0, 10, 10, a, ok)       ->  '100.000000'
+                            RealToString(100.0, -5, 12, a, ok)       ->  '  1.00000E+2'
+ 
+                            RealToString(123.456789, 10, 10, a, ok)  ->  '123.456789'
+                            RealToString(123.456789, -5, 13, a, ok)  ->  '    1.23456E+2'
+ 
+                            RealToString(123.456789, -2, 15, a, ok)  ->  '          1.23E+2'
+ 
+                            if r is a NaN then the string 'nan' is returned formatted and
+                            ok will be FALSE.
+      *)
+ 
+      PROCEDURE LongRealToString (r: LONGREAL; digits, width: INTEGER;
+                                  VAR str: ARRAY OF CHAR; VAR ok: BOOLEAN) ;
+ 
+ 
+      (*
+         StringToReal - converts, str, into a REAL, r. The parameter, ok, is
+                        set to TRUE if the conversion was successful.
+      *)
+ 
+      PROCEDURE StringToReal (str: ARRAY OF CHAR; VAR r: REAL; VAR ok: BOOLEAN) ;
+ 
+ 
+      (*
+         StringToLongReal - converts, str, into a LONGREAL, r. The parameter, ok, is
+                            set to TRUE if the conversion was successful.
+      *)
+ 
+      PROCEDURE StringToLongReal (str: ARRAY OF CHAR; VAR r: LONGREAL; VAR ok: BOOLEAN) ;
+ 
+ 
+      END RealConversions.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-log/RealInOut,  Next: gm2-libs-log/Strings,  Prev: gm2-libs-log/RealConversions,  Up: PIM and Logitech 3.0 Compatible
+ 
+ 4.2.21 gm2-libs-log/RealInOut
+ -----------------------------
+ 
+      DEFINITION MODULE RealInOut ;
+ 
+      EXPORT QUALIFIED SetNoOfDecimalPlaces,
+                       ReadReal, WriteReal, WriteRealOct,
+                       ReadLongReal, WriteLongReal, WriteLongRealOct,
+                       ReadShortReal, WriteShortReal, WriteShortRealOct,
+                       Done ;
+ 
+      CONST
+         DefaultDecimalPlaces = 6 ;
+ 
+      VAR
+         Done: BOOLEAN ;
+ 
+ 
+      (*
+         SetNoOfDecimalPlaces - number of decimal places WriteReal and
+                                WriteLongReal should emit.  This procedure
+                                can be used to override the default
+                                DefaultDecimalPlaces constant.
+      *)
+ 
+      PROCEDURE SetNoOfDecimalPlaces (places: CARDINAL) ;
+ 
+ 
+      (*
+         ReadReal - reads a real number, legal syntaxes include:
+                    100, 100.0, 100e0, 100E0, 100E-1, E2, +1E+2, 1e+2
+      *)
+ 
+      PROCEDURE ReadReal (VAR x: REAL) ;
+ 
+ 
+      (*
+         WriteReal - writes a real to the terminal. The real number
+                     is right justified and, n, is the minimum field
+                     width.
+      *)
+ 
+      PROCEDURE WriteReal (x: REAL; n: CARDINAL) ;
+ 
+ 
+      (*
+         WriteRealOct - writes the real to terminal in octal words.
+      *)
+ 
+      PROCEDURE WriteRealOct (x: REAL) ;
+ 
+ 
+      (*
+         ReadLongReal - reads a LONGREAL number, legal syntaxes include:
+                        100, 100.0, 100e0, 100E0, 100E-1, E2, +1E+2, 1e+2
+      *)
+ 
+      PROCEDURE ReadLongReal (VAR x: LONGREAL) ;
+ 
+ 
+      (*
+         WriteLongReal - writes a LONGREAL to the terminal. The real number
+                         is right justified and, n, is the minimum field
+                         width.
+      *)
+ 
+      PROCEDURE WriteLongReal (x: LONGREAL; n: CARDINAL) ;
+ 
+ 
+      (*
+         WriteLongRealOct - writes the LONGREAL to terminal in octal words.
+      *)
+ 
+      PROCEDURE WriteLongRealOct (x: LONGREAL) ;
+ 
+ 
+      (*
+         ReadShortReal - reads a SHORTREAL number, legal syntaxes include:
+                         100, 100.0, 100e0, 100E0, 100E-1, E2, +1E+2, 1e+2
+      *)
+ 
+      PROCEDURE ReadShortReal (VAR x: SHORTREAL) ;
+ 
+ 
+      (*
+         WriteShortReal - writes a SHORTREAL to the terminal. The real number
+                          is right justified and, n, is the minimum field
+                          width.
+      *)
+ 
+      PROCEDURE WriteShortReal (x: SHORTREAL; n: CARDINAL) ;
+ 
+ 
+      (*
+         WriteShortRealOct - writes the SHORTREAL to terminal in octal words.
+      *)
+ 
+      PROCEDURE WriteShortRealOct (x: SHORTREAL) ;
+ 
+ 
+      END RealInOut.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-log/Strings,  Next: gm2-libs-log/Termbase,  Prev: gm2-libs-log/RealInOut,  Up: PIM and Logitech 3.0 Compatible
+ 
+ 4.2.22 gm2-libs-log/Strings
+ ---------------------------
+ 
+      DEFINITION MODULE Strings ;
+ 
+      EXPORT QUALIFIED Assign, Insert, Delete, Pos, Copy, ConCat, Length,
+                       CompareStr ;
+ 
+      (*
+         Assign - dest := source.
+      *)
+ 
+      PROCEDURE Assign (VAR dest: ARRAY OF CHAR; source: ARRAY OF CHAR) ;
+ 
+ 
+      (*
+         Insert - insert the string, substr, into str at position, index.
+                  substr, is added to the end of, str, if, index >= length(str)
+      *)
+ 
+      PROCEDURE Insert (substr: ARRAY OF CHAR; VAR str: ARRAY OF CHAR;
+                        index: CARDINAL) ;
+ 
+ 
+      (*
+         Delete - delete len characters from, str, starting at, index.
+      *)
+ 
+      PROCEDURE Delete (VAR str: ARRAY OF CHAR; index: CARDINAL; length: CARDINAL) ;
+ 
+ 
+      (*
+         Pos - return the first position of, substr, in, str.
+      *)
+ 
+      PROCEDURE Pos (substr, str: ARRAY OF CHAR) : CARDINAL ;
+ 
+ 
+      (*
+         Copy - copy at most, length, characters in, substr, to, str,
+                starting at position, index.
+      *)
+ 
+      PROCEDURE Copy (str: ARRAY OF CHAR;
+                      index, length: CARDINAL; VAR result: ARRAY OF CHAR) ;
+ 
+      (*
+         ConCat - concatenates two strings, s1, and, s2
+                  and places the result into, dest.
+      *)
+ 
+      PROCEDURE ConCat (s1, s2: ARRAY OF CHAR; VAR dest: ARRAY OF CHAR) ;
+ 
+ 
+      (*
+         Length - return the length of string, s.
+      *)
+ 
+      PROCEDURE Length (s: ARRAY OF CHAR) : CARDINAL ;
+ 
+ 
+      (*
+         CompareStr - compare two strings, left, and, right.
+      *)
+ 
+      PROCEDURE CompareStr (left, right: ARRAY OF CHAR) : INTEGER ;
+ 
+ 
+      END Strings.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-log/Termbase,  Next: gm2-libs-log/Terminal,  Prev: gm2-libs-log/Strings,  Up: PIM and Logitech 3.0 Compatible
+ 
+ 4.2.23 gm2-libs-log/Termbase
+ ----------------------------
+ 
+      DEFINITION MODULE Termbase ;
+ 
+      (*
+         Initially the read routines from Keyboard and the
+         write routine from Display is assigned to the Read,
+         KeyPressed and Write procedures.
+      *)
+ 
+      EXPORT QUALIFIED ReadProcedure, StatusProcedure, WriteProcedure,
+                       AssignRead, AssignWrite, UnAssignRead, UnAssignWrite,
+                       Read, KeyPressed, Write ;
+ 
+      TYPE
+         ReadProcedure = PROCEDURE (VAR CHAR) ;
+         WriteProcedure = PROCEDURE (CHAR) ;
+         StatusProcedure = PROCEDURE () : BOOLEAN ;
+ 
+ 
+      (*
+         AssignRead - assigns a read procedure and status procedure for terminal
+                      input. Done is set to TRUE if successful. Subsequent
+                      Read and KeyPressed calls are mapped onto the user supplied
+                      procedures. The previous read and status procedures are
+                      uncovered and reused after UnAssignRead is called.
+      *)
+ 
+      PROCEDURE AssignRead (rp: ReadProcedure; sp: StatusProcedure;
+                            VAR Done: BOOLEAN) ;
+ 
+ 
+      (*
+         UnAssignRead - undo the last call to AssignRead and set Done to TRUE
+                        on success.
+      *)
+ 
+      PROCEDURE UnAssignRead (VAR Done: BOOLEAN) ;
+ 
+ 
+      (*
+         Read - reads a single character using the currently active read
+                procedure.
+      *)
+ 
+      PROCEDURE Read (VAR ch: CHAR) ;
+ 
+ 
+      (*
+         KeyPressed - returns TRUE if a character is available to be read.
+      *)
+ 
+      PROCEDURE KeyPressed () : BOOLEAN ;
+ 
+ 
+      (*
+         AssignWrite - assigns a write procedure for terminal output.
+                       Done is set to TRUE if successful. Subsequent
+                       Write calls are mapped onto the user supplied
+                       procedure. The previous write procedure is
+                       uncovered and reused after UnAssignWrite is called.
+      *)
+ 
+      PROCEDURE AssignWrite (wp: WriteProcedure; VAR Done: BOOLEAN) ;
+ 
+ 
+      (*
+         UnAssignWrite - undo the last call to AssignWrite and set Done to TRUE
+                         on success.
+      *)
+ 
+      PROCEDURE UnAssignWrite (VAR Done: BOOLEAN) ;
+ 
+ 
+      (*
+         Write - writes a single character using the currently active write
+                 procedure.
+      *)
+ 
+      PROCEDURE Write (VAR ch: CHAR) ;
+ 
+ 
+      END Termbase.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-log/Terminal,  Next: gm2-libs-log/TimeDate,  Prev: gm2-libs-log/Termbase,  Up: PIM and Logitech 3.0 Compatible
+ 
+ 4.2.24 gm2-libs-log/Terminal
+ ----------------------------
+ 
+      DEFINITION MODULE Terminal ;
+ 
+      (*
+         It provides simple terminal input output
+         routines which all utilize the TermBase module.
+      *)
+ 
+      EXPORT QUALIFIED Read, KeyPressed, ReadAgain, ReadString, Write,
+                       WriteString, WriteLn ;
+ 
+ 
+      (*
+         Read - reads a single character.
+      *)
+ 
+      PROCEDURE Read (VAR ch: CHAR) ;
+ 
+ 
+      (*
+         KeyPressed - returns TRUE if a character can be read without blocking
+                      the caller.
+      *)
+ 
+      PROCEDURE KeyPressed () : BOOLEAN ;
+ 
+ 
+      (*
+         ReadString - reads a sequence of characters.
+                      Tabs are expanded into 8 spaces and <cr> or <lf> terminates
+                      the string.
+      *)
+ 
+      PROCEDURE ReadString (VAR s: ARRAY OF CHAR) ;
+ 
+ 
+      (*
+         ReadAgain - makes the last character readable again.
+      *)
+ 
+      PROCEDURE ReadAgain ;
+ 
+ 
+      (*
+         Write - writes a single character to the Termbase module.
+      *)
+ 
+      PROCEDURE Write (ch: CHAR) ;
+ 
+ 
+      (*
+         WriteString - writes out a string which is terminated by a <nul>
+                       character or the end of string HIGH(s).
+      *)
+ 
+      PROCEDURE WriteString (s: ARRAY OF CHAR) ;
+ 
+ 
+      (*
+         WriteLn - writes a lf character.
+      *)
+ 
+      PROCEDURE WriteLn ;
+ 
+ 
+      END Terminal.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-log/TimeDate,  Prev: gm2-libs-log/Terminal,  Up: PIM and Logitech 3.0 Compatible
+ 
+ 4.2.25 gm2-libs-log/TimeDate
+ ----------------------------
+ 
+      DEFINITION MODULE TimeDate ;
+ 
+      (*
+         Legacy compatibility - you are advised to use cleaner
+         designed modules based on 'man 3 strtime'
+         and friends for new projects as the day value here is ugly.
+         [it was mapped onto MSDOS pre 2000].
+      *)
+ 
+      EXPORT QUALIFIED Time, GetTime, SetTime, CompareTime, TimeToZero,
+                       TimeToString ;
+ 
+      TYPE
+      (*
+         day holds:  bits 0..4 = day of month (1..31)
+                          5..8 = month of year (1..12)
+                          9..  = year - 1900
+         minute holds:    hours * 60 + minutes
+         millisec holds:  seconds * 1000 + millisec
+                          which is reset to 0 every minute
+      *)
+ 
+         Time = RECORD
+                   day, minute, millisec: CARDINAL ;
+                END ;
+ 
+ 
+      (*
+         GetTime - returns the current date and time.
+      *)
+ 
+      PROCEDURE GetTime (VAR curTime: Time) ;
+ 
+ 
+      (*
+         SetTime - does nothing, but provides compatibility with
+                   the Logitech-3.0 library.
+      *)
+ 
+      PROCEDURE SetTime (curTime: Time) ;
+ 
+ 
+      (*
+         CompareTime - compare two dates and time which returns:
+ 
+                       -1  if t1 < t2
+                        0  if t1 = t2
+                        1  if t1 > t2
+      *)
+ 
+      PROCEDURE CompareTime (t1, t2: Time) : INTEGER ;
+ 
+ 
+      (*
+         TimeToZero - initializes, t, to zero.
+      *)
+ 
+      PROCEDURE TimeToZero (VAR t: Time) ;
+ 
+ 
+      (*
+         TimeToString - convert time, t, to a string.
+                        The string, s, should be at least 19 characters
+                        long and the returned string will be
+ 
+                        yyyy-mm-dd hh:mm:ss
+      *)
+ 
+      PROCEDURE TimeToString (t: Time; VAR s: ARRAY OF CHAR) ;
+ 
+ 
+      END TimeDate.
+ 
+ 
+ File: m2.info,  Node: PIM coroutine support,  Next: M2 ISO Libraries,  Prev: PIM and Logitech 3.0 Compatible,  Up: Libraries
+ 
+ 4.3 PIM coroutine support
+ =========================
+ 
+ This directory contains a PIM 'SYSTEM' containing the 'PROCESS'
+ primitives built on top of 'gthread's.
+ * Menu:
+ 
+ * gm2-libs-coroutines/Executive::Executive.def
+ * gm2-libs-coroutines/KeyBoardLEDs::KeyBoardLEDs.def
+ * gm2-libs-coroutines/SYSTEM::SYSTEM.def
+ * gm2-libs-coroutines/TimerHandler::TimerHandler.def
+ 
+ 
+ File: m2.info,  Node: gm2-libs-coroutines/Executive,  Next: gm2-libs-coroutines/KeyBoardLEDs,  Up: PIM coroutine support
+ 
+ 4.3.1 gm2-libs-coroutines/Executive
+ -----------------------------------
+ 
+      DEFINITION MODULE Executive ;
+ 
+      EXPORT QUALIFIED SEMAPHORE, DESCRIPTOR,
+                       InitProcess, KillProcess, Resume, Suspend, InitSemaphore,
+                       Wait, Signal, WaitForIO, Ps, GetCurrentProcess,
+                       RotateRunQueue, ProcessName, DebugProcess ;
+ 
+      TYPE
+         SEMAPHORE ;         (* defines Dijkstra's semaphores *)
+         DESCRIPTOR ;        (* handle onto a process         *)
+ 
+ 
+      (*
+         InitProcess - initializes a process which is held in the suspended
+                       state. When the process is resumed it will start executing
+                       procedure, p. The process has a maximum stack size of,
+                       StackSize, bytes and its textual name is, Name.
+                       The StackSize should be at least 5000 bytes.
+      *)
+ 
+      PROCEDURE InitProcess (p: PROC; StackSize: CARDINAL;
+                             Name: ARRAY OF CHAR) : DESCRIPTOR ;
+ 
+ 
+      (*
+         KillProcess - kills the current process. Notice that if InitProcess
+                       is called again, it might reuse the DESCRIPTOR of the
+                       killed process. It is the responsibility of the caller
+                       to ensure all other processes understand this process
+                       is different.
+      *)
+ 
+      PROCEDURE KillProcess ;
+ 
+ 
+      (*
+         Resume - resumes a suspended process. If all is successful then the process, p,
+                  is returned. If it fails then NIL is returned.
+      *)
+ 
+      PROCEDURE Resume (d: DESCRIPTOR) : DESCRIPTOR ;
+ 
+ 
+      (*
+         Suspend - suspend the calling process.
+                   The process can only continue running if another process
+                   Resumes it.
+      *)
+ 
+      PROCEDURE Suspend ;
+ 
+ 
+      (*
+         InitSemaphore - creates a semaphore whose initial value is, v, and
+                         whose name is, Name.
+      *)
+ 
+      PROCEDURE InitSemaphore (v: CARDINAL; Name: ARRAY OF CHAR) : SEMAPHORE ;
+ 
+ 
+      (*
+         Wait - performs dijkstra's P operation on a semaphore.
+                A process which calls this procedure will
+                wait until the value of the semaphore is > 0
+                and then it will decrement this value.
+      *)
+ 
+      PROCEDURE Wait (s: SEMAPHORE) ;
+ 
+ 
+      (*
+         Signal - performs dijkstra's V operation on a semaphore.
+                  A process which calls the procedure will increment
+                  the semaphores value.
+      *)
+ 
+      PROCEDURE Signal (s: SEMAPHORE) ;
+ 
+ 
+      (*
+         WaitForIO - waits for an interrupt to occur on vector, VectorNo.
+      *)
+ 
+      PROCEDURE WaitForIO (VectorNo: CARDINAL) ;
+ 
+ 
+      (*
+         Ps - displays a process list together with process status.
+      *)
+ 
+      PROCEDURE Ps ;
+ 
+ 
+      (*
+         GetCurrentProcess - returns the descriptor of the current running
+                             process.
+      *)
+ 
+      PROCEDURE GetCurrentProcess () : DESCRIPTOR ;
+ 
+ 
+      (*
+         RotateRunQueue - rotates the process run queue.
+                          It does not call the scheduler.
+      *)
+ 
+      PROCEDURE RotateRunQueue ;
+ 
+ 
+      (*
+         ProcessName - displays the name of process, d, through
+                       DebugString.
+      *)
+ 
+      PROCEDURE ProcessName (d: DESCRIPTOR) ;
+ 
+ 
+      (*
+         DebugProcess - gdb debug handle to enable users to debug deadlocked
+                        semaphore processes.
+      *)
+ 
+      PROCEDURE DebugProcess (d: DESCRIPTOR) ;
+ 
+ 
+      END Executive.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-coroutines/KeyBoardLEDs,  Next: gm2-libs-coroutines/SYSTEM,  Prev: gm2-libs-coroutines/Executive,  Up: PIM coroutine support
+ 
+ 4.3.2 gm2-libs-coroutines/KeyBoardLEDs
+ --------------------------------------
+ 
+      DEFINITION MODULE KeyBoardLEDs ;
+ 
+ 
+      EXPORT QUALIFIED SwitchLeds,
+                       SwitchScroll, SwitchNum, SwitchCaps ;
+ 
+ 
+      (*
+         SwitchLeds - switch the keyboard LEDs to the state defined
+                      by the BOOLEAN variables. TRUE = ON.
+      *)
+ 
+      PROCEDURE SwitchLeds (NumLock, CapsLock, ScrollLock: BOOLEAN) ;
+ 
+ 
+      (*
+         SwitchScroll - switchs the scroll LED on or off.
+      *)
+ 
+      PROCEDURE SwitchScroll (Scroll: BOOLEAN) ;
+ 
+ 
+      (*
+         SwitchNum - switches the Num LED on or off.
+      *)
+ 
+      PROCEDURE SwitchNum (Num: BOOLEAN) ;
+ 
+ 
+      (*
+         SwitchCaps - switches the Caps LED on or off.
+      *)
+ 
+      PROCEDURE SwitchCaps (Caps: BOOLEAN) ;
+ 
+ 
+      END KeyBoardLEDs.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-coroutines/SYSTEM,  Next: gm2-libs-coroutines/TimerHandler,  Prev: gm2-libs-coroutines/KeyBoardLEDs,  Up: PIM coroutine support
+ 
+ 4.3.3 gm2-libs-coroutines/SYSTEM
+ --------------------------------
+ 
+      DEFINITION MODULE SYSTEM ;
+ 
+      (* This module is designed to be used on a native operating system
+         rather than an embedded system as it implements the coroutine
+         primitives TRANSFER, IOTRANSFER and
+         NEWPROCESS through the GNU Pthread library.  *)
+ 
+      FROM COROUTINES IMPORT PROTECTION ;
+ 
+      EXPORT QUALIFIED (* the following are built into the compiler: *)
+                       LOC, WORD, BYTE, ADDRESS, INTEGER8,
+                       INTEGER16, INTEGER32, INTEGER64, CARDINAL8,
+                       CARDINAL16, CARDINAL32, CARDINAL64, WORD16,
+                       WORD32, WORD64, BITSET8, BITSET16,
+                       BITSET32, REAL32, REAL64, REAL128,
+                       COMPLEX32, COMPLEX64, COMPLEX128, CSIZE_T,
+                       CSSIZE_T,
+                       ADR, TSIZE, ROTATE, SHIFT, THROW, TBITSIZE,
+                       (* SIZE is exported depending upon -fpim2 and
+                          -fpedantic.  *)
+                       (* The rest are implemented in SYSTEM.mod.  *)
+                       PROCESS, TRANSFER, NEWPROCESS, IOTRANSFER,
+                       LISTEN,
+                       ListenLoop, TurnInterrupts,
+                       (* Internal GM2 compiler functions.  *)
+                       ShiftVal, ShiftLeft, ShiftRight,
+                       RotateVal, RotateLeft, RotateRight ;
+ 
+ 
+      TYPE
+         PROCESS  = RECORD
+                       context: INTEGER ;
+                    END ;
+ 
+      (* Note that the full list of system and sized datatypes include:
+         LOC, WORD, BYTE, ADDRESS,
+ 
+         (and the non language standard target types)
+ 
+         INTEGER8, INTEGER16, INTEGER32, INTEGER64,
+         CARDINAL8, CARDINAL16, CARDINAL32, CARDINAL64,
+         WORD16, WORD32, WORD64, BITSET8, BITSET16,
+         BITSET32, REAL32, REAL64, REAL128, COMPLEX32,
+         COMPLEX64, COMPLEX128, CSIZE_T, CSSIZE_T.
+ 
+         Also note that the non-standard data types will
+         move into another module in the future.  *)
+ 
+      (* The following types are supported on this target:
+         LOC ;
+         WORD ;
+         BYTE ;
+         ADDRESS ;
+         INTEGER8 ;
+         INTEGER16 ;
+         INTEGER32 ;
+         INTEGER64 ;
+         CARDINAL8 ;
+         CARDINAL16 ;
+         CARDINAL32 ;
+         CARDINAL64 ;
+         WORD16 ;
+         WORD32 ;
+         WORD64 ;
+         BITSET8 ;
+         BITSET16 ;
+         BITSET32 ;
+         REAL32 ;
+         REAL64 ;
+         REAL128 ;
+         COMPLEX32 ;
+         COMPLEX64 ;
+         COMPLEX128 ;
+         CSIZE_T ;
+         CSSIZE_T ;
+      *)
+ 
+ 
+      (*
+         TRANSFER - save the current volatile environment into, p1.
+                    Restore the volatile environment from, p2.
+      *)
+ 
+      PROCEDURE TRANSFER (VAR p1: PROCESS; p2: PROCESS) ;
+ 
+ 
+      (*
+         NEWPROCESS - p is a parameterless procedure, a, is the origin of
+                      the workspace used for the process stack and containing
+                      the volatile environment of the process.  StackSize, is
+                      the maximum size of the stack in bytes which can be used
+                      by this process.  new, is the new process.
+      *)
+ 
+      PROCEDURE NEWPROCESS (p: PROC; a: ADDRESS; StackSize: CARDINAL; VAR new: PROCESS) ;
+ 
+ 
+      (*
+         IOTRANSFER - saves the current volatile environment into, First,
+                      and restores volatile environment, Second.
+                      When an interrupt, InterruptNo, is encountered then
+                      the reverse takes place.  (The then current volatile
+                      environment is shelved onto Second and First is resumed).
+ 
+                      NOTE: that upon interrupt the Second might not be the
+                            same process as that before the original call to
+                            IOTRANSFER.
+      *)
+ 
+      PROCEDURE IOTRANSFER (VAR First, Second: PROCESS; InterruptNo: CARDINAL) ;
+ 
+ 
+      (*
+         LISTEN - briefly listen for any interrupts.
+      *)
+ 
+      PROCEDURE LISTEN ;
+ 
+ 
+      (*
+         ListenLoop - should be called instead of users writing:
+ 
+                      LOOP
+                         LISTEN
+                      END
+ 
+                      It performs the same function but yields
+                      control back to the underlying operating system
+                      via a call to pth_select.
+                      It also checks for deadlock.
+                      This function returns when an interrupt occurs ie
+                      a file descriptor becomes ready or a time event
+                      expires.  See the module RTint.
+      *)
+ 
+      PROCEDURE ListenLoop ;
+ 
+ 
+      (*
+         TurnInterrupts - switches processor interrupts to the protection
+                          level, to.  It returns the old value.
+      *)
+ 
+      PROCEDURE TurnInterrupts (to: PROTECTION) : PROTECTION ;
+ 
+ 
+      (*
+         all the functions below are declared internally to gm2
+         ====================================================
+ 
+      PROCEDURE ADR (VAR v: <anytype>): ADDRESS;
+        (* Returns the address of variable v. *)
+ 
+      PROCEDURE SIZE (v: <type>) : ZType;
+        (* Returns the number of BYTES used to store a v of
+           any specified <type>.  Only available if -fpim2 is used.
+        *)
+ 
+      PROCEDURE TSIZE (<type>) : CARDINAL;
+        (* Returns the number of BYTES used to store a value of the
+           specified <type>.
+        *)
+ 
+      PROCEDURE ROTATE (val: <a set type>;
+                        num: INTEGER): <type of first parameter>;
+        (* Returns a bit sequence obtained from val by rotating up or down
+           (left or right) by the absolute value of num.  The direction is
+           down if the sign of num is negative, otherwise the direction is up.
+        *)
+ 
+      PROCEDURE SHIFT (val: <a set type>;
+                       num: INTEGER): <type of first parameter>;
+        (* Returns a bit sequence obtained from val by shifting up or down
+           (left or right) by the absolute value of num, introducing
+           zeros as necessary.  The direction is down if the sign of
+           num is negative, otherwise the direction is up.
+        *)
+ 
+      PROCEDURE THROW (i: INTEGER) <* noreturn *> ;
+        (*
+           THROW is a GNU extension and was not part of the PIM or ISO
+           standards.  It throws an exception which will be caught by the EXCEPT
+           block (assuming it exists).  This is a compiler builtin function which
+           interfaces to the GCC exception handling runtime system.
+           GCC uses the term throw, hence the naming distinction between
+           the GCC builtin and the Modula-2 runtime library procedure Raise.
+           The later library procedure Raise will call SYSTEM.THROW after
+           performing various housekeeping activities.
+        *)
+ 
+      PROCEDURE TBITSIZE (<type>) : CARDINAL ;
+        (* Returns the minimum number of bits necessary to represent
+           <type>.  This procedure function is only useful for determining
+           the number of bits used for any type field within a packed RECORD.
+           It is not particularly useful elsewhere since <type> might be
+           optimized for speed, for example a BOOLEAN could occupy a WORD.
+        *)
+      *)
+ 
+      (* The following procedures are invoked by GNU Modula-2 to
+         shift non word sized set types.  They are not strictly part
+         of the core PIM Modula-2, however they are used
+         to implement the SHIFT procedure defined above,
+         which are in turn used by the Logitech compatible libraries.
+ 
+         Users will access these procedures by using the procedure
+         SHIFT above and GNU Modula-2 will map SHIFT onto one of
+         the following procedures.
+      *)
+ 
+      (*
+         ShiftVal - is a runtime procedure whose job is to implement
+                    the SHIFT procedure of ISO SYSTEM. GNU Modula-2 will
+                    inline a SHIFT of a single WORD sized set and will
+                    only call this routine for larger sets.
+      *)
+ 
+      PROCEDURE ShiftVal (VAR s, d: ARRAY OF BITSET;
+                          SetSizeInBits: CARDINAL;
+                          ShiftCount: INTEGER) ;
+ 
+ 
+      (*
+         ShiftLeft - performs the shift left for a multi word set.
+                     This procedure might be called by the back end of
+                     GNU Modula-2 depending whether amount is known at
+                     compile time.
+      *)
+ 
+      PROCEDURE ShiftLeft (VAR s, d: ARRAY OF BITSET;
+                           SetSizeInBits: CARDINAL;
+                           ShiftCount: CARDINAL) ;
+ 
+      (*
+         ShiftRight - performs the shift left for a multi word set.
+                      This procedure might be called by the back end of
+                      GNU Modula-2 depending whether amount is known at
+                      compile time.
+      *)
+ 
+      PROCEDURE ShiftRight (VAR s, d: ARRAY OF BITSET;
+                           SetSizeInBits: CARDINAL;
+                           ShiftCount: CARDINAL) ;
+ 
+ 
+      (*
+         RotateVal - is a runtime procedure whose job is to implement
+                     the ROTATE procedure of ISO SYSTEM.  GNU Modula-2 will
+                     inline a ROTATE of a single WORD (or less)
+                     sized set and will only call this routine for
+                     larger sets.
+      *)
+ 
+      PROCEDURE RotateVal (VAR s, d: ARRAY OF BITSET;
+                           SetSizeInBits: CARDINAL;
+                           RotateCount: INTEGER) ;
+ 
+ 
+      (*
+         RotateLeft - performs the rotate left for a multi word set.
+                      This procedure might be called by the back end of
+                      GNU Modula-2 depending whether amount is known
+                      at compile time.
+      *)
+ 
+      PROCEDURE RotateLeft (VAR s, d: ARRAY OF BITSET;
+                            SetSizeInBits: CARDINAL;
+                            RotateCount: CARDINAL) ;
+ 
+ 
+      (*
+         RotateRight - performs the rotate right for a multi word set.
+                       This procedure might be called by the back end of
+                       GNU Modula-2 depending whether amount is known at
+                       compile time.
+      *)
+ 
+      PROCEDURE RotateRight (VAR s, d: ARRAY OF BITSET;
+                             SetSizeInBits: CARDINAL;
+                             RotateCount: CARDINAL) ;
+ 
+ 
+      END SYSTEM.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-coroutines/TimerHandler,  Prev: gm2-libs-coroutines/SYSTEM,  Up: PIM coroutine support
+ 
+ 4.3.4 gm2-libs-coroutines/TimerHandler
+ --------------------------------------
+ 
+      DEFINITION MODULE TimerHandler ;
+ 
+      (* It also provides the Executive with a basic round robin scheduler.  *)
+ 
+      EXPORT QUALIFIED TicksPerSecond, GetTicks,
+                       EVENT,
+                       Sleep, ArmEvent, WaitOn, Cancel, ReArmEvent ;
+ 
+ 
+      CONST
+         TicksPerSecond =   25 ;  (* Number of ticks per second.  *)
+ 
+      TYPE
+         EVENT ;
+ 
+ 
+      (*
+         GetTicks - returns the number of ticks since boottime.
+      *)
+ 
+      PROCEDURE GetTicks () : CARDINAL ;
+ 
+ 
+      (*
+         Sleep - suspends the current process for a time, t.
+                 The time is measured in ticks.
+      *)
+ 
+      PROCEDURE Sleep (t: CARDINAL) ;
+ 
+ 
+      (*
+         ArmEvent - initializes an event, e, to occur at time, t.
+                    The time, t, is measured in ticks.
+                    The event is NOT placed onto the event queue.
+      *)
+ 
+      PROCEDURE ArmEvent (t: CARDINAL) : EVENT ;
+ 
+ 
+      (*
+         WaitOn - places event, e, onto the event queue and then the calling
+                  process suspends. It is resumed up by either the event
+                  expiring or the event, e, being cancelled.
+                  TRUE is returned if the event was cancelled
+                  FALSE is returned if the event expires.
+                  The event, e, is always assigned to NIL when the function
+                  finishes.
+      *)
+ 
+      PROCEDURE WaitOn (VAR e: EVENT) : BOOLEAN ;
+ 
+ 
+      (*
+         Cancel - cancels the event, e, on the event queue and makes
+                  the appropriate process runnable again.
+                  TRUE is returned if the event was cancelled and
+                  FALSE is returned is the event was not found or
+                        no process was waiting on this event.
+      *)
+ 
+      PROCEDURE Cancel (e: EVENT) : BOOLEAN ;
+ 
+ 
+      (*
+         ReArmEvent - removes an event, e, from the event queue. A new time
+                      is given to this event and it is then re-inserted onto the
+                      event queue in the correct place.
+                      TRUE is returned if this occurred
+                      FALSE is returned if the event was not found.
+      *)
+ 
+      PROCEDURE ReArmEvent (e: EVENT; t: CARDINAL) : BOOLEAN ;
+ 
+ 
+      END TimerHandler.
+ 
+ 
+ File: m2.info,  Node: M2 ISO Libraries,  Prev: PIM coroutine support,  Up: Libraries
+ 
+ 4.4 M2 ISO Libraries
+ ====================
+ 
+ This directory contains the ISO definition modules and some
+ corresponding implementation modules.  The definition files:
+ 'ChanConsts.def', 'CharClass.def', 'ComplexMath.def',
+ 'ConvStringLong.def', 'ConvStringReal.def', 'ConvTypes.def',
+ 'COROUTINES.def', 'EXCEPTIONS.def', 'GeneralUserExceptions.def',
+ 'IOChan.def', 'IOConsts.def', 'IOLink.def', 'IOLink.def',
+ 'IOResult.def', 'LongComplexMath.def', 'LongConv.def', 'LongIO.def',
+ 'LongMath.def', 'LongStr.def', 'LowLong.def', 'LowReal.def',
+ 'M2EXCEPTION.def', 'Processes.def', 'ProgramArgs.def', 'RawIO.def',
+ 'RealConv.def', 'RealIO.def', 'RealMath.def', 'RealStr.def',
+ 'RndFile.def', 'Semaphores.def', 'SeqFile.def', 'SIOResult.def',
+ 'SLongIO.def', 'SRawIO.def', 'SRealIO.def', 'StdChans.def',
+ 'STextIO.def', 'Storage.def', 'StreamFile.def', 'Strings.def',
+ 'SWholeIO.def', 'SysClock.def', 'SYSTEM.def', 'TERMINATION.def',
+ 'TextIO.def', 'WholeConv.def', 'WholeIO.def' and 'WholeStr.def' were
+ defined by the International Standard Information technology -
+ programming languages BS ISO/IEC 10514-1:1996E Part 1: Modula-2, Base
+ Language.
+ 
+    The Copyright to the definition files 'ChanConsts.def',
+ 'CharClass.def', 'ComplexMath.def', 'ConvStringLong.def',
+ 'ConvStringReal.def', 'ConvTypes.def', 'COROUTINES.def',
+ 'EXCEPTIONS.def', 'GeneralUserExceptions.def', 'IOChan.def',
+ 'IOConsts.def', 'IOLink.def', 'IOLink.def', 'IOResult.def',
+ 'LongComplexMath.def', 'LongConv.def', 'LongIO.def', 'LongMath.def',
+ 'LongStr.def', 'LowLong.def', 'LowReal.def', 'M2EXCEPTION.def',
+ 'Processes.def', 'ProgramArgs.def', 'RawIO.def', 'RealConv.def',
+ 'RealIO.def', 'RealMath.def', 'RealStr.def', 'RndFile.def',
+ 'Semaphores.def', 'SeqFile.def', 'SIOResult.def', 'SLongIO.def',
+ 'SRawIO.def', 'SRealIO.def', 'StdChans.def', 'STextIO.def',
+ 'Storage.def', 'StreamFile.def', 'Strings.def', 'SWholeIO.def',
+ 'SysClock.def', 'SYSTEM.def', 'TERMINATION.def', 'TextIO.def',
+ 'WholeConv.def', 'WholeIO.def' and 'WholeStr.def' belong to ISO/IEC
+ (International Organization for Standardization and International
+ Electrotechnical Commission).  The licence allows them to be distributed
+ with the compiler (as described on page 707 of the Information
+ technology - Programming languages Part 1: Modula-2, Base Language.  BS
+ ISO/IEC 10514-1:1996).
+ 
+    All implementation modules and 'ClientSocket.def', 'LongWholeIO.def',
+ 'M2RTS.def', 'MemStream.def', 'pth.def', 'RandomNumber.def',
+ 'RTdata.def', 'RTentity.def', 'RTfio.def', 'RTio.def',
+ 'ShortComplexMath.def', 'ShortIO.def', 'ShortWholeIO.def',
+ 'SimpleCipher.def', 'SLongWholeIO.def', 'SShortIO.def',
+ 'SShortWholeIO.def', 'StringChan.def' and 'wraptime.def' are Copyright
+ of the FSF and are held under the GPLv3 with runtime exceptions.
+ 
+    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/>.
+ 
+    Notice that GNU Modula-2 contains additional libraries for
+ input/output of 'SHORTREAL', 'SHORTCARD', 'SHORTINT', 'LONGCARD',
+ 'LONGINT' data types.  It also provides a 'RandomNumber', 'SimpleCipher'
+ and 'ClientSocket' modules as well as low level modules which allow the
+ IO libraries to coexist with their PIM counterparts.
+ * Menu:
+ 
+ * gm2-libs-iso/COROUTINES::COROUTINES.def
+ * gm2-libs-iso/ChanConsts::ChanConsts.def
+ * gm2-libs-iso/CharClass::CharClass.def
+ * gm2-libs-iso/ClientSocket::ClientSocket.def
+ * gm2-libs-iso/ComplexMath::ComplexMath.def
+ * gm2-libs-iso/ConvStringLong::ConvStringLong.def
+ * gm2-libs-iso/ConvStringReal::ConvStringReal.def
+ * gm2-libs-iso/ConvTypes::ConvTypes.def
+ * gm2-libs-iso/EXCEPTIONS::EXCEPTIONS.def
+ * gm2-libs-iso/ErrnoCategory::ErrnoCategory.def
+ * gm2-libs-iso/GeneralUserExceptions::GeneralUserExceptions.def
+ * gm2-libs-iso/IOChan::IOChan.def
+ * gm2-libs-iso/IOConsts::IOConsts.def
+ * gm2-libs-iso/IOLink::IOLink.def
+ * gm2-libs-iso/IOResult::IOResult.def
+ * gm2-libs-iso/LongComplexMath::LongComplexMath.def
+ * gm2-libs-iso/LongConv::LongConv.def
+ * gm2-libs-iso/LongIO::LongIO.def
+ * gm2-libs-iso/LongMath::LongMath.def
+ * gm2-libs-iso/LongStr::LongStr.def
+ * gm2-libs-iso/LongWholeIO::LongWholeIO.def
+ * gm2-libs-iso/LowLong::LowLong.def
+ * gm2-libs-iso/LowReal::LowReal.def
+ * gm2-libs-iso/LowShort::LowShort.def
+ * gm2-libs-iso/M2EXCEPTION::M2EXCEPTION.def
+ * gm2-libs-iso/M2RTS::M2RTS.def
+ * gm2-libs-iso/MemStream::MemStream.def
+ * gm2-libs-iso/Preemptive::Preemptive.def
+ * gm2-libs-iso/Processes::Processes.def
+ * gm2-libs-iso/ProgramArgs::ProgramArgs.def
+ * gm2-libs-iso/RTco::RTco.def
+ * gm2-libs-iso/RTdata::RTdata.def
+ * gm2-libs-iso/RTentity::RTentity.def
+ * gm2-libs-iso/RTfio::RTfio.def
+ * gm2-libs-iso/RTgen::RTgen.def
+ * gm2-libs-iso/RTgenif::RTgenif.def
+ * gm2-libs-iso/RTio::RTio.def
+ * gm2-libs-iso/RandomNumber::RandomNumber.def
+ * gm2-libs-iso/RawIO::RawIO.def
+ * gm2-libs-iso/RealConv::RealConv.def
+ * gm2-libs-iso/RealIO::RealIO.def
+ * gm2-libs-iso/RealMath::RealMath.def
+ * gm2-libs-iso/RealStr::RealStr.def
+ * gm2-libs-iso/RndFile::RndFile.def
+ * gm2-libs-iso/SIOResult::SIOResult.def
+ * gm2-libs-iso/SLongIO::SLongIO.def
+ * gm2-libs-iso/SLongWholeIO::SLongWholeIO.def
+ * gm2-libs-iso/SRawIO::SRawIO.def
+ * gm2-libs-iso/SRealIO::SRealIO.def
+ * gm2-libs-iso/SShortIO::SShortIO.def
+ * gm2-libs-iso/SShortWholeIO::SShortWholeIO.def
+ * gm2-libs-iso/STextIO::STextIO.def
+ * gm2-libs-iso/SWholeIO::SWholeIO.def
+ * gm2-libs-iso/SYSTEM::SYSTEM.def
+ * gm2-libs-iso/Semaphores::Semaphores.def
+ * gm2-libs-iso/SeqFile::SeqFile.def
+ * gm2-libs-iso/ShortComplexMath::ShortComplexMath.def
+ * gm2-libs-iso/ShortIO::ShortIO.def
+ * gm2-libs-iso/ShortWholeIO::ShortWholeIO.def
+ * gm2-libs-iso/SimpleCipher::SimpleCipher.def
+ * gm2-libs-iso/StdChans::StdChans.def
+ * gm2-libs-iso/Storage::Storage.def
+ * gm2-libs-iso/StreamFile::StreamFile.def
+ * gm2-libs-iso/StringChan::StringChan.def
+ * gm2-libs-iso/Strings::Strings.def
+ * gm2-libs-iso/SysClock::SysClock.def
+ * gm2-libs-iso/TERMINATION::TERMINATION.def
+ * gm2-libs-iso/TermFile::TermFile.def
+ * gm2-libs-iso/TextIO::TextIO.def
+ * gm2-libs-iso/TextUtil::TextUtil.def
+ * gm2-libs-iso/WholeConv::WholeConv.def
+ * gm2-libs-iso/WholeIO::WholeIO.def
+ * gm2-libs-iso/WholeStr::WholeStr.def
+ * gm2-libs-iso/wrapclock::wrapclock.def
+ * gm2-libs-iso/wrapsock::wrapsock.def
+ * gm2-libs-iso/wraptime::wraptime.def
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/COROUTINES,  Next: gm2-libs-iso/ChanConsts,  Up: M2 ISO Libraries
+ 
+ 4.4.1 gm2-libs-iso/COROUTINES
+ -----------------------------
+ 
+      DEFINITION MODULE COROUTINES;
+ 
+      (* Facilities for coroutines and the handling of interrupts *)
+ 
+      IMPORT SYSTEM ;
+ 
+ 
+      CONST
+        UnassignedPriority = 0 ;
+ 
+      TYPE
+        COROUTINE ; (* Values of this type are created dynamically by NEWCOROUTINE
+                       and identify the coroutine in subsequent operations *)
+        INTERRUPTSOURCE = CARDINAL ;
+        PROTECTION = [UnassignedPriority..7] ;
+ 
+ 
+      PROCEDURE NEWCOROUTINE (procBody: PROC;
+                              workspace: SYSTEM.ADDRESS;
+                              size: CARDINAL;
+                              VAR cr: COROUTINE;
+                              [initProtection: PROTECTION = UnassignedPriority]);
+        (* Creates a new coroutine whose body is given by procBody, and
+           returns the identity of the coroutine in cr. workspace is a
+           pointer to the work space allocated to the coroutine; size
+           specifies the size of this workspace in terms of SYSTEM.LOC.
+ 
+           The optarg, initProtection, may contain a single parameter which
+           specifies the initial protection level of the coroutine.
+        *)
+ 
+      PROCEDURE TRANSFER (VAR from: COROUTINE; to: COROUTINE);
+        (* Returns the identity of the calling coroutine in from, and
+           transfers control to the coroutine specified by to.
+        *)
+ 
+      PROCEDURE IOTRANSFER (VAR from: COROUTINE; to: COROUTINE);
+        (* Returns the identity of the calling coroutine in from and
+           transfers control to the coroutine specified by to.  On
+           occurrence of an interrupt, associated with the caller, control
+           is transferred back to the caller, and the identity of the
+           interrupted coroutine is returned in from.  The calling coroutine
+           must be associated with a source of interrupts.
+        *)
+ 
+      PROCEDURE ATTACH (source: INTERRUPTSOURCE);
+        (* Associates the specified source of interrupts with the calling
+           coroutine. *)
+ 
+      PROCEDURE DETACH (source: INTERRUPTSOURCE);
+        (* Dissociates the specified source of interrupts from the calling
+           coroutine. *)
+ 
+      PROCEDURE IsATTACHED (source: INTERRUPTSOURCE): BOOLEAN;
+        (* Returns TRUE if and only if the specified source of interrupts is
+           currently associated with a coroutine; otherwise returns FALSE.
+        *)
+ 
+      PROCEDURE HANDLER (source: INTERRUPTSOURCE): COROUTINE;
+        (* Returns the coroutine, if any, that is associated with the source
+           of interrupts. The result is undefined if IsATTACHED(source) =
+           FALSE.
+        *)
+ 
+      PROCEDURE CURRENT (): COROUTINE;
+        (* Returns the identity of the calling coroutine. *)
+ 
+      PROCEDURE LISTEN (p: PROTECTION);
+        (* Momentarily changes the protection of the calling coroutine to
+           p. *)
+ 
+      PROCEDURE PROT (): PROTECTION;
+        (* Returns the protection of the calling coroutine. *)
+ 
+ 
+      (*
+         TurnInterrupts - switches processor interrupts to the protection
+                          level, to.  It returns the old value.
+      *)
+ 
+      PROCEDURE TurnInterrupts (to: PROTECTION) : PROTECTION ;
+ 
+ 
+      (*
+         ListenLoop - should be called instead of users writing:
+ 
+                      LOOP
+                         LISTEN
+                      END
+ 
+                      It performs the same function but yields
+                      control back to the underlying operating system.
+                      It also checks for deadlock.
+                      Note that this function does return when an interrupt occurs.
+                      (File descriptor becomes ready or time event expires).
+      *)
+ 
+      PROCEDURE ListenLoop ;
+ 
+ 
+      END COROUTINES.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/ChanConsts,  Next: gm2-libs-iso/CharClass,  Prev: gm2-libs-iso/COROUTINES,  Up: M2 ISO Libraries
+ 
+ 4.4.2 gm2-libs-iso/ChanConsts
+ -----------------------------
+ 
+      DEFINITION MODULE ChanConsts;
+ 
+        (* Common types and values for channel open requests and results *)
+ 
+      TYPE
+        ChanFlags =        (* Request flags possibly given when a channel is opened *)
+        ( readFlag,        (* input operations are requested/available *)
+          writeFlag,       (* output operations are requested/available *)
+          oldFlag,         (* a file may/must/did exist before the channel is opened *)
+          textFlag,        (* text operations are requested/available *)
+          rawFlag,         (* raw operations are requested/available *)
+          interactiveFlag, (* interactive use is requested/applies *)
+          echoFlag         (* echoing by interactive device on removal of characters from input
+                              stream requested/applies *)
+        );
+ 
+        FlagSet = SET OF ChanFlags;
+ 
+        (* Singleton values of FlagSet, to allow for example, read + write *)
+ 
+      CONST
+        read = FlagSet{readFlag};   (* input operations are requested/available *)
+        write = FlagSet{writeFlag}; (* output operations are requested/available *)
+        old = FlagSet{oldFlag};     (* a file may/must/did exist before the channel is opened *)
+        text = FlagSet{textFlag};   (* text operations are requested/available *)
+        raw = FlagSet{rawFlag};     (* raw operations are requested/available *)
+        interactive = FlagSet{interactiveFlag}; (* interactive use is requested/applies *)
+        echo = FlagSet{echoFlag};   (* echoing by interactive device on removal of characters from
+                                       input stream requested/applies *)
+ 
+      TYPE
+        OpenResults =        (* Possible results of open requests *)
+          (opened,           (* the open succeeded as requested *)
+           wrongNameFormat,  (* given name is in the wrong format for the implementation *)
+           wrongFlags,       (* given flags include a value that does not apply to the device *)
+           tooManyOpen,      (* this device cannot support any more open channels *)
+           outOfChans,       (* no more channels can be allocated *)
+           wrongPermissions, (* file or directory permissions do not allow request *)
+           noRoomOnDevice,   (* storage limits on the device prevent the open *)
+           noSuchFile,       (* a needed file does not exist *)
+           fileExists,       (* a file of the given name already exists when a new one is required *)
+           wrongFileType,    (* the file is of the wrong type to support the required operations *)
+           noTextOperations, (* text operations have been requested, but are not supported *)
+           noRawOperations,  (* raw operations have been requested, but are not supported *)
+           noMixedOperations,(* text and raw operations have been requested, but they
+                                are not supported in combination *)
+           alreadyOpen,      (* the source/destination is already open for operations not supported
+                                in combination with the requested operations *)
+           otherProblem      (* open failed for some other reason *)
+          );
+ 
+      END ChanConsts.
+ 
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/CharClass,  Next: gm2-libs-iso/ClientSocket,  Prev: gm2-libs-iso/ChanConsts,  Up: M2 ISO Libraries
+ 
+ 4.4.3 gm2-libs-iso/CharClass
+ ----------------------------
+ 
+      DEFINITION MODULE CharClass;
+ 
+        (* Classification of values of the type CHAR *)
+ 
+      PROCEDURE IsNumeric (ch: CHAR): BOOLEAN;
+        (* Returns TRUE if and only if ch is classified as a numeric character *)
+ 
+      PROCEDURE IsLetter (ch: CHAR): BOOLEAN;
+        (* Returns TRUE if and only if ch is classified as a letter *)
+ 
+      PROCEDURE IsUpper (ch: CHAR): BOOLEAN;
+        (* Returns TRUE if and only if ch is classified as an upper case letter *)
+ 
+      PROCEDURE IsLower (ch: CHAR): BOOLEAN;
+        (* Returns TRUE if and only if ch is classified as a lower case letter *)
+ 
+      PROCEDURE IsControl (ch: CHAR): BOOLEAN;
+        (* Returns TRUE if and only if ch represents a control function *)
+ 
+      PROCEDURE IsWhiteSpace (ch: CHAR): BOOLEAN;
+        (* Returns TRUE if and only if ch represents a space character or a format effector *)
+ 
+      END CharClass.
+ 
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/ClientSocket,  Next: gm2-libs-iso/ComplexMath,  Prev: gm2-libs-iso/CharClass,  Up: M2 ISO Libraries
+ 
+ 4.4.4 gm2-libs-iso/ClientSocket
+ -------------------------------
+ 
+      DEFINITION MODULE ClientSocket ;
+ 
+      FROM IOChan IMPORT ChanId ;
+      FROM ChanConsts IMPORT FlagSet, OpenResults ;
+ 
+ 
+      (*
+         OpenSocket - opens a TCP client connection to host:port.
+      *)
+ 
+      PROCEDURE OpenSocket (VAR cid: ChanId;
+                            host: ARRAY OF CHAR; port: CARDINAL;
+                            f: FlagSet; VAR res: OpenResults) ;
+ 
+      (*
+         Close - if the channel identified by cid is not open to
+                 a socket stream, the exception wrongDevice is
+                 raised; otherwise closes the channel, and assigns
+                 the value identifying the invalid channel to cid.
+      *)
+ 
+      PROCEDURE Close (VAR cid: ChanId) ;
+ 
+ 
+      (*
+         IsSocket - tests if the channel identified by cid is open as
+                    a client socket stream.
+      *)
+ 
+      PROCEDURE IsSocket (cid: ChanId) : BOOLEAN ;
+ 
+ 
+      END ClientSocket.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/ComplexMath,  Next: gm2-libs-iso/ConvStringLong,  Prev: gm2-libs-iso/ClientSocket,  Up: M2 ISO Libraries
+ 
+ 4.4.5 gm2-libs-iso/ComplexMath
+ ------------------------------
+ 
+      DEFINITION MODULE ComplexMath;
+ 
+        (* Mathematical functions for the type COMPLEX *)
+ 
+      CONST
+        i =    CMPLX (0.0, 1.0);
+        one =  CMPLX (1.0, 0.0);
+        zero = CMPLX (0.0, 0.0);
+ 
+      PROCEDURE __BUILTIN__ abs (z: COMPLEX): REAL;
+        (* Returns the length of z *)
+ 
+      PROCEDURE __BUILTIN__ arg (z: COMPLEX): REAL;
+        (* Returns the angle that z subtends to the positive real axis *)
+ 
+      PROCEDURE __BUILTIN__ conj (z: COMPLEX): COMPLEX;
+        (* Returns the complex conjugate of z *)
+ 
+      PROCEDURE __BUILTIN__ power (base: COMPLEX; exponent: REAL): COMPLEX;
+        (* Returns the value of the number base raised to the power exponent *)
+ 
+      PROCEDURE __BUILTIN__ sqrt (z: COMPLEX): COMPLEX;
+        (* Returns the principal square root of z *)
+ 
+      PROCEDURE __BUILTIN__ exp (z: COMPLEX): COMPLEX;
+        (* Returns the complex exponential of z *)
+ 
+      PROCEDURE __BUILTIN__ ln (z: COMPLEX): COMPLEX;
+        (* Returns the principal value of the natural logarithm of z *)
+ 
+      PROCEDURE __BUILTIN__ sin (z: COMPLEX): COMPLEX;
+        (* Returns the sine of z *)
+ 
+      PROCEDURE __BUILTIN__ cos (z: COMPLEX): COMPLEX;
+        (* Returns the cosine of z *)
+ 
+      PROCEDURE __BUILTIN__ tan (z: COMPLEX): COMPLEX;
+        (* Returns the tangent of z *)
+ 
+      PROCEDURE __BUILTIN__ arcsin (z: COMPLEX): COMPLEX;
+        (* Returns the arcsine of z *)
+ 
+      PROCEDURE __BUILTIN__ arccos (z: COMPLEX): COMPLEX;
+        (* Returns the arccosine of z *)
+ 
+      PROCEDURE __BUILTIN__ arctan (z: COMPLEX): COMPLEX;
+        (* Returns the arctangent of z *)
+ 
+      PROCEDURE polarToComplex (abs, arg: REAL): COMPLEX;
+        (* Returns the complex number with the specified polar coordinates *)
+ 
+      PROCEDURE scalarMult (scalar: REAL; z: COMPLEX): COMPLEX;
+        (* Returns the scalar product of scalar with z *)
+ 
+      PROCEDURE IsCMathException (): BOOLEAN;
+        (* Returns TRUE if the current coroutine is in the exceptional
+           execution state because of the raising of an exception in a
+           routine from this module; otherwise returns FALSE.
+        *)
+ 
+      END ComplexMath.
+ 
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/ConvStringLong,  Next: gm2-libs-iso/ConvStringReal,  Prev: gm2-libs-iso/ComplexMath,  Up: M2 ISO Libraries
+ 
+ 4.4.6 gm2-libs-iso/ConvStringLong
+ ---------------------------------
+ 
+      DEFINITION MODULE ConvStringLong ;
+ 
+      FROM DynamicStrings IMPORT String ;
+ 
+ 
+      (*
+         RealToFloatString - converts a real with, sigFigs, into a string
+                             and returns the result as a string.
+      *)
+ 
+      PROCEDURE RealToFloatString (real: LONGREAL; sigFigs: CARDINAL) : String ;
+ 
+ 
+      (*
+         RealToEngString - converts the value of real to floating-point
+                           string form, with sigFigs significant figures.
+                           The number is scaled with one to three digits
+                           in the whole number part and with an exponent
+                           that is a multiple of three.
+      *)
+ 
+      PROCEDURE RealToEngString (real: LONGREAL; sigFigs: CARDINAL) : String ;
+ 
+ 
+      (*
+         RealToFixedString - returns the number of characters in the fixed-point
+                             string representation of real rounded to the given
+                             place relative to the decimal point.
+      *)
+ 
+      PROCEDURE RealToFixedString (real: LONGREAL; place: INTEGER) : String ;
+ 
+ 
+      END ConvStringLong.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/ConvStringReal,  Next: gm2-libs-iso/ConvTypes,  Prev: gm2-libs-iso/ConvStringLong,  Up: M2 ISO Libraries
+ 
+ 4.4.7 gm2-libs-iso/ConvStringReal
+ ---------------------------------
+ 
+      DEFINITION MODULE ConvStringReal ;
+ 
+      FROM DynamicStrings IMPORT String ;
+ 
+ 
+      (*
+         RealToFloatString - converts a real with, sigFigs, into a string
+                             and returns the result as a string.
+      *)
+ 
+      PROCEDURE RealToFloatString (real: REAL; sigFigs: CARDINAL) : String ;
+ 
+ 
+      (*
+         RealToEngString - converts the value of real to floating-point
+                           string form, with sigFigs significant figures.
+                           The number is scaled with one to three digits
+                           in the whole number part and with an exponent
+                           that is a multiple of three.
+      *)
+ 
+      PROCEDURE RealToEngString (real: REAL; sigFigs: CARDINAL) : String ;
+ 
+ 
+      (*
+         RealToFixedString - returns the number of characters in the fixed-point
+                             string representation of real rounded to the given
+                             place relative to the decimal point.
+      *)
+ 
+      PROCEDURE RealToFixedString (real: REAL; place: INTEGER) : String ;
+ 
+ 
+      END ConvStringReal.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/ConvTypes,  Next: gm2-libs-iso/EXCEPTIONS,  Prev: gm2-libs-iso/ConvStringReal,  Up: M2 ISO Libraries
+ 
+ 4.4.8 gm2-libs-iso/ConvTypes
+ ----------------------------
+ 
+      DEFINITION MODULE ConvTypes;
+ 
+        (* Common types used in the string conversion modules *)
+ 
+      TYPE
+        ConvResults =     (* Values of this type are used to express the format of a string *)
+        (
+          strAllRight,    (* the string format is correct for the corresponding conversion *)
+          strOutOfRange,  (* the string is well-formed but the value cannot be represented *)
+          strWrongFormat, (* the string is in the wrong format for the conversion *)
+          strEmpty        (* the given string is empty *)
+        );
+ 
+        ScanClass =  (* Values of this type are used to classify input to finite state scanners *)
+        (
+          padding,   (* a leading or padding character at this point in the scan - ignore it *)
+          valid,     (* a valid character at this point in the scan - accept it *)
+          invalid,   (* an invalid character at this point in the scan - reject it *)
+          terminator (* a terminating character at this point in the scan (not part of token) *)
+        );
+ 
+        ScanState =  (* The type of lexical scanning control procedures *)
+          PROCEDURE (CHAR, VAR ScanClass, VAR ScanState);
+ 
+      END ConvTypes.
+ 
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/EXCEPTIONS,  Next: gm2-libs-iso/ErrnoCategory,  Prev: gm2-libs-iso/ConvTypes,  Up: M2 ISO Libraries
+ 
+ 4.4.9 gm2-libs-iso/EXCEPTIONS
+ -----------------------------
+ 
+      DEFINITION MODULE EXCEPTIONS;
+ 
+      (* Provides facilities for raising user exceptions
+         and for making enquiries concerning the current execution state.
+      *)
+ 
+      TYPE
+        ExceptionSource;   (* values of this type are used within library
+                              modules to identify the source of raised
+                              exceptions *)
+        ExceptionNumber = CARDINAL;
+ 
+      PROCEDURE AllocateSource(VAR newSource: ExceptionSource);
+        (* Allocates a unique value of type ExceptionSource *)
+ 
+      PROCEDURE RAISE (source: ExceptionSource;
+                       number: ExceptionNumber; message: ARRAY OF CHAR)
+                       <* noreturn *> ;
+        (* Associates the given values of source, number and message with
+           the current context and raises an exception.
+        *)
+ 
+      PROCEDURE CurrentNumber (source: ExceptionSource): ExceptionNumber;
+        (* If the current coroutine is in the exceptional execution state
+           because of the raising of an exception from source, returns
+           the corresponding number, and otherwise raises an exception.
+        *)
+ 
+      PROCEDURE GetMessage (VAR text: ARRAY OF CHAR);
+        (* If the current coroutine is in the exceptional execution state,
+           returns the possibly truncated string associated with the
+           current context.  Otherwise, in normal execution state,
+           returns the empty string.
+        *)
+ 
+      PROCEDURE IsCurrentSource (source: ExceptionSource): BOOLEAN;
+        (* If the current coroutine is in the exceptional execution state
+           because of the raising of an exception from source, returns
+           TRUE, and otherwise returns FALSE.
+        *)
+ 
+      PROCEDURE IsExceptionalExecution (): BOOLEAN;
+        (* If the current coroutine is in the exceptional execution state
+           because of the raising of an exception, returns TRUE, and
+           otherwise returns FALSE.
+        *)
+ 
+      END EXCEPTIONS.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/ErrnoCategory,  Next: gm2-libs-iso/GeneralUserExceptions,  Prev: gm2-libs-iso/EXCEPTIONS,  Up: M2 ISO Libraries
+ 
+ 4.4.10 gm2-libs-iso/ErrnoCategory
+ ---------------------------------
+ 
+      DEFINITION MODULE ErrnoCategory ;
+ 
+      (*
+         provides an interface to errno (if the system
+         supports it) which determines whether the current
+         errno is a hard or soft error.  These distinctions
+         are needed by the ISO Modula-2 libraries.  Not all
+         errno values are tested, only those which could be
+         related to a device.
+      *)
+ 
+      IMPORT ChanConsts ;
+ 
+ 
+      (*
+         IsErrnoHard - returns TRUE if the value of errno is associated with
+                       a hard device error.
+      *)
+ 
+      PROCEDURE IsErrnoHard (e: INTEGER) : BOOLEAN ;
+ 
+ 
+      (*
+         IsErrnoSoft - returns TRUE if the value of errno is associated with
+                       a soft device error.
+      *)
+ 
+      PROCEDURE IsErrnoSoft (e: INTEGER) : BOOLEAN ;
+ 
+ 
+      (*
+         UnAvailable - returns TRUE if the value of errno indicates that
+                       the resource or device is unavailable for some
+                       reason.
+      *)
+ 
+      PROCEDURE UnAvailable (e: INTEGER) : BOOLEAN ;
+ 
+ 
+      (*
+         GetOpenResults - maps errno onto the ISO Modula-2 enumerated
+                          type, OpenResults.
+      *)
+ 
+      PROCEDURE GetOpenResults (e: INTEGER) : ChanConsts.OpenResults ;
+ 
+ 
+      END ErrnoCategory.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/GeneralUserExceptions,  Next: gm2-libs-iso/IOChan,  Prev: gm2-libs-iso/ErrnoCategory,  Up: M2 ISO Libraries
+ 
+ 4.4.11 gm2-libs-iso/GeneralUserExceptions
+ -----------------------------------------
+ 
+      DEFINITION MODULE GeneralUserExceptions;
+ 
+      (* Provides facilities for general user-defined exceptions *)
+ 
+      TYPE
+        GeneralExceptions = (problem, disaster);
+ 
+      PROCEDURE RaiseGeneralException (exception: GeneralExceptions;
+                                       text: ARRAY OF CHAR);
+        (* Raises exception using text as the associated message *)
+ 
+      PROCEDURE IsGeneralException (): BOOLEAN;
+        (* Returns TRUE if the current coroutine is in the exceptional
+           execution state because of the raising of an exception from
+           GeneralExceptions; otherwise returns FALSE.
+        *)
+ 
+      PROCEDURE GeneralException(): GeneralExceptions;
+        (* If the current coroutine is in the exceptional execution
+           state because of the raising of an exception from
+           GeneralExceptions, returns the corresponding enumeration value,
+           and otherwise raises an exception.
+        *)
+ 
+      END GeneralUserExceptions.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/IOChan,  Next: gm2-libs-iso/IOConsts,  Prev: gm2-libs-iso/GeneralUserExceptions,  Up: M2 ISO Libraries
+ 
+ 4.4.12 gm2-libs-iso/IOChan
+ --------------------------
+ 
+      DEFINITION MODULE IOChan;
+ 
+        (* Types and procedures forming the interface to channels for
+           device-independent data transfer modules
+        *)
+ 
+      IMPORT IOConsts, ChanConsts, SYSTEM;
+ 
+      TYPE
+        ChanId; (* Values of this type are used to identify channels *)
+ 
+        (* There is one pre-defined value identifying an invalid channel
+           on which no data transfer operations are available.  It may
+           be used to initialize variables of type ChanId.
+        *)
+ 
+      PROCEDURE InvalidChan (): ChanId;
+        (* Returns the value identifying the invalid channel. *)
+ 
+        (* For each of the following operations, if the device supports
+           the operation on the channel, the behaviour of the procedure
+           conforms with the description below.  The full behaviour is
+           defined for each device module.  If the device does not
+           support the operation on the channel, the behaviour of the
+           procedure is to raise the exception notAvailable.
+        *)
+ 
+        (* Text operations - these perform any required translation between the
+           internal and external representation of text.
+        *)
+ 
+      PROCEDURE Look (cid: ChanId; VAR ch: CHAR; VAR res: IOConsts.ReadResults);
+        (* If there is a character as the next item in the input stream
+           cid, assigns its value to ch without removing it from the stream;
+           otherwise the value of ch is not defined.  res (and the stored
+           read result) are set to the value allRight, endOfLine, or endOfInput.
+        *)
+ 
+      PROCEDURE Skip (cid: ChanId);
+        (* If the input stream cid has ended, the exception skipAtEnd
+           is raised; otherwise the next character or line mark in cid is
+           removed, and the stored read result is set to the value
+           allRight.
+        *)
+ 
+      PROCEDURE SkipLook (cid: ChanId; VAR ch: CHAR; VAR res: IOConsts.ReadResults);
+        (* If the input stream cid has ended, the exception skipAtEnd is
+           raised; otherwise the next character or line mark in cid is
+           removed.  If there is a character as the next item in cid
+           stream, assigns its value to ch without removing it from the
+           stream.  Otherwise, the value of ch is not defined.  res
+           (and the stored read result) are set to the value allRight,
+           endOfLine, or endOfInput.
+        *)
+ 
+      PROCEDURE WriteLn (cid: ChanId);
+        (* Writes a line mark over the channel cid. *)
+ 
+      PROCEDURE TextRead (cid: ChanId; to: SYSTEM.ADDRESS; maxChars: CARDINAL;
+                          VAR charsRead: CARDINAL);
+        (* Reads at most maxChars characters from the current line in cid,
+           and assigns corresponding values to successive components of
+           an ARRAY OF CHAR variable for which the address of the first
+           component is to. The number of characters read is assigned to charsRead.
+           The stored read result is set to allRight, endOfLine, or endOfInput.
+        *)
+ 
+      PROCEDURE TextWrite (cid: ChanId; from: SYSTEM.ADDRESS;
+                           charsToWrite: CARDINAL);
+        (* Writes a number of characters given by the value of charsToWrite,
+           from successive components of an ARRAY OF CHAR variable for which
+           the address of the first component is from, to the channel cid.
+        *)
+ 
+        (* Direct raw operations  - these do not effect translation between
+           the internal and external representation of data
+        *)
+ 
+      PROCEDURE RawRead (cid: ChanId; to: SYSTEM.ADDRESS; maxLocs: CARDINAL;
+                         VAR locsRead: CARDINAL);
+        (* Reads at most maxLocs items from cid, and assigns corresponding
+           values to successive components of an ARRAY OF LOC variable for
+           which the address of the first component is to. The number of
+           characters read is assigned to charsRead. The stored read result
+           is set to the value allRight, or endOfInput.
+        *)
+ 
+      PROCEDURE RawWrite (cid: ChanId; from: SYSTEM.ADDRESS; locsToWrite: CARDINAL);
+        (* Writes a number of items given by the value of charsToWrite,
+           from successive components of an ARRAY OF LOC variable for
+           which the address of the first component is from, to the channel cid.
+        *)
+ 
+        (* Common operations *)
+ 
+      PROCEDURE GetName (cid: ChanId; VAR s: ARRAY OF CHAR);
+        (* Copies to s a name associated with the channel cid, possibly truncated
+           (depending on the capacity of s).
+        *)
+ 
+      PROCEDURE Reset (cid: ChanId);
+        (* Resets the channel cid to a state defined by the device module. *)
+ 
+      PROCEDURE Flush (cid: ChanId);
+        (* Flushes any data buffered by the device module out to the channel cid. *)
+ 
+        (* Access to read results *)
+ 
+      PROCEDURE SetReadResult (cid: ChanId; res: IOConsts.ReadResults);
+        (* Sets the read result value for the channel cid to the value res. *)
+ 
+      PROCEDURE ReadResult (cid: ChanId): IOConsts.ReadResults;
+        (* Returns the stored read result value for the channel cid.
+           (This is initially the value notKnown).
+        *)
+ 
+        (* Users can discover which flags actually apply to a channel *)
+ 
+      PROCEDURE CurrentFlags (cid: ChanId): ChanConsts.FlagSet;
+        (* Returns the set of flags that currently apply to the channel cid. *)
+ 
+        (* The following exceptions are defined for this module and its clients *)
+ 
+      TYPE
+        ChanExceptions =
+          (wrongDevice,      (* device specific operation on wrong device *)
+           notAvailable,     (* operation attempted that is not available on that
+                                channel *)
+           skipAtEnd,        (* attempt to skip data from a stream that has ended *)
+           softDeviceError,  (* device specific recoverable error *)
+           hardDeviceError,  (* device specific non-recoverable error *)
+           textParseError,   (* input data does not correspond to a character or
+                                line mark - optional detection *)
+           notAChannel       (* given value does not identify a channel -
+                                optional detection *)
+          );
+ 
+      PROCEDURE IsChanException (): BOOLEAN;
+        (* Returns TRUE if the current coroutine is in the exceptional
+           execution state because of the raising of an exception from
+           ChanExceptions; otherwise returns FALSE.
+        *)
+ 
+      PROCEDURE ChanException (): ChanExceptions;
+        (* If the current coroutine is in the exceptional execution state
+           because of the raising of an exception from ChanExceptions,
+           returns the corresponding enumeration value, and otherwise
+           raises an exception.
+        *)
+ 
+        (* When a device procedure detects a device error, it raises the
+           exception softDeviceError or hardDeviceError.  If these
+           exceptions are handled, the following facilities may be
+           used to discover an implementation-defined error number for
+           the channel.
+        *)
+ 
+      TYPE
+        DeviceErrNum = INTEGER;
+ 
+      PROCEDURE DeviceError (cid: ChanId): DeviceErrNum;
+        (* If a device error exception has been raised for the channel cid,
+           returns the error number stored by the device module.
+        *)
+ 
+      END IOChan.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/IOConsts,  Next: gm2-libs-iso/IOLink,  Prev: gm2-libs-iso/IOChan,  Up: M2 ISO Libraries
+ 
+ 4.4.13 gm2-libs-iso/IOConsts
+ ----------------------------
+ 
+      DEFINITION MODULE IOConsts;
+ 
+        (* Types and constants for input/output modules *)
+ 
+      TYPE
+        ReadResults =  (* This type is used to classify the result of an input operation *)
+        (
+          notKnown,    (* no read result is set *)
+          allRight,    (* data is as expected or as required *)
+          outOfRange,  (* data cannot be represented *)
+          wrongFormat, (* data not in expected format *)
+          endOfLine,   (* end of line seen before expected data *)
+          endOfInput   (* end of input seen before expected data *)
+        );
+ 
+      END IOConsts.
+ 
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/IOLink,  Next: gm2-libs-iso/IOResult,  Prev: gm2-libs-iso/IOConsts,  Up: M2 ISO Libraries
+ 
+ 4.4.14 gm2-libs-iso/IOLink
+ --------------------------
+ 
+      DEFINITION MODULE IOLink;
+ 
+      (* Types and procedures for the standard implementation of channels *)
+ 
+      IMPORT IOChan, IOConsts, ChanConsts, SYSTEM;
+ 
+      TYPE
+        DeviceId;
+          (* Values of this type are used to identify new device modules,
+             and are normally obtained by them during their initialization.
+          *)
+ 
+      PROCEDURE AllocateDeviceId (VAR did: DeviceId);
+        (* Allocates a unique value of type DeviceId, and assigns this
+           value to did. *)
+ 
+      PROCEDURE MakeChan (did: DeviceId; VAR cid: IOChan.ChanId);
+        (* Attempts to make a new channel for the device module identified
+           by did. If no more channels can be made, the identity of
+           the invalid channel is assigned to cid.  Otherwise, the identity
+           of a new channel is assigned to cid.
+        *)
+ 
+      PROCEDURE UnMakeChan (did: DeviceId; VAR cid: IOChan.ChanId);
+        (* If the device module identified by did is not the module that
+           made the channel identified by cid, the exception wrongDevice is
+           raised; otherwise the channel is deallocated, and the value
+           identifying the invalid channel is assigned to cid.
+        *)
+ 
+      TYPE
+        DeviceTablePtr = POINTER TO DeviceTable;
+          (* Values of this type are used to refer to device tables *)
+ 
+      TYPE
+        LookProc      = PROCEDURE (DeviceTablePtr, VAR CHAR, VAR IOConsts.ReadResults) ;
+        SkipProc      = PROCEDURE (DeviceTablePtr) ;
+        SkipLookProc  = PROCEDURE (DeviceTablePtr, VAR CHAR, VAR IOConsts.ReadResults) ;
+        WriteLnProc   = PROCEDURE (DeviceTablePtr) ;
+        TextReadProc  = PROCEDURE (DeviceTablePtr, SYSTEM.ADDRESS, CARDINAL, VAR CARDINAL) ;
+        TextWriteProc = PROCEDURE (DeviceTablePtr, SYSTEM.ADDRESS, CARDINAL) ;
+        RawReadProc   = PROCEDURE (DeviceTablePtr, SYSTEM.ADDRESS, CARDINAL, VAR CARDINAL) ;
+        RawWriteProc  = PROCEDURE (DeviceTablePtr, SYSTEM.ADDRESS, CARDINAL) ;
+        GetNameProc   = PROCEDURE (DeviceTablePtr, VAR ARRAY OF CHAR) ;
+        ResetProc     = PROCEDURE (DeviceTablePtr) ;
+        FlushProc     = PROCEDURE (DeviceTablePtr) ;
+        FreeProc      = PROCEDURE (DeviceTablePtr) ;
+           (* Carry out the operations involved in closing the corresponding
+              channel, including flushing buffers, but do not unmake the
+              channel.
+           *)
+ 
+ 
+      TYPE
+        DeviceData = SYSTEM.ADDRESS;
+ 
+        DeviceTable =
+          RECORD                         (* Initialized by MakeChan to: *)
+            cd: DeviceData;              (* the value NIL *)
+            did: DeviceId;               (* the value given in the call of MakeChan *)
+            cid: IOChan.ChanId;          (* the identity of the channel *)
+            result: IOConsts.ReadResults;(* the value notKnown *)
+            errNum: IOChan.DeviceErrNum; (* undefined *)
+            flags: ChanConsts.FlagSet;   (* ChanConsts.FlagSet{} *)
+            doLook: LookProc;            (* raise exception notAvailable *)
+            doSkip: SkipProc;            (* raise exception notAvailable *)
+            doSkipLook: SkipLookProc;    (* raise exception notAvailable *)
+            doLnWrite: WriteLnProc;      (* raise exception notAvailable *)
+            doTextRead: TextReadProc;    (* raise exception notAvailable *)
+            doTextWrite: TextWriteProc;  (* raise exception notAvailable *)
+            doRawRead: RawReadProc;      (* raise exception notAvailable *)
+            doRawWrite: RawWriteProc;    (* raise exception notAvailable *)
+            doGetName: GetNameProc;      (* return the empty string *)
+            doReset: ResetProc;          (* do nothing *)
+            doFlush: FlushProc;          (* do nothing *)
+            doFree: FreeProc;            (* do nothing *)
+          END;
+ 
+ 
+        (* The pointer to the device table for a channel is obtained using the
+           following procedure: *)
+ 
+      (*
+         If the device module identified by did is not the module that made
+         the channel identified by cid, the exception wrongDevice is raised.
+      *)
+ 
+      PROCEDURE DeviceTablePtrValue (cid: IOChan.ChanId; did: DeviceId): DeviceTablePtr;
+ 
+ 
+      (*
+         Tests if the device module identified by did is the module
+         that made the channel identified by cid.
+      *)
+ 
+      PROCEDURE IsDevice (cid: IOChan.ChanId; did: DeviceId) : BOOLEAN;
+ 
+ 
+      TYPE
+        DevExceptionRange = IOChan.ChanExceptions;
+ 
+      (*
+        ISO standard states defines
+ 
+        DevExceptionRange = [IOChan.notAvailable ..  IOChan.textParseError];
+ 
+        however this must be a bug as other modules need to raise
+        IOChan.wrongDevice exceptions.
+      *)
+ 
+      PROCEDURE RAISEdevException (cid: IOChan.ChanId; did: DeviceId;
+                                   x: DevExceptionRange; s: ARRAY OF CHAR) <* noreturn *> ;
+ 
+        (* If the device module identified by did is not the module that made the channel
+           identified by cid, the exception wrongDevice is raised; otherwise the given exception
+           is raised, and the string value in s is included in the exception message.
+        *)
+ 
+      PROCEDURE IsIOException () : BOOLEAN;
+        (* Returns TRUE if the current coroutine is in the exceptional execution state
+           because of the raising af an exception from ChanExceptions;
+           otherwise FALSE.
+        *)
+ 
+      PROCEDURE IOException () : IOChan.ChanExceptions;
+        (* If the current coroutine is in the exceptional execution state because of the
+           raising af an exception from ChanExceptions, returns the corresponding
+           enumeration value, and otherwise raises an exception.
+        *)
+ 
+      END IOLink.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/IOResult,  Next: gm2-libs-iso/LongComplexMath,  Prev: gm2-libs-iso/IOLink,  Up: M2 ISO Libraries
+ 
+ 4.4.15 gm2-libs-iso/IOResult
+ ----------------------------
+ 
+      DEFINITION MODULE IOResult;
+ 
+        (* Read results for specified channels *)
+ 
+      IMPORT IOConsts, IOChan;
+ 
+      TYPE
+        ReadResults = IOConsts.ReadResults;
+ 
+        (*
+          ReadResults =  (* This type is used to classify the result of an input operation *)
+          (
+            notKnown,    (* no read result is set *)
+            allRight,    (* data is as expected or as required *)
+            outOfRange,  (* data cannot be represented *)
+            wrongFormat, (* data not in expected format *)
+            endOfLine,   (* end of line seen before expected data *)
+            endOfInput   (* end of input seen before expected data *)
+          );
+        *)
+ 
+      PROCEDURE ReadResult (cid: IOChan.ChanId): ReadResults;
+        (* Returns the result for the last read operation on the channel cid. *)
+ 
+      END IOResult.
+ 
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/LongComplexMath,  Next: gm2-libs-iso/LongConv,  Prev: gm2-libs-iso/IOResult,  Up: M2 ISO Libraries
+ 
+ 4.4.16 gm2-libs-iso/LongComplexMath
+ -----------------------------------
+ 
+      DEFINITION MODULE LongComplexMath;
+ 
+        (* Mathematical functions for the type LONGCOMPLEX *)
+ 
+      CONST
+        i =    CMPLX (0.0, 1.0);
+        one =  CMPLX (1.0, 0.0);
+        zero = CMPLX (0.0, 0.0);
+ 
+      PROCEDURE abs (z: LONGCOMPLEX): LONGREAL;
+        (* Returns the length of z *)
+ 
+      PROCEDURE arg (z: LONGCOMPLEX): LONGREAL;
+        (* Returns the angle that z subtends to the positive real axis *)
+ 
+      PROCEDURE conj (z: LONGCOMPLEX): LONGCOMPLEX;
+        (* Returns the complex conjugate of z *)
+ 
+      PROCEDURE power (base: LONGCOMPLEX; exponent: LONGREAL): LONGCOMPLEX;
+        (* Returns the value of the number base raised to the power exponent *)
+ 
+      PROCEDURE sqrt (z: LONGCOMPLEX): LONGCOMPLEX;
+        (* Returns the principal square root of z *)
+ 
+      PROCEDURE exp (z: LONGCOMPLEX): LONGCOMPLEX;
+        (* Returns the complex exponential of z *)
+ 
+      PROCEDURE ln (z: LONGCOMPLEX): LONGCOMPLEX;
+        (* Returns the principal value of the natural logarithm of z *)
+ 
+      PROCEDURE sin (z: LONGCOMPLEX): LONGCOMPLEX;
+        (* Returns the sine of z *)
+ 
+      PROCEDURE cos (z: LONGCOMPLEX): LONGCOMPLEX;
+        (* Returns the cosine of z *)
+ 
+      PROCEDURE tan (z: LONGCOMPLEX): LONGCOMPLEX;
+        (* Returns the tangent of z *)
+ 
+      PROCEDURE arcsin (z: LONGCOMPLEX): LONGCOMPLEX;
+        (* Returns the arcsine of z *)
+ 
+      PROCEDURE arccos (z: LONGCOMPLEX): LONGCOMPLEX;
+        (* Returns the arccosine of z *)
+ 
+      PROCEDURE arctan (z: LONGCOMPLEX): LONGCOMPLEX;
+        (* Returns the arctangent of z *)
+ 
+      PROCEDURE polarToComplex (abs, arg: LONGREAL): LONGCOMPLEX;
+        (* Returns the complex number with the specified polar coordinates *)
+ 
+      PROCEDURE scalarMult (scalar: LONGREAL; z: LONGCOMPLEX): LONGCOMPLEX;
+        (* Returns the scalar product of scalar with z *)
+ 
+      PROCEDURE IsCMathException (): BOOLEAN;
+        (* Returns TRUE if the current coroutine is in the exceptional execution state
+           because of the raising of an exception in a routine from this module; otherwise
+           returns FALSE.
+        *)
+ 
+      END LongComplexMath.
+ 
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/LongConv,  Next: gm2-libs-iso/LongIO,  Prev: gm2-libs-iso/LongComplexMath,  Up: M2 ISO Libraries
+ 
+ 4.4.17 gm2-libs-iso/LongConv
+ ----------------------------
+ 
+      DEFINITION MODULE LongConv;
+ 
+        (* Low-level LONGREAL/string conversions *)
+ 
+      IMPORT
+        ConvTypes;
+ 
+      TYPE
+        ConvResults = ConvTypes.ConvResults; (* strAllRight, strOutOfRange,
+                                                strWrongFormat, strEmpty *)
+ 
+      PROCEDURE ScanReal (inputCh: CHAR; VAR chClass: ConvTypes.ScanClass;
+                          VAR nextState: ConvTypes.ScanState);
+        (* Represents the start state of a finite state scanner for real
+           numbers - assigns class of inputCh to chClass and a procedure
+           representing the next state to nextState.
+        *)
+ 
+      PROCEDURE FormatReal (str: ARRAY OF CHAR): ConvResults;
+        (* Returns the format of the string value for conversion to LONGREAL. *)
+ 
+      PROCEDURE ValueReal (str: ARRAY OF CHAR): LONGREAL;
+        (* Returns the value corresponding to the real number string value
+           str if str is well-formed; otherwise raises the LongConv exception.
+        *)
+ 
+      PROCEDURE LengthFloatReal (real: LONGREAL; sigFigs: CARDINAL): CARDINAL;
+        (* Returns the number of characters in the floating-point string
+           representation of real with sigFigs significant figures.
+        *)
+ 
+      PROCEDURE LengthEngReal (real: LONGREAL; sigFigs: CARDINAL): CARDINAL;
+        (* Returns the number of characters in the floating-point engineering
+           string representation of real with sigFigs significant figures.
+        *)
+ 
+      PROCEDURE LengthFixedReal (real: LONGREAL; place: INTEGER): CARDINAL;
+        (* Returns the number of characters in the fixed-point string
+           representation of real rounded to the given place relative to the
+           decimal point.
+        *)
+ 
+      PROCEDURE IsRConvException (): BOOLEAN;
+        (* Returns TRUE if the current coroutine is in the exceptional
+           execution state because of the raising of an exception in a
+           routine from this module; otherwise returns FALSE.
+        *)
+ 
+      END LongConv.
+ 
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/LongIO,  Next: gm2-libs-iso/LongMath,  Prev: gm2-libs-iso/LongConv,  Up: M2 ISO Libraries
+ 
+ 4.4.18 gm2-libs-iso/LongIO
+ --------------------------
+ 
+      DEFINITION MODULE LongIO;
+ 
+        (* Input and output of long real numbers in decimal text form
+           over specified channels.  The read result is of the type
+           IOConsts.ReadResults.
+        *)
+ 
+      IMPORT IOChan;
+ 
+        (* The text form of a signed fixed-point real number is
+             ["+" | "-"], decimal digit, {decimal digit}, [".",
+             {decimal digit}]
+ 
+           The text form of a signed floating-point real number is
+             signed fixed-point real number,
+             "E", ["+" | "-"], decimal digit, {decimal digit}
+        *)
+ 
+      PROCEDURE ReadReal (cid: IOChan.ChanId; VAR real: LONGREAL);
+        (* Skips leading spaces, and removes any remaining characters
+           from cid that form part of a signed fixed or floating
+           point number.  The value of this number is assigned to real.
+           The read result is set to the value allRight, outOfRange,
+           wrongFormat, endOfLine, or endOfInput.
+        *)
+ 
+      PROCEDURE WriteFloat (cid: IOChan.ChanId; real: LONGREAL;
+                            sigFigs: CARDINAL; width: CARDINAL);
+        (* Writes the value of real to cid in floating-point text form,
+           with sigFigs significant figures, in a field of the given
+           minimum width.
+        *)
+ 
+      PROCEDURE WriteEng (cid: IOChan.ChanId; real: LONGREAL;
+                          sigFigs: CARDINAL; width: CARDINAL);
+        (* As for WriteFloat, except that the number is scaled with
+           one to three digits in the whole number part, and with an
+           exponent that is a multiple of three.
+        *)
+ 
+      PROCEDURE WriteFixed (cid: IOChan.ChanId; real: LONGREAL;
+                            place: INTEGER; width: CARDINAL);
+        (* Writes the value of real to cid in fixed-point text form,
+           rounded to the given place relative to the decimal point,
+           in a field of the given minimum width.
+        *)
+ 
+      PROCEDURE WriteReal (cid: IOChan.ChanId; real: LONGREAL;
+                           width: CARDINAL);
+        (* Writes the value of real to cid, as WriteFixed if the
+           sign and magnitude can be shown in the given width, or
+           otherwise as WriteFloat.  The number of places or
+           significant digits depends on the given width.
+        *)
+ 
+      END LongIO.
+ 
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/LongMath,  Next: gm2-libs-iso/LongStr,  Prev: gm2-libs-iso/LongIO,  Up: M2 ISO Libraries
+ 
+ 4.4.19 gm2-libs-iso/LongMath
+ ----------------------------
+ 
+      DEFINITION MODULE LongMath;
+ 
+        (* Mathematical functions for the type LONGREAL *)
+ 
+      CONST
+        pi   = 3.1415926535897932384626433832795028841972;
+        exp1 = 2.7182818284590452353602874713526624977572;
+ 
+      PROCEDURE __BUILTIN__ sqrt (x: LONGREAL): LONGREAL;
+        (* Returns the positive square root of x *)
+ 
+      PROCEDURE __BUILTIN__ exp (x: LONGREAL): LONGREAL;
+        (* Returns the exponential of x *)
+ 
+      PROCEDURE __BUILTIN__ ln (x: LONGREAL): LONGREAL;
+        (* Returns the natural logarithm of x *)
+ 
+        (* The angle in all trigonometric functions is measured in radians *)
+ 
+      PROCEDURE __BUILTIN__ sin (x: LONGREAL): LONGREAL;
+        (* Returns the sine of x *)
+ 
+      PROCEDURE __BUILTIN__ cos (x: LONGREAL): LONGREAL;
+        (* Returns the cosine of x *)
+ 
+      PROCEDURE tan (x: LONGREAL): LONGREAL;
+        (* Returns the tangent of x *)
+ 
+      PROCEDURE arcsin (x: LONGREAL): LONGREAL;
+        (* Returns the arcsine of x *)
+ 
+      PROCEDURE arccos (x: LONGREAL): LONGREAL;
+        (* Returns the arccosine of x *)
+ 
+      PROCEDURE arctan (x: LONGREAL): LONGREAL;
+        (* Returns the arctangent of x *)
+ 
+      PROCEDURE power (base, exponent: LONGREAL): LONGREAL;
+        (* Returns the value of the number base raised to the power exponent *)
+ 
+      PROCEDURE round (x: LONGREAL): INTEGER;
+        (* Returns the value of x rounded to the nearest integer *)
+ 
+      PROCEDURE IsRMathException (): BOOLEAN;
+        (* Returns TRUE if the current coroutine is in the exceptional
+           execution state because of the raising of an exception in a
+           routine from this module; otherwise returns FALSE.
+        *)
+ 
+      END LongMath.
+ 
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/LongStr,  Next: gm2-libs-iso/LongWholeIO,  Prev: gm2-libs-iso/LongMath,  Up: M2 ISO Libraries
+ 
+ 4.4.20 gm2-libs-iso/LongStr
+ ---------------------------
+ 
+      DEFINITION MODULE LongStr;
+ 
+        (* LONGREAL/string conversions *)
+ 
+      IMPORT
+         ConvTypes;
+ 
+      TYPE
+         (* strAllRight, strOutOfRange, strWrongFormat, strEmpty *)
+         ConvResults = ConvTypes.ConvResults;
+ 
+      (* the string form of a signed fixed-point real number is
+           ["+" | "-"], decimal digit, {decimal digit}, [".",
+           {decimal digit}]
+      *)
+ 
+      (* the string form of a signed floating-point real number is
+           signed fixed-point real number, "E", ["+" | "-"],
+           decimal digit, {decimal digit}
+      *)
+ 
+      PROCEDURE StrToReal (str: ARRAY OF CHAR; VAR real: LONGREAL;
+                           VAR res: ConvResults);
+        (* Ignores any leading spaces in str. If the subsequent characters
+           in str are in the format of a signed real number, assigns a
+           corresponding value to real.  Assigns a value indicating the
+           format of str to res.
+        *)
+ 
+      PROCEDURE RealToFloat (real: LONGREAL; sigFigs: CARDINAL;
+                             VAR str: ARRAY OF CHAR);
+        (* Converts the value of real to floating-point string form, with
+           sigFigs significant figures, and copies the possibly truncated
+           result to str.
+        *)
+ 
+      PROCEDURE RealToEng (real: LONGREAL; sigFigs: CARDINAL;
+                           VAR str: ARRAY OF CHAR);
+        (* Converts the value of real to floating-point string form, with
+           sigFigs significant figures, and copies the possibly truncated
+           result to str. The number is scaled with one to three digits
+           in the whole number part and with an exponent that is a
+           multiple of three.
+        *)
+ 
+      PROCEDURE RealToFixed (real: LONGREAL; place: INTEGER;
+                             VAR str: ARRAY OF CHAR);
+        (* Converts the value of real to fixed-point string form, rounded
+           to the given place relative to the decimal point, and copies
+           the possibly truncated result to str.
+        *)
+ 
+      PROCEDURE RealToStr (real: LONGREAL; VAR str: ARRAY OF CHAR);
+        (* Converts the value of real as RealToFixed if the sign and
+           magnitude can be shown within the capacity of str, or
+           otherwise as RealToFloat, and copies the possibly truncated
+           result to str. The number of places or significant digits
+           depend on the capacity of str.
+        *)
+ 
+      END LongStr.
+ 
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/LongWholeIO,  Next: gm2-libs-iso/LowLong,  Prev: gm2-libs-iso/LongStr,  Up: M2 ISO Libraries
+ 
+ 4.4.21 gm2-libs-iso/LongWholeIO
+ -------------------------------
+ 
+      DEFINITION MODULE LongWholeIO;
+ 
+        (* Input and output of whole numbers in decimal text form
+           over specified channels.  The read result is of the
+           type IOConsts.ReadResults.
+        *)
+ 
+      IMPORT IOChan;
+ 
+        (* The text form of a signed whole number is
+             ["+" | "-"], decimal digit, {decimal digit}
+ 
+           The text form of an unsigned whole number is
+             decimal digit, {decimal digit}
+        *)
+ 
+      PROCEDURE ReadInt (cid: IOChan.ChanId; VAR int: LONGINT);
+        (* Skips leading spaces, and removes any remaining characters
+           from cid that form part of a signed whole number.  The
+           value of this number is assigned to int.  The read result
+           is set to the value allRight, outOfRange, wrongFormat,
+           endOfLine, or endOfInput.
+        *)
+ 
+      PROCEDURE WriteInt (cid: IOChan.ChanId; int: LONGINT;
+                          width: CARDINAL);
+        (* Writes the value of int to cid in text form, in a field of
+           the given minimum width. *)
+ 
+      PROCEDURE ReadCard (cid: IOChan.ChanId; VAR card: LONGCARD);
+        (* Skips leading spaces, and removes any remaining characters
+           from cid that form part of an unsigned whole number.  The
+           value of this number is assigned to card. The read result
+           is set to the value allRight, outOfRange, wrongFormat,
+           endOfLine, or endOfInput.
+        *)
+ 
+      PROCEDURE WriteCard (cid: IOChan.ChanId; card: LONGCARD;
+                           width: CARDINAL);
+        (* Writes the value of card to cid in text form, in a field
+           of the given minimum width. *)
+ 
+      END LongWholeIO.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/LowLong,  Next: gm2-libs-iso/LowReal,  Prev: gm2-libs-iso/LongWholeIO,  Up: M2 ISO Libraries
+ 
+ 4.4.22 gm2-libs-iso/LowLong
+ ---------------------------
+ 
+      DEFINITION MODULE LowLong;
+ 
+        (* Access to underlying properties of the type LONGREAL *)
+ 
+      CONST
+        radix      = __ATTRIBUTE__ __BUILTIN__ (( <LONGREAL, radix> )) ;      (* ZType *)
+        places     = __ATTRIBUTE__ __BUILTIN__ (( <LONGREAL, places> )) ;     (* ZType *)
+        expoMin    = __ATTRIBUTE__ __BUILTIN__ (( <LONGREAL, expoMin> )) ;    (* ZType *)
+        expoMax    = __ATTRIBUTE__ __BUILTIN__ (( <LONGREAL, expoMax> )) ;    (* ZType *)
+        large      = __ATTRIBUTE__ __BUILTIN__ (( <LONGREAL, large> )) ;      (* RType *)
+        small      = __ATTRIBUTE__ __BUILTIN__ (( <LONGREAL, small> )) ;      (* RType *)
+        IEC559     = __ATTRIBUTE__ __BUILTIN__ (( <LONGREAL, IEC559> )) ;     (* BOOLEAN *)
+        LIA1       = __ATTRIBUTE__ __BUILTIN__ (( <LONGREAL, LIA1> )) ;       (* BOOLEAN *)
+        ISO        = __ATTRIBUTE__ __BUILTIN__ (( <LONGREAL, ISO> )) ;        (* BOOLEAN *)
+        IEEE       = __ATTRIBUTE__ __BUILTIN__ (( <LONGREAL, IEEE> )) ;       (* BOOLEAN *)
+        rounds     = __ATTRIBUTE__ __BUILTIN__ (( <LONGREAL, rounds> )) ;     (* BOOLEAN *)
+        gUnderflow = __ATTRIBUTE__ __BUILTIN__ (( <LONGREAL, gUnderflow> )) ; (* BOOLEAN *)
+        exception  = __ATTRIBUTE__ __BUILTIN__ (( <LONGREAL, exception> )) ;  (* BOOLEAN *)
+        extend     = __ATTRIBUTE__ __BUILTIN__ (( <LONGREAL, extend> )) ;     (* BOOLEAN *)
+        nModes     = __ATTRIBUTE__ __BUILTIN__ (( <LONGREAL, nModes> )) ;     (* ZType *)
+ 
+      TYPE
+        Modes = PACKEDSET OF [0 .. nModes-1];
+ 
+      PROCEDURE exponent (x: LONGREAL): INTEGER;
+        (* Returns the exponent value of x *)
+ 
+      PROCEDURE fraction (x: LONGREAL): LONGREAL;
+        (* Returns the significand (or significant part) of x *)
+ 
+      PROCEDURE sign (x: LONGREAL): LONGREAL;
+        (* Returns the signum of x *)
+ 
+      PROCEDURE succ (x: LONGREAL): LONGREAL;
+        (* Returns the next value of the type LONGREAL greater than x *)
+ 
+      PROCEDURE ulp (x: LONGREAL): LONGREAL;
+        (* Returns the value of a unit in the last place of x *)
+ 
+      PROCEDURE pred (x: LONGREAL): LONGREAL;
+        (* Returns the previous value of the type LONGREAL less than x *)
+ 
+      PROCEDURE intpart (x: LONGREAL): LONGREAL;
+        (* Returns the integer part of x *)
+ 
+      PROCEDURE fractpart (x: LONGREAL): LONGREAL;
+        (* Returns the fractional part of x *)
+ 
+      PROCEDURE scale (x: LONGREAL; n: INTEGER): LONGREAL;
+        (* Returns the value of x * radix ** n *)
+ 
+      PROCEDURE trunc (x: LONGREAL; n: INTEGER): LONGREAL;
+        (* Returns the value of the first n places of x *)
+ 
+      PROCEDURE round (x: LONGREAL; n: INTEGER): LONGREAL;
+        (* Returns the value of x rounded to the first n places *)
+ 
+      PROCEDURE synthesize (expart: INTEGER; frapart: LONGREAL): LONGREAL;
+        (* Returns a value of the type LONGREAL constructed from the given expart and frapart *)
+ 
+      PROCEDURE setMode (m: Modes);
+        (* Sets status flags appropriate to the underlying implementation of the type LONGREAL *)
+ 
+      PROCEDURE currentMode (): Modes;
+        (* Returns the current status flags in the form set by setMode *)
+ 
+      PROCEDURE IsLowException (): BOOLEAN;
+        (* Returns TRUE if the current coroutine is in the exceptional execution state
+           because of the raising of an exception in a routine from this module; otherwise
+           returns FALSE.
+        *)
+ 
+      END LowLong.
+ 
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/LowReal,  Next: gm2-libs-iso/LowShort,  Prev: gm2-libs-iso/LowLong,  Up: M2 ISO Libraries
+ 
+ 4.4.23 gm2-libs-iso/LowReal
+ ---------------------------
+ 
+      DEFINITION MODULE LowReal;
+ 
+        (* Access to underlying properties of the type REAL *)
+ 
+      CONST
+        radix      = __ATTRIBUTE__ __BUILTIN__ (( <REAL, radix> )) ;      (* ZType *)
+        places     = __ATTRIBUTE__ __BUILTIN__ (( <REAL, places> )) ;     (* ZType *)
+        expoMin    = __ATTRIBUTE__ __BUILTIN__ (( <REAL, expoMin> )) ;    (* ZType *)
+        expoMax    = __ATTRIBUTE__ __BUILTIN__ (( <REAL, expoMax> )) ;    (* ZType *)
+        large      = __ATTRIBUTE__ __BUILTIN__ (( <REAL, large> )) ;      (* RType *)
+        small      = __ATTRIBUTE__ __BUILTIN__ (( <REAL, small> )) ;      (* RType *)
+        IEC559     = __ATTRIBUTE__ __BUILTIN__ (( <REAL, IEC559> )) ;     (* BOOLEAN *)
+        LIA1       = __ATTRIBUTE__ __BUILTIN__ (( <REAL, LIA1> )) ;       (* BOOLEAN *)
+        ISO        = __ATTRIBUTE__ __BUILTIN__ (( <REAL, ISO> )) ;        (* BOOLEAN *)
+        IEEE       = __ATTRIBUTE__ __BUILTIN__ (( <REAL, IEEE> )) ;       (* BOOLEAN *)
+        rounds     = __ATTRIBUTE__ __BUILTIN__ (( <REAL, rounds> )) ;     (* BOOLEAN *)
+        gUnderflow = __ATTRIBUTE__ __BUILTIN__ (( <REAL, gUnderflow> )) ; (* BOOLEAN *)
+        exception  = __ATTRIBUTE__ __BUILTIN__ (( <REAL, exception> )) ;  (* BOOLEAN *)
+        extend     = __ATTRIBUTE__ __BUILTIN__ (( <REAL, extend> )) ;     (* BOOLEAN *)
+        nModes     = __ATTRIBUTE__ __BUILTIN__ (( <REAL, nModes> )) ;     (* ZType *)
+ 
+      TYPE
+        Modes = PACKEDSET OF [0..nModes-1];
+ 
+      PROCEDURE exponent (x: REAL): INTEGER;
+        (* Returns the exponent value of x *)
+ 
+      PROCEDURE fraction (x: REAL): REAL;
+        (* Returns the significand (or significant part) of x *)
+ 
+      PROCEDURE sign (x: REAL): REAL;
+        (* Returns the signum of x *)
+ 
+      PROCEDURE succ (x: REAL): REAL;
+        (* Returns the next value of the type REAL greater than x *)
+ 
+      PROCEDURE ulp (x: REAL): REAL;
+        (* Returns the value of a unit in the last place of x *)
+ 
+      PROCEDURE pred (x: REAL): REAL;
+        (* Returns the previous value of the type REAL less than x *)
+ 
+      PROCEDURE intpart (x: REAL): REAL;
+        (* Returns the integer part of x *)
+ 
+      PROCEDURE fractpart (x: REAL): REAL;
+        (* Returns the fractional part of x *)
+ 
+      PROCEDURE scale (x: REAL; n: INTEGER): REAL;
+        (* Returns the value of x * radix ** n *)
+ 
+      PROCEDURE trunc (x: REAL; n: INTEGER): REAL;
+        (* Returns the value of the first n places of x *)
+ 
+      PROCEDURE round (x: REAL; n: INTEGER): REAL;
+        (* Returns the value of x rounded to the first n places *)
+ 
+      PROCEDURE synthesize (expart: INTEGER; frapart: REAL): REAL;
+        (* Returns a value of the type REAL constructed from the given expart and frapart *)
+ 
+      PROCEDURE setMode (m: Modes);
+        (* Sets status flags appropriate to the underlying implementation of the type REAL *)
+ 
+      PROCEDURE currentMode (): Modes;
+        (* Returns the current status flags in the form set by setMode *)
+ 
+      PROCEDURE IsLowException (): BOOLEAN;
+        (* Returns TRUE if the current coroutine is in the exceptional execution state
+           because of the raising of an exception in a routine from this module; otherwise
+           returns FALSE.
+        *)
+ 
+      END LowReal.
+ 
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/LowShort,  Next: gm2-libs-iso/M2EXCEPTION,  Prev: gm2-libs-iso/LowReal,  Up: M2 ISO Libraries
+ 
+ 4.4.24 gm2-libs-iso/LowShort
+ ----------------------------
+ 
+      DEFINITION MODULE LowShort;
+ 
+        (* Access to underlying properties of the type SHORTREAL *)
+ 
+      CONST
+        radix      = __ATTRIBUTE__ __BUILTIN__ (( <SHORTREAL, radix> )) ;      (* ZType *)
+        places     = __ATTRIBUTE__ __BUILTIN__ (( <SHORTREAL, places> )) ;     (* ZType *)
+        expoMin    = __ATTRIBUTE__ __BUILTIN__ (( <SHORTREAL, expoMin> )) ;    (* ZType *)
+        expoMax    = __ATTRIBUTE__ __BUILTIN__ (( <SHORTREAL, expoMax> )) ;    (* ZType *)
+        large      = __ATTRIBUTE__ __BUILTIN__ (( <SHORTREAL, large> )) ;      (* RType *)
+        small      = __ATTRIBUTE__ __BUILTIN__ (( <SHORTREAL, small> )) ;      (* RType *)
+        IEC559     = __ATTRIBUTE__ __BUILTIN__ (( <SHORTREAL, IEC559> )) ;     (* BOOLEAN *)
+        LIA1       = __ATTRIBUTE__ __BUILTIN__ (( <SHORTREAL, LIA1> )) ;       (* BOOLEAN *)
+        ISO        = __ATTRIBUTE__ __BUILTIN__ (( <SHORTREAL, ISO> )) ;        (* BOOLEAN *)
+        IEEE       = __ATTRIBUTE__ __BUILTIN__ (( <SHORTREAL, IEEE> )) ;       (* BOOLEAN *)
+        rounds     = __ATTRIBUTE__ __BUILTIN__ (( <SHORTREAL, rounds> )) ;     (* BOOLEAN *)
+        gUnderflow = __ATTRIBUTE__ __BUILTIN__ (( <SHORTREAL, gUnderflow> )) ; (* BOOLEAN *)
+        exception  = __ATTRIBUTE__ __BUILTIN__ (( <SHORTREAL, exception> )) ;  (* BOOLEAN *)
+        extend     = __ATTRIBUTE__ __BUILTIN__ (( <SHORTREAL, extend> )) ;     (* BOOLEAN *)
+        nModes     = __ATTRIBUTE__ __BUILTIN__ (( <SHORTREAL, nModes> )) ;     (* ZType *)
+ 
+      TYPE
+        Modes = PACKEDSET OF [0 .. nModes-1];
+ 
+      PROCEDURE exponent (x: SHORTREAL): INTEGER;
+        (* Returns the exponent value of x *)
+ 
+      PROCEDURE fraction (x: SHORTREAL): SHORTREAL;
+        (* Returns the significand (or significant part) of x *)
+ 
+      PROCEDURE sign (x: SHORTREAL): SHORTREAL;
+        (* Returns the signum of x *)
+ 
+      PROCEDURE succ (x: SHORTREAL): SHORTREAL;
+        (* Returns the next value of the type SHORTREAL greater than x *)
+ 
+      PROCEDURE ulp (x: SHORTREAL): SHORTREAL;
+        (* Returns the value of a unit in the last place of x *)
+ 
+      PROCEDURE pred (x: SHORTREAL): SHORTREAL;
+        (* Returns the previous value of the type SHORTREAL less than x *)
+ 
+      PROCEDURE intpart (x: SHORTREAL): SHORTREAL;
+        (* Returns the integer part of x *)
+ 
+      PROCEDURE fractpart (x: SHORTREAL): SHORTREAL;
+        (* Returns the fractional part of x *)
+ 
+      PROCEDURE scale (x: SHORTREAL; n: INTEGER): SHORTREAL;
+        (* Returns the value of x * radix ** n *)
+ 
+      PROCEDURE trunc (x: SHORTREAL; n: INTEGER): SHORTREAL;
+        (* Returns the value of the first n places of x *)
+ 
+      PROCEDURE round (x: SHORTREAL; n: INTEGER): SHORTREAL;
+        (* Returns the value of x rounded to the first n places *)
+ 
+      PROCEDURE synthesize (expart: INTEGER; frapart: SHORTREAL): SHORTREAL;
+        (* Returns a value of the type SHORTREAL constructed from the given expart and frapart *)
+ 
+      PROCEDURE setMode (m: Modes);
+        (* Sets status flags appropriate to the underlying implementation of the type SHORTREAL *)
+ 
+      PROCEDURE currentMode (): Modes;
+        (* Returns the current status flags in the form set by setMode *)
+ 
+      PROCEDURE IsLowException (): BOOLEAN;
+        (* Returns TRUE if the current coroutine is in the exceptional execution state
+           because of the raising of an exception in a routine from this module; otherwise
+           returns FALSE.
+        *)
+ 
+      END LowShort.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/M2EXCEPTION,  Next: gm2-libs-iso/M2RTS,  Prev: gm2-libs-iso/LowShort,  Up: M2 ISO Libraries
+ 
+ 4.4.25 gm2-libs-iso/M2EXCEPTION
+ -------------------------------
+ 
+      DEFINITION MODULE M2EXCEPTION;
+ 
+      (* Provides facilities for identifying language exceptions *)
+ 
+      TYPE
+        M2Exceptions =
+          (indexException,     rangeException,         caseSelectException,  invalidLocation,
+           functionException,  wholeValueException,    wholeDivException,    realValueException,
+           realDivException,   complexValueException,  complexDivException,  protException,
+           sysException,       coException,            exException
+          );
+ 
+      PROCEDURE M2Exception (): M2Exceptions;
+        (* If the current coroutine is in the exceptional execution state because of the raising
+           of a language exception, returns the corresponding enumeration value, and otherwise
+           raises an exception.
+        *)
+ 
+      PROCEDURE IsM2Exception (): BOOLEAN;
+        (* If the current coroutine is in the exceptional execution state because of the raising
+           of a language exception, returns TRUE, and otherwise returns FALSE.
+        *)
+ 
+      END M2EXCEPTION.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/M2RTS,  Next: gm2-libs-iso/MemStream,  Prev: gm2-libs-iso/M2EXCEPTION,  Up: M2 ISO Libraries
+ 
+ 4.4.26 gm2-libs-iso/M2RTS
+ -------------------------
+ 
+      DEFINITION MODULE M2RTS ;
+ 
+      FROM SYSTEM IMPORT ADDRESS ;
+ 
+ 
+      TYPE
+         ArgCVEnvP = PROCEDURE (INTEGER, ADDRESS, ADDRESS) ;
+ 
+ 
+      PROCEDURE ConstructModules (applicationmodule, libname: ADDRESS;
+                                  overrideliborder: ADDRESS;
+                                  argc: INTEGER; argv, envp: ADDRESS) ;
+ 
+      PROCEDURE DeconstructModules (applicationmodule, libname: ADDRESS;
+                                    argc: INTEGER; argv, envp: ADDRESS) ;
+ 
+ 
+      (*
+         RegisterModule - adds module name to the list of outstanding
+                          modules which need to have their dependencies
+                          explored to determine initialization order.
+      *)
+ 
+      PROCEDURE RegisterModule (name, libname: ADDRESS;
+                                init, fini:  ArgCVEnvP;
+                                dependencies: PROC) ;
+ 
+ 
+      (*
+         RequestDependant - used to specify that modulename is dependant upon
+                            module dependantmodule.
+      *)
+ 
+      PROCEDURE RequestDependant (modulename, libname,
+                                  dependantmodule, dependantlibname: ADDRESS) ;
+ 
+ 
+      (*
+         ExecuteTerminationProcedures - calls each installed termination
+                                        procedure in reverse order.
+      *)
+ 
+      PROCEDURE ExecuteTerminationProcedures ;
+ 
+ 
+      (*
+         InstallTerminationProcedure - installs a procedure, p, which will
+                                       be called when the procedure
+                                       ExecuteTerminationProcedures
+                                       is invoked.  It returns TRUE is the
+                                       procedure is installed.
+      *)
+ 
+      PROCEDURE InstallTerminationProcedure (p: PROC) : BOOLEAN ;
+ 
+ 
+      (*
+         ExecuteInitialProcedures - executes the initial procedures installed
+                                    by InstallInitialProcedure.
+      *)
+ 
+      PROCEDURE ExecuteInitialProcedures ;
+ 
+ 
+      (*
+         InstallInitialProcedure - installs a procedure to be executed just
+                                   before the BEGIN code section of the main
+                                   program module.
+      *)
+ 
+      PROCEDURE InstallInitialProcedure (p: PROC) : BOOLEAN ;
+ 
+ 
+      (*
+         HALT - terminate the current program.  The procedure
+                ExecuteTerminationProcedures
+                is called before the program is stopped.  The parameter
+                exitcode is optional.  If the parameter is not supplied
+                HALT will call libc 'abort', otherwise it will exit with
+                the code supplied.  Supplying a parameter to HALT has the
+                same effect as calling ExitOnHalt with the same code and
+                then calling HALT with no parameter.
+      *)
+ 
+      PROCEDURE HALT ([exitcode: INTEGER = -1]) <* noreturn *> ;
+ 
+ 
+      (*
+         Halt - provides a more user friendly version of HALT, which takes
+                 four parameters to aid debugging.  It writes an error message
+                 to stderr and calls exit (1).
+      *)
+ 
+      PROCEDURE Halt (description, filename, function: ARRAY OF CHAR;
+                      line: CARDINAL) <* noreturn *> ;
+ 
+ 
+      (*
+         HaltC - provides a more user friendly version of HALT, which takes
+                 four parameters to aid debugging.  It writes an error message
+                 to stderr and calls exit (1).
+      *)
+ 
+      PROCEDURE HaltC (description, filename, function: ADDRESS;
+                       line: CARDINAL) <* noreturn *> ;
+ 
+ 
+ 
+      (*
+         ExitOnHalt - if HALT is executed then call exit with the exit code, e.
+      *)
+ 
+      PROCEDURE ExitOnHalt (e: INTEGER) ;
+ 
+ 
+      (*
+         ErrorMessage - emits an error message to stderr and then calls exit (1).
+      *)
+ 
+      PROCEDURE ErrorMessage (message: ARRAY OF CHAR;
+                              filename: ARRAY OF CHAR;
+                              line: CARDINAL;
+                              function: ARRAY OF CHAR) <* noreturn *> ;
+ 
+ 
+      (*
+         IsTerminating - Returns true if any coroutine has started program termination
+                         and false otherwise.
+      *)
+ 
+      PROCEDURE IsTerminating () : BOOLEAN ;
+ 
+ 
+      (*
+         HasHalted - Returns true if a call to HALT has been made and false
+                     otherwise.
+      *)
+ 
+      PROCEDURE HasHalted () : BOOLEAN ;
+ 
+ 
+      (*
+         Length - returns the length of a string, a. This is called whenever
+                  the user calls LENGTH and the parameter cannot be calculated
+                  at compile time.
+      *)
+ 
+      PROCEDURE Length (a: ARRAY OF CHAR) : CARDINAL ;
+ 
+ 
+      (*
+         The following are the runtime exception handler routines.
+      *)
+ 
+      PROCEDURE AssignmentException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE ReturnException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE IncException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE DecException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE InclException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE ExclException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE ShiftException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE RotateException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE StaticArraySubscriptException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE DynamicArraySubscriptException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE ForLoopBeginException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE ForLoopToException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE ForLoopEndException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE PointerNilException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE NoReturnException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE CaseException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE WholeNonPosDivException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE WholeNonPosModException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE WholeZeroDivException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE WholeZeroRemException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE WholeValueException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE RealValueException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE ParameterException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+      PROCEDURE NoException (filename: ADDRESS; line, column: CARDINAL; scope, message: ADDRESS) <* noreturn *> ;
+ 
+ 
+      END M2RTS.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/MemStream,  Next: gm2-libs-iso/Preemptive,  Prev: gm2-libs-iso/M2RTS,  Up: M2 ISO Libraries
+ 
+ 4.4.27 gm2-libs-iso/MemStream
+ -----------------------------
+ 
+      DEFINITION MODULE MemStream ;
+ 
+      (*
+          Description: provides an ISO module which can write to a memory
+                       buffer or read from a memory buffer.
+      *)
+ 
+      FROM IOChan IMPORT ChanId ;
+      FROM ChanConsts IMPORT FlagSet, OpenResults ;
+      FROM SYSTEM IMPORT ADDRESS, LOC ;
+ 
+ 
+      (*
+         Attempts to obtain and open a channel connected to a contigeous
+         buffer in memory.  The write flag is implied; without the raw
+         flag, text is implied.  If successful, assigns to cid the identity of
+         the opened channel, assigns the value opened to res.
+         If a channel cannot be opened as required,
+         the value of res indicates the reason, and cid identifies the
+         invalid channel.
+ 
+         The parameters, buffer, length and used maybe updated as
+         data is written.  The buffer maybe reallocated
+         and its address might alter, however the parameters will
+         always reflect the current active buffer.  When this
+         channel is closed the buffer is deallocated and
+         buffer will be set to NIL, length and used will be set to
+         zero.
+      *)
+ 
+      PROCEDURE OpenWrite (VAR cid: ChanId; flags: FlagSet;
+                           VAR res: OpenResults;
+                           VAR buffer: ADDRESS;
+                           VAR length: CARDINAL;
+                           VAR used: CARDINAL;
+                           deallocOnClose: BOOLEAN) ;
+ 
+ 
+      (*
+         Attempts to obtain and open a channel connected to a contigeous
+         buffer in memory.  The read and old flags are implied; without
+         the raw flag, text is implied.  If successful, assigns to cid the
+         identity of the opened channel, assigns the value opened to res, and
+         selects input mode, with the read position corresponding to the start
+         of the buffer.  If a channel cannot be opened as required, the value of
+         res indicates the reason, and cid identifies the invalid channel.
+      *)
+ 
+      PROCEDURE OpenRead (VAR cid: ChanId; flags: FlagSet;
+                          VAR res: OpenResults;
+                          buffer: ADDRESS; length: CARDINAL;
+                          deallocOnClose: BOOLEAN) ;
+ 
+ 
+      (*
+         Close - if the channel identified by cid is not open to
+                 a memory stream, the exception wrongDevice is
+                 raised; otherwise closes the channel, and assigns
+                 the value identifying the invalid channel to cid.
+      *)
+ 
+      PROCEDURE Close (VAR cid: ChanId) ;
+ 
+ 
+      (*
+         Rewrite - assigns the buffer index to zero.  Subsequent
+                   writes will overwrite the previous buffer contents.
+      *)
+ 
+      PROCEDURE Rewrite (cid: ChanId) ;
+ 
+ 
+      (*
+         Reread - assigns the buffer index to zero.  Subsequent
+                  reads will read the previous buffer contents.
+      *)
+ 
+      PROCEDURE Reread (cid: ChanId) ;
+ 
+ 
+      (*
+         IsMem - tests if the channel identified by cid is open as
+                 a memory stream.
+      *)
+ 
+      PROCEDURE IsMem (cid: ChanId) : BOOLEAN ;
+ 
+ 
+      END MemStream.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/Preemptive,  Next: gm2-libs-iso/Processes,  Prev: gm2-libs-iso/MemStream,  Up: M2 ISO Libraries
+ 
+ 4.4.28 gm2-libs-iso/Preemptive
+ ------------------------------
+ 
+      DEFINITION MODULE Preemptive ;
+ 
+ 
+      (*
+         initPreemptive - if microsecs > 0 then turn on preemptive scheduling.
+                          if microsecs = 0 then preemptive scheduling is turned off.
+      *)
+ 
+      PROCEDURE initPreemptive (seconds, microsecs: CARDINAL) ;
+ 
+ 
+      END Preemptive.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/Processes,  Next: gm2-libs-iso/ProgramArgs,  Prev: gm2-libs-iso/Preemptive,  Up: M2 ISO Libraries
+ 
+ 4.4.29 gm2-libs-iso/Processes
+ -----------------------------
+ 
+      DEFINITION MODULE Processes;
+ 
+        (* This module allows concurrent algorithms to be expressed using
+           processes. A process is a unit of a program that has the
+           potential to run in parallel with other processes.
+        *)
+ 
+      IMPORT SYSTEM;
+ 
+      TYPE
+        ProcessId;                      (* Used to identify processes *)
+        Parameter     = SYSTEM.ADDRESS; (* Used to pass data between processes *)
+        Body          = PROC;           (* Used as the type of a process body *)
+        Urgency       = INTEGER;        (* Used by the internal scheduler *)
+        Sources       = CARDINAL;       (* Used to identify event sources *)
+        ProcessesExceptions =           (* Exceptions raised by this module *)
+          (passiveProgram, processError);
+ 
+      (* The following procedures create processes and switch control between
+         them. *)
+ 
+      PROCEDURE Create (procBody: Body; extraSpace: CARDINAL; procUrg: Urgency;
+                        procParams: Parameter; VAR procId: ProcessId);
+        (* Creates a new process with procBody as its body, and with urgency
+           and parameters given by procUrg and procParams.  At least as
+           much workspace (in units of SYSTEM.LOC) as is specified by
+           extraSpace is allocated to the process.
+           An identity for the new process is returned in procId.
+           The process is created in the passive state; it will not run
+           until activated.
+        *)
+ 
+      PROCEDURE Start (procBody: Body; extraSpace: CARDINAL; procUrg: Urgency;
+                       procParams: Parameter; VAR procId: ProcessId);
+        (* Creates a new process, with parameters as for Create.
+           The process is created in the ready state; it is eligible to
+           run immediately.
+        *)
+ 
+      PROCEDURE StopMe ();
+        (* Terminates the calling process.
+           The process must not be associated with a source of events.
+        *)
+ 
+      PROCEDURE SuspendMe ();
+        (* Causes the calling process to enter the passive state.  The
+           procedure only returns when the calling process is again
+           activated by another process.
+        *)
+ 
+      PROCEDURE Activate (procId: ProcessId);
+        (* Causes the process identified by procId to enter the ready
+           state, and thus to become eligible to run again.
+        *)
+ 
+      PROCEDURE SuspendMeAndActivate (procId: ProcessId);
+        (* Executes an atomic sequence of SuspendMe() and
+           Activate(procId). *)
+ 
+      PROCEDURE Switch (procId: ProcessId; VAR info: Parameter);
+        (* Causes the calling process to enter the passive state; the
+           process identified by procId becomes the currently executing
+           process.  info is used to pass parameter information from the
+           calling to the activated process.  On return, info will
+           contain information from the process that chooses to switch
+           back to this one (or will be NIL if Activate or
+           SuspendMeAndActivate are used instead of Switch).
+        *)
+ 
+      PROCEDURE Wait ();
+        (* Causes the calling process to enter the waiting state.
+           The procedure will return when the calling process is
+           activated by another process, or when one of its associated
+           eventSources has generated an event.
+        *)
+ 
+      (* The following procedures allow the association of processes
+         with sources of external events.
+      *)
+ 
+      PROCEDURE Attach (eventSource: Sources);
+        (* Associates the specified eventSource with the calling
+           process. *)
+ 
+      PROCEDURE Detach (eventSource: Sources);
+        (* Dissociates the specified eventSource from the program. *)
+ 
+      PROCEDURE IsAttached (eventSource: Sources): BOOLEAN;
+        (* Returns TRUE if and only if the specified eventSource is
+           currently associated with one of the processes of the
+           program.
+        *)
+ 
+      PROCEDURE Handler (eventSource: Sources): ProcessId;
+        (* Returns the identity of the process, if any, that is
+           associated with the specified eventSource.
+        *)
+ 
+      (* The following procedures allow processes to obtain their
+         identity, parameters, and urgency.
+      *)
+ 
+      PROCEDURE Me (): ProcessId;
+        (* Returns the identity of the calling process (as assigned
+           when the process was first created).
+        *)
+ 
+      PROCEDURE MyParam (): Parameter;
+        (* Returns the value specified as procParams when the calling
+           process was created. *)
+ 
+      PROCEDURE UrgencyOf (procId: ProcessId): Urgency;
+        (* Returns the urgency established when the process identified
+           by procId was first created.
+        *)
+ 
+      (* The following procedure provides facilities for exception
+         handlers. *)
+ 
+      PROCEDURE ProcessesException (): ProcessesExceptions;
+        (* If the current coroutine is in the exceptional execution state
+           because of the raising of a language exception, returns the
+           corresponding enumeration value, and otherwise raises an
+           exception.
+        *)
+ 
+      PROCEDURE IsProcessesException (): BOOLEAN;
+        (* Returns TRUE if the current coroutine is in the exceptional
+           execution state because of the raising of an exception in
+           a routine from this module; otherwise returns FALSE.
+        *)
+ 
+      (*
+         Reschedule - rotates the ready queue and transfers to the process
+                      with the highest run priority.
+      *)
+ 
+      PROCEDURE Reschedule ;
+ 
+ 
+      (*
+         displayProcesses -
+      *)
+ 
+      PROCEDURE displayProcesses (message: ARRAY OF CHAR) ;
+ 
+ 
+      END Processes.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/ProgramArgs,  Next: gm2-libs-iso/RTco,  Prev: gm2-libs-iso/Processes,  Up: M2 ISO Libraries
+ 
+ 4.4.30 gm2-libs-iso/ProgramArgs
+ -------------------------------
+ 
+      DEFINITION MODULE ProgramArgs;
+ 
+        (* Access to program arguments *)
+ 
+      IMPORT IOChan;
+ 
+      TYPE
+        ChanId = IOChan.ChanId;
+ 
+      PROCEDURE ArgChan (): ChanId;
+        (* Returns a value that identifies a channel for reading
+           program arguments *)
+ 
+      PROCEDURE IsArgPresent (): BOOLEAN;
+        (* Tests if there is a current argument to read from.  If not,
+           read <= IOChan.CurrentFlags() will be FALSE, and attempting
+           to read from the argument channel will raise the exception
+           notAvailable.
+        *)
+ 
+      PROCEDURE NextArg ();
+        (* If there is another argument, causes subsequent input from the
+           argument device to come from the start of the next argument.
+           Otherwise there is no argument to read from, and a call of
+           IsArgPresent will return FALSE.
+        *)
+ 
+      END ProgramArgs.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/RTco,  Next: gm2-libs-iso/RTdata,  Prev: gm2-libs-iso/ProgramArgs,  Up: M2 ISO Libraries
+ 
+ 4.4.31 gm2-libs-iso/RTco
+ ------------------------
+ 
+      DEFINITION MODULE FOR "C" RTco ;
+ 
+      FROM SYSTEM IMPORT ADDRESS ;
+ 
+      IMPORT RTentity ;  (* Imported so the initialization call graph
+                            understands that RTco.cc depends upon RTentity.  *)
+ 
+      (* init initializes the module and allows the application to lazily invoke threads.  *)
+ 
+      PROCEDURE init () : INTEGER ;
+ 
+      PROCEDURE initThread (p: PROC; stackSize: CARDINAL; interruptLevel: CARDINAL) : INTEGER ;
+ 
+      PROCEDURE initSemaphore (value: CARDINAL) : INTEGER ;
+ 
+      PROCEDURE wait (semaphore: INTEGER) ;
+ 
+      PROCEDURE signal (semaphore: INTEGER) ;
+ 
+      PROCEDURE transfer (VAR p1: INTEGER; p2: INTEGER) ;
+ 
+      PROCEDURE waitThread (tid: INTEGER) ;
+ 
+      PROCEDURE signalThread (tid: INTEGER) ;
+ 
+      PROCEDURE currentThread () : INTEGER ;
+ 
+ 
+      (* currentInterruptLevel returns the interrupt level of the current thread.  *)
+ 
+      PROCEDURE currentInterruptLevel () : CARDINAL ;
+ 
+ 
+      (* turninterrupts returns the old interrupt level and assigns the interrupt level
+         to newLevel.  *)
+ 
+      PROCEDURE turnInterrupts (newLevel: CARDINAL) : CARDINAL ;
+ 
+ 
+      (*
+         select access to the select system call which will be thread safe.
+         This is typically called from the idle process to wait for an interrupt.
+      *)
+ 
+      PROCEDURE select (p1: INTEGER;
+                        p2: ADDRESS;
+                        p3: ADDRESS;
+                        p4: ADDRESS;
+                        p5: ADDRESS) : INTEGER ;
+ 
+ 
+      END RTco.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/RTdata,  Next: gm2-libs-iso/RTentity,  Prev: gm2-libs-iso/RTco,  Up: M2 ISO Libraries
+ 
+ 4.4.32 gm2-libs-iso/RTdata
+ --------------------------
+ 
+      DEFINITION MODULE RTdata ;
+ 
+      (*
+          Description: provides a mechanism whereby devices can store
+                       data attached to a device.
+      *)
+ 
+      FROM SYSTEM IMPORT ADDRESS ;
+      FROM IOLink IMPORT DeviceTablePtr ;
+ 
+      TYPE
+         ModuleId ;
+         FreeProcedure = PROCEDURE (ADDRESS) ;
+ 
+ 
+      (*
+         MakeModuleId - creates a unique module Id.
+      *)
+ 
+      PROCEDURE MakeModuleId (VAR m: ModuleId) ;
+ 
+ 
+      (*
+         InitData - adds, datum, to the device, d.  The datum
+                    is associated with ModuleID, m.
+      *)
+ 
+      PROCEDURE InitData (d: DeviceTablePtr; m: ModuleId;
+                          datum: ADDRESS; f: FreeProcedure) ;
+ 
+ 
+      (*
+         GetData - returns the datum assocated with ModuleId, m.
+      *)
+ 
+      PROCEDURE GetData (d: DeviceTablePtr; m: ModuleId) : ADDRESS ;
+ 
+ 
+      (*
+         KillData - destroys the datum associated with ModuleId, m,
+                    in device, d.  It invokes the free procedure
+                    given during InitData.
+      *)
+ 
+      PROCEDURE KillData (d: DeviceTablePtr; m: ModuleId) ;
+ 
+ 
+      END RTdata.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/RTentity,  Next: gm2-libs-iso/RTfio,  Prev: gm2-libs-iso/RTdata,  Up: M2 ISO Libraries
+ 
+ 4.4.33 gm2-libs-iso/RTentity
+ ----------------------------
+ 
+      DEFINITION MODULE RTentity ;
+ 
+      (*
+          Description: provides a set of routines for maintaining an
+                       efficient mechanism to group opaque (or pointer)
+                       data structures together.  Internally the
+                       entities are grouped together using a binary
+                       tree.  It does not use Storage - and instead
+                       uses malloc, free from libc as Storage uses the
+                       module to detect erroneous deallocations.
+      *)
+ 
+      IMPORT SYSTEM ;
+ 
+      TYPE
+         Group ;
+ 
+ 
+      PROCEDURE InitGroup () : Group ;
+      PROCEDURE KillGroup (g: Group) : Group ;
+      PROCEDURE GetKey (g: Group; a: SYSTEM.ADDRESS) : CARDINAL ;
+      PROCEDURE PutKey (g: Group; a: SYSTEM.ADDRESS; key: CARDINAL) ;
+      PROCEDURE DelKey (g: Group; a: SYSTEM.ADDRESS) ;
+      PROCEDURE IsIn (g: Group; a: SYSTEM.ADDRESS) : BOOLEAN ;
+ 
+ 
+      END RTentity.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/RTfio,  Next: gm2-libs-iso/RTgen,  Prev: gm2-libs-iso/RTentity,  Up: M2 ISO Libraries
+ 
+ 4.4.34 gm2-libs-iso/RTfio
+ -------------------------
+ 
+      DEFINITION MODULE RTfio ;
+ 
+      (*
+          Description: provides default FIO based methods for the RTgenif
+                       procedures.  These will be used by StreamFile,
+                       SeqFile, StdChans, TermFile and RndFile.
+      *)
+ 
+      FROM SYSTEM IMPORT ADDRESS ;
+      FROM IOLink IMPORT DeviceTablePtr;
+      FROM RTgenif IMPORT GenDevIF ;
+ 
+ 
+      (*
+         doreadchar - returns a CHAR from the file associated with, g.
+      *)
+ 
+      PROCEDURE doreadchar (g: GenDevIF; d: DeviceTablePtr) : CHAR ;
+ 
+ 
+      (*
+         dounreadchar - pushes a CHAR back onto the file associated
+                        with, g.
+      *)
+ 
+      PROCEDURE dounreadchar (g: GenDevIF; d: DeviceTablePtr; ch: CHAR) : CHAR ;
+ 
+ 
+      (*
+         dogeterrno - returns the errno relating to the generic device.
+      *)
+ 
+      PROCEDURE dogeterrno (g: GenDevIF; d: DeviceTablePtr) : INTEGER ;
+ 
+ 
+      (*
+         dorbytes - reads upto, max, bytes setting, actual, and
+                    returning FALSE if an error (not due to eof)
+                    occurred.
+      *)
+ 
+      PROCEDURE dorbytes (g: GenDevIF;
+                          d: DeviceTablePtr;
+                          to: ADDRESS;
+                          max: CARDINAL;
+                          VAR actual: CARDINAL) : BOOLEAN ;
+ 
+      (*
+         dowbytes - writes up to, nBytes.  It returns FALSE
+                    if an error occurred and it sets actual
+                    to the amount of data written.
+      *)
+ 
+      PROCEDURE dowbytes (g: GenDevIF;
+                          d: DeviceTablePtr;
+                          from: ADDRESS;
+                          nBytes: CARDINAL;
+                          VAR actual: CARDINAL) : BOOLEAN ;
+ 
+ 
+      (*
+         dowriteln - attempt to write an end of line marker to the
+                     file and returns TRUE if successful.
+      *)
+ 
+      PROCEDURE dowriteln (g: GenDevIF; d: DeviceTablePtr) : BOOLEAN ;
+ 
+ 
+      (*
+         iseof - returns TRUE if end of file has been seen.
+      *)
+ 
+      PROCEDURE iseof (g: GenDevIF; d: DeviceTablePtr) : BOOLEAN ;
+ 
+ 
+      (*
+         iseoln - returns TRUE if end of line has been seen.
+      *)
+ 
+      PROCEDURE iseoln (g: GenDevIF; d: DeviceTablePtr) : BOOLEAN ;
+ 
+ 
+      (*
+         iserror - returns TRUE if an error was seen on the device.
+                   Note that reaching EOF is not classified as an
+                   error.
+      *)
+ 
+      PROCEDURE iserror (g: GenDevIF; d: DeviceTablePtr) : BOOLEAN ;
+ 
+ 
+      END RTfio.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/RTgen,  Next: gm2-libs-iso/RTgenif,  Prev: gm2-libs-iso/RTfio,  Up: M2 ISO Libraries
+ 
+ 4.4.35 gm2-libs-iso/RTgen
+ -------------------------
+ 
+      DEFINITION MODULE RTgen ;
+ 
+      (*
+          Description: provides a generic device interface between
+                       ISO channels and the underlying PIM style
+                       FIO procedure calls.
+      *)
+ 
+      FROM RTgenif IMPORT GenDevIF ;
+      FROM IOLink IMPORT DeviceId, DeviceTablePtr;
+      FROM IOConsts IMPORT ReadResults ;
+      FROM SYSTEM IMPORT ADDRESS ;
+ 
+ 
+      TYPE
+         ChanDev ;
+         DeviceType = (seqfile, streamfile, programargs, stdchans, term, socket, rndfile) ;
+ 
+ 
+      (*
+         InitChanDev - initialize and return a ChanDev.
+      *)
+ 
+      PROCEDURE InitChanDev (t: DeviceType; d: DeviceId; g: GenDevIF) : ChanDev ;
+ 
+ 
+      (*
+         KillChanDev - deallocates, g.
+      *)
+ 
+      PROCEDURE KillChanDev (g: GenDevIF) : GenDevIF ;
+ 
+ 
+      (*
+         RaiseEOFinLook - returns TRUE if the Look procedure
+                          should raise an exception if it
+                          sees end of file.
+      *)
+ 
+      PROCEDURE RaiseEOFinLook (g: ChanDev) : BOOLEAN ;
+ 
+ 
+      (*
+         RaiseEOFinSkip - returns TRUE if the Skip procedure
+                          should raise an exception if it
+                          sees end of file.
+      *)
+ 
+      PROCEDURE RaiseEOFinSkip (g: ChanDev) : BOOLEAN ;
+ 
+ 
+      PROCEDURE doLook (g: ChanDev;
+                        d: DeviceTablePtr;
+                        VAR ch: CHAR;
+                        VAR r: ReadResults) ;
+ 
+      PROCEDURE doSkip (g: ChanDev;
+                        d: DeviceTablePtr) ;
+ 
+      PROCEDURE doSkipLook (g: ChanDev;
+                            d: DeviceTablePtr;
+                            VAR ch: CHAR;
+                            VAR r: ReadResults) ;
+ 
+      PROCEDURE doWriteLn (g: ChanDev;
+                           d: DeviceTablePtr) ;
+ 
+      PROCEDURE doReadText (g: ChanDev;
+                            d: DeviceTablePtr;
+                            to: ADDRESS;
+                            maxChars: CARDINAL;
+                            VAR charsRead: CARDINAL) ;
+ 
+      PROCEDURE doWriteText (g: ChanDev;
+                             d: DeviceTablePtr;
+                             from: ADDRESS;
+                             charsToWrite: CARDINAL) ;
+ 
+      PROCEDURE doReadLocs (g: ChanDev;
+                            d: DeviceTablePtr;
+                            to: ADDRESS;
+                            maxLocs: CARDINAL;
+                            VAR locsRead: CARDINAL) ;
+ 
+      PROCEDURE doWriteLocs (g: ChanDev;
+                             d: DeviceTablePtr;
+                             from: ADDRESS;
+                             locsToWrite: CARDINAL) ;
+ 
+      (*
+         checkErrno - checks a number of errno conditions and raises
+                      appropriate ISO exceptions if they occur.
+      *)
+ 
+      PROCEDURE checkErrno (g: ChanDev; d: DeviceTablePtr) ;
+ 
+ 
+      END RTgen.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/RTgenif,  Next: gm2-libs-iso/RTio,  Prev: gm2-libs-iso/RTgen,  Up: M2 ISO Libraries
+ 
+ 4.4.36 gm2-libs-iso/RTgenif
+ ---------------------------
+ 
+      DEFINITION MODULE RTgenif ;
+ 
+      (*
+          Description: provides a generic interface mechanism used
+                       by RTgen.  This is not an ISO module but rather
+                       a runtime support module.
+      *)
+ 
+      FROM SYSTEM IMPORT ADDRESS ;
+      FROM IOLink IMPORT DeviceId, DeviceTablePtr ;
+ 
+      TYPE
+         GenDevIF ;
+         readchar   = PROCEDURE (GenDevIF, DeviceTablePtr) : CHAR ;
+         unreadchar = PROCEDURE (GenDevIF, DeviceTablePtr, CHAR) : CHAR ;
+         geterrno   = PROCEDURE (GenDevIF, DeviceTablePtr) : INTEGER ;
+         readbytes  = PROCEDURE (GenDevIF, DeviceTablePtr, ADDRESS, CARDINAL, VAR CARDINAL) : BOOLEAN ;
+         writebytes = PROCEDURE (GenDevIF, DeviceTablePtr, ADDRESS, CARDINAL, VAR CARDINAL) : BOOLEAN ;
+         writeln    = PROCEDURE (GenDevIF, DeviceTablePtr) : BOOLEAN ;
+         iseof      = PROCEDURE (GenDevIF, DeviceTablePtr) : BOOLEAN ;
+         iseoln     = PROCEDURE (GenDevIF, DeviceTablePtr) : BOOLEAN ;
+         iserror    = PROCEDURE (GenDevIF, DeviceTablePtr) : BOOLEAN ;
+ 
+ 
+      (*
+         InitGenDevIF - initializes a generic device.
+      *)
+ 
+      PROCEDURE InitGenDevIF (d     : DeviceId;
+                              rc    : readchar;
+                              urc   : unreadchar;
+                              geterr: geterrno;
+                              rbytes: readbytes;
+                              wbytes: writebytes;
+                              wl    : writeln;
+                              eof   : iseof;
+                              eoln  : iseoln;
+                              iserr : iserror) : GenDevIF ;
+ 
+ 
+      (*
+         getDID - returns the device id this generic interface.
+      *)
+ 
+      PROCEDURE getDID (g: GenDevIF) : DeviceId ;
+ 
+ 
+      (*
+         doReadChar - returns the next character from the generic
+                      device.
+      *)
+ 
+      PROCEDURE doReadChar (g: GenDevIF; d: DeviceTablePtr) : CHAR ;
+ 
+ 
+      (*
+         doUnReadChar - pushes back a character to the generic device.
+      *)
+ 
+      PROCEDURE doUnReadChar (g: GenDevIF; d: DeviceTablePtr; ch: CHAR) : CHAR ;
+ 
+ 
+      (*
+         doGetErrno - returns the errno relating to the generic device.
+      *)
+ 
+      PROCEDURE doGetErrno (g: GenDevIF; d: DeviceTablePtr) : INTEGER ;
+ 
+ 
+      (*
+         doRBytes - attempts to read, n, bytes from the generic device.
+                    It set the actual amount read and returns a boolean
+                    to determine whether an error occurred.
+      *)
+ 
+      PROCEDURE doRBytes (g: GenDevIF; d: DeviceTablePtr;
+                          to: ADDRESS; max: CARDINAL;
+                          VAR actual: CARDINAL) : BOOLEAN ;
+ 
+ 
+      (*
+         doWBytes - attempts to write, n, bytes to the generic device.
+                    It sets the actual amount written and returns a
+                    boolean to determine whether an error occurred.
+      *)
+ 
+      PROCEDURE doWBytes (g: GenDevIF; d: DeviceTablePtr;
+                          from: ADDRESS; max: CARDINAL;
+                          VAR actual: CARDINAL) : BOOLEAN ;
+ 
+ 
+      (*
+         doWrLn - writes an end of line marker and returns
+                  TRUE if successful.
+      *)
+ 
+      PROCEDURE doWrLn (g: GenDevIF; d: DeviceTablePtr) : BOOLEAN ;
+ 
+ 
+      (*
+         isEOF - returns true if the end of file was reached.
+      *)
+ 
+      PROCEDURE isEOF (g: GenDevIF; d: DeviceTablePtr) : BOOLEAN ;
+ 
+ 
+      (*
+         isEOLN - returns true if the end of line was reached.
+      *)
+ 
+      PROCEDURE isEOLN (g: GenDevIF; d: DeviceTablePtr) : BOOLEAN ;
+ 
+ 
+      (*
+         isError - returns true if an error was seen in the device.
+      *)
+ 
+      PROCEDURE isError (g: GenDevIF; d: DeviceTablePtr) : BOOLEAN ;
+ 
+ 
+      (*
+         KillGenDevIF - deallocates a generic device.
+      *)
+ 
+      PROCEDURE KillGenDevIF (g: GenDevIF) : GenDevIF ;
+ 
+ 
+      END RTgenif.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/RTio,  Next: gm2-libs-iso/RandomNumber,  Prev: gm2-libs-iso/RTgenif,  Up: M2 ISO Libraries
+ 
+ 4.4.37 gm2-libs-iso/RTio
+ ------------------------
+ 
+      DEFINITION MODULE RTio ;
+ 
+      (*
+          Description: provides low level routines for creating and destroying
+                       ChanIds.  This is necessary to allow multiple modules
+                       to create, ChanId values, where ChanId is an opaque
+                       type.
+      *)
+ 
+      IMPORT FIO, IOLink ;
+ 
+      TYPE
+         ChanId ;
+ 
+ 
+      (*
+         InitChanId - return a new ChanId.
+      *)
+ 
+      PROCEDURE InitChanId () : ChanId ;
+ 
+ 
+      (*
+         KillChanId - deallocate a ChanId.
+      *)
+ 
+      PROCEDURE KillChanId (c: ChanId) : ChanId ;
+ 
+ 
+      (*
+         NilChanId - return a NIL pointer.
+      *)
+ 
+      PROCEDURE NilChanId () : ChanId ;
+ 
+ 
+      (*
+         GetDeviceId - returns the device id, from, c.
+      *)
+ 
+      PROCEDURE GetDeviceId (c: ChanId) : IOLink.DeviceId ;
+ 
+ 
+      (*
+         SetDeviceId - sets the device id in, c.
+      *)
+ 
+      PROCEDURE SetDeviceId (c: ChanId; d: IOLink.DeviceId) ;
+ 
+ 
+      (*
+         GetDevicePtr - returns the device table ptr, from, c.
+      *)
+ 
+      PROCEDURE GetDevicePtr (c: ChanId) : IOLink.DeviceTablePtr ;
+ 
+ 
+      (*
+         SetDevicePtr - sets the device table ptr in, c.
+      *)
+ 
+      PROCEDURE SetDevicePtr (c: ChanId; p: IOLink.DeviceTablePtr) ;
+ 
+ 
+      (*
+         GetFile - returns the file field from, c.
+      *)
+ 
+      PROCEDURE GetFile (c: ChanId) : FIO.File ;
+ 
+ 
+      (*
+         SetFile - sets the file field in, c.
+      *)
+ 
+      PROCEDURE SetFile (c: ChanId; f: FIO.File) ;
+ 
+ 
+      END RTio.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/RandomNumber,  Next: gm2-libs-iso/RawIO,  Prev: gm2-libs-iso/RTio,  Up: M2 ISO Libraries
+ 
+ 4.4.38 gm2-libs-iso/RandomNumber
+ --------------------------------
+ 
+      DEFINITION MODULE RandomNumber ;
+ 
+      (*
+          Description: provides primitives for obtaining random numbers on
+                       pervasive data types.
+      *)
+ 
+      FROM SYSTEM IMPORT BYTE ;
+      EXPORT QUALIFIED Randomize, RandomInit, RandomBytes,
+                       RandomCard, RandomShortCard, RandomLongCard,
+                       RandomInt, RandomShortInt, RandomLongInt,
+                       RandomReal, RandomLongReal, RandomShortReal ;
+ 
+ 
+      (*
+         Randomize - initialize the random number generator with a seed
+                     based on the microseconds.
+      *)
+ 
+      PROCEDURE Randomize ;
+ 
+ 
+      (*
+         RandomInit - initialize the random number generator with value, seed.
+      *)
+ 
+      PROCEDURE RandomInit (seed: CARDINAL) ;
+ 
+ 
+      (*
+         RandomBytes - fills in an array with random values.
+      *)
+ 
+      PROCEDURE RandomBytes (VAR a: ARRAY OF BYTE) ;
+ 
+ 
+      (*
+         RandomInt - return an INTEGER in the range [low .. high].
+      *)
+ 
+      PROCEDURE RandomInt (low, high: INTEGER) : INTEGER ;
+ 
+ 
+      (*
+         RandomShortInt - return an SHORTINT in the range [low..high].
+      *)
+ 
+      PROCEDURE RandomShortInt (low, high: SHORTINT) : SHORTINT ;
+ 
+ 
+      (*
+         RandomLongInt - return an LONGINT in the range [low..high].
+      *)
+ 
+      PROCEDURE RandomLongInt (low, high: LONGINT) : LONGINT ;
+ 
+ 
+      (*
+         RandomShortCard - return a SHORTCARD in the range [low..high].
+      *)
+ 
+      PROCEDURE RandomShortCard (low, high: CARDINAL) : CARDINAL ;
+ 
+ 
+      (*
+         RandomCard - return a CARDINAL in the range [low..high].
+      *)
+ 
+      PROCEDURE RandomCard (low, high: CARDINAL) : CARDINAL ;
+ 
+ 
+      (*
+         RandomLongCard - return an LONGCARD in the range [low..high].
+      *)
+ 
+      PROCEDURE RandomLongCard (low, high: LONGCARD) : LONGCARD ;
+ 
+ 
+      (*
+         RandomReal - return a REAL number in the range 0.0..1.0
+      *)
+ 
+      PROCEDURE RandomReal () : REAL ;
+ 
+ 
+      (*
+         RandomShortReal - return a SHORTREAL number in the range 0.0..1.0
+      *)
+ 
+      PROCEDURE RandomShortReal () : SHORTREAL ;
+ 
+ 
+      (*
+         RandomLongReal - return a LONGREAL number in the range 0.0..1.0
+      *)
+ 
+      PROCEDURE RandomLongReal () : LONGREAL ;
+ 
+ 
+      END RandomNumber.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/RawIO,  Next: gm2-libs-iso/RealConv,  Prev: gm2-libs-iso/RandomNumber,  Up: M2 ISO Libraries
+ 
+ 4.4.39 gm2-libs-iso/RawIO
+ -------------------------
+ 
+      DEFINITION MODULE RawIO;
+ 
+        (* Reading and writing data over specified channels using raw
+           operations, that is, with no conversion or interpretation.
+           The read result is of the type IOConsts.ReadResults.
+        *)
+ 
+      IMPORT IOChan, SYSTEM;
+ 
+      PROCEDURE Read (cid: IOChan.ChanId; VAR to: ARRAY OF SYSTEM.LOC);
+        (* Reads storage units from cid, and assigns them to
+           successive components of to. The read result is set
+           to the value allRight, wrongFormat, or endOfInput.
+        *)
+ 
+      PROCEDURE Write (cid: IOChan.ChanId; from: ARRAY OF SYSTEM.LOC);
+        (* Writes storage units to cid from successive components
+           of from. *)
+ 
+      END RawIO.
+ 
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/RealConv,  Next: gm2-libs-iso/RealIO,  Prev: gm2-libs-iso/RawIO,  Up: M2 ISO Libraries
+ 
+ 4.4.40 gm2-libs-iso/RealConv
+ ----------------------------
+ 
+      DEFINITION MODULE RealConv;
+ 
+        (* Low-level REAL/string conversions *)
+ 
+      IMPORT
+        ConvTypes;
+ 
+      TYPE
+        (* strAllRight, strOutOfRange, strWrongFormat, strEmpty *)
+        ConvResults = ConvTypes.ConvResults;
+ 
+      PROCEDURE ScanReal (inputCh: CHAR; VAR chClass: ConvTypes.ScanClass;
+                          VAR nextState: ConvTypes.ScanState);
+        (* Represents the start state of a finite state scanner for real
+           numbers - assigns class of inputCh to chClass and a procedure
+           representing the next state to nextState.
+         *)
+ 
+      PROCEDURE FormatReal (str: ARRAY OF CHAR): ConvResults;
+        (* Returns the format of the string value for conversion to REAL. *)
+ 
+      PROCEDURE ValueReal (str: ARRAY OF CHAR): REAL;
+        (* Returns the value corresponding to the real number string value
+           str if str is well-formed; otherwise raises the RealConv
+           exception.
+        *)
+ 
+      PROCEDURE LengthFloatReal (real: REAL; sigFigs: CARDINAL): CARDINAL;
+        (* Returns the number of characters in the floating-point string
+           representation of real with sigFigs significant figures.
+        *)
+ 
+      PROCEDURE LengthEngReal (real: REAL; sigFigs: CARDINAL): CARDINAL;
+        (* Returns the number of characters in the floating-point engineering
+           string representation of real with sigFigs significant figures.
+        *)
+ 
+      PROCEDURE LengthFixedReal (real: REAL; place: INTEGER): CARDINAL;
+        (* Returns the number of characters in the fixed-point string
+           representation of real rounded to the given place relative to the
+           decimal point.
+        *)
+ 
+      PROCEDURE IsRConvException (): BOOLEAN;
+        (* Returns TRUE if the current coroutine is in the exceptional
+           execution state because of the raising of an exception in a
+           routine from this module; otherwise returns FALSE.
+        *)
+ 
+      END RealConv.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/RealIO,  Next: gm2-libs-iso/RealMath,  Prev: gm2-libs-iso/RealConv,  Up: M2 ISO Libraries
+ 
+ 4.4.41 gm2-libs-iso/RealIO
+ --------------------------
+ 
+      DEFINITION MODULE RealIO;
+ 
+        (* Input and output of real numbers in decimal text form
+           over specified channels.  The read result is of the
+           type IOConsts.ReadResults.
+        *)
+ 
+      IMPORT IOChan;
+ 
+        (* The text form of a signed fixed-point real number is
+             ["+" | "-"], decimal digit, {decimal digit},
+             [".", {decimal digit}]
+ 
+           The text form of a signed floating-point real number is
+             signed fixed-point real number,
+             "E", ["+" | "-"], decimal digit, {decimal digit}
+        *)
+ 
+      PROCEDURE ReadReal (cid: IOChan.ChanId; VAR real: REAL);
+        (* Skips leading spaces, and removes any remaining characters
+           from cid that form part of a signed fixed or floating
+           point number.  The value of this number is assigned to real.
+           The read result is set to the value allRight, outOfRange,
+           wrongFormat, endOfLine, or endOfInput.
+        *)
+ 
+      PROCEDURE WriteFloat (cid: IOChan.ChanId; real: REAL;
+                            sigFigs: CARDINAL; width: CARDINAL);
+        (* Writes the value of real to cid in floating-point text form,
+           with sigFigs significant figures, in a field of the given
+           minimum width.
+        *)
+ 
+      PROCEDURE WriteEng (cid: IOChan.ChanId; real: REAL;
+                          sigFigs: CARDINAL; width: CARDINAL);
+        (* As for WriteFloat, except that the number is scaled with
+           one to three digits in the whole number part, and with an
+           exponent that is a multiple of three.
+        *)
+ 
+      PROCEDURE WriteFixed (cid: IOChan.ChanId; real: REAL;
+                            place: INTEGER; width: CARDINAL);
+        (* Writes the value of real to cid in fixed-point text form,
+           rounded to the given place relative to the decimal point,
+           in a field of the given minimum width.
+        *)
+ 
+      PROCEDURE WriteReal (cid: IOChan.ChanId;
+                           real: REAL; width: CARDINAL);
+        (* Writes the value of real to cid, as WriteFixed if the sign
+           and magnitude can be shown in the given width, or otherwise
+           as WriteFloat.  The number of places or significant digits
+           depends on the given width.
+        *)
+ 
+      END RealIO.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/RealMath,  Next: gm2-libs-iso/RealStr,  Prev: gm2-libs-iso/RealIO,  Up: M2 ISO Libraries
+ 
+ 4.4.42 gm2-libs-iso/RealMath
+ ----------------------------
+ 
+      DEFINITION MODULE RealMath;
+ 
+        (* Mathematical functions for the type REAL *)
+ 
+      CONST
+        pi   = 3.1415926535897932384626433832795028841972;
+        exp1 = 2.7182818284590452353602874713526624977572;
+ 
+      PROCEDURE __BUILTIN__ sqrt (x: REAL): REAL;
+        (* Returns the positive square root of x *)
+ 
+      PROCEDURE __BUILTIN__ exp (x: REAL): REAL;
+        (* Returns the exponential of x *)
+ 
+      PROCEDURE __BUILTIN__ ln (x: REAL): REAL;
+        (* Returns the natural logarithm of x *)
+ 
+        (* The angle in all trigonometric functions is measured in radians *)
+ 
+      PROCEDURE __BUILTIN__ sin (x: REAL): REAL;
+        (* Returns the sine of x *)
+ 
+      PROCEDURE __BUILTIN__ cos (x: REAL): REAL;
+        (* Returns the cosine of x *)
+ 
+      PROCEDURE tan (x: REAL): REAL;
+        (* Returns the tangent of x *)
+ 
+      PROCEDURE arcsin (x: REAL): REAL;
+        (* Returns the arcsine of x *)
+ 
+      PROCEDURE arccos (x: REAL): REAL;
+        (* Returns the arccosine of x *)
+ 
+      PROCEDURE arctan (x: REAL): REAL;
+        (* Returns the arctangent of x *)
+ 
+      PROCEDURE power (base, exponent: REAL) : REAL;
+        (* Returns the value of the number base raised to the power exponent *)
+ 
+      PROCEDURE round (x: REAL) : INTEGER;
+        (* Returns the value of x rounded to the nearest integer *)
+ 
+      PROCEDURE IsRMathException () : BOOLEAN;
+        (* Returns TRUE if the current coroutine is in the exceptional execution state
+           because of the raising of an exception in a routine from this module; otherwise
+           returns FALSE.
+        *)
+ 
+      END RealMath.
+ 
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/RealStr,  Next: gm2-libs-iso/RndFile,  Prev: gm2-libs-iso/RealMath,  Up: M2 ISO Libraries
+ 
+ 4.4.43 gm2-libs-iso/RealStr
+ ---------------------------
+ 
+      DEFINITION MODULE RealStr;
+ 
+        (* REAL/string conversions *)
+ 
+      IMPORT
+        ConvTypes;
+ 
+      TYPE
+        (* strAllRight, strOutOfRange, strWrongFormat, strEmpty *)
+        ConvResults = ConvTypes.ConvResults;
+ 
+      (* the string form of a signed fixed-point real number is
+           ["+" | "-"], decimal digit, {decimal digit}, [".",
+           {decimal digit}]
+      *)
+ 
+      (* the string form of a signed floating-point real number is
+           signed fixed-point real number, "E", ["+" | "-"],
+           decimal digit, {decimal digit}
+      *)
+ 
+      PROCEDURE StrToReal (str: ARRAY OF CHAR; VAR real: REAL;
+                           VAR res: ConvResults);
+        (* Ignores any leading spaces in str. If the subsequent characters
+           in str are in the format of a signed real number, assigns a
+           corresponding value to real.  Assigns a value indicating the
+           format of str to res.
+        *)
+ 
+      PROCEDURE RealToFloat (real: REAL; sigFigs: CARDINAL;
+                             VAR str: ARRAY OF CHAR);
+        (* Converts the value of real to floating-point string form, with
+           sigFigs significant figures, and copies the possibly truncated
+           result to str.
+        *)
+ 
+      PROCEDURE RealToEng (real: REAL; sigFigs: CARDINAL;
+                           VAR str: ARRAY OF CHAR);
+        (* Converts the value of real to floating-point string form, with
+           sigFigs significant figures, and copies the possibly truncated
+           result to str.  The number is scaled with one to three digits
+           in the whole number part and with an exponent that is a multiple
+           of three.
+        *)
+ 
+      PROCEDURE RealToFixed (real: REAL; place: INTEGER;
+                             VAR str: ARRAY OF CHAR);
+        (* Converts the value of real to fixed-point string form, rounded
+           to the given place relative to the decimal point, and copies
+           the possibly truncated result to str.
+        *)
+ 
+      PROCEDURE RealToStr (real: REAL; VAR str: ARRAY OF CHAR);
+        (* Converts the value of real as RealToFixed if the sign and
+           magnitude can be shown within the capacity of str, or
+           otherwise as RealToFloat, and copies the possibly truncated
+           result to str. The number of places or significant digits are
+           implementation-defined.
+        *)
+ 
+      END RealStr.
+ 
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/RndFile,  Next: gm2-libs-iso/SIOResult,  Prev: gm2-libs-iso/RealStr,  Up: M2 ISO Libraries
+ 
+ 4.4.44 gm2-libs-iso/RndFile
+ ---------------------------
+ 
+      DEFINITION MODULE RndFile;
+ 
+        (* Random access files *)
+ 
+      IMPORT IOChan, ChanConsts, SYSTEM;
+ 
+      TYPE
+         ChanId = IOChan.ChanId;
+         FlagSet = ChanConsts.FlagSet;
+         OpenResults = ChanConsts.OpenResults;
+ 
+         (* Accepted singleton values of FlagSet *)
+ 
+      CONST
+         (* input operations are requested/available *)
+         read = FlagSet{ChanConsts.readFlag};
+         (* output operations are requested/available *)
+         write = FlagSet{ChanConsts.writeFlag};
+         (* a file may/must/did exist before the channel is opened *)
+         old = FlagSet{ChanConsts.oldFlag};
+         (* text operations are requested/available *)
+         text = FlagSet{ChanConsts.textFlag};
+         (* raw operations are requested/available *)
+         raw = FlagSet{ChanConsts.rawFlag};
+ 
+      PROCEDURE OpenOld (VAR cid: ChanId; name: ARRAY OF CHAR; flags: FlagSet;
+                         VAR res: OpenResults);
+        (* Attempts to obtain and open a channel connected to a stored random
+           access file of the given name.
+           The old flag is implied; without the write flag, read is implied;
+           without the text flag, raw is implied.
+           If successful, assigns to cid the identity of the opened channel,
+           assigns the value opened to res, and sets the read/write position
+           to the start of the file.
+           If a channel cannot be opened as required, the value of res indicates
+           the reason, and cid identifies the invalid channel.
+        *)
+ 
+      PROCEDURE OpenClean (VAR cid: ChanId; name: ARRAY OF CHAR; flags: FlagSet;
+                           VAR res: OpenResults);
+        (* Attempts to obtain and open a channel connected to a stored random
+           access file of the given name.
+           The write flag is implied; without the text flag, raw is implied.
+           If successful, assigns to cid the identity of the opened channel,
+           assigns the value opened to res, and truncates the file to zero length.
+           If a channel cannot be opened as required, the value of res indicates
+           the reason, and cid identifies the invalid channel.
+        *)
+ 
+      PROCEDURE IsRndFile (cid: ChanId): BOOLEAN;
+        (* Tests if the channel identified by cid is open to a random access file. *)
+ 
+      PROCEDURE IsRndFileException (): BOOLEAN;
+        (* Returns TRUE if the current coroutine is in the exceptional execution
+           state because of the raising of a RndFile exception; otherwise returns
+           FALSE.
+        *)
+ 
+      CONST
+         FilePosSize = SIZE(LONGINT) ;
+         (* <implementation-defined whole number greater than zero>; *)
+ 
+      TYPE
+         FilePos = LONGINT ;  (* ARRAY [1 .. FilePosSize] OF SYSTEM.LOC; *)
+ 
+      PROCEDURE StartPos (cid: ChanId): FilePos;
+        (* If the channel identified by cid is not open to a random access file,
+           the exception wrongDevice is raised; otherwise returns the position of
+           the start of the file.
+        *)
+ 
+      PROCEDURE CurrentPos (cid: ChanId): FilePos;
+        (* If the channel identified by cid is not open to a random access file,
+           the exception wrongDevice is raised; otherwise returns the position
+           of the current read/write position.
+        *)
+ 
+      PROCEDURE EndPos (cid: ChanId): FilePos;
+        (* If the channel identified by cid is not open to a random access file,
+           the exception wrongDevice is raised; otherwise returns the first
+           position after which there have been no writes.
+        *)
+ 
+      PROCEDURE NewPos (cid: ChanId; chunks: INTEGER; chunkSize: CARDINAL;
+                        from: FilePos): FilePos;
+        (* If the channel identified by cid is not open to a random access file,
+           the exception wrongDevice is raised; otherwise returns the position
+           (chunks * chunkSize) relative to the position given by from, or
+           raises the exception posRange if the required position cannot be
+           represented as a value of type FilePos.
+        *)
+ 
+      PROCEDURE SetPos (cid: ChanId; pos: FilePos);
+        (* If the channel identified by cid is not open to a random access file,
+           the exception wrongDevice is raised; otherwise sets the read/write
+           position to the value given by pos.
+        *)
+ 
+      PROCEDURE Close (VAR cid: ChanId);
+        (* If the channel identified by cid is not open to a random access file,
+           the exception wrongDevice is raised; otherwise closes the channel,
+           and assigns the value identifying the invalid channel to cid.
+        *)
+ 
+      END RndFile.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/SIOResult,  Next: gm2-libs-iso/SLongIO,  Prev: gm2-libs-iso/RndFile,  Up: M2 ISO Libraries
+ 
+ 4.4.45 gm2-libs-iso/SIOResult
+ -----------------------------
+ 
+      DEFINITION MODULE SIOResult;
+ 
+        (* Read results for the default input channel *)
+ 
+      IMPORT IOConsts;
+ 
+      TYPE
+        ReadResults = IOConsts.ReadResults;
+ 
+        (*
+          ReadResults =   (* This type is used to classify the result of an input operation *)
+          (
+            notKnown,     (* no read result is set *)
+            allRight,     (* data is as expected or as required *)
+            outOfRange,   (* data cannot be represented *)
+            wrongFormat,  (* data not in expected format *)
+            endOfLine,    (* end of line seen before expected data *)
+            endOfInput    (* end of input seen before expected data *)
+          );
+        *)
+ 
+      PROCEDURE ReadResult (): ReadResults;
+        (* Returns the result for the last read operation on the default input channel. *)
+ 
+      END SIOResult.
+ 
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/SLongIO,  Next: gm2-libs-iso/SLongWholeIO,  Prev: gm2-libs-iso/SIOResult,  Up: M2 ISO Libraries
+ 
+ 4.4.46 gm2-libs-iso/SLongIO
+ ---------------------------
+ 
+      DEFINITION MODULE SLongIO;
+ 
+        (* Input and output of long real numbers in decimal text form
+           using default channels.  The read result is of the type
+           IOConsts.ReadResults.
+        *)
+ 
+        (* The text form of a signed fixed-point real number is
+             ["+" | "-"], decimal digit, {decimal digit},
+             [".", {decimal digit}]
+ 
+           The text form of a signed floating-point real number is
+             signed fixed-point real number,
+             "E", ["+" | "-"], decimal digit, {decimal digit}
+        *)
+ 
+      PROCEDURE ReadReal (VAR real: LONGREAL);
+        (* Skips leading spaces, and removes any remaining characters
+           from the default input channel that form part of a signed
+           fixed or floating point number. The value of this number
+           is assigned to real.  The read result is set to the value
+           allRight, outOfRange, wrongFormat, endOfLine, or endOfInput.
+        *)
+ 
+      PROCEDURE WriteFloat (real: LONGREAL; sigFigs: CARDINAL;
+                            width: CARDINAL);
+        (* Writes the value of real to the default output channel in
+           floating-point text form, with sigFigs significant figures,
+           in a field of the given minimum width.
+        *)
+ 
+      PROCEDURE WriteEng (real: LONGREAL; sigFigs: CARDINAL;
+                          width: CARDINAL);
+        (* As for WriteFloat, except that the number is scaled with
+           one to three digits in the whole number part, and with an
+           exponent that is a multiple of three.
+        *)
+ 
+      PROCEDURE WriteFixed (real: LONGREAL; place: INTEGER;
+                            width: CARDINAL);
+        (* Writes the value of real to the default output channel in
+           fixed-point text form, rounded to the given place relative
+           to the decimal point, in a field of the given minimum width.
+        *)
+ 
+      PROCEDURE WriteReal (real: LONGREAL; width: CARDINAL);
+        (* Writes the value of real to the default output channel, as
+           WriteFixed if the sign and magnitude can be shown in the
+           given width, or otherwise as WriteFloat. The number of
+           places or significant digits depends on the given width.
+        *)
+ 
+      END SLongIO.
+ 
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/SLongWholeIO,  Next: gm2-libs-iso/SRawIO,  Prev: gm2-libs-iso/SLongIO,  Up: M2 ISO Libraries
+ 
+ 4.4.47 gm2-libs-iso/SLongWholeIO
+ --------------------------------
+ 
+      DEFINITION MODULE SLongWholeIO;
+ 
+        (* Input and output of whole numbers in decimal text form over
+           default channels.  The read result is of the type
+           IOConsts.ReadResults.
+        *)
+ 
+        (* The text form of a signed whole number is
+             ["+" | "-"], decimal digit, {decimal digit}
+ 
+           The text form of an unsigned whole number is
+             decimal digit, {decimal digit}
+        *)
+ 
+      PROCEDURE ReadInt (VAR int: LONGINT);
+        (* Skips leading spaces, and removes any remaining characters
+           from the default input channel that form part of a signed
+           whole number.  The value of this number is assigned
+           to int.  The read result is set to the value allRight,
+           outOfRange, wrongFormat, endOfLine, or endOfInput.
+        *)
+ 
+      PROCEDURE WriteInt (int: LONGINT; width: CARDINAL);
+        (* Writes the value of int to the default output channel in
+           text form, in a field of the given minimum width.
+        *)
+ 
+      PROCEDURE ReadCard (VAR card: LONGCARD);
+        (* Skips leading spaces, and removes any remaining characters
+           from the default input channel that form part of an
+           unsigned whole number.  The value of this number is
+           assigned to card.  The read result is set to the value
+           allRight, outOfRange, wrongFormat, endOfLine, or endOfInput.
+        *)
+ 
+      PROCEDURE WriteCard (card: LONGCARD; width: CARDINAL);
+        (* Writes the value of card to the default output channel in
+           text form, in a field of the given minimum width.
+        *)
+ 
+      END SLongWholeIO.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/SRawIO,  Next: gm2-libs-iso/SRealIO,  Prev: gm2-libs-iso/SLongWholeIO,  Up: M2 ISO Libraries
+ 
+ 4.4.48 gm2-libs-iso/SRawIO
+ --------------------------
+ 
+      DEFINITION MODULE SRawIO;
+ 
+        (* Reading and writing data over default channels using raw operations, that is, with no
+           conversion or interpretation. The read result is of the type IOConsts.ReadResults.
+        *)
+ 
+      IMPORT SYSTEM;
+ 
+      PROCEDURE Read (VAR to: ARRAY OF SYSTEM.LOC);
+        (* Reads storage units from the default input channel, and assigns them to successive
+           components of to.  The read result is set to the value allRight, wrongFormat, or
+           endOfInput.
+        *)
+ 
+      PROCEDURE Write (from: ARRAY OF SYSTEM.LOC);
+        (* Writes storage units to the default output channel from successive components of from.
+        *)
+ 
+      END SRawIO.
+ 
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/SRealIO,  Next: gm2-libs-iso/SShortIO,  Prev: gm2-libs-iso/SRawIO,  Up: M2 ISO Libraries
+ 
+ 4.4.49 gm2-libs-iso/SRealIO
+ ---------------------------
+ 
+      DEFINITION MODULE SRealIO;
+ 
+        (* Input and output of real numbers in decimal text form over
+           default channels.  The read result is of the type
+           IOConsts.ReadResults.
+        *)
+ 
+        (* The text form of a signed fixed-point real number is
+             ["+" | "-"], decimal digit, {decimal digit},
+             [".", {decimal digit}]
+ 
+           The text form of a signed floating-point real number is
+             signed fixed-point real number,
+             "E", ["+" | "-"], decimal digit, {decimal digit}
+        *)
+ 
+      PROCEDURE ReadReal (VAR real: REAL);
+        (* Skips leading spaces, and removes any remaining characters
+           from the default input channel that form part of a signed
+           fixed or floating point number. The value of this number
+           is assigned to real.  The read result is set to the value
+           allRight, outOfRange, wrongFormat, endOfLine, or endOfInput.
+        *)
+ 
+      PROCEDURE WriteFloat (real: REAL; sigFigs: CARDINAL; width: CARDINAL);
+        (* Writes the value of real to the default output channel in
+           floating-point text form, with sigFigs significant figures,
+           in a field of the given minimum width.
+        *)
+ 
+      PROCEDURE WriteEng (real: REAL; sigFigs: CARDINAL; width: CARDINAL);
+        (* As for WriteFloat, except that the number is scaled with one to
+           three digits in the whole number part, and with an exponent that
+           is a multiple of three.
+        *)
+ 
+      PROCEDURE WriteFixed (real: REAL; place: INTEGER; width: CARDINAL);
+        (* Writes the value of real to the default output channel in
+           fixed-point text form, rounded to the given place relative
+           to the decimal point, in a field of the given minimum width.
+        *)
+ 
+      PROCEDURE WriteReal (real: REAL; width: CARDINAL);
+        (* Writes the value of real to the default output channel, as
+           WriteFixed if the sign and magnitude can be shown in the
+           given width, or otherwise as WriteFloat. The number of
+           places or significant digits depends on the given width.
+        *)
+ 
+      END SRealIO.
+ 
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/SShortIO,  Next: gm2-libs-iso/SShortWholeIO,  Prev: gm2-libs-iso/SRealIO,  Up: M2 ISO Libraries
+ 
+ 4.4.50 gm2-libs-iso/SShortIO
+ ----------------------------
+ 
+      DEFINITION MODULE SShortIO;
+ 
+        (* Input and output of short real numbers in decimal text form
+           using default channels.  The read result is of the type
+           IOConsts.ReadResults.
+        *)
+ 
+        (* The text form of a signed fixed-point real number is
+             ["+" | "-"], decimal digit, {decimal digit},
+             [".", {decimal digit}]
+ 
+           The text form of a signed floating-point real number is
+             signed fixed-point real number,
+             "E", ["+" | "-"], decimal digit, {decimal digit}
+        *)
+ 
+      PROCEDURE ReadReal (VAR real: SHORTREAL);
+        (* Skips leading spaces, and removes any remaining characters
+           from the default input channel that form part of a signed
+           fixed or floating point number. The value of this number
+           is assigned to real.  The read result is set to the value
+           allRight, outOfRange, wrongFormat, endOfLine, or endOfInput.
+        *)
+ 
+      PROCEDURE WriteFloat (real: SHORTREAL; sigFigs: CARDINAL;
+                            width: CARDINAL);
+        (* Writes the value of real to the default output channel in
+           floating-point text form, with sigFigs significant figures,
+           in a field of the given minimum width.
+        *)
+ 
+      PROCEDURE WriteEng (real: SHORTREAL; sigFigs: CARDINAL;
+                          width: CARDINAL);
+        (* As for WriteFloat, except that the number is scaled with
+           one to three digits in the whole number part, and with an
+           exponent that is a multiple of three.
+        *)
+ 
+      PROCEDURE WriteFixed (real: SHORTREAL; place: INTEGER;
+                            width: CARDINAL);
+        (* Writes the value of real to the default output channel in
+           fixed-point text form, rounded to the given place relative
+           to the decimal point, in a field of the given minimum width.
+        *)
+ 
+      PROCEDURE WriteReal (real: SHORTREAL; width: CARDINAL);
+        (* Writes the value of real to the default output channel, as
+           WriteFixed if the sign and magnitude can be shown in the
+           given width, or otherwise as WriteFloat. The number of
+           places or significant digits depends on the given width.
+        *)
+ 
+      END SShortIO.
+ 
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/SShortWholeIO,  Next: gm2-libs-iso/STextIO,  Prev: gm2-libs-iso/SShortIO,  Up: M2 ISO Libraries
+ 
+ 4.4.51 gm2-libs-iso/SShortWholeIO
+ ---------------------------------
+ 
+      DEFINITION MODULE SShortWholeIO;
+ 
+        (* Input and output of whole numbers in decimal text form over
+           default channels.  The read result is of the type
+           IOConsts.ReadResults.
+        *)
+ 
+        (* The text form of a signed whole number is
+             ["+" | "-"], decimal digit, {decimal digit}
+ 
+           The text form of an unsigned whole number is
+             decimal digit, {decimal digit}
+        *)
+ 
+      PROCEDURE ReadInt (VAR int: SHORTINT);
+        (* Skips leading spaces, and removes any remaining characters
+           from the default input channel that form part of a signed
+           whole number.  The value of this number is assigned
+           to int.  The read result is set to the value allRight,
+           outOfRange, wrongFormat, endOfLine, or endOfInput.
+        *)
+ 
+      PROCEDURE WriteInt (int: SHORTINT; width: CARDINAL);
+        (* Writes the value of int to the default output channel in
+           text form, in a field of the given minimum width.
+        *)
+ 
+      PROCEDURE ReadCard (VAR card: SHORTCARD);
+        (* Skips leading spaces, and removes any remaining characters
+           from the default input channel that form part of an
+           unsigned whole number.  The value of this number is
+           assigned to card.  The read result is set to the value
+           allRight, outOfRange, wrongFormat, endOfLine, or endOfInput.
+        *)
+ 
+      PROCEDURE WriteCard (card: SHORTCARD; width: CARDINAL);
+        (* Writes the value of card to the default output channel in
+           text form, in a field of the given minimum width.
+        *)
+ 
+      END SShortWholeIO.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/STextIO,  Next: gm2-libs-iso/SWholeIO,  Prev: gm2-libs-iso/SShortWholeIO,  Up: M2 ISO Libraries
+ 
+ 4.4.52 gm2-libs-iso/STextIO
+ ---------------------------
+ 
+      DEFINITION MODULE STextIO;
+ 
+        (* Input and output of character and string types over default channels. The read result
+           is of the type IOConsts.ReadResults.
+        *)
+ 
+        (* The following procedures do not read past line marks *)
+ 
+      PROCEDURE ReadChar (VAR ch: CHAR);
+        (* If possible, removes a character from the default input stream, and assigns the
+           corresponding value to ch.  The read result is set to allRight, endOfLine or
+           endOfInput.
+        *)
+ 
+      PROCEDURE ReadRestLine (VAR s: ARRAY OF CHAR);
+        (* Removes any remaining characters from the default input stream before the next line
+           mark, copying to s as many as can be accommodated as a string value.  The read result
+           is set to the value allRight, outOfRange, endOfLine, or endOfInput.
+        *)
+ 
+      PROCEDURE ReadString (VAR s: ARRAY OF CHAR);
+        (* Removes only those characters from the default input stream before the next line mark
+           that can be accommodated in s as a string value, and copies them to s. The read result
+           is set to the value allRight, endOfLine, or endOfInput.
+        *)
+ 
+      PROCEDURE ReadToken (VAR s: ARRAY OF CHAR);
+        (* Skips leading spaces, and then removes characters from the default input stream before
+           the next space or line mark, copying to s as many as can be accommodated as a string
+           value.  The read result is set to the value allRight, outOfRange, endOfLine, or
+           endOfInput.
+        *)
+ 
+        (* The following procedure reads past the next line mark *)
+ 
+      PROCEDURE SkipLine;
+        (* Removes successive items from the default input stream up to and including the next
+           line mark or until the end of input is reached. The read result is set to the value
+           allRight, or endOfInput.
+        *)
+ 
+ 
+        (* Output procedures *)
+ 
+      PROCEDURE WriteChar (ch: CHAR);
+        (* Writes the value of ch to the default output stream. *)
+ 
+      PROCEDURE WriteLn;
+        (* Writes a line mark to the default output stream. *)
+ 
+      PROCEDURE WriteString (s: ARRAY OF CHAR);
+        (* Writes the string value of s to the default output stream. *)
+ 
+      END STextIO.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/SWholeIO,  Next: gm2-libs-iso/SYSTEM,  Prev: gm2-libs-iso/STextIO,  Up: M2 ISO Libraries
+ 
+ 4.4.53 gm2-libs-iso/SWholeIO
+ ----------------------------
+ 
+      DEFINITION MODULE SWholeIO;
+ 
+        (* Input and output of whole numbers in decimal text form over
+           default channels.  The read result is of the type
+           IOConsts.ReadResults.
+        *)
+ 
+        (* The text form of a signed whole number is
+             ["+" | "-"], decimal digit, {decimal digit}
+ 
+           The text form of an unsigned whole number is
+             decimal digit, {decimal digit}
+        *)
+ 
+      PROCEDURE ReadInt (VAR int: INTEGER);
+        (* Skips leading spaces, and removes any remaining characters
+           from the default input channel that form part of a signed
+           whole number.  The value of this number is assigned
+           to int.  The read result is set to the value allRight,
+           outOfRange, wrongFormat, endOfLine, or endOfInput.
+        *)
+ 
+      PROCEDURE WriteInt (int: INTEGER; width: CARDINAL);
+        (* Writes the value of int to the default output channel in
+           text form, in a field of the given minimum width.
+        *)
+ 
+      PROCEDURE ReadCard (VAR card: CARDINAL);
+        (* Skips leading spaces, and removes any remaining characters
+           from the default input channel that form part of an
+           unsigned whole number.  The value of this number is
+           assigned to card.  The read result is set to the value
+           allRight, outOfRange, wrongFormat, endOfLine, or endOfInput.
+        *)
+ 
+      PROCEDURE WriteCard (card: CARDINAL; width: CARDINAL);
+        (* Writes the value of card to the default output channel in
+           text form, in a field of the given minimum width.
+        *)
+ 
+      END SWholeIO.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/SYSTEM,  Next: gm2-libs-iso/Semaphores,  Prev: gm2-libs-iso/SWholeIO,  Up: M2 ISO Libraries
+ 
+ 4.4.54 gm2-libs-iso/SYSTEM
+ --------------------------
+ 
+      DEFINITION MODULE SYSTEM;
+ 
+        (* Gives access to system programming facilities that are probably
+           non portable. *)
+ 
+        (* The constants and types define underlying properties of storage *)
+ 
+      EXPORT QUALIFIED BITSPERLOC, LOCSPERWORD,
+                       LOC, ADDRESS, BYTE, WORD, INTEGER8,
+                       INTEGER16, INTEGER32, INTEGER64, CARDINAL8,
+                       CARDINAL16, CARDINAL32, CARDINAL64, WORD16,
+                       WORD32, WORD64, BITSET8, BITSET16,
+                       BITSET32, REAL32, REAL64, REAL128,
+                       COMPLEX32, COMPLEX64, COMPLEX128, CSIZE_T,
+                       CSSIZE_T,
+                       ADDADR, SUBADR, DIFADR, MAKEADR, ADR, ROTATE,
+                       SHIFT, CAST, TSIZE,
+ 
+                       (* Internal GM2 compiler functions *)
+                       ShiftVal, ShiftLeft, ShiftRight,
+                       RotateVal, RotateLeft, RotateRight,
+                       THROW, TBITSIZE ;
+ 
+      CONST
+                        (* <implementation-defined constant> ; *)
+        BITSPERLOC    = __ATTRIBUTE__ __BUILTIN__ ((BITS_PER_UNIT)) ;
+                        (* <implementation-defined constant> ; *)
+        LOCSPERWORD   = __ATTRIBUTE__ __BUILTIN__ ((UNITS_PER_WORD)) ;
+                        (* <implementation-defined constant> ; *)
+        LOCSPERBYTE = 8 DIV BITSPERLOC ;
+ 
+      (* Note that the full list of system and sized datatypes include:
+         LOC, WORD, BYTE, ADDRESS,
+ 
+         (and the non language standard target types)
+ 
+         INTEGER8, INTEGER16, INTEGER32, INTEGER64,
+         CARDINAL8, CARDINAL16, CARDINAL32, CARDINAL64,
+         WORD16, WORD32, WORD64, BITSET8, BITSET16,
+         BITSET32, REAL32, REAL64, REAL128, COMPLEX32,
+         COMPLEX64, COMPLEX128, CSIZE_T, CSSIZE_T.
+ 
+         Also note that the non-standard data types will
+         move into another module in the future.  *)
+ 
+      (*
+         All the data types and procedures below are declared internally.
+         ===============================================================
+ 
+      TYPE
+         LOC ;
+         ADDRESS ;
+         BYTE ;
+         WORD ;
+         INTEGER8 ;
+         INTEGER16 ;
+         INTEGER32 ;
+         INTEGER64 ;
+         CARDINAL8 ;
+         CARDINAL16 ;
+         CARDINAL32 ;
+         CARDINAL64 ;
+         WORD16 ;
+         WORD32 ;
+         WORD64 ;
+         BITSET8 ;
+         BITSET16 ;
+         BITSET32 ;
+         REAL32 ;
+         REAL64 ;
+         REAL128 ;
+         COMPLEX32 ;
+         COMPLEX64 ;
+         COMPLEX128 ;
+         CSIZE_T ;
+         CSSIZE_T ;
+ 
+      TYPE
+        LOC; (* A system basic type. Values are the uninterpreted
+                contents of the smallest addressable unit of storage *)
+        ADDRESS = POINTER TO LOC;
+        WORD = ARRAY [0 .. LOCSPERWORD-1] OF LOC;
+ 
+        (* BYTE and LOCSPERBYTE are provided if appropriate for machine *)
+ 
+      TYPE
+        BYTE = ARRAY [0 .. LOCSPERBYTE-1] OF LOC;
+ 
+      PROCEDURE ADDADR (addr: ADDRESS; offset: CARDINAL): ADDRESS;
+        (* Returns address given by (addr + offset), or may raise
+           an exception if this address is not valid.
+        *)
+ 
+      PROCEDURE SUBADR (addr: ADDRESS; offset: CARDINAL): ADDRESS;
+        (* Returns address given by (addr - offset), or may raise an
+           exception if this address is not valid.
+        *)
+ 
+      PROCEDURE DIFADR (addr1, addr2: ADDRESS): INTEGER;
+        (* Returns the difference between addresses (addr1 - addr2),
+           or may raise an exception if the arguments are invalid
+           or address space is non-contiguous.
+        *)
+ 
+      PROCEDURE MAKEADR (high: <some type>; ...): ADDRESS;
+        (* Returns an address constructed from a list of values whose
+           types are implementation-defined, or may raise an
+           exception if this address is not valid.
+ 
+           In GNU Modula-2, MAKEADR can take any number of arguments
+           which are mapped onto the type ADDRESS. The first parameter
+           maps onto the high address bits and subsequent parameters map
+           onto lower address bits. For example:
+ 
+           a := MAKEADR(BYTE(0FEH), BYTE(0DCH), BYTE(0BAH), BYTE(098H),
+                        BYTE(076H), BYTE(054H), BYTE(032H), BYTE(010H)) ;
+ 
+           then the value of, a, on a 64 bit machine is: 0FEDCBA9876543210H
+ 
+           The parameters do not have to be the same type, but constants
+           _must_ be typed.
+        *)
+ 
+      PROCEDURE ADR (VAR v: <anytype>): ADDRESS;
+        (* Returns the address of variable v. *)
+ 
+      PROCEDURE ROTATE (val: <a packedset type>;
+                        num: INTEGER): <type of first parameter>;
+        (* Returns a bit sequence obtained from val by rotating up/right
+           or down/right by the absolute value of num.  The direction is
+           down/right if the sign of num is negative, otherwise the direction
+           is up/left.
+        *)
+ 
+      PROCEDURE SHIFT (val: <a packedset type>;
+                       num: INTEGER): <type of first parameter>;
+        (* Returns a bit sequence obtained from val by shifting up/left
+           or down/right by the absolute value of num, introducing
+           zeros as necessary.  The direction is down/right if the sign of
+           num is negative, otherwise the direction is up/left.
+        *)
+ 
+      PROCEDURE CAST (<targettype>; val: <anytype>): <targettype>;
+        (* CAST is a type transfer function.  Given the expression
+           denoted by val, it returns a value of the type <targettype>.
+           An invalid value for the target value or a
+           physical address alignment problem may raise an exception.
+        *)
+ 
+      PROCEDURE TSIZE (<type>; ... ): CARDINAL;
+        (* Returns the number of LOCS used to store a value of the
+           specified <type>.   The extra parameters, if present,
+           are used to distinguish variants in a variant record.
+        *)
+ 
+      PROCEDURE THROW (i: INTEGER) <* noreturn *> ;
+        (*
+           THROW is a GNU extension and was not part of the PIM or ISO
+           standards.  It throws an exception which will be caught by the
+           EXCEPT block (assuming it exists).  This is a compiler builtin
+           function which interfaces to the GCC exception handling runtime
+           system.
+           GCC uses the term throw, hence the naming distinction between
+           the GCC builtin and the Modula-2 runtime library procedure Raise.
+           The later library procedure Raise will call SYSTEM.THROW after
+           performing various housekeeping activities.
+        *)
+ 
+      PROCEDURE TBITSIZE (<type>) : CARDINAL ;
+        (* Returns the minimum number of bits necessary to represent
+           <type>.  This procedure function is only useful for determining
+           the number of bits used for any type field within a packed RECORD.
+           It is not particularly useful elsewhere since <type> might be
+           optimized for speed, for example a BOOLEAN could occupy a WORD.
+        *)
+      *)
+ 
+ 
+      (* The following procedures are invoked by GNU Modula-2 to
+         shift non word set types. They are not part of ISO Modula-2
+         but are used to implement the SHIFT procedure defined above. *)
+ 
+      (*
+         ShiftVal - is a runtime procedure whose job is to implement
+                    the SHIFT procedure of ISO SYSTEM. GNU Modula-2 will
+                    inline a SHIFT of a single WORD sized set and will only
+                    call this routine for larger sets.
+      *)
+ 
+      PROCEDURE ShiftVal (VAR s, d: ARRAY OF BITSET;
+                          SetSizeInBits: CARDINAL;
+                          ShiftCount: INTEGER) ;
+ 
+ 
+      (*
+         ShiftLeft - performs the shift left for a multi word set.
+                     This procedure might be called by the back end of
+                     GNU Modula-2 depending whether amount is known at
+                     compile time.
+      *)
+ 
+      PROCEDURE ShiftLeft (VAR s, d: ARRAY OF BITSET;
+                           SetSizeInBits: CARDINAL;
+                           ShiftCount: CARDINAL) ;
+ 
+      (*
+         ShiftRight - performs the shift left for a multi word set.
+                      This procedure might be called by the back end of
+                      GNU Modula-2 depending whether amount is known at
+                      compile time.
+      *)
+ 
+      PROCEDURE ShiftRight (VAR s, d: ARRAY OF BITSET;
+                           SetSizeInBits: CARDINAL;
+                           ShiftCount: CARDINAL) ;
+ 
+ 
+      (*
+         RotateVal - is a runtime procedure whose job is to implement
+                     the ROTATE procedure of ISO SYSTEM. GNU Modula-2 will
+                     inline a ROTATE of a single WORD (or less)
+                     sized set and will only call this routine for larger
+                     sets.
+      *)
+ 
+      PROCEDURE RotateVal (VAR s, d: ARRAY OF BITSET;
+                           SetSizeInBits: CARDINAL;
+                           RotateCount: INTEGER) ;
+ 
+ 
+      (*
+         RotateLeft - performs the rotate left for a multi word set.
+                      This procedure might be called by the back end of
+                      GNU Modula-2 depending whether amount is known at
+                      compile time.
+      *)
+ 
+      PROCEDURE RotateLeft (VAR s, d: ARRAY OF BITSET;
+                            SetSizeInBits: CARDINAL;
+                            RotateCount: CARDINAL) ;
+ 
+ 
+      (*
+         RotateRight - performs the rotate right for a multi word set.
+                       This procedure might be called by the back end of
+                       GNU Modula-2 depending whether amount is known at
+                       compile time.
+      *)
+ 
+      PROCEDURE RotateRight (VAR s, d: ARRAY OF BITSET;
+                             SetSizeInBits: CARDINAL;
+                             RotateCount: CARDINAL) ;
+ 
+ 
+      END SYSTEM.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/Semaphores,  Next: gm2-libs-iso/SeqFile,  Prev: gm2-libs-iso/SYSTEM,  Up: M2 ISO Libraries
+ 
+ 4.4.55 gm2-libs-iso/Semaphores
+ ------------------------------
+ 
+      DEFINITION MODULE Semaphores;
+ 
+        (* Provides mutual exclusion facilities for use by processes. *)
+ 
+      TYPE
+        SEMAPHORE;
+ 
+      PROCEDURE Create (VAR s: SEMAPHORE; initialCount: CARDINAL );
+        (* Creates and returns s as the identity of a new semaphore that
+           has its associated count initialized to initialCount, and has
+           no processes yet waiting on it.
+        *)
+ 
+      PROCEDURE Destroy (VAR s: SEMAPHORE);
+        (* Recovers the resources used to implement the semaphore s,
+           provided that no process is waiting for s to become free.
+        *)
+ 
+      PROCEDURE Claim (s: SEMAPHORE);
+        (* If the count associated with the semaphore s is non-zero,
+           decrements this count and allows the calling process to
+           continue; otherwise suspends the calling process until
+           s is released.
+        *)
+ 
+      PROCEDURE Release (s: SEMAPHORE);
+        (* If there are any processes waiting on the semaphore s,
+           allows one of them to enter the ready state; otherwise
+           increments the count associated with s.
+        *)
+ 
+      PROCEDURE CondClaim (s: SEMAPHORE): BOOLEAN;
+        (* Returns FALSE if the call Claim(s) would cause the calling
+           process to be suspended; in this case the count associated
+           with s is not changed. Otherwise returns TRUE and the
+           associated count is decremented.
+        *)
+ 
+      END Semaphores.
+ 
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/SeqFile,  Next: gm2-libs-iso/ShortComplexMath,  Prev: gm2-libs-iso/Semaphores,  Up: M2 ISO Libraries
+ 
+ 4.4.56 gm2-libs-iso/SeqFile
+ ---------------------------
+ 
+      DEFINITION MODULE SeqFile;
+ 
+        (* Rewindable sequential files *)
+ 
+      IMPORT IOChan, ChanConsts;
+ 
+      TYPE
+        ChanId = IOChan.ChanId;
+        FlagSet = ChanConsts.FlagSet;
+        OpenResults = ChanConsts.OpenResults;
+ 
+        (* Accepted singleton values of FlagSet *)
+ 
+      CONST
+        (* input operations are requested/available *)
+        read = FlagSet{ChanConsts.readFlag};
+ 
+        (* output operations are requested/available *)
+        write = FlagSet{ChanConsts.writeFlag};
+ 
+        (* a file may/must/did exist before the channel is opened *)
+        old = FlagSet{ChanConsts.oldFlag};
+ 
+        (* text operations are requested/available *)
+        text = FlagSet{ChanConsts.textFlag};
+ 
+        (* raw operations are requested/available *)
+        raw = FlagSet{ChanConsts.rawFlag};
+ 
+      PROCEDURE OpenWrite (VAR cid: ChanId; name: ARRAY OF CHAR;
+                           flags: FlagSet; VAR res: OpenResults);
+        (*
+           Attempts to obtain and open a channel connected to a stored
+           rewindable file of the given name.
+           The write flag is implied; without the raw flag, text is
+           implied.  If successful, assigns to cid the identity of
+           the opened channel, assigns the value opened to res, and
+           selects output mode, with the write position at the start
+           of the file (i.e. the file is of zero length).
+           If a channel cannot be opened as required, the value of
+           res indicates the reason, and cid identifies the invalid
+           channel.
+        *)
+ 
+      PROCEDURE OpenAppend (VAR cid: ChanId; name: ARRAY OF CHAR;
+                            flags: FlagSet; VAR res: OpenResults);
+        (*
+           Attempts to obtain and open a channel connected to a stored
+           rewindable file of the given name.  The write and old flags
+           are implied; without the raw flag, text is implied.  If
+           successful, assigns to cid the identity of the opened channel,
+           assigns the value opened to res, and selects output mode,
+           with the write position corresponding to the length of the
+           file.  If a channel cannot be opened as required, the value
+           of res indicates the reason, and cid identifies the invalid
+           channel.
+        *)
+ 
+      PROCEDURE OpenRead (VAR cid: ChanId; name: ARRAY OF CHAR;
+                          flags: FlagSet; VAR res: OpenResults);
+        (* Attempts to obtain and open a channel connected to a stored
+           rewindable file of the given name.
+           The read and old flags are implied; without the raw flag,
+           text is implied.  If successful, assigns to cid the
+           identity of the opened channel, assigns the value opened to
+           res, and selects input mode, with the read position
+           corresponding to the start of the file.
+           If a channel cannot be opened as required, the value of
+           res indicates the reason, and cid identifies the invalid
+           channel.
+        *)
+ 
+      PROCEDURE IsSeqFile (cid: ChanId): BOOLEAN;
+        (* Tests if the channel identified by cid is open to a
+           rewindable sequential file. *)
+ 
+      PROCEDURE Reread (cid: ChanId);
+        (* If the channel identified by cid is not open to a rewindable
+           sequential file, the exception wrongDevice is raised;
+           otherwise attempts to set the read position to the
+           start of the file, and to select input mode.
+           If the operation cannot be performed (perhaps because of
+           insufficient permissions) neither input mode nor output
+           mode is selected.
+        *)
+ 
+      PROCEDURE Rewrite (cid: ChanId);
+        (* If the channel identified by cid is not open to a
+           rewindable sequential file, the exception wrongDevice is
+           raised; otherwise, attempts to truncate the file to zero
+           length, and to select output mode.  If the operation
+           cannot be performed (perhaps because of insufficient
+           permissions) neither input mode nor output mode is selected.
+        *)
+ 
+      PROCEDURE Close (VAR cid: ChanId);
+        (* If the channel identified by cid is not open to a rewindable
+           sequential file, the exception wrongDevice is raised;
+           otherwise closes the channel, and assigns the value
+           identifying the invalid channel to cid.
+        *)
+ 
+      END SeqFile.
+ 
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/ShortComplexMath,  Next: gm2-libs-iso/ShortIO,  Prev: gm2-libs-iso/SeqFile,  Up: M2 ISO Libraries
+ 
+ 4.4.57 gm2-libs-iso/ShortComplexMath
+ ------------------------------------
+ 
+      DEFINITION MODULE ShortComplexMath;
+ 
+        (* Mathematical functions for the type SHORTCOMPLEX *)
+ 
+      CONST
+        i =    CMPLX (0.0, 1.0);
+        one =  CMPLX (1.0, 0.0);
+        zero = CMPLX (0.0, 0.0);
+ 
+      PROCEDURE abs (z: SHORTCOMPLEX): SHORTREAL;
+        (* Returns the length of z *)
+ 
+      PROCEDURE arg (z: SHORTCOMPLEX): SHORTREAL;
+        (* Returns the angle that z subtends to the positive real axis *)
+ 
+      PROCEDURE conj (z: SHORTCOMPLEX): SHORTCOMPLEX;
+        (* Returns the complex conjugate of z *)
+ 
+      PROCEDURE power (base: SHORTCOMPLEX; exponent: SHORTREAL): SHORTCOMPLEX;
+        (* Returns the value of the number base raised to the power exponent *)
+ 
+      PROCEDURE sqrt (z: SHORTCOMPLEX): SHORTCOMPLEX;
+        (* Returns the principal square root of z *)
+ 
+      PROCEDURE exp (z: SHORTCOMPLEX): SHORTCOMPLEX;
+        (* Returns the complex exponential of z *)
+ 
+      PROCEDURE ln (z: SHORTCOMPLEX): SHORTCOMPLEX;
+        (* Returns the principal value of the natural logarithm of z *)
+ 
+      PROCEDURE sin (z: SHORTCOMPLEX): SHORTCOMPLEX;
+        (* Returns the sine of z *)
+ 
+      PROCEDURE cos (z: SHORTCOMPLEX): SHORTCOMPLEX;
+        (* Returns the cosine of z *)
+ 
+      PROCEDURE tan (z: SHORTCOMPLEX): SHORTCOMPLEX;
+        (* Returns the tangent of z *)
+ 
+      PROCEDURE arcsin (z: SHORTCOMPLEX): SHORTCOMPLEX;
+        (* Returns the arcsine of z *)
+ 
+      PROCEDURE arccos (z: SHORTCOMPLEX): SHORTCOMPLEX;
+        (* Returns the arccosine of z *)
+ 
+      PROCEDURE arctan (z: SHORTCOMPLEX): SHORTCOMPLEX;
+        (* Returns the arctangent of z *)
+ 
+      PROCEDURE polarToComplex (abs, arg: SHORTREAL): SHORTCOMPLEX;
+        (* Returns the complex number with the specified polar coordinates *)
+ 
+      PROCEDURE scalarMult (scalar: SHORTREAL; z: SHORTCOMPLEX): SHORTCOMPLEX;
+        (* Returns the scalar product of scalar with z *)
+ 
+      PROCEDURE IsCMathException (): BOOLEAN;
+        (* Returns TRUE if the current coroutine is in the exceptional execution state
+           because of the raising of an exception in a routine from this module; otherwise
+           returns FALSE.
+        *)
+ 
+      END ShortComplexMath.
+ 
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/ShortIO,  Next: gm2-libs-iso/ShortWholeIO,  Prev: gm2-libs-iso/ShortComplexMath,  Up: M2 ISO Libraries
+ 
+ 4.4.58 gm2-libs-iso/ShortIO
+ ---------------------------
+ 
+      DEFINITION MODULE ShortIO;
+ 
+        (* Input and output of short real numbers in decimal text form
+           over specified channels.  The read result is of the type
+           IOConsts.ReadResults.
+        *)
+ 
+      IMPORT IOChan;
+ 
+        (* The text form of a signed fixed-point real number is
+             ["+" | "-"], decimal digit, {decimal digit}, [".",
+             {decimal digit}]
+ 
+           The text form of a signed floating-point real number is
+             signed fixed-point real number,
+             "E", ["+" | "-"], decimal digit, {decimal digit}
+        *)
+ 
+      PROCEDURE ReadReal (cid: IOChan.ChanId; VAR real: SHORTREAL);
+        (* Skips leading spaces, and removes any remaining characters
+           from cid that form part of a signed fixed or floating
+           point number.  The value of this number is assigned to real.
+           The read result is set to the value allRight, outOfRange,
+           wrongFormat, endOfLine, or endOfInput.
+        *)
+ 
+      PROCEDURE WriteFloat (cid: IOChan.ChanId; real: SHORTREAL;
+                            sigFigs: CARDINAL; width: CARDINAL);
+        (* Writes the value of real to cid in floating-point text form,
+           with sigFigs significant figures, in a field of the given
+           minimum width.
+        *)
+ 
+      PROCEDURE WriteEng (cid: IOChan.ChanId; real: SHORTREAL;
+                          sigFigs: CARDINAL; width: CARDINAL);
+        (* As for WriteFloat, except that the number is scaled with
+           one to three digits in the whole number part, and with an
+           exponent that is a multiple of three.
+        *)
+ 
+      PROCEDURE WriteFixed (cid: IOChan.ChanId; real: SHORTREAL;
+                            place: INTEGER; width: CARDINAL);
+        (* Writes the value of real to cid in fixed-point text form,
+           rounded to the given place relative to the decimal point,
+           in a field of the given minimum width.
+        *)
+ 
+      PROCEDURE WriteReal (cid: IOChan.ChanId; real: SHORTREAL;
+                           width: CARDINAL);
+        (* Writes the value of real to cid, as WriteFixed if the
+           sign and magnitude can be shown in the given width, or
+           otherwise as WriteFloat.  The number of places or
+           significant digits depends on the given width.
+        *)
+ 
+      END ShortIO.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/ShortWholeIO,  Next: gm2-libs-iso/SimpleCipher,  Prev: gm2-libs-iso/ShortIO,  Up: M2 ISO Libraries
+ 
+ 4.4.59 gm2-libs-iso/ShortWholeIO
+ --------------------------------
+ 
+      DEFINITION MODULE ShortWholeIO;
+ 
+        (* Input and output of whole numbers in decimal text form
+           over specified channels.  The read result is of the
+           type IOConsts.ReadResults.
+        *)
+ 
+      IMPORT IOChan;
+ 
+        (* The text form of a signed whole number is
+             ["+" | "-"], decimal digit, {decimal digit}
+ 
+           The text form of an unsigned whole number is
+             decimal digit, {decimal digit}
+        *)
+ 
+      PROCEDURE ReadInt (cid: IOChan.ChanId; VAR int: SHORTINT);
+        (* Skips leading spaces, and removes any remaining characters
+           from cid that form part of a signed whole number.  The
+           value of this number is assigned to int.  The read result
+           is set to the value allRight, outOfRange, wrongFormat,
+           endOfLine, or endOfInput.
+        *)
+ 
+      PROCEDURE WriteInt (cid: IOChan.ChanId; int: SHORTINT;
+                          width: CARDINAL);
+        (* Writes the value of int to cid in text form, in a field of
+           the given minimum width. *)
+ 
+      PROCEDURE ReadCard (cid: IOChan.ChanId; VAR card: SHORTCARD);
+        (* Skips leading spaces, and removes any remaining characters
+           from cid that form part of an unsigned whole number.  The
+           value of this number is assigned to card. The read result
+           is set to the value allRight, outOfRange, wrongFormat,
+           endOfLine, or endOfInput.
+        *)
+ 
+      PROCEDURE WriteCard (cid: IOChan.ChanId; card: SHORTCARD;
+                           width: CARDINAL);
+        (* Writes the value of card to cid in text form, in a field
+           of the given minimum width. *)
+ 
+      END ShortWholeIO.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/SimpleCipher,  Next: gm2-libs-iso/StdChans,  Prev: gm2-libs-iso/ShortWholeIO,  Up: M2 ISO Libraries
+ 
+ 4.4.60 gm2-libs-iso/SimpleCipher
+ --------------------------------
+ 
+      DEFINITION MODULE SimpleCipher ;
+ 
+      (*
+          Description: provides a simple Caesar cipher layer which
+                       can be attached to any channel device.  This,
+                       pedagogical, module is designed to show how
+                       it is possible to add further layers underneath
+                       the channel devices.
+      *)
+ 
+      FROM IOChan IMPORT ChanId ;
+ 
+ 
+      (*
+         InsertCipherLayer - inserts a caesar cipher below channel, cid.
+                             The encryption, key, is specified.
+      *)
+ 
+      PROCEDURE InsertCipherLayer (cid: ChanId; key: INTEGER) ;
+ 
+ 
+      (*
+         RemoveCipherLayer - removes a Caesar cipher below channel, cid.
+      *)
+ 
+      PROCEDURE RemoveCipherLayer (cid: ChanId) ;
+ 
+ 
+      END SimpleCipher.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/StdChans,  Next: gm2-libs-iso/Storage,  Prev: gm2-libs-iso/SimpleCipher,  Up: M2 ISO Libraries
+ 
+ 4.4.61 gm2-libs-iso/StdChans
+ ----------------------------
+ 
+      DEFINITION MODULE StdChans;
+ 
+        (* Access to standard and default channels *)
+ 
+      IMPORT IOChan;
+ 
+      TYPE
+        ChanId = IOChan.ChanId;
+          (* Values of this type are used to identify channels *)
+ 
+        (* The following functions return the standard channel values.
+           These channels cannot be closed.
+        *)
+ 
+      PROCEDURE StdInChan (): ChanId;
+        (* Returns the identity of the implementation-defined standard source for
+      program
+           input.
+        *)
+ 
+      PROCEDURE StdOutChan (): ChanId;
+        (* Returns the identity of the implementation-defined standard source for program
+           output.
+        *)
+ 
+      PROCEDURE StdErrChan (): ChanId;
+        (* Returns the identity of the implementation-defined standard destination for program
+           error messages.
+        *)
+ 
+      PROCEDURE NullChan (): ChanId;
+        (* Returns the identity of a channel open to the null device. *)
+ 
+        (* The following functions return the default channel values *)
+ 
+      PROCEDURE InChan (): ChanId;
+        (* Returns the identity of the current default input channel. *)
+ 
+      PROCEDURE OutChan (): ChanId;
+        (* Returns the identity of the current default output channel. *)
+ 
+      PROCEDURE ErrChan (): ChanId;
+        (* Returns the identity of the current default error message channel. *)
+ 
+        (* The following procedures allow for redirection of the default channels *)
+ 
+      PROCEDURE SetInChan (cid: ChanId);
+        (* Sets the current default input channel to that identified by cid. *)
+ 
+      PROCEDURE SetOutChan (cid: ChanId);
+        (* Sets the current default output channel to that identified by cid. *)
+ 
+      PROCEDURE SetErrChan (cid: ChanId);
+        (* Sets the current default error channel to that identified by cid. *)
+ 
+      END StdChans.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/Storage,  Next: gm2-libs-iso/StreamFile,  Prev: gm2-libs-iso/StdChans,  Up: M2 ISO Libraries
+ 
+ 4.4.62 gm2-libs-iso/Storage
+ ---------------------------
+ 
+      DEFINITION MODULE Storage;
+ 
+        (* Facilities for dynamically allocating and deallocating storage *)
+ 
+      IMPORT SYSTEM;
+ 
+      PROCEDURE ALLOCATE (VAR addr: SYSTEM.ADDRESS; amount: CARDINAL);
+        (* Allocates storage for a variable of size amount and assigns
+           the address of this variable to addr. If there is insufficient
+           unallocated storage to do this, the value NIL is assigned to addr.
+        *)
+ 
+      PROCEDURE DEALLOCATE (VAR addr: SYSTEM.ADDRESS; amount: CARDINAL);
+        (* Deallocates amount locations allocated by ALLOCATE for
+           the storage of the variable addressed by addr and assigns
+           the value NIL to addr.
+        *)
+ 
+      PROCEDURE REALLOCATE (VAR addr: SYSTEM.ADDRESS; amount: CARDINAL);
+        (* Attempts to reallocate, amount of storage.  Effectively it
+           calls ALLOCATE, copies the amount of data pointed to by
+           addr into the new space and DEALLOCATES the addr.
+           This procedure is a GNU extension.
+        *)
+ 
+      TYPE
+        StorageExceptions = (
+          nilDeallocation,             (* first argument to DEALLOCATE is NIL *)
+          pointerToUnallocatedStorage, (* storage to deallocate not allocated by ALLOCATE *)
+          wrongStorageToUnallocate     (* amount to deallocate is not amount allocated *)
+        );
+ 
+      PROCEDURE IsStorageException (): BOOLEAN;
+        (* Returns TRUE if the current coroutine is in the exceptional
+           execution state because of the raising of an exception from
+           StorageExceptions; otherwise returns FALSE.
+        *)
+ 
+      PROCEDURE StorageException (): StorageExceptions;
+        (* If the current coroutine is in the exceptional execution
+           state because of the raising of an exception from
+           StorageExceptions, returns the corresponding
+           enumeration value, and otherwise raises an exception.
+        *)
+ 
+      END Storage.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/StreamFile,  Next: gm2-libs-iso/StringChan,  Prev: gm2-libs-iso/Storage,  Up: M2 ISO Libraries
+ 
+ 4.4.63 gm2-libs-iso/StreamFile
+ ------------------------------
+ 
+      DEFINITION MODULE StreamFile;
+ 
+        (* Independent sequential data streams *)
+ 
+      IMPORT IOChan, ChanConsts;
+ 
+      TYPE
+        ChanId = IOChan.ChanId;
+        FlagSet = ChanConsts.FlagSet;
+        OpenResults = ChanConsts.OpenResults;
+ 
+        (* Accepted singleton values of FlagSet *)
+ 
+      CONST
+        read = FlagSet{ChanConsts.readFlag};   (* input operations are requested/available *)
+        write = FlagSet{ChanConsts.writeFlag}; (* output operations are requested/available *)
+        old = FlagSet{ChanConsts.oldFlag};     (* a file may/must/did exist before the channel is
+                                                  opened *)
+        text = FlagSet{ChanConsts.textFlag};   (* text operations are requested/available *)
+        raw = FlagSet{ChanConsts.rawFlag};     (* raw operations are requested/available *)
+ 
+ 
+      PROCEDURE Open (VAR cid: ChanId; name: ARRAY OF CHAR;
+                      flags: FlagSet; VAR res: OpenResults);
+        (* Attempts to obtain and open a channel connected to a
+           sequential stream of the given name.
+           The read flag implies old; without the raw flag, text is
+           implied.  If successful, assigns to cid the identity of
+           the opened channel, and assigns the value opened to res.
+           If a channel cannot be opened as required, the value of
+           res indicates the reason, and cid identifies the invalid
+           channel.
+        *)
+ 
+      PROCEDURE IsStreamFile (cid: ChanId): BOOLEAN;
+        (* Tests if the channel identified by cid is open to a sequential stream. *)
+ 
+      PROCEDURE Close (VAR cid: ChanId);
+        (* If the channel identified by cid is not open to a sequential stream, the exception
+           wrongDevice is raised; otherwise closes the channel, and assigns the value identifying
+           the invalid channel to cid.
+        *)
+ 
+      END StreamFile.
+ 
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/StringChan,  Next: gm2-libs-iso/Strings,  Prev: gm2-libs-iso/StreamFile,  Up: M2 ISO Libraries
+ 
+ 4.4.64 gm2-libs-iso/StringChan
+ ------------------------------
+ 
+      DEFINITION MODULE StringChan ;
+ 
+      (*
+          Description: provides a set of Channel and String
+                       input and output procedures.
+      *)
+ 
+      FROM DynamicStrings IMPORT String ;
+      IMPORT IOChan;
+ 
+ 
+      (*
+         writeString - writes a string, s, to ChanId, cid.
+                       The string, s, is not destroyed.
+      *)
+ 
+      PROCEDURE writeString (cid: IOChan.ChanId; s: String) ;
+ 
+ 
+      (*
+         writeFieldWidth - writes a string, s, to ChanId, cid.
+                           The string, s, is not destroyed and it
+                           is prefixed by spaces so that at least,
+                           width, characters are written.  If the
+                           string, s, is longer than width then
+                           no spaces are prefixed to the output
+                           and the entire string is written.
+      *)
+ 
+      PROCEDURE writeFieldWidth (cid: IOChan.ChanId;
+                                 s: String; width: CARDINAL) ;
+ 
+ 
+      END StringChan.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/Strings,  Next: gm2-libs-iso/SysClock,  Prev: gm2-libs-iso/StringChan,  Up: M2 ISO Libraries
+ 
+ 4.4.65 gm2-libs-iso/Strings
+ ---------------------------
+ 
+      DEFINITION MODULE Strings;
+ 
+        (* Facilities for manipulating strings *)
+ 
+      TYPE
+        String1 = ARRAY [0..0] OF CHAR;
+          (* String1 is provided for constructing a value of a single-character string type from a
+             single character value in order to pass CHAR values to ARRAY OF CHAR parameters.
+          *)
+ 
+      PROCEDURE Length (stringVal: ARRAY OF CHAR): CARDINAL;
+        (* Returns the length of stringVal (the same value as would be returned by the
+           pervasive function LENGTH).
+        *)
+ 
+ 
+      (* The following seven procedures construct a string value, and attempt to assign it to a
+         variable parameter.  They all have the property that if the length of the constructed string
+         value exceeds the capacity of the variable parameter, a truncated value is assigned, while
+         if the length of the constructed string value is less than the capacity of the variable
+         parameter, a string terminator is appended before assignment is performed.
+      *)
+ 
+      PROCEDURE Assign (source: ARRAY OF CHAR; VAR destination: ARRAY OF CHAR);
+        (* Copies source to destination *)
+ 
+      PROCEDURE Extract (source: ARRAY OF CHAR; startIndex, numberToExtract: CARDINAL;
+                         VAR destination: ARRAY OF CHAR);
+        (* Copies at most numberToExtract characters from source to destination, starting at position
+           startIndex in source.
+        *)
+ 
+      PROCEDURE Delete (VAR stringVar: ARRAY OF CHAR; startIndex, numberToDelete:
+      CARDINAL);
+        (* Deletes at most numberToDelete characters from stringVar, starting at position
+           startIndex.
+        *)
+ 
+      PROCEDURE Insert (source: ARRAY OF CHAR; startIndex: CARDINAL;
+                        VAR destination: ARRAY OF CHAR);
+        (* Inserts source into destination at position startIndex *)
+ 
+      PROCEDURE Replace (source: ARRAY OF CHAR; startIndex: CARDINAL;
+                         VAR destination: ARRAY OF CHAR);
+        (* Copies source into destination, starting at position startIndex. Copying stops when
+           all of source has been copied, or when the last character of the string value in
+           destination has been replaced.
+        *)
+ 
+      PROCEDURE Append (source: ARRAY OF CHAR; VAR destination: ARRAY OF CHAR);
+        (* Appends source to destination. *)
+ 
+      PROCEDURE Concat (source1, source2: ARRAY OF CHAR; VAR destination: ARRAY OF CHAR);
+        (* Concatenates source2 onto source1 and copies the result into destination. *)
+ 
+      (* The following predicates provide for pre-testing of the operation-completion
+         conditions for the procedures above.
+      *)
+ 
+      PROCEDURE CanAssignAll (sourceLength: CARDINAL; VAR destination: ARRAY OF CHAR): BOOLEAN;
+        (* Returns TRUE if a number of characters, indicated by sourceLength, will fit into
+           destination; otherwise returns FALSE.
+        *)
+ 
+      PROCEDURE CanExtractAll (sourceLength, startIndex, numberToExtract: CARDINAL;
+                               VAR destination: ARRAY OF CHAR): BOOLEAN;
+        (* Returns TRUE if there are numberToExtract characters starting at startIndex and
+           within the sourceLength of some string, and if the capacity of destination is
+           sufficient to hold numberToExtract characters; otherwise returns FALSE.
+        *)
+ 
+      PROCEDURE CanDeleteAll (stringLength, startIndex, numberToDelete: CARDINAL): BOOLEAN;
+        (* Returns TRUE if there are numberToDelete characters starting at startIndex and
+           within the stringLength of some string; otherwise returns FALSE.
+        *)
+ 
+      PROCEDURE CanInsertAll (sourceLength, startIndex: CARDINAL;
+                              VAR destination: ARRAY OF CHAR): BOOLEAN;
+        (* Returns TRUE if there is room for the insertion of sourceLength characters from
+           some string into destination starting at startIndex; otherwise returns FALSE.
+        *)
+ 
+      PROCEDURE CanReplaceAll (sourceLength, startIndex: CARDINAL;
+                               VAR destination: ARRAY OF CHAR): BOOLEAN;
+        (* Returns TRUE if there is room for the replacement of sourceLength characters in
+           destination starting at startIndex; otherwise returns FALSE.
+        *)
+ 
+      PROCEDURE CanAppendAll (sourceLength: CARDINAL; VAR destination: ARRAY OF CHAR): BOOLEAN;
+        (* Returns TRUE if there is sufficient room in destination to append a string of
+           length sourceLength to the string in destination; otherwise returns FALSE.
+        *)
+ 
+      PROCEDURE CanConcatAll (source1Length, source2Length: CARDINAL;
+                              VAR destination: ARRAY OF CHAR): BOOLEAN;
+        (* Returns TRUE if there is sufficient room in destination for a two strings of
+           lengths source1Length and source2Length; otherwise returns FALSE.
+        *)
+ 
+      (* The following type and procedures provide for the comparison of string values, and for the
+         location of substrings within strings.
+      *)
+ 
+      TYPE
+        CompareResults = (less, equal, greater);
+ 
+      PROCEDURE Compare (stringVal1, stringVal2: ARRAY OF CHAR): CompareResults;
+        (* Returns less, equal, or greater, according as stringVal1 is lexically less than,
+           equal to, or greater than stringVal2.
+        *)
+ 
+      PROCEDURE Equal (stringVal1, stringVal2: ARRAY OF CHAR): BOOLEAN;
+        (* Returns Strings.Compare(stringVal1, stringVal2) = Strings.equal *)
+ 
+      PROCEDURE FindNext (pattern, stringToSearch: ARRAY OF CHAR; startIndex: CARDINAL;
+                          VAR patternFound: BOOLEAN; VAR posOfPattern: CARDINAL);
+        (* Looks forward for next occurrence of pattern in stringToSearch, starting the search at
+           position startIndex. If startIndex < LENGTH(stringToSearch) and pattern is found,
+           patternFound is returned as TRUE, and posOfPattern contains the start position in
+           stringToSearch of pattern. Otherwise patternFound is returned as FALSE, and posOfPattern
+           is unchanged.
+        *)
+ 
+      PROCEDURE FindPrev (pattern, stringToSearch: ARRAY OF CHAR; startIndex: CARDINAL;
+                          VAR patternFound: BOOLEAN; VAR posOfPattern: CARDINAL);
+        (* Looks backward for the previous occurrence of pattern in stringToSearch and returns the
+           position of the first character of the pattern if found. The search for the pattern
+           begins at startIndex. If pattern is found, patternFound is returned as TRUE, and
+           posOfPattern contains the start position in stringToSearch of pattern in the range
+           [0..startIndex]. Otherwise patternFound is returned as FALSE, and posOfPattern is unchanged.
+        *)
+ 
+      PROCEDURE FindDiff (stringVal1, stringVal2: ARRAY OF CHAR;
+                          VAR differenceFound: BOOLEAN; VAR posOfDifference: CARDINAL);
+        (* Compares the string values in stringVal1 and stringVal2 for differences. If they
+           are equal, differenceFound is returned as FALSE, and TRUE otherwise. If
+           differenceFound is TRUE, posOfDifference is set to the position of the first
+           difference; otherwise posOfDifference is unchanged.
+        *)
+ 
+      PROCEDURE Capitalize (VAR stringVar: ARRAY OF CHAR);
+        (* Applies the function CAP to each character of the string value in stringVar. *)
+ 
+ 
+      END Strings.
+ 
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/SysClock,  Next: gm2-libs-iso/TERMINATION,  Prev: gm2-libs-iso/Strings,  Up: M2 ISO Libraries
+ 
+ 4.4.66 gm2-libs-iso/SysClock
+ ----------------------------
+ 
+      DEFINITION MODULE SysClock;
+ 
+      (* Facilities for accessing a system clock that records the date
+         and time of day *)
+ 
+      CONST
+        maxSecondParts = 1000000 ;
+ 
+      TYPE
+        Month    = [1 .. 12];
+        Day      = [1 .. 31];
+        Hour     = [0 .. 23];
+        Min      = [0 .. 59];
+        Sec      = [0 .. 59];
+        Fraction = [0 .. maxSecondParts];
+        UTCDiff  = [-780 .. 720];
+        DateTime =
+          RECORD
+            year:      CARDINAL;
+            month:     Month;
+            day:       Day;
+            hour:      Hour;
+            minute:    Min;
+            second:    Sec;
+            fractions: Fraction;      (* parts of a second *)
+            zone:      UTCDiff;       (* Time zone differential
+                                         factor which is the number
+                                         of minutes to add to local
+                                         time to obtain UTC. *)
+            summerTimeFlag: BOOLEAN;  (* Interpretation of flag
+                                         depends on local usage. *)
+          END;
+ 
+      PROCEDURE CanGetClock(): BOOLEAN;
+      (* Tests if the clock can be read *)
+ 
+      PROCEDURE CanSetClock(): BOOLEAN;
+      (* Tests if the clock can be set *)
+ 
+      PROCEDURE IsValidDateTime(userData: DateTime): BOOLEAN;
+      (* Tests if the value of userData is a valid *)
+ 
+      PROCEDURE GetClock(VAR userData: DateTime);
+      (* Assigns local date and time of the day to userData *)
+ 
+      PROCEDURE SetClock(userData: DateTime);
+      (* Sets the system time clock to the given local date and
+         time *)
+ 
+      END SysClock.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/TERMINATION,  Next: gm2-libs-iso/TermFile,  Prev: gm2-libs-iso/SysClock,  Up: M2 ISO Libraries
+ 
+ 4.4.67 gm2-libs-iso/TERMINATION
+ -------------------------------
+ 
+      DEFINITION MODULE TERMINATION;
+ 
+      (* Provides facilities for enquiries concerning the occurrence of termination events. *)
+ 
+      PROCEDURE IsTerminating (): BOOLEAN ;
+        (* Returns true if any coroutine has started  program termination and false otherwise. *)
+ 
+      PROCEDURE HasHalted (): BOOLEAN ;
+        (* Returns true if a call to HALT has been made and false otherwise. *)
+ 
+      END TERMINATION.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/TermFile,  Next: gm2-libs-iso/TextIO,  Prev: gm2-libs-iso/TERMINATION,  Up: M2 ISO Libraries
+ 
+ 4.4.68 gm2-libs-iso/TermFile
+ ----------------------------
+ 
+      DEFINITION MODULE TermFile;
+ 
+        (* Access to the terminal device *)
+ 
+        (* Channels opened by this module are connected to a single
+           terminal device; typed characters are distributed between
+           channels according to the sequence of read requests.
+        *)
+ 
+      IMPORT IOChan, ChanConsts;
+ 
+      TYPE
+        ChanId = IOChan.ChanId;
+        FlagSet = ChanConsts.FlagSet;
+        OpenResults = ChanConsts.OpenResults;
+ 
+        (* Accepted singleton values of FlagSet *)
+ 
+      CONST
+        read = FlagSet{ChanConsts.readFlag};
+        (* input operations are requested/available *)
+        write = FlagSet{ChanConsts.writeFlag};
+        (* output operations are requested/available *)
+        text = FlagSet{ChanConsts.textFlag};
+        (* text operations are requested/available *)
+        raw = FlagSet{ChanConsts.rawFlag};
+        (* raw operations are requested/available *)
+        echo = FlagSet{ChanConsts.echoFlag};
+        (* echoing by interactive device on reading of
+           characters from input stream requested/applies
+        *)
+ 
+      PROCEDURE Open (VAR cid: ChanId; flagset: FlagSet; VAR res: OpenResults);
+        (* Attempts to obtain and open a channel connected to
+           the terminal.  Without the raw flag, text is implied.
+           Without the echo flag, line mode is requested,
+           otherwise single character mode is requested.
+           If successful, assigns to cid the identity of
+           the opened channel, and assigns the value opened to res.
+           If a channel cannot be opened as required, the value of
+           res indicates the reason, and cid identifies the
+           invalid channel.
+        *)
+ 
+      PROCEDURE IsTermFile (cid: ChanId): BOOLEAN;
+        (* Tests if the channel identified by cid is open to
+           the terminal. *)
+ 
+      PROCEDURE Close (VAR cid: ChanId);
+        (* If the channel identified by cid is not open to the terminal,
+           the exception wrongDevice is raised; otherwise closes the
+           channel and assigns the value identifying the invalid channel
+           to cid.
+        *)
+ 
+      END TermFile.
+ 
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/TextIO,  Next: gm2-libs-iso/TextUtil,  Prev: gm2-libs-iso/TermFile,  Up: M2 ISO Libraries
+ 
+ 4.4.69 gm2-libs-iso/TextIO
+ --------------------------
+ 
+      DEFINITION MODULE TextIO;
+ 
+        (* Input and output of character and string types over
+           specified channels.  The read result is of the type
+           IOConsts.ReadResults.
+        *)
+ 
+      IMPORT IOChan;
+ 
+        (* The following procedures do not read past line marks *)
+ 
+      PROCEDURE ReadChar (cid: IOChan.ChanId; VAR ch: CHAR);
+        (* If possible, removes a character from the input stream
+           cid and assigns the corresponding value to ch.  The
+           read result is set to the value allRight, endOfLine, or
+           endOfInput.
+        *)
+ 
+      PROCEDURE ReadRestLine (cid: IOChan.ChanId; VAR s: ARRAY OF CHAR);
+        (* Removes any remaining characters from the input stream
+           cid before the next line mark,  copying to s as many as
+           can be accommodated as a string value.  The read result is
+           set to the value allRight, outOfRange, endOfLine, or
+           endOfInput.
+        *)
+ 
+      PROCEDURE ReadString (cid: IOChan.ChanId; VAR s: ARRAY OF CHAR);
+        (* Removes only those characters from the input stream cid
+           before the next line mark that can be accommodated in s
+           as a string value, and copies them to s.  The read result
+           is set to the value allRight, endOfLine, or endOfInput.
+        *)
+ 
+      PROCEDURE ReadToken (cid: IOChan.ChanId; VAR s: ARRAY OF CHAR);
+        (* Skips leading spaces, and then removes characters from
+           the input stream cid before the next space or line mark,
+           copying to s as many as can be accommodated as a string
+           value.  The read result is set to the value allRight,
+           outOfRange, endOfLine, or endOfInput.
+        *)
+ 
+        (* The following procedure reads past the next line mark *)
+ 
+      PROCEDURE SkipLine (cid: IOChan.ChanId);
+        (* Removes successive items from the input stream cid up
+           to and including the next line mark, or until the end
+           of input is reached.  The read result is set to the
+           value allRight, or endOfInput.
+        *)
+ 
+        (* Output procedures *)
+ 
+      PROCEDURE WriteChar (cid: IOChan.ChanId; ch: CHAR);
+        (* Writes the value of ch to the output stream cid. *)
+ 
+      PROCEDURE WriteLn (cid: IOChan.ChanId);
+        (* Writes a line mark to the output stream cid. *)
+ 
+      PROCEDURE WriteString (cid: IOChan.ChanId; s: ARRAY OF CHAR);
+        (* Writes the string value in s to the output stream cid. *)
+ 
+      END TextIO.
+ 
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/TextUtil,  Next: gm2-libs-iso/WholeConv,  Prev: gm2-libs-iso/TextIO,  Up: M2 ISO Libraries
+ 
+ 4.4.70 gm2-libs-iso/TextUtil
+ ----------------------------
+ 
+      DEFINITION MODULE TextUtil ;
+ 
+      (*
+          Description: provides text manmipulation routines.
+      *)
+ 
+      IMPORT IOChan ;
+ 
+ 
+      (*
+         SkipSpaces - skips any spaces.
+      *)
+ 
+      PROCEDURE SkipSpaces (cid: IOChan.ChanId) ;
+ 
+ 
+      (* The following procedures do not read past line marks.  *)
+ 
+      PROCEDURE CharAvailable (cid: IOChan.ChanId) : BOOLEAN ;
+ 
+ 
+      PROCEDURE EofOrEoln (cid: IOChan.ChanId) : BOOLEAN ;
+ 
+ 
+      END TextUtil.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/WholeConv,  Next: gm2-libs-iso/WholeIO,  Prev: gm2-libs-iso/TextUtil,  Up: M2 ISO Libraries
+ 
+ 4.4.71 gm2-libs-iso/WholeConv
+ -----------------------------
+ 
+      DEFINITION MODULE WholeConv;
+ 
+        (* Low-level whole-number/string conversions *)
+ 
+      IMPORT
+        ConvTypes;
+ 
+      TYPE
+        ConvResults = ConvTypes.ConvResults;
+              (* strAllRight, strOutOfRange, strWrongFormat, strEmpty *)
+ 
+      PROCEDURE ScanInt (inputCh: CHAR;
+                         VAR chClass: ConvTypes.ScanClass;
+                         VAR nextState: ConvTypes.ScanState) ;
+        (* Represents the start state of a finite state scanner for signed
+           whole numbers - assigns class of inputCh to chClass and a
+           procedure representing the next state to nextState.
+        *)
+ 
+      PROCEDURE FormatInt (str: ARRAY OF CHAR): ConvResults;
+        (* Returns the format of the string value for conversion to INTEGER. *)
+ 
+      PROCEDURE ValueInt (str: ARRAY OF CHAR): INTEGER;
+        (* Returns the value corresponding to the signed whole number string
+           value str if str is well-formed; otherwise raises the WholeConv
+           exception.
+         *)
+ 
+      PROCEDURE LengthInt (int: INTEGER): CARDINAL;
+        (* Returns the number of characters in the string representation of
+           int.
+         *)
+ 
+      PROCEDURE ScanCard (inputCh: CHAR; VAR chClass: ConvTypes.ScanClass;
+                          VAR nextState: ConvTypes.ScanState);
+        (* Represents the start state of a finite state scanner for unsigned
+           whole numbers - assigns class of inputCh to chClass and a procedure
+           representing the next state to nextState.
+         *)
+ 
+      PROCEDURE FormatCard (str: ARRAY OF CHAR): ConvResults;
+        (* Returns the format of the string value for conversion to CARDINAL.
+         *)
+ 
+      PROCEDURE ValueCard (str: ARRAY OF CHAR): CARDINAL;
+        (* Returns the value corresponding to the unsigned whole number string
+           value str if str is well-formed; otherwise raises the WholeConv
+           exception.
+         *)
+ 
+      PROCEDURE LengthCard (card: CARDINAL): CARDINAL;
+        (* Returns the number of characters in the string representation of
+           card.
+         *)
+ 
+      PROCEDURE IsWholeConvException (): BOOLEAN;
+        (* Returns TRUE if the current coroutine is in the exceptional execution
+           state because of the raising of an exception in a routine from this
+           module; otherwise returns FALSE.
+        *)
+ 
+      END WholeConv.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/WholeIO,  Next: gm2-libs-iso/WholeStr,  Prev: gm2-libs-iso/WholeConv,  Up: M2 ISO Libraries
+ 
+ 4.4.72 gm2-libs-iso/WholeIO
+ ---------------------------
+ 
+      DEFINITION MODULE WholeIO;
+ 
+        (* Input and output of whole numbers in decimal text form
+           over specified channels.  The read result is of the
+           type IOConsts.ReadResults.
+        *)
+ 
+      IMPORT IOChan;
+ 
+        (* The text form of a signed whole number is
+             ["+" | "-"], decimal digit, {decimal digit}
+ 
+           The text form of an unsigned whole number is
+             decimal digit, {decimal digit}
+        *)
+ 
+      PROCEDURE ReadInt (cid: IOChan.ChanId; VAR int: INTEGER);
+        (* Skips leading spaces, and removes any remaining characters
+           from cid that form part of a signed whole number.  The
+           value of this number is assigned to int.  The read result
+           is set to the value allRight, outOfRange, wrongFormat,
+           endOfLine, or endOfInput.
+        *)
+ 
+      PROCEDURE WriteInt (cid: IOChan.ChanId; int: INTEGER;
+                          width: CARDINAL);
+        (* Writes the value of int to cid in text form, in a field of
+           the given minimum width. *)
+ 
+      PROCEDURE ReadCard (cid: IOChan.ChanId; VAR card: CARDINAL);
+        (* Skips leading spaces, and removes any remaining characters
+           from cid that form part of an unsigned whole number.  The
+           value of this number is assigned to card. The read result
+           is set to the value allRight, outOfRange, wrongFormat,
+           endOfLine, or endOfInput.
+        *)
+ 
+      PROCEDURE WriteCard (cid: IOChan.ChanId; card: CARDINAL;
+                           width: CARDINAL);
+        (* Writes the value of card to cid in text form, in a field
+           of the given minimum width. *)
+ 
+      END WholeIO.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/WholeStr,  Next: gm2-libs-iso/wrapclock,  Prev: gm2-libs-iso/WholeIO,  Up: M2 ISO Libraries
+ 
+ 4.4.73 gm2-libs-iso/WholeStr
+ ----------------------------
+ 
+      DEFINITION MODULE WholeStr;
+ 
+        (* Whole-number/string conversions *)
+ 
+      IMPORT
+        ConvTypes;
+ 
+      TYPE
+        ConvResults = ConvTypes.ConvResults;
+        (* strAllRight, strOutOfRange, strWrongFormat, strEmpty *)
+ 
+      (* the string form of a signed whole number is
+           ["+" | "-"], decimal digit, {decimal digit}
+      *)
+ 
+      PROCEDURE StrToInt (str: ARRAY OF CHAR; VAR int: INTEGER;
+                          VAR res: ConvResults);
+        (* Ignores any leading spaces in str. If the subsequent
+           characters in str are in the format of a signed whole
+           number, assigns a corresponding value to int. Assigns
+           a value indicating the format of str to res.
+        *)
+ 
+      PROCEDURE IntToStr (int: INTEGER; VAR str: ARRAY OF CHAR);
+        (* Converts the value of int to string form and copies the
+           possibly truncated result to str. *)
+ 
+      (* the string form of an unsigned whole number is
+           decimal digit, {decimal digit}
+      *)
+ 
+      PROCEDURE StrToCard (str: ARRAY OF CHAR;
+                           VAR card: CARDINAL;
+                           VAR res: ConvResults);
+        (* Ignores any leading spaces in str. If the subsequent
+           characters in str are in the format of an unsigned
+           whole number, assigns a corresponding value to card.
+           Assigns a value indicating the format of str to res.
+        *)
+ 
+      PROCEDURE CardToStr (card: CARDINAL; VAR str: ARRAY OF CHAR);
+        (* Converts the value of card to string form and copies the
+           possibly truncated result to str. *)
+ 
+      END WholeStr.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/wrapclock,  Next: gm2-libs-iso/wrapsock,  Prev: gm2-libs-iso/WholeStr,  Up: M2 ISO Libraries
+ 
+ 4.4.74 gm2-libs-iso/wrapclock
+ -----------------------------
+ 
+      DEFINITION MODULE wrapclock ;
+ 
+      FROM SYSTEM IMPORT ADDRESS ;
+ 
+      TYPE
+         timespec = ADDRESS ;
+ 
+ 
+      (*
+         timezone - return the glibc timezone value.
+                    This contains the difference between UTC and the latest
+                    local standard time, in seconds west of UTC.
+                    If the underlying timezone is unavailable and
+                    clock_gettime, localtime_r, tm_gmtoff
+                    is unavailable then 0 is returned.
+      *)
+ 
+      PROCEDURE timezone () : LONGINT ;
+ 
+ 
+      (*
+         istimezone returns 1 if timezone in wrapclock.cc can resolve the
+                    timezone value using the timezone C library call or by using
+                    clock_gettime, localtime_r and tm_gmtoff.
+      *)
+ 
+      PROCEDURE istimezone () : INTEGER ;
+ 
+ 
+      (*
+         daylight - return the glibc daylight value.
+                    This variable has a nonzero value if Daylight Saving
+                    Time rules apply.
+                    A nonzero value does not necessarily mean that Daylight
+                    Saving Time is now in effect; it means only that Daylight
+                    Saving Time is sometimes in effect.
+      *)
+ 
+      PROCEDURE daylight () : INTEGER ;
+ 
+ 
+      (*
+         isdst - returns 1 if daylight saving time is currently in effect and
+                 returns 0 if it is not.
+      *)
+ 
+      PROCEDURE isdst () : INTEGER ;
+ 
+ 
+      (*
+         tzname - returns the string associated with the local timezone.
+                  The daylight value is 0 or 1.  The value 0 returns the non
+                  daylight saving timezone string and the value of 1 returns
+                  the daylight saving timezone string.
+      *)
+ 
+      PROCEDURE tzname (daylight: INTEGER) : ADDRESS ;
+ 
+ 
+      (*
+         InitTimespec - returns a newly created opaque type.
+      *)
+ 
+      PROCEDURE InitTimespec () : timespec ;
+ 
+ 
+      (*
+         KillTimespec - deallocates the memory associated with an
+                        opaque type.
+      *)
+ 
+      PROCEDURE KillTimespec (tv: timespec) : timespec ;
+ 
+ 
+      (*
+         GetTimespec - retrieves the number of seconds and nanoseconds
+                       from the timespec.  A return value of 0 means timespec
+                       is unavailable and a return value of 1 indicates success.
+      *)
+ 
+      PROCEDURE GetTimespec (ts: timespec; VAR sec, nano: LONGCARD) : INTEGER ;
+ 
+ 
+      (*
+         SetTimespec - sets the number of seconds and nanoseconds
+                       into timespec.  A return value of 0 means timespec
+                       is unavailable and a return value of 1 indicates success.
+      *)
+ 
+      PROCEDURE SetTimespec (ts: timespec; sec, nano: LONGCARD) : INTEGER ;
+ 
+ 
+      (*
+         GetTimeRealtime - performs return gettime (CLOCK_REALTIME, ts).
+                           gettime returns 0 on success and -1 on failure.
+                           If the underlying system does not have gettime
+                           then GetTimeRealtime returns 1.
+      *)
+ 
+      PROCEDURE GetTimeRealtime (ts: timespec) : INTEGER ;
+ 
+ 
+      (*
+         SetTimeRealtime - performs return settime (CLOCK_REALTIME, ts).
+                           gettime returns 0 on success and -1 on failure.
+                           If the underlying system does not have gettime
+                           then SetTimeRealtime returns 1.
+      *)
+ 
+      PROCEDURE SetTimeRealtime (ts: timespec) : INTEGER ;
+ 
+ 
+      END wrapclock.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/wrapsock,  Next: gm2-libs-iso/wraptime,  Prev: gm2-libs-iso/wrapclock,  Up: M2 ISO Libraries
+ 
+ 4.4.75 gm2-libs-iso/wrapsock
+ ----------------------------
+ 
+      DEFINITION MODULE wrapsock ;
+ 
+      (*
+          Description: provides a set of wrappers to some client side
+                       tcp socket primatives.
+      *)
+ 
+      FROM SYSTEM IMPORT ADDRESS ;
+      FROM ChanConsts IMPORT OpenResults ;
+ 
+ 
+      TYPE
+         clientInfo = ADDRESS ;
+ 
+ 
+      (*
+         clientOpen - returns an ISO Modula-2 OpenResult.
+                      It attempts to connect to:  hostname:portNo.
+                      If successful then the data structure, c,
+                      will have its fields initialized.
+      *)
+ 
+      PROCEDURE clientOpen (c: clientInfo;
+                            hostname: ADDRESS;
+                            length: CARDINAL;
+                            portNo: CARDINAL) : OpenResults ;
+ 
+ 
+      (*
+         clientOpenIP - returns an ISO Modula-2 OpenResult.
+                        It attempts to connect to:  ipaddress:portNo.
+                        If successful then the data structure, c,
+                        will have its fields initialized.
+      *)
+ 
+      PROCEDURE clientOpenIP (c: clientInfo;
+                              ip: CARDINAL;
+                              portNo: CARDINAL) : OpenResults ;
+ 
+ 
+      (*
+         getClientPortNo - returns the portNo from structure, c.
+      *)
+ 
+      PROCEDURE getClientPortNo (c: clientInfo) : CARDINAL ;
+ 
+ 
+      (*
+         getClientHostname - fills in the hostname of the server
+                             the to which the client is connecting.
+      *)
+ 
+      PROCEDURE getClientHostname (c: clientInfo;
+                                   hostname: ADDRESS; high: CARDINAL) ;
+ 
+ 
+      (*
+         getClientSocketFd - returns the sockFd from structure, c.
+      *)
+ 
+      PROCEDURE getClientSocketFd (c: clientInfo) : INTEGER ;
+ 
+ 
+      (*
+         getClientIP - returns the sockFd from structure, s.
+      *)
+ 
+      PROCEDURE getClientIP (c: clientInfo) : CARDINAL ;
+ 
+ 
+      (*
+         getPushBackChar - returns TRUE if a pushed back character
+                           is available.
+      *)
+ 
+      PROCEDURE getPushBackChar (c: clientInfo; VAR ch: CHAR) : BOOLEAN ;
+ 
+ 
+      (*
+         setPushBackChar - returns TRUE if it is able to push back a
+                           character.
+      *)
+ 
+      PROCEDURE setPushBackChar (c: clientInfo; ch: CHAR) : BOOLEAN ;
+ 
+ 
+      (*
+         getSizeOfClientInfo - returns the sizeof (opaque data type).
+      *)
+ 
+      PROCEDURE getSizeOfClientInfo () : CARDINAL ;
+ 
+ 
+      END wrapsock.
+ 
+ 
+ File: m2.info,  Node: gm2-libs-iso/wraptime,  Prev: gm2-libs-iso/wrapsock,  Up: M2 ISO Libraries
+ 
+ 4.4.76 gm2-libs-iso/wraptime
+ ----------------------------
+ 
+      DEFINITION MODULE wraptime ;
+ 
+      (*
+          Description: provides an interface to various time related
+                       entities on the underlying host operating system.
+                       It provides access to the glibc/libc functions:
+                       gettimeofday, settimeofday and localtime_r.
+      *)
+ 
+      FROM SYSTEM IMPORT ADDRESS ;
+ 
+      TYPE
+         timeval  = ADDRESS ;
+         timezone = ADDRESS ;
+         tm       = ADDRESS ;
+ 
+ 
+      (*
+         InitTimeval - returns a newly created opaque type.
+      *)
+ 
+      PROCEDURE InitTimeval () : timeval ;
+ 
+ 
+      (*
+         KillTimeval - deallocates the memory associated with an
+                       opaque type.
+      *)
+ 
+      PROCEDURE KillTimeval (tv: timeval) : timeval ;
+ 
+ 
+      (*
+         InitTimezone - returns a newly created opaque type.
+      *)
+ 
+      PROCEDURE InitTimezone () : timezone ;
+ 
+ 
+      (*
+         KillTimezone - deallocates the memory associated with an
+                        opaque type.
+      *)
+ 
+      PROCEDURE KillTimezone (tv: timezone) : timezone ;
+ 
+ 
+      (*
+         InitTM - returns a newly created opaque type.
+      *)
+ 
+      PROCEDURE InitTM () : tm ;
+ 
+ 
+      (*
+         KillTM - deallocates the memory associated with an
+                  opaque type.
+      *)
+ 
+      PROCEDURE KillTM (tv: tm) : tm ;
+ 
+ 
+      (*
+         gettimeofday - calls gettimeofday(2) with the same parameters, tv,
+                        and, tz.  It returns 0 on success.
+      *)
+ 
+      PROCEDURE gettimeofday (tv: timeval; tz: timezone) : INTEGER ;
+ 
+ 
+      (*
+         settimeofday - calls settimeofday(2) with the same parameters, tv,
+                        and, tz.  It returns 0 on success.
+      *)
+ 
+      PROCEDURE settimeofday (tv: timeval; tz: timezone) : INTEGER ;
+ 
+ 
+      (*
+         GetFractions - returns the tv_usec field inside the timeval structure
+                        as a CARDINAL.
+      *)
+ 
+      PROCEDURE GetFractions (tv: timeval) : CARDINAL ;
+ 
+ 
+      (*
+         localtime_r - returns the tm parameter, m, after it has been assigned with
+                       appropriate contents determined by, tv.  Notice that
+                       this procedure function expects, timeval, as its first
+                       parameter and not a time_t (as expected by the posix
+                       equivalent).  This avoids having to expose a time_t
+                       system dependant definition.
+      *)
+ 
+      PROCEDURE localtime_r (tv: timeval; m: tm) : tm ;
+ 
+ 
+      (*
+         GetYear - returns the year from the structure, m.
+      *)
+ 
+      PROCEDURE GetYear (m: tm) : CARDINAL ;
+ 
+ 
+      (*
+         GetMonth - returns the month from the structure, m.
+      *)
+ 
+      PROCEDURE GetMonth (m: tm) : CARDINAL ;
+ 
+ 
+      (*
+         GetDay - returns the day of the month from the structure, m.
+      *)
+ 
+      PROCEDURE GetDay (m: tm) : CARDINAL ;
+ 
+ 
+      (*
+         GetHour - returns the hour of the day from the structure, m.
+      *)
+ 
+      PROCEDURE GetHour (m: tm) : CARDINAL ;
+ 
+ 
+      (*
+         GetMinute - returns the minute within the hour from the structure, m.
+      *)
+ 
+      PROCEDURE GetMinute (m: tm) : CARDINAL ;
+ 
+ 
+      (*
+         GetSecond - returns the seconds in the minute from the structure, m.
+                     The return value will always be in the range 0..59.
+                     A leap minute of value 60 will be truncated to 59.
+      *)
+ 
+      PROCEDURE GetSecond (m: tm) : CARDINAL ;
+ 
+ 
+      (*
+         GetSummerTime - returns a boolean indicating whether summer time is
+                         set.
+      *)
+ 
+      PROCEDURE GetSummerTime (tz: timezone) : BOOLEAN ;
+ 
+ 
+      (*
+         GetDST - returns the number of minutes west of GMT.
+      *)
+ 
+      PROCEDURE GetDST (tz: timezone) : INTEGER ;
+ 
+ 
+      (*
+         SetTimeval - sets the fields in timeval, tv, with:
+                      second, minute, hour, day, month, year, fractions.
+      *)
+ 
+      PROCEDURE SetTimeval (tv: timeval;
+                            second, minute, hour, day,
+                            month, year, yday, wday, isdst: CARDINAL) ;
+ 
+ 
+      (*
+         SetTimezone - set the timezone field inside timeval, tv.
+      *)
+ 
+      PROCEDURE SetTimezone (tv: timeval;
+                             zone: CARDINAL; minuteswest: INTEGER) ;
+ 
+ 
+      END wraptime.
+ 
+ 
+ File: m2.info,  Node: Indices,  Prev: Libraries,  Up: Top
+ 
+ 4.5 Indices
+ ===========
+ 
+ [index]
+ * Menu:
+ 
+ * __cxa_begin_catch:                     gm2-libs/cxxabi.     (line  15)
+ * __cxa_end_catch:                       gm2-libs/cxxabi.     (line  16)
+ * __cxa_rethrow:                         gm2-libs/cxxabi.     (line  17)
+ * abort:                                 gm2-libs/libc.       (line  92)
+ * ABS:                                   Standard procedures. (line  25)
+ * abs:                                   gm2-libs-iso/ComplexMath.
+                                                               (line  15)
+ * abs <1>:                               gm2-libs-iso/LongComplexMath.
+                                                               (line  15)
+ * abs <2>:                               gm2-libs-iso/ShortComplexMath.
+                                                               (line  15)
+ * ack (const):                           gm2-libs/ASCII.      (line  22)
+ * acos:                                  gm2-libs/libm.       (line  43)
+ * acosf:                                 gm2-libs/libm.       (line  45)
+ * acosl:                                 gm2-libs/libm.       (line  44)
+ * Activate:                              gm2-libs-iso/Processes.
+                                                               (line  56)
+ * ActualParameters (ebnf):               EBNF.                (line 274)
+ * Add:                                   gm2-libs/DynamicStrings.
+                                                               (line 115)
+ * ADDADR:                                The ISO system module.
+                                                               (line  94)
+ * ADDADR <1>:                            gm2-libs-iso/SYSTEM. (line  94)
+ * AddLongOption:                         gm2-libs/GetOpt.     (line  68)
+ * AddOperator (ebnf):                    EBNF.                (line  72)
+ * ADDRESS (type):                        The PIM system module.
+                                                               (line  43)
+ * ADDRESS (type) <1>:                    The ISO system module.
+                                                               (line  57)
+ * ADDRESS (type) <2>:                    The ISO system module.
+                                                               (line  86)
+ * ADDRESS (type) <3>:                    gm2-libs/SYSTEM.     (line  43)
+ * ADDRESS (type) <4>:                    gm2-libs-iso/SYSTEM. (line  57)
+ * ADDRESS (type) <5>:                    gm2-libs-iso/SYSTEM. (line  86)
+ * ADR:                                   The PIM system module.
+                                                               (line  73)
+ * ADR <1>:                               The ISO system module.
+                                                               (line 129)
+ * ADR <2>:                               gm2-libs/SYSTEM.     (line  73)
+ * ADR <3>:                               gm2-libs-coroutines/SYSTEM.
+                                                               (line 156)
+ * ADR <4>:                               gm2-libs-iso/SYSTEM. (line 129)
+ * Again:                                 gm2-libs-log/FileSystem.
+                                                               (line 168)
+ * Alignment (ebnf):                      EBNF.                (line 124)
+ * alloca:                                Built-ins.           (line 196)
+ * alloca <1>:                            gm2-libs/Builtins.   (line 143)
+ * alloca <2>:                            gm2-libs/cbuiltin.   (line  49)
+ * ALLOCATE:                              gm2-libs/Storage.    (line  19)
+ * ALLOCATE <1>:                          gm2-libs/SysStorage. (line  21)
+ * ALLOCATE <2>:                          gm2-libs-iso/Storage.
+                                                               (line  12)
+ * AllocateDeviceId:                      gm2-libs-iso/IOLink. (line  18)
+ * AllocateSource:                        gm2-libs-iso/EXCEPTIONS.
+                                                               (line  18)
+ * alloca_trace:                          Built-ins.           (line 260)
+ * alloca_trace <1>:                      gm2-libs/Builtins.   (line 207)
+ * Append:                                gm2-libs-iso/Strings.
+                                                               (line  55)
+ * arccos:                                gm2-libs-iso/ComplexMath.
+                                                               (line  48)
+ * arccos <1>:                            gm2-libs-iso/LongComplexMath.
+                                                               (line  48)
+ * arccos <2>:                            gm2-libs-iso/LongMath.
+                                                               (line  37)
+ * arccos <3>:                            gm2-libs-iso/RealMath.
+                                                               (line  37)
+ * arccos <4>:                            gm2-libs-iso/ShortComplexMath.
+                                                               (line  48)
+ * arcsin:                                gm2-libs-iso/ComplexMath.
+                                                               (line  45)
+ * arcsin <1>:                            gm2-libs-iso/LongComplexMath.
+                                                               (line  45)
+ * arcsin <2>:                            gm2-libs-iso/LongMath.
+                                                               (line  34)
+ * arcsin <3>:                            gm2-libs-iso/RealMath.
+                                                               (line  34)
+ * arcsin <4>:                            gm2-libs-iso/ShortComplexMath.
+                                                               (line  45)
+ * arctan:                                gm2-libs/LMathLib0.  (line  19)
+ * arctan <1>:                            gm2-libs/MathLib0.   (line  19)
+ * arctan <2>:                            gm2-libs/SMathLib0.  (line  19)
+ * arctan <3>:                            gm2-libs-iso/ComplexMath.
+                                                               (line  51)
+ * arctan <4>:                            gm2-libs-iso/LongComplexMath.
+                                                               (line  51)
+ * arctan <5>:                            gm2-libs-iso/LongMath.
+                                                               (line  40)
+ * arctan <6>:                            gm2-libs-iso/RealMath.
+                                                               (line  40)
+ * arctan <7>:                            gm2-libs-iso/ShortComplexMath.
+                                                               (line  51)
+ * arg:                                   gm2-libs-iso/ComplexMath.
+                                                               (line  18)
+ * arg <1>:                               gm2-libs-iso/LongComplexMath.
+                                                               (line  18)
+ * arg <2>:                               gm2-libs-iso/ShortComplexMath.
+                                                               (line  18)
+ * ArgChan:                               gm2-libs-iso/ProgramArgs.
+                                                               (line  15)
+ * ArgCVEnvP (type):                      gm2-libs/M2Dependent.
+                                                               (line  12)
+ * ArgCVEnvP (type) <1>:                  gm2-libs/M2RTS.      (line  12)
+ * ArgCVEnvP (type) <2>:                  gm2-libs-iso/M2RTS.  (line  12)
+ * ArmEvent:                              gm2-libs-coroutines/TimerHandler.
+                                                               (line  43)
+ * ArraySetRecordValue (ebnf):            EBNF.                (line  98)
+ * ArrayType (ebnf):                      EBNF.                (line 149)
+ * asin:                                  gm2-libs/libm.       (line  40)
+ * asinf:                                 gm2-libs/libm.       (line  42)
+ * asinl:                                 gm2-libs/libm.       (line  41)
+ * AsmElement (ebnf):                     EBNF.                (line 478)
+ * AsmList (ebnf):                        EBNF.                (line 474)
+ * AsmOperandName (ebnf):                 EBNF.                (line 466)
+ * AsmOperands (ebnf):                    EBNF.                (line 471)
+ * AsmStatement (ebnf):                   EBNF.                (line 460)
+ * Assert:                                gm2-libs/Assertion.  (line  16)
+ * Assign:                                gm2-libs/DynamicStrings.
+                                                               (line 101)
+ * Assign <1>:                            gm2-libs-log/Strings.
+                                                               (line  15)
+ * Assign <2>:                            gm2-libs-iso/Strings.
+                                                               (line  29)
+ * AssignmentException:                   gm2-libs/M2RTS.      (line 152)
+ * AssignmentException <1>:               gm2-libs-iso/M2RTS.  (line 160)
+ * AssignmentOrProcedureCall (ebnf):      EBNF.                (line 291)
+ * AssignRead:                            gm2-libs-log/Termbase.
+                                                               (line  32)
+ * AssignWrite:                           gm2-libs-log/Termbase.
+                                                               (line  67)
+ * atan:                                  gm2-libs/libm.       (line  46)
+ * atan2:                                 Built-ins.           (line  82)
+ * atan2 <1>:                             gm2-libs/Builtins.   (line  29)
+ * atan2 <2>:                             gm2-libs/cbuiltin.   (line  64)
+ * atan2 <3>:                             gm2-libs/libm.       (line  49)
+ * atan2f:                                Built-ins.           (line  81)
+ * atan2f <1>:                            gm2-libs/Builtins.   (line  28)
+ * atan2f <2>:                            gm2-libs/cbuiltin.   (line  63)
+ * atan2f <3>:                            gm2-libs/libm.       (line  51)
+ * atan2l:                                Built-ins.           (line  83)
+ * atan2l <1>:                            gm2-libs/Builtins.   (line  30)
+ * atan2l <2>:                            gm2-libs/cbuiltin.   (line  65)
+ * atan2l <3>:                            gm2-libs/libm.       (line  50)
+ * atanf:                                 gm2-libs/libm.       (line  48)
+ * atanl:                                 gm2-libs/libm.       (line  47)
+ * atexit:                                gm2-libs/libc.       (line 439)
+ * ATTACH:                                gm2-libs-iso/COROUTINES.
+                                                               (line  51)
+ * Attach:                                gm2-libs-iso/Processes.
+                                                               (line  86)
+ * AttachVector:                          gm2-libs/RTint.      (line  66)
+ * AttributeExpression (ebnf):            EBNF.                (line 168)
+ * AttributeNoReturn (ebnf):              EBNF.                (line 344)
+ * AttributeUnused (ebnf):                EBNF.                (line 347)
+ * Available:                             gm2-libs/Storage.    (line  45)
+ * Available <1>:                         gm2-libs/SysStorage. (line  47)
+ * BaseExceptionsThrow:                   gm2-libs/RTExceptions.
+                                                               (line 123)
+ * bel (const):                           gm2-libs/ASCII.      (line  22)
+ * BinToStr:                              gm2-libs/NumberIO.   (line  51)
+ * BITSET16 (type):                       The PIM system module.
+                                                               (line  56)
+ * BITSET16 (type) <1>:                   The ISO system module.
+                                                               (line  72)
+ * BITSET16 (type) <2>:                   gm2-libs/SYSTEM.     (line  56)
+ * BITSET16 (type) <3>:                   gm2-libs-iso/SYSTEM. (line  72)
+ * BITSET32 (type):                       The PIM system module.
+                                                               (line  57)
+ * BITSET32 (type) <1>:                   The ISO system module.
+                                                               (line  73)
+ * BITSET32 (type) <2>:                   gm2-libs/SYSTEM.     (line  57)
+ * BITSET32 (type) <3>:                   gm2-libs-iso/SYSTEM. (line  73)
+ * BITSET8 (type):                        The PIM system module.
+                                                               (line  55)
+ * BITSET8 (type) <1>:                    The ISO system module.
+                                                               (line  71)
+ * BITSET8 (type) <2>:                    gm2-libs/SYSTEM.     (line  55)
+ * BITSET8 (type) <3>:                    gm2-libs-iso/SYSTEM. (line  71)
+ * BITSPERBYTE (const):                   The PIM system module.
+                                                               (line  20)
+ * BITSPERBYTE (const) <1>:               gm2-libs/SYSTEM.     (line  20)
+ * BITSPERLOC (const):                    The ISO system module.
+                                                               (line  31)
+ * BITSPERLOC (const) <1>:                gm2-libs-iso/SYSTEM. (line  31)
+ * Block (ebnf):                          EBNF.                (line 364)
+ * BlockAnd:                              gm2-libs-log/BitBlockOps.
+                                                               (line  18)
+ * BlockBody (ebnf):                      EBNF.                (line 373)
+ * BlockClear:                            gm2-libs-log/BlockOps.
+                                                               (line  35)
+ * BlockEqual:                            gm2-libs-log/BlockOps.
+                                                               (line  52)
+ * BlockMoveBackward:                     gm2-libs-log/BlockOps.
+                                                               (line  28)
+ * BlockMoveForward:                      gm2-libs-log/BlockOps.
+                                                               (line  17)
+ * BlockNot:                              gm2-libs-log/BitBlockOps.
+                                                               (line  44)
+ * BlockOr:                               gm2-libs-log/BitBlockOps.
+                                                               (line  27)
+ * BlockPosition:                         gm2-libs-log/BlockOps.
+                                                               (line  65)
+ * BlockRol:                              gm2-libs-log/BitBlockOps.
+                                                               (line 108)
+ * BlockRor:                              gm2-libs-log/BitBlockOps.
+                                                               (line  92)
+ * BlockSet:                              gm2-libs-log/BlockOps.
+                                                               (line  43)
+ * BlockShl:                              gm2-libs-log/BitBlockOps.
+                                                               (line  76)
+ * BlockShr:                              gm2-libs-log/BitBlockOps.
+                                                               (line  60)
+ * BlockXor:                              gm2-libs-log/BitBlockOps.
+                                                               (line  36)
+ * Body (type):                           gm2-libs-iso/Processes.
+                                                               (line  18)
+ * bs (const):                            gm2-libs/ASCII.      (line  23)
+ * bstoc:                                 gm2-libs/StringConvert.
+                                                               (line 222)
+ * bstoi:                                 gm2-libs/StringConvert.
+                                                               (line 201)
+ * BufferedMode:                          gm2-libs/IO.         (line  36)
+ * Builtin (ebnf):                        EBNF.                (line 350)
+ * BYTE (type):                           The PIM system module.
+                                                               (line  42)
+ * BYTE (type) <1>:                       The ISO system module.
+                                                               (line  58)
+ * BYTE (type) <2>:                       The ISO system module.
+                                                               (line  92)
+ * BYTE (type) <3>:                       gm2-libs/SYSTEM.     (line  42)
+ * BYTE (type) <4>:                       gm2-libs-iso/SYSTEM. (line  58)
+ * BYTE (type) <5>:                       gm2-libs-iso/SYSTEM. (line  92)
+ * ByteAlignment (ebnf):                  EBNF.                (line 121)
+ * ByteAnd:                               gm2-libs-log/BitByteOps.
+                                                               (line  33)
+ * ByteNot:                               gm2-libs-log/BitByteOps.
+                                                               (line  54)
+ * ByteOr:                                gm2-libs-log/BitByteOps.
+                                                               (line  40)
+ * ByteRol:                               gm2-libs-log/BitByteOps.
+                                                               (line  94)
+ * ByteRor:                               gm2-libs-log/BitByteOps.
+                                                               (line  86)
+ * ByteSar:                               gm2-libs-log/BitByteOps.
+                                                               (line  78)
+ * ByteShl:                               gm2-libs-log/BitByteOps.
+                                                               (line  70)
+ * ByteShr:                               gm2-libs-log/BitByteOps.
+                                                               (line  62)
+ * BYTESPERWORD (const):                  The PIM system module.
+                                                               (line  21)
+ * BYTESPERWORD (const) <1>:              gm2-libs/SYSTEM.     (line  21)
+ * ByteXor:                               gm2-libs-log/BitByteOps.
+                                                               (line  47)
+ * cabs:                                  Built-ins.           (line 141)
+ * cabs <1>:                              gm2-libs/Builtins.   (line  88)
+ * cabs <2>:                              gm2-libs/cbuiltin.   (line 117)
+ * cabsf:                                 Built-ins.           (line 140)
+ * cabsf <1>:                             gm2-libs/Builtins.   (line  87)
+ * cabsf <2>:                             gm2-libs/cbuiltin.   (line 116)
+ * cabsl:                                 Built-ins.           (line 142)
+ * cabsl <1>:                             gm2-libs/Builtins.   (line  89)
+ * cabsl <2>:                             gm2-libs/cbuiltin.   (line 118)
+ * cacos:                                 gm2-libs/cbuiltin.   (line 161)
+ * cacosf:                                gm2-libs/cbuiltin.   (line 160)
+ * cacosl:                                gm2-libs/cbuiltin.   (line 162)
+ * can (const):                           gm2-libs/ASCII.      (line  27)
+ * CanAppendAll:                          gm2-libs-iso/Strings.
+                                                               (line  94)
+ * CanAssignAll:                          gm2-libs-iso/Strings.
+                                                               (line  65)
+ * Cancel:                                gm2-libs-coroutines/TimerHandler.
+                                                               (line  67)
+ * CanConcatAll:                          gm2-libs-iso/Strings.
+                                                               (line  99)
+ * CanDeleteAll:                          gm2-libs-iso/Strings.
+                                                               (line  77)
+ * CanExtractAll:                         gm2-libs-iso/Strings.
+                                                               (line  70)
+ * CanGetClock:                           gm2-libs-iso/SysClock.
+                                                               (line  39)
+ * CanInsertAll:                          gm2-libs-iso/Strings.
+                                                               (line  82)
+ * CanReplaceAll:                         gm2-libs-iso/Strings.
+                                                               (line  88)
+ * CanSetClock:                           gm2-libs-iso/SysClock.
+                                                               (line  42)
+ * CAP:                                   Standard procedures. (line  35)
+ * Cap:                                   gm2-libs/StrCase.    (line  34)
+ * Capitalize:                            gm2-libs-iso/Strings.
+                                                               (line 146)
+ * carccos:                               Built-ins.           (line 187)
+ * carccos <1>:                           gm2-libs/Builtins.   (line 134)
+ * carccosf:                              Built-ins.           (line 186)
+ * carccosf <1>:                          gm2-libs/Builtins.   (line 133)
+ * carccosl:                              Built-ins.           (line 188)
+ * carccosl <1>:                          gm2-libs/Builtins.   (line 135)
+ * carcsin:                               Built-ins.           (line 183)
+ * carcsin <1>:                           gm2-libs/Builtins.   (line 130)
+ * carcsinf:                              Built-ins.           (line 182)
+ * carcsinf <1>:                          gm2-libs/Builtins.   (line 129)
+ * carcsinl:                              Built-ins.           (line 184)
+ * carcsinl <1>:                          gm2-libs/Builtins.   (line 131)
+ * carctan:                               Built-ins.           (line 191)
+ * carctan <1>:                           gm2-libs/Builtins.   (line 138)
+ * carctanf:                              Built-ins.           (line 190)
+ * carctanf <1>:                          gm2-libs/Builtins.   (line 137)
+ * carctanl:                              Built-ins.           (line 192)
+ * carctanl <1>:                          gm2-libs/Builtins.   (line 139)
+ * CARDINAL16 (type):                     The PIM system module.
+                                                               (line  49)
+ * CARDINAL16 (type) <1>:                 The ISO system module.
+                                                               (line  65)
+ * CARDINAL16 (type) <2>:                 gm2-libs/SYSTEM.     (line  49)
+ * CARDINAL16 (type) <3>:                 gm2-libs-iso/SYSTEM. (line  65)
+ * CARDINAL32 (type):                     The PIM system module.
+                                                               (line  50)
+ * CARDINAL32 (type) <1>:                 The ISO system module.
+                                                               (line  66)
+ * CARDINAL32 (type) <2>:                 gm2-libs/SYSTEM.     (line  50)
+ * CARDINAL32 (type) <3>:                 gm2-libs-iso/SYSTEM. (line  66)
+ * CARDINAL64 (type):                     The PIM system module.
+                                                               (line  51)
+ * CARDINAL64 (type) <1>:                 The ISO system module.
+                                                               (line  67)
+ * CARDINAL64 (type) <2>:                 gm2-libs/SYSTEM.     (line  51)
+ * CARDINAL64 (type) <3>:                 gm2-libs-iso/SYSTEM. (line  67)
+ * CARDINAL8 (type):                      The PIM system module.
+                                                               (line  48)
+ * CARDINAL8 (type) <1>:                  The ISO system module.
+                                                               (line  64)
+ * CARDINAL8 (type) <2>:                  gm2-libs/SYSTEM.     (line  48)
+ * CARDINAL8 (type) <3>:                  gm2-libs-iso/SYSTEM. (line  64)
+ * CardinalToString:                      gm2-libs/StringConvert.
+                                                               (line  48)
+ * CardToStr:                             gm2-libs/NumberIO.   (line  27)
+ * CardToStr <1>:                         gm2-libs-iso/WholeStr.
+                                                               (line  46)
+ * carg:                                  Built-ins.           (line 145)
+ * carg <1>:                              gm2-libs/Builtins.   (line  92)
+ * carg <2>:                              gm2-libs/cbuiltin.   (line 121)
+ * cargf:                                 Built-ins.           (line 144)
+ * cargf <1>:                             gm2-libs/Builtins.   (line  91)
+ * cargf <2>:                             gm2-libs/cbuiltin.   (line 120)
+ * cargl:                                 Built-ins.           (line 146)
+ * cargl <1>:                             gm2-libs/Builtins.   (line  93)
+ * cargl <2>:                             gm2-libs/cbuiltin.   (line 122)
+ * Case (ebnf):                           EBNF.                (line 307)
+ * CaseException:                         gm2-libs/M2RTS.      (line 167)
+ * CaseException <1>:                     gm2-libs-iso/M2RTS.  (line 175)
+ * CaseLabelList (ebnf):                  EBNF.                (line 197)
+ * CaseLabels (ebnf):                     EBNF.                (line 200)
+ * CaseStatement (ebnf):                  EBNF.                (line 304)
+ * CaseTag (ebnf):                        EBNF.                (line 185)
+ * casin:                                 gm2-libs/cbuiltin.   (line 157)
+ * casinf:                                gm2-libs/cbuiltin.   (line 156)
+ * casinl:                                gm2-libs/cbuiltin.   (line 158)
+ * CAST:                                  The ISO system module.
+                                                               (line 148)
+ * CAST <1>:                              gm2-libs-iso/SYSTEM. (line 148)
+ * catan:                                 gm2-libs/cbuiltin.   (line 165)
+ * catanf:                                gm2-libs/cbuiltin.   (line 164)
+ * catanl:                                gm2-libs/cbuiltin.   (line 166)
+ * ccos:                                  Built-ins.           (line 175)
+ * ccos <1>:                              gm2-libs/Builtins.   (line 122)
+ * ccos <2>:                              gm2-libs/cbuiltin.   (line 149)
+ * ccosf:                                 Built-ins.           (line 174)
+ * ccosf <1>:                             gm2-libs/Builtins.   (line 121)
+ * ccosf <2>:                             gm2-libs/cbuiltin.   (line 148)
+ * ccosl:                                 Built-ins.           (line 176)
+ * ccosl <1>:                             gm2-libs/Builtins.   (line 123)
+ * ccosl <2>:                             gm2-libs/cbuiltin.   (line 150)
+ * ceil:                                  gm2-libs/libm.       (line  67)
+ * ceilf:                                 gm2-libs/libm.       (line  69)
+ * ceill:                                 gm2-libs/libm.       (line  68)
+ * cexp:                                  Built-ins.           (line 163)
+ * cexp <1>:                              gm2-libs/Builtins.   (line 110)
+ * cexp <2>:                              gm2-libs/cbuiltin.   (line 137)
+ * cexpf:                                 Built-ins.           (line 162)
+ * cexpf <1>:                             gm2-libs/Builtins.   (line 109)
+ * cexpf <2>:                             gm2-libs/cbuiltin.   (line 136)
+ * cexpl:                                 Built-ins.           (line 164)
+ * cexpl <1>:                             gm2-libs/Builtins.   (line 111)
+ * cexpl <2>:                             gm2-libs/cbuiltin.   (line 138)
+ * cfgetispeed:                           gm2-libs/termios.    (line  63)
+ * cfgetospeed:                           gm2-libs/termios.    (line  56)
+ * cfmakeraw:                             gm2-libs/termios.    (line 114)
+ * cfsetispeed:                           gm2-libs/termios.    (line  77)
+ * cfsetospeed:                           gm2-libs/termios.    (line  70)
+ * cfsetspeed:                            gm2-libs/termios.    (line  84)
+ * ChanDev (type):                        gm2-libs-iso/RTgen.  (line  21)
+ * ChanException:                         gm2-libs-iso/IOChan. (line 149)
+ * ChanExceptions (type):                 gm2-libs-iso/IOChan. (line 130)
+ * ChanFlags (type):                      gm2-libs-iso/ChanConsts.
+                                                               (line  11)
+ * ChanId (type):                         gm2-libs-iso/ProgramArgs.
+                                                               (line  13)
+ * ChanId (type) <1>:                     gm2-libs-iso/RTio.   (line  18)
+ * ChanId (type) <2>:                     gm2-libs-iso/RndFile.
+                                                               (line  13)
+ * ChanId (type) <3>:                     gm2-libs-iso/SeqFile.
+                                                               (line  13)
+ * ChanId (type) <4>:                     gm2-libs-iso/StdChans.
+                                                               (line  13)
+ * ChanId (type) <5>:                     gm2-libs-iso/StreamFile.
+                                                               (line  13)
+ * ChanId (type) <6>:                     gm2-libs-iso/TermFile.
+                                                               (line  18)
+ * char:                                  gm2-libs/DynamicStrings.
+                                                               (line 247)
+ * CharAvailable:                         gm2-libs-iso/TextUtil.
+                                                               (line  24)
+ * checkErrno:                            gm2-libs-iso/RTgen.  (line 100)
+ * chown:                                 gm2-libs/libc.       (line 261)
+ * CHR:                                   Standard procedures. (line  44)
+ * Claim:                                 gm2-libs-iso/Semaphores.
+                                                               (line  24)
+ * clientInfo (type):                     gm2-libs-iso/wrapsock.
+                                                               (line  18)
+ * clientOpen:                            gm2-libs-iso/wrapsock.
+                                                               (line  28)
+ * clientOpenIP:                          gm2-libs-iso/wrapsock.
+                                                               (line  41)
+ * cln:                                   Built-ins.           (line 167)
+ * cln <1>:                               gm2-libs/Builtins.   (line 114)
+ * clnf:                                  Built-ins.           (line 166)
+ * clnf <1>:                              gm2-libs/Builtins.   (line 113)
+ * clnl:                                  Built-ins.           (line 168)
+ * clnl <1>:                              gm2-libs/Builtins.   (line 115)
+ * clog:                                  gm2-libs/cbuiltin.   (line 141)
+ * clogf:                                 gm2-libs/cbuiltin.   (line 140)
+ * clogl:                                 gm2-libs/cbuiltin.   (line 142)
+ * Close:                                 gm2-libs/FIO.        (line 108)
+ * Close <1>:                             gm2-libs/PushBackInput.
+                                                               (line  83)
+ * close:                                 gm2-libs/libc.       (line 186)
+ * Close <2>:                             gm2-libs-log/FileSystem.
+                                                               (line  70)
+ * Close <3>:                             gm2-libs-iso/ClientSocket.
+                                                               (line  27)
+ * Close <4>:                             gm2-libs-iso/MemStream.
+                                                               (line  67)
+ * Close <5>:                             gm2-libs-iso/RndFile.
+                                                               (line 104)
+ * Close <6>:                             gm2-libs-iso/SeqFile.
+                                                               (line 101)
+ * Close <7>:                             gm2-libs-iso/StreamFile.
+                                                               (line  43)
+ * Close <8>:                             gm2-libs-iso/TermFile.
+                                                               (line  54)
+ * CloseInput:                            gm2-libs-log/InOut.  (line  40)
+ * CloseOutput:                           gm2-libs-log/InOut.  (line  58)
+ * CloseSource:                           gm2-libs/Scan.       (line  26)
+ * Command (type):                        gm2-libs-log/FileSystem.
+                                                               (line  53)
+ * Compare:                               gm2-libs-iso/Strings.
+                                                               (line 112)
+ * CompareResults (type):                 gm2-libs-iso/Strings.
+                                                               (line 110)
+ * CompareStr:                            gm2-libs-log/Strings.
+                                                               (line  68)
+ * CompareTime:                           gm2-libs-log/TimeDate.
+                                                               (line  56)
+ * COMPLEX128 (type):                     The PIM system module.
+                                                               (line  63)
+ * COMPLEX128 (type) <1>:                 The ISO system module.
+                                                               (line  79)
+ * COMPLEX128 (type) <2>:                 gm2-libs/SYSTEM.     (line  63)
+ * COMPLEX128 (type) <3>:                 gm2-libs-iso/SYSTEM. (line  79)
+ * COMPLEX32 (type):                      The PIM system module.
+                                                               (line  61)
+ * COMPLEX32 (type) <1>:                  The ISO system module.
+                                                               (line  77)
+ * COMPLEX32 (type) <2>:                  gm2-libs/SYSTEM.     (line  61)
+ * COMPLEX32 (type) <3>:                  gm2-libs-iso/SYSTEM. (line  77)
+ * COMPLEX64 (type):                      The PIM system module.
+                                                               (line  62)
+ * COMPLEX64 (type) <1>:                  The ISO system module.
+                                                               (line  78)
+ * COMPLEX64 (type) <2>:                  gm2-libs/SYSTEM.     (line  62)
+ * COMPLEX64 (type) <3>:                  gm2-libs-iso/SYSTEM. (line  78)
+ * ComponentElement (ebnf):               EBNF.                (line  92)
+ * ComponentValue (ebnf):                 EBNF.                (line  95)
+ * ConCat:                                gm2-libs/DynamicStrings.
+                                                               (line  85)
+ * ConCat <1>:                            gm2-libs/OptLib.     (line  68)
+ * ConCat <2>:                            gm2-libs-log/Strings.
+                                                               (line  54)
+ * Concat:                                gm2-libs-iso/Strings.
+                                                               (line  58)
+ * ConCatChar:                            gm2-libs/DynamicStrings.
+                                                               (line  93)
+ * CondClaim:                             gm2-libs-iso/Semaphores.
+                                                               (line  37)
+ * conj:                                  Built-ins.           (line 149)
+ * conj <1>:                              gm2-libs/Builtins.   (line  96)
+ * conj <2>:                              gm2-libs/cbuiltin.   (line 125)
+ * conj <3>:                              gm2-libs-iso/ComplexMath.
+                                                               (line  21)
+ * conj <4>:                              gm2-libs-iso/LongComplexMath.
+                                                               (line  21)
+ * conj <5>:                              gm2-libs-iso/ShortComplexMath.
+                                                               (line  21)
+ * conjf:                                 Built-ins.           (line 148)
+ * conjf <1>:                             gm2-libs/Builtins.   (line  95)
+ * conjf <2>:                             gm2-libs/cbuiltin.   (line 124)
+ * conjl:                                 Built-ins.           (line 150)
+ * conjl <1>:                             gm2-libs/Builtins.   (line  97)
+ * conjl <2>:                             gm2-libs/cbuiltin.   (line 126)
+ * connectSpin:                           gm2-libs/gdbif.      (line  36)
+ * ConstActualParameters (ebnf):          EBNF.                (line 109)
+ * ConstantDeclaration (ebnf):            EBNF.                (line  53)
+ * ConstAttribute (ebnf):                 EBNF.                (line 114)
+ * ConstAttributeExpression (ebnf):       EBNF.                (line 118)
+ * ConstExpression (ebnf):                EBNF.                (line  56)
+ * ConstFactor (ebnf):                    EBNF.                (line  86)
+ * ConstructModules:                      gm2-libs/M2Dependent.
+                                                               (line  15)
+ * ConstructModules <1>:                  gm2-libs/M2RTS.      (line  15)
+ * ConstructModules <2>:                  gm2-libs-iso/M2RTS.  (line  15)
+ * Constructor (ebnf):                    EBNF.                (line 101)
+ * ConstSetOrQualidentOrFunction (ebnf):  EBNF.                (line 106)
+ * ConstString (ebnf):                    EBNF.                (line  89)
+ * ConstTerm (ebnf):                      EBNF.                (line  75)
+ * ControlChar (type):                    gm2-libs/termios.    (line  13)
+ * ConvertCardinal:                       gm2-libs-log/Conversions.
+                                                               (line  23)
+ * ConvertHex:                            gm2-libs-log/Conversions.
+                                                               (line  22)
+ * ConvertInteger:                        gm2-libs-log/Conversions.
+                                                               (line  29)
+ * ConvertLongInt:                        gm2-libs-log/Conversions.
+                                                               (line  30)
+ * ConvertOctal:                          gm2-libs-log/Conversions.
+                                                               (line  21)
+ * ConvertShortInt:                       gm2-libs-log/Conversions.
+                                                               (line  31)
+ * ConvResults (type):                    gm2-libs-iso/ConvTypes.
+                                                               (line  11)
+ * ConvResults (type) <1>:                gm2-libs-iso/LongConv.
+                                                               (line  14)
+ * ConvResults (type) <2>:                gm2-libs-iso/LongStr.
+                                                               (line  15)
+ * ConvResults (type) <3>:                gm2-libs-iso/RealConv.
+                                                               (line  15)
+ * ConvResults (type) <4>:                gm2-libs-iso/RealStr.
+                                                               (line  15)
+ * ConvResults (type) <5>:                gm2-libs-iso/WholeConv.
+                                                               (line  14)
+ * ConvResults (type) <6>:                gm2-libs-iso/WholeStr.
+                                                               (line  14)
+ * Copy:                                  gm2-libs-log/Strings.
+                                                               (line  46)
+ * CopyOut:                               gm2-libs/DynamicStrings.
+                                                               (line 232)
+ * COROUTINE (type):                      gm2-libs-iso/COROUTINES.
+                                                               (line  17)
+ * cos:                                   Built-ins.           (line  74)
+ * cos <1>:                               gm2-libs/Builtins.   (line  21)
+ * cos <2>:                               gm2-libs/LMathLib0.  (line  17)
+ * cos <3>:                               gm2-libs/MathLib0.   (line  17)
+ * cos <4>:                               gm2-libs/SMathLib0.  (line  17)
+ * cos <5>:                               gm2-libs/cbuiltin.   (line  61)
+ * cos <6>:                               gm2-libs/libm.       (line  31)
+ * cos <7>:                               gm2-libs-iso/ComplexMath.
+                                                               (line  39)
+ * cos <8>:                               gm2-libs-iso/LongComplexMath.
+                                                               (line  39)
+ * cos <9>:                               gm2-libs-iso/LongMath.
+                                                               (line  28)
+ * cos <10>:                              gm2-libs-iso/RealMath.
+                                                               (line  28)
+ * cos <11>:                              gm2-libs-iso/ShortComplexMath.
+                                                               (line  39)
+ * cosf:                                  Built-ins.           (line  73)
+ * cosf <1>:                              gm2-libs/Builtins.   (line  20)
+ * cosf <2>:                              gm2-libs/cbuiltin.   (line  60)
+ * cosf <3>:                              gm2-libs/libm.       (line  33)
+ * cosl:                                  Built-ins.           (line  75)
+ * cosl <1>:                              gm2-libs/Builtins.   (line  22)
+ * cosl <2>:                              gm2-libs/cbuiltin.   (line  62)
+ * cosl <3>:                              gm2-libs/libm.       (line  32)
+ * cpow:                                  gm2-libs/cbuiltin.   (line 129)
+ * cpower:                                Built-ins.           (line 154)
+ * cpower <1>:                            gm2-libs/Builtins.   (line 101)
+ * cpowerf:                               Built-ins.           (line 152)
+ * cpowerf <1>:                           gm2-libs/Builtins.   (line  99)
+ * cpowerl:                               Built-ins.           (line 155)
+ * cpowerl <1>:                           gm2-libs/Builtins.   (line 102)
+ * cpowf:                                 gm2-libs/cbuiltin.   (line 128)
+ * cpowl:                                 gm2-libs/cbuiltin.   (line 130)
+ * cr (const):                            gm2-libs/ASCII.      (line  24)
+ * creat:                                 gm2-libs/libc.       (line 200)
+ * Create:                                gm2-libs-log/FileSystem.
+                                                               (line  63)
+ * Create <1>:                            gm2-libs-iso/Processes.
+                                                               (line  27)
+ * Create <2>:                            gm2-libs-iso/Semaphores.
+                                                               (line  13)
+ * csin:                                  Built-ins.           (line 171)
+ * csin <1>:                              gm2-libs/Builtins.   (line 118)
+ * csin <2>:                              gm2-libs/cbuiltin.   (line 145)
+ * csinf:                                 Built-ins.           (line 170)
+ * csinf <1>:                             gm2-libs/Builtins.   (line 117)
+ * csinf <2>:                             gm2-libs/cbuiltin.   (line 144)
+ * csinl:                                 Built-ins.           (line 172)
+ * csinl <1>:                             gm2-libs/Builtins.   (line 119)
+ * csinl <2>:                             gm2-libs/cbuiltin.   (line 146)
+ * CSIZE_T (type):                        The PIM system module.
+                                                               (line  64)
+ * CSIZE_T (type) <1>:                    The ISO system module.
+                                                               (line  80)
+ * CSIZE_T (type) <2>:                    gm2-libs/SYSTEM.     (line  64)
+ * CSIZE_T (type) <3>:                    gm2-libs-iso/SYSTEM. (line  80)
+ * csqrt:                                 Built-ins.           (line 159)
+ * csqrt <1>:                             gm2-libs/Builtins.   (line 106)
+ * csqrt <2>:                             gm2-libs/cbuiltin.   (line 133)
+ * csqrtf:                                Built-ins.           (line 158)
+ * csqrtf <1>:                            gm2-libs/Builtins.   (line 105)
+ * csqrtf <2>:                            gm2-libs/cbuiltin.   (line 132)
+ * csqrtl:                                Built-ins.           (line 160)
+ * csqrtl <1>:                            gm2-libs/Builtins.   (line 107)
+ * csqrtl <2>:                            gm2-libs/cbuiltin.   (line 134)
+ * CSSIZE_T (type):                       The PIM system module.
+                                                               (line  65)
+ * CSSIZE_T (type) <1>:                   The ISO system module.
+                                                               (line  81)
+ * CSSIZE_T (type) <2>:                   gm2-libs/SYSTEM.     (line  65)
+ * CSSIZE_T (type) <3>:                   gm2-libs-iso/SYSTEM. (line  81)
+ * ctan:                                  Built-ins.           (line 179)
+ * ctan <1>:                              gm2-libs/Builtins.   (line 126)
+ * ctan <2>:                              gm2-libs/cbuiltin.   (line 153)
+ * ctanf:                                 Built-ins.           (line 178)
+ * ctanf <1>:                             gm2-libs/Builtins.   (line 125)
+ * ctanf <2>:                             gm2-libs/cbuiltin.   (line 152)
+ * ctanl:                                 Built-ins.           (line 180)
+ * ctanl <1>:                             gm2-libs/Builtins.   (line 127)
+ * ctanl <2>:                             gm2-libs/cbuiltin.   (line 154)
+ * ctos:                                  gm2-libs/StringConvert.
+                                                               (line 173)
+ * CURRENT:                               gm2-libs-iso/COROUTINES.
+                                                               (line  70)
+ * CurrentFlags:                          gm2-libs-iso/IOChan. (line 124)
+ * currentInterruptLevel:                 gm2-libs-iso/RTco.   (line  36)
+ * currentMode:                           gm2-libs-iso/LowLong.
+                                                               (line  69)
+ * currentMode <1>:                       gm2-libs-iso/LowReal.
+                                                               (line  69)
+ * currentMode <2>:                       gm2-libs-iso/LowShort.
+                                                               (line  69)
+ * CurrentNumber:                         gm2-libs-iso/EXCEPTIONS.
+                                                               (line  28)
+ * CurrentPos:                            gm2-libs-iso/RndFile.
+                                                               (line  77)
+ * currentThread:                         gm2-libs-iso/RTco.   (line  31)
+ * DateTime (type):                       gm2-libs-iso/SysClock.
+                                                               (line  22)
+ * Day (type):                            gm2-libs-iso/SysClock.
+                                                               (line  16)
+ * daylight:                              gm2-libs-iso/wrapclock.
+                                                               (line  44)
+ * dc1 (const):                           gm2-libs/ASCII.      (line  25)
+ * dc2 (const):                           gm2-libs/ASCII.      (line  25)
+ * dc3 (const):                           gm2-libs/ASCII.      (line  25)
+ * dc4 (const):                           gm2-libs/ASCII.      (line  26)
+ * DEALLOCATE:                            gm2-libs/Storage.    (line  27)
+ * DEALLOCATE <1>:                        gm2-libs/SysStorage. (line  29)
+ * DEALLOCATE <2>:                        gm2-libs-iso/Storage.
+                                                               (line  18)
+ * DebugIndex:                            gm2-libs/Indexing.   (line  37)
+ * DebugProcess:                          gm2-libs-coroutines/Executive.
+                                                               (line 128)
+ * DebugString:                           gm2-libs/Debug.      (line  33)
+ * DEC:                                   Standard procedures. (line  74)
+ * DecException:                          gm2-libs/M2RTS.      (line 155)
+ * DecException <1>:                      gm2-libs-iso/M2RTS.  (line 163)
+ * Declaration (ebnf):                    EBNF.                (line 386)
+ * DeconstructModules:                    gm2-libs/M2Dependent.
+                                                               (line  19)
+ * DeconstructModules <1>:                gm2-libs/M2RTS.      (line  19)
+ * DeconstructModules <2>:                gm2-libs-iso/M2RTS.  (line  19)
+ * DefaultDecimalPlaces (const):          gm2-libs-log/RealInOut.
+                                                               (line  15)
+ * DefaultErrorCatch:                     gm2-libs/RTExceptions.
+                                                               (line 112)
+ * DefaultRecordAttributes (ebnf):        EBNF.                (line 157)
+ * DefExtendedFP (ebnf):                  EBNF.                (line 406)
+ * DefFormalParameters (ebnf):            EBNF.                (line 390)
+ * DefineBuiltinProcedure (ebnf):         EBNF.                (line 337)
+ * DefineComments:                        gm2-libs/Scan.       (line  61)
+ * Definition (ebnf):                     EBNF.                (line 456)
+ * DefinitionModule (ebnf):               EBNF.                (line 449)
+ * DefMultiFPSection (ebnf):              EBNF.                (line 394)
+ * DefOptArg (ebnf):                      EBNF.                (line 423)
+ * DefProcedureHeading (ebnf):            EBNF.                (line 356)
+ * del (const):                           gm2-libs/ASCII.      (line  31)
+ * Delay:                                 gm2-libs-log/Delay.  (line  15)
+ * Delete:                                gm2-libs-log/FileSystem.
+                                                               (line  97)
+ * Delete <1>:                            gm2-libs-log/Strings.
+                                                               (line  31)
+ * Delete <2>:                            gm2-libs-iso/Strings.
+                                                               (line  38)
+ * DeleteIndice:                          gm2-libs/Indexing.   (line  94)
+ * DelKey:                                gm2-libs-iso/RTentity.
+                                                               (line  28)
+ * DESCRIPTOR (type):                     gm2-libs-coroutines/Executive.
+                                                               (line  15)
+ * Designator (ebnf):                     EBNF.                (line 239)
+ * Destroy:                               gm2-libs-iso/Semaphores.
+                                                               (line  19)
+ * DETACH:                                gm2-libs-iso/COROUTINES.
+                                                               (line  55)
+ * Detach:                                gm2-libs-iso/Processes.
+                                                               (line  90)
+ * DevExceptionRange (type):              gm2-libs-iso/IOLink. (line 105)
+ * DeviceData (type):                     gm2-libs-iso/IOLink. (line  60)
+ * DeviceErrNum (type):                   gm2-libs-iso/IOChan. (line 164)
+ * DeviceError:                           gm2-libs-iso/IOChan. (line 166)
+ * DeviceTable (type):                    gm2-libs-iso/IOLink. (line  62)
+ * DeviceTablePtr (type):                 gm2-libs-iso/IOLink. (line  37)
+ * DeviceTablePtrValue:                   gm2-libs-iso/IOLink. (line  93)
+ * DeviceType (type):                     gm2-libs-iso/RTgen.  (line  22)
+ * DIFADR:                                The ISO system module.
+                                                               (line 104)
+ * DIFADR <1>:                            gm2-libs-iso/SYSTEM. (line 104)
+ * DisableBreak:                          gm2-libs-log/Break.  (line  24)
+ * DispatchVector (type):                 gm2-libs/RTint.      (line  15)
+ * displayProcesses:                      gm2-libs-iso/Processes.
+                                                               (line 150)
+ * DISPOSE:                               Standard procedures. (line  62)
+ * dle (const):                           gm2-libs/ASCII.      (line  25)
+ * dogeterrno:                            gm2-libs-iso/RTfio.  (line  38)
+ * doGetErrno:                            gm2-libs-iso/RTgenif.
+                                                               (line  72)
+ * Doio:                                  gm2-libs-log/FileSystem.
+                                                               (line 242)
+ * doLook:                                gm2-libs-iso/RTgen.  (line  57)
+ * Done (var):                            gm2-libs-log/CardinalIO.
+                                                               (line  17)
+ * Done (var) <1>:                        gm2-libs-log/InOut.  (line  21)
+ * Done (var) <2>:                        gm2-libs-log/LongIO. (line  11)
+ * Done (var) <3>:                        gm2-libs-log/RealInOut.
+                                                               (line  18)
+ * dorbytes:                              gm2-libs-iso/RTfio.  (line  47)
+ * doRBytes:                              gm2-libs-iso/RTgenif.
+                                                               (line  81)
+ * doreadchar:                            gm2-libs-iso/RTfio.  (line  23)
+ * doReadChar:                            gm2-libs-iso/RTgenif.
+                                                               (line  58)
+ * doReadLocs:                            gm2-libs-iso/RTgen.  (line  84)
+ * doReadText:                            gm2-libs-iso/RTgen.  (line  73)
+ * doSkip:                                gm2-libs-iso/RTgen.  (line  62)
+ * doSkipLook:                            gm2-libs-iso/RTgen.  (line  65)
+ * dounreadchar:                          gm2-libs-iso/RTfio.  (line  31)
+ * doUnReadChar:                          gm2-libs-iso/RTgenif.
+                                                               (line  65)
+ * dowbytes:                              gm2-libs-iso/RTfio.  (line  59)
+ * doWBytes:                              gm2-libs-iso/RTgenif.
+                                                               (line  92)
+ * dowriteln:                             gm2-libs-iso/RTfio.  (line  71)
+ * doWriteLn:                             gm2-libs-iso/RTgen.  (line  70)
+ * doWriteLocs:                           gm2-libs-iso/RTgen.  (line  90)
+ * doWriteText:                           gm2-libs-iso/RTgen.  (line  79)
+ * doWrLn:                                gm2-libs-iso/RTgenif.
+                                                               (line 102)
+ * dtoa:                                  gm2-libs/dtoa.       (line  31)
+ * Dup:                                   gm2-libs/DynamicStrings.
+                                                               (line 108)
+ * Dup <1>:                               gm2-libs/OptLib.     (line  36)
+ * dup:                                   gm2-libs/libc.       (line 179)
+ * DupDB:                                 gm2-libs/DynamicStrings.
+                                                               (line 311)
+ * DynamicArraySubscriptException:        gm2-libs/M2RTS.      (line 161)
+ * DynamicArraySubscriptException <1>:    gm2-libs-iso/M2RTS.  (line 169)
+ * echo (const):                          gm2-libs-iso/ChanConsts.
+                                                               (line  33)
+ * echo (const) <1>:                      gm2-libs-iso/TermFile.
+                                                               (line  33)
+ * EchoOff:                               gm2-libs/IO.         (line  56)
+ * EchoOn:                                gm2-libs/IO.         (line  46)
+ * EHBlock (type):                        gm2-libs/RTExceptions.
+                                                               (line  25)
+ * em (const):                            gm2-libs/ASCII.      (line  27)
+ * EnableBreak:                           gm2-libs-log/Break.  (line  16)
+ * END (type):                            gm2-libs/libc.       (line  45)
+ * END (type) <1>:                        gm2-libs/libc.       (line  52)
+ * END (type) <2>:                        gm2-libs-log/FileSystem.
+                                                               (line  35)
+ * END (type) <3>:                        gm2-libs-coroutines/SYSTEM.
+                                                               (line  38)
+ * EndPos:                                gm2-libs-iso/RndFile.
+                                                               (line  83)
+ * enq (const):                           gm2-libs/ASCII.      (line  22)
+ * entier:                                gm2-libs/LMathLib0.  (line  20)
+ * entier <1>:                            gm2-libs/MathLib0.   (line  20)
+ * entier <2>:                            gm2-libs/SMathLib0.  (line  20)
+ * Enumeration (ebnf):                    EBNF.                (line 138)
+ * EOF:                                   gm2-libs/FIO.        (line 181)
+ * eof (const):                           gm2-libs/ASCII.      (line  30)
+ * EofOrEoln:                             gm2-libs-iso/TextUtil.
+                                                               (line  27)
+ * EOL (const):                           gm2-libs/ASCII.      (line  31)
+ * EOL (const) <1>:                       gm2-libs-log/InOut.  (line  18)
+ * EOLN:                                  gm2-libs/FIO.        (line 190)
+ * eot (const):                           gm2-libs/ASCII.      (line  22)
+ * Equal:                                 gm2-libs/DynamicStrings.
+                                                               (line 122)
+ * Equal <1>:                             gm2-libs-iso/Strings.
+                                                               (line 117)
+ * EqualArray:                            gm2-libs/DynamicStrings.
+                                                               (line 138)
+ * EqualCharStar:                         gm2-libs/DynamicStrings.
+                                                               (line 130)
+ * ErrChan:                               gm2-libs-iso/StdChans.
+                                                               (line  47)
+ * Error:                                 gm2-libs/IO.         (line  22)
+ * Error <1>:                             gm2-libs/PushBackInput.
+                                                               (line  58)
+ * ErrorMessage:                          gm2-libs/M2RTS.      (line 133)
+ * ErrorMessage <1>:                      gm2-libs-iso/M2RTS.  (line 125)
+ * esc (const):                           gm2-libs/ASCII.      (line  27)
+ * etb (const):                           gm2-libs/ASCII.      (line  26)
+ * etx (const):                           gm2-libs/ASCII.      (line  21)
+ * EVENT (type):                          gm2-libs-coroutines/TimerHandler.
+                                                               (line  19)
+ * exception (const):                     gm2-libs-iso/LowLong.
+                                                               (line  23)
+ * exception (const) <1>:                 gm2-libs-iso/LowReal.
+                                                               (line  23)
+ * exception (const) <2>:                 gm2-libs-iso/LowShort.
+                                                               (line  23)
+ * ExceptionalPart (ebnf):                EBNF.                (line 379)
+ * ExceptionNumber (type):                gm2-libs-iso/EXCEPTIONS.
+                                                               (line  16)
+ * EXCL:                                  Standard procedures. (line  81)
+ * ExclException:                         gm2-libs/M2RTS.      (line 157)
+ * ExclException <1>:                     gm2-libs-iso/M2RTS.  (line 165)
+ * ExcludeVector:                         gm2-libs/RTint.      (line  82)
+ * ExecuteInitialProcedures:              gm2-libs/M2RTS.      (line  59)
+ * ExecuteInitialProcedures <1>:          gm2-libs-iso/M2RTS.  (line  67)
+ * ExecuteTerminationProcedures:          gm2-libs/M2RTS.      (line  76)
+ * ExecuteTerminationProcedures <1>:      gm2-libs-iso/M2RTS.  (line  48)
+ * execv:                                 gm2-libs/libc.       (line 460)
+ * Exists:                                gm2-libs/FIO.        (line  61)
+ * exists:                                gm2-libs/FIO.        (line 115)
+ * Exists <1>:                            gm2-libs/SFIO.       (line  18)
+ * exit:                                  gm2-libs/libc.       (line 150)
+ * ExitOnHalt:                            gm2-libs/M2RTS.      (line 126)
+ * ExitOnHalt <1>:                        gm2-libs-iso/M2RTS.  (line 118)
+ * exitP (type):                          gm2-libs/libc.       (line  54)
+ * ExitToOS:                              gm2-libs-log/ErrorCode.
+                                                               (line  32)
+ * exp:                                   Built-ins.           (line  94)
+ * exp <1>:                               gm2-libs/Builtins.   (line  41)
+ * exp <2>:                               gm2-libs/LMathLib0.  (line  14)
+ * exp <3>:                               gm2-libs/MathLib0.   (line  14)
+ * exp <4>:                               gm2-libs/SMathLib0.  (line  14)
+ * exp <5>:                               gm2-libs/cbuiltin.   (line  76)
+ * exp <6>:                               gm2-libs/libm.       (line  52)
+ * exp <7>:                               gm2-libs-iso/ComplexMath.
+                                                               (line  30)
+ * exp <8>:                               gm2-libs-iso/LongComplexMath.
+                                                               (line  30)
+ * exp <9>:                               gm2-libs-iso/LongMath.
+                                                               (line  17)
+ * exp <10>:                              gm2-libs-iso/RealMath.
+                                                               (line  17)
+ * exp <11>:                              gm2-libs-iso/ShortComplexMath.
+                                                               (line  30)
+ * exp1 (const):                          gm2-libs-iso/LongMath.
+                                                               (line  12)
+ * exp1 (const) <1>:                      gm2-libs-iso/RealMath.
+                                                               (line  12)
+ * exp10:                                 Built-ins.           (line 102)
+ * exp10 <1>:                             gm2-libs/Builtins.   (line  49)
+ * exp10 <2>:                             gm2-libs/cbuiltin.   (line  82)
+ * exp10 <3>:                             gm2-libs/libm.       (line  58)
+ * exp10f:                                Built-ins.           (line 101)
+ * exp10f <1>:                            gm2-libs/Builtins.   (line  48)
+ * exp10f <2>:                            gm2-libs/cbuiltin.   (line  81)
+ * exp10f <3>:                            gm2-libs/libm.       (line  60)
+ * exp10l:                                Built-ins.           (line 103)
+ * exp10l <1>:                            gm2-libs/Builtins.   (line  50)
+ * exp10l <2>:                            gm2-libs/cbuiltin.   (line  83)
+ * exp10l <3>:                            gm2-libs/libm.       (line  59)
+ * expf:                                  Built-ins.           (line  93)
+ * expf <1>:                              gm2-libs/Builtins.   (line  40)
+ * expf <2>:                              gm2-libs/cbuiltin.   (line  75)
+ * expf <3>:                              gm2-libs/libm.       (line  54)
+ * expl:                                  Built-ins.           (line  95)
+ * expl <1>:                              gm2-libs/Builtins.   (line  42)
+ * expl <2>:                              gm2-libs/cbuiltin.   (line  77)
+ * expl <3>:                              gm2-libs/libm.       (line  53)
+ * ExpList (ebnf):                        EBNF.                (line 246)
+ * expoMax (const):                       gm2-libs-iso/LowLong.
+                                                               (line  14)
+ * expoMax (const) <1>:                   gm2-libs-iso/LowReal.
+                                                               (line  14)
+ * expoMax (const) <2>:                   gm2-libs-iso/LowShort.
+                                                               (line  14)
+ * expoMin (const):                       gm2-libs-iso/LowLong.
+                                                               (line  13)
+ * expoMin (const) <1>:                   gm2-libs-iso/LowReal.
+                                                               (line  13)
+ * expoMin (const) <2>:                   gm2-libs-iso/LowShort.
+                                                               (line  13)
+ * exponent:                              gm2-libs-iso/LowLong.
+                                                               (line  30)
+ * exponent <1>:                          gm2-libs-iso/LowReal.
+                                                               (line  30)
+ * exponent <2>:                          gm2-libs-iso/LowShort.
+                                                               (line  30)
+ * Export (ebnf):                         EBNF.                (line 439)
+ * Expression (ebnf):                     EBNF.                (line 249)
+ * extend (const):                        gm2-libs-iso/LowLong.
+                                                               (line  24)
+ * extend (const) <1>:                    gm2-libs-iso/LowReal.
+                                                               (line  24)
+ * extend (const) <2>:                    gm2-libs-iso/LowShort.
+                                                               (line  24)
+ * ExtendedFP (ebnf):                     EBNF.                (line 409)
+ * Extract:                               gm2-libs-iso/Strings.
+                                                               (line  32)
+ * fabs:                                  Built-ins.           (line  86)
+ * fabs <1>:                              gm2-libs/Builtins.   (line  33)
+ * fabs <2>:                              gm2-libs/cbuiltin.   (line  70)
+ * fabsf:                                 Built-ins.           (line  85)
+ * fabsf <1>:                             gm2-libs/Builtins.   (line  32)
+ * fabsf <2>:                             gm2-libs/cbuiltin.   (line  69)
+ * fabsl:                                 Built-ins.           (line  87)
+ * fabsl <1>:                             gm2-libs/Builtins.   (line  34)
+ * fabsl <2>:                             gm2-libs/cbuiltin.   (line  71)
+ * Factor (ebnf):                         EBNF.                (line 261)
+ * FdClr:                                 gm2-libs/Selective.  (line  34)
+ * FdIsSet:                               gm2-libs/Selective.  (line  35)
+ * FdSet:                                 gm2-libs/Selective.  (line  33)
+ * FdZero:                                gm2-libs/Selective.  (line  32)
+ * ff (const):                            gm2-libs/ASCII.      (line  30)
+ * FieldList (ebnf):                      EBNF.                (line 179)
+ * FieldListSequence (ebnf):              EBNF.                (line 171)
+ * FieldListStatement (ebnf):             EBNF.                (line 174)
+ * FieldPragmaExpression (ebnf):          EBNF.                (line 165)
+ * File (type):                           gm2-libs/FIO.        (line  35)
+ * File (type) <1>:                       gm2-libs-log/FileSystem.
+                                                               (line  25)
+ * fileinode:                             gm2-libs/wrapc.      (line  36)
+ * filemtime:                             gm2-libs/wrapc.      (line  43)
+ * FileNameChar:                          gm2-libs-log/FileSystem.
+                                                               (line 251)
+ * FilePos (type):                        gm2-libs-iso/RndFile.
+                                                               (line  69)
+ * FilePosSize (const):                   gm2-libs-iso/RndFile.
+                                                               (line  65)
+ * filesize:                              gm2-libs/wrapc.      (line  29)
+ * FileUnit (ebnf):                       EBNF.                (line  30)
+ * Fin:                                   gm2-libs/DynamicStrings.
+                                                               (line  47)
+ * FinalBlock (ebnf):                     EBNF.                (line 370)
+ * FindDiff:                              gm2-libs-iso/Strings.
+                                                               (line 138)
+ * FindNext:                              gm2-libs-iso/Strings.
+                                                               (line 120)
+ * FindPosition:                          gm2-libs/FIO.        (line 291)
+ * FindPrev:                              gm2-libs-iso/Strings.
+                                                               (line 129)
+ * finishSpin:                            gm2-libs/gdbif.      (line  18)
+ * Flag (type):                           gm2-libs/termios.    (line  17)
+ * Flag (type) <1>:                       gm2-libs-log/FileSystem.
+                                                               (line  37)
+ * FlagSet (type):                        gm2-libs-log/FileSystem.
+                                                               (line  47)
+ * FlagSet (type) <1>:                    gm2-libs-iso/ChanConsts.
+                                                               (line  22)
+ * FlagSet (type) <2>:                    gm2-libs-iso/RndFile.
+                                                               (line  14)
+ * FlagSet (type) <3>:                    gm2-libs-iso/SeqFile.
+                                                               (line  14)
+ * FlagSet (type) <4>:                    gm2-libs-iso/StreamFile.
+                                                               (line  14)
+ * FlagSet (type) <5>:                    gm2-libs-iso/TermFile.
+                                                               (line  19)
+ * FLOAT:                                 Standard procedures. (line  88)
+ * Float:                                 gm2-libs-log/FloatingUtilities.
+                                                               (line  37)
+ * FLOATL:                                Standard procedures. (line 102)
+ * Floatl:                                gm2-libs-log/FloatingUtilities.
+                                                               (line  73)
+ * FLOATS:                                Standard procedures. (line  95)
+ * floor:                                 gm2-libs/libm.       (line  64)
+ * floorf:                                gm2-libs/libm.       (line  66)
+ * floorl:                                gm2-libs/libm.       (line  65)
+ * Flush:                                 gm2-libs-iso/IOChan. (line 109)
+ * FlushBuffer:                           gm2-libs/FIO.        (line 126)
+ * FlushOutErr:                           gm2-libs/FIO.        (line 320)
+ * FlushProc (type):                      gm2-libs-iso/IOLink. (line  51)
+ * ForeachIndiceInIndexDo:                gm2-libs/Indexing.   (line 109)
+ * ForLoopBeginException:                 gm2-libs/M2RTS.      (line 162)
+ * ForLoopBeginException <1>:             gm2-libs-iso/M2RTS.  (line 170)
+ * ForLoopEndException:                   gm2-libs/M2RTS.      (line 164)
+ * ForLoopEndException <1>:               gm2-libs-iso/M2RTS.  (line 172)
+ * ForLoopToException:                    gm2-libs/M2RTS.      (line 163)
+ * ForLoopToException <1>:                gm2-libs-iso/M2RTS.  (line 171)
+ * FormalParameters (ebnf):               EBNF.                (line 397)
+ * FormalReturn (ebnf):                   EBNF.                (line 216)
+ * FormalType (ebnf):                     EBNF.                (line 426)
+ * FormalTypeList (ebnf):                 EBNF.                (line 213)
+ * FormatCard:                            gm2-libs-iso/WholeConv.
+                                                               (line  46)
+ * FormatInt:                             gm2-libs-iso/WholeConv.
+                                                               (line  25)
+ * FormatReal:                            gm2-libs-iso/LongConv.
+                                                               (line  24)
+ * FormatReal <1>:                        gm2-libs-iso/RealConv.
+                                                               (line  24)
+ * ForStatement (ebnf):                   EBNF.                (line 320)
+ * FPSection (ebnf):                      EBNF.                (line 403)
+ * Frac:                                  gm2-libs-log/FloatingUtilities.
+                                                               (line  16)
+ * Fracl:                                 gm2-libs-log/FloatingUtilities.
+                                                               (line  52)
+ * fraction:                              gm2-libs-iso/LowLong.
+                                                               (line  33)
+ * fraction <1>:                          gm2-libs-iso/LowReal.
+                                                               (line  33)
+ * fraction <2>:                          gm2-libs-iso/LowShort.
+                                                               (line  33)
+ * Fraction (type):                       gm2-libs-iso/SysClock.
+                                                               (line  20)
+ * fractpart:                             gm2-libs-iso/LowLong.
+                                                               (line  51)
+ * fractpart <1>:                         gm2-libs-iso/LowReal.
+                                                               (line  51)
+ * fractpart <2>:                         gm2-libs-iso/LowShort.
+                                                               (line  51)
+ * frame_address:                         Built-ins.           (line 243)
+ * frame_address <1>:                     gm2-libs/Builtins.   (line 190)
+ * free:                                  gm2-libs/libc.       (line 119)
+ * FreeProc (type):                       gm2-libs-iso/IOLink. (line  52)
+ * FreeProcedure (type):                  gm2-libs-iso/RTdata. (line  18)
+ * fs (const):                            gm2-libs/ASCII.      (line  28)
+ * ftime:                                 gm2-libs/libc.       (line 394)
+ * GenDevIF (type):                       gm2-libs-iso/RTgenif.
+                                                               (line  18)
+ * GeneralException:                      gm2-libs-iso/GeneralUserExceptions.
+                                                               (line  23)
+ * GeneralExceptions (type):              gm2-libs-iso/GeneralUserExceptions.
+                                                               (line  11)
+ * GetArg:                                gm2-libs/Args.       (line  16)
+ * GetArg <1>:                            gm2-libs/CmdArgs.    (line  16)
+ * GetArg <2>:                            gm2-libs/SArgs.      (line  19)
+ * GetArg <3>:                            gm2-libs/SCmdArgs.   (line  18)
+ * GetArgc:                               gm2-libs/OptLib.     (line  82)
+ * GetArgC:                               gm2-libs/UnixArgs.   (line  12)
+ * GetArgv:                               gm2-libs/OptLib.     (line  75)
+ * GetArgV:                               gm2-libs/UnixArgs.   (line  13)
+ * GetBaseExceptionBlock:                 gm2-libs/RTExceptions.
+                                                               (line 157)
+ * GetBits:                               gm2-libs-log/BitByteOps.
+                                                               (line  16)
+ * GetBits <1>:                           gm2-libs-log/BitWordOps.
+                                                               (line  16)
+ * GetCh:                                 gm2-libs/PushBackInput.
+                                                               (line  28)
+ * GetChar:                               gm2-libs/termios.    (line 201)
+ * getClientHostname:                     gm2-libs-iso/wrapsock.
+                                                               (line  58)
+ * getClientIP:                           gm2-libs-iso/wrapsock.
+                                                               (line  73)
+ * getClientPortNo:                       gm2-libs-iso/wrapsock.
+                                                               (line  50)
+ * getClientSocketFd:                     gm2-libs-iso/wrapsock.
+                                                               (line  66)
+ * GetClock:                              gm2-libs-iso/SysClock.
+                                                               (line  48)
+ * GetColumnPosition:                     gm2-libs/PushBackInput.
+                                                               (line 104)
+ * GetCurrentInput:                       gm2-libs/StdIO.      (line  78)
+ * GetCurrentLine:                        gm2-libs/PushBackInput.
+                                                               (line 111)
+ * GetCurrentOutput:                      gm2-libs/StdIO.      (line  55)
+ * GetCurrentProcess:                     gm2-libs-coroutines/Executive.
+                                                               (line 104)
+ * getcwd:                                gm2-libs/libc.       (line 244)
+ * GetData:                               gm2-libs-iso/RTdata. (line  41)
+ * GetDay:                                gm2-libs-iso/wraptime.
+                                                               (line 122)
+ * GetDeviceId:                           gm2-libs-iso/RTio.   (line  46)
+ * GetDevicePtr:                          gm2-libs-iso/RTio.   (line  60)
+ * getDID:                                gm2-libs-iso/RTgenif.
+                                                               (line  50)
+ * GetDST:                                gm2-libs-iso/wraptime.
+                                                               (line 160)
+ * getenv:                                gm2-libs/libc.       (line 158)
+ * GetEnvironment:                        gm2-libs/Environment.
+                                                               (line  18)
+ * GetEnvironment <1>:                    gm2-libs/SEnvironment.
+                                                               (line  20)
+ * GetEnvV:                               gm2-libs/UnixArgs.   (line  14)
+ * geterrno:                              gm2-libs/errno.      (line  13)
+ * geterrno (type):                       gm2-libs-iso/RTgenif.
+                                                               (line  21)
+ * GetErrorCode:                          gm2-libs-log/ErrorCode.
+                                                               (line  24)
+ * GetExceptionBlock:                     gm2-libs/RTExceptions.
+                                                               (line  52)
+ * GetExceptionSource:                    gm2-libs/RTExceptions.
+                                                               (line 171)
+ * GetExitStatus:                         gm2-libs/PushBackInput.
+                                                               (line  90)
+ * GetFile:                               gm2-libs-iso/RTio.   (line  74)
+ * GetFileName:                           gm2-libs/FIO.        (line 298)
+ * getFileName:                           gm2-libs/FIO.        (line 305)
+ * getFileNameLength:                     gm2-libs/FIO.        (line 313)
+ * GetFlag:                               gm2-libs/termios.    (line 185)
+ * GetFractions:                          gm2-libs-iso/wraptime.
+                                                               (line  89)
+ * GetHour:                               gm2-libs-iso/wraptime.
+                                                               (line 129)
+ * GetIndice:                             gm2-libs/Indexing.   (line  73)
+ * GetKey:                                gm2-libs-iso/RTentity.
+                                                               (line  26)
+ * getLocalIP:                            gm2-libs/sckt.       (line  68)
+ * GetLongOptionArray:                    gm2-libs/cgetopt.    (line  83)
+ * GetMessage:                            gm2-libs-iso/EXCEPTIONS.
+                                                               (line  34)
+ * GetMinute:                             gm2-libs-iso/wraptime.
+                                                               (line 136)
+ * GetMonth:                              gm2-libs-iso/wraptime.
+                                                               (line 115)
+ * GetName:                               gm2-libs-iso/IOChan. (line 101)
+ * GetNameProc (type):                    gm2-libs-iso/IOLink. (line  49)
+ * getnameuidgid:                         gm2-libs/wrapc.      (line  65)
+ * GetNextSymbol:                         gm2-libs/Scan.       (line  31)
+ * GetNumber:                             gm2-libs/RTExceptions.
+                                                               (line  74)
+ * GetOpenResults:                        gm2-libs-iso/ErrnoCategory.
+                                                               (line  50)
+ * GetOpt:                                gm2-libs/GetOpt.     (line  25)
+ * getopt:                                gm2-libs/cgetopt.    (line  30)
+ * GetOptLong:                            gm2-libs/GetOpt.     (line  88)
+ * GetOptLongOnly:                        gm2-libs/GetOpt.     (line  98)
+ * getopt_long:                           gm2-libs/cgetopt.    (line  43)
+ * getopt_long_only:                      gm2-libs/cgetopt.    (line  51)
+ * getpid:                                gm2-libs/libc.       (line 172)
+ * GetPos:                                gm2-libs-log/FileSystem.
+                                                               (line 226)
+ * getPushBackChar:                       gm2-libs-iso/wrapsock.
+                                                               (line  81)
+ * getrand:                               gm2-libs/wrapc.      (line  50)
+ * GetSecond:                             gm2-libs-iso/wraptime.
+                                                               (line 145)
+ * getSizeOfClientInfo:                   gm2-libs-iso/wrapsock.
+                                                               (line  96)
+ * GetSummerTime:                         gm2-libs-iso/wraptime.
+                                                               (line 153)
+ * GetTextBuffer:                         gm2-libs/RTExceptions.
+                                                               (line  59)
+ * GetTextBufferSize:                     gm2-libs/RTExceptions.
+                                                               (line  66)
+ * GetTicks:                              gm2-libs-coroutines/TimerHandler.
+                                                               (line  26)
+ * GetTime:                               gm2-libs/Selective.  (line  28)
+ * GetTime <1>:                           gm2-libs-log/TimeDate.
+                                                               (line  37)
+ * GetTimeOfDay:                          gm2-libs/Selective.  (line  48)
+ * gettimeofday:                          gm2-libs-iso/wraptime.
+                                                               (line  73)
+ * GetTimeRealtime:                       gm2-libs-iso/wrapclock.
+                                                               (line 105)
+ * GetTimespec:                           gm2-libs-iso/wrapclock.
+                                                               (line  86)
+ * GetTimeString:                         gm2-libs/TimeString. (line  16)
+ * GetTimeVector:                         gm2-libs/RTint.      (line  57)
+ * GetUnixFileDescriptor:                 gm2-libs/FIO.        (line 269)
+ * getusername:                           gm2-libs/wrapc.      (line  57)
+ * GetYear:                               gm2-libs-iso/wraptime.
+                                                               (line 108)
+ * Group (type):                          gm2-libs-iso/RTentity.
+                                                               (line  21)
+ * gs (const):                            gm2-libs/ASCII.      (line  28)
+ * gUnderflow (const):                    gm2-libs-iso/LowLong.
+                                                               (line  22)
+ * gUnderflow (const) <1>:                gm2-libs-iso/LowReal.
+                                                               (line  22)
+ * gUnderflow (const) <2>:                gm2-libs-iso/LowShort.
+                                                               (line  22)
+ * HALT:                                  Standard procedures. (line 110)
+ * Halt:                                  gm2-libs/Debug.      (line  22)
+ * HALT <1>:                              gm2-libs/M2RTS.      (line  99)
+ * Halt <1>:                              gm2-libs/M2RTS.      (line 108)
+ * HALT <2>:                              gm2-libs-iso/M2RTS.  (line  90)
+ * Halt <2>:                              gm2-libs-iso/M2RTS.  (line  99)
+ * HaltC:                                 gm2-libs/M2RTS.      (line 118)
+ * HaltC <1>:                             gm2-libs-iso/M2RTS.  (line 109)
+ * HandleEscape:                          gm2-libs/FormatStrings.
+                                                               (line  59)
+ * HANDLER:                               gm2-libs-iso/COROUTINES.
+                                                               (line  64)
+ * Handler:                               gm2-libs-iso/Processes.
+                                                               (line  99)
+ * HasHalted:                             gm2-libs-iso/M2RTS.  (line 144)
+ * HasHalted <1>:                         gm2-libs-iso/TERMINATION.
+                                                               (line  13)
+ * HexToStr:                              gm2-libs/NumberIO.   (line  31)
+ * HIGH:                                  Standard procedures. (line 131)
+ * HighByte:                              gm2-libs-log/BitWordOps.
+                                                               (line 103)
+ * HighIndice:                            gm2-libs/Indexing.   (line  52)
+ * HighNibble:                            gm2-libs-log/BitByteOps.
+                                                               (line 104)
+ * Hour (type):                           gm2-libs-iso/SysClock.
+                                                               (line  17)
+ * hstoc:                                 gm2-libs/StringConvert.
+                                                               (line 208)
+ * hstoi:                                 gm2-libs/StringConvert.
+                                                               (line 187)
+ * ht (const):                            gm2-libs/ASCII.      (line  23)
+ * huge_val:                              Built-ins.           (line 109)
+ * huge_val <1>:                          gm2-libs/Builtins.   (line  56)
+ * huge_valf:                             Built-ins.           (line 110)
+ * huge_valf <1>:                         gm2-libs/Builtins.   (line  57)
+ * huge_vall:                             Built-ins.           (line 111)
+ * huge_vall <1>:                         gm2-libs/Builtins.   (line  58)
+ * i (const):                             gm2-libs-iso/ComplexMath.
+                                                               (line  11)
+ * i (const) <1>:                         gm2-libs-iso/LongComplexMath.
+                                                               (line  11)
+ * i (const) <2>:                         gm2-libs-iso/ShortComplexMath.
+                                                               (line  11)
+ * Ident (ebnf):                          EBNF.                (line  17)
+ * IdentList (ebnf):                      EBNF.                (line 141)
+ * IEC559 (const):                        gm2-libs-iso/LowLong.
+                                                               (line  17)
+ * IEC559 (const) <1>:                    gm2-libs-iso/LowReal.
+                                                               (line  17)
+ * IEC559 (const) <2>:                    gm2-libs-iso/LowShort.
+                                                               (line  17)
+ * IEEE (const):                          gm2-libs-iso/LowLong.
+                                                               (line  20)
+ * IEEE (const) <1>:                      gm2-libs-iso/LowReal.
+                                                               (line  20)
+ * IEEE (const) <2>:                      gm2-libs-iso/LowShort.
+                                                               (line  20)
+ * IfStatement (ebnf):                    EBNF.                (line 299)
+ * ilogb:                                 Built-ins.           (line 106)
+ * ilogb <1>:                             gm2-libs/Builtins.   (line  53)
+ * ilogb <2>:                             gm2-libs/cbuiltin.   (line  85)
+ * ilogbf:                                Built-ins.           (line 105)
+ * ilogbf <1>:                            gm2-libs/Builtins.   (line  52)
+ * ilogbf <2>:                            gm2-libs/cbuiltin.   (line  84)
+ * ilogbl:                                Built-ins.           (line 107)
+ * ilogbl <1>:                            gm2-libs/Builtins.   (line  54)
+ * ilogbl <2>:                            gm2-libs/cbuiltin.   (line  86)
+ * IM:                                    Standard procedures. (line 274)
+ * ImplementationModule (ebnf):           EBNF.                (line  40)
+ * ImplementationOrProgramModule (ebnf):  EBNF.                (line  44)
+ * Import (ebnf):                         EBNF.                (line 443)
+ * InBounds:                              gm2-libs/Indexing.   (line  45)
+ * INC:                                   Standard procedures. (line 143)
+ * IncException:                          gm2-libs/M2RTS.      (line 154)
+ * IncException <1>:                      gm2-libs-iso/M2RTS.  (line 162)
+ * InChan:                                gm2-libs-iso/StdChans.
+                                                               (line  41)
+ * INCL:                                  Standard procedures. (line 150)
+ * InclException:                         gm2-libs/M2RTS.      (line 156)
+ * InclException <1>:                     gm2-libs-iso/M2RTS.  (line 164)
+ * IncludeIndiceIntoIndex:                gm2-libs/Indexing.   (line 102)
+ * IncludeVector:                         gm2-libs/RTint.      (line  74)
+ * index:                                 Built-ins.           (line 199)
+ * index <1>:                             gm2-libs/Builtins.   (line 146)
+ * Index:                                 gm2-libs/DynamicStrings.
+                                                               (line 170)
+ * index <2>:                             gm2-libs/cbuiltin.   (line 168)
+ * Index (type):                          gm2-libs/Indexing.   (line  15)
+ * IndexProcedure (type):                 gm2-libs/Indexing.   (line  16)
+ * IndexStrCmp:                           gm2-libs/OptLib.     (line  52)
+ * IndexStrNCmp:                          gm2-libs/OptLib.     (line  61)
+ * Init:                                  gm2-libs/RTint.      (line 103)
+ * Init <1>:                              gm2-libs/SysStorage. (line  57)
+ * init:                                  gm2-libs-iso/RTco.   (line  15)
+ * InitChanDev:                           gm2-libs-iso/RTgen.  (line  29)
+ * InitChanId:                            gm2-libs-iso/RTio.   (line  25)
+ * InitData:                              gm2-libs-iso/RTdata. (line  33)
+ * InitExceptionBlock:                    gm2-libs/RTExceptions.
+                                                               (line  81)
+ * InitExceptionHandlers:                 gm2-libs/SysExceptions.
+                                                               (line  19)
+ * InitGenDevIF:                          gm2-libs-iso/RTgenif.
+                                                               (line  34)
+ * InitGroup:                             gm2-libs-iso/RTentity.
+                                                               (line  24)
+ * InitialBlock (ebnf):                   EBNF.                (line 367)
+ * InitIndex:                             gm2-libs/Indexing.   (line  23)
+ * InitInputVector:                       gm2-libs/RTint.      (line  23)
+ * InitLongOptions:                       gm2-libs/GetOpt.     (line  34)
+ * InitOption:                            gm2-libs/OptLib.     (line  19)
+ * InitOptions:                           gm2-libs/cgetopt.    (line  59)
+ * InitOutputVector:                      gm2-libs/RTint.      (line  31)
+ * initPreemptive:                        gm2-libs-iso/Preemptive.
+                                                               (line  14)
+ * InitProcess:                           gm2-libs-coroutines/Executive.
+                                                               (line  26)
+ * InitSemaphore:                         gm2-libs-coroutines/Executive.
+                                                               (line  63)
+ * initSemaphore:                         gm2-libs-iso/RTco.   (line  19)
+ * InitSet:                               gm2-libs/Selective.  (line  30)
+ * InitString:                            gm2-libs/DynamicStrings.
+                                                               (line  30)
+ * InitStringChar:                        gm2-libs/DynamicStrings.
+                                                               (line  63)
+ * InitStringCharDB:                      gm2-libs/DynamicStrings.
+                                                               (line 294)
+ * InitStringCharStar:                    gm2-libs/DynamicStrings.
+                                                               (line  55)
+ * InitStringCharStarDB:                  gm2-libs/DynamicStrings.
+                                                               (line 285)
+ * InitStringDB:                          gm2-libs/DynamicStrings.
+                                                               (line 277)
+ * InitTermios:                           gm2-libs/termios.    (line  42)
+ * initThread:                            gm2-libs-iso/RTco.   (line  17)
+ * InitTime:                              gm2-libs/Selective.  (line  26)
+ * InitTimespec:                          gm2-libs-iso/wrapclock.
+                                                               (line  69)
+ * InitTimeval:                           gm2-libs-iso/wraptime.
+                                                               (line  27)
+ * InitTimeVector:                        gm2-libs/RTint.      (line  39)
+ * InitTimezone:                          gm2-libs-iso/wraptime.
+                                                               (line  42)
+ * InitTM:                                gm2-libs-iso/wraptime.
+                                                               (line  57)
+ * Insert:                                gm2-libs-log/Strings.
+                                                               (line  23)
+ * Insert <1>:                            gm2-libs-iso/Strings.
+                                                               (line  44)
+ * InsertCipherLayer:                     gm2-libs-iso/SimpleCipher.
+                                                               (line  24)
+ * InstallBreak:                          gm2-libs-log/Break.  (line  34)
+ * InstallInitialProcedure:               gm2-libs/M2RTS.      (line  68)
+ * InstallInitialProcedure <1>:           gm2-libs-iso/M2RTS.  (line  76)
+ * InstallTerminationProcedure:           gm2-libs/M2RTS.      (line  51)
+ * InstallTerminationProcedure <1>:       gm2-libs-iso/M2RTS.  (line  59)
+ * INT:                                   Standard procedures. (line 282)
+ * Int:                                   gm2-libs-log/FloatingUtilities.
+                                                               (line  23)
+ * Integer (ebnf):                        EBNF.                (line  20)
+ * INTEGER16 (type):                      The PIM system module.
+                                                               (line  45)
+ * INTEGER16 (type) <1>:                  The ISO system module.
+                                                               (line  61)
+ * INTEGER16 (type) <2>:                  gm2-libs/SYSTEM.     (line  45)
+ * INTEGER16 (type) <3>:                  gm2-libs-iso/SYSTEM. (line  61)
+ * INTEGER32 (type):                      The PIM system module.
+                                                               (line  46)
+ * INTEGER32 (type) <1>:                  The ISO system module.
+                                                               (line  62)
+ * INTEGER32 (type) <2>:                  gm2-libs/SYSTEM.     (line  46)
+ * INTEGER32 (type) <3>:                  gm2-libs-iso/SYSTEM. (line  62)
+ * INTEGER64 (type):                      The PIM system module.
+                                                               (line  47)
+ * INTEGER64 (type) <1>:                  The ISO system module.
+                                                               (line  63)
+ * INTEGER64 (type) <2>:                  gm2-libs/SYSTEM.     (line  47)
+ * INTEGER64 (type) <3>:                  gm2-libs-iso/SYSTEM. (line  63)
+ * INTEGER8 (type):                       The PIM system module.
+                                                               (line  44)
+ * INTEGER8 (type) <1>:                   The ISO system module.
+                                                               (line  60)
+ * INTEGER8 (type) <2>:                   gm2-libs/SYSTEM.     (line  44)
+ * INTEGER8 (type) <3>:                   gm2-libs-iso/SYSTEM. (line  60)
+ * IntegerToString:                       gm2-libs/StringConvert.
+                                                               (line  33)
+ * interactive (const):                   gm2-libs-iso/ChanConsts.
+                                                               (line  32)
+ * INTERRUPTSOURCE (type):                gm2-libs/COROUTINES. (line  12)
+ * INTERRUPTSOURCE (type) <1>:            gm2-libs-iso/COROUTINES.
+                                                               (line  19)
+ * Intl:                                  gm2-libs-log/FloatingUtilities.
+                                                               (line  59)
+ * intpart:                               gm2-libs-iso/LowLong.
+                                                               (line  48)
+ * intpart <1>:                           gm2-libs-iso/LowReal.
+                                                               (line  48)
+ * intpart <2>:                           gm2-libs-iso/LowShort.
+                                                               (line  48)
+ * IntToStr:                              gm2-libs/NumberIO.   (line  35)
+ * IntToStr <1>:                          gm2-libs-iso/WholeStr.
+                                                               (line  29)
+ * InvalidChan:                           gm2-libs-iso/IOChan. (line  22)
+ * IOException:                           gm2-libs-iso/IOLink. (line 130)
+ * IOTRANSFER:                            gm2-libs-coroutines/SYSTEM.
+                                                               (line 115)
+ * IOTRANSFER <1>:                        gm2-libs-iso/COROUTINES.
+                                                               (line  42)
+ * IsActive:                              gm2-libs/FIO.        (line  54)
+ * IsArgPresent:                          gm2-libs-iso/ProgramArgs.
+                                                               (line  19)
+ * IsATTACHED:                            gm2-libs-iso/COROUTINES.
+                                                               (line  59)
+ * IsAttached:                            gm2-libs-iso/Processes.
+                                                               (line  93)
+ * isatty:                                gm2-libs/libc.       (line 142)
+ * IsChanException:                       gm2-libs-iso/IOChan. (line 143)
+ * IsCMathException:                      gm2-libs-iso/ComplexMath.
+                                                               (line  60)
+ * IsCMathException <1>:                  gm2-libs-iso/LongComplexMath.
+                                                               (line  60)
+ * IsCMathException <2>:                  gm2-libs-iso/ShortComplexMath.
+                                                               (line  60)
+ * IsControl:                             gm2-libs-iso/CharClass.
+                                                               (line  22)
+ * IsCurrentSource:                       gm2-libs-iso/EXCEPTIONS.
+                                                               (line  41)
+ * IsDevice:                              gm2-libs-iso/IOLink. (line 101)
+ * isdst:                                 gm2-libs-iso/wrapclock.
+                                                               (line  52)
+ * iseof:                                 gm2-libs-iso/RTfio.  (line  78)
+ * isEOF:                                 gm2-libs-iso/RTgenif.
+                                                               (line 109)
+ * iseof (type):                          gm2-libs-iso/RTgenif.
+                                                               (line  25)
+ * iseoln:                                gm2-libs-iso/RTfio.  (line  85)
+ * isEOLN:                                gm2-libs-iso/RTgenif.
+                                                               (line 116)
+ * iseoln (type):                         gm2-libs-iso/RTgenif.
+                                                               (line  26)
+ * IsErrnoHard:                           gm2-libs-iso/ErrnoCategory.
+                                                               (line  25)
+ * IsErrnoSoft:                           gm2-libs-iso/ErrnoCategory.
+                                                               (line  33)
+ * iserror:                               gm2-libs-iso/RTfio.  (line  94)
+ * isError:                               gm2-libs-iso/RTgenif.
+                                                               (line 123)
+ * iserror (type):                        gm2-libs-iso/RTgenif.
+                                                               (line  27)
+ * IsExceptionalExecution:                gm2-libs-iso/EXCEPTIONS.
+                                                               (line  47)
+ * isfinite:                              Built-ins.           (line  66)
+ * isfinite <1>:                          gm2-libs/Builtins.   (line  13)
+ * isfinite <2>:                          gm2-libs/cbuiltin.   (line  51)
+ * isfinite <3>:                          gm2-libs/wrapc.      (line  84)
+ * isfinitef:                             Built-ins.           (line  65)
+ * isfinitef <1>:                         gm2-libs/Builtins.   (line  12)
+ * isfinitef <2>:                         gm2-libs/cbuiltin.   (line  53)
+ * isfinitef <3>:                         gm2-libs/wrapc.      (line  92)
+ * isfinitel:                             Built-ins.           (line  67)
+ * isfinitel <1>:                         gm2-libs/Builtins.   (line  14)
+ * isfinitel <2>:                         gm2-libs/cbuiltin.   (line  52)
+ * isfinitel <3>:                         gm2-libs/wrapc.      (line 100)
+ * IsGeneralException:                    gm2-libs-iso/GeneralUserExceptions.
+                                                               (line  17)
+ * IsIn:                                  gm2-libs-iso/RTentity.
+                                                               (line  29)
+ * IsIndiceInIndex:                       gm2-libs/Indexing.   (line  80)
+ * IsInExceptionState:                    gm2-libs/RTExceptions.
+                                                               (line 131)
+ * isinf_sign:                            gm2-libs/cbuiltin.   (line  54)
+ * isinf_signf:                           gm2-libs/cbuiltin.   (line  56)
+ * isinf_signl:                           gm2-libs/cbuiltin.   (line  55)
+ * IsIOException:                         gm2-libs-iso/IOLink. (line 124)
+ * IsLetter:                              gm2-libs-iso/CharClass.
+                                                               (line  13)
+ * IsLower:                               gm2-libs-iso/CharClass.
+                                                               (line  19)
+ * IsLowException:                        gm2-libs-iso/LowLong.
+                                                               (line  72)
+ * IsLowException <1>:                    gm2-libs-iso/LowReal.
+                                                               (line  72)
+ * IsLowException <2>:                    gm2-libs-iso/LowShort.
+                                                               (line  72)
+ * IsM2Exception:                         gm2-libs/M2EXCEPTION.
+                                                               (line  30)
+ * IsM2Exception <1>:                     gm2-libs-iso/M2EXCEPTION.
+                                                               (line  24)
+ * IsMem:                                 gm2-libs-iso/MemStream.
+                                                               (line  91)
+ * IsNoError:                             gm2-libs/FIO.        (line  47)
+ * IsNumeric:                             gm2-libs-iso/CharClass.
+                                                               (line  10)
+ * ISO (const):                           gm2-libs-iso/LowLong.
+                                                               (line  19)
+ * ISO (const) <1>:                       gm2-libs-iso/LowReal.
+                                                               (line  19)
+ * ISO (const) <2>:                       gm2-libs-iso/LowShort.
+                                                               (line  19)
+ * IsProcessesException:                  gm2-libs-iso/Processes.
+                                                               (line 132)
+ * IsRConvException:                      gm2-libs-iso/LongConv.
+                                                               (line  48)
+ * IsRConvException <1>:                  gm2-libs-iso/RealConv.
+                                                               (line  49)
+ * IsRMathException:                      gm2-libs-iso/LongMath.
+                                                               (line  49)
+ * IsRMathException <1>:                  gm2-libs-iso/RealMath.
+                                                               (line  49)
+ * IsRndFile:                             gm2-libs-iso/RndFile.
+                                                               (line  55)
+ * IsRndFileException:                    gm2-libs-iso/RndFile.
+                                                               (line  58)
+ * IsSeqFile:                             gm2-libs-iso/SeqFile.
+                                                               (line  78)
+ * IsSocket:                              gm2-libs-iso/ClientSocket.
+                                                               (line  35)
+ * IsStorageException:                    gm2-libs-iso/Storage.
+                                                               (line  38)
+ * IsStreamFile:                          gm2-libs-iso/StreamFile.
+                                                               (line  40)
+ * IsSubString:                           gm2-libs/StrLib.     (line  54)
+ * IsTermFile:                            gm2-libs-iso/TermFile.
+                                                               (line  50)
+ * IsTerminating:                         gm2-libs-iso/M2RTS.  (line 136)
+ * IsTerminating <1>:                     gm2-libs-iso/TERMINATION.
+                                                               (line  10)
+ * istimezone:                            gm2-libs-iso/wrapclock.
+                                                               (line  32)
+ * IsUpper:                               gm2-libs-iso/CharClass.
+                                                               (line  16)
+ * IsValidDateTime:                       gm2-libs-iso/SysClock.
+                                                               (line  45)
+ * IsWhiteSpace:                          gm2-libs-iso/CharClass.
+                                                               (line  25)
+ * IsWholeConvException:                  gm2-libs-iso/WholeConv.
+                                                               (line  61)
+ * itos:                                  gm2-libs/StringConvert.
+                                                               (line 166)
+ * KeyPressed:                            gm2-libs-log/Keyboard.
+                                                               (line  24)
+ * KeyPressed <1>:                        gm2-libs-log/Termbase.
+                                                               (line  56)
+ * KeyPressed <2>:                        gm2-libs-log/Terminal.
+                                                               (line  29)
+ * KillChanDev:                           gm2-libs-iso/RTgen.  (line  36)
+ * KillChanId:                            gm2-libs-iso/RTio.   (line  32)
+ * KillData:                              gm2-libs-iso/RTdata. (line  50)
+ * KillExceptionBlock:                    gm2-libs/RTExceptions.
+                                                               (line  88)
+ * KillGenDevIF:                          gm2-libs-iso/RTgenif.
+                                                               (line 130)
+ * KillGroup:                             gm2-libs-iso/RTentity.
+                                                               (line  25)
+ * KillIndex:                             gm2-libs/Indexing.   (line  30)
+ * KillLongOptions:                       gm2-libs/GetOpt.     (line  79)
+ * KillOption:                            gm2-libs/OptLib.     (line  26)
+ * KillOptions:                           gm2-libs/cgetopt.    (line  66)
+ * KillProcess:                           gm2-libs-coroutines/Executive.
+                                                               (line  38)
+ * KillSet:                               gm2-libs/Selective.  (line  31)
+ * KillString:                            gm2-libs/DynamicStrings.
+                                                               (line  38)
+ * KillTermios:                           gm2-libs/termios.    (line  49)
+ * KillTime:                              gm2-libs/Selective.  (line  27)
+ * KillTimespec:                          gm2-libs-iso/wrapclock.
+                                                               (line  77)
+ * KillTimeval:                           gm2-libs-iso/wraptime.
+                                                               (line  35)
+ * KillTimezone:                          gm2-libs-iso/wraptime.
+                                                               (line  50)
+ * KillTM:                                gm2-libs-iso/wraptime.
+                                                               (line  65)
+ * large (const):                         gm2-libs-iso/LowLong.
+                                                               (line  15)
+ * large (const) <1>:                     gm2-libs-iso/LowReal.
+                                                               (line  15)
+ * large (const) <2>:                     gm2-libs-iso/LowShort.
+                                                               (line  15)
+ * ldtoa:                                 gm2-libs/ldtoa.      (line  31)
+ * LENGTH:                                Standard procedures. (line 289)
+ * Length:                                gm2-libs/DynamicStrings.
+                                                               (line  77)
+ * Length <1>:                            gm2-libs/M2RTS.      (line 145)
+ * Length <2>:                            gm2-libs-log/FileSystem.
+                                                               (line 233)
+ * Length <3>:                            gm2-libs-log/Strings.
+                                                               (line  61)
+ * Length <4>:                            gm2-libs-iso/M2RTS.  (line 153)
+ * Length <5>:                            gm2-libs-iso/Strings.
+                                                               (line  16)
+ * LengthCard:                            gm2-libs-iso/WholeConv.
+                                                               (line  56)
+ * LengthEngReal:                         gm2-libs-iso/LongConv.
+                                                               (line  37)
+ * LengthEngReal <1>:                     gm2-libs-iso/RealConv.
+                                                               (line  38)
+ * LengthFixedReal:                       gm2-libs-iso/LongConv.
+                                                               (line  42)
+ * LengthFixedReal <1>:                   gm2-libs-iso/RealConv.
+                                                               (line  43)
+ * LengthFloatReal:                       gm2-libs-iso/LongConv.
+                                                               (line  32)
+ * LengthFloatReal <1>:                   gm2-libs-iso/RealConv.
+                                                               (line  33)
+ * LengthInt:                             gm2-libs-iso/WholeConv.
+                                                               (line  34)
+ * lf (const):                            gm2-libs/ASCII.      (line  30)
+ * LFLOAT:                                Standard procedures. (line 157)
+ * LIA1 (const):                          gm2-libs-iso/LowLong.
+                                                               (line  18)
+ * LIA1 (const) <1>:                      gm2-libs-iso/LowReal.
+                                                               (line  18)
+ * LIA1 (const) <2>:                      gm2-libs-iso/LowShort.
+                                                               (line  18)
+ * Listen:                                gm2-libs/RTint.      (line  94)
+ * LISTEN:                                gm2-libs-coroutines/SYSTEM.
+                                                               (line 122)
+ * LISTEN <1>:                            gm2-libs-iso/COROUTINES.
+                                                               (line  73)
+ * ListenLoop:                            gm2-libs-coroutines/SYSTEM.
+                                                               (line 141)
+ * ListenLoop <1>:                        gm2-libs-iso/COROUTINES.
+                                                               (line 103)
+ * ln:                                    gm2-libs/LMathLib0.  (line  15)
+ * ln <1>:                                gm2-libs/MathLib0.   (line  15)
+ * ln <2>:                                gm2-libs/SMathLib0.  (line  15)
+ * ln <3>:                                gm2-libs-iso/ComplexMath.
+                                                               (line  33)
+ * ln <4>:                                gm2-libs-iso/LongComplexMath.
+                                                               (line  33)
+ * ln <5>:                                gm2-libs-iso/LongMath.
+                                                               (line  20)
+ * ln <6>:                                gm2-libs-iso/RealMath.
+                                                               (line  20)
+ * ln <7>:                                gm2-libs-iso/ShortComplexMath.
+                                                               (line  33)
+ * LOC (type):                            The PIM system module.
+                                                               (line  40)
+ * LOC (type) <1>:                        The ISO system module.
+                                                               (line  56)
+ * LOC (type) <2>:                        gm2-libs/SYSTEM.     (line  40)
+ * LOC (type) <3>:                        gm2-libs-iso/SYSTEM. (line  56)
+ * localtime:                             gm2-libs/libc.       (line 387)
+ * localtime_r:                           gm2-libs-iso/wraptime.
+                                                               (line 101)
+ * LOCSPERBYTE (const):                   The ISO system module.
+                                                               (line  35)
+ * LOCSPERBYTE (const) <1>:               gm2-libs-iso/SYSTEM. (line  35)
+ * LOCSPERWORD (const):                   The ISO system module.
+                                                               (line  33)
+ * LOCSPERWORD (const) <1>:               gm2-libs-iso/SYSTEM. (line  33)
+ * log:                                   Built-ins.           (line  90)
+ * log <1>:                               gm2-libs/Builtins.   (line  37)
+ * log <2>:                               gm2-libs/cbuiltin.   (line  73)
+ * log <3>:                               gm2-libs/libm.       (line  55)
+ * log10:                                 Built-ins.           (line  98)
+ * log10 <1>:                             gm2-libs/Builtins.   (line  45)
+ * log10 <2>:                             gm2-libs/cbuiltin.   (line  79)
+ * log10f:                                Built-ins.           (line  97)
+ * log10f <1>:                            gm2-libs/Builtins.   (line  44)
+ * log10f <2>:                            gm2-libs/cbuiltin.   (line  78)
+ * log10l:                                Built-ins.           (line  99)
+ * log10l <1>:                            gm2-libs/Builtins.   (line  46)
+ * log10l <2>:                            gm2-libs/cbuiltin.   (line  80)
+ * logf:                                  Built-ins.           (line  89)
+ * logf <1>:                              gm2-libs/Builtins.   (line  36)
+ * logf <2>:                              gm2-libs/cbuiltin.   (line  72)
+ * logf <3>:                              gm2-libs/libm.       (line  57)
+ * logl:                                  Built-ins.           (line  91)
+ * logl <1>:                              gm2-libs/Builtins.   (line  38)
+ * logl <2>:                              gm2-libs/cbuiltin.   (line  74)
+ * logl <3>:                              gm2-libs/libm.       (line  56)
+ * LongCardinalToString:                  gm2-libs/StringConvert.
+                                                               (line 113)
+ * LongIntegerToString:                   gm2-libs/StringConvert.
+                                                               (line  86)
+ * LongIntToStr:                          gm2-libs/FpuIO.      (line  32)
+ * longjmp:                               Built-ins.           (line 233)
+ * longjmp <1>:                           gm2-libs/Builtins.   (line 180)
+ * longjmp <2>:                           gm2-libs/libc.       (line 432)
+ * LongOptions (type):                    gm2-libs/GetOpt.     (line  17)
+ * LongRealToStr:                         gm2-libs/FpuIO.      (line  25)
+ * LongrealToString:                      gm2-libs/StringConvert.
+                                                               (line 255)
+ * LongRealToString:                      gm2-libs-log/RealConversions.
+                                                               (line  94)
+ * Look:                                  gm2-libs-iso/IOChan. (line  37)
+ * LookProc (type):                       gm2-libs-iso/IOLink. (line  41)
+ * Lookup:                                gm2-libs-log/FileSystem.
+                                                               (line  81)
+ * LoopStatement (ebnf):                  EBNF.                (line 323)
+ * LowByte:                               gm2-libs-log/BitWordOps.
+                                                               (line 112)
+ * Lower:                                 gm2-libs/StrCase.    (line  43)
+ * LowIndice:                             gm2-libs/Indexing.   (line  59)
+ * LowNibble:                             gm2-libs-log/BitByteOps.
+                                                               (line 112)
+ * lseek:                                 gm2-libs/libc.       (line 209)
+ * LTRUNC:                                Standard procedures. (line 166)
+ * M2Exception:                           gm2-libs/M2EXCEPTION.
+                                                               (line  25)
+ * M2Exception <1>:                       gm2-libs-iso/M2EXCEPTION.
+                                                               (line  18)
+ * M2Exceptions (type):                   gm2-libs/M2EXCEPTION.
+                                                               (line  13)
+ * M2Exceptions (type) <1>:               gm2-libs-iso/M2EXCEPTION.
+                                                               (line  11)
+ * MAKEADR:                               The ISO system module.
+                                                               (line 110)
+ * MAKEADR <1>:                           gm2-libs-iso/SYSTEM. (line 110)
+ * MakeChan:                              gm2-libs-iso/IOLink. (line  22)
+ * MakeModuleId:                          gm2-libs-iso/RTdata. (line  25)
+ * malloc:                                gm2-libs/libc.       (line 106)
+ * Mark:                                  gm2-libs/DynamicStrings.
+                                                               (line  70)
+ * MAX:                                   Standard procedures. (line 181)
+ * MaxFdsPlusOne:                         gm2-libs/Selective.  (line  36)
+ * maxSecondParts (const):                gm2-libs-iso/SysClock.
+                                                               (line  12)
+ * Me:                                    gm2-libs-iso/Processes.
+                                                               (line 108)
+ * memcmp:                                Built-ins.           (line 201)
+ * memcmp <1>:                            gm2-libs/Builtins.   (line 148)
+ * memcmp <2>:                            gm2-libs/cbuiltin.   (line 170)
+ * MemCopy:                               gm2-libs/MemUtils.   (line  16)
+ * memcpy:                                Built-ins.           (line 197)
+ * memcpy <1>:                            gm2-libs/Builtins.   (line 144)
+ * memcpy <2>:                            gm2-libs/cbuiltin.   (line  50)
+ * memcpy <3>:                            gm2-libs/libc.       (line 305)
+ * memmove:                               Built-ins.           (line 205)
+ * memmove <1>:                           gm2-libs/Builtins.   (line 152)
+ * memmove <2>:                           gm2-libs/cbuiltin.   (line 171)
+ * memmove <3>:                           gm2-libs/libc.       (line 333)
+ * memset:                                Built-ins.           (line 203)
+ * memset <1>:                            gm2-libs/Builtins.   (line 150)
+ * memset <2>:                            gm2-libs/cbuiltin.   (line 172)
+ * memset <3>:                            gm2-libs/libc.       (line 319)
+ * MemZero:                               gm2-libs/MemUtils.   (line  23)
+ * MIN:                                   Standard procedures. (line 173)
+ * Min (type):                            gm2-libs-iso/SysClock.
+                                                               (line  18)
+ * Mode (type):                           gm2-libs/dtoa.       (line  11)
+ * Mode (type) <1>:                       gm2-libs/ldtoa.      (line  11)
+ * Modes (type):                          gm2-libs-iso/LowLong.
+                                                               (line  28)
+ * Modes (type) <1>:                      gm2-libs-iso/LowReal.
+                                                               (line  28)
+ * Modes (type) <2>:                      gm2-libs-iso/LowShort.
+                                                               (line  28)
+ * modf:                                  Built-ins.           (line 113)
+ * modf <1>:                              gm2-libs/Builtins.   (line  60)
+ * modf <2>:                              gm2-libs/cbuiltin.   (line  92)
+ * modff:                                 Built-ins.           (line 114)
+ * modff <1>:                             gm2-libs/Builtins.   (line  61)
+ * modff <2>:                             gm2-libs/cbuiltin.   (line  93)
+ * modfl:                                 Built-ins.           (line 116)
+ * modfl <1>:                             gm2-libs/Builtins.   (line  63)
+ * modfl <2>:                             gm2-libs/cbuiltin.   (line  94)
+ * ModuleDeclaration (ebnf):              EBNF.                (line 431)
+ * ModuleId (type):                       gm2-libs-iso/RTdata. (line  17)
+ * Month (type):                          gm2-libs-iso/SysClock.
+                                                               (line  15)
+ * MulOperator (ebnf):                    EBNF.                (line  79)
+ * Mult:                                  gm2-libs/DynamicStrings.
+                                                               (line 146)
+ * MultDB:                                gm2-libs/DynamicStrings.
+                                                               (line 303)
+ * MultiFPSection (ebnf):                 EBNF.                (line 400)
+ * MyParam:                               gm2-libs-iso/Processes.
+                                                               (line 113)
+ * nak (const):                           gm2-libs/ASCII.      (line  26)
+ * NamedOperand (ebnf):                   EBNF.                (line 463)
+ * Narg:                                  gm2-libs/Args.       (line  24)
+ * Narg <1>:                              gm2-libs/CmdArgs.    (line  25)
+ * Narg <2>:                              gm2-libs/SArgs.      (line  27)
+ * Narg <3>:                              gm2-libs/SCmdArgs.   (line  27)
+ * NEW:                                   Standard procedures. (line 196)
+ * NEWCOROUTINE:                          Extensions.          (line 161)
+ * NEWCOROUTINE <1>:                      gm2-libs-iso/COROUTINES.
+                                                               (line  23)
+ * NewPos:                                gm2-libs-iso/RndFile.
+                                                               (line  89)
+ * NEWPROCESS:                            gm2-libs-coroutines/SYSTEM.
+                                                               (line 100)
+ * nextafter:                             Built-ins.           (line 122)
+ * nextafter <1>:                         gm2-libs/Builtins.   (line  69)
+ * nextafter <2>:                         gm2-libs/cbuiltin.   (line  96)
+ * nextafterf:                            Built-ins.           (line 123)
+ * nextafterf <1>:                        gm2-libs/Builtins.   (line  70)
+ * nextafterf <2>:                        gm2-libs/cbuiltin.   (line  97)
+ * nextafterl:                            Built-ins.           (line 124)
+ * nextafterl <1>:                        gm2-libs/Builtins.   (line  71)
+ * nextafterl <2>:                        gm2-libs/cbuiltin.   (line  98)
+ * NextArg:                               gm2-libs-iso/ProgramArgs.
+                                                               (line  26)
+ * nexttoward:                            Built-ins.           (line 126)
+ * nexttoward <1>:                        gm2-libs/Builtins.   (line  73)
+ * nexttoward <2>:                        gm2-libs/cbuiltin.   (line 100)
+ * nexttowardf:                           Built-ins.           (line 127)
+ * nexttowardf <1>:                       gm2-libs/Builtins.   (line  74)
+ * nexttowardf <2>:                       gm2-libs/cbuiltin.   (line 101)
+ * nexttowardl:                           Built-ins.           (line 128)
+ * nexttowardl <1>:                       gm2-libs/Builtins.   (line  75)
+ * nexttowardl <2>:                       gm2-libs/cbuiltin.   (line 102)
+ * NilChanId:                             gm2-libs-iso/RTio.   (line  39)
+ * nl (const):                            gm2-libs/ASCII.      (line  23)
+ * nModes (const):                        gm2-libs-iso/LowLong.
+                                                               (line  25)
+ * nModes (const) <1>:                    gm2-libs-iso/LowReal.
+                                                               (line  25)
+ * nModes (const) <2>:                    gm2-libs-iso/LowShort.
+                                                               (line  25)
+ * NoException:                           gm2-libs/M2RTS.      (line 175)
+ * NoException <1>:                       gm2-libs-iso/M2RTS.  (line 183)
+ * NonVarFPSection (ebnf):                EBNF.                (line 415)
+ * NoReturnException:                     gm2-libs/M2RTS.      (line 166)
+ * NoReturnException <1>:                 gm2-libs-iso/M2RTS.  (line 174)
+ * NormalPart (ebnf):                     EBNF.                (line 376)
+ * no_argument (const):                   gm2-libs/GetOpt.     (line  12)
+ * np (const):                            gm2-libs/ASCII.      (line  24)
+ * nul (const):                           gm2-libs/ASCII.      (line  21)
+ * NullChan:                              gm2-libs-iso/StdChans.
+                                                               (line  36)
+ * Number (ebnf):                         EBNF.                (line  47)
+ * OctToStr:                              gm2-libs/NumberIO.   (line  43)
+ * ODD:                                   Standard procedures. (line 203)
+ * ODD <1>:                               Standard procedures. (line 301)
+ * old (const):                           gm2-libs-iso/ChanConsts.
+                                                               (line  29)
+ * old (const) <1>:                       gm2-libs-iso/RndFile.
+                                                               (line  25)
+ * old (const) <2>:                       gm2-libs-iso/SeqFile.
+                                                               (line  27)
+ * old (const) <3>:                       gm2-libs-iso/StreamFile.
+                                                               (line  22)
+ * one (const):                           gm2-libs-iso/ComplexMath.
+                                                               (line  12)
+ * one (const) <1>:                       gm2-libs-iso/LongComplexMath.
+                                                               (line  12)
+ * one (const) <2>:                       gm2-libs-iso/ShortComplexMath.
+                                                               (line  12)
+ * Open:                                  gm2-libs/PushBackInput.
+                                                               (line  20)
+ * open:                                  gm2-libs/libc.       (line 193)
+ * Open <1>:                              gm2-libs-iso/StreamFile.
+                                                               (line  28)
+ * Open <2>:                              gm2-libs-iso/TermFile.
+                                                               (line  38)
+ * OpenAppend:                            gm2-libs-iso/SeqFile.
+                                                               (line  50)
+ * OpenClean:                             gm2-libs-iso/RndFile.
+                                                               (line  44)
+ * OpenForRandom:                         gm2-libs/FIO.        (line  98)
+ * openForRandom:                         gm2-libs/FIO.        (line 118)
+ * OpenForRandom <1>:                     gm2-libs/SFIO.       (line  53)
+ * OpenInput:                             gm2-libs-log/InOut.  (line  32)
+ * OpenOld:                               gm2-libs-iso/RndFile.
+                                                               (line  31)
+ * OpenOutput:                            gm2-libs-log/InOut.  (line  50)
+ * OpenRead:                              gm2-libs-iso/MemStream.
+                                                               (line  54)
+ * OpenRead <1>:                          gm2-libs-iso/SeqFile.
+                                                               (line  64)
+ * OpenResults (type):                    gm2-libs-iso/ChanConsts.
+                                                               (line  37)
+ * OpenResults (type) <1>:                gm2-libs-iso/RndFile.
+                                                               (line  15)
+ * OpenResults (type) <2>:                gm2-libs-iso/SeqFile.
+                                                               (line  15)
+ * OpenResults (type) <3>:                gm2-libs-iso/StreamFile.
+                                                               (line  15)
+ * OpenResults (type) <4>:                gm2-libs-iso/TermFile.
+                                                               (line  20)
+ * OpenSocket:                            gm2-libs-iso/ClientSocket.
+                                                               (line  16)
+ * OpenSource:                            gm2-libs/Scan.       (line  21)
+ * OpenToRead:                            gm2-libs/FIO.        (line  71)
+ * openToRead:                            gm2-libs/FIO.        (line 116)
+ * OpenToRead <1>:                        gm2-libs/SFIO.       (line  28)
+ * OpenToWrite:                           gm2-libs/FIO.        (line  81)
+ * openToWrite:                           gm2-libs/FIO.        (line 117)
+ * OpenToWrite <1>:                       gm2-libs/SFIO.       (line  38)
+ * OpenWrite:                             gm2-libs-iso/MemStream.
+                                                               (line  36)
+ * OpenWrite <1>:                         gm2-libs-iso/SeqFile.
+                                                               (line  35)
+ * OptArg (ebnf):                         EBNF.                (line 419)
+ * optarg (var):                          gm2-libs/cgetopt.    (line  15)
+ * opterr (var):                          gm2-libs/cgetopt.    (line  16)
+ * optind (var):                          gm2-libs/cgetopt.    (line  16)
+ * Option (type):                         gm2-libs/OptLib.     (line  12)
+ * optional_argument (const):             gm2-libs/GetOpt.     (line  14)
+ * Options (type):                        gm2-libs/cgetopt.    (line  12)
+ * optopt (var):                          gm2-libs/cgetopt.    (line  16)
+ * OptReturnType (ebnf):                  EBNF.                (line 220)
+ * ostoc:                                 gm2-libs/StringConvert.
+                                                               (line 215)
+ * ostoi:                                 gm2-libs/StringConvert.
+                                                               (line 194)
+ * OutChan:                               gm2-libs-iso/StdChans.
+                                                               (line  44)
+ * Parameter (type):                      gm2-libs-iso/Processes.
+                                                               (line  17)
+ * ParameterException:                    gm2-libs/M2RTS.      (line 174)
+ * ParameterException <1>:                gm2-libs-iso/M2RTS.  (line 182)
+ * perror:                                gm2-libs/libc.       (line 216)
+ * pi (const):                            gm2-libs-iso/LongMath.
+                                                               (line  11)
+ * pi (const) <1>:                        gm2-libs-iso/RealMath.
+                                                               (line  11)
+ * places (const):                        gm2-libs-iso/LowLong.
+                                                               (line  12)
+ * places (const) <1>:                    gm2-libs-iso/LowReal.
+                                                               (line  12)
+ * places (const) <2>:                    gm2-libs-iso/LowShort.
+                                                               (line  12)
+ * PointerNilException:                   gm2-libs/M2RTS.      (line 165)
+ * PointerNilException <1>:               gm2-libs-iso/M2RTS.  (line 173)
+ * PointerType (ebnf):                    EBNF.                (line 206)
+ * polarToComplex:                        gm2-libs-iso/ComplexMath.
+                                                               (line  54)
+ * polarToComplex <1>:                    gm2-libs-iso/LongComplexMath.
+                                                               (line  54)
+ * polarToComplex <2>:                    gm2-libs-iso/ShortComplexMath.
+                                                               (line  54)
+ * PopAllocation:                         gm2-libs/DynamicStrings.
+                                                               (line 338)
+ * PopAllocationExemption:                gm2-libs/DynamicStrings.
+                                                               (line 354)
+ * PopHandler:                            gm2-libs/RTExceptions.
+                                                               (line 103)
+ * PopInput:                              gm2-libs/StdIO.      (line  71)
+ * PopOutput:                             gm2-libs/StdIO.      (line  48)
+ * Pos:                                   gm2-libs-log/Strings.
+                                                               (line  38)
+ * pow:                                   gm2-libs/libm.       (line  61)
+ * power:                                 gm2-libs-iso/ComplexMath.
+                                                               (line  24)
+ * power <1>:                             gm2-libs-iso/LongComplexMath.
+                                                               (line  24)
+ * power <2>:                             gm2-libs-iso/LongMath.
+                                                               (line  43)
+ * power <3>:                             gm2-libs-iso/RealMath.
+                                                               (line  43)
+ * power <4>:                             gm2-libs-iso/ShortComplexMath.
+                                                               (line  24)
+ * powf:                                  gm2-libs/libm.       (line  63)
+ * powl:                                  gm2-libs/libm.       (line  62)
+ * pred:                                  gm2-libs-iso/LowLong.
+                                                               (line  45)
+ * pred <1>:                              gm2-libs-iso/LowReal.
+                                                               (line  45)
+ * pred <2>:                              gm2-libs-iso/LowShort.
+                                                               (line  45)
+ * printf:                                gm2-libs/libc.       (line 340)
+ * Priority (ebnf):                       EBNF.                (line 434)
+ * ProcedureBlock (ebnf):                 EBNF.                (line 360)
+ * ProcedureDeclaration (ebnf):           EBNF.                (line 332)
+ * ProcedureHandler (type):               gm2-libs/RTExceptions.
+                                                               (line  26)
+ * ProcedureHeading (ebnf):               EBNF.                (line 341)
+ * ProcedureParameter (ebnf):             EBNF.                (line 227)
+ * ProcedureParameters (ebnf):            EBNF.                (line 223)
+ * ProcedureType (ebnf):                  EBNF.                (line 209)
+ * PROCESS (type):                        gm2-libs-coroutines/SYSTEM.
+                                                               (line  36)
+ * ProcessesException:                    gm2-libs-iso/Processes.
+                                                               (line 125)
+ * ProcessesExceptions (type):            gm2-libs-iso/Processes.
+                                                               (line  21)
+ * ProcessName:                           gm2-libs-coroutines/Executive.
+                                                               (line 120)
+ * PROCEXCEPTION (type):                  gm2-libs/SysExceptions.
+                                                               (line  17)
+ * ProcRead (type):                       gm2-libs/StdIO.      (line  16)
+ * ProcWrite (type):                      gm2-libs/StdIO.      (line  15)
+ * ProgramModule (ebnf):                  EBNF.                (line  34)
+ * PROT:                                  gm2-libs-iso/COROUTINES.
+                                                               (line  77)
+ * PROTECTION (type):                     gm2-libs/COROUTINES. (line  13)
+ * PROTECTION (type) <1>:                 gm2-libs-iso/COROUTINES.
+                                                               (line  20)
+ * Ps:                                    gm2-libs-coroutines/Executive.
+                                                               (line  96)
+ * PtrToInteger (type):                   gm2-libs/GetOpt.     (line  18)
+ * ptrToTM (type):                        gm2-libs/libc.       (line  32)
+ * PushAllocation:                        gm2-libs/DynamicStrings.
+                                                               (line 326)
+ * PushHandler:                           gm2-libs/RTExceptions.
+                                                               (line  95)
+ * PushInput:                             gm2-libs/StdIO.      (line  64)
+ * PushOutput:                            gm2-libs/StdIO.      (line  41)
+ * PutCh:                                 gm2-libs/PushBackInput.
+                                                               (line  36)
+ * putenv:                                gm2-libs/libc.       (line 165)
+ * PutEnvironment:                        gm2-libs/Environment.
+                                                               (line  29)
+ * PutEnvironment <1>:                    gm2-libs/SEnvironment.
+                                                               (line  30)
+ * PutIndice:                             gm2-libs/Indexing.   (line  66)
+ * PutKey:                                gm2-libs-iso/RTentity.
+                                                               (line  27)
+ * PutStr:                                gm2-libs/PushBackInput.
+                                                               (line  51)
+ * PutString:                             gm2-libs/PushBackInput.
+                                                               (line  43)
+ * Qualident (ebnf):                      EBNF.                (line  50)
+ * radix (const):                         gm2-libs-iso/LowLong.
+                                                               (line  11)
+ * radix (const) <1>:                     gm2-libs-iso/LowReal.
+                                                               (line  11)
+ * radix (const) <2>:                     gm2-libs-iso/LowShort.
+                                                               (line  11)
+ * Raise:                                 gm2-libs/RTExceptions.
+                                                               (line  35)
+ * RAISE:                                 gm2-libs-iso/EXCEPTIONS.
+                                                               (line  21)
+ * RAISEdevException:                     gm2-libs-iso/IOLink. (line 116)
+ * RaiseEOFinLook:                        gm2-libs-iso/RTgen.  (line  45)
+ * RaiseEOFinSkip:                        gm2-libs-iso/RTgen.  (line  54)
+ * RaiseGeneralException:                 gm2-libs-iso/GeneralUserExceptions.
+                                                               (line  13)
+ * rand:                                  gm2-libs/libc.       (line 370)
+ * RandomBytes:                           gm2-libs-log/Random. (line  31)
+ * RandomBytes <1>:                       gm2-libs-iso/RandomNumber.
+                                                               (line  39)
+ * RandomCard:                            gm2-libs-log/Random. (line  45)
+ * RandomCard <1>:                        gm2-libs-iso/RandomNumber.
+                                                               (line  74)
+ * RandomInit:                            gm2-libs-log/Random. (line  24)
+ * RandomInit <1>:                        gm2-libs-iso/RandomNumber.
+                                                               (line  32)
+ * RandomInt:                             gm2-libs-log/Random. (line  38)
+ * RandomInt <1>:                         gm2-libs-iso/RandomNumber.
+                                                               (line  46)
+ * Randomize:                             gm2-libs-log/Random. (line  17)
+ * Randomize <1>:                         gm2-libs-iso/RandomNumber.
+                                                               (line  25)
+ * RandomLongCard:                        gm2-libs-iso/RandomNumber.
+                                                               (line  81)
+ * RandomLongInt:                         gm2-libs-iso/RandomNumber.
+                                                               (line  60)
+ * RandomLongReal:                        gm2-libs-log/Random. (line  59)
+ * RandomLongReal <1>:                    gm2-libs-iso/RandomNumber.
+                                                               (line 102)
+ * RandomReal:                            gm2-libs-log/Random. (line  52)
+ * RandomReal <1>:                        gm2-libs-iso/RandomNumber.
+                                                               (line  88)
+ * RandomShortCard:                       gm2-libs-iso/RandomNumber.
+                                                               (line  67)
+ * RandomShortInt:                        gm2-libs-iso/RandomNumber.
+                                                               (line  53)
+ * RandomShortReal:                       gm2-libs-iso/RandomNumber.
+                                                               (line  95)
+ * raw (const):                           gm2-libs-iso/ChanConsts.
+                                                               (line  31)
+ * raw (const) <1>:                       gm2-libs-iso/RndFile.
+                                                               (line  29)
+ * raw (const) <2>:                       gm2-libs-iso/SeqFile.
+                                                               (line  33)
+ * raw (const) <3>:                       gm2-libs-iso/StreamFile.
+                                                               (line  25)
+ * raw (const) <4>:                       gm2-libs-iso/TermFile.
+                                                               (line  31)
+ * RawRead:                               gm2-libs-iso/IOChan. (line  84)
+ * RawReadProc (type):                    gm2-libs-iso/IOLink. (line  47)
+ * RawWrite:                              gm2-libs-iso/IOChan. (line  93)
+ * RawWriteProc (type):                   gm2-libs-iso/IOLink. (line  48)
+ * RE:                                    Standard procedures. (line 310)
+ * Read:                                  gm2-libs/IO.         (line  20)
+ * Read <1>:                              gm2-libs/StdIO.      (line  24)
+ * read:                                  gm2-libs/libc.       (line  68)
+ * Read <2>:                              gm2-libs-log/InOut.  (line  67)
+ * Read <3>:                              gm2-libs-log/Keyboard.
+                                                               (line  16)
+ * Read <4>:                              gm2-libs-log/Termbase.
+                                                               (line  49)
+ * Read <5>:                              gm2-libs-log/Terminal.
+                                                               (line  21)
+ * Read <6>:                              gm2-libs-iso/RawIO.  (line  15)
+ * Read <7>:                              gm2-libs-iso/SRawIO. (line  14)
+ * read (const):                          gm2-libs-iso/ChanConsts.
+                                                               (line  27)
+ * read (const) <1>:                      gm2-libs-iso/RndFile.
+                                                               (line  21)
+ * read (const) <2>:                      gm2-libs-iso/SeqFile.
+                                                               (line  21)
+ * read (const) <3>:                      gm2-libs-iso/StreamFile.
+                                                               (line  20)
+ * read (const) <4>:                      gm2-libs-iso/TermFile.
+                                                               (line  25)
+ * ReadAgain:                             gm2-libs-log/Terminal.
+                                                               (line  45)
+ * ReadAny:                               gm2-libs/FIO.        (line 146)
+ * ReadBin:                               gm2-libs/NumberIO.   (line  47)
+ * ReadByte:                              gm2-libs-log/FileSystem.
+                                                               (line 136)
+ * readbytes (type):                      gm2-libs-iso/RTgenif.
+                                                               (line  22)
+ * ReadCard:                              gm2-libs/NumberIO.   (line  15)
+ * ReadCard <1>:                          gm2-libs-log/InOut.  (line 113)
+ * ReadCard <2>:                          gm2-libs-iso/LongWholeIO.
+                                                               (line  35)
+ * ReadCard <3>:                          gm2-libs-iso/SLongWholeIO.
+                                                               (line  33)
+ * ReadCard <4>:                          gm2-libs-iso/SShortWholeIO.
+                                                               (line  33)
+ * ReadCard <5>:                          gm2-libs-iso/SWholeIO.
+                                                               (line  33)
+ * ReadCard <6>:                          gm2-libs-iso/ShortWholeIO.
+                                                               (line  35)
+ * ReadCard <7>:                          gm2-libs-iso/WholeIO.
+                                                               (line  35)
+ * ReadCardinal:                          gm2-libs/FIO.        (line 259)
+ * ReadCardinal <1>:                      gm2-libs-log/CardinalIO.
+                                                               (line  26)
+ * ReadChar:                              gm2-libs/FIO.        (line 207)
+ * ReadChar <1>:                          gm2-libs-log/FileSystem.
+                                                               (line 120)
+ * ReadChar <2>:                          gm2-libs-iso/STextIO.
+                                                               (line  14)
+ * ReadChar <3>:                          gm2-libs-iso/TextIO. (line  17)
+ * readchar (type):                       gm2-libs-iso/RTgenif.
+                                                               (line  19)
+ * ReadCharRaw:                           gm2-libs/Selective.  (line  40)
+ * ReadHex:                               gm2-libs/NumberIO.   (line  19)
+ * ReadHex <1>:                           gm2-libs-log/CardinalIO.
+                                                               (line  44)
+ * ReadInt:                               gm2-libs/NumberIO.   (line  23)
+ * ReadInt <1>:                           gm2-libs-log/InOut.  (line 105)
+ * ReadInt <2>:                           gm2-libs-iso/LongWholeIO.
+                                                               (line  22)
+ * ReadInt <3>:                           gm2-libs-iso/SLongWholeIO.
+                                                               (line  20)
+ * ReadInt <4>:                           gm2-libs-iso/SShortWholeIO.
+                                                               (line  20)
+ * ReadInt <5>:                           gm2-libs-iso/SWholeIO.
+                                                               (line  20)
+ * ReadInt <6>:                           gm2-libs-iso/ShortWholeIO.
+                                                               (line  22)
+ * ReadInt <7>:                           gm2-libs-iso/WholeIO.
+                                                               (line  22)
+ * ReadLongCardinal:                      gm2-libs-log/CardinalIO.
+                                                               (line  61)
+ * ReadLongHex:                           gm2-libs-log/CardinalIO.
+                                                               (line  79)
+ * ReadLongInt:                           gm2-libs/FpuIO.      (line  29)
+ * ReadLongInt <1>:                       gm2-libs-log/LongIO. (line  13)
+ * ReadLongReal:                          gm2-libs/FpuIO.      (line  21)
+ * ReadLongReal <1>:                      gm2-libs-log/RealInOut.
+                                                               (line  60)
+ * ReadNBytes:                            gm2-libs/FIO.        (line 136)
+ * ReadNBytes <1>:                        gm2-libs-log/FileSystem.
+                                                               (line 151)
+ * ReadOct:                               gm2-libs/NumberIO.   (line  39)
+ * ReadProcedure (type):                  gm2-libs-log/Termbase.
+                                                               (line  19)
+ * ReadReal:                              gm2-libs/FpuIO.      (line  15)
+ * ReadReal <1>:                          gm2-libs-log/RealInOut.
+                                                               (line  36)
+ * ReadReal <2>:                          gm2-libs-iso/LongIO. (line  24)
+ * ReadReal <3>:                          gm2-libs-iso/RealIO. (line  24)
+ * ReadReal <4>:                          gm2-libs-iso/SLongIO.
+                                                               (line  22)
+ * ReadReal <5>:                          gm2-libs-iso/SRealIO.
+                                                               (line  22)
+ * ReadReal <6>:                          gm2-libs-iso/SShortIO.
+                                                               (line  22)
+ * ReadReal <7>:                          gm2-libs-iso/ShortIO.
+                                                               (line  24)
+ * ReadRestLine:                          gm2-libs-iso/STextIO.
+                                                               (line  20)
+ * ReadRestLine <1>:                      gm2-libs-iso/TextIO. (line  24)
+ * ReadResult:                            gm2-libs-iso/IOChan. (line 117)
+ * ReadResult <1>:                        gm2-libs-iso/IOResult.
+                                                               (line  27)
+ * ReadResult <2>:                        gm2-libs-iso/SIOResult.
+                                                               (line  27)
+ * ReadResults (type):                    gm2-libs-iso/IOConsts.
+                                                               (line  11)
+ * ReadResults (type) <1>:                gm2-libs-iso/IOResult.
+                                                               (line  13)
+ * ReadResults (type) <2>:                gm2-libs-iso/IOResult.
+                                                               (line  16)
+ * ReadResults (type) <3>:                gm2-libs-iso/SIOResult.
+                                                               (line  13)
+ * ReadResults (type) <4>:                gm2-libs-iso/SIOResult.
+                                                               (line  16)
+ * ReadS:                                 gm2-libs/SFIO.       (line  70)
+ * ReadS <1>:                             gm2-libs-log/InOut.  (line 158)
+ * ReadShortCardinal:                     gm2-libs-log/CardinalIO.
+                                                               (line 105)
+ * ReadShortHex:                          gm2-libs-log/CardinalIO.
+                                                               (line 114)
+ * ReadShortReal:                         gm2-libs-log/RealInOut.
+                                                               (line  84)
+ * ReadString:                            gm2-libs/FIO.        (line 241)
+ * ReadString <1>:                        gm2-libs/StrIO.      (line  26)
+ * ReadString <2>:                        gm2-libs-log/InOut.  (line  76)
+ * ReadString <3>:                        gm2-libs-log/Terminal.
+                                                               (line  38)
+ * ReadString <4>:                        gm2-libs-iso/STextIO.
+                                                               (line  26)
+ * ReadString <5>:                        gm2-libs-iso/TextIO. (line  32)
+ * ReadToken:                             gm2-libs-iso/STextIO.
+                                                               (line  32)
+ * ReadToken <1>:                         gm2-libs-iso/TextIO. (line  39)
+ * readv:                                 gm2-libs/libc.       (line 223)
+ * ReadWord:                              gm2-libs-log/FileSystem.
+                                                               (line 105)
+ * Real (ebnf):                           EBNF.                (line  23)
+ * REAL128 (type):                        The PIM system module.
+                                                               (line  60)
+ * REAL128 (type) <1>:                    The ISO system module.
+                                                               (line  76)
+ * REAL128 (type) <2>:                    gm2-libs/SYSTEM.     (line  60)
+ * REAL128 (type) <3>:                    gm2-libs-iso/SYSTEM. (line  76)
+ * REAL32 (type):                         The PIM system module.
+                                                               (line  58)
+ * REAL32 (type) <1>:                     The ISO system module.
+                                                               (line  74)
+ * REAL32 (type) <2>:                     gm2-libs/SYSTEM.     (line  58)
+ * REAL32 (type) <3>:                     gm2-libs-iso/SYSTEM. (line  74)
+ * REAL64 (type):                         The PIM system module.
+                                                               (line  59)
+ * REAL64 (type) <1>:                     The ISO system module.
+                                                               (line  75)
+ * REAL64 (type) <2>:                     gm2-libs/SYSTEM.     (line  59)
+ * REAL64 (type) <3>:                     gm2-libs-iso/SYSTEM. (line  75)
+ * realloc:                               gm2-libs/libc.       (line 135)
+ * REALLOCATE:                            gm2-libs/Storage.    (line  38)
+ * REALLOCATE <1>:                        gm2-libs/SysStorage. (line  40)
+ * REALLOCATE <2>:                        gm2-libs-iso/Storage.
+                                                               (line  24)
+ * RealToEng:                             gm2-libs-iso/LongStr.
+                                                               (line  42)
+ * RealToEng <1>:                         gm2-libs-iso/RealStr.
+                                                               (line  42)
+ * RealToEngString:                       gm2-libs-iso/ConvStringLong.
+                                                               (line  27)
+ * RealToEngString <1>:                   gm2-libs-iso/ConvStringReal.
+                                                               (line  27)
+ * RealToFixed:                           gm2-libs-iso/LongStr.
+                                                               (line  51)
+ * RealToFixed <1>:                       gm2-libs-iso/RealStr.
+                                                               (line  51)
+ * RealToFixedString:                     gm2-libs-iso/ConvStringLong.
+                                                               (line  36)
+ * RealToFixedString <1>:                 gm2-libs-iso/ConvStringReal.
+                                                               (line  36)
+ * RealToFloat:                           gm2-libs-iso/LongStr.
+                                                               (line  35)
+ * RealToFloat <1>:                       gm2-libs-iso/RealStr.
+                                                               (line  35)
+ * RealToFloatString:                     gm2-libs-iso/ConvStringLong.
+                                                               (line  16)
+ * RealToFloatString <1>:                 gm2-libs-iso/ConvStringReal.
+                                                               (line  16)
+ * RealToStr:                             gm2-libs/FpuIO.      (line  18)
+ * RealToStr <1>:                         gm2-libs-iso/LongStr.
+                                                               (line  58)
+ * RealToStr <2>:                         gm2-libs-iso/RealStr.
+                                                               (line  58)
+ * RealToString:                          gm2-libs-log/RealConversions.
+                                                               (line  53)
+ * RealValueException:                    gm2-libs/M2RTS.      (line 173)
+ * RealValueException <1>:                gm2-libs-iso/M2RTS.  (line 181)
+ * ReArmEvent:                            gm2-libs-coroutines/TimerHandler.
+                                                               (line  78)
+ * ReArmTimeVector:                       gm2-libs/RTint.      (line  47)
+ * RecordFieldPragma (ebnf):              EBNF.                (line 161)
+ * RecordType (ebnf):                     EBNF.                (line 153)
+ * RegisterModule:                        gm2-libs/M2Dependent.
+                                                               (line  29)
+ * RegisterModule <1>:                    gm2-libs/M2RTS.      (line  29)
+ * RegisterModule <2>:                    gm2-libs-iso/M2RTS.  (line  29)
+ * Relation (ebnf):                       EBNF.                (line  60)
+ * Release:                               gm2-libs-iso/Semaphores.
+                                                               (line  31)
+ * RemoveCipherLayer:                     gm2-libs-iso/SimpleCipher.
+                                                               (line  31)
+ * RemoveComment:                         gm2-libs/DynamicStrings.
+                                                               (line 191)
+ * RemoveIndiceFromIndex:                 gm2-libs/Indexing.   (line  87)
+ * RemoveWhitePostfix:                    gm2-libs/DynamicStrings.
+                                                               (line 207)
+ * RemoveWhitePrefix:                     gm2-libs/DynamicStrings.
+                                                               (line 199)
+ * rename:                                gm2-libs/libc.       (line 411)
+ * Rename:                                gm2-libs-log/FileSystem.
+                                                               (line  89)
+ * RepeatStatement (ebnf):                EBNF.                (line 315)
+ * Replace:                               gm2-libs-iso/Strings.
+                                                               (line  48)
+ * RequestDependant:                      gm2-libs/M2Dependent.
+                                                               (line  40)
+ * RequestDependant <1>:                  gm2-libs/M2RTS.      (line  39)
+ * RequestDependant <2>:                  gm2-libs-iso/M2RTS.  (line  39)
+ * required_argument (const):             gm2-libs/GetOpt.     (line  13)
+ * Reread:                                gm2-libs-iso/MemStream.
+                                                               (line  83)
+ * Reread <1>:                            gm2-libs-iso/SeqFile.
+                                                               (line  82)
+ * Reschedule:                            gm2-libs-iso/Processes.
+                                                               (line 143)
+ * Reset:                                 gm2-libs-log/FileSystem.
+                                                               (line 212)
+ * Reset <1>:                             gm2-libs-iso/IOChan. (line 106)
+ * ResetProc (type):                      gm2-libs-iso/IOLink. (line  50)
+ * Response (type):                       gm2-libs-log/FileSystem.
+                                                               (line  49)
+ * Resume:                                gm2-libs-coroutines/Executive.
+                                                               (line  46)
+ * RetryStatement (ebnf):                 EBNF.                (line 286)
+ * ReturnException:                       gm2-libs/M2RTS.      (line 153)
+ * ReturnException <1>:                   gm2-libs-iso/M2RTS.  (line 161)
+ * return_address:                        Built-ins.           (line 253)
+ * return_address <1>:                    gm2-libs/Builtins.   (line 200)
+ * Rewrite:                               gm2-libs-iso/MemStream.
+                                                               (line  75)
+ * Rewrite <1>:                           gm2-libs-iso/SeqFile.
+                                                               (line  92)
+ * rindex:                                Built-ins.           (line 200)
+ * rindex <1>:                            gm2-libs/Builtins.   (line 147)
+ * RIndex:                                gm2-libs/DynamicStrings.
+                                                               (line 179)
+ * rindex <2>:                            gm2-libs/cbuiltin.   (line 169)
+ * ROTATE:                                The PIM system module.
+                                                               (line  86)
+ * ROTATE <1>:                            The ISO system module.
+                                                               (line 132)
+ * ROTATE <2>:                            gm2-libs/SYSTEM.     (line  86)
+ * ROTATE <3>:                            gm2-libs-coroutines/SYSTEM.
+                                                               (line 169)
+ * ROTATE <4>:                            gm2-libs-iso/SYSTEM. (line 132)
+ * RotateException:                       gm2-libs/M2RTS.      (line 159)
+ * RotateException <1>:                   gm2-libs-iso/M2RTS.  (line 167)
+ * RotateLeft:                            The PIM system module.
+                                                               (line 190)
+ * RotateLeft <1>:                        The ISO system module.
+                                                               (line 243)
+ * RotateLeft <2>:                        gm2-libs/SYSTEM.     (line 190)
+ * RotateLeft <3>:                        gm2-libs-coroutines/SYSTEM.
+                                                               (line 271)
+ * RotateLeft <4>:                        gm2-libs-iso/SYSTEM. (line 243)
+ * RotateRight:                           The PIM system module.
+                                                               (line 202)
+ * RotateRight <1>:                       The ISO system module.
+                                                               (line 255)
+ * RotateRight <2>:                       gm2-libs/SYSTEM.     (line 202)
+ * RotateRight <3>:                       gm2-libs-coroutines/SYSTEM.
+                                                               (line 283)
+ * RotateRight <4>:                       gm2-libs-iso/SYSTEM. (line 255)
+ * RotateRunQueue:                        gm2-libs-coroutines/Executive.
+                                                               (line 112)
+ * RotateVal:                             The PIM system module.
+                                                               (line 178)
+ * RotateVal <1>:                         The ISO system module.
+                                                               (line 231)
+ * RotateVal <2>:                         gm2-libs/SYSTEM.     (line 178)
+ * RotateVal <3>:                         gm2-libs-coroutines/SYSTEM.
+                                                               (line 259)
+ * RotateVal <4>:                         gm2-libs-iso/SYSTEM. (line 231)
+ * Round:                                 gm2-libs-log/FloatingUtilities.
+                                                               (line  30)
+ * round:                                 gm2-libs-iso/LongMath.
+                                                               (line  46)
+ * round <1>:                             gm2-libs-iso/LowLong.
+                                                               (line  60)
+ * round <2>:                             gm2-libs-iso/LowReal.
+                                                               (line  60)
+ * round <3>:                             gm2-libs-iso/LowShort.
+                                                               (line  60)
+ * round <4>:                             gm2-libs-iso/RealMath.
+                                                               (line  46)
+ * Roundl:                                gm2-libs-log/FloatingUtilities.
+                                                               (line  66)
+ * rounds (const):                        gm2-libs-iso/LowLong.
+                                                               (line  21)
+ * rounds (const) <1>:                    gm2-libs-iso/LowReal.
+                                                               (line  21)
+ * rounds (const) <2>:                    gm2-libs-iso/LowShort.
+                                                               (line  21)
+ * rs (const):                            gm2-libs/ASCII.      (line  28)
+ * scalarMult:                            gm2-libs-iso/ComplexMath.
+                                                               (line  57)
+ * scalarMult <1>:                        gm2-libs-iso/LongComplexMath.
+                                                               (line  57)
+ * scalarMult <2>:                        gm2-libs-iso/ShortComplexMath.
+                                                               (line  57)
+ * scalb:                                 gm2-libs/cbuiltin.   (line 104)
+ * scalbf:                                gm2-libs/cbuiltin.   (line 105)
+ * scalbl:                                gm2-libs/cbuiltin.   (line 106)
+ * scalbln:                               Built-ins.           (line 130)
+ * scalbln <1>:                           gm2-libs/Builtins.   (line  77)
+ * scalbln <2>:                           gm2-libs/cbuiltin.   (line 112)
+ * scalblnf:                              Built-ins.           (line 131)
+ * scalblnf <1>:                          gm2-libs/Builtins.   (line  78)
+ * scalblnf <2>:                          gm2-libs/cbuiltin.   (line 113)
+ * scalblnl:                              Built-ins.           (line 132)
+ * scalblnl <1>:                          gm2-libs/Builtins.   (line  79)
+ * scalblnl <2>:                          gm2-libs/cbuiltin.   (line 114)
+ * scalbn:                                Built-ins.           (line 134)
+ * scalbn <1>:                            gm2-libs/Builtins.   (line  81)
+ * scalbn <2>:                            gm2-libs/cbuiltin.   (line 108)
+ * scalbnf:                               Built-ins.           (line 135)
+ * scalbnf <1>:                           gm2-libs/Builtins.   (line  82)
+ * scalbnf <2>:                           gm2-libs/cbuiltin.   (line 109)
+ * scalbnl:                               Built-ins.           (line 136)
+ * scalbnl <1>:                           gm2-libs/Builtins.   (line  83)
+ * scalbnl <2>:                           gm2-libs/cbuiltin.   (line 110)
+ * scale:                                 gm2-libs-iso/LowLong.
+                                                               (line  54)
+ * scale <1>:                             gm2-libs-iso/LowReal.
+                                                               (line  54)
+ * scale <2>:                             gm2-libs-iso/LowShort.
+                                                               (line  54)
+ * ScanCard:                              gm2-libs-iso/WholeConv.
+                                                               (line  39)
+ * ScanClass (type):                      gm2-libs-iso/ConvTypes.
+                                                               (line  19)
+ * ScanInt:                               gm2-libs-iso/WholeConv.
+                                                               (line  17)
+ * ScanReal:                              gm2-libs-iso/LongConv.
+                                                               (line  17)
+ * ScanReal <1>:                          gm2-libs-iso/RealConv.
+                                                               (line  17)
+ * ScanState (type):                      gm2-libs-iso/ConvTypes.
+                                                               (line  27)
+ * Sec (type):                            gm2-libs-iso/SysClock.
+                                                               (line  19)
+ * Select:                                gm2-libs/Selective.  (line  22)
+ * select:                                gm2-libs-iso/RTco.   (line  50)
+ * SEMAPHORE (type):                      gm2-libs-coroutines/Executive.
+                                                               (line  14)
+ * SetBits:                               gm2-libs-log/BitByteOps.
+                                                               (line  25)
+ * SetBits <1>:                           gm2-libs-log/BitWordOps.
+                                                               (line  25)
+ * SetChar:                               gm2-libs/termios.    (line 209)
+ * SetClock:                              gm2-libs-iso/SysClock.
+                                                               (line  51)
+ * SetDebug:                              gm2-libs/PushBackInput.
+                                                               (line  97)
+ * SetDeviceId:                           gm2-libs-iso/RTio.   (line  53)
+ * SetDevicePtr:                          gm2-libs-iso/RTio.   (line  67)
+ * setenv:                                gm2-libs/libc.       (line 356)
+ * SetErrChan:                            gm2-libs-iso/StdChans.
+                                                               (line  58)
+ * SetErrorCode:                          gm2-libs-log/ErrorCode.
+                                                               (line  16)
+ * SetExceptionBlock:                     gm2-libs/RTExceptions.
+                                                               (line  45)
+ * SetExceptionSource:                    gm2-libs/RTExceptions.
+                                                               (line 164)
+ * SetExceptionState:                     gm2-libs/RTExceptions.
+                                                               (line 140)
+ * SetFile:                               gm2-libs-iso/RTio.   (line  81)
+ * SetFlag:                               gm2-libs/termios.    (line 193)
+ * SetInChan:                             gm2-libs-iso/StdChans.
+                                                               (line  52)
+ * setjmp:                                Built-ins.           (line 234)
+ * setjmp <1>:                            gm2-libs/Builtins.   (line 181)
+ * setjmp <2>:                            gm2-libs/libc.       (line 420)
+ * setMode:                               gm2-libs-iso/LowLong.
+                                                               (line  66)
+ * setMode <1>:                           gm2-libs-iso/LowReal.
+                                                               (line  66)
+ * setMode <2>:                           gm2-libs-iso/LowShort.
+                                                               (line  66)
+ * SetModify:                             gm2-libs-log/FileSystem.
+                                                               (line 193)
+ * SetNoOfDecimalPlaces:                  gm2-libs-log/RealInOut.
+                                                               (line  28)
+ * SetNoOfExponentDigits:                 gm2-libs-log/RealConversions.
+                                                               (line  22)
+ * SetOfFd (type):                        gm2-libs/Selective.  (line  18)
+ * SetOpen:                               gm2-libs-log/FileSystem.
+                                                               (line 204)
+ * SetOption:                             gm2-libs/cgetopt.    (line  73)
+ * SetOrDesignatorOrFunction (ebnf):      EBNF.                (line 267)
+ * SetOutChan:                            gm2-libs-iso/StdChans.
+                                                               (line  55)
+ * SetPos:                                gm2-libs-log/FileSystem.
+                                                               (line 219)
+ * SetPos <1>:                            gm2-libs-iso/RndFile.
+                                                               (line  98)
+ * SetPositionFromBeginning:              gm2-libs/FIO.        (line 277)
+ * SetPositionFromEnd:                    gm2-libs/FIO.        (line 284)
+ * setPushBackChar:                       gm2-libs-iso/wrapsock.
+                                                               (line  89)
+ * SetRead:                               gm2-libs-log/FileSystem.
+                                                               (line 176)
+ * SetReadResult:                         gm2-libs-iso/IOChan. (line 114)
+ * SetTime:                               gm2-libs/Selective.  (line  29)
+ * SetTime <1>:                           gm2-libs-log/TimeDate.
+                                                               (line  45)
+ * settimeofday:                          gm2-libs-iso/wraptime.
+                                                               (line  81)
+ * SetTimeRealtime:                       gm2-libs-iso/wrapclock.
+                                                               (line 115)
+ * SetTimespec:                           gm2-libs-iso/wrapclock.
+                                                               (line  95)
+ * SetTimeval:                            gm2-libs-iso/wraptime.
+                                                               (line 168)
+ * SetTimezone:                           gm2-libs-iso/wraptime.
+                                                               (line 177)
+ * SetType (ebnf):                        EBNF.                (line 203)
+ * SetWrite:                              gm2-libs-log/FileSystem.
+                                                               (line 184)
+ * SFLOAT:                                Standard procedures. (line 212)
+ * SHIFT:                                 The PIM system module.
+                                                               (line  94)
+ * SHIFT <1>:                             The ISO system module.
+                                                               (line 140)
+ * SHIFT <2>:                             gm2-libs/SYSTEM.     (line  94)
+ * SHIFT <3>:                             gm2-libs-coroutines/SYSTEM.
+                                                               (line 176)
+ * SHIFT <4>:                             gm2-libs-iso/SYSTEM. (line 140)
+ * ShiftException:                        gm2-libs/M2RTS.      (line 158)
+ * ShiftException <1>:                    gm2-libs-iso/M2RTS.  (line 166)
+ * ShiftLeft:                             The PIM system module.
+                                                               (line 154)
+ * ShiftLeft <1>:                         The ISO system module.
+                                                               (line 207)
+ * ShiftLeft <2>:                         gm2-libs/SYSTEM.     (line 154)
+ * ShiftLeft <3>:                         gm2-libs-coroutines/SYSTEM.
+                                                               (line 235)
+ * ShiftLeft <4>:                         gm2-libs-iso/SYSTEM. (line 207)
+ * ShiftRight:                            The PIM system module.
+                                                               (line 165)
+ * ShiftRight <1>:                        The ISO system module.
+                                                               (line 218)
+ * ShiftRight <2>:                        gm2-libs/SYSTEM.     (line 165)
+ * ShiftRight <3>:                        gm2-libs-coroutines/SYSTEM.
+                                                               (line 246)
+ * ShiftRight <4>:                        gm2-libs-iso/SYSTEM. (line 218)
+ * ShiftVal:                              The PIM system module.
+                                                               (line 142)
+ * ShiftVal <1>:                          The ISO system module.
+                                                               (line 195)
+ * ShiftVal <2>:                          gm2-libs/SYSTEM.     (line 142)
+ * ShiftVal <3>:                          gm2-libs-coroutines/SYSTEM.
+                                                               (line 223)
+ * ShiftVal <4>:                          gm2-libs-iso/SYSTEM. (line 195)
+ * ShortCardinalToString:                 gm2-libs/StringConvert.
+                                                               (line 139)
+ * shutdown:                              gm2-libs/libc.       (line 404)
+ * si (const):                            gm2-libs/ASCII.      (line  24)
+ * sign:                                  gm2-libs-iso/LowLong.
+                                                               (line  36)
+ * sign <1>:                              gm2-libs-iso/LowReal.
+                                                               (line  36)
+ * sign <2>:                              gm2-libs-iso/LowShort.
+                                                               (line  36)
+ * Signal:                                gm2-libs-coroutines/Executive.
+                                                               (line  82)
+ * signal:                                gm2-libs-iso/RTco.   (line  23)
+ * signalThread:                          gm2-libs-iso/RTco.   (line  29)
+ * signbit:                               Built-ins.           (line 118)
+ * signbit <1>:                           gm2-libs/Builtins.   (line  65)
+ * signbit <2>:                           gm2-libs/wrapc.      (line  74)
+ * signbitf:                              Built-ins.           (line 119)
+ * signbitf <1>:                          gm2-libs/Builtins.   (line  66)
+ * signbitf <2>:                          gm2-libs/wrapc.      (line  75)
+ * signbitl:                              Built-ins.           (line 120)
+ * signbitl <1>:                          gm2-libs/Builtins.   (line  67)
+ * signbitl <2>:                          gm2-libs/wrapc.      (line  76)
+ * significand:                           gm2-libs/cbuiltin.   (line  88)
+ * significandf:                          gm2-libs/cbuiltin.   (line  89)
+ * significandl:                          gm2-libs/cbuiltin.   (line  90)
+ * SimpleConstExpr (ebnf):                EBNF.                (line  64)
+ * SimpleDes (ebnf):                      EBNF.                (line 271)
+ * SimpleExpression (ebnf):               EBNF.                (line 253)
+ * SimpleType (ebnf):                     EBNF.                (line 135)
+ * sin:                                   Built-ins.           (line  70)
+ * sin <1>:                               gm2-libs/Builtins.   (line  17)
+ * sin <2>:                               gm2-libs/LMathLib0.  (line  16)
+ * sin <3>:                               gm2-libs/MathLib0.   (line  16)
+ * sin <4>:                               gm2-libs/SMathLib0.  (line  16)
+ * sin <5>:                               gm2-libs/cbuiltin.   (line  58)
+ * sin <6>:                               gm2-libs/libm.       (line  28)
+ * sin <7>:                               gm2-libs-iso/ComplexMath.
+                                                               (line  36)
+ * sin <8>:                               gm2-libs-iso/LongComplexMath.
+                                                               (line  36)
+ * sin <9>:                               gm2-libs-iso/LongMath.
+                                                               (line  25)
+ * sin <10>:                              gm2-libs-iso/RealMath.
+                                                               (line  25)
+ * sin <11>:                              gm2-libs-iso/ShortComplexMath.
+                                                               (line  36)
+ * sinf:                                  Built-ins.           (line  69)
+ * sinf <1>:                              gm2-libs/Builtins.   (line  16)
+ * sinf <2>:                              gm2-libs/cbuiltin.   (line  57)
+ * sinf <3>:                              gm2-libs/libm.       (line  30)
+ * sinl:                                  Built-ins.           (line  71)
+ * sinl <1>:                              gm2-libs/Builtins.   (line  18)
+ * sinl <2>:                              gm2-libs/cbuiltin.   (line  59)
+ * sinl <3>:                              gm2-libs/libm.       (line  29)
+ * SIZE:                                  The PIM system module.
+                                                               (line  76)
+ * SIZE <1>:                              gm2-libs/SYSTEM.     (line  76)
+ * SIZE <2>:                              gm2-libs-coroutines/SYSTEM.
+                                                               (line 159)
+ * Skip:                                  gm2-libs-iso/IOChan. (line  44)
+ * SkipLine:                              gm2-libs-iso/STextIO.
+                                                               (line  41)
+ * SkipLine <1>:                          gm2-libs-iso/TextIO. (line  49)
+ * SkipLook:                              gm2-libs-iso/IOChan. (line  51)
+ * SkipLookProc (type):                   gm2-libs-iso/IOLink. (line  43)
+ * SkipProc (type):                       gm2-libs-iso/IOLink. (line  42)
+ * SkipSpaces:                            gm2-libs-iso/TextUtil.
+                                                               (line  19)
+ * sleep:                                 gm2-libs/libc.       (line 453)
+ * Sleep:                                 gm2-libs-coroutines/TimerHandler.
+                                                               (line  34)
+ * sleepSpin:                             gm2-libs/gdbif.      (line  26)
+ * Slice:                                 gm2-libs/DynamicStrings.
+                                                               (line 161)
+ * Slice <1>:                             gm2-libs/OptLib.     (line  44)
+ * SliceDB:                               gm2-libs/DynamicStrings.
+                                                               (line 319)
+ * small (const):                         gm2-libs-iso/LowLong.
+                                                               (line  16)
+ * small (const) <1>:                     gm2-libs-iso/LowReal.
+                                                               (line  16)
+ * small (const) <2>:                     gm2-libs-iso/LowShort.
+                                                               (line  16)
+ * snprintf:                              gm2-libs/libc.       (line 347)
+ * so (const):                            gm2-libs/ASCII.      (line  24)
+ * soh (const):                           gm2-libs/ASCII.      (line  21)
+ * Sources (type):                        gm2-libs-iso/Processes.
+                                                               (line  20)
+ * sp (const):                            gm2-libs/ASCII.      (line  29)
+ * Sprintf0:                              gm2-libs/FormatStrings.
+                                                               (line  19)
+ * Sprintf1:                              gm2-libs/FormatStrings.
+                                                               (line  28)
+ * Sprintf2:                              gm2-libs/FormatStrings.
+                                                               (line  35)
+ * Sprintf3:                              gm2-libs/FormatStrings.
+                                                               (line  42)
+ * Sprintf4:                              gm2-libs/FormatStrings.
+                                                               (line  49)
+ * sqrt:                                  Built-ins.           (line  78)
+ * sqrt <1>:                              gm2-libs/Builtins.   (line  25)
+ * sqrt <2>:                              gm2-libs/LMathLib0.  (line  13)
+ * sqrt <3>:                              gm2-libs/MathLib0.   (line  13)
+ * sqrt <4>:                              gm2-libs/SMathLib0.  (line  13)
+ * sqrt <5>:                              gm2-libs/cbuiltin.   (line  67)
+ * sqrt <6>:                              gm2-libs/libm.       (line  37)
+ * sqrt <7>:                              gm2-libs-iso/ComplexMath.
+                                                               (line  27)
+ * sqrt <8>:                              gm2-libs-iso/LongComplexMath.
+                                                               (line  27)
+ * sqrt <9>:                              gm2-libs-iso/LongMath.
+                                                               (line  14)
+ * sqrt <10>:                             gm2-libs-iso/RealMath.
+                                                               (line  14)
+ * sqrt <11>:                             gm2-libs-iso/ShortComplexMath.
+                                                               (line  27)
+ * sqrtf:                                 Built-ins.           (line  77)
+ * sqrtf <1>:                             gm2-libs/Builtins.   (line  24)
+ * sqrtf <2>:                             gm2-libs/cbuiltin.   (line  66)
+ * sqrtf <3>:                             gm2-libs/libm.       (line  39)
+ * sqrtl:                                 Built-ins.           (line  79)
+ * sqrtl <1>:                             gm2-libs/Builtins.   (line  26)
+ * sqrtl <2>:                             gm2-libs/cbuiltin.   (line  68)
+ * sqrtl <3>:                             gm2-libs/libm.       (line  38)
+ * srand:                                 gm2-libs/libc.       (line 363)
+ * Start:                                 gm2-libs-iso/Processes.
+                                                               (line  38)
+ * StartPos:                              gm2-libs-iso/RndFile.
+                                                               (line  71)
+ * Statement (ebnf):                      EBNF.                (line 283)
+ * StatementSequence (ebnf):              EBNF.                (line 294)
+ * StaticArraySubscriptException:         gm2-libs/M2RTS.      (line 160)
+ * StaticArraySubscriptException <1>:     gm2-libs-iso/M2RTS.  (line 168)
+ * StatusProcedure (type):                gm2-libs-log/Termbase.
+                                                               (line  21)
+ * StdErr (var):                          gm2-libs/FIO.        (line  39)
+ * StdErrChan:                            gm2-libs-iso/StdChans.
+                                                               (line  31)
+ * StdIn (var):                           gm2-libs/FIO.        (line  39)
+ * StdInChan:                             gm2-libs-iso/StdChans.
+                                                               (line  20)
+ * StdOut (var):                          gm2-libs/FIO.        (line  39)
+ * StdOutChan:                            gm2-libs-iso/StdChans.
+                                                               (line  26)
+ * stoc:                                  gm2-libs/StringConvert.
+                                                               (line 180)
+ * stoi:                                  gm2-libs/StringConvert.
+                                                               (line 159)
+ * stolr:                                 gm2-libs/StringConvert.
+                                                               (line 270)
+ * StopMe:                                gm2-libs-iso/Processes.
+                                                               (line  45)
+ * stor:                                  gm2-libs/StringConvert.
+                                                               (line 263)
+ * StorageException:                      gm2-libs-iso/Storage.
+                                                               (line  44)
+ * StorageExceptions (type):              gm2-libs-iso/Storage.
+                                                               (line  32)
+ * strcat:                                Built-ins.           (line 207)
+ * strcat <1>:                            gm2-libs/Builtins.   (line 154)
+ * strcat <2>:                            gm2-libs/cbuiltin.   (line 173)
+ * strchr:                                Built-ins.           (line 221)
+ * strchr <1>:                            gm2-libs/Builtins.   (line 168)
+ * strchr <2>:                            gm2-libs/cbuiltin.   (line 184)
+ * strcmp:                                Built-ins.           (line 213)
+ * strcmp <1>:                            gm2-libs/Builtins.   (line 160)
+ * strcmp <2>:                            gm2-libs/cbuiltin.   (line 177)
+ * StrConCat:                             gm2-libs/StrLib.     (line  16)
+ * StrCopy:                               gm2-libs/StrLib.     (line  47)
+ * strcpy:                                Built-ins.           (line 210)
+ * strcpy <1>:                            gm2-libs/Builtins.   (line 157)
+ * strcpy <2>:                            gm2-libs/cbuiltin.   (line 175)
+ * strcpy <3>:                            gm2-libs/libc.       (line 276)
+ * strcspn:                               Built-ins.           (line 220)
+ * strcspn <1>:                           gm2-libs/Builtins.   (line 167)
+ * strcspn <2>:                           gm2-libs/cbuiltin.   (line 183)
+ * StrEqual:                              gm2-libs/StrLib.     (line  31)
+ * string:                                gm2-libs/DynamicStrings.
+                                                               (line 254)
+ * string (ebnf):                         EBNF.                (line  26)
+ * String (type):                         gm2-libs/DynamicStrings.
+                                                               (line  22)
+ * String1 (type):                        gm2-libs-iso/Strings.
+                                                               (line  11)
+ * StringToCardinal:                      gm2-libs/StringConvert.
+                                                               (line  71)
+ * StringToInteger:                       gm2-libs/StringConvert.
+                                                               (line  60)
+ * StringToLongCardinal:                  gm2-libs/StringConvert.
+                                                               (line 125)
+ * StringToLongInteger:                   gm2-libs/StringConvert.
+                                                               (line  99)
+ * StringToLongreal:                      gm2-libs/StringConvert.
+                                                               (line 230)
+ * StringToLongReal:                      gm2-libs-log/RealConversions.
+                                                               (line 111)
+ * StringToReal:                          gm2-libs-log/RealConversions.
+                                                               (line 103)
+ * StringToShortCardinal:                 gm2-libs/StringConvert.
+                                                               (line 151)
+ * strlen:                                Built-ins.           (line 216)
+ * strlen <1>:                            gm2-libs/Builtins.   (line 163)
+ * StrLen:                                gm2-libs/StrLib.     (line  38)
+ * strlen <2>:                            gm2-libs/cbuiltin.   (line 179)
+ * strlen <3>:                            gm2-libs/libc.       (line 268)
+ * StrLess:                               gm2-libs/StrLib.     (line  24)
+ * strncat:                               Built-ins.           (line 208)
+ * strncat <1>:                           gm2-libs/Builtins.   (line 155)
+ * strncat <2>:                           gm2-libs/cbuiltin.   (line 174)
+ * strncmp:                               Built-ins.           (line 214)
+ * strncmp <1>:                           gm2-libs/Builtins.   (line 161)
+ * strncmp <2>:                           gm2-libs/cbuiltin.   (line 178)
+ * strncpy:                               Built-ins.           (line 211)
+ * strncpy <1>:                           gm2-libs/Builtins.   (line 158)
+ * strncpy <2>:                           gm2-libs/cbuiltin.   (line 176)
+ * strncpy <3>:                           gm2-libs/libc.       (line 284)
+ * strpbrk:                               Built-ins.           (line 218)
+ * strpbrk <1>:                           gm2-libs/Builtins.   (line 165)
+ * strpbrk <2>:                           gm2-libs/cbuiltin.   (line 181)
+ * strrchr:                               Built-ins.           (line 222)
+ * strrchr <1>:                           gm2-libs/Builtins.   (line 169)
+ * strrchr <2>:                           gm2-libs/cbuiltin.   (line 185)
+ * StrRemoveWhitePrefix:                  gm2-libs/StrLib.     (line  62)
+ * strspn:                                Built-ins.           (line 219)
+ * strspn <1>:                            gm2-libs/Builtins.   (line 166)
+ * strspn <2>:                            gm2-libs/cbuiltin.   (line 182)
+ * strstr:                                Built-ins.           (line 217)
+ * strstr <1>:                            gm2-libs/Builtins.   (line 164)
+ * strstr <2>:                            gm2-libs/cbuiltin.   (line 180)
+ * strtime:                               gm2-libs/wrapc.      (line  21)
+ * StrToBin:                              gm2-libs/NumberIO.   (line  53)
+ * StrToBinInt:                           gm2-libs/NumberIO.   (line  55)
+ * StrToCard:                             gm2-libs/NumberIO.   (line  29)
+ * StrToCard <1>:                         gm2-libs-iso/WholeStr.
+                                                               (line  37)
+ * strtod:                                gm2-libs/dtoa.       (line  19)
+ * StrToHex:                              gm2-libs/NumberIO.   (line  33)
+ * StrToHexInt:                           gm2-libs/NumberIO.   (line  57)
+ * StrToInt:                              gm2-libs/NumberIO.   (line  37)
+ * StrToInt <1>:                          gm2-libs-iso/WholeStr.
+                                                               (line  21)
+ * strtold:                               gm2-libs/ldtoa.      (line  19)
+ * StrToLongInt:                          gm2-libs/FpuIO.      (line  31)
+ * StrToLongReal:                         gm2-libs/FpuIO.      (line  24)
+ * StrToLowerCase:                        gm2-libs/StrCase.    (line  25)
+ * StrToOct:                              gm2-libs/NumberIO.   (line  45)
+ * StrToOctInt:                           gm2-libs/NumberIO.   (line  59)
+ * StrToReal:                             gm2-libs/FpuIO.      (line  17)
+ * StrToReal <1>:                         gm2-libs-iso/LongStr.
+                                                               (line  27)
+ * StrToReal <2>:                         gm2-libs-iso/RealStr.
+                                                               (line  27)
+ * StrToUpperCase:                        gm2-libs/StrCase.    (line  17)
+ * STRUNC:                                Standard procedures. (line 221)
+ * stx (const):                           gm2-libs/ASCII.      (line  21)
+ * sub (const):                           gm2-libs/ASCII.      (line  27)
+ * SUBADR:                                The ISO system module.
+                                                               (line  99)
+ * SUBADR <1>:                            gm2-libs-iso/SYSTEM. (line  99)
+ * SubDesignator (ebnf):                  EBNF.                (line 243)
+ * SubrangeType (ebnf):                   EBNF.                (line 145)
+ * succ:                                  gm2-libs-iso/LowLong.
+                                                               (line  39)
+ * succ <1>:                              gm2-libs-iso/LowReal.
+                                                               (line  39)
+ * succ <2>:                              gm2-libs-iso/LowShort.
+                                                               (line  39)
+ * Suspend:                               gm2-libs-coroutines/Executive.
+                                                               (line  55)
+ * SuspendMe:                             gm2-libs-iso/Processes.
+                                                               (line  50)
+ * SuspendMeAndActivate:                  gm2-libs-iso/Processes.
+                                                               (line  61)
+ * Swap:                                  gm2-libs-log/BitByteOps.
+                                                               (line 119)
+ * Swap <1>:                              gm2-libs-log/BitWordOps.
+                                                               (line 119)
+ * Switch:                                gm2-libs-iso/Processes.
+                                                               (line  65)
+ * SwitchCaps:                            gm2-libs-coroutines/KeyBoardLEDs.
+                                                               (line  39)
+ * SwitchExceptionState:                  gm2-libs/RTExceptions.
+                                                               (line 149)
+ * SwitchLeds:                            gm2-libs-coroutines/KeyBoardLEDs.
+                                                               (line  18)
+ * SwitchNum:                             gm2-libs-coroutines/KeyBoardLEDs.
+                                                               (line  32)
+ * SwitchScroll:                          gm2-libs-coroutines/KeyBoardLEDs.
+                                                               (line  25)
+ * syn (const):                           gm2-libs/ASCII.      (line  26)
+ * synthesize:                            gm2-libs-iso/LowLong.
+                                                               (line  63)
+ * synthesize <1>:                        gm2-libs-iso/LowReal.
+                                                               (line  63)
+ * synthesize <2>:                        gm2-libs-iso/LowShort.
+                                                               (line  63)
+ * system:                                gm2-libs/libc.       (line  76)
+ * tab (const):                           gm2-libs/ASCII.      (line  30)
+ * TagIdent (ebnf):                       EBNF.                (line 182)
+ * tan:                                   gm2-libs/LMathLib0.  (line  18)
+ * tan <1>:                               gm2-libs/MathLib0.   (line  18)
+ * tan <2>:                               gm2-libs/SMathLib0.  (line  18)
+ * tan <3>:                               gm2-libs/libm.       (line  34)
+ * tan <4>:                               gm2-libs-iso/ComplexMath.
+                                                               (line  42)
+ * tan <5>:                               gm2-libs-iso/LongComplexMath.
+                                                               (line  42)
+ * tan <6>:                               gm2-libs-iso/LongMath.
+                                                               (line  31)
+ * tan <7>:                               gm2-libs-iso/RealMath.
+                                                               (line  31)
+ * tan <8>:                               gm2-libs-iso/ShortComplexMath.
+                                                               (line  42)
+ * tanf:                                  gm2-libs/libm.       (line  36)
+ * tanl:                                  gm2-libs/libm.       (line  35)
+ * TBITSIZE:                              The PIM system module.
+                                                               (line 115)
+ * TBITSIZE <1>:                          The ISO system module.
+                                                               (line 174)
+ * TBITSIZE <2>:                          gm2-libs/SYSTEM.     (line 115)
+ * TBITSIZE <3>:                          gm2-libs-coroutines/SYSTEM.
+                                                               (line 196)
+ * TBITSIZE <4>:                          gm2-libs-iso/SYSTEM. (line 174)
+ * tcdrain:                               gm2-libs/termios.    (line 128)
+ * tcflowoffi:                            gm2-libs/termios.    (line 163)
+ * tcflowoffo:                            gm2-libs/termios.    (line 177)
+ * tcflowoni:                             gm2-libs/termios.    (line 156)
+ * tcflowono:                             gm2-libs/termios.    (line 170)
+ * tcflushi:                              gm2-libs/termios.    (line 135)
+ * tcflushio:                             gm2-libs/termios.    (line 149)
+ * tcflusho:                              gm2-libs/termios.    (line 142)
+ * tcgetattr:                             gm2-libs/termios.    (line  91)
+ * tcpClientConnect:                      gm2-libs/sckt.       (line 115)
+ * tcpClientIP:                           gm2-libs/sckt.       (line 136)
+ * tcpClientPortNo:                       gm2-libs/sckt.       (line 122)
+ * tcpClientSocket:                       gm2-libs/sckt.       (line  99)
+ * tcpClientSocketFd:                     gm2-libs/sckt.       (line 129)
+ * tcpClientSocketIP:                     gm2-libs/sckt.       (line 107)
+ * tcpClientState (type):                 gm2-libs/sckt.       (line  20)
+ * tcpServerAccept:                       gm2-libs/sckt.       (line  47)
+ * tcpServerClientIP:                     gm2-libs/sckt.       (line  83)
+ * tcpServerClientPortNo:                 gm2-libs/sckt.       (line  91)
+ * tcpServerEstablish:                    gm2-libs/sckt.       (line  29)
+ * tcpServerEstablishPort:                gm2-libs/sckt.       (line  39)
+ * tcpServerIP:                           gm2-libs/sckt.       (line  75)
+ * tcpServerPortNo:                       gm2-libs/sckt.       (line  54)
+ * tcpServerSocketFd:                     gm2-libs/sckt.       (line  61)
+ * tcpServerState (type):                 gm2-libs/sckt.       (line  19)
+ * tcsdrain:                              gm2-libs/termios.    (line  99)
+ * tcsendbreak:                           gm2-libs/termios.    (line 121)
+ * tcsetattr:                             gm2-libs/termios.    (line 107)
+ * tcsflush:                              gm2-libs/termios.    (line 100)
+ * tcsnow:                                gm2-libs/termios.    (line  98)
+ * Term (ebnf):                           EBNF.                (line 256)
+ * termCH (var):                          gm2-libs-log/InOut.  (line  22)
+ * Terminate:                             gm2-libs/M2RTS.      (line  86)
+ * TerminateOnError:                      gm2-libs/Scan.       (line  44)
+ * TERMIOS (type):                        gm2-libs/termios.    (line  11)
+ * text (const):                          gm2-libs-iso/ChanConsts.
+                                                               (line  30)
+ * text (const) <1>:                      gm2-libs-iso/RndFile.
+                                                               (line  27)
+ * text (const) <2>:                      gm2-libs-iso/SeqFile.
+                                                               (line  30)
+ * text (const) <3>:                      gm2-libs-iso/StreamFile.
+                                                               (line  24)
+ * text (const) <4>:                      gm2-libs-iso/TermFile.
+                                                               (line  29)
+ * TextRead:                              gm2-libs-iso/IOChan. (line  64)
+ * TextReadProc (type):                   gm2-libs-iso/IOLink. (line  45)
+ * TextWrite:                             gm2-libs-iso/IOChan. (line  73)
+ * TextWriteProc (type):                  gm2-libs-iso/IOLink. (line  46)
+ * THROW:                                 The PIM system module.
+                                                               (line 102)
+ * THROW <1>:                             The ISO system module.
+                                                               (line 161)
+ * THROW <2>:                             gm2-libs/SYSTEM.     (line 102)
+ * THROW <3>:                             gm2-libs-coroutines/SYSTEM.
+                                                               (line 184)
+ * THROW <4>:                             gm2-libs-iso/SYSTEM. (line 161)
+ * TicksPerSecond (const):                gm2-libs-coroutines/TimerHandler.
+                                                               (line  16)
+ * time:                                  gm2-libs/libc.       (line 379)
+ * timeb (type):                          gm2-libs/libc.       (line  47)
+ * timespec (type):                       gm2-libs-iso/wrapclock.
+                                                               (line  11)
+ * TimeToString:                          gm2-libs-log/TimeDate.
+                                                               (line  74)
+ * TimeToZero:                            gm2-libs-log/TimeDate.
+                                                               (line  63)
+ * Timeval (type):                        gm2-libs/Selective.  (line  19)
+ * timeval (type):                        gm2-libs-iso/wraptime.
+                                                               (line  18)
+ * timezone:                              gm2-libs-iso/wrapclock.
+                                                               (line  23)
+ * timezone (type):                       gm2-libs-iso/wraptime.
+                                                               (line  19)
+ * time_t (type):                         gm2-libs/libc.       (line  30)
+ * tm (type):                             gm2-libs/libc.       (line  33)
+ * tm (type) <1>:                         gm2-libs-iso/wraptime.
+                                                               (line  20)
+ * ToDecimalPlaces:                       gm2-libs/StringConvert.
+                                                               (line 313)
+ * ToLower:                               gm2-libs/DynamicStrings.
+                                                               (line 225)
+ * ToSigFig:                              gm2-libs/StringConvert.
+                                                               (line 291)
+ * ToUpper:                               gm2-libs/DynamicStrings.
+                                                               (line 216)
+ * TRANSFER:                              gm2-libs-coroutines/SYSTEM.
+                                                               (line  89)
+ * TRANSFER <1>:                          gm2-libs-iso/COROUTINES.
+                                                               (line  37)
+ * transfer:                              gm2-libs-iso/RTco.   (line  25)
+ * TrashList (ebnf):                      EBNF.                (line 481)
+ * TRUNC:                                 Standard procedures. (line 230)
+ * Trunc:                                 gm2-libs-log/FloatingUtilities.
+                                                               (line  45)
+ * trunc:                                 gm2-libs-iso/LowLong.
+                                                               (line  57)
+ * trunc <1>:                             gm2-libs-iso/LowReal.
+                                                               (line  57)
+ * trunc <2>:                             gm2-libs-iso/LowShort.
+                                                               (line  57)
+ * TRUNCL:                                Standard procedures. (line 248)
+ * Truncl:                                gm2-libs-log/FloatingUtilities.
+                                                               (line  81)
+ * TRUNCS:                                Standard procedures. (line 239)
+ * TSIZE:                                 The PIM system module.
+                                                               (line  81)
+ * TSIZE <1>:                             The ISO system module.
+                                                               (line 155)
+ * TSIZE <2>:                             gm2-libs/SYSTEM.     (line  81)
+ * TSIZE <3>:                             gm2-libs-coroutines/SYSTEM.
+                                                               (line 164)
+ * TSIZE <4>:                             gm2-libs-iso/SYSTEM. (line 155)
+ * ttyname:                               gm2-libs/libc.       (line 446)
+ * TurnInterrupts:                        gm2-libs-coroutines/SYSTEM.
+                                                               (line 149)
+ * TurnInterrupts <1>:                    gm2-libs-iso/COROUTINES.
+                                                               (line  86)
+ * turnInterrupts:                        gm2-libs-iso/RTco.   (line  42)
+ * Type (ebnf):                           EBNF.                (line 131)
+ * TypeDeclaration (ebnf):                EBNF.                (line 127)
+ * tzname:                                gm2-libs-iso/wrapclock.
+                                                               (line  62)
+ * ulp:                                   gm2-libs-iso/LowLong.
+                                                               (line  42)
+ * ulp <1>:                               gm2-libs-iso/LowReal.
+                                                               (line  42)
+ * ulp <2>:                               gm2-libs-iso/LowShort.
+                                                               (line  42)
+ * UnaryOrConstTerm (ebnf):               EBNF.                (line  69)
+ * UnassignedPriority (const):            gm2-libs-iso/COROUTINES.
+                                                               (line  14)
+ * UnAssignRead:                          gm2-libs-log/Termbase.
+                                                               (line  41)
+ * UnAssignWrite:                         gm2-libs-log/Termbase.
+                                                               (line  75)
+ * UnAvailable:                           gm2-libs-iso/ErrnoCategory.
+                                                               (line  42)
+ * UnBufferedMode:                        gm2-libs/IO.         (line  29)
+ * UnInstallBreak:                        gm2-libs-log/Break.  (line  41)
+ * unlink:                                gm2-libs/libc.       (line 291)
+ * UnMakeChan:                            gm2-libs-iso/IOLink. (line  29)
+ * UnReadChar:                            gm2-libs/FIO.        (line 218)
+ * unreadchar (type):                     gm2-libs-iso/RTgenif.
+                                                               (line  20)
+ * Urgency (type):                        gm2-libs-iso/Processes.
+                                                               (line  19)
+ * UrgencyOf:                             gm2-libs-iso/Processes.
+                                                               (line 117)
+ * us (const):                            gm2-libs/ASCII.      (line  28)
+ * userdeverror) (type):                  gm2-libs-log/FileSystem.
+                                                               (line  51)
+ * UTCDiff (type):                        gm2-libs-iso/SysClock.
+                                                               (line  21)
+ * VAL:                                   Standard procedures. (line 257)
+ * ValueCard:                             gm2-libs-iso/WholeConv.
+                                                               (line  50)
+ * ValueInt:                              gm2-libs-iso/WholeConv.
+                                                               (line  28)
+ * ValueReal:                             gm2-libs-iso/LongConv.
+                                                               (line  27)
+ * ValueReal <1>:                         gm2-libs-iso/RealConv.
+                                                               (line  27)
+ * VarFPSection (ebnf):                   EBNF.                (line 412)
+ * VariableDeclaration (ebnf):            EBNF.                (line 233)
+ * VarIdent (ebnf):                       EBNF.                (line 230)
+ * VarIdentList (ebnf):                   EBNF.                (line 236)
+ * Varient (ebnf):                        EBNF.                (line 188)
+ * VarientCaseLabelList (ebnf):           EBNF.                (line 191)
+ * VarientCaseLabels (ebnf):              EBNF.                (line 194)
+ * vt (const):                            gm2-libs/ASCII.      (line  23)
+ * Wait:                                  gm2-libs-coroutines/Executive.
+                                                               (line  73)
+ * Wait <1>:                              gm2-libs-iso/Processes.
+                                                               (line  75)
+ * wait:                                  gm2-libs-iso/RTco.   (line  21)
+ * WaitForIO:                             gm2-libs-coroutines/Executive.
+                                                               (line  89)
+ * WaitOn:                                gm2-libs-coroutines/TimerHandler.
+                                                               (line  56)
+ * waitThread:                            gm2-libs-iso/RTco.   (line  27)
+ * WarnError:                             gm2-libs/PushBackInput.
+                                                               (line  67)
+ * WarnString:                            gm2-libs/PushBackInput.
+                                                               (line  76)
+ * WasEOLN:                               gm2-libs/FIO.        (line 198)
+ * WhileStatement (ebnf):                 EBNF.                (line 311)
+ * WholeNonPosDivException:               gm2-libs/M2RTS.      (line 168)
+ * WholeNonPosDivException <1>:           gm2-libs-iso/M2RTS.  (line 176)
+ * WholeNonPosModException:               gm2-libs/M2RTS.      (line 169)
+ * WholeNonPosModException <1>:           gm2-libs-iso/M2RTS.  (line 177)
+ * WholeValueException:                   gm2-libs/M2RTS.      (line 172)
+ * WholeValueException <1>:               gm2-libs-iso/M2RTS.  (line 180)
+ * WholeZeroDivException:                 gm2-libs/M2RTS.      (line 170)
+ * WholeZeroDivException <1>:             gm2-libs-iso/M2RTS.  (line 178)
+ * WholeZeroRemException:                 gm2-libs/M2RTS.      (line 171)
+ * WholeZeroRemException <1>:             gm2-libs-iso/M2RTS.  (line 179)
+ * WithStatement (ebnf):                  EBNF.                (line 327)
+ * WORD (type):                           The PIM system module.
+                                                               (line  41)
+ * WORD (type) <1>:                       The ISO system module.
+                                                               (line  59)
+ * WORD (type) <2>:                       The ISO system module.
+                                                               (line  87)
+ * WORD (type) <3>:                       gm2-libs/SYSTEM.     (line  41)
+ * WORD (type) <4>:                       gm2-libs-iso/SYSTEM. (line  59)
+ * WORD (type) <5>:                       gm2-libs-iso/SYSTEM. (line  87)
+ * WORD16 (type):                         The PIM system module.
+                                                               (line  52)
+ * WORD16 (type) <1>:                     The ISO system module.
+                                                               (line  68)
+ * WORD16 (type) <2>:                     gm2-libs/SYSTEM.     (line  52)
+ * WORD16 (type) <3>:                     gm2-libs-iso/SYSTEM. (line  68)
+ * WORD32 (type):                         The PIM system module.
+                                                               (line  53)
+ * WORD32 (type) <1>:                     The ISO system module.
+                                                               (line  69)
+ * WORD32 (type) <2>:                     gm2-libs/SYSTEM.     (line  53)
+ * WORD32 (type) <3>:                     gm2-libs-iso/SYSTEM. (line  69)
+ * WORD64 (type):                         The PIM system module.
+                                                               (line  54)
+ * WORD64 (type) <1>:                     The ISO system module.
+                                                               (line  70)
+ * WORD64 (type) <2>:                     gm2-libs/SYSTEM.     (line  54)
+ * WORD64 (type) <3>:                     gm2-libs-iso/SYSTEM. (line  70)
+ * WordAnd:                               gm2-libs-log/BitWordOps.
+                                                               (line  33)
+ * WordNot:                               gm2-libs-log/BitWordOps.
+                                                               (line  54)
+ * WordOr:                                gm2-libs-log/BitWordOps.
+                                                               (line  40)
+ * WordRol:                               gm2-libs-log/BitWordOps.
+                                                               (line  94)
+ * WordRor:                               gm2-libs-log/BitWordOps.
+                                                               (line  86)
+ * WordSar:                               gm2-libs-log/BitWordOps.
+                                                               (line  78)
+ * WordShl:                               gm2-libs-log/BitWordOps.
+                                                               (line  70)
+ * WordShr:                               gm2-libs-log/BitWordOps.
+                                                               (line  62)
+ * WordXor:                               gm2-libs-log/BitWordOps.
+                                                               (line  47)
+ * Write:                                 gm2-libs/IO.         (line  21)
+ * Write <1>:                             gm2-libs/StdIO.      (line  32)
+ * write:                                 gm2-libs/libc.       (line  61)
+ * Write <2>:                             gm2-libs-log/Display.
+                                                               (line  17)
+ * Write <3>:                             gm2-libs-log/InOut.  (line  90)
+ * Write <4>:                             gm2-libs-log/Termbase.
+                                                               (line  83)
+ * Write <5>:                             gm2-libs-log/Terminal.
+                                                               (line  52)
+ * Write <6>:                             gm2-libs-iso/RawIO.  (line  21)
+ * Write <7>:                             gm2-libs-iso/SRawIO. (line  20)
+ * write (const):                         gm2-libs-iso/ChanConsts.
+                                                               (line  28)
+ * write (const) <1>:                     gm2-libs-iso/RndFile.
+                                                               (line  23)
+ * write (const) <2>:                     gm2-libs-iso/SeqFile.
+                                                               (line  24)
+ * write (const) <3>:                     gm2-libs-iso/StreamFile.
+                                                               (line  21)
+ * write (const) <4>:                     gm2-libs-iso/TermFile.
+                                                               (line  27)
+ * WriteAny:                              gm2-libs/FIO.        (line 167)
+ * WriteBin:                              gm2-libs/NumberIO.   (line  49)
+ * WriteByte:                             gm2-libs-log/FileSystem.
+                                                               (line 144)
+ * writebytes (type):                     gm2-libs-iso/RTgenif.
+                                                               (line  23)
+ * WriteCard:                             gm2-libs/NumberIO.   (line  17)
+ * WriteCard <1>:                         gm2-libs-log/InOut.  (line 122)
+ * WriteCard <2>:                         gm2-libs-iso/LongWholeIO.
+                                                               (line  43)
+ * WriteCard <3>:                         gm2-libs-iso/SLongWholeIO.
+                                                               (line  41)
+ * WriteCard <4>:                         gm2-libs-iso/SShortWholeIO.
+                                                               (line  41)
+ * WriteCard <5>:                         gm2-libs-iso/SWholeIO.
+                                                               (line  41)
+ * WriteCard <6>:                         gm2-libs-iso/ShortWholeIO.
+                                                               (line  43)
+ * WriteCard <7>:                         gm2-libs-iso/WholeIO.
+                                                               (line  43)
+ * WriteCardinal:                         gm2-libs/FIO.        (line 250)
+ * WriteCardinal <1>:                     gm2-libs-log/CardinalIO.
+                                                               (line  35)
+ * WriteChar:                             gm2-libs/FIO.        (line 174)
+ * WriteChar <1>:                         gm2-libs-log/FileSystem.
+                                                               (line 128)
+ * WriteChar <2>:                         gm2-libs-iso/STextIO.
+                                                               (line  50)
+ * WriteChar <3>:                         gm2-libs-iso/TextIO. (line  58)
+ * WriteCharRaw:                          gm2-libs/Selective.  (line  39)
+ * WriteEng:                              gm2-libs-iso/LongIO. (line  39)
+ * WriteEng <1>:                          gm2-libs-iso/RealIO. (line  39)
+ * WriteEng <2>:                          gm2-libs-iso/SLongIO.
+                                                               (line  37)
+ * WriteEng <3>:                          gm2-libs-iso/SRealIO.
+                                                               (line  36)
+ * WriteEng <4>:                          gm2-libs-iso/SShortIO.
+                                                               (line  37)
+ * WriteEng <5>:                          gm2-libs-iso/ShortIO.
+                                                               (line  39)
+ * WriteError:                            gm2-libs/Scan.       (line  37)
+ * writeFieldWidth:                       gm2-libs-iso/StringChan.
+                                                               (line  35)
+ * WriteFixed:                            gm2-libs-iso/LongIO. (line  46)
+ * WriteFixed <1>:                        gm2-libs-iso/RealIO. (line  46)
+ * WriteFixed <2>:                        gm2-libs-iso/SLongIO.
+                                                               (line  44)
+ * WriteFixed <3>:                        gm2-libs-iso/SRealIO.
+                                                               (line  42)
+ * WriteFixed <4>:                        gm2-libs-iso/SShortIO.
+                                                               (line  44)
+ * WriteFixed <5>:                        gm2-libs-iso/ShortIO.
+                                                               (line  46)
+ * WriteFloat:                            gm2-libs-iso/LongIO. (line  32)
+ * WriteFloat <1>:                        gm2-libs-iso/RealIO. (line  32)
+ * WriteFloat <2>:                        gm2-libs-iso/SLongIO.
+                                                               (line  30)
+ * WriteFloat <3>:                        gm2-libs-iso/SRealIO.
+                                                               (line  30)
+ * WriteFloat <4>:                        gm2-libs-iso/SShortIO.
+                                                               (line  30)
+ * WriteFloat <5>:                        gm2-libs-iso/ShortIO.
+                                                               (line  32)
+ * WriteHex:                              gm2-libs/NumberIO.   (line  21)
+ * WriteHex <1>:                          gm2-libs-log/CardinalIO.
+                                                               (line  52)
+ * WriteHex <2>:                          gm2-libs-log/InOut.  (line 149)
+ * WriteInt:                              gm2-libs/NumberIO.   (line  25)
+ * WriteInt <1>:                          gm2-libs-log/InOut.  (line 131)
+ * WriteInt <2>:                          gm2-libs-iso/LongWholeIO.
+                                                               (line  30)
+ * WriteInt <3>:                          gm2-libs-iso/SLongWholeIO.
+                                                               (line  28)
+ * WriteInt <4>:                          gm2-libs-iso/SShortWholeIO.
+                                                               (line  28)
+ * WriteInt <5>:                          gm2-libs-iso/SWholeIO.
+                                                               (line  28)
+ * WriteInt <6>:                          gm2-libs-iso/ShortWholeIO.
+                                                               (line  30)
+ * WriteInt <7>:                          gm2-libs-iso/WholeIO.
+                                                               (line  30)
+ * WriteLine:                             gm2-libs/FIO.        (line 225)
+ * WriteLn:                               gm2-libs/StrIO.      (line  17)
+ * WriteLn <1>:                           gm2-libs-log/InOut.  (line  97)
+ * WriteLn <2>:                           gm2-libs-log/Terminal.
+                                                               (line  67)
+ * WriteLn <3>:                           gm2-libs-iso/IOChan. (line  61)
+ * WriteLn <4>:                           gm2-libs-iso/STextIO.
+                                                               (line  53)
+ * WriteLn <5>:                           gm2-libs-iso/TextIO. (line  61)
+ * writeln (type):                        gm2-libs-iso/RTgenif.
+                                                               (line  24)
+ * WriteLnProc (type):                    gm2-libs-iso/IOLink. (line  44)
+ * WriteLongCardinal:                     gm2-libs-log/CardinalIO.
+                                                               (line  70)
+ * WriteLongHex:                          gm2-libs-log/CardinalIO.
+                                                               (line  87)
+ * WriteLongInt:                          gm2-libs/FpuIO.      (line  30)
+ * WriteLongInt <1>:                      gm2-libs-log/LongIO. (line  14)
+ * WriteLongReal:                         gm2-libs/FpuIO.      (line  22)
+ * WriteLongReal <1>:                     gm2-libs-log/RealInOut.
+                                                               (line  69)
+ * WriteLongRealOct:                      gm2-libs-log/RealInOut.
+                                                               (line  76)
+ * WriteNBytes:                           gm2-libs/FIO.        (line 157)
+ * WriteNBytes <1>:                       gm2-libs-log/FileSystem.
+                                                               (line 159)
+ * WriteOct:                              gm2-libs/NumberIO.   (line  41)
+ * WriteOct <1>:                          gm2-libs-log/InOut.  (line 140)
+ * WriteProcedure (type):                 gm2-libs-log/Termbase.
+                                                               (line  20)
+ * WriteReal:                             gm2-libs/FpuIO.      (line  16)
+ * WriteReal <1>:                         gm2-libs-log/RealInOut.
+                                                               (line  45)
+ * WriteReal <2>:                         gm2-libs-iso/LongIO. (line  53)
+ * WriteReal <3>:                         gm2-libs-iso/RealIO. (line  53)
+ * WriteReal <4>:                         gm2-libs-iso/SLongIO.
+                                                               (line  51)
+ * WriteReal <5>:                         gm2-libs-iso/SRealIO.
+                                                               (line  48)
+ * WriteReal <6>:                         gm2-libs-iso/SShortIO.
+                                                               (line  51)
+ * WriteReal <7>:                         gm2-libs-iso/ShortIO.
+                                                               (line  53)
+ * WriteRealOct:                          gm2-libs-log/RealInOut.
+                                                               (line  52)
+ * WriteS:                                gm2-libs/SFIO.       (line  60)
+ * WriteS <1>:                            gm2-libs-log/InOut.  (line 166)
+ * WriteShortCardinal:                    gm2-libs-log/CardinalIO.
+                                                               (line  96)
+ * WriteShortHex:                         gm2-libs-log/CardinalIO.
+                                                               (line 122)
+ * WriteShortReal:                        gm2-libs-log/RealInOut.
+                                                               (line  93)
+ * WriteShortRealOct:                     gm2-libs-log/RealInOut.
+                                                               (line 100)
+ * WriteString:                           gm2-libs/FIO.        (line 232)
+ * WriteString <1>:                       gm2-libs/StrIO.      (line  33)
+ * WriteString <2>:                       gm2-libs-log/InOut.  (line  83)
+ * WriteString <3>:                       gm2-libs-log/Terminal.
+                                                               (line  60)
+ * WriteString <4>:                       gm2-libs-iso/STextIO.
+                                                               (line  56)
+ * writeString:                           gm2-libs-iso/StringChan.
+                                                               (line  22)
+ * WriteString <5>:                       gm2-libs-iso/TextIO. (line  64)
+ * writev:                                gm2-libs/libc.       (line 230)
+ * WriteWord:                             gm2-libs-log/FileSystem.
+                                                               (line 113)
+ * zero (const):                          gm2-libs-iso/ComplexMath.
+                                                               (line  13)
+ * zero (const) <1>:                      gm2-libs-iso/LongComplexMath.
+                                                               (line  13)
+ * zero (const) <2>:                      gm2-libs-iso/ShortComplexMath.
+                                                               (line  13)
+ 
+ 
+ 
+ Tag Table:
+ Node: Top1081
+ Node: Overview1561
+ Node: What is GNU Modula-21919
+ Ref: What is GNU Modula-2-Footnote-12392
+ Node: Why use GNU Modula-22962
+ Node: Development4536
+ Node: Features4782
+ Node: Using6388
+ Node: Example usage8280
+ Ref: Example usage-Footnote-19399
+ Node: Compiler options9648
+ Node: Linking23118
+ Node: Elementary data types26135
+ Node: Standard procedures27580
+ Node: High procedure function36306
+ Node: Dialect39199
+ Node: Exceptions42549
+ Ref: Exceptions-Footnote-143658
+ Node: Semantic checking43806
+ Node: Extensions47754
+ Node: Type compatibility55595
+ Node: Unbounded by reference61938
+ Node: Building a shared library65909
+ Node: Interface for Python67359
+ Node: Producing a Python module72430
+ Node: Interface to C77432
+ Node: Assembly language80494
+ Node: Alignment82531
+ Node: Packed85018
+ Node: Built-ins87691
+ Node: The PIM system module100118
+ Node: The ISO system module108556
+ Node: Release map118970
+ Node: Documentation119517
+ Node: Regression tests119777
+ Node: Limitations120592
+ Node: Objectives120911
+ Node: FAQ121385
+ Node: Community121826
+ Node: Other languages122174
+ Node: License122417
+ Node: Copying123331
+ Node: Contributing160853
+ Node: EBNF161557
+ Node: Libraries176172
+ Node: Base libraries176600
+ Node: gm2-libs/ASCII179312
+ Node: gm2-libs/Args180405
+ Node: gm2-libs/Assertion181001
+ Node: gm2-libs/Break181412
+ Node: gm2-libs/Builtins181618
+ Node: gm2-libs/COROUTINES191069
+ Node: gm2-libs/CmdArgs191446
+ Node: gm2-libs/Debug192147
+ Node: gm2-libs/DynamicStrings193003
+ Node: gm2-libs/Environment202914
+ Node: gm2-libs/FIO203924
+ Node: gm2-libs/FormatStrings213169
+ Node: gm2-libs/FpuIO214835
+ Node: gm2-libs/GetOpt216253
+ Node: gm2-libs/IO219726
+ Node: gm2-libs/Indexing221457
+ Node: gm2-libs/LMathLib0224004
+ Node: gm2-libs/LegacyReal224775
+ Node: gm2-libs/M2Dependent225050
+ Node: gm2-libs/M2EXCEPTION226468
+ Node: gm2-libs/M2RTS227718
+ Node: gm2-libs/MathLib0235426
+ Node: gm2-libs/MemUtils236127
+ Node: gm2-libs/NumberIO236728
+ Node: gm2-libs/OptLib238615
+ Node: gm2-libs/PushBackInput240513
+ Node: gm2-libs/RTExceptions243127
+ Node: gm2-libs/RTint247774
+ Node: gm2-libs/SArgs250705
+ Node: gm2-libs/SCmdArgs251465
+ Node: gm2-libs/SEnvironment252196
+ Node: gm2-libs/SFIO253186
+ Node: gm2-libs/SMathLib0255451
+ Node: gm2-libs/SYSTEM256229
+ Node: gm2-libs/Scan263748
+ Node: gm2-libs/Selective265634
+ Node: gm2-libs/StdIO267529
+ Node: gm2-libs/Storage269363
+ Node: gm2-libs/StrCase270615
+ Node: gm2-libs/StrIO271845
+ Node: gm2-libs/StrLib272620
+ Node: gm2-libs/StringConvert274241
+ Node: gm2-libs/SysExceptions285538
+ Node: gm2-libs/SysStorage286522
+ Node: gm2-libs/TimeString288220
+ Node: gm2-libs/UnixArgs288639
+ Node: gm2-libs/cbuiltin289065
+ Node: gm2-libs/cgetopt297254
+ Node: gm2-libs/cxxabi300037
+ Node: gm2-libs/dtoa300590
+ Node: gm2-libs/errno301672
+ Node: gm2-libs/gdbif302090
+ Node: gm2-libs/ldtoa303083
+ Node: gm2-libs/libc304230
+ Node: gm2-libs/libm316100
+ Node: gm2-libs/sckt319084
+ Node: gm2-libs/termios322882
+ Node: gm2-libs/wrapc327897
+ Node: PIM and Logitech 3.0 Compatible330385
+ Node: gm2-libs-log/BitBlockOps333143
+ Node: gm2-libs-log/BitByteOps337045
+ Node: gm2-libs-log/BitWordOps339935
+ Node: gm2-libs-log/BlockOps342781
+ Node: gm2-libs-log/Break344954
+ Node: gm2-libs-log/CardinalIO345965
+ Node: gm2-libs-log/Conversions349783
+ Node: gm2-libs-log/DebugPMD351166
+ Node: gm2-libs-log/DebugTrace351428
+ Node: gm2-libs-log/Delay351692
+ Node: gm2-libs-log/Display352111
+ Node: gm2-libs-log/ErrorCode352640
+ Node: gm2-libs-log/FileSystem353516
+ Node: gm2-libs-log/FloatingUtilities360166
+ Node: gm2-libs-log/InOut361917
+ Node: gm2-libs-log/Keyboard366263
+ Node: gm2-libs-log/LongIO366922
+ Node: gm2-libs-log/NumberConversion367374
+ Node: gm2-libs-log/Random367705
+ Node: gm2-libs-log/RealConversions369081
+ Node: gm2-libs-log/RealInOut373962
+ Node: gm2-libs-log/Strings376717
+ Node: gm2-libs-log/Termbase378516
+ Node: gm2-libs-log/Terminal381062
+ Node: gm2-libs-log/TimeDate382578
+ Node: PIM coroutine support384538
+ Node: gm2-libs-coroutines/Executive385026
+ Node: gm2-libs-coroutines/KeyBoardLEDs388677
+ Node: gm2-libs-coroutines/SYSTEM389642
+ Node: gm2-libs-coroutines/TimerHandler400137
+ Node: M2 ISO Libraries402560
+ Node: gm2-libs-iso/COROUTINES409152
+ Node: gm2-libs-iso/ChanConsts413001
+ Node: gm2-libs-iso/CharClass416352
+ Node: gm2-libs-iso/ClientSocket417423
+ Node: gm2-libs-iso/ComplexMath418528
+ Node: gm2-libs-iso/ConvStringLong420853
+ Node: gm2-libs-iso/ConvStringReal422173
+ Node: gm2-libs-iso/ConvTypes423479
+ Node: gm2-libs-iso/EXCEPTIONS424858
+ Node: gm2-libs-iso/ErrnoCategory427017
+ Node: gm2-libs-iso/GeneralUserExceptions428487
+ Node: gm2-libs-iso/IOChan429684
+ Node: gm2-libs-iso/IOConsts437172
+ Node: gm2-libs-iso/IOLink437949
+ Node: gm2-libs-iso/IOResult443772
+ Node: gm2-libs-iso/LongComplexMath444804
+ Node: gm2-libs-iso/LongConv447117
+ Node: gm2-libs-iso/LongIO449294
+ Node: gm2-libs-iso/LongMath451766
+ Node: gm2-libs-iso/LongStr453625
+ Node: gm2-libs-iso/LongWholeIO456211
+ Node: gm2-libs-iso/LowLong458066
+ Node: gm2-libs-iso/LowReal461640
+ Node: gm2-libs-iso/LowShort465037
+ Node: gm2-libs-iso/M2EXCEPTION468658
+ Node: gm2-libs-iso/M2RTS469876
+ Node: gm2-libs-iso/MemStream477676
+ Node: gm2-libs-iso/Preemptive480948
+ Node: gm2-libs-iso/Processes481449
+ Node: gm2-libs-iso/ProgramArgs487264
+ Node: gm2-libs-iso/RTco488333
+ Node: gm2-libs-iso/RTdata490007
+ Node: gm2-libs-iso/RTentity491294
+ Node: gm2-libs-iso/RTfio492407
+ Node: gm2-libs-iso/RTgen495033
+ Node: gm2-libs-iso/RTgenif497998
+ Node: gm2-libs-iso/RTio501978
+ Node: gm2-libs-iso/RandomNumber503626
+ Node: gm2-libs-iso/RawIO506045
+ Node: gm2-libs-iso/RealConv506942
+ Node: gm2-libs-iso/RealIO509055
+ Node: gm2-libs-iso/RealMath511501
+ Node: gm2-libs-iso/RealStr513275
+ Node: gm2-libs-iso/RndFile515828
+ Node: gm2-libs-iso/SIOResult520586
+ Node: gm2-libs-iso/SLongIO521614
+ Node: gm2-libs-iso/SLongWholeIO524038
+ Node: gm2-libs-iso/SRawIO525848
+ Node: gm2-libs-iso/SRealIO526732
+ Node: gm2-libs-iso/SShortIO529044
+ Node: gm2-libs-iso/SShortWholeIO531478
+ Node: gm2-libs-iso/STextIO533299
+ Node: gm2-libs-iso/SWholeIO535699
+ Node: gm2-libs-iso/SYSTEM537489
+ Node: gm2-libs-iso/Semaphores547405
+ Node: gm2-libs-iso/SeqFile549020
+ Node: gm2-libs-iso/ShortComplexMath553572
+ Node: gm2-libs-iso/ShortIO555921
+ Node: gm2-libs-iso/ShortWholeIO558415
+ Node: gm2-libs-iso/SimpleCipher560284
+ Node: gm2-libs-iso/StdChans561274
+ Node: gm2-libs-iso/Storage563271
+ Node: gm2-libs-iso/StreamFile565357
+ Node: gm2-libs-iso/StringChan567417
+ Node: gm2-libs-iso/Strings568632
+ Node: gm2-libs-iso/SysClock576112
+ Node: gm2-libs-iso/TERMINATION577915
+ Node: gm2-libs-iso/TermFile578528
+ Node: gm2-libs-iso/TextIO580823
+ Node: gm2-libs-iso/TextUtil583451
+ Node: gm2-libs-iso/WholeConv584092
+ Node: gm2-libs-iso/WholeIO586622
+ Node: gm2-libs-iso/WholeStr588460
+ Node: gm2-libs-iso/wrapclock590251
+ Node: gm2-libs-iso/wrapsock593868
+ Node: gm2-libs-iso/wraptime596462
+ Node: Indices600835
+ 
+ End Tag Table
+ 
+ 
+ Local Variables:
+ coding: utf-8
+ End:
diff -Nrcpad gcc-13.3.0/gcc/dwarf2out.cc gcc-13.4.0/gcc/dwarf2out.cc
*** gcc-13.3.0/gcc/dwarf2out.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/dwarf2out.cc	Thu Jun  5 16:02:58 2025
*************** gen_type_die_with_usage (tree type, dw_d
*** 26187,26196 ****
       for the parent typedef which TYPE is a type of.  */
    if (typedef_variant_p (type))
      {
!       if (TREE_ASM_WRITTEN (type))
  	return;
  
-       tree name = TYPE_NAME (type);
        tree origin = decl_ultimate_origin (name);
        if (origin != NULL && origin != name)
  	{
--- 26187,26196 ----
       for the parent typedef which TYPE is a type of.  */
    if (typedef_variant_p (type))
      {
!       tree name = TYPE_NAME (type);
!       if (TREE_ASM_WRITTEN (name))
  	return;
  
        tree origin = decl_ultimate_origin (name);
        if (origin != NULL && origin != name)
  	{
*************** gen_type_die_with_usage (tree type, dw_d
*** 26204,26211 ****
        /* Give typedefs the right scope.  */
        context_die = scope_die_for (type, context_die);
  
-       TREE_ASM_WRITTEN (type) = 1;
- 
        gen_decl_die (name, NULL, NULL, context_die);
        return;
      }
--- 26204,26209 ----
*************** resolve_addr_in_expr (dw_attr_node *a, d
*** 30799,30805 ****
                return false;
              remove_addr_table_entry (loc->dw_loc_oprnd1.val_entry);
  	    loc->dw_loc_oprnd1.val_entry
! 	      = add_addr_table_entry (rtl, ate_kind_rtx);
            }
  	break;
        case DW_OP_const4u:
--- 30797,30804 ----
                return false;
              remove_addr_table_entry (loc->dw_loc_oprnd1.val_entry);
  	    loc->dw_loc_oprnd1.val_entry
! 	      = add_addr_table_entry (rtl, loc->dtprel
! 				      ? ate_kind_rtx_dtprel : ate_kind_rtx);
            }
  	break;
        case DW_OP_const4u:
diff -Nrcpad gcc-13.3.0/gcc/except.cc gcc-13.4.0/gcc/except.cc
*** gcc-13.3.0/gcc/except.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/except.cc	Thu Jun  5 16:02:58 2025
*************** duplicate_eh_regions_1 (struct duplicate
*** 541,547 ****
    eh_region new_r;
  
    new_r = gen_eh_region (old_r->type, outer);
!   gcc_assert (!data->eh_map->put (old_r, new_r));
  
    switch (old_r->type)
      {
--- 541,548 ----
    eh_region new_r;
  
    new_r = gen_eh_region (old_r->type, outer);
!   bool existed = data->eh_map->put (old_r, new_r);
!   gcc_assert (!existed);
  
    switch (old_r->type)
      {
*************** duplicate_eh_regions_1 (struct duplicate
*** 586,592 ****
  	continue;
  
        new_lp = gen_eh_landing_pad (new_r);
!       gcc_assert (!data->eh_map->put (old_lp, new_lp));
  
        new_lp->post_landing_pad
  	= data->label_map (old_lp->post_landing_pad, data->label_map_data);
--- 587,594 ----
  	continue;
  
        new_lp = gen_eh_landing_pad (new_r);
!       bool existed = data->eh_map->put (old_lp, new_lp);
!       gcc_assert (!existed);
  
        new_lp->post_landing_pad
  	= data->label_map (old_lp->post_landing_pad, data->label_map_data);
diff -Nrcpad gcc-13.3.0/gcc/expmed.cc gcc-13.4.0/gcc/expmed.cc
*** gcc-13.3.0/gcc/expmed.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/expmed.cc	Thu Jun  5 16:02:58 2025
*************** init_expmed (void)
*** 284,290 ****
    for (speed = 0; speed < 2; speed++)
      {
        crtl->maybe_hot_insn_p = speed;
!       set_zero_cost (speed, set_src_cost (const0_rtx, mode, speed));
  
        for (mode = MIN_MODE_INT; mode <= MAX_MODE_INT;
  	   mode = (machine_mode)(mode + 1))
--- 284,290 ----
    for (speed = 0; speed < 2; speed++)
      {
        crtl->maybe_hot_insn_p = speed;
!       set_zero_cost (speed, set_src_cost (const0_rtx, QImode, speed));
  
        for (mode = MIN_MODE_INT; mode <= MAX_MODE_INT;
  	   mode = (machine_mode)(mode + 1))
*************** emit_store_flag_1 (rtx target, enum rtx_
*** 5607,5617 ****
    enum insn_code icode;
    machine_mode compare_mode;
    enum mode_class mclass;
-   enum rtx_code scode;
  
    if (unsignedp)
      code = unsigned_condition (code);
-   scode = swap_condition (code);
  
    /* If one operand is constant, make it the second one.  Only do this
       if the other operand is not constant as well.  */
--- 5607,5615 ----
*************** emit_store_flag_1 (rtx target, enum rtx_
*** 5726,5731 ****
--- 5724,5731 ----
  
  	  if (GET_MODE_CLASS (mode) == MODE_FLOAT)
  	    {
+ 	      enum rtx_code scode = swap_condition (code);
+ 
  	      tem = emit_cstore (target, icode, scode, mode, compare_mode,
  				 unsignedp, op1, op0, normalizep, target_mode);
  	      if (tem)
diff -Nrcpad gcc-13.3.0/gcc/final.cc gcc-13.4.0/gcc/final.cc
*** gcc-13.3.0/gcc/final.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/final.cc	Thu Jun  5 16:02:58 2025
*************** get_attr_length_1 (rtx_insn *insn, int (
*** 362,368 ****
  
        case CALL_INSN:
        case JUMP_INSN:
! 	length = fallback_fn (insn);
  	break;
  
        case INSN:
--- 362,372 ----
  
        case CALL_INSN:
        case JUMP_INSN:
! 	body = PATTERN (insn);
! 	if (GET_CODE (body) == ASM_INPUT || asm_noperands (body) >= 0)
! 	  length = asm_insn_count (body) * fallback_fn (insn);
! 	else
! 	  length = fallback_fn (insn);
  	break;
  
        case INSN:
diff -Nrcpad gcc-13.3.0/gcc/fold-const.cc gcc-13.4.0/gcc/fold-const.cc
*** gcc-13.3.0/gcc/fold-const.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/fold-const.cc	Thu Jun  5 16:02:58 2025
*************** along with GCC; see the file COPYING3.
*** 85,90 ****
--- 85,91 ----
  #include "vec-perm-indices.h"
  #include "asan.h"
  #include "gimple-range.h"
+ #include "internal-fn.h"
  
  /* Nonzero if we are folding constants inside an initializer or a C++
     manifestly-constant-evaluated context; zero otherwise.
*************** const_unop (enum tree_code code, tree ty
*** 1827,1833 ****
        if (TREE_CODE (arg0) == INTEGER_CST)
  	return fold_not_const (arg0, type);
        else if (POLY_INT_CST_P (arg0))
! 	return wide_int_to_tree (type, -poly_int_cst_value (arg0));
        /* Perform BIT_NOT_EXPR on each element individually.  */
        else if (TREE_CODE (arg0) == VECTOR_CST)
  	{
--- 1828,1834 ----
        if (TREE_CODE (arg0) == INTEGER_CST)
  	return fold_not_const (arg0, type);
        else if (POLY_INT_CST_P (arg0))
! 	return wide_int_to_tree (type, ~poly_int_cst_value (arg0));
        /* Perform BIT_NOT_EXPR on each element individually.  */
        else if (TREE_CODE (arg0) == VECTOR_CST)
  	{
*************** decode_field_reference (location_t loc,
*** 4802,4807 ****
--- 4803,4811 ----
        || *pbitsize < 0
        || offset != 0
        || TREE_CODE (inner) == PLACEHOLDER_EXPR
+       /* We eventually want to build a larger reference and need to take
+ 	 the address of this.  */
+       || (!REFERENCE_CLASS_P (inner) && !DECL_P (inner))
        /* Reject out-of-bound accesses (PR79731).  */
        || (! AGGREGATE_TYPE_P (TREE_TYPE (inner))
  	  && compare_tree_int (TYPE_SIZE (TREE_TYPE (inner)),
*************** fold_ternary_loc (location_t loc, enum t
*** 13276,13281 ****
--- 13280,13287 ----
  	{
  	  unsigned HOST_WIDE_INT bitpos = tree_to_uhwi (op2);
  	  unsigned bitsize = TYPE_PRECISION (TREE_TYPE (arg1));
+ 	  if (BYTES_BIG_ENDIAN)
+ 	    bitpos = TYPE_PRECISION (type) - bitpos - bitsize;
  	  wide_int tem = (wi::to_wide (arg0)
  			  & wi::shifted_mask (bitpos, bitsize, true,
  					      TYPE_PRECISION (type)));
*************** tree_call_nonnegative_warnv_p (tree type
*** 14887,14893 ****
      CASE_CFN_FFS:
      CASE_CFN_PARITY:
      CASE_CFN_POPCOUNT:
-     CASE_CFN_CLZ:
      CASE_CFN_CLRSB:
      case CFN_BUILT_IN_BSWAP16:
      case CFN_BUILT_IN_BSWAP32:
--- 14893,14898 ----
*************** tree_call_nonnegative_warnv_p (tree type
*** 14896,14901 ****
--- 14901,14922 ----
        /* Always true.  */
        return true;
  
+     CASE_CFN_CLZ:
+       if (fn != CFN_CLZ)
+ 	return true;
+       else if (INTEGRAL_TYPE_P (TREE_TYPE (arg0)))
+ 	{
+ 	  tree atype = TREE_TYPE (arg0);
+ 	  int val = 0;
+ 	  if (direct_internal_fn_supported_p (IFN_CLZ, atype,
+ 					      OPTIMIZE_FOR_BOTH)
+               && CLZ_DEFINED_VALUE_AT_ZERO (SCALAR_INT_TYPE_MODE (atype),
+                                             val) == 2
+ 	      && val >= 0)
+ 	    return true;
+ 	}
+       break;
+ 
      CASE_CFN_SQRT:
      CASE_CFN_SQRT_FN:
        /* sqrt(-0.0) is -0.0.  */
diff -Nrcpad gcc-13.3.0/gcc/fortran/ChangeLog gcc-13.4.0/gcc/fortran/ChangeLog
*** gcc-13.3.0/gcc/fortran/ChangeLog	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/fortran/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,440 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
+ 2025-06-02  Andre Vehreschild  <vehre@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2025-03-04  Andre Vehreschild  <vehre@gcc.gnu.org>
+ 
+ 	PR fortran/103391
+ 	* trans-expr.cc (gfc_trans_assignment_1): Do not use poly assign
+ 	for pointer arrays on lhs (as it is done for allocatables
+ 	already).
+ 
+ 2025-05-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-05-13  Jakub Jelinek  <jakub@redhat.com>
+ 		    Daniil Kochergin  <daniil2472s@gmail.com>
+ 		    Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	PR fortran/120191
+ 	* trans-intrinsic.cc (strip_kind_from_actual): Remove.
+ 	(gfc_conv_intrinsic_minmaxloc): Don't call strip_kind_from_actual.
+ 	Free and clear kind_arg->expr if non-NULL.  Set back_arg->name to
+ 	"%VAL" instead of a loop looking for last argument.  Remove actual
+ 	variable, use array_arg instead.  Free and clear dim_arg->expr if
+ 	non-NULL for BT_CHARACTER cases instead of using a loop.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-03-22  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* resolve.cc (resolve_procedure_expression): Remove extraneous space
+ 	from the middle of diagnostics.
+ 
+ 2025-04-22  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-04-09  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/119656
+ 	* interface.cc (gfc_compare_actual_formal): Fix front-end memleak
+ 	when searching for matching interfaces.
+ 	* trans-expr.cc (gfc_conv_procedure_call): If there is a formal
+ 	dummy corresponding to an absent argument, use its type, and only
+ 	fall back to inferred type otherwise.
+ 
+ 2025-03-25  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-03-19  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/116706
+ 	* trans-array.cc (gfc_is_reallocatable_lhs): Fix check on
+ 	allocatable components of derived type or class objects.
+ 
+ 2025-02-20  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-02-07  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/59252
+ 	* trans-expr.cc (gfc_trans_subcomponent_assign): Initialize
+ 	allocatable non-deferred character with NULL properly.
+ 
+ 2025-01-11  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-01-03  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/106692
+ 	* trans-expr.cc (gfc_conv_expr_op): Inhibit excessive optimization
+ 	of Cray pointers by treating them as volatile in comparisons.
+ 
+ 2025-01-06  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2023-05-16  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/105152
+ 	PR fortran/100193
+ 	PR fortran/87496
+ 	PR fortran/103389
+ 	PR fortran/104429
+ 	PR fortran/82774
+ 	* interface.cc (gfc_compare_actual_formal): Emit an error if an
+ 	unlimited polymorphic actual is not matched either to an
+ 	unlimited or assumed type formal argument.
+ 	* resolve.cc (resolve_ordinary_assign): Emit an error if the
+ 	var expression of an ordinary assignment is a proc pointer
+ 	component.
+ 	* trans-array.cc (gfc_walk_array_ref): Provide assumed shape
+ 	arrays coming from interface mapping with a viable arrayspec.
+ 	* trans-expr.cc (gfc_conv_intrinsic_to_class): Tidy up flagging
+ 	of unlimited polymorphic 'class_ts'.
+ 	(gfc_conv_gfc_desc_to_cfi_desc): Assumed type is unlimited
+ 	polymorphic and should accept any actual type.
+ 	(gfc_conv_procedure_call): Replace dreadful kludge with a call
+ 	to gfc_finalize_tree_expr. Avoid dereferencing a void pointer
+ 	by giving it the pointer type of the actual argument.
+ 	(alloc_scalar_allocatable_subcomponent): Shorten the function
+ 	name and replace the symbol argument with the se string length.
+ 	If a deferred length character length is either not present or
+ 	is not a variable, give the typespec a variable and assign the
+ 	string length to that. Use gfc_deferred_strlen to find the
+ 	hidden string length component.
+ 	(gfc_trans_subcomponent_assign): Convert the expression before
+ 	the call to alloc_scalar_allocatable_subcomponent so that a
+ 	good string length is provided.
+ 	(gfc_trans_structure_assign): Remove the unneeded derived type
+ 	symbol from calls to gfc_trans_subcomponent_assign.
+ 
+ 2024-12-22  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-12-12  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/117797
+ 	* trans-array.cc (class_array_element_size): New function.
+ 	(gfc_get_array_span): Refactor, using class_array_element_size
+ 	to return the span for descriptors that are the _data component
+ 	of a class expression and then class dummy references. Revert
+ 	the conditions to those before r15-5083 tidying up using 'sym'.
+ 
+ 2024-12-17  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-12-15  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/117897
+ 	* trans-expr.cc (gfc_trans_assignment_1): RHS pointer function
+ 	results must not be finalized.
+ 
+ 2024-12-15  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-12-15  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/117730
+ 	PR fortran/84674
+ 	* class.cc (add_proc_comp): If the present typebound procedure
+ 	component is abstract, unconditionally check the replacement.
+ 	Only reject a non_overridable if it has no overridden procedure
+ 	and the component is already present in the vtype.
+ 
+ 2024-11-30  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-11-13  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/105054
+ 	* resolve.cc (get_temp_from_expr): If the pointer function has
+ 	a deferred character length, generate a new deferred charlen
+ 	for the temporary.
+ 
+ 2024-11-27  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-11-26  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/117763
+ 	* trans-array.cc (gfc_get_array_span): Guard against derefences
+ 	of 'expr'. Clean up some typos. Use 'gfc_get_vptr_from_expr'
+ 	for clarity and apply a functional reversion of last section
+ 	that deals with class dummies.
+ 
+ 2024-11-24  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-11-24  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/84869
+ 	* trans-expr.cc (trans_class_vptr_len_assignment): To access
+ 	the '_len' field, 're' must be unlimited polymorphic.
+ 
+ 2024-11-23  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-11-11  Tomas Trnka  <trnka@scm.com>
+ 		    Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/116388
+ 	* class.cc (finalize_component): Leading underscore in the name
+ 	of 'byte_stride' to suppress invalid finalization.
+ 
+ 2024-11-23  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-11-11  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/109345
+ 	* trans-array.cc (gfc_get_array_span): Unlimited polymorphic
+ 	expressions are now treated separately since the span need not
+ 	be the same as the element size.
+ 
+ 2024-11-14  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-11-01  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/115700
+ 	* resolve.cc (resolve_assoc_var): Extract a substring reference
+ 	with missing as well as non-constant start or end.
+ 
+ 2024-11-14  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-10-31  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/115700
+ 	* resolve.cc (resolve_variable): The typespec of an expression,
+ 	which is not a substring, can be shared with a deferred length
+ 	associate name.
+ 	(resolve_assoc_var): Extract a substring reference with non-
+ 	constant start or end. Use it to flag up the need for array
+ 	associate name to be a pointer.
+ 	(resolve_block_construct): Change comment from past to future
+ 	tense.
+ 
+ 2024-11-14  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/115700
+ 	* trans-stmt.cc (trans_associate_var): Update from mainline to
+ 	handle substring targets correctly.
+ 
+ 2024-11-05  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/115070
+ 	PR fortran/115348
+ 	* trans-expr.cc (gfc_trans_class_init_assign): If all the
+ 	components of the default initializer are null for a scalar,
+ 	build an empty statement to prevent prior declarations from
+ 	disappearing.
+ 
+ 2024-11-03  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/116040
+ 	* trans-stmt.cc (trans_associate_var): Copy chunk in 14-branch
+ 	that correctly handles class function selectors.
+ 
+ 2024-11-01  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-10-25  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/79685
+ 	* decl.cc (match_data_constant): Find the symtree instead of
+ 	the symbol so the use renamed symbols are found. Pass this and
+ 	the derived type to gfc_match_structure_constructor.
+ 	* match.h: Update prototype of gfc_match_structure_contructor.
+ 	* primary.cc (gfc_match_structure_constructor): Remove call to
+ 	gfc_get_ha_sym_tree and use caller supplied symtree instead.
+ 
+ 2024-11-01  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2023-12-16  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/112459
+ 	* trans-array.cc (gfc_trans_array_constructor_value): Replace
+ 	gfc_notification_std with explicit logical expression that
+ 	selects F2003/2008 and excludes -std=default/gnu.
+ 	* trans-expr.cc (gfc_conv_expr): Ditto.
+ 
+ 2024-10-25  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-07-16  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/84868
+ 	* simplify.cc (gfc_simplify_len_trim): If the argument is an
+ 	element of a parameter array, simplify all the elements and
+ 	build a new parameter array to hold the result, after checking
+ 	that it doesn't already exist.
+ 	* trans-expr.cc (gfc_get_interface_mapping_array) if a string
+ 	length is available, use it for the typespec.
+ 	(gfc_add_interface_mapping): Supply the se string length.
+ 
+ 2024-09-20  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2024-09-05  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/100273
+ 	* trans-decl.cc (gfc_create_module_variable): Handle module
+ 	variable also when it is needed for the result specification
+ 	of a contained function.
+ 
+ 2024-08-05  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-07-18  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/108889
+ 	* gfortran.h: Add bit field 'allocated_in_scope' to gfc_symbol.
+ 	* trans-array.cc (gfc_array_allocate): Set 'allocated_in_scope'
+ 	after allocation if not a component reference.
+ 	(gfc_alloc_allocatable_for_assignment): If 'allocated_in_scope'
+ 	not set, not a component ref and not allocated, set the array
+ 	bounds and offset to give zero length in all dimensions. Then
+ 	set allocated_in_scope.
+ 
+ 2024-07-21  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2024-07-19  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/103115
+ 	* trans-array.cc (gfc_trans_array_constructor_value): If the first
+ 	element of an array constructor is deferred-length character and
+ 	therefore does not have an element size known at compile time, do
+ 	not try to collect subsequent constant elements into a constructor
+ 	for optimization.
+ 
+ 2024-07-20  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-05-13  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/113363
+ 	* trans-array.cc (gfc_array_init_size): Use the expr3 dtype so
+ 	that the correct element size is used.
+ 	* trans-expr.cc (gfc_conv_procedure_call): Remove restriction
+ 	that ss and ss->loop be present for the finalization of class
+ 	array function results.
+ 	(trans_class_assignment): Use free and malloc, rather than
+ 	realloc, for character expressions assigned to unlimited poly
+ 	entities.
+ 	* trans-stmt.cc (gfc_trans_allocate): Build a correct rhs for
+ 	the assignment of an unlimited polymorphic 'source'.
+ 
+ 2024-07-12  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-05-23  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/103312
+ 	* dependency.cc (gfc_dep_compare_expr): Handle component call
+ 	expressions. Return -2 as default and return 0 if compared with
+ 	a function expression that is from an interface body and has
+ 	the same name.
+ 	* expr.cc (gfc_reduce_init_expr): If the expression is a comp
+ 	call do not attempt to reduce, defer to resolution and return
+ 	false.
+ 	* trans-types.cc (gfc_get_dtype_rank_type,
+ 	gfc_get_nodesc_array_type): Fix whitespace.
+ 
+ 2024-07-08  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-05-12  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/84006
+ 	PR fortran/100027
+ 	PR fortran/98534
+ 	* iresolve.cc (gfc_resolve_transfer): Emit a TODO error for
+ 	unlimited polymorphic mold.
+ 	* trans-expr.cc (gfc_resize_class_size_with_len): Use the fold
+ 	even if a block is not available in which to fix the result.
+ 	(trans_class_assignment): Enable correct assignment of
+ 	character expressions to unlimited polymorphic variables using
+ 	lhs _len field and rse string_length.
+ 	* trans-intrinsic.cc (gfc_conv_intrinsic_storage_size): Extract
+ 	the class expression so that the unlimited polymorphic class
+ 	expression can be used in gfc_resize_class_size_with_len to
+ 	obtain the storage size for character payloads. Guard the use
+ 	of GFC_DECL_SAVED_DESCRIPTOR by testing for DECL_LANG_SPECIFIC
+ 	to prevent the ICE. Also, invert the order to use the class
+ 	expression extracted from the argument.
+ 	(gfc_conv_intrinsic_transfer): In same way as 'storage_size',
+ 	use the _len field to obtaining the correct length for arg 1.
+ 	Add a branch for the element size in bytes of class expressions
+ 	with provision to make use of the unlimited polymorphic _len
+ 	field. Again, the class references are explicitly identified.
+ 	'mold_expr' was already declared. Use it instead of 'arg'. Do
+ 	not fix 'dest_word_len' for deferred character sources because
+ 	reallocation on assign makes use of it before it is assigned.
+ 
+ 2024-06-19  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2024-06-04  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/83865
+ 	* trans-stmt.cc (gfc_trans_allocate): Restrict special case for
+ 	source-expression with zero-length character to rank 0, so that
+ 	the array shape is not discarded.
+ 
+ 2024-05-28  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	Backported from master:
+ 	2024-05-20  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	PR fortran/115150
+ 	* trans-intrinsic.cc (gfc_conv_intrinsic_bound): Fix SHAPE
+ 	for zero-size arrays
+ 
+ 2024-05-22  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2024-05-05  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/114827
+ 	* trans-array.cc (gfc_alloc_allocatable_for_assignment): Take into
+ 	account _len of unlimited polymorphic entities when calculating
+ 	the effective element size for allocation size and array span.
+ 	Set _len of lhs to _len of rhs.
+ 	* trans-expr.cc (trans_class_assignment): Take into account _len
+ 	of unlimited polymorphic entities for allocation size.
+ 
+ 2024-05-22  Andrew Jenner  <andrew@codesourcery.com>
+ 
+ 	Backported from master:
+ 	2023-11-28  Andrew Jenner  <andrew@codesourcery.com>
+ 		    Tobias Burnus   <tobias@codesourcery.com>
+ 
+ 	PR fortran/110415
+ 	* trans-expr.cc (trans_class_vptr_len_assignment): Add
+ 	from_vptrp parameter. Populate it. Don't check for DECL_P
+ 	when deciding whether to create temporary.
+ 	(trans_class_pointer_fcn, gfc_trans_pointer_assignment): Add
+ 	NULL argument to trans_class_vptr_len_assignment calls.
+ 	(trans_class_assignment): Get rhs_vptr from
+ 	trans_class_vptr_len_assignment and use it for determining size
+ 	for allocation/reallocation. Use return value from realloc.
+ 
+ 2024-05-21  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2024-05-11  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/115039
+ 	* expr.cc (gfc_traverse_expr): An inquiry ref does not constitute
+ 	a dependency and cannot collide with a symbol.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/gcc/fortran/class.cc gcc-13.4.0/gcc/fortran/class.cc
*** gcc-13.3.0/gcc/fortran/class.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/fortran/class.cc	Thu Jun  5 16:02:58 2025
*************** static void
*** 818,829 ****
  add_proc_comp (gfc_symbol *vtype, const char *name, gfc_typebound_proc *tb)
  {
    gfc_component *c;
! 
!   if (tb->non_overridable && !tb->overridden)
!     return;
  
    c = gfc_find_component (vtype, name, true, true, NULL);
  
    if (c == NULL)
      {
        /* Add procedure component.  */
--- 818,840 ----
  add_proc_comp (gfc_symbol *vtype, const char *name, gfc_typebound_proc *tb)
  {
    gfc_component *c;
!   bool is_abstract = false;
  
    c = gfc_find_component (vtype, name, true, true, NULL);
  
+   /* If the present component typebound proc is abstract, the new version
+      should unconditionally be tested if it is a suitable replacement.  */
+   if (c && c->tb && c->tb->u.specific
+       && c->tb->u.specific->n.sym->attr.abstract)
+     is_abstract = true;
+ 
+   /* Pass on the new tb being not overridable if a component is found and
+      either there is not an overridden specific or the present component
+      tb is abstract. This ensures that possible, viable replacements are
+      loaded.  */
+   if (tb->non_overridable && !tb->overridden && !is_abstract && c)
+     return;
+ 
    if (c == NULL)
      {
        /* Add procedure component.  */
*************** finalize_component (gfc_expr *expr, gfc_
*** 1084,1091 ****
  
        gcc_assert (c);
  
!       /* Set scalar argument for storage_size.  */
!       gfc_get_symbol ("comp_byte_stride", sub_ns, &byte_stride);
        byte_stride->ts = e->ts;
        byte_stride->attr.flavor = FL_VARIABLE;
        byte_stride->attr.value = 1;
--- 1095,1103 ----
  
        gcc_assert (c);
  
!       /* Set scalar argument for storage_size. A leading underscore in
! 	 the name prevents an unwanted finalization.  */
!       gfc_get_symbol ("_comp_byte_stride", sub_ns, &byte_stride);
        byte_stride->ts = e->ts;
        byte_stride->attr.flavor = FL_VARIABLE;
        byte_stride->attr.value = 1;
diff -Nrcpad gcc-13.3.0/gcc/fortran/decl.cc gcc-13.4.0/gcc/fortran/decl.cc
*** gcc-13.3.0/gcc/fortran/decl.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/fortran/decl.cc	Thu Jun  5 16:02:58 2025
*************** match_data_constant (gfc_expr **result)
*** 376,381 ****
--- 376,382 ----
    gfc_expr *expr;
    match m;
    locus old_loc;
+   gfc_symtree *symtree;
  
    m = gfc_match_literal_constant (&expr, 1);
    if (m == MATCH_YES)
*************** match_data_constant (gfc_expr **result)
*** 436,444 ****
    if (m != MATCH_YES)
      return m;
  
!   if (gfc_find_symbol (name, NULL, 1, &sym))
      return MATCH_ERROR;
  
    if (sym && sym->attr.generic)
      dt_sym = gfc_find_dt_in_generic (sym);
  
--- 437,447 ----
    if (m != MATCH_YES)
      return m;
  
!   if (gfc_find_sym_tree (name, NULL, 1, &symtree))
      return MATCH_ERROR;
  
+   sym = symtree->n.sym;
+ 
    if (sym && sym->attr.generic)
      dt_sym = gfc_find_dt_in_generic (sym);
  
*************** match_data_constant (gfc_expr **result)
*** 452,458 ****
        return MATCH_ERROR;
      }
    else if (dt_sym && gfc_fl_struct (dt_sym->attr.flavor))
!     return gfc_match_structure_constructor (dt_sym, result);
  
    /* Check to see if the value is an initialization array expression.  */
    if (sym->value->expr_type == EXPR_ARRAY)
--- 455,461 ----
        return MATCH_ERROR;
      }
    else if (dt_sym && gfc_fl_struct (dt_sym->attr.flavor))
!     return gfc_match_structure_constructor (dt_sym, symtree, result);
  
    /* Check to see if the value is an initialization array expression.  */
    if (sym->value->expr_type == EXPR_ARRAY)
diff -Nrcpad gcc-13.3.0/gcc/fortran/dependency.cc gcc-13.4.0/gcc/fortran/dependency.cc
*** gcc-13.3.0/gcc/fortran/dependency.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/fortran/dependency.cc	Thu Jun  5 16:02:58 2025
*************** gfc_dep_compare_expr (gfc_expr *e1, gfc_
*** 440,445 ****
--- 440,477 ----
  	return mpz_sgn (e2->value.op.op2->value.integer);
      }
  
+ 
+   if (e1->expr_type == EXPR_COMPCALL)
+     {
+       /* This will have emerged from interface.cc(gfc_check_typebound_override)
+ 	 via gfc_check_result_characteristics. It is possible that other
+ 	 variants exist that are 'equal' but play it safe for now by setting
+ 	 the relationship as 'indeterminate'.  */
+       if (e2->expr_type == EXPR_FUNCTION && e2->ref)
+ 	{
+ 	  gfc_ref *ref = e2->ref;
+ 	  gfc_symbol *s = NULL;
+ 
+ 	  if (e1->value.compcall.tbp->u.specific)
+ 	    s = e1->value.compcall.tbp->u.specific->n.sym;
+ 
+ 	  /* Check if the proc ptr points to an interface declaration and the
+ 	     names are the same; ie. the overriden proc. of an abstract type.
+ 	     The checking of the arguments will already have been done.  */
+ 	  for (; ref && s; ref = ref->next)
+ 	    if (!ref->next && ref->type == REF_COMPONENT
+ 		&& ref->u.c.component->attr.proc_pointer
+ 		&& ref->u.c.component->ts.interface
+ 		&& ref->u.c.component->ts.interface->attr.if_source
+ 							== IFSRC_IFBODY
+ 		&& !strcmp (s->name, ref->u.c.component->name))
+ 	      return 0;
+ 	}
+ 
+       /* Assume as default that TKR checking is sufficient.  */
+      return -2;
+   }
+ 
    if (e1->expr_type != e2->expr_type)
      return -3;
  
diff -Nrcpad gcc-13.3.0/gcc/fortran/expr.cc gcc-13.4.0/gcc/fortran/expr.cc
*** gcc-13.3.0/gcc/fortran/expr.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/fortran/expr.cc	Thu Jun  5 16:02:58 2025
*************** gfc_reduce_init_expr (gfc_expr *expr)
*** 3188,3193 ****
--- 3188,3198 ----
  {
    bool t;
  
+   /* It is far too early to resolve a class compcall. Punt to resolution.  */
+   if (expr && expr->expr_type == EXPR_COMPCALL
+       && expr->symtree->n.sym->ts.type == BT_CLASS)
+     return false;
+ 
    gfc_init_expr_flag = true;
    t = gfc_resolve_expr (expr);
    if (t)
*************** gfc_traverse_expr (gfc_expr *expr, gfc_s
*** 5483,5489 ****
  	  break;
  
  	case REF_INQUIRY:
! 	  return true;
  
  	default:
  	  gcc_unreachable ();
--- 5488,5494 ----
  	  break;
  
  	case REF_INQUIRY:
! 	  return false;
  
  	default:
  	  gcc_unreachable ();
diff -Nrcpad gcc-13.3.0/gcc/fortran/gfortran.h gcc-13.4.0/gcc/fortran/gfortran.h
*** gcc-13.3.0/gcc/fortran/gfortran.h	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/fortran/gfortran.h	Thu Jun  5 16:02:58 2025
*************** typedef struct gfc_symbol
*** 1927,1932 ****
--- 1927,1936 ----
    /* Set if this should be passed by value, but is not a VALUE argument
       according to the Fortran standard.  */
    unsigned pass_as_value:1;
+   /* Set if an allocatable array variable has been allocated in the current
+      scope. Used in the suppression of uninitialized warnings in reallocation
+      on assignment.  */
+   unsigned allocated_in_scope:1;
  
    int refs;
    struct gfc_namespace *ns;	/* namespace containing this symbol */
diff -Nrcpad gcc-13.3.0/gcc/fortran/interface.cc gcc-13.4.0/gcc/fortran/interface.cc
*** gcc-13.3.0/gcc/fortran/interface.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/fortran/interface.cc	Thu Jun  5 16:02:58 2025
*************** gfc_compare_actual_formal (gfc_actual_ar
*** 3254,3260 ****
  	  return false;
  	}
        else
! 	a->associated_dummy = get_nonintrinsic_dummy_arg (f);
  
        if (a->expr == NULL)
  	{
--- 3254,3264 ----
  	  return false;
  	}
        else
! 	{
! 	  if (a->associated_dummy)
! 	    free (a->associated_dummy);
! 	  a->associated_dummy = get_nonintrinsic_dummy_arg (f);
! 	}
  
        if (a->expr == NULL)
  	{
*************** gfc_compare_actual_formal (gfc_actual_ar
*** 3360,3365 ****
--- 3364,3379 ----
  	    }
  	}
  
+       if (UNLIMITED_POLY (a->expr)
+ 	  && !(f->sym->ts.type == BT_ASSUMED || UNLIMITED_POLY (f->sym)))
+ 	{
+ 	  gfc_error ("Unlimited polymorphic actual argument at %L is not "
+ 		     "matched with either an unlimited polymorphic or "
+ 		     "assumed type dummy argument", &a->expr->where);
+ 	  ok = false;
+ 	  goto match;
+ 	}
+ 
        /* Special case for character arguments.  For allocatable, pointer
  	 and assumed-shape dummies, the string length needs to match
  	 exactly.  */
diff -Nrcpad gcc-13.3.0/gcc/fortran/iresolve.cc gcc-13.4.0/gcc/fortran/iresolve.cc
*** gcc-13.3.0/gcc/fortran/iresolve.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/fortran/iresolve.cc	Thu Jun  5 16:02:58 2025
*************** gfc_resolve_transfer (gfc_expr *f, gfc_e
*** 3017,3022 ****
--- 3017,3026 ----
  	}
      }
  
+   if (UNLIMITED_POLY (mold))
+     gfc_error ("TODO: unlimited polymorphic MOLD in TRANSFER intrinsic at %L",
+ 	       &mold->where);
+ 
    f->ts = mold->ts;
  
    if (size == NULL && mold->rank == 0)
diff -Nrcpad gcc-13.3.0/gcc/fortran/match.h gcc-13.4.0/gcc/fortran/match.h
*** gcc-13.3.0/gcc/fortran/match.h	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/fortran/match.h	Thu Jun  5 16:02:58 2025
*************** match gfc_match_bind_c_stmt (void);
*** 298,304 ****
  match gfc_match_bind_c (gfc_symbol *, bool);
  
  /* primary.cc.  */
! match gfc_match_structure_constructor (gfc_symbol *, gfc_expr **);
  match gfc_match_variable (gfc_expr **, int);
  match gfc_match_equiv_variable (gfc_expr **);
  match gfc_match_actual_arglist (int, gfc_actual_arglist **, bool = false);
--- 298,304 ----
  match gfc_match_bind_c (gfc_symbol *, bool);
  
  /* primary.cc.  */
! match gfc_match_structure_constructor (gfc_symbol *, gfc_symtree *, gfc_expr **);
  match gfc_match_variable (gfc_expr **, int);
  match gfc_match_equiv_variable (gfc_expr **);
  match gfc_match_actual_arglist (int, gfc_actual_arglist **, bool = false);
diff -Nrcpad gcc-13.3.0/gcc/fortran/primary.cc gcc-13.4.0/gcc/fortran/primary.cc
*** gcc-13.3.0/gcc/fortran/primary.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/fortran/primary.cc	Thu Jun  5 16:02:58 2025
*************** gfc_convert_to_structure_constructor (gf
*** 3388,3405 ****
  
  
  match
! gfc_match_structure_constructor (gfc_symbol *sym, gfc_expr **result)
  {
    match m;
    gfc_expr *e;
-   gfc_symtree *symtree;
    bool t = true;
  
-   gfc_get_ha_sym_tree (sym->name, &symtree);
- 
    e = gfc_get_expr ();
-   e->symtree = symtree;
    e->expr_type = EXPR_FUNCTION;
    e->where = gfc_current_locus;
  
    gcc_assert (gfc_fl_struct (sym->attr.flavor)
--- 3388,3403 ----
  
  
  match
! gfc_match_structure_constructor (gfc_symbol *sym, gfc_symtree *symtree,
! 				 gfc_expr **result)
  {
    match m;
    gfc_expr *e;
    bool t = true;
  
    e = gfc_get_expr ();
    e->expr_type = EXPR_FUNCTION;
+   e->symtree = symtree;
    e->where = gfc_current_locus;
  
    gcc_assert (gfc_fl_struct (sym->attr.flavor)
diff -Nrcpad gcc-13.3.0/gcc/fortran/resolve.cc gcc-13.4.0/gcc/fortran/resolve.cc
*** gcc-13.3.0/gcc/fortran/resolve.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/fortran/resolve.cc	Thu Jun  5 16:02:58 2025
*************** resolve_procedure_expression (gfc_expr*
*** 1955,1961 ****
    if (is_illegal_recursion (sym, gfc_current_ns))
      {
        if (sym->attr.use_assoc && expr->symtree->name[0] == '@')
! 	gfc_warning (0, "Non-RECURSIVE procedure %qs from module %qs is "
  		     " possibly calling itself recursively in procedure %qs. "
  		     " Declare it RECURSIVE or use %<-frecursive%>",
  		     sym->name, sym->module, gfc_current_ns->proc_name->name);
--- 1955,1961 ----
    if (is_illegal_recursion (sym, gfc_current_ns))
      {
        if (sym->attr.use_assoc && expr->symtree->name[0] == '@')
! 	gfc_warning (0, "Non-RECURSIVE procedure %qs from module %qs is"
  		     " possibly calling itself recursively in procedure %qs. "
  		     " Declare it RECURSIVE or use %<-frecursive%>",
  		     sym->name, sym->module, gfc_current_ns->proc_name->name);
*************** resolve_variable (gfc_expr *e)
*** 5956,5961 ****
--- 5956,5970 ----
  	  e->ref = newref;
  	}
      }
+   else if (sym->assoc && sym->ts.type == BT_CHARACTER && sym->ts.deferred)
+     {
+       gfc_ref *ref;
+       for (ref = e->ref; ref; ref = ref->next)
+ 	if (ref->type == REF_SUBSTRING)
+ 	  break;
+       if (ref == NULL)
+ 	e->ts = sym->ts;
+     }
  
    if (e->ref && !gfc_resolve_ref (e))
      return false;
*************** resolve_assoc_var (gfc_symbol* sym, bool
*** 9387,9392 ****
--- 9396,9410 ----
    /* Fix up the type-spec for CHARACTER types.  */
    if (sym->ts.type == BT_CHARACTER && !sym->attr.select_type_temporary)
      {
+       gfc_ref *ref;
+       for (ref = target->ref; ref; ref = ref->next)
+ 	if (ref->type == REF_SUBSTRING
+ 	    && (ref->u.ss.start == NULL
+ 		|| ref->u.ss.start->expr_type != EXPR_CONSTANT
+ 		|| ref->u.ss.end == NULL
+ 		|| ref->u.ss.end->expr_type != EXPR_CONSTANT))
+ 	  break;
+ 
        if (!sym->ts.u.cl)
  	sym->ts.u.cl = target->ts.u.cl;
  
*************** resolve_assoc_var (gfc_symbol* sym, bool
*** 9405,9413 ****
  		gfc_get_int_expr (gfc_charlen_int_kind, NULL,
  				  target->value.character.length);
  	}
!       else if ((!sym->ts.u.cl->length
! 		|| sym->ts.u.cl->length->expr_type != EXPR_CONSTANT)
  		&& target->expr_type != EXPR_VARIABLE)
  	{
  	  if (!sym->ts.deferred)
  	    {
--- 9423,9432 ----
  		gfc_get_int_expr (gfc_charlen_int_kind, NULL,
  				  target->value.character.length);
  	}
!       else if (((!sym->ts.u.cl->length
! 		 || sym->ts.u.cl->length->expr_type != EXPR_CONSTANT)
  		&& target->expr_type != EXPR_VARIABLE)
+ 	       || ref)
  	{
  	  if (!sym->ts.deferred)
  	    {
*************** resolve_assoc_var (gfc_symbol* sym, bool
*** 9417,9423 ****
  
  	  /* This is reset in trans-stmt.cc after the assignment
  	     of the target expression to the associate name.  */
! 	  sym->attr.allocatable = 1;
  	}
      }
  
--- 9436,9445 ----
  
  	  /* This is reset in trans-stmt.cc after the assignment
  	     of the target expression to the associate name.  */
! 	  if (ref && sym->as)
! 	    sym->attr.pointer = 1;
! 	  else
! 	    sym->attr.allocatable = 1;
  	}
      }
  
*************** resolve_block_construct (gfc_code* code)
*** 10971,10978 ****
  {
    gfc_namespace *ns = code->ext.block.ns;
  
!   /* For an ASSOCIATE block, the associations (and their targets) are already
!      resolved during resolve_symbol. Resolve the BLOCK's namespace.  */
    gfc_resolve (ns);
  }
  
--- 10993,11001 ----
  {
    gfc_namespace *ns = code->ext.block.ns;
  
!   /* For an ASSOCIATE block, the associations (and their targets) will be
!      resolved by gfc_resolve_symbol, during resolution of the BLOCK's
!      namespace.  */
    gfc_resolve (ns);
  }
  
*************** resolve_ordinary_assign (gfc_code *code,
*** 11178,11183 ****
--- 11201,11217 ----
    lhs = code->expr1;
    rhs = code->expr2;
  
+   if ((lhs->symtree->n.sym->ts.type == BT_DERIVED
+        || lhs->symtree->n.sym->ts.type == BT_CLASS)
+       && !lhs->symtree->n.sym->attr.proc_pointer
+       && gfc_expr_attr (lhs).proc_pointer)
+     {
+       gfc_error ("Variable in the ordinary assignment at %L is a procedure "
+ 		 "pointer component",
+ 		 &lhs->where);
+       return false;
+     }
+ 
    if ((gfc_numeric_ts (&lhs->ts) || lhs->ts.type == BT_LOGICAL)
        && rhs->ts.type == BT_CHARACTER
        && (rhs->expr_type != EXPR_CONSTANT || !flag_dec_char_conversions))
*************** resolve_ptr_fcn_assign (gfc_code **code,
*** 12097,12102 ****
--- 12131,12147 ----
    tmp_ptr_expr->symtree->n.sym->attr.allocatable = 0;
    tmp_ptr_expr->where = (*code)->loc;
  
+   /* A new charlen is required to ensure that the variable string length
+      is different to that of the original lhs for deferred results.  */
+   if (s->result->ts.deferred && tmp_ptr_expr->ts.type == BT_CHARACTER)
+     {
+       tmp_ptr_expr->ts.u.cl = gfc_get_charlen();
+       tmp_ptr_expr->ts.deferred = 1;
+       tmp_ptr_expr->ts.u.cl->next = gfc_current_ns->cl_list;
+       gfc_current_ns->cl_list = tmp_ptr_expr->ts.u.cl;
+       tmp_ptr_expr->symtree->n.sym->ts.u.cl = tmp_ptr_expr->ts.u.cl;
+     }
+ 
    this_code = build_assignment (EXEC_ASSIGN,
  				tmp_ptr_expr, (*code)->expr2,
  				NULL, NULL, (*code)->loc);
diff -Nrcpad gcc-13.3.0/gcc/fortran/simplify.cc gcc-13.4.0/gcc/fortran/simplify.cc
*** gcc-13.3.0/gcc/fortran/simplify.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/fortran/simplify.cc	Thu Jun  5 16:02:58 2025
*************** gfc_simplify_len_trim (gfc_expr *e, gfc_
*** 4623,4628 ****
--- 4623,4703 ----
    if (k == -1)
      return &gfc_bad_expr;
  
+   /* If the expression is either an array element or section, an array
+      parameter must be built so that the reference can be applied. Constant
+      references should have already been simplified away. All other cases
+      can proceed to translation, where kind conversion will occur silently.  */
+   if (e->expr_type == EXPR_VARIABLE
+       && e->ts.type == BT_CHARACTER
+       && e->symtree->n.sym->attr.flavor == FL_PARAMETER
+       && e->ref && e->ref->type == REF_ARRAY
+       && e->ref->u.ar.type != AR_FULL
+       && e->symtree->n.sym->value)
+     {
+       char name[2*GFC_MAX_SYMBOL_LEN + 12];
+       gfc_namespace *ns = e->symtree->n.sym->ns;
+       gfc_symtree *st;
+       gfc_expr *expr;
+       gfc_expr *p;
+       gfc_constructor *c;
+       int cnt = 0;
+ 
+       sprintf (name, "_len_trim_%s_%s", e->symtree->n.sym->name,
+ 	       ns->proc_name->name);
+       st = gfc_find_symtree (ns->sym_root, name);
+       if (st)
+ 	goto already_built;
+ 
+       /* Recursively call this fcn to simplify the constructor elements.  */
+       expr = gfc_copy_expr (e->symtree->n.sym->value);
+       expr->ts.type = BT_INTEGER;
+       expr->ts.kind = k;
+       expr->ts.u.cl = NULL;
+       c = gfc_constructor_first (expr->value.constructor);
+       for (; c; c = gfc_constructor_next (c))
+ 	{
+ 	  if (c->iterator)
+ 	    continue;
+ 
+ 	  if (c->expr && c->expr->ts.type == BT_CHARACTER)
+ 	    {
+ 	      p = gfc_simplify_len_trim (c->expr, kind);
+ 	      if (p == NULL)
+ 		goto clean_up;
+ 	      gfc_replace_expr (c->expr, p);
+ 	      cnt++;
+ 	    }
+ 	}
+ 
+       if (cnt)
+ 	{
+ 	  /* Build a new parameter to take the result.  */
+ 	  st = gfc_new_symtree (&ns->sym_root, name);
+ 	  st->n.sym = gfc_new_symbol (st->name, ns);
+ 	  st->n.sym->value = expr;
+ 	  st->n.sym->ts = expr->ts;
+ 	  st->n.sym->attr.dimension = 1;
+ 	  st->n.sym->attr.save = SAVE_IMPLICIT;
+ 	  st->n.sym->attr.flavor = FL_PARAMETER;
+ 	  st->n.sym->as = gfc_copy_array_spec (e->symtree->n.sym->as);
+ 	  gfc_set_sym_referenced (st->n.sym);
+ 	  st->n.sym->refs++;
+ 	  gfc_commit_symbol (st->n.sym);
+ 
+ already_built:
+ 	  /* Build a return expression.  */
+ 	  expr = gfc_copy_expr (e);
+ 	  expr->ts = st->n.sym->ts;
+ 	  expr->symtree = st;
+ 	  gfc_expression_rank (expr);
+ 	  return expr;
+ 	}
+ 
+ clean_up:
+       gfc_free_expr (expr);
+       return NULL;
+     }
+ 
    if (e->expr_type != EXPR_CONSTANT)
      return NULL;
  
diff -Nrcpad gcc-13.3.0/gcc/fortran/trans-array.cc gcc-13.4.0/gcc/fortran/trans-array.cc
*** gcc-13.3.0/gcc/fortran/trans-array.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/fortran/trans-array.cc	Thu Jun  5 16:02:58 2025
*************** get_CFI_desc (gfc_symbol *sym, gfc_expr
*** 937,948 ****
--- 937,970 ----
  }
  
  
+ /* A helper function for gfc_get_array_span that returns the array element size
+    of a class entity.  */
+ static tree
+ class_array_element_size (tree decl, bool unlimited)
+ {
+   /* Class dummys usually require extraction from the saved descriptor,
+      which gfc_class_vptr_get does for us if necessary. This, of course,
+      will be a component of the class object.  */
+   tree vptr = gfc_class_vptr_get (decl);
+   /* If this is an unlimited polymorphic entity with a character payload,
+      the element size will be corrected for the string length.  */
+   if (unlimited)
+     return gfc_resize_class_size_with_len (NULL,
+ 					   TREE_OPERAND (vptr, 0),
+ 					   gfc_vptr_size_get (vptr));
+   else
+     return gfc_vptr_size_get (vptr);
+ }
+ 
+ 
  /* Return the span of an array.  */
  
  tree
  gfc_get_array_span (tree desc, gfc_expr *expr)
  {
    tree tmp;
+   gfc_symbol *sym = (expr && expr->expr_type == EXPR_VARIABLE) ?
+ 		    expr->symtree->n.sym : NULL;
  
    if (is_pointer_array (desc)
        || (get_CFI_desc (NULL, expr, &desc, NULL)
*************** gfc_get_array_span (tree desc, gfc_expr
*** 967,990 ****
    else if (TREE_CODE (desc) == COMPONENT_REF
  	   && GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (desc))
  	   && GFC_CLASS_TYPE_P (TREE_TYPE (TREE_OPERAND (desc, 0))))
!     {
!       /* The descriptor is a class _data field and so use the vtable
! 	 size for the receiving span field.  */
!       tmp = gfc_get_vptr_from_expr (desc);
!       tmp = gfc_vptr_size_get (tmp);
!     }
!   else if (expr && expr->expr_type == EXPR_VARIABLE
! 	   && expr->symtree->n.sym->ts.type == BT_CLASS
  	   && expr->ref->type == REF_COMPONENT
  	   && expr->ref->next->type == REF_ARRAY
  	   && expr->ref->next->next == NULL
! 	   && CLASS_DATA (expr->symtree->n.sym)->attr.dimension)
!     {
!       /* Dummys come in sometimes with the descriptor detached from
! 	 the class field or declaration.  */
!       tmp = gfc_class_vptr_get (expr->symtree->n.sym->backend_decl);
!       tmp = gfc_vptr_size_get (tmp);
!     }
    else
      {
        /* If none of the fancy stuff works, the span is the element
--- 989,1005 ----
    else if (TREE_CODE (desc) == COMPONENT_REF
  	   && GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (desc))
  	   && GFC_CLASS_TYPE_P (TREE_TYPE (TREE_OPERAND (desc, 0))))
!     /* The descriptor is the _data field of a class object.  */
!     tmp = class_array_element_size (TREE_OPERAND (desc, 0),
! 				    UNLIMITED_POLY (expr));
!   else if (sym && sym->ts.type == BT_CLASS
  	   && expr->ref->type == REF_COMPONENT
  	   && expr->ref->next->type == REF_ARRAY
  	   && expr->ref->next->next == NULL
! 	   && CLASS_DATA (sym)->attr.dimension)
!     /* Having escaped the above, this can only be a class array dummy.  */
!     tmp = class_array_element_size (sym->backend_decl,
! 				    UNLIMITED_POLY (sym));
    else
      {
        /* If none of the fancy stuff works, the span is the element
*************** gfc_trans_array_constructor_value (stmtb
*** 2119,2125 ****
  	      p = gfc_constructor_next (p);
  	      n++;
  	    }
! 	  if (n < 4)
  	    {
  	      /* Scalar values.  */
  	      gfc_init_se (&se, NULL);
--- 2134,2142 ----
  	      p = gfc_constructor_next (p);
  	      n++;
  	    }
! 	  /* Constructor with few constant elements, or element size not
! 	     known at compile time (e.g. deferred-length character).  */
! 	  if (n < 4 || !INTEGER_CST_P (TYPE_SIZE_UNIT (type)))
  	    {
  	      /* Scalar values.  */
  	      gfc_init_se (&se, NULL);
*************** gfc_trans_array_constructor_value (stmtb
*** 2308,2314 ****
       Corrigenda 1 TO 4 for fortran 2008 (f08/0011).
  
       Transmit finalization of this constructor through 'finalblock'. */
!   if (!gfc_notification_std (GFC_STD_F2018_DEL) && finalblock != NULL
        && gfc_may_be_finalized (ts)
        && ctr > 0 && desc != NULL_TREE
        && GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (desc)))
--- 2325,2333 ----
       Corrigenda 1 TO 4 for fortran 2008 (f08/0011).
  
       Transmit finalization of this constructor through 'finalblock'. */
!   if ((gfc_option.allow_std & (GFC_STD_F2008 | GFC_STD_F2003))
!       && !(gfc_option.allow_std & GFC_STD_GNU)
!       && finalblock != NULL
        && gfc_may_be_finalized (ts)
        && ctr > 0 && desc != NULL_TREE
        && GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (desc)))
*************** gfc_array_init_size (tree descriptor, in
*** 5795,5800 ****
--- 5814,5824 ----
        tmp = gfc_conv_descriptor_dtype (descriptor);
        gfc_add_modify (pblock, tmp, gfc_get_dtype_rank_type (rank, type));
      }
+   else if (expr3_desc && GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (expr3_desc)))
+     {
+       tmp = gfc_conv_descriptor_dtype (descriptor);
+       gfc_add_modify (pblock, tmp, gfc_conv_descriptor_dtype (expr3_desc));
+     }
    else
      {
        tmp = gfc_conv_descriptor_dtype (descriptor);
*************** gfc_array_allocate (gfc_se * se, gfc_exp
*** 6334,6339 ****
--- 6358,6365 ----
    else
        gfc_add_expr_to_block (&se->pre, set_descriptor);
  
+   expr->symtree->n.sym->allocated_in_scope = 1;
+ 
    return true;
  }
  
*************** gfc_is_reallocatable_lhs (gfc_expr *expr
*** 10533,10541 ****
      return true;
  
    /* All that can be left are allocatable components.  */
!   if ((sym->ts.type != BT_DERIVED
!        && sym->ts.type != BT_CLASS)
! 	|| !sym->ts.u.derived->attr.alloc_comp)
      return false;
  
    /* Find a component ref followed by an array reference.  */
--- 10559,10565 ----
      return true;
  
    /* All that can be left are allocatable components.  */
!   if (sym->ts.type != BT_DERIVED && sym->ts.type != BT_CLASS)
      return false;
  
    /* Find a component ref followed by an array reference.  */
*************** gfc_alloc_allocatable_for_assignment (gf
*** 10638,10643 ****
--- 10662,10669 ----
    stmtblock_t realloc_block;
    stmtblock_t alloc_block;
    stmtblock_t fblock;
+   stmtblock_t loop_pre_block;
+   gfc_ref *ref;
    gfc_ss *rss;
    gfc_ss *lss;
    gfc_array_info *linfo;
*************** gfc_alloc_allocatable_for_assignment (gf
*** 10838,10843 ****
--- 10864,10908 ----
  			 array1, build_int_cst (TREE_TYPE (array1), 0));
    cond_null= gfc_evaluate_now (cond_null, &fblock);
  
+   /* If the data is null, set the descriptor bounds and offset. This suppresses
+      the maybe used uninitialized warning and forces the use of malloc because
+      the size is zero in all dimensions. Note that this block is only executed
+      if the lhs is unallocated and is only applied once in any namespace.
+      Component references are not subject to the warnings.  */
+   for (ref = expr1->ref; ref; ref = ref->next)
+     if (ref->type == REF_COMPONENT)
+       break;
+ 
+   if (!expr1->symtree->n.sym->allocated_in_scope && !ref)
+     {
+       gfc_start_block (&loop_pre_block);
+       for (n = 0; n < expr1->rank; n++)
+ 	{
+ 	  gfc_conv_descriptor_lbound_set (&loop_pre_block, desc,
+ 					  gfc_rank_cst[n],
+ 					  gfc_index_one_node);
+ 	  gfc_conv_descriptor_ubound_set (&loop_pre_block, desc,
+ 					  gfc_rank_cst[n],
+ 					  gfc_index_zero_node);
+ 	  gfc_conv_descriptor_stride_set (&loop_pre_block, desc,
+ 					  gfc_rank_cst[n],
+ 					  gfc_index_zero_node);
+ 	}
+ 
+       tmp = gfc_conv_descriptor_offset (desc);
+       gfc_add_modify (&loop_pre_block, tmp, gfc_index_zero_node);
+ 
+       tmp = fold_build2_loc (input_location, EQ_EXPR,
+ 			     logical_type_node, array1,
+ 			     build_int_cst (TREE_TYPE (array1), 0));
+       tmp = build3_v (COND_EXPR, tmp,
+ 		      gfc_finish_block (&loop_pre_block),
+ 		      build_empty_stmt (input_location));
+       gfc_prepend_expr_to_block (&loop->pre, tmp);
+ 
+       expr1->symtree->n.sym->allocated_in_scope = 1;
+     }
+ 
    tmp = build3_v (COND_EXPR, cond_null,
  		  build1_v (GOTO_EXPR, jump_label1),
  		  build_empty_stmt (input_location));
*************** gfc_alloc_allocatable_for_assignment (gf
*** 11008,11013 ****
--- 11073,11091 ----
  	gfc_add_modify (&fblock, linfo->delta[dim], tmp);
      }
  
+   /* Take into account _len of unlimited polymorphic entities, so that span
+      for array descriptors and allocation sizes are computed correctly.  */
+   if (UNLIMITED_POLY (expr2))
+     {
+       tree len = gfc_class_len_get (TREE_OPERAND (desc2, 0));
+       len = fold_build2_loc (input_location, MAX_EXPR, size_type_node,
+ 			     fold_convert (size_type_node, len),
+ 			     size_one_node);
+       elemsize2 = fold_build2_loc (input_location, MULT_EXPR,
+ 				   gfc_array_index_type, elemsize2,
+ 				   fold_convert (gfc_array_index_type, len));
+     }
+ 
    if (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (desc)))
      gfc_conv_descriptor_span_set (&fblock, desc, elemsize2);
  
*************** gfc_alloc_allocatable_for_assignment (gf
*** 11054,11059 ****
--- 11132,11140 ----
  	    gfc_add_modify (&fblock, tmp,
  			    fold_convert (TREE_TYPE (tmp),
  					  TYPE_SIZE_UNIT (type)));
+ 	  else if (UNLIMITED_POLY (expr2))
+ 	    gfc_add_modify (&fblock, tmp,
+ 			    gfc_class_len_get (TREE_OPERAND (desc2, 0)));
  	  else
  	    gfc_add_modify (&fblock, tmp,
  			    build_int_cst (TREE_TYPE (tmp), 0));
*************** gfc_walk_array_ref (gfc_ss * ss, gfc_exp
*** 11506,11511 ****
--- 11587,11598 ----
  	  break;
  
  	case AR_FULL:
+ 	  /* Assumed shape arrays from interface mapping need this fix.  */
+ 	  if (!ar->as && expr->symtree->n.sym->as)
+ 	    {
+ 	      ar->as = gfc_get_array_spec();
+ 	      *ar->as = *expr->symtree->n.sym->as;
+ 	    }
  	  newss = gfc_get_array_ss (ss, expr, ar->as->rank, GFC_SS_SECTION);
  	  newss->info->data.array.ref = ref;
  
diff -Nrcpad gcc-13.3.0/gcc/fortran/trans-decl.cc gcc-13.4.0/gcc/fortran/trans-decl.cc
*** gcc-13.3.0/gcc/fortran/trans-decl.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/fortran/trans-decl.cc	Thu Jun  5 16:02:58 2025
*************** gfc_create_module_variable (gfc_symbol *
*** 5294,5300 ****
    /* Create the variable.  */
    pushdecl (decl);
    gcc_assert (sym->ns->proc_name->attr.flavor == FL_MODULE
! 	      || (sym->ns->parent->proc_name->attr.flavor == FL_MODULE
  		  && sym->fn_result_spec));
    DECL_CONTEXT (decl) = sym->ns->proc_name->backend_decl;
    rest_of_decl_compilation (decl, 1, 0);
--- 5294,5301 ----
    /* Create the variable.  */
    pushdecl (decl);
    gcc_assert (sym->ns->proc_name->attr.flavor == FL_MODULE
! 	      || ((sym->ns->parent->proc_name->attr.flavor == FL_MODULE
! 		   || sym->ns->parent->proc_name->attr.flavor == FL_PROCEDURE)
  		  && sym->fn_result_spec));
    DECL_CONTEXT (decl) = sym->ns->proc_name->backend_decl;
    rest_of_decl_compilation (decl, 1, 0);
diff -Nrcpad gcc-13.3.0/gcc/fortran/trans-expr.cc gcc-13.4.0/gcc/fortran/trans-expr.cc
*** gcc-13.3.0/gcc/fortran/trans-expr.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/fortran/trans-expr.cc	Thu Jun  5 16:02:58 2025
*************** gfc_resize_class_size_with_len (stmtbloc
*** 317,322 ****
--- 317,324 ----
  	  size = gfc_evaluate_now (size, block);
  	  tmp = gfc_evaluate_now (fold_convert (type , tmp), block);
  	}
+       else
+ 	tmp = fold_convert (type , tmp);
        tmp2 = fold_build2_loc (input_location, MULT_EXPR,
  			      type, size, tmp);
        tmp = fold_build2_loc (input_location, GT_EXPR,
*************** gfc_conv_intrinsic_to_class (gfc_se *par
*** 996,1001 ****
--- 998,1009 ----
    tree var;
    tree tmp;
    int dim;
+   bool unlimited_poly;
+ 
+   unlimited_poly = class_ts.type == BT_CLASS
+ 		   && class_ts.u.derived->components->ts.type == BT_DERIVED
+ 		   && class_ts.u.derived->components->ts.u.derived
+ 						->attr.unlimited_polymorphic;
  
    /* The intrinsic type needs to be converted to a temporary
       CLASS object.  */
*************** gfc_conv_intrinsic_to_class (gfc_se *par
*** 1067,1075 ****
      }
  
    gcc_assert (class_ts.type == BT_CLASS);
!   if (class_ts.u.derived->components->ts.type == BT_DERIVED
!       && class_ts.u.derived->components->ts.u.derived
! 		 ->attr.unlimited_polymorphic)
      {
        ctree = gfc_class_len_get (var);
        /* When the actual arg is a char array, then set the _len component of the
--- 1075,1081 ----
      }
  
    gcc_assert (class_ts.type == BT_CLASS);
!   if (unlimited_poly)
      {
        ctree = gfc_class_len_get (var);
        /* When the actual arg is a char array, then set the _len component of the
*************** gfc_conv_intrinsic_to_class (gfc_se *par
*** 1116,1125 ****
  
        gfc_add_modify (&parmse->pre, ctree, fold_convert (TREE_TYPE (ctree), tmp));
      }
!   else if (class_ts.type == BT_CLASS
! 	   && class_ts.u.derived->components
! 	   && class_ts.u.derived->components->ts.u
! 		.derived->attr.unlimited_polymorphic)
      {
        ctree = gfc_class_len_get (var);
        gfc_add_modify (&parmse->pre, ctree,
--- 1122,1128 ----
  
        gfc_add_modify (&parmse->pre, ctree, fold_convert (TREE_TYPE (ctree), tmp));
      }
!   else if (unlimited_poly)
      {
        ctree = gfc_class_len_get (var);
        gfc_add_modify (&parmse->pre, ctree,
*************** gfc_trans_class_init_assign (gfc_code *c
*** 1720,1726 ****
  	  if (cmp->initializer)
  	    break;
  	  else if (!cmp->next)
! 	    return build_empty_stmt (input_location);
  	}
      }
  
--- 1723,1733 ----
  	  if (cmp->initializer)
  	    break;
  	  else if (!cmp->next)
! 	    {
! 	      tmp = build_empty_stmt (input_location);
! 	      gfc_add_expr_to_block (&block, tmp);
! 	      return gfc_finish_block (&block);
! 	    }
  	}
      }
  
*************** gfc_conv_expr_op (gfc_se * se, gfc_expr
*** 3961,3966 ****
--- 3968,3986 ----
  
    if (lop)
      {
+       // Inhibit overeager optimization of Cray pointer comparisons (PR106692).
+       if (expr->value.op.op1->expr_type == EXPR_VARIABLE
+ 	  && expr->value.op.op1->ts.type == BT_INTEGER
+ 	  && expr->value.op.op1->symtree
+ 	  && expr->value.op.op1->symtree->n.sym->attr.cray_pointer)
+ 	TREE_THIS_VOLATILE (lse.expr) = 1;
+ 
+       if (expr->value.op.op2->expr_type == EXPR_VARIABLE
+ 	  && expr->value.op.op2->ts.type == BT_INTEGER
+ 	  && expr->value.op.op2->symtree
+ 	  && expr->value.op.op2->symtree->n.sym->attr.cray_pointer)
+ 	TREE_THIS_VOLATILE (rse.expr) = 1;
+ 
        /* The result of logical ops is always logical_type_node.  */
        tmp = fold_build2_loc (input_location, code, logical_type_node,
  			     lse.expr, rse.expr);
*************** gfc_get_interface_mapping_charlen (gfc_i
*** 4364,4375 ****
  
  static tree
  gfc_get_interface_mapping_array (stmtblock_t * block, gfc_symbol * sym,
! 				 gfc_packed packed, tree data)
  {
    tree type;
    tree var;
  
!   type = gfc_typenode_for_spec (&sym->ts);
    type = gfc_get_nodesc_array_type (type, sym->as, packed,
  				    !sym->attr.target && !sym->attr.pointer
  				    && !sym->attr.proc_pointer);
--- 4384,4398 ----
  
  static tree
  gfc_get_interface_mapping_array (stmtblock_t * block, gfc_symbol * sym,
! 				 gfc_packed packed, tree data, tree len)
  {
    tree type;
    tree var;
  
!   if (len != NULL_TREE && (TREE_CONSTANT (len) || VAR_P (len)))
!     type = gfc_get_character_type_len (sym->ts.kind, len);
!   else
!     type = gfc_typenode_for_spec (&sym->ts);
    type = gfc_get_nodesc_array_type (type, sym->as, packed,
  				    !sym->attr.target && !sym->attr.pointer
  				    && !sym->attr.proc_pointer);
*************** gfc_add_interface_mapping (gfc_interface
*** 4516,4522 ****
       convert it to a boundless character type.  */
    else if (!sym->attr.dimension && sym->ts.type == BT_CHARACTER)
      {
!       tmp = gfc_get_character_type_len (sym->ts.kind, NULL);
        tmp = build_pointer_type (tmp);
        if (sym->attr.pointer)
          value = build_fold_indirect_ref_loc (input_location,
--- 4539,4546 ----
       convert it to a boundless character type.  */
    else if (!sym->attr.dimension && sym->ts.type == BT_CHARACTER)
      {
!       se->string_length = gfc_evaluate_now (se->string_length, &se->pre);
!       tmp = gfc_get_character_type_len (sym->ts.kind, se->string_length);
        tmp = build_pointer_type (tmp);
        if (sym->attr.pointer)
          value = build_fold_indirect_ref_loc (input_location,
*************** gfc_add_interface_mapping (gfc_interface
*** 4535,4541 ****
    /* For character(*), use the actual argument's descriptor.  */
    else if (sym->ts.type == BT_CHARACTER && !new_sym->ts.u.cl->length)
      value = build_fold_indirect_ref_loc (input_location,
! 				     se->expr);
  
    /* If the argument is an array descriptor, use it to determine
       information about the actual argument's shape.  */
--- 4559,4565 ----
    /* For character(*), use the actual argument's descriptor.  */
    else if (sym->ts.type == BT_CHARACTER && !new_sym->ts.u.cl->length)
      value = build_fold_indirect_ref_loc (input_location,
! 					 se->expr);
  
    /* If the argument is an array descriptor, use it to determine
       information about the actual argument's shape.  */
*************** gfc_add_interface_mapping (gfc_interface
*** 4549,4555 ****
        /* Create the replacement variable.  */
        tmp = gfc_conv_descriptor_data_get (desc);
        value = gfc_get_interface_mapping_array (&se->pre, sym,
! 					       PACKED_NO, tmp);
  
        /* Use DESC to work out the upper bounds, strides and offset.  */
        gfc_set_interface_mapping_bounds (&se->pre, TREE_TYPE (value), desc);
--- 4573,4580 ----
        /* Create the replacement variable.  */
        tmp = gfc_conv_descriptor_data_get (desc);
        value = gfc_get_interface_mapping_array (&se->pre, sym,
! 					       PACKED_NO, tmp,
! 					       se->string_length);
  
        /* Use DESC to work out the upper bounds, strides and offset.  */
        gfc_set_interface_mapping_bounds (&se->pre, TREE_TYPE (value), desc);
*************** gfc_add_interface_mapping (gfc_interface
*** 4557,4563 ****
    else
      /* Otherwise we have a packed array.  */
      value = gfc_get_interface_mapping_array (&se->pre, sym,
! 					     PACKED_FULL, se->expr);
  
    new_sym->backend_decl = value;
  }
--- 4582,4589 ----
    else
      /* Otherwise we have a packed array.  */
      value = gfc_get_interface_mapping_array (&se->pre, sym,
! 					     PACKED_FULL, se->expr,
! 					     se->string_length);
  
    new_sym->backend_decl = value;
  }
*************** gfc_conv_gfc_desc_to_cfi_desc (gfc_se *p
*** 5682,5688 ****
  	  itype = CFI_type_other;  // FIXME: Or CFI_type_cptr ?
  	  break;
  	case BT_CLASS:
! 	  if (UNLIMITED_POLY (e) && fsym->ts.type == BT_ASSUMED)
  	    {
  	      // F2017: 7.3.2.2: "An entity that is declared using the TYPE(*)
  	      // type specifier is assumed-type and is an unlimited polymorphic
--- 5708,5714 ----
  	  itype = CFI_type_other;  // FIXME: Or CFI_type_cptr ?
  	  break;
  	case BT_CLASS:
! 	  if (fsym->ts.type == BT_ASSUMED)
  	    {
  	      // F2017: 7.3.2.2: "An entity that is declared using the TYPE(*)
  	      // type specifier is assumed-type and is an unlimited polymorphic
*************** gfc_conv_procedure_call (gfc_se * se, gf
*** 6230,6239 ****
  		{
  		  /* Pass a NULL pointer for an absent arg.  */
  		  parmse.expr = null_pointer_node;
  		  gfc_dummy_arg * const dummy_arg = arg->associated_dummy;
! 		  if (dummy_arg
! 		      && gfc_dummy_arg_get_typespec (*dummy_arg).type
! 			 == BT_CHARACTER)
  		    parmse.string_length = build_int_cst (gfc_charlen_type_node,
  							  0);
  		}
--- 6256,6273 ----
  		{
  		  /* Pass a NULL pointer for an absent arg.  */
  		  parmse.expr = null_pointer_node;
+ 
+ 		  /* Is it an absent character dummy?  */
+ 		  bool absent_char = false;
  		  gfc_dummy_arg * const dummy_arg = arg->associated_dummy;
! 
! 		  /* Fall back to inferred type only if no formal.  */
! 		  if (fsym)
! 		    absent_char = (fsym->ts.type == BT_CHARACTER);
! 		  else if (dummy_arg)
! 		    absent_char = (gfc_dummy_arg_get_typespec (*dummy_arg).type
! 				   == BT_CHARACTER);
! 		  if (absent_char)
  		    parmse.string_length = build_int_cst (gfc_charlen_type_node,
  							  0);
  		}
*************** gfc_conv_procedure_call (gfc_se * se, gf
*** 6250,6258 ****
  			  || !CLASS_DATA (fsym)->attr.allocatable));
  	  gfc_init_se (&parmse, NULL);
  	  parmse.expr = null_pointer_node;
! 	  if (arg->associated_dummy
! 	      && gfc_dummy_arg_get_typespec (*arg->associated_dummy).type
! 		 == BT_CHARACTER)
  	    parmse.string_length = build_int_cst (gfc_charlen_type_node, 0);
  	}
        else if (fsym && fsym->ts.type == BT_CLASS
--- 6284,6290 ----
  			  || !CLASS_DATA (fsym)->attr.allocatable));
  	  gfc_init_se (&parmse, NULL);
  	  parmse.expr = null_pointer_node;
! 	  if (fsym->ts.type == BT_CHARACTER)
  	    parmse.string_length = build_int_cst (gfc_charlen_type_node, 0);
  	}
        else if (fsym && fsym->ts.type == BT_CLASS
*************** gfc_conv_procedure_call (gfc_se * se, gf
*** 6718,6737 ****
  			{
  			  tree zero;
  
! 			  gfc_expr *var;
! 
! 			  /* Borrow the function symbol to make a call to
! 			     gfc_add_finalizer_call and then restore it.  */
! 			  tmp = e->symtree->n.sym->backend_decl;
! 			  e->symtree->n.sym->backend_decl
! 					= TREE_OPERAND (parmse.expr, 0);
! 			  e->symtree->n.sym->attr.flavor = FL_VARIABLE;
! 			  var = gfc_lval_expr_from_sym (e->symtree->n.sym);
! 			  finalized = gfc_add_finalizer_call (&parmse.post,
! 							      var);
! 			  gfc_free_expr (var);
! 			  e->symtree->n.sym->backend_decl = tmp;
! 			  e->symtree->n.sym->attr.flavor = FL_PROCEDURE;
  
  			  /* Then free the class _data.  */
  			  zero = build_int_cst (TREE_TYPE (parmse.expr), 0);
--- 6750,6760 ----
  			{
  			  tree zero;
  
! 			  /* Finalize the expression.  */
! 			  gfc_finalize_tree_expr (&parmse, NULL,
! 						  gfc_expr_attr (e), e->rank);
! 			  gfc_add_block_to_block (&parmse.post,
! 						  &parmse.finalblock);
  
  			  /* Then free the class _data.  */
  			  zero = build_int_cst (TREE_TYPE (parmse.expr), 0);
*************** gfc_conv_procedure_call (gfc_se * se, gf
*** 7171,7177 ****
  		 types passed to class formals need the _data component.  */
  	      tmp = gfc_class_data_get (tmp);
  	      if (!CLASS_DATA (fsym)->attr.dimension)
! 		tmp = build_fold_indirect_ref_loc (input_location, tmp);
  	    }
  
  	  if (e->expr_type == EXPR_OP
--- 7194,7208 ----
  		 types passed to class formals need the _data component.  */
  	      tmp = gfc_class_data_get (tmp);
  	      if (!CLASS_DATA (fsym)->attr.dimension)
! 		{
! 		  if (UNLIMITED_POLY (fsym))
! 		    {
! 		      tree type = gfc_typenode_for_spec (&e->ts);
! 		      type = build_pointer_type (type);
! 		      tmp = fold_convert (type, tmp);
! 		    }
! 		  tmp = build_fold_indirect_ref_loc (input_location, tmp);
! 		}
  	    }
  
  	  if (e->expr_type == EXPR_OP
*************** gfc_conv_procedure_call (gfc_se * se, gf
*** 7982,7989 ****
  	 call the finalization function of the temporary. Note that the
  	 nullification of allocatable components needed by the result
  	 is done in gfc_trans_assignment_1.  */
!       if (expr && ((gfc_is_class_array_function (expr)
! 		    && se->ss && se->ss->loop)
  		   || gfc_is_alloc_class_scalar_function (expr))
  	  && se->expr && GFC_CLASS_TYPE_P (TREE_TYPE (se->expr))
  	  && expr->must_finalize)
--- 8013,8019 ----
  	 call the finalization function of the temporary. Note that the
  	 nullification of allocatable components needed by the result
  	 is done in gfc_trans_assignment_1.  */
!       if (expr && (gfc_is_class_array_function (expr)
  		   || gfc_is_alloc_class_scalar_function (expr))
  	  && se->expr && GFC_CLASS_TYPE_P (TREE_TYPE (se->expr))
  	  && expr->must_finalize)
*************** gfc_trans_alloc_subarray_assign (tree de
*** 8822,8832 ****
  /* Allocate or reallocate scalar component, as necessary.  */
  
  static void
! alloc_scalar_allocatable_for_subcomponent_assignment (stmtblock_t *block,
! 						      tree comp,
! 						      gfc_component *cm,
! 						      gfc_expr *expr2,
! 						      gfc_symbol *sym)
  {
    tree tmp;
    tree ptr;
--- 8852,8860 ----
  /* Allocate or reallocate scalar component, as necessary.  */
  
  static void
! alloc_scalar_allocatable_subcomponent (stmtblock_t *block, tree comp,
! 				       gfc_component *cm, gfc_expr *expr2,
! 				       tree slen)
  {
    tree tmp;
    tree ptr;
*************** alloc_scalar_allocatable_for_subcomponen
*** 8844,8869 ****
  
    if (cm->ts.type == BT_CHARACTER && cm->ts.deferred)
      {
-       char name[GFC_MAX_SYMBOL_LEN+9];
-       gfc_component *strlen;
-       /* Use the rhs string length and the lhs element size.  */
        gcc_assert (expr2->ts.type == BT_CHARACTER);
!       if (!expr2->ts.u.cl->backend_decl)
! 	{
! 	  gfc_conv_string_length (expr2->ts.u.cl, expr2, block);
! 	  gcc_assert (expr2->ts.u.cl->backend_decl);
! 	}
  
        size = expr2->ts.u.cl->backend_decl;
  
!       /* Ensure that cm->ts.u.cl->backend_decl is a componentref to _%s_length
! 	 component.  */
!       sprintf (name, "_%s_length", cm->name);
!       strlen = gfc_find_component (sym, name, true, true, NULL);
        lhs_cl_size = fold_build3_loc (input_location, COMPONENT_REF,
  				     gfc_charlen_type_node,
  				     TREE_OPERAND (comp, 0),
! 				     strlen->backend_decl, NULL_TREE);
  
        tmp = TREE_TYPE (gfc_typenode_for_spec (&cm->ts));
        tmp = TYPE_SIZE_UNIT (tmp);
--- 8872,8891 ----
  
    if (cm->ts.type == BT_CHARACTER && cm->ts.deferred)
      {
        gcc_assert (expr2->ts.type == BT_CHARACTER);
!       if (!expr2->ts.u.cl->backend_decl
! 	  || !VAR_P (expr2->ts.u.cl->backend_decl))
! 	expr2->ts.u.cl->backend_decl = gfc_create_var (TREE_TYPE (slen),
! 						       "slen");
!       gfc_add_modify (block, expr2->ts.u.cl->backend_decl, slen);
  
        size = expr2->ts.u.cl->backend_decl;
  
!       gfc_deferred_strlen (cm, &tmp);
        lhs_cl_size = fold_build3_loc (input_location, COMPONENT_REF,
  				     gfc_charlen_type_node,
  				     TREE_OPERAND (comp, 0),
! 				     tmp, NULL_TREE);
  
        tmp = TREE_TYPE (gfc_typenode_for_spec (&cm->ts));
        tmp = TYPE_SIZE_UNIT (tmp);
*************** alloc_scalar_allocatable_for_subcomponen
*** 8936,8943 ****
  /* Assign a single component of a derived type constructor.  */
  
  static tree
! gfc_trans_subcomponent_assign (tree dest, gfc_component * cm, gfc_expr * expr,
! 			       gfc_symbol *sym, bool init)
  {
    gfc_se se;
    gfc_se lse;
--- 8958,8965 ----
  /* Assign a single component of a derived type constructor.  */
  
  static tree
! gfc_trans_subcomponent_assign (tree dest, gfc_component * cm,
! 			       gfc_expr * expr, bool init)
  {
    gfc_se se;
    gfc_se lse;
*************** gfc_trans_subcomponent_assign (tree dest
*** 9021,9029 ****
        tmp = gfc_trans_alloc_subarray_assign (tmp, cm, expr);
        gfc_add_expr_to_block (&block, tmp);
      }
!   else if (init && cm->attr.allocatable && expr->expr_type == EXPR_NULL)
      {
!       /* NULL initialization for allocatable components.  */
        gfc_add_modify (&block, dest, fold_convert (TREE_TYPE (dest),
  						  null_pointer_node));
      }
--- 9043,9055 ----
        tmp = gfc_trans_alloc_subarray_assign (tmp, cm, expr);
        gfc_add_expr_to_block (&block, tmp);
      }
!   else if (cm->attr.allocatable && expr->expr_type == EXPR_NULL
! 	   && (init
! 	       || (cm->ts.type == BT_CHARACTER
! 		   && !(cm->ts.deferred || cm->attr.pdt_string))))
      {
!       /* NULL initialization for allocatable components.
! 	 Deferred-length character is dealt with later.  */
        gfc_add_modify (&block, dest, fold_convert (TREE_TYPE (dest),
  						  null_pointer_node));
      }
*************** gfc_trans_subcomponent_assign (tree dest
*** 9031,9049 ****
  	   || (cm->ts.type == BT_CLASS && CLASS_DATA (cm)->attr.allocatable
  	       && expr->ts.type != BT_CLASS)))
      {
        /* Take care about non-array allocatable components here.  The alloc_*
  	 routine below is motivated by the alloc_scalar_allocatable_for_
  	 assignment() routine, but with the realloc portions removed and
  	 different input.  */
!       alloc_scalar_allocatable_for_subcomponent_assignment (&block,
! 							    dest,
! 							    cm,
! 							    expr,
! 							    sym);
        /* The remainder of these instructions follow the if (cm->attr.pointer)
  	 if (!cm->attr.dimension) part above.  */
-       gfc_init_se (&se, NULL);
-       gfc_conv_expr (&se, expr);
        gfc_add_block_to_block (&block, &se.pre);
  
        if (expr->symtree && expr->symtree->n.sym->attr.proc_pointer
--- 9057,9073 ----
  	   || (cm->ts.type == BT_CLASS && CLASS_DATA (cm)->attr.allocatable
  	       && expr->ts.type != BT_CLASS)))
      {
+       gfc_init_se (&se, NULL);
+       gfc_conv_expr (&se, expr);
+ 
        /* Take care about non-array allocatable components here.  The alloc_*
  	 routine below is motivated by the alloc_scalar_allocatable_for_
  	 assignment() routine, but with the realloc portions removed and
  	 different input.  */
!       alloc_scalar_allocatable_subcomponent (&block, dest, cm, expr,
! 					     se.string_length);
        /* The remainder of these instructions follow the if (cm->attr.pointer)
  	 if (!cm->attr.dimension) part above.  */
        gfc_add_block_to_block (&block, &se.pre);
  
        if (expr->symtree && expr->symtree->n.sym->attr.proc_pointer
*************** gfc_trans_structure_assign (tree dest, g
*** 9307,9319 ****
        if (!c->expr)
  	{
  	  gfc_expr *e = gfc_get_null_expr (NULL);
! 	  tmp = gfc_trans_subcomponent_assign (tmp, cm, e, expr->ts.u.derived,
! 					       init);
  	  gfc_free_expr (e);
  	}
        else
!         tmp = gfc_trans_subcomponent_assign (tmp, cm, c->expr,
!                                              expr->ts.u.derived, init);
        gfc_add_expr_to_block (&block, tmp);
      }
    return gfc_finish_block (&block);
--- 9331,9341 ----
        if (!c->expr)
  	{
  	  gfc_expr *e = gfc_get_null_expr (NULL);
! 	  tmp = gfc_trans_subcomponent_assign (tmp, cm, e, init);
  	  gfc_free_expr (e);
  	}
        else
! 	tmp = gfc_trans_subcomponent_assign (tmp, cm, c->expr, init);
        gfc_add_expr_to_block (&block, tmp);
      }
    return gfc_finish_block (&block);
*************** gfc_conv_expr (gfc_se * se, gfc_expr * e
*** 9554,9560 ****
  	 executable construct containing the reference. This, in fact,
  	 was later deleted by the Combined Techical Corrigenda 1 TO 4 for
  	 fortran 2008 (f08/0011).  */
!       if (!gfc_notification_std (GFC_STD_F2018_DEL) && expr->must_finalize
  	  && gfc_may_be_finalized (expr->ts))
  	{
  	  gfc_warning (0, "The structure constructor at %C has been"
--- 9576,9584 ----
  	 executable construct containing the reference. This, in fact,
  	 was later deleted by the Combined Techical Corrigenda 1 TO 4 for
  	 fortran 2008 (f08/0011).  */
!       if ((gfc_option.allow_std & (GFC_STD_F2008 | GFC_STD_F2003))
! 	  && !(gfc_option.allow_std & GFC_STD_GNU)
! 	  && expr->must_finalize
  	  && gfc_may_be_finalized (expr->ts))
  	{
  	  gfc_warning (0, "The structure constructor at %C has been"
*************** trans_get_upoly_len (stmtblock_t *block,
*** 9748,9754 ****
  static tree
  trans_class_vptr_len_assignment (stmtblock_t *block, gfc_expr * le,
  				 gfc_expr * re, gfc_se *rse,
! 				 tree * to_lenp, tree * from_lenp)
  {
    gfc_se se;
    gfc_expr * vptr_expr;
--- 9772,9779 ----
  static tree
  trans_class_vptr_len_assignment (stmtblock_t *block, gfc_expr * le,
  				 gfc_expr * re, gfc_se *rse,
! 				 tree * to_lenp, tree * from_lenp,
! 				 tree * from_vptrp)
  {
    gfc_se se;
    gfc_expr * vptr_expr;
*************** trans_class_vptr_len_assignment (stmtblo
*** 9756,9765 ****
    bool set_vptr = false, temp_rhs = false;
    stmtblock_t *pre = block;
    tree class_expr = NULL_TREE;
  
    /* Create a temporary for complicated expressions.  */
    if (re->expr_type != EXPR_VARIABLE && re->expr_type != EXPR_NULL
!       && rse->expr != NULL_TREE && !DECL_P (rse->expr))
      {
        if (re->ts.type == BT_CLASS && !GFC_CLASS_TYPE_P (TREE_TYPE (rse->expr)))
  	class_expr = gfc_get_class_from_expr (rse->expr);
--- 9781,9791 ----
    bool set_vptr = false, temp_rhs = false;
    stmtblock_t *pre = block;
    tree class_expr = NULL_TREE;
+   tree from_vptr = NULL_TREE;
  
    /* Create a temporary for complicated expressions.  */
    if (re->expr_type != EXPR_VARIABLE && re->expr_type != EXPR_NULL
!       && rse->expr != NULL_TREE)
      {
        if (re->ts.type == BT_CLASS && !GFC_CLASS_TYPE_P (TREE_TYPE (rse->expr)))
  	class_expr = gfc_get_class_from_expr (rse->expr);
*************** trans_class_vptr_len_assignment (stmtblo
*** 9841,9847 ****
  	      vptr_expr = NULL;
  	      se.expr = gfc_class_vptr_get (GFC_DECL_SAVED_DESCRIPTOR (
  					     re->symtree->n.sym->backend_decl));
! 	      if (to_len)
  		from_len = gfc_class_len_get (GFC_DECL_SAVED_DESCRIPTOR (
  					     re->symtree->n.sym->backend_decl));
  	    }
--- 9867,9873 ----
  	      vptr_expr = NULL;
  	      se.expr = gfc_class_vptr_get (GFC_DECL_SAVED_DESCRIPTOR (
  					     re->symtree->n.sym->backend_decl));
! 	      if (to_len && UNLIMITED_POLY (re))
  		from_len = gfc_class_len_get (GFC_DECL_SAVED_DESCRIPTOR (
  					     re->symtree->n.sym->backend_decl));
  	    }
*************** trans_class_vptr_len_assignment (stmtblo
*** 9856,9861 ****
--- 9882,9888 ----
  		tmp = rse->expr;
  
  	      se.expr = gfc_class_vptr_get (tmp);
+ 	      from_vptr = se.expr;
  	      if (UNLIMITED_POLY (re))
  		from_len = gfc_class_len_get (tmp);
  
*************** trans_class_vptr_len_assignment (stmtblo
*** 9877,9882 ****
--- 9904,9910 ----
  	  gfc_free_expr (vptr_expr);
  	  gfc_add_block_to_block (block, &se.pre);
  	  gcc_assert (se.post.head == NULL_TREE);
+ 	  from_vptr = se.expr;
  	}
        gfc_add_modify (pre, lhs_vptr, fold_convert (TREE_TYPE (lhs_vptr),
  						se.expr));
*************** trans_class_vptr_len_assignment (stmtblo
*** 9905,9915 ****
  	}
      }
  
!   /* Return the _len trees only, when requested.  */
    if (to_lenp)
      *to_lenp = to_len;
    if (from_lenp)
      *from_lenp = from_len;
    return lhs_vptr;
  }
  
--- 9933,9945 ----
  	}
      }
  
!   /* Return the _len and _vptr trees only, when requested.  */
    if (to_lenp)
      *to_lenp = to_len;
    if (from_lenp)
      *from_lenp = from_len;
+   if (from_vptrp)
+     *from_vptrp = from_vptr;
    return lhs_vptr;
  }
  
*************** trans_class_pointer_fcn (stmtblock_t *bl
*** 9978,9984 ****
      {
        expr1_vptr = trans_class_vptr_len_assignment (block, expr1,
  						    expr2, rse,
! 						    NULL, NULL);
        gfc_add_block_to_block (block, &rse->pre);
        tmp = gfc_create_var (TREE_TYPE (rse->expr), "ptrtemp");
        gfc_add_modify (&lse->pre, tmp, rse->expr);
--- 10008,10014 ----
      {
        expr1_vptr = trans_class_vptr_len_assignment (block, expr1,
  						    expr2, rse,
! 						    NULL, NULL, NULL);
        gfc_add_block_to_block (block, &rse->pre);
        tmp = gfc_create_var (TREE_TYPE (rse->expr), "ptrtemp");
        gfc_add_modify (&lse->pre, tmp, rse->expr);
*************** gfc_trans_pointer_assignment (gfc_expr *
*** 10054,10060 ****
        if (non_proc_ptr_assign && expr1->ts.type == BT_CLASS)
  	{
  	  trans_class_vptr_len_assignment (&block, expr1, expr2, &rse, NULL,
! 					   NULL);
  	  lse.expr = gfc_class_data_get (lse.expr);
  	}
  
--- 10084,10090 ----
        if (non_proc_ptr_assign && expr1->ts.type == BT_CLASS)
  	{
  	  trans_class_vptr_len_assignment (&block, expr1, expr2, &rse, NULL,
! 					   NULL, NULL);
  	  lse.expr = gfc_class_data_get (lse.expr);
  	}
  
*************** gfc_trans_pointer_assignment (gfc_expr *
*** 10183,10189 ****
  	      if (expr1->ts.type == BT_CLASS)
  		expr1_vptr = trans_class_vptr_len_assignment (&block, expr1,
  							      expr2, &rse,
! 							      NULL, NULL);
  	    }
  	}
        else if (expr2->expr_type == EXPR_VARIABLE)
--- 10213,10220 ----
  	      if (expr1->ts.type == BT_CLASS)
  		expr1_vptr = trans_class_vptr_len_assignment (&block, expr1,
  							      expr2, &rse,
! 							      NULL, NULL,
! 							      NULL);
  	    }
  	}
        else if (expr2->expr_type == EXPR_VARIABLE)
*************** gfc_trans_pointer_assignment (gfc_expr *
*** 10200,10206 ****
  	      rse.expr = NULL_TREE;
  	      rse.string_length = strlen_rhs;
  	      trans_class_vptr_len_assignment (&block, expr1, expr2, &rse,
! 					       NULL, NULL);
  	    }
  
  	  if (remap == NULL)
--- 10231,10237 ----
  	      rse.expr = NULL_TREE;
  	      rse.string_length = strlen_rhs;
  	      trans_class_vptr_len_assignment (&block, expr1, expr2, &rse,
! 					       NULL, NULL, NULL);
  	    }
  
  	  if (remap == NULL)
*************** gfc_trans_pointer_assignment (gfc_expr *
*** 10233,10239 ****
  	    {
  	      expr1_vptr = trans_class_vptr_len_assignment (&block, expr1,
  							    expr2, &rse, NULL,
! 							    NULL);
  	      gfc_add_block_to_block (&block, &rse.pre);
  	      tmp = gfc_create_var (TREE_TYPE (rse.expr), "ptrtemp");
  	      gfc_add_modify (&lse.pre, tmp, rse.expr);
--- 10264,10270 ----
  	    {
  	      expr1_vptr = trans_class_vptr_len_assignment (&block, expr1,
  							    expr2, &rse, NULL,
! 							    NULL, NULL);
  	      gfc_add_block_to_block (&block, &rse.pre);
  	      tmp = gfc_create_var (TREE_TYPE (rse.expr), "ptrtemp");
  	      gfc_add_modify (&lse.pre, tmp, rse.expr);
*************** trans_class_assignment (stmtblock_t *blo
*** 11621,11627 ****
  			gfc_se *lse, gfc_se *rse, bool use_vptr_copy,
  			bool class_realloc)
  {
!   tree tmp, fcn, stdcopy, to_len, from_len, vptr, old_vptr;
    vec<tree, va_gc> *args = NULL;
    bool final_expr;
  
--- 11652,11658 ----
  			gfc_se *lse, gfc_se *rse, bool use_vptr_copy,
  			bool class_realloc)
  {
!   tree tmp, fcn, stdcopy, to_len, from_len, vptr, old_vptr, rhs_vptr;
    vec<tree, va_gc> *args = NULL;
    bool final_expr;
  
*************** trans_class_assignment (stmtblock_t *blo
*** 11645,11651 ****
      }
  
    vptr = trans_class_vptr_len_assignment (block, lhs, rhs, rse, &to_len,
! 					 &from_len);
  
    /* Generate (re)allocation of the lhs.  */
    if (class_realloc)
--- 11676,11684 ----
      }
  
    vptr = trans_class_vptr_len_assignment (block, lhs, rhs, rse, &to_len,
! 					  &from_len, &rhs_vptr);
!   if (rhs_vptr == NULL_TREE)
!     rhs_vptr = vptr;
  
    /* Generate (re)allocation of the lhs.  */
    if (class_realloc)
*************** trans_class_assignment (stmtblock_t *blo
*** 11658,11664 ****
        else
  	old_vptr = build_int_cst (TREE_TYPE (vptr), 0);
  
!       size = gfc_vptr_size_get (vptr);
        tmp = lse->expr;
        class_han = GFC_CLASS_TYPE_P (TREE_TYPE (tmp))
  	  ? gfc_class_data_get (tmp) : tmp;
--- 11691,11719 ----
        else
  	old_vptr = build_int_cst (TREE_TYPE (vptr), 0);
  
!       size = gfc_vptr_size_get (rhs_vptr);
! 
!       /* Take into account _len of unlimited polymorphic entities.
! 	 TODO: handle class(*) allocatable function results on rhs.  */
!       if (UNLIMITED_POLY (rhs))
! 	{
! 	  tree len;
! 	  if (rhs->expr_type == EXPR_VARIABLE)
! 	    len = trans_get_upoly_len (block, rhs);
! 	  else
! 	    len = gfc_class_len_get (tmp);
! 	  len = fold_build2_loc (input_location, MAX_EXPR, size_type_node,
! 				 fold_convert (size_type_node, len),
! 				 size_one_node);
! 	  size = fold_build2_loc (input_location, MULT_EXPR, TREE_TYPE (size),
! 				  size, fold_convert (TREE_TYPE (size), len));
! 	}
!       else if (rhs->ts.type == BT_CHARACTER && rse->string_length)
! 	size = fold_build2_loc (input_location, MULT_EXPR,
! 				gfc_charlen_type_node, size,
! 				rse->string_length);
! 
! 
        tmp = lse->expr;
        class_han = GFC_CLASS_TYPE_P (TREE_TYPE (tmp))
  	  ? gfc_class_data_get (tmp) : tmp;
*************** trans_class_assignment (stmtblock_t *blo
*** 11672,11687 ****
  
        /* Reallocate if dynamic types are different. */
        gfc_init_block (&re_alloc);
!       re = build_call_expr_loc (input_location,
! 				builtin_decl_explicit (BUILT_IN_REALLOC), 2,
! 				fold_convert (pvoid_type_node, class_han),
! 				size);
!       tmp = fold_build2_loc (input_location, NE_EXPR,
! 			     logical_type_node, vptr, old_vptr);
!       re = fold_build3_loc (input_location, COND_EXPR, void_type_node,
! 			    tmp, re, build_empty_stmt (input_location));
!       gfc_add_expr_to_block (&re_alloc, re);
! 
        tree realloc_expr = lhs->ts.type == BT_CLASS ?
  					  gfc_finish_block (&re_alloc) :
  					  build_empty_stmt (input_location);
--- 11727,11751 ----
  
        /* Reallocate if dynamic types are different. */
        gfc_init_block (&re_alloc);
!       if (UNLIMITED_POLY (lhs) && rhs->ts.type == BT_CHARACTER)
! 	{
! 	  gfc_add_expr_to_block (&re_alloc, gfc_call_free (class_han));
! 	  gfc_allocate_using_malloc (&re_alloc, class_han, size, NULL_TREE);
! 	}
!       else
! 	{
! 	  tmp = fold_convert (pvoid_type_node, class_han);
! 	  re = build_call_expr_loc (input_location,
! 				    builtin_decl_explicit (BUILT_IN_REALLOC),
! 				    2, tmp, size);
! 	  re = fold_build2_loc (input_location, MODIFY_EXPR, TREE_TYPE (tmp),
! 				tmp, re);
! 	  tmp = fold_build2_loc (input_location, NE_EXPR,
! 				 logical_type_node, rhs_vptr, old_vptr);
! 	  re = fold_build3_loc (input_location, COND_EXPR, void_type_node,
! 				tmp, re, build_empty_stmt (input_location));
! 	  gfc_add_expr_to_block (&re_alloc, re);
! 	}
        tree realloc_expr = lhs->ts.type == BT_CLASS ?
  					  gfc_finish_block (&re_alloc) :
  					  build_empty_stmt (input_location);
*************** gfc_trans_assignment_1 (gfc_expr * expr1
*** 11828,11840 ****
        && (expr2->ts.type == BT_CLASS || gfc_may_be_finalized (expr2->ts)))
      {
        expr2->must_finalize = 1;
        /* F2008 4.5.6.3 para 5: If an executable construct references a
  	 structure constructor or array constructor, the entity created by
  	 the constructor is finalized after execution of the innermost
  	 executable construct containing the reference.
  	 These finalizations were later deleted by the Combined Techical
  	 Corrigenda 1 TO 4 for fortran 2008 (f08/0011).  */
!       if (gfc_notification_std (GFC_STD_F2018_DEL)
  	  && (expr2->expr_type == EXPR_STRUCTURE
  	      || expr2->expr_type == EXPR_ARRAY))
  	expr2->must_finalize = 0;
--- 11892,11911 ----
        && (expr2->ts.type == BT_CLASS || gfc_may_be_finalized (expr2->ts)))
      {
        expr2->must_finalize = 1;
+       /* F2023 7.5.6.3: If an executable construct references a nonpointer
+ 	 function, the result is finalized after execution of the innermost
+ 	 executable construct containing the reference.  */
+       if (expr2->expr_type == EXPR_FUNCTION
+ 	  && (gfc_expr_attr (expr2).pointer
+ 	      || (expr2->ts.type == BT_CLASS && CLASS_DATA (expr2)->attr.class_pointer)))
+ 	expr2->must_finalize = 0;
        /* F2008 4.5.6.3 para 5: If an executable construct references a
  	 structure constructor or array constructor, the entity created by
  	 the constructor is finalized after execution of the innermost
  	 executable construct containing the reference.
  	 These finalizations were later deleted by the Combined Techical
  	 Corrigenda 1 TO 4 for fortran 2008 (f08/0011).  */
!       else if (gfc_notification_std (GFC_STD_F2018_DEL)
  	  && (expr2->expr_type == EXPR_STRUCTURE
  	      || expr2->expr_type == EXPR_ARRAY))
  	expr2->must_finalize = 0;
*************** gfc_trans_assignment_1 (gfc_expr * expr1
*** 11846,11859 ****
       needed.  */
    lhs_attr = gfc_expr_attr (expr1);
  
!   is_poly_assign = (use_vptr_copy || lhs_attr.pointer
! 		    || (lhs_attr.allocatable && !lhs_attr.dimension))
! 		   && (expr1->ts.type == BT_CLASS
! 		       || gfc_is_class_array_ref (expr1, NULL)
! 		       || gfc_is_class_scalar_expr (expr1)
! 		       || gfc_is_class_array_ref (expr2, NULL)
! 		       || gfc_is_class_scalar_expr (expr2))
! 		   && lhs_attr.flavor != FL_PROCEDURE;
  
    realloc_flag = flag_realloc_lhs
  		 && gfc_is_reallocatable_lhs (expr1)
--- 11917,11930 ----
       needed.  */
    lhs_attr = gfc_expr_attr (expr1);
  
!   is_poly_assign
!     = (use_vptr_copy
!        || ((lhs_attr.pointer || lhs_attr.allocatable) && !lhs_attr.dimension))
!       && (expr1->ts.type == BT_CLASS || gfc_is_class_array_ref (expr1, NULL)
! 	  || gfc_is_class_scalar_expr (expr1)
! 	  || gfc_is_class_array_ref (expr2, NULL)
! 	  || gfc_is_class_scalar_expr (expr2))
!       && lhs_attr.flavor != FL_PROCEDURE;
  
    realloc_flag = flag_realloc_lhs
  		 && gfc_is_reallocatable_lhs (expr1)
diff -Nrcpad gcc-13.3.0/gcc/fortran/trans-intrinsic.cc gcc-13.4.0/gcc/fortran/trans-intrinsic.cc
*** gcc-13.3.0/gcc/fortran/trans-intrinsic.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/fortran/trans-intrinsic.cc	Thu Jun  5 16:02:58 2025
*************** gfc_conv_intrinsic_bound (gfc_se * se, g
*** 3090,3096 ****
  				      lbound, gfc_index_one_node);
  	}
        else if (op == GFC_ISYM_SHAPE)
! 	se->expr = size;
        else
  	gcc_unreachable ();
  
--- 3090,3098 ----
  				      lbound, gfc_index_one_node);
  	}
        else if (op == GFC_ISYM_SHAPE)
! 	se->expr = fold_build2_loc (input_location, MAX_EXPR,
! 				    gfc_array_index_type, size,
! 				    gfc_index_zero_node);
        else
  	gcc_unreachable ();
  
*************** gfc_conv_intrinsic_dot_product (gfc_se *
*** 5206,5227 ****
  }
  
  
- /* Remove unneeded kind= argument from actual argument list when the
-    result conversion is dealt with in a different place.  */
- 
- static void
- strip_kind_from_actual (gfc_actual_arglist * actual)
- {
-   for (gfc_actual_arglist *a = actual; a; a = a->next)
-     {
-       if (a && a->name && strcmp (a->name, "kind") == 0)
- 	{
- 	  gfc_free_expr (a->expr);
- 	  a->expr = NULL;
- 	}
-     }
- }
- 
  /* Emit code for minloc or maxloc intrinsic.  There are many different cases
     we need to handle.  For performance reasons we sometimes create two
     loops instead of one, where the second one is much simpler.
--- 5208,5213 ----
*************** gfc_conv_intrinsic_minmaxloc (gfc_se * s
*** 5319,5325 ****
    tree lab1, lab2;
    tree b_if, b_else;
    gfc_loopinfo loop;
!   gfc_actual_arglist *actual;
    gfc_ss *arrayss;
    gfc_ss *maskss;
    gfc_se arrayse;
--- 5305,5312 ----
    tree lab1, lab2;
    tree b_if, b_else;
    gfc_loopinfo loop;
!   gfc_actual_arglist *array_arg, *dim_arg, *mask_arg, *kind_arg;
!   gfc_actual_arglist *back_arg;
    gfc_ss *arrayss;
    gfc_ss *maskss;
    gfc_se arrayse;
*************** gfc_conv_intrinsic_minmaxloc (gfc_se * s
*** 5332,5371 ****
    int n;
    bool optional_mask;
  
!   actual = expr->value.function.actual;
  
!   /* The last argument, BACK, is passed by value. Ensure that
!      by setting its name to %VAL. */
!   for (gfc_actual_arglist *a = actual; a; a = a->next)
      {
!       if (a->next == NULL)
! 	a->name = "%VAL";
      }
  
    if (se->ss)
      {
        gfc_conv_intrinsic_funcall (se, expr);
        return;
      }
  
!   arrayexpr = actual->expr;
  
!   /* Special case for character maxloc.  Remove unneeded actual
!      arguments, then call a library function.  */
  
    if (arrayexpr->ts.type == BT_CHARACTER)
      {
!       gfc_actual_arglist *a;
!       a = actual;
!       strip_kind_from_actual (a);
!       while (a)
  	{
! 	  if (a->name && strcmp (a->name, "dim") == 0)
! 	    {
! 	      gfc_free_expr (a->expr);
! 	      a->expr = NULL;
! 	    }
! 	  a = a->next;
  	}
        gfc_conv_intrinsic_funcall (se, expr);
        return;
--- 5319,5357 ----
    int n;
    bool optional_mask;
  
!   array_arg = expr->value.function.actual;
!   dim_arg = array_arg->next;
!   mask_arg = dim_arg->next;
!   kind_arg = mask_arg->next;
!   back_arg = kind_arg->next;
  
!   /* Remove kind.  */
!   if (kind_arg->expr)
      {
!       gfc_free_expr (kind_arg->expr);
!       kind_arg->expr = NULL;
      }
  
+   /* Pass BACK argument by value.  */
+   back_arg->name = "%VAL";
+ 
    if (se->ss)
      {
        gfc_conv_intrinsic_funcall (se, expr);
        return;
      }
  
!   arrayexpr = array_arg->expr;
  
!   /* Special case for character maxloc.  Remove unneeded "dim" actual
!      argument, then call a library function.  */
  
    if (arrayexpr->ts.type == BT_CHARACTER)
      {
!       if (dim_arg->expr)
  	{
! 	  gfc_free_expr (dim_arg->expr);
! 	  dim_arg->expr = NULL;
  	}
        gfc_conv_intrinsic_funcall (se, expr);
        return;
*************** gfc_conv_intrinsic_minmaxloc (gfc_se * s
*** 5380,5392 ****
    arrayss = gfc_walk_expr (arrayexpr);
    gcc_assert (arrayss != gfc_ss_terminator);
  
!   actual = actual->next->next;
!   gcc_assert (actual);
!   maskexpr = actual->expr;
    optional_mask = maskexpr && maskexpr->expr_type == EXPR_VARIABLE
      && maskexpr->symtree->n.sym->attr.dummy
      && maskexpr->symtree->n.sym->attr.optional;
!   backexpr = actual->next->next->expr;
    nonempty = NULL;
    if (maskexpr && maskexpr->rank != 0)
      {
--- 5366,5376 ----
    arrayss = gfc_walk_expr (arrayexpr);
    gcc_assert (arrayss != gfc_ss_terminator);
  
!   maskexpr = mask_arg->expr;
    optional_mask = maskexpr && maskexpr->expr_type == EXPR_VARIABLE
      && maskexpr->symtree->n.sym->attr.dummy
      && maskexpr->symtree->n.sym->attr.optional;
!   backexpr = back_arg->expr;
    nonempty = NULL;
    if (maskexpr && maskexpr->rank != 0)
      {
*************** gfc_conv_intrinsic_storage_size (gfc_se
*** 8252,8258 ****
  {
    gfc_expr *arg;
    gfc_se argse;
!   tree type, result_type, tmp;
  
    arg = expr->value.function.actual->expr;
  
--- 8236,8244 ----
  {
    gfc_expr *arg;
    gfc_se argse;
!   tree type, result_type, tmp, class_decl = NULL;
!   gfc_symbol *sym;
!   bool unlimited = false;
  
    arg = expr->value.function.actual->expr;
  
*************** gfc_conv_intrinsic_storage_size (gfc_se
*** 8263,8272 ****
--- 8249,8260 ----
      {
        if (arg->ts.type == BT_CLASS)
  	{
+ 	  unlimited = UNLIMITED_POLY (arg);
  	  gfc_add_vptr_component (arg);
  	  gfc_add_size_component (arg);
  	  gfc_conv_expr (&argse, arg);
  	  tmp = fold_convert (result_type, argse.expr);
+ 	  class_decl = gfc_get_class_from_expr (argse.expr);
  	  goto done;
  	}
  
*************** gfc_conv_intrinsic_storage_size (gfc_se
*** 8278,8291 ****
      {
        argse.want_pointer = 0;
        gfc_conv_expr_descriptor (&argse, arg);
        if (arg->ts.type == BT_CLASS)
  	{
! 	  if (arg->rank > 0)
  	    tmp = gfc_class_vtab_size_get (
! 		 GFC_DECL_SAVED_DESCRIPTOR (arg->symtree->n.sym->backend_decl));
  	  else
! 	    tmp = gfc_class_vtab_size_get (TREE_OPERAND (argse.expr, 0));
  	  tmp = fold_convert (result_type, tmp);
  	  goto done;
  	}
        type = gfc_get_element_type (TREE_TYPE (argse.expr));
--- 8266,8285 ----
      {
        argse.want_pointer = 0;
        gfc_conv_expr_descriptor (&argse, arg);
+       sym = arg->expr_type == EXPR_VARIABLE ? arg->symtree->n.sym : NULL;
        if (arg->ts.type == BT_CLASS)
  	{
! 	  unlimited = UNLIMITED_POLY (arg);
! 	  if (TREE_CODE (argse.expr) == COMPONENT_REF)
! 	    tmp = gfc_class_vtab_size_get (TREE_OPERAND (argse.expr, 0));
! 	  else if (arg->rank > 0 && sym
! 		   && DECL_LANG_SPECIFIC (sym->backend_decl))
  	    tmp = gfc_class_vtab_size_get (
! 		 GFC_DECL_SAVED_DESCRIPTOR (sym->backend_decl));
  	  else
! 	    gcc_unreachable ();
  	  tmp = fold_convert (result_type, tmp);
+ 	  class_decl = gfc_get_class_from_expr (argse.expr);
  	  goto done;
  	}
        type = gfc_get_element_type (TREE_TYPE (argse.expr));
*************** gfc_conv_intrinsic_storage_size (gfc_se
*** 8299,8304 ****
--- 8293,8301 ----
    tmp = fold_convert (result_type, tmp);
  
  done:
+   if (unlimited && class_decl)
+     tmp = gfc_resize_class_size_with_len (NULL, class_decl, tmp);
+ 
    se->expr = fold_build2_loc (input_location, MULT_EXPR, result_type, tmp,
  			      build_int_cst (result_type, BITS_PER_UNIT));
    gfc_add_block_to_block (&se->pre, &argse.pre);
*************** gfc_conv_intrinsic_transfer (gfc_se * se
*** 8421,8427 ****
  	{
  	  tmp = build_fold_indirect_ref_loc (input_location, argse.expr);
  	  if (GFC_CLASS_TYPE_P (TREE_TYPE (tmp)))
! 	    source = gfc_class_data_get (tmp);
  	  else
  	    {
  	      /* Array elements are evaluated as a reference to the data.
--- 8418,8427 ----
  	{
  	  tmp = build_fold_indirect_ref_loc (input_location, argse.expr);
  	  if (GFC_CLASS_TYPE_P (TREE_TYPE (tmp)))
! 	    {
! 	      source = gfc_class_data_get (tmp);
! 	      class_ref = tmp;
! 	    }
  	  else
  	    {
  	      /* Array elements are evaluated as a reference to the data.
*************** gfc_conv_intrinsic_transfer (gfc_se * se
*** 8448,8456 ****
  	  break;
  	case BT_CLASS:
  	  if (class_ref != NULL_TREE)
! 	    tmp = gfc_class_vtab_size_get (class_ref);
  	  else
! 	    tmp = gfc_class_vtab_size_get (argse.expr);
  	  break;
  	default:
  	  source_type = TREE_TYPE (build_fold_indirect_ref_loc (input_location,
--- 8448,8464 ----
  	  break;
  	case BT_CLASS:
  	  if (class_ref != NULL_TREE)
! 	    {
! 	      tmp = gfc_class_vtab_size_get (class_ref);
! 	      if (UNLIMITED_POLY (source_expr))
! 		tmp = gfc_resize_class_size_with_len (NULL, class_ref, tmp);
! 	    }
  	  else
! 	    {
! 	      tmp = gfc_class_vtab_size_get (argse.expr);
! 	      if (UNLIMITED_POLY (source_expr))
! 		tmp = gfc_resize_class_size_with_len (NULL, argse.expr, tmp);
! 	    }
  	  break;
  	default:
  	  source_type = TREE_TYPE (build_fold_indirect_ref_loc (input_location,
*************** gfc_conv_intrinsic_transfer (gfc_se * se
*** 8503,8508 ****
--- 8511,8523 ----
        if (arg->expr->ts.type == BT_CHARACTER)
  	tmp = size_of_string_in_bytes (arg->expr->ts.kind,
  				       argse.string_length);
+       else if (arg->expr->ts.type == BT_CLASS)
+ 	{
+ 	  class_ref = TREE_OPERAND (argse.expr, 0);
+ 	  tmp = gfc_class_vtab_size_get (class_ref);
+ 	  if (UNLIMITED_POLY (arg->expr))
+ 	    tmp = gfc_resize_class_size_with_len (&argse.pre, class_ref, tmp);
+ 	}
        else
  	tmp = fold_convert (gfc_array_index_type,
  			    size_in_bytes (source_type));
*************** gfc_conv_intrinsic_transfer (gfc_se * se
*** 8543,8557 ****
  
    if (arg->expr->rank == 0)
      {
!       gfc_conv_expr_reference (&argse, arg->expr);
        mold_type = TREE_TYPE (build_fold_indirect_ref_loc (input_location,
  							  argse.expr));
      }
    else
      {
-       gfc_init_se (&argse, NULL);
        argse.want_pointer = 0;
!       gfc_conv_expr_descriptor (&argse, arg->expr);
        mold_type = gfc_get_element_type (TREE_TYPE (argse.expr));
      }
  
--- 8558,8571 ----
  
    if (arg->expr->rank == 0)
      {
!       gfc_conv_expr_reference (&argse, mold_expr);
        mold_type = TREE_TYPE (build_fold_indirect_ref_loc (input_location,
  							  argse.expr));
      }
    else
      {
        argse.want_pointer = 0;
!       gfc_conv_expr_descriptor (&argse, mold_expr);
        mold_type = gfc_get_element_type (TREE_TYPE (argse.expr));
      }
  
*************** gfc_conv_intrinsic_transfer (gfc_se * se
*** 8562,8588 ****
      {
        /* If this TRANSFER is nested in another TRANSFER, use a type
  	 that preserves all bits.  */
!       if (arg->expr->ts.type == BT_LOGICAL)
! 	mold_type = gfc_get_int_type (arg->expr->ts.kind);
      }
  
    /* Obtain the destination word length.  */
!   switch (arg->expr->ts.type)
      {
      case BT_CHARACTER:
!       tmp = size_of_string_in_bytes (arg->expr->ts.kind, argse.string_length);
!       mold_type = gfc_get_character_type_len (arg->expr->ts.kind,
  					      argse.string_length);
        break;
      case BT_CLASS:
!       tmp = gfc_class_vtab_size_get (argse.expr);
        break;
      default:
        tmp = fold_convert (gfc_array_index_type, size_in_bytes (mold_type));
        break;
      }
!   dest_word_len = gfc_create_var (gfc_array_index_type, NULL);
!   gfc_add_modify (&se->pre, dest_word_len, tmp);
  
    /* Finally convert SIZE, if it is present.  */
    arg = arg->next;
--- 8576,8616 ----
      {
        /* If this TRANSFER is nested in another TRANSFER, use a type
  	 that preserves all bits.  */
!       if (mold_expr->ts.type == BT_LOGICAL)
! 	mold_type = gfc_get_int_type (mold_expr->ts.kind);
      }
  
    /* Obtain the destination word length.  */
!   switch (mold_expr->ts.type)
      {
      case BT_CHARACTER:
!       tmp = size_of_string_in_bytes (mold_expr->ts.kind, argse.string_length);
!       mold_type = gfc_get_character_type_len (mold_expr->ts.kind,
  					      argse.string_length);
        break;
      case BT_CLASS:
!       if (scalar_mold)
! 	class_ref = argse.expr;
!       else
! 	class_ref = TREE_OPERAND (argse.expr, 0);
!       tmp = gfc_class_vtab_size_get (class_ref);
!       if (UNLIMITED_POLY (arg->expr))
! 	tmp = gfc_resize_class_size_with_len (&argse.pre, class_ref, tmp);
        break;
      default:
        tmp = fold_convert (gfc_array_index_type, size_in_bytes (mold_type));
        break;
      }
! 
!   /* Do not fix dest_word_len if it is a variable, since the temporary can wind
!      up being used before the assignment.  */
!   if (mold_expr->ts.type == BT_CHARACTER && mold_expr->ts.deferred)
!     dest_word_len = tmp;
!   else
!     {
!       dest_word_len = gfc_create_var (gfc_array_index_type, NULL);
!       gfc_add_modify (&se->pre, dest_word_len, tmp);
!     }
  
    /* Finally convert SIZE, if it is present.  */
    arg = arg->next;
diff -Nrcpad gcc-13.3.0/gcc/fortran/trans-stmt.cc gcc-13.4.0/gcc/fortran/trans-stmt.cc
*** gcc-13.3.0/gcc/fortran/trans-stmt.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/fortran/trans-stmt.cc	Thu Jun  5 16:02:58 2025
*************** trans_associate_var (gfc_symbol *sym, gf
*** 1902,1907 ****
--- 1902,1908 ----
  
        gfc_add_init_cleanup (block, gfc_finish_block (&se.pre), tmp);
      }
+ 
    /* Now all the other kinds of associate variable.  */
    else if (sym->attr.dimension && !class_target
  	   && (sym->as->type == AS_DEFERRED || sym->assoc->variable))
*************** trans_associate_var (gfc_symbol *sym, gf
*** 1909,1914 ****
--- 1910,1917 ----
        gfc_se se;
        tree desc;
        bool cst_array_ctor;
+       stmtblock_t init;
+       gfc_init_block (&init);
  
        desc = sym->backend_decl;
        cst_array_ctor = e->expr_type == EXPR_ARRAY
*************** trans_associate_var (gfc_symbol *sym, gf
*** 1930,1943 ****
        gfc_conv_expr_descriptor (&se, e);
  
        if (sym->ts.type == BT_CHARACTER
- 	  && sym->ts.deferred
  	  && !sym->attr.select_type_temporary
  	  && VAR_P (sym->ts.u.cl->backend_decl)
  	  && se.string_length != sym->ts.u.cl->backend_decl)
  	{
! 	  gfc_add_modify (&se.pre, sym->ts.u.cl->backend_decl,
! 			  fold_convert (TREE_TYPE (sym->ts.u.cl->backend_decl),
! 					se.string_length));
  	}
  
        /* If we didn't already do the pointer assignment, set associate-name
--- 1933,1951 ----
        gfc_conv_expr_descriptor (&se, e);
  
        if (sym->ts.type == BT_CHARACTER
  	  && !sym->attr.select_type_temporary
+ 	  && sym->ts.u.cl->backend_decl
  	  && VAR_P (sym->ts.u.cl->backend_decl)
+ 	  && se.string_length
  	  && se.string_length != sym->ts.u.cl->backend_decl)
  	{
! 	  /* When the target is a variable, its length is already known.  */
! 	  tree len = fold_convert (TREE_TYPE (sym->ts.u.cl->backend_decl),
! 				   se.string_length);
! 	  if (e->expr_type == EXPR_VARIABLE)
! 	    gfc_add_modify (&init, sym->ts.u.cl->backend_decl, len);
! 	  else
! 	    gfc_add_modify (&se.pre, sym->ts.u.cl->backend_decl, len);
  	}
  
        /* If we didn't already do the pointer assignment, set associate-name
*************** trans_associate_var (gfc_symbol *sym, gf
*** 1978,1984 ****
  	}
  
        /* Done, register stuff as init / cleanup code.  */
!       gfc_add_init_cleanup (block, gfc_finish_block (&se.pre),
  			    gfc_finish_block (&se.post));
      }
  
--- 1986,1993 ----
  	}
  
        /* Done, register stuff as init / cleanup code.  */
!       gfc_add_block_to_block (&init, &se.pre);
!       gfc_add_init_cleanup (block, gfc_finish_block (&init),
  			    gfc_finish_block (&se.post));
      }
  
*************** trans_associate_var (gfc_symbol *sym, gf
*** 2039,2045 ****
  
        /* Class associate-names come this way because they are
  	 unconditionally associate pointers and the symbol is scalar.  */
!       if (sym->ts.type == BT_CLASS && CLASS_DATA (sym)->attr.dimension)
  	{
  	  tree target_expr;
  	  /* For a class array we need a descriptor for the selector.  */
--- 2048,2063 ----
  
        /* Class associate-names come this way because they are
  	 unconditionally associate pointers and the symbol is scalar.  */
!       if (sym->ts.type == BT_CLASS && e->expr_type == EXPR_FUNCTION)
! 	{
! 	  gfc_conv_expr (&se, e);
! 	  se.expr = gfc_evaluate_now (se.expr, &se.pre);
! 	  /* Finalize the expression and free if it is allocatable.  */
! 	  gfc_finalize_tree_expr (&se, NULL, gfc_expr_attr (e), e->rank);
! 	  gfc_add_block_to_block (&se.post, &se.finalblock);
! 	  need_len_assign = false;
! 	}
!       else if (sym->ts.type == BT_CLASS && CLASS_DATA (sym)->attr.dimension)
  	{
  	  tree target_expr;
  	  /* For a class array we need a descriptor for the selector.  */
*************** gfc_trans_allocate (gfc_code * code)
*** 6398,6405 ****
        else
  	gfc_add_block_to_block (&post, &se.post);
  
!       /* Special case when string in expr3 is zero.  */
        if (code->expr3->ts.type == BT_CHARACTER
  	  && integer_zerop (se.string_length))
  	{
  	  gfc_init_se (&se, NULL);
--- 6416,6424 ----
        else
  	gfc_add_block_to_block (&post, &se.post);
  
!       /* Special case when string in expr3 is scalar and has length zero.  */
        if (code->expr3->ts.type == BT_CHARACTER
+ 	  && code->expr3->rank == 0
  	  && integer_zerop (se.string_length))
  	{
  	  gfc_init_se (&se, NULL);
*************** gfc_trans_allocate (gfc_code * code)
*** 7058,7063 ****
--- 7077,7122 ----
  	  gfc_expr *rhs = e3rhs ? e3rhs : gfc_copy_expr (code->expr3);
  	  flag_realloc_lhs = 0;
  
+ 	  /* The handling of code->expr3 above produces a derived type of
+ 	     type "STAR", whose size defaults to size(void*). In order to
+ 	     have the right type information for the assignment, we must
+ 	     reconstruct an unlimited polymorphic rhs.  */
+ 	  if (UNLIMITED_POLY (code->expr3)
+ 	      && e3rhs && e3rhs->ts.type == BT_DERIVED
+ 	      && !strcmp (e3rhs->ts.u.derived->name, "STAR"))
+ 	    {
+ 	      gfc_ref *ref;
+ 	      gcc_assert (TREE_CODE (expr3_vptr) == COMPONENT_REF);
+ 	      tmp = gfc_create_var (gfc_typenode_for_spec (&code->expr3->ts),
+ 				    "e3");
+ 	      gfc_add_modify (&block, tmp,
+ 			      gfc_get_class_from_expr (expr3_vptr));
+ 	      rhs->symtree->n.sym->backend_decl = tmp;
+ 	      rhs->ts = code->expr3->ts;
+ 	      rhs->symtree->n.sym->ts = rhs->ts;
+ 	      for (ref = init_expr->ref; ref; ref = ref->next)
+ 		{
+ 		  /* Copy over the lhs _data component ref followed by the
+ 		     full array reference for source expressions with rank.
+ 		     Otherwise, just copy the _data component ref.  */
+ 		  if (code->expr3->rank
+ 		      && ref && ref->next && !ref->next->next)
+ 		    {
+ 		      rhs->ref = gfc_copy_ref (ref);
+ 		      break;
+ 		    }
+ 		  else if ((init_expr->rank && !code->expr3->rank
+ 			    && ref && ref->next && !ref->next->next)
+ 			   || (ref && !ref->next))
+ 		    {
+ 		      rhs->ref = gfc_copy_ref (ref);
+ 		      gfc_free_ref_list (rhs->ref->next);
+ 		      rhs->ref->next = NULL;
+ 		      break;
+ 		    }
+ 		}
+ 	    }
+ 
  	  /* Set the symbol to be artificial so that the result is not finalized.  */
  	  init_expr->symtree->n.sym->attr.artificial = 1;
  	  tmp = gfc_trans_assignment (init_expr, rhs, true, false, true,
diff -Nrcpad gcc-13.3.0/gcc/fortran/trans-types.cc gcc-13.4.0/gcc/fortran/trans-types.cc
*** gcc-13.3.0/gcc/fortran/trans-types.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/fortran/trans-types.cc	Thu Jun  5 16:02:58 2025
*************** gfc_get_dtype_rank_type (int rank, tree
*** 1591,1597 ****
        size = size_in_bytes (etype);
        break;
      }
!       
    gcc_assert (size);
  
    STRIP_NOPS (size);
--- 1591,1597 ----
        size = size_in_bytes (etype);
        break;
      }
! 
    gcc_assert (size);
  
    STRIP_NOPS (size);
*************** gfc_get_nodesc_array_type (tree etype, g
*** 1736,1742 ****
  	tmp = gfc_conv_mpz_to_tree (expr->value.integer,
  				    gfc_index_integer_kind);
        else
!       	tmp = NULL_TREE;
        GFC_TYPE_ARRAY_LBOUND (type, n) = tmp;
  
        expr = as->upper[n];
--- 1736,1742 ----
  	tmp = gfc_conv_mpz_to_tree (expr->value.integer,
  				    gfc_index_integer_kind);
        else
! 	tmp = NULL_TREE;
        GFC_TYPE_ARRAY_LBOUND (type, n) = tmp;
  
        expr = as->upper[n];
diff -Nrcpad gcc-13.3.0/gcc/function.cc gcc-13.4.0/gcc/function.cc
*** gcc-13.3.0/gcc/function.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/function.cc	Thu Jun  5 16:02:58 2025
*************** assign_parms (tree fndecl)
*** 3745,3750 ****
--- 3745,3752 ----
       now that all parameters have been copied out of hard registers.  */
    emit_insn (all.first_conversion_insn);
  
+   do_pending_stack_adjust ();
+ 
    /* Estimate reload stack alignment from scalar return mode.  */
    if (SUPPORTS_STACK_ALIGNMENT)
      {
diff -Nrcpad gcc-13.3.0/gcc/gcc.cc gcc-13.4.0/gcc/gcc.cc
*** gcc-13.3.0/gcc/gcc.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/gcc.cc	Thu Jun  5 16:02:58 2025
*************** compilation is specified by a string cal
*** 30,35 ****
--- 30,38 ----
  #define INCLUDE_STRING
  #include "config.h"
  #include "system.h"
+ #ifdef HOST_HAS_PERSONALITY_ADDR_NO_RANDOMIZE
+ #include <sys/personality.h>
+ #endif
  #include "coretypes.h"
  #include "multilib.h" /* before tm.h */
  #include "tm.h"
*************** print_configuration (FILE *file)
*** 7565,7619 ****
  
  #define RETRY_ICE_ATTEMPTS 3
  
! /* Returns true if FILE1 and FILE2 contain equivalent data, 0 otherwise.  */
  
  static bool
  files_equal_p (char *file1, char *file2)
  {
!   struct stat st1, st2;
!   off_t n, len;
!   int fd1, fd2;
!   const int bufsize = 8192;
!   char *buf = XNEWVEC (char, bufsize);
! 
!   fd1 = open (file1, O_RDONLY);
!   fd2 = open (file2, O_RDONLY);
! 
!   if (fd1 < 0 || fd2 < 0)
!     goto error;
! 
!   if (fstat (fd1, &st1) < 0 || fstat (fd2, &st2) < 0)
!     goto error;
! 
!   if (st1.st_size != st2.st_size)
!     goto error;
  
!   for (n = st1.st_size; n; n -= len)
      {
!       len = n;
!       if ((int) len > bufsize / 2)
! 	len = bufsize / 2;
! 
!       if (read (fd1, buf, len) != (int) len
! 	  || read (fd2, buf + bufsize / 2, len) != (int) len)
  	{
! 	  goto error;
  	}
! 
!       if (memcmp (buf, buf + bufsize / 2, len) != 0)
  	goto error;
      }
  
!   free (buf);
!   close (fd1);
!   close (fd2);
! 
    return 1;
  
  error:
!   free (buf);
!   close (fd1);
!   close (fd2);
    return 0;
  }
  
--- 7568,7625 ----
  
  #define RETRY_ICE_ATTEMPTS 3
  
! /* Returns true if FILE1 and FILE2 contain equivalent data, 0 otherwise.
!    If lines start with 0x followed by 1-16 lowercase hexadecimal digits
!    followed by a space, ignore anything before that space.  These are
!    typically function addresses from libbacktrace and those can differ
!    due to ASLR.  */
  
  static bool
  files_equal_p (char *file1, char *file2)
  {
!   FILE *f1 = fopen (file1, "rb");
!   FILE *f2 = fopen (file2, "rb");
!   char line1[256], line2[256];
  
!   bool line_start = true;
!   while (fgets (line1, sizeof (line1), f1))
      {
!       if (!fgets (line2, sizeof (line2), f2))
! 	goto error;
!       char *p1 = line1, *p2 = line2;
!       if (line_start
! 	  && line1[0] == '0'
! 	  && line1[1] == 'x'
! 	  && line2[0] == '0'
! 	  && line2[1] == 'x')
  	{
! 	  int i, j;
! 	  for (i = 0; i < 16; ++i)
! 	    if (!ISXDIGIT (line1[2 + i]) || ISUPPER (line1[2 + i]))
! 	      break;
! 	  for (j = 0; j < 16; ++j)
! 	    if (!ISXDIGIT (line2[2 + j]) || ISUPPER (line2[2 + j]))
! 	      break;
! 	  if (i && line1[2 + i] == ' ' && j && line2[2 + j] == ' ')
! 	    {
! 	      p1 = line1 + i + 3;
! 	      p2 = line2 + j + 3;
! 	    }
  	}
!       if (strcmp (p1, p2) != 0)
  	goto error;
+       line_start = strchr (line1, '\n') != NULL;
      }
+   if (fgets (line2, sizeof (line2), f2))
+     goto error;
  
!   fclose (f1);
!   fclose (f2);
    return 1;
  
  error:
!   fclose (f1);
!   fclose (f2);
    return 0;
  }
  
*************** try_generate_repro (const char **argv)
*** 7821,7826 ****
--- 7827,7836 ----
    else
      new_argv[out_arg] = "-o-";
  
+ #ifdef HOST_HAS_PERSONALITY_ADDR_NO_RANDOMIZE
+   personality (personality (0xffffffffU) | ADDR_NO_RANDOMIZE);
+ #endif
+ 
    int status;
    for (attempt = 0; attempt < RETRY_ICE_ATTEMPTS; ++attempt)
      {
diff -Nrcpad gcc-13.3.0/gcc/genautomata.cc gcc-13.4.0/gcc/genautomata.cc
*** gcc-13.3.0/gcc/genautomata.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/genautomata.cc	Thu Jun  5 16:02:58 2025
*************** output_default_latencies (void)
*** 8348,8354 ****
  	if ((col = (col+1) % 8) == 0)
  	  fputs ("\n     ", output_file);
  	decl = description->decls[i];
! 	gcc_assert (j++ == DECL_INSN_RESERV (decl)->insn_num);
  	fprintf (output_file, "% 4d,",
  		 DECL_INSN_RESERV (decl)->default_latency);
        }
--- 8348,8355 ----
  	if ((col = (col+1) % 8) == 0)
  	  fputs ("\n     ", output_file);
  	decl = description->decls[i];
! 	gcc_assert (j == DECL_INSN_RESERV (decl)->insn_num);
! 	++j;
  	fprintf (output_file, "% 4d,",
  		 DECL_INSN_RESERV (decl)->default_latency);
        }
diff -Nrcpad gcc-13.3.0/gcc/gengtype-lex.cc gcc-13.4.0/gcc/gengtype-lex.cc
*** gcc-13.3.0/gcc/gengtype-lex.cc	Tue May 21 07:50:33 2024
--- gcc-13.4.0/gcc/gengtype-lex.cc	Thu Jun  5 16:06:28 2025
*************** int yy_flex_debug = 0;
*** 1188,1194 ****
  #define YY_MORE_ADJ 0
  #define YY_RESTORE_YY_MORE_OFFSET
  char *yytext;
! #line 1 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  /* -*- indented-text -*- */
  /* Process source files and output type information.
     Copyright (C) 2002-2023 Free Software Foundation, Inc.
--- 1188,1194 ----
  #define YY_MORE_ADJ 0
  #define YY_RESTORE_YY_MORE_OFFSET
  char *yytext;
! #line 1 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  /* -*- indented-text -*- */
  /* Process source files and output type information.
     Copyright (C) 2002-2023 Free Software Foundation, Inc.
*************** You should have received a copy of the G
*** 1209,1215 ****
  along with GCC; see the file COPYING3.  If not see
  <http://www.gnu.org/licenses/>.  */
  #define YY_NO_INPUT 1
! #line 24 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  #ifdef HOST_GENERATOR_FILE
  #include "config.h"
  #define GENERATOR_FILE 1
--- 1209,1215 ----
  along with GCC; see the file COPYING3.  If not see
  <http://www.gnu.org/licenses/>.  */
  #define YY_NO_INPUT 1
! #line 24 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  #ifdef HOST_GENERATOR_FILE
  #include "config.h"
  #define GENERATOR_FILE 1
*************** update_lineno (const char *l, size_t len
*** 1238,1244 ****
  }
  
  #line 1235 "gengtype-lex.cc"
! #line 59 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
      /* Include '::' in identifiers to capture C++ scope qualifiers.  */
  
  #line 1239 "gengtype-lex.cc"
--- 1238,1244 ----
  }
  
  #line 1235 "gengtype-lex.cc"
! #line 59 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
      /* Include '::' in identifiers to capture C++ scope qualifiers.  */
  
  #line 1239 "gengtype-lex.cc"
*************** YY_DECL
*** 1462,1468 ****
  		}
  
  	{
! #line 67 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  
    /* Do this on entry to yylex():  */
    *yylval = 0;
--- 1462,1468 ----
  		}
  
  	{
! #line 67 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  
    /* Do this on entry to yylex():  */
    *yylval = 0;
*************** YY_LINENO_REWIND_TO(yy_cp - 1);
*** 1534,1540 ****
  (yy_c_buf_p) = yy_cp -= 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 78 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  {
    BEGIN(in_struct);
    return TYPEDEF;
--- 1534,1540 ----
  (yy_c_buf_p) = yy_cp -= 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 78 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  {
    BEGIN(in_struct);
    return TYPEDEF;
*************** YY_LINENO_REWIND_TO(yy_cp - 1);
*** 1547,1553 ****
  (yy_c_buf_p) = yy_cp -= 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 82 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  {
    BEGIN(in_struct);
    return STRUCT;
--- 1547,1553 ----
  (yy_c_buf_p) = yy_cp -= 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 82 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  {
    BEGIN(in_struct);
    return STRUCT;
*************** YY_LINENO_REWIND_TO(yy_cp - 1);
*** 1560,1566 ****
  (yy_c_buf_p) = yy_cp -= 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 86 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  {
    BEGIN(in_struct);
    return UNION;
--- 1560,1566 ----
  (yy_c_buf_p) = yy_cp -= 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 86 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  {
    BEGIN(in_struct);
    return UNION;
*************** YY_LINENO_REWIND_TO(yy_cp - 1);
*** 1573,1579 ****
  (yy_c_buf_p) = yy_cp -= 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 90 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  {
    BEGIN(in_struct);
    return STRUCT;
--- 1573,1579 ----
  (yy_c_buf_p) = yy_cp -= 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 90 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  {
    BEGIN(in_struct);
    return STRUCT;
*************** YY_LINENO_REWIND_TO(yy_cp - 1);
*** 1586,1592 ****
  (yy_c_buf_p) = yy_cp -= 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 94 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  {
    BEGIN(in_struct);
    return EXTERN;
--- 1586,1592 ----
  (yy_c_buf_p) = yy_cp -= 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 94 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  {
    BEGIN(in_struct);
    return EXTERN;
*************** YY_LINENO_REWIND_TO(yy_cp - 1);
*** 1599,1605 ****
  (yy_c_buf_p) = yy_cp -= 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 98 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  {
    BEGIN(in_struct);
    return STATIC;
--- 1599,1605 ----
  (yy_c_buf_p) = yy_cp -= 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 98 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  {
    BEGIN(in_struct);
    return STATIC;
*************** YY_RULE_SETUP
*** 1610,1634 ****
  
  case 7:
  YY_RULE_SETUP
! #line 106 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  { BEGIN(in_struct_comment); }
  	YY_BREAK
  case 8:
  /* rule 8 can match eol */
  YY_RULE_SETUP
! #line 107 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  { lexer_line.line++; }
  	YY_BREAK
  case 9:
  /* rule 9 can match eol */
  YY_RULE_SETUP
! #line 109 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  { update_lineno (yytext, yyleng); }
  	YY_BREAK
  case 10:
  /* rule 10 can match eol */
  YY_RULE_SETUP
! #line 110 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  { lexer_line.line++; }
  	YY_BREAK
  case 11:
--- 1610,1634 ----
  
  case 7:
  YY_RULE_SETUP
! #line 106 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  { BEGIN(in_struct_comment); }
  	YY_BREAK
  case 8:
  /* rule 8 can match eol */
  YY_RULE_SETUP
! #line 107 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  { lexer_line.line++; }
  	YY_BREAK
  case 9:
  /* rule 9 can match eol */
  YY_RULE_SETUP
! #line 109 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  { update_lineno (yytext, yyleng); }
  	YY_BREAK
  case 10:
  /* rule 10 can match eol */
  YY_RULE_SETUP
! #line 110 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  { lexer_line.line++; }
  	YY_BREAK
  case 11:
*************** YY_LINENO_REWIND_TO(yy_bp + 5);
*** 1638,1644 ****
  (yy_c_buf_p) = yy_cp = yy_bp + 5;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 112 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  /* don't care */
  	YY_BREAK
  case 12:
--- 1638,1644 ----
  (yy_c_buf_p) = yy_cp = yy_bp + 5;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 112 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  /* don't care */
  	YY_BREAK
  case 12:
*************** case 12:
*** 1647,1663 ****
  YY_LINENO_REWIND_TO(yy_cp - 1);
  (yy_c_buf_p) = yy_cp -= 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
! #line 114 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  case 13:
  /* rule 13 can match eol */
! #line 115 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  case 14:
  /* rule 14 can match eol */
! #line 116 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  case 15:
  /* rule 15 can match eol */
  YY_RULE_SETUP
! #line 116 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  {
      *yylval = XDUPVAR (const char, yytext, yyleng, yyleng + 1);
      return IGNORABLE_CXX_KEYWORD;
--- 1647,1663 ----
  YY_LINENO_REWIND_TO(yy_cp - 1);
  (yy_c_buf_p) = yy_cp -= 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
! #line 114 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  case 13:
  /* rule 13 can match eol */
! #line 115 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  case 14:
  /* rule 14 can match eol */
! #line 116 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  case 15:
  /* rule 15 can match eol */
  YY_RULE_SETUP
! #line 116 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  {
      *yylval = XDUPVAR (const char, yytext, yyleng, yyleng + 1);
      return IGNORABLE_CXX_KEYWORD;
*************** YY_LINENO_REWIND_TO(yy_bp + 3);
*** 1670,1676 ****
  (yy_c_buf_p) = yy_cp = yy_bp + 3;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 120 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  { return GTY_TOKEN; }
  	YY_BREAK
  case 17:
--- 1670,1676 ----
  (yy_c_buf_p) = yy_cp = yy_bp + 3;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 120 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  { return GTY_TOKEN; }
  	YY_BREAK
  case 17:
*************** YY_LINENO_REWIND_TO(yy_bp + 5);
*** 1680,1686 ****
  (yy_c_buf_p) = yy_cp = yy_bp + 5;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 121 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  { return UNION; }
  	YY_BREAK
  case 18:
--- 1680,1686 ----
  (yy_c_buf_p) = yy_cp = yy_bp + 5;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 121 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  { return UNION; }
  	YY_BREAK
  case 18:
*************** YY_LINENO_REWIND_TO(yy_bp + 6);
*** 1690,1696 ****
  (yy_c_buf_p) = yy_cp = yy_bp + 6;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 122 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  { return STRUCT; }
  	YY_BREAK
  case 19:
--- 1690,1696 ----
  (yy_c_buf_p) = yy_cp = yy_bp + 6;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 122 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  { return STRUCT; }
  	YY_BREAK
  case 19:
*************** YY_LINENO_REWIND_TO(yy_bp + 5);
*** 1700,1706 ****
  (yy_c_buf_p) = yy_cp = yy_bp + 5;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 123 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  { return STRUCT; }
  	YY_BREAK
  case 20:
--- 1700,1706 ----
  (yy_c_buf_p) = yy_cp = yy_bp + 5;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 123 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  { return STRUCT; }
  	YY_BREAK
  case 20:
*************** YY_LINENO_REWIND_TO(yy_bp + 7);
*** 1710,1716 ****
  (yy_c_buf_p) = yy_cp = yy_bp + 7;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 124 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  { return TYPEDEF; }
  	YY_BREAK
  case 21:
--- 1710,1716 ----
  (yy_c_buf_p) = yy_cp = yy_bp + 7;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 124 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  { return TYPEDEF; }
  	YY_BREAK
  case 21:
*************** YY_LINENO_REWIND_TO(yy_bp + 4);
*** 1720,1726 ****
  (yy_c_buf_p) = yy_cp = yy_bp + 4;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 125 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  { return ENUM; }
  	YY_BREAK
  case 22:
--- 1720,1726 ----
  (yy_c_buf_p) = yy_cp = yy_bp + 4;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 125 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  { return ENUM; }
  	YY_BREAK
  case 22:
*************** YY_LINENO_REWIND_TO(yy_bp + 9);
*** 1730,1736 ****
  (yy_c_buf_p) = yy_cp = yy_bp + 9;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 126 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  { return PTR_ALIAS; }
  	YY_BREAK
  case 23:
--- 1730,1736 ----
  (yy_c_buf_p) = yy_cp = yy_bp + 9;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 126 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  { return PTR_ALIAS; }
  	YY_BREAK
  case 23:
*************** YY_LINENO_REWIND_TO(yy_bp + 10);
*** 1740,1746 ****
  (yy_c_buf_p) = yy_cp = yy_bp + 10;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 127 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  { return NESTED_PTR; }
  	YY_BREAK
  case 24:
--- 1740,1746 ----
  (yy_c_buf_p) = yy_cp = yy_bp + 10;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 127 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  { return NESTED_PTR; }
  	YY_BREAK
  case 24:
*************** YY_LINENO_REWIND_TO(yy_bp + 4);
*** 1750,1761 ****
  (yy_c_buf_p) = yy_cp = yy_bp + 4;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 128 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  { return USER_GTY; }
  	YY_BREAK
  case 25:
  YY_RULE_SETUP
! #line 129 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  {
    *yylval = XDUPVAR (const char, yytext, yyleng, yyleng+1);
    return NUM;
--- 1750,1761 ----
  (yy_c_buf_p) = yy_cp = yy_bp + 4;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 128 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  { return USER_GTY; }
  	YY_BREAK
  case 25:
  YY_RULE_SETUP
! #line 129 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  {
    *yylval = XDUPVAR (const char, yytext, yyleng, yyleng+1);
    return NUM;
*************** case 26:
*** 1767,1777 ****
  YY_LINENO_REWIND_TO(yy_cp - 1);
  (yy_c_buf_p) = yy_cp -= 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
! #line 135 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  case 27:
  /* rule 27 can match eol */
  YY_RULE_SETUP
! #line 135 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  {
    size_t len;
  
--- 1767,1777 ----
  YY_LINENO_REWIND_TO(yy_cp - 1);
  (yy_c_buf_p) = yy_cp -= 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
! #line 135 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  case 27:
  /* rule 27 can match eol */
  YY_RULE_SETUP
! #line 135 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  {
    size_t len;
  
*************** YY_LINENO_REWIND_TO(yy_cp - 1);
*** 1790,1796 ****
  (yy_c_buf_p) = yy_cp -= 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 146 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  {
    *yylval = XDUPVAR (const char, yytext, yyleng, yyleng+1);
    return ID;
--- 1790,1796 ----
  (yy_c_buf_p) = yy_cp -= 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 146 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  {
    *yylval = XDUPVAR (const char, yytext, yyleng, yyleng+1);
    return ID;
*************** YY_RULE_SETUP
*** 1799,1805 ****
  case 29:
  /* rule 29 can match eol */
  YY_RULE_SETUP
! #line 151 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  {
    *yylval = XDUPVAR (const char, yytext+1, yyleng-2, yyleng-1);
    return STRING;
--- 1799,1805 ----
  case 29:
  /* rule 29 can match eol */
  YY_RULE_SETUP
! #line 151 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  {
    *yylval = XDUPVAR (const char, yytext+1, yyleng-2, yyleng-1);
    return STRING;
*************** YY_RULE_SETUP
*** 1809,1815 ****
  case 30:
  /* rule 30 can match eol */
  YY_RULE_SETUP
! #line 156 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  {
    *yylval = XDUPVAR (const char, yytext+1, yyleng-2, yyleng-1);
    return ARRAY;
--- 1809,1815 ----
  case 30:
  /* rule 30 can match eol */
  YY_RULE_SETUP
! #line 156 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  {
    *yylval = XDUPVAR (const char, yytext+1, yyleng-2, yyleng-1);
    return ARRAY;
*************** YY_RULE_SETUP
*** 1818,1824 ****
  case 31:
  /* rule 31 can match eol */
  YY_RULE_SETUP
! #line 160 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  {
    *yylval = XDUPVAR (const char, yytext+1, yyleng-2, yyleng);
    return CHAR;
--- 1818,1824 ----
  case 31:
  /* rule 31 can match eol */
  YY_RULE_SETUP
! #line 160 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  {
    *yylval = XDUPVAR (const char, yytext+1, yyleng-2, yyleng);
    return CHAR;
*************** YY_RULE_SETUP
*** 1826,1849 ****
  	YY_BREAK
  case 32:
  YY_RULE_SETUP
! #line 165 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  { return ELLIPSIS; }
  	YY_BREAK
  case 33:
  YY_RULE_SETUP
! #line 166 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  { return yytext[0]; }
  	YY_BREAK
  /* ignore pp-directives */
  case 34:
  /* rule 34 can match eol */
  YY_RULE_SETUP
! #line 169 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  {lexer_line.line++;}
  	YY_BREAK
  case 35:
  YY_RULE_SETUP
! #line 171 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  {
    error_at_line (&lexer_line, "unexpected character `%s'", yytext);
  }
--- 1826,1849 ----
  	YY_BREAK
  case 32:
  YY_RULE_SETUP
! #line 165 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  { return ELLIPSIS; }
  	YY_BREAK
  case 33:
  YY_RULE_SETUP
! #line 166 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  { return yytext[0]; }
  	YY_BREAK
  /* ignore pp-directives */
  case 34:
  /* rule 34 can match eol */
  YY_RULE_SETUP
! #line 169 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  {lexer_line.line++;}
  	YY_BREAK
  case 35:
  YY_RULE_SETUP
! #line 171 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  {
    error_at_line (&lexer_line, "unexpected character `%s'", yytext);
  }
*************** YY_RULE_SETUP
*** 1851,1886 ****
  
  case 36:
  YY_RULE_SETUP
! #line 176 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  { BEGIN(in_comment); }
  	YY_BREAK
  case 37:
  /* rule 37 can match eol */
  YY_RULE_SETUP
! #line 177 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  { lexer_line.line++; }
  	YY_BREAK
  case 38:
  /* rule 38 can match eol */
  YY_RULE_SETUP
! #line 178 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  { lexer_line.line++; }
  	YY_BREAK
  case 39:
! #line 180 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  case 40:
  /* rule 40 can match eol */
! #line 181 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  case 41:
  /* rule 41 can match eol */
  YY_RULE_SETUP
! #line 181 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  /* do nothing */
  	YY_BREAK
  case 42:
  /* rule 42 can match eol */
  YY_RULE_SETUP
! #line 182 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  { update_lineno (yytext, yyleng); }
  	YY_BREAK
  case 43:
--- 1851,1886 ----
  
  case 36:
  YY_RULE_SETUP
! #line 176 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  { BEGIN(in_comment); }
  	YY_BREAK
  case 37:
  /* rule 37 can match eol */
  YY_RULE_SETUP
! #line 177 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  { lexer_line.line++; }
  	YY_BREAK
  case 38:
  /* rule 38 can match eol */
  YY_RULE_SETUP
! #line 178 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  { lexer_line.line++; }
  	YY_BREAK
  case 39:
! #line 180 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  case 40:
  /* rule 40 can match eol */
! #line 181 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  case 41:
  /* rule 41 can match eol */
  YY_RULE_SETUP
! #line 181 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  /* do nothing */
  	YY_BREAK
  case 42:
  /* rule 42 can match eol */
  YY_RULE_SETUP
! #line 182 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  { update_lineno (yytext, yyleng); }
  	YY_BREAK
  case 43:
*************** YY_LINENO_REWIND_TO(yy_bp + 1);
*** 1890,1910 ****
  (yy_c_buf_p) = yy_cp = yy_bp + 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 183 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  /* do nothing */
  	YY_BREAK
  
  case 44:
  /* rule 44 can match eol */
  YY_RULE_SETUP
! #line 186 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  { lexer_line.line++; }
  	YY_BREAK
  case 45:
! #line 188 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  case 46:
  YY_RULE_SETUP
! #line 188 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  /* do nothing */
  	YY_BREAK
  case 47:
--- 1890,1910 ----
  (yy_c_buf_p) = yy_cp = yy_bp + 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 183 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  /* do nothing */
  	YY_BREAK
  
  case 44:
  /* rule 44 can match eol */
  YY_RULE_SETUP
! #line 186 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  { lexer_line.line++; }
  	YY_BREAK
  case 45:
! #line 188 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  case 46:
  YY_RULE_SETUP
! #line 188 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  /* do nothing */
  	YY_BREAK
  case 47:
*************** YY_LINENO_REWIND_TO(yy_bp + 1);
*** 1914,1938 ****
  (yy_c_buf_p) = yy_cp = yy_bp + 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 189 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  /* do nothing */
  	YY_BREAK
  
  case 48:
  YY_RULE_SETUP
! #line 192 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  { BEGIN(INITIAL); } 
  	YY_BREAK
  case 49:
  YY_RULE_SETUP
! #line 193 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  { BEGIN(in_struct); }
  	YY_BREAK
  case 50:
! #line 196 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  case 51:
  YY_RULE_SETUP
! #line 196 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  {
    error_at_line (&lexer_line, 
  		 "unterminated comment or string; unexpected EOF");
--- 1914,1938 ----
  (yy_c_buf_p) = yy_cp = yy_bp + 1;
  YY_DO_BEFORE_ACTION; /* set up yytext again */
  YY_RULE_SETUP
! #line 189 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  /* do nothing */
  	YY_BREAK
  
  case 48:
  YY_RULE_SETUP
! #line 192 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  { BEGIN(INITIAL); } 
  	YY_BREAK
  case 49:
  YY_RULE_SETUP
! #line 193 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  { BEGIN(in_struct); }
  	YY_BREAK
  case 50:
! #line 196 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  case 51:
  YY_RULE_SETUP
! #line 196 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  {
    error_at_line (&lexer_line, 
  		 "unterminated comment or string; unexpected EOF");
*************** YY_RULE_SETUP
*** 1941,1952 ****
  case 52:
  /* rule 52 can match eol */
  YY_RULE_SETUP
! #line 201 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  /* do nothing */
  	YY_BREAK
  case 53:
  YY_RULE_SETUP
! #line 203 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  YY_FATAL_ERROR( "flex scanner jammed" );
  	YY_BREAK
  #line 1947 "gengtype-lex.cc"
--- 1941,1952 ----
  case 52:
  /* rule 52 can match eol */
  YY_RULE_SETUP
! #line 201 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  /* do nothing */
  	YY_BREAK
  case 53:
  YY_RULE_SETUP
! #line 203 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  YY_FATAL_ERROR( "flex scanner jammed" );
  	YY_BREAK
  #line 1947 "gengtype-lex.cc"
*************** void yyfree (void * ptr )
*** 2924,2930 ****
  
  #define YYTABLES_NAME "yytables"
  
! #line 203 "/d/gcc-13.3.0/gcc-13.3.0/gcc/gengtype-lex.l"
  
  
  void
--- 2924,2930 ----
  
  #define YYTABLES_NAME "yytables"
  
! #line 203 "/d/gcc-13.4.0/gcc-13.4.0/gcc/gengtype-lex.l"
  
  
  void
diff -Nrcpad gcc-13.3.0/gcc/gimple-expr.cc gcc-13.4.0/gcc/gimple-expr.cc
*** gcc-13.3.0/gcc/gimple-expr.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/gimple-expr.cc	Thu Jun  5 16:02:59 2025
*************** bool
*** 877,883 ****
  is_gimple_mem_ref_addr (tree t)
  {
    return (is_gimple_reg (t)
! 	  || TREE_CODE (t) == INTEGER_CST
  	  || (TREE_CODE (t) == ADDR_EXPR
  	      && (CONSTANT_CLASS_P (TREE_OPERAND (t, 0))
  		  || decl_address_invariant_p (TREE_OPERAND (t, 0)))));
--- 877,883 ----
  is_gimple_mem_ref_addr (tree t)
  {
    return (is_gimple_reg (t)
! 	  || poly_int_tree_p (t)
  	  || (TREE_CODE (t) == ADDR_EXPR
  	      && (CONSTANT_CLASS_P (TREE_OPERAND (t, 0))
  		  || decl_address_invariant_p (TREE_OPERAND (t, 0)))));
diff -Nrcpad gcc-13.3.0/gcc/gimple-fold.cc gcc-13.4.0/gcc/gimple-fold.cc
*** gcc-13.3.0/gcc/gimple-fold.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/gimple-fold.cc	Thu Jun  5 16:02:59 2025
*************** gimple_fold_builtin_memory_op (gimple_st
*** 938,943 ****
--- 938,945 ----
  	}
        goto done;
      }
+   else if (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun))
+     return false;
    else
      {
        /* We cannot (easily) change the type of the copy if it is a storage
*************** gimple_fold_builtin_bcmp (gimple_stmt_it
*** 1376,1381 ****
--- 1378,1385 ----
    /* Transform bcmp (a, b, len) into memcmp (a, b, len).  */
  
    gimple *stmt = gsi_stmt (*gsi);
+   if (!gimple_vuse (stmt) && gimple_in_ssa_p (cfun))
+     return false;
    tree a = gimple_call_arg (stmt, 0);
    tree b = gimple_call_arg (stmt, 1);
    tree len = gimple_call_arg (stmt, 2);
*************** gimple_fold_builtin_bcopy (gimple_stmt_i
*** 1402,1407 ****
--- 1406,1413 ----
       len) into memmove (dest, src, len).  */
  
    gimple *stmt = gsi_stmt (*gsi);
+   if (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun))
+     return false;
    tree src = gimple_call_arg (stmt, 0);
    tree dest = gimple_call_arg (stmt, 1);
    tree len = gimple_call_arg (stmt, 2);
*************** gimple_fold_builtin_bzero (gimple_stmt_i
*** 1427,1432 ****
--- 1433,1440 ----
    /* Transform bzero (dest, len) into memset (dest, 0, len).  */
  
    gimple *stmt = gsi_stmt (*gsi);
+   if (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun))
+     return false;
    tree dest = gimple_call_arg (stmt, 0);
    tree len = gimple_call_arg (stmt, 1);
  
*************** gimple_fold_builtin_memset (gimple_stmt_
*** 1456,1461 ****
--- 1464,1472 ----
        return true;
      }
  
+   if (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun))
+     return false;
+ 
    if (! tree_fits_uhwi_p (len))
      return false;
  
*************** gimple_fold_builtin_memset (gimple_stmt_
*** 1477,1496 ****
  
    if (!INTEGRAL_TYPE_P (etype)
        && !POINTER_TYPE_P (etype))
!     return NULL_TREE;
  
    if (! var_decl_component_p (var))
!     return NULL_TREE;
  
    length = tree_to_uhwi (len);
    if (GET_MODE_SIZE (SCALAR_INT_TYPE_MODE (etype)) != length
        || (GET_MODE_PRECISION (SCALAR_INT_TYPE_MODE (etype))
  	  != GET_MODE_BITSIZE (SCALAR_INT_TYPE_MODE (etype)))
        || get_pointer_alignment (dest) / BITS_PER_UNIT < length)
!     return NULL_TREE;
  
    if (length > HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT)
!     return NULL_TREE;
  
    if (!type_has_mode_precision_p (etype))
      etype = lang_hooks.types.type_for_mode (SCALAR_INT_TYPE_MODE (etype),
--- 1488,1507 ----
  
    if (!INTEGRAL_TYPE_P (etype)
        && !POINTER_TYPE_P (etype))
!     return false;
  
    if (! var_decl_component_p (var))
!     return false;
  
    length = tree_to_uhwi (len);
    if (GET_MODE_SIZE (SCALAR_INT_TYPE_MODE (etype)) != length
        || (GET_MODE_PRECISION (SCALAR_INT_TYPE_MODE (etype))
  	  != GET_MODE_BITSIZE (SCALAR_INT_TYPE_MODE (etype)))
        || get_pointer_alignment (dest) / BITS_PER_UNIT < length)
!     return false;
  
    if (length > HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT)
!     return false;
  
    if (!type_has_mode_precision_p (etype))
      etype = lang_hooks.types.type_for_mode (SCALAR_INT_TYPE_MODE (etype),
*************** gimple_fold_builtin_strcpy (gimple_stmt_
*** 2104,2110 ****
        return false;
      }
  
!   if (!len)
      return false;
  
    len = fold_convert_loc (loc, size_type_node, len);
--- 2115,2121 ----
        return false;
      }
  
!   if (!len || (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun)))
      return false;
  
    len = fold_convert_loc (loc, size_type_node, len);
*************** gimple_fold_builtin_strncpy (gimple_stmt
*** 2179,2185 ****
  
    /* OK transform into builtin memcpy.  */
    tree fn = builtin_decl_implicit (BUILT_IN_MEMCPY);
!   if (!fn)
      return false;
  
    len = fold_convert_loc (loc, size_type_node, len);
--- 2190,2196 ----
  
    /* OK transform into builtin memcpy.  */
    tree fn = builtin_decl_implicit (BUILT_IN_MEMCPY);
!   if (!fn || (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun)))
      return false;
  
    len = fold_convert_loc (loc, size_type_node, len);
*************** gimple_fold_builtin_strchr (gimple_stmt_
*** 2233,2239 ****
        return true;
      }
  
!   if (!integer_zerop (c))
      return false;
  
    /* Transform strrchr (s, 0) to strchr (s, 0) when optimizing for size.  */
--- 2244,2250 ----
        return true;
      }
  
!   if (!integer_zerop (c) || (!gimple_vuse (stmt) && gimple_in_ssa_p (cfun)))
      return false;
  
    /* Transform strrchr (s, 0) to strchr (s, 0) when optimizing for size.  */
*************** gimple_fold_builtin_strstr (gimple_stmt_
*** 2331,2336 ****
--- 2342,2350 ----
        return true;
      }
  
+   if (!gimple_vuse (stmt) && gimple_in_ssa_p (cfun))
+     return false;
+ 
    /* Transform strstr (x, "c") into strchr (x, 'c').  */
    if (q[1] == '\0')
      {
*************** gimple_fold_builtin_strcat (gimple_stmt_
*** 2383,2388 ****
--- 2397,2405 ----
    if (!optimize_bb_for_speed_p (gimple_bb (stmt)))
      return false;
  
+   if (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun))
+     return false;
+ 
    /* See if we can store by pieces into (dst + strlen(dst)).  */
    tree newdst;
    tree strlen_fn = builtin_decl_implicit (BUILT_IN_STRLEN);
*************** gimple_fold_builtin_strcat_chk (gimple_s
*** 2452,2458 ****
    tree fn;
    const char *p;
  
- 
    p = c_getstr (src);
    /* If the SRC parameter is "", return DEST.  */
    if (p && *p == '\0')
--- 2469,2474 ----
*************** gimple_fold_builtin_strcat_chk (gimple_s
*** 2464,2469 ****
--- 2480,2488 ----
    if (! tree_fits_uhwi_p (size) || ! integer_all_onesp (size))
      return false;
  
+   if (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun))
+     return false;
+ 
    /* If __builtin_strcat_chk is used, assume strcat is available.  */
    fn = builtin_decl_explicit (BUILT_IN_STRCAT);
    if (!fn)
*************** gimple_fold_builtin_strncat (gimple_stmt
*** 2554,2560 ****
  
    /* If the replacement _DECL isn't initialized, don't do the
       transformation.  */
!   if (!fn)
      return false;
  
    /* Otherwise, emit a call to strcat.  */
--- 2573,2579 ----
  
    /* If the replacement _DECL isn't initialized, don't do the
       transformation.  */
!   if (!fn || (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun)))
      return false;
  
    /* Otherwise, emit a call to strcat.  */
*************** gimple_fold_builtin_strncat_chk (gimple_
*** 2586,2591 ****
--- 2605,2613 ----
        return true;
      }
  
+   if (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun))
+     return false;
+ 
    if (! integer_all_onesp (size))
      {
        tree src_len = c_strlen (src, 1);
*************** gimple_fold_builtin_string_compare (gimp
*** 2676,2681 ****
--- 2698,2706 ----
        return true;
      }
  
+   if (!gimple_vuse (stmt) && gimple_in_ssa_p (cfun))
+     return false;
+ 
    /* Initially set to the number of characters, including the terminating
       nul if each array has one.   LENx == strnlen (Sx, LENx) implies that
       the array Sx is not terminated by a nul.
*************** gimple_fold_builtin_fputs (gimple_stmt_i
*** 2968,2974 ****
  	const char *p = c_getstr (arg0);
  	if (p != NULL)
  	  {
! 	    if (!fn_fputc)
  	      return false;
  
  	    gimple *repl
--- 2993,2999 ----
  	const char *p = c_getstr (arg0);
  	if (p != NULL)
  	  {
! 	    if (!fn_fputc || (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun)))
  	      return false;
  
  	    gimple *repl
*************** gimple_fold_builtin_fputs (gimple_stmt_i
*** 2987,2993 ****
  	  return false;
  	/* New argument list transforming fputs(string, stream) to
  	   fwrite(string, 1, len, stream).  */
! 	if (!fn_fwrite)
  	  return false;
  
  	gimple *repl
--- 3012,3018 ----
  	  return false;
  	/* New argument list transforming fputs(string, stream) to
  	   fwrite(string, 1, len, stream).  */
! 	if (!fn_fwrite || (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun)))
  	  return false;
  
  	gimple *repl
*************** gimple_fold_builtin_memory_chk (gimple_s
*** 3038,3043 ****
--- 3063,3071 ----
  	}
      }
  
+   if (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun))
+     return false;
+ 
    tree maxlen = get_maxval_strlen (len, SRK_INT_VALUE);
    if (! integer_all_onesp (size)
        && !known_lower (stmt, len, size)
*************** gimple_fold_builtin_stxcpy_chk (gimple_s
*** 3136,3141 ****
--- 3164,3172 ----
        return true;
      }
  
+   if (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun))
+     return false;
+ 
    tree maxlen = get_maxval_strlen (src, SRK_STRLENMAX);
    if (! integer_all_onesp (size))
      {
*************** gimple_fold_builtin_stxncpy_chk (gimple_
*** 3229,3235 ****
    /* If __builtin_st{r,p}ncpy_chk is used, assume st{r,p}ncpy is available.  */
    fn = builtin_decl_explicit (fcode == BUILT_IN_STPNCPY_CHK && !ignore
  			      ? BUILT_IN_STPNCPY : BUILT_IN_STRNCPY);
!   if (!fn)
      return false;
  
    gcall *repl = gimple_build_call (fn, 3, dest, src, len);
--- 3260,3266 ----
    /* If __builtin_st{r,p}ncpy_chk is used, assume st{r,p}ncpy is available.  */
    fn = builtin_decl_explicit (fcode == BUILT_IN_STPNCPY_CHK && !ignore
  			      ? BUILT_IN_STPNCPY : BUILT_IN_STRNCPY);
!   if (!fn || (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun)))
      return false;
  
    gcall *repl = gimple_build_call (fn, 3, dest, src, len);
*************** gimple_fold_builtin_stpcpy (gimple_stmt_
*** 3250,3255 ****
--- 3281,3289 ----
    tree src = gimple_call_arg (stmt, 1);
    tree fn, lenp1;
  
+   if (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun))
+     return false;
+ 
    /* If the result is unused, replace stpcpy with strcpy.  */
    if (gimple_call_lhs (stmt) == NULL_TREE)
      {
*************** gimple_fold_builtin_snprintf_chk (gimple
*** 3367,3373 ****
       available.  */
    fn = builtin_decl_explicit (fcode == BUILT_IN_VSNPRINTF_CHK
  			      ? BUILT_IN_VSNPRINTF : BUILT_IN_SNPRINTF);
!   if (!fn)
      return false;
  
    /* Replace the called function and the first 5 argument by 3 retaining
--- 3401,3407 ----
       available.  */
    fn = builtin_decl_explicit (fcode == BUILT_IN_VSNPRINTF_CHK
  			      ? BUILT_IN_VSNPRINTF : BUILT_IN_SNPRINTF);
!   if (!fn || (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun)))
      return false;
  
    /* Replace the called function and the first 5 argument by 3 retaining
*************** gimple_fold_builtin_sprintf_chk (gimple_
*** 3454,3460 ****
    /* If __builtin_{,v}sprintf_chk is used, assume {,v}sprintf is available.  */
    fn = builtin_decl_explicit (fcode == BUILT_IN_VSPRINTF_CHK
  			      ? BUILT_IN_VSPRINTF : BUILT_IN_SPRINTF);
!   if (!fn)
      return false;
  
    /* Replace the called function and the first 4 argument by 2 retaining
--- 3488,3494 ----
    /* If __builtin_{,v}sprintf_chk is used, assume {,v}sprintf is available.  */
    fn = builtin_decl_explicit (fcode == BUILT_IN_VSPRINTF_CHK
  			      ? BUILT_IN_VSPRINTF : BUILT_IN_SPRINTF);
!   if (!fn || (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun)))
      return false;
  
    /* Replace the called function and the first 4 argument by 2 retaining
*************** gimple_fold_builtin_sprintf (gimple_stmt
*** 3503,3509 ****
      return false;
  
    tree fn = builtin_decl_implicit (BUILT_IN_STRCPY);
!   if (!fn)
      return false;
  
    /* If the format doesn't contain % args or %%, use strcpy.  */
--- 3537,3543 ----
      return false;
  
    tree fn = builtin_decl_implicit (BUILT_IN_STRCPY);
!   if (!fn || (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun)))
      return false;
  
    /* If the format doesn't contain % args or %%, use strcpy.  */
*************** gimple_fold_builtin_snprintf (gimple_stm
*** 3616,3622 ****
    tree orig = NULL_TREE;
    const char *fmt_str = NULL;
  
!   if (gimple_call_num_args (stmt) > 4)
      return false;
  
    if (gimple_call_num_args (stmt) == 4)
--- 3650,3657 ----
    tree orig = NULL_TREE;
    const char *fmt_str = NULL;
  
!   if (gimple_call_num_args (stmt) > 4
!       || (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun)))
      return false;
  
    if (gimple_call_num_args (stmt) == 4)
*************** gimple_fold_builtin_fprintf (gimple_stmt
*** 3774,3779 ****
--- 3809,3817 ----
    if (!init_target_chars ())
      return false;
  
+   if (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun))
+     return false;
+ 
    /* If the format doesn't contain % args or %%, use strcpy.  */
    if (strchr (fmt_str, target_percent) == NULL)
      {
*************** gimple_fold_builtin_printf (gimple_stmt_
*** 3853,3858 ****
--- 3891,3899 ----
    if (gimple_call_lhs (stmt) != NULL_TREE)
      return false;
  
+   if (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun))
+     return false;
+ 
    /* Check whether the format is a literal string constant.  */
    fmt_str = c_getstr (fmt);
    if (fmt_str == NULL)
*************** gimple_fold_builtin_strlen (gimple_stmt_
*** 4020,4025 ****
--- 4061,4071 ----
        maxlen = wi::to_wide (max_object_size (), prec) - 2;
      }
  
+   /* For -fsanitize=address, don't optimize the upper bound of the
+      length to be able to diagnose UB on non-zero terminated arrays.  */
+   if (sanitize_flags_p (SANITIZE_ADDRESS))
+     maxlen = wi::max_value (TYPE_PRECISION (sizetype), UNSIGNED);
+ 
    if (minlen == maxlen)
      {
        /* Fold the strlen call to a constant.  */
*************** gimple_fold_builtin_realloc (gimple_stmt
*** 4089,4094 ****
--- 4135,4143 ----
    tree arg = gimple_call_arg (stmt, 0);
    tree size = gimple_call_arg (stmt, 1);
  
+   if (!gimple_vdef (stmt) && gimple_in_ssa_p (cfun))
+     return false;
+ 
    if (operand_equal_p (arg, null_pointer_node, 0))
      {
        tree fn_malloc = builtin_decl_implicit (BUILT_IN_MALLOC);
*************** clear_padding_flush (clear_padding_struc
*** 4235,4241 ****
  	  i -= wordsize;
  	  continue;
  	}
!       for (size_t j = i; j < i + wordsize && j < end; j++)
  	{
  	  if (buf->buf[j])
  	    {
--- 4284,4291 ----
  	  i -= wordsize;
  	  continue;
  	}
!       size_t endsize = end - i > wordsize ? wordsize : end - i;
!       for (size_t j = i; j < i + endsize; j++)
  	{
  	  if (buf->buf[j])
  	    {
*************** clear_padding_flush (clear_padding_struc
*** 4264,4275 ****
        if (padding_bytes)
  	{
  	  if (nonzero_first == 0
! 	      && nonzero_last == wordsize
  	      && all_ones)
  	    {
  	      /* All bits are padding and we had some padding
  		 before too.  Just extend it.  */
! 	      padding_bytes += wordsize;
  	      continue;
  	    }
  	  if (all_ones && nonzero_first == 0)
--- 4314,4325 ----
        if (padding_bytes)
  	{
  	  if (nonzero_first == 0
! 	      && nonzero_last == endsize
  	      && all_ones)
  	    {
  	      /* All bits are padding and we had some padding
  		 before too.  Just extend it.  */
! 	      padding_bytes += endsize;
  	      continue;
  	    }
  	  if (all_ones && nonzero_first == 0)
*************** clear_padding_flush (clear_padding_struc
*** 4309,4315 ****
        if (nonzero_first == wordsize)
  	/* All bits in a word are 0, there are no padding bits.  */
  	continue;
!       if (all_ones && nonzero_last == wordsize)
  	{
  	  /* All bits between nonzero_first and end of word are padding
  	     bits, start counting padding_bytes.  */
--- 4359,4365 ----
        if (nonzero_first == wordsize)
  	/* All bits in a word are 0, there are no padding bits.  */
  	continue;
!       if (all_ones && nonzero_last == endsize)
  	{
  	  /* All bits between nonzero_first and end of word are padding
  	     bits, start counting padding_bytes.  */
*************** clear_padding_flush (clear_padding_struc
*** 4351,4357 ****
  		  j = k;
  		}
  	    }
! 	  if (nonzero_last == wordsize)
  	    padding_bytes = nonzero_last - zero_last;
  	  continue;
  	}
--- 4401,4407 ----
  		  j = k;
  		}
  	    }
! 	  if (nonzero_last == endsize)
  	    padding_bytes = nonzero_last - zero_last;
  	  continue;
  	}
*************** clear_padding_type (clear_padding_struct
*** 4802,4807 ****
--- 4852,4858 ----
  	  buf->off = 0;
  	  buf->size = 0;
  	  clear_padding_emit_loop (buf, elttype, end, for_auto_init);
+ 	  off += sz;
  	  buf->base = base;
  	  buf->sz = prev_sz;
  	  buf->align = prev_align;
diff -Nrcpad gcc-13.3.0/gcc/gimple-loop-jam.cc gcc-13.4.0/gcc/gimple-loop-jam.cc
*** gcc-13.3.0/gcc/gimple-loop-jam.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/gimple-loop-jam.cc	Thu Jun  5 16:02:59 2025
*************** unroll_jam_possible_p (class loop *outer
*** 279,291 ****
       body would be the after-iter value of the first body) if it's over
       an associative and commutative operation.  We wouldn't
       be able to handle unknown cycles.  */
    for (psi = gsi_start_phis (loop->header); !gsi_end_p (psi); gsi_next (&psi))
      {
        affine_iv iv;
        tree op = gimple_phi_result (psi.phi ());
  
        if (virtual_operand_p (op))
! 	continue;
        if (!simple_iv (loop, loop, op, &iv, true))
  	return false;
        /* The inductions must be regular, loop invariant step and initial
--- 279,295 ----
       body would be the after-iter value of the first body) if it's over
       an associative and commutative operation.  We wouldn't
       be able to handle unknown cycles.  */
+   bool inner_vdef = false;
    for (psi = gsi_start_phis (loop->header); !gsi_end_p (psi); gsi_next (&psi))
      {
        affine_iv iv;
        tree op = gimple_phi_result (psi.phi ());
  
        if (virtual_operand_p (op))
! 	{
! 	  inner_vdef = true;
! 	  continue;
! 	}
        if (!simple_iv (loop, loop, op, &iv, true))
  	return false;
        /* The inductions must be regular, loop invariant step and initial
*************** unroll_jam_possible_p (class loop *outer
*** 301,306 ****
--- 305,316 ----
  	 copy, _not_ the next value of the second body.  */
      }
  
+   /* When there's no inner loop virtual PHI IV we cannot handle the update
+      required to the inner loop if that doesn't already have one.  See
+      PR117113.  */
+   if (!inner_vdef && get_virtual_phi (outer->header))
+     return false;
+ 
    return true;
  }
  
diff -Nrcpad gcc-13.3.0/gcc/gimple-match-head.cc gcc-13.4.0/gcc/gimple-match-head.cc
*** gcc-13.3.0/gcc/gimple-match-head.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/gimple-match-head.cc	Thu Jun  5 16:02:59 2025
*************** gimple_extract (gimple *stmt, gimple_mat
*** 945,950 ****
--- 945,953 ----
  		|| code == VIEW_CONVERT_EXPR)
  	      {
  		tree op0 = TREE_OPERAND (gimple_assign_rhs1 (stmt), 0);
+ 		/* op0 needs to be a SSA name or an min invariant. */
+ 		if (TREE_CODE (op0) != SSA_NAME && !is_gimple_min_invariant (op0))
+ 		  return false;
  		res_op->set_op (code, type, valueize_op (op0));
  		return true;
  	      }
*************** gimple_extract (gimple *stmt, gimple_mat
*** 952,957 ****
--- 955,963 ----
  	      {
  		tree rhs1 = gimple_assign_rhs1 (stmt);
  		tree op0 = valueize_op (TREE_OPERAND (rhs1, 0));
+ 		/* op0 needs to be a SSA name or an min invariant. */
+ 		if (TREE_CODE (op0) != SSA_NAME && !is_gimple_min_invariant (op0))
+ 		  return false;
  		res_op->set_op (code, type, op0,
  				TREE_OPERAND (rhs1, 1),
  				TREE_OPERAND (rhs1, 2),
diff -Nrcpad gcc-13.3.0/gcc/gimple-range-edge.cc gcc-13.4.0/gcc/gimple-range-edge.cc
*** gcc-13.3.0/gcc/gimple-range-edge.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/gimple-range-edge.cc	Thu Jun  5 16:02:59 2025
*************** gimple_outgoing_range::calc_switch_range
*** 144,151 ****
        // Remove the case range from the default case.
        int_range_max def_range (low, high);
        range_cast (def_range, type);
!       def_range.invert ();
!       default_range.intersect (def_range);
  
        // Create/union this case with anything on else on the edge.
        int_range_max case_range (low, high);
--- 144,157 ----
        // Remove the case range from the default case.
        int_range_max def_range (low, high);
        range_cast (def_range, type);
!       // If all possible values are taken, set default_range to UNDEFINED.
!       if (def_range.varying_p ())
! 	default_range.set_undefined ();
!       else
! 	{
! 	  def_range.invert ();
! 	  default_range.intersect (def_range);
! 	}
  
        // Create/union this case with anything on else on the edge.
        int_range_max case_range (low, high);
diff -Nrcpad gcc-13.3.0/gcc/gimple-range-fold.cc gcc-13.4.0/gcc/gimple-range-fold.cc
*** gcc-13.3.0/gcc/gimple-range-fold.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/gimple-range-fold.cc	Thu Jun  5 16:02:59 2025
*************** fur_source::register_relation (edge e AT
*** 103,123 ****
  {
  }
  
- // This version of fur_source will pick a range up off an edge.
- 
- class fur_edge : public fur_source
- {
- public:
-   fur_edge (edge e, range_query *q = NULL);
-   virtual bool get_operand (vrange &r, tree expr) override;
-   virtual bool get_phi_operand (vrange &r, tree expr, edge e) override;
- private:
-   edge m_edge;
- };
- 
  // Instantiate an edge based fur_source.
  
- inline
  fur_edge::fur_edge (edge e, range_query *q) : fur_source (q)
  {
    m_edge = e;
--- 103,110 ----
diff -Nrcpad gcc-13.3.0/gcc/gimple-range-fold.h gcc-13.4.0/gcc/gimple-range-fold.h
*** gcc-13.3.0/gcc/gimple-range-fold.h	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/gimple-range-fold.h	Thu Jun  5 16:02:59 2025
*************** protected:
*** 149,154 ****
--- 149,166 ----
    relation_oracle *m_oracle;
  };
  
+ // This version of fur_source will pick a range up off an edge.
+ 
+ class fur_edge : public fur_source
+ {
+ public:
+   fur_edge (edge e, range_query *q = NULL);
+   virtual bool get_operand (vrange &r, tree expr) override;
+   virtual bool get_phi_operand (vrange &r, tree expr, edge e) override;
+ private:
+   edge m_edge;
+ };
+ 
  // This class uses ranges to fold a gimple statement producing a range for
  // the LHS.  The source of all operands is supplied via the fur_source class
  // which provides a range_query as well as a source location and any other
diff -Nrcpad gcc-13.3.0/gcc/gimple-range.cc gcc-13.4.0/gcc/gimple-range.cc
*** gcc-13.3.0/gcc/gimple-range.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/gimple-range.cc	Thu Jun  5 16:02:59 2025
*************** disable_ranger (struct function *fun)
*** 729,920 ****
    fun->x_range_query = NULL;
  }
  
- // ------------------------------------------------------------------------
- 
- // If there is a non-varying value associated with NAME, return true and the
- // range in R.
- 
- bool
- assume_query::assume_range_p (vrange &r, tree name)
- {
-   if (global.get_global_range (r, name))
-     return !r.varying_p ();
-   return false;
- }
- 
- // Query used by GORI to pick up any known value on entry to a block.
- 
- bool
- assume_query::range_of_expr (vrange &r, tree expr, gimple *stmt)
- {
-   if (!gimple_range_ssa_p (expr))
-     return get_tree_range (r, expr, stmt);
- 
-   if (!global.get_global_range (r, expr))
-     r.set_varying (TREE_TYPE (expr));
-   return true;
- }
- 
- // If the current function returns an integral value, and has a single return
- // statement, it will calculate any SSA_NAMES it can determine ranges for
- // assuming the function returns 1.
- 
- assume_query::assume_query ()
- {
-   basic_block exit_bb = EXIT_BLOCK_PTR_FOR_FN (cfun);
-   if (single_pred_p (exit_bb))
-     {
-       basic_block bb = single_pred (exit_bb);
-       gimple_stmt_iterator gsi = gsi_last_nondebug_bb (bb);
-       if (gsi_end_p (gsi))
- 	return;
-       gimple *s = gsi_stmt (gsi);
-       if (!is_a<greturn *> (s))
- 	return;
-       greturn *gret = as_a<greturn *> (s);
-       tree op = gimple_return_retval (gret);
-       if (!gimple_range_ssa_p (op))
- 	return;
-       tree lhs_type = TREE_TYPE (op);
-       if (!irange::supports_p (lhs_type))
- 	return;
- 
-       unsigned prec = TYPE_PRECISION (lhs_type);
-       int_range<2> lhs_range (lhs_type, wi::one (prec), wi::one (prec));
-       global.set_global_range (op, lhs_range);
- 
-       gimple *def = SSA_NAME_DEF_STMT (op);
-       if (!def || gimple_get_lhs (def) != op)
- 	return;
-       fur_stmt src (gret, this);
-       calculate_stmt (def, lhs_range, src);
-     }
- }
- 
- // Evaluate operand OP on statement S, using the provided LHS range.
- // If successful, set the range in the global table, then visit OP's def stmt.
- 
- void
- assume_query::calculate_op (tree op, gimple *s, vrange &lhs, fur_source &src)
- {
-   Value_Range op_range (TREE_TYPE (op));
-   if (m_gori.compute_operand_range (op_range, s, lhs, op, src)
-       && !op_range.varying_p ())
-     {
-       Value_Range range (TREE_TYPE (op));
-       if (global.get_global_range (range, op))
- 	op_range.intersect (range);
-       global.set_global_range (op, op_range);
-       gimple *def_stmt = SSA_NAME_DEF_STMT (op);
-       if (def_stmt && gimple_get_lhs (def_stmt) == op)
- 	calculate_stmt (def_stmt, op_range, src);
-     }
- }
- 
- // Evaluate PHI statement, using the provided LHS range.
- // Check each constant argument predecessor if it can be taken
- // provide LHS to any symbolic arguments, and process their def statements.
- 
- void
- assume_query::calculate_phi (gphi *phi, vrange &lhs_range, fur_source &src)
- {
-   for (unsigned x= 0; x < gimple_phi_num_args (phi); x++)
-     {
-       tree arg = gimple_phi_arg_def (phi, x);
-       Value_Range arg_range (TREE_TYPE (arg));
-       if (gimple_range_ssa_p (arg))
- 	{
- 	  // A symbol arg will be the LHS value.
- 	  arg_range = lhs_range;
- 	  range_cast (arg_range, TREE_TYPE (arg));
- 	  if (!global.get_global_range (arg_range, arg))
- 	    {
- 	      global.set_global_range (arg, arg_range);
- 	      gimple *def_stmt = SSA_NAME_DEF_STMT (arg);
- 	      if (def_stmt && gimple_get_lhs (def_stmt) == arg)
- 		calculate_stmt (def_stmt, arg_range, src);
- 	    }
- 	}
-       else if (get_tree_range (arg_range, arg, NULL))
- 	{
- 	  // If this is a constant value that differs from LHS, this
- 	  // edge cannot be taken.
- 	  arg_range.intersect (lhs_range);
- 	  if (arg_range.undefined_p ())
- 	    continue;
- 	  // Otherwise check the condition feeding this edge.
- 	  edge e = gimple_phi_arg_edge (phi, x);
- 	  check_taken_edge (e, src);
- 	}
-     }
- }
- 
- // If an edge is known to be taken, examine the outgoing edge to see
- // if it carries any range information that can also be evaluated.
- 
- void
- assume_query::check_taken_edge (edge e, fur_source &src)
- {
-   gimple *stmt = gimple_outgoing_range_stmt_p (e->src);
-   if (stmt && is_a<gcond *> (stmt))
-     {
-       int_range<2> cond;
-       gcond_edge_range (cond, e);
-       calculate_stmt (stmt, cond, src);
-     }
- }
- 
- // Evaluate statement S which produces range LHS_RANGE.
- 
- void
- assume_query::calculate_stmt (gimple *s, vrange &lhs_range, fur_source &src)
- {
-   gimple_range_op_handler handler (s);
-   if (handler)
-     {
-       tree op = gimple_range_ssa_p (handler.operand1 ());
-       if (op)
- 	calculate_op (op, s, lhs_range, src);
-       op = gimple_range_ssa_p (handler.operand2 ());
-       if (op)
- 	calculate_op (op, s, lhs_range, src);
-     }
-   else if (is_a<gphi *> (s))
-     {
-       calculate_phi (as_a<gphi *> (s), lhs_range, src);
-       // Don't further check predecessors of blocks with PHIs.
-       return;
-     }
- 
-   // Even if the walk back terminates before the top, if this is a single
-   // predecessor block, see if the predecessor provided any ranges to get here.
-   if (single_pred_p (gimple_bb (s)))
-     check_taken_edge (single_pred_edge (gimple_bb (s)), src);
- }
- 
- // Show everything that was calculated.
- 
- void
- assume_query::dump (FILE *f)
- {
-   fprintf (f, "Assumption details calculated:\n");
-   for (unsigned i = 0; i < num_ssa_names; i++)
-     {
-       tree name = ssa_name (i);
-       if (!name || !gimple_range_ssa_p (name))
- 	continue;
-       tree type = TREE_TYPE (name);
-       if (!Value_Range::supports_type_p (type))
- 	continue;
- 
-       Value_Range assume_range (type);
-       if (assume_range_p (assume_range, name))
- 	{
- 	  print_generic_expr (f, name, TDF_SLIM);
- 	  fprintf (f, " -> ");
- 	  assume_range.dump (f);
- 	  fputc ('\n', f);
- 	}
-     }
-   fprintf (f, "------------------------------\n");
- }
--- 729,731 ----
diff -Nrcpad gcc-13.3.0/gcc/gimple-range.h gcc-13.4.0/gcc/gimple-range.h
*** gcc-13.3.0/gcc/gimple-range.h	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/gimple-range.h	Thu Jun  5 16:02:59 2025
*************** protected:
*** 81,103 ****
  extern gimple_ranger *enable_ranger (struct function *m,
  				     bool use_imm_uses = true);
  extern void disable_ranger (struct function *);
- 
- class assume_query : public range_query
- {
- public:
-   assume_query ();
-   bool assume_range_p (vrange &r, tree name);
-   virtual bool range_of_expr (vrange &r, tree expr, gimple * = NULL);
-   void dump (FILE *f);
- protected:
-   void calculate_stmt (gimple *s, vrange &lhs_range, fur_source &src);
-   void calculate_op (tree op, gimple *s, vrange &lhs, fur_source &src);
-   void calculate_phi (gphi *phi, vrange &lhs_range, fur_source &src);
-   void check_taken_edge (edge e, fur_source &src);
- 
-   ssa_global_cache global;
-   gori_compute m_gori;
- };
- 
- 
  #endif // GCC_GIMPLE_RANGE_H
--- 81,84 ----
diff -Nrcpad gcc-13.3.0/gcc/gimple-ssa-backprop.cc gcc-13.4.0/gcc/gimple-ssa-backprop.cc
*** gcc-13.3.0/gcc/gimple-ssa-backprop.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/gimple-ssa-backprop.cc	Thu Jun  5 16:02:59 2025
*************** remove_unused_var (tree var)
*** 663,670 ****
        print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
      }
    gimple_stmt_iterator gsi = gsi_for_stmt (stmt);
!   gsi_remove (&gsi, true);
!   release_defs (stmt);
  }
  
  /* Note that we're replacing OLD_RHS with NEW_RHS in STMT.  */
--- 663,676 ----
        print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
      }
    gimple_stmt_iterator gsi = gsi_for_stmt (stmt);
!   if (gimple_code (stmt) == GIMPLE_PHI)
!     remove_phi_node (&gsi, true);
!   else
!     {
!       unlink_stmt_vdef (stmt);
!       gsi_remove (&gsi, true);
!       release_defs (stmt);
!     }
  }
  
  /* Note that we're replacing OLD_RHS with NEW_RHS in STMT.  */
diff -Nrcpad gcc-13.3.0/gcc/gimple-ssa-isolate-paths.cc gcc-13.4.0/gcc/gimple-ssa-isolate-paths.cc
*** gcc-13.3.0/gcc/gimple-ssa-isolate-paths.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/gimple-ssa-isolate-paths.cc	Thu Jun  5 16:02:59 2025
*************** check_loadstore (gimple *stmt, tree op,
*** 62,67 ****
--- 62,69 ----
    return false;
  }
  
+ static vec<gimple *> *bb_split_points;
+ 
  /* Insert a trap after SI and split the block after the trap.  */
  
  static void
*************** insert_trap (gimple_stmt_iterator *si_p,
*** 104,117 ****
        gsi_insert_after (si_p, seq, GSI_NEW_STMT);
        if (stmt_ends_bb_p (stmt))
  	{
! 	  split_block (gimple_bb (stmt), stmt);
  	  return;
  	}
      }
    else
      gsi_insert_before (si_p, seq, GSI_NEW_STMT);
  
!   split_block (gimple_bb (new_stmt), new_stmt);
    *si_p = gsi_for_stmt (stmt);
  }
  
--- 106,125 ----
        gsi_insert_after (si_p, seq, GSI_NEW_STMT);
        if (stmt_ends_bb_p (stmt))
  	{
! 	  if (dom_info_available_p (CDI_POST_DOMINATORS))
! 	    bb_split_points->safe_push (stmt);
! 	  else
! 	    split_block (gimple_bb (stmt), stmt);
  	  return;
  	}
      }
    else
      gsi_insert_before (si_p, seq, GSI_NEW_STMT);
  
!   if (dom_info_available_p (CDI_POST_DOMINATORS))
!     bb_split_points->safe_push (new_stmt);
!   else
!     split_block (gimple_bb (new_stmt), new_stmt);
    *si_p = gsi_for_stmt (stmt);
  }
  
*************** static void
*** 842,847 ****
--- 850,857 ----
  find_explicit_erroneous_behavior (void)
  {
    basic_block bb;
+   auto_vec<gimple *> local_bb_split_points;
+   bb_split_points = &local_bb_split_points;
  
    FOR_EACH_BB_FN (bb, cfun)
      {
*************** find_explicit_erroneous_behavior (void)
*** 883,888 ****
--- 893,906 ----
  	    warn_return_addr_local (bb, return_stmt);
  	}
      }
+ 
+   free_dominance_info (CDI_POST_DOMINATORS);
+ 
+   /* Perform delayed splitting of blocks.  */
+   for (gimple *stmt : local_bb_split_points)
+     split_block (gimple_bb (stmt), stmt);
+ 
+   bb_split_points = NULL;
  }
  
  /* Search the function for statements which, if executed, would cause
*************** gimple_ssa_isolate_erroneous_paths (void
*** 939,945 ****
    /* We scramble the CFG and loop structures a bit, clean up
       appropriately.  We really should incrementally update the
       loop structures, in theory it shouldn't be that hard.  */
-   free_dominance_info (CDI_POST_DOMINATORS);
    if (cfg_altered)
      {
        free_dominance_info (CDI_DOMINATORS);
--- 957,962 ----
diff -Nrcpad gcc-13.3.0/gcc/gimple-ssa-store-merging.cc gcc-13.4.0/gcc/gimple-ssa-store-merging.cc
*** gcc-13.3.0/gcc/gimple-ssa-store-merging.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/gimple-ssa-store-merging.cc	Thu Jun  5 16:02:59 2025
*************** init_symbolic_number (struct symbolic_nu
*** 363,369 ****
     the answer. If so, REF is that memory source and the base of the memory area
     accessed and the offset of the access from that base are recorded in N.  */
  
! bool
  find_bswap_or_nop_load (gimple *stmt, tree ref, struct symbolic_number *n)
  {
    /* Leaf node is an array or component ref. Memorize its base and
--- 363,369 ----
     the answer. If so, REF is that memory source and the base of the memory area
     accessed and the offset of the access from that base are recorded in N.  */
  
! static bool
  find_bswap_or_nop_load (gimple *stmt, tree ref, struct symbolic_number *n)
  {
    /* Leaf node is an array or component ref. Memorize its base and
*************** find_bswap_or_nop_1 (gimple *stmt, struc
*** 610,616 ****
    gimple *rhs1_stmt, *rhs2_stmt, *source_stmt1;
    enum gimple_rhs_class rhs_class;
  
!   if (!limit || !is_gimple_assign (stmt))
      return NULL;
  
    rhs1 = gimple_assign_rhs1 (stmt);
--- 610,618 ----
    gimple *rhs1_stmt, *rhs2_stmt, *source_stmt1;
    enum gimple_rhs_class rhs_class;
  
!   if (!limit
!       || !is_gimple_assign (stmt)
!       || stmt_can_throw_internal (cfun, stmt))
      return NULL;
  
    rhs1 = gimple_assign_rhs1 (stmt);
*************** encode_tree_to_bitpos (tree expr, unsign
*** 1849,1862 ****
  		       unsigned int total_bytes)
  {
    unsigned int first_byte = bitpos / BITS_PER_UNIT;
-   bool sub_byte_op_p = ((bitlen % BITS_PER_UNIT)
- 			|| (bitpos % BITS_PER_UNIT)
- 			|| !int_mode_for_size (bitlen, 0).exists ());
    bool empty_ctor_p
      = (TREE_CODE (expr) == CONSTRUCTOR
         && CONSTRUCTOR_NELTS (expr) == 0
         && TYPE_SIZE_UNIT (TREE_TYPE (expr))
! 		       && tree_fits_uhwi_p (TYPE_SIZE_UNIT (TREE_TYPE (expr))));
  
    if (!sub_byte_op_p)
      {
--- 1851,1865 ----
  		       unsigned int total_bytes)
  {
    unsigned int first_byte = bitpos / BITS_PER_UNIT;
    bool empty_ctor_p
      = (TREE_CODE (expr) == CONSTRUCTOR
         && CONSTRUCTOR_NELTS (expr) == 0
         && TYPE_SIZE_UNIT (TREE_TYPE (expr))
!        && tree_fits_uhwi_p (TYPE_SIZE_UNIT (TREE_TYPE (expr))));
!   bool sub_byte_op_p = ((bitlen % BITS_PER_UNIT)
! 			|| (bitpos % BITS_PER_UNIT)
! 			|| (!int_mode_for_size (bitlen, 0).exists ()
! 			    && !empty_ctor_p));
  
    if (!sub_byte_op_p)
      {
diff -Nrcpad gcc-13.3.0/gcc/gimple-ssa-strength-reduction.cc gcc-13.4.0/gcc/gimple-ssa-strength-reduction.cc
*** gcc-13.3.0/gcc/gimple-ssa-strength-reduction.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/gimple-ssa-strength-reduction.cc	Thu Jun  5 16:02:59 2025
*************** get_alternative_base (tree base)
*** 473,479 ****
        aff.offset = 0;
        expr = aff_combination_to_tree (&aff);
  
!       gcc_assert (!alt_base_map->put (base, base == expr ? NULL : expr));
  
        return expr == base ? NULL : expr;
      }
--- 473,480 ----
        aff.offset = 0;
        expr = aff_combination_to_tree (&aff);
  
!       bool existed = alt_base_map->put (base, base == expr ? NULL : expr);
!       gcc_assert (!existed);
  
        return expr == base ? NULL : expr;
      }
*************** base_cand_from_table (tree base_in)
*** 791,797 ****
  static void
  add_cand_for_stmt (gimple *gs, slsr_cand_t c)
  {
!   gcc_assert (!stmt_cand_map->put (gs, c));
  }
  
  /* Given PHI which contains a phi statement, determine whether it
--- 792,799 ----
  static void
  add_cand_for_stmt (gimple *gs, slsr_cand_t c)
  {
!   bool existed = stmt_cand_map->put (gs, c);
!   gcc_assert (!existed);
  }
  
  /* Given PHI which contains a phi statement, determine whether it
diff -Nrcpad gcc-13.3.0/gcc/gimple-ssa-warn-access.cc gcc-13.4.0/gcc/gimple-ssa-warn-access.cc
*** gcc-13.3.0/gcc/gimple-ssa-warn-access.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/gimple-ssa-warn-access.cc	Thu Jun  5 16:02:59 2025
*************** maybe_warn_nonstring_arg (tree fndecl, G
*** 606,612 ****
  	{
  	  if (tree arrbnd = TYPE_DOMAIN (type))
  	    {
! 	      if ((arrbnd = TYPE_MAX_VALUE (arrbnd)))
  		{
  		  asize = wi::to_offset (arrbnd) + 1;
  		  known_size = true;
--- 606,613 ----
  	{
  	  if (tree arrbnd = TYPE_DOMAIN (type))
  	    {
! 	      if ((arrbnd = TYPE_MAX_VALUE (arrbnd))
! 		  && TREE_CODE (arrbnd) == INTEGER_CST)
  		{
  		  asize = wi::to_offset (arrbnd) + 1;
  		  known_size = true;
*************** matching_alloc_calls_p (tree alloc_decl,
*** 1919,1970 ****
       headers.
       With AMATS set to the Allocator's Malloc ATtributes,
       and  RMATS set to Reallocator's Malloc ATtributes...  */
!   for (tree amats = DECL_ATTRIBUTES (alloc_decl),
! 	 rmats = DECL_ATTRIBUTES (dealloc_decl);
!        (amats = lookup_attribute ("malloc", amats))
! 	 || (rmats = lookup_attribute ("malloc", rmats));
!        amats = amats ? TREE_CHAIN (amats) : NULL_TREE,
! 	 rmats = rmats ? TREE_CHAIN (rmats) : NULL_TREE)
!     {
!       if (tree args = amats ? TREE_VALUE (amats) : NULL_TREE)
! 	if (tree adealloc = TREE_VALUE (args))
! 	  {
! 	    if (DECL_P (adealloc)
! 		&& fndecl_built_in_p (adealloc, BUILT_IN_NORMAL))
! 	      {
! 		built_in_function fncode = DECL_FUNCTION_CODE (adealloc);
! 		if (fncode == BUILT_IN_FREE || fncode == BUILT_IN_REALLOC)
! 		  {
! 		    if (realloc_kind == alloc_kind_t::builtin)
! 		      return true;
! 		    alloc_dealloc_kind = alloc_kind_t::builtin;
! 		  }
! 		continue;
! 	      }
! 
! 	    common_deallocs.add (adealloc);
! 	  }
  
!       if (tree args = rmats ? TREE_VALUE (rmats) : NULL_TREE)
! 	if (tree ddealloc = TREE_VALUE (args))
! 	  {
! 	    if (DECL_P (ddealloc)
! 		&& fndecl_built_in_p (ddealloc, BUILT_IN_NORMAL))
! 	      {
! 		built_in_function fncode = DECL_FUNCTION_CODE (ddealloc);
! 		if (fncode == BUILT_IN_FREE || fncode == BUILT_IN_REALLOC)
! 		  {
! 		    if (alloc_dealloc_kind == alloc_kind_t::builtin)
! 		      return true;
! 		    realloc_dealloc_kind = alloc_kind_t::builtin;
! 		  }
! 		continue;
! 	      }
  
! 	    if (common_deallocs.add (ddealloc))
! 	      return true;
! 	  }
!     }
  
    /* Succeed only if ALLOC_DECL and the reallocator DEALLOC_DECL share
       a built-in deallocator.  */
--- 1920,1968 ----
       headers.
       With AMATS set to the Allocator's Malloc ATtributes,
       and  RMATS set to Reallocator's Malloc ATtributes...  */
!   for (tree amats = DECL_ATTRIBUTES (alloc_decl);
!        (amats = lookup_attribute ("malloc", amats));
!        amats = amats ? TREE_CHAIN (amats) : NULL_TREE)
!     if (tree args = amats ? TREE_VALUE (amats) : NULL_TREE)
!       if (tree adealloc = TREE_VALUE (args))
! 	{
! 	  if (DECL_P (adealloc)
! 	      && fndecl_built_in_p (adealloc, BUILT_IN_NORMAL))
! 	    {
! 	      built_in_function fncode = DECL_FUNCTION_CODE (adealloc);
! 	      if (fncode == BUILT_IN_FREE || fncode == BUILT_IN_REALLOC)
! 		{
! 		  if (realloc_kind == alloc_kind_t::builtin)
! 		    return true;
! 		  alloc_dealloc_kind = alloc_kind_t::builtin;
! 		}
! 	      continue;
! 	    }
  
! 	  common_deallocs.add (adealloc);
! 	}
!   for (tree rmats = DECL_ATTRIBUTES (dealloc_decl);
!        (rmats = lookup_attribute ("malloc", rmats));
!        rmats = rmats ? TREE_CHAIN (rmats) : NULL_TREE)
!     if (tree args = rmats ? TREE_VALUE (rmats) : NULL_TREE)
!       if (tree ddealloc = TREE_VALUE (args))
! 	{
! 	  if (DECL_P (ddealloc)
! 	      && fndecl_built_in_p (ddealloc, BUILT_IN_NORMAL))
! 	    {
! 	      built_in_function fncode = DECL_FUNCTION_CODE (ddealloc);
! 	      if (fncode == BUILT_IN_FREE || fncode == BUILT_IN_REALLOC)
! 		{
! 		  if (alloc_dealloc_kind == alloc_kind_t::builtin)
! 		    return true;
! 		  realloc_dealloc_kind = alloc_kind_t::builtin;
! 		}
! 	      continue;
! 	    }
  
! 	  if (common_deallocs.contains (ddealloc))
! 	    return true;
! 	}
  
    /* Succeed only if ALLOC_DECL and the reallocator DEALLOC_DECL share
       a built-in deallocator.  */
diff -Nrcpad gcc-13.3.0/gcc/gimplify.cc gcc-13.4.0/gcc/gimplify.cc
*** gcc-13.3.0/gcc/gimplify.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/gimplify.cc	Thu Jun  5 16:02:59 2025
*************** is_gimple_mem_rhs_or_call (tree t)
*** 552,558 ****
    else
      return (is_gimple_val (t)
  	    || is_gimple_lvalue (t)
! 	    || TREE_CLOBBER_P (t)
  	    || TREE_CODE (t) == CALL_EXPR);
  }
  
--- 552,558 ----
    else
      return (is_gimple_val (t)
  	    || is_gimple_lvalue (t)
! 	    || (TREE_CODE (t) == CONSTRUCTOR && CONSTRUCTOR_NELTS (t) == 0)
  	    || TREE_CODE (t) == CALL_EXPR);
  }
  
*************** warn_switch_unreachable_and_auto_init_r
*** 2129,2135 ****
  	  const char *var_name_str = TREE_STRING_POINTER (var_name);
  
  	  warning_at (gimple_location (stmt), OPT_Wtrivial_auto_var_init,
! 		      "%qs cannot be initialized with"
  		      "%<-ftrivial-auto-var_init%>",
  		      var_name_str);
  	  break;
--- 2129,2135 ----
  	  const char *var_name_str = TREE_STRING_POINTER (var_name);
  
  	  warning_at (gimple_location (stmt), OPT_Wtrivial_auto_var_init,
! 		      "%qs cannot be initialized with "
  		      "%<-ftrivial-auto-var_init%>",
  		      var_name_str);
  	  break;
*************** gimplify_addr_expr (tree *expr_p, gimple
*** 6586,6592 ****
  	*expr_p = build_fold_addr_expr (op0);
  
        /* Make sure TREE_CONSTANT and TREE_SIDE_EFFECTS are set properly.  */
!       recompute_tree_invariant_for_addr_expr (*expr_p);
  
        /* If we re-built the ADDR_EXPR add a conversion to the original type
           if required.  */
--- 6586,6593 ----
  	*expr_p = build_fold_addr_expr (op0);
  
        /* Make sure TREE_CONSTANT and TREE_SIDE_EFFECTS are set properly.  */
!       if (TREE_CODE (*expr_p) == ADDR_EXPR)
! 	recompute_tree_invariant_for_addr_expr (*expr_p);
  
        /* If we re-built the ADDR_EXPR add a conversion to the original type
           if required.  */
*************** gimplify_asm_expr (tree *expr_p, gimple_
*** 6726,6731 ****
--- 6727,6733 ----
  	  /* Turn the in/out constraint into an output constraint.  */
  	  char *p = xstrdup (constraint);
  	  p[0] = '=';
+ 	  TREE_PURPOSE (link) = unshare_expr (TREE_PURPOSE (link));
  	  TREE_VALUE (TREE_PURPOSE (link)) = build_string (constraint_len, p);
  
  	  /* And add a matching input constraint.  */
diff -Nrcpad gcc-13.3.0/gcc/ginclude/stddef.h gcc-13.4.0/gcc/ginclude/stddef.h
*** gcc-13.3.0/gcc/ginclude/stddef.h	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/ginclude/stddef.h	Thu Jun  5 16:02:59 2025
*************** typedef struct {
*** 444,461 ****
  #endif
  #endif /* C++11.  */
  
! #if (defined (__STDC_VERSION__) && __STDC_VERSION__ > 201710L)
  #ifndef _GCC_NULLPTR_T
  #define _GCC_NULLPTR_T
    typedef __typeof__(nullptr) nullptr_t;
- /* ??? This doesn't define __STDC_VERSION_STDDEF_H__ yet.  */
  #endif
! #endif /* C23.  */
! 
! #if defined __STDC_VERSION__ && __STDC_VERSION__ > 201710L
  #define unreachable() (__builtin_unreachable ())
  #define __STDC_VERSION_STDDEF_H__	202311L
  #endif
  
  #endif /* _STDDEF_H was defined this time */
  
--- 444,459 ----
  #endif
  #endif /* C++11.  */
  
! #if defined (__STDC_VERSION__) && __STDC_VERSION__ > 201710L
  #ifndef _GCC_NULLPTR_T
  #define _GCC_NULLPTR_T
    typedef __typeof__(nullptr) nullptr_t;
  #endif
! #ifndef __STDC_VERSION_STDDEF_H__
  #define unreachable() (__builtin_unreachable ())
  #define __STDC_VERSION_STDDEF_H__	202311L
  #endif
+ #endif /* C23.  */
  
  #endif /* _STDDEF_H was defined this time */
  
diff -Nrcpad gcc-13.3.0/gcc/go/ChangeLog gcc-13.4.0/gcc/go/ChangeLog
*** gcc-13.3.0/gcc/go/ChangeLog	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/go/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/gcc/ipa-cp.cc gcc-13.4.0/gcc/ipa-cp.cc
*** gcc-13.3.0/gcc/ipa-cp.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/ipa-cp.cc	Thu Jun  5 16:02:59 2025
*************** adjust_clone_incoming_counts (cgraph_nod
*** 4808,4814 ****
  	cs->count = cs->count.combine_with_ipa_count (sum);
        }
      else if (!desc->processed_edges->contains (cs)
! 	     && cs->caller->clone_of == desc->orig)
        {
  	cs->count += desc->count;
  	if (dump_file)
--- 4808,4815 ----
  	cs->count = cs->count.combine_with_ipa_count (sum);
        }
      else if (!desc->processed_edges->contains (cs)
! 	     && cs->caller->clone_of == desc->orig
! 	     && cs->count.compatible_p (desc->count))
        {
  	cs->count += desc->count;
  	if (dump_file)
diff -Nrcpad gcc-13.3.0/gcc/ipa-fnsummary.cc gcc-13.4.0/gcc/ipa-fnsummary.cc
*** gcc-13.3.0/gcc/ipa-fnsummary.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/ipa-fnsummary.cc	Thu Jun  5 16:02:59 2025
*************** points_to_local_or_readonly_memory_p (tr
*** 2572,2578 ****
  	return true;
        return !ptr_deref_may_alias_global_p (t, false);
      }
!   if (TREE_CODE (t) == ADDR_EXPR)
      return refs_local_or_readonly_memory_p (TREE_OPERAND (t, 0));
    return false;
  }
--- 2572,2580 ----
  	return true;
        return !ptr_deref_may_alias_global_p (t, false);
      }
!   if (TREE_CODE (t) == ADDR_EXPR
!       && (TREE_CODE (TREE_OPERAND (t, 0)) != TARGET_MEM_REF
! 	  || TREE_CODE (TREE_OPERAND (TREE_OPERAND (t, 0), 0)) != INTEGER_CST))
      return refs_local_or_readonly_memory_p (TREE_OPERAND (t, 0));
    return false;
  }
diff -Nrcpad gcc-13.3.0/gcc/ipa-free-lang-data.cc gcc-13.4.0/gcc/ipa-free-lang-data.cc
*** gcc-13.3.0/gcc/ipa-free-lang-data.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/ipa-free-lang-data.cc	Thu Jun  5 16:02:59 2025
*************** free_lang_data_in_type (tree type, class
*** 436,444 ****
  	 different front ends.  */
        for (tree p = TYPE_ARG_TYPES (type); p; p = TREE_CHAIN (p))
  	{
- 	  TREE_VALUE (p) = fld_simplified_type (TREE_VALUE (p), fld);
  	  tree arg_type = TREE_VALUE (p);
- 
  	  if (TYPE_READONLY (arg_type) || TYPE_VOLATILE (arg_type))
  	    {
  	      int quals = TYPE_QUALS (arg_type)
--- 436,442 ----
*************** free_lang_data_in_type (tree type, class
*** 448,453 ****
--- 446,452 ----
  	      if (!fld->pset.add (TREE_VALUE (p)))
  		free_lang_data_in_type (TREE_VALUE (p), fld);
  	    }
+ 	  TREE_VALUE (p) = fld_simplified_type (TREE_VALUE (p), fld);
  	  /* C++ FE uses TREE_PURPOSE to store initial values.  */
  	  TREE_PURPOSE (p) = NULL;
  	}
*************** find_decls_types_r (tree *tp, int *ws, v
*** 842,847 ****
--- 841,860 ----
  	fld_worklist_push (tem, fld);
        fld_worklist_push (BLOCK_ABSTRACT_ORIGIN (t), fld);
      }
+   /* walk_tree does not visit ce->index which can be a FIELD_DECL, pulling
+      in otherwise unused structure fields so handle CTORs explicitly.  */
+   else if (TREE_CODE (t) == CONSTRUCTOR)
+     {
+       unsigned HOST_WIDE_INT idx;
+       constructor_elt *ce;
+       for (idx = 0; vec_safe_iterate (CONSTRUCTOR_ELTS (t), idx, &ce); idx++)
+ 	{
+ 	  if (ce->index)
+ 	    fld_worklist_push (ce->index, fld);
+ 	  fld_worklist_push (ce->value, fld);
+ 	}
+       *ws = 0;
+     }
  
    if (TREE_CODE (t) != IDENTIFIER_NODE
        && CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_TYPED))
diff -Nrcpad gcc-13.3.0/gcc/ipa-icf-gimple.cc gcc-13.4.0/gcc/ipa-icf-gimple.cc
*** gcc-13.3.0/gcc/ipa-icf-gimple.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/ipa-icf-gimple.cc	Thu Jun  5 16:02:59 2025
*************** func_checker::compare_asm_inputs_outputs
*** 458,464 ****
  	return false;
  
        if (!compare_operand (TREE_VALUE (t1), TREE_VALUE (t2),
! 			    get_operand_access_type (map, t1)))
  	return return_false ();
  
        tree p1 = TREE_PURPOSE (t1);
--- 458,466 ----
  	return false;
  
        if (!compare_operand (TREE_VALUE (t1), TREE_VALUE (t2),
! 			    get_operand_access_type (map, t1))
! 	  || !types_compatible_p (TREE_TYPE (TREE_VALUE (t1)),
! 				  TREE_TYPE (TREE_VALUE (t2))))
  	return return_false ();
  
        tree p1 = TREE_PURPOSE (t1);
*************** func_checker::compare_loops (basic_block
*** 542,547 ****
--- 544,553 ----
      return return_false_with_msg ("unroll");
    if (!compare_variable_decl (l1->simduid, l2->simduid))
      return return_false_with_msg ("simduid");
+   if ((l1->any_upper_bound != l2->any_upper_bound)
+       || (l1->any_upper_bound
+ 	  && (l1->nb_iterations_upper_bound != l2->nb_iterations_upper_bound)))
+     return return_false_with_msg ("nb_iterations_upper_bound");
  
    return true;
  }
*************** func_checker::compare_gimple_call (gcall
*** 704,729 ****
        || gimple_call_alloca_for_var_p (s1) != gimple_call_alloca_for_var_p (s2))
      return false;
  
!   if (gimple_call_internal_p (s1)
!       && gimple_call_internal_fn (s1) != gimple_call_internal_fn (s2))
!     return false;
! 
!   tree fntype1 = gimple_call_fntype (s1);
!   tree fntype2 = gimple_call_fntype (s2);
! 
!   /* For direct calls we verify that types are compatible so if we matched
!      callees, callers must match, too.  For indirect calls however verify
!      function type.  */
!   if (!gimple_call_fndecl (s1))
      {
!       if ((fntype1 && !fntype2)
! 	  || (!fntype1 && fntype2)
! 	  || (fntype1 && !types_compatible_p (fntype1, fntype2)))
! 	return return_false_with_msg ("call function types are not compatible");
      }
  
!   if (fntype1 && fntype2 && comp_type_attributes (fntype1, fntype2) != 1)
!     return return_false_with_msg ("different fntype attributes");
  
    tree chain1 = gimple_call_chain (s1);
    tree chain2 = gimple_call_chain (s2);
--- 710,746 ----
        || gimple_call_alloca_for_var_p (s1) != gimple_call_alloca_for_var_p (s2))
      return false;
  
!   unsigned check_arg_types_from = 0;
!   if (gimple_call_internal_p (s1))
      {
!       if (gimple_call_internal_fn (s1) != gimple_call_internal_fn (s2))
! 	return false;
      }
+   else
+     {
+       tree fntype1 = gimple_call_fntype (s1);
+       tree fntype2 = gimple_call_fntype (s2);
+       if (!types_compatible_p (fntype1, fntype2))
+ 	return return_false_with_msg ("call function types are not compatible");
  
!       if (comp_type_attributes (fntype1, fntype2) != 1)
! 	return return_false_with_msg ("different fntype attributes");
! 
!       check_arg_types_from = gimple_call_num_args (s1);
!       if (!prototype_p (fntype1) || !prototype_p (fntype2))
! 	check_arg_types_from = 0;
!       else if (stdarg_p (fntype1))
! 	{
! 	  check_arg_types_from = list_length (TYPE_ARG_TYPES (fntype1));
! 	  if (stdarg_p (fntype2))
! 	    {
! 	      unsigned n = list_length (TYPE_ARG_TYPES (fntype2));
! 	      check_arg_types_from = MIN (check_arg_types_from, n);
! 	    }
! 	}
!       else if (stdarg_p (fntype2))
! 	check_arg_types_from = list_length (TYPE_ARG_TYPES (fntype2));
!     }
  
    tree chain1 = gimple_call_chain (s1);
    tree chain2 = gimple_call_chain (s2);
*************** func_checker::compare_gimple_call (gcall
*** 741,746 ****
--- 758,767 ----
  
        if (!compare_operand (t1, t2, get_operand_access_type (&map, t1)))
  	return return_false_with_msg ("GIMPLE call operands are different");
+       if (i >= check_arg_types_from
+ 	  && !types_compatible_p (TREE_TYPE (t1), TREE_TYPE (t2)))
+ 	return return_false_with_msg ("GIMPLE call operand types are "
+ 				      "different");
      }
  
    /* Return value checking.  */
diff -Nrcpad gcc-13.3.0/gcc/ipa-inline.cc gcc-13.4.0/gcc/ipa-inline.cc
*** gcc-13.3.0/gcc/ipa-inline.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/ipa-inline.cc	Thu Jun  5 16:02:59 2025
*************** inline_insns_auto (cgraph_node *n, bool
*** 443,466 ****
    return max_inline_insns_auto;
  }
  
  /* Decide if we can inline the edge and possibly update
     inline_failed reason.  
     We check whether inlining is possible at all and whether
!    caller growth limits allow doing so.  
! 
!    if REPORT is true, output reason to the dump file.
! 
!    if DISREGARD_LIMITS is true, ignore size limits.  */
  
  static bool
! can_inline_edge_by_limits_p (struct cgraph_edge *e, bool report,
! 		             bool disregard_limits = false, bool early = false)
  {
    gcc_checking_assert (e->inline_failed);
  
    if (cgraph_inline_failed_type (e->inline_failed) == CIF_FINAL_ERROR)
      {
!       if (report)
          report_inline_failed_reason (e);
        return false;
      }
--- 443,475 ----
    return max_inline_insns_auto;
  }
  
+ enum can_inline_edge_by_limits_flags
+ {
+   /* True if we are early inlining.  */
+   CAN_INLINE_EARLY = 1,
+   /* Ignore size limits.  */
+   CAN_INLINE_DISREGARD_LIMITS = 2,
+   /* Force size limits (ignore always_inline).  This is used for
+      recrusive inlining where always_inline may lead to inline bombs
+      and technically it is non-sential anyway.  */
+   CAN_INLINE_FORCE_LIMITS = 4,
+   /* Report decision to dump file.  */
+   CAN_INLINE_REPORT = 8,
+ };
+ 
  /* Decide if we can inline the edge and possibly update
     inline_failed reason.  
     We check whether inlining is possible at all and whether
!    caller growth limits allow doing so.  */
  
  static bool
! can_inline_edge_by_limits_p (struct cgraph_edge *e, int flags)
  {
    gcc_checking_assert (e->inline_failed);
  
    if (cgraph_inline_failed_type (e->inline_failed) == CIF_FINAL_ERROR)
      {
!       if (flags & CAN_INLINE_REPORT)
          report_inline_failed_reason (e);
        return false;
      }
*************** can_inline_edge_by_limits_p (struct cgra
*** 474,483 ****
    tree callee_tree
      = callee ? DECL_FUNCTION_SPECIFIC_OPTIMIZATION (callee->decl) : NULL;
    /* Check if caller growth allows the inlining.  */
!   if (!DECL_DISREGARD_INLINE_LIMITS (callee->decl)
!       && !disregard_limits
!       && !lookup_attribute ("flatten",
!      		 DECL_ATTRIBUTES (caller->decl))
        && !caller_growth_limits (e))
      inlinable = false;
    else if (callee->externally_visible
--- 483,493 ----
    tree callee_tree
      = callee ? DECL_FUNCTION_SPECIFIC_OPTIMIZATION (callee->decl) : NULL;
    /* Check if caller growth allows the inlining.  */
!   if (!(flags & CAN_INLINE_DISREGARD_LIMITS)
!       && ((flags & CAN_INLINE_FORCE_LIMITS)
! 	  || (!DECL_DISREGARD_INLINE_LIMITS (callee->decl)
! 	      && !lookup_attribute ("flatten",
! 			 DECL_ATTRIBUTES (caller->decl))))
        && !caller_growth_limits (e))
      inlinable = false;
    else if (callee->externally_visible
*************** can_inline_edge_by_limits_p (struct cgra
*** 505,511 ****
  	to inline library always_inline functions. See PR65873.
  	Disable the check for early inlining for now until better solution
  	is found.  */
!      if (always_inline && early)
  	;
        /* There are some options that change IL semantics which means
           we cannot inline in these cases for correctness reason.
--- 515,521 ----
  	to inline library always_inline functions. See PR65873.
  	Disable the check for early inlining for now until better solution
  	is found.  */
!      if (always_inline && (flags & CAN_INLINE_EARLY))
  	;
        /* There are some options that change IL semantics which means
           we cannot inline in these cases for correctness reason.
*************** can_inline_edge_by_limits_p (struct cgra
*** 541,547 ****
  	      /* When devirtualization is disabled for callee, it is not safe
  		 to inline it as we possibly mangled the type info.
  		 Allow early inlining of always inlines.  */
! 	      || (!early && check_maybe_down (flag_devirtualize)))
  	{
  	  e->inline_failed = CIF_OPTIMIZATION_MISMATCH;
  	  inlinable = false;
--- 551,557 ----
  	      /* When devirtualization is disabled for callee, it is not safe
  		 to inline it as we possibly mangled the type info.
  		 Allow early inlining of always inlines.  */
! 	      || (!(flags & CAN_INLINE_EARLY) && check_maybe_down (flag_devirtualize)))
  	{
  	  e->inline_failed = CIF_OPTIMIZATION_MISMATCH;
  	  inlinable = false;
*************** can_inline_edge_by_limits_p (struct cgra
*** 610,616 ****
  
      }
  
!   if (!inlinable && report)
      report_inline_failed_reason (e);
    return inlinable;
  }
--- 620,626 ----
  
      }
  
!   if (!inlinable && (flags & CAN_INLINE_REPORT))
      report_inline_failed_reason (e);
    return inlinable;
  }
*************** can_early_inline_edge_p (struct cgraph_e
*** 654,660 ****
      return false;
  
    if (!can_inline_edge_p (e, true, true)
!       || !can_inline_edge_by_limits_p (e, true, false, true))
      return false;
    return true;
  }
--- 664,670 ----
      return false;
  
    if (!can_inline_edge_p (e, true, true)
!       || !can_inline_edge_by_limits_p (e, CAN_INLINE_EARLY | CAN_INLINE_REPORT))
      return false;
    return true;
  }
*************** want_inline_self_recursive_call_p (struc
*** 1070,1075 ****
--- 1080,1090 ----
  	  want_inline = false;
  	}
      }
+   if (!can_inline_edge_by_limits_p (edge, CAN_INLINE_FORCE_LIMITS | CAN_INLINE_REPORT))
+     {
+       reason = "inline limits exceeded for always_inline function";
+       want_inline = false;
+     }
    if (!want_inline && dump_enabled_p ())
      dump_printf_loc (MSG_MISSED_OPTIMIZATION, edge->call_stmt,
  		     "   not inlining recursively: %s\n", reason);
*************** check_callers (struct cgraph_node *node,
*** 1093,1099 ****
  	return true;
        if (e->recursive_p ())
  	return true;
!       if (!can_inline_edge_by_limits_p (e, true))
  	return true;
        /* Inlining large functions to large loop depth is often harmful because
  	 of register pressure it implies.  */
--- 1108,1114 ----
  	return true;
        if (e->recursive_p ())
  	return true;
!       if (!can_inline_edge_by_limits_p (e, CAN_INLINE_REPORT))
  	return true;
        /* Inlining large functions to large loop depth is often harmful because
  	 of register pressure it implies.  */
*************** update_caller_keys (edge_heap_t *heap, s
*** 1513,1519 ****
  	  {
  	    if (can_inline_edge_p (edge, false)
  		&& want_inline_small_function_p (edge, false)
! 		&& can_inline_edge_by_limits_p (edge, false))
  	      update_edge_key (heap, edge);
  	    else if (edge->aux)
  	      {
--- 1528,1534 ----
  	  {
  	    if (can_inline_edge_p (edge, false)
  		&& want_inline_small_function_p (edge, false)
! 		&& can_inline_edge_by_limits_p (edge, 0))
  	      update_edge_key (heap, edge);
  	    else if (edge->aux)
  	      {
*************** update_callee_keys (edge_heap_t *heap, s
*** 1578,1584 ****
  	  {
  	    if (can_inline_edge_p (e, false)
  		&& want_inline_small_function_p (e, false)
! 		&& can_inline_edge_by_limits_p (e, false))
  	      {
  		gcc_checking_assert (check_inlinability || can_inline_edge_p (e, false));
  		gcc_checking_assert (check_inlinability || e->aux);
--- 1593,1599 ----
  	  {
  	    if (can_inline_edge_p (e, false)
  		&& want_inline_small_function_p (e, false)
! 		&& can_inline_edge_by_limits_p (e, 0))
  	      {
  		gcc_checking_assert (check_inlinability || can_inline_edge_p (e, false));
  		gcc_checking_assert (check_inlinability || e->aux);
*************** recursive_inlining (struct cgraph_edge *
*** 1681,1687 ****
        struct cgraph_node *cnode, *dest = curr->callee;
  
        if (!can_inline_edge_p (curr, true)
! 	  || !can_inline_edge_by_limits_p (curr, true))
  	continue;
  
        /* MASTER_CLONE is produced in the case we already started modified
--- 1696,1702 ----
        struct cgraph_node *cnode, *dest = curr->callee;
  
        if (!can_inline_edge_p (curr, true)
! 	  || !can_inline_edge_by_limits_p (curr, CAN_INLINE_REPORT | CAN_INLINE_FORCE_LIMITS))
  	continue;
  
        /* MASTER_CLONE is produced in the case we already started modified
*************** add_new_edges_to_heap (edge_heap_t *heap
*** 1808,1814 ****
        if (edge->inline_failed
  	  && can_inline_edge_p (edge, true)
  	  && want_inline_small_function_p (edge, true)
! 	  && can_inline_edge_by_limits_p (edge, true))
          edge->aux = heap->insert (edge_badness (edge, false), edge);
      }
  }
--- 1823,1829 ----
        if (edge->inline_failed
  	  && can_inline_edge_p (edge, true)
  	  && want_inline_small_function_p (edge, true)
! 	  && can_inline_edge_by_limits_p (edge, CAN_INLINE_REPORT))
          edge->aux = heap->insert (edge_badness (edge, false), edge);
      }
  }
*************** speculation_useful_p (struct cgraph_edge
*** 1872,1878 ****
      return false;
    /* For overwritable targets there is not much to do.  */
    if (!can_inline_edge_p (e, false)
!       || !can_inline_edge_by_limits_p (e, false, true))
      return false;
    /* OK, speculation seems interesting.  */
    return true;
--- 1887,1893 ----
      return false;
    /* For overwritable targets there is not much to do.  */
    if (!can_inline_edge_p (e, false)
!       || !can_inline_edge_by_limits_p (e, CAN_INLINE_DISREGARD_LIMITS))
      return false;
    /* OK, speculation seems interesting.  */
    return true;
*************** inline_small_functions (void)
*** 2046,2052 ****
  	      && !edge->aux
  	      && can_inline_edge_p (edge, true)
  	      && want_inline_small_function_p (edge, true)
! 	      && can_inline_edge_by_limits_p (edge, true)
  	      && edge->inline_failed)
  	    {
  	      gcc_assert (!edge->aux);
--- 2061,2067 ----
  	      && !edge->aux
  	      && can_inline_edge_p (edge, true)
  	      && want_inline_small_function_p (edge, true)
! 	      && can_inline_edge_by_limits_p (edge, CAN_INLINE_REPORT)
  	      && edge->inline_failed)
  	    {
  	      gcc_assert (!edge->aux);
*************** inline_small_functions (void)
*** 2151,2157 ****
  	}
  
        if (!can_inline_edge_p (edge, true)
! 	  || !can_inline_edge_by_limits_p (edge, true))
  	{
  	  resolve_noninline_speculation (&edge_heap, edge);
  	  continue;
--- 2166,2172 ----
  	}
  
        if (!can_inline_edge_p (edge, true)
! 	  || !can_inline_edge_by_limits_p (edge, CAN_INLINE_REPORT))
  	{
  	  resolve_noninline_speculation (&edge_heap, edge);
  	  continue;
*************** inline_small_functions (void)
*** 2217,2222 ****
--- 2232,2249 ----
  	{
  	  if (where->inlined_to)
  	    where = where->inlined_to;
+ 
+ 	  /* Disable always_inline on self recursive functions.
+ 	     This prevents some inlining bombs such as one in PR113291
+ 	     from exploding.
+ 	     It is not enough to stop inlining in self recursive always_inlines
+ 	     since they may grow large enough so always inlining them even
+ 	     with recursin depth 0 is too much.
+ 
+ 	     All sane uses of always_inline should be handled during
+ 	     early optimizations.  */
+ 	  DECL_DISREGARD_INLINE_LIMITS (where->decl) = false;
+ 
  	  if (!recursive_inlining (edge,
  				   opt_for_fn (edge->caller->decl,
  					       flag_indirect_inlining)
*************** flatten_function (struct cgraph_node *no
*** 2387,2393 ****
  	 too.  */
        if (!early
  	  ? !can_inline_edge_p (e, true)
! 	    && !can_inline_edge_by_limits_p (e, true)
  	  : !can_early_inline_edge_p (e))
  	continue;
  
--- 2414,2420 ----
  	 too.  */
        if (!early
  	  ? !can_inline_edge_p (e, true)
! 	    && !can_inline_edge_by_limits_p (e, CAN_INLINE_REPORT)
  	  : !can_early_inline_edge_p (e))
  	continue;
  
*************** inline_to_all_callers_1 (struct cgraph_n
*** 2445,2451 ****
        struct cgraph_node *caller = node->callers->caller;
  
        if (!can_inline_edge_p (node->callers, true)
! 	  || !can_inline_edge_by_limits_p (node->callers, true)
  	  || node->callers->recursive_p ())
  	{
  	  if (dump_file)
--- 2472,2478 ----
        struct cgraph_node *caller = node->callers->caller;
  
        if (!can_inline_edge_p (node->callers, true)
! 	  || !can_inline_edge_by_limits_p (node->callers, CAN_INLINE_REPORT)
  	  || node->callers->recursive_p ())
  	{
  	  if (dump_file)
diff -Nrcpad gcc-13.3.0/gcc/ipa-modref.cc gcc-13.4.0/gcc/ipa-modref.cc
*** gcc-13.3.0/gcc/ipa-modref.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/ipa-modref.cc	Thu Jun  5 16:02:59 2025
*************** modref_summary::useful_p (int ecf_flags,
*** 332,338 ****
    if (check_flags
        && remove_useless_eaf_flags (static_chain_flags, ecf_flags, false))
      return true;
!   if (ecf_flags & (ECF_CONST | ECF_NOVOPS))
      return ((!side_effects || !nondeterministic)
  	    && (ecf_flags & ECF_LOOPING_CONST_OR_PURE));
    if (loads && !loads->every_base)
--- 332,338 ----
    if (check_flags
        && remove_useless_eaf_flags (static_chain_flags, ecf_flags, false))
      return true;
!   if (ecf_flags & ECF_CONST)
      return ((!side_effects || !nondeterministic)
  	    && (ecf_flags & ECF_LOOPING_CONST_OR_PURE));
    if (loads && !loads->every_base)
*************** modref_access_analysis::merge_call_side_
*** 1261,1267 ****
    int flags = gimple_call_flags (call);
  
    /* Nothing to do for non-looping cont functions.  */
!   if ((flags & (ECF_CONST | ECF_NOVOPS))
        && !(flags & ECF_LOOPING_CONST_OR_PURE))
      return false;
  
--- 1261,1267 ----
    int flags = gimple_call_flags (call);
  
    /* Nothing to do for non-looping cont functions.  */
!   if ((flags & ECF_CONST)
        && !(flags & ECF_LOOPING_CONST_OR_PURE))
      return false;
  
*************** modref_access_analysis::merge_call_side_
*** 1274,1280 ****
    /* Merge side effects and non-determinism.
       PURE/CONST flags makes functions deterministic and if there is
       no LOOPING_CONST_OR_PURE they also have no side effects.  */
!   if (!(flags & (ECF_CONST | ECF_NOVOPS | ECF_PURE))
        || (flags & ECF_LOOPING_CONST_OR_PURE))
      {
        if (!m_summary->side_effects && callee_summary->side_effects)
--- 1274,1280 ----
    /* Merge side effects and non-determinism.
       PURE/CONST flags makes functions deterministic and if there is
       no LOOPING_CONST_OR_PURE they also have no side effects.  */
!   if (!(flags & (ECF_CONST | ECF_PURE))
        || (flags & ECF_LOOPING_CONST_OR_PURE))
      {
        if (!m_summary->side_effects && callee_summary->side_effects)
*************** modref_access_analysis::process_fnspec (
*** 1463,1469 ****
  
    /* PURE/CONST flags makes functions deterministic and if there is
       no LOOPING_CONST_OR_PURE they also have no side effects.  */
!   if (!(flags & (ECF_CONST | ECF_NOVOPS | ECF_PURE))
        || (flags & ECF_LOOPING_CONST_OR_PURE)
        || (cfun->can_throw_non_call_exceptions
  	  && stmt_could_throw_p (cfun, call)))
--- 1463,1469 ----
  
    /* PURE/CONST flags makes functions deterministic and if there is
       no LOOPING_CONST_OR_PURE they also have no side effects.  */
!   if (!(flags & (ECF_CONST | ECF_PURE))
        || (flags & ECF_LOOPING_CONST_OR_PURE)
        || (cfun->can_throw_non_call_exceptions
  	  && stmt_could_throw_p (cfun, call)))
*************** modref_access_analysis::analyze_call (gc
*** 1602,1613 ****
        print_gimple_stmt (dump_file, stmt, 0);
      }
  
!   if ((flags & (ECF_CONST | ECF_NOVOPS))
        && !(flags & ECF_LOOPING_CONST_OR_PURE))
      {
        if (dump_file)
  	fprintf (dump_file,
! 		 " - ECF_CONST | ECF_NOVOPS, ignoring all stores and all loads "
  		 "except for args.\n");
        return;
      }
--- 1602,1613 ----
        print_gimple_stmt (dump_file, stmt, 0);
      }
  
!   if ((flags & ECF_CONST)
        && !(flags & ECF_LOOPING_CONST_OR_PURE))
      {
        if (dump_file)
  	fprintf (dump_file,
! 		 " - ECF_CONST, ignoring all stores and all loads "
  		 "except for args.\n");
        return;
      }
*************** modref_access_analysis::analyze_call (gc
*** 1622,1628 ****
        if (dump_file)
  	fprintf (dump_file, gimple_call_internal_p (stmt)
  		 ? " - Internal call" : " - Indirect call.\n");
!       process_fnspec (stmt);
        return;
      }
    /* We only need to handle internal calls in IPA mode.  */
--- 1622,1634 ----
        if (dump_file)
  	fprintf (dump_file, gimple_call_internal_p (stmt)
  		 ? " - Internal call" : " - Indirect call.\n");
!       if (flags & ECF_NOVOPS)
!         {
! 	  set_side_effects ();
! 	  set_nondeterministic ();
!         }
!       else
! 	process_fnspec (stmt);
        return;
      }
    /* We only need to handle internal calls in IPA mode.  */
*************** modref_access_analysis::analyze_store (g
*** 1739,1746 ****
      t->record_access_lto (t->m_summary_lto->stores, &r, a);
    if (t->m_always_executed
        && a.useful_for_kill_p ()
!       && (!cfun->can_throw_non_call_exceptions
! 	  || !stmt_could_throw_p (cfun, stmt)))
      {
        if (dump_file)
  	fprintf (dump_file, "   - Recording kill\n");
--- 1745,1751 ----
      t->record_access_lto (t->m_summary_lto->stores, &r, a);
    if (t->m_always_executed
        && a.useful_for_kill_p ()
!       && !stmt_could_throw_p (cfun, stmt))
      {
        if (dump_file)
  	fprintf (dump_file, "   - Recording kill\n");
*************** modref_eaf_analysis::analyze_ssa_name (t
*** 2569,2576 ****
  		    int call_flags = deref_flags
  			    (gimple_call_arg_flags (call, i), ignore_stores);
  		    if (!ignore_retval && !(call_flags & EAF_UNUSED)
! 			&& !(call_flags & EAF_NOT_RETURNED_DIRECTLY)
! 			&& !(call_flags & EAF_NOT_RETURNED_INDIRECTLY))
  		      merge_call_lhs_flags (call, i, name, false, true);
  		    if (ecf_flags & (ECF_CONST | ECF_NOVOPS))
  		      m_lattice[index].merge_direct_load ();
--- 2574,2583 ----
  		    int call_flags = deref_flags
  			    (gimple_call_arg_flags (call, i), ignore_stores);
  		    if (!ignore_retval && !(call_flags & EAF_UNUSED)
! 			&& (call_flags & (EAF_NOT_RETURNED_DIRECTLY
! 				       	  | EAF_NOT_RETURNED_INDIRECTLY))
! 			    != (EAF_NOT_RETURNED_DIRECTLY
! 				| EAF_NOT_RETURNED_INDIRECTLY))
  		      merge_call_lhs_flags (call, i, name, false, true);
  		    if (ecf_flags & (ECF_CONST | ECF_NOVOPS))
  		      m_lattice[index].merge_direct_load ();
*************** modref_eaf_analysis::analyze_ssa_name (t
*** 2600,2607 ****
  		 is used arbitrarily.  */
  	      if (memory_access_to (gimple_assign_rhs1 (assign), name))
  		m_lattice[index].merge (deref_flags (0, false));
  	      /* Handle *name = *exp.  */
! 	      else if (memory_access_to (gimple_assign_lhs (assign), name))
  		m_lattice[index].merge_direct_store ();
  	    }
  	  /* Handle lhs = *name.  */
--- 2607,2615 ----
  		 is used arbitrarily.  */
  	      if (memory_access_to (gimple_assign_rhs1 (assign), name))
  		m_lattice[index].merge (deref_flags (0, false));
+ 
  	      /* Handle *name = *exp.  */
! 	      if (memory_access_to (gimple_assign_lhs (assign), name))
  		m_lattice[index].merge_direct_store ();
  	    }
  	  /* Handle lhs = *name.  */
*************** analyze_parms (modref_summary *summary,
*** 2965,2971 ****
  		summary->arg_flags.safe_grow_cleared (count, true);
  	      summary->arg_flags[parm_index] = EAF_UNUSED;
  	    }
! 	  else if (summary_lto)
  	    {
  	      if (parm_index >= summary_lto->arg_flags.length ())
  		summary_lto->arg_flags.safe_grow_cleared (count, true);
--- 2973,2979 ----
  		summary->arg_flags.safe_grow_cleared (count, true);
  	      summary->arg_flags[parm_index] = EAF_UNUSED;
  	    }
! 	  if (summary_lto)
  	    {
  	      if (parm_index >= summary_lto->arg_flags.length ())
  		summary_lto->arg_flags.safe_grow_cleared (count, true);
*************** analyze_parms (modref_summary *summary,
*** 3000,3005 ****
--- 3008,3016 ----
  		     (past, ecf_flags,
  		      VOID_TYPE_P (TREE_TYPE
  			  (TREE_TYPE (current_function_decl))));
+ 	  /* Store merging can produce reads when combining together multiple
+ 	     bitfields.  See PR111613.  */
+ 	  past &= ~(EAF_NO_DIRECT_READ | EAF_NO_INDIRECT_READ);
  	  if (dump_file && (flags | past) != flags && !(flags & EAF_UNUSED))
  	    {
  	      fprintf (dump_file,
*************** analyze_parms (modref_summary *summary,
*** 3021,3027 ****
  		summary->arg_flags.safe_grow_cleared (count, true);
  	      summary->arg_flags[parm_index] = flags;
  	    }
! 	  else if (summary_lto)
  	    {
  	      if (parm_index >= summary_lto->arg_flags.length ())
  		summary_lto->arg_flags.safe_grow_cleared (count, true);
--- 3032,3038 ----
  		summary->arg_flags.safe_grow_cleared (count, true);
  	      summary->arg_flags[parm_index] = flags;
  	    }
! 	  if (summary_lto)
  	    {
  	      if (parm_index >= summary_lto->arg_flags.length ())
  		summary_lto->arg_flags.safe_grow_cleared (count, true);
*************** analyze_function (bool ipa)
*** 3284,3290 ****
  		    fprintf (dump_file, "  Flags for param %i improved:",
  			     (int)i);
  		  else
! 		    gcc_unreachable ();
  		  dump_eaf_flags (dump_file, old_flags, false);
  		  fprintf (dump_file, " -> ");
  		  dump_eaf_flags (dump_file, new_flags, true);
--- 3295,3302 ----
  		    fprintf (dump_file, "  Flags for param %i improved:",
  			     (int)i);
  		  else
! 		    fprintf (dump_file, "  Flags for param %i changed:",
! 			     (int)i);
  		  dump_eaf_flags (dump_file, old_flags, false);
  		  fprintf (dump_file, " -> ");
  		  dump_eaf_flags (dump_file, new_flags, true);
*************** analyze_function (bool ipa)
*** 3300,3306 ****
  		  || (summary->retslot_flags & EAF_UNUSED))
  		fprintf (dump_file, "  Flags for retslot improved:");
  	      else
! 		gcc_unreachable ();
  	      dump_eaf_flags (dump_file, past_retslot_flags, false);
  	      fprintf (dump_file, " -> ");
  	      dump_eaf_flags (dump_file, summary->retslot_flags, true);
--- 3312,3318 ----
  		  || (summary->retslot_flags & EAF_UNUSED))
  		fprintf (dump_file, "  Flags for retslot improved:");
  	      else
! 		fprintf (dump_file, "  Flags for retslot changed:");
  	      dump_eaf_flags (dump_file, past_retslot_flags, false);
  	      fprintf (dump_file, " -> ");
  	      dump_eaf_flags (dump_file, summary->retslot_flags, true);
*************** analyze_function (bool ipa)
*** 3315,3321 ****
  		  || (summary->static_chain_flags & EAF_UNUSED))
  		fprintf (dump_file, "  Flags for static chain improved:");
  	      else
! 		gcc_unreachable ();
  	      dump_eaf_flags (dump_file, past_static_chain_flags, false);
  	      fprintf (dump_file, " -> ");
  	      dump_eaf_flags (dump_file, summary->static_chain_flags, true);
--- 3327,3333 ----
  		  || (summary->static_chain_flags & EAF_UNUSED))
  		fprintf (dump_file, "  Flags for static chain improved:");
  	      else
! 		fprintf (dump_file, "  Flags for static chain changed:");
  	      dump_eaf_flags (dump_file, past_static_chain_flags, false);
  	      fprintf (dump_file, " -> ");
  	      dump_eaf_flags (dump_file, summary->static_chain_flags, true);
*************** propagate_unknown_call (cgraph_node *nod
*** 4508,4514 ****
        return changed;
      }
  
!   if (!(ecf_flags & (ECF_CONST | ECF_NOVOPS | ECF_PURE))
        || (ecf_flags & ECF_LOOPING_CONST_OR_PURE)
        || nontrivial_scc)
      {
--- 4520,4526 ----
        return changed;
      }
  
!   if (!(ecf_flags & (ECF_CONST | ECF_PURE))
        || (ecf_flags & ECF_LOOPING_CONST_OR_PURE)
        || nontrivial_scc)
      {
*************** modref_propagate_in_scc (cgraph_node *co
*** 4722,4728 ****
  	      struct cgraph_node *callee;
  
  	      if (!callee_edge->inline_failed
! 		 || ((flags & (ECF_CONST | ECF_NOVOPS))
  		     && !(flags & ECF_LOOPING_CONST_OR_PURE)))
  		continue;
  
--- 4734,4740 ----
  	      struct cgraph_node *callee;
  
  	      if (!callee_edge->inline_failed
! 		 || ((flags & ECF_CONST)
  		     && !(flags & ECF_LOOPING_CONST_OR_PURE)))
  		continue;
  
*************** modref_propagate_flags_in_scc (cgraph_no
*** 5145,5152 ****
  	    {
  	      escape_summary *sum = escape_summaries->get (e);
  
! 	      if (!sum || (e->indirect_info->ecf_flags
! 			   & (ECF_CONST | ECF_NOVOPS)))
  		continue;
  
  	      changed |= modref_merge_call_site_flags
--- 5157,5164 ----
  	    {
  	      escape_summary *sum = escape_summaries->get (e);
  
! 	      if (!sum || ((e->indirect_info->ecf_flags & ECF_CONST)
! 		  && !(e->indirect_info->ecf_flags & ECF_LOOPING_CONST_OR_PURE)))
  		continue;
  
  	      changed |= modref_merge_call_site_flags
*************** modref_propagate_flags_in_scc (cgraph_no
*** 5171,5178 ****
  	      modref_summary_lto *callee_summary_lto = NULL;
  	      struct cgraph_node *callee;
  
! 	      if (ecf_flags & (ECF_CONST | ECF_NOVOPS)
! 		  || !callee_edge->inline_failed)
  		continue;
  
  	      /* Get the callee and its summary.  */
--- 5183,5190 ----
  	      modref_summary_lto *callee_summary_lto = NULL;
  	      struct cgraph_node *callee;
  
! 	      if ((ecf_flags & ECF_CONST)
! 		  && !(ecf_flags & ECF_LOOPING_CONST_OR_PURE))
  		continue;
  
  	      /* Get the callee and its summary.  */
*************** ipa_merge_modref_summary_after_inlining
*** 5270,5276 ****
  
    if (!callee_info && to_info)
      {
!       if (!(flags & (ECF_CONST | ECF_NOVOPS)))
  	to_info->loads->collapse ();
        if (!ignore_stores)
  	to_info->stores->collapse ();
--- 5282,5288 ----
  
    if (!callee_info && to_info)
      {
!       if (!(flags & (ECF_CONST | ECF_PURE | ECF_NOVOPS)))
  	to_info->loads->collapse ();
        if (!ignore_stores)
  	to_info->stores->collapse ();
*************** ipa_merge_modref_summary_after_inlining
*** 5285,5291 ****
    /* Merge side effects and non-determinism.
       PURE/CONST flags makes functions deterministic and if there is
       no LOOPING_CONST_OR_PURE they also have no side effects.  */
!   if (!(flags & (ECF_CONST | ECF_NOVOPS | ECF_PURE))
        || (flags & ECF_LOOPING_CONST_OR_PURE))
      {
        if (to_info)
--- 5297,5303 ----
    /* Merge side effects and non-determinism.
       PURE/CONST flags makes functions deterministic and if there is
       no LOOPING_CONST_OR_PURE they also have no side effects.  */
!   if (!(flags & (ECF_CONST | ECF_PURE))
        || (flags & ECF_LOOPING_CONST_OR_PURE))
      {
        if (to_info)
diff -Nrcpad gcc-13.3.0/gcc/ipa-prop.cc gcc-13.4.0/gcc/ipa-prop.cc
*** gcc-13.3.0/gcc/ipa-prop.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/ipa-prop.cc	Thu Jun  5 16:02:59 2025
*************** unadjusted_ptr_and_unit_offset (tree op,
*** 1267,1275 ****
      {
        if (TREE_CODE (op) == ADDR_EXPR)
  	{
! 	  poly_int64 extra_offset = 0;
  	  tree base = get_addr_base_and_unit_offset (TREE_OPERAND (op, 0),
! 						     &offset);
  	  if (!base)
  	    {
  	      base = get_base_address (TREE_OPERAND (op, 0));
--- 1267,1275 ----
      {
        if (TREE_CODE (op) == ADDR_EXPR)
  	{
! 	  poly_int64 extra_offset;
  	  tree base = get_addr_base_and_unit_offset (TREE_OPERAND (op, 0),
! 						     &extra_offset);
  	  if (!base)
  	    {
  	      base = get_base_address (TREE_OPERAND (op, 0));
diff -Nrcpad gcc-13.3.0/gcc/ipa-sra.cc gcc-13.4.0/gcc/ipa-sra.cc
*** gcc-13.3.0/gcc/ipa-sra.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/ipa-sra.cc	Thu Jun  5 16:02:59 2025
*************** enum acc_prop_kind {ACC_PROP_DONT, ACC_P
*** 3579,3593 ****
  
  /* Attempt to propagate all definite accesses from ARG_DESC to PARAM_DESC,
     (which belongs to CALLER) if they would not violate some constraint there.
!    If successful, return NULL, otherwise return the string reason for failure
!    (which can be written to the dump file).  DELTA_OFFSET is the known offset
!    of the actual argument withing the formal parameter (so of ARG_DESCS within
!    PARAM_DESCS), ARG_SIZE is the size of the actual argument or zero, if not
!    known. In case of success, set *CHANGE_P to true if propagation actually
!    changed anything.  */
  
  static const char *
! pull_accesses_from_callee (cgraph_node *caller, isra_param_desc *param_desc,
  			   isra_param_desc *arg_desc,
  			   unsigned delta_offset, unsigned arg_size,
  			   bool *change_p)
--- 3579,3597 ----
  
  /* Attempt to propagate all definite accesses from ARG_DESC to PARAM_DESC,
     (which belongs to CALLER) if they would not violate some constraint there.
!    CALLER_IPCP_TS describes the caller, PARAM_IDX is the index of the parameter
!    described by PARAM_DESC.  If successful, return NULL, otherwise return the
!    string reason for failure (which can be written to the dump file).
!    DELTA_OFFSET is the known offset of the actual argument withing the formal
!    parameter (so of ARG_DESCS within PARAM_DESCS), ARG_SIZE is the size of the
!    actual argument or zero, if not known. In case of success, set *CHANGE_P to
!    true if propagation actually changed anything.  */
  
  static const char *
! pull_accesses_from_callee (cgraph_node *caller,
! 			   ipcp_transformation *caller_ipcp_ts,
! 			   int param_idx,
! 			   isra_param_desc *param_desc,
  			   isra_param_desc *arg_desc,
  			   unsigned delta_offset, unsigned arg_size,
  			   bool *change_p)
*************** pull_accesses_from_callee (cgraph_node *
*** 3612,3617 ****
--- 3616,3632 ----
  	continue;
  
        unsigned offset = argacc->unit_offset + delta_offset;
+ 
+       if (caller_ipcp_ts && !AGGREGATE_TYPE_P (argacc->type))
+ 	{
+ 	  ipa_argagg_value_list avl (caller_ipcp_ts);
+ 	  tree value = avl.get_value (param_idx, offset);
+ 	  if (value && ((tree_to_uhwi (TYPE_SIZE (TREE_TYPE (value)))
+ 			 / BITS_PER_UNIT)
+ 			!= argacc->unit_size))
+ 	    return " propagated access would conflict with an IPA-CP constant";
+ 	}
+ 
        /* Given that accesses are initially stored according to increasing
  	 offset and decreasing size in case of equal offsets, the following
  	 searches could be written more efficiently if we kept the ordering
*************** param_splitting_across_edge (cgraph_edge
*** 3720,3725 ****
--- 3735,3742 ----
    cgraph_node *callee = cs->callee->function_symbol (&availability);
    isra_func_summary *from_ifs = func_sums->get (cs->caller);
    gcc_checking_assert (from_ifs && from_ifs->m_parameters);
+   ipcp_transformation *caller_ipcp_ts
+     = ipcp_get_transformation_summary (cs->caller);
  
    isra_call_summary *csum = call_sums->get (cs);
    gcc_checking_assert (csum);
*************** param_splitting_across_edge (cgraph_edge
*** 3790,3797 ****
  	  else
  	    {
  	      const char *pull_failure
! 		= pull_accesses_from_callee (cs->caller, param_desc, arg_desc,
! 					     0, 0, &res);
  	      if (pull_failure)
  		{
  		  if (dump_file && (dump_flags & TDF_DETAILS))
--- 3807,3814 ----
  	  else
  	    {
  	      const char *pull_failure
! 		= pull_accesses_from_callee (cs->caller, caller_ipcp_ts, idx,
! 					     param_desc, arg_desc, 0, 0, &res);
  	      if (pull_failure)
  		{
  		  if (dump_file && (dump_flags & TDF_DETAILS))
*************** param_splitting_across_edge (cgraph_edge
*** 3852,3858 ****
  	  else
  	    {
  	      const char *pull_failure
! 		= pull_accesses_from_callee (cs->caller, param_desc, arg_desc,
  					     ipf->unit_offset,
  					     ipf->unit_size, &res);
  	      if (pull_failure)
--- 3869,3876 ----
  	  else
  	    {
  	      const char *pull_failure
! 		= pull_accesses_from_callee (cs->caller, caller_ipcp_ts, idx,
! 					     param_desc, arg_desc,
  					     ipf->unit_offset,
  					     ipf->unit_size, &res);
  	      if (pull_failure)
diff -Nrcpad gcc-13.3.0/gcc/ipa-visibility.cc gcc-13.4.0/gcc/ipa-visibility.cc
*** gcc-13.3.0/gcc/ipa-visibility.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/ipa-visibility.cc	Thu Jun  5 16:02:59 2025
*************** non_local_p (struct cgraph_node *node, v
*** 102,108 ****
  	   && !node->externally_visible
  	   && !node->used_from_other_partition
  	   && !node->in_other_partition
! 	   && node->get_availability () >= AVAIL_AVAILABLE);
  }
  
  /* Return true when function can be marked local.  */
--- 102,110 ----
  	   && !node->externally_visible
  	   && !node->used_from_other_partition
  	   && !node->in_other_partition
! 	   && node->get_availability () >= AVAIL_AVAILABLE
! 	   && !DECL_STATIC_CONSTRUCTOR (node->decl)
! 	   && !DECL_STATIC_DESTRUCTOR (node->decl));
  }
  
  /* Return true when function can be marked local.  */
*************** cgraph_node::local_p (void)
*** 116,122 ****
       return n->callees->callee->local_p ();
     return !n->call_for_symbol_thunks_and_aliases (non_local_p,
  						  NULL, true);
- 					
  }
  
  /* A helper for comdat_can_be_unshared_p.  */
--- 118,123 ----
diff -Nrcpad gcc-13.3.0/gcc/jit/ChangeLog gcc-13.4.0/gcc/jit/ChangeLog
*** gcc-13.3.0/gcc/jit/ChangeLog	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/jit/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,25 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
+ 2025-02-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-02-07  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR jit/118780
+ 	* jit-playback.cc: Define INCLUDE_DLFCN_H.
+ 	* jit-result.cc: Likewise.
+ 
+ 2024-06-11  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	Backported from master:
+ 	2024-06-11  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR jit/115442
+ 	* jit-recording.cc: Define INCLUDE_SSTREAM before including
+ 	system.h and don't directly incldue sstream.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/gcc/jit/jit-playback.cc gcc-13.4.0/gcc/jit/jit-playback.cc
*** gcc-13.3.0/gcc/jit/jit-playback.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/jit/jit-playback.cc	Thu Jun  5 16:02:59 2025
*************** along with GCC; see the file COPYING3.
*** 20,25 ****
--- 20,27 ----
  
  #include "config.h"
  #define INCLUDE_MUTEX
+ #define INCLUDE_DLFCN_H
+ #include "libgccjit.h"
  #include "system.h"
  #include "coretypes.h"
  #include "target.h"
diff -Nrcpad gcc-13.3.0/gcc/jit/jit-recording.cc gcc-13.4.0/gcc/jit/jit-recording.cc
*** gcc-13.3.0/gcc/jit/jit-recording.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/jit/jit-recording.cc	Thu Jun  5 16:02:59 2025
*************** along with GCC; see the file COPYING3.
*** 19,24 ****
--- 19,25 ----
  <http://www.gnu.org/licenses/>.  */
  
  #include "config.h"
+ #define INCLUDE_SSTREAM
  #include "system.h"
  #include "coretypes.h"
  #include "tm.h"
diff -Nrcpad gcc-13.3.0/gcc/jit/jit-result.cc gcc-13.4.0/gcc/jit/jit-result.cc
*** gcc-13.3.0/gcc/jit/jit-result.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/jit/jit-result.cc	Thu Jun  5 16:02:59 2025
*************** along with GCC; see the file COPYING3.
*** 19,24 ****
--- 19,25 ----
  <http://www.gnu.org/licenses/>.  */
  
  #include "config.h"
+ #define INCLUDE_DLFCN_H
  #include "system.h"
  #include "coretypes.h"
  
diff -Nrcpad gcc-13.3.0/gcc/loop-doloop.cc gcc-13.4.0/gcc/loop-doloop.cc
*** gcc-13.3.0/gcc/loop-doloop.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/loop-doloop.cc	Thu Jun  5 16:02:59 2025
*************** along with GCC; see the file COPYING3.
*** 36,41 ****
--- 36,42 ----
  #include "loop-unroll.h"
  #include "regs.h"
  #include "df.h"
+ #include "targhooks.h"
  
  /* This module is used to modify loops with a determinable number of
     iterations to use special low-overhead looping instructions.
*************** doloop_optimize (class loop *loop)
*** 770,775 ****
--- 771,788 ----
  
      basic_block loop_end = desc->out_edge->src;
      bool fail = bitmap_intersect_p (df_get_live_out (loop_end), modified);
+     /* iv_analysis_loop_init calls df_analyze_loop, which computes just
+        partial df for blocks of the loop only.  The above will catch if
+        any of the modified registers are use inside of the loop body, but
+        it will most likely not have accurate info on registers used
+        at the destination of the out_edge.  We call df_analyze on the
+        whole function at the start of the pass though and iterate only
+        on innermost loops or from innermost loops, so
+        live in on desc->out_edge->dest should be still unmodified from
+        the initial df_analyze.  */
+     if (!fail)
+       fail = bitmap_intersect_p (df_get_live_in (desc->out_edge->dest),
+ 				 modified);
      BITMAP_FREE (modified);
  
      if (fail)
*************** doloop_optimize_loops (void)
*** 795,801 ****
        df_live_set_all_dirty ();
      }
  
!   for (auto loop : loops_list (cfun, 0))
      doloop_optimize (loop);
  
    if (optimize == 1)
--- 808,819 ----
        df_live_set_all_dirty ();
      }
  
!   df_analyze ();
! 
!   for (auto loop : loops_list (cfun,
! 			       targetm.can_use_doloop_p
! 			       == can_use_doloop_if_innermost
! 			       ? LI_ONLY_INNERMOST : LI_FROM_INNERMOST))
      doloop_optimize (loop);
  
    if (optimize == 1)
diff -Nrcpad gcc-13.3.0/gcc/lra-remat.cc gcc-13.4.0/gcc/lra-remat.cc
*** gcc-13.3.0/gcc/lra-remat.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/lra-remat.cc	Thu Jun  5 16:02:59 2025
*************** create_cands (void)
*** 459,465 ****
  	    if (insn2 != NULL 
  		&& dst_regno >= FIRST_PSEUDO_REGISTER
  		&& reg_renumber[dst_regno] < 0
! 		&& BLOCK_FOR_INSN (insn2) == BLOCK_FOR_INSN (insn))
  	      {
  		create_cand (insn2, regno_potential_cand[src_regno].nop,
  			     dst_regno, insn);
--- 459,466 ----
  	    if (insn2 != NULL 
  		&& dst_regno >= FIRST_PSEUDO_REGISTER
  		&& reg_renumber[dst_regno] < 0
! 		&& BLOCK_FOR_INSN (insn2) == BLOCK_FOR_INSN (insn)
! 		&& insn2 == prev_nonnote_nondebug_insn (insn))
  	      {
  		create_cand (insn2, regno_potential_cand[src_regno].nop,
  			     dst_regno, insn);
*************** create_cands (void)
*** 473,481 ****
  	    gcc_assert (REG_P (*id->operand_loc[nop]));
  	    int regno = REGNO (*id->operand_loc[nop]);
  	    gcc_assert (regno >= FIRST_PSEUDO_REGISTER);
! 	    /* If we're setting an unrenumbered pseudo, make a candidate immediately.
! 	       If it's an output reload register, save it for later; the code above
! 	       looks for output reload insns later on.  */
  	    if (reg_renumber[regno] < 0)
  	      create_cand (insn, nop, regno);
  	    else if (regno >= lra_constraint_new_regno_start)
--- 474,483 ----
  	    gcc_assert (REG_P (*id->operand_loc[nop]));
  	    int regno = REGNO (*id->operand_loc[nop]);
  	    gcc_assert (regno >= FIRST_PSEUDO_REGISTER);
! 	    /* If we're setting an unrenumbered pseudo, make a candidate
! 	       immediately.  If it's a potential output reload register, save
! 	       it for later; the code above looks for output reload insns later
! 	       on.  */
  	    if (reg_renumber[regno] < 0)
  	      create_cand (insn, nop, regno);
  	    else if (regno >= lra_constraint_new_regno_start)
diff -Nrcpad gcc-13.3.0/gcc/lto/ChangeLog gcc-13.4.0/gcc/lto/ChangeLog
*** gcc-13.3.0/gcc/lto/ChangeLog	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/lto/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,16 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
+ 2025-05-07  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-02-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR lto/91299
+ 	* lto-symtab.cc (lto_symtab_merge_symbols): Set DECL_EXTERNAL
+ 	only after calling get_availability.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/gcc/lto/lto-symtab.cc gcc-13.4.0/gcc/lto/lto-symtab.cc
*** gcc-13.3.0/gcc/lto/lto-symtab.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/lto/lto-symtab.cc	Thu Jun  5 16:02:59 2025
*************** lto_symtab_merge_symbols (void)
*** 1016,1022 ****
  		  || node->resolution == LDPR_RESOLVED_EXEC
  		  || node->resolution == LDPR_RESOLVED_DYN))
  	    {
- 	      DECL_EXTERNAL (node->decl) = 1;
  	      /* If alias to local symbol was preempted by external definition,
  		 we know it is not pointing to the local symbol.  Remove it.  */
  	      if (node->alias
--- 1016,1021 ----
*************** lto_symtab_merge_symbols (void)
*** 1042,1047 ****
--- 1041,1047 ----
  		      node->remove_all_references ();
  		    }
  		}
+ 	      DECL_EXTERNAL (node->decl) = 1;
  	    }
  
  	  if (!(cnode = dyn_cast <cgraph_node *> (node))
diff -Nrcpad gcc-13.3.0/gcc/lto-cgraph.cc gcc-13.4.0/gcc/lto-cgraph.cc
*** gcc-13.3.0/gcc/lto-cgraph.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/lto-cgraph.cc	Thu Jun  5 16:02:59 2025
*************** lto_symtab_encoder_delete_node (lto_symt
*** 154,160 ****
    last_node = encoder->nodes.pop ();
    if (last_node.node != node)
      {
!       gcc_assert (encoder->map->put (last_node.node, index + 1));
  
        /* Move the last element to the original spot of NODE.  */
        encoder->nodes[index] = last_node;
--- 154,161 ----
    last_node = encoder->nodes.pop ();
    if (last_node.node != node)
      {
!       bool existed = encoder->map->put (last_node.node, index + 1);
!       gcc_assert (existed);
  
        /* Move the last element to the original spot of NODE.  */
        encoder->nodes[index] = last_node;
diff -Nrcpad gcc-13.3.0/gcc/lto-opts.cc gcc-13.4.0/gcc/lto-opts.cc
*** gcc-13.3.0/gcc/lto-opts.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/lto-opts.cc	Thu Jun  5 16:02:59 2025
*************** lto_write_options (void)
*** 82,112 ****
       subject of merging in lto-wrapper.  */
    if (!OPTION_SET_P (flag_pic) && !OPTION_SET_P (flag_pie))
      {
!        append_to_collect_gcc_options (&temporary_obstack, &first_p,
! 				      global_options.x_flag_pic == 2
! 				      ? "-fPIC"
! 				      : global_options.x_flag_pic == 1
! 				      ? "-fpic"
! 				      : global_options.x_flag_pie == 2
! 				      ? "-fPIE"
! 				      : global_options.x_flag_pie == 1
! 				      ? "-fpie"
! 				      : "-fno-pie");
      }
  
    if (!OPTION_SET_P (flag_cf_protection))
      {
!       append_to_collect_gcc_options (
! 	&temporary_obstack, &first_p,
! 	global_options.x_flag_cf_protection == CF_NONE
! 	? "-fcf-protection=none"
! 	: global_options.x_flag_cf_protection == CF_FULL
! 	? "-fcf-protection=full"
! 	: global_options.x_flag_cf_protection == CF_BRANCH
! 	? "-fcf-protection=branch"
! 	: global_options.x_flag_cf_protection == CF_RETURN
! 	? "-fcf-protection=return"
! 	: "");
      }
  
    /* If debug info is enabled append -g.  */
--- 82,113 ----
       subject of merging in lto-wrapper.  */
    if (!OPTION_SET_P (flag_pic) && !OPTION_SET_P (flag_pie))
      {
!       const char *pic = "-fno-pie";
!       if (global_options.x_flag_pie == 2)
! 	pic = "-fPIE";
!       else if (global_options.x_flag_pie == 1)
! 	pic = "-fpie";
!       else if (global_options.x_flag_pic == 2)
! 	pic = "-fPIC";
!       else if (global_options.x_flag_pic == 1)
! 	pic = "-fpic";
!       append_to_collect_gcc_options (&temporary_obstack, &first_p, pic);
      }
  
    if (!OPTION_SET_P (flag_cf_protection))
      {
!       const char *cf_protection = NULL;
!       switch (global_options.x_flag_cf_protection)
! 	{
! 	case CF_NONE: cf_protection = "-fcf-protection=none"; break;
! 	case CF_FULL: cf_protection = "-fcf-protection=full"; break;
! 	case CF_BRANCH: cf_protection = "-fcf-protection=branch"; break;
! 	case CF_RETURN: cf_protection = "-fcf-protection=return"; break;
! 	default: break;
! 	}
!       if (cf_protection)
! 	append_to_collect_gcc_options (&temporary_obstack, &first_p,
! 				       cf_protection);
      }
  
    /* If debug info is enabled append -g.  */
diff -Nrcpad gcc-13.3.0/gcc/m2/ChangeLog gcc-13.4.0/gcc/m2/ChangeLog
*** gcc-13.3.0/gcc/m2/ChangeLog	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/m2/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,15 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-11-09  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* Make-lang.in (m2_OBJS): Add $(BUILD-LIBS-BOOT),
+ 	$(BUILD-COMPILER-BOOT) and $(MC_LIBS).
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/gcc/m2/Make-lang.in gcc-13.4.0/gcc/m2/Make-lang.in
*** gcc-13.3.0/gcc/m2/Make-lang.in	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/m2/Make-lang.in	Thu Jun  5 16:02:59 2025
*************** GM2_LIBS_BOOT     = m2/gm2-compiler-boot
*** 534,540 ****
                      $(GM2-BOOT-O)
  
  m2_OBJS = $(GM2_C_OBJS) m2/gm2-gcc/rtegraph.o \
! 	m2/gm2-compiler-boot/m2flex.o
  
  cc1gm2$(exeext): m2/stage1/cc1gm2$(exeext) $(m2.prev)
  	cp -p $< $@
--- 534,541 ----
                      $(GM2-BOOT-O)
  
  m2_OBJS = $(GM2_C_OBJS) m2/gm2-gcc/rtegraph.o \
! 	m2/gm2-compiler-boot/m2flex.o \
! 	$(BUILD-LIBS-BOOT) $(BUILD-COMPILER-BOOT) $(MC_LIBS)
  
  cc1gm2$(exeext): m2/stage1/cc1gm2$(exeext) $(m2.prev)
  	cp -p $< $@
diff -Nrcpad gcc-13.3.0/gcc/match.pd gcc-13.4.0/gcc/match.pd
*** gcc-13.3.0/gcc/match.pd	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/match.pd	Thu Jun  5 16:02:59 2025
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 2023,2034 ****
    (mult (convert @0) @1)))
  
  /* Narrow integer multiplication by a zero_one_valued_p operand.
!    Multiplication by [0,1] is guaranteed not to overflow.  */
  (simplify
   (convert (mult@0 zero_one_valued_p@1 INTEGER_CST@2))
   (if (INTEGRAL_TYPE_P (type)
        && INTEGRAL_TYPE_P (TREE_TYPE (@0))
!       && TYPE_PRECISION (type) < TYPE_PRECISION (TREE_TYPE (@0)))
    (mult (convert @1) (convert @2))))
  
  /* (X << C) != 0 can be simplified to X, when C is zero_one_valued_p.
--- 2023,2036 ----
    (mult (convert @0) @1)))
  
  /* Narrow integer multiplication by a zero_one_valued_p operand.
!    Multiplication by [0,1] is guaranteed not to overflow except for
!    1bit signed types.  */
  (simplify
   (convert (mult@0 zero_one_valued_p@1 INTEGER_CST@2))
   (if (INTEGRAL_TYPE_P (type)
        && INTEGRAL_TYPE_P (TREE_TYPE (@0))
!       && TYPE_PRECISION (type) < TYPE_PRECISION (TREE_TYPE (@0))
!       && (TYPE_UNSIGNED (type) || TYPE_PRECISION (type) > 1))
    (mult (convert @1) (convert @2))))
  
  /* (X << C) != 0 can be simplified to X, when C is zero_one_valued_p.
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 3558,3564 ****
       out    (le  gt  ge  lt )
   (simplify
    (cmp:c (minmax:c @0 @1) @0)
!   (if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (@0)))
     (out @0 @1))))
  /* MIN (X, 5) == 0 -> X == 0
     MIN (X, 5) == 7 -> false  */
--- 3560,3570 ----
       out    (le  gt  ge  lt )
   (simplify
    (cmp:c (minmax:c @0 @1) @0)
!   (if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (@0))
!        && (!VECTOR_TYPE_P (TREE_TYPE (@0))
! 	   || (VECTOR_TYPE_P (type)
! 	       && (!expand_vec_cmp_expr_p (TREE_TYPE (@0), type, cmp)
! 		   || expand_vec_cmp_expr_p (TREE_TYPE (@0), type, out)))))
     (out @0 @1))))
  /* MIN (X, 5) == 0 -> X == 0
     MIN (X, 5) == 7 -> false  */
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 4477,4511 ****
  /* (c ? a : b) op (c ? d : e)  -->  c ? (a op d) : (b op e) */
   (simplify
    (op (vec_cond:s @0 @1 @2) (vec_cond:s @0 @3 @4))
!   (if (TREE_CODE_CLASS (op) != tcc_comparison
!        || types_match (type, TREE_TYPE (@1))
!        || expand_vec_cond_expr_p (type, TREE_TYPE (@0), ERROR_MARK)
!        || (optimize_vectors_before_lowering_p ()
! 	   /* The following is optimistic on the side of non-support, we are
! 	      missing the legacy vcond{,u,eq} cases.  Do this only when
! 	      lowering will be able to fixup..  */
! 	   && !expand_vec_cond_expr_p (TREE_TYPE (@1),
! 				       TREE_TYPE (@0), ERROR_MARK)))
     (vec_cond @0 (op! @1 @3) (op! @2 @4))))
  
  /* (c ? a : b) op d  -->  c ? (a op d) : (b op d) */
   (simplify
    (op (vec_cond:s @0 @1 @2) @3)
!   (if (TREE_CODE_CLASS (op) != tcc_comparison
!        || types_match (type, TREE_TYPE (@1))
!        || expand_vec_cond_expr_p (type, TREE_TYPE (@0), ERROR_MARK)
!        || (optimize_vectors_before_lowering_p ()
! 	   && !expand_vec_cond_expr_p (TREE_TYPE (@1),
! 				       TREE_TYPE (@0), ERROR_MARK)))
     (vec_cond @0 (op! @1 @3) (op! @2 @3))))
   (simplify
    (op @3 (vec_cond:s @0 @1 @2))
!   (if (TREE_CODE_CLASS (op) != tcc_comparison
!        || types_match (type, TREE_TYPE (@1))
!        || expand_vec_cond_expr_p (type, TREE_TYPE (@0), ERROR_MARK)
!        || (optimize_vectors_before_lowering_p ()
! 	   && !expand_vec_cond_expr_p (TREE_TYPE (@1),
! 				       TREE_TYPE (@0), ERROR_MARK)))
     (vec_cond @0 (op! @3 @1) (op! @3 @2)))))
  
  #if GIMPLE
--- 4483,4520 ----
  /* (c ? a : b) op (c ? d : e)  -->  c ? (a op d) : (b op e) */
   (simplify
    (op (vec_cond:s @0 @1 @2) (vec_cond:s @0 @3 @4))
!   (if (VECTOR_TYPE_P (type)
!        && (TREE_CODE_CLASS (op) != tcc_comparison
! 	   || types_match (type, TREE_TYPE (@1))
! 	   || expand_vec_cond_expr_p (type, TREE_TYPE (@0), ERROR_MARK)
! 	   || (optimize_vectors_before_lowering_p ()
! 	       /* The following is optimistic on the side of non-support, we are
! 		  missing the legacy vcond{,u,eq} cases.  Do this only when
! 		  lowering will be able to fixup..  */
! 	       && !expand_vec_cond_expr_p (TREE_TYPE (@1),
! 					   TREE_TYPE (@0), ERROR_MARK))))
     (vec_cond @0 (op! @1 @3) (op! @2 @4))))
  
  /* (c ? a : b) op d  -->  c ? (a op d) : (b op d) */
   (simplify
    (op (vec_cond:s @0 @1 @2) @3)
!   (if (VECTOR_TYPE_P (type)
!        && (TREE_CODE_CLASS (op) != tcc_comparison
! 	   || types_match (type, TREE_TYPE (@1))
! 	   || expand_vec_cond_expr_p (type, TREE_TYPE (@0), ERROR_MARK)
! 	   || (optimize_vectors_before_lowering_p ()
! 	       && !expand_vec_cond_expr_p (TREE_TYPE (@1),
! 					   TREE_TYPE (@0), ERROR_MARK))))
     (vec_cond @0 (op! @1 @3) (op! @2 @3))))
   (simplify
    (op @3 (vec_cond:s @0 @1 @2))
!   (if (VECTOR_TYPE_P (type)
!        && (TREE_CODE_CLASS (op) != tcc_comparison
! 	   || types_match (type, TREE_TYPE (@1))
! 	   || expand_vec_cond_expr_p (type, TREE_TYPE (@0), ERROR_MARK)
! 	   || (optimize_vectors_before_lowering_p ()
! 	       && !expand_vec_cond_expr_p (TREE_TYPE (@1),
! 					   TREE_TYPE (@0), ERROR_MARK))))
     (vec_cond @0 (op! @3 @1) (op! @3 @2)))))
  
  #if GIMPLE
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 7569,7575 ****
     (IFN_FNMS @0 @1 @2))
    (simplify
     (negate (fmas@3 @0 @1 @2))
!    (if (single_use (@3))
      (IFN_FNMS @0 @1 @2))))
  
   (simplify
--- 7578,7584 ----
     (IFN_FNMS @0 @1 @2))
    (simplify
     (negate (fmas@3 @0 @1 @2))
!    (if (!HONOR_SIGN_DEPENDENT_ROUNDING (type) && single_use (@3))
      (IFN_FNMS @0 @1 @2))))
  
   (simplify
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 7583,7589 ****
    (IFN_FNMA @0 @1 @2))
   (simplify
    (negate (IFN_FMS@3 @0 @1 @2))
!    (if (single_use (@3))
      (IFN_FNMA @0 @1 @2)))
  
   (simplify
--- 7592,7598 ----
    (IFN_FNMA @0 @1 @2))
   (simplify
    (negate (IFN_FMS@3 @0 @1 @2))
!    (if (!HONOR_SIGN_DEPENDENT_ROUNDING (type) && single_use (@3))
      (IFN_FNMA @0 @1 @2)))
  
   (simplify
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 7597,7603 ****
    (IFN_FMS @0 @1 @2))
   (simplify
    (negate (IFN_FNMA@3 @0 @1 @2))
!   (if (single_use (@3))
     (IFN_FMS @0 @1 @2)))
  
   (simplify
--- 7606,7612 ----
    (IFN_FMS @0 @1 @2))
   (simplify
    (negate (IFN_FNMA@3 @0 @1 @2))
!   (if (!HONOR_SIGN_DEPENDENT_ROUNDING (type) && single_use (@3))
     (IFN_FMS @0 @1 @2)))
  
   (simplify
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 7611,7617 ****
    (IFN_FMA @0 @1 @2))
   (simplify
    (negate (IFN_FNMS@3 @0 @1 @2))
!   (if (single_use (@3))
     (IFN_FMA @0 @1 @2))))
  
  /* CLZ simplifications.  */
--- 7620,7626 ----
    (IFN_FMA @0 @1 @2))
   (simplify
    (negate (IFN_FNMS@3 @0 @1 @2))
!   (if (!HONOR_SIGN_DEPENDENT_ROUNDING (type) && single_use (@3))
     (IFN_FMA @0 @1 @2))))
  
  /* CLZ simplifications.  */
diff -Nrcpad gcc-13.3.0/gcc/multiple_target.cc gcc-13.4.0/gcc/multiple_target.cc
*** gcc-13.3.0/gcc/multiple_target.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/multiple_target.cc	Thu Jun  5 16:02:59 2025
*************** create_dispatcher_calls (struct cgraph_n
*** 159,165 ****
  	      symtab_node *source = ref->referring;
  	      source->create_reference (inode, IPA_REF_ALIAS);
  	      if (inode->get_comdat_group ())
! 		source->add_to_same_comdat_group (inode);
  	    }
  	  else
  	    gcc_unreachable ();
--- 159,169 ----
  	      symtab_node *source = ref->referring;
  	      source->create_reference (inode, IPA_REF_ALIAS);
  	      if (inode->get_comdat_group ())
! 		{
! 		  if (source->same_comdat_group)
! 		    source->remove_from_same_comdat_group ();
! 		  source->add_to_same_comdat_group (inode);
! 		}
  	    }
  	  else
  	    gcc_unreachable ();
diff -Nrcpad gcc-13.3.0/gcc/objc/ChangeLog gcc-13.4.0/gcc/objc/ChangeLog
*** gcc-13.3.0/gcc/objc/ChangeLog	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/objc/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/gcc/objcp/ChangeLog gcc-13.4.0/gcc/objcp/ChangeLog
*** gcc-13.3.0/gcc/objcp/ChangeLog	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/objcp/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/gcc/opt-suggestions.cc gcc-13.4.0/gcc/opt-suggestions.cc
*** gcc-13.3.0/gcc/opt-suggestions.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/opt-suggestions.cc	Thu Jun  5 16:02:59 2025
*************** option_proposer::build_option_suggestion
*** 167,175 ****
  	    add_misspelling_candidates (m_option_suggestions, option,
  					opt_text);
  
  	    for (int j = 0; sanitizer_opts[j].name != NULL; ++j)
  	      {
- 		struct cl_option optb;
  		/* -fsanitize=all is not valid, only -fno-sanitize=all.
  		   So don't register the positive misspelling candidates
  		   for it.  */
--- 167,175 ----
  	    add_misspelling_candidates (m_option_suggestions, option,
  					opt_text);
  
+ 	    struct cl_option optb;
  	    for (int j = 0; sanitizer_opts[j].name != NULL; ++j)
  	      {
  		/* -fsanitize=all is not valid, only -fno-sanitize=all.
  		   So don't register the positive misspelling candidates
  		   for it.  */
diff -Nrcpad gcc-13.3.0/gcc/optc-save-gen.awk gcc-13.4.0/gcc/optc-save-gen.awk
*** gcc-13.3.0/gcc/optc-save-gen.awk	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/optc-save-gen.awk	Thu Jun  5 16:02:59 2025
*************** for (i = 0; i < n_opts; i++) {
*** 1467,1472 ****
--- 1467,1477 ----
  	if (name == "")
  		continue;
  
+ 	# We do not want to compare warning-related options, since they
+ 	# might have been modified by a #pragma GCC diagnostic.
+ 	if (flag_set_p("Warning", flags[i]))
+ 		continue;
+ 
  	if (name in checked_options)
  		continue;
  	checked_options[name]++
diff -Nrcpad gcc-13.3.0/gcc/opts-common.cc gcc-13.4.0/gcc/opts-common.cc
*** gcc-13.3.0/gcc/opts-common.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/opts-common.cc	Thu Jun  5 16:02:59 2025
*************** add_misspelling_candidates (auto_vec<cha
*** 502,507 ****
--- 502,508 ----
    for (unsigned i = 0; i < ARRAY_SIZE (option_map); i++)
      {
        const char *opt0 = option_map[i].opt0;
+       const char *opt1 = option_map[i].opt1;
        const char *new_prefix = option_map[i].new_prefix;
        size_t new_prefix_len = strlen (new_prefix);
  
*************** add_misspelling_candidates (auto_vec<cha
*** 510,517 ****
  
        if (strncmp (opt_text, new_prefix, new_prefix_len) == 0)
  	{
! 	  char *alternative = concat (opt0 + 1, opt_text + new_prefix_len,
! 				      NULL);
  	  candidates->safe_push (alternative);
  	}
      }
--- 511,519 ----
  
        if (strncmp (opt_text, new_prefix, new_prefix_len) == 0)
  	{
! 	  char *alternative
! 	    = concat (opt0 + 1, opt1 ? " " : "", opt1 ? opt1 : "",
! 		      opt_text + new_prefix_len, NULL);
  	  candidates->safe_push (alternative);
  	}
      }
*************** jobserver_info::disconnect ()
*** 2107,2113 ****
  {
    if (!pipe_path.empty ())
      {
!       gcc_assert (close (pipefd) == 0);
        pipefd = -1;
      }
  }
--- 2109,2116 ----
  {
    if (!pipe_path.empty ())
      {
!       int res = close (pipefd);
!       gcc_assert (res == 0);
        pipefd = -1;
      }
  }
*************** jobserver_info::return_token ()
*** 2132,2136 ****
  {
    int fd = pipe_path.empty () ? wfd : pipefd;
    char c = 'G';
!   gcc_assert (write (fd, &c, 1) == 1);
  }
--- 2135,2140 ----
  {
    int fd = pipe_path.empty () ? wfd : pipefd;
    char c = 'G';
!   int res = write (fd, &c, 1);
!   gcc_assert (res == 1);
  }
diff -Nrcpad gcc-13.3.0/gcc/plugin.cc gcc-13.4.0/gcc/plugin.cc
*** gcc-13.3.0/gcc/plugin.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/plugin.cc	Thu Jun  5 16:02:59 2025
*************** along with GCC; see the file COPYING3.
*** 21,26 ****
--- 21,27 ----
     APIs described in doc/plugin.texi.  */
  
  #include "config.h"
+ #define INCLUDE_DLFCN_H
  #include "system.h"
  #include "coretypes.h"
  #include "options.h"
diff -Nrcpad gcc-13.3.0/gcc/po/ChangeLog gcc-13.4.0/gcc/po/ChangeLog
*** gcc-13.3.0/gcc/po/ChangeLog	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/po/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/gcc/pointer-query.cc gcc-13.4.0/gcc/pointer-query.cc
*** gcc-13.3.0/gcc/pointer-query.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/pointer-query.cc	Thu Jun  5 16:02:59 2025
*************** array_elt_at_offset (tree artype, HOST_W
*** 2586,2591 ****
--- 2586,2602 ----
  tree
  build_printable_array_type (tree eltype, unsigned HOST_WIDE_INT nelts)
  {
+   /* Cannot build an array type of functions or methods without
+      an error diagnostic.  */
+   if (FUNC_OR_METHOD_TYPE_P (eltype))
+     {
+       tree arrtype = make_node (ARRAY_TYPE);
+       TREE_TYPE (arrtype) = eltype;
+       TYPE_SIZE (arrtype) = bitsize_zero_node;
+       TYPE_SIZE_UNIT (arrtype) = size_zero_node;
+       return arrtype;
+     }
+ 
    if (TYPE_SIZE_UNIT (eltype)
        && TREE_CODE (TYPE_SIZE_UNIT (eltype)) == INTEGER_CST
        && !integer_zerop (TYPE_SIZE_UNIT (eltype))
diff -Nrcpad gcc-13.3.0/gcc/real.cc gcc-13.4.0/gcc/real.cc
*** gcc-13.3.0/gcc/real.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/real.cc	Thu Jun  5 16:02:59 2025
*************** void
*** 5426,5431 ****
--- 5426,5447 ----
  get_max_float (const struct real_format *fmt, char *buf, size_t len,
  	       bool norm_max)
  {
+   if (fmt->b == 10)
+     {
+       char *p = buf;
+       for (int i = fmt->p; i; i--)
+ 	{
+ 	  *p++ = '9';
+ 	  if (i == fmt->p)
+ 	    *p++ = '.';
+ 	}
+       /* fmt->p plus 1, to account for the decimal point and fmt->emax
+ 	 minus 1 because the digits are nines, not 1.0.  */
+       sprintf (buf + fmt->p + 1, "E%d", fmt->emax - 1);
+       gcc_assert (strlen (buf) < len);
+       return;
+     }
+ 
    int i, n;
    char *p;
    bool is_ibm_extended = fmt->pnan < fmt->p;
diff -Nrcpad gcc-13.3.0/gcc/reorg.cc gcc-13.4.0/gcc/reorg.cc
*** gcc-13.3.0/gcc/reorg.cc	Tue May 21 07:47:38 2024
--- gcc-13.4.0/gcc/reorg.cc	Thu Jun  5 16:02:59 2025
*************** insn_sets_resource_p (rtx insn, struct r
*** 336,348 ****
    return resource_conflicts_p (&insn_sets, res);
  }
  
! /* Find a label at the end of the function or before a RETURN.  If there
!    is none, try to make one.  If that fails, returns 0.
  
!    The property of such a label is that it is placed just before the
!    epilogue or a bare RETURN insn, so that another bare RETURN can be
!    turned into a jump to the label unconditionally.  In particular, the
!    label cannot be placed before a RETURN insn with a filled delay slot.
  
     ??? There may be a problem with the current implementation.  Suppose
     we start with a bare RETURN insn and call find_end_label.  It may set
--- 336,349 ----
    return resource_conflicts_p (&insn_sets, res);
  }
  
! /* Find a label before a RETURN.  If there is none, try to make one; if this
!    fails, return 0.  KIND is either ret_rtx or simple_return_rtx, indicating
!    which type of RETURN we're looking for.
  
!    The property of the label is that it is placed just before a bare RETURN
!    insn, so that another bare RETURN can be turned into a jump to the label
!    unconditionally.  In particular, the label cannot be placed before a
!    RETURN insn with a filled delay slot.
  
     ??? There may be a problem with the current implementation.  Suppose
     we start with a bare RETURN insn and call find_end_label.  It may set
*************** insn_sets_resource_p (rtx insn, struct r
*** 353,361 ****
     Note that this is probably mitigated by the following observation:
     once function_return_label is made, it is very likely the target of
     a jump, so filling the delay slot of the RETURN will be much more
!    difficult.
!    KIND is either simple_return_rtx or ret_rtx, indicating which type of
!    return we're looking for.  */
  
  static rtx_code_label *
  find_end_label (rtx kind)
--- 354,360 ----
     Note that this is probably mitigated by the following observation:
     once function_return_label is made, it is very likely the target of
     a jump, so filling the delay slot of the RETURN will be much more
!    difficult.  */
  
  static rtx_code_label *
  find_end_label (rtx kind)
*************** find_end_label (rtx kind)
*** 375,384 ****
    if (*plabel)
      return *plabel;
  
!   /* Otherwise, see if there is a label at the end of the function.  If there
!      is, it must be that RETURN insns aren't needed, so that is our return
!      label and we don't have to do anything else.  */
! 
    insn = get_last_insn ();
    while (NOTE_P (insn)
  	 || (NONJUMP_INSN_P (insn)
--- 374,380 ----
    if (*plabel)
      return *plabel;
  
!   /* Otherwise, scan the insns backward from the end of the function.  */
    insn = get_last_insn ();
    while (NOTE_P (insn)
  	 || (NONJUMP_INSN_P (insn)
*************** find_end_label (rtx kind)
*** 386,394 ****
  		 || GET_CODE (PATTERN (insn)) == CLOBBER)))
      insn = PREV_INSN (insn);
  
!   /* When a target threads its epilogue we might already have a
!      suitable return insn.  If so put a label before it for the
!      function_return_label.  */
    if (BARRIER_P (insn)
        && JUMP_P (PREV_INSN (insn))
        && PATTERN (PREV_INSN (insn)) == kind)
--- 382,389 ----
  		 || GET_CODE (PATTERN (insn)) == CLOBBER)))
      insn = PREV_INSN (insn);
  
!   /* First, see if there is a RETURN at the end of the function.  If so,
!      put the label before it.  */
    if (BARRIER_P (insn)
        && JUMP_P (PREV_INSN (insn))
        && PATTERN (PREV_INSN (insn)) == kind)
*************** find_end_label (rtx kind)
*** 397,404 ****
        rtx_code_label *label = gen_label_rtx ();
        LABEL_NUSES (label) = 0;
  
!       /* Put the label before any USE insns that may precede the RETURN
! 	 insn.  */
        while (GET_CODE (temp) == USE)
  	temp = PREV_INSN (temp);
  
--- 392,399 ----
        rtx_code_label *label = gen_label_rtx ();
        LABEL_NUSES (label) = 0;
  
!       /* Put the label before any USE insns that may precede the
! 	 RETURN insn.  */
        while (GET_CODE (temp) == USE)
  	temp = PREV_INSN (temp);
  
*************** find_end_label (rtx kind)
*** 406,420 ****
        *plabel = label;
      }
  
!   else if (LABEL_P (insn))
!     *plabel = as_a <rtx_code_label *> (insn);
    else
      {
        rtx_code_label *label = gen_label_rtx ();
        LABEL_NUSES (label) = 0;
-       /* If the basic block reorder pass moves the return insn to
- 	 some other place try to locate it again and put our
- 	 function_return_label there.  */
        while (insn && ! (JUMP_P (insn) && (PATTERN (insn) == kind)))
  	insn = PREV_INSN (insn);
        if (insn)
--- 401,412 ----
        *plabel = label;
      }
  
!   /* If the basic block reordering pass has moved the return insn to some
!      other place, try to locate it again and put the label there.  */
    else
      {
        rtx_code_label *label = gen_label_rtx ();
        LABEL_NUSES (label) = 0;
        while (insn && ! (JUMP_P (insn) && (PATTERN (insn) == kind)))
  	insn = PREV_INSN (insn);
        if (insn)
diff -Nrcpad gcc-13.3.0/gcc/rust/ChangeLog gcc-13.4.0/gcc/rust/ChangeLog
*** gcc-13.3.0/gcc/rust/ChangeLog	Tue May 21 07:47:39 2024
--- gcc-13.4.0/gcc/rust/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/gcc/system.h gcc-13.4.0/gcc/system.h
*** gcc-13.3.0/gcc/system.h	Tue May 21 07:47:39 2024
--- gcc-13.4.0/gcc/system.h	Thu Jun  5 16:02:59 2025
*************** extern int vsnprintf (char *, size_t, co
*** 690,696 ****
  # endif
  #endif
  
! #if defined (ENABLE_PLUGIN) && defined (HAVE_DLFCN_H)
  /* If plugin support is enabled, we could use libdl.  */
  #include <dlfcn.h>
  #endif
--- 690,696 ----
  # endif
  #endif
  
! #if defined (INCLUDE_DLFCN_H) && defined (HAVE_DLFCN_H)
  /* If plugin support is enabled, we could use libdl.  */
  #include <dlfcn.h>
  #endif
diff -Nrcpad gcc-13.3.0/gcc/testsuite/ChangeLog gcc-13.4.0/gcc/testsuite/ChangeLog
*** gcc-13.3.0/gcc/testsuite/ChangeLog	Tue May 21 07:47:39 2024
--- gcc-13.4.0/gcc/testsuite/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,2601 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
+ 2025-06-02  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/109345
+ 	* gfortran.dg/pr109345.f90: Comment out test of component refs.
+ 
+ 2025-06-02  Andre Vehreschild  <vehre@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2025-03-04  Andre Vehreschild  <vehre@gcc.gnu.org>
+ 
+ 	PR fortran/103391
+ 	* gfortran.dg/assign_12.f90: New test.
+ 
+ 2025-05-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-05-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/120480
+ 	* gcc.dg/pr120480.c: New test.
+ 
+ 2025-05-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-04-17  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/119834
+ 	* g++.target/s390/pr119834.C: New test.
+ 
+ 2025-05-28  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	Backported from master:
+ 	2025-05-14  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	* gcc.dg/ipa/pr120044-1.c: New test.
+ 	* gcc.dg/ipa/pr120044-2.c: Likewise.
+ 	* gcc.dg/tree-ssa/pr114864.c: Likewise.
+ 
+ 2025-05-28  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	Backported from master:
+ 	2025-03-13  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* lib/gm2.exp: Arrange for a '-B' option to be added for the
+ 	libstdc++ paths on targets that need it.
+ 
+ 2025-05-28  Andreas Krebbel  <krebbel@linux.ibm.com>
+ 
+ 	Backported from master:
+ 	2024-04-23  Andreas Krebbel  <krebbel@linux.ibm.com>
+ 
+ 	PR target/114676
+ 	* gcc.target/s390/zvector/pr114676.c: New test.
+ 
+ 2025-05-27  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-06-25  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/115358
+ 	* g++.dg/template/array37.C: New test.
+ 
+ 2025-05-27  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-01-09  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/117792
+ 	* g++.dg/cpp1z/nontype7.C: New test.
+ 
+ 2025-05-27  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-03-18  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/119233
+ 	* g++.dg/template/fn-ptr5.C: New test.
+ 
+ 2025-05-27  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-06-28  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/106760
+ 	* g++.dg/ext/conv3.C: New test.
+ 
+ 2025-05-27  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-07-23  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/115656
+ 	* g++.dg/cpp2a/concepts-ttp7.C: New test.
+ 
+ 2025-05-27  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-09-12  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/116418
+ 	* g++.dg/eh/pr84968.C: No longer expect an ahead of time diagnostic
+ 	for the statement-expresssion.  Instantiate the template and expect
+ 	an incomplete type error instead.
+ 	* g++.dg/ext/stmtexpr26.C: New test.
+ 
+ 2025-05-27  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-01-09  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/118060
+ 	* g++.dg/cpp2a/concepts-requires40.C: New test.
+ 
+ 2025-05-27  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-08-15  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/116320
+ 	* g++.dg/template/access42.C: New test.
+ 
+ 2025-05-26  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-02-28  Jakub Jelinek  <jakub@redhat.com>
+ 		    Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/113976
+ 	* g++.dg/cpp1y/var-templ87.C: New test.
+ 
+ 2025-05-26  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-02-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/118623
+ 	* gcc.c-torture/execute/pr118623.c: New test.
+ 
+ 2025-05-26  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-02-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/117239
+ 	* gcc.dg/pr117239.c: New test.
+ 
+ 2025-05-26  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-11-28  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/117358
+ 	* gcc.c-torture/compile/pr117358.c: New test.
+ 
+ 2025-05-26  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-12-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/113994
+ 	PR rtl-optimization/116799
+ 	* gcc.c-torture/execute/pr116799.c: New test.
+ 	* g++.dg/torture/pr113994.C: New test.
+ 
+ 2025-05-26  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-09-12  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/116636
+ 	* g++.dg/warn/deprecated-19.C: New test.
+ 
+ 2025-05-26  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-09-05  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/116606
+ 	* g++.dg/ext/attr-unavailable-13.C: New test.
+ 
+ 2025-05-26  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-02-06  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR sanitizer/110676
+ 	* gcc.dg/asan/pr110676.c: New test.
+ 
+ 2025-05-26  Jason Merrill  <jason@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-04-16  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/116954
+ 	* g++.dg/warn/Wformat-3.C: New test.
+ 
+ 2025-05-26  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	Backported from master:
+ 	2024-06-24  Roger Sayle  <roger@nextmovesoftware.com>
+ 		    Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/113673
+ 	* g++.dg/pr113673.C: New test case.
+ 
+ 2025-05-26  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-04-01  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/119534
+ 	* gcc.dg/vect/pr119534.c: New testcase.
+ 
+ 2025-05-26  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-02-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/98845
+ 	* gcc.dg/pr98845.c: New testcase.
+ 	* gcc.dg/pr81192.c: Adjust.
+ 
+ 2025-05-26  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-03-06  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/119119
+ 	* g++.dg/torture/pr11911.C: New testcase.
+ 
+ 2025-05-26  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-03-03  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/119057
+ 	* gcc.dg/vect/pr119057.c: New testcase.
+ 
+ 2025-05-26  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-01-08  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/117979
+ 	* gcc.dg/torture/pr117979.c: New testcase.
+ 
+ 2025-05-26  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-04-14  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/119778
+ 	* g++.dg/torture/pr119778.C: New testcase.
+ 
+ 2025-05-26  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-04-22  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/119706
+ 	* g++.target/aarch64/sve/pr119706.C: Adjust --param
+ 	aarch64-autovec-preference.
+ 
+ 2025-05-26  Jennifer Schmitz  <jschmitz@nvidia.com>
+ 
+ 	Backported from master:
+ 	2025-04-11  Jennifer Schmitz  <jschmitz@nvidia.com>
+ 
+ 	PR tree-optimization/119706
+ 	* g++.target/aarch64/sve/pr119706.C: New test.
+ 
+ 2025-05-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-05-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR libfortran/120196
+ 	* gfortran.dg/pr120196.f90: New test.
+ 
+ 2025-05-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-05-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR fortran/120191
+ 	* gfortran.dg/pr120191_3.f90: New test.
+ 
+ 2025-05-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-05-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR fortran/120191
+ 	* gfortran.dg/pr120191_2.f90: New test.
+ 
+ 2025-05-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-05-13  Jakub Jelinek  <jakub@redhat.com>
+ 		    Daniil Kochergin  <daniil2472s@gmail.com>
+ 		    Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	PR fortran/120191
+ 	* gfortran.dg/pr120191_1.f90: New test.
+ 
+ 2025-05-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-04-22  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/119327
+ 	* g++.dg/opt/pr119327.C: New test.
+ 
+ 2025-05-15  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/117287
+ 	* g++.dg/cpp23/pr117287-attr.C: New.
+ 
+ 2025-05-13  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	Backported from master:
+ 	2025-05-06  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR ipa/119852
+ 	* gcc.dg/ipa/pr119852.c: New test.
+ 
+ 2025-05-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-01-31  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/117498
+ 	* gcc.c-torture/execute/pr117498.c: New test.
+ 
+ 2025-05-09  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2025-04-24  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR target/119610
+ 	* g++.dg/torture/pr119610.C: New test.
+ 	* g++.target/aarch64/sve/pr119610-sve.C: Likewise.
+ 
+ 2025-05-07  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-03-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR debug/101533
+ 	* g++.dg/debug/pr101533.C: New testcase.
+ 
+ 2025-05-07  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-07-31  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/101478
+ 	* gcc.dg/pr101478.c: New testcase.
+ 
+ 2025-05-07  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-02-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR lto/91299
+ 	* gcc.dg/lto/pr91299_0.c: New testcase.
+ 	* gcc.dg/lto/pr91299_1.c: Likewise.
+ 
+ 2025-05-07  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-02-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/87984
+ 	* gcc.target/i386/pr87984.c: New testcase.
+ 
+ 2025-05-07  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-02-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/66279
+ 	* g++.dg/pr66279.C: New testcase.
+ 
+ 2025-04-30  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2025-04-30  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	* gcc.target/avr/torture/pr119989.h: New file.
+ 	* gcc.target/avr/torture/pr119989-memx-1.c: New test.
+ 	* gcc.target/avr/torture/pr119989-memx-2.c: New test.
+ 	* gcc.target/avr/torture/pr119989-memx-3.c: New test.
+ 	* gcc.target/avr/torture/pr119989-memx-4.c: New test.
+ 
+ 2025-04-29  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	Backported from master:
+ 	2025-04-07  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR tree-optimization/118924
+ 	* g++.dg/tree-ssa/pr118924.C: New test.
+ 
+ 2025-04-24  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2025-04-10  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR tree-optimization/119399
+ 	* gcc.dg/vect/pr119399.c: New test.
+ 
+ 2025-04-24  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2025-03-07  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR tree-optimization/116125
+ 	* gcc.dg/vect/pr116125.c: New test.
+ 
+ 2025-04-23  Jason Merrill  <jason@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-04-16  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/114772
+ 	PR c++/101180
+ 	* g++.dg/ext/pragma-target2.C: New test.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-04-02  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/119582
+ 	* gcc.dg/asan/pr119582.c: New test.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-04-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/119291
+ 	* gcc.c-torture/execute/pr119291.c: New test.
+ 
+ 2025-04-23  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-03-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/119204
+ 	* gcc.dg/pr119204.c: New testcase.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-03-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/119183
+ 	* gcc.dg/pr119183.c: New test.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-03-10  Jakub Jelinek  <jakub@redhat.com>
+ 		    Michael Leuchtenburg  <michael@slashhome.org>
+ 
+ 	PR libgcc/119151
+ 	* gcc.dg/pr119151.c: New test.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-03-06  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/98533
+ 	PR c++/119123
+ 	* g++.dg/cpp0x/pr98533.C: New test.
+ 	* g++.dg/cpp0x/pr119123.C: New test.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-02-28  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/119045
+ 	* g++.dg/cpp1y/constexpr-complex2.C: New test.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-02-26  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/114870
+ 	* gcc.dg/c23-stddef-2.c: New test.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-02-25  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/119000
+ 	* c-c++-common/gomp/pr119000.c: New test.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-02-24  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/118915
+ 	* gcc.c-torture/execute/pr118915.c: New test.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-02-08  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/118776
+ 	* gcc.target/i386/pr118776.c: New test.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-02-07  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/118763
+ 	* g++.dg/asan/pr118763.C: New test.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-02-07  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/118661
+ 	* g++.dg/cpp0x/constexpr-volatile4.C: New test.
+ 	* g++.dg/cpp0x/constexpr-union9.C: New test.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-01-31  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR ipa/117432
+ 	* gcc.c-torture/execute/pr117432.c: New test.
+ 	* gcc.target/i386/pr117432.c: New test.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-01-25  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/117827
+ 	* g++.dg/init/array66.C: New test.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-01-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/114877
+ 	* gcc.dg/torture/builtin-frexp-1.c: Add -Wmaybe-uninitialized as
+ 	dg-additional-options.
+ 	(bar): New function.
+ 	(TESTIT_FREXP2): Rework the macro so that it doesn't test whether
+ 	nothing has been stored to what the second argument points to, but
+ 	instead that something has been stored there, whatever it is.
+ 	(main): Temporarily don't enable the nan tests for -O0.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/118509
+ 	* g++.dg/expr/pmf-4.C: New test.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-01-08  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/117825
+ 	* g++.dg/warn/pr117825.C: New test.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-12-17  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/116108
+ 	* g++.dg/cpp1z/class-deduction117.C: New test.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-12-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/117095
+ 	* gcc.c-torture/execute/pr117095.c: New test.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-11-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/117745
+ 	* gcc.dg/pr117745.c: New test.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-11-26  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/102674
+ 	* gcc.dg/dfp/pr102674.c: New test.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-11-26  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/43374
+ 	* gcc.dg/dfp/pr43374.c: New test.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-11-08  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/117317
+ 	* g++.dg/cpp2a/pr117317-1.C: New test.
+ 	* g++.dg/cpp2a/pr117317-2.C: New test.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-10-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/117296
+ 	* gcc.target/i386/pr117296.c: New test.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-10-24  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/117259
+ 	* g++.dg/ubsan/pr117259.C: New test.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-10-24  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR sanitizer/117209
+ 	* gcc.dg/asan/pr117209.c: New test.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-10-22  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/117230
+ 	* c-c++-common/Wsizeof-pointer-memaccess5.c: New test.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-09-20  Uros Bizjak  <ubizjak@gmail.com>
+ 		    Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/116738
+ 	* gcc.target/i386/sse-pr116738.c: New test.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-09-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/116678
+ 	* g++.dg/warn/deprecated-20.C: New test.
+ 
+ 2025-04-22  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-04-09  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/119656
+ 	* gfortran.dg/optional_absent_13.f90: New test.
+ 
+ 2025-04-20  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2025-04-15  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/119826
+ 	* gdc.dg/debug/imports/pr119826b.d: New test.
+ 	* gdc.dg/debug/pr119826.d: New test.
+ 
+ 2025-04-20  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2025-04-15  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/119817
+ 	* gdc.dg/debug/imports/m119817/a.d: New test.
+ 	* gdc.dg/debug/imports/m119817/b.d: New test.
+ 	* gdc.dg/debug/imports/m119817/package.d: New test.
+ 	* gdc.dg/debug/pr119817.d: New test.
+ 
+ 2025-04-20  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2025-04-09  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/118309
+ 	* gdc.dg/debug/dwarf2/pr118309.d: New test.
+ 
+ 2025-04-15  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	Backported from master:
+ 	2025-04-14  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR tree-optimization/118476
+ 	* gcc.dg/torture/pr118476-1.c: New test.
+ 
+ 2025-04-15  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	Backported from master:
+ 	2024-08-20  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR tree-optimization/116412
+ 	* gcc.dg/torture/pr116412-1.c: New test.
+ 
+ 2025-04-15  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	Backported from master:
+ 	2025-03-16  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR middle-end/113546
+ 	* c-c++-common/torture/pr113546-1.c: New test.
+ 
+ 2025-04-15  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	Backported from master:
+ 	2025-03-09  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR tree-optimization/118922
+ 	* gcc.dg/torture/pr118922-1.c: New test.
+ 
+ 2025-04-15  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	Backported from master:
+ 	2024-12-04  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR tree-optimization/117243
+ 	PR tree-optimization/116749
+ 	* gcc.dg/torture/pr117243-1.c: New test.
+ 	* gcc.dg/torture/pr117243-2.c: New test.
+ 
+ 2025-04-15  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	Backported from master:
+ 	2024-10-02  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR tree-optimization/116922
+ 	* gcc.dg/torture/pr116922.c: New test.
+ 
+ 2025-04-15  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	Backported from master:
+ 	2024-10-28  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR middle-end/111285
+ 	* g++.dg/torture/vect-absu-1.C: New test.
+ 
+ 2025-04-14  Simon Martin  <simon@nasilyan.com>
+ 
+ 	Backported from master:
+ 	2025-03-25  Simon Martin  <simon@nasilyan.com>
+ 
+ 	PR c++/114525
+ 	* g++.dg/expr/cond18.C: New test.
+ 
+ 2025-04-13  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-04-09  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR rtl-optimization/119689
+ 	PR rtl-optimization/115568
+ 	* g++.target/i386/pr119689.C: New testcase.
+ 
+ 2025-04-13  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-02-05  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	PR rtl-optimization/115568
+ 	* gcc.target/i386/pr115568.c: New.
+ 
+ 2025-04-11  Alex Coplan  <alex.coplan@arm.com>
+ 
+ 	Backported from master:
+ 	2025-03-12  Alex Coplan  <alex.coplan@arm.com>
+ 
+ 	PR rtl-optimization/116564
+ 	* gcc.target/aarch64/torture/pr116564.c: New test.
+ 
+ 2025-04-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-03-07  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/119145
+ 	* gcc.dg/vect/pr119145.c: New testcase.
+ 
+ 2025-04-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-01-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/117424
+ 	* gcc.dg/tree-ssa/ssa-lim-25.c: New testcase.
+ 
+ 2025-04-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-02-04  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/117113
+ 	* gcc.dg/torture/pr117113.c: New testcase.
+ 
+ 2025-04-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-10-01  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/116906
+ 	* gcc.dg/pr116906-1.c: New testcase.
+ 	* gcc.dg/pr116906-2.c: Likewise.
+ 
+ 2025-04-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-03-06  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR lto/114501
+ 	* g++.dg/pr114501_0.C: New testcase.
+ 
+ 2025-04-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-01-30  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/114052
+ 	* gcc.dg/pr114052-1.c: New testcase.
+ 
+ 2025-04-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-02-04  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR lto/113207
+ 	* gcc.dg/pr113207.c: New testcase.
+ 
+ 2025-04-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-01-27  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/112859
+ 	PR tree-optimization/115347
+ 	* gcc.dg/torture/pr112859.c: New testcase.
+ 	* gcc.dg/torture/pr115347.c: Likewise.
+ 
+ 2025-04-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-02-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR ipa/111245
+ 	* g++.dg/torture/pr111245.C: New testcase.
+ 
+ 2025-04-11  Sam James  <sam@gentoo.org>
+ 
+ 	Backported from master:
+ 	2024-10-28  Sam James  <sam@gentoo.org>
+ 
+ 	PR tree-optimization/107467
+ 	PR middle-end/115110
+ 	* g++.dg/lto/pr107467_0.C: New test.
+ 
+ 2025-04-11  Jin Ma  <jinma@linux.alibaba.com>
+ 
+ 	Backported from master:
+ 	2025-04-02  Jin Ma  <jinma@linux.alibaba.com>
+ 
+ 	* gcc.target/riscv/zba-shNadd-09.c: New test.
+ 	* gcc.target/riscv/zba-shNadd-10.c: New test.
+ 
+ 2025-03-31  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2025-03-31  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/117002
+ 	* gdc.dg/torture/pr117002.d: New test.
+ 
+ 2025-03-25  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-03-19  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/116706
+ 	* gfortran.dg/bounds_check_27.f90: New test.
+ 
+ 2025-03-25  Simon Martin  <simon@nasilyan.com>
+ 
+ 	Backported from master:
+ 	2025-03-06  Simon Martin  <simon@nasilyan.com>
+ 
+ 	PR c++/117504
+ 	* g++.dg/cpp2a/constexpr-117504.C: New test.
+ 	* g++.dg/cpp2a/constexpr-117504a.C: New test.
+ 
+ 2025-03-24  Simon Martin  <simon@nasilyan.com>
+ 
+ 	Backported from master:
+ 	2024-09-14  Simon Martin  <simon@nasilyan.com>
+ 
+ 	PR c++/116681
+ 	* g++.dg/cpp2a/concepts-pr116681.C: New test.
+ 
+ 2025-03-23  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2025-03-23  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/117621
+ 	* gdc.dg/pr117621.d: New test.
+ 
+ 2025-03-21  Jason Merrill  <jason@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-03-21  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/114992
+ 	* g++.target/i386/mangling-alias1.C: New test.
+ 
+ 2025-03-21  Simon Martin  <simon@nasilyan.com>
+ 
+ 	Backported from master:
+ 	2025-03-20  Simon Martin  <simon@nasilyan.com>
+ 
+ 	PR c++/114292
+ 	* g++.dg/cpp1y/lambda-ice4.C: New test.
+ 
+ 2025-03-19  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/generic_inst14.adb: New test.
+ 	* gnat.dg/generic_inst14_pkg.ads: New helper.
+ 	* gnat.dg/generic_inst14_pkg-child.ads: Likewise.
+ 
+ 2025-03-18  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-03-18  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/118104
+ 	* g++.dg/cpp0x/alias-decl-variadic3.C: New test.
+ 
+ 2025-03-12  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-03-12  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/119134
+ 	* g++.dg/cpp2a/lambda-uneval24.C: New test.
+ 
+ 2025-03-11  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2025-03-11  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/119139
+ 	* gdc.dg/pr119139.d: New test.
+ 
+ 2025-03-11  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	Backported from master:
+ 	2025-02-28  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR ipa/118243
+ 	* g++.dg/ipa/pr118243.C: New test.
+ 
+ 2025-03-07  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	Backported from master:
+ 	2025-03-07  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	PR target/115485
+ 	* g++.target/arm/pr115485.C: New test.
+ 
+ 2025-03-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-03-04  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/119071
+ 	* gcc.dg/pr119071.c: New test.
+ 	* gcc.c-torture/execute/pr119071.c: New test.
+ 
+ 2025-03-05  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-03-03  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR rtl-optimization/118739
+ 	* gcc.target/i386/pr118739.c: New test.
+ 
+ 2025-03-05  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2024-10-14  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR target/116999
+ 	PR target/117045
+ 	* gcc.target/aarch64/sve/acle/general/whilele_5.c: Fix bogus
+ 	expected result.
+ 	* gcc.target/aarch64/sve/acle/general/whilele_11.c: New test.
+ 	* gcc.target/aarch64/sve/acle/general/whilele_12.c: Likewise.
+ 
+ 2025-03-05  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2024-08-21  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR testsuite/116238
+ 	* gcc.target/aarch64/sve/pr116238.c: New test.
+ 
+ 2025-03-02  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	PR target/116720
+ 	* gcc.target/riscv/pr116720.c: New test.
+ 
+ 2025-03-02  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2025-02-28  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/116961
+ 	* gdc.dg/pr116961.d: New test.
+ 
+ 2025-02-26  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2025-02-13  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	* gcc.target/s390/pr118835.c: New test.
+ 
+ 2025-02-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-12-10  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/117912
+ 	* c-c++-common/torture/pr117912-1.c: New testcase.
+ 	* c-c++-common/torture/pr117912-2.c: Likewise.
+ 	* c-c++-common/torture/pr117912-3.c: Likewise.
+ 
+ 2025-02-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-09-30  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/116850
+ 	* gcc.dg/pr116850.c: New testcase.
+ 
+ 2025-02-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-07-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/115641
+ 	* gcc.dg/torture/pr115641.c: New testcase.
+ 
+ 2025-02-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-02-03  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/118717
+ 	* gcc.dg/torture/pr118717.c: New testcase.
+ 
+ 2025-02-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-01-13  Richard Biener  <rguenther@suse.de>
+ 		    Stefan Schulze Frielinghaus  <stefansf@linux.ibm.com>
+ 
+ 	PR tree-optimization/117119
+ 	* gcc.dg/torture/pr117119.c: New testcase.
+ 
+ 2025-02-20  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-02-07  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/59252
+ 	* gfortran.dg/allocatable_char_1.f90: New test.
+ 
+ 2025-02-12  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR target/118800
+ 	* gcc.target/aarch64/cpunative/native_cpu_34.c: Update order.
+ 
+ 2025-02-03  Lewis Hyatt  <lhyatt@gmail.com>
+ 
+ 	PR middle-end/115913
+ 	* c-c++-common/cpp/pr115913.c: New test.
+ 
+ 2025-02-01  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/warn33.adb: New test.
+ 	* gnat.dg/warn33_pkg.ads: New helper.
+ 
+ 2025-01-29  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-01-14  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/118047
+ 	PR c++/118355
+ 	* g++.dg/cpp0x/nsdmi-list10.C: New test.
+ 	* g++.dg/cpp0x/nsdmi-list9.C: New test.
+ 
+ 2025-01-28  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	Backported from master:
+ 	2025-01-16  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR target/110901
+ 	* gcc.target/aarch64/options_set_29.c: New test.
+ 
+ 2025-01-28  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	Backported from master:
+ 	2025-01-16  Tamar Christina  <tamar.christina@arm.com>
+ 		    Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR target/113257
+ 	* gcc.target/aarch64/cpunative/info_34: New test.
+ 	* gcc.target/aarch64/cpunative/native_cpu_34.c: New test.
+ 	* gcc.target/aarch64/cpunative/info_35: New test.
+ 	* gcc.target/aarch64/cpunative/native_cpu_35.c: New test.
+ 
+ 2025-01-24  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-01-24  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/117153
+ 	* g++.dg/other/anon-union6.C: New test.
+ 	* g++.dg/other/anon-union7.C: New test.
+ 
+ 2025-01-24  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	Backported from master:
+ 	2025-01-16  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	* gcc.target/powerpc/mma-builtin-error.c: New test.
+ 
+ 2025-01-21  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	Backported from master:
+ 	2024-04-19  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/111650
+ 	* gdc.dg/pr111650.d: New test.
+ 
+ 2025-01-19  Simon Martin  <simon@nasilyan.com>
+ 
+ 	Backported from master:
+ 	2025-01-17  Simon Martin  <simon@nasilyan.com>
+ 
+ 	PR c++/118255
+ 	* g++.dg/lookup/pr99116-1.C: Adjust test expectation.
+ 	* g++.dg/template/friend84.C: New test.
+ 
+ 2025-01-17  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-01-17  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	PR c++/118147
+ 	* g++.dg/cpp0x/nsdmi-defer7.C: New test.
+ 
+ 2025-01-17  Simon Martin  <simon@nasilyan.com>
+ 
+ 	Backported from master:
+ 	2025-01-16  Simon Martin  <simon@nasilyan.com>
+ 
+ 	PR c++/117775
+ 	* g++.dg/cpp2a/constexpr-117775.C: New test.
+ 
+ 2025-01-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-11-20  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/117574
+ 	* gcc.dg/torture/pr117574-1.c: New testcase.
+ 
+ 2025-01-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-11-12  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/117417
+ 	* gcc.dg/torture/pr117417.c: New testcase.
+ 
+ 2025-01-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-10-29  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/117333
+ 	* gcc.dg/torture/pr117333.c: New testcase.
+ 
+ 2025-01-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-10-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/117307
+ 	* gcc.dg/vect/pr117307.c: New testcase.
+ 
+ 2025-01-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-10-22  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/117254
+ 	* gcc.dg/pr117254.c: New testcase.
+ 
+ 2025-01-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-10-12  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/117104
+ 	* gcc.dg/pr117104.c: New testcase.
+ 
+ 2025-01-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-10-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/117086
+ 	* gcc.dg/torture/pr117086.c: New testcase.
+ 
+ 2025-01-16  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-10-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/116891
+ 	* gcc.dg/pr116891.c: New test.
+ 	* gcc.target/i386/fma-pr116891.c: New test.
+ 
+ 2025-01-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-09-19  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/116768
+ 	* gcc.dg/torture/pr116768.c: New testcase.
+ 
+ 2025-01-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-10-13  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/116481
+ 	* gcc.dg/pr116481.c: New testcase.
+ 
+ 2025-01-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-08-21  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/116380
+ 	* gcc.dg/torture/pr116380.c: New testcase.
+ 
+ 2025-01-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-10-14  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/116290
+ 	* gcc.dg/pr116290.c: New testcase.
+ 
+ 2025-01-11  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-01-03  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/106692
+ 	* gfortran.dg/cray_pointers_13.f90: New test.
+ 
+ 2025-01-10  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/110031
+ 	* g++.dg/cpp1z/inline-var11.C: New test.
+ 
+ 2025-01-10  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/114349
+ 	* g++.dg/cpp0x/noexcept84.C: New test.
+ 	* g++.dg/cpp0x/noexcept85.C: New test.
+ 	* g++.dg/cpp0x/noexcept86.C: New test.
+ 
+ 2025-01-10  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-05-15  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/114854
+ 	* g++.dg/cpp1y/nsdmi-aggr22.C: New test.
+ 
+ 2025-01-10  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-04-12  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/109966
+ 	* g++.dg/cpp1y/nsdmi-aggr20.C: New test.
+ 	* g++.dg/cpp1y/nsdmi-aggr21.C: New test.
+ 
+ 2025-01-10  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-09-30  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/109859
+ 	* g++.dg/cpp2a/concepts-defarg3.C: New test.
+ 	* g++.dg/cpp2a/lambda-targ8.C: New test.
+ 
+ 2025-01-10  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2023-05-10  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/109680
+ 	* g++.dg/ext/is_convertible6.C: New test.
+ 
+ 2025-01-10  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-12-17  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/117985
+ 	* g++.dg/cpp0x/initlist-array23.C: New test.
+ 	* g++.dg/cpp0x/initlist-array24.C: New test.
+ 
+ 2025-01-10  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-02-17  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/113158
+ 	* g++.dg/cpp0x/noexcept83.C: New test.
+ 
+ 2025-01-10  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-04-05  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/111132
+ 	* g++.dg/cpp0x/constexpr-redeclaration3.C: New test.
+ 	* g++.dg/cpp0x/constexpr-redeclaration4.C: New test.
+ 
+ 2025-01-10  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-09-10  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/116369
+ 	* g++.dg/tree-ssa/initlist-opt7.C: New test.
+ 
+ 2025-01-10  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2023-07-25  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/110382
+ 	* g++.dg/cpp1y/constexpr-110382.C: New test.
+ 
+ 2025-01-10  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-08-19  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/115657
+ 	* g++.dg/cpp1y/constexpr-recursion2.C: New test.
+ 	* g++.dg/template/conv21.C: New test.
+ 
+ 2025-01-10  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2023-07-20  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/110114
+ 	* g++.dg/cpp0x/initlist100.C: Adjust expected diagnostic.
+ 	* g++.dg/cpp2a/desig28.C: New test.
+ 	* g++.dg/cpp2a/desig29.C: New test.
+ 
+ 2025-01-10  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-07-18  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/115476
+ 	* g++.dg/cpp1z/has-unique-obj-representations4.C: New test.
+ 
+ 2025-01-06  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2023-05-16  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/105152
+ 	PR fortran/100193
+ 	PR fortran/87946
+ 	PR fortran/103389
+ 	PR fortran/104429
+ 	PR fortran/82774
+ 	* gfortran.dg/pr105152.f90 : New test
+ 	* gfortran.dg/pr100193.f90 : New test
+ 	* gfortran.dg/pr87946.f90 : New test
+ 	* gfortran.dg/pr103389.f90 : New test
+ 	* gfortran.dg/pr104429.f90 : New test
+ 	* gfortran.dg/pr82774.f90 : New test
+ 
+ 2024-12-22  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-12-12  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/117797
+ 	* gfortran.dg/pr117797.f90: New test.
+ 
+ 2024-12-17  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-12-15  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/117897
+ 	* gfortran.dg/finalize_59.f90: New test.
+ 
+ 2024-12-15  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-12-15  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/117730
+ 	PR fortran/84674
+ 	* gfortran.dg/pr117730_a.f90: New test.
+ 	* gfortran.dg/pr117730_b.f90: New test.
+ 	* gfortran.dg/pr84674.f90: New test.
+ 
+ 2024-12-13  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-08-28  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/116424
+ 	* g++.dg/cpp2a/paren-init38.C: New test.
+ 
+ 2024-12-12  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/matrix1.adb: New test.
+ 
+ 2024-12-05  Simon Martin  <simon@nasilyan.com>
+ 
+ 	Backported from master:
+ 	2024-12-04  Simon Martin  <simon@nasilyan.com>
+ 
+ 	PR c++/117615
+ 	* g++.dg/cpp2a/constexpr-virtual22.C: New test.
+ 
+ 2024-11-30  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-11-13  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/105054
+ 	* gfortran.dg/ptr_func_assign_6.f08: New test.
+ 
+ 2024-11-27  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-11-26  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/117763
+ 	* gfortran.dg/pr117763.f90: New test.
+ 
+ 2024-11-25  Lewis Hyatt  <lhyatt@gmail.com>
+ 
+ 	PR preprocessor/117118
+ 	* c-c++-common/raw-string-directive-3.c: New test.
+ 	* c-c++-common/raw-string-directive-4.c: New test.
+ 
+ 2024-11-24  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-11-24  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/84869
+ 	* gfortran.dg/pr84869.f90: Comment out test of component refs.
+ 
+ 2024-11-24  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/109345
+ 	* gfortran.dg/pr109345.f90: Comment out test of component refs.
+ 
+ 2024-11-23  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-11-11  Tomas Trnka  <trnka@scm.com>
+ 		    Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/116388
+ 	* gfortran.dg/finalize_58.f90: New test.
+ 
+ 2024-11-23  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-11-11  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/109345
+ 	* gfortran.dg/character_workout_1.f90: Cut trailing whitespace.
+ 	* gfortran.dg/pr109345.f90: New test.
+ 
+ 2024-11-21  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/116731
+ 	* g++.dg/warn/Wrange-loop-construct3.C: New test.
+ 
+ 2024-11-19  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	Backported from master:
+ 	2024-11-18  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/117357
+ 	* gcc.target/i386/pr117357.c: New test.
+ 
+ 2024-11-19  Andre Vieira  <andre.simoesdiasvieira@arm.com>
+ 
+ 	Backported from master:
+ 	2024-10-14  Andre Vieira  <andre.simoesdiasvieira@arm.com>
+ 		    Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	* gcc.dg/vect/pr116997.c: New test.
+ 
+ 2024-11-15  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	* gcc.dg/tree-ssa/pr117142.c: New test.
+ 
+ 2024-11-14  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-11-03  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/115700
+ 	* gfortran.dg/associate_69.f90: Remove the test that produces a
+ 	variable string length because the optimized count depends on
+ 	the platform. This is tested in associate_70.f90.
+ 
+ 2024-11-14  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-11-01  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/115700
+ 	* gfortran.dg/associate_69.f90: Activate commented out tests.
+ 	* gfortran.dg/associate_70.f90: Test correct functioning of
+ 	references in associate_69.f90 tests.
+ 
+ 2024-11-14  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-10-31  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/115700
+ 	* gfortran.dg/associate_70.f90: New test.
+ 
+ 2024-11-14  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/115700
+ 	* gfortran.dg/associate_69.f90: New test.
+ 
+ 2024-11-14  Haochen Jiang  <haochen.jiang@intel.com>
+ 
+ 	* gcc.target/i386/cmpccxadd-1b.c: Change to dg-warning.
+ 
+ 2024-11-13  Hu, Lin1  <lin1.hu@intel.com>
+ 
+ 	Backported from master:
+ 	2024-11-13  Hu, Lin1  <lin1.hu@intel.com>
+ 
+ 	PR target/117418
+ 	* gcc.target/i386/pr117418-1.c: New test.
+ 
+ 2024-11-06  Simon Martin  <simon@nasilyan.com>
+ 
+ 	Backported from master:
+ 	2024-11-05  Simon Martin  <simon@nasilyan.com>
+ 
+ 	PR c++/117158
+ 	* g++.dg/cpp1z/eval-order13.C: New test.
+ 	* g++.dg/parse/crash77.C: New test.
+ 
+ 2024-11-05  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/115070
+ 	PR fortran/115348
+ 	* gfortran.dg/ieee/pr115070.f90: New test.
+ 	* gfortran.dg/pr115348.f90: New test.
+ 
+ 2024-11-04  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/117398
+ 	* gcc.dg/pr117398.c: New.
+ 
+ 2024-11-04  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/specs/array7.ads: New test.
+ 
+ 2024-11-01  Haochen Jiang  <haochen.jiang@intel.com>
+ 
+ 	* gcc.target/i386/cmpccxadd-1b.c: New test.
+ 
+ 2024-11-01  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-10-25  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/79685
+ 	* gfortran.dg/use_rename_13.f90: New test.
+ 
+ 2024-11-01  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2023-12-16  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/112459
+ 	* gfortran.dg/pr112459.f90: New test.
+ 
+ 2024-10-30  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	Backported from master:
+ 	2024-10-30  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* gcc.target/i386/pr117318.c: New test.
+ 
+ 2024-10-29  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc.c-torture/execute/20241029-1.c: New test.
+ 
+ 2024-10-29  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	Backported from master:
+ 	2024-08-23  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	PR target/116415
+ 	* gcc.target/powerpc/pr116415.c: New test.
+ 
+ 2024-10-25  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/116551
+ 	* gnat.dg/specs/vfa3.ads: New test.
+ 
+ 2024-10-25  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-07-16  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/84868
+ 	* gfortran.dg/pr84868.f90: New test.
+ 
+ 2024-10-23  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	Backported from master:
+ 	2024-10-23  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* gcc.target/i386/pr117240_avx.c: New test.
+ 	* gcc.target/i386/pr117240_avx512f.c: New test.
+ 
+ 2024-10-22  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	Backported from master:
+ 	2024-09-06  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR ipa/115815
+ 	* gcc.dg/lto/pr115815_0.c: New test.
+ 
+ 2024-10-22  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* gcc.target/i386/avx512bw-pr103750-2.c: Add xfail for ia32.
+ 
+ 2024-10-21  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	Backported from master:
+ 	2024-10-21  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* gcc.target/i386/pr117159.c: New test.
+ 	* gcc.target/i386/avx512bw-pr103750-1.c: Remove xfail.
+ 	* gcc.target/i386/avx512bw-pr103750-2.c: Remove xfail.
+ 
+ 2024-10-16  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	Backported from master:
+ 	2024-10-15  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/117116
+ 	* gcc.target/i386/pr117116.c: New test.
+ 
+ 2024-10-16  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	Backported from master:
+ 	2024-10-10  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* gcc.target/i386/avx256_avoid_vec_perm.c: New test.
+ 
+ 2024-10-16  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	Backported from master:
+ 	2024-10-10  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* gcc.target/i386/sse_movcc_use_blendv.c: New file.
+ 
+ 2024-10-15  Victor Do Nascimento  <victor.donascimento@arm.com>
+ 
+ 	* gcc.dg/vect/vect-fncall-mask.c: New.
+ 
+ 2024-10-14  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	Backported from master:
+ 	2023-05-23  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	PR tree-optimization/109934
+ 	* gcc.dg/tree-ssa/pr109934.c: New test.
+ 
+ 2024-10-14  Jan Hubicka  <jh@suse.cz>
+ 
+ 	Backported from master:
+ 	2024-05-16  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* gcc.c-torture/execute/pr113787.c: New test.
+ 
+ 2024-10-14  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	Backported from master:
+ 	2024-07-22  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	PR ipa/115033
+ 	* gcc.c-torture/execute/pr115033.c: New test.
+ 
+ 2024-10-14  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	Backported from master:
+ 	2024-07-22  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	PR ipa/114207
+ 	* gcc.c-torture/execute/pr114207.c: New test.
+ 
+ 2024-10-14  Sam James  <sam@gentoo.org>
+ 
+ 	Backported from master:
+ 	2024-07-29  Sam James  <sam@gentoo.org>
+ 
+ 	PR ipa/111613
+ 	* gcc.c-torture/pr111613.c: Rename to..
+ 	* gcc.c-torture/execute/pr111613.c: ...this.
+ 
+ 2024-10-14  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	Backported from master:
+ 	2024-07-22  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	PR ipa/111613
+ 	* gcc.c-torture/pr111613.c: New test.
+ 
+ 2024-10-14  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/114593
+ 	* gnat.dg/specs/generic_inst2-child2.ads: New test.
+ 	* gnat.dg/specs/generic_inst2.ads: New helper.
+ 	* gnat.dg/specs/generic_inst2-child1.ads: Likewise.
+ 
+ 2024-10-08  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/116190
+ 	* gnat.dg/aggr31.adb: New test.
+ 
+ 2024-10-08  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/115535
+ 	* gnat.dg/put_image1.adb: New test
+ 
+ 2024-10-08  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/114636
+ 	* gnat.dg/specs/generic_inst1.ads: New test.
+ 
+ 2024-10-04  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	Backported from master:
+ 	2024-10-04  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/116962
+ 	* gcc.target/i386/pr116962.c: New file.
+ 
+ 2024-10-02  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-09-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/116585
+ 	* gcc.dg/torture/pr116585.c: New testcase.
+ 
+ 2024-09-28  Jan Hubicka  <jh@suse.cz>
+ 
+ 	Backported from master:
+ 	2024-03-18  Jan Hubicka  <jh@suse.cz>
+ 		    Karthiban Anbazhagan  <Karthiban.Anbazhagan@amd.com>
+ 
+ 	* g++.target/i386/mv29.C: Handle znver5 arch.
+ 	* gcc.target/i386/funcspec-56.inc:Likewise.
+ 
+ 2024-09-28  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	Backported from master:
+ 	2024-09-25  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/116839
+ 	* gcc.target/i386/pr116839.c: New file.
+ 
+ 2024-09-27  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-09-13  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	* gcc.target/s390/vector/long-double-asm-abi.c: Adapt
+ 	scan-assembler directive.
+ 	* gcc.target/s390/vector/long-double-to-i64.c: Adapt
+ 	scan-assembler directive.
+ 	* gcc.target/s390/pr115860-1.c: New test.
+ 
+ 2024-09-20  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2024-09-05  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/100273
+ 	* gfortran.dg/pr100273.f90: New test.
+ 
+ 2024-09-20  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc.dg/ipa/modref-4.c: New test.
+ 
+ 2024-09-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-07-24  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/116057
+ 	* gcc.dg/torture/pr116057.c: New testcase.
+ 
+ 2024-09-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-07-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/115841
+ 	* gcc.dg/vect/pr115841.c: New testcase.
+ 
+ 2024-09-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-06-30  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/115701
+ 	* gcc.dg/torture/pr115701.c: New testcase.
+ 
+ 2024-09-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-07-01  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/115694
+ 	* g++.dg/torture/pr115694.C: New testcase.
+ 
+ 2024-09-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-06-27  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/115669
+ 	* gcc.dg/vect/pr115669.c: New testcase.
+ 
+ 2024-09-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-06-26  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/115646
+ 	* gcc.dg/pr115646.c: New testcase.
+ 
+ 2024-09-18  Joern Rennecke  <joern.rennecke@riscy-ip.com>
+ 
+ 	Backported from master:
+ 	2024-08-07  Joern Rennecke  <joern.rennecke@riscy-ip.com>
+ 
+ 	* g++.dg/vect/pr115278.cc: Make cast's type agree with
+ 	assignment destination WRITE.
+ 
+ 2024-09-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-05-31  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/115278
+ 	* g++.dg/vect/pr115278.cc: New testcase.
+ 
+ 2024-09-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2024-05-23  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/115197
+ 	* gcc.dg/pr115197.c: New testcase.
+ 
+ 2024-09-17  Marek Polacek  <polacek@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-09-17  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/116676
+ 	* g++.dg/cpp1z/constexpr-116676.C: New test.
+ 
+ 2024-09-15  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	Backported from master:
+ 	2024-09-08  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/116621
+ 	* gcc.target/i386/pr116621.c: New test.
+ 
+ 2024-09-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-07-18  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* c-c++-common/torture/builtin-clear-padding-3.c (main): Compare
+ 	s2.b.a against -1 rather than (char) -1.
+ 
+ 2024-09-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-09-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/116449
+ 	* g++.dg/ubsan/pr116449.C: New test.
+ 
+ 2024-09-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-08-09  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/116287
+ 	* gcc.target/i386/bmi-pr116287.c: New test.
+ 	* gcc.target/i386/bmi2-pr116287.c: New test.
+ 	* gcc.target/i386/tbm-pr116287.c: New test.
+ 
+ 2024-09-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-07-24  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/116034
+ 	PR testsuite/116061
+ 	* gcc.dg/pr116034.c (g): Change type from int to unsigned short.
+ 	(foo): Guard memmove call on __SIZEOF_SHORT__ == 2.
+ 
+ 2024-09-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-07-23  Jakub Jelinek  <jakub@redhat.com>
+ 		    Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR tree-optimization/116034
+ 	* gcc.dg/pr116034.c: New test.
+ 
+ 2024-09-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-07-17  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/115527
+ 	* c-c++-common/torture/builtin-clear-padding-1.c: Add dg-do run
+ 	directive.
+ 	* c-c++-common/torture/builtin-clear-padding-2.c: Likewise.
+ 	* c-c++-common/torture/builtin-clear-padding-3.c: Likewise.
+ 	* c-c++-common/torture/builtin-clear-padding-4.c: Likewise.
+ 	* c-c++-common/torture/builtin-clear-padding-5.c: Likewise.
+ 	* c-c++-common/torture/builtin-clear-padding-6.c: New test.
+ 
+ 2024-09-05  Tejas Belagod  <tejas.belagod@arm.com>
+ 
+ 	Backported from master:
+ 	2024-02-16  Tejas Belagod  <tejas.belagod@arm.com>
+ 
+ 	PR target/113780
+ 	* lib/target-supports.exp (v8_1m_main_pacbti): Add __ARM_FEATURE_PAUTH.
+ 	* gcc.target/arm/pac-sibcall.c: New.
+ 
+ 2024-09-03  Haochen Jiang  <haochen.jiang@intel.com>
+ 
+ 	* gcc.target/i386/avx512fp16-vfpclassph-1c.c: New test.
+ 
+ 2024-09-02  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	Backported from master:
+ 	2024-08-30  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* gcc.target/i386/pr116512.c: New test.
+ 
+ 2024-08-22  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* gcc.target/i386/pieces-memcpy-10.c: Use -mmove-max=256 and
+ 	-mstore-max=256.
+ 	* gcc.target/i386/pieces-memcpy-6.c: Ditto.
+ 	* gcc.target/i386/pieces-memset-38.c: Ditto.
+ 	* gcc.target/i386/pieces-memset-40.c: Ditto.
+ 	* gcc.target/i386/pieces-memset-41.c: Ditto.
+ 	* gcc.target/i386/pieces-memset-42.c: Ditto.
+ 	* gcc.target/i386/pieces-memset-43.c: Ditto.
+ 	* gcc.target/i386/pieces-strcpy-2.c: Ditto.
+ 
+ 2024-08-22  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	Backported from master:
+ 	2024-08-22  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* gcc.target/i386/pieces-memcpy-10.c: Add -mprefer-vector-width=128.
+ 	* gcc.target/i386/pieces-memcpy-6.c: Ditto.
+ 	* gcc.target/i386/pieces-memset-38.c: Ditto.
+ 	* gcc.target/i386/pieces-memset-40.c: Ditto.
+ 	* gcc.target/i386/pieces-memset-41.c: Ditto.
+ 	* gcc.target/i386/pieces-memset-42.c: Ditto.
+ 	* gcc.target/i386/pieces-memset-43.c: Ditto.
+ 	* gcc.target/i386/pieces-strcpy-2.c: Ditto.
+ 	* gcc.target/i386/pieces-memcpy-22.c: New test.
+ 	* gcc.target/i386/pieces-memset-51.c: New test.
+ 	* gcc.target/i386/pieces-strcpy-3.c: New test.
+ 
+ 2024-08-21  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	Backported from master:
+ 	2024-06-26  Alexandre Oliva  <oliva@adacore.com>
+ 		    Richard Earnshaw  <Richard.Earnshaw@arm.com>
+ 
+ 	PR tree-optimization/113281
+ 	* gcc.target/arm/simd/mve-vshr.c: Add expected ranges.
+ 
+ 2024-08-19  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	Backported from master:
+ 	2024-07-22  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* gcc.c-torture/compile/pr115277.c: New test.
+ 
+ 2024-08-18  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2024-08-18  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/116407
+ 	* gcc.target/avr/torture/pr116407-2.c: New test.
+ 	* gcc.target/avr/torture/pr116407-4.c: New test.
+ 
+ 2024-08-16  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2024-04-05  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR target/114603
+ 	* gcc.target/aarch64/sve/acle/general/cnot_1.c: New test.
+ 
+ 2024-08-16  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2024-04-08  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR target/114607
+ 	* gcc.target/aarch64/sve/acle/asm/sudot_s32.c: New test.
+ 
+ 2024-08-12  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	Backported from master:
+ 	2024-07-30  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* gcc.target/i386/pr116043.c: New test.
+ 
+ 2024-08-09  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/113063
+ 	PR c++/116289
+ 	* g++.dg/cpp2a/spaceship-synth16.C: New test.
+ 	* g++.dg/cpp2a/spaceship-synth16a.C: New test.
+ 
+ 2024-08-06  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	Backported from master:
+ 	2024-08-06  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR target/116189
+ 	* c-c++-common/torture/pr116189-1.c: New test.
+ 
+ 2024-08-05  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-07-18  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/108889
+ 	* gfortran.dg/pr108889.f90: New test.
+ 
+ 2024-07-30  Haochen Jiang  <haochen.jiang@intel.com>
+ 
+ 	* gcc.target/i386/prefetchi-1b.c: New test.
+ 
+ 2024-07-29  Haochen Jiang  <haochen.jiang@intel.com>
+ 
+ 	* gcc.target/i386/avx512bw-vpalignr-1b.c: New test.
+ 	* gcc.target/i386/avx512dq-vfpclasssd-1b.c: Ditto.
+ 	* gcc.target/i386/avx512dq-vfpclassss-1b.c: Ditto.
+ 	* gcc.target/i386/avx512dq-vreducesd-1b.c: Ditto.
+ 	* gcc.target/i386/avx512dq-vreducess-1b.c: Ditto.
+ 	* gcc.target/i386/avx512vl-valignq-1b.c: Ditto.
+ 
+ 2024-07-24  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	Backported from master:
+ 	2024-07-19  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	PR target/114759
+ 	PR target/115988
+ 	* gcc.target/powerpc/pr114759-3.c: Catch unsupported ABI errors.
+ 
+ 2024-07-24  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	Backported from master:
+ 	2024-07-17  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	PR target/114759
+ 	* gcc.target/powerpc/pr114759-3.c: New test.
+ 
+ 2024-07-24  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	Backported from master:
+ 	2024-07-17  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	PR target/114759
+ 	* gcc.target/powerpc/pr114759-2.c: New test.
+ 	* lib/target-supports.exp (rop_ok): Use
+ 	check_effective_target_has_arch_pwr8.
+ 
+ 2024-07-24  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	Backported from master:
+ 	2024-06-17  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	PR target/115389
+ 	* gcc.target/powerpc/pr115389.c: New test.
+ 
+ 2024-07-23  Haochen Jiang  <haochen.jiang@intel.com>
+ 
+ 	* gcc.target/i386/prefetchi-1.c: Check (%rip).
+ 
+ 2024-07-23  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	Backported from master:
+ 	2024-07-23  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	PR target/106069
+ 	* g++.target/powerpc/pr106069.C: Reorder dg directives.
+ 
+ 2024-07-21  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2024-07-19  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/103115
+ 	* gfortran.dg/string_array_constructor_4.f90: New test.
+ 
+ 2024-07-20  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-05-13  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/113363
+ 	* gfortran.dg/pr113363.f90: New test.
+ 
+ 2024-07-20  René Rebe  <rene@exactcode.de>
+ 
+ 	Backported from master:
+ 	2024-07-18  René Rebe  <rene@exactcode.de>
+ 		    Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	PR target/97367
+ 	* gcc.target/powerpc/pr97367.c: New test.
+ 
+ 2024-07-17  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	Backported from master:
+ 	2024-07-17  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/115526
+ 	* gcc.target/alpha/pr115526.c: New test.
+ 
+ 2024-07-15  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	Backported from master:
+ 	2024-07-15  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* gcc.target/i386/pr115872.c: New test.
+ 
+ 2024-07-13  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	Backported from master:
+ 	2024-07-12  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	PR target/115752
+ 	* gcc.target/loongarch/pr115752.c: New test.
+ 
+ 2024-07-12  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-05-23  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/103312
+ 	* gfortran.dg/pr103312.f90: New test.
+ 
+ 2024-07-11  Andre Vieira  <andre.simoesdiasvieira@arm.com>
+ 
+ 	Backported from master:
+ 	2024-07-11  Andre Vieira  <andre.simoesdiasvieira@arm.com>
+ 
+ 	* gcc.target/arm/mve/intrinsics/vsetq_lane_su64.c: New test.
+ 
+ 2024-07-10  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	Backported from master:
+ 	2024-07-10  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	PR target/105090
+ 	* gcc.target/arm/copysign_softfloat_1.c: Drop check for lsr
+ 
+ 2024-07-08  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-05-12  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/84006
+ 	PR fortran/100027
+ 	PR fortran/98534
+ 	* gfortran.dg/storage_size_7.f90: New test.
+ 	* gfortran.dg/transfer_class_4.f90: New test.
+ 
+ 2024-07-05  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2024-07-05  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/87376
+ 	* gcc.target/avr/torture/pr87376.c: New test.
+ 
+ 2024-07-04  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	Backported from master:
+ 	2024-07-03  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR target/115475
+ 	* gcc.target/aarch64/acle/bf16_sve_feature.c: New test.
+ 
+ 2024-07-04  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	Backported from master:
+ 	2024-07-03  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR target/115457
+ 	* gcc.target/aarch64/acle/bf16_feature.c: New test.
+ 
+ 2024-07-03  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2024-07-03  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/98762
+ 	* gcc.target/avr/torture/pr98762.c: New test.
+ 
+ 2024-07-03  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	Backported from master:
+ 	2024-06-26  Kewen Lin  <linkw@linux.ibm.com>
+ 		    Xionghu Luo  <xionghuluo@tencent.com>
+ 
+ 	PR target/106069
+ 	PR target/115355
+ 	* gcc.target/powerpc/pr106069-2.c: New test.
+ 
+ 2024-07-03  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	Backported from master:
+ 	2024-06-26  Kewen Lin  <linkw@linux.ibm.com>
+ 		    Xionghu Luo  <xionghuluo@tencent.com>
+ 
+ 	PR target/106069
+ 	PR target/115355
+ 	* gcc.target/powerpc/pr106069-1.c: New test.
+ 
+ 2024-07-01  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2024-07-01  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/88236
+ 	PR target/115726
+ 	* gcc.target/avr/torture/pr88236-pr115726.c: New test.
+ 
+ 2024-06-28  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	Backported from master:
+ 	2024-06-21  Kewen Lin  <linkw@linux.ibm.com>
+ 		    Xionghu Luo  <xionghuluo@tencent.com>
+ 
+ 	PR target/106069
+ 	PR target/115355
+ 	* g++.target/powerpc/pr106069.C: New test.
+ 	* gcc.target/powerpc/pr115355.c: New test.
+ 
+ 2024-06-27  Andrew Carlotti  <andrew.carlotti@arm.com>
+ 
+ 	Backported from master:
+ 	2023-12-16  Andrew Carlotti  <andrew.carlotti@arm.com>
+ 
+ 	PR target/115618
+ 	* gcc.target/aarch64/options_set_4.c: Add terminating newline.
+ 	* gcc.target/aarch64/options_set_27.c: New test.
+ 
+ 2024-06-24  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	Backported from master:
+ 	2024-05-29  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	PR target/114846
+ 	* gcc.target/powerpc/pr114846.c: New test.
+ 
+ 2024-06-20  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-06-17  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR driver/115440
+ 	* g++.dg/cpp1z/pr115440.C: New test.
+ 
+ 2024-06-19  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2024-06-04  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/83865
+ 	* gfortran.dg/allocate_with_source_32.f90: New test.
+ 
+ 2024-06-17  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-06-17  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/115290
+ 	* c-c++-common/Warray-compare-3.c: New test.
+ 
+ 2024-06-17  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-06-17  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/111343
+ 	PR c++/115511
+ 	* g++.dg/cpp23/ext-floating18.C: New test.
+ 
+ 2024-06-12  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	Backported from master:
+ 	2024-06-12  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 		    Yvan ROUX  <yvan.roux@foss.st.com>
+ 
+ 	PR target/115253
+ 	* gcc.target/arm/cmse/extend-return.c: Update test case
+ 	condition for Armv8.1-M.
+ 
+ 2024-06-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-06-06  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/114493
+ 	* gcc.dg/pr114493-1.c: New test.
+ 	* gcc.dg/pr114493-2.c: New test.
+ 
+ 2024-06-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-06-04  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/108789
+ 	* gcc.c-torture/execute/pr108789.c: New test.
+ 
+ 2024-06-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-05-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/114902
+ 	PR rtl-optimization/115092
+ 	* gcc.dg/pr114902.c: New test.
+ 	* gcc.dg/pr115092.c: New test.
+ 
+ 2024-06-10  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/incomplete8.adb: New test.
+ 
+ 2024-06-10  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/114398
+ 	* gnat.dg/access11.adb: New test.
+ 
+ 2024-06-03  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	Backported from master:
+ 	2024-05-31  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/115297
+ 	* gcc.target/alpha/pr115297.c: New test.
+ 
+ 2024-06-01  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2024-06-01  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR tree-optimization/115307
+ 	* gcc.target/avr/torture/pr115307-isinf.c: New test.
+ 
+ 2024-06-01  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2024-06-01  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/115317
+ 	* gcc.target/avr/torture/pr115317-isinf.c: New test.
+ 
+ 2024-05-31  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2024-01-29  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR target/113281
+ 	* gcc.dg/vect/pr113281-1.c: New test.
+ 	* gcc.dg/vect/pr113281-2.c: Likewise.
+ 	* gcc.dg/vect/pr113281-3.c: Likewise.
+ 	* gcc.dg/vect/pr113281-4.c: Likewise.
+ 	* gcc.dg/vect/pr113281-5.c: Likewise.
+ 
+ 2024-05-31  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2024-05-24  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR tree-optimization/115192
+ 	* gcc.dg/vect/pr115192.c: New test.
+ 
+ 2024-05-28  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	Backported from master:
+ 	2024-05-20  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	PR fortran/115150
+ 	* gfortran.dg/shape_12.f90: New test.
+ 
+ 2024-05-24  Jason Merrill  <jason@redhat.com>
+ 
+ 	Backported from master:
+ 	2023-09-22  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/111529
+ 	* g++.dg/ext/unroll-4.C: New test.
+ 
+ 2024-05-24  Jason Merrill  <jason@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-01-25  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/113598
+ 	* g++.dg/cpp0x/initlist-pmf2.C: New test.
+ 
+ 2024-05-22  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	Backported from master:
+ 	2024-05-22  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	* gcc.target/arm/cmse/extend-param.c: Add regression test. Add
+ 	-fshort-enums.
+ 	* gcc.target/arm/cmse/extend-return.c: Add -fshort-enums option.
+ 
+ 2024-05-22  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2024-05-05  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/114827
+ 	* gfortran.dg/asan/unlimited_polymorphic_34.f90: New test.
+ 
+ 2024-05-22  Andrew Jenner  <andrew@codesourcery.com>
+ 
+ 	Backported from master:
+ 	2023-11-28  Andrew Jenner  <andrew@codesourcery.com>
+ 		    Tobias Burnus   <tobias@codesourcery.com>
+ 
+ 	PR fortran/110415
+ 	* gfortran.dg/pr110415.f90: New test.
+ 	* gfortran.dg/asan/pr110415-2.f90: New test.
+ 	* gfortran.dg/asan/pr110415-3.f90: New test.
+ 
+ 2024-05-22  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-05-22  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/115152
+ 	* gcc.dg/pr115152.c: New test.
+ 
+ 2024-05-22  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-05-22  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR sanitizer/115172
+ 	* gcc.dg/asan/pr115172.c: New test.
+ 
+ 2024-05-21  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2024-05-11  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/115039
+ 	* gfortran.dg/statement_function_5.f90: New test.
+ 
+ 2024-05-21  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	Backported from master:
+ 	2024-04-10  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	PR testsuite/114662
+ 	* gcc.dg/lto/pr113359-2_0.c: Use unsigned long long instead of
+ 	unsigned long.
+ 	* gcc.dg/lto/pr113359-2_1.c: Likewise.
+ 
+ 2024-05-21  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	Backported from master:
+ 	2024-05-20  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR tree-optimization/115143
+ 	* gcc.c-torture/compile/pr115143-1.c: New test.
+ 	* gcc.c-torture/compile/pr115143-2.c: New test.
+ 	* gcc.c-torture/compile/pr115143-3.c: New test.
+ 
+ 2024-05-21  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	Backported from master:
+ 	2024-05-21  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR tree-optimization/115154
+ 	* c-c++-common/ubsan/signed1bitfield-1.c: New test.
+ 	* gcc.c-torture/execute/signed1bitfield-1.c: New test.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/gcc/testsuite/c-c++-common/Warray-compare-3.c gcc-13.4.0/gcc/testsuite/c-c++-common/Warray-compare-3.c
*** gcc-13.3.0/gcc/testsuite/c-c++-common/Warray-compare-3.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/c-c++-common/Warray-compare-3.c	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,13 ----
+ /* PR c/115290 */
+ /* { dg-do compile } */
+ /* { dg-options "-Warray-compare" } */
+ 
+ int a[32][32], b[32][32];
+ 
+ int
+ foo (int x, int y)
+ {
+   return (x ? a : b) == (y ? a : b); /* { dg-warning "comparison between two arrays" } */
+ /* { dg-message "use '&\\\(\[^\n\r]*\\\)\\\[0\\\] == &\\\(\[^\n\r]*\\\)\\\[0\\\]' to compare the addresses" "" { target c } .-1 } */
+ /* { dg-message "use unary '\\\+' which decays operands to pointers or '&\\\(\[^\n\r]*\\\)\\\[0\\\] == &\\\(\[^\n\r]*\\\)\\\[0\\\]' to compare the addresses" "" { target c++ } .-2 } */
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/c-c++-common/Wsizeof-pointer-memaccess5.c gcc-13.4.0/gcc/testsuite/c-c++-common/Wsizeof-pointer-memaccess5.c
*** gcc-13.3.0/gcc/testsuite/c-c++-common/Wsizeof-pointer-memaccess5.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/c-c++-common/Wsizeof-pointer-memaccess5.c	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,29 ----
+ /* PR c/117230 */
+ /* { dg-do compile } */
+ /* { dg-options "-Wsizeof-pointer-memaccess" } */
+ 
+ typedef int V __attribute__((vector_size (sizeof (int))));
+ 
+ void
+ foo (V *a, char *b)
+ {
+   __builtin_memcpy (b, a, sizeof (a));		/* { dg-warning "argument to 'sizeof' in '\[^\n\r]*__builtin_memcpy\[^\n\r]*' call is the same expression as the source; did you mean to dereference it\\\?" } */
+ }
+ 
+ void
+ bar (V *a, char *b)
+ {
+   __builtin_memcpy (a, b, sizeof (a));		/* { dg-warning "argument to 'sizeof' in '\[^\n\r]*__builtin_memcpy\[^\n\r]*' call is the same expression as the destination; did you mean to dereference it\\\?" } */
+ }
+ 
+ int
+ baz (V *a, char *b)
+ {
+   return __builtin_memcmp (a, b, sizeof (a));	/* { dg-warning "argument to 'sizeof' in '\[^\n\r]*__builtin_memcmp\[^\n\r]*' call is the same expression as the first source; did you mean to dereference it\\\?" } */
+ }
+ 
+ int
+ qux (V *a, char *b)
+ {
+   return __builtin_memcmp (b, a, sizeof (a));	/* { dg-warning "argument to 'sizeof' in '\[^\n\r]*__builtin_memcmp\[^\n\r]*' call is the same expression as the second source; did you mean to dereference it\\\?" } */
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/c-c++-common/cpp/pr115913.c gcc-13.4.0/gcc/testsuite/c-c++-common/cpp/pr115913.c
*** gcc-13.3.0/gcc/testsuite/c-c++-common/cpp/pr115913.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/c-c++-common/cpp/pr115913.c	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,7 ----
+ /* { dg-do preprocess } */
+ /* PR middle-end/115913 */
+ #pragma GCC push_options
+ #pragma GCC diagnostic warning "-Wundef"
+ /* The call to cl_optimization_compare performed by pop_options should not
+    lead to a checking failure.  */
+ #pragma GCC pop_options
diff -Nrcpad gcc-13.3.0/gcc/testsuite/c-c++-common/gomp/pr119000.c gcc-13.4.0/gcc/testsuite/c-c++-common/gomp/pr119000.c
*** gcc-13.3.0/gcc/testsuite/c-c++-common/gomp/pr119000.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/c-c++-common/gomp/pr119000.c	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,16 ----
+ /* PR c/119000 */
+ /* { dg-do compile } */
+ /* { dg-options "-fopenmp -Wunused-but-set-variable" } */
+ 
+ int
+ foo (void)
+ {
+   int a = 1, b, c = 1, v;	/* { dg-warning "variable 'b' set but not used" } */
+   #pragma omp atomic write
+   v = a;
+   #pragma omp atomic read
+   b = v;
+   #pragma omp atomic update
+   v += c;
+   return v;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/c-c++-common/raw-string-directive-3.c gcc-13.4.0/gcc/testsuite/c-c++-common/raw-string-directive-3.c
*** gcc-13.3.0/gcc/testsuite/c-c++-common/raw-string-directive-3.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/c-c++-common/raw-string-directive-3.c	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-options "-std=gnu99" { target c } } */
+ /* { dg-options "-std=c++11" { target c++ } } */
+ 
+ /* { dg-error "invalid new-line in raw string delimiter" "" { target *-*-* } .+4 } */
+ /* { dg-error "unterminated raw string" "" { target *-*-* } .+3 } */
+ /* { dg-error "stray 'R' in program" "" { target *-*-* } .+2 } */
+ /* { dg-warning "expected a string" "" { target *-*-* } .+1 } */
+ #pragma message R""
diff -Nrcpad gcc-13.3.0/gcc/testsuite/c-c++-common/raw-string-directive-4.c gcc-13.4.0/gcc/testsuite/c-c++-common/raw-string-directive-4.c
*** gcc-13.3.0/gcc/testsuite/c-c++-common/raw-string-directive-4.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/c-c++-common/raw-string-directive-4.c	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-options "-std=gnu99" { target c } } */
+ /* { dg-options "-std=c++11" { target c++ } } */
+ 
+ /* { dg-error "invalid new-line in raw string delimiter" "" { target *-*-* } .+4 } */
+ /* { dg-error "unterminated raw string" "" { target *-*-* } .+3 } */
+ /* { dg-error "stray 'R' in program" "" { target *-*-* } .+2 } */
+ /* { dg-warning "expected a string" "" { target *-*-* } .+1 } */
+ _Pragma("message R\"\"")
diff -Nrcpad gcc-13.3.0/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-1.c gcc-13.4.0/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-1.c
*** gcc-13.3.0/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-1.c	Tue May 21 07:47:39 2024
--- gcc-13.4.0/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-1.c	Thu Jun  5 16:02:59 2025
***************
*** 1,4 ****
--- 1,5 ----
  /* PR libstdc++/88101 */
+ /* { dg-do run } */
  
  int i1, i2;
  long double l1, l2;
diff -Nrcpad gcc-13.3.0/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-2.c gcc-13.4.0/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-2.c
*** gcc-13.3.0/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-2.c	Tue May 21 07:47:39 2024
--- gcc-13.4.0/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-2.c	Thu Jun  5 16:02:59 2025
***************
*** 1,4 ****
--- 1,5 ----
  /* PR libstdc++/88101 */
+ /* { dg-do run } */
  
  typedef int T __attribute__((aligned (16384)));
  struct S { char a; short b; long double c; T d; T e; long long f; };
diff -Nrcpad gcc-13.3.0/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-3.c gcc-13.4.0/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-3.c
*** gcc-13.3.0/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-3.c	Tue May 21 07:47:39 2024
--- gcc-13.4.0/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-3.c	Thu Jun  5 16:02:59 2025
***************
*** 1,4 ****
--- 1,5 ----
  /* PR libstdc++/88101 */
+ /* { dg-do run } */
  
  union V { char a; signed char b; unsigned char c; };
  struct T { char a; int b; union V c; };
*************** main ()
*** 33,39 ****
    foo (&s1, 0);
    foo (&s2, 0);
    __builtin_clear_padding (&s2);
!   if (s2.b.a != (char) -1)
      __builtin_abort ();
    __builtin_clear_padding (&s2.b.a);
    __builtin_memset (&s2.b.a + 1, 0, sizeof (union U) - sizeof (s2.b.a));
--- 34,40 ----
    foo (&s1, 0);
    foo (&s2, 0);
    __builtin_clear_padding (&s2);
!   if (s2.b.a != -1)
      __builtin_abort ();
    __builtin_clear_padding (&s2.b.a);
    __builtin_memset (&s2.b.a + 1, 0, sizeof (union U) - sizeof (s2.b.a));
diff -Nrcpad gcc-13.3.0/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-4.c gcc-13.4.0/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-4.c
*** gcc-13.3.0/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-4.c	Tue May 21 07:47:39 2024
--- gcc-13.4.0/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-4.c	Thu Jun  5 16:02:59 2025
***************
*** 1,6 ****
- /* { dg-require-effective-target alloca } */
- 
  /* PR libstdc++/88101 */
  
  struct S { char a; short b; char c; };
  
--- 1,6 ----
  /* PR libstdc++/88101 */
+ /* { dg-do run } */
+ /* { dg-require-effective-target alloca } */
  
  struct S { char a; short b; char c; };
  
diff -Nrcpad gcc-13.3.0/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-5.c gcc-13.4.0/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-5.c
*** gcc-13.3.0/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-5.c	Tue May 21 07:47:39 2024
--- gcc-13.4.0/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-5.c	Thu Jun  5 16:02:59 2025
***************
*** 1,4 ****
--- 1,5 ----
  /* PR libstdc++/88101 */
+ /* { dg-do run } */
  
  struct S { char a; short b; char c; } s1[24], s2[24];
  struct T { char a; long long b; char c; struct S d[3]; long long e; char f; } t1, t2;
diff -Nrcpad gcc-13.3.0/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-6.c gcc-13.4.0/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-6.c
*** gcc-13.3.0/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-6.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-6.c	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,28 ----
+ /* PR middle-end/115527 */
+ /* { dg-do run } */
+ 
+ struct T { struct S { double a; signed char b; long c; } d[3]; int e; } t1, t2;
+ 
+ __attribute__((noipa)) void
+ foo (struct T *t)
+ {
+   for (int i = 0; i < 3; ++i)
+     {
+       t->d[i].a = 1. + 3 * i;
+       t->d[i].b = 2 + 3 * i;
+       t->d[i].c = 3 + 3 * i;
+     }
+   t->e = 10;
+ }
+ 
+ int
+ main ()
+ {
+   __builtin_memset (&t2, -1, sizeof (t2));
+   foo (&t1);
+   foo (&t2);
+   __builtin_clear_padding (&t2);
+   if (__builtin_memcmp (&t1, &t2, sizeof (t1)))
+     __builtin_abort ();
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/c-c++-common/torture/pr113546-1.c gcc-13.4.0/gcc/testsuite/c-c++-common/torture/pr113546-1.c
*** gcc-13.3.0/gcc/testsuite/c-c++-common/torture/pr113546-1.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/c-c++-common/torture/pr113546-1.c	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-fcompare-debug" } */
+ 
+ int x;
+ void f() {
+ fail:
+   switch (x) { case 0: goto fail;; }
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/c-c++-common/torture/pr116189-1.c gcc-13.4.0/gcc/testsuite/c-c++-common/torture/pr116189-1.c
*** gcc-13.3.0/gcc/testsuite/c-c++-common/torture/pr116189-1.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/c-c++-common/torture/pr116189-1.c	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,30 ----
+ /* { dg-additional-options "-fcompare-debug" } */
+ 
+ /* PR target/116189 */
+ 
+ /* In the sh backend, we used to create insn in the path of rtx_costs.
+    This means sometimes the max uid for insns would be different between
+    debugging and non debugging which then would cause gcse's hashtable
+    to have different number of slots which would cause a different walk
+    for that hash table.  */
+ 
+ extern void ff(void);
+ extern short nn[8][4];
+ typedef unsigned short move_table[4];
+ extern signed long long ira_overall_cost;
+ extern signed long long ira_load_cost;
+ extern move_table *x_ira_register_move_cost[1];
+ struct move { struct move *next; };
+ unsigned short t;
+ void emit_move_list(struct move * list, int freq, unsigned char mode, int regno) {
+   int cost;
+   for (; list != 0; list = list->next)
+   {
+     ff();
+     unsigned short aclass = t;
+     cost = (nn)[mode][aclass] ;
+     ira_load_cost = cost;
+     cost = x_ira_register_move_cost[mode][aclass][aclass] * freq ;
+     ira_overall_cost = cost;
+   }
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/c-c++-common/torture/pr117912-1.c gcc-13.4.0/gcc/testsuite/c-c++-common/torture/pr117912-1.c
*** gcc-13.3.0/gcc/testsuite/c-c++-common/torture/pr117912-1.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/c-c++-common/torture/pr117912-1.c	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,28 ----
+ /* { dg-do run } */
+ 
+ struct S { int a; int b[24]; int c[24]; int d; };
+ volatile int *p;
+ 
+ void __attribute__((noipa))
+ bar (int *q)
+ {
+  p = q;
+ }
+ 
+ __SIZE_TYPE__ __attribute__((noipa))
+ foo (struct S *p)
+ {
+   bar (&p->b[24]);
+   bar (&p->c[0]);
+   return __builtin_object_size (&p->c[0], 1);
+ }
+ 
+ int
+ main()
+ {
+   struct S s;
+   __SIZE_TYPE__ x = foo (&s);
+   if (x < sizeof (int) * 24)
+     __builtin_abort ();
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/c-c++-common/torture/pr117912-2.c gcc-13.4.0/gcc/testsuite/c-c++-common/torture/pr117912-2.c
*** gcc-13.3.0/gcc/testsuite/c-c++-common/torture/pr117912-2.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/c-c++-common/torture/pr117912-2.c	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,28 ----
+ /* { dg-do run } */
+ 
+ struct S { int a; int b[0]; int c[24]; int d; };
+ volatile int *p;
+ 
+ void __attribute__((noipa))
+ bar (int *q)
+ {
+  p = q;
+ }
+ 
+ __SIZE_TYPE__ __attribute__((noipa))
+ foo (struct S *p)
+ {
+   bar (&p->b[0]);
+   bar (&p->c[0]);
+   return __builtin_object_size (&p->c[0], 1);
+ }
+ 
+ int
+ main()
+ {
+   struct S s;
+   __SIZE_TYPE__ x = foo (&s);
+   if (x < sizeof (int) * 24)
+     __builtin_abort ();
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/c-c++-common/torture/pr117912-3.c gcc-13.4.0/gcc/testsuite/c-c++-common/torture/pr117912-3.c
*** gcc-13.3.0/gcc/testsuite/c-c++-common/torture/pr117912-3.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/c-c++-common/torture/pr117912-3.c	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,61 ----
+ /* { dg-do run } */
+ /* { dg-additional-options "-std=gnu++20" { target c++ } } */
+ 
+ struct B {};
+ struct A { int a;
+ #ifdef __cplusplus
+ 	   [[no_unique_address]]
+ #endif
+ 	   struct B b;
+ 	   char c[]; };
+ volatile void *p;
+ 
+ void __attribute__((noipa))
+ bar (void *q)
+ {
+   p = q;
+ }
+ 
+ __SIZE_TYPE__ __attribute__((noipa))
+ foo (struct A *p)
+ {
+   bar (&p->b);
+   bar (&p->c);
+   return __builtin_object_size (&p->c, 1);
+ }
+ 
+ __SIZE_TYPE__ __attribute__((noipa))
+ baz (void)
+ {
+   struct A *p = (struct A *) __builtin_malloc (__builtin_offsetof (struct A, c) + 64);
+   bar (&p->b);
+   bar (&p->c);
+   return __builtin_object_size (&p->c, 1);
+ }
+ 
+ __SIZE_TYPE__ __attribute__((noipa))
+ qux (struct A *p)
+ {
+   bar (&p->b);
+   bar (&p->c);
+   return __builtin_object_size (&p->c, 3);
+ }
+ 
+ __SIZE_TYPE__ __attribute__((noipa))
+ boo (void)
+ {
+   struct A *p = (struct A *) __builtin_malloc (__builtin_offsetof (struct A, c) + 64);
+   bar (&p->b);
+   bar (&p->c);
+   return __builtin_object_size (&p->c, 3);
+ }
+ 
+ int
+ main ()
+ {
+   static struct A a = { .a = 1, .b = {}, .c = { 1, 2, 3, 4, 0 } };
+   if (foo (&a) < 5)
+     __builtin_abort ();
+   if (baz () < 64)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/c-c++-common/ubsan/signed1bitfield-1.c gcc-13.4.0/gcc/testsuite/c-c++-common/ubsan/signed1bitfield-1.c
*** gcc-13.3.0/gcc/testsuite/c-c++-common/ubsan/signed1bitfield-1.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/c-c++-common/ubsan/signed1bitfield-1.c	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,25 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2 -fsanitize=undefined" } */
+ 
+ /* PR tree-optimization/115154 */
+ /* This was being miscompiled with -fsanitize=undefined due to
+    `(signed:1)(t*5)` being transformed into `-((signed:1)t)` which
+    is undefined. */
+ 
+ struct s {
+   signed b : 1;
+ } f;
+ int i = 55;
+ __attribute__((noinline))
+ void check(int a)
+ {
+         if (!a)
+         __builtin_abort();
+ }
+ int main() {
+     int t = i != 5;
+     t = t*5;
+     f.b = t;
+     int tt = f.b;
+     check(f.b);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/asan/pr118763.C gcc-13.4.0/gcc/testsuite/g++.dg/asan/pr118763.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/asan/pr118763.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/asan/pr118763.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,15 ----
+ // PR c++/118763
+ // { dg-do run }
+ 
+ int *
+ foo (bool x)
+ {
+   return new int (({ if (x) return nullptr; 1; }));
+ }
+ 
+ int
+ main ()
+ {
+   delete foo (true);
+   delete foo (false);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp0x/alias-decl-variadic3.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp0x/alias-decl-variadic3.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp0x/alias-decl-variadic3.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp0x/alias-decl-variadic3.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,22 ----
+ // PR c++/118104
+ // { dg-do compile { target c++11 } }
+ 
+ template<typename... Zs> struct Z { };
+ 
+ template <class... Ts> struct X {
+   template <class... Us> using W = Z<void(Ts, Us)...>;
+   template <class... Us> using Y = X<void(Ts, Us)...>;
+ };
+ 
+ template <class A, class... P>
+ using foo = X<int, int>::W<A, P...>;
+ 
+ template <class A, class... P>
+ using bar = X<int, int>::Y<A, P...>;
+ 
+ void
+ g ()
+ {
+   foo<int, int> f;
+   bar<int, int> b;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp0x/constexpr-redeclaration3.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp0x/constexpr-redeclaration3.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp0x/constexpr-redeclaration3.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp0x/constexpr-redeclaration3.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,13 ----
+ // PR c++/111132
+ // { dg-do compile { target c++11 } }
+ 
+ constexpr bool bar(void) {
+     return true;
+ }
+ 
+ constexpr bool foo() {
+     constexpr bool bar(void);
+     return bar();
+ }
+ 
+ static_assert(foo(), "");
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp0x/constexpr-redeclaration4.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp0x/constexpr-redeclaration4.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp0x/constexpr-redeclaration4.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp0x/constexpr-redeclaration4.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,14 ----
+ // PR c++/111132
+ // { dg-do compile { target c++11 } }
+ 
+ constexpr bool bar(void) {
+     return true;
+ }
+ 
+ constexpr bool bar(void);
+ 
+ constexpr bool foo() {
+     return bar();
+ }
+ 
+ static_assert(foo(), "");
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp0x/constexpr-union9.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp0x/constexpr-union9.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp0x/constexpr-union9.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp0x/constexpr-union9.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,16 ----
+ // PR c++/118661
+ // { dg-do compile { target c++11 } }
+ 
+ using nullptr_t = decltype (nullptr);
+ union U { int i; nullptr_t n; };
+ constexpr U u = { 42 };
+ static_assert (u.n == nullptr, "");
+ 
+ #if __cplusplus >= 201402L
+ constexpr nullptr_t
+ foo ()
+ {
+   union U { int i; nullptr_t n; } u = { 42 };
+   return u.n;
+ }
+ #endif
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp0x/constexpr-volatile4.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp0x/constexpr-volatile4.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp0x/constexpr-volatile4.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp0x/constexpr-volatile4.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,20 ----
+ // PR c++/118661
+ // { dg-do compile { target c++11 } }
+ 
+ using nullptr_t = decltype (nullptr);
+ constexpr volatile nullptr_t a = {};
+ constexpr nullptr_t b = a;
+ 
+ constexpr nullptr_t
+ foo ()
+ {
+ #if __cplusplus >= 201402L
+   volatile nullptr_t c = {};
+   return c;
+ #else
+   return nullptr;
+ #endif
+ }
+ 
+ static_assert (b == nullptr, "");
+ static_assert (foo () == nullptr, "");
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp0x/initlist-array23.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp0x/initlist-array23.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp0x/initlist-array23.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp0x/initlist-array23.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,28 ----
+ // PR c++/117985
+ // { dg-do compile { target c++11 } }
+ 
+ struct _Vector_impl {
+   constexpr
+     _Vector_impl() {}
+ };
+ struct _Vector_base {
+   ~_Vector_base();
+   _Vector_impl _M_impl;
+ };
+ struct vector : private _Vector_base {};
+ struct string {
+   string();
+ };
+ struct VEC {
+   vector pane{};
+ };
+ struct FOO {
+   VEC screen[1]{};
+   string debug_name;
+ };
+ 
+ int
+ main ()
+ {
+   FOO{};
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp0x/initlist-array24.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp0x/initlist-array24.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp0x/initlist-array24.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp0x/initlist-array24.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,27 ----
+ // PR c++/117985
+ // { dg-do compile { target c++20 } }
+ 
+ struct _Vector_impl {
+   constexpr _Vector_impl() {}
+ };
+ struct _Vector_base {
+   constexpr ~_Vector_base() {}
+   _Vector_impl _M_impl;
+ };
+ struct vector : private _Vector_base {};
+ struct string {
+   string();
+ };
+ struct VEC {
+   vector pane{};
+ };
+ struct FOO {
+   VEC screen[1]{};
+   string debug_name;
+ };
+ 
+ int
+ main ()
+ {
+   FOO{};
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp0x/initlist-pmf2.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp0x/initlist-pmf2.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp0x/initlist-pmf2.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp0x/initlist-pmf2.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,12 ----
+ // PR c++/113598
+ // { dg-additional-options -Wno-c++11-extensions }
+ 
+ struct Cpu
+ {
+   int op_nop();
+ };
+ typedef int(Cpu::*OpCode)();
+ void f()
+ {
+   new OpCode[256]{&Cpu::op_nop};
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp0x/initlist100.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp0x/initlist100.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp0x/initlist100.C	Tue May 21 07:47:39 2024
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp0x/initlist100.C	Thu Jun  5 16:02:59 2025
***************
*** 2,10 ****
  // { dg-do compile { target c++11 } }
  
  namespace std {
! template <class> class initializer_list;  // { dg-message "declaration" }
  }
  
  template <typename T> struct B { B (std::initializer_list<T>); };
  struct C { virtual int foo (); };
! struct D : C {} d { B<C> { D {} } };  // { dg-error "incomplete|no matching" }
--- 2,10 ----
  // { dg-do compile { target c++11 } }
  
  namespace std {
! template <class> class initializer_list;
  }
  
  template <typename T> struct B { B (std::initializer_list<T>); };
  struct C { virtual int foo (); };
! struct D : C {} d { B<C> { D {} } };  // { dg-error "no matching" }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp0x/noexcept83.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp0x/noexcept83.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp0x/noexcept83.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp0x/noexcept83.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,37 ----
+ // PR c++/113158
+ // { dg-do compile { target c++11 } }
+ 
+ template<typename T>
+ struct V {
+   static constexpr bool t = false;
+ };
+ struct base {
+     virtual int f() = 0;
+ };
+ 
+ template<typename T>
+ struct derived : base {
+     int f() noexcept(V<T>::t) override;
+ };
+ 
+ struct base2 {
+     virtual int f() noexcept = 0;
+ };
+ 
+ template<bool B>
+ struct W {
+   static constexpr bool t = B;
+ };
+ 
+ template<bool B>
+ struct derived2 : base2 {
+     int f() noexcept(W<B>::t) override; // { dg-error "looser exception specification" }
+ };
+ 
+ void
+ g ()
+ {
+   derived<int> d1;
+   derived2<false> d2; // { dg-message "required from here" }
+   derived2<true> d3;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp0x/noexcept84.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp0x/noexcept84.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp0x/noexcept84.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp0x/noexcept84.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,32 ----
+ // PR c++/114114
+ // { dg-do compile { target c++11 } }
+ 
+ template<bool B>
+ constexpr void
+ test ()
+ {
+   constexpr bool is_yes = B;
+   struct S {
+     constexpr S() noexcept(is_yes) { }
+   };
+   S s;
+ }
+ 
+ constexpr bool foo() { return true; }
+ 
+ template<typename T>
+ constexpr void
+ test2 ()
+ {
+   constexpr T (*pfn)() = &foo;
+   struct S {
+     constexpr S() noexcept(pfn()) { }
+   };
+   S s;
+ }
+ 
+ int main()
+ {
+   test<true>();
+   test2<bool>();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp0x/noexcept85.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp0x/noexcept85.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp0x/noexcept85.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp0x/noexcept85.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,33 ----
+ // PR c++/114349
+ // { dg-do compile { target c++11 } }
+ 
+ using A = struct {};
+ template <template <typename> class, typename, typename>
+ using B = A;
+ template <typename T>
+ using C = typename T::D;
+ struct E {
+   using D = B<C, int, A>;
+ };
+ template <class> constexpr bool foo (A) { return false; }
+ template <class T> struct F {
+   using G = T;
+   using H = E;
+   F(const F &);
+   void operator=(F) noexcept(foo <G> (H::D{}));
+ };
+ template <typename, typename, typename>
+ using I = F<int>;
+ template <typename K, typename V, typename H = K>
+ using J = I<K, V, H>;
+ struct K {
+   typedef J<long, char> L;
+   L k;
+   K();
+ };
+ struct M {
+   bool bar () const;
+   K::L m;
+ };
+ K n;
+ bool M::bar () const { n.k = m; return true; }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp0x/noexcept86.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp0x/noexcept86.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp0x/noexcept86.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp0x/noexcept86.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,25 ----
+ // PR c++/114349
+ // { dg-do compile { target c++14 } }
+ 
+ struct B
+ {
+   int i;
+ };
+ 
+ template <bool BA>
+ void
+ goo ()
+ {
+   constexpr bool is_yes = BA;
+   struct C
+   {
+     static auto g(B b) noexcept(is_yes) { }
+   };
+   C::g({});
+ }
+ 
+ void
+ x ()
+ {
+   goo<false>();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer7.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer7.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer7.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer7.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,13 ----
+ // PR c++/118147
+ // { dg-do compile { target c++11 } }
+ 
+ struct F {
+   int i = []{
+     #pragma message "test"  // { dg-message "test" }
+     return 1;
+   }();
+ };
+ 
+ struct G {
+   int i =
+     #pragma GCC diagnostic push  // { dg-error "file ends in default argument|expected" }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp0x/nsdmi-list10.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp0x/nsdmi-list10.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp0x/nsdmi-list10.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp0x/nsdmi-list10.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,35 ----
+ // PR c++/118047
+ // { dg-do compile { target c++11 } }
+ 
+ typedef decltype(sizeof(char)) size_t;
+ 
+ namespace std {
+ template <typename T>
+ struct initializer_list {
+   const T *_M_array;
+   size_t _M_len;
+   constexpr size_t size() const { return _M_len; }
+ };
+ }
+ 
+ enum E {
+     One
+ };
+ 
+ struct A {
+     E e = One;
+ };
+ 
+ struct B {
+     A as[1] {};
+ };
+ 
+ struct V
+ {
+   constexpr V(const std::initializer_list<B> &a) : size(a.size()){}
+   int size;
+ };
+ 
+ constexpr V a{{}};
+ 
+ static_assert(a.size == 1, "");
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp0x/nsdmi-list9.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp0x/nsdmi-list9.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp0x/nsdmi-list9.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp0x/nsdmi-list9.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,34 ----
+ // PR c++/118355
+ // { dg-do compile { target c++11 } }
+ 
+ enum MY_ENUM
+ {
+   ZERO,
+ };
+ 
+ struct FOO
+ {
+   MY_ENUM type = ZERO;
+ };
+ 
+ struct ARR
+ {
+   FOO array[1] = {};
+ };
+ 
+ template<typename>
+ struct ARR2
+ {
+   FOO array[1] = {};
+ };
+ 
+ void
+ g ()
+ {
+ 
+   ARR arr;
+   arr = {};
+ 
+   ARR2<int> arr2;
+   arr2 = {};
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp0x/pr119123.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp0x/pr119123.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp0x/pr119123.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp0x/pr119123.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,10 ----
+ // PR c++/119123
+ // { dg-do compile { target c++11 } }
+ // { dg-options "-O2 -g" }
+ 
+ struct S {
+   template <typename> void foo (int = [] {}) const;
+ };
+ struct T {
+   static void bar (const S &);
+ };
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp0x/pr98533.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp0x/pr98533.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp0x/pr98533.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp0x/pr98533.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,25 ----
+ // PR c++/98533
+ // { dg-do compile { target c++11 } }
+ // { dg-options "-g" }
+ 
+ class IR;
+ struct Pass {
+   explicit Pass(IR *ir) : ir_(ir) {}
+   virtual ~Pass() = default;
+   IR *ir_ {nullptr};
+ };
+ struct PassManager {
+   template <typename T> void RunPass() { T pass(ir_); }
+   IR *ir_ {nullptr};
+ };
+ struct IR final {
+   template <typename T> void RunPass() { pass_manager_.RunPass<T>(); }
+   PassManager pass_manager_;
+ };
+ struct ThePass : Pass {
+   explicit ThePass(IR *ir) : Pass(ir) {}
+   ThePass(const ThePass &) = delete;
+   template <typename Func = bool (*)(void *)> void Bar(void *inst, Func func = [](void *) {});
+ };
+ 
+ void foo(IR *ir) { ir->RunPass<ThePass>(); }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp1y/constexpr-110382.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp1y/constexpr-110382.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp1y/constexpr-110382.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp1y/constexpr-110382.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,17 ----
+ // PR c++/110382
+ // { dg-do compile { target c++14 } }
+ 
+ struct S {
+   double a = 0;
+ };
+ 
+ constexpr double
+ g ()
+ {
+   S arr[1];
+   S s = arr[0];
+   (void) arr[0];
+   return s.a;
+ }
+ 
+ int main() { return  g (); }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp1y/constexpr-complex2.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp1y/constexpr-complex2.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp1y/constexpr-complex2.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp1y/constexpr-complex2.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,18 ----
+ // PR c++/119045
+ // { dg-do compile { target c++14 } }
+ 
+ constexpr float
+ foo ()
+ {
+   __complex__ float f {1, 2};
+   float s = __real__ f + __imag__ f;
+   float &r = __real__ f;
+   float &i = __imag__ f;
+   r = 42;
+   s += __real__ f;
+   i = 3;
+   s += __imag__ f;
+   return s;
+ }
+ 
+ static_assert (foo () == 48.0f, "");
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp1y/constexpr-recursion2.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp1y/constexpr-recursion2.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp1y/constexpr-recursion2.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp1y/constexpr-recursion2.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,22 ----
+ // PR c++/115657
+ // { dg-do compile { target c++14 } }
+ // { dg-options "-Wall" }
+ 
+ // Like constexpr-recursion1.C but use a class with a conversion function.
+ 
+ struct X {
+   constexpr operator int() { return 0; }
+ };
+ 
+ template <int N>
+ constexpr X f1 ()
+ {
+   enum E { a = f1<0> () }; // { dg-error "called in a constant expression before its definition is complete|is not an integer constant" }
+   return {};
+ }
+ 
+ constexpr X f3 ()
+ {
+   enum E { a = f3 () };	// { dg-error "called in a constant expression before its definition is complete|is not an integer constant" }
+   return {};
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp1y/lambda-ice4.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp1y/lambda-ice4.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp1y/lambda-ice4.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp1y/lambda-ice4.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,63 ----
+ // PR c++/114292
+ // { dg-do "compile" { target c++14 } }
+ // { dg-additional-options "-Wno-vla" }
+ 
+ #define ASSERT_CAPTURE_NUMBER(Lambda, NumCaptures) \
+   { \
+     auto oneCapture = [&](auto) { int t[c]; }; \
+     const auto sizeOneCapture = sizeof (oneCapture); \
+     const auto expected = NumCaptures ? NumCaptures * sizeOneCapture : 1; \
+     static_assert (sizeof (Lambda) == expected, ""); \
+   }
+ 
+ template<int r, int c>
+ struct Want_a_Typedef { typedef int Type[r*c]; };
+     
+ void foo (int c)
+ {
+   constexpr int r = 4;
+ 
+   // This used to ICE.
+   auto ice_1 = [&](auto) { int t[c * r]; };
+   ice_1 (0);
+   ASSERT_CAPTURE_NUMBER (ice_1, 2);
+ 
+   // Another ICE identified following a great question in the patch submission
+   // mail thread.
+   auto ice_2 = [&](auto) { typedef int MyT[c*r]; };
+   ice_2 (0);
+   ASSERT_CAPTURE_NUMBER (ice_2, 2);
+ 
+   // All those worked already, but were not covered by any test - do it here.
+   auto ok_0 = [&](auto) { typedef int MyT[c*r]; MyT t; };
+   ok_0 (0);
+   ASSERT_CAPTURE_NUMBER (ok_0, 2);
+ 
+   auto ok_1 = [&](auto) { Want_a_Typedef<r, 42>::Type t; };
+   ok_1 (0);
+   ASSERT_CAPTURE_NUMBER (ok_1, 0);
+ 
+   auto ok_2 = [&](auto) { int t[c]; };
+   ok_2 (0);
+   ASSERT_CAPTURE_NUMBER (ok_2, 1);
+ 
+   auto ok_3 = [&](auto) { int n = r * c; int t[n]; };
+   ok_3 (0);
+   ASSERT_CAPTURE_NUMBER (ok_3, 2);
+ 
+   auto ok_4 = [&](auto) { int t[r]; };
+   ok_4 (0);
+   ASSERT_CAPTURE_NUMBER (ok_4, 0);
+ 
+   auto ok_5 = [&](auto) { int t[c * 4]; };
+   ok_5 (0);
+   ASSERT_CAPTURE_NUMBER (ok_5, 1);
+ 
+   auto ok_6 = [&](auto) { int t[1]; };
+   ok_6 (0);
+   ASSERT_CAPTURE_NUMBER (ok_6, 0);
+ 
+   auto ok_7 = [&](auto) { int t[c * r]; };
+   ok_7 (0);
+   ASSERT_CAPTURE_NUMBER (ok_7, 2);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr20.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr20.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr20.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr20.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,17 ----
+ // PR c++/109966
+ // { dg-do compile { target c++14 } }
+ 
+ #define SA(X) static_assert ((X),#X)
+ 
+ struct A {
+   int a;
+   int b = a;
+ };
+ 
+ struct B {
+   int x = 0;
+   int y[1]{A{x}.b};
+ };
+ 
+ constexpr B b = { };
+ SA(b.y[0] == 0);
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr21.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr21.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr21.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr21.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,59 ----
+ // PR c++/109966
+ // { dg-do compile { target c++14 } }
+ 
+ struct k {
+   k(const char *);
+ };
+ struct M {
+   k name;
+   int j = 42;
+   int i = j;
+ };
+ 
+ M m = M{""};
+ 
+ struct S {
+   M arr1[1]{M{""}};
+   M a1[1] = { (M{""}) };
+   M a2[1] = { (true, M{""}) };
+   M a3[1] = { true ? M{""} : M{""} };
+   M arr2[2]{M{""}, M{""}};
+   M arr3[3]{M{""}, M{""}, M{""}};
+ 
+   M arr1e[1] = {M{""}};
+   M arr2e[2] = {M{""}, M{""}};
+   M arr3e[3] = {M{""}, M{""}, M{""}};
+ 
+   M arr1l[1] = { m };
+   M arr2l[2] = { m, m };
+   M arr3l[3] = { m, m, m };
+ 
+   M m1 = M{""};
+   M m2 = m;
+   M m3{M{""}};
+   M m4 = {M{""}};
+ } o;
+ 
+ struct N {
+   N(M);
+ };
+ 
+ struct Z {
+   N arr1[1]{ M{""} };
+   N arr2[2]{ M{""}, M{""} };
+   N arr1e[1] = { M{""} };
+   N arr2e[2] = { M{""}, M{""} };
+ } z;
+ 
+ struct Y {
+   k name;
+   int j = 42;
+   int i = j;
+   operator M();
+ };
+ 
+ struct W {
+   M arr1[1]{ Y{""} };
+   M arr2[2]{ Y{""}, Y{""} };
+   M arr3[3]{ Y{""}, Y{""}, Y{""} };
+ } w;
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr22.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr22.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr22.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr22.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,12 ----
+ // PR c++/114854
+ // { dg-do compile { target c++14 } }
+ 
+ struct Vector {
+   int m_size;
+ };
+ struct S {
+   const Vector &vec{};
+ };
+ 
+ void spawn(S);
+ void test() { spawn({}); }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp1y/var-templ87.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp1y/var-templ87.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp1y/var-templ87.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp1y/var-templ87.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,43 ----
+ // PR c++/113976
+ // { dg-do run { target c++14 } }
+ 
+ int
+ foo ()
+ {
+   return 42;
+ }
+ 
+ template <int N>
+ const int a = foo ();
+ const int *b = &a <0>;
+ template <int N>
+ const int c = foo ();
+ template const int c <0>;
+ template <int N>
+ const int d = foo ();
+ const int *e = &d <0>;
+ template const int d <0>;
+ template <int N>
+ const int f = foo ();
+ template const int f <0>;
+ const int *g = &f <0>;
+ struct S { int a, b; };
+ template <int N>
+ const S h = { 42, foo () };
+ const S *i = &h <0>;
+ template <int N>
+ const S j =  { 42, foo () };
+ template const S j <0>;
+ template <int N>
+ const S k =  { 42, foo () };
+ const S *l = &k <0>;
+ template const S k <0>;
+ template <int N>
+ const S m =  { 42, foo () };
+ template const S m <0>;
+ const S *n = &m <0>;
+ 
+ int
+ main ()
+ {
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp1z/class-deduction117.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp1z/class-deduction117.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp1z/class-deduction117.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp1z/class-deduction117.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,7 ----
+ // PR c++/116108
+ // { dg-do compile { target c++11 } }
+ template <class T>
+ struct S { const S s = 1; };	// { dg-error "field 's' has incomplete type 'const S<T>'" }
+ S t{2};				// { dg-error "invalid use of template-name 'S' without an argument list" "" { target c++14_down } }
+ // { dg-error "class template argument deduction failed" "" { target c++17 } .-1 }
+ // { dg-error "no matching function for call to 'S\\\(int\\\)'" "" { target c++17 } .-2 }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp1z/constexpr-116676.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp1z/constexpr-116676.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp1z/constexpr-116676.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp1z/constexpr-116676.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,57 ----
+ // PR c++/116676
+ // { dg-do compile { target c++17 } }
+ 
+ namespace std {
+ typedef __SIZE_TYPE__ size_t;
+ 
+   template<typename _Tp>
+     struct remove_reference
+     { typedef _Tp type; };
+ 
+   template<typename _Tp>
+     struct remove_reference<_Tp&>
+     { typedef _Tp type; };
+ 
+   template<typename _Tp>
+     struct remove_reference<_Tp&&>
+     { typedef _Tp type; };
+ 
+ template <typename _Tp>
+ constexpr typename std::remove_reference<_Tp>::type &&
+ move(_Tp &&__t) noexcept {
+   return static_cast<typename std::remove_reference<_Tp>::type &&>(__t);
+ }
+ template <typename _Tp> struct tuple_size;
+ template <size_t __i, typename _Tp> struct tuple_element;
+ template <typename _U1, typename _U2> class __pair_base {};
+ template <typename _T1, typename _T2>
+ struct pair {
+   _T1 first;
+   _T2 second;
+   template <typename _U1 = _T1, typename _U2 = _T2>
+   explicit constexpr pair(const _T1 &__a, const _T2 &__b)
+       : first(__a), second(__b) {}
+ };
+ template <class _Tp1, class _Tp2>
+ struct tuple_size<pair<_Tp1, _Tp2>>
+ {
+ static constexpr size_t value = 2;
+ };
+ template <class _Tp1, class _Tp2>
+ struct tuple_element<0, pair<_Tp1, _Tp2>> {
+   typedef _Tp1 type;
+ };
+ template <class _Tp1, class _Tp2>
+ struct tuple_element<1, pair<_Tp1, _Tp2>> {
+   typedef _Tp2 type;
+ };
+ 
+ template <size_t _Int, class _Tp1, class _Tp2>
+ constexpr typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type &
+ get(pair<_Tp1, _Tp2> &&__in) noexcept {
+   return (std::move(__in).first);
+ }
+ int t;
+ auto [a, b] = std::pair<int&, int>{t, 1};
+ }
+ 
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp1z/eval-order13.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp1z/eval-order13.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp1z/eval-order13.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp1z/eval-order13.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,29 ----
+ // PR c++/117158 - Similar to eval-order7.C, only with templates.
+ // { dg-do run { target c++11 } }
+ // { dg-options "-fstrong-eval-order" }
+ 
+ int a[4] = { 1, 2, 3, 4 };
+ int b[4] = { 5, 6, 7, 8 };
+ 
+ struct Base {
+   int *intarray;
+ };
+ 
+ template <typename T>
+ struct Sub : public Base {
+   int Get(int i) {
+     Base::intarray = a;
+     int r = Base::intarray[(Base::intarray = b, i)];
+     if (Base::intarray != b)
+       __builtin_abort ();
+     return r;
+   }
+ };
+ 
+ int
+ main ()
+ {
+   Sub<int> s;
+   if (s.Get (3) != 4)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp1z/has-unique-obj-representations4.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp1z/has-unique-obj-representations4.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp1z/has-unique-obj-representations4.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp1z/has-unique-obj-representations4.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,16 ----
+ // PR c++/115476
+ // { dg-do compile { target c++11 } }
+ 
+ struct X;
+ static_assert(__has_unique_object_representations(X), "");	  // { dg-error "invalid use of incomplete type" }
+ static_assert(__has_unique_object_representations(X[]), "");  // { dg-error "invalid use of incomplete type" }
+ static_assert(__has_unique_object_representations(X[1]), "");  // { dg-error "invalid use of incomplete type" }
+ static_assert(__has_unique_object_representations(X[][1]), "");  // { dg-error "invalid use of incomplete type" }
+ 
+ struct X {
+   int x;
+ };
+ static_assert(__has_unique_object_representations(X), "");
+ static_assert(__has_unique_object_representations(X[]), "");
+ static_assert(__has_unique_object_representations(X[1]), "");
+ static_assert(__has_unique_object_representations(X[][1]), "");
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp1z/inline-var11.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp1z/inline-var11.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp1z/inline-var11.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp1z/inline-var11.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,32 ----
+ // PR c++/110031
+ // { dg-do compile { target c++17 } }
+ 
+ template <typename T>
+ [[deprecated]]
+ inline constexpr bool t = true ;
+ 
+ template <bool a>
+ struct enableif;
+ 
+ template<>
+ struct enableif<true>
+ {
+         using y = int;
+ };
+ template <bool a>
+ using enableif_t = typename enableif<a>::y;
+ 
+ template <typename T, enableif_t<t<T>> = 0>   // { dg-warning "deprecated" }
+ struct A {  A(T &&)  {  }};
+ 
+ template <typename T>
+ struct A<T> {
+   A(T &&) = delete;
+   A() = delete;
+ };
+ 
+ int main(void)
+ {
+   A<double> a(5.3); // { dg-error "use of deleted function" }
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp1z/nontype7.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp1z/nontype7.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp1z/nontype7.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp1z/nontype7.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,22 ----
+ // PR c++/117792
+ // { dg-do compile { target c++17 } }
+ 
+ template<const int& N, class T>
+ void f(T) { }
+ 
+ template<int N, class T>
+ void f(...) = delete;
+ 
+ template<const int& N> int v;
+ 
+ template<const int& N> struct A { };
+ 
+ template<class T>
+ void g() {
+   static constexpr int local_static = 0;
+   auto x = v<local_static>; // OK
+   A<local_static> y; // OK
+   f<local_static>(0); // ICE
+ }
+ 
+ template void g<int>();
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp1z/pr115440.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp1z/pr115440.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp1z/pr115440.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp1z/pr115440.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,8 ----
+ // PR driver/115440
+ // { dg-do compile { target c++17_only } }
+ // { dg-options "--c++17" }
+ 
+ int i;
+ 
+ // { dg-bogus "unrecognized command-line option '--c\\\+\\\+17'; did you mean '--stdc\\\+\\\+17'" "" { target *-*-* } 0 }
+ // { dg-error "unrecognized command-line option '--c\\\+\\\+17'" "" { target *-*-* } 0 }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp23/ext-floating18.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp23/ext-floating18.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp23/ext-floating18.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp23/ext-floating18.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,26 ----
+ // P1467R9 - Extended floating-point types and standard names.
+ // { dg-do compile { target c++23 } }
+ // { dg-options "" }
+ // { dg-add-options float32 }
+ 
+ constexpr int foo (float) { return 1; }
+ constexpr int foo (double) { return 2; }
+ constexpr int foo (long double) { return 3; }
+ 
+ #ifdef __STDCPP_FLOAT32_T__
+ #if __FLT_MAX_EXP__ == __FLT32_MAX_EXP__ \
+     && __FLT_MAX_DIG__ == __FLT32_MAX_DIG__
+ #if __FLT_MAX_EXP__ == __DBL_MAX_EXP__ \
+     && __FLT_MAX_DIG__ == __DBL_MAX_DIG__
+ static_assert (foo (1.0f32) == 2);
+ #else
+ static_assert (foo (1.0f32) == 1);
+ #endif
+ #endif
+ #endif
+ #ifdef __STDCPP_FLOAT64_T__
+ #if __DBL_MAX_EXP__ == __FLT64_MAX_EXP__ \
+     && __DBL_MAX_DIG__ == __FLT64_MAX_DIG__
+ static_assert (foo (1.0f64) == 2);
+ #endif
+ #endif
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp23/pr117287-attr.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp23/pr117287-attr.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp23/pr117287-attr.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp23/pr117287-attr.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,38 ----
+ // P1774R8 - Portable assumptions
+ // { dg-do run { target c++23 } }
+ // { dg-options "-O2 --param=logical-op-non-short-circuit=0" }
+ // Test the we can optimize based on conditions in assume.
+ 
+ static inline bool
+ foo (unsigned x)
+ {
+   return x == 4 || x == 5 || x == 9 || x == 10;
+ }
+ 
+ int v;
+ 
+ [[gnu::noipa]] void
+ bar (const char *p)
+ {
+   if (p[0] != (v ? 'a' : 'b') || p[1])
+     __builtin_abort ();
+ }
+ 
+ [[gnu::noipa]] void
+ baz (unsigned x)
+ {
+   bool a = x == 5;
+   [[assume (foo (x))]];
+   bar (a ? "a" : "b");
+ }
+ 
+ int
+ main ()
+ {
+   baz (4);
+   v = 1;
+   baz (5);
+   v = 0;
+   baz (9);
+   baz (10);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp2a/concepts-defarg3.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp2a/concepts-defarg3.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp2a/concepts-defarg3.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp2a/concepts-defarg3.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,8 ----
+ // PR c++/109859
+ // { dg-do compile { target c++20 } }
+ 
+ template<class>
+ concept C = true;
+ 
+ template <class = C> // { dg-error "invalid use of concept-name .C." }
+ int f();
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp2a/concepts-pr116681.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp2a/concepts-pr116681.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp2a/concepts-pr116681.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp2a/concepts-pr116681.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,20 ----
+ // PR c++/116681
+ // { dg-do compile { target c++20 } }
+ // { dg-additional-options "-ftime-report" }
+ // { dg-allow-blank-lines-in-output 1 }
+ // { dg-prune-output "Time variable" }
+ // { dg-prune-output "k" }
+ // { dg-prune-output "\[0-9\]+%" }
+ 
+ template < int> using __conditional_t = int;
+ template < typename _Iter >
+ concept random_access_iterator = requires { new _Iter; };
+ template < typename _Iterator > struct reverse_iterator {
+   using iterator_concept = __conditional_t< random_access_iterator< _Iterator >>;
+ };
+ void RemoveBottom()
+ {
+   int iter;
+   for (reverse_iterator< int > iter;;)
+       ;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp2a/concepts-requires40.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp2a/concepts-requires40.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp2a/concepts-requires40.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp2a/concepts-requires40.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,12 ----
+ // PR c++/118060
+ // { dg-do compile { target c++20 } }
+ 
+ int* f(int);
+ 
+ template<class T>
+ struct A {
+   template<class U> requires requires (U u) { *f(u); }
+   A(T, U);
+ };
+ 
+ A a{0, 0};
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp2a/concepts-ttp7.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp2a/concepts-ttp7.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp2a/concepts-ttp7.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp2a/concepts-ttp7.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,12 ----
+ // PR c++/115656
+ // { dg-do compile { target c++20 } }
+ 
+ template<class T, class U> concept same_as = __is_same(T, U);
+ 
+ template<same_as<bool> T, template<same_as<bool>> class UU>
+ struct A { };
+ 
+ template<same_as<bool>> class B;
+ 
+ A<bool, B> a1;
+ A<long, B> a2; // { dg-error "constraint failure" }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp2a/constexpr-117504.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp2a/constexpr-117504.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp2a/constexpr-117504.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp2a/constexpr-117504.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,60 ----
+ // PR c++/117504 - Initial report
+ // { dg-do "run" { target c++20 } }
+ 
+ struct span {
+   span (const int (&__first)[1]) : _M_ptr (__first) {}
+   int operator[] (long __i) { return _M_ptr[__i]; }
+   const int *_M_ptr;
+ };
+ 
+ constexpr int a_global_vec[]{1};
+ span myFunctor() {
+   return a_global_vec;
+ }
+ 
+ int main() {
+   constexpr int a_vec[]{1};
+ 
+   //
+   // This PR's case, that used to be miscompiled.
+   //
+   auto lambda_1 = [&a_vec] () -> span { return a_vec; };
+   auto vec_1 { lambda_1 () };
+   if (vec_1[0] != 1)
+     __builtin_abort ();
+ 
+   // Variant that used to be miscompiled as well.
+   auto lambda_2 = [&] () -> span { return a_vec; };
+   auto vec_2 { lambda_2 () };
+   if (vec_2[0] != 1)
+     __builtin_abort ();
+ 
+   //
+   // Related cases that worked already.
+   //
+   auto lambda_3 = [&a_vec] () /* -> span */ { return a_vec; };
+   auto vec_3 { lambda_3 () };
+   if (vec_3[0] != 1)
+     __builtin_abort ();
+ 
+   auto lambda_4 = [&] () /* -> span */ { return a_vec; };
+   auto vec_4 { lambda_4 () };
+   if (vec_4[0] != 1)
+     __builtin_abort ();
+ 
+   const int (&vec_5)[1] = a_vec;
+   if (vec_5[0] != 1)
+     __builtin_abort ();
+   
+   span vec_6 (a_vec);
+   if (vec_6[0] != 1)
+     __builtin_abort ();
+ 
+   auto vec_7 = myFunctor ();
+   if (vec_7[0] != 1)
+     __builtin_abort ();
+ 
+   const int (&vec_8)[1] { a_vec };
+   if (vec_8[0] != 1)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp2a/constexpr-117504a.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp2a/constexpr-117504a.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp2a/constexpr-117504a.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp2a/constexpr-117504a.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,12 ----
+ // PR c++/117504 - ICE discovered by ppalka@ when reducing.
+ // { dg-do "compile" { target c++20 } }
+ 
+ struct span {
+   span (const int* __first) : _M_ptr (__first) {}
+   int operator[] (long __i) { return _M_ptr[__i]; }
+   const int *_M_ptr;
+ };
+ int main() {
+   constexpr int a_vec[]{1};
+   auto vec { [&a_vec]() -> span { return a_vec; } () };
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp2a/constexpr-117775.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp2a/constexpr-117775.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp2a/constexpr-117775.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp2a/constexpr-117775.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,13 ----
+ // PR c++/117775
+ // Check that we don't ICE and have sizeof(void)==1 under -Wno-pointer-arith
+ // { dg-do run { target c++20 } }
+ // { dg-additional-options "-Wno-pointer-arith" }
+ 
+ int main() {
+   struct why :
+     decltype( [](auto) {
+ 		return sizeof(void);
+ 	      })
+   {} x;
+   return 1 - x.operator()(0);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp2a/constexpr-virtual22.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp2a/constexpr-virtual22.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp2a/constexpr-virtual22.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp2a/constexpr-virtual22.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,22 ----
+ // PR c++/117615
+ // { dg-do "compile" { target c++20 } }
+ 
+ struct Base {
+     virtual void doit (int v) const {}
+ };
+ 
+ struct Derived : Base {
+     void doit (int v) const {}
+ };
+ 
+ using fn_t = void (Base::*)(int) const;
+ 
+ struct Helper {
+     fn_t mFn;
+     constexpr Helper (auto && fn) : mFn(static_cast<fn_t>(fn)) {}
+ };
+ 
+ void foo () {
+     constexpr Helper h (&Derived::doit);
+     constexpr Helper h2 (&Base::doit);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp2a/desig28.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp2a/desig28.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp2a/desig28.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp2a/desig28.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,17 ----
+ // PR c++/110114
+ // { dg-do compile { target c++20 } }
+ 
+ struct A {
+     int a,b;
+ };
+ 
+ struct B;
+ 
+ void foo(const A &) {}
+ void foo(const B &) {}
+ 
+ int
+ main ()
+ {
+   foo({.a=0});
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp2a/desig29.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp2a/desig29.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp2a/desig29.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp2a/desig29.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,10 ----
+ // PR c++/110114
+ // { dg-do compile { target c++20 } }
+ 
+ struct B;
+ 
+ void foo(const B &) {}
+ 
+ int main() {
+     foo({.a=0}); // { dg-error "invalid" }
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp2a/lambda-targ8.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp2a/lambda-targ8.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp2a/lambda-targ8.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp2a/lambda-targ8.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,10 ----
+ // PR c++/109859
+ // { dg-do compile { target c++20 } }
+ 
+ template<typename>
+ concept A = true;
+ 
+ template<auto = []<A a> {}>
+ int x;
+ 
+ void g() { (void) x<>; }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp2a/lambda-uneval24.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp2a/lambda-uneval24.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp2a/lambda-uneval24.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp2a/lambda-uneval24.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,4 ----
+ // PR c++/119134
+ // { dg-do compile { target c++20 } }
+ 
+ void f(auto... args) requires(([args] {}, ..., true)) {}
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp2a/paren-init38.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp2a/paren-init38.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp2a/paren-init38.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp2a/paren-init38.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,20 ----
+ // PR c++/116424
+ // { dg-do compile { target c++20 } }
+ 
+ struct dd {
+   char *ptr;
+   dd();
+   dd(dd &&__str);
+ };
+ struct v {
+   dd n{};
+   int f = -1;
+   v operator|(const v &other) const;
+ };
+ struct cc : v {};
+ static const cc a;
+ static const cc b;
+ static const cc c1(a | b);
+ static const cc c2{a | b};
+ static const cc c3 = cc(a | b);
+ static const cc c4 = cc{a | b};
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp2a/pr117317-1.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp2a/pr117317-1.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp2a/pr117317-1.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp2a/pr117317-1.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,19 ----
+ // PR c++/117317
+ // { dg-do compile { target c++20 } }
+ 
+ struct C {
+   constexpr bool operator== (const C &b) const { return foo (); }
+   constexpr virtual bool foo () const = 0;
+ };
+ class A : public C {};
+ class B : public C {};
+ template <int>
+ struct D : A, B
+ {
+   constexpr bool operator== (const D &) const = default;
+   constexpr bool foo () const override { return true; }
+ };
+ struct E : D<1> {};
+ constexpr E e;
+ constexpr E f;
+ static_assert (e == f, "");
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp2a/pr117317-2.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp2a/pr117317-2.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp2a/pr117317-2.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp2a/pr117317-2.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,15 ----
+ // PR c++/117317
+ // { dg-do compile { target c++20 } }
+ 
+ struct C {
+   constexpr virtual bool foo () const = 0;
+ };
+ struct A : public C {};
+ struct B : public C {};
+ template <int>
+ struct D : A, B
+ {
+   constexpr bool foo () const override { return true; }
+ };
+ constexpr D<0> d;
+ static_assert (d.foo (), "");
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp2a/spaceship-synth16.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp2a/spaceship-synth16.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp2a/spaceship-synth16.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp2a/spaceship-synth16.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,13 ----
+ // PR c++/113063
+ // { dg-do link { target c++20 } }
+ 
+ #include <compare>
+ 
+ int main() {
+   struct X {
+     auto operator<=>(const X&) const = default;
+   };
+   X x;
+   static_assert(noexcept(x <=> x));
+   x <=> x;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/cpp2a/spaceship-synth16a.C gcc-13.4.0/gcc/testsuite/g++.dg/cpp2a/spaceship-synth16a.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/cpp2a/spaceship-synth16a.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/cpp2a/spaceship-synth16a.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,16 ----
+ // PR c++/116289
+ // PR c++/113063
+ // { dg-do link { target c++20 } }
+ // A version of spaceship-synth16.C where the local class isn't empty.
+ 
+ #include <compare>
+ 
+ int main() {
+   struct X {
+     int m = 0;
+     auto operator<=>(const X&) const = default;
+   };
+   X x;
+   static_assert(noexcept(x <=> x));
+   x <=> x;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/debug/pr101533.C gcc-13.4.0/gcc/testsuite/g++.dg/debug/pr101533.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/debug/pr101533.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/debug/pr101533.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,11 ----
+ // { dg-do compile }
+ // { dg-options "-g" }
+ 
+ template <typename> class T
+ {
+   typedef struct {} a __attribute__((aligned));
+ };
+ void f ()
+ {
+   T<int>();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/eh/pr84968.C gcc-13.4.0/gcc/testsuite/g++.dg/eh/pr84968.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/eh/pr84968.C	Tue May 21 07:47:39 2024
--- gcc-13.4.0/gcc/testsuite/g++.dg/eh/pr84968.C	Thu Jun  5 16:02:59 2025
*************** struct S {
*** 9,15 ****
    void a()
      try {
      } catch (int ()
! 	     noexcept (({ union b a; true; }))) // { dg-error "constant" }
    {
    }
  };
--- 9,17 ----
    void a()
      try {
      } catch (int ()
! 	     noexcept (({ union b a; true; }))) // { dg-error "'b a' has incomplete type" }
    {
    }
  };
+ 
+ template void S::a<int>(); // { dg-message "required from here" }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/expr/cond18.C gcc-13.4.0/gcc/testsuite/g++.dg/expr/cond18.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/expr/cond18.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/expr/cond18.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,36 ----
+ /* PR c++/114525 */
+ /* { dg-do run } */
+ 
+ struct Foo {
+   int x;
+ };
+ 
+ Foo& get (Foo& v) {
+   return v;
+ }
+ 
+ int main () {
+   bool cond = true;
+ 
+   /* Testcase from PR; v.x would wrongly remain equal to 1.  */
+   Foo v_ko;
+   v_ko.x = 1;
+   (cond ? get (v_ko) : get (v_ko)).*(&Foo::x) = 2;
+   if (v_ko.x != 2)
+     __builtin_abort ();
+ 
+   /* Those would already work, i.e. x be changed to 2.  */
+   Foo v_ok_1;
+   v_ok_1.x = 1;
+   (cond ? get (v_ok_1) : get (v_ok_1)).x = 2;
+   if (v_ok_1.x != 2)
+     __builtin_abort ();
+ 
+   Foo v_ok_2;
+   v_ok_2.x = 1;
+   get (v_ok_2).*(&Foo::x) = 2;
+   if (v_ok_2.x != 2)
+     __builtin_abort ();
+ 
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/expr/pmf-4.C gcc-13.4.0/gcc/testsuite/g++.dg/expr/pmf-4.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/expr/pmf-4.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/expr/pmf-4.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,22 ----
+ // PR c++/118509
+ // { dg-do run }
+ // { dg-options "-Wall -O2" }
+ 
+ struct A { void foo () { a = 1; } int a; A () : a (0) {} };
+ struct B : virtual A {};
+ typedef void (A::*C) ();
+ 
+ __attribute__((noipa)) void
+ foo (C x, B *y)
+ {
+   (y->*x) ();
+ }
+ 
+ int
+ main ()
+ {
+   B b;
+   foo (&A::foo, &b);
+   if (b.a != 1)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/ext/attr-unavailable-13.C gcc-13.4.0/gcc/testsuite/g++.dg/ext/attr-unavailable-13.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/ext/attr-unavailable-13.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/ext/attr-unavailable-13.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,8 ----
+ // PR c++/116606
+ // { dg-do compile }
+ 
+ struct C {
+     __attribute__((unavailable)) virtual void f() {}
+ };
+ 
+ C c;
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/ext/conv3.C gcc-13.4.0/gcc/testsuite/g++.dg/ext/conv3.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/ext/conv3.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/ext/conv3.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,13 ----
+ // PR c++/106760
+ // { dg-additional-options "-fpermissive" }
+ 
+ struct S {
+   template<class> int f();
+   template<class> int g(...);
+ };
+ 
+ int main() {
+   const S s;
+   s.f<void>(); // { dg-warning "discards qualifiers" }
+   s.g<void>(); // { dg-warning "discards qualifiers" }
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/ext/is_convertible6.C gcc-13.4.0/gcc/testsuite/g++.dg/ext/is_convertible6.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/ext/is_convertible6.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/ext/is_convertible6.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,16 ----
+ // PR c++/109680
+ // { dg-do compile { target c++11 } }
+ 
+ #define SA(X) static_assert((X),#X)
+ 
+ SA(!__is_convertible(int () const, int (*)()));
+ SA(!__is_convertible(int (*)(), int () const));
+ 
+ SA( __is_convertible(int (), int (*)()));
+ SA(!__is_convertible(int (*)(), int ()));
+ 
+ SA( __is_convertible(int (int), int (*) (int)));
+ SA(!__is_convertible(int (*) (int), int (int)));
+ 
+ SA(!__is_convertible(int (int) const, int (*) (int)));
+ SA(!__is_convertible(int (*) (int), int (int) const));
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/ext/pragma-target2.C gcc-13.4.0/gcc/testsuite/g++.dg/ext/pragma-target2.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/ext/pragma-target2.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/ext/pragma-target2.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,18 ----
+ // PR c++/114772
+ // { dg-do compile { target x86_64-*-* } }
+ 
+ template<typename V, bool STREAMING>
+ inline __attribute__((always_inline))
+ __attribute__((warn_unused_result))
+ int walk_document(V visitor) {return 0;}
+ 
+ template<bool STREAMING>
+ void parse_document() {
+     int r = walk_document<bool, STREAMING>(false);
+ }
+ 
+ void stage2_next() {
+     parse_document<true>();
+ }
+ 
+ #pragma GCC target("pclmul")
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/ext/stmtexpr26.C gcc-13.4.0/gcc/testsuite/g++.dg/ext/stmtexpr26.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/ext/stmtexpr26.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/ext/stmtexpr26.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,10 ----
+ // PR c++/116418
+ // { dg-do compile { target c++14 } }
+ // { dg-options "" }
+ 
+ void foo ();
+ template <typename>
+ void bar ()
+ {
+   decltype(auto) v = ({ foo (); 3; });
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/ext/unroll-4.C gcc-13.4.0/gcc/testsuite/g++.dg/ext/unroll-4.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/ext/unroll-4.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/ext/unroll-4.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,16 ----
+ // PR c++/111529
+ // { dg-do compile { target c++11 } }
+ // { dg-additional-options -Wno-c++20-extensions }
+ 
+ template <int>
+ void f() {
+   []<int>() {
+     #pragma GCC unroll 9
+     for (int i = 1; i; --i) {
+     }
+   };
+ }
+ 
+ int main() {
+   f<0>();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/init/array66.C gcc-13.4.0/gcc/testsuite/g++.dg/init/array66.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/init/array66.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/init/array66.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,33 ----
+ // PR c++/117827
+ // { dg-do run { target c++11 } }
+ 
+ struct C {
+   int c;
+   static int d, e;
+   C () : c (0) { ++d; }
+   C (const C &) = delete;
+   C &operator= (const C &) = delete;
+   ~C () { ++e; }
+ };
+ int C::d, C::e;
+ 
+ C *
+ foo (C *p)
+ {
+   delete[] p;
+   throw 1;
+ }
+ 
+ int
+ main ()
+ {
+   try
+     {
+       foo (new C[1] {});
+     }
+   catch (...)
+     {
+     }
+   if (C::d != C::e)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/ipa/pr118243.C gcc-13.4.0/gcc/testsuite/g++.dg/ipa/pr118243.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/ipa/pr118243.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/ipa/pr118243.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,40 ----
+ /* { dg-do run } */
+ /* { dg-options "-O3 -std=gnu++11" } */
+ 
+ using complex_t = int __complex__;
+ 
+ struct A {
+     complex_t value;
+     A(double r) : value{0, r} {}
+ };
+ 
+ [[gnu::noipa]]
+ void f(int a)
+ {
+   if (a != 1)
+     __builtin_abort();
+ }
+ [[gnu::noipa]] void g(const char *, int x){}
+ 
+ 
+ void test(const complex_t &c, const int &x) {
+     if (x < 0)
+         g("%d\n", x);
+     else
+     {
+         f( __imag__ c);
+     }
+ }
+ 
+ void f1() {
+     {
+         A a{1};
+         test(a.value, 123);
+     }
+ }
+ 
+ int main()
+ {
+         f1();
+ 	return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/lookup/pr99116-1.C gcc-13.4.0/gcc/testsuite/g++.dg/lookup/pr99116-1.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/lookup/pr99116-1.C	Tue May 21 07:47:39 2024
--- gcc-13.4.0/gcc/testsuite/g++.dg/lookup/pr99116-1.C	Thu Jun  5 16:02:59 2025
***************
*** 2,8 ****
  
  template<int T> struct Z {
  
!   friend struct T; // { dg-error "shadows template parameter" }
  };
  
  struct Y {
--- 2,8 ----
  
  template<int T> struct Z {
  
!   friend struct T; // { dg-bogus "shadows template parameter" }
  };
  
  struct Y {
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/lto/pr107467_0.C gcc-13.4.0/gcc/testsuite/g++.dg/lto/pr107467_0.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/lto/pr107467_0.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/lto/pr107467_0.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,52 ----
+ /* { dg-lto-do run } */
+ /* { dg-lto-options {{ -O2 -fno-strict-aliasing -flto }} } */
+ 
+ template <class T>
+ struct pair
+ {
+     int first;
+     T second;
+ };
+ 
+ template <typename C>
+ [[gnu::optimize("strict-aliasing")]]
+ bool __attribute__((noinline))
+ compare_pairs(const pair<C> &lhs, const pair<C> &rhs) {
+   return lhs.first == rhs.first && lhs.second == rhs.second;
+ }
+ 
+ template <typename B> struct Combined {
+   pair<B *> 
+ __attribute__((noinline)) get_const() {
+     return pair<B *>{123, nullptr};
+   }
+ [[gnu::optimize("strict-aliasing")]]
+   bool 
+ __attribute__((noinline)) clashy() {
+     return compare_pairs(get_const(), get_const());
+   }
+ };
+ 
+ class SomeClass {};
+ class OtherClass {};
+ 
+ [[gnu::optimize("strict-aliasing")]]
+ [[gnu::used]]
+ void some_func() {
+   Combined<SomeClass> myvar;
+   __builtin_printf("%i\n", myvar.clashy());
+ }
+ 
+ [[gnu::optimize("strict-aliasing")]]
+ void other_func() {
+   Combined<OtherClass> myvar;
+   int t = myvar.clashy();
+   if (!t)
+   __builtin_abort();
+ }
+ 
+ [[gnu::optimize("O0")]]
+ int main()
+ {
+   other_func();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/opt/pr119327.C gcc-13.4.0/gcc/testsuite/g++.dg/opt/pr119327.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/opt/pr119327.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/opt/pr119327.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,16 ----
+ // PR target/119327
+ // { dg-do compile { target c++11 } }
+ // { dg-options "-Os" }
+ 
+ #pragma GCC optimize "fp-contract=off"
+ 
+ template <class T>
+ void
+ foo (T f)
+ {
+   f ();
+ }
+ 
+ struct S {
+   S () { [] {}; foo ([] __attribute__((always_inline)) {}); }
+ } s;
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/other/anon-union6.C gcc-13.4.0/gcc/testsuite/g++.dg/other/anon-union6.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/other/anon-union6.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/other/anon-union6.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,13 ----
+ // PR c++/117153
+ // { dg-do compile }
+ 
+ template<typename T>
+ void f() {
+   union {
+     union {
+       T d;
+     };
+   };
+   (void) (d + 0);
+ }
+ template void f<double>();
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/other/anon-union7.C gcc-13.4.0/gcc/testsuite/g++.dg/other/anon-union7.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/other/anon-union7.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/other/anon-union7.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,16 ----
+ // PR c++/117153
+ // { dg-do compile { target c++11 } }
+ 
+ using U = union { union { int a; }; };
+ 
+ U
+ foo ()
+ {
+   return {};
+ }
+ 
+ void
+ g ()
+ {
+   [[maybe_unused]] auto u = foo ();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/parse/crash77.C gcc-13.4.0/gcc/testsuite/g++.dg/parse/crash77.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/parse/crash77.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/parse/crash77.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,13 ----
+ // PR c++/117158
+ // { dg-do "compile" }
+ 
+ struct Base {
+   unsigned int *intarray;
+ };
+ 
+ template <typename T>
+ struct Sub : public Base {
+   bool Get(int i) {
+     return (Base::intarray[++i] == 0);
+   }
+ };
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/pr113673.C gcc-13.4.0/gcc/testsuite/g++.dg/pr113673.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/pr113673.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/pr113673.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile } */
+ /* { dg-options "-Os -fnon-call-exceptions -ftrapv" } */
+ 
+ struct s { ~s(); };
+ void
+ h (unsigned char *data, int c)
+ {
+   s a1;
+   while (c)
+     {
+       int m = *data++ << 8;
+       m += *data++;
+     }
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/pr114501_0.C gcc-13.4.0/gcc/testsuite/g++.dg/pr114501_0.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/pr114501_0.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/pr114501_0.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,20 ----
+ // { dg-do compile }
+ // { dg-require-effective-target c++17 }
+ // { dg-require-effective-target lto }
+ // { dg-options "-flto" }
+ 
+ typedef long unsigned int size_t;
+ struct basic_string_view {
+   typedef long unsigned int size_type;
+   constexpr size_type size() const { return 0; }
+ };
+ struct array {
+   char _M_elems[1];
+ };
+ inline constexpr auto make_it() {
+   constexpr basic_string_view view;
+   array arr{};
+   arr._M_elems[view.size()] = 'a';
+   return arr;
+ }
+ auto bar = make_it();
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/pr66279.C gcc-13.4.0/gcc/testsuite/g++.dg/pr66279.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/pr66279.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/pr66279.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,23 ----
+ // { dg-do run }
+ 
+ struct A {};
+ 
+ struct B : public virtual A
+ {
+   B();
+ };
+ 
+ B::B()
+ {
+   unsigned int x = 42;
+ 
+   __asm__ __volatile__ ("" : "+r"(x));
+ 
+   if (x != 42)
+     __builtin_abort ();
+ }
+ 
+ int main()
+ {
+   B b;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/template/access42.C gcc-13.4.0/gcc/testsuite/g++.dg/template/access42.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/template/access42.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/template/access42.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,17 ----
+ // PR c++/116320
+ // { dg-do compile { target c++11 } }
+ 
+ template<class T> struct C;
+ template<class T> using C_ptr = C<T>*;
+ 
+ struct B { int m; using B_typedef = B; };
+ 
+ template<class T>
+ struct C : B {
+   void f(C_ptr<T> c) {
+     c->B::m;
+     c->B_typedef::m;
+   }
+ };
+ 
+ template struct C<int>;
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/template/array37.C gcc-13.4.0/gcc/testsuite/g++.dg/template/array37.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/template/array37.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/template/array37.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,14 ----
+ // PR c++/115358
+ 
+ template<class T>
+ struct A { static int STR[]; };
+ 
+ template<class T>
+ int A<T>::STR[] = {1,2,3};
+ 
+ void f(int(&)[3]);
+ 
+ template<class T>
+ void g() {
+   f(A<int>::STR); // { dg-bogus "int []" }
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/template/conv21.C gcc-13.4.0/gcc/testsuite/g++.dg/template/conv21.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/template/conv21.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/template/conv21.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,14 ----
+ // PR c++/115657
+ // { dg-do compile { target c++11 } }
+ 
+ struct NonIntegral
+ {
+     constexpr operator int() { return 0; }
+ };
+ 
+ template<typename T> struct TemplatedStructural
+ {
+     enum { e = NonIntegral{} };
+ };
+ 
+ template struct TemplatedStructural<void>;
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/template/fn-ptr5.C gcc-13.4.0/gcc/testsuite/g++.dg/template/fn-ptr5.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/template/fn-ptr5.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/template/fn-ptr5.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,28 ----
+ // PR c++/119233
+ // A version of fn-ptr3a.C using member instead of non-member function
+ // pointers.
+ 
+ struct B {
+   template<class T>
+   void f(T) { T::fail; } // { dg-error "fail" }
+ };
+ 
+ template<void (B::*P)(int)>
+ struct A {
+   // P not called
+ };
+ 
+ template<void (B::*P)(char)>
+ void wrap() {
+   // P not called
+ }
+ 
+ template<int>
+ void g() {
+   A<&B::f> a; // { dg-message "required from" }
+   wrap<&B::f>(); // { dg-message "required from" }
+ }
+ 
+ int main() {
+   g<0>();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/template/friend84.C gcc-13.4.0/gcc/testsuite/g++.dg/template/friend84.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/template/friend84.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/template/friend84.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,26 ----
+ // PR c++/118255
+ // { dg-do "compile" }
+ 
+ // The PR's case, that used to error out.
+ template <int non_template>
+ struct S {
+   friend class non_template; // { dg-bogus "shadows template parameter" }
+ };
+ 
+ class non_template {};
+ S<0> s;
+ 
+ // We already accepted cases where the friend is already declared.
+ template <int non_template>
+ struct T {
+   friend class non_template;
+ };
+ T<0> t;
+ 
+ // We should reject (re)declarations.
+ template <int non_template>
+ struct U {
+   class non_template {};  // { dg-error "shadows template parameter" }
+   void non_template () {} // { dg-error "shadows template parameter" }
+ };
+ U<0> u;
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/torture/pr111245.C gcc-13.4.0/gcc/testsuite/g++.dg/torture/pr111245.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/torture/pr111245.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/torture/pr111245.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,23 ----
+ /* { dg-do run } */
+ 
+ struct Int {
+   int value;
+ };
+ 
+ __attribute__((noipa)) Int always_throws() { throw 123; }
+ 
+ void foo(Int &x) {
+   try {
+     x = always_throws();
+   } catch (...) {
+   }
+ }
+ 
+ int main()
+ {
+   Int x;
+   x.value = 5;
+   foo(x);
+   if (x.value != 5)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/torture/pr113994.C gcc-13.4.0/gcc/testsuite/g++.dg/torture/pr113994.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/torture/pr113994.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/torture/pr113994.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,31 ----
+ // PR rtl-optimization/113994
+ // { dg-do run }
+ 
+ #include <string>
+ 
+ void
+ foo (const std::string &x, size_t &y, std::string &z)
+ {
+   size_t w = x.find (']');
+   if (w >= x.size ())
+     return;
+   else if (w == 1)
+     y = std::string::npos;
+   while (++w < x.size () && x[w] == u'.')
+     ;
+   z = x.substr (w);
+ }
+ 
+ __attribute__((noipa)) void
+ bar ()
+ {
+ }
+ 
+ int
+ main ()
+ {
+   size_t y = 0;
+   std::string z;
+   foo ("[0]", y, z);
+   bar ();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/torture/pr115694.C gcc-13.4.0/gcc/testsuite/g++.dg/torture/pr115694.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/torture/pr115694.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/torture/pr115694.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,13 ----
+ // { dg-do compile }
+ 
+ _Complex a;
+ typedef struct {
+   double a[2];
+ } b;
+ void c(b);
+ void d()
+ {
+   _Complex b1 = a;
+   b t = __builtin_bit_cast (b, b1);
+   c(t);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/torture/pr11911.C gcc-13.4.0/gcc/testsuite/g++.dg/torture/pr11911.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/torture/pr11911.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/torture/pr11911.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,21 ----
+ // { dg-do compile }
+ // { dg-require-effective-target c++17 }
+ 
+ struct b {
+   int a;
+ };
+ struct c {
+   b d{};
+   c() = default;
+   c(c &) = delete;
+ };
+ struct e {
+   c a{};
+   e() {}
+ };
+ inline e f() { return {}; }
+ struct g {
+   e cx;
+   g() : cx{f()} {}
+ };
+ void h() { g i; }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/torture/pr119610.C gcc-13.4.0/gcc/testsuite/g++.dg/torture/pr119610.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/torture/pr119610.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/torture/pr119610.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,18 ----
+ // { dg-do run }
+ // { dg-additional-options "-fstack-protector-strong" { target fstack_protector } }
+ // { dg-additional-options "-fstack-clash-protection" { target supports_stack_clash_protection } }
+ 
+ int *ptr;
+ void foo() {
+   int c[1024*128];
+   ptr = c;
+   throw 1;
+ }
+ int main()
+ {
+   try {
+     foo();
+   } catch(int x) {
+     return 0;
+   }
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/torture/pr119778.C gcc-13.4.0/gcc/testsuite/g++.dg/torture/pr119778.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/torture/pr119778.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/torture/pr119778.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,20 ----
+ // { dg-do compile }
+ // { dg-additional-options "-Wall" }
+ 
+ struct jmp_buf { long l[16]; };
+ extern "C" int setjmp (jmp_buf *);
+ struct S {
+   void foo () { bar (); }
+   virtual char bar () { return 0; }
+ };
+ void baz ();
+ jmp_buf *a;
+ 
+ void
+ qux (bool x, S *y)
+ {
+   if (x)
+     setjmp (a);
+   y->foo ();
+   baz ();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/torture/vect-absu-1.C gcc-13.4.0/gcc/testsuite/g++.dg/torture/vect-absu-1.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/torture/vect-absu-1.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/torture/vect-absu-1.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,29 ----
+ // { dg-do run }
+ // PR middle-end/111285
+ 
+ // The lowering of vect absu was done incorrectly
+ 
+ #define vect1 __attribute__((vector_size(sizeof(int))))
+ 
+ #define negabs(a) a < 0 ? a : -a
+ 
+ __attribute__((noinline))
+ int s(int a)
+ {
+   return negabs(a);
+ }
+ __attribute__((noinline))
+ vect1 int v(vect1 int a)
+ {
+   return negabs(a);
+ }
+ 
+ int main(void)
+ {
+         for(int i = -10; i < 10; i++)
+         {
+           vect1 int t = {i};
+           if (v(t)[0] != s(i))
+             __builtin_abort();
+         }
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/tree-ssa/initlist-opt7.C gcc-13.4.0/gcc/testsuite/g++.dg/tree-ssa/initlist-opt7.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/tree-ssa/initlist-opt7.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/tree-ssa/initlist-opt7.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,13 ----
+ // PR c++/116369
+ // { dg-do run { target c++11 } }
+ 
+ struct f{
+   mutable int t;
+ };
+ 
+ const f &g = {1};
+ 
+ int main()
+ {
+   g.t++;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/tree-ssa/pr118924.C gcc-13.4.0/gcc/testsuite/g++.dg/tree-ssa/pr118924.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/tree-ssa/pr118924.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/tree-ssa/pr118924.C	Thu Jun  5 16:02:59 2025
***************
*** 0 ****
--- 1,29 ----
+ /* { dg-do run } */
+ /* { dg-options "-std=c++17 -O2" } */
+ 
+ template <int Size> struct Vector {
+   int m_data[Size];
+   Vector(int, int, int) {}
+ };
+ enum class E { POINTS, LINES, TRIANGLES };
+ 
+ __attribute__((noipa))
+ void getName(E type) {
+   static E check = E::POINTS;
+   if (type == check)
+     check = (E)((int)check + 1);
+   else
+     __builtin_abort ();
+ }
+ 
+ int main() {
+   int arr[]{0, 1, 2};
+   for (auto dim : arr) {
+     Vector<3> localInvs(1, 1, 1);
+     localInvs.m_data[dim] = 8;
+   }
+   E types[] = {E::POINTS, E::LINES, E::TRIANGLES};
+   for (auto primType : types)
+     getName(primType);
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/ubsan/pr116449.C gcc-13.4.0/gcc/testsuite/g++.dg/ubsan/pr116449.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/ubsan/pr116449.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/ubsan/pr116449.C	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,14 ----
+ // PR c++/116449
+ // { dg-do compile }
+ // { dg-options "-O2 -Wall -fsanitize=undefined" }
+ 
+ struct C { void foo (int); void bar (); int c[16]; };
+ typedef void (C::*P) ();
+ struct D { P d; };
+ static D e[1] = { { &C::bar } };
+ 
+ void
+ C::foo (int x)
+ {
+   (this->*e[c[x]].d) ();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/ubsan/pr117259.C gcc-13.4.0/gcc/testsuite/g++.dg/ubsan/pr117259.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/ubsan/pr117259.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/ubsan/pr117259.C	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,13 ----
+ // PR c++/117259
+ // { dg-do compile }
+ // { dg-options "-Wuninitialized -fsanitize=undefined" }
+ 
+ struct A { void foo () {} };
+ struct B { void (A::*b) (); B (void (A::*x) ()) : b(x) {}; };
+ const B c[1] = { &A::foo };
+ 
+ void
+ foo (A *x, int y)
+ {
+   (x->*c[y].b) ();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/vect/pr115278.cc gcc-13.4.0/gcc/testsuite/g++.dg/vect/pr115278.cc
*** gcc-13.3.0/gcc/testsuite/g++.dg/vect/pr115278.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/vect/pr115278.cc	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,38 ----
+ // { dg-do compile }
+ // { dg-require-effective-target c++11 }
+ // { dg-additional-options "-fdump-tree-optimized" }
+ 
+ #include <cstdint>
+ 
+ const int runs = 92;
+ 
+ union BitfieldStructUnion {
+         struct {
+                 uint64_t a : 17;
+         uint64_t padding: 39;
+                 uint64_t b : 8;
+         } __attribute__((packed));
+ 
+         struct {
+                 uint32_t value_low;
+                 uint32_t value_high;
+         } __attribute__((packed));
+ 
+         BitfieldStructUnion(uint32_t value_low, uint32_t value_high) : value_low(value_low), value_high(value_high) {}
+ };
+ 
+ volatile uint32_t *WRITE = (volatile uint32_t *)0x42;
+ 
+ void buggy() {
+         for (int i = 0; i < runs; i++) {
+                 BitfieldStructUnion rt{*WRITE, *WRITE};
+ 
+                 rt.a = 99;
+                 rt.b = 1;
+ 
+                 *WRITE = rt.value_low;
+                 *WRITE = rt.value_high;
+         }
+ }
+ 
+ // { dg-final { scan-tree-dump-times "\\\*WRITE\[^\r\n\]* ={v} " 2 "optimized" } }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/warn/Wformat-3.C gcc-13.4.0/gcc/testsuite/g++.dg/warn/Wformat-3.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/warn/Wformat-3.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/warn/Wformat-3.C	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,19 ----
+ // PR c++/116954
+ // { dg-additional-options -Wformat }
+ 
+ #ifndef WORKS
+ template<int N>
+ int fn(char (&buf)[N], const char fmt[], ...)
+   __attribute__ ((__format__ (__printf__, 2, 3)));
+ #endif
+ 
+ template<int  N>
+ __attribute__ ((__format__ (__printf__, 2, 3)))
+ int fn(char (&)[N], const char [], ...)
+ { return 0; }
+ 
+ int main()
+ {
+   char buf[20];
+   return fn(buf, "%s", 42); /* { dg-warning "Wformat" } */
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/warn/Wrange-loop-construct3.C gcc-13.4.0/gcc/testsuite/g++.dg/warn/Wrange-loop-construct3.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/warn/Wrange-loop-construct3.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/warn/Wrange-loop-construct3.C	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,57 ----
+ // PR c++/116731
+ // { dg-do compile { target c++11 } }
+ // { dg-options "-Wrange-loop-construct" }
+ 
+ void
+ f0 ()
+ {
+   struct S {
+     char a[64];
+     S& operator=(const S&) { return *this; };
+   };
+ 
+   S arr[8];
+   for (const auto r : arr)
+     (void) r;
+ }
+ 
+ void
+ f1 ()
+ {
+   struct S {
+     char a[65];
+     S& operator=(const S&) { return *this; };
+   };
+ 
+   S arr[8];
+   for (const auto r : arr) // { dg-warning "creates a copy" }
+     (void) r;
+ }
+ 
+ void
+ f2 ()
+ {
+   struct S {
+     char a[64];
+     S& operator=(const S&) { return *this; };
+     ~S() { }
+   };
+ 
+   S arr[8];
+   for (const auto r : arr) // { dg-warning "creates a copy" }
+     (void) r;
+ }
+ 
+ void
+ f3 ()
+ {
+   struct S {
+     char a[65];
+     S& operator=(const S&) { return *this; };
+     ~S() { }
+   };
+ 
+   S arr[8];
+   for (const auto r : arr) // { dg-warning "creates a copy" }
+     (void) r;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/warn/deprecated-19.C gcc-13.4.0/gcc/testsuite/g++.dg/warn/deprecated-19.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/warn/deprecated-19.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/warn/deprecated-19.C	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,22 ----
+ // PR c++/116636
+ // { dg-do compile { target c++11 } }
+ // { dg-options "-pedantic -Wdeprecated" }
+ 
+ struct A {
+   virtual int foo () = 0;
+ };
+ struct B : virtual A {
+   [[deprecated]] int foo () { return 0; }	// { dg-message "declared here" }
+ };
+ struct C : virtual A {
+   [[gnu::unavailable]] int foo () { return 0; }	// { dg-message "declared here" }
+ };
+ 
+ void
+ bar ()
+ {
+   B b;
+   b.foo ();					// { dg-warning "'virtual int B::foo\\\(\\\)' is deprecated" }
+   C c;
+   c.foo ();					// { dg-error "'virtual int C::foo\\\(\\\)' is unavailable" }
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/warn/deprecated-20.C gcc-13.4.0/gcc/testsuite/g++.dg/warn/deprecated-20.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/warn/deprecated-20.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/warn/deprecated-20.C	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,16 ----
+ // PR c++/116678
+ // { dg-do compile { target c++11 } }
+ // { dg-options "-Os -pedantic" }
+ 
+ struct S
+ {
+   [[deprecated]] S () { s = 1; }	// { dg-bogus "'S::S\\\(\\\)' is deprecated" }
+   S (int x) { s = x; }
+   ~S () {}
+   int s;
+ };
+ 
+ int
+ main ()
+ {
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.dg/warn/pr117825.C gcc-13.4.0/gcc/testsuite/g++.dg/warn/pr117825.C
*** gcc-13.3.0/gcc/testsuite/g++.dg/warn/pr117825.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.dg/warn/pr117825.C	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,18 ----
+ // PR c++/117825
+ // { dg-do compile { target c++17 } }
+ // { dg-options "-Wformat -Wformat-security" }
+ 
+ __attribute__((format (printf, 1, 2)))
+ int fails (const char *, ...) { return 0; }
+ 
+ template <auto func, typename... Args>
+ auto wrap (Args... args) -> decltype (func (args...))
+ {
+   return func (args...);	// { dg-warning "format not a string literal and no format arguments" }
+ }
+ 
+ int
+ main ()
+ {
+   wrap<fails> ("Test!");
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.target/aarch64/sve/pr119610-sve.C gcc-13.4.0/gcc/testsuite/g++.target/aarch64/sve/pr119610-sve.C
*** gcc-13.3.0/gcc/testsuite/g++.target/aarch64/sve/pr119610-sve.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.target/aarch64/sve/pr119610-sve.C	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,20 ----
+ // { dg-do run { target aarch64_sve_hw } }
+ // { dg-additional-options "-fstack-protector-strong" { target fstack_protector } }
+ // { dg-additional-options "-fstack-clash-protection" { target supports_stack_clash_protection } }
+ 
+ void *a_ptr, *b_ptr;
+ void foo() {
+   __SVInt32_t a;
+   int b[1024*128];
+   a_ptr = &a;
+   b_ptr = b;
+   throw 1;
+ }
+ int main()
+ {
+   try {
+     foo();
+   } catch(int x) {
+     return 0;
+   }
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.target/aarch64/sve/pr119706.C gcc-13.4.0/gcc/testsuite/g++.target/aarch64/sve/pr119706.C
*** gcc-13.3.0/gcc/testsuite/g++.target/aarch64/sve/pr119706.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.target/aarch64/sve/pr119706.C	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,178 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -mcpu=neoverse-v2 --param=aarch64-autovec-preference=2 -w" } */
+ 
+ namespace a {
+ typedef long unsigned b;
+ typedef int c;
+ template <bool, typename d> struct e { using f = d; };
+ template <bool g, typename d = void> using h = typename e<g, d>::f;
+ template <typename aa, typename, template <typename> class> struct i {
+   using f = aa;
+ };
+ template <typename aa, template <typename> class j> using k = i<aa, void, j>;
+ template <typename aa, template <typename> class j>
+ using l = typename k<aa, j>::f;
+ } // namespace a
+ inline void *operator new(a::b, void *ab) { return ab; }
+ namespace a {
+ template <typename> class ac {
+ public:
+   typedef b m;
+   template <typename ad, typename... n> void ae(ad *ab, n... w) {
+     new (ab) ad(w...);
+   }
+ };
+ template <typename d> using x = ac<d>;
+ template <typename d> class af : public x<d> {
+ public:
+   typedef d o;
+   template <typename> struct ag { typedef af ah; };
+ };
+ struct ai {};
+ struct aj : ai {};
+ struct ak : aj {};
+ template <typename> struct al;
+ template <typename d> struct al<d *> {
+   typedef ak an;
+   typedef c ao;
+   typedef d ap;
+ };
+ template <typename aq> typename aq ::an ar(aq) { return typename aq ::an(); }
+ template <typename as> typename as ::ao at(as au, as av, ak) { return av - au; }
+ template <typename aw> typename aw ::ao ax(aw au, aw av) {
+   return at(au, av, ar(au));
+ }
+ template <typename> struct ay { typedef c ao; };
+ } // namespace a
+ namespace az {
+ template <typename am, typename> class ba {
+   am bb;
+   typedef a::al<am> bc;
+ 
+ public:
+   typedef typename bc::an an;
+   typedef typename bc::ao ao;
+   typedef typename bc::ap ap;
+   ba(am bd) : bb(bd) {}
+   ap operator*() { return *bb; }
+   ba operator++() {
+     ++bb;
+     return *this;
+   }
+   am base() { return bb; }
+ };
+ template <typename be, typename bf, typename bg>
+ bool operator!=(ba<be, bg> bh, ba<bf, bg> p) {
+   return bh.base() != p.base();
+ }
+ template <typename be, typename bf, typename bg>
+ auto operator-(ba<be, bg> bh, ba<bf, bg> p) {
+   return bh.base() - p.base();
+ }
+ } // namespace az
+ namespace a {
+ struct bi {
+   template <typename d, typename> struct bj {
+     using f = typename d::ag<d>::ah;
+   };
+   template <typename> using bk = b;
+   template <typename...> static constexpr bool bl = false;
+   template <typename, typename> static constexpr bool bm = bl<>;
+   template <typename d, typename... n> static constexpr bool bn = bm<d, n...>;
+ };
+ template <typename bo, typename ad> using bp = typename bi::bj<bo, ad>::f;
+ template <typename bo> struct bq : bi {
+   typedef typename bo::o o;
+   using br = l<o *, bk>;
+   template <typename, typename bs> struct bt { using f = typename ay<bs>::ao; };
+   template <typename bu, typename> struct bv { using f = typename bu::m; };
+   using ao = typename bt<bo, c>::f;
+   using m = typename bv<bo, ao>::f;
+   template <typename d> using bw = bp<bo, d>;
+   static br allocate(bo, m);
+   template <typename d, typename... n>
+   static h<bn<bo, d>> ae(bo ci, d ab, n... w) {
+     ci.ae(ab, w...);
+   }
+ };
+ template <typename d> struct bx {
+   static bool by(d &bz) try { d(bz.begin(), bz.ca(), bz.cb()); } catch (...) {
+   }
+ };
+ } // namespace a
+ namespace az {
+ template <typename bo> struct cc : a::bq<bo> {
+   typedef a::bq<bo> q;
+   template <typename d> struct ag { typedef typename q::bw<d> ah; };
+ };
+ } // namespace az
+ enum cd {};
+ using ce = double;
+ namespace a {
+ template <typename aw, typename cf, typename cg, typename ch>
+ cg cj(aw au, cf av, cg ck, ch cl) {
+   typedef az::cc<ch> cx;
+   for (; au != av; ++au, ++ck)
+     cx::ae(cl, ck, *au);
+ }
+ template <typename d, typename bo> struct cm {
+   typedef typename az::cc<bo>::ag<d>::ah cn;
+   typedef typename az::cc<cn>::br br;
+   struct co {
+     br db;
+     br cp;
+   };
+   struct cq : cn, co {
+     cq(cn) {}
+   } typedef cr;
+   cn cs();
+   cr cb() noexcept;
+   cm(cr ci) : ct(ci) {}
+   cq ct;
+   br cu(b cv) {
+     typedef az::cc<cn> cw;
+     return cv ? cw::allocate(ct, cv) : c();
+   }
+ };
+ template <typename d, typename bo = af<d>> class cy : cm<d, bo> {
+   typedef cm<d, bo> cz;
+ 
+ public:
+   typedef typename cz::br br;
+   typedef az::ba<br, cy> da;
+   typedef b m;
+   typedef bo cr;
+   cz::cs;
+   template <typename aw> cy(aw au, aw av, cr ci) : cz(ci) {
+     dg(au, av, ar(au));
+   }
+   cz::cb;
+   da begin() { return this->ct.db; }
+   da ca() { return this->ct.cp; }
+   void r() { s(); }
+   void clear() { t(this->ct.db); }
+   template <typename cg> void dg(cg au, cg av, ai) { y(au, av, ax(au, av)); }
+   template <typename am, typename cf> void y(am au, cf av, m cv) {
+     br z = this->cu(dc(cv, cs()));
+     cj(au, av, z, cs());
+   }
+   bool s();
+   m dc(m cv, cr) { return cv; }
+   void t(br dd) {
+     if (this->ct.cp - dd)
+       this->ct.cp = dd;
+   }
+ };
+ template <typename d, typename bo> bool cy<d, bo>::s() { bx<cy>::by(*this); }
+ namespace basic {
+ class u {
+   using de = ce;
+   void v(cd, b);
+   cy<de> df;
+ };
+ void u::v(cd, b) {
+   df.clear();
+   df.r();
+ }
+ } // namespace basic
+ } // namespace a
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.target/arm/pr115485.C gcc-13.4.0/gcc/testsuite/g++.target/arm/pr115485.C
*** gcc-13.3.0/gcc/testsuite/g++.target/arm/pr115485.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.target/arm/pr115485.C	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ /* { dg-options "-fPIE -mno-pic-data-is-text-relative -mlong-calls -ffunction-sections" } */
+ 
+ struct c1 {
+   virtual void func1() = 0;
+ };
+ struct  c2 {
+   virtual ~c2() {}
+ };
+ struct c3 : c2, c1 {
+   void func1() override;
+   void func3();
+ };
+ void c3::func1() {
+   func3();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.target/i386/mangling-alias1.C gcc-13.4.0/gcc/testsuite/g++.target/i386/mangling-alias1.C
*** gcc-13.3.0/gcc/testsuite/g++.target/i386/mangling-alias1.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.target/i386/mangling-alias1.C	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,16 ----
+ // PR c++/114992
+ // { dg-do compile { target { c++11 && x86_64-*-* } } }
+ // { dg-require-ifunc }
+ 
+ template <typename Callable>
+ __attribute__((target_clones("avx2", "default")))
+ void handler(Callable) {}
+ 
+ inline int func()
+ {
+   auto l1 = [](int) {}; // different lambda signature
+   handler([]() {}); // so this one needs a mangling alias
+   return 42;
+ }
+ 
+ int g = func();
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.target/i386/mv29.C gcc-13.4.0/gcc/testsuite/g++.target/i386/mv29.C
*** gcc-13.3.0/gcc/testsuite/g++.target/i386/mv29.C	Tue May 21 07:47:39 2024
--- gcc-13.4.0/gcc/testsuite/g++.target/i386/mv29.C	Thu Jun  5 16:03:00 2025
*************** int __attribute__ ((target("arch=znver4"
*** 53,58 ****
--- 53,62 ----
    return 10;
  }
  
+ int __attribute__ ((target("arch=znver5"))) foo () {
+   return 11;
+ }
+ 
  int main ()
  {
    int val = foo ();
*************** int main ()
*** 77,82 ****
--- 81,88 ----
      assert (val == 9);
    else if (__builtin_cpu_is ("znver4"))
      assert (val == 10);
+   else if (__builtin_cpu_is ("znver5"))
+     assert (val == 11);
    else
      assert (val == 0);
  
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.target/i386/pr119689.C gcc-13.4.0/gcc/testsuite/g++.target/i386/pr119689.C
*** gcc-13.3.0/gcc/testsuite/g++.target/i386/pr119689.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.target/i386/pr119689.C	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,44 ----
+ // { dg-do compile }
+ // { dg-options "-O2 -fcompare-debug" }
+ // { dg-additional-options "-march=i586 -mtune=generic" { target ia32 } }
+ // { dg-additional-options "-fPIC" { target { fpic } } }
+ 
+ enum gimple_code { GIMPLE_ASSIGN, GIMPLE_RETURN };
+ bool is_gimple_call();
+ int m_sig, m_exp, sreal_new_exp;
+ struct sreal {
+   sreal(long long sig) {
+     long long __trans_tmp_6 = sig >= 0 ? sig : -(unsigned long long)sig;
+     sig = __trans_tmp_6 <<= sreal_new_exp -= m_exp = __trans_tmp_6;
+     m_sig = sig;
+   }
+   void operator/(sreal);
+ };
+ struct ipa_predicate {
+   ipa_predicate(bool = true);
+   void operator&=(ipa_predicate);
+   void operator&(ipa_predicate);
+ };
+ void add_condition();
+ gimple_code eliminated_by_inlining_prob_code;
+ static int eliminated_by_inlining_prob() {
+   switch (eliminated_by_inlining_prob_code) {
+   case GIMPLE_RETURN:
+     return 2;
+   case GIMPLE_ASSIGN:
+     return 1;
+   }
+   return 0;
+ }
+ void fp_expression_p() {
+   ipa_predicate bb_predicate;
+   for (;;) {
+     int prob = eliminated_by_inlining_prob();
+     ipa_predicate sra_predicate;
+     sra_predicate &= add_condition;
+     if (is_gimple_call())
+       sreal(prob) / 2;
+     if (prob != 2)
+       bb_predicate & sra_predicate;
+   }
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.target/powerpc/pr106069.C gcc-13.4.0/gcc/testsuite/g++.target/powerpc/pr106069.C
*** gcc-13.3.0/gcc/testsuite/g++.target/powerpc/pr106069.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.target/powerpc/pr106069.C	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,119 ----
+ /* { dg-do run } */
+ /* { dg-options "-O -fno-tree-forwprop -maltivec" } */
+ /* { dg-require-effective-target vmx_hw } */
+ 
+ typedef __attribute__ ((altivec (vector__))) unsigned native_simd_type;
+ 
+ union
+ {
+   native_simd_type V;
+   int R[4];
+ } store_le_vec;
+ 
+ struct S
+ {
+   S () = default;
+   S (unsigned B0)
+   {
+     native_simd_type val{B0};
+     m_simd = val;
+   }
+   void store_le (unsigned int out[])
+   {
+     store_le_vec.V = m_simd;
+     unsigned int x0 = store_le_vec.R[0];
+     __builtin_memcpy (out, &x0, 4);
+   }
+   S rotl (unsigned int r)
+   {
+     native_simd_type rot{r};
+     return __builtin_vec_rl (m_simd, rot);
+   }
+   void operator+= (S other)
+   {
+     m_simd = __builtin_vec_add (m_simd, other.m_simd);
+   }
+   void operator^= (S other)
+   {
+     m_simd = __builtin_vec_xor (m_simd, other.m_simd);
+   }
+   static void transpose (S &B0, S B1, S B2, S B3)
+   {
+     native_simd_type T0 = __builtin_vec_mergeh (B0.m_simd, B2.m_simd);
+     native_simd_type T1 = __builtin_vec_mergeh (B1.m_simd, B3.m_simd);
+     native_simd_type T2 = __builtin_vec_mergel (B0.m_simd, B2.m_simd);
+     native_simd_type T3 = __builtin_vec_mergel (B1.m_simd, B3.m_simd);
+     B0 = __builtin_vec_mergeh (T0, T1);
+     B3 = __builtin_vec_mergel (T2, T3);
+   }
+   S (native_simd_type x) : m_simd (x) {}
+   native_simd_type m_simd;
+ };
+ 
+ void
+ foo (unsigned int output[], unsigned state[])
+ {
+   S R00 = state[0];
+   S R01 = state[0];
+   S R02 = state[2];
+   S R03 = state[0];
+   S R05 = state[5];
+   S R06 = state[6];
+   S R07 = state[7];
+   S R08 = state[8];
+   S R09 = state[9];
+   S R10 = state[10];
+   S R11 = state[11];
+   S R12 = state[12];
+   S R13 = state[13];
+   S R14 = state[4];
+   S R15 = state[15];
+   for (int r = 0; r != 10; ++r)
+     {
+       R09 += R13;
+       R11 += R15;
+       R05 ^= R09;
+       R06 ^= R10;
+       R07 ^= R11;
+       R07 = R07.rotl (7);
+       R00 += R05;
+       R01 += R06;
+       R02 += R07;
+       R15 ^= R00;
+       R12 ^= R01;
+       R13 ^= R02;
+       R00 += R05;
+       R01 += R06;
+       R02 += R07;
+       R15 ^= R00;
+       R12 = R12.rotl (8);
+       R13 = R13.rotl (8);
+       R10 += R15;
+       R11 += R12;
+       R08 += R13;
+       R09 += R14;
+       R05 ^= R10;
+       R06 ^= R11;
+       R07 ^= R08;
+       R05 = R05.rotl (7);
+       R06 = R06.rotl (7);
+       R07 = R07.rotl (7);
+     }
+   R00 += state[0];
+   S::transpose (R00, R01, R02, R03);
+   R00.store_le (output);
+ }
+ 
+ unsigned int res[1];
+ unsigned main_state[]{1634760805, 60878,      2036477234, 6,
+ 		      0,	  825562964,  1471091955, 1346092787,
+ 		      506976774,  4197066702, 518848283,  118491664,
+ 		      0,	  0,	      0,	  0};
+ int
+ main ()
+ {
+   foo (res, main_state);
+   if (res[0] != 0x41fcef98)
+     __builtin_abort ();
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/g++.target/s390/pr119834.C gcc-13.4.0/gcc/testsuite/g++.target/s390/pr119834.C
*** gcc-13.3.0/gcc/testsuite/g++.target/s390/pr119834.C	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/g++.target/s390/pr119834.C	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,76 ----
+ // PR target/119834
+ // { dg-do compile { target c++11 } }
+ // { dg-options "-O2 -march=z900" }
+ 
+ int *a;
+ struct A;
+ struct B {
+   A begin ();
+   A end ();
+   operator bool * ();
+   void operator++ ();
+ };
+ template <typename T>
+ auto operator| (int, T x) -> decltype (x (0));
+ struct A : B { bool a; };
+ struct C { A operator () (int); };
+ enum D {} d;
+ int e;
+ void foo ();
+ struct E {
+   template <typename T>
+   T *garply ()
+   {
+     if (d)
+       return 0;
+     if (e)
+       foo ();
+     return reinterpret_cast<T *> (f);
+   }
+   template <typename>
+   void bar (long x, bool)
+   {
+     if (&g - f)
+       __builtin_memset (a, 0, x);
+     f += x;
+   }
+   template <typename T>
+   T *baz (T *x, long y, bool z = true)
+   {
+     if (d)
+       return nullptr;
+     bar<T> ((char *)x + y - f, z);
+     return x;
+   }
+   template <typename T>
+   void qux (T x) { baz (x, x->j); }
+   char *f, g;
+ } *h;
+ struct F {
+   template <typename T>
+   int corge (T x) { x.freddy (this); return 0; }
+   template <typename T>
+   int boo (T x) { corge (x); return 0; }
+ } i;
+ template <typename T>
+ struct G {
+   template <typename U> friend T operator+ (U, G);
+   template <typename U>
+   void waldo (F *x, G y, U z) { x->boo (z + y); }
+   template <typename... Ts>
+   void plugh (E *y, Ts... z) { T *x = y->garply<T> (); x->thud (y, z...); }
+ };
+ template <typename T> using H = G<T>;
+ struct I {
+   static constexpr unsigned j = 2;
+   void thud (E *x, A y) { x->qux (this); for (auto g : y) ; }
+ };
+ H<I> k;
+ struct J {
+   void freddy (F *) { C a; auto b = 0 | a; k.plugh (h, b); }
+ };
+ H<J> l;
+ struct K {
+   void freddy () { l.waldo (&i, l, this); }
+ };
+ void grault () { K m; m.freddy (); }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.c-torture/compile/pr115143-1.c gcc-13.4.0/gcc/testsuite/gcc.c-torture/compile/pr115143-1.c
*** gcc-13.3.0/gcc/testsuite/gcc.c-torture/compile/pr115143-1.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.c-torture/compile/pr115143-1.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,21 ----
+ /* PR tree-optimization/115143 */
+ /* This used to ICE.
+    minmax part of phiopt would transform,
+    would transform `a!=0?min(a, b) : 0` into `min(a,b)`
+    which was correct except b was defined by a phi in the inner
+    bb which was not handled. */
+ short a, d;
+ char b;
+ long c;
+ unsigned long e, f;
+ void g(unsigned long h) {
+   if (c ? e : b)
+     if (e)
+       if (d) {
+         a = f ? ({
+           unsigned long i = d ? f : 0, j = e ? h : 0;
+           i < j ? i : j;
+         }) : 0;
+       }
+ }
+ 
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.c-torture/compile/pr115143-2.c gcc-13.4.0/gcc/testsuite/gcc.c-torture/compile/pr115143-2.c
*** gcc-13.3.0/gcc/testsuite/gcc.c-torture/compile/pr115143-2.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.c-torture/compile/pr115143-2.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,30 ----
+ /* { dg-options "-fgimple" } */
+ /* PR tree-optimization/115143 */
+ /* This used to ICE.
+    minmax part of phiopt would transform,
+    would transform `a!=0?min(a, b) : 0` into `min(a,b)`
+    which was correct except b was defined by a phi in the inner
+    bb which was not handled. */
+ unsigned __GIMPLE (ssa,startwith("phiopt"))
+ foo (unsigned a, unsigned b)
+ {
+   unsigned j;
+   unsigned _23;
+   unsigned _12;
+ 
+   __BB(2):
+   if (a_6(D) != 0u)
+     goto __BB3;
+   else
+     goto __BB4;
+ 
+   __BB(3):
+   j_10 = __PHI (__BB2: b_11(D));
+   _23 = __MIN (a_6(D), j_10);
+   goto __BB4;
+ 
+   __BB(4):
+   _12 = __PHI (__BB3: _23, __BB2: 0u);
+   return _12;
+ 
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.c-torture/compile/pr115143-3.c gcc-13.4.0/gcc/testsuite/gcc.c-torture/compile/pr115143-3.c
*** gcc-13.3.0/gcc/testsuite/gcc.c-torture/compile/pr115143-3.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.c-torture/compile/pr115143-3.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,29 ----
+ /* { dg-options "-fgimple" } */
+ /* PR tree-optimization/115143 */
+ /* This used to ICE.
+    minmax part of phiopt would transform,
+    would transform `a!=0?min(a, b) : 0` into `min(a,b)`
+    which was correct except b was defined by a phi in the inner
+    bb which was not handled. */
+ unsigned __GIMPLE (ssa,startwith("phiopt"))
+ foo (unsigned a, unsigned b)
+ {
+   unsigned j;
+   unsigned _23;
+   unsigned _12;
+ 
+   __BB(2):
+   if (a_6(D) > 0u)
+     goto __BB3;
+   else
+     goto __BB4;
+ 
+   __BB(3):
+   j_10 = __PHI (__BB2: b_7(D));
+   _23 = __MIN (a_6(D), j_10);
+   goto __BB4;
+ 
+   __BB(4):
+   _12 = __PHI (__BB3: _23, __BB2: 0u);
+   return _12;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.c-torture/compile/pr115277.c gcc-13.4.0/gcc/testsuite/gcc.c-torture/compile/pr115277.c
*** gcc-13.3.0/gcc/testsuite/gcc.c-torture/compile/pr115277.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.c-torture/compile/pr115277.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,28 ----
+ int array[1000];
+ void
+ test (int a)
+ {
+         if (__builtin_expect (a > 3, 1))
+                 return;
+         for (int i = 0; i < a; i++)
+                 array[i]=i;
+ }
+ void
+ test2 (int a)
+ {
+         if (__builtin_expect (a > 10, 1))
+                 return;
+         for (int i = 0; i < a; i++)
+                 array[i]=i;
+ }
+ int
+ main()
+ {
+         test(1);
+         test(2);
+         test(3);
+         test2(10);
+         if (array[9] != 9)
+                 __builtin_abort ();
+         return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.c-torture/compile/pr117358.c gcc-13.4.0/gcc/testsuite/gcc.c-torture/compile/pr117358.c
*** gcc-13.3.0/gcc/testsuite/gcc.c-torture/compile/pr117358.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.c-torture/compile/pr117358.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,17 ----
+ /* PR tree-optimization/117358 */
+ 
+ char a;
+ /* This attribute is bogus, snprintf isn't const.  Just verify we don't ICE on it.  */
+ int __attribute__((const)) snprintf (char *, __SIZE_TYPE__, const char *, ...);
+ 
+ long
+ foo (long d) 
+ { 
+   return snprintf (&a, d, ""); 
+ }
+ 
+ int
+ bar (void) 
+ { 
+   return foo (1); 
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.c-torture/execute/20241029-1.c gcc-13.4.0/gcc/testsuite/gcc.c-torture/execute/20241029-1.c
*** gcc-13.3.0/gcc/testsuite/gcc.c-torture/execute/20241029-1.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.c-torture/execute/20241029-1.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,23 ----
+ /* PR rtl-optimization/117327 */
+ /* Testcase by Brad Moody <brad.moody@oracle.com> */
+ 
+ __attribute__((noinline))
+ void foo(int *self, int *x)
+ {
+     __builtin_puts ("foo\n");
+ 
+     if (x) {
+         while (1) {
+             ++*self;
+             if (*self == 6) break;
+             if (*self == 7) __builtin_unreachable();
+         }
+     }
+ }
+ 
+ int main (void)
+ {
+     int y = 0;
+     foo (&y, 0);
+     return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.c-torture/execute/pr108789.c gcc-13.4.0/gcc/testsuite/gcc.c-torture/execute/pr108789.c
*** gcc-13.3.0/gcc/testsuite/gcc.c-torture/execute/pr108789.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.c-torture/execute/pr108789.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,39 ----
+ /* PR middle-end/108789 */
+ 
+ int
+ add (unsigned *r, const unsigned *a, const unsigned *b)
+ {
+   return __builtin_add_overflow (*a, *b, r);
+ }
+ 
+ int
+ mul (unsigned *r, const unsigned *a, const unsigned *b)
+ {
+   return __builtin_mul_overflow (*a, *b, r);
+ }
+ 
+ int
+ main ()
+ {
+   unsigned x;
+ 
+   /* 1073741824U + 1073741824U should not overflow.  */
+   x = (__INT_MAX__ + 1U) / 2;
+   if (add (&x, &x, &x))
+     __builtin_abort ();
+ 
+   /* 256U * 256U should not overflow */
+   x = 1U << (sizeof (int) * __CHAR_BIT__ / 4);
+   if (mul (&x, &x, &x))
+     __builtin_abort ();
+ 
+   /* 2147483648U + 2147483648U should overflow */
+   x = __INT_MAX__ + 1U;
+   if (!add (&x, &x, &x))
+     __builtin_abort ();
+ 
+   /* 65536U * 65536U should overflow */
+   x = 1U << (sizeof (int) * __CHAR_BIT__ / 2);
+   if (!mul (&x, &x, &x))
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.c-torture/execute/pr111613.c gcc-13.4.0/gcc/testsuite/gcc.c-torture/execute/pr111613.c
*** gcc-13.3.0/gcc/testsuite/gcc.c-torture/execute/pr111613.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.c-torture/execute/pr111613.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,29 ----
+ #include <stdio.h>
+ #include <stdlib.h>
+ 
+ struct bitfield {
+ 	unsigned int field1 : 1;
+ 	unsigned int field2 : 1;
+ 	unsigned int field3 : 1;
+ };
+ 
+ __attribute__((noinline)) static void
+ set_field1_and_field2(struct bitfield *b) {
+ 	b->field1 = 1;
+ 	b->field2 = 1;
+ }
+ 
+ __attribute__((noinline)) static struct bitfield *
+ new_bitfield(void) {
+ 	struct bitfield *b = (struct bitfield *)malloc(sizeof(*b));
+ 	b->field3 = 1;
+ 	set_field1_and_field2(b);
+ 	return b;
+ }
+ 
+ int main(void) {
+ 	struct bitfield *b = new_bitfield();
+ 	if (b->field3 != 1)
+ 		__builtin_abort ();
+ 	return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.c-torture/execute/pr113787.c gcc-13.4.0/gcc/testsuite/gcc.c-torture/execute/pr113787.c
*** gcc-13.3.0/gcc/testsuite/gcc.c-torture/execute/pr113787.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.c-torture/execute/pr113787.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,38 ----
+ void foo(int x, int y, int z, int d, int *buf)
+ {
+   for(int i = z; i < y-z; ++i)
+     for(int j = 0; j < d; ++j)
+       /* buf[x(i+1) + j] = buf[x(i+1)-j-1] */
+       buf[i*x+(x-z+j)] = buf[i*x+(x-z-1-j)];
+ }
+ 
+ void bar(int x, int y, int z, int d, int *buf)
+ {
+   for(int i = 0; i < d; ++i)
+     for(int j = z; j < x-z; ++j)
+       /* buf[j+(y+i)*x] = buf[j+(y-1-i)*x] */
+       buf[j+(y-z+i)*x] = buf[j+(y-z-1-i)*x];
+ }
+ 
+ __attribute__((noipa))
+ void baz(int x, int y, int d, int *buf)
+ {
+   foo(x, y, 0, d, buf);
+   bar(x, y, 0, d, buf);
+ }
+ 
+ int main(void)
+ {
+   int a[] = { 1, 2, 3 };
+   baz (1, 2, 1, a);
+   /* foo does:
+      buf[1] = buf[0];
+      buf[2] = buf[1];
+ 
+      bar does:
+      buf[2] = buf[1]; (no-op)
+      so we should have { 1, 1, 1 }.  */
+   for (int i = 0; i < 3; i++)
+     if (a[i] != 1)
+       __builtin_abort ();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.c-torture/execute/pr114207.c gcc-13.4.0/gcc/testsuite/gcc.c-torture/execute/pr114207.c
*** gcc-13.3.0/gcc/testsuite/gcc.c-torture/execute/pr114207.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.c-torture/execute/pr114207.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,23 ----
+ #include <stdio.h>
+ #include <stdint.h>
+ 
+ struct S {
+     int a, b;
+ };
+ 
+ __attribute__((noinline))
+ void foo (struct S *s) {
+     struct S ss = (struct S) {
+         .a = s->b,
+         .b = s->a
+     };
+     *s = ss;
+ }
+ 
+ int main() {
+   struct S s = {6, 12};
+   foo(&s);
+   if (s.a != 12 || s.b != 6)
+     __builtin_abort ();
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.c-torture/execute/pr115033.c gcc-13.4.0/gcc/testsuite/gcc.c-torture/execute/pr115033.c
*** gcc-13.3.0/gcc/testsuite/gcc.c-torture/execute/pr115033.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.c-torture/execute/pr115033.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,35 ----
+ 
+ typedef struct func
+ {
+   int *a;
+ }func;
+ __attribute__((noinline))
+ void ff(struct func *t)
+ {
+   *(t->a) = 0;
+ }
+ 
+ 
+ typedef struct mapped_iterator {
+   func F;
+ }mapped_iterator;
+ 
+ __attribute__((noinline))
+ mapped_iterator map_iterator(func F) {
+   mapped_iterator t = {F};
+   return t;
+ }
+ 
+ void map_to_vector(func *F) {
+   mapped_iterator t = map_iterator(*F);
+   ff(&t.F);
+ }
+ int main() {
+   int resultIsStatic = 1;
+   func t ={&resultIsStatic};
+   map_to_vector(&t);
+ 
+   if (resultIsStatic)
+     __builtin_trap();
+   __builtin_exit(0);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.c-torture/execute/pr116799.c gcc-13.4.0/gcc/testsuite/gcc.c-torture/execute/pr116799.c
*** gcc-13.3.0/gcc/testsuite/gcc.c-torture/execute/pr116799.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.c-torture/execute/pr116799.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,41 ----
+ /* PR rtl-optimization/116799 */
+ 
+ const char *l;
+ 
+ __attribute__((noipa)) void
+ foo (const char *x, const char *y, int z)
+ {
+   if (x != l + 1 || y != x || z)
+     __builtin_abort ();
+ }
+ 
+ __attribute__((noipa)) void
+ bar (const char *x, char *v)
+ {
+   const char *w = x + __builtin_strlen (x);
+ 
+   while (x[0] == '*' && x < w - 1)
+     x++;
+ 
+   const char *y = w - 1;
+   int z = 1;
+   if (y >= x)
+     {
+       while (y - x > 0 && *y == '*')
+ 	y--;
+       z = 0;
+     }
+   int i = 0;
+   if (z)
+     v[i++] = 'a';
+   v[i] = 'b';
+   foo (x, y, z);
+ }
+ 
+ int
+ main ()
+ {
+   char v[2] = { 0 };
+   l = "**";
+   bar (l, v);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.c-torture/execute/pr117095.c gcc-13.4.0/gcc/testsuite/gcc.c-torture/execute/pr117095.c
*** gcc-13.3.0/gcc/testsuite/gcc.c-torture/execute/pr117095.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.c-torture/execute/pr117095.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,47 ----
+ /* PR rtl-optimization/117095 */
+ 
+ short a, b;
+ int c, e, z;
+ long f, g;
+ int *h = &c, *i;
+ #ifdef __SIZEOF_INT128__
+ volatile __int128 j;
+ #else
+ volatile long long j;
+ #endif
+ char k, l;
+ 
+ char
+ foo (char n, char o)
+ {
+   return n + o;
+ }
+ 
+ char
+ bar (char n, char o)
+ {
+   return o == 0 ? n : n / o;
+ }
+ 
+ short baz (short n)
+ {
+   return n - a;
+ }
+ 
+ int
+ main ()
+ {
+   char *q = &l;
+   int **s = &i;
+   *s = &z;
+   for (e = 0; e <= 5; e++)
+     for (g = 1; g <= 5; g++)
+       {
+ 	k = foo (9, *i);
+ 	**s = bar (f > 1, (1 && j) ^ k);
+       }
+   b = baz (q == &l);
+   *h = b;
+   if (c != 1)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.c-torture/execute/pr117432.c gcc-13.4.0/gcc/testsuite/gcc.c-torture/execute/pr117432.c
*** gcc-13.3.0/gcc/testsuite/gcc.c-torture/execute/pr117432.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.c-torture/execute/pr117432.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,72 ----
+ /* PR ipa/117432 */
+ /* { dg-additional-options "-std=gnu2x" } */
+ 
+ #include <stdarg.h>
+ 
+ long long r;
+ 
+ __attribute__((noipa)) void
+ baz (int tag, ...)
+ {
+   va_list ap;
+   va_start (ap, tag);
+   if (!r)
+     r = va_arg (ap, long long);
+   else
+     r = va_arg (ap, int);
+   va_end (ap);
+ }
+ 
+ void
+ foo (void)
+ {
+   baz (1, -1, 0);
+ }
+ 
+ void
+ bar (void)
+ {
+   baz (1, -1LL, 0);
+ }
+ 
+ __attribute__((noipa)) void
+ qux (...)
+ {
+   va_list ap;
+   va_start (ap);
+   if (!r)
+     r = va_arg (ap, long long);
+   else
+     r = va_arg (ap, int);
+   va_end (ap);
+ }
+ 
+ void
+ corge (void)
+ {
+   qux (-2, 0);
+ }
+ 
+ void
+ fred (void)
+ {
+   qux (-2LL, 0);
+ }
+ 
+ int
+ main ()
+ {
+   bar ();
+   if (r != -1LL)
+     __builtin_abort ();
+   foo ();
+   if (r != -1)
+     __builtin_abort ();
+   r = 0;
+   fred ();
+   if (r != -2LL)
+     __builtin_abort ();
+   corge ();
+   if (r != -2)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.c-torture/execute/pr117498.c gcc-13.4.0/gcc/testsuite/gcc.c-torture/execute/pr117498.c
*** gcc-13.3.0/gcc/testsuite/gcc.c-torture/execute/pr117498.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.c-torture/execute/pr117498.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,35 ----
+ /* PR middle-end/117498 */
+ 
+ int a, d, f;
+ char g;
+ volatile int c = 1;
+ 
+ int
+ foo ()
+ {
+   if (c == 0)
+     return -1;
+   return 1;
+ }
+ 
+ void
+ bar (int h, int i, char *k, char *m)
+ {
+   for (; d < i; d += 2)
+     for (int j = 0; j < h; j++)
+       m[j] = k[4 * j];
+ }
+ 
+ void
+ baz (long h)
+ {
+   char n = 0;
+   bar (h, 4, &n, &g);
+ }
+ 
+ int
+ main ()
+ {
+   f = foo ();
+   baz ((unsigned char) f - 4);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.c-torture/execute/pr118623.c gcc-13.4.0/gcc/testsuite/gcc.c-torture/execute/pr118623.c
*** gcc-13.3.0/gcc/testsuite/gcc.c-torture/execute/pr118623.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.c-torture/execute/pr118623.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,23 ----
+ /* PR target/118623 */
+ 
+ static int
+ foo (int x, int y)
+ {
+   int a = 1 << x;
+   if (y & a)
+     return 0;
+   return 5;
+ }
+ 
+ __attribute__((noipa)) void
+ bar (int x)
+ {
+   if (((foo (x - 50, x) + x + x) & 1) == 0)
+     __builtin_abort ();
+ }
+ 
+ int
+ main ()
+ {
+   bar (63);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.c-torture/execute/pr118915.c gcc-13.4.0/gcc/testsuite/gcc.c-torture/execute/pr118915.c
*** gcc-13.3.0/gcc/testsuite/gcc.c-torture/execute/pr118915.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.c-torture/execute/pr118915.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,22 ----
+ /* PR tree-optimization/118915 */
+ 
+ int a;
+ 
+ int
+ foo (int c, int d, int e, int f)
+ {
+   if (!d || !e)
+     return -22;
+   if (c > 16)
+     return -22;
+   if (!f)
+     return -22;
+   return 2;
+ }
+ 
+ int
+ main ()
+ {
+   if (foo (a + 21, a + 6, a + 34, a + 26) != -22)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.c-torture/execute/pr119071.c gcc-13.4.0/gcc/testsuite/gcc.c-torture/execute/pr119071.c
*** gcc-13.3.0/gcc/testsuite/gcc.c-torture/execute/pr119071.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.c-torture/execute/pr119071.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,15 ----
+ /* PR rtl-optimization/119071 */
+ 
+ int a, b;
+ 
+ int
+ main ()
+ {
+   int c = 0;
+   if (a + 2)
+     c = 1;
+   int d = (1 + c - 2 + c == 1) - 1;
+   b = ((d + 1) << d) + d;
+   if (b != 1)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.c-torture/execute/pr119291.c gcc-13.4.0/gcc/testsuite/gcc.c-torture/execute/pr119291.c
*** gcc-13.3.0/gcc/testsuite/gcc.c-torture/execute/pr119291.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.c-torture/execute/pr119291.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,33 ----
+ /* PR rtl-optimization/119291 */
+ 
+ int a;
+ long c;
+ 
+ __attribute__((noipa)) void
+ foo (int x)
+ {
+   if (x != 0)
+     __builtin_abort ();
+   a = 42;
+ }
+ 
+ int
+ main ()
+ {
+   int e = 1;
+ lab:
+   if (a < 2)
+     {
+       int b = e;
+       _Bool d = a != 0;
+       _Bool f = b != 0;
+       unsigned long g = -(d & f);
+       unsigned long h = c & g;
+       unsigned long i = ~c;
+       e = -(i & h);
+       c = e != 0;
+       a = ~e + b;
+       foo (e);
+       goto lab;
+     }
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.c-torture/execute/signed1bitfield-1.c gcc-13.4.0/gcc/testsuite/gcc.c-torture/execute/signed1bitfield-1.c
*** gcc-13.3.0/gcc/testsuite/gcc.c-torture/execute/signed1bitfield-1.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.c-torture/execute/signed1bitfield-1.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,23 ----
+ /* PR tree-optimization/115154 */
+ /* This was being miscompiled to `(signed:1)(t*5)`
+    being transformed into `-((signed:1)t)` which is undefined.
+    Note there is a pattern which removes the negative in some cases
+    which works around the issue.  */
+ 
+ struct {
+   signed b : 1;
+ } f;
+ int i = 55;
+ __attribute__((noinline))
+ void check(int a)
+ {
+         if (!a)
+         __builtin_abort();
+ }
+ int main() {
+     int t = i != 5;
+     t = t*5;
+     f.b = t;
+     int tt = f.b;
+     check(f.b);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/asan/pr110676.c gcc-13.4.0/gcc/testsuite/gcc.dg/asan/pr110676.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/asan/pr110676.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/asan/pr110676.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,14 ----
+ /* PR sanitizer/110676 */
+ /* { dg-do run } */
+ /* { dg-skip-if "" { *-*-* } { "*" } { "-O0" } } */
+ /* { dg-shouldfail "asan" } */
+ 
+ int
+ main ()
+ {
+   char s[1] = "A";
+   return __builtin_strlen (s);
+ }
+ 
+ /* { dg-output "ERROR: AddressSanitizer: stack-buffer-overflow on address.*(\n|\r\n|\r)" } */
+ /* { dg-output "READ of size.*" } */
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/asan/pr115172.c gcc-13.4.0/gcc/testsuite/gcc.dg/asan/pr115172.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/asan/pr115172.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/asan/pr115172.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,20 ----
+ /* PR sanitizer/115172 */
+ /* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+ /* { dg-options "-O2 -fsanitize=address,bool -ffat-lto-objects -fdump-tree-asan1" } */
+ /* { dg-final { scan-tree-dump-not "\.ASAN_CHECK " "asan1" } } */
+ 
+ #ifdef __x86_64__
+ #define SEG __seg_gs
+ #else
+ #define SEG __seg_fs
+ #endif
+ 
+ extern struct S { _Bool b; } s;
+ void bar (void);
+ 
+ void
+ foo (void)
+ {
+   if (*(volatile _Bool SEG *) (__UINTPTR_TYPE__) &s.b)
+     bar ();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/asan/pr117209.c gcc-13.4.0/gcc/testsuite/gcc.dg/asan/pr117209.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/asan/pr117209.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/asan/pr117209.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,15 ----
+ /* PR sanitizer/117209 */
+ /* { dg-do compile } */
+ /* { dg-options "-fsanitize=address" } */
+ 
+ struct A { char a; };
+ void foo (void);
+ __attribute__((returns_twice, const)) int bar (struct A);
+ 
+ void
+ baz (struct A *x, int *y, int z)
+ {
+   if (z)
+     foo (); 
+   *y = bar (*x);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/asan/pr119582.c gcc-13.4.0/gcc/testsuite/gcc.dg/asan/pr119582.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/asan/pr119582.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/asan/pr119582.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,23 ----
+ /* PR c/119582 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fsanitize=address,pointer-subtract,pointer-compare" } */
+ 
+ const char v;
+ typedef __PTRDIFF_TYPE__ ptrdiff_t;
+ char a;
+ const ptrdiff_t p = &a + 1 - &a;
+ const int q = (&a + 1) != &a;
+ 
+ ptrdiff_t
+ foo (void)
+ {
+   char b;
+   return &b + (v != '\n') - &b;
+ }
+ 
+ int
+ bar (void)
+ {
+   char b;
+   return (&b + (v != '\n')) != &b;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/c23-stddef-2.c gcc-13.4.0/gcc/testsuite/gcc.dg/c23-stddef-2.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/c23-stddef-2.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/c23-stddef-2.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,17 ----
+ /* Test __STDC_VERSION_STDDEF_H__ in C23.  */
+ /* { dg-do preprocess } */
+ /* { dg-options "-std=c2x -pedantic-errors -Wsystem-headers" } */
+ 
+ #include <stddef.h>
+ /* Simulate what glibc <time.h> does without actually including it.  */
+ #define __need_size_t
+ #define __need_NULL
+ #include <stddef.h>
+ 
+ #ifndef __STDC_VERSION_STDDEF_H__
+ #error "__STDC_VERSION_STDDEF_H__ not defined"
+ #endif
+ 
+ #if __STDC_VERSION_STDDEF_H__ != 202311L
+ #error "bad value of __STDC_VERSION_STDDEF_H__"
+ #endif
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/dfp/pr102674.c gcc-13.4.0/gcc/testsuite/gcc.dg/dfp/pr102674.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/dfp/pr102674.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/dfp/pr102674.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,65 ----
+ /* PR middle-end/102674 */
+ /* { dg-do run } */
+ /* { dg-options "-O2" } */
+ 
+ #define FP_NAN 0
+ #define FP_INFINITE 1
+ #define FP_ZERO 2
+ #define FP_SUBNORMAL 3
+ #define FP_NORMAL 4
+ 
+ __attribute__((noipa)) int
+ foo (_Decimal32 x)
+ {
+   return __builtin_fpclassify (FP_NAN, FP_INFINITE, FP_NORMAL,
+ 			       FP_SUBNORMAL, FP_ZERO, x);
+ }
+ 
+ __attribute__((noipa)) int
+ bar (_Decimal64 x)
+ {
+   return __builtin_fpclassify (FP_NAN, FP_INFINITE, FP_NORMAL,
+ 			       FP_SUBNORMAL, FP_ZERO, x);
+ }
+ 
+ __attribute__((noipa)) int
+ baz (_Decimal128 x)
+ {
+   return __builtin_fpclassify (FP_NAN, FP_INFINITE, FP_NORMAL,
+ 			       FP_SUBNORMAL, FP_ZERO, x);
+ }
+ 
+ int
+ main ()
+ {
+   if (foo (__builtin_infd32 ()) != FP_INFINITE
+       || foo (-__builtin_infd32 ()) != FP_INFINITE
+       || foo (__builtin_nand32 ("")) != FP_NAN
+       || foo (9.999999E96DF) != FP_NORMAL
+       || foo (-1E-95DF) != FP_NORMAL
+       || foo (0.999999E-95DF) != FP_SUBNORMAL
+       || foo (-0.000001E-95DF) != FP_SUBNORMAL
+       || foo (0.000DF) != FP_ZERO
+       || foo (-0.00000DF) != FP_ZERO)
+     __builtin_abort ();
+   if (bar (__builtin_infd64 ()) != FP_INFINITE
+       || bar (-__builtin_infd64 ()) != FP_INFINITE
+       || bar (__builtin_nand64 ("")) != FP_NAN
+       || bar (9.999999999999999E384DD) != FP_NORMAL
+       || bar (-1E-383DD) != FP_NORMAL
+       || bar (0.999999999999999E-383DD) != FP_SUBNORMAL
+       || bar (-0.000000000000001E-383DD) != FP_SUBNORMAL
+       || bar (0.000DD) != FP_ZERO
+       || bar (-0.0000000000DD) != FP_ZERO)
+     __builtin_abort ();
+   if (baz (__builtin_infd128 ()) != FP_INFINITE
+       || baz (-__builtin_infd128 ()) != FP_INFINITE
+       || baz (__builtin_nand128 ("")) != FP_NAN
+       || baz (9.999999999999999999999999999999999E6144DL) != FP_NORMAL
+       || baz (-1E-6143DL) != FP_NORMAL
+       || baz (0.999999999999999999999999999999999E-6143DL) != FP_SUBNORMAL
+       || baz (-0.000000000000000000000000000000001E-6143DL) != FP_SUBNORMAL
+       || baz (0.000DL) != FP_ZERO
+       || baz (-0.0000000000000000000000DL) != FP_ZERO)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/dfp/pr43374.c gcc-13.4.0/gcc/testsuite/gcc.dg/dfp/pr43374.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/dfp/pr43374.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/dfp/pr43374.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,56 ----
+ /* PR middle-end/43374 */
+ /* { dg-do run } */
+ /* { dg-options "-O2" } */
+ 
+ __attribute__((noipa)) int
+ foo (_Decimal32 x)
+ {
+   return __builtin_isinf (x);
+ }
+ 
+ __attribute__((noipa)) int
+ bar (_Decimal64 x)
+ {
+   return __builtin_isfinite (x);
+ }
+ 
+ __attribute__((noipa)) int
+ baz (_Decimal128 x)
+ {
+   return __builtin_isnormal (x);
+ }
+ 
+ int
+ main ()
+ {
+   if (!foo (__builtin_infd32 ())
+       || !foo (-__builtin_infd32 ())
+       || foo (__builtin_nand32 (""))
+       || foo (9.999999E96DF)
+       || foo (-1E-95DF)
+       || foo (0.999999E-95DF)
+       || foo (-0.000001E-95DF)
+       || foo (0.000DF)
+       || foo (-0.00000DF))
+     __builtin_abort ();
+   if (bar (__builtin_infd64 ())
+       || bar (-__builtin_infd64 ())
+       || bar (__builtin_nand64 (""))
+       || !bar (9.999999999999999E384DD)
+       || !bar (-1E-383DD)
+       || !bar (0.999999999999999E-383DD)
+       || !bar (-0.000000000000001E-383DD)
+       || !bar (0.000DD)
+       || !bar (-0.0000000000DD))
+     __builtin_abort ();
+   if (baz (__builtin_infd128 ())
+       || baz (-__builtin_infd128 ())
+       || baz (__builtin_nand128 (""))
+       || !baz (9.999999999999999999999999999999999E6144DL)
+       || !baz (-1E-6143DL)
+       || baz (0.999999999999999999999999999999999E-6143DL)
+       || baz (-0.000000000000000000000000000000001E-6143DL)
+       || baz (0.000DL)
+       || baz (-0.0000000000000000000000DL))
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/ipa/modref-4.c gcc-13.4.0/gcc/testsuite/gcc.dg/ipa/modref-4.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/ipa/modref-4.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/ipa/modref-4.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,34 ----
+ /* { dg-options "-O"  } */
+ /* { dg-do run } */
+ 
+ static __attribute__((noipa)) int foo (void)
+ {
+   return 1;
+ }
+ 
+ int main (void)
+ {
+   struct S { int a; int b; };
+   struct T { struct S s; };
+ 
+   struct T t = { { 0, 0 } };
+   struct T u;
+ 
+   __attribute__((noinline)) void bar (void)
+   {
+     if (foo ())
+       {
+ 	u = t;
+         /* OK with u.s.a = 0; */
+       }
+   }
+ 
+   u.s.a = 1;
+ 
+   bar ();
+ 
+   if (u.s.a != 0)
+     __builtin_abort ();
+ 
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/ipa/pr119852.c gcc-13.4.0/gcc/testsuite/gcc.dg/ipa/pr119852.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/ipa/pr119852.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/ipa/pr119852.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,50 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -fdump-ipa-clones"  } */
+ 
+ typedef struct rtx_def *rtx;
+ enum rtx_code {
+   LAST_AND_UNUSED_RTX_CODE};
+ extern const char * const rtx_format[((int) LAST_AND_UNUSED_RTX_CODE)];
+ struct rtx_def {
+   enum rtx_code code;
+ };
+ typedef int (*rtx_function) (rtx *, void *);
+ extern int for_each_rtx (rtx *, rtx_function, void *);
+ int
+ replace_label (rtx *x, void *data)
+ {
+   rtx l = *x;
+   if (l == (rtx) 0)
+     {
+  {
+    rtx new_c, new_l;
+    for_each_rtx (&new_c, replace_label, data);
+  }
+     }
+ }
+ static int
+ for_each_rtx_1 (rtx exp, int n, rtx_function f, void *data)
+ {
+   int result, i, j;
+   const char *format = (rtx_format[(int) (((enum rtx_code) (exp)->code))]);
+   rtx *x;
+   for (; format[n] != '\0'; n++)
+     {
+       switch (format[n])
+  {
+  case 'e':
+    result = (*f) (x, data);
+      {
+        result = for_each_rtx_1 (*x, i, f, data);
+      }
+  }
+     }
+ }
+ int
+ for_each_rtx (rtx *x, rtx_function f, void *data)
+ {
+   int i;
+   return for_each_rtx_1 (*x, i, f, data);
+ }
+ 
+ /* { dg-final { scan-ipa-dump-not "(null)"  "ipa-clones"  } } */
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/ipa/pr120044-1.c gcc-13.4.0/gcc/testsuite/gcc.dg/ipa/pr120044-1.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/ipa/pr120044-1.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/ipa/pr120044-1.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do run } */
+ /* { dg-options "-O3 -fno-early-inlining -fno-tree-fre -fno-tree-pre -fno-code-hoisting -fno-inline" } */
+ 
+ struct a {
+   int b;
+ } const c;
+ void d(char p, struct a e) {
+   while (e.b)
+     ;
+ }
+ static unsigned short f(const struct a g) {
+   d(g.b, g);
+   return g.b;
+ }
+ int main() {
+   return f(c);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/ipa/pr120044-2.c gcc-13.4.0/gcc/testsuite/gcc.dg/ipa/pr120044-2.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/ipa/pr120044-2.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/ipa/pr120044-2.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do run } */
+ /* { dg-options "-O3 -fno-early-inlining -fno-tree-fre -fno-tree-pre -fno-code-hoisting -fno-ipa-cp" } */
+ 
+ struct a {
+   int b;
+ } const c;
+ void d(char p, struct a e) {
+   while (e.b)
+     ;
+ }
+ static unsigned short f(const struct a g) {
+   d(g.b, g);
+   return g.b;
+ }
+ int main() {
+   return f(c);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/lto/pr113359-2_0.c gcc-13.4.0/gcc/testsuite/gcc.dg/lto/pr113359-2_0.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/lto/pr113359-2_0.c	Tue May 21 07:47:39 2024
--- gcc-13.4.0/gcc/testsuite/gcc.dg/lto/pr113359-2_0.c	Thu Jun  5 16:03:00 2025
***************
*** 8,22 ****
  struct SA
  {
    unsigned int ax;
!   unsigned long ay;
!   unsigned long az;
  };
  
  struct SB
  {
    unsigned int bx;
!   unsigned long by;
!   unsigned long bz;
  };
  
  struct ZA
--- 8,22 ----
  struct SA
  {
    unsigned int ax;
!   unsigned long long ay;
!   unsigned long long az;
  };
  
  struct SB
  {
    unsigned int bx;
!   unsigned long long by;
!   unsigned long long bz;
  };
  
  struct ZA
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/lto/pr113359-2_1.c gcc-13.4.0/gcc/testsuite/gcc.dg/lto/pr113359-2_1.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/lto/pr113359-2_1.c	Tue May 21 07:47:39 2024
--- gcc-13.4.0/gcc/testsuite/gcc.dg/lto/pr113359-2_1.c	Thu Jun  5 16:03:00 2025
***************
*** 5,19 ****
  struct SA
  {
    unsigned int ax;
!   unsigned long ay;
!   unsigned long az;
  };
  
  struct SB
  {
    unsigned int bx;
!   unsigned long by;
!   unsigned long bz;
  };
  
  struct ZA
--- 5,19 ----
  struct SA
  {
    unsigned int ax;
!   unsigned long long ay;
!   unsigned long long az;
  };
  
  struct SB
  {
    unsigned int bx;
!   unsigned long long by;
!   unsigned long long bz;
  };
  
  struct ZA
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/lto/pr115815_0.c gcc-13.4.0/gcc/testsuite/gcc.dg/lto/pr115815_0.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/lto/pr115815_0.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/lto/pr115815_0.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,22 ----
+ /* { dg-lto-options {{-O2 -flto}} }  */
+ /* { dg-lto-do link } */
+ /* { dg-require-effective-target global_constructor } */
+ 
+ int a;
+ volatile int v;
+ volatile int w;
+ 
+ int __attribute__((destructor))
+ b() {
+   if (v)
+     return a + b();
+   v = 5;
+   return 0;
+ }
+ 
+ int
+ main (int argc, char **argv)
+ {
+   w = 1;
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/lto/pr91299_0.c gcc-13.4.0/gcc/testsuite/gcc.dg/lto/pr91299_0.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/lto/pr91299_0.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/lto/pr91299_0.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-lto-do run } */
+ /* { dg-lto-options { { -O2 -flto } } } */
+ 
+ __attribute__((weak)) int get_t(void)
+ {
+   return 0;
+ }
+ 
+ int a;
+ int main(void)
+ {
+   a = get_t();
+   if (a != 1)
+     __builtin_abort ();
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/lto/pr91299_1.c gcc-13.4.0/gcc/testsuite/gcc.dg/lto/pr91299_1.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/lto/pr91299_1.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/lto/pr91299_1.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-options "-fno-lto" } */
+ 
+ int get_t(void)
+ {
+     return 1;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/pr101478.c gcc-13.4.0/gcc/testsuite/gcc.dg/pr101478.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/pr101478.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/pr101478.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "" } */
+ 
+ struct obj {
+   int n;
+   int l;
+ };
+ int main()
+ {
+   (struct obj *)((char *)(__SIZE_TYPE__)({ 0; }) - (char *)&((struct obj *)0)->l);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/pr113207.c gcc-13.4.0/gcc/testsuite/gcc.dg/pr113207.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/pr113207.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/pr113207.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,10 ----
+ /* { dg-compile } */
+ /* { dg-require-effective-target lto } */
+ /* { dg-options "-flto -fchecking" }  */
+ 
+ typedef struct cl_lispunion *cl_object;
+ struct cl_lispunion {};
+ cl_object cl_error() __attribute__((noreturn));
+ volatile cl_object cl_coerce_value0;
+ void cl_coerce() { cl_error(); }
+ void L66safe_canonical_type(cl_object volatile);
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/pr114052-1.c gcc-13.4.0/gcc/testsuite/gcc.dg/pr114052-1.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/pr114052-1.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/pr114052-1.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,40 ----
+ /* { dg-do run } */
+ /* { dg-require-effective-target signal } */
+ /* { dg-options "-O2" } */
+ 
+ #include <stdint.h>
+ #include <unistd.h>
+ #include <signal.h>
+ #include <stdlib.h>
+ 
+ volatile int y;
+ void __attribute__((noipa)) put(int x)
+ {
+   if (y)
+     __builtin_printf ("%i\n", x);
+ }
+ 
+ void __attribute__((noipa)) f(void)
+ {
+   int counter = 0;
+   while (1) {
+       if (counter >= 2) continue;
+       put (counter++);
+   }
+ }
+ 
+ void do_exit (int i)
+ {
+   exit (0);
+ }
+ 
+ int main()
+ {
+   struct sigaction s;
+   sigemptyset (&s.sa_mask);
+   s.sa_handler = do_exit;
+   s.sa_flags = 0;
+   sigaction (SIGALRM, &s, NULL);
+   alarm (1);
+   f();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/pr114493-1.c gcc-13.4.0/gcc/testsuite/gcc.dg/pr114493-1.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/pr114493-1.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/pr114493-1.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,19 ----
+ /* PR c/114493 */
+ /* { dg-do compile { target lto } } */
+ /* { dg-options "-O2 -flto" } */
+ 
+ void foo (void);
+ struct S;
+ struct S bar (struct S **);
+ struct S qux (const struct S **);
+ 
+ struct __attribute__((__may_alias__)) S {
+   int s;
+ };
+ 
+ struct S
+ baz (void)
+ {
+   foo ();
+   return (struct S) {};
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/pr114493-2.c gcc-13.4.0/gcc/testsuite/gcc.dg/pr114493-2.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/pr114493-2.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/pr114493-2.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,26 ----
+ /* PR c/114493 */
+ /* { dg-do compile { target lto } } */
+ /* { dg-options "-O2 -flto -std=c2x" } */
+ 
+ void foo (void);
+ struct S;
+ struct S bar (struct S **);
+ struct S qux (const struct S **);
+ 
+ void
+ corge (void)
+ {
+   struct S { int s; } s;
+   s.s = 0;
+ }
+ 
+ struct __attribute__((__may_alias__)) S {
+   int s;
+ };
+ 
+ struct S
+ baz (void)
+ {
+   foo ();
+   return (struct S) {};
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/pr114902.c gcc-13.4.0/gcc/testsuite/gcc.dg/pr114902.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/pr114902.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/pr114902.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,23 ----
+ /* PR rtl-optimization/114902 */
+ /* { dg-do run } */
+ /* { dg-options "-O1 -fno-tree-fre -fno-tree-forwprop -fno-tree-ccp -fno-tree-dominator-opts" } */
+ 
+ __attribute__((noipa))
+ int foo (int x)
+ {
+   int a = ~x;
+   int t = a & 1;
+   int e = -t;
+   int b = e >= -1;
+   if (b)
+     return 0;
+   __builtin_trap ();
+ }
+ 
+ int
+ main ()
+ {
+   foo (-1);
+   foo (0);
+   foo (1);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/pr115092.c gcc-13.4.0/gcc/testsuite/gcc.dg/pr115092.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/pr115092.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/pr115092.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,16 ----
+ /* PR rtl-optimization/115092 */
+ /* { dg-do run } */
+ /* { dg-options "-O1 -fgcse -ftree-pre -fno-tree-dominator-opts -fno-tree-fre -fno-guess-branch-probability" } */
+ 
+ int a, b, c = 1, d, e;
+ 
+ int
+ main ()
+ {
+   int f, g = a;
+   b = -2;
+   f = -(1 >> ((c && b) & ~a));
+   if (f <= b)
+     d = g / e;
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/pr115152.c gcc-13.4.0/gcc/testsuite/gcc.dg/pr115152.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/pr115152.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/pr115152.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,17 ----
+ /* PR tree-optimization/115152 */
+ /* { dg-do run } */
+ /* { dg-options "-O3 -fno-tree-fre -fno-tree-dominator-opts -fno-tree-loop-im" } */
+ 
+ int a, b, c, d;
+ signed char e[1] = { 1 };
+ 
+ int
+ main ()
+ {
+   for (a = 0; a < 3; a++)
+     for (b = 0; b < 2; b++)
+       c = e[0] = e[0] ^ d;
+   if (!c)
+     __builtin_abort ();
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/pr115197.c gcc-13.4.0/gcc/testsuite/gcc.dg/pr115197.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/pr115197.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/pr115197.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O1 -fno-tree-scev-cprop -ftree-pre -ftree-loop-distribute-patterns" } */
+ 
+ int a, b[2], c, d, e, f[2];
+ int main() {
+   while (a)
+     if (d) {
+       if (e)
+         return 0;
+       for (; c; c++)
+         f[c] = 0 < (b[c] = ~(f[c + 1] < a));
+     }
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/pr115646.c gcc-13.4.0/gcc/testsuite/gcc.dg/pr115646.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/pr115646.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/pr115646.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,13 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ 
+ extern double pow(double x, double y);
+ 
+ struct S {
+     unsigned int a : 3, b : 8, c : 21;
+ };
+ 
+ void foo (struct S *p)
+ {
+   pow (p->c, 42);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/pr116034.c gcc-13.4.0/gcc/testsuite/gcc.dg/pr116034.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/pr116034.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/pr116034.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,23 ----
+ /* PR tree-optimization/116034 */
+ /* { dg-do run } */
+ /* { dg-options "-O1 -fno-strict-aliasing" } */
+ 
+ unsigned short int g;
+ 
+ static inline int
+ foo (_Complex unsigned short c)
+ {
+   if (__SIZEOF_SHORT__ == 2)
+     __builtin_memmove (&g, 1 + (char *) &c, 2);
+   return g;
+ }
+ 
+ int
+ main ()
+ {
+   if (__SIZEOF_SHORT__ == 2
+       && __CHAR_BIT__ == 8
+       && (foo (__BYTE_ORDER__ != __ORDER_BIG_ENDIAN__ ? 0x100 : 1)
+ 	  != (__BYTE_ORDER__ != __ORDER_BIG_ENDIAN__ ? 1 : 0x100)))
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/pr116290.c gcc-13.4.0/gcc/testsuite/gcc.dg/pr116290.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/pr116290.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/pr116290.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-options "-g -O2 -fcompare-debug" } */
+ 
+ char *camel_message_info_class_intern_init_part;
+ void g_once_init_enter();
+ void camel_message_info_class_intern_init() {
+   int ii;
+   char *label;
+   for (; camel_message_info_class_intern_init_part[ii]; ii++)
+     if (camel_message_info_class_intern_init_part) {
+       if (label && *label)
+         g_once_init_enter();
+       label = &camel_message_info_class_intern_init_part[ii + 1];
+       camel_message_info_class_intern_init_part[ii] = ' ';
+     }
+   if (label)
+     g_once_init_enter();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/pr116481.c gcc-13.4.0/gcc/testsuite/gcc.dg/pr116481.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/pr116481.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/pr116481.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,13 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -Warray-bounds" } */
+ 
+ extern void tramp ();
+ 
+ int is_trampoline (void* function) /* { dg-bogus "arrays of functions are not meaningful" } */
+ {
+   void* tramp_address = tramp;
+   if (!(((unsigned long)function & 3) == 2))
+     return 0;
+   return (((long *) ((char*)function - 2))[0]
+ 	  == ((long *) ((char*)tramp_address-2))[0]); /* { dg-warning "outside array bounds" } */
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/pr116850.c gcc-13.4.0/gcc/testsuite/gcc.dg/pr116850.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/pr116850.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/pr116850.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-options "-Os -w" } */
+ 
+ int a, b;
+ int *c()
+ {
+   int d, *e = 0, *f = &d, *g = &a;
+   if (b)
+     g = 0;
+   *e = *g;
+   return f;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/pr116891.c gcc-13.4.0/gcc/testsuite/gcc.dg/pr116891.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/pr116891.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/pr116891.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,47 ----
+ /* PR middle-end/116891 */
+ /* { dg-do run } */
+ /* { dg-require-effective-target fenv } */
+ /* { dg-require-effective-target hard_float } */
+ /* { dg-require-effective-target c99_runtime } */
+ /* { dg-options "-O2 -frounding-math" } */
+ 
+ #include <fenv.h>
+ 
+ __attribute__((noipa)) double
+ foo (double x, double y, double z)
+ {
+   return -__builtin_fma (-x, y, -z);
+ }
+ 
+ __attribute__((noipa)) double
+ bar (double x, double y, double z)
+ {
+   return -__builtin_fma (-x, y, z);
+ }
+ 
+ __attribute__((noipa)) double
+ baz (double x, double y, double z)
+ {
+   return -__builtin_fma (x, y, -z);
+ }
+ 
+ __attribute__((noipa)) double
+ qux (double x, double y, double z)
+ {
+   return -__builtin_fma (x, y, z);
+ }
+ 
+ int
+ main ()
+ {
+ #if defined (FE_DOWNWARD) && __DBL_MANT_DIG__ == 53 && __DBL_MAX_EXP__ == 1024
+   fesetround (FE_DOWNWARD);
+   double a = foo (-0x1.p256, 0x1.p256, 0x1.p-256);
+   if (a != -__builtin_nextafter (0x1p256 * 0x1p256, 0.))
+     __builtin_abort ();
+   if (a != bar (-0x1.p256, 0x1.p256, -0x1.p-256)
+       || a != baz (0x1.p256, 0x1.p256, 0x1.p-256)
+       || a != qux (0x1.p256, 0x1.p256, -0x1.p-256))
+     __builtin_abort ();
+ #endif
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/pr116906-1.c gcc-13.4.0/gcc/testsuite/gcc.dg/pr116906-1.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/pr116906-1.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/pr116906-1.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,43 ----
+ /* { dg-do run { target *-*-linux* *-*-gnu* *-*-uclinux* } } */
+ /* { dg-options "-O2" } */
+ 
+ #include <stdint.h>
+ #include <unistd.h>
+ #include <signal.h>
+ #include <stdlib.h>
+ 
+ int a = 1, b = 0;
+ 
+ uint64_t safe_mod(uint64_t a, uint64_t b)
+ {
+     if (b == 0) return a;
+     else return a % b;
+ }
+ 
+ int __attribute__((noipa))
+ f(uint64_t p)
+ {
+     int c = 0;
+ j:
+     b = safe_mod(
+         (c = ((a &= (0 < p)) && 1), 1), p);
+     if (!c)
+         goto j;
+     return 0;
+ }
+ 
+ void do_exit (int i)
+ {
+   exit (0);
+ }
+ 
+ int main()
+ {
+   struct sigaction s;
+   sigemptyset (&s.sa_mask);
+   s.sa_handler = do_exit;
+   s.sa_flags = 0;
+   sigaction (SIGALRM, &s, NULL);
+   alarm (1);
+   f(b);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/pr116906-2.c gcc-13.4.0/gcc/testsuite/gcc.dg/pr116906-2.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/pr116906-2.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/pr116906-2.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,40 ----
+ /* { dg-do run { target *-*-linux* *-*-gnu* *-*-uclinux* } } */
+ /* { dg-options "-O2 -fno-tree-ch" } */
+ 
+ #include <unistd.h>
+ #include <signal.h>
+ #include <stdlib.h>
+ 
+ int x;
+ 
+ void __attribute__((noipa))
+ foo (int *p, unsigned n)
+ {
+   unsigned i = 0;
+   do
+     {
+       if (i == n)
+         break;
+       if (p)
+         x = *p;
+       i += 2;
+     }
+   while (1);
+   x = *p;
+ }
+ 
+ void do_exit (int i)
+ {
+   exit (0);
+ }
+ 
+ int main()
+ {
+   struct sigaction s;
+   sigemptyset (&s.sa_mask);
+   s.sa_handler = do_exit;
+   s.sa_flags = 0;
+   sigaction (SIGALRM, &s, NULL);
+   alarm (1);
+   foo ((int *)0, 1);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/pr117104.c gcc-13.4.0/gcc/testsuite/gcc.dg/pr117104.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/pr117104.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/pr117104.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fno-vect-cost-model" } */
+ /* { dg-additional-options "-mavx" { target { x86_64-*-* i?86-*-* } } } */
+ 
+ void g();
+ void f(long *a)
+ {
+   long b0 = a[0] > 0 ? a[0] : 0;
+   long b1 = a[1] > 0 ? a[1] : 0;
+   if ((b0|b1) == 0)
+     g();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/pr117239.c gcc-13.4.0/gcc/testsuite/gcc.dg/pr117239.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/pr117239.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/pr117239.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,42 ----
+ /* PR rtl-optimization/117239 */
+ /* { dg-do run } */
+ /* { dg-options "-fno-inline -O2" } */
+ /* { dg-additional-options "-fschedule-insns" { target i?86-*-* x86_64-*-* } } */
+ 
+ int a, b, c = 1, d;
+ 
+ int
+ foo (void)
+ {
+   return a;
+ }
+ 
+ struct A {
+   int e, f, g, h;
+   short i;
+   int j;
+ };
+ 
+ void
+ bar (int x, struct A y)
+ {
+   if (y.j == 1)
+     c = 0;
+ }
+ 
+ int
+ baz (struct A x)
+ {
+   return b;
+ }
+ 
+ int
+ main ()
+ {
+   struct A k = { 0, 0, 0, 0, 0, 1 };
+   d = baz (k);
+   bar (foo (), k);
+   if (c != 0)
+     __builtin_abort ();
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/pr117254.c gcc-13.4.0/gcc/testsuite/gcc.dg/pr117254.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/pr117254.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/pr117254.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,10 ----
+ /* { dg-do compile } */
+ /* { dg-options "" } */
+ 
+ int g;
+ void e(int s) {
+   struct {
+     __attribute__((nonstring)) char bn[g];
+   } f;
+   __builtin_strncpy (f.bn, f.bn, s);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/pr117398.c gcc-13.4.0/gcc/testsuite/gcc.dg/pr117398.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/pr117398.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/pr117398.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ 
+ int a;
+ void c(void);
+ int d(_Bool b) {
+   switch (b+0) {
+   case 0:
+     break;
+   case 1:
+     break;
+   default:
+     c();
+   }
+   if (b)
+     return a;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/pr117745.c gcc-13.4.0/gcc/testsuite/gcc.dg/pr117745.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/pr117745.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/pr117745.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,8 ----
+ /* PR c/117745 */
+ /* { dg-do compile } */
+ /* { dg-options "" } */
+ 
+ static int foo (void);
+ void bar (void) { sizeof (int [0 ? foo () : 1); }	/* { dg-error "expected" } */
+ static int baz (void);
+ void qux (void) { sizeof (sizeof (int[baz ()])); }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/pr119071.c gcc-13.4.0/gcc/testsuite/gcc.dg/pr119071.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/pr119071.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/pr119071.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,45 ----
+ /* PR rtl-optimization/119071 */
+ /* { dg-do run } */
+ /* { dg-options "-O2 -fgimple" } */
+ 
+ int a, b;
+ 
+ int __GIMPLE (ssa,startwith("expand"))
+ foo (void)
+ {
+   int _1;
+   int _2;
+   int _3;
+   int _5;
+   _Bool _7;
+   int _8;
+   int _9;
+   _Bool _14;
+   int _15;
+   int _16;
+   _Bool _17;
+   int _18;
+ 
+   __BB(2):
+   _1 = a;
+   _17 = _1 != _Literal (int) -2;
+   _18 = (int) _17;
+   _2 = _18 + _Literal (int) -1;
+   _3 = _2 + _18;
+   _14 = _3 != 1;
+   _15 = (int) _14;
+   _16 = -_15;
+   _7 = _3 == 1;
+   _9 = (int) _7;
+   _5 = _9 << _16;
+   _8 = _5 - _15;
+   b = _8;
+   return _8;
+ }
+ 
+ int
+ main ()
+ {
+   if (foo () != 1)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/pr119151.c gcc-13.4.0/gcc/testsuite/gcc.dg/pr119151.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/pr119151.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/pr119151.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,151 ----
+ /* PR libgcc/119151 */
+ /* Should be run just on targets which don't have _Unwind_Find_FDE in libc.so.  */
+ /* { dg-do run { target { { x86_64-*-linux* aarch64*-*-linux* powerpc64*-*-linux* riscv*-*-linux* } && lp64 } } } */
+ /* { dg-options "-O2" } */
+ 
+ struct object
+ {
+   void *pc_begin, *tbase, *dbase, *single;
+   __SIZE_TYPE__ i;
+   void *fde_end, *next;
+ };
+ struct dwarf_eh_bases
+ {
+   void *tbase, *dbase, *func;
+ };
+ extern void __register_frame_info (const void *, struct object *);
+ extern void *__deregister_frame_info (const void *);
+ extern const void *_Unwind_Find_FDE (void *, struct dwarf_eh_bases *);
+ #define DW_EH_PE_sdata8	0x0c
+ #define DW_EH_PE_pcrel	0x10
+ #define DW_CFA_def_cfa	0x0c
+ #define DW_CFA_offset	0x80
+ 
+ struct __attribute__((aligned (8))) eh_frame_cie {
+   unsigned len;
+   unsigned tag;
+   unsigned char version;
+   unsigned char augmentation[3];
+   unsigned char code_align_factor;
+   unsigned char data_align_factor;
+   unsigned char ra_column;
+   unsigned char augmentation_size;
+   unsigned char encoding;
+   unsigned char def_cfa;
+   unsigned char def_cfa_op1, def_cfa_op2;
+   unsigned char offset;
+   unsigned char offset_op;
+ };
+ struct __attribute__((aligned (8))) eh_frame_fde {
+   unsigned len;
+   unsigned cie_offset;
+   unsigned long long begin, size;
+   unsigned char augmentation;
+ };
+ struct eh_frame_cie_fde {
+   struct eh_frame_cie cie;
+   struct eh_frame_fde fde;
+   unsigned int zero;
+   struct object obj;
+ } eh_frame[256];
+ unsigned ehidx;
+ unsigned char code[0x800] __attribute__((aligned (8)));
+ 
+ void *
+ register_range (void *addr, unsigned size)
+ {
+   /* Fills in empty-ish CIE and FDE with pcrel sdata8 encoding so that
+      we don't need to worry about lp64 large code models.
+      We don't actually execute anything in code and only _Unwind_Find_FDE,
+      don't actually try to unwind anything.  */
+   eh_frame[ehidx].cie.len
+     = (unsigned) ((char *) &eh_frame[ehidx].fde
+ 		  - (char *) &eh_frame[ehidx].cie.tag);
+   eh_frame[ehidx].cie.tag = 0;
+   eh_frame[ehidx].cie.version = 3;
+   __builtin_memcpy (eh_frame[ehidx].cie.augmentation, "zR", 3);
+   eh_frame[ehidx].cie.code_align_factor = 1;
+   eh_frame[ehidx].cie.data_align_factor = 0x78; /* sleb128 -8 */
+   eh_frame[ehidx].cie.ra_column = 0x10;
+   eh_frame[ehidx].cie.augmentation_size = 1;
+   eh_frame[ehidx].cie.encoding = DW_EH_PE_pcrel | DW_EH_PE_sdata8;
+   eh_frame[ehidx].cie.def_cfa = DW_CFA_def_cfa;
+   eh_frame[ehidx].cie.def_cfa_op1 = 7;
+   eh_frame[ehidx].cie.def_cfa_op2 = 8;
+   eh_frame[ehidx].cie.offset = DW_CFA_offset + 0x10;
+   eh_frame[ehidx].cie.offset_op = 1;
+   eh_frame[ehidx].fde.len
+     = (unsigned) ((char *) &eh_frame[ehidx].zero
+ 		  - (char *) &eh_frame[ehidx].fde.cie_offset);
+   eh_frame[ehidx].fde.cie_offset
+     = (unsigned) ((char *) &eh_frame[ehidx].fde.cie_offset
+ 		  - (char *) &eh_frame[ehidx].cie);
+   eh_frame[ehidx].fde.begin
+     = (__INTPTR_TYPE__) ((__UINTPTR_TYPE__) addr
+ 			 - (__UINTPTR_TYPE__) &eh_frame[ehidx].fde.begin);
+   eh_frame[ehidx].fde.size = size;
+   eh_frame[ehidx].fde.augmentation = 0;
+   eh_frame[ehidx].zero = 0;
+   __register_frame_info (&eh_frame[ehidx].cie, &eh_frame[ehidx].obj);
+   ++ehidx;
+   return &eh_frame[ehidx - 1].cie;
+ }
+ 
+ void
+ unregister (void *eh_frame)
+ {
+   __deregister_frame_info (eh_frame);
+ }
+ 
+ int
+ main ()
+ {
+   for (int i = 0; i < 0x50; i += 0x10)
+     register_range (&code[i], 10);
+   void *p = register_range (&code[0x50], 10);
+   for (int i = 0x60; i < 0xb0; i += 0x10)
+     register_range (&code[i], 10);
+   unregister (p);
+   register_range (&code[0x4c], 8);
+   struct dwarf_eh_bases bases;
+   const void *q = _Unwind_Find_FDE (&code[0x4c], &bases);
+   const void *r = _Unwind_Find_FDE (&code[0x51], &bases);
+   if (!q || q != r)
+     __builtin_abort ();
+   for (int i = 0; i <= 0xa0; i += 0x10)
+     if (i != 0x50)
+       {
+         q = _Unwind_Find_FDE (&code[i], &bases);
+         r = _Unwind_Find_FDE (&code[i + 9], &bases);
+         if (!q || q != r)
+ 	  __builtin_abort ();
+       }
+   for (int i = 0xb0; i < 0x240; i += 0x10)
+     register_range (&code[i], 10);
+   p = register_range (&code[0x240], 10);
+   for (int i = 0x250; i < 0x470; i += 0x10)
+     register_range (&code[i], 10);
+   void *s = register_range (&code[0x470], 10);
+   for (int i = 0x480; i < 0x700; i += 0x10)
+     register_range (&code[i], 10);
+   unregister (p);
+   register_range (&code[0x23c], 16);
+   q = _Unwind_Find_FDE (&code[0x23d], &bases);
+   r = _Unwind_Find_FDE (&code[0x24b], &bases);
+   if (!q || q != r)
+     __builtin_abort ();
+   unregister (s);
+   register_range (&code[0x46c], 16);
+   q = _Unwind_Find_FDE (&code[0x46d], &bases);
+   r = _Unwind_Find_FDE (&code[0x47b], &bases);
+   if (!q || q != r)
+     __builtin_abort ();
+   for (int i = 0; i < 0x700; i += 0x10)
+     if (i != 0x50 && i != 0x240 && i != 0x470)
+       {
+         q = _Unwind_Find_FDE (&code[i], &bases);
+         r = _Unwind_Find_FDE (&code[i + 9], &bases);
+         if (!q || q != r)
+ 	  __builtin_abort ();
+       }
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/pr119183.c gcc-13.4.0/gcc/testsuite/gcc.dg/pr119183.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/pr119183.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/pr119183.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,12 ----
+ /* PR c/119183 */
+ /* { dg-do compile } */
+ 
+ int foo (void);
+ #define A(x) (1.0f * (1.0f * (1.0f * (1.0f * (1.0f * (1.0f * (1.0f * (1.0f * (x)))))))))
+ 
+ float
+ bar (float r)
+ {
+   r += A (A (A (A (A (A (A (A (foo ()))))))));
+   return r;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/pr119204.c gcc-13.4.0/gcc/testsuite/gcc.dg/pr119204.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/pr119204.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/pr119204.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,13 ----
+ /* { dg-do compile } */
+ /* { dg-options "-w" } */
+ 
+ extern void abort(void);
+ extern long long strcspn(const char *, const char *);
+ 
+ void main_test(void) {
+   const char *const s1 = "hello world";
+   char dst[64], *d2;
+ 
+   if (strcspn(++d2 + 5, "") != 5 || d2 != dst + 1)
+     abort();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/pr120480.c gcc-13.4.0/gcc/testsuite/gcc.dg/pr120480.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/pr120480.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/pr120480.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,11 ----
+ /* PR target/120480 */
+ /* { dg-do compile } */
+ /* { dg-options "-O0" } */
+ 
+ struct S { int a, b, c; } s;
+ 
+ void
+ foo (void)
+ {
+   struct S t = s;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/pr81192.c gcc-13.4.0/gcc/testsuite/gcc.dg/pr81192.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/pr81192.c	Tue May 21 07:47:40 2024
--- gcc-13.4.0/gcc/testsuite/gcc.dg/pr81192.c	Thu Jun  5 16:03:00 2025
***************
*** 1,5 ****
! /* { dg-options "-Os -fdump-tree-pre-details -fdisable-tree-evrp -fno-tree-dse" } */
  
  /* Disable tree-evrp because the new version of evrp sees
  <bb 3> :
    if (j_8(D) != 2147483647)
--- 1,62 ----
! /* { dg-options "-Os -fgimple -fdump-tree-pre-details -fdisable-tree-evrp -fno-tree-dse" } */
! 
! #if __SIZEOF_INT__ == 2
! #define unsigned __UINT32_TYPE__
! #define int __INT32_TYPE__
! #endif
! 
! unsigned a;
! int b, c;
! 
! void __GIMPLE(ssa, startwith("pre")) fn2   ()
! {
!   int b_lsm6;
!   int j;
!   int c0_1;
!   int iftmp2_8;
! 
!   __BB(2):
!   a = _Literal (unsigned)30;
!   c0_1 = c;
!   b_lsm6_9 = b;
!   goto __BB7;
! 
!   __BB(3):
!   if (j_6(D) != _Literal (int)2147483647)
!     goto __BB4;
!   else
!     goto __BB9;
! 
!   __BB(4):
!   iftmp2_8 = j_6(D) + _Literal (int)1;
!   goto __BB5;
! 
!   __BB(9):
!   iftmp2_8 = j_6(D) + _Literal (int)1;
!   goto __BB5;
! 
!   __BB(5):
!   b_lsm6_10 = _Literal (int)2147483647;
!   goto __BB6;
! 
!   __BB(6):
!   if (c0_1 != _Literal (int) 0)
!     goto __BB3;
!   else
!     goto __BB8;
! 
!   __BB(8):
!   goto __BB7;
! 
!   __BB(7):
!   goto __BB6;
  
+ }
+ 
+ #if 0
+ /* This used to be a C based testcase but ccp3 would now would remove
+    the setting of iftmp2_8 (in the above gimple) which would cause PRE
+    not to test what PRE was doing incorrectly. The original code is below. */
  /* Disable tree-evrp because the new version of evrp sees
  <bb 3> :
    if (j_8(D) != 2147483647)
*************** which causes the situation being tested
*** 18,31 ****
  
  /* Likewise disable DSE which also elides the tail merging "opportunity".  */
  
- #if __SIZEOF_INT__ == 2
- #define unsigned __UINT32_TYPE__
- #define int __INT32_TYPE__
- #endif
- 
- unsigned a;
- int b, c;
- 
  static int
  fn1 (int p1, int p2)
  {
--- 75,80 ----
*************** fn2 (void)
*** 41,45 ****
--- 90,95 ----
      for (; c; b = fn1 (j, 1))
        ;
  }
+ #endif
  
  /* { dg-final { scan-tree-dump-times "(?n)find_duplicates: <bb .*> duplicate of <bb .*>" 1 "pre" } } */
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/pr98845.c gcc-13.4.0/gcc/testsuite/gcc.dg/pr98845.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/pr98845.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/pr98845.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,33 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fno-tree-dce -fno-tree-dse" } */
+ 
+ int n;
+ 
+ __attribute__ ((returns_twice)) void
+ foo (void);
+ 
+ void
+ bar (void);
+ 
+ void
+ quux (int x)
+ {
+   if (x)
+     ++x;
+   else
+     {
+       if (n)
+         {
+           x = 1;
+           foo ();
+         }
+       else
+         bar ();
+ 
+       if (n)
+         {
+           ++x;
+           ++n;
+         }
+     }
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/torture/builtin-frexp-1.c gcc-13.4.0/gcc/testsuite/gcc.dg/torture/builtin-frexp-1.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/torture/builtin-frexp-1.c	Tue May 21 07:47:40 2024
--- gcc-13.4.0/gcc/testsuite/gcc.dg/torture/builtin-frexp-1.c	Thu Jun  5 16:03:00 2025
***************
*** 11,16 ****
--- 11,17 ----
     floating point formats need -funsafe-math-optimizations.  */
  /* { dg-require-effective-target inf } */
  /* { dg-options "-funsafe-math-optimizations" { target powerpc*-*-* } } */
+ /* { dg-additional-options "-Wmaybe-uninitialized" } */
  
  extern void link_error(int);
  
*************** extern void link_error(int);
*** 52,73 ****
      link_error(__LINE__); \
    } while (0)
  
  /* Test that FUNCRES(frexp(NEG FUNCARG(ARGARG),&i)) is false.  Check
!    the sign as well.  Ensure side-effects are evaluated in i.  */
  #define TESTIT_FREXP2(NEG,FUNCARG,ARGARG,FUNCRES) do { \
!   int i=5; \
    if (!__builtin_##FUNCRES##f(__builtin_frexpf(NEG __builtin_##FUNCARG##f(ARGARG),&i)) \
!       || CKSGN_F(__builtin_frexpf(NEG __builtin_##FUNCARG##f(ARGARG),(i++,&i)), NEG __builtin_##FUNCARG##f(ARGARG)) \
!       || CKEXP(i,6)) \
      link_error(__LINE__); \
    if (!__builtin_##FUNCRES(__builtin_frexp(NEG __builtin_##FUNCARG(ARGARG),&i)) \
!       || CKSGN(__builtin_frexp(NEG __builtin_##FUNCARG(ARGARG),(i++,&i)), NEG __builtin_##FUNCARG(ARGARG)) \
!       || CKEXP(i,7)) \
      link_error(__LINE__); \
    if (!__builtin_##FUNCRES##l(__builtin_frexpl(NEG __builtin_##FUNCARG##l(ARGARG),&i)) \
!       || CKSGN_L(__builtin_frexpl(NEG __builtin_##FUNCARG##l(ARGARG),(i++,&i)), NEG __builtin_##FUNCARG##l(ARGARG)) \
!       || CKEXP(i,8)) \
      link_error(__LINE__); \
    } while (0)
  
  void __attribute__ ((__noinline__))
--- 53,88 ----
      link_error(__LINE__); \
    } while (0)
  
+ int __attribute__ ((__noipa__))
+ bar (int x)
+ {
+   (void) x;
+   return 42;
+ } 
+ 
  /* Test that FUNCRES(frexp(NEG FUNCARG(ARGARG),&i)) is false.  Check
!    the sign as well.  Ensure side-effects are evaluated in the second
!    frexp argument.  */
  #define TESTIT_FREXP2(NEG,FUNCARG,ARGARG,FUNCRES) do { \
!   int i, j = 5; \
    if (!__builtin_##FUNCRES##f(__builtin_frexpf(NEG __builtin_##FUNCARG##f(ARGARG),&i)) \
!       || CKSGN_F(__builtin_frexpf(NEG __builtin_##FUNCARG##f(ARGARG),(j++,&i)), NEG __builtin_##FUNCARG##f(ARGARG)) \
!       || CKEXP(j,6)) \
      link_error(__LINE__); \
+   if (CKEXP(bar(i),42)) \
+     __builtin_abort(); \
    if (!__builtin_##FUNCRES(__builtin_frexp(NEG __builtin_##FUNCARG(ARGARG),&i)) \
!       || CKSGN(__builtin_frexp(NEG __builtin_##FUNCARG(ARGARG),(j++,&i)), NEG __builtin_##FUNCARG(ARGARG)) \
!       || CKEXP(j,7)) \
      link_error(__LINE__); \
+   if (CKEXP(bar(i),42)) \
+     __builtin_abort(); \
    if (!__builtin_##FUNCRES##l(__builtin_frexpl(NEG __builtin_##FUNCARG##l(ARGARG),&i)) \
!       || CKSGN_L(__builtin_frexpl(NEG __builtin_##FUNCARG##l(ARGARG),(j++,&i)), NEG __builtin_##FUNCARG##l(ARGARG)) \
!       || CKEXP(j,8)) \
      link_error(__LINE__); \
+   if (CKEXP(bar(i),42)) \
+     __builtin_abort(); \
    } while (0)
  
  void __attribute__ ((__noinline__))
*************** foo(void)
*** 111,118 ****
--- 126,135 ----
       Exponent is left unspecified, but we test for side-effects.  */
    TESTIT_FREXP2 ( ,inf, , isinf);
    TESTIT_FREXP2 (- ,inf, , isinf);
+ #ifdef __OPTIMIZE__
    TESTIT_FREXP2 ( ,nan, "", isnan);
    TESTIT_FREXP2 (- ,nan, "", isnan);
+ #endif
  }
  
  int main()
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr112859.c gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr112859.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr112859.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr112859.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do run } */
+ /* { dg-additional-options "-ftree-loop-distribution" } */
+ 
+ struct a {
+   char b;
+   int c;
+ } f, *i = &f;
+ static struct a e[4];
+ int *d, **g = &d;
+ static int h, j;
+ int main()
+ {
+   for (; h < 1; h++) {
+     struct a k = {1, 1};
+     for (j = 0; j < 2; j++) {
+       *i = e[h];
+       e[h] = k;
+     }
+     *g = 0;
+   }
+   if (f.c != 1)
+     __builtin_abort();
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr115347.c gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr115347.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr115347.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr115347.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do run } */
+ /* { dg-additional-options "-ftree-loop-distribution" } */
+ 
+ struct a {
+   int b;
+   int c;
+ } d, e[2];
+ int f, g, h;
+ int main()
+ {
+   for (; f < 1; f++) {
+     for (h = 0; h < 2; h++) {
+       d = e[f];
+       g = e[1].c;
+       e[f].c = 1;
+     }
+   }
+   if (d.c != 1)
+     __builtin_abort();
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr115641.c gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr115641.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr115641.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr115641.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,29 ----
+ /* { dg-do run } */
+ 
+ typedef struct {
+   char hours, day, month;
+   short year;
+ } T;
+ 
+ T g (void)
+ {
+   T now;
+   now.hours = 1;
+   now.day = 2;
+   now.month = 3;
+   now.year = 4;
+   return now;
+ }
+ 
+ __attribute__((const)) T f (void)
+ {
+   T virk = g ();
+   return virk;
+ }
+ 
+ int main ()
+ {
+   if (f ().hours != 1 || f ().day != 2 || f ().month != 3 || f ().year != 4)
+     __builtin_abort ();
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr115701.c gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr115701.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr115701.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr115701.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,22 ----
+ /* { dg-do run } */
+ /* IPA PTA disables local PTA recompute after IPA.  */
+ /* { dg-additional-options "-fipa-pta" } */
+ 
+ int a, c, d;
+ static int b;
+ int main()
+ {
+   int *e = &a, **f = &e;
+   while (1) {
+     int **g, ***h = &f;
+     if (c)
+       *g = e;
+     else if (!b)
+       break;
+     *e = **g;
+     e = &d;
+   }
+   if (e != &a)
+     __builtin_abort();
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr116057.c gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr116057.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr116057.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr116057.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,20 ----
+ /* { dg-do run } */
+ /* { dg-additional-options "-Wno-psabi" } */
+ 
+ #define vect8 __attribute__((vector_size(8)))
+ 
+ vect8 int __attribute__((noipa))
+ f(int a)
+ {
+   int b;
+   vect8 int t={1,1};
+   if(a) return t;
+   return (vect8 int){0, b};
+ }
+ 
+ int main ()
+ {
+   if (f(0)[0] != 0)
+     __builtin_abort ();
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr116380.c gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr116380.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr116380.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr116380.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-fno-tree-scev-cprop" } */
+ 
+ int a[3], d[3], c;
+ int f(int e, int b)
+ {
+   for (; e < 3; e++)
+     {
+       a[0] = 0;
+       if (b)
+ 	c = b;
+       d[e] = 0;
+       a[e] = 0;
+     }
+   return e;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr116412-1.c gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr116412-1.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr116412-1.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr116412-1.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-do compile } */
+ double f(_Complex double a, _Complex double *b, int c)
+ {
+   if (c) return __real__ a;
+   return __real__ *b;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr116585.c gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr116585.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr116585.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr116585.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,32 ----
+ /* { dg-do compile } */
+ 
+ char *s1, *s2;
+ extern int* my_alloc (int);
+ extern int _setjmp ();
+ extern void bar();
+ void foo(int s1len, int s2len)
+ {
+   int e;
+   e = _setjmp ();
+     {
+       int l, i;
+       int *md = my_alloc(((sizeof(int)) * (s1len + 1) * (s2len)));
+       s1len++;
+       for (; s1len; l)
+ 	for (; s2len; l)
+ 	  for (; s1len; i)
+ 	    {
+ 	      int j = 1;
+ 	      for (; j < s2len; j++)
+ 		{
+ 		  int cost;
+ 		  if (s1[1] == s2[1])
+ 		    cost = 0;
+ 		  else
+ 		    cost = 1;
+ 		  md[j * s1len ] = ((cost));
+ 		}
+ 	    }
+       bar();
+     }
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr116768.c gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr116768.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr116768.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr116768.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,32 ----
+ /* { dg-do run } */
+ 
+ #define numwords 2
+ 
+ typedef struct {
+   unsigned words[numwords];
+ } Child;
+ 
+ typedef struct {
+   Child child;
+ } Parent;
+ 
+ Parent my_or(Parent x, const Parent *y) {
+   const Child *y_child = &y->child;
+   for (int i = 0; i < numwords; i++) {
+     x.child.words[i] |= y_child->words[i];
+   }
+   return x;
+ }
+ 
+ int main() {
+   Parent bs[4];
+   __builtin_memset(bs, 0, sizeof(bs));
+ 
+   bs[0].child.words[0] = 1;
+   for (int i = 1; i <= 3; i++) {
+     bs[i] = my_or(bs[i], &bs[i - 1]);
+   }
+   if (bs[2].child.words[0] != 1)
+     __builtin_abort ();
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr116922.c gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr116922.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr116922.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr116922.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,19 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-ffast-math" } */
+ /* PR tree-optimization/116922 */
+ 
+ 
+ static int g;
+ 
+ void
+ foo (int c, double v, double *r)
+ {
+ b:
+   do
+     v /= g - v;
+   while (c);
+   *r = v;
+ 
+   double x;
+   foo (5, (double)0, &x);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr117086.c gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr117086.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr117086.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr117086.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-march=znver5" { target { x86_64-*-* i?86-*-* } } } */
+ 
+ void fancy_abort(const char *, int, const char *);
+ int usage_insns_0_0;
+ void inherit_in_ebb() {
+   int abis = 0;
+   for (int i = 0; i < 8; ++i)
+     if (i > usage_insns_0_0)
+       abis |= i;
+   abis ? fancy_abort("", 0, __FUNCTION__), 0 : 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr117113.c gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr117113.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr117113.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr117113.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,20 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-fno-tree-dce -fno-inline" } */
+ 
+ int a, b, c;
+ volatile int d[1];
+ void e() {}
+ void f(int g) {}
+ int main() {
+   int i;
+   for (; b; b--) {
+     for (i = 0; i < 3; i++) {
+       e();
+       f(d[0]);
+       d[0];
+     }
+     if (a)
+       c++;
+   }
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr117119.c gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr117119.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr117119.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr117119.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,10 ----
+ /* { dg-do compile } */
+ /* { dg-require-effective-target int128 } */
+ 
+ unsigned __int128 g_728;
+ int func_1_l_5011[8];
+ void func_1() {
+   for (;; g_728 += 1)
+     func_1_l_5011[g_728] ^= func_1_l_5011[g_728 + 5];
+ }
+ void main() {}
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr117243-1.c gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr117243-1.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr117243-1.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr117243-1.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,30 ----
+ /* { dg-do compile } */
+ /* { dg-options "-fdump-tree-optimized" } */
+ /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } { "" } } */
+ 
+ /* PR tree-optimization/117243 */
+ /* foo should be an infinite but sometimes it gets optimized incorrectly into
+    an __builtin_unreachable(); which is not valid.  */
+ void
+ foo (unsigned int a, unsigned char b)
+ {
+   lbl:
+   for (b = 0; b <= 7; b++)
+     {
+       unsigned char c[1][1];
+       int i, j;
+       for (i = 0; i < 1; i++)
+         for (j = 0; j < 1; j++)
+           c[i][j] = 1;
+       if (b)
+ 	goto lbl;
+     }
+ }
+ 
+ int
+ main ()
+ {
+   foo (1, 2);
+ }
+ 
+ /* { dg-final { scan-tree-dump-not "__builtin_unreachable " "optimized"} } */
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr117243-2.c gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr117243-2.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr117243-2.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr117243-2.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,34 ----
+ /* { dg-do compile } */
+ /* { dg-options "-fno-tree-ch -fdump-tree-optimized" } */
+ /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } { "" } } */
+ 
+ /* PR tree-optimization/117243 */
+ /* PR tree-optimization/116749 */
+ 
+ /* main1 should be an infinite but sometimes it gets optimized incorrectly into
+    an __builtin_unreachable(); which is not valid.  */
+ int main1 (void)
+ {
+     int g=0;
+     int l1[1];
+     int *l2 = &g;
+     int i;
+     for (i=0; i<1; i++)
+         l1[i] = (1);
+     for (g=0; g; ++g)
+     {
+         int *l3[1] = {&l1[0]};
+     }
+     *l2 = *l1;
+ b:
+     for (i=0; i<2; ++i)
+     { 
+         if (i)
+             goto b;
+         if (g)
+             continue;
+     }
+     return 0;
+ }
+ 
+ /* { dg-final { scan-tree-dump-not "__builtin_unreachable " "optimized"} } */
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr117333.c gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr117333.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr117333.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr117333.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,29 ----
+ /* { dg-do compile } */
+ 
+ struct s
+ {
+   unsigned long ul;
+   int i;
+   char ac[];
+ };
+ 
+ const struct s gs = { 3, -4, "abcdef" };
+ 
+ void copy_s(struct s*d, const struct s*s)
+ {
+   *d = *s;
+ }
+ 
+ unsigned test(struct s*ps, _Bool direct)
+ {
+   if(direct)
+     *ps = gs;
+   else
+     copy_s(ps, &gs);
+   return sizeof(*ps);
+ }
+ 
+ unsigned size(void)
+ {
+   return sizeof(gs);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr117417.c gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr117417.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr117417.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr117417.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ 
+ typedef __attribute__((__vector_size__ (8))) double V;
+ int bar (int a, V *p)
+ {
+   V v;
+   v = *p;
+   a += *(_Complex short *) &v;
+   return a;
+ }
+ V x;
+ int
+ foo ()
+ {
+   return bar (0, &x);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr117574-1.c gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr117574-1.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr117574-1.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr117574-1.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,20 ----
+ /* { dg-do run } */
+ 
+ void abort (void);
+ int a, c;
+ long b;
+ short d;
+ static long e(long f, long h, long i) {
+   for (long g = f; g <= h; g += i)
+     b += g;
+   return b;
+ }
+ int main() {
+   c = 1;
+   for (; c >= 0; c--)
+     ;
+   for (; e(d + 40, d + 76, c + 51) < 4;)
+     ;
+   if (a != 0)
+     abort ();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr117979.c gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr117979.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr117979.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr117979.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ 
+ int a, b;
+ void foo (void);
+ int __attribute__((returns_twice)) bar (int);
+ 
+ int __attribute__((const))
+ baz (int f)
+ {
+   if (f)
+     {
+       l:;
+       for (f = 0; f < 6; ++f)
+         if (bar (b))
+           goto l;
+       for (;; a--)
+         ;
+     }
+   foo ();
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr118476-1.c gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr118476-1.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr118476-1.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr118476-1.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile } */
+ 
+ /* PR tree-optimization/118476 */
+ 
+ typedef unsigned long long poly64x1 __attribute__((__vector_size__(1*sizeof(long long))));
+ 
+ poly64x1 vext_p64(poly64x1 a, poly64x1 b, const int n)
+ {
+   poly64x1 r = a;
+   unsigned src = (unsigned)n;
+   long long t = b[0];
+   r[0] = (src < 1) ? a[src] : t;
+   return r;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr118717.c gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr118717.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr118717.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr118717.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,41 ----
+ /* { dg-do compile } */
+ 
+ void jj(void);
+ int ff1(void) __attribute__((__returns_twice__));
+ struct s2 {
+   int prev;
+ };
+ typedef struct s1 {
+   unsigned interrupt_flag;
+   unsigned interrupt_mask;
+   int tag;
+   int state;
+ }s1;
+ int ff(void);
+ static inline
+ int mm(s1 *ec) {
+   if (ff())
+     if (ec->interrupt_flag & ~(ec)->interrupt_mask)
+       return 0;
+ }
+ void ll(s1 *ec) {
+   int t = 1;
+   int state;
+   if (t)
+   {
+     {
+       s1 *const _ec = ec;
+       struct s2 _tag = {0};
+       if (ff1())
+ 	state = ec->state;
+       else
+ 	state = 0;
+       if (!state)
+ 	mm (ec);
+       _ec->tag = _tag.prev;
+     }
+     if (state)
+       __builtin_exit(0);
+   }
+   jj();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr118922-1.c gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr118922-1.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/torture/pr118922-1.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/torture/pr118922-1.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,57 ----
+ /* { dg-do run } */
+ /* PR tree-optimization/118922 */
+ 
+ /* Phi-opt would convert:
+   <bb 5> [local count: 1014686024]:
+   if (h_6 != 0)
+     goto <bb 7>; [94.50%]
+   else
+     goto <bb 6>; [5.50%]
+ 
+   <bb 6> [local count: 114863530]:
+   # h_6 = PHI <0(4), 1(5)>
+ 
+   <bb 7> [local count: 1073741824]:
+   # f_8 = PHI <0(5), h_6(6)>
+   _9 = f_8 ^ 1;
+   a.0_10 = a;
+   _11 = _9 + a.0_10;
+   if (_11 != -117)
+     goto <bb 5>; [94.50%]
+   else
+     goto <bb 8>; [5.50%]
+ 
+ into:
+ 
+   <bb 4> [local count: 59055799]:
+   c = d_3;
+ 
+   <bb 5> [local count: 1073741824]:
+   # f_8 = PHI <0(5), 0(4)>
+   _9 = f_8 ^ 1;
+   a.0_10 = a;
+   _11 = _9 + a.0_10;
+   if (_11 != -117)
+     goto <bb 5>; [94.50%]
+   else
+     goto <bb 6>; [5.50%]
+ 
+ as it thought the middle bb was empty as there was only a phi node there. */
+ 
+ 
+ int a = -117, b, c, e;
+ void g(int h) {
+   int f = 0;
+   while (!f + a - -117) {
+     f = h == 0;
+     if (h == 0)
+       h = 1;
+   }
+ }
+ int main() {
+   int d = 8;
+   for (; e;)
+     d = 0;
+   c = d;
+   g(0);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/tree-ssa/pr109934.c gcc-13.4.0/gcc/testsuite/gcc.dg/tree-ssa/pr109934.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/tree-ssa/pr109934.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/tree-ssa/pr109934.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,22 ----
+ // { dg-do run }
+ // { dg-options "-O3" }
+ 
+ int printf(const char *, ...);
+ short a;
+ long b = 3, c;
+ int d(int e) {
+   switch (e)
+   case 111:
+   case 222:
+   case 44:
+     return 0;
+   return e;
+ }
+ int main() {
+   for (; a >= 0; --a)
+     if (d(c + 23) - 23)
+       b = 0;
+ 
+   if (b != 3)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/tree-ssa/pr114864.c gcc-13.4.0/gcc/testsuite/gcc.dg/tree-ssa/pr114864.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/tree-ssa/pr114864.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/tree-ssa/pr114864.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do run } */
+ /* { dg-options "-O1 -fno-tree-dce -fno-tree-fre" } */
+ 
+ struct a {
+   int b;
+ } const c;
+ void d(const struct a f) {}
+ void e(const struct a f) {
+   f.b == 0 ? 1 : f.b;
+   d(f);
+ }
+ int main() {
+   e(c);
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/tree-ssa/pr117142.c gcc-13.4.0/gcc/testsuite/gcc.dg/tree-ssa/pr117142.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/tree-ssa/pr117142.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/tree-ssa/pr117142.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O1" } */
+ 
+ struct a {
+   int b;
+ };
+ void c(int, int);
+ void __attribute__((returns_twice))
+ bar1(struct a);
+ void bar(struct a) {
+   struct a d;
+   bar1(d);
+   c(d.b, d.b);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-25.c gcc-13.4.0/gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-25.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-25.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-25.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-lim2-details" } */
+ 
+ char x;
+ 
+ long foo (int n)
+ {
+   long y = 0;
+   for (int j = 0; j < 1024; ++j)
+     for (int i = 0; i < n; ++i)
+       y += *(long *)&x;
+   return y;
+ }
+ 
+ /* Because *(long *)&x may trap we have to preserve execution and
+    only hoist it from the innermost loop (after the header check).  */
+ /* { dg-final { scan-tree-dump-not "out of loop 1" "lim2" } } */
+ /* { dg-final { scan-tree-dump "out of loop 2" "lim2" } } */
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/vect/pr113281-1.c gcc-13.4.0/gcc/testsuite/gcc.dg/vect/pr113281-1.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/vect/pr113281-1.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/vect/pr113281-1.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,17 ----
+ #include "tree-vect.h"
+ 
+ unsigned char a;
+ 
+ int main() {
+   check_vect ();
+ 
+   short b = a = 0;
+   for (; a != 19; a++)
+     if (a)
+       b = 32872 >> a;
+ 
+   if (b == 0)
+     return 0;
+   else
+     return 1;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/vect/pr113281-2.c gcc-13.4.0/gcc/testsuite/gcc.dg/vect/pr113281-2.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/vect/pr113281-2.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/vect/pr113281-2.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,50 ----
+ /* { dg-do compile } */
+ 
+ #define N 128
+ 
+ short x[N];
+ short y[N];
+ 
+ void
+ f1 (void)
+ {
+   for (int i = 0; i < N; ++i)
+     x[i] >>= y[i];
+ }
+ 
+ void
+ f2 (void)
+ {
+   for (int i = 0; i < N; ++i)
+     x[i] >>= (y[i] < 32 ? y[i] : 32);
+ }
+ 
+ void
+ f3 (void)
+ {
+   for (int i = 0; i < N; ++i)
+     x[i] >>= (y[i] < 31 ? y[i] : 31);
+ }
+ 
+ void
+ f4 (void)
+ {
+   for (int i = 0; i < N; ++i)
+     x[i] >>= (y[i] & 31);
+ }
+ 
+ void
+ f5 (void)
+ {
+   for (int i = 0; i < N; ++i)
+     x[i] >>= 0x8000 >> y[i];
+ }
+ 
+ void
+ f6 (void)
+ {
+   for (int i = 0; i < N; ++i)
+     x[i] >>= 0x8000 >> (y[i] & 31);
+ }
+ 
+ /* { dg-final { scan-tree-dump-not {can narrow[^\n]+>>} "vect" } } */
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/vect/pr113281-3.c gcc-13.4.0/gcc/testsuite/gcc.dg/vect/pr113281-3.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/vect/pr113281-3.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/vect/pr113281-3.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,39 ----
+ /* { dg-do compile } */
+ 
+ #define N 128
+ 
+ short x[N];
+ short y[N];
+ 
+ void
+ f1 (void)
+ {
+   for (int i = 0; i < N; ++i)
+     x[i] >>= (y[i] < 30 ? y[i] : 30);
+ }
+ 
+ void
+ f2 (void)
+ {
+   for (int i = 0; i < N; ++i)
+     x[i] >>= ((y[i] & 15) + 2);
+ }
+ 
+ void
+ f3 (void)
+ {
+   for (int i = 0; i < N; ++i)
+     x[i] >>= (y[i] < 16 ? y[i] : 16);
+ }
+ 
+ void
+ f4 (void)
+ {
+   for (int i = 0; i < N; ++i)
+     x[i] = 32768 >> ((y[i] & 15) + 3);
+ }
+ 
+ /* { dg-final { scan-tree-dump {can narrow to signed:31 without loss [^\n]+>>} "vect" } } */
+ /* { dg-final { scan-tree-dump {can narrow to signed:18 without loss [^\n]+>>} "vect" } } */
+ /* { dg-final { scan-tree-dump {can narrow to signed:17 without loss [^\n]+>>} "vect" } } */
+ /* { dg-final { scan-tree-dump {can narrow to unsigned:19 without loss [^\n]+>>} "vect" } } */
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/vect/pr113281-4.c gcc-13.4.0/gcc/testsuite/gcc.dg/vect/pr113281-4.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/vect/pr113281-4.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/vect/pr113281-4.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,55 ----
+ /* { dg-do compile } */
+ 
+ #define N 128
+ 
+ short x[N];
+ short y[N];
+ 
+ void
+ f1 (void)
+ {
+   for (int i = 0; i < N; ++i)
+     x[i] >>= (y[i] & 15);
+ }
+ 
+ void
+ f2 (void)
+ {
+   for (int i = 0; i < N; ++i)
+     x[i] >>= ((y[i] & 7) + 8);
+ }
+ 
+ void
+ f3 (void)
+ {
+   for (int i = 0; i < N; ++i)
+     x[i] >>= ((y[i] & 7) ^ 11);
+ }
+ 
+ void
+ f4 (void)
+ {
+   for (int i = 0; i < N; ++i)
+     x[i] >>= (y[i] < 15 ? y[i] : 15);
+ }
+ 
+ void
+ f5 (void)
+ {
+   for (int i = 0; i < N; ++i)
+     x[i] >>= (y[i] < 15 ? y[i] : 1);
+ }
+ 
+ void
+ f6 (void)
+ {
+   for (int i = 0; i < N; ++i)
+     x[i] = 32768 >> (y[i] & 15);
+ }
+ 
+ /* { dg-final { scan-tree-dump {:11:[^\n]+can narrow to signed:16 without loss [^\n]+>>} "vect" } } */
+ /* { dg-final { scan-tree-dump {:18:[^\n]+can narrow to signed:16 without loss [^\n]+>>} "vect" } } */
+ /* { dg-final { scan-tree-dump {:25:[^\n]+can narrow to signed:16 without loss [^\n]+>>} "vect" } } */
+ /* { dg-final { scan-tree-dump {:32:[^\n]+can narrow to signed:16 without loss [^\n]+>>} "vect" } } */
+ /* { dg-final { scan-tree-dump {:39:[^\n]+can narrow to signed:16 without loss [^\n]+>>} "vect" } } */
+ /* { dg-final { scan-tree-dump {can narrow to unsigned:16 without loss [^\n]+>>} "vect" } } */
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/vect/pr113281-5.c gcc-13.4.0/gcc/testsuite/gcc.dg/vect/pr113281-5.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/vect/pr113281-5.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/vect/pr113281-5.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,66 ----
+ /* { dg-do compile } */
+ 
+ #define N 128
+ 
+ short x[N];
+ short y[N];
+ 
+ void
+ f1 (void)
+ {
+   for (int i = 0; i < N; ++i)
+     {
+       int a = y[i];
+       int b = ~a;
+       x[i] = b;
+     }
+ }
+ 
+ void
+ f2 (void)
+ {
+   for (int i = 0; i < N; ++i)
+     {
+       int a = y[i];
+       int b = -a;
+       x[i] = b;
+     }
+ }
+ 
+ void
+ f3 (void)
+ {
+   for (int i = 0; i < N; ++i)
+     {
+       int a = x[i];
+       int b = a / y[i];
+       x[i] = b;
+     }
+ }
+ 
+ void
+ f4 (void)
+ {
+   for (int i = 0; i < N; ++i)
+     {
+       int a = x[i];
+       int b = a < y[i] ? a : y[i];
+       x[i] = b;
+     }
+ }
+ 
+ void
+ f5 (void)
+ {
+   for (int i = 0; i < N; ++i)
+     {
+       int a = x[i];
+       int b = a > y[i] ? a : y[i];
+       x[i] = b;
+     }
+ }
+ 
+ /* { dg-final { scan-tree-dump {can narrow to signed:17 without loss [^\n]+= -} "vect" } } */
+ /* { dg-final { scan-tree-dump {can narrow to signed:16 without loss [^\n]+= ~} "vect" } } */
+ /* { dg-final { scan-tree-dump {can narrow to signed:16 without loss [^\n]+ MIN_EXPR} "vect" } } */
+ /* { dg-final { scan-tree-dump {can narrow to signed:16 without loss [^\n]+ MAX_EXPR} "vect" } } */
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/vect/pr115192.c gcc-13.4.0/gcc/testsuite/gcc.dg/vect/pr115192.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/vect/pr115192.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/vect/pr115192.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,28 ----
+ #include "tree-vect.h"
+ 
+ int data[4 * 16 * 16] __attribute__((aligned(16)));
+ 
+ __attribute__((noipa)) void
+ foo (__SIZE_TYPE__ n)
+ {
+   for (__SIZE_TYPE__ i = 1; i < n; ++i)
+     {
+       data[i * n * 4] = data[(i - 1) * n * 4] + 1;
+       data[i * n * 4 + 1] = data[(i - 1) * n * 4 + 1] + 2;
+     }
+ }
+ 
+ int
+ main ()
+ {
+   check_vect ();
+ 
+   data[0] = 10;
+   data[1] = 20;
+ 
+   foo (3);
+ 
+   if (data[24] != 12 || data[25] != 24)
+     __builtin_abort ();
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/vect/pr115669.c gcc-13.4.0/gcc/testsuite/gcc.dg/vect/pr115669.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/vect/pr115669.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/vect/pr115669.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,22 ----
+ /* { dg-additional-options "-fwrapv" } */
+ 
+ #include "tree-vect.h"
+ 
+ int a = 10;
+ unsigned b;
+ long long c[100];
+ int foo()
+ {
+   long long *d = c;
+   for (short e = 0; e < a; e++)
+     b += ~(d ? d[e] : 0);
+   return b;
+ }
+ 
+ int main()
+ {
+   check_vect ();
+   if (foo () != -10)
+     abort ();
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/vect/pr115841.c gcc-13.4.0/gcc/testsuite/gcc.dg/vect/pr115841.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/vect/pr115841.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/vect/pr115841.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,42 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-Ofast -fcommon -fvect-cost-model=dynamic --param vect-partial-vector-usage=1" } */
+ /* { dg-additional-options "-mavx512vl" { target avx512vl } } */
+ 
+ /* To trigger the bug costing needs to determine that aligning the A170
+    accesses with a prologue is good and there should be a vectorized
+    epilogue with a smaller vector size, re-using the vector accumulator
+    from the vectorized main loop that's statically known to execute
+    but the epilogue loop is not.  */
+ 
+ static unsigned char xl[192];
+ unsigned char A170[192*3];
+ 
+ void jerate (unsigned char *, unsigned char *);
+ float foo (unsigned n)
+ {
+   jerate (xl, A170);
+ 
+   unsigned i = 32;
+   int kr = 1;
+   float sfn11s = 0.f;
+   float sfn12s = 0.f;
+   do
+     {
+       int krm1 = kr - 1;
+       long j = krm1;
+       float a = (*(float(*)[n])A170)[j];
+       float b = (*(float(*)[n])xl)[j];
+       float c = a * b;
+       float d = c * 6.93149983882904052734375e-1f;
+       float e = (*(float(*)[n])A170)[j+48];
+       float f = (*(float(*)[n])A170)[j+96];
+       float g = d * e;
+       sfn11s = sfn11s + g;
+       float h = f * d;
+       sfn12s = sfn12s + h;
+       kr++;
+     }
+   while (--i != 0);
+   float tem = sfn11s + sfn12s;
+   return tem;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/vect/pr116125.c gcc-13.4.0/gcc/testsuite/gcc.dg/vect/pr116125.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/vect/pr116125.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/vect/pr116125.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,30 ----
+ #include "tree-vect.h"
+ 
+ struct st
+ {
+   unsigned int num : 8;
+ };
+ 
+ void __attribute__((noipa))
+ mem_overlap (struct st *a, struct st *b)
+ {
+   for (int i = 0; i < 9; i++)
+     a[i].num = b[i].num + 1;
+ }
+ 
+ int
+ main (void)
+ {
+   check_vect ();
+ 
+   struct st a[9] = {};
+ 
+   // input a = 0, 0, 0, 0, 0, 0, 0, 0, 0
+   mem_overlap (&a[1], a);
+ 
+   // output a = 0, 1, 2, 3, 4, 5, 6, 7, 8
+   if (a[2].num == 2)
+     return 0;
+   else
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/vect/pr116997.c gcc-13.4.0/gcc/testsuite/gcc.dg/vect/pr116997.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/vect/pr116997.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/vect/pr116997.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,18 ----
+ /* PR 116997.  */
+ struct S0
+ {
+   unsigned f0;
+   signed f2 : 11;
+   signed : 6;
+ } GlobS, *Ptr = &GlobS;
+ 
+ const struct S0 Initializer = {7, 3};
+ 
+ int main (void)
+ {
+   for (unsigned i = 0; i <= 2; i++)
+     *Ptr = Initializer;
+   if (GlobS.f2 != 3)
+     __builtin_abort ();
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/vect/pr117307.c gcc-13.4.0/gcc/testsuite/gcc.dg/vect/pr117307.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/vect/pr117307.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/vect/pr117307.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-march=x86-64-v4" { target { x86_64-*-* i?86-*-* } } } */
+ 
+ int a;
+ float *b, *c;
+ float d;
+ void e() {
+   for (; a; a++) {
+     if (d) {
+       c[0] = b[0];
+       c[1] = b[1];
+     } else if (b[1])
+       c[0] = b[0] * 0;
+     b += 2;
+     c += 2;
+   }
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/vect/pr119057.c gcc-13.4.0/gcc/testsuite/gcc.dg/vect/pr119057.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/vect/pr119057.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/vect/pr119057.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,19 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-fno-tree-vrp -fno-tree-forwprop" } */
+ 
+ int a, b, c, d;
+ unsigned e;
+ static void f(void)
+ {
+   unsigned h;
+   for (d = 0; d < 2; d++)
+     b |= e;
+   h = b;
+   c |= h;
+ }
+ int main()
+ {
+   for (; a; a++)
+     f();
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/vect/pr119145.c gcc-13.4.0/gcc/testsuite/gcc.dg/vect/pr119145.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/vect/pr119145.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/vect/pr119145.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,35 ----
+ /* { dg-do compile } */
+ 
+ typedef short Quantum;
+ Quantum ComplexImages_Bi_0, ComplexImages_Ai_0, ComplexImages_Ai_1;
+ long ComplexImages_x;
+ __attribute__((__simd__)) double atan2(double, double);
+ typedef enum { MagickFalse } MagickBooleanType;
+ 
+ struct {
+     MagickBooleanType matte;
+ } *ComplexImages_images;
+ 
+ typedef struct {
+     Quantum blue, opacity;
+ } PixelPacket;
+ 
+ typedef enum { MagnitudePhaseComplexOperator } ComplexOperator;
+ PixelPacket ComplexImages_Ar, ComplexImages_Br;
+ PixelPacket *ComplexImages_Ci;
+ ComplexOperator ComplexImages_op;
+ 
+ void ComplexImages()
+ {
+   for (; ComplexImages_x; ComplexImages_x++)
+     switch (ComplexImages_op)
+       {
+       case MagnitudePhaseComplexOperator:
+         if (ComplexImages_images->matte)
+ 	  ComplexImages_Ci->opacity
+ 	    = atan2(ComplexImages_Ai_1, ComplexImages_Ar.opacity);
+ 	ComplexImages_Ci->blue
+ 	  = 1.0 / (ComplexImages_Ai_0 * ComplexImages_Br.blue
+ 		   + ComplexImages_Ar.blue * ComplexImages_Bi_0);
+       }
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/vect/pr119399.c gcc-13.4.0/gcc/testsuite/gcc.dg/vect/pr119399.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/vect/pr119399.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/vect/pr119399.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,10 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-fdump-tree-vect-raw" } */
+ 
+ void foo(int *p, int *q, int n)
+ {
+   for (int i = 0; i < n; i++)
+     p[i] = q[i] + 1;
+ }
+ 
+ /* { dg-final { scan-tree-dump-not {<pointer_diff_expr,} "vect" } } */
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/vect/pr119534.c gcc-13.4.0/gcc/testsuite/gcc.dg/vect/pr119534.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/vect/pr119534.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/vect/pr119534.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-mavx512bw" { target { x86_64-*-* i?86-*-* } } } */
+ 
+ void f(int w, int *out, double *d)
+ {
+   for (int j = 0; j < w; j++)
+     {
+       const int i = (j >= w / 2);
+       out[j] += d[i];
+     }
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.dg/vect/vect-fncall-mask.c gcc-13.4.0/gcc/testsuite/gcc.dg/vect/vect-fncall-mask.c
*** gcc-13.3.0/gcc/testsuite/gcc.dg/vect/vect-fncall-mask.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.dg/vect/vect-fncall-mask.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,31 ----
+ /* { dg-do compile { target { aarch64*-*-* } } } */
+ /* { dg-additional-options "-march=armv8.2-a+sve -fdump-tree-ifcvt-raw -Ofast" { target { aarch64*-*-* } } } */
+ 
+ extern int __attribute__ ((simd, const)) fn (int);
+ 
+ const int N = 20;
+ const float lim = 101.0;
+ const float cst =  -1.0;
+ float tot =   0.0;
+ 
+ float b[20];
+ float a[20] = { [0 ... 9] = 1.7014118e39, /* If branch. */
+ 		[10 ... 19] = 100.0 };    /* Else branch.  */
+ 
+ int main (void)
+ {
+   #pragma omp simd
+   for (int i = 0; i < N; i += 1)
+     {
+       if (a[i] > lim)
+ 	b[i] = cst;
+       else
+ 	b[i] = fn (a[i]);
+       tot += b[i];
+     }
+   return (0);
+ }
+ 
+ /* { dg-final { scan-tree-dump {gimple_assign <gt_expr, _12, _1, 1.01e\+2, NULL>} ifcvt } } */
+ /* { dg-final { scan-tree-dump {gimple_assign <bit_not_expr, _34, _12, NULL, NULL>} ifcvt } } */
+ /* { dg-final { scan-tree-dump {gimple_call <.MASK_CALL, _3, fn, _2, _34>} ifcvt } } */
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/aarch64/acle/bf16_feature.c gcc-13.4.0/gcc/testsuite/gcc.target/aarch64/acle/bf16_feature.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/aarch64/acle/bf16_feature.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/aarch64/acle/bf16_feature.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,10 ----
+ /* { dg-do compile } */
+ 
+ #pragma GCC target "+bf16"
+ #ifndef __ARM_FEATURE_BF16
+ #error "__ARM_FEATURE_BF16 is not defined but should be!"
+ #endif
+ 
+ void
+ foo (void) {}
+ 
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/aarch64/acle/bf16_sve_feature.c gcc-13.4.0/gcc/testsuite/gcc.target/aarch64/acle/bf16_sve_feature.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/aarch64/acle/bf16_sve_feature.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/aarch64/acle/bf16_sve_feature.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,10 ----
+ /* { dg-do compile } */
+ 
+ #pragma GCC target "+sve+bf16"
+ #ifndef __ARM_FEATURE_SVE_BF16
+ #error "__ARM_FEATURE_SVE_BF16 is not defined but should be!"
+ #endif
+ 
+ void
+ foo (void) {}
+ 
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/aarch64/cpunative/info_34 gcc-13.4.0/gcc/testsuite/gcc.target/aarch64/cpunative/info_34
*** gcc-13.3.0/gcc/testsuite/gcc.target/aarch64/cpunative/info_34	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/aarch64/cpunative/info_34	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,18 ----
+ processor	: 0
+ BogoMIPS	: 100.00
+ Features	: fp asimd evtstrm aes pmull sha1 sha2 crc32 asimddp sve sve2 fphp asimdhp fcma
+ CPU implementer	: 0xfe
+ CPU architecture: 8
+ CPU variant	: 0x0
+ CPU part	: 0xd08
+ CPU revision	: 2
+ 
+ processor	: 0
+ BogoMIPS	: 100.00
+ Features	: fp asimd evtstrm aes pmull sha1 sha2 crc32 asimddp sve sve2 fphp asimdhp fcma
+ CPU implementer	: 0xfe
+ CPU architecture: 8
+ CPU variant	: 0x0
+ CPU part	: 0xd09
+ CPU revision	: 2
+ 
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/aarch64/cpunative/info_35 gcc-13.4.0/gcc/testsuite/gcc.target/aarch64/cpunative/info_35
*** gcc-13.3.0/gcc/testsuite/gcc.target/aarch64/cpunative/info_35	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/aarch64/cpunative/info_35	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,18 ----
+ processor	: 0
+ BogoMIPS	: 100.00
+ Features	: fp asimd evtstrm aes pmull sha1 sha2 crc32 asimddp sve sve2 fphp asimdhp fcma
+ CPU implementer	: 0xfe
+ CPU architecture: 8
+ CPU variant	: 0x0
+ CPU part	: 0xd08
+ CPU revision	: 2
+ 
+ processor	: 0
+ BogoMIPS	: 100.00
+ Features	: fp asimd evtstrm aes pmull sha1 sha2 crc32 asimddp sve sve2 fphp asimdhp fcma
+ CPU implementer	: 0xfe
+ CPU architecture: 8
+ CPU variant	: 0x0
+ CPU part	: 0xd09
+ CPU revision	: 2
+ 
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_34.c gcc-13.4.0/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_34.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_34.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_34.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile { target { { aarch64*-*-linux*} && native } } } */
+ /* { dg-set-compiler-env-var GCC_CPUINFO "$srcdir/gcc.target/aarch64/cpunative/info_34" } */
+ /* { dg-additional-options "-mcpu=native" } */
+ 
+ int main()
+ {
+   return 0;
+ }
+ 
+ /* { dg-final { scan-assembler {\.arch armv8-a\+crc\+dotprod\+crypto\+sve2\n} } } */
+ 
+ /* Test a normal looking procinfo.  */
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_35.c gcc-13.4.0/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_35.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_35.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_35.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,13 ----
+ /* { dg-do compile { target { { aarch64*-*-linux*} && native } } } */
+ /* { dg-set-compiler-env-var GCC_CPUINFO "$srcdir/gcc.target/aarch64/cpunative/info_34" } */
+ /* { dg-additional-options "-march=armv8.8-a+sve -mcpu=native" } */
+ 
+ int main()
+ {
+   return 0;
+ }
+ 
+ /* { dg-final { scan-assembler {\.arch armv8.8-a\+crc\+sve\n} } } */
+ /* { dg-excess-errors "" } */
+ 
+ /* Test a normal looking procinfo.  */
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/aarch64/options_set_27.c gcc-13.4.0/gcc/testsuite/gcc.target/aarch64/options_set_27.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/aarch64/options_set_27.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/aarch64/options_set_27.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-march=armv8.2-a+aes+sha3" } */
+ 
+ int main ()
+ {
+   return 0;
+ }
+ 
+ /* { dg-final { scan-assembler-times {\.arch armv8\.2\-a\+crc\+aes\+sha3\n} 1 } } */
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/aarch64/options_set_29.c gcc-13.4.0/gcc/testsuite/gcc.target/aarch64/options_set_29.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/aarch64/options_set_29.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/aarch64/options_set_29.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do assemble } */
+ /* { dg-additional-options "-march=armv8.2-a+sve -mcpu=cortex-a72 -O1 -w -###" } */
+ 
+ int main ()
+ {
+   return 0;
+ }
+ 
+ /* { dg-message "-march=armv8-a\+crc" "no arch from cpu" { xfail *-*-* } 0 } */
+ /* { dg-message "-march=armv8\\.2-a\\+sve" "using only sve" { target *-*-* } 0 } */
+ /* { dg-excess-errors "" } */
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/aarch64/options_set_4.c gcc-13.4.0/gcc/testsuite/gcc.target/aarch64/options_set_4.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/aarch64/options_set_4.c	Tue May 21 07:47:40 2024
--- gcc-13.4.0/gcc/testsuite/gcc.target/aarch64/options_set_4.c	Thu Jun  5 16:03:00 2025
*************** int main ()
*** 6,12 ****
    return 0;
  }
  
! /* { dg-final { scan-assembler-times {\.arch armv8\.2\-a\+crc\+crypto} 1 } } */
  
  /* Check if individual bits that make up a grouping is specified that only the
     grouping is kept. */
--- 6,12 ----
    return 0;
  }
  
! /* { dg-final { scan-assembler-times {\.arch armv8\.2\-a\+crc\+crypto\n} 1 } } */
  
  /* Check if individual bits that make up a grouping is specified that only the
     grouping is kept. */
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sudot_s32.c gcc-13.4.0/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sudot_s32.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sudot_s32.c	Tue May 21 07:47:40 2024
--- gcc-13.4.0/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sudot_s32.c	Thu Jun  5 16:03:00 2025
***************
*** 6,12 ****
  
  /*
  ** sudot_s32_tied1:
! **	usdot	z0\.s, z2\.b, z4\.b
  **	ret
  */
  TEST_TRIPLE_Z (sudot_s32_tied1, svint32_t, svint8_t, svuint8_t,
--- 6,12 ----
  
  /*
  ** sudot_s32_tied1:
! **	usdot	z0\.s, z4\.b, z2\.b
  **	ret
  */
  TEST_TRIPLE_Z (sudot_s32_tied1, svint32_t, svint8_t, svuint8_t,
*************** TEST_TRIPLE_Z (sudot_s32_tied1, svint32_
*** 17,23 ****
  ** sudot_s32_tied2:
  **	mov	(z[0-9]+)\.d, z0\.d
  **	movprfx	z0, z4
! **	usdot	z0\.s, z2\.b, \1\.b
  **	ret
  */
  TEST_TRIPLE_Z_REV (sudot_s32_tied2, svint32_t, svint8_t, svuint8_t,
--- 17,23 ----
  ** sudot_s32_tied2:
  **	mov	(z[0-9]+)\.d, z0\.d
  **	movprfx	z0, z4
! **	usdot	z0\.s, \1\.b, z2\.b
  **	ret
  */
  TEST_TRIPLE_Z_REV (sudot_s32_tied2, svint32_t, svint8_t, svuint8_t,
*************** TEST_TRIPLE_Z_REV (sudot_s32_tied2, svin
*** 27,33 ****
  /*
  ** sudot_w0_s32_tied:
  **	mov	(z[0-9]+\.b), w0
! **	usdot	z0\.s, z2\.b, \1
  **	ret
  */
  TEST_TRIPLE_ZX (sudot_w0_s32_tied, svint32_t, svint8_t, uint8_t,
--- 27,33 ----
  /*
  ** sudot_w0_s32_tied:
  **	mov	(z[0-9]+\.b), w0
! **	usdot	z0\.s, \1, z2\.b
  **	ret
  */
  TEST_TRIPLE_ZX (sudot_w0_s32_tied, svint32_t, svint8_t, uint8_t,
*************** TEST_TRIPLE_ZX (sudot_w0_s32_tied, svint
*** 37,43 ****
  /*
  ** sudot_9_s32_tied:
  **	mov	(z[0-9]+\.b), #9
! **	usdot	z0\.s, z2\.b, \1
  **	ret
  */
  TEST_TRIPLE_Z (sudot_9_s32_tied, svint32_t, svint8_t, uint8_t,
--- 37,43 ----
  /*
  ** sudot_9_s32_tied:
  **	mov	(z[0-9]+\.b), #9
! **	usdot	z0\.s, \1, z2\.b
  **	ret
  */
  TEST_TRIPLE_Z (sudot_9_s32_tied, svint32_t, svint8_t, uint8_t,
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cnot_1.c gcc-13.4.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cnot_1.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cnot_1.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cnot_1.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,23 ----
+ /* { dg-options "-O2" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include <arm_sve.h>
+ 
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+ 
+ /*
+ ** foo:
+ **	cmpeq	(p[0-7])\.s, p0/z, z0\.s, #0
+ **	mov	z0\.s, \1/z, #1
+ **	ret
+ */
+ svint32_t foo(svbool_t pg, svint32_t y)
+ {
+   return svsel(svcmpeq(pg, y, 0), svdup_s32(1), svdup_s32(0));
+ }
+ 
+ #ifdef __cplusplus
+ }
+ #endif
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_11.c gcc-13.4.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_11.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_11.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_11.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,31 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ 
+ #include <arm_sve.h>
+ #include <limits.h>
+ 
+ svbool_t
+ f1 (volatile int32_t *ptr)
+ {
+   return svwhilelt_b8_s32 (*ptr, INT32_MIN);
+ }
+ 
+ svbool_t
+ f2 (volatile uint32_t *ptr)
+ {
+   return svwhilelt_b16_u32 (*ptr, 0);
+ }
+ 
+ svbool_t
+ f3 (volatile int64_t *ptr)
+ {
+   return svwhilelt_b32_s64 (*ptr, INT64_MIN);
+ }
+ 
+ svbool_t
+ f4 (volatile uint64_t *ptr)
+ {
+   return svwhilelt_b64_u64 (*ptr, 0);
+ }
+ 
+ /* { dg-final { scan-assembler-times {\tpfalse\tp[0-9]+\.b\n} 4 } } */
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_12.c gcc-13.4.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_12.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_12.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_12.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,34 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ 
+ #include <arm_sve.h>
+ #include <limits.h>
+ 
+ svbool_t
+ f1 (volatile int32_t *ptr)
+ {
+   return svwhilele_b8_s32 (*ptr, INT32_MAX);
+ }
+ 
+ svbool_t
+ f2 (volatile uint32_t *ptr)
+ {
+   return svwhilele_b16_u32 (*ptr, UINT32_MAX);
+ }
+ 
+ svbool_t
+ f3 (volatile int64_t *ptr)
+ {
+   return svwhilele_b32_s64 (*ptr, INT64_MAX);
+ }
+ 
+ svbool_t
+ f4 (volatile uint64_t *ptr)
+ {
+   return svwhilele_b64_u64 (*ptr, UINT64_MAX);
+ }
+ 
+ /* { dg-final { scan-assembler {\tptrue\tp[0-9]+\.b(?:, all)\n} } } */
+ /* { dg-final { scan-assembler {\tptrue\tp[0-9]+\.h(?:, all)\n} } } */
+ /* { dg-final { scan-assembler {\tptrue\tp[0-9]+\.s(?:, all)\n} } } */
+ /* { dg-final { scan-assembler {\tptrue\tp[0-9]+\.d(?:, all)\n} } } */
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_5.c gcc-13.4.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_5.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_5.c	Tue May 21 07:47:40 2024
--- gcc-13.4.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_5.c	Thu Jun  5 16:03:00 2025
*************** test3 (svbool_t *ptr)
*** 28,34 ****
    *ptr = svwhilele_b16_s32 (0x7ffffffb, 0x7fffffff);
  }
  
! /* { dg-final { scan-assembler {\tptrue\tp[0-7]\.h, vl5\n} } } */
  
  void
  test4 (svbool_t *ptr)
--- 28,34 ----
    *ptr = svwhilele_b16_s32 (0x7ffffffb, 0x7fffffff);
  }
  
! /* { dg-final { scan-assembler {\tptrue\tp[0-9]+\.h(?:, all)\n} } } */
  
  void
  test4 (svbool_t *ptr)
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/aarch64/sve/pr116238.c gcc-13.4.0/gcc/testsuite/gcc.target/aarch64/sve/pr116238.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/aarch64/sve/pr116238.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/aarch64/sve/pr116238.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,13 ----
+ /* { dg-additional-options "-O2 -msve-vector-bits=128" } */
+ 
+ void foo();
+ typedef unsigned char v2qi __attribute__((vector_size(2)));
+ void f(v2qi *ptr)
+ {
+   v2qi x = *ptr;
+   asm volatile ("" :: "w" (x));
+   asm volatile ("" ::: "d8", "d9", "d10", "d11", "d12", "d13", "d14", "d15");
+   foo();
+   asm volatile ("" :: "w" (x));
+   *ptr = x;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/aarch64/torture/pr116564.c gcc-13.4.0/gcc/testsuite/gcc.target/aarch64/torture/pr116564.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/aarch64/torture/pr116564.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/aarch64/torture/pr116564.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "" } */
+ #include <arm_neon.h>
+ void test()
+ {
+   for (int L = 0; L < 4; ++L) {
+     float64_t ResData[1 * 2];
+     float64x1x2_t Src1;
+     vst2_f64(ResData, Src1);
+   }
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/alpha/pr115297.c gcc-13.4.0/gcc/testsuite/gcc.target/alpha/pr115297.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/alpha/pr115297.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/alpha/pr115297.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,13 ----
+ /* PR target/115297 */
+ /* { dg-do compile } */
+ /* { dg-options "-O1" } */
+ 
+ enum { BPF_F_USER_BUILD_ID } __bpf_get_stack_size;
+ long __bpf_get_stack_flags, bpf_get_stack___trans_tmp_2;
+ 
+ void bpf_get_stack() {
+   unsigned elem_size;
+   int err = elem_size = __bpf_get_stack_flags ?: sizeof(long);
+   if (__builtin_expect(__bpf_get_stack_size % elem_size, 0))
+     bpf_get_stack___trans_tmp_2 = err;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/alpha/pr115526.c gcc-13.4.0/gcc/testsuite/gcc.target/alpha/pr115526.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/alpha/pr115526.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/alpha/pr115526.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,46 ----
+ /* PR target/115526 */
+ /* { dg-do assemble } */
+ /* { dg-options "-O2 -Wno-attributes -fvisibility=hidden -fPIC -mcpu=ev4" } */
+ 
+ struct _ts {
+   struct _dtoa_state *interp;
+ };
+ struct Bigint {
+   int k;
+ } *_Py_dg_strtod_bs;
+ struct _dtoa_state {
+   struct Bigint p5s;
+   struct Bigint *freelist[];
+ };
+ extern _Thread_local struct _ts _Py_tss_tstate;
+ typedef struct Bigint Bigint;
+ int pow5mult_k;
+ long _Py_dg_strtod_ndigits;
+ void PyMem_Free();
+ void Bfree(Bigint *v) {
+   if (v)
+     {
+       if (v->k)
+ 	PyMem_Free();
+       else {
+ 	struct _dtoa_state *interp = _Py_tss_tstate.interp;
+ 	interp->freelist[v->k] = v;
+       }
+     }
+ }
+ static Bigint *pow5mult(Bigint *b) {
+   for (;;) {
+     if (pow5mult_k & 1) {
+       Bfree(b);
+       if (b == 0)
+         return 0;
+     }
+     if (!(pow5mult_k >>= 1))
+       break;
+   }
+   return 0;
+ }
+ void _Py_dg_strtod() {
+   if (_Py_dg_strtod_ndigits)
+     pow5mult(_Py_dg_strtod_bs);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/arm/cmse/extend-param.c gcc-13.4.0/gcc/testsuite/gcc.target/arm/cmse/extend-param.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/arm/cmse/extend-param.c	Tue May 21 07:47:40 2024
--- gcc-13.4.0/gcc/testsuite/gcc.target/arm/cmse/extend-param.c	Thu Jun  5 16:03:00 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mcmse" } */
  /* { dg-final { check-function-bodies "**" "" "" } } */
  
  #include <arm_cmse.h>
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mcmse -fshort-enums" } */
  /* { dg-final { check-function-bodies "**" "" "" } } */
  
  #include <arm_cmse.h>
*************** __attribute__((cmse_nonsecure_entry)) ch
*** 78,84 ****
    if (index >= ARRAY_SIZE)
      return 0;
    return array[index];
- 
  }
  
  /*
--- 78,83 ----
*************** __attribute__((cmse_nonsecure_entry)) ch
*** 88,96 ****
  **	...
  */
  __attribute__((cmse_nonsecure_entry)) char boolSecureFunc (bool index) {
- 
    if (index >= ARRAY_SIZE)
      return 0;
    return array[index];
  
! }
\ No newline at end of file
--- 87,109 ----
  **	...
  */
  __attribute__((cmse_nonsecure_entry)) char boolSecureFunc (bool index) {
    if (index >= ARRAY_SIZE)
      return 0;
    return array[index];
+ }
  
! /*
! **__acle_se_boolCharShortEnumSecureFunc:
! **	...
! **	uxtb	r0, r0
! **	uxtb	r1, r1
! **	uxth	r2, r2
! **	uxtb	r3, r3
! **	...
! */
! __attribute__((cmse_nonsecure_entry,optimize(0))) char boolCharShortEnumSecureFunc (bool a, unsigned char b, unsigned short c, enum offset d) {
!   size_t index = a + b + c + d;
!   if (index >= ARRAY_SIZE)
!     return 0;
!   return array[index];
! }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/arm/cmse/extend-return.c gcc-13.4.0/gcc/testsuite/gcc.target/arm/cmse/extend-return.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/arm/cmse/extend-return.c	Tue May 21 07:47:40 2024
--- gcc-13.4.0/gcc/testsuite/gcc.target/arm/cmse/extend-return.c	Thu Jun  5 16:03:00 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mcmse" } */
  /* { dg-final { check-function-bodies "**" "" "" } } */
  
  #include <arm_cmse.h>
--- 1,7 ----
  /* { dg-do compile } */
! /* { dg-options "-mcmse -fshort-enums" } */
! /* ARMv8-M expectation with target { ! arm_cmse_clear_ok }.  */
! /* ARMv8.1-M expectation with target arm_cmse_clear_ok.  */
  /* { dg-final { check-function-bodies "**" "" "" } } */
  
  #include <arm_cmse.h>
*************** typedef enum offset __attribute__ ((cmse
*** 20,26 ****
  typedef bool __attribute__ ((cmse_nonsecure_call)) ns_bool_foo_t (void);
  
  /*
! **unsignNonsecure0:
  **	...
  **	bl	__gnu_cmse_nonsecure_call
  **	uxtb	r0, r0
--- 22,36 ----
  typedef bool __attribute__ ((cmse_nonsecure_call)) ns_bool_foo_t (void);
  
  /*
! **unsignNonsecure0:  { target arm_cmse_clear_ok }
! **	...
! **	blxns	r[0-3]
! **	...
! **	uxtb	r0, r0
! **	...
! */
! /*
! **unsignNonsecure0: { target { ! arm_cmse_clear_ok } }
  **	...
  **	bl	__gnu_cmse_nonsecure_call
  **	uxtb	r0, r0
*************** unsigned char unsignNonsecure0 (ns_unsig
*** 32,38 ****
  }
  
  /*
! **signNonsecure0:
  **	...
  **	bl	__gnu_cmse_nonsecure_call
  **	sxtb	r0, r0
--- 42,56 ----
  }
  
  /*
! **signNonsecure0:  { target arm_cmse_clear_ok }
! **	...
! **	blxns	r[0-3]
! **	...
! **	sxtb	r0, r0
! **	...
! */
! /*
! **signNonsecure0: { target { ! arm_cmse_clear_ok } }
  **	...
  **	bl	__gnu_cmse_nonsecure_call
  **	sxtb	r0, r0
*************** signed char signNonsecure0 (ns_sign_foo_
*** 44,50 ****
  }
  
  /*
! **shortUnsignNonsecure0:
  **	...
  **	bl	__gnu_cmse_nonsecure_call
  **	uxth	r0, r0
--- 62,76 ----
  }
  
  /*
! **shortUnsignNonsecure0:  { target arm_cmse_clear_ok }
! **	...
! **	blxns	r[0-3]
! **	...
! **	uxth	r0, r0
! **	...
! */
! /*
! **shortUnsignNonsecure0: { target { ! arm_cmse_clear_ok } }
  **	...
  **	bl	__gnu_cmse_nonsecure_call
  **	uxth	r0, r0
*************** unsigned short shortUnsignNonsecure0 (ns
*** 56,62 ****
  }
  
  /*
! **shortSignNonsecure0:
  **	...
  **	bl	__gnu_cmse_nonsecure_call
  **	sxth	r0, r0
--- 82,96 ----
  }
  
  /*
! **shortSignNonsecure0:  { target arm_cmse_clear_ok }
! **	...
! **	blxns	r[0-3]
! **	...
! **	sxth	r0, r0
! **	...
! */
! /*
! **shortSignNonsecure0: { target { ! arm_cmse_clear_ok } }
  **	...
  **	bl	__gnu_cmse_nonsecure_call
  **	sxth	r0, r0
*************** signed short shortSignNonsecure0 (ns_sho
*** 68,74 ****
  }
  
  /*
! **enumNonsecure0:
  **	...
  **	bl	__gnu_cmse_nonsecure_call
  **	uxtb	r0, r0
--- 102,116 ----
  }
  
  /*
! **enumNonsecure0:  { target arm_cmse_clear_ok }
! **	...
! **	blxns	r[0-3]
! **	...
! **	uxtb	r0, r0
! **	...
! */
! /*
! **enumNonsecure0: { target { ! arm_cmse_clear_ok } }
  **	...
  **	bl	__gnu_cmse_nonsecure_call
  **	uxtb	r0, r0
*************** unsigned char __attribute__((noipa)) enu
*** 80,86 ****
  }
  
  /*
! **boolNonsecure0:
  **	...
  **	bl	__gnu_cmse_nonsecure_call
  **	uxtb	r0, r0
--- 122,136 ----
  }
  
  /*
! **boolNonsecure0:  { target arm_cmse_clear_ok }
! **	...
! **	blxns	r[0-3]
! **	...
! **	uxtb	r0, r0
! **	...
! */
! /*
! **boolNonsecure0: { target { ! arm_cmse_clear_ok } }
  **	...
  **	bl	__gnu_cmse_nonsecure_call
  **	uxtb	r0, r0
*************** unsigned char __attribute__((noipa)) enu
*** 89,92 ****
  unsigned char boolNonsecure0 (ns_bool_foo_t * ns_foo_p)
  {
    return ns_foo_p ();
! }
\ No newline at end of file
--- 139,142 ----
  unsigned char boolNonsecure0 (ns_bool_foo_t * ns_foo_p)
  {
    return ns_foo_p ();
! }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/arm/copysign_softfloat_1.c gcc-13.4.0/gcc/testsuite/gcc.target/arm/copysign_softfloat_1.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/arm/copysign_softfloat_1.c	Tue May 21 07:47:40 2024
--- gcc-13.4.0/gcc/testsuite/gcc.target/arm/copysign_softfloat_1.c	Thu Jun  5 16:03:00 2025
*************** main (int argc, char **argv)
*** 42,48 ****
    int index = 0;
  
  /* { dg-final { scan-assembler-times "bfi" 2 { target arm_softfloat } } } */
- /* { dg-final { scan-assembler-times "lsr" 1 { target arm_softfloat } } } */
    for (index; index < N; index++)
      {
        if (__builtin_copysignf (a_f[index], b_f[index]) != c_f[index])
--- 42,47 ----
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/arm/mve/intrinsics/vsetq_lane_su64.c gcc-13.4.0/gcc/testsuite/gcc.target/arm/mve/intrinsics/vsetq_lane_su64.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/arm/mve/intrinsics/vsetq_lane_su64.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/arm/mve/intrinsics/vsetq_lane_su64.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,63 ----
+ /* { dg-require-effective-target arm_v8_1m_mve_ok } */
+ /* { dg-add-options arm_v8_1m_mve } */
+ /* { dg-require-effective-target arm_hard_ok } */
+ /* { dg-additional-options "-mfloat-abi=hard -O2" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "arm_mve.h"
+ 
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+ 
+ /*
+ **fn1:
+ **	vmov	d0, r0, r1
+ **	bx	lr
+ */
+ uint64x2_t
+ fn1 (uint64_t a, uint64x2_t b)
+ {
+   return vsetq_lane_u64 (a, b, 0);
+ }
+ 
+ /*
+ **fn2:
+ **	vmov	d1, r0, r1
+ **	bx	lr
+ */
+ uint64x2_t
+ fn2 (uint64_t a, uint64x2_t b)
+ {
+   return vsetq_lane_u64 (a, b, 1);
+ }
+ 
+ /*
+ **fn3:
+ **	vmov	d0, r0, r1
+ **	bx	lr
+ */
+ int64x2_t
+ fn3 (int64_t a, int64x2_t b)
+ {
+   return vsetq_lane_s64 (a, b, 0);
+ }
+ 
+ /*
+ **fn4:
+ **	vmov	d1, r0, r1
+ **	bx	lr
+ */
+ int64x2_t
+ fn4 (int64_t a, int64x2_t b)
+ {
+   return vsetq_lane_s64 (a, b, 1);
+ }
+ 
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ /* { dg-final { scan-assembler-not "__ARM_undef" } } */
+ 
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/arm/pac-sibcall.c gcc-13.4.0/gcc/testsuite/gcc.target/arm/pac-sibcall.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/arm/pac-sibcall.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/arm/pac-sibcall.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,14 ----
+ /* If all call-clobbered general registers are live (r0-r3, ip), disable
+    indirect tail-call for a PAC-enabled function.  */
+ 
+ /* { dg-do compile } */
+ /* { dg-require-effective-target arm_arch_v8_1m_main_pacbti_ok } */
+ /* { dg-add-options arm_arch_v8_1m_main_pacbti } */
+ /* { dg-additional-options "-mbranch-protection=pac-ret+leaf -O2" } */
+ 
+ void fail(void (*f)(int, int, int, int))
+ {
+   f(1, 2, 3, 4);
+ }
+ 
+ /* { dg-final { scan-assembler-not "bx\tip\t@ indirect register sibling call" } } */
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/arm/simd/mve-vshr.c gcc-13.4.0/gcc/testsuite/gcc.target/arm/simd/mve-vshr.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/arm/simd/mve-vshr.c	Tue May 21 07:47:40 2024
--- gcc-13.4.0/gcc/testsuite/gcc.target/arm/simd/mve-vshr.c	Thu Jun  5 16:03:00 2025
***************
*** 9,14 ****
--- 9,16 ----
    void test_ ## NAME ##_ ## SIGN ## BITS ## x ## NB (TYPE##BITS##_t * __restrict__ dest, TYPE##BITS##_t *a, TYPE##BITS##_t *b) { \
      int i;								\
      for (i=0; i<NB; i++) {						\
+       if ((unsigned)b[i] >= (unsigned)(BITS))				\
+ 	__builtin_unreachable();					\
        dest[i] = a[i] OP b[i];						\
      }									\
  }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/avr/torture/pr115307-isinf.c gcc-13.4.0/gcc/testsuite/gcc.target/avr/torture/pr115307-isinf.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/avr/torture/pr115307-isinf.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/avr/torture/pr115307-isinf.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ 
+ int call_isinff (float f)
+ {
+     int isinff (float);
+     return isinff (f);
+ }
+ 
+ int call_isinf (double f)
+ {
+     int isinf (double);
+     return isinf (f);
+ }
+ 
+ int call_isinfl (long double f)
+ {
+     int isinfl (long double);
+     return isinfl (f);
+ }
+ 
+ /* { dg-final { scan-assembler-not "unord" } } */
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/avr/torture/pr115317-isinf.c gcc-13.4.0/gcc/testsuite/gcc.target/avr/torture/pr115317-isinf.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/avr/torture/pr115317-isinf.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/avr/torture/pr115317-isinf.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,55 ----
+ /* { dg-do run { target { ! avr_tiny } } } */
+ 
+ extern int isinff (float);
+ extern int isinf (double);
+ extern int isinfl (long double);
+ 
+ int tst_isinf (float x, int val)
+ {
+   double y;
+   long double z;
+ 
+   __asm ("" : "+r"(x));
+   if (isinff (x) != val)
+     __builtin_exit (__LINE__);
+ 
+   y = x;
+   __asm ("" : "+r"(y));
+   if (isinf (y) != val)
+   __builtin_exit (__LINE__);
+ 
+   z = x;
+   __asm ("" : "+r"(z));
+   if (isinfl (z) != val)
+   __builtin_exit (__LINE__);
+ }
+ 
+ static float make_f (__UINT32_TYPE__ i)
+ {
+   float f;
+   __builtin_memcpy (&f, &i, 4);
+   return f;
+ }
+ 
+ int main (void)
+ {
+   tst_isinf (__builtin_huge_valf(), 1);
+   tst_isinf (-__builtin_huge_valf(), -1);
+   tst_isinf (__builtin_nanf(""), 0);
+   tst_isinf (0.0f, 0);
+   tst_isinf (-0.0f, 0);
+   tst_isinf (1.0f, 0);
+   tst_isinf (-1.0f, 0);
+   tst_isinf (make_f (0x7f800000), 1);
+   tst_isinf (make_f (0xff800000), -1);
+   tst_isinf (make_f (0x7f7fffff), 0);
+   tst_isinf (make_f (0xff7fffff), 0);
+   tst_isinf (make_f (0x7f800001), 0);
+   tst_isinf (make_f (0xff800001), 0);
+   tst_isinf (make_f (0x00800000), 0);
+   tst_isinf (make_f (0x80800000), 0);
+   tst_isinf (make_f (0x00400000), 0);
+   tst_isinf (make_f (0x80400000), 0);
+   
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/avr/torture/pr116407-2.c gcc-13.4.0/gcc/testsuite/gcc.target/avr/torture/pr116407-2.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/avr/torture/pr116407-2.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/avr/torture/pr116407-2.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,34 ----
+ /* { dg-do link } */
+ 
+ typedef __UINT16_TYPE__ u16;
+ typedef __INT16_TYPE__  T;
+ 
+ #ifdef __OPTIMIZE__
+ 
+ static __inline__ __attribute__((always_inline))
+ void delay (T x, u16 nops)
+ {
+     do
+         __builtin_avr_nops (nops);
+     while (--x != -1);
+ }
+ 
+ #ifdef __AVR_HAVE_JMP_CALL__
+ 
+ void delay_2043 (T x) { delay (x, 2043); }
+ void delay_2044 (T x) { delay (x, 2044); }
+ void delay_2045 (T x) { delay (x, 2045); }
+ void delay_2046 (T x) { delay (x, 2046); }
+ 
+ #endif /* have JUMP, CALL */
+ 
+ void delay_61 (T x) { delay (x, 61); }
+ void delay_62 (T x) { delay (x, 62); }
+ void delay_63 (T x) { delay (x, 63); }
+ 
+ #endif /* optimize */
+ 
+ int main (void)
+ {
+     return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/avr/torture/pr116407-4.c gcc-13.4.0/gcc/testsuite/gcc.target/avr/torture/pr116407-4.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/avr/torture/pr116407-4.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/avr/torture/pr116407-4.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,34 ----
+ /* { dg-do link } */
+ 
+ typedef __UINT16_TYPE__ u16;
+ typedef __INT32_TYPE__  T;
+ 
+ #ifdef __OPTIMIZE__
+ 
+ static __inline__ __attribute__((always_inline))
+ void delay (T x, u16 nops)
+ {
+     do
+         __builtin_avr_nops (nops);
+     while (--x != -1);
+ }
+ 
+ #ifdef __AVR_HAVE_JMP_CALL__
+ 
+ void delay_2043 (T x) { delay (x, 2043); }
+ void delay_2044 (T x) { delay (x, 2044); }
+ void delay_2045 (T x) { delay (x, 2045); }
+ void delay_2046 (T x) { delay (x, 2046); }
+ 
+ #endif /* have JUMP, CALL */
+ 
+ void delay_61 (T x) { delay (x, 61); }
+ void delay_62 (T x) { delay (x, 62); }
+ void delay_63 (T x) { delay (x, 63); }
+ 
+ #endif /* optimize */
+ 
+ int main (void)
+ {
+     return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-1.c gcc-13.4.0/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-1.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-1.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-1.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-do run { target { ! avr_tiny } } } */
+ /* { dg-additional-options "-std=gnu99" } */
+ 
+ typedef __UINT8_TYPE__ TYP;
+ 
+ #include "pr119989.h"
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-2.c gcc-13.4.0/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-2.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-2.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-2.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-do run { target { ! avr_tiny } } } */
+ /* { dg-additional-options "-std=gnu99" } */
+ 
+ typedef __UINT16_TYPE__ TYP;
+ 
+ #include "pr119989.h"
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-3.c gcc-13.4.0/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-3.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-3.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-3.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-do run { target { ! avr_tiny } } } */
+ /* { dg-additional-options "-std=gnu99" } */
+ 
+ __extension__ typedef __uint24 TYP;
+ 
+ #include "pr119989.h"
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-4.c gcc-13.4.0/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-4.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-4.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-4.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-do run { target { ! avr_tiny } } } */
+ /* { dg-additional-options "-std=gnu99" } */
+ 
+ typedef __UINT32_TYPE__ TYP;
+ 
+ #include "pr119989.h"
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/avr/torture/pr119989.h gcc-13.4.0/gcc/testsuite/gcc.target/avr/torture/pr119989.h
*** gcc-13.3.0/gcc/testsuite/gcc.target/avr/torture/pr119989.h	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/avr/torture/pr119989.h	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,37 ----
+ const __memx TYP some_data[] = { 1, 2, 3, 4, 5 };
+ const __memx TYP *IP;
+ 
+ TYP DT, a, b;
+ 
+ __attribute__((noipa))
+ void do_test1 (void)
+ {
+     DT = *IP;
+     DT = *IP--;
+ }
+ 
+ __attribute__((noipa))
+ void do_test2 (void)
+ {
+     DT = *IP;
+     __asm volatile ("" ::: "memory"); // Prevents unwanted optimization
+     DT = *IP--;
+ }
+ 
+ TYP difference(void)
+ {
+     IP = &some_data[3];
+     do_test1();
+     a = DT;
+     IP = &some_data[3];
+     do_test2();
+     b = DT;
+     return a - b; // Expected: 0
+ }
+ 
+ int main (void)
+ {
+     if (difference () != 0)
+         __builtin_exit (__LINE__);
+     return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/avr/torture/pr87376.c gcc-13.4.0/gcc/testsuite/gcc.target/avr/torture/pr87376.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/avr/torture/pr87376.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/avr/torture/pr87376.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,60 ----
+ /* { dg-do run { target { ! avr_tiny } } } */
+ /* { dg-additional-options "-std=gnu99" } */
+ 
+ typedef __UINT64_TYPE__ uint64_t;
+ 
+ extern const __memx uint64_t aa __asm ("real_aa");
+ extern const uint64_t bb __asm ("real_bb");
+ 
+ const __memx uint64_t real_aa = 0x1122334455667788;
+ const uint64_t real_bb        = 0x0908070605040302;
+ 
+ __attribute__((noinline,noclone))
+ uint64_t add1 (void)
+ {
+   return aa + bb;
+ }
+ 
+ __attribute__((noinline,noclone))
+ uint64_t add2 (void)
+ {
+   return bb + aa;
+ }
+ 
+ __attribute__((noinline,noclone))
+ uint64_t sub1 (void)
+ {
+   return aa - bb;
+ }
+ 
+ __attribute__((noinline,noclone))
+ uint64_t sub2 (void)
+ {
+   return bb - aa;
+ }
+ 
+ __attribute__((noinline,noclone))
+ uint64_t neg1 (void)
+ {
+   return -aa;
+ }
+ 
+ int main (void)
+ {
+   if (neg1() != -real_aa)
+   __builtin_exit (__LINE__);
+ 
+   if (add1() != real_aa + real_bb)
+     __builtin_exit (__LINE__);
+ 
+   if (add2() != real_bb + real_aa)
+     __builtin_exit (__LINE__);
+ 
+   if (sub1() != real_aa - real_bb)
+     __builtin_exit (__LINE__);
+   
+   if (sub2() != real_bb - real_aa)
+     __builtin_exit (__LINE__);
+ 
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/avr/torture/pr88236-pr115726.c gcc-13.4.0/gcc/testsuite/gcc.target/avr/torture/pr88236-pr115726.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/avr/torture/pr88236-pr115726.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/avr/torture/pr88236-pr115726.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,115 ----
+ /* { dg-do run { target { ! avr_tiny } } } */
+ /* { dg-additional-options "-std=gnu99" } */
+ 
+ const __flash char fvals8[] = { 1, 2, 3 };
+ char rvals8[] = { 0, 2, 4 };
+ 
+ const __flash int fvals16[] = { 1, 2, 3 };
+ int rvals16[] = { 0, 2, 4 };
+ 
+ __attribute__((noinline, noclone))
+ char xload8_r30 (const __memx char *pc)
+ {
+   register char c __asm ("r30");
+   c = *pc;
+   __asm (";;" : "+r" (c));
+   return c;
+ }
+ 
+ __attribute__((noinline, noclone))
+ int xload16_r30 (const __memx int *pc)
+ {
+   register int c __asm ("r30");
+   c = *pc;
+   __asm (";;" : "+r" (c));
+   return c;
+ }
+ 
+ __attribute__((noinline, noclone))
+ char xload8_r22 (const __memx char *pc)
+ {
+   register char c __asm ("r22");
+   c = *pc;
+   __asm (";;" : "+r" (c));
+   return c;
+ }
+ 
+ __attribute__((noinline, noclone))
+ int xload16_r22 (const __memx int *pc)
+ {
+   register int c __asm ("r22");
+   c = *pc;
+   __asm (";;" : "+r" (c));
+   return c;
+ }
+ 
+ __attribute__((noinline, noclone))
+ int xload16_r20 (const __memx int *pc)
+ {
+   register int c __asm ("r20");
+   c = *pc;
+   __asm (";;" : "+r" (c));
+   return c;
+ }
+ 
+ void test8 (void)
+ {
+   char c;
+   for (int i = 0; i < 3; ++i)
+     {
+       c = xload8_r30 (fvals8 + i);
+       if (c != 1 + i)
+ 	__builtin_exit (__LINE__);
+ 
+       c = xload8_r22 (fvals8 + i);
+       if (c != 1 + i)
+ 	__builtin_exit (__LINE__);
+ 
+       c = xload8_r30 (rvals8 + i);
+       if (c != 2 * i)
+ 	__builtin_exit (__LINE__);
+ 
+       c = xload8_r22 (rvals8 + i);
+       if (c != 2 * i)
+ 	__builtin_exit (__LINE__);
+     }
+ }
+ 
+ void test16 (void)
+ {
+   int c;
+   for (int i = 0; i < 3; ++i)
+     {
+       c = xload16_r30 (fvals16 + i);
+       if (c != 1 + i)
+ 	__builtin_exit (__LINE__);
+ 
+       c = xload16_r22 (fvals16 + i);
+       if (c != 1 + i)
+ 	__builtin_exit (__LINE__);
+ 
+       c = xload16_r20 (fvals16 + i);
+       if (c != 1 + i)
+ 	__builtin_exit (__LINE__);
+ 
+       c = xload16_r30 (rvals16 + i);
+       if (c != 2 * i)
+ 	__builtin_exit (__LINE__);
+ 
+       c = xload16_r22 (rvals16 + i);
+       if (c != 2 * i)
+ 	__builtin_exit (__LINE__);
+ 
+       c = xload16_r20 (rvals16 + i);
+       if (c != 2 * i)
+ 	__builtin_exit (__LINE__);
+     }
+ }
+ 
+ int main (void)
+ {
+   test8();
+   test16();
+ 
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/avr/torture/pr98762.c gcc-13.4.0/gcc/testsuite/gcc.target/avr/torture/pr98762.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/avr/torture/pr98762.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/avr/torture/pr98762.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,19 ----
+ /* { dg-do run } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ long long acc = 0x1122334455667788;
+ 
+ __attribute__((noinline,noclone))
+ void addhi (short a)
+ {
+   acc += (long long) a << 32;
+ }
+ 
+ int main (void)
+ {
+   addhi (0x0304);
+   if (acc != 0x1122364855667788)
+     __builtin_abort();
+ 
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/avx256_avoid_vec_perm.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/avx256_avoid_vec_perm.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/avx256_avoid_vec_perm.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/avx256_avoid_vec_perm.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,22 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=sierraforest -fdump-tree-vect-details" } */
+ /* { dg-final { scan-tree-dump "loop vectorized using 16 byte vectors" "vect" } } */
+ 
+ int a[256], b[256];
+ 
+ void __attribute__((noinline))
+ foo (void)
+ {
+   int i;
+   for (i = 0; i < 32; ++i)
+     {
+       b[i*8+0] = a[i*8+0];
+       b[i*8+1] = a[i*8+0];
+       b[i*8+2] = a[i*8+3];
+       b[i*8+3] = a[i*8+3];
+       b[i*8+4] = a[i*8+4];
+       b[i*8+5] = a[i*8+6];
+       b[i*8+6] = a[i*8+4];
+       b[i*8+7] = a[i*8+6];
+     }
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/avx512bw-pr103750-1.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/avx512bw-pr103750-1.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/avx512bw-pr103750-1.c	Tue May 21 07:47:40 2024
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/avx512bw-pr103750-1.c	Thu Jun  5 16:03:00 2025
***************
*** 1,8 ****
  /* PR target/103750 */
  /* { dg-do compile }  */
  /* { dg-options "-O2 -mavx512bw -mavx512vl" } */
! /* { dg-final { scan-assembler-not "kmov" { xfail ia32 } } } */
! /* xfail need to be fixed.  */
  
  #include <immintrin.h>
  extern __m128i* pi128;
--- 1,7 ----
  /* PR target/103750 */
  /* { dg-do compile }  */
  /* { dg-options "-O2 -mavx512bw -mavx512vl" } */
! /* { dg-final { scan-assembler-not "kmov" } } */
  
  #include <immintrin.h>
  extern __m128i* pi128;
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/avx512bw-vpalignr-1b.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/avx512bw-vpalignr-1b.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/avx512bw-vpalignr-1b.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/avx512bw-vpalignr-1b.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O0 -mavx512bw -mavx512vl" } */
+ /* { dg-final { scan-assembler-times "vpalignr\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */
+ /* { dg-final { scan-assembler-times "vpalignr\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */
+ 
+ #include <immintrin.h>
+ 
+ volatile __m256i y;
+ volatile __m128i x;
+ volatile __mmask32 m2;
+ volatile __mmask16 m3;
+ 
+ void extern
+ avx512bw_test (void)
+ {
+   y = _mm256_mask_alignr_epi8 (y, m2, y, y, 10);
+   x = _mm_mask_alignr_epi8 (x, m3, x, x, 10);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/avx512dq-vfpclasssd-1b.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/avx512dq-vfpclasssd-1b.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/avx512dq-vfpclasssd-1b.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/avx512dq-vfpclasssd-1b.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mavx512dq -O0" } */
+ /* { dg-final { scan-assembler-times "vfpclasssd\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n^k\]*%k\[0-7\]\{%k\[0-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */
+ 
+ #include <immintrin.h>
+ 
+ volatile __m128d x128;
+ volatile __mmask8 m8;
+ 
+ void extern
+ avx512dq_test (void)
+ {
+   m8 = _mm_mask_fpclass_sd_mask (m8, x128, 13);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/avx512dq-vfpclassss-1b.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/avx512dq-vfpclassss-1b.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/avx512dq-vfpclassss-1b.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/avx512dq-vfpclassss-1b.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mavx512dq -O0" } */
+ /* { dg-final { scan-assembler-times "vfpclassss\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n^k\]*%k\[0-7\]\{%k\[0-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */
+ 
+ #include <immintrin.h>
+ 
+ volatile __m128 x128;
+ volatile __mmask8 m8;
+ 
+ void extern
+ avx512dq_test (void)
+ {
+   m8 = _mm_mask_fpclass_ss_mask (m8, x128, 13);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/avx512dq-vreducesd-1b.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/avx512dq-vreducesd-1b.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/avx512dq-vreducesd-1b.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/avx512dq-vreducesd-1b.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mavx512dq -O0" } */
+ /* { dg-final { scan-assembler-times "vreducesd\[ \\t\]+\[^\{\n\]*\{sae\}\[^\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */
+ 
+ #include <immintrin.h>
+ 
+ #define IMM 123
+ 
+ volatile __m128d x1, x2, xx1, xx2;
+ volatile __mmask8 m;
+ 
+ void extern
+ avx512dq_test (void)
+ {
+   xx1 = _mm_reduce_round_sd (xx1, xx2, IMM, _MM_FROUND_NO_EXC);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/avx512dq-vreducess-1b.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/avx512dq-vreducess-1b.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/avx512dq-vreducess-1b.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/avx512dq-vreducess-1b.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mavx512dq -O0" } */
+ /* { dg-final { scan-assembler-times "vreducess\[ \\t\]+\[^\{\n\]*\{sae\}\[^\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */
+ 
+ #include <immintrin.h>
+ 
+ #define IMM 123
+ 
+ volatile __m128 x1, x2, xx1, xx2;
+ volatile __mmask8 m;
+ 
+ void extern
+ avx512dq_test (void)
+ {
+   xx1 = _mm_reduce_round_ss (xx1, xx2, IMM, _MM_FROUND_NO_EXC);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/avx512fp16-vfpclassph-1c.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/avx512fp16-vfpclassph-1c.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/avx512fp16-vfpclassph-1c.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/avx512fp16-vfpclassph-1c.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,77 ----
+ /* { dg-do run } */
+ /* { dg-options "-O0 -mavx512fp16" } */
+ /* { dg-require-effective-target avx512fp16 } */
+ 
+ #define AVX512FP16
+ #include "avx512f-helper.h"
+ 
+ #include <math.h>
+ #include <limits.h>
+ #include <float.h>
+ #define SIZE (AVX512F_LEN / 16)
+ #include "avx512f-mask-type.h"
+ 
+ #ifndef __FPCLASSPH__
+ #define __FPCLASSPH__
+ int check_fp_class_hp (_Float16 src, int imm)
+ {
+   int qNaN_res = isnan (src);
+   int sNaN_res = isnan (src);
+   int Pzero_res = (src == 0.0);
+   int Nzero_res = (src == -0.0);
+   int PInf_res = (isinf (src) == 1);
+   int NInf_res = (isinf (src) == -1);
+   int Denorm_res = (fpclassify (src) == FP_SUBNORMAL);
+   int FinNeg_res = __builtin_finite (src) && (src < 0);
+ 
+   int result = (((imm & 1) && qNaN_res)
+ 		|| (((imm >> 1) & 1) && Pzero_res)
+ 		|| (((imm >> 2) & 1) && Nzero_res)
+ 		|| (((imm >> 3) & 1) && PInf_res)
+ 		|| (((imm >> 4) & 1) && NInf_res)
+ 		|| (((imm >> 5) & 1) && Denorm_res)
+ 		|| (((imm >> 6) & 1) && FinNeg_res)
+ 		|| (((imm >> 7) & 1) && sNaN_res));
+   return result;
+ }
+ #endif
+ 
+ MASK_TYPE
+ CALC (_Float16 *s1, int imm)
+ {
+   int i;
+   MASK_TYPE res = 0;
+ 
+   for (i = 0; i < SIZE; i++)
+     if (check_fp_class_hp(s1[i], imm))
+       res = res | (1 << i);
+ 
+   return res;
+ }
+ 
+ void
+ TEST (void)
+ {
+   int i;
+   UNION_TYPE (AVX512F_LEN, h) src;
+   MASK_TYPE res1, res2, res_ref = 0;
+   MASK_TYPE mask = MASK_VALUE;
+ 
+   src.a[SIZE - 1] = NAN;
+   src.a[SIZE - 2] = 1.0 / 0.0;
+   for (i = 0; i < SIZE - 2; i++)
+     {
+       src.a[i] = -24.43 + 0.6 * i;
+     }
+ 
+   res1 = INTRINSIC (_fpclass_ph_mask) (src.x, 0xFF);
+   res2 = INTRINSIC (_mask_fpclass_ph_mask) (mask, src.x, 0xFF);
+ 
+   res_ref = CALC (src.a, 0xFF);
+ 
+   if (res_ref != res1)
+     abort ();
+ 
+   if ((mask & res_ref) != res2)
+     abort ();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/avx512vl-valignq-1b.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/avx512vl-valignq-1b.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/avx512vl-valignq-1b.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/avx512vl-valignq-1b.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O0 -mavx512vl" } */
+ /* { dg-final { scan-assembler-times "valignq\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */
+ 
+ #include <immintrin.h>
+ 
+ volatile __m256i y;
+ volatile __m128i x;
+ volatile __mmask8 m;
+ 
+ void extern
+ avx512vl_test (void)
+ {
+   x = _mm_mask_alignr_epi64 (x, m, x, x, 1);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/bmi-pr116287.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/bmi-pr116287.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/bmi-pr116287.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/bmi-pr116287.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,28 ----
+ /* PR target/116287 */
+ /* { dg-do run { target bmi } } */
+ /* { dg-options "-O2 -mbmi" } */
+ 
+ #include <x86intrin.h>
+ 
+ #include "bmi-check.h"
+ 
+ static void
+ bmi_test ()
+ {
+   unsigned int a = 0;
+   if (__builtin_ia32_bextr_u32 (a++, 0) != 0)
+     abort ();
+   if (__builtin_ia32_bextr_u32 (a++, 0x120) != 0)
+     abort ();
+   if (a != 2)
+     abort ();
+ #ifdef __x86_64__
+   unsigned long long b = 0;
+   if (__builtin_ia32_bextr_u64 (b++, 0) != 0)
+     abort ();
+   if (__builtin_ia32_bextr_u64 (b++, 0x140) != 0)
+     abort ();
+   if (b != 2)
+     abort ();
+ #endif
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/bmi2-pr116287.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/bmi2-pr116287.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/bmi2-pr116287.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/bmi2-pr116287.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,24 ----
+ /* PR target/116287 */
+ /* { dg-do run { target bmi2 } } */
+ /* { dg-options "-O2 -mbmi2" } */
+ 
+ #include <x86intrin.h>
+ 
+ #include "bmi2-check.h"
+ 
+ static void
+ bmi2_test ()
+ {
+   unsigned int a = 0;
+   if (__builtin_ia32_bzhi_si (a++, 0) != 0)
+     abort ();
+   if (a != 1)
+     abort ();
+ #ifdef __x86_64__
+   unsigned long long b = 0;
+   if (__builtin_ia32_bzhi_di (b++, 0) != 0)
+     abort ();
+   if (b != 1)
+     abort ();
+ #endif
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/cmpccxadd-1b.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/cmpccxadd-1b.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/cmpccxadd-1b.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/cmpccxadd-1b.c	Thu Jun  5 16:03:00 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile { target { ! ia32 } } } */
+ /* { dg-options "-O0 -mcmpccxadd" } */
+ #include <x86gprintrin.h>
+ 
+ short *a;
+ int b, c;
+ int *d;
+ long long e, f;
+ 
+ void extern
+ cmpccxadd_test(void)
+ {
+   b = _cmpccxadd_epi32 (a, b, c, _CMPCCX_O); /* { dg-warning "incompatible pointer type" } */
+   e = _cmpccxadd_epi64 (d, e, f, _CMPCCX_O); /* { dg-warning "incompatible pointer type" } */
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/fma-pr116891.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/fma-pr116891.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/fma-pr116891.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/fma-pr116891.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,19 ----
+ /* PR middle-end/116891 */
+ /* { dg-do run } */
+ /* { dg-require-effective-target fenv } */
+ /* { dg-require-effective-target hard_float } */
+ /* { dg-require-effective-target c99_runtime } */
+ /* { dg-require-effective-target fma } */
+ /* { dg-options "-O2 -mfma -frounding-math" } */
+ 
+ #include <fenv.h>
+ #include "fma-check.h"
+ 
+ #define main() do_main ()
+ #include "../../gcc.dg/pr116891.c"
+ 
+ static void
+ fma_test (void)
+ {
+   do_main ();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/funcspec-56.inc gcc-13.4.0/gcc/testsuite/gcc.target/i386/funcspec-56.inc
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/funcspec-56.inc	Tue May 21 07:47:40 2024
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/funcspec-56.inc	Thu Jun  5 16:03:01 2025
*************** extern void test_arch_znver1 (void)
*** 221,226 ****
--- 221,227 ----
  extern void test_arch_znver2 (void)             __attribute__((__target__("arch=znver2")));
  extern void test_arch_znver3 (void)             __attribute__((__target__("arch=znver3")));
  extern void test_arch_znver4 (void)             __attribute__((__target__("arch=znver4")));
+ extern void test_arch_znver5 (void)             __attribute__((__target__("arch=znver5")));
  
  extern void test_tune_nocona (void)		__attribute__((__target__("tune=nocona")));
  extern void test_tune_core2 (void)		__attribute__((__target__("tune=core2")));
*************** extern void test_tune_znver1 (void)
*** 245,250 ****
--- 246,252 ----
  extern void test_tune_znver2 (void)             __attribute__((__target__("tune=znver2")));
  extern void test_tune_znver3 (void)             __attribute__((__target__("tune=znver3")));
  extern void test_tune_znver4 (void)             __attribute__((__target__("tune=znver4")));
+ extern void test_tune_znver5 (void)             __attribute__((__target__("tune=znver5")));
  
  extern void test_fpmath_sse (void)		__attribute__((__target__("sse2,fpmath=sse")));
  extern void test_fpmath_387 (void)		__attribute__((__target__("sse2,fpmath=387")));
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/pieces-memcpy-10.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/pieces-memcpy-10.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/pieces-memcpy-10.c	Tue May 21 07:47:40 2024
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/pieces-memcpy-10.c	Thu Jun  5 16:03:01 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -mno-avx2 -mavx -mtune=sandybridge" } */
  
  extern char *dst, *src;
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -mno-avx2 -mavx -mmove-max=128 -mstore-max=128 -mtune=sandybridge" } */
  
  extern char *dst, *src;
  
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/pieces-memcpy-22.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/pieces-memcpy-22.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/pieces-memcpy-22.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/pieces-memcpy-22.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile { target { ! ia32 } } } */
+ /* { dg-options "-O2 -mno-avx2 -mavx -mtune=generic" } */
+ 
+ extern char *dst, *src;
+ 
+ void
+ foo (void)
+ {
+   __builtin_memcpy (dst, src, 33);
+ }
+ 
+ /* { dg-final { scan-assembler-times "vmovdqu\[ \\t\]+\[^\n\]*%ymm" 2 } } */
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/pieces-memcpy-6.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/pieces-memcpy-6.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/pieces-memcpy-6.c	Tue May 21 07:47:40 2024
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/pieces-memcpy-6.c	Thu Jun  5 16:03:01 2025
***************
*** 1,5 ****
  /* { dg-do compile { target { ! ia32 } } } */
! /* { dg-options "-O2 -mno-avx2 -mavx -mtune=sandybridge" } */
  
  extern char *dst, *src;
  
--- 1,5 ----
  /* { dg-do compile { target { ! ia32 } } } */
! /* { dg-options "-O2 -mno-avx2 -mavx -mmove-max=128 -mstore-max=128 -mtune=sandybridge" } */
  
  extern char *dst, *src;
  
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/pieces-memset-38.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/pieces-memset-38.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/pieces-memset-38.c	Tue May 21 07:47:40 2024
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/pieces-memset-38.c	Thu Jun  5 16:03:01 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -mno-avx512f -mavx2 -mtune=sandybridge" } */
  
  extern char *dst;
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -mno-avx512f -mavx2 -mmove-max=128 -mstore-max=128 -mtune=sandybridge" } */
  
  extern char *dst;
  
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/pieces-memset-40.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/pieces-memset-40.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/pieces-memset-40.c	Tue May 21 07:47:40 2024
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/pieces-memset-40.c	Thu Jun  5 16:03:01 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -mno-avx512f -mavx2 -mtune=sandybridge" } */
  
  extern char *dst;
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -mno-avx512f -mavx2 -mmove-max=128 -mstore-max=128 -mtune=sandybridge" } */
  
  extern char *dst;
  
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/pieces-memset-41.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/pieces-memset-41.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/pieces-memset-41.c	Tue May 21 07:47:40 2024
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/pieces-memset-41.c	Thu Jun  5 16:03:01 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -mno-avx2 -mavx -mtune=sandybridge -mno-stackrealign" } */
  
  extern char *dst;
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -mno-avx2 -mavx -mmove-max=128 -mstore-max=128 -mtune=sandybridge -mno-stackrealign" } */
  
  extern char *dst;
  
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/pieces-memset-42.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/pieces-memset-42.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/pieces-memset-42.c	Tue May 21 07:47:40 2024
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/pieces-memset-42.c	Thu Jun  5 16:03:01 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -mno-avx2 -mavx -mtune=sandybridge" } */
  
  extern char *dst;
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -mno-avx2 -mavx -mmove-max=128 -mstore-max=128 -mtune=sandybridge" } */
  
  extern char *dst;
  
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/pieces-memset-43.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/pieces-memset-43.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/pieces-memset-43.c	Tue May 21 07:47:40 2024
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/pieces-memset-43.c	Thu Jun  5 16:03:01 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -mno-avx2 -mavx -mtune=sandybridge" } */
  
  extern char *dst;
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -mno-avx2 -mavx -mmove-max=128 -mstore-max=128 -mtune=sandybridge" } */
  
  extern char *dst;
  
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/pieces-memset-51.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/pieces-memset-51.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/pieces-memset-51.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/pieces-memset-51.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-avx2 -mavx -mtune=generic" } */
+ 
+ extern char *dst;
+ 
+ void
+ foo (int x)
+ {
+   __builtin_memset (dst, x, 64);
+ }
+ 
+ /* { dg-final { scan-assembler-times "vmovdqu\[ \\t\]+\[^\n\]*%ymm" 2 } } */
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/pieces-strcpy-2.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/pieces-strcpy-2.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/pieces-strcpy-2.c	Tue May 21 07:47:40 2024
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/pieces-strcpy-2.c	Thu Jun  5 16:03:01 2025
***************
*** 1,5 ****
  /* { dg-do compile { target { ! ia32 } } } */
! /* { dg-options "-O2 -mno-avx2 -mavx -mtune=sandybridge" } */
  
  extern char *strcpy (char *, const char *);
  
--- 1,5 ----
  /* { dg-do compile { target { ! ia32 } } } */
! /* { dg-options "-O2 -mno-avx2 -mavx -mmove-max=128 -mstore-max=128 -mtune=sandybridge" } */
  
  extern char *strcpy (char *, const char *);
  
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/pieces-strcpy-3.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/pieces-strcpy-3.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/pieces-strcpy-3.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/pieces-strcpy-3.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile { target { ! ia32 } } } */
+ /* { dg-options "-O2 -mno-avx2 -mavx -mtune=generic" } */
+ 
+ extern char *strcpy (char *, const char *);
+ 
+ void
+ foo (char *s)
+ {
+   strcpy (s,
+ 	  "1234567890abcdef123456abcdef5678123456abcdef567abcdef678"
+ 	  "1234567");
+ }
+ 
+ /* { dg-final { scan-assembler-times "vmovdqa\[ \\t\]+\[^\n\]*%ymm" 2 } } */
+ /* { dg-final { scan-assembler-times "vmovdqu\[ \\t\]+\[^\n\]*%ymm" 2 } } */
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/pr115568.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/pr115568.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/pr115568.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/pr115568.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,38 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2 -fno-tree-sink -fno-tree-ter -fschedule-insns" } */
+ 
+ int a, c, d = 1, e, f = 1, h, i, j;
+ unsigned b = 1, g;
+ int main() {
+   for (; h < 2; h++) {
+     int k = ~(b || 0), l = ((~e - j) ^ a % b) % k, m = (b ^ -1) + e;
+     unsigned o = ~a % ~1;
+     if (f) {
+       l = d;
+       m = 10;
+       i = e;
+       d = -(~e + b);
+       g = o % m;
+       e = -1;
+     n:
+       a = a % ~i;
+       b = ~k;
+       if (!g) {
+         b = e + o % -1;
+         continue;
+       }
+       if (!l)
+         break;
+     }
+     int q = (~d + g) << ~e, p = (~d - q) & a >> b;
+     unsigned s = ~((g & e) + (p | (b ^ (d + k))));
+     int r = (e & s) + p, u = d | ~a,
+         t = ((~(q + (~a + (s + e)))) & u) | (-g & (c << d ^ p));
+     if (t)
+       if (!r)
+         goto n;
+     g = m;
+     e = i;
+   }
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/pr115872.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/pr115872.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/pr115872.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/pr115872.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -g" } */
+ 
+ long set_work_pending_p;
+ _Bool set_work_pending() {
+   _Bool __trans_tmp_1;
+   long mask = 1, old = __atomic_fetch_or(&set_work_pending_p, mask, 0);
+   __trans_tmp_1 = old & mask;
+   return !__trans_tmp_1;
+ }
+ void __queue_work() {
+   _Bool ret = set_work_pending();
+   if (ret)
+     __queue_work();
+ }
+ 
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/pr116043.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/pr116043.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/pr116043.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/pr116043.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,33 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mavx512bf16 -O3" } */
+ /* { dg-final { scan-assembler-not {(?n)lea.*@gottpoff} } } */
+ 
+ extern __thread int a, c, i, j, k, l;
+ int *b;
+ struct d {
+   int e;
+ } f, g;
+ char *h;
+ 
+ void m(struct d *n) {
+   b = &k;
+   for (; n->e; b++, n--) {
+     i = b && a;
+     if (i)
+       j = c;
+   }
+ }
+ 
+ char *o(struct d *n) {
+   for (; n->e;)
+     return h;
+ }
+ 
+ int q() {
+   if (l)
+     return 1;
+   int p = *o(&g);
+   m(&f);
+   m(&g);
+   l = p;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/pr116512.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/pr116512.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/pr116512.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/pr116512.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,26 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=x86-64-v4 -O2" } */
+ /* { dg-final { scan-assembler-not "vzeroupper" { target { ! ia32 } } } } */
+ 
+ #include <immintrin.h>
+ 
+ struct B {
+   union {
+     __m512 f;
+     __m512i s;
+   };
+ };
+ 
+ struct B foo(int n) {
+   struct B res;
+   res.s = _mm512_set1_epi32(n);
+ 
+   return res;
+ }
+ 
+ __m512i bar(int n) {
+   struct B res;
+   res.s = _mm512_set1_epi32(n);
+ 
+   return res.s;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/pr116621.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/pr116621.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/pr116621.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/pr116621.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,43 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2" } */
+ 
+ #include <stdarg.h>
+ #include <string.h>
+ 
+ union S8302
+ {
+   union
+   {
+     double b;
+     int c;
+   } a;
+   long double d;
+   unsigned short int f[5];
+ };
+ 
+ union S8302 s8302;
+ extern void check8302va (int i, ...);
+ 
+ int
+ main (void)
+ {
+   memset (&s8302, '\0', sizeof (s8302));
+   s8302.a.b = -221438.250000;
+   check8302va (1, s8302);
+   return 0;
+ }
+ 
+ __attribute__((noinline, noclone))
+ void
+ check8302va (int z, ...)
+ {
+   union S8302 arg, *p;
+   va_list ap;
+ 
+   __builtin_va_start (ap, z);
+   p = &s8302;
+   arg = __builtin_va_arg (ap, union S8302);
+   if (p->a.b != arg.a.b)
+     __builtin_abort ();
+   __builtin_va_end (ap);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/pr116839.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/pr116839.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/pr116839.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/pr116839.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,48 ----
+ /* { dg-do compile { target { ! ia32 } } } */
+ /* { dg-require-effective-target maybe_x32 } */
+ /* { dg-options "-mx32 -O2 -fPIC -mtls-dialect=gnu2" } */
+ /* { dg-final { scan-assembler-not "cmpl\[ \t\]+%fs:previous_emax@dtpoff\\(%eax\\)" } } */
+ 
+ typedef long mpfr_prec_t;
+ typedef long mpfr_exp_t;
+ typedef struct {
+   mpfr_prec_t _mpfr_prec;
+ } __mpfr_struct;
+ typedef __mpfr_struct mpfr_t[1];
+ extern _Thread_local mpfr_exp_t __gmpfr_emax;
+ static _Thread_local mpfr_exp_t previous_emax;
+ static _Thread_local mpfr_t bound_emax;
+ extern const mpfr_t __gmpfr_const_log2_RNDD;
+ extern const mpfr_t __gmpfr_const_log2_RNDU;
+ 
+ typedef enum {
+   MPFR_RNDN=0,
+   MPFR_RNDZ,
+   MPFR_RNDU,
+   MPFR_RNDD,
+   MPFR_RNDA,
+   MPFR_RNDF,
+   MPFR_RNDNA=-1
+ } mpfr_rnd_t;
+ typedef __mpfr_struct *mpfr_ptr;
+ typedef const __mpfr_struct *mpfr_srcptr;
+ void mpfr_mul (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
+ 
+ void
+ foo (void)
+ {
+   mpfr_exp_t saved_emax;
+ 
+   if (__gmpfr_emax != previous_emax)
+     {
+       saved_emax = __gmpfr_emax;
+ 
+       bound_emax->_mpfr_prec = 32;
+ 
+       mpfr_mul (bound_emax, saved_emax < 0 ?
+                 __gmpfr_const_log2_RNDD : __gmpfr_const_log2_RNDU,
+                 MPFR_RNDU);
+       previous_emax = saved_emax;
+       __gmpfr_emax = saved_emax;
+     }
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/pr116962.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/pr116962.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/pr116962.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/pr116962.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,10 ----
+ /* { dg-do compile { target fstack_protector } } */
+ /* { dg-options "-O2 -fstack-protector-all" } */
+ /* { dg-final { scan-assembler-not "__stack_chk_fail" } } */
+ 
+ __attribute__ ((naked))
+ void
+ foo (void)
+ {
+   asm ("ret");
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/pr117116.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/pr117116.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/pr117116.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/pr117116.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,18 ----
+ /* PR target/117116 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mavx2" } */
+ 
+ typedef void (*StmFct)();
+ typedef struct {
+   StmFct fct_getc;
+   StmFct fct_putc;
+   StmFct fct_flush;
+   StmFct fct_close;
+ } StmInf;
+ 
+ StmInf TTY_Getc_pstm;
+ 
+ void TTY_Getc() {
+   TTY_Getc_pstm.fct_getc = TTY_Getc;
+   TTY_Getc_pstm.fct_putc = TTY_Getc_pstm.fct_flush = TTY_Getc_pstm.fct_close = (StmFct)1;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/pr117159.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/pr117159.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/pr117159.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/pr117159.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,42 ----
+ /* { dg-do run } */
+ /* { dg-options "-Os -mavx512bw" } */
+ /* { dg-require-effective-target avx512bw } */
+ 
+ typedef __attribute__((__vector_size__ (4))) unsigned char W;
+ typedef __attribute__((__vector_size__ (64))) int V;
+ typedef __attribute__((__vector_size__ (64))) long long Vq;
+ 
+ W w;
+ V v;
+ Vq vq;
+ 
+ static inline W
+ foo (short m)
+ {
+   unsigned k = __builtin_ia32_pcmpgtq512_mask ((Vq) { }, vq, m);
+   W r = (W) k + w;
+   return r;
+ }
+ 
+ static inline W
+ foo1 (short m)
+ {
+   unsigned k = __builtin_ia32_pcmpgtd512_mask ((V) {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, v, m);
+   W r = (W) k + w;
+   return r;
+ }
+ 
+ int
+ main ()
+ {
+   if (!__builtin_cpu_supports ("avx512bw"))
+     return 0;
+   W y = foo1 (65535);
+   if (!y[0] || !y[1] || y[2] || y[3])
+     __builtin_abort();
+   W x = foo (65535);
+   if (x[0] || x[1] || x[2] || x[3])
+     __builtin_abort();
+ 
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/pr117240_avx.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/pr117240_avx.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/pr117240_avx.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/pr117240_avx.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,10 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mvaes -mno-xsave -Wno-psabi -Wno-implicit-function-declaration" } */
+ 
+ typedef __attribute__((__vector_size__(32))) char V;
+ 
+ V
+ foo(V v)
+ {
+   return __builtin_ia32_vaesenc_v32qi(v, v);/* { dg-error "incompatible types when returning" } */
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/pr117240_avx512f.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/pr117240_avx512f.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/pr117240_avx512f.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/pr117240_avx512f.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,10 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mvaes -mno-xsave -Wno-psabi  -Wno-implicit-function-declaration" } */
+ 
+ typedef __attribute__((__vector_size__(64))) char V;
+ 
+ V
+ foo(V v)
+ {
+   return __builtin_ia32_vaesenc_v64qi(v, v);/* { dg-error "incompatible types when returning" } */
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/pr117296.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/pr117296.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/pr117296.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/pr117296.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,12 ----
+ /* PR target/117296 */
+ /* { dg-do compile } */
+ /* { dg-options "-O1" } */
+ /* { dg-additional-options "-mtune=k6 -mstringop-strategy=libcall -ffloat-store" { target ia32 } } */
+ 
+ int x;
+ 
+ void
+ foo (_Complex double c)
+ {
+  lab:;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/pr117318.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/pr117318.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/pr117318.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/pr117318.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mavx512f -O" } */
+ 
+ typedef __attribute__((__vector_size__ (64))) long long V;
+ unsigned long long x;
+ 
+ unsigned long long
+ foo()
+ {
+   __builtin_ia32_pmovusqb512mem_mask (&x, (V){8000000000000000}, 255);
+   return x;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/pr117357.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/pr117357.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/pr117357.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/pr117357.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,7 ----
+ /* { dg-do compile } */
+ /* { dg-options "-msse -mfpmath=387" } */
+ 
+ float foo (float f)
+ {
+   return __builtin_ia32_rsqrtf (f);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/pr117418-1.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/pr117418-1.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/pr117418-1.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/pr117418-1.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,24 ----
+ /* PR target/117418 */
+ /* { dg-do compile { target { ! ia32 } } } */
+ /* { dg-options "-maddress-mode=long -mwidekl -mx32" } */
+ /* { dg-require-effective-target maybe_x32  } */
+ /* { dg-final { scan-assembler-times "aesdec128kl" 1 } } */
+ /* { dg-final { scan-assembler-times "aesdec256kl" 1 } } */
+ /* { dg-final { scan-assembler-times "aesenc128kl" 1 } } */
+ /* { dg-final { scan-assembler-times "aesenc256kl" 1 } } */
+ /* { dg-final { scan-assembler-times "encodekey128" 1 } } */
+ /* { dg-final { scan-assembler-times "encodekey256" 1 } } */
+ 
+ typedef __attribute__((__vector_size__(16))) long long V;
+ V a;
+ 
+ void
+ foo()
+ {
+     __builtin_ia32_aesdec128kl_u8 (&a, a, &a);
+     __builtin_ia32_aesdec256kl_u8 (&a, a, &a);
+     __builtin_ia32_aesenc128kl_u8 (&a, a, &a);
+     __builtin_ia32_aesenc256kl_u8 (&a, a, &a);
+     __builtin_ia32_encodekey128_u32 (0, a, &a); 
+     __builtin_ia32_encodekey256_u32 (0, a, a, &a); 
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/pr117432.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/pr117432.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/pr117432.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/pr117432.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,17 ----
+ /* PR ipa/117432 */
+ /* { dg-do compile { target lp64 } } */
+ /* { dg-options "-O2" } */
+ /* { dg-final { scan-assembler "# myinsn %rax" } } */
+ /* { dg-final { scan-assembler "# myinsn %eax" } } */
+ 
+ void
+ foo (void)
+ {
+   asm volatile ("# myinsn %0" : : "r" (-42L));
+ }
+ 
+ void
+ bar (void)
+ {
+   asm volatile ("# myinsn %0" : : "r" (-42));
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/pr118739.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/pr118739.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/pr118739.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/pr118739.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,50 ----
+ /* PR rtl-optimization/118739 */
+ /* { dg-do run } */
+ /* { dg-options "-O3 -fno-tree-forwprop -fno-tree-vrp" } */
+ 
+ volatile int a;
+ int b, c, d = 1, e, f, g;
+ 
+ int h (void)
+ {
+   int i = 1;
+ 
+  j:
+   for (b = 1; b; b--)
+     {
+       asm ("#");
+ 
+       g = 0;
+ 
+       for (; g <= 1; g++)
+ 	{
+ 	  int k = f = 0;
+ 
+ 	  for (; f <= 1; f++)
+ 	    k = (1 == i) >= k || ((d = 0) >= a) + k;
+ 	}
+     }
+ 
+   for (; i < 3; i++)
+     {
+       if (!c)
+ 	return g;
+ 
+       if (e)
+ 	goto j;
+ 
+       asm ("#");
+     }
+ 
+   return 0;
+ }
+ 
+ int main()
+ {
+   h();
+ 
+   if (d != 1)
+     __builtin_abort();
+ 
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/pr118776.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/pr118776.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/pr118776.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/pr118776.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,23 ----
+ /* PR target/118776 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mavx512bw -mavx512vl" } */
+ 
+ void bar (unsigned char *);
+ 
+ void
+ foo (unsigned char *x)
+ {
+   unsigned char b[32];
+   bar (b);
+   for (int i = 0; i < 32; i++)
+     {
+       unsigned char c = 8;
+       if (i > 3)
+ 	{
+ 	  unsigned char d = b[i];
+ 	  d = 1 > d ? 1 : d;
+ 	  c = d;
+ 	}
+       x[i] = c;
+     }
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/pr87984.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/pr87984.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/pr87984.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/pr87984.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,23 ----
+ /* { dg-do run } */
+ /* { dg-options "-O" } */
+ 
+ __attribute__((noipa))
+ int f(void)
+ {
+   int o = 0;
+   for (int i = 0; i < 3; i++)
+     {
+       register int a asm("eax");
+       a = 1;
+       asm("add %1, %0" : "+r"(o) : "r"(a));
+       asm("xor %%eax, %%eax" ::: "eax");
+     }
+   return o;
+ }
+ 
+ int main()
+ {
+   if (f() != 3)
+     __builtin_abort();
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/prefetchi-1.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/prefetchi-1.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/prefetchi-1.c	Tue May 21 07:47:40 2024
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/prefetchi-1.c	Thu Jun  5 16:03:01 2025
***************
*** 1,7 ****
  /* { dg-do compile { target { ! ia32 } } } */
  /* { dg-options "-mprefetchi -O2" } */
! /* { dg-final { scan-assembler-times "\[ \\t\]+prefetchit0\[ \\t\]+" 2 } } */
! /* { dg-final { scan-assembler-times "\[ \\t\]+prefetchit1\[ \\t\]+" 2 } } */
  
  #include <x86intrin.h>
  
--- 1,7 ----
  /* { dg-do compile { target { ! ia32 } } } */
  /* { dg-options "-mprefetchi -O2" } */
! /* { dg-final { scan-assembler-times "\[ \\t\]+prefetchit0\[ \\t\]+bar\\(%rip\\)" 2 } } */
! /* { dg-final { scan-assembler-times "\[ \\t\]+prefetchit1\[ \\t\]+bar\\(%rip\\)" 2 } } */
  
  #include <x86intrin.h>
  
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/prefetchi-1b.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/prefetchi-1b.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/prefetchi-1b.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/prefetchi-1b.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,26 ----
+ /* { dg-do compile { target { ! ia32 } } } */
+ /* { dg-options "-mprefetchi -O0" } */
+ /* { dg-final { scan-assembler-times "\[ \\t\]+prefetchit0\[ \\t\]+bar\\(%rip\\)" 1 } } */
+ /* { dg-final { scan-assembler-times "\[ \\t\]+prefetchit1\[ \\t\]+bar\\(%rip\\)" 1 } } */
+ 
+ #include <x86intrin.h>
+ 
+ int
+ bar (int a)
+ {
+   return a + 1;
+ }
+ 
+ int
+ foo1 (int b)
+ {
+   _m_prefetchit0 (bar);
+   return bar (b) + 1;
+ }
+ 
+ int
+ foo2 (int b)
+ {
+   _m_prefetchit1 (bar);
+   return bar (b) + 1;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/sse-pr116738.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/sse-pr116738.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/sse-pr116738.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/sse-pr116738.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,28 ----
+ /* PR target/116738 */
+ /* { dg-do run } */
+ /* { dg-options "-O2 -msse" } */
+ /* { dg-require-effective-target sse } */
+ 
+ #include "sse-check.h"
+ 
+ static inline float
+ clamp (float f)
+ {
+   __m128 v = _mm_set_ss (f);
+   __m128 zero = _mm_setzero_ps ();
+   __m128 greatest = _mm_set_ss (__FLT_MAX__);
+   v = _mm_min_ss (v, greatest);
+   v = _mm_max_ss (v, zero);
+   return _mm_cvtss_f32 (v);
+ }
+ 
+ static void
+ sse_test (void)
+ {
+   float f = clamp (-0.0f);
+   if (f != 0.0f || __builtin_signbitf (f))
+     abort ();
+   f = clamp (__builtin_nanf (""));
+   if (__builtin_isnanf (f) || f != __FLT_MAX__)
+     abort ();
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/sse_movcc_use_blendv.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/sse_movcc_use_blendv.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/sse_movcc_use_blendv.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/sse_movcc_use_blendv.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=sierraforest -O2" } */
+ /* { dg-final { scan-assembler-not {(?n)vp?blendv(b|ps|pd)} } } */
+ 
+ void
+ foo (int* a, int* b, int* __restrict c)
+ {
+   for (int i = 0; i != 200; i++)
+     {
+       c[i] += a[i] > b[i] ? 1 : -1;
+     }
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/i386/tbm-pr116287.c gcc-13.4.0/gcc/testsuite/gcc.target/i386/tbm-pr116287.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/i386/tbm-pr116287.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/i386/tbm-pr116287.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,29 ----
+ /* PR target/116287 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mtbm -fdump-tree-optimized" } */
+ /* { dg-final { scan-tree-dump-not "link_error \\\(\\\);" "optimized" } } */
+ 
+ #include <x86intrin.h>
+ 
+ extern void link_error (void);
+ 
+ void
+ tbm_test ()
+ {
+   unsigned int a = 0;
+   if (__builtin_ia32_bextri_u32 (a++, 0) != 0)
+     link_error ();
+   if (__builtin_ia32_bextri_u32 (a++, 0x120) != 0)
+     link_error ();
+   if (a != 2)
+     link_error ();
+ #ifdef __x86_64__
+   unsigned long long b = 0;
+   if (__builtin_ia32_bextr_u64 (b++, 0) != 0)
+     link_error ();
+   if (__builtin_ia32_bextr_u64 (b++, 0x140) != 0)
+     link_error ();
+   if (b != 2)
+     link_error ();
+ #endif
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/loongarch/pr115752.c gcc-13.4.0/gcc/testsuite/gcc.target/loongarch/pr115752.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/loongarch/pr115752.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/loongarch/pr115752.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ 
+ long double
+ test (long double xx)
+ {
+    __asm ("" :: "f"(xx)); /* { dg-error "inconsistent operand constraints in an 'asm'" } */
+    return xx + 1;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/powerpc/mma-builtin-error.c gcc-13.4.0/gcc/testsuite/gcc.target/powerpc/mma-builtin-error.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/powerpc/mma-builtin-error.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/powerpc/mma-builtin-error.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-require-effective-target power10_ok } */
+ /* { dg-options "-O2 -mdejagnu-cpu=power10" } */
+ 
+ typedef unsigned char vec_t __attribute__((vector_size(16)));
+ 
+ void
+ foo (__vector_quad *dst, vec_t vec0, vec_t vec1) /* { dg-error "argument 5 must be a literal between 0 and 15, inclusive" } */
+ {
+   __builtin_mma_pmxvi8ger4 (dst, vec0, vec1, 15, 15, -1);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/powerpc/pr106069-1.c gcc-13.4.0/gcc/testsuite/gcc.target/powerpc/pr106069-1.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/powerpc/pr106069-1.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/powerpc/pr106069-1.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,39 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2" } */
+ /* { dg-require-effective-target vmx_hw } */
+ 
+ /* Test vector merge for 8-bit element size,
+    it will abort if the RTL pattern isn't expected.  */
+ 
+ #include "altivec.h"
+ 
+ __attribute__((noipa))
+ signed char elem_6 (vector signed char a, vector signed char b)
+ {
+   vector signed char c = vec_mergeh (a,b);
+   return vec_extract (c, 6);
+ }
+ 
+ __attribute__((noipa))
+ unsigned char elem_15 (vector unsigned char a, vector unsigned char b)
+ {
+   vector unsigned char c = vec_mergel (a,b);
+   return vec_extract (c, 15);
+ }
+ 
+ int
+ main ()
+ {
+   vector unsigned char v1
+     = {3, 33, 22, 12, 34, 14, 5, 25, 30, 11, 0, 21, 17, 27, 38, 8};
+   vector unsigned char v2
+     = {81, 82, 83, 84, 68, 67, 66, 65, 99, 100, 101, 102, 250, 125, 0, 6};
+   signed char x1 = elem_6 ((vector signed char) v1, (vector signed char) v2);
+   unsigned char x2 = elem_15 (v1, v2);
+ 
+   if (x1 != 12 || x2 != 6)
+     __builtin_abort ();
+ 
+   return 0;
+ }
+ 
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/powerpc/pr106069-2.c gcc-13.4.0/gcc/testsuite/gcc.target/powerpc/pr106069-2.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/powerpc/pr106069-2.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/powerpc/pr106069-2.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,37 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2" } */
+ /* { dg-require-effective-target vmx_hw } */
+ 
+ /* Test vector merge for 16-bit element size,
+    it will abort if the RTL pattern isn't expected.  */
+ 
+ #include "altivec.h"
+ 
+ __attribute__((noipa))
+ signed short elem_2 (vector signed short a, vector signed short b)
+ {
+   vector signed short c = vec_mergeh (a,b);
+   return vec_extract (c, 2);
+ }
+ 
+ __attribute__((noipa))
+ unsigned short elem_7 (vector unsigned short a, vector unsigned short b)
+ {
+   vector unsigned short c = vec_mergel (a,b);
+   return vec_extract (c, 7);
+ }
+ 
+ int
+ main ()
+ {
+   vector unsigned short v1 = {3, 22, 12, 34, 5, 25, 30, 11};
+   vector unsigned short v2 = {84, 168, 267, 966, 65, 399, 999, 99};
+   signed short x1 = elem_2 ((vector signed short) v1, (vector signed short) v2);
+   unsigned short x2 = elem_7 (v1, v2);
+ 
+   if (x1 != 22 || x2 != 99)
+     __builtin_abort ();
+ 
+   return 0;
+ }
+ 
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/powerpc/pr114759-2.c gcc-13.4.0/gcc/testsuite/gcc.target/powerpc/pr114759-2.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/powerpc/pr114759-2.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/powerpc/pr114759-2.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mdejagnu-cpu=power8 -mrop-protect" } */
+ /* { dg-require-effective-target rop_ok } Only enable on supported ABIs.  */
+ 
+ /* Verify we generate ROP-protect hash insns when compiling for Power8.  */
+ 
+ extern void foo (void);
+ 
+ int
+ bar (void)
+ {
+   foo ();
+   return 5;
+ }
+ 
+ /* { dg-final { scan-assembler-times {\mhashst\M} 1 } } */
+ /* { dg-final { scan-assembler-times {\mhashchk\M} 1 } } */
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/powerpc/pr114759-3.c gcc-13.4.0/gcc/testsuite/gcc.target/powerpc/pr114759-3.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/powerpc/pr114759-3.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/powerpc/pr114759-3.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,21 ----
+ /* PR target/114759 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mdejagnu-cpu=power7 -mrop-protect" } */
+ 
+ /* Verify we emit an error if we use -mrop-protect with an unsupported cpu
+    or ABI.  */
+ 
+ extern void foo (void);
+ 
+ int
+ bar (void)
+ {
+   foo ();
+   return 5;
+ }
+ 
+ /* The correct line number is in the preamble to the error message, not
+    in the final line (which is all that dg-error inspects). Hence, we have
+    to tell dg-error to ignore the line number.  */
+ /* { dg-error "'-mrop-protect' requires '-mcpu=power8'" "PR114759" { target *-*-* } 0 } */
+ /* { dg-error "'-mrop-protect' requires the ELFv2 ABI" "PR114759" { target { ! rop_ok } } 0 } */
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/powerpc/pr114846.c gcc-13.4.0/gcc/testsuite/gcc.target/powerpc/pr114846.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/powerpc/pr114846.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/powerpc/pr114846.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,20 ----
+ /* { dg-do run } */
+ /* { dg-require-effective-target builtin_eh_return } */
+ 
+ /* Ensure it runs successfully.  */
+ 
+ __attribute__ ((noipa))
+ int f (int *a, long offset, void *handler)
+ {
+   if (*a == 5)
+     return 5;
+   __builtin_eh_return (offset, handler);
+ }
+ 
+ int main ()
+ {
+   int t = 5;
+   if (f (&t, 0, 0) != 5)
+     __builtin_abort ();
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/powerpc/pr115355.c gcc-13.4.0/gcc/testsuite/gcc.target/powerpc/pr115355.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/powerpc/pr115355.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/powerpc/pr115355.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,37 ----
+ /* { dg-do run } */
+ /* { dg-require-effective-target p9vector_hw } */
+ /* Force vectorization with -fno-vect-cost-model to have vector unpack
+    which exposes the issue in PR115355.  */
+ /* { dg-options "-O2 -mdejagnu-cpu=power9 -fno-vect-cost-model" } */
+ 
+ /* Verify it runs successfully.  */
+ 
+ __attribute__((noipa))
+ void setToIdentityGOOD(unsigned long long *mVec, unsigned int mLen)
+ {
+   #pragma GCC novector
+   for (unsigned int i = 0; i < mLen; i++)
+     mVec[i] = i;
+ }
+ 
+ __attribute__((noipa))
+ void setToIdentityBAD(unsigned long long *mVec, unsigned int mLen)
+ {
+   for (unsigned int i = 0; i < mLen; i++)
+     mVec[i] = i;
+ }
+ 
+ unsigned long long vec1[100];
+ unsigned long long vec2[100];
+ 
+ int main()
+ {
+   unsigned int l = 29;
+   setToIdentityGOOD (vec1, 29);
+   setToIdentityBAD (vec2, 29);
+ 
+   if (__builtin_memcmp (vec1, vec2, l * sizeof (vec1[0])) != 0)
+     __builtin_abort ();
+ 
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/powerpc/pr115389.c gcc-13.4.0/gcc/testsuite/gcc.target/powerpc/pr115389.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/powerpc/pr115389.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/powerpc/pr115389.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,17 ----
+ /* PR target/115389 */
+ /* { dg-do assemble } */
+ /* { dg-options "-O2 -mdejagnu-cpu=power10 -mrop-protect -mno-vsx -mno-altivec -mabi=no-altivec -save-temps" } */
+ /* { dg-require-effective-target rop_ok } */
+ 
+ /* Verify we do not emit invalid offsets for our ROP insns.  */
+ 
+ extern void foo (void);
+ long
+ bar (void)
+ {
+   foo ();
+   return 0;
+ }
+ 
+ /* { dg-final { scan-assembler-times {\mhashst\M} 1 } } */
+ /* { dg-final { scan-assembler-times {\mhashchk\M} 1 } } */
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/powerpc/pr116415.c gcc-13.4.0/gcc/testsuite/gcc.target/powerpc/pr116415.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/powerpc/pr116415.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/powerpc/pr116415.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,42 ----
+ /* { dg-do run } */
+ /* { dg-require-effective-target p8vector_hw } */
+ /* { dg-require-effective-target int128 } */
+ /* { dg-options "-O2 -mdejagnu-cpu=power8" } */
+ 
+ /* PR 116415: Verify our Power8 swap optimization pass doesn't incorrectly swap
+    PTImode values.  They should be handled identically to TImode values.  */
+ 
+ #include <stdio.h>
+ #include <stdint.h>
+ #include <stdlib.h>
+ 
+ typedef union {
+   struct {
+     uint64_t a;
+     uint64_t b;
+   } t;
+   __uint128_t data;
+ } Value;
+ Value value, next;
+ 
+ void
+ bug (Value *val, Value *nxt)
+ {
+   for (;;) {
+     nxt->t.a = val->t.a + 1;
+     nxt->t.b = val->t.b + 2;
+     if (__atomic_compare_exchange (&val->data, &val->data, &nxt->data,
+ 				   0, __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE))
+       break;
+   }
+ }
+ 
+ int
+ main (void)
+ {
+   bug (&value, &next);
+   printf ("%lu %lu\n", value.t.a, value.t.b);
+   if (value.t.a != 1 || value.t.b != 2)
+     abort ();
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/powerpc/pr97367.c gcc-13.4.0/gcc/testsuite/gcc.target/powerpc/pr97367.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/powerpc/pr97367.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/powerpc/pr97367.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,13 ----
+ /* PR target/97367 */
+ /* { dg-options "-mdejagnu-cpu=G5" } */
+ 
+ /* Verify we emit a ".machine power4" and ".machine altivec" rather
+    than a ".machine power7".  */
+ 
+ int dummy (void)
+ {
+   return 0;
+ }
+ 
+ /* { dg-final { scan-assembler {\.machine power4\M} } } */
+ /* { dg-final { scan-assembler {\.machine altivec\M} } } */
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/riscv/pr116720.c gcc-13.4.0/gcc/testsuite/gcc.target/riscv/pr116720.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/riscv/pr116720.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/riscv/pr116720.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -march=rv32ixtheadmempair -mabi=ilp32 -mno-strict-align" } */
+ 
+ struct a {
+   signed : 22;
+ };
+ volatile short b;
+ int *c;
+ void d(int e, struct a) {
+   b;
+   c = &e;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/riscv/zba-shNadd-09.c gcc-13.4.0/gcc/testsuite/gcc.target/riscv/zba-shNadd-09.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/riscv/zba-shNadd-09.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/riscv/zba-shNadd-09.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc_zba -mabi=lp64" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" "-Og" } } */
+ 
+ long long sub (unsigned long long a, unsigned long long b)
+ {
+   b = (b << 50) >> 49;
+   unsigned int x = a + b;
+   return x;
+ }
+ 
+ /* { dg-final { scan-assembler-not {\msh1add} } } */
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/riscv/zba-shNadd-10.c gcc-13.4.0/gcc/testsuite/gcc.target/riscv/zba-shNadd-10.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/riscv/zba-shNadd-10.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/riscv/zba-shNadd-10.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do run { target { rv64 } } } */
+ /* { dg-options "-march=rv64gc_zba -mabi=lp64d -O2" } */
+ 
+ struct {
+   unsigned a : 14;
+   unsigned b : 3;
+ } c;
+ 
+ unsigned long long d;
+ void e (unsigned long long *f, long p2) { *f = p2; }
+ signed g;
+ long i;
+ 
+ int main () {
+   c.b = 4;
+   i = -(-c.a - (3023282U + c.a + g));
+   e (&d, i);
+   if (d != 3023282)
+     __builtin_abort ();
+   __builtin_exit (0);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/s390/pr115860-1.c gcc-13.4.0/gcc/testsuite/gcc.target/s390/pr115860-1.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/s390/pr115860-1.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/s390/pr115860-1.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,26 ----
+ /* { dg-do run } */
+ /* { dg-require-effective-target s390_vxe } */
+ /* { dg-options "-O2 -march=z14 -mzarch" } */
+ 
+ __attribute__ ((noipa))
+ long long trunctf (long double x)
+ {
+   /* Ensure via ++x that x is in a register.  */
+   ++x;
+   return x;
+ }
+ 
+ __attribute__ ((noipa))
+ long long trunctf_from_mem (long double x)
+ {
+   return x;
+ }
+ 
+ int main (void)
+ {
+   if (trunctf (0x7ffffffffffffffeLL) != 0x7fffffffffffffffLL)
+     __builtin_abort ();
+   if (trunctf_from_mem (0x7fffffffffffffffLL) != 0x7fffffffffffffffLL)
+     __builtin_abort ();
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/s390/pr118835.c gcc-13.4.0/gcc/testsuite/gcc.target/s390/pr118835.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/s390/pr118835.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/s390/pr118835.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile { target int128 } } */
+ /* { dg-options "-O2" } */
+ 
+ /* During combine we may end up with patterns of the form
+ 
+    (set (reg:DI 66 [ _6 ])
+         (ashift:DI (reg:DI 72 [ x ])
+                    (subreg:QI (and:TI (reg:TI 67 [ _1 ])
+                                       (const_wide_int 0x0aaaaaaaaaaaaaabf))
+                               15)))
+ 
+    which should be rejected since the shift count does not trivially fit the
+    scheme of address operands.  */
+ 
+ long
+ test (long x, int y)
+ {
+   __int128 z = 0xAAAAAAAAAAAAAABF;
+   z &= y;
+   return x << z;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/s390/vector/long-double-asm-abi.c gcc-13.4.0/gcc/testsuite/gcc.target/s390/vector/long-double-asm-abi.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/s390/vector/long-double-asm-abi.c	Tue May 21 07:47:40 2024
--- gcc-13.4.0/gcc/testsuite/gcc.target/s390/vector/long-double-asm-abi.c	Thu Jun  5 16:03:01 2025
*************** xsqrt (long double x)
*** 14,20 ****
  
  /* Check that the generated code is very small and straightforward.  In
     particular, there must be no unnecessary copying and no stack frame.  */
! /* { dg-final { scan-assembler {\n\tld\t[^\n]*\n\tld\t[^\n]*\n(#[^\n]*\n)*\tsqxbr\t.*\n(#[^\n]*\n)*\tstd\t[^\n]*\n\tstd\t[^\n]*\n\tbr\t%r14\n} } } */
  
  int
  main (void)
--- 14,20 ----
  
  /* Check that the generated code is very small and straightforward.  In
     particular, there must be no unnecessary copying and no stack frame.  */
! /* { dg-final { scan-assembler {\n\tld\t[^\n]*;ld\t[^\n]*\n(#[^\n]*\n)*\tsqxbr\t.*\n(#[^\n]*\n)*\tstd\t[^\n]*\n\tstd\t[^\n]*\n\tbr\t%r14\n} } } */
  
  int
  main (void)
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/s390/vector/long-double-to-i64.c gcc-13.4.0/gcc/testsuite/gcc.target/s390/vector/long-double-to-i64.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/s390/vector/long-double-to-i64.c	Tue May 21 07:47:40 2024
--- gcc-13.4.0/gcc/testsuite/gcc.target/s390/vector/long-double-to-i64.c	Thu Jun  5 16:03:01 2025
*************** long_double_to_i64 (long double x)
*** 10,17 ****
    return x;
  }
  
- /* { dg-final { scan-assembler-times {\n\tvpdi\t%v\d+,%v\d+,%v\d+,1\n} 1 } } */
- /* { dg-final { scan-assembler-times {\n\tvpdi\t%v\d+,%v\d+,%v\d+,5\n} 1 } } */
  /* { dg-final { scan-assembler-times {\n\tcgxbr\t} 1 } } */
  
  int
--- 10,15 ----
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gcc.target/s390/zvector/pr114676.c gcc-13.4.0/gcc/testsuite/gcc.target/s390/zvector/pr114676.c
*** gcc-13.3.0/gcc/testsuite/gcc.target/s390/zvector/pr114676.c	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gcc.target/s390/zvector/pr114676.c	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,19 ----
+ /* { dg-do run { target { s390*-*-* } } } */
+ /* { dg-options "-O3 -mzarch -march=z14 -mzvector" } */
+ 
+ #include <vecintrin.h>
+ 
+ void __attribute__((noinline)) foo (int *mem)
+ {
+   vec_xst ((vector float){ 1.0f, 2.0f, 3.0f, 4.0f }, 0, (float*)mem);
+ }
+ 
+ int
+ main ()
+ {
+   int m[4] = { 0 };
+   foo (m);
+   if (m[3] == 0)
+     __builtin_abort ();
+   return 0;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gdc.dg/debug/dwarf2/pr118309.d gcc-13.4.0/gcc/testsuite/gdc.dg/debug/dwarf2/pr118309.d
*** gcc-13.3.0/gcc/testsuite/gdc.dg/debug/dwarf2/pr118309.d	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gdc.dg/debug/dwarf2/pr118309.d	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,36 ----
+ // { dg-do compile }
+ // { dg-options "-fno-druntime -gdwarf-4 -dA -fno-merge-debug-strings" }
+ // { dg-final { scan-assembler-times "DIE\[^\n\r\]*DW_TAG_enumeration_type" 1 } }
+ // { dg-final { scan-assembler-times " DW_AT_enum_class" 1 } }
+ // { dg-final { scan-assembler-times "\"E..\"\[^\n\]*DW_AT_name" 1 } }
+ // { dg-final { scan-assembler-times "\"E1..\"\[^\n\]*DW_AT_name" 1 } }
+ // { dg-final { scan-assembler-times "\"C1..\"\[^\n\]*DW_AT_name" 1 } }
+ // { dg-final { scan-assembler-times "\"C2..\"\[^\n\]*DW_AT_name" 1 } }
+ // { dg-final { scan-assembler-times "\"C3..\"\[^\n\]*DW_AT_name" 1 } }
+ // { dg-final { scan-assembler-times "\"C4..\"\[^\n\]*DW_AT_name" 1 } }
+ // { dg-final { scan-assembler-times "\"S1..\"\[^\n\]*DW_AT_name" 1 } }
+ 
+ module expression;
+ extern (C++):
+ class C1
+ {
+     bool bfn() { return true; }
+ }
+ class C2 : C1
+ {
+     C4 cfn() { return null; }
+ }
+ class C3 : C2
+ {
+     S1.E s;
+ }
+ class C4 : C3
+ {
+     S1 s;
+ }
+ struct S1
+ {
+     enum E : ubyte { E1 }
+     E e;
+     C3 c;
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gdc.dg/debug/imports/m119817/a.d gcc-13.4.0/gcc/testsuite/gdc.dg/debug/imports/m119817/a.d
*** gcc-13.3.0/gcc/testsuite/gdc.dg/debug/imports/m119817/a.d	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gdc.dg/debug/imports/m119817/a.d	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,2 ----
+ module imports.m119817.a;
+ void f119817()() { }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gdc.dg/debug/imports/m119817/b.d gcc-13.4.0/gcc/testsuite/gdc.dg/debug/imports/m119817/b.d
*** gcc-13.3.0/gcc/testsuite/gdc.dg/debug/imports/m119817/b.d	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gdc.dg/debug/imports/m119817/b.d	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,2 ----
+ module imports.m119817.b;
+ void f119817() { }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gdc.dg/debug/imports/m119817/package.d gcc-13.4.0/gcc/testsuite/gdc.dg/debug/imports/m119817/package.d
*** gcc-13.3.0/gcc/testsuite/gdc.dg/debug/imports/m119817/package.d	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gdc.dg/debug/imports/m119817/package.d	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,4 ----
+ module imports.m119817;
+ public import
+     imports.m119817.a,
+     imports.m119817.b;
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gdc.dg/debug/imports/pr119826b.d gcc-13.4.0/gcc/testsuite/gdc.dg/debug/imports/pr119826b.d
*** gcc-13.3.0/gcc/testsuite/gdc.dg/debug/imports/pr119826b.d	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gdc.dg/debug/imports/pr119826b.d	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,14 ----
+ module imports.pr119826b;
+ 
+ import pr119826 : t119826;
+ 
+ class C119826
+ {
+     enum E119826 { Evalue }
+     const E119826 em = void;
+ }
+ 
+ void f119826(C119826 c)
+ {
+     t119826(c.em);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gdc.dg/debug/pr119817.d gcc-13.4.0/gcc/testsuite/gdc.dg/debug/pr119817.d
*** gcc-13.3.0/gcc/testsuite/gdc.dg/debug/pr119817.d	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gdc.dg/debug/pr119817.d	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,4 ----
+ // { dg-do compile }
+ // { dg-additional-sources "imports/m119817/package.d imports/m119817/a.d imports/m119817/b.d" }
+ module pr119817;
+ import imports.m119817 : f119817;
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gdc.dg/debug/pr119826.d gcc-13.4.0/gcc/testsuite/gdc.dg/debug/pr119826.d
*** gcc-13.3.0/gcc/testsuite/gdc.dg/debug/pr119826.d	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gdc.dg/debug/pr119826.d	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,8 ----
+ // { dg-do compile }
+ // { dg-additional-sources "imports/pr119826b.d" }
+ module pr119826;
+ 
+ int t119826(A)(A args)
+ {
+     assert(false);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gdc.dg/pr111650.d gcc-13.4.0/gcc/testsuite/gdc.dg/pr111650.d
*** gcc-13.3.0/gcc/testsuite/gdc.dg/pr111650.d	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gdc.dg/pr111650.d	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,21 ----
+ // { dg-do compile }
+ ref V require(K, V)(ref V[K] aa, K key, lazy V value);
+ 
+ struct Root
+ {
+     ulong[3] f;
+ }
+ 
+ Root[ulong] roots;
+ 
+ Root getRoot(int fd, ulong rootID)
+ {
+     return roots.require(rootID,
+     {
+             Root result;
+             inoLookup(fd, () => result);
+             return result;
+     }());
+ }
+ 
+ void inoLookup(int, scope Root delegate()) { }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gdc.dg/pr116961.d gcc-13.4.0/gcc/testsuite/gdc.dg/pr116961.d
*** gcc-13.3.0/gcc/testsuite/gdc.dg/pr116961.d	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gdc.dg/pr116961.d	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,7 ----
+ // { dg-do compile }
+ struct S116961
+ {
+     float thing = 0.0;
+ }
+ 
+ static assert(__traits(isZeroInit, S116961) == true);
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gdc.dg/pr117621.d gcc-13.4.0/gcc/testsuite/gdc.dg/pr117621.d
*** gcc-13.3.0/gcc/testsuite/gdc.dg/pr117621.d	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gdc.dg/pr117621.d	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,11 ----
+ // { dg-do "compile" }
+ // { dg-options "-g" }
+ void pr117621()
+ {
+     auto fun()(inout int)
+     {
+         struct S {}
+         return inout(S)();
+     }
+     auto s = fun(0);
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gdc.dg/pr119139.d gcc-13.4.0/gcc/testsuite/gdc.dg/pr119139.d
*** gcc-13.3.0/gcc/testsuite/gdc.dg/pr119139.d	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gdc.dg/pr119139.d	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,24 ----
+ // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119139
+ // { dg-do compile }
+ // { dg-options "-fdump-tree-gimple" }
+ string toString()
+ {
+     return "1";
+ }
+ 
+ struct B
+ {
+     ulong n;
+ 
+     invariant{}
+ 
+     string str()
+     {
+         if (n == 0)
+         {
+             return "0";
+         }
+         return toString();
+     }
+ }
+ // { dg-final { scan-tree-dump-not "static const struct  __result =" "gimple" } }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gdc.dg/torture/pr117002.d gcc-13.4.0/gcc/testsuite/gdc.dg/torture/pr117002.d
*** gcc-13.3.0/gcc/testsuite/gdc.dg/torture/pr117002.d	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gdc.dg/torture/pr117002.d	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,28 ----
+ // { dg-do compile }
+ // { dg-additional-options "-Warray-bounds" }
+ extern(C++) class C117002
+ {
+     ubyte[4] not_multiple_of_8;
+ }
+ 
+ int pr117002a(void *p)
+ {
+     auto init = __traits(initSymbol, C117002);
+     if (init.ptr + init.length <= p)
+         return 1;
+     return 0;
+ }
+ 
+ void pr117002b(void *p)
+ {
+     auto init = __traits(initSymbol, C117002);
+     p[0 .. init.length] = init[];
+ }
+ 
+ void pr117002c()
+ {
+     scope var = new C117002;
+     void *p = cast(void*)var;
+     auto init = __traits(initSymbol, C117002);
+     p[0 .. __traits(classInstanceSize, C117002)] = init[];
+ }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/allocatable_char_1.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/allocatable_char_1.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/allocatable_char_1.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/allocatable_char_1.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,47 ----
+ ! { dg-do run }
+ ! { dg-additional-options "-fdump-tree-original" }
+ !
+ ! PR fortran/59252
+ 
+ module mod
+   implicit none
+ 
+   type t1
+      character(256), allocatable :: label
+   end type t1
+ 
+   type t2
+      type(t1),       allocatable :: appv(:)
+   end type t2
+ 
+ contains
+   subroutine construct(res)
+     type(t2), allocatable, intent(inout) :: res
+     if (.not. allocated(res)) allocate(res)
+   end subroutine construct
+ 
+   subroutine construct_appv(appv)
+     type(t1), allocatable, intent(inout) :: appv(:)
+     if (.not. allocated(appv)) allocate(appv(20))
+   end subroutine construct_appv
+ 
+   type(t1) function foo () result (res)
+   end function foo
+ end module mod
+ 
+ program testy
+   use mod
+   implicit none
+   type(t2), allocatable :: res
+   type(t1)              :: s
+ 
+   ! original test from pr59252
+   call construct     (res)
+   call construct_appv(res%appv)
+   deallocate (res)
+ 
+   ! related test from pr118747 comment 2:
+   s = foo ()
+ end program testy
+ 
+ ! { dg-final { scan-tree-dump-not "__builtin_memmove" "original" } }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/allocate_with_source_32.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/allocate_with_source_32.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/allocate_with_source_32.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/allocate_with_source_32.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,33 ----
+ ! { dg-do run }
+ !
+ ! PR fortran/83865
+ !
+ ! Test ALLOCATE with SOURCE= of deferred length character, where
+ ! the source-expression is an array of character with length 0.
+ 
+ program p
+   implicit none
+   character(:), allocatable :: z(:)
+   character(1) :: cc(4) = ""
+   allocate (z, source=[''])
+   if (len (z) /= 0 .or. size (z) /= 1) stop 1
+   deallocate (z)
+   allocate (z, source=['',''])
+   if (len (z) /= 0 .or. size (z) /= 2) stop 2
+   deallocate (z)
+   allocate (z, source=[ character(0) :: 'a','b','c'])
+   if (len (z) /= 0 .or. size (z) /= 3) stop 3
+   deallocate (z)
+   allocate (z, source=[ character(0) :: cc ])
+   if (len (z) /= 0 .or. size (z) /= 4) stop 4
+   deallocate (z)
+   associate (x => f())
+     if (len (x) /= 0 .or. size (x) /= 1) stop 5
+     if (x(1) /= '') stop 6
+   end associate
+ contains
+   function f() result(z)
+     character(:), allocatable :: z(:)
+     allocate (z, source=[''])
+   end function f
+ end
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/asan/pr110415-2.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/asan/pr110415-2.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/asan/pr110415-2.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/asan/pr110415-2.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,45 ----
+ ! { dg-do run }
+ !
+ ! Contributed by Brad Richardson <everythingfunctional@protonmail.com>
+ !
+ implicit none
+   type, abstract :: p
+     integer :: a = 4
+   end type p
+ 
+   type, extends(p) :: c
+     integer :: b = 7
+     character(len=:), allocatable :: str, str2(:)
+   end type c
+ 
+   type, extends(p) :: d
+     integer :: ef = 7
+   end type d
+ 
+   class(p), allocatable :: a
+ 
+   a = func()
+ 
+   a = func2()
+ 
+   a = func()
+ 
+   deallocate(a)
+ 
+ contains
+   function func2() result(a)
+     class(p), allocatable :: a
+     a = d()
+   end function func2
+ 
+   function func() result(a)
+     class(p), allocatable :: a
+ 
+     a = c()
+     select type(a)
+     type is (c)
+       a%str = 'abcd'
+       a%str2 = ['abcd','efgh']
+     end select
+   end function func
+ end program
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/asan/pr110415-3.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/asan/pr110415-3.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/asan/pr110415-3.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/asan/pr110415-3.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,49 ----
+ ! { dg-do run }
+ !
+ ! Contributed by Brad Richardson <everythingfunctional@protonmail.com>
+ !
+ implicit none
+   type, abstract :: p
+     integer :: a = 4
+   end type p
+ 
+   type, extends(p) :: c
+     integer :: b = 7
+     character(len=:), allocatable :: str, str2(:)
+   end type c
+ 
+   type, extends(p) :: d
+     integer :: ef = 7
+   end type d
+ 
+   class(p), allocatable :: a(:)
+ 
+   a = func()
+ 
+   a = func2()
+ 
+   a = func()
+ 
+   deallocate(a)
+ 
+ contains
+   function func2() result(a)
+     class(p), allocatable :: a(:)
+     a = [d(),d()]
+   end function func2
+ 
+   function func() result(a)
+     class(p), allocatable :: a(:)
+ 
+     a = [c(),c(),c()]
+     select type(a)
+     type is (c)
+       a(1)%str = 'abcd'
+       a(2)%str = 'abc'
+       a(3)%str = 'abcd4'
+       a(1)%str2 = ['abcd','efgh']
+       a(2)%str2 = ['bcd','fgh']
+       a(3)%str2 = ['abcd6','efgh7']
+     end select
+   end function func
+ end program
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/asan/unlimited_polymorphic_34.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/asan/unlimited_polymorphic_34.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/asan/unlimited_polymorphic_34.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/asan/unlimited_polymorphic_34.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,135 ----
+ ! { dg-do run }
+ ! PR fortran/114827 - issues with class(*) assignment found by valgrind
+ !
+ ! Contributed by Neil Carlson <neil.n.carlson@gmail.com>
+ 
+ program main
+   implicit none
+   call run
+   call run1
+   call run2
+ contains
+   ! Scalar tests
+   subroutine run ()
+     character(*),        parameter :: c = 'fubarfubarfubarfubarfubarfu'
+     character(*,kind=4), parameter :: d = 4_"abcdef"
+     complex,             parameter :: z = (1.,2.)
+     class(*),          allocatable :: y
+ 
+     call foo (c, y)
+     select type (y)
+     type is (character(*))
+ !      print *, y(5:6)                  ! ICE (-> pr114874)
+        if (y /= c) stop 1
+     class default
+        stop 2
+     end select
+ 
+     call foo (z, y)
+     select type (y)
+     type is (complex)
+        if (y /= z) stop 3
+     class default
+        stop 4
+     end select
+ 
+     call foo (d, y)
+     select type (y)
+     type is (character(*,kind=4))
+ !      print *, y                       ! NAG fails here
+        if (y /= d) stop 5
+     class default
+        stop 6
+     end select
+   end subroutine 
+   !
+   subroutine foo (a, b)
+     class(*), intent(in)  :: a
+     class(*), allocatable :: b
+     b = a
+   end subroutine
+ 
+   ! Rank-1 tests
+   subroutine run1 ()
+     character(*),        parameter :: c(*) = ['fubar','snafu']
+     character(*,kind=4), parameter :: d(*) = [4_"abc",4_"def"]
+     real,                parameter :: r(*) = [1.,2.,3.]
+     class(*),          allocatable :: y(:)
+ 
+     call foo1 (c, y)
+     select type (y)
+     type is (character(*))
+ !      print *, ">",y(2)(1:3),"<  >", c(2)(1:3), "<"
+        if (any (y    /= c))        stop 11
+        if (y(2)(1:3) /= c(2)(1:3)) stop 12
+     class default
+        stop 13
+     end select
+ 
+     call foo1 (r, y)
+     select type (y)
+     type is (real)
+        if (any (y /= r)) stop 14
+     class default
+        stop 15
+     end select
+ 
+     call foo1 (d, y)
+     select type (y)
+     type is (character(*,kind=4))
+ !      print *, ">",y(2)(2:3),"<  >", d(2)(2:3), "<"
+        if (any (y /= d)) stop 16
+     class default
+        stop 17
+     end select
+   end subroutine 
+   !
+   subroutine foo1 (a, b)
+     class(*), intent(in)  :: a(:)
+     class(*), allocatable :: b(:)
+     b = a
+   end subroutine
+ 
+   ! Rank-2 tests
+   subroutine run2 ()
+     character(7) :: c(2,3)
+     complex      :: z(3,3)
+     integer      :: i, j
+     class(*), allocatable :: y(:,:)
+ 
+     c = reshape (['fubar11','snafu21',&
+                   'fubar12','snafu22',&
+                   'fubar13','snafu23'],shape(c))
+     call foo2 (c, y)
+     select type (y)
+     type is (character(*))
+ !      print *, y(2,1)
+        if (y(2,1) /= c(2,1)) stop 21
+        if (any (y /= c))     stop 22
+     class default
+        stop 23
+     end select
+ 
+     do    j = 1, size (z,2)
+        do i = 1, size (z,1)
+           z(i,j) = cmplx (i,j)
+        end do
+     end do
+     call foo2 (z, y)
+     select type (y)
+     type is (complex)
+ !      print *, y(2,1)
+        if (any (y%re /= z%re)) stop 24
+        if (any (y%im /= z%im)) stop 25
+     class default
+        stop 26
+     end select
+   end subroutine 
+   !
+   subroutine foo2 (a, b)
+     class(*), intent(in)  :: a(:,:)
+     class(*), allocatable :: b(:,:)
+     b = a
+   end subroutine
+ 
+ end program
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/assign_12.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/assign_12.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/assign_12.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/assign_12.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,28 ----
+ !{ dg-do run }
+ !
+ ! Check assignment works for derived types to memory referenced by pointer
+ ! Contributed by G. Steinmetz  <gscfq@t-online.de>
+ 
+ program pr103391
+    type t
+      character(1) :: c
+    end type
+    type t2
+       type(t), pointer :: a(:)
+    end type
+ 
+    type(t), target :: arr(2)
+    type(t2) :: r
+ 
+    arr = [t('a'), t('b')]
+ 
+    r = f([arr])
+    if (any(r%a(:)%c /= ['a', 'b'])) stop 1
+ contains
+    function f(x)
+       class(t), intent(in), target :: x(:)
+       type(t2) :: f
+       allocate(f%a(size(x,1)))
+       f%a = x
+    end
+ end
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/associate_69.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/associate_69.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/associate_69.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/associate_69.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,35 ----
+ ! { dg-do compile }
+ ! { dg-options "-Og -Wuninitialized -Wmaybe-uninitialized -fdump-tree-optimized" }
+ !
+ ! PR fortran/115700 - Bogus warning for associate with assumed-length character array
+ ! This testcase checks for the suppression of the bogus error and associate_70 for
+ ! correct results.
+ !
+ subroutine mvce(x)
+   implicit none
+   character(len=*), dimension(:), intent(in)  :: x
+   integer :: i
+   i = len(x)
+ 
+   associate (tmp1 => x)
+     if (len (tmp1) /= len (x)) stop 1
+   end associate
+ 
+   associate (tmp2 => x(1:))
+     if (len (tmp2) /= len (x)) stop 2
+   end associate
+ 
+   associate (tmp3 => x(1:)(:))
+     if (len (tmp3) /= len (x)) stop 3
+   end associate
+ 
+   associate (tmp4 => x(:)(1:))
+     if (len (tmp4) /= len (x)) stop 4
+   end associate
+ 
+   associate (tmp5 => x(1:)(1:))
+     if (len (tmp5) /= len (x)) stop 5
+   end associate
+ end
+ 
+ ! { dg-final { scan-tree-dump-not " \\.tmp" "optimized" } }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/associate_70.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/associate_70.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/associate_70.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/associate_70.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,60 ----
+ ! { dg-do run }
+ ! ( dg-options "-Wuninitialized" )
+ !
+ ! Test fix for PR115700 comment 5, in which ‘.tmp1’ is used uninitialized and
+ ! both normal and scalarized array references did not work correctly.
+ ! This testcase checks for correct results and associate_69 for suppression
+ ! of the bogus error.
+ !
+ ! Contributed by Harald Anlauf  <anlauf@gcc.gnu.org>
+ !
+   character(4), dimension(3) :: chr = ['abcd', 'efgh', 'ijkl']
+   call mvce (chr)
+   if (any (chr /= ['ABcd', 'EFgh', 'IJkl'])) stop 1
+ 
+ contains
+   subroutine mvce(x)
+     implicit none
+     character(len=*), dimension(:), intent(inOUT) :: x
+     integer :: i
+     i = len(x)
+ 
+     associate (tmp1 => x)
+       if (len (tmp1) /= len (x)) stop 2
+       tmp1(2)(3:4) = '12'
+     end associate
+     if (any (x /= ['abcd', 'ef12', 'ijkl'])) stop 3
+ 
+     associate (tmp2 => x(1:))
+       if (len (tmp2) /= len (x)) stop 4
+       tmp2(2)(1:2) = '34'
+     end associate
+     if (any (x /= ['abcd', '3412', 'ijkl'])) stop 5
+ 
+     associate (tmp3 => x(1:)(:))
+       if (len (tmp3) /= len (x)) stop 6
+       tmp3(3)(3:4) = '56'
+     end associate
+     if (any (x /= ['abcd', '3412', 'ij56'])) stop 7
+ 
+     associate (tmp4 => x(:)(1:))
+       if (len (tmp4) /= len (x)) stop 8
+       tmp4(3)(1:2) = '78'
+     end associate
+     if (any (x /= ['abcd', '3412', '7856'])) stop 9
+ 
+     associate (tmp5 => x(1:)(1:))
+       if (len (tmp5) /= len (x)) stop 10
+       tmp5 = ['abcd', 'efgh', 'ijkl']
+     end associate
+     if (any (x /= ['abcd', 'efgh', 'ijkl'])) stop 11
+ 
+     associate (tmp6 => x(:)(1:i/2))
+       if (len (tmp6) /= i/2) stop 11
+       if (tmp6(2) /= 'ef') stop 12
+       if (any (tmp6 /= ['ab', 'ef', 'ij'])) stop 13
+       tmp6 = ['AB','EF','IJ']
+     end associate
+ 
+   end subroutine mvce
+ end
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/bounds_check_27.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/bounds_check_27.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/bounds_check_27.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/bounds_check_27.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,45 ----
+ ! { dg-do run }
+ ! { dg-additional-options "-fcheck=bounds" }
+ !
+ ! PR fortran/116706 - bogus bounds check for reallocation on assignment
+ ! Contributed by Balint Aradi  <baradi09 at gmail.com>
+ 
+ program testprog
+   implicit none
+ 
+   type :: data_node
+      integer, allocatable :: data(:)
+   end type data_node
+ 
+   type :: data_list
+      type(data_node), pointer :: nodes(:) => null()
+   end type data_list
+ 
+   type :: upoly_node
+      class(*), allocatable :: data(:)
+   end type upoly_node
+ 
+   type :: star_list
+      type(upoly_node), pointer :: nodes(:) => null()
+   end type star_list
+ 
+   type(data_list) :: datalist
+   type(star_list) :: starlist
+   class(star_list), allocatable :: astarlist
+   class(star_list), pointer     :: pstarlist
+ 
+   allocate (datalist%nodes(2))
+   datalist%nodes(1)%data = [1, 2, 3]
+ 
+   allocate (starlist%nodes(2))
+   starlist%nodes(1)%data = [1., 2., 3.]
+ 
+   allocate (astarlist)
+   allocate (astarlist%nodes(2))
+   astarlist%nodes(1)%data = [1, 2, 3]
+ 
+   allocate (pstarlist)
+   allocate (pstarlist%nodes(2))
+   pstarlist%nodes(1)%data = [1., 2., 3.]
+ 
+ end program testprog
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/character_workout_1.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/character_workout_1.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/character_workout_1.f90	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/character_workout_1.f90	Thu Jun  5 16:03:01 2025
***************
*** 1,7 ****
  ! { dg-do run }
  !
  ! Tests fix for PR100120/100816/100818/100819/100821
! ! 
  
  program main_p
  
--- 1,7 ----
  ! { dg-do run }
  !
  ! Tests fix for PR100120/100816/100818/100819/100821
! !
  
  program main_p
  
*************** program main_p
*** 27,36 ****
    character(len=m, kind=k), pointer :: pm(:)
    character(len=e, kind=k), pointer :: pe(:)
    character(len=:, kind=k), pointer :: pd(:)
!   
    class(*),                 pointer :: su
    class(*),                 pointer :: pu(:)
!   
    integer :: i, j
  
    nullify(s1, sm, se, sd, su)
--- 27,36 ----
    character(len=m, kind=k), pointer :: pm(:)
    character(len=e, kind=k), pointer :: pe(:)
    character(len=:, kind=k), pointer :: pd(:)
! 
    class(*),                 pointer :: su
    class(*),                 pointer :: pu(:)
! 
    integer :: i, j
  
    nullify(s1, sm, se, sd, su)
*************** program main_p
*** 41,47 ****
        cm(i)(j:j) = char(i*m+j+c-m, kind=k)
      end do
    end do
!   
    s1 => c1(n)
    if(.not.associated(s1))              stop 1
    if(.not.associated(s1, c1(n)))       stop 2
--- 41,47 ----
        cm(i)(j:j) = char(i*m+j+c-m, kind=k)
      end do
    end do
! 
    s1 => c1(n)
    if(.not.associated(s1))              stop 1
    if(.not.associated(s1, c1(n)))       stop 2
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/cray_pointers_13.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/cray_pointers_13.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/cray_pointers_13.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/cray_pointers_13.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,51 ----
+ ! { dg-do run }
+ ! { dg-additional-options "-fcray-pointer" }
+ !
+ ! PR fortran/106692 - Cray pointer comparison wrongly optimized away
+ !
+ ! Contributed by Marek Polacek
+ 
+ program test
+   call test_cray()
+   call test_cray2()
+ end
+ 
+ subroutine test_cray()
+   pointer(ptrzz1 , zz1)
+   ptrzz1=0
+   if (ptrzz1 .ne. 0) then
+     print *, "test_cray: ptrzz1=", ptrzz1
+     stop 1
+   else
+     call shape_cray(zz1)
+   end if
+ end
+ 
+ subroutine shape_cray(zz1)
+   pointer(ptrzz , zz)
+   ptrzz=loc(zz1)
+   if (ptrzz .ne. 0) then
+     print *, "shape_cray: ptrzz=", ptrzz
+     stop 3
+   end if
+ end
+ 
+ subroutine test_cray2()
+   pointer(ptrzz1 , zz1)
+   ptrzz1=0
+   if (0 == ptrzz1) then
+     call shape_cray2(zz1)
+   else
+     print *, "test_cray2: ptrzz1=", ptrzz1
+     stop 2
+   end if
+ end
+ 
+ subroutine shape_cray2(zz1)
+   pointer(ptrzz , zz)
+   ptrzz=loc(zz1)
+   if (.not. (0 == ptrzz)) then
+     print *, "shape_cray2: ptrzz=", ptrzz
+     stop 4
+   end if
+ end
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/finalize_58.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/finalize_58.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/finalize_58.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/finalize_58.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,77 ----
+ ! { dg-do run }
+ !
+ ! Test fix for PR116388 in which an artificial variable in the finalization
+ ! wrapper was generating an invalid finalization.
+ !
+ ! Contributed by Tomas Trnka  <trnka@scm.com>
+ !
+ module FinalizerTestModule
+ 
+    use, intrinsic :: ISO_C_BINDING
+ 
+    implicit none
+ 
+    type, public :: AType
+       type(C_ptr) :: cptr = C_null_ptr
+       logical     :: cptr_invalid = .true.
+       integer, allocatable :: x(:)
+    contains
+       final              :: FinalizerA
+    end type
+ 
+    type, public :: BType
+       type(C_ptr) :: cptr = C_null_ptr
+       type(AType) :: a
+    contains
+       procedure, public  :: New => NewB
+       final              :: FinalizerB
+    end type
+ 
+    type, public :: CType
+       type(BType) :: b
+    contains
+       procedure, public :: New => NewC
+    end type
+ 
+    integer :: final_A = 0
+    integer :: final_B = 0
+ contains
+ 
+    impure elemental subroutine FinalizerA(self)
+       type(AType), intent(inout) :: self
+       final_A = final_A + 1
+       if (.not. self%cptr_invalid) stop 1
+    end subroutine
+ 
+    subroutine NewB(self)
+       class(BType),     intent(out)           :: self
+ 
+    end subroutine
+ 
+    impure elemental subroutine FinalizerB(self)
+       type(BType), intent(inout) :: self
+       final_B = final_B + 1
+       if (transfer (self%cptr, C_LONG_LONG) /= 0) stop 2
+    end subroutine
+ 
+    subroutine NewC(self, b)
+       class(CType),  intent(out) :: self
+       type(BType),   intent(in)  :: b
+ 
+       self%b = b
+    end subroutine
+ 
+ end module
+ 
+ program finalizing_uninitialized
+    use FinalizerTestModule
+    implicit none
+ 
+    type(BType) :: b
+    type(CType) :: c
+ 
+    call b%New()
+    call c%New(b)
+    if (final_A /= 3) stop 3
+    if (final_B /= 3) stop 4
+ end program
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/finalize_59.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/finalize_59.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/finalize_59.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/finalize_59.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,245 ----
+ ! { dg-do run }
+ !
+ ! Test the fix for PR117897 in which the rhs of the pointer assignment at line
+ ! 216 below was marked as being finalizable, contrary to F2023 7.5.6.3 for
+ ! ordinary assignment and certainly wrong in this context.
+ !
+ ! Contributed by Jean Gual  <jean.gual@cerema.fr>
+ !
+ Module  Uef_Classe_Vector
+ ! Ce module implemente le vector de la STL du C++
+ Private
+ CHARACTER (len=3),  Parameter :: UEF_PAR_CHAINE_NON_RENSEIGNEE                              = "N_R"
+ real, parameter          :: UEF_par_vector_progression_ratio = 2
+ Integer, parameter       :: UEF_par_vector_initial_lenght   = 10
+ 
+ Type, abstract, public :: Uef_Vector_element
+     Logical, public         :: m_Element_pointe = .false.
+ End type Uef_Vector_element
+ 
+ Type, private  :: Uef_Pointeur_element ! Classe pointeur
+     Class (Uef_Vector_element), public, pointer  :: m_ptr_element => null()
+ End type Uef_Pointeur_element
+ 
+ Type, public :: Uef_Vector  ! Vecteur des classes pointeur
+     integer  , private                                              :: m_position_fin               = 0
+     type(Uef_Pointeur_element), private, allocatable, dimension(:)  :: m_les_pointeur_element
+     Character (:), private, allocatable                             :: m_label
+     Class (Uef_Vector_element), allocatable, private                :: m_type_element
+     logical                                ,private                 :: m_polymorphe = .false.
+  Contains
+     PROCEDURE :: create                  => Vector_create
+     PROCEDURE :: add                     => Vector_add
+     PROCEDURE :: Pointer                 => Vector_pointer
+     PROCEDURE :: size                    => vector_size
+ End Type Uef_Vector
+ 
+ Contains
+ !--------------------
+ ! Vector_create : Cree un vector non deja alloue avec une taille initiale eventuelle
+ !--------------------
+ Subroutine Vector_create(le_vector, label, type_element, opt_taille, opt_polymorphe)
+ !   parametres en entree/sortie
+     Class(Uef_Vector),intent (inout)                    :: le_vector
+     Character (len=*),intent(in)                        :: label
+     Class (Uef_Vector_element),intent(in)               :: type_element
+     Integer, intent(in), optional                       :: opt_taille
+     Logical, intent(in), optional                       :: opt_polymorphe
+ 
+ !   parametres locaux
+     integer                                             :: taille_initiale
+ !
+ !-----DEBUT-----------------------------------------------------------------------------------------------------------------------
+ !    write (*,*) "create:", label
+     if (allocated(le_vector%m_les_pointeur_element)) then
+         Call Uef_assert(.false., "Vector_create : vecteur deja cree :"// le_vector%m_label)
+     endif
+ 
+     if (present(opt_taille)) then
+         taille_initiale = max( 1, opt_taille )
+     else
+         taille_initiale = UEF_par_vector_initial_lenght
+     endif
+ 
+     if (present(opt_polymorphe)) then
+         le_vector%m_polymorphe =  opt_polymorphe
+     endif
+ 
+     allocate( le_vector%m_les_pointeur_element(1:taille_initiale))
+     le_vector%m_position_fin                    = 0
+     le_vector%m_label                           = label
+     allocate (le_vector%m_type_element, source  = type_element)
+ End Subroutine Vector_create
+ !--------------------
+ ! Vector_add : ajoute une copie d'un element a la fin du vecteur
+ !--------------------
+ Subroutine Vector_add(le_vector, l_element)
+ !   parametres en entree/sortie
+     Class(Uef_Vector),intent(inout)                  :: le_vector
+     Class(Uef_Vector_element), intent(in)            :: l_element
+ 
+ !   parametres locaux
+     type(Uef_Pointeur_element)                       :: le_ptr_element
+ !
+ !-----DEBUT-----------------------------------------------------------------------------------------------------------------------
+ !
+ !    write (*,*) "ajout:", le_vector%m_label
+     if ( .not. allocated(le_vector%m_les_pointeur_element) ) Then
+         Call Vector_create(le_vector, label= UEF_PAR_CHAINE_NON_RENSEIGNEE, type_element = l_element)
+     End if
+     if ( .not. same_type_as (l_element,le_vector%m_type_element).and. .not. le_vector%m_polymorphe) then
+         Call Uef_assert(.false., "Vector_add : element de type incorrect pour :"// le_vector%m_label)
+     End if
+ 
+     if ( le_vector%m_position_fin >= size(le_vector%m_les_pointeur_element) ) then
+         call vector_increase_size( le_vector, le_vector%m_position_fin+1 )
+     endif
+ 
+     le_vector%m_position_fin                                = le_vector%m_position_fin + 1
+     allocate (le_ptr_element%m_ptr_element, source = l_element)
+     le_vector%m_les_pointeur_element(le_vector%m_position_fin) =  le_ptr_element
+ End Subroutine Vector_add
+ !--------------------
+ ! vector_size : retourne le nombre d'elements effectifs du vector
+ !--------------------
+ Pure Integer Function vector_size(le_vector)
+ !   parametres en entree
+     Class(Uef_Vector), intent (in)       :: le_vector
+ !
+ !-----DEBUT-----------------------------------------------------------------------------------------------------------------------
+     vector_size = le_vector%m_position_fin
+ End Function vector_size
+ !--------------------
+ ! Vector_pointer : pointe sur une valeur
+ !--------------------
+  Function  Vector_pointer( le_vector, position_element )
+ !   parametres en entree/sortie
+     Class(Uef_Vector),intent(inout)         :: le_vector
+     integer,intent (in)                     :: position_element
+ !   parametres en sortie
+     Class(Uef_Vector_element), Pointer       :: Vector_pointer
+ !
+ !-----DEBUT-----------------------------------------------------------------------------------------------------------------------
+ !
+     if ( position_element < 1 .or. position_element  > le_vector%m_position_fin ) then
+         write (*,*) "Vector_pointer : pointage impossible de ", le_vector%m_label, " position_element:",&
+                      position_element," size:",le_vector%m_position_fin
+         Call Uef_assert(.false., "Vector_pointer : pointage impossible dans "// le_vector%m_label)
+     else
+         le_vector%m_les_pointeur_element(position_element)%m_ptr_element%m_Element_pointe =.true.
+         Vector_pointer => le_vector%m_les_pointeur_element(position_element)%m_ptr_element
+     endif
+ End Function Vector_pointer
+ !--------------------
+ ! vector_increase_size : augmente la taille du vector
+ !--------------------
+ Subroutine vector_increase_size( le_vector, taille_demandee )
+ !   parametres en entree/sortie
+     Class(Uef_Vector),intent(inout)                     :: le_vector
+     integer,intent(in)                                  :: taille_demandee
+ !   Parametres en locaux
+     integer                                                 :: Nouvelle_taille, taille_actuelle
+     type(Uef_Pointeur_element),dimension (:), allocatable:: tmp_vector
+ !
+ !-----DEBUT-----------------------------------------------------------------------------------------------------------------------
+ !
+     taille_actuelle = size(le_vector%m_les_pointeur_element)
+     Nouvelle_taille = max(taille_demandee, nint( UEF_par_vector_progression_ratio * taille_actuelle))
+ 
+     if (Nouvelle_taille > taille_actuelle) then
+         allocate(tmp_vector(1:Nouvelle_taille))
+         tmp_vector(1:taille_actuelle) = le_vector%m_les_pointeur_element(1:le_vector%m_position_fin)
+         call move_alloc(from = tmp_vector  , to = le_vector%m_les_pointeur_element)
+     endif
+ End Subroutine vector_increase_size
+ !------------------------
+ Subroutine Uef_Assert (assertion, message)
+ !--------------------
+ ! traitement des assertions
+ !--------------------
+ ! Parametres en entree
+ Logical, Intent(in) ::  assertion
+ Character (len = *) , intent(in):: message
+ !-------------------------------------------------------------------------------------------------
+     if (.not. assertion ) Then
+ 
+         write(*,*) message
+         write(*,*) " ARRET PREMATURE : PREVENIR LE GESTIONNAIRE"
+     stop
+     End if
+ End Subroutine Uef_Assert
+ 
+ End Module  Uef_Classe_Vector
+ 
+ Program Cds_Principal
+    Use Uef_Classe_vector
+ !
+ !--------------------------------------------------------------------------------------------------
+     TYPE, extends(Uef_Vector_element),   abstract :: Cds_Materiau
+         Character (len=8)               :: m_Nom_materiau                = "12345678"
+         Type(Uef_Vector)                :: m_Les_situations
+     END TYPE Cds_Materiau
+ 
+     Type,   extends (Cds_Materiau)      :: Cds_Materiau_Acier_EC
+         Double precision                :: m_Fyk                                = 0.00
+     End type Cds_Materiau_Acier_EC
+ 
+    Type(Uef_Vector)                                    :: Cds_Mod_Les_materiaux
+    Type (Cds_Materiau_Acier_EC)                        :: acier_ec
+    Class (Cds_Materiau), pointer                       :: pt_materiau
+    Character *(8)                                      :: nom_materiau
+ !-------------------------------------------------------------------------------------------------
+       CaLL  Cds_Mod_Les_materiaux%Add (acier_ec)
+       nom_materiau = "12345678"
+       pt_materiau => Get_pt_materiau_nom (Cds_Mod_Les_materiaux, nom_materiau)
+ contains
+ 
+ Function Get_Pt_Materiau_nom (vecteur, nom_materiau)
+     !--------------------
+     !   Fonction :
+     !--------------------
+      ! Parametres en entree
+     Character *(8), Intent (in)        :: nom_materiau
+     Type (Uef_Vector)          , Intent (inout)     :: vecteur
+ 
+     ! Parametres en sortie
+     Class  (Cds_Materiau),pointer                    :: Get_Pt_Materiau_nom
+ 
+     ! Parametres locaux
+     Integer                                         :: no_materiau
+ 
+     Class (Uef_Vector_element),pointer           ::  pt_vector_element
+     !--------------------
+     do no_materiau = 1 , vecteur%size()
+         pt_vector_element => vecteur%Pointer(no_materiau)
+ ! this instruction did not work
+          Get_Pt_Materiau_nom => Cds_pt_materiau(pt_vector_element)
+ 
+         if (trim (Get_Pt_Materiau_nom%m_Nom_materiau) /= '12345678') stop 1
+         if (Get_Pt_Materiau_nom%m_Nom_materiau == nom_materiau) Then
+             return
+         End if
+     End do
+     Get_Pt_Materiau_nom => null()
+ End Function Get_Pt_Materiau_nom
+ !
+ !--------------------
+ function Cds_Pt_Materiau(vector_element)
+ !--------------------
+ !   Fonction : pointage de la valeur
+ !--------------------
+ 
+     ! Parametres en entree
+     Class (Uef_Vector_element),intent(in),target   ::  vector_element
+     ! Parametres en sortie
+     Class(Cds_Materiau), pointer                   ::  Cds_Pt_Materiau
+     !-----------------------------------------------------------------------------------------------
+     select type(vector_element)
+     Class is (Cds_Materiau)
+         Cds_Pt_Materiau => vector_element
+     class default
+         stop 2
+     end select
+ End Function Cds_Pt_Materiau
+ 
+ End Program Cds_Principal
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/ieee/pr115070.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/ieee/pr115070.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/ieee/pr115070.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/ieee/pr115070.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,28 ----
+ ! { dg-do compile }
+ !
+ ! Test the fix for PR115070
+ !
+ ! Contributed by Sebastien Bardeau  <bardeau@iram.fr>
+ !
+ module my_mod
+   type my_type
+     integer :: a
+   contains
+     final :: myfinal
+   end type my_type
+ contains
+   subroutine my_sub(obs)
+     use ieee_arithmetic
+     class(my_type), intent(out) :: obs
+   end subroutine my_sub
+   subroutine myfinal (arg)
+     type (my_type) :: arg
+     print *, arg%a
+   end
+ end module my_mod
+ 
+   use my_mod
+   type (my_type) :: z
+   z%a = 42
+   call my_sub (z)
+ end
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/optional_absent_13.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/optional_absent_13.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/optional_absent_13.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/optional_absent_13.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,48 ----
+ ! { dg-do run }
+ ! PR fortran/119656 - wrong code with impure elemental subroutine and interface
+ !
+ ! Derived from testcase at:
+ !   https://fortran-lang.discourse.group/t/
+ !     problem-with-impure-elemental-subroutine-in-interface-with-gfortran/9545
+ 
+ module m2
+   implicit none
+   interface foo
+      module procedure foo_mat
+      module procedure foo_df
+      module procedure foo_cmat
+   end interface foo
+ contains
+ 
+   subroutine foo_mat(x, nacf, label)
+     real,             intent(in)           :: x(:,:)
+     integer,          intent(in)           :: nacf
+     character(len=*), intent(in), optional :: label
+   end subroutine foo_mat
+ 
+   impure elemental subroutine foo_df(nacf, outu, xstr)
+     integer         , intent(in)           :: nacf
+     integer         , intent(in), optional :: outu
+     character(len=*), intent(in), optional :: xstr
+     if (present(xstr)) then
+        if (len (xstr) /= 2) then
+           print *,"nacf, len(xstr) =", nacf, len(xstr)
+           stop nacf
+        end if
+     end if
+   end subroutine foo_df
+ 
+   subroutine foo_cmat(x, nacf, label)
+     complex,          intent(in)           :: x(:,:)
+     integer,          intent(in)           :: nacf
+     character(len=*), intent(in), optional :: label
+   end subroutine foo_cmat
+ 
+ end module m2
+ 
+ program main
+   use m2, only: foo, foo_df
+   implicit none
+   call foo_df(nacf = 1, xstr="ab")
+   call foo   (nacf = 2, xstr="ab")
+ end program main
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/pr100193.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/pr100193.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/pr100193.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/pr100193.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,20 ----
+ ! { dg-do compile }
+ !
+ ! Contributed by Gerhard Steinmetz  <gscfq@t-online.de>
+ !
+ module m
+    implicit none
+    type t
+       procedure(f), pointer, nopass :: g
+    end type
+ contains
+    function f()
+       character(:), allocatable :: f
+       f = 'abc'
+    end
+    subroutine s
+       type(t) :: z
+       z%g = 'x'  ! { dg-error "is a procedure pointer" }
+       if ( z%g() /= 'abc' ) stop
+    end
+ end
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/pr100273.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/pr100273.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/pr100273.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/pr100273.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,26 ----
+ ! { dg-do compile }
+ ! PR fortran/100273 - ICE in gfc_create_module_variable
+ !
+ ! Contributed by G.Steinmetz
+ 
+ module m
+   implicit none
+ contains
+   character(4) function g(k)
+     integer :: k
+     g = f(k)
+   contains
+     function f(n)
+       character(3), parameter :: a(2) = ['1  ', '123']
+       integer :: n
+       character(len_trim(a(n))) :: f
+       f = 'abc'
+     end
+   end
+ end
+ program p
+   use m 
+   implicit none
+   print *, '>>' // g(1) // '<<'
+   print *, '>>' // g(2) // '<<'
+ end
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/pr103312.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/pr103312.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/pr103312.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/pr103312.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,87 ----
+ ! { dg-do run }
+ !
+ ! Test the fix for pr103312, in which the use of a component call in
+ ! initialization expressions, eg. character(this%size()), caused ICEs.
+ !
+ ! Contributed by Arseny Solokha  <asolokha@gmx.com>
+ !
+ module example
+ 
+   type, abstract :: foo
+     integer :: i
+   contains
+     procedure(foo_size), deferred :: size
+     procedure(foo_func), deferred :: func
+   end type
+ 
+   interface
+     function foo_func (this) result (string)
+       import :: foo
+       class(foo) :: this
+       character(this%size()) :: string
+     end function
+     pure integer function foo_size (this)
+       import foo
+       class(foo), intent(in) :: this
+     end function
+   end interface
+ 
+ end module
+ 
+ module extension
+   use example
+   implicit none
+   type, extends(foo) :: bar
+   contains
+     procedure :: size
+     procedure :: func
+   end type
+ 
+ contains
+     pure integer function size (this)
+       class(bar), intent(in) :: this
+       size = this%i
+     end function
+     function func (this) result (string)
+       class(bar) :: this
+       character(this%size()) :: string
+       string = repeat ("x", len (string))
+     end function
+ 
+ end module
+ 
+ module unextended
+   implicit none
+   type :: foobar
+     integer :: i
+   contains
+     procedure :: size
+     procedure :: func
+   end type
+ 
+ contains
+     pure integer function size (this)
+       class(foobar), intent(in) :: this
+       size = this%i
+     end function
+     function func (this) result (string)
+       class(foobar) :: this
+       character(this%size()) :: string
+       character(:), allocatable :: chr
+       string = repeat ("y", len (string))
+       allocate (character(this%size()) :: chr)
+       if (len (string) .ne. len (chr)) stop 1
+     end function
+ 
+ end module
+ 
+   use example
+   use extension
+   use unextended
+   type(bar) :: a
+   type(foobar) :: b
+   a%i = 5
+   if (a%func() .ne. 'xxxxx') stop 2
+   b%i = 7
+   if (b%func() .ne. 'yyyyyyy') stop 3
+ end
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/pr103389.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/pr103389.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/pr103389.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/pr103389.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,23 ----
+ ! { dg-do run }
+ !
+ ! Contributed by Gerhard Steinmetz  <gscfq@t-online.de>
+ !
+ program p
+    type t
+       integer, allocatable :: a(:)
+    end type
+    type(t) :: y
+    y%a = [1,2]
+    call s((y))
+    if (any (y%a .ne. [3,4])) stop 1
+ contains
+    subroutine s(x)
+       class(*) :: x
+       select type (x)
+         type is (t)
+           x%a = x%a + 2
+         class default
+           stop 2
+       end select
+    end
+ end
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/pr104429.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/pr104429.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/pr104429.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/pr104429.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,35 ----
+ ! { dg-do run }
+ !
+ ! Contributed by Gerhard Steinmetz  <gscfq@t-online.de>
+ !
+ module m
+    type t
+       real :: r
+    contains
+       procedure :: op
+       procedure :: assign
+       generic :: operator(*) => op
+       generic :: assignment(=) => assign
+    end type
+ contains
+    function op (x, y)
+       class(t), allocatable :: op
+       class(t), intent(in) :: x
+       real, intent(in) :: y
+       allocate (op, source = t (x%r * y))
+    end
+    subroutine assign (z, x)
+       type(t), intent(in) :: x
+       class(t), intent(out) :: z
+       z%r = x%r
+    end
+ end
+ program p
+    use m
+    class(t), allocatable :: x
+    real :: y = 2
+    allocate (x, source = t (2.0))
+    x = x * y
+    if (int (x%r) .ne. 4) stop 1
+    if (allocated (x)) deallocate (x)
+ end
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/pr105152.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/pr105152.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/pr105152.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/pr105152.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,19 ----
+ ! { dg-do compile }
+ !
+ ! Contributed by Gerhard Steinmetz  <gscfq@t-online.de>
+ !
+ program p
+    use iso_c_binding
+    type, bind(c) :: t
+       integer(c_int) :: a
+    end type
+    interface
+       function f(x) bind(c) result(z)
+          import :: c_int, t
+          type(t) :: x(:)
+          integer(c_int) :: z
+       end
+    end interface
+    class(*), allocatable :: y(:)
+    n = f(y) ! { dg-error "either an unlimited polymorphic or assumed type" }
+ end
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/pr108889.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/pr108889.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/pr108889.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/pr108889.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,43 ----
+ ! { dg-do compile }
+ ! { dg-options "-Wall -fdump-tree-original" }
+ !
+ ! Contributed by Tobias Burnus  <burnus@gcc.gnu.org>
+ !
+ program main
+   implicit none
+ 
+   type :: struct
+     real, allocatable :: var(:)
+   end type struct
+ 
+   type(struct) :: single
+   real, allocatable :: ref1(:), ref2(:), ref3(:), ref4(:)
+ 
+   ref2 = [1,2,3,4,5]    ! Warnings here
+ 
+   single%var = ref2     ! No warnings for components
+   ref1 = single%var     ! Warnings here
+   ref1 = [1,2,3,4,5]    ! Should not add to tree dump count
+ 
+   allocate (ref3(5))
+   ref3 = single%var     ! No warnings following allocation
+ 
+   call set_ref4
+ 
+   call test (ref1)
+   call test (ref2)
+   call test (ref3)
+   call test (ref4)
+ 
+ contains
+   subroutine test (arg)
+     real, allocatable :: arg(:)
+     if (size(arg) /= size(single%var)) stop 1
+     if (lbound(arg, 1) /= 1) stop 2
+     if (any (arg /= single%var)) stop 3
+   end
+   subroutine set_ref4
+     ref4 = single%var   ! Warnings in contained scope
+   end
+ end
+ ! { df-final { scan-tree-dump-times "ubound = 0" 3 "original" } }
\ No newline at end of file
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/pr109345.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/pr109345.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/pr109345.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/pr109345.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,76 ----
+ ! { dg-do run }
+ !
+ ! Test the fix for PR109345 in which array references in the SELECT TYPE
+ ! block below failed because the descriptor span was not set correctly.
+ !
+ ! Contributed by Lauren Chilutti  <lchilutti@gmail.com>
+ !
+ program test
+   implicit none
+   type :: t
+     character(len=12, kind=4) :: str_array(4)
+     integer :: i
+   end type
+   character(len=12, kind=1), target :: str_array(4)
+   character(len=12, kind=4), target :: str_array4(4)
+   type(t) :: str_t (4)
+   integer :: i
+ 
+   str_array(:) = ""
+   str_array(1) = "12345678"
+   str_array(2) = "@ABCDEFG"
+ ! Original failing test
+   call foo (str_array)
+ 
+   str_array4(:) = ""
+   str_array4(1) = "12345678"
+   str_array4(2) = "@ABCDEFG"
+   str_t = [(t(str_array4, i), i = 1, 4)]
+ ! Test character(kind=4)
+   call foo (str_t(2)%str_array)
+ ! Test component references
+ !  call foo (str_t%str_array(1), .true.) ! Does not work in 12-/13-branches
+ ! Test component references and that array offset is correct.
+ !  call foo (str_t(2:3)%i)               ! Does not work in 12-/13-branches
+ contains
+   subroutine foo (var, flag)
+     class(*), intent(in) :: var(:)
+     integer(kind=4) :: i
+     logical, optional :: flag
+     select type (var)
+     type is (character(len=*, kind=1))
+        if (len (var) /= 12) stop 1
+ ! Scalarised array references worked.
+        if (any (var /= str_array)) stop 2
+        do i = 1, size(var)
+ ! Elemental array references did not work.
+           if (trim (var(i)) /= trim (str_array(i))) stop 3
+        enddo
+ 
+     type is (character(len=*, kind=4))
+        if (len (var) /= 12) stop 4
+ ! Scalarised array references worked.
+        if (any (var /= var(1))) then
+          if (any (var /= str_array4)) stop 5
+        else
+          if (any (var /= str_array4(1))) stop 6
+        end if
+        do i = 1, size(var)
+ ! Elemental array references did not work. (Does not work in 13-branch)
+           if (var(i) /= var(1)) then
+             if (present (flag)) stop 7
+             if (trim (var(i)) /= trim (str_array4(i))) stop 8
+           else
+             if (trim (var(i)) /= trim (str_array4(1))) stop 9
+           end if
+        enddo
+ 
+        type is (integer(kind=4))
+          if (any(var /= [2,3])) stop 10
+          do i = 1, size (var)
+            if (var(i) /= i+1) stop 11
+          end do
+     end select
+   end
+ end
+ 
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/pr110415.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/pr110415.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/pr110415.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/pr110415.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,20 ----
+ ! { dg-do run }
+ !
+ ! Contributed by Brad Richardson <everythingfunctional@protonmail.com>
+ !
+   type, abstract :: p
+   end type p
+ 
+   type, extends(p) :: c
+   end type c
+ 
+   class(p), allocatable :: a
+ 
+   a = func()
+ contains
+   function func() result(a)
+     class(p), allocatable :: a
+ 
+     a = c()
+   end function func
+ end program
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/pr112459.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/pr112459.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/pr112459.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/pr112459.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,37 ----
+ ! { dg-do compile }
+ ! { dg-options "-w -fdump-tree-original" }
+ !
+ ! Contributed by Sebastian Bardeau  <bardeau@iram.fr>
+ !
+ module mymod
+   type mysubtype
+     integer(kind=4), allocatable :: a(:)
+   end type mysubtype
+   type :: mytype
+     integer :: i
+     type(mysubtype) :: sub
+   contains
+     final :: mytype_final
+   end type mytype
+ contains
+   subroutine mysubtype_final(sub)
+     type(mysubtype), intent(inout) :: sub
+     print *,'MYSUBTYPE>FINAL'
+     if (allocated(sub%a)) deallocate(sub%a)
+   end subroutine mysubtype_final
+   subroutine mytype_final(typ)
+     type(mytype), intent(inout) :: typ
+     print *,"MYTYPE>FINAL"
+     call mysubtype_final(typ%sub)
+   end subroutine mytype_final
+ end module mymod
+ !
+ program myprog
+   use mymod
+   type(mytype), pointer :: c
+   print *,"Before allocation"
+   allocate(c)
+   print *,"After allocation"
+ end program myprog
+ ! Final subroutines were called with std=gnu and -w = > 14 "_final"s.
+ ! { dg-final { scan-tree-dump-times "_final" 12 "original" } }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/pr113363.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/pr113363.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/pr113363.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/pr113363.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,86 ----
+ ! { dg-do run }
+ ! Test the fix for comment 1 in PR113363, which failed as in comments below.
+ ! Contributed by Harald Anlauf  <anlauf@gcc.gnu.org>
+ program p
+   implicit none
+   class(*), allocatable :: x(:), y
+   character(*), parameter :: arr(2) = ["hello ","bye   "], &
+                              sca = "Have a nice day"
+   character(10) :: const
+ 
+ ! Bug was detected in polymorphic array function results
+   allocate(x, source = foo ())
+   call check1 (x, arr)              ! Wrong output "6 hello e"
+   deallocate (x)
+   x = foo ()
+   call check1 (x, arr)              ! Wrong output "0  "
+   associate (var => foo ())         ! OK after r14-9489-g3fd46d859cda10
+     call check1 (var, arr)          ! Now OK - outputs: "6 hello bye   "
+   end associate
+ 
+ ! Check scalar function results     ! All OK
+   allocate (y, source = bar())
+   call check2 (y, sca)
+   deallocate (y)
+   y = bar ()
+   call check2 (y, sca)
+   deallocate (y)
+   associate (var => bar ())
+     call check2 (var, sca)
+   end associate
+ 
+ ! Finally variable expressions...
+   allocate (y, source = x(1))       ! Gave zero length here
+   call check2 (y, "hello")
+   y = x(2)                          ! Segfaulted here
+   call check2 (y, "bye   ")
+   associate (var => x(2))           ! Gave zero length here
+     call check2 (var, "bye   ")
+   end associate
+ 
+ ! ...and constant expressions       ! All OK
+   deallocate(y)
+   allocate (y, source = "abcde")
+   call check2 (y, "abcde")
+   const = "hijklmnopq"
+   y = const
+   call check2 (y, "hijklmnopq")
+   associate (var => "mnopq")
+     call check2 (var, "mnopq")
+   end associate
+   deallocate (x, y)
+ 
+ contains
+ 
+   function foo() result(res)
+     class(*), allocatable :: res(:)
+     res = arr
+   end function foo
+ 
+   function bar() result(res)
+     class(*), allocatable :: res
+     res = sca
+   end function bar
+ 
+   subroutine check1 (x, carg)
+     class(*), intent(in) :: x(:)
+     character(*) :: carg(:)
+     select type (x)
+     type is (character(*))
+       if (any (x .ne. carg)) stop 1
+     class default
+        stop 2
+     end select
+   end subroutine check1
+ 
+   subroutine check2 (x, carg)
+     class(*), intent(in) :: x
+     character(*) :: carg
+     select type (x)
+     type is (character(*))
+       if (x .ne. carg) stop 3
+     class default
+        stop 4
+     end select
+   end subroutine check2
+ end
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/pr115348.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/pr115348.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/pr115348.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/pr115348.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,35 ----
+ ! { dg-do compile }
+ ! { dg-options "-fcheck=recursion" }
+ !
+ ! Test the fix for pr115348.
+ !
+ ! Contributed by Maxime van den Bossche  <maxime.vandenbossche@kuleuven.be>
+ !
+ module mymodule
+     implicit none
+ 
+     type mytype
+         integer :: mynumber
+         contains
+         procedure :: myroutine
+     end type mytype
+ 
+     contains
+ 
+     subroutine myroutine(self)
+         class(mytype), intent(out) :: self
+ 
+         self%mynumber = 1
+     end subroutine myroutine
+ end module mymodule
+ 
+ 
+ program myprogram
+     use mymodule, only: mytype
+     implicit none
+ 
+     type(mytype) :: myobject
+ 
+     call myobject%myroutine()
+     print *, myobject%mynumber
+ end program myprogram
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/pr117730_a.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/pr117730_a.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/pr117730_a.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/pr117730_a.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,50 ----
+ ! { dg-do compile }
+ !
+ ! Test the fix for PR117730 in which the non_overrridable procedures in 'child'
+ ! were mixied up in the vtable for the extension 'child2' in pr117730_b.f90.
+ ! This resulted in 'this%calc()' in 'function child_get(this)' returning garbage
+ ! when 'this' was of dynamic type 'child2'.
+ !
+ ! Contributed by  <daraja@web.de> in comment 4 of PR84674.
+ !
+ module module1
+     implicit none
+     private
+     public :: child
+ 
+     type, abstract :: parent
+     contains
+         procedure, pass :: reset => parent_reset
+     end type parent
+ 
+     type, extends(parent), abstract :: child
+     contains
+         procedure, pass, non_overridable :: reset => child_reset
+         procedure, pass, non_overridable :: get => child_get
+         procedure(calc_i), pass, deferred :: calc
+     end type child
+ 
+     abstract interface
+         pure function calc_i(this) result(value)
+             import :: child
+             class(child), intent(in) :: this
+             integer                 :: value
+         end function calc_i
+     end interface
+ 
+ contains
+     pure subroutine parent_reset(this)
+         class(parent), intent(inout) :: this
+     end subroutine parent_reset
+ 
+     pure subroutine child_reset(this)
+         class(child), intent(inout) :: this
+     end subroutine child_reset
+ 
+     function child_get(this) result(value)
+         class(child), intent(inout) :: this
+         integer                   :: value
+ 
+         value = this%calc()
+     end function child_get
+ end module module1
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/pr117730_b.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/pr117730_b.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/pr117730_b.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/pr117730_b.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,47 ----
+ ! { dg-do run }
+ ! { dg-compile-aux-modules "pr117730_a.f90" }
+ ! { dg-additional-sources pr117730_a.f90 }
+ !
+ ! Test the fix for PR117730 in which the non_overrridable procedures in
+ ! pr117730_a.f90 were mixied up in the vtable for 'child2' below. This resulted
+ ! in 'this%calc()' in 'function child_get(this)' returning garbage.
+ !
+ ! Contributed by  <daraja@web.de> in comment 4 of PR84674.
+ !
+ module module2
+     use module1, only: child
+ 
+     implicit none
+     private
+     public :: child2
+ 
+     type, extends(child) :: child2
+     contains
+         procedure, pass :: calc => child2_calc
+     end type child2
+ 
+ contains
+ 
+     pure function child2_calc(this) result(value)
+         class(child2), intent(in) :: this
+         integer :: value
+ 
+         value = 1
+     end function child2_calc
+ 
+ end module module2
+ 
+ program test
+     use module2, only: child2
+ 
+     implicit none
+ 
+     type(child2) :: F
+ 
+     if (F%calc() /= 1) stop 1
+ 
+     print *, "---------------"
+     if (F%get() /= 1) stop 2
+ 
+ end program test
+ ! { dg-final { cleanup-modules "module1" } }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/pr117763.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/pr117763.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/pr117763.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/pr117763.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,279 ----
+ ! { dg-do compile }
+ ! { dg-options "-fdump-tree-original" }
+ !
+ ! Test the fix for PR117763, which was a regression caused by the patch for
+ ! PR109345.
+ !
+ ! Contributed by Juergen Reuter  <juergen.reuter@desy.de>
+ !
+ module iso_varying_string
+   implicit none
+   integer, parameter, private :: GET_BUFFER_LEN = 1
+ 
+   type, public :: varying_string
+      private
+      character(LEN=1), dimension(:), allocatable :: chars
+   end type varying_string
+ 
+   interface assignment(=)
+      module procedure op_assign_CH_VS
+      module procedure op_assign_VS_CH
+   end interface assignment(=)
+ 
+   interface char
+      module procedure char_auto
+      module procedure char_fixed
+   end interface char
+ 
+   interface len
+      module procedure len_
+   end interface len
+ 
+   interface var_str
+      module procedure var_str_
+   end interface var_str
+ 
+   public :: assignment(=)
+   public :: char
+   public :: len
+   public :: var_str
+ 
+   private :: op_assign_CH_VS
+   private :: op_assign_VS_CH
+   private :: char_auto
+   private :: char_fixed
+   private :: len_
+   private :: var_str_
+ 
+ contains
+ 
+   elemental function len_ (string) result (length)
+     type(varying_string), intent(in) :: string
+     integer                          :: length
+     if(ALLOCATED(string%chars)) then
+        length = SIZE(string%chars)
+     else
+        length = 0
+     endif
+   end function len_
+ 
+   elemental subroutine op_assign_CH_VS (var, exp)
+     character(LEN=*), intent(out)    :: var
+     type(varying_string), intent(in) :: exp
+     var = char(exp)
+   end subroutine op_assign_CH_VS
+ 
+   elemental subroutine op_assign_VS_CH (var, exp)
+     type(varying_string), intent(out) :: var
+     character(LEN=*), intent(in)      :: exp
+     var = var_str(exp)
+   end subroutine op_assign_VS_CH
+ 
+   pure function char_auto (string) result (char_string)
+     type(varying_string), intent(in) :: string
+     character(LEN=len(string))       :: char_string
+     integer                          :: i_char
+     forall(i_char = 1:len(string))
+        char_string(i_char:i_char) = string%chars(i_char)
+     end forall
+   end function char_auto
+ 
+   pure function char_fixed (string, length) result (char_string)
+     type(varying_string), intent(in) :: string
+     integer, intent(in)              :: length
+     character(LEN=length)            :: char_string
+     char_string = char(string)
+   end function char_fixed
+ 
+   elemental function var_str_ (char) result (string)
+     character(LEN=*), intent(in) :: char
+     type(varying_string)         :: string
+     integer                      :: length
+     integer                      :: i_char
+     length = LEN(char)
+     ALLOCATE(string%chars(length))
+     forall(i_char = 1:length)
+        string%chars(i_char) = char(i_char:i_char)
+     end forall
+   end function var_str_
+ 
+ end module iso_varying_string
+ 
+ module model_data
+   use, intrinsic :: iso_c_binding !NODEP!
+   use iso_varying_string, string_t => varying_string
+ 
+   implicit none
+   private
+ 
+   public :: field_data_t
+   public :: model_data_t
+ 
+   type :: field_data_t
+      private
+      type(string_t) :: longname
+      integer :: pdg = 0
+      logical :: has_anti = .false.
+      type(string_t), dimension(:), allocatable :: name, anti
+      type(string_t) :: tex_name
+      integer :: multiplicity = 1
+    contains
+      procedure :: init => field_data_init
+      procedure :: set => field_data_set
+      procedure :: get_longname => field_data_get_longname
+      procedure :: get_name_array => field_data_get_name_array
+   end type field_data_t
+ 
+   type :: model_data_t
+      private
+      type(field_data_t), dimension(:), allocatable :: field
+    contains
+      generic :: init => model_data_init
+      procedure, private :: model_data_init
+      procedure :: get_field_array_ptr => model_data_get_field_array_ptr
+      procedure :: get_field_ptr_by_index => model_data_get_field_ptr_index
+      procedure :: init_sm_test => model_data_init_sm_test
+   end type model_data_t
+ 
+ 
+ contains
+ 
+   subroutine field_data_init (prt, longname, pdg)
+     class(field_data_t), intent(out) :: prt
+     type(string_t), intent(in) :: longname
+     integer, intent(in) :: pdg
+     prt%longname = longname
+     prt%pdg = pdg
+     prt%tex_name = ""
+   end subroutine field_data_init
+ 
+   subroutine field_data_set (prt, &
+        name, anti, tex_name)
+     class(field_data_t), intent(inout) :: prt
+     type(string_t), dimension(:), intent(in), optional :: name, anti
+     type(string_t), intent(in), optional :: tex_name
+     if (present (name)) then
+        if (allocated (prt%name))  deallocate (prt%name)
+        allocate (prt%name (size (name)), source = name)
+     end if
+     if (present (anti)) then
+        if (allocated (prt%anti))  deallocate (prt%anti)
+        allocate (prt%anti (size (anti)), source = anti)
+        prt%has_anti = .true.
+     end if
+     if (present (tex_name))  prt%tex_name = tex_name
+   end subroutine field_data_set
+ 
+   pure function field_data_get_longname (prt) result (name)
+     type(string_t) :: name
+     class(field_data_t), intent(in) :: prt
+     name = prt%longname
+   end function field_data_get_longname
+ 
+   subroutine field_data_get_name_array (prt, is_antiparticle, name)
+     class(field_data_t), intent(in) :: prt
+     logical, intent(in) :: is_antiparticle
+     type(string_t), dimension(:), allocatable, intent(inout) :: name
+     if (allocated (name))  deallocate (name)
+     if (is_antiparticle) then
+        if (prt%has_anti) then
+           allocate (name (size (prt%anti)))
+           name = prt%anti
+        else
+           allocate (name (0))
+        end if
+     else
+        allocate (name (size (prt%name)))
+        name = prt%name
+     end if
+   end subroutine field_data_get_name_array
+ 
+   subroutine model_data_init (model, n_field)
+     class(model_data_t), intent(out) :: model
+     integer, intent(in) :: n_field
+     allocate (model%field (n_field))
+   end subroutine model_data_init
+ 
+   function model_data_get_field_array_ptr (model) result (ptr)
+     class(model_data_t), intent(in), target :: model
+     type(field_data_t), dimension(:), pointer :: ptr
+     ptr => model%field
+   end function model_data_get_field_array_ptr
+ 
+   function model_data_get_field_ptr_index (model, i) result (ptr)
+     class(model_data_t), intent(in), target :: model
+     integer, intent(in) :: i
+     type(field_data_t), pointer :: ptr
+     ptr => model%field(i)
+   end function model_data_get_field_ptr_index
+ 
+   subroutine model_data_init_sm_test (model)
+     class(model_data_t), intent(out) :: model
+     type(field_data_t), pointer :: field
+     integer :: i
+     call model%init (2)
+     i = 0
+     i = i + 1
+     field => model%get_field_ptr_by_index (i)
+     call field%init (var_str ("W_BOSON"), 24)
+     call field%set (name = [var_str ("W+")], anti = [var_str ("W-")])
+     i = i + 1
+     field => model%get_field_ptr_by_index (i)
+     call field%init (var_str ("HIGGS"), 25)
+     call field%set (name = [var_str ("H")])
+   end subroutine model_data_init_sm_test
+ 
+ end module model_data
+ 
+ 
+ module models
+   use, intrinsic :: iso_c_binding !NODEP!
+   use iso_varying_string, string_t => varying_string
+   use model_data
+ !  use parser
+ !  use variables
+   implicit none
+   private
+   public :: model_t
+ 
+   type, extends (model_data_t) :: model_t
+      private
+    contains
+      procedure :: append_field_vars => model_append_field_vars
+   end type model_t
+ 
+ contains
+ 
+   subroutine model_append_field_vars (model)
+     class(model_t), intent(inout) :: model
+     type(field_data_t), dimension(:), pointer :: field_array
+     type(field_data_t), pointer :: field
+     type(string_t) :: name
+     type(string_t), dimension(:), allocatable :: name_array
+     integer :: i, j
+     field_array => model%get_field_array_ptr ()
+     do i = 1, size (field_array)
+        name = field_array(i)%get_longname ()
+        call field_array(i)%get_name_array (.false., name_array)
+     end do
+   end subroutine model_append_field_vars
+ 
+ end module models
+ 
+ 
+ program main_ut
+   use iso_varying_string, string_t => varying_string
+   use model_data
+   use models
+   implicit none
+ 
+   class(model_data_t), pointer :: model
+   model => null ()
+   allocate (model_t :: model)
+   select type (model)
+   type is (model_t)
+      call model%init_sm_test ()
+      call model%append_field_vars ()
+   end select
+ end program main_ut
+ ! { dg-final { scan-tree-dump-times "__result->span = \[12\].." 1 "original" } }
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/pr117797.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/pr117797.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/pr117797.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/pr117797.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,55 ----
+ ! { dg-do run }
+ !
+ ! Test the fix for the regression caused by r15-5083.
+ !
+ ! Contributed by Neil Carlson  <neil.n.carlson@gmail.com>
+ !
+ module foo
+ 
+   type, public :: any_matrix
+     private
+     class(*), allocatable :: value(:,:)
+   end type
+ 
+ contains
+ 
+   function bar(this) result(uptr)
+     class(any_matrix), target, intent(in) :: this
+     class(*), pointer :: uptr(:,:)
+     uptr => this%value ! Seg. fault in trans-array.cc(gfc_get_array_span) here
+   end function
+ 
+   function build(this) result (res)
+     class(*) :: this(:,:)
+     type(any_matrix) :: res
+     res%value = this
+   end function
+ 
+   function evaluate (this) result (res)
+     class(*) :: this(:,:)
+     character(len = 2, kind = 1), allocatable :: res(:)
+       select type (ans => this)
+         type is (character(*))
+           res = reshape (ans, [4])
+         type is (integer)
+           allocate (res (8))
+           write (res, '(i2)') ans
+         class default
+           res = ['no','t ','OK','!!']
+       end select
+   end
+ 
+ end module
+ 
+   use foo
+   class(*), allocatable :: up (:, :)
+   character(len = 2, kind = 1) :: chr(2,2) = reshape (['ab','cd','ef','gh'], [2,2])
+   integer :: i(2,2) = reshape ([1,2,3,4], [2,2])
+   up = bar (build (chr))
+   if (any (evaluate (up) /= reshape (chr, [4]))) stop 1
+ 
+   up = bar (build (i))
+   if (any (evaluate (up) /= [' 1',' 2',' 3',' 4'])) stop 2
+ 
+   deallocate (up)
+ end
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/pr120191_1.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/pr120191_1.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/pr120191_1.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/pr120191_1.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,614 ----
+ ! PR fortran/120191
+ ! { dg-do run }
+ 
+   integer(kind=1) :: a1(10, 10, 10), b1(10)
+   integer(kind=2) :: a2(10, 10, 10), b2(10)
+   integer(kind=4) :: a4(10, 10, 10), b4(10)
+   integer(kind=8) :: a8(10, 10, 10), b8(10)
+   real(kind=4) :: r4(10, 10, 10), s4(10)
+   real(kind=8) :: r8(10, 10, 10), s8(10)
+   logical :: l1(10, 10, 10), l2(10), l3
+   l1 = .true.
+   l2 = .true.
+   l3 = .true.
+   a1 = 0
+   if (any (maxloc (a1) .ne. 1)) stop 1
+   if (any (maxloc (a1, back=.false.) .ne. 1)) stop 2
+   if (any (maxloc (a1, back=.true.) .ne. 10)) stop 3
+   if (any (maxloc (a1, kind=2) .ne. 1)) stop 4
+   if (any (maxloc (a1, kind=4, back=.false.) .ne. 1)) stop 5
+   if (any (maxloc (a1, kind=8, back=.true.) .ne. 10)) stop 6
+   if (any (maxloc (a1, 1) .ne. 1)) stop 7
+   if (any (maxloc (a1, 1, back=.false.) .ne. 1)) stop 8
+   if (any (maxloc (a1, 1, back=.true.) .ne. 10)) stop 9
+   if (any (maxloc (a1, 1, kind=1) .ne. 1)) stop 10
+   if (any (maxloc (a1, 1, kind=2, back=.false.) .ne. 1)) stop 11
+   if (any (maxloc (a1, 1, kind=4, back=.true.) .ne. 10)) stop 12
+   if (any (maxloc (a1, 1, l1) .ne. 1)) stop 13
+   if (any (maxloc (a1, 1, l1, back=.false.) .ne. 1)) stop 14
+   if (any (maxloc (a1, 1, l1, back=.true.) .ne. 10)) stop 15
+   if (any (maxloc (a1, 1, l1, kind=8) .ne. 1)) stop 16
+   if (any (maxloc (a1, 1, l1, 4, .false.) .ne. 1)) stop 17
+   if (any (maxloc (a1, 1, l1, 2, .true.) .ne. 10)) stop 18
+   if (any (maxloc (a1, 1, l3) .ne. 1)) stop 19
+   if (any (maxloc (a1, 1, l3, back=.false.) .ne. 1)) stop 20
+   if (any (maxloc (a1, 1, l3, back=.true.) .ne. 10)) stop 21
+   if (any (maxloc (a1, 1, l3, kind=8) .ne. 1)) stop 22
+   if (any (maxloc (a1, 1, l3, 4, .false.) .ne. 1)) stop 23
+   if (any (maxloc (a1, 1, l3, 2, .true.) .ne. 10)) stop 24
+   b1 = 0
+   if (any (maxloc (b1) .ne. 1)) stop 1
+   if (any (maxloc (b1, back=.false.) .ne. 1)) stop 2
+   if (any (maxloc (b1, back=.true.) .ne. 10)) stop 3
+   if (any (maxloc (b1, kind=2) .ne. 1)) stop 4
+   if (any (maxloc (b1, kind=4, back=.false.) .ne. 1)) stop 5
+   if (any (maxloc (b1, kind=8, back=.true.) .ne. 10)) stop 6
+   if (maxloc (b1, 1) .ne. 1) stop 7
+   if (maxloc (b1, 1, back=.false.) .ne. 1) stop 8
+   if (maxloc (b1, 1, back=.true.) .ne. 10) stop 9
+   if (maxloc (b1, 1, kind=1) .ne. 1) stop 10
+   if (maxloc (b1, 1, kind=2, back=.false.) .ne. 1) stop 11
+   if (maxloc (b1, 1, kind=4, back=.true.) .ne. 10) stop 12
+   if (maxloc (b1, 1, l2) .ne. 1) stop 13
+   if (maxloc (b1, 1, l2, back=.false.) .ne. 1) stop 14
+   if (maxloc (b1, 1, l2, back=.true.) .ne. 10) stop 15
+   if (maxloc (b1, 1, l2, kind=8) .ne. 1) stop 16
+   if (maxloc (b1, 1, l2, 4, .false.) .ne. 1) stop 17
+   if (maxloc (b1, 1, l2, 2, .true.) .ne. 10) stop 18
+   if (maxloc (b1, 1, l3) .ne. 1) stop 19
+   if (maxloc (b1, 1, l3, back=.false.) .ne. 1) stop 20
+   if (maxloc (b1, 1, l3, back=.true.) .ne. 10) stop 21
+   if (maxloc (b1, 1, l3, kind=8) .ne. 1) stop 22
+   if (maxloc (b1, 1, l3, 4, .false.) .ne. 1) stop 23
+   if (maxloc (b1, 1, l3, 2, .true.) .ne. 10) stop 24
+   a2 = 0
+   if (any (maxloc (a2) .ne. 1)) stop 1
+   if (any (maxloc (a2, back=.false.) .ne. 1)) stop 2
+   if (any (maxloc (a2, back=.true.) .ne. 10)) stop 3
+   if (any (maxloc (a2, kind=2) .ne. 1)) stop 4
+   if (any (maxloc (a2, kind=4, back=.false.) .ne. 1)) stop 5
+   if (any (maxloc (a2, kind=8, back=.true.) .ne. 10)) stop 6
+   if (any (maxloc (a2, 1) .ne. 1)) stop 7
+   if (any (maxloc (a2, 1, back=.false.) .ne. 1)) stop 8
+   if (any (maxloc (a2, 1, back=.true.) .ne. 10)) stop 9
+   if (any (maxloc (a2, 1, kind=1) .ne. 1)) stop 10
+   if (any (maxloc (a2, 1, kind=2, back=.false.) .ne. 1)) stop 11
+   if (any (maxloc (a2, 1, kind=4, back=.true.) .ne. 10)) stop 12
+   if (any (maxloc (a2, 1, l1) .ne. 1)) stop 13
+   if (any (maxloc (a2, 1, l1, back=.false.) .ne. 1)) stop 14
+   if (any (maxloc (a2, 1, l1, back=.true.) .ne. 10)) stop 15
+   if (any (maxloc (a2, 1, l1, kind=8) .ne. 1)) stop 16
+   if (any (maxloc (a2, 1, l1, 4, .false.) .ne. 1)) stop 17
+   if (any (maxloc (a2, 1, l1, 2, .true.) .ne. 10)) stop 18
+   if (any (maxloc (a2, 1, l3) .ne. 1)) stop 19
+   if (any (maxloc (a2, 1, l3, back=.false.) .ne. 1)) stop 20
+   if (any (maxloc (a2, 1, l3, back=.true.) .ne. 10)) stop 21
+   if (any (maxloc (a2, 1, l3, kind=8) .ne. 1)) stop 22
+   if (any (maxloc (a2, 1, l3, 4, .false.) .ne. 1)) stop 23
+   if (any (maxloc (a2, 1, l3, 2, .true.) .ne. 10)) stop 24
+   b2 = 0
+   if (any (maxloc (b2) .ne. 1)) stop 1
+   if (any (maxloc (b2, back=.false.) .ne. 1)) stop 2
+   if (any (maxloc (b2, back=.true.) .ne. 10)) stop 3
+   if (any (maxloc (b2, kind=2) .ne. 1)) stop 4
+   if (any (maxloc (b2, kind=4, back=.false.) .ne. 1)) stop 5
+   if (any (maxloc (b2, kind=8, back=.true.) .ne. 10)) stop 6
+   if (maxloc (b2, 1) .ne. 1) stop 7
+   if (maxloc (b2, 1, back=.false.) .ne. 1) stop 8
+   if (maxloc (b2, 1, back=.true.) .ne. 10) stop 9
+   if (maxloc (b2, 1, kind=1) .ne. 1) stop 10
+   if (maxloc (b2, 1, kind=2, back=.false.) .ne. 1) stop 11
+   if (maxloc (b2, 1, kind=4, back=.true.) .ne. 10) stop 12
+   if (maxloc (b2, 1, l2) .ne. 1) stop 13
+   if (maxloc (b2, 1, l2, back=.false.) .ne. 1) stop 14
+   if (maxloc (b2, 1, l2, back=.true.) .ne. 10) stop 15
+   if (maxloc (b2, 1, l2, kind=8) .ne. 1) stop 16
+   if (maxloc (b2, 1, l2, 4, .false.) .ne. 1) stop 17
+   if (maxloc (b2, 1, l2, 2, .true.) .ne. 10) stop 18
+   if (maxloc (b2, 1, l3) .ne. 1) stop 19
+   if (maxloc (b2, 1, l3, back=.false.) .ne. 1) stop 20
+   if (maxloc (b2, 1, l3, back=.true.) .ne. 10) stop 21
+   if (maxloc (b2, 1, l3, kind=8) .ne. 1) stop 22
+   if (maxloc (b2, 1, l3, 4, .false.) .ne. 1) stop 23
+   if (maxloc (b2, 1, l3, 2, .true.) .ne. 10) stop 24
+   a4 = 0
+   if (any (maxloc (a4) .ne. 1)) stop 1
+   if (any (maxloc (a4, back=.false.) .ne. 1)) stop 2
+   if (any (maxloc (a4, back=.true.) .ne. 10)) stop 3
+   if (any (maxloc (a4, kind=2) .ne. 1)) stop 4
+   if (any (maxloc (a4, kind=4, back=.false.) .ne. 1)) stop 5
+   if (any (maxloc (a4, kind=8, back=.true.) .ne. 10)) stop 6
+   if (any (maxloc (a4, 1) .ne. 1)) stop 7
+   if (any (maxloc (a4, 1, back=.false.) .ne. 1)) stop 8
+   if (any (maxloc (a4, 1, back=.true.) .ne. 10)) stop 9
+   if (any (maxloc (a4, 1, kind=1) .ne. 1)) stop 10
+   if (any (maxloc (a4, 1, kind=2, back=.false.) .ne. 1)) stop 11
+   if (any (maxloc (a4, 1, kind=4, back=.true.) .ne. 10)) stop 12
+   if (any (maxloc (a4, 1, l1) .ne. 1)) stop 13
+   if (any (maxloc (a4, 1, l1, back=.false.) .ne. 1)) stop 14
+   if (any (maxloc (a4, 1, l1, back=.true.) .ne. 10)) stop 15
+   if (any (maxloc (a4, 1, l1, kind=8) .ne. 1)) stop 16
+   if (any (maxloc (a4, 1, l1, 4, .false.) .ne. 1)) stop 17
+   if (any (maxloc (a4, 1, l1, 2, .true.) .ne. 10)) stop 18
+   if (any (maxloc (a4, 1, l3) .ne. 1)) stop 19
+   if (any (maxloc (a4, 1, l3, back=.false.) .ne. 1)) stop 20
+   if (any (maxloc (a4, 1, l3, back=.true.) .ne. 10)) stop 21
+   if (any (maxloc (a4, 1, l3, kind=8) .ne. 1)) stop 22
+   if (any (maxloc (a4, 1, l3, 4, .false.) .ne. 1)) stop 23
+   if (any (maxloc (a4, 1, l3, 2, .true.) .ne. 10)) stop 24
+   b4 = 0
+   if (any (maxloc (b4) .ne. 1)) stop 1
+   if (any (maxloc (b4, back=.false.) .ne. 1)) stop 2
+   if (any (maxloc (b4, back=.true.) .ne. 10)) stop 3
+   if (any (maxloc (b4, kind=2) .ne. 1)) stop 4
+   if (any (maxloc (b4, kind=4, back=.false.) .ne. 1)) stop 5
+   if (any (maxloc (b4, kind=8, back=.true.) .ne. 10)) stop 6
+   if (maxloc (b4, 1) .ne. 1) stop 7
+   if (maxloc (b4, 1, back=.false.) .ne. 1) stop 8
+   if (maxloc (b4, 1, back=.true.) .ne. 10) stop 9
+   if (maxloc (b4, 1, kind=1) .ne. 1) stop 10
+   if (maxloc (b4, 1, kind=2, back=.false.) .ne. 1) stop 11
+   if (maxloc (b4, 1, kind=4, back=.true.) .ne. 10) stop 12
+   if (maxloc (b4, 1, l2) .ne. 1) stop 13
+   if (maxloc (b4, 1, l2, back=.false.) .ne. 1) stop 14
+   if (maxloc (b4, 1, l2, back=.true.) .ne. 10) stop 15
+   if (maxloc (b4, 1, l2, kind=8) .ne. 1) stop 16
+   if (maxloc (b4, 1, l2, 4, .false.) .ne. 1) stop 17
+   if (maxloc (b4, 1, l2, 2, .true.) .ne. 10) stop 18
+   if (maxloc (b4, 1, l3) .ne. 1) stop 19
+   if (maxloc (b4, 1, l3, back=.false.) .ne. 1) stop 20
+   if (maxloc (b4, 1, l3, back=.true.) .ne. 10) stop 21
+   if (maxloc (b4, 1, l3, kind=8) .ne. 1) stop 22
+   if (maxloc (b4, 1, l3, 4, .false.) .ne. 1) stop 23
+   if (maxloc (b4, 1, l3, 2, .true.) .ne. 10) stop 24
+   a8 = 0
+   if (any (maxloc (a8) .ne. 1)) stop 1
+   if (any (maxloc (a8, back=.false.) .ne. 1)) stop 2
+   if (any (maxloc (a8, back=.true.) .ne. 10)) stop 3
+   if (any (maxloc (a8, kind=2) .ne. 1)) stop 4
+   if (any (maxloc (a8, kind=4, back=.false.) .ne. 1)) stop 5
+   if (any (maxloc (a8, kind=8, back=.true.) .ne. 10)) stop 6
+   if (any (maxloc (a8, 1) .ne. 1)) stop 7
+   if (any (maxloc (a8, 1, back=.false.) .ne. 1)) stop 8
+   if (any (maxloc (a8, 1, back=.true.) .ne. 10)) stop 9
+   if (any (maxloc (a8, 1, kind=1) .ne. 1)) stop 10
+   if (any (maxloc (a8, 1, kind=2, back=.false.) .ne. 1)) stop 11
+   if (any (maxloc (a8, 1, kind=4, back=.true.) .ne. 10)) stop 12
+   if (any (maxloc (a8, 1, l1) .ne. 1)) stop 13
+   if (any (maxloc (a8, 1, l1, back=.false.) .ne. 1)) stop 14
+   if (any (maxloc (a8, 1, l1, back=.true.) .ne. 10)) stop 15
+   if (any (maxloc (a8, 1, l1, kind=8) .ne. 1)) stop 16
+   if (any (maxloc (a8, 1, l1, 4, .false.) .ne. 1)) stop 17
+   if (any (maxloc (a8, 1, l1, 2, .true.) .ne. 10)) stop 18
+   if (any (maxloc (a8, 1, l3) .ne. 1)) stop 19
+   if (any (maxloc (a8, 1, l3, back=.false.) .ne. 1)) stop 20
+   if (any (maxloc (a8, 1, l3, back=.true.) .ne. 10)) stop 21
+   if (any (maxloc (a8, 1, l3, kind=8) .ne. 1)) stop 22
+   if (any (maxloc (a8, 1, l3, 4, .false.) .ne. 1)) stop 23
+   if (any (maxloc (a8, 1, l3, 2, .true.) .ne. 10)) stop 24
+   b8 = 0
+   if (any (maxloc (b8) .ne. 1)) stop 1
+   if (any (maxloc (b8, back=.false.) .ne. 1)) stop 2
+   if (any (maxloc (b8, back=.true.) .ne. 10)) stop 3
+   if (any (maxloc (b8, kind=2) .ne. 1)) stop 4
+   if (any (maxloc (b8, kind=4, back=.false.) .ne. 1)) stop 5
+   if (any (maxloc (b8, kind=8, back=.true.) .ne. 10)) stop 6
+   if (maxloc (b8, 1) .ne. 1) stop 7
+   if (maxloc (b8, 1, back=.false.) .ne. 1) stop 8
+   if (maxloc (b8, 1, back=.true.) .ne. 10) stop 9
+   if (maxloc (b8, 1, kind=1) .ne. 1) stop 10
+   if (maxloc (b8, 1, kind=2, back=.false.) .ne. 1) stop 11
+   if (maxloc (b8, 1, kind=4, back=.true.) .ne. 10) stop 12
+   if (maxloc (b8, 1, l2) .ne. 1) stop 13
+   if (maxloc (b8, 1, l2, back=.false.) .ne. 1) stop 14
+   if (maxloc (b8, 1, l2, back=.true.) .ne. 10) stop 15
+   if (maxloc (b8, 1, l2, kind=8) .ne. 1) stop 16
+   if (maxloc (b8, 1, l2, 4, .false.) .ne. 1) stop 17
+   if (maxloc (b8, 1, l2, 2, .true.) .ne. 10) stop 18
+   if (maxloc (b8, 1, l3) .ne. 1) stop 19
+   if (maxloc (b8, 1, l3, back=.false.) .ne. 1) stop 20
+   if (maxloc (b8, 1, l3, back=.true.) .ne. 10) stop 21
+   if (maxloc (b8, 1, l3, kind=8) .ne. 1) stop 22
+   if (maxloc (b8, 1, l3, 4, .false.) .ne. 1) stop 23
+   if (maxloc (b8, 1, l3, 2, .true.) .ne. 10) stop 24
+   r4 = 0.0
+   if (any (maxloc (r4) .ne. 1)) stop 1
+   if (any (maxloc (r4, back=.false.) .ne. 1)) stop 2
+   if (any (maxloc (r4, back=.true.) .ne. 10)) stop 3
+   if (any (maxloc (r4, kind=2) .ne. 1)) stop 4
+   if (any (maxloc (r4, kind=4, back=.false.) .ne. 1)) stop 5
+   if (any (maxloc (r4, kind=8, back=.true.) .ne. 10)) stop 6
+   if (any (maxloc (r4, 1) .ne. 1)) stop 7
+   if (any (maxloc (r4, 1, back=.false.) .ne. 1)) stop 8
+   if (any (maxloc (r4, 1, back=.true.) .ne. 10)) stop 9
+   if (any (maxloc (r4, 1, kind=1) .ne. 1)) stop 10
+   if (any (maxloc (r4, 1, kind=2, back=.false.) .ne. 1)) stop 11
+   if (any (maxloc (r4, 1, kind=4, back=.true.) .ne. 10)) stop 12
+   if (any (maxloc (r4, 1, l1) .ne. 1)) stop 13
+   if (any (maxloc (r4, 1, l1, back=.false.) .ne. 1)) stop 14
+   if (any (maxloc (r4, 1, l1, back=.true.) .ne. 10)) stop 15
+   if (any (maxloc (r4, 1, l1, kind=8) .ne. 1)) stop 16
+   if (any (maxloc (r4, 1, l1, 4, .false.) .ne. 1)) stop 17
+   if (any (maxloc (r4, 1, l1, 2, .true.) .ne. 10)) stop 18
+   if (any (maxloc (r4, 1, l3) .ne. 1)) stop 19
+   if (any (maxloc (r4, 1, l3, back=.false.) .ne. 1)) stop 20
+   if (any (maxloc (r4, 1, l3, back=.true.) .ne. 10)) stop 21
+   if (any (maxloc (r4, 1, l3, kind=8) .ne. 1)) stop 22
+   if (any (maxloc (r4, 1, l3, 4, .false.) .ne. 1)) stop 23
+   if (any (maxloc (r4, 1, l3, 2, .true.) .ne. 10)) stop 24
+   s4 = 0.0
+   if (any (maxloc (s4) .ne. 1)) stop 1
+   if (any (maxloc (s4, back=.false.) .ne. 1)) stop 2
+   if (any (maxloc (s4, back=.true.) .ne. 10)) stop 3
+   if (any (maxloc (s4, kind=2) .ne. 1)) stop 4
+   if (any (maxloc (s4, kind=4, back=.false.) .ne. 1)) stop 5
+   if (any (maxloc (s4, kind=8, back=.true.) .ne. 10)) stop 6
+   if (maxloc (s4, 1) .ne. 1) stop 7
+   if (maxloc (s4, 1, back=.false.) .ne. 1) stop 8
+   if (maxloc (s4, 1, back=.true.) .ne. 10) stop 9
+   if (maxloc (s4, 1, kind=1) .ne. 1) stop 10
+   if (maxloc (s4, 1, kind=2, back=.false.) .ne. 1) stop 11
+   if (maxloc (s4, 1, kind=4, back=.true.) .ne. 10) stop 12
+   if (maxloc (s4, 1, l2) .ne. 1) stop 13
+   if (maxloc (s4, 1, l2, back=.false.) .ne. 1) stop 14
+   if (maxloc (s4, 1, l2, back=.true.) .ne. 10) stop 15
+   if (maxloc (s4, 1, l2, kind=8) .ne. 1) stop 16
+   if (maxloc (s4, 1, l2, 4, .false.) .ne. 1) stop 17
+   if (maxloc (s4, 1, l2, 2, .true.) .ne. 10) stop 18
+   if (maxloc (s4, 1, l3) .ne. 1) stop 19
+   if (maxloc (s4, 1, l3, back=.false.) .ne. 1) stop 20
+   if (maxloc (s4, 1, l3, back=.true.) .ne. 10) stop 21
+   if (maxloc (s4, 1, l3, kind=8) .ne. 1) stop 22
+   if (maxloc (s4, 1, l3, 4, .false.) .ne. 1) stop 23
+   if (maxloc (s4, 1, l3, 2, .true.) .ne. 10) stop 24
+   r8 = 0.0
+   if (any (maxloc (r8) .ne. 1)) stop 1
+   if (any (maxloc (r8, back=.false.) .ne. 1)) stop 2
+   if (any (maxloc (r8, back=.true.) .ne. 10)) stop 3
+   if (any (maxloc (r8, kind=2) .ne. 1)) stop 4
+   if (any (maxloc (r8, kind=4, back=.false.) .ne. 1)) stop 5
+   if (any (maxloc (r8, kind=8, back=.true.) .ne. 10)) stop 6
+   if (any (maxloc (r8, 1) .ne. 1)) stop 7
+   if (any (maxloc (r8, 1, back=.false.) .ne. 1)) stop 8
+   if (any (maxloc (r8, 1, back=.true.) .ne. 10)) stop 9
+   if (any (maxloc (r8, 1, kind=1) .ne. 1)) stop 10
+   if (any (maxloc (r8, 1, kind=2, back=.false.) .ne. 1)) stop 11
+   if (any (maxloc (r8, 1, kind=4, back=.true.) .ne. 10)) stop 12
+   if (any (maxloc (r8, 1, l1) .ne. 1)) stop 13
+   if (any (maxloc (r8, 1, l1, back=.false.) .ne. 1)) stop 14
+   if (any (maxloc (r8, 1, l1, back=.true.) .ne. 10)) stop 15
+   if (any (maxloc (r8, 1, l1, kind=8) .ne. 1)) stop 16
+   if (any (maxloc (r8, 1, l1, 4, .false.) .ne. 1)) stop 17
+   if (any (maxloc (r8, 1, l1, 2, .true.) .ne. 10)) stop 18
+   if (any (maxloc (r8, 1, l3) .ne. 1)) stop 19
+   if (any (maxloc (r8, 1, l3, back=.false.) .ne. 1)) stop 20
+   if (any (maxloc (r8, 1, l3, back=.true.) .ne. 10)) stop 21
+   if (any (maxloc (r8, 1, l3, kind=8) .ne. 1)) stop 22
+   if (any (maxloc (r8, 1, l3, 4, .false.) .ne. 1)) stop 23
+   if (any (maxloc (r8, 1, l3, 2, .true.) .ne. 10)) stop 24
+   s8 = 0.0
+   if (any (maxloc (s8) .ne. 1)) stop 1
+   if (any (maxloc (s8, back=.false.) .ne. 1)) stop 2
+   if (any (maxloc (s8, back=.true.) .ne. 10)) stop 3
+   if (any (maxloc (s8, kind=2) .ne. 1)) stop 4
+   if (any (maxloc (s8, kind=4, back=.false.) .ne. 1)) stop 5
+   if (any (maxloc (s8, kind=8, back=.true.) .ne. 10)) stop 6
+   if (maxloc (s8, 1) .ne. 1) stop 7
+   if (maxloc (s8, 1, back=.false.) .ne. 1) stop 8
+   if (maxloc (s8, 1, back=.true.) .ne. 10) stop 9
+   if (maxloc (s8, 1, kind=1) .ne. 1) stop 10
+   if (maxloc (s8, 1, kind=2, back=.false.) .ne. 1) stop 11
+   if (maxloc (s8, 1, kind=4, back=.true.) .ne. 10) stop 12
+   if (maxloc (s8, 1, l2) .ne. 1) stop 13
+   if (maxloc (s8, 1, l2, back=.false.) .ne. 1) stop 14
+   if (maxloc (s8, 1, l2, back=.true.) .ne. 10) stop 15
+   if (maxloc (s8, 1, l2, kind=8) .ne. 1) stop 16
+   if (maxloc (s8, 1, l2, 4, .false.) .ne. 1) stop 17
+   if (maxloc (s8, 1, l2, 2, .true.) .ne. 10) stop 18
+   if (maxloc (s8, 1, l3) .ne. 1) stop 19
+   if (maxloc (s8, 1, l3, back=.false.) .ne. 1) stop 20
+   if (maxloc (s8, 1, l3, back=.true.) .ne. 10) stop 21
+   if (maxloc (s8, 1, l3, kind=8) .ne. 1) stop 22
+   if (maxloc (s8, 1, l3, 4, .false.) .ne. 1) stop 23
+   if (maxloc (s8, 1, l3, 2, .true.) .ne. 10) stop 24
+   a1 = 0
+   if (any (minloc (a1) .ne. 1)) stop 1
+   if (any (minloc (a1, back=.false.) .ne. 1)) stop 2
+   if (any (minloc (a1, back=.true.) .ne. 10)) stop 3
+   if (any (minloc (a1, kind=2) .ne. 1)) stop 4
+   if (any (minloc (a1, kind=4, back=.false.) .ne. 1)) stop 5
+   if (any (minloc (a1, kind=8, back=.true.) .ne. 10)) stop 6
+   if (any (minloc (a1, 1) .ne. 1)) stop 7
+   if (any (minloc (a1, 1, back=.false.) .ne. 1)) stop 8
+   if (any (minloc (a1, 1, back=.true.) .ne. 10)) stop 9
+   if (any (minloc (a1, 1, kind=1) .ne. 1)) stop 10
+   if (any (minloc (a1, 1, kind=2, back=.false.) .ne. 1)) stop 11
+   if (any (minloc (a1, 1, kind=4, back=.true.) .ne. 10)) stop 12
+   if (any (minloc (a1, 1, l1) .ne. 1)) stop 13
+   if (any (minloc (a1, 1, l1, back=.false.) .ne. 1)) stop 14
+   if (any (minloc (a1, 1, l1, back=.true.) .ne. 10)) stop 15
+   if (any (minloc (a1, 1, l1, kind=8) .ne. 1)) stop 16
+   if (any (minloc (a1, 1, l1, 4, .false.) .ne. 1)) stop 17
+   if (any (minloc (a1, 1, l1, 2, .true.) .ne. 10)) stop 18
+   if (any (minloc (a1, 1, l3) .ne. 1)) stop 19
+   if (any (minloc (a1, 1, l3, back=.false.) .ne. 1)) stop 20
+   if (any (minloc (a1, 1, l3, back=.true.) .ne. 10)) stop 21
+   if (any (minloc (a1, 1, l3, kind=8) .ne. 1)) stop 22
+   if (any (minloc (a1, 1, l3, 4, .false.) .ne. 1)) stop 23
+   if (any (minloc (a1, 1, l3, 2, .true.) .ne. 10)) stop 24
+   b1 = 0
+   if (any (minloc (b1) .ne. 1)) stop 1
+   if (any (minloc (b1, back=.false.) .ne. 1)) stop 2
+   if (any (minloc (b1, back=.true.) .ne. 10)) stop 3
+   if (any (minloc (b1, kind=2) .ne. 1)) stop 4
+   if (any (minloc (b1, kind=4, back=.false.) .ne. 1)) stop 5
+   if (any (minloc (b1, kind=8, back=.true.) .ne. 10)) stop 6
+   if (minloc (b1, 1) .ne. 1) stop 7
+   if (minloc (b1, 1, back=.false.) .ne. 1) stop 8
+   if (minloc (b1, 1, back=.true.) .ne. 10) stop 9
+   if (minloc (b1, 1, kind=1) .ne. 1) stop 10
+   if (minloc (b1, 1, kind=2, back=.false.) .ne. 1) stop 11
+   if (minloc (b1, 1, kind=4, back=.true.) .ne. 10) stop 12
+   if (minloc (b1, 1, l2) .ne. 1) stop 13
+   if (minloc (b1, 1, l2, back=.false.) .ne. 1) stop 14
+   if (minloc (b1, 1, l2, back=.true.) .ne. 10) stop 15
+   if (minloc (b1, 1, l2, kind=8) .ne. 1) stop 16
+   if (minloc (b1, 1, l2, 4, .false.) .ne. 1) stop 17
+   if (minloc (b1, 1, l2, 2, .true.) .ne. 10) stop 18
+   if (minloc (b1, 1, l3) .ne. 1) stop 19
+   if (minloc (b1, 1, l3, back=.false.) .ne. 1) stop 20
+   if (minloc (b1, 1, l3, back=.true.) .ne. 10) stop 21
+   if (minloc (b1, 1, l3, kind=8) .ne. 1) stop 22
+   if (minloc (b1, 1, l3, 4, .false.) .ne. 1) stop 23
+   if (minloc (b1, 1, l3, 2, .true.) .ne. 10) stop 24
+   a2 = 0
+   if (any (minloc (a2) .ne. 1)) stop 1
+   if (any (minloc (a2, back=.false.) .ne. 1)) stop 2
+   if (any (minloc (a2, back=.true.) .ne. 10)) stop 3
+   if (any (minloc (a2, kind=2) .ne. 1)) stop 4
+   if (any (minloc (a2, kind=4, back=.false.) .ne. 1)) stop 5
+   if (any (minloc (a2, kind=8, back=.true.) .ne. 10)) stop 6
+   if (any (minloc (a2, 1) .ne. 1)) stop 7
+   if (any (minloc (a2, 1, back=.false.) .ne. 1)) stop 8
+   if (any (minloc (a2, 1, back=.true.) .ne. 10)) stop 9
+   if (any (minloc (a2, 1, kind=1) .ne. 1)) stop 10
+   if (any (minloc (a2, 1, kind=2, back=.false.) .ne. 1)) stop 11
+   if (any (minloc (a2, 1, kind=4, back=.true.) .ne. 10)) stop 12
+   if (any (minloc (a2, 1, l1) .ne. 1)) stop 13
+   if (any (minloc (a2, 1, l1, back=.false.) .ne. 1)) stop 14
+   if (any (minloc (a2, 1, l1, back=.true.) .ne. 10)) stop 15
+   if (any (minloc (a2, 1, l1, kind=8) .ne. 1)) stop 16
+   if (any (minloc (a2, 1, l1, 4, .false.) .ne. 1)) stop 17
+   if (any (minloc (a2, 1, l1, 2, .true.) .ne. 10)) stop 18
+   if (any (minloc (a2, 1, l3) .ne. 1)) stop 19
+   if (any (minloc (a2, 1, l3, back=.false.) .ne. 1)) stop 20
+   if (any (minloc (a2, 1, l3, back=.true.) .ne. 10)) stop 21
+   if (any (minloc (a2, 1, l3, kind=8) .ne. 1)) stop 22
+   if (any (minloc (a2, 1, l3, 4, .false.) .ne. 1)) stop 23
+   if (any (minloc (a2, 1, l3, 2, .true.) .ne. 10)) stop 24
+   b2 = 0
+   if (any (minloc (b2) .ne. 1)) stop 1
+   if (any (minloc (b2, back=.false.) .ne. 1)) stop 2
+   if (any (minloc (b2, back=.true.) .ne. 10)) stop 3
+   if (any (minloc (b2, kind=2) .ne. 1)) stop 4
+   if (any (minloc (b2, kind=4, back=.false.) .ne. 1)) stop 5
+   if (any (minloc (b2, kind=8, back=.true.) .ne. 10)) stop 6
+   if (minloc (b2, 1) .ne. 1) stop 7
+   if (minloc (b2, 1, back=.false.) .ne. 1) stop 8
+   if (minloc (b2, 1, back=.true.) .ne. 10) stop 9
+   if (minloc (b2, 1, kind=1) .ne. 1) stop 10
+   if (minloc (b2, 1, kind=2, back=.false.) .ne. 1) stop 11
+   if (minloc (b2, 1, kind=4, back=.true.) .ne. 10) stop 12
+   if (minloc (b2, 1, l2) .ne. 1) stop 13
+   if (minloc (b2, 1, l2, back=.false.) .ne. 1) stop 14
+   if (minloc (b2, 1, l2, back=.true.) .ne. 10) stop 15
+   if (minloc (b2, 1, l2, kind=8) .ne. 1) stop 16
+   if (minloc (b2, 1, l2, 4, .false.) .ne. 1) stop 17
+   if (minloc (b2, 1, l2, 2, .true.) .ne. 10) stop 18
+   if (minloc (b2, 1, l3) .ne. 1) stop 19
+   if (minloc (b2, 1, l3, back=.false.) .ne. 1) stop 20
+   if (minloc (b2, 1, l3, back=.true.) .ne. 10) stop 21
+   if (minloc (b2, 1, l3, kind=8) .ne. 1) stop 22
+   if (minloc (b2, 1, l3, 4, .false.) .ne. 1) stop 23
+   if (minloc (b2, 1, l3, 2, .true.) .ne. 10) stop 24
+   a4 = 0
+   if (any (minloc (a4) .ne. 1)) stop 1
+   if (any (minloc (a4, back=.false.) .ne. 1)) stop 2
+   if (any (minloc (a4, back=.true.) .ne. 10)) stop 3
+   if (any (minloc (a4, kind=2) .ne. 1)) stop 4
+   if (any (minloc (a4, kind=4, back=.false.) .ne. 1)) stop 5
+   if (any (minloc (a4, kind=8, back=.true.) .ne. 10)) stop 6
+   if (any (minloc (a4, 1) .ne. 1)) stop 7
+   if (any (minloc (a4, 1, back=.false.) .ne. 1)) stop 8
+   if (any (minloc (a4, 1, back=.true.) .ne. 10)) stop 9
+   if (any (minloc (a4, 1, kind=1) .ne. 1)) stop 10
+   if (any (minloc (a4, 1, kind=2, back=.false.) .ne. 1)) stop 11
+   if (any (minloc (a4, 1, kind=4, back=.true.) .ne. 10)) stop 12
+   if (any (minloc (a4, 1, l1) .ne. 1)) stop 13
+   if (any (minloc (a4, 1, l1, back=.false.) .ne. 1)) stop 14
+   if (any (minloc (a4, 1, l1, back=.true.) .ne. 10)) stop 15
+   if (any (minloc (a4, 1, l1, kind=8) .ne. 1)) stop 16
+   if (any (minloc (a4, 1, l1, 4, .false.) .ne. 1)) stop 17
+   if (any (minloc (a4, 1, l1, 2, .true.) .ne. 10)) stop 18
+   if (any (minloc (a4, 1, l3) .ne. 1)) stop 19
+   if (any (minloc (a4, 1, l3, back=.false.) .ne. 1)) stop 20
+   if (any (minloc (a4, 1, l3, back=.true.) .ne. 10)) stop 21
+   if (any (minloc (a4, 1, l3, kind=8) .ne. 1)) stop 22
+   if (any (minloc (a4, 1, l3, 4, .false.) .ne. 1)) stop 23
+   if (any (minloc (a4, 1, l3, 2, .true.) .ne. 10)) stop 24
+   b4 = 0
+   if (any (minloc (b4) .ne. 1)) stop 1
+   if (any (minloc (b4, back=.false.) .ne. 1)) stop 2
+   if (any (minloc (b4, back=.true.) .ne. 10)) stop 3
+   if (any (minloc (b4, kind=2) .ne. 1)) stop 4
+   if (any (minloc (b4, kind=4, back=.false.) .ne. 1)) stop 5
+   if (any (minloc (b4, kind=8, back=.true.) .ne. 10)) stop 6
+   if (minloc (b4, 1) .ne. 1) stop 7
+   if (minloc (b4, 1, back=.false.) .ne. 1) stop 8
+   if (minloc (b4, 1, back=.true.) .ne. 10) stop 9
+   if (minloc (b4, 1, kind=1) .ne. 1) stop 10
+   if (minloc (b4, 1, kind=2, back=.false.) .ne. 1) stop 11
+   if (minloc (b4, 1, kind=4, back=.true.) .ne. 10) stop 12
+   if (minloc (b4, 1, l2) .ne. 1) stop 13
+   if (minloc (b4, 1, l2, back=.false.) .ne. 1) stop 14
+   if (minloc (b4, 1, l2, back=.true.) .ne. 10) stop 15
+   if (minloc (b4, 1, l2, kind=8) .ne. 1) stop 16
+   if (minloc (b4, 1, l2, 4, .false.) .ne. 1) stop 17
+   if (minloc (b4, 1, l2, 2, .true.) .ne. 10) stop 18
+   if (minloc (b4, 1, l3) .ne. 1) stop 19
+   if (minloc (b4, 1, l3, back=.false.) .ne. 1) stop 20
+   if (minloc (b4, 1, l3, back=.true.) .ne. 10) stop 21
+   if (minloc (b4, 1, l3, kind=8) .ne. 1) stop 22
+   if (minloc (b4, 1, l3, 4, .false.) .ne. 1) stop 23
+   if (minloc (b4, 1, l3, 2, .true.) .ne. 10) stop 24
+   a8 = 0
+   if (any (minloc (a8) .ne. 1)) stop 1
+   if (any (minloc (a8, back=.false.) .ne. 1)) stop 2
+   if (any (minloc (a8, back=.true.) .ne. 10)) stop 3
+   if (any (minloc (a8, kind=2) .ne. 1)) stop 4
+   if (any (minloc (a8, kind=4, back=.false.) .ne. 1)) stop 5
+   if (any (minloc (a8, kind=8, back=.true.) .ne. 10)) stop 6
+   if (any (minloc (a8, 1) .ne. 1)) stop 7
+   if (any (minloc (a8, 1, back=.false.) .ne. 1)) stop 8
+   if (any (minloc (a8, 1, back=.true.) .ne. 10)) stop 9
+   if (any (minloc (a8, 1, kind=1) .ne. 1)) stop 10
+   if (any (minloc (a8, 1, kind=2, back=.false.) .ne. 1)) stop 11
+   if (any (minloc (a8, 1, kind=4, back=.true.) .ne. 10)) stop 12
+   if (any (minloc (a8, 1, l1) .ne. 1)) stop 13
+   if (any (minloc (a8, 1, l1, back=.false.) .ne. 1)) stop 14
+   if (any (minloc (a8, 1, l1, back=.true.) .ne. 10)) stop 15
+   if (any (minloc (a8, 1, l1, kind=8) .ne. 1)) stop 16
+   if (any (minloc (a8, 1, l1, 4, .false.) .ne. 1)) stop 17
+   if (any (minloc (a8, 1, l1, 2, .true.) .ne. 10)) stop 18
+   if (any (minloc (a8, 1, l3) .ne. 1)) stop 19
+   if (any (minloc (a8, 1, l3, back=.false.) .ne. 1)) stop 20
+   if (any (minloc (a8, 1, l3, back=.true.) .ne. 10)) stop 21
+   if (any (minloc (a8, 1, l3, kind=8) .ne. 1)) stop 22
+   if (any (minloc (a8, 1, l3, 4, .false.) .ne. 1)) stop 23
+   if (any (minloc (a8, 1, l3, 2, .true.) .ne. 10)) stop 24
+   b8 = 0
+   if (any (minloc (b8) .ne. 1)) stop 1
+   if (any (minloc (b8, back=.false.) .ne. 1)) stop 2
+   if (any (minloc (b8, back=.true.) .ne. 10)) stop 3
+   if (any (minloc (b8, kind=2) .ne. 1)) stop 4
+   if (any (minloc (b8, kind=4, back=.false.) .ne. 1)) stop 5
+   if (any (minloc (b8, kind=8, back=.true.) .ne. 10)) stop 6
+   if (minloc (b8, 1) .ne. 1) stop 7
+   if (minloc (b8, 1, back=.false.) .ne. 1) stop 8
+   if (minloc (b8, 1, back=.true.) .ne. 10) stop 9
+   if (minloc (b8, 1, kind=1) .ne. 1) stop 10
+   if (minloc (b8, 1, kind=2, back=.false.) .ne. 1) stop 11
+   if (minloc (b8, 1, kind=4, back=.true.) .ne. 10) stop 12
+   if (minloc (b8, 1, l2) .ne. 1) stop 13
+   if (minloc (b8, 1, l2, back=.false.) .ne. 1) stop 14
+   if (minloc (b8, 1, l2, back=.true.) .ne. 10) stop 15
+   if (minloc (b8, 1, l2, kind=8) .ne. 1) stop 16
+   if (minloc (b8, 1, l2, 4, .false.) .ne. 1) stop 17
+   if (minloc (b8, 1, l2, 2, .true.) .ne. 10) stop 18
+   if (minloc (b8, 1, l3) .ne. 1) stop 19
+   if (minloc (b8, 1, l3, back=.false.) .ne. 1) stop 20
+   if (minloc (b8, 1, l3, back=.true.) .ne. 10) stop 21
+   if (minloc (b8, 1, l3, kind=8) .ne. 1) stop 22
+   if (minloc (b8, 1, l3, 4, .false.) .ne. 1) stop 23
+   if (minloc (b8, 1, l3, 2, .true.) .ne. 10) stop 24
+   r4 = 0.0
+   if (any (minloc (r4) .ne. 1)) stop 1
+   if (any (minloc (r4, back=.false.) .ne. 1)) stop 2
+   if (any (minloc (r4, back=.true.) .ne. 10)) stop 3
+   if (any (minloc (r4, kind=2) .ne. 1)) stop 4
+   if (any (minloc (r4, kind=4, back=.false.) .ne. 1)) stop 5
+   if (any (minloc (r4, kind=8, back=.true.) .ne. 10)) stop 6
+   if (any (minloc (r4, 1) .ne. 1)) stop 7
+   if (any (minloc (r4, 1, back=.false.) .ne. 1)) stop 8
+   if (any (minloc (r4, 1, back=.true.) .ne. 10)) stop 9
+   if (any (minloc (r4, 1, kind=1) .ne. 1)) stop 10
+   if (any (minloc (r4, 1, kind=2, back=.false.) .ne. 1)) stop 11
+   if (any (minloc (r4, 1, kind=4, back=.true.) .ne. 10)) stop 12
+   if (any (minloc (r4, 1, l1) .ne. 1)) stop 13
+   if (any (minloc (r4, 1, l1, back=.false.) .ne. 1)) stop 14
+   if (any (minloc (r4, 1, l1, back=.true.) .ne. 10)) stop 15
+   if (any (minloc (r4, 1, l1, kind=8) .ne. 1)) stop 16
+   if (any (minloc (r4, 1, l1, 4, .false.) .ne. 1)) stop 17
+   if (any (minloc (r4, 1, l1, 2, .true.) .ne. 10)) stop 18
+   if (any (minloc (r4, 1, l3) .ne. 1)) stop 19
+   if (any (minloc (r4, 1, l3, back=.false.) .ne. 1)) stop 20
+   if (any (minloc (r4, 1, l3, back=.true.) .ne. 10)) stop 21
+   if (any (minloc (r4, 1, l3, kind=8) .ne. 1)) stop 22
+   if (any (minloc (r4, 1, l3, 4, .false.) .ne. 1)) stop 23
+   if (any (minloc (r4, 1, l3, 2, .true.) .ne. 10)) stop 24
+   s4 = 0.0
+   if (any (minloc (s4) .ne. 1)) stop 1
+   if (any (minloc (s4, back=.false.) .ne. 1)) stop 2
+   if (any (minloc (s4, back=.true.) .ne. 10)) stop 3
+   if (any (minloc (s4, kind=2) .ne. 1)) stop 4
+   if (any (minloc (s4, kind=4, back=.false.) .ne. 1)) stop 5
+   if (any (minloc (s4, kind=8, back=.true.) .ne. 10)) stop 6
+   if (minloc (s4, 1) .ne. 1) stop 7
+   if (minloc (s4, 1, back=.false.) .ne. 1) stop 8
+   if (minloc (s4, 1, back=.true.) .ne. 10) stop 9
+   if (minloc (s4, 1, kind=1) .ne. 1) stop 10
+   if (minloc (s4, 1, kind=2, back=.false.) .ne. 1) stop 11
+   if (minloc (s4, 1, kind=4, back=.true.) .ne. 10) stop 12
+   if (minloc (s4, 1, l2) .ne. 1) stop 13
+   if (minloc (s4, 1, l2, back=.false.) .ne. 1) stop 14
+   if (minloc (s4, 1, l2, back=.true.) .ne. 10) stop 15
+   if (minloc (s4, 1, l2, kind=8) .ne. 1) stop 16
+   if (minloc (s4, 1, l2, 4, .false.) .ne. 1) stop 17
+   if (minloc (s4, 1, l2, 2, .true.) .ne. 10) stop 18
+   if (minloc (s4, 1, l3) .ne. 1) stop 19
+   if (minloc (s4, 1, l3, back=.false.) .ne. 1) stop 20
+   if (minloc (s4, 1, l3, back=.true.) .ne. 10) stop 21
+   if (minloc (s4, 1, l3, kind=8) .ne. 1) stop 22
+   if (minloc (s4, 1, l3, 4, .false.) .ne. 1) stop 23
+   if (minloc (s4, 1, l3, 2, .true.) .ne. 10) stop 24
+   r8 = 0.0
+   if (any (minloc (r8) .ne. 1)) stop 1
+   if (any (minloc (r8, back=.false.) .ne. 1)) stop 2
+   if (any (minloc (r8, back=.true.) .ne. 10)) stop 3
+   if (any (minloc (r8, kind=2) .ne. 1)) stop 4
+   if (any (minloc (r8, kind=4, back=.false.) .ne. 1)) stop 5
+   if (any (minloc (r8, kind=8, back=.true.) .ne. 10)) stop 6
+   if (any (minloc (r8, 1) .ne. 1)) stop 7
+   if (any (minloc (r8, 1, back=.false.) .ne. 1)) stop 8
+   if (any (minloc (r8, 1, back=.true.) .ne. 10)) stop 9
+   if (any (minloc (r8, 1, kind=1) .ne. 1)) stop 10
+   if (any (minloc (r8, 1, kind=2, back=.false.) .ne. 1)) stop 11
+   if (any (minloc (r8, 1, kind=4, back=.true.) .ne. 10)) stop 12
+   if (any (minloc (r8, 1, l1) .ne. 1)) stop 13
+   if (any (minloc (r8, 1, l1, back=.false.) .ne. 1)) stop 14
+   if (any (minloc (r8, 1, l1, back=.true.) .ne. 10)) stop 15
+   if (any (minloc (r8, 1, l1, kind=8) .ne. 1)) stop 16
+   if (any (minloc (r8, 1, l1, 4, .false.) .ne. 1)) stop 17
+   if (any (minloc (r8, 1, l1, 2, .true.) .ne. 10)) stop 18
+   if (any (minloc (r8, 1, l3) .ne. 1)) stop 19
+   if (any (minloc (r8, 1, l3, back=.false.) .ne. 1)) stop 20
+   if (any (minloc (r8, 1, l3, back=.true.) .ne. 10)) stop 21
+   if (any (minloc (r8, 1, l3, kind=8) .ne. 1)) stop 22
+   if (any (minloc (r8, 1, l3, 4, .false.) .ne. 1)) stop 23
+   if (any (minloc (r8, 1, l3, 2, .true.) .ne. 10)) stop 24
+   s8 = 0.0
+   if (any (minloc (s8) .ne. 1)) stop 1
+   if (any (minloc (s8, back=.false.) .ne. 1)) stop 2
+   if (any (minloc (s8, back=.true.) .ne. 10)) stop 3
+   if (any (minloc (s8, kind=2) .ne. 1)) stop 4
+   if (any (minloc (s8, kind=4, back=.false.) .ne. 1)) stop 5
+   if (any (minloc (s8, kind=8, back=.true.) .ne. 10)) stop 6
+   if (minloc (s8, 1) .ne. 1) stop 7
+   if (minloc (s8, 1, back=.false.) .ne. 1) stop 8
+   if (minloc (s8, 1, back=.true.) .ne. 10) stop 9
+   if (minloc (s8, 1, kind=1) .ne. 1) stop 10
+   if (minloc (s8, 1, kind=2, back=.false.) .ne. 1) stop 11
+   if (minloc (s8, 1, kind=4, back=.true.) .ne. 10) stop 12
+   if (minloc (s8, 1, l2) .ne. 1) stop 13
+   if (minloc (s8, 1, l2, back=.false.) .ne. 1) stop 14
+   if (minloc (s8, 1, l2, back=.true.) .ne. 10) stop 15
+   if (minloc (s8, 1, l2, kind=8) .ne. 1) stop 16
+   if (minloc (s8, 1, l2, 4, .false.) .ne. 1) stop 17
+   if (minloc (s8, 1, l2, 2, .true.) .ne. 10) stop 18
+   if (minloc (s8, 1, l3) .ne. 1) stop 19
+   if (minloc (s8, 1, l3, back=.false.) .ne. 1) stop 20
+   if (minloc (s8, 1, l3, back=.true.) .ne. 10) stop 21
+   if (minloc (s8, 1, l3, kind=8) .ne. 1) stop 22
+   if (minloc (s8, 1, l3, 4, .false.) .ne. 1) stop 23
+   if (minloc (s8, 1, l3, 2, .true.) .ne. 10) stop 24
+ end
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/pr120191_2.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/pr120191_2.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/pr120191_2.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/pr120191_2.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,84 ----
+ ! PR fortran/120191
+ ! { dg-do run }
+ 
+   character(kind=1, len=2) :: a(4, 4, 4), b(4)
+   logical :: l(4, 4, 4), m, n(4)
+   a = 'aa'
+   b = 'aa'
+   l = .true.
+   m = .true.
+   n = .true.
+   if (any (maxloc (a) .ne. 1)) stop 1
+   if (any (maxloc (a, dim=1) .ne. 1)) stop 2
+   if (any (maxloc (a, 1) .ne. 1)) stop 3
+   if (any (maxloc (a, dim=1, mask=l, kind=4, back=.false.) .ne. 1)) stop 4
+   if (any (maxloc (a, 1, l, 4, .false.) .ne. 1)) stop 5
+   if (any (maxloc (a, dim=1, mask=m, kind=4, back=.false.) .ne. 1)) stop 6
+   if (any (maxloc (a, 1, m, 4, .false.) .ne. 1)) stop 7
+   if (any (maxloc (a, dim=1, mask=l, kind=4, back=.true.) .ne. 4)) stop 8
+   if (any (maxloc (a, 1, l, 4, .true.) .ne. 4)) stop 9
+   if (any (maxloc (a, dim=1, mask=m, kind=4, back=.true.) .ne. 4)) stop 10
+   if (any (maxloc (a, 1, m, 4, .true.) .ne. 4)) stop 11
+   if (any (maxloc (b) .ne. 1)) stop 12
+   if (maxloc (b, dim=1) .ne. 1) stop 13
+   if (maxloc (b, 1) .ne. 1) stop 14
+   if (maxloc (b, dim=1, mask=n, kind=4, back=.false.) .ne. 1) stop 15
+   if (maxloc (b, 1, n, 4, .false.) .ne. 1) stop 16
+   if (maxloc (b, dim=1, mask=m, kind=4, back=.false.) .ne. 1) stop 17
+   if (maxloc (b, 1, m, 4, .false.) .ne. 1) stop 18
+   if (maxloc (b, dim=1, mask=n, kind=4, back=.true.) .ne. 4) stop 19
+   if (maxloc (b, 1, n, 4, .true.) .ne. 4) stop 20
+   if (maxloc (b, dim=1, mask=m, kind=4, back=.true.) .ne. 4) stop 21
+   if (maxloc (b, 1, m, 4, .true.) .ne. 4) stop 22
+   l = .false.
+   m = .false.
+   n = .false.
+   if (any (maxloc (a, dim=1, mask=l, kind=4, back=.false.) .ne. 0)) stop 23
+   if (any (maxloc (a, 1, l, 4, .false.) .ne. 0)) stop 24
+   if (maxloc (b, dim=1, mask=n, kind=4, back=.false.) .ne. 0) stop 25
+   if (maxloc (b, 1, n, 4, .false.) .ne. 0) stop 26
+   if (maxloc (b, dim=1, mask=m, kind=4, back=.false.) .ne. 0) stop 27
+   if (maxloc (b, 1, m, 4, .false.) .ne. 0) stop 28
+   if (maxloc (b, dim=1, mask=n, kind=4, back=.true.) .ne. 0) stop 29
+   if (maxloc (b, 1, n, 4, .true.) .ne. 0) stop 30
+   if (maxloc (b, dim=1, mask=m, kind=4, back=.true.) .ne. 0) stop 31
+   if (maxloc (b, 1, m, 4, .true.) .ne. 0) stop 32
+   l = .true.
+   m = .true.
+   n = .true.
+   if (any (minloc (a) .ne. 1)) stop 1
+   if (any (minloc (a, dim=1) .ne. 1)) stop 2
+   if (any (minloc (a, 1) .ne. 1)) stop 3
+   if (any (minloc (a, dim=1, mask=l, kind=4, back=.false.) .ne. 1)) stop 4
+   if (any (minloc (a, 1, l, 4, .false.) .ne. 1)) stop 5
+   if (any (minloc (a, dim=1, mask=m, kind=4, back=.false.) .ne. 1)) stop 6
+   if (any (minloc (a, 1, m, 4, .false.) .ne. 1)) stop 7
+   if (any (minloc (a, dim=1, mask=l, kind=4, back=.true.) .ne. 4)) stop 8
+   if (any (minloc (a, 1, l, 4, .true.) .ne. 4)) stop 9
+   if (any (minloc (a, dim=1, mask=m, kind=4, back=.true.) .ne. 4)) stop 10
+   if (any (minloc (a, 1, m, 4, .true.) .ne. 4)) stop 11
+   if (any (minloc (b) .ne. 1)) stop 12
+   if (minloc (b, dim=1) .ne. 1) stop 13
+   if (minloc (b, 1) .ne. 1) stop 14
+   if (minloc (b, dim=1, mask=n, kind=4, back=.false.) .ne. 1) stop 15
+   if (minloc (b, 1, n, 4, .false.) .ne. 1) stop 16
+   if (minloc (b, dim=1, mask=m, kind=4, back=.false.) .ne. 1) stop 17
+   if (minloc (b, 1, m, 4, .false.) .ne. 1) stop 18
+   if (minloc (b, dim=1, mask=n, kind=4, back=.true.) .ne. 4) stop 19
+   if (minloc (b, 1, n, 4, .true.) .ne. 4) stop 20
+   if (minloc (b, dim=1, mask=m, kind=4, back=.true.) .ne. 4) stop 21
+   if (minloc (b, 1, m, 4, .true.) .ne. 4) stop 22
+   l = .false.
+   m = .false.
+   n = .false.
+   if (any (minloc (a, dim=1, mask=l, kind=4, back=.false.) .ne. 0)) stop 23
+   if (any (minloc (a, 1, l, 4, .false.) .ne. 0)) stop 24
+   if (minloc (b, dim=1, mask=n, kind=4, back=.false.) .ne. 0) stop 25
+   if (minloc (b, 1, n, 4, .false.) .ne. 0) stop 26
+   if (minloc (b, dim=1, mask=m, kind=4, back=.false.) .ne. 0) stop 27
+   if (minloc (b, 1, m, 4, .false.) .ne. 0) stop 28
+   if (minloc (b, dim=1, mask=n, kind=4, back=.true.) .ne. 0) stop 29
+   if (minloc (b, 1, n, 4, .true.) .ne. 0) stop 30
+   if (minloc (b, dim=1, mask=m, kind=4, back=.true.) .ne. 0) stop 31
+   if (minloc (b, 1, m, 4, .true.) .ne. 0) stop 32
+ end
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/pr120191_3.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/pr120191_3.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/pr120191_3.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/pr120191_3.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,23 ----
+ ! PR fortran/120191
+ ! { dg-do run }
+ 
+   character(kind=1, len=2) :: a(4, 4, 4), b(4)
+   logical :: l(4, 4, 4), m, n(4)
+   a = 'aa'
+   b = 'aa'
+   l = .false.
+   m = .false.
+   n = .false.
+   if (any (maxloc (a, dim=1, mask=m, kind=4, back=.false.) .ne. 0)) stop 1
+   if (any (maxloc (a, 1, m, 4, .false.) .ne. 0)) stop 2
+   if (any (maxloc (a, dim=1, mask=l, kind=4, back=.true.) .ne. 0)) stop 3
+   if (any (maxloc (a, 1, l, 4, .true.) .ne. 0)) stop 4
+   if (any (maxloc (a, dim=1, mask=m, kind=4, back=.true.) .ne. 0)) stop 5
+   if (any (maxloc (a, 1, m, 4, .true.) .ne. 0)) stop 6
+   if (any (minloc (a, dim=1, mask=m, kind=4, back=.false.) .ne. 0)) stop 7
+   if (any (minloc (a, 1, m, 4, .false.) .ne. 0)) stop 8
+   if (any (minloc (a, dim=1, mask=l, kind=4, back=.true.) .ne. 0)) stop 9
+   if (any (minloc (a, 1, l, 4, .true.) .ne. 0)) stop 10
+   if (any (minloc (a, dim=1, mask=m, kind=4, back=.true.) .ne. 0)) stop 11
+   if (any (minloc (a, 1, m, 4, .true.) .ne. 0)) stop 12
+ end
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/pr120196.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/pr120196.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/pr120196.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/pr120196.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,26 ----
+ ! PR libfortran/120196
+ ! { dg-do run }
+ 
+ program pr120196
+   character(len=:, kind=1), allocatable :: a(:), s
+   character(len=:, kind=4), allocatable :: b(:), t
+   logical, allocatable :: l(:)
+   logical :: m
+   allocate (character(len=16, kind=1) :: a(10), s)
+   allocate (l(10))
+   a(:) = ""
+   s = "*"
+   l = .true.
+   m = .true.
+   if (findloc (a, s, dim=1, back=.true.) .ne. 0) stop 1
+   if (findloc (a, s, mask=l, dim=1, back=.true.) .ne. 0) stop 2
+   if (findloc (a, s, mask=m, dim=1, back=.true.) .ne. 0) stop 3
+   deallocate (a, s)
+   allocate (character(len=16, kind=4) :: b(10), t)
+   b(:) = ""
+   t = "*"
+   if (findloc (b, t, dim=1, back=.true.) .ne. 0) stop 4
+   if (findloc (b, t, mask=l, dim=1, back=.true.) .ne. 0) stop 5
+   if (findloc (b, t, mask=m, dim=1, back=.true.) .ne. 0) stop 6
+   deallocate (b, t, l)
+ end program pr120196
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/pr82774.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/pr82774.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/pr82774.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/pr82774.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,15 ----
+ ! { dg-do run }
+ !
+ ! Contributed by Steve Kargl  <kargl@gcc.gnu.org>
+ !
+ program main
+    implicit none
+    type stuff
+       character(:), allocatable :: key
+    end type stuff
+    type(stuff) nonsense, total
+    nonsense = stuff('Xe')
+    total = stuff(nonsense%key) ! trim nonsense%key made this work
+    if (nonsense%key /= total%key) call abort
+    if (len(total%key) /= 2) call abort
+ end program main
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/pr84674.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/pr84674.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/pr84674.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/pr84674.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,55 ----
+ ! { dg-do run }
+ !
+ ! Test the fix for PR84674, in which the non-overridable variant of the
+ ! procedure ff below caused a runtime segfault.
+ !
+ ! Contributed by Jakub Benda  <albandil@atlas.cz>
+ !
+  module m
+   implicit none
+ 
+   type, abstract :: t1
+    integer :: i
+   contains
+    procedure(i_f), pass(u), deferred :: ff
+   end type t1
+ 
+   type, abstract, extends(t1) :: t2
+   contains
+    procedure, non_overridable, pass(u) :: ff => f ! Segmentation fault
+    !procedure, pass(u) :: ff => f ! worked
+   end type t2
+ 
+   type, extends(t2) :: DerivedType
+   end type DerivedType
+ 
+   abstract interface
+    subroutine i_f(u)
+     import :: t1
+     class(t1), intent(inout) :: u
+    end subroutine i_f
+   end interface
+ 
+  contains
+ 
+   subroutine f(u)
+    class(t2), intent(inout) :: u
+     u%i = 3*u%i
+   end subroutine f
+ 
+  end module m
+ 
+ 
+  program p
+ 
+   use m
+ 
+   implicit none
+ 
+   class(t1), allocatable :: v
+ 
+   allocate(DerivedType::v)
+   v%i = 2
+   call v%ff()
+   if (v%i /= 6) stop
+  end program p
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/pr84868.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/pr84868.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/pr84868.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/pr84868.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,84 ----
+ ! { dg-do run }
+ !
+ ! Test the fix for PR84868. Module 'orig' and the call to 'f_orig' is the
+ ! original bug. The rest tests variants and the fix for a gimplifier ICE.
+ !
+ ! Subroutine 'h' and calls to it were introduced to check the corrections
+ ! needed to fix additional problems, noted in the review of the patch by
+ ! Harald Anlauf
+ !
+ ! Contributed by Gerhard Steinmetz  <gscfq@t-online.de>
+ !
+ module orig
+    character(:), allocatable :: c
+    integer :: ans1(3,3), ans2(3), ans3(2)
+ contains
+    function f_orig(n) result(z)
+       character(2), parameter :: c(3) = ['x1', 'y ', 'z2']
+       integer, intent(in) :: n
+       character(len_trim(c(n))) :: z
+       z = c(n)
+    end
+    function h(n) result(z)
+      integer,  intent(in) :: n
+      character(2), parameter :: c(3,3) = &
+            reshape (['ab','c ','de','f ','gh','i ','jk','l ','mn'],[3,3])
+      character(4), parameter :: chr(3) = ['ab  ','  cd','e f ']
+      character(len_trim(c(n,n)))  :: z
+      z = c(n,n)
+ ! Make sure that full arrays are correctly scalarized both having been previously
+ ! used with an array reference and not previously referenced.
+      ans1 = len_trim (c)
+      ans2 = len_trim (chr)
+ ! Finally check a slightly more complicated array reference
+      ans3 = len_trim (c(1:n+1:2,n-1))
+    end
+ end module orig
+ 
+ module m
+    character(:), allocatable :: c
+ contains
+    function f(n, c) result(z)
+       character (2) :: c(:)
+       integer, intent(in) :: n
+       character(len_trim(c(n))) :: z
+       z = c(n)
+    end
+    subroutine foo (pc)
+      character(2) :: pc(:)
+      if (any ([(len (f(i, pc)), i = 1,3)] .ne. [2,1,2])) stop 1
+    end
+ end
+ program p
+    use m
+    use orig
+    character (2) :: pc(3) = ['x1', 'y ', 'z2']
+    integer :: i
+ 
+    if (any ([(len (f_orig(i)), i = 1,3)] .ne. [2,1,2])) stop 2 ! ICE
+ 
+    call foo (pc)
+    if (any ([(len (g(i, pc)), i = 1,3)] .ne. [2,1,2])) stop 3
+    if (any ([(bar1(i), i = 1,3)] .ne. [2,1,2])) stop 4
+    if (any ([(bar2(i), i = 1,3)] .ne. [2,1,2])) stop 5
+ 
+    if (h(2) .ne. 'gh') stop 6
+    if (any (ans1 .ne. reshape ([2,1,2,1,2,1,2,1,2],[3,3]))) stop 7
+    if (any (ans2 .ne. [2,4,3])) stop 8
+    if (any (ans3 .ne. [2,2])) stop 9
+ contains
+    function g(n, c) result(z)
+       character (2) :: c(:)
+       integer, intent(in) :: n
+       character(len_trim(c(n))) :: z
+       z = c(n)
+    end
+    integer function bar1 (i)
+      integer :: i
+      bar1 = len (f(i, pc))  ! ICE in is_gimple_min_invariant
+    end
+    integer function bar2 (i)
+      integer :: i
+      bar2 = len (g(i, pc))
+    end
+ end
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/pr84869.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/pr84869.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/pr84869.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/pr84869.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,25 ----
+ ! { dg-do compile }
+ !
+ ! Test the fix for PR84869, where line 19 segfaulted.
+ !
+ ! Contributed by Gerhard Steinmetz  <gscfq@t-online.de>
+ !
+ program p
+    type t
+      integer :: i
+    end type
+    call s
+ contains
+    function f()
+       class(t), allocatable :: f(:)
+       f = [(t(i), i = 1, 10)]
+    end
+    subroutine s
+       class(*), allocatable :: z(:)
+       allocate (z, source = f ()) ! Segfault in gfc_class_len_get.
+       select type (z)
+         type is (t)
+           if (any (z%i /= [(i, i = 1,10)])) stop 1
+       end select
+    end
+ end
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/pr87946.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/pr87946.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/pr87946.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/pr87946.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,42 ----
+ ! { dg-do run }
+ !
+ ! Contributed by Gerhard Steinmetz  <gscfq@t-online.de>
+ !
+ module m
+    type t
+    contains
+       generic :: h => g
+       procedure, private :: g
+    end type
+ contains
+    function g(x, y) result(z)
+       class(t), intent(in) :: x
+       real, intent(in) :: y(:, :)
+       real :: z(size(y, 2))
+       integer :: i
+       do i = 1, size(y, 2)
+         z(i) = i
+       end do
+    end
+ end
+ module m2
+    use m
+    type t2
+       class(t), allocatable :: u(:)
+    end type
+ end
+    use m2
+    type(t2) :: x
+    real :: y(1,5)
+    allocate (x%u(1))
+    if (any (int(f (x, y)) .ne. [1,2,3,4,5])) stop 1
+    deallocate (x%u)
+ contains
+    function f(x, y) result(z)
+       use m2
+       type(t2) :: x
+       real :: y(:, :)
+       real :: z(size(y, 2))
+       z = x%u(1)%h(y)          ! Used to segfault here
+    end
+ end
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/ptr_func_assign_6.f08 gcc-13.4.0/gcc/testsuite/gfortran.dg/ptr_func_assign_6.f08
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/ptr_func_assign_6.f08	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/ptr_func_assign_6.f08	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,89 ----
+ ! { dg-do run }
+ !
+ ! Test the fix for PR105054.
+ !
+ ! Contributed by Arjen Markus  <arjen.markus895@gmail.com>
+ !
+ module string_pointers
+     implicit none
+     character(len=20), dimension(10), target :: array_strings
+     character(len=:), dimension(:), target, allocatable :: array_strings2
+ 
+ contains
+ 
+ function pointer_to_string( i , flag)
+      integer, intent(in) :: i, flag
+ 
+      character(len=:), pointer :: pointer_to_string
+ 
+      if (flag == 1) then
+        pointer_to_string => array_strings(i)
+        return
+      endif
+ 
+      if (.not.allocated (array_strings2)) allocate (array_strings2(4), &
+                                                     mold = '        ')
+      pointer_to_string => array_strings2(i)
+ end function pointer_to_string
+ 
+ function pointer_to_string2( i , flag) result (res)
+      integer, intent(in) :: i, flag
+ 
+      character(len=:), pointer :: res
+ 
+      if (flag == 1) then
+        res => array_strings(i)
+        return
+      endif
+ 
+      if (.not.allocated (array_strings2)) allocate (array_strings2(4), &
+                                                     mold = '        ')
+      res => array_strings2(i)
+ end function pointer_to_string2
+ 
+ end module string_pointers
+ 
+ program chk_string_pointer
+     use string_pointers
+     implicit none
+     integer :: i
+     character(*), parameter :: chr(4) = ['1234      ','ABCDefgh  ', &
+                                          '12345678  ','          ']
+ 
+     pointer_to_string(1, 1) = '1234567890'
+     pointer_to_string(2, 1) = '12345678901234567890'
+ 
+     if (len(pointer_to_string(3, 1)) /= 20) stop 1
+ 
+     array_strings(1) = array_strings(1)(1:4) // 'ABC'
+     if (pointer_to_string(1, 1) /= '1234ABC') stop 2
+ 
+     pointer_to_string(1, 2) = '1234'
+     pointer_to_string(2, 2) = 'ABCDefgh'
+     pointer_to_string(3, 2) = '12345678'
+ 
+     do i = 1, 3
+       if (trim (array_strings2(i)) /= trim(chr(i))) stop 3
+     enddo
+ 
+ ! Clear the target arrays
+     array_strings = repeat (' ', 20)
+     deallocate (array_strings2)
+ 
+ ! Repeat with an explicit result.
+     pointer_to_string2(1, 1) = '1234567890'
+     pointer_to_string2(2, 1) = '12345678901234567890'
+ 
+     if (len(pointer_to_string(3, 1)) /= 20) stop 4
+ 
+     array_strings(1) = array_strings(1)(1:4) // 'ABC'
+     if (pointer_to_string(1, 1) /= '1234ABC') stop 5
+ 
+     pointer_to_string2(1, 2) = '1234'
+     pointer_to_string2(2, 2) = 'ABCDefgh'
+     pointer_to_string2(3, 2) = '12345678'
+ 
+     do i = 1, 3
+       if (trim (array_strings2(i)) /= trim(chr(i))) stop 6
+     enddo
+ end program chk_string_pointer
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/shape_12.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/shape_12.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/shape_12.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/shape_12.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,51 ----
+ ! { dg-do run }
+ !
+ ! PR fortran/115150
+ !
+ ! Check that SHAPE handles zero-sized arrays correctly
+ !
+ implicit none
+ call one
+ call two
+ 
+ contains
+ 
+ subroutine one
+   real,allocatable :: A(:),B(:,:)
+   allocate(a(3:0), b(5:1, 2:5))
+ 
+   if (any (shape(a) /= [0])) stop 1
+   if (any (shape(b) /= [0, 4])) stop 2
+   if (size(a) /= 0) stop 3
+   if (size(b) /= 0) stop 4
+   if (any (lbound(a) /= [1])) stop 5
+   if (any (lbound(b) /= [1, 2])) stop 6
+   if (any (ubound(a) /= [0])) stop 5
+   if (any (ubound(b) /= [0,5])) stop 6
+ end
+ 
+ subroutine two
+ integer :: x1(10), x2(10,10)
+ call f(x1, x2, -3)
+ end
+ 
+ subroutine f(y1, y2, n)
+   integer, value :: n
+   integer :: y1(1:n)
+   integer :: y2(1:n,4,2:*)
+   call g(y1, y2)
+ end
+ 
+ subroutine g(z1, z2)
+   integer :: z1(..), z2(..)
+ 
+   if (any (shape(z1) /= [0])) stop 1
+   if (any (shape(z2) /= [0, 4, -1])) stop 2
+   if (size(z1) /= 0) stop 3
+   if (size(z2) /= 0) stop 4
+   if (any (lbound(z1) /= [1])) stop 5
+   if (any (lbound(z2) /= [1, 1, 1])) stop 6
+   if (any (ubound(z1) /= [0])) stop 5
+   if (any (ubound(z2) /= [0, 4, -1])) stop 6
+ end
+ end
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/statement_function_5.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/statement_function_5.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/statement_function_5.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/statement_function_5.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,20 ----
+ ! { dg-do compile }
+ ! PR fortran/115039
+ !
+ ! Check that inquiry refs work with statement functions
+ !
+ ! { dg-additional-options "-std=legacy -fdump-tree-optimized" }
+ ! { dg-prune-output " Obsolescent feature" }
+ ! { dg-final { scan-tree-dump-not "_gfortran_stop_numeric" "optimized" } }
+ 
+ program testit
+   implicit none
+   complex :: x
+   real    :: im
+   integer :: slen
+   character(5) :: s
+   im(x)   = x%im + x%re + x%kind
+   slen(s) = s%len
+   if (im((1.0,3.0) + (2.0,4.0)) /= 14.) stop 1
+   if (slen('abcdef') /= 5)              stop 2
+ end program testit
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/storage_size_7.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/storage_size_7.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/storage_size_7.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/storage_size_7.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,91 ----
+ ! { dg-do run }
+ ! Fix STORAGE_SIZE intrinsic for polymorphic arguments PR84006 and PR100027.
+ ! Contributed by Steve Kargl  <kargls@comcast.net>
+ !            and José Rui Faustino de Sousa  <jrfsousa@gcc.gnu.org>
+ program p
+   use, intrinsic :: ISO_FORTRAN_ENV, only: int64
+   type t
+     integer i
+   end type
+   type s
+     class(t), allocatable :: c(:)
+   end type
+   integer :: rslt, class_rslt
+   integer(kind=int64), target :: tgt
+   class(t), allocatable, target :: t_alloc(:)
+   class(s), allocatable, target :: s_alloc(:)
+   character(:), allocatable, target :: chr(:)
+   class(*), pointer :: ptr_s, ptr_a(:)
+ 
+   allocate (t_alloc(2), source=t(1))
+   rslt = storage_size(t_alloc(1))      ! Scalar arg - the original testcase
+   if (rslt .ne. 32) stop 1
+ 
+   rslt = storage_size(t_alloc)         ! Array arg
+   if (rslt .ne. 32) stop 2
+ 
+   call pr100027
+ 
+   allocate (s_alloc(2), source=s([t(1), t(2)]))
+ ! This, of course, is processor dependent: gfortran gives 576, NAG 448
+ ! and Intel 1216.
+   class_rslt = storage_size(s_alloc)   ! Type with a class component
+   ptr_s => s_alloc(2)
+ ! However, the unlimited polymorphic result should be the same
+   if (storage_size (ptr_s) .ne. class_rslt) stop 3
+   ptr_a => s_alloc
+   if (storage_size (ptr_a) .ne. class_rslt) stop 4
+ 
+   rslt = storage_size(s_alloc(1)%c(2)) ! Scalar component arg
+   if (rslt .ne. 32) stop 5
+ 
+   rslt = storage_size(s_alloc(1)%c)    ! Scalar component of array arg
+   if (rslt .ne. 32) stop 6
+ 
+   ptr_s => tgt
+   rslt = storage_size (ptr_s)          ! INTEGER(8) target
+   if (rslt .ne. 64) stop 7
+ 
+   allocate (chr(2), source = ["abcde", "fghij"])
+   ptr_s => chr(2)
+   rslt = storage_size (ptr_s)          ! CHARACTER(5) scalar
+   if (rslt .ne. 40) stop 8
+ 
+   ptr_a => chr
+   rslt = storage_size (ptr_a)          ! CHARACTER(5) array
+   if (rslt .ne. 40) stop 9
+ 
+   deallocate (t_alloc, s_alloc, chr)   ! For valgrind check
+ 
+ contains
+ 
+ ! Original testcase from José Rui Faustino de Sousa
+   subroutine pr100027
+     implicit none
+ 
+     integer, parameter :: n = 11
+ 
+     type :: foo_t
+     end type foo_t
+ 
+     type, extends(foo_t) :: bar_t
+     end type bar_t
+ 
+     class(*),     pointer :: apu(:)
+     class(foo_t), pointer :: apf(:)
+     class(bar_t), pointer :: apb(:)
+     type(bar_t),   target :: atb(n)
+ 
+     integer :: m
+ 
+     apu => atb
+     m = storage_size(apu)
+     if (m .ne. 0) stop 10
+     apf => atb
+     m = storage_size(apf)
+     if (m .ne. 0) stop 11
+     apb => atb
+     m = storage_size(apb)
+     if (m .ne. 0) stop 12
+   end
+ end program p
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/string_array_constructor_4.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/string_array_constructor_4.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/string_array_constructor_4.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/string_array_constructor_4.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,59 ----
+ ! { dg-do run }
+ ! PR fortran/103115 - character array constructor with >= 4 constant elements
+ !
+ ! This used to ICE when the first element is deferred-length character
+ ! or could lead to wrong results.
+ 
+ program pr103115
+   implicit none
+   integer :: i
+   character(*), parameter :: expect(*) = [ "1","2","3","4","5" ]
+   character(5)            :: abc = "12345"
+   character(5), parameter :: def = "12345"
+   character(:), dimension(:), allocatable :: list
+   character(:), dimension(:), allocatable :: titles
+   titles = ["1"]
+   titles = [ titles&
+             ,"2"&
+             ,"3"&
+             ,"4"&
+             ,"5"&  ! used to ICE
+             ]
+   if (len (titles) /= 1 .or. size (titles) /= 5) stop 1
+   if (any (titles  /= expect))                   stop 2
+   titles = ["1"]
+   titles = [ titles, (char(48+i),i=2,5) ]
+   if (len (titles) /= 1 .or. size (titles) /= 5) stop 3
+   if (any (titles  /= expect))                   stop 4
+   titles = ["1"]
+   titles = [ titles, ("2345"(i:i),i=1,4) ]
+   if (len (titles) /= 1 .or. size (titles) /= 5) stop 5
+   if (any (titles  /= expect))                   stop 6
+   titles = ["1"]
+   titles = [ titles, (def(i:i),i=2,5) ]
+   if (len (titles) /= 1 .or. size (titles) /= 5) stop 7
+   if (any (titles  /= expect))                   stop 8
+   list = [ (char(48+i),i=1,5) ]
+   titles = [ list(1), (char(48+i),i=2,5) ]
+   if (len (titles) /= 1 .or. size (titles) /= 5) stop 9
+   if (any (titles  /= expect))                   stop 10
+   titles = ["1"]
+   titles = [ titles, (abc(i:i),i=2,5) ]
+   if (len (titles) /= 1 .or. size (titles) /= 5) stop 11
+   if (any (titles  /= expect))                   stop 12
+ 
+   ! with typespec:
+   list = [ (char(48+i),i=1,5) ]
+   titles = [ character(2) :: list(1), (char(48+i),i=2,5) ]
+   if (len (titles) /= 2 .or. size (titles) /= 5) stop 13
+   if (any (titles  /= expect))                   stop 14
+   titles = ["1"]
+   titles = [ character(2) :: titles, (char(48+i),i=2,5) ]
+   if (len (titles) /= 2 .or. size (titles) /= 5) stop 15
+   if (any (titles  /= expect))                   stop 16
+   titles = ["1"]
+   titles = [ character(2) :: titles, (def(i:i),i=2,5) ]
+   if (len (titles) /= 2 .or. size (titles) /= 5) stop 17
+   if (any (titles  /= expect))                   stop 18
+   deallocate (titles, list)
+ end
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/transfer_class_4.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/transfer_class_4.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/transfer_class_4.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/transfer_class_4.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,87 ----
+ ! { dg-do run }
+ !
+ ! Fix TRANSFER intrinsic for unlimited polymorphic SOURCEs - PR98534
+ ! Note that unlimited polymorphic MOLD is a TODO.
+ !
+ ! Contributed by Paul Thomas  <pault@gcc.gnu.org>
+ !
+   use, intrinsic :: ISO_FORTRAN_ENV, only: real32
+   implicit none
+   character(*), parameter :: string = "abcdefgh"
+   character(len=:), allocatable :: string_a(:)
+   class(*), allocatable :: star
+   class(*), allocatable :: star_a(:)
+   character(len=:), allocatable :: chr
+   character(len=:), allocatable :: chr_a(:)
+   integer :: sz, sum1, sum2, i
+   real(real32) :: r = 1.0
+ 
+ ! Part 1: worked correctly
+   star = r
+   sz = storage_size (star)/8
+   allocate (character(len=sz) :: chr)
+   chr = transfer (star, chr)
+   sum1 = sum ([(ichar(chr(i:i)), i = 1, sz)])
+   chr = transfer(1.0, chr)
+   sum2 = sum ([(ichar(chr(i:i)), i = 1, sz)])
+ 
+   if (sz /= storage_size (r)/8) stop 1
+   if (sum1 /= sum2) stop 2
+ 
+   deallocate (star) ! The automatic reallocation causes invalid writes
+                     ! and memory leaks. Even with this deallocation
+                     ! The invalid writes still occur.
+   deallocate (chr)
+ 
+ ! Part 2: Got everything wrong because '_len' field of unlimited polymorphic
+ ! expressions was not used.
+   star = string
+   sz = storage_size (star)/8
+   if (sz /= len (string)) stop 3 ! storage_size failed
+ 
+   sz = len (string) ! Ignore previous error in storage_size
+   allocate (character(len=sz) :: chr)
+   chr = transfer (star, chr)
+   sum1 = sum ([(ichar(chr(i:i)), i = 1, sz)])
+   chr = transfer(string, chr)
+   sum2 = sum ([(ichar(chr(i:i)), i = 1, sz)])
+   if (sum1 /= sum2) stop 4       ! transfer failed
+ 
+ ! Check that arrays are OK for transfer
+   star_a = ['abcde','fghij']
+   allocate (character (len = 5) :: chr_a(2))
+   chr_a = transfer (star_a, chr_a)
+   if (any (chr_a .ne. ['abcde','fghij'])) stop 5
+ 
+ ! Check that string length and size are correctly handled
+   string_a = ["abcdefgh", "ijklmnop"]
+   star_a = string_a;
+   chr_a = transfer (star_a, chr_a) ! Old string length used for size
+   if (size(chr_a) .ne. 4) stop 6
+   if (len(chr_a) .ne. 5) stop 7
+   if (trim (chr_a(3)) .ne. "klmno") stop 8
+   if (chr_a(4)(1:1) .ne. "p") stop 9
+ 
+   chr_a = transfer (star_a, string_a) ! Use correct string_length for payload
+   if (size(chr_a) .ne. 2) stop 10
+   if (len(chr_a) .ne. 8) stop 11
+   if (any (chr_a .ne. string_a)) stop 12
+ 
+ ! Check that an unlimited polymorphic function result is transferred OK
+   deallocate (chr_a)
+   string_a = ['abc', 'def', 'hij']
+   chr_a = transfer (foo (string_a), string_a)
+   if (any (chr_a .ne. string_a)) stop 13
+ 
+ ! Finally, check that the SIZE gives correct results with unlimited sources.
+   chr_a = transfer (star_a, chr_a, 4)
+   if (chr_a (4) .ne. 'jkl') stop 14
+ 
+   deallocate (star, chr, star_a, chr_a, string_a)
+ contains
+   function foo (arg) result(res)
+     character(*), intent(in) :: arg(:)
+     class(*), allocatable :: res(:)
+     res = arg
+   end
+ end
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gfortran.dg/use_rename_13.f90 gcc-13.4.0/gcc/testsuite/gfortran.dg/use_rename_13.f90
*** gcc-13.3.0/gcc/testsuite/gfortran.dg/use_rename_13.f90	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gfortran.dg/use_rename_13.f90	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,37 ----
+ ! { dg-do compile }
+ !
+ ! Test the fix for pr79685, which failed as in the comments below.
+ !
+ ! Contributed by Juergen Reuter  <juergen.reuter@desy.de>
+ !
+ module omega_color
+   implicit none
+ 
+   type omega_color_factor
+      integer :: i
+   end type
+ 
+   type(omega_color_factor), parameter :: op = omega_color_factor (199)
+ 
+ end module
+ 
+ module foo
+   use omega_color, ocf => omega_color_factor, ocfp => op
+   implicit none
+ 
+   type(ocf) :: table_color_factors1 = ocf(42)
+   type(ocf) :: table_color_factors2
+   type(ocf) :: table_color_factors3 (2)
+   type(ocf) :: table_color_factors4
+   data table_color_factors2 / ocf(99) /        ! This failed in gfc_match_structure_constructor.
+   data table_color_factors3 / ocf(1), ocf(2) / ! ditto.
+   data table_color_factors4 / ocfp /
+ end module
+ 
+   use foo
+   if (table_color_factors1%i .ne. 42) stop 1
+   if (table_color_factors2%i .ne. 99) stop 2
+   if (any (table_color_factors3%i .ne. [1,2])) stop 3
+   if (table_color_factors4%i .ne. 199) stop 4
+ end
+ 
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gnat.dg/access11.adb gcc-13.4.0/gcc/testsuite/gnat.dg/access11.adb
*** gcc-13.3.0/gcc/testsuite/gnat.dg/access11.adb	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gnat.dg/access11.adb	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,80 ----
+ --  PR ada/114398
+ --  Testcase by Dennis van Raaij <d.van.raaij@gmail.com>
+ 
+ --  { dg-do run }
+ 
+ with Ada.Finalization;
+ 
+ procedure Access11 is
+ 
+    package Pkg is
+ 
+       type Int is
+         new Ada.Finalization.Limited_Controlled
+       with record
+          Value : Integer;
+       end record;
+ 
+       procedure Set (This : out Int; To : Integer);
+       procedure Set (This : out Int; To : Int);
+ 
+       function "+" (Left, Right : Int) return Int;
+ 
+       overriding procedure Initialize (This : in out Int);
+       overriding procedure Finalize   (This : in out Int);
+ 
+    end Pkg;
+ 
+    package body Pkg is
+ 
+       procedure Set (This : out Int; To : Integer) is
+       begin
+          This.Value := To;
+       end Set;
+ 
+       procedure Set (This  : out Int; To : Int) is
+       begin
+          This.Value := To.Value;
+       end Set;
+ 
+       function "+" (Left, Right : Int) return Int is
+       begin
+          return Result : Int do
+             Result.Value := Left.Value + Right.Value;
+          end return;
+       end "+";
+ 
+       overriding procedure Initialize (This : in out Int) is
+       begin
+          This.Value := 42;
+       end Initialize;
+ 
+       overriding procedure Finalize (This : in out Int) is
+       begin
+          This.Value := 0;
+       end Finalize;
+ 
+    end Pkg;
+ 
+    use Pkg;
+ 
+    type Binary_Operator is access
+      function (Left, Right : Int) return Int;
+ 
+    procedure Test
+      (Op          : Binary_Operator;
+       Left, Right : Int)
+    is
+       Result : Int;
+    begin
+       Result.Set (Op (Left, Right));
+    end Test;
+ 
+    A, B : Int;
+ 
+ begin
+    A.Set (7);
+    B.Set (9);
+ 
+    Test ("+"'Access, A, B);
+ end;
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gnat.dg/aggr31.adb gcc-13.4.0/gcc/testsuite/gnat.dg/aggr31.adb
*** gcc-13.3.0/gcc/testsuite/gnat.dg/aggr31.adb	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gnat.dg/aggr31.adb	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,17 ----
+ -- { dg-do run }
+ -- { dg-options "-gnat2022" }
+ 
+ with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;
+ 
+ procedure Aggr31 is
+ 
+   My_Array : constant array (1 .. 5) of Unbounded_String :=
+     [others => To_Unbounded_String ("Test")];
+ 
+   This_Crashes : constant array (Natural range <>) of Unbounded_String :=
+     [for I of My_Array => I];
+ 
+ begin
+   null;
+ end;
+ 
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gnat.dg/generic_inst14.adb gcc-13.4.0/gcc/testsuite/gnat.dg/generic_inst14.adb
*** gcc-13.3.0/gcc/testsuite/gnat.dg/generic_inst14.adb	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gnat.dg/generic_inst14.adb	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,20 ----
+ --  { dg-do compile }
+ 
+ with Generic_Inst14_Pkg;
+ with Generic_Inst14_Pkg.Child;
+ 
+ procedure Generic_Inst14 is
+ 
+    type T is null record;
+ 
+    package Tree is new Generic_Inst14_Pkg.Definite_Value_Tree (T);
+ 
+    package Base is new Generic_Inst14_Pkg.Child.Simple (T, Tree);
+ 
+    package OK is new Generic_Inst14_Pkg.Child.OK (T, Base.Strat);
+ 
+    package Not_OK is new Generic_Inst14_Pkg.Child.Not_OK (T, Tree, Base.Strat);
+ 
+ begin
+    null;
+ end;
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gnat.dg/generic_inst14_pkg-child.ads gcc-13.4.0/gcc/testsuite/gnat.dg/generic_inst14_pkg-child.ads
*** gcc-13.3.0/gcc/testsuite/gnat.dg/generic_inst14_pkg-child.ads	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gnat.dg/generic_inst14_pkg-child.ads	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,27 ----
+ package Generic_Inst14_Pkg.Child is
+ 
+    generic
+       type Value is private;
+       with package Value_Tree is new Definite_Value_Tree (Value => Value);
+    package Simple is
+       type Node is new Value_Tree.Value_Node with null record;
+       package Strat is new Def_Strat (Value, Value_Tree, Node);
+    end Simple;
+ 
+    generic
+       type Value is private;
+       with package A_Strat is new Def_Strat (Value => Value, others => <>);
+    package OK is
+       procedure Plop (N : A_Strat.Node) is null;
+    end OK;
+ 
+    generic
+       type Value is private;
+       with package Value_Tree is new Definite_Value_Tree (Value => Value);
+       with package A_Strat is
+          new Def_Strat (Value => Value, Value_Tree => Value_Tree, others => <>);
+    package Not_OK is
+       procedure Plop (N : A_Strat.Node) is null;
+    end Not_OK;
+    
+ end Generic_Inst14_Pkg.Child;
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gnat.dg/generic_inst14_pkg.ads gcc-13.4.0/gcc/testsuite/gnat.dg/generic_inst14_pkg.ads
*** gcc-13.3.0/gcc/testsuite/gnat.dg/generic_inst14_pkg.ads	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gnat.dg/generic_inst14_pkg.ads	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,16 ----
+ package Generic_Inst14_Pkg is
+ 
+    generic
+       type Value is limited private;
+    package Definite_Value_Tree is
+       type Value_Node is abstract tagged null record; 
+    end Definite_Value_Tree;
+    
+    generic
+       type Value is limited private;
+       with package Value_Tree is new Definite_Value_Tree (Value);
+       type Node (<>) is new Value_Tree.Value_Node with private;
+    package Def_Strat is
+    end Def_Strat;
+ 
+ end Generic_Inst14_Pkg;
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gnat.dg/incomplete8.adb gcc-13.4.0/gcc/testsuite/gnat.dg/incomplete8.adb
*** gcc-13.3.0/gcc/testsuite/gnat.dg/incomplete8.adb	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gnat.dg/incomplete8.adb	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,22 ----
+ -- PR ada/114708
+ -- Reported by Jere <jhb.chat@gmail.com>
+ 
+ -- { dg-do compile }
+ 
+ procedure Incomplete8 is
+ 
+   generic
+     type Element_Type(<>);
+   package Test_Incomplete_Formal is
+     type Element_Access is access Element_Type;
+   end Test_Incomplete_Formal;
+ 
+   type Node;
+ 
+   package P is new Test_Incomplete_Formal(Node);
+ 
+   type Node is limited null record;
+    
+ begin
+   null;
+ end;
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gnat.dg/matrix1.adb gcc-13.4.0/gcc/testsuite/gnat.dg/matrix1.adb
*** gcc-13.3.0/gcc/testsuite/gnat.dg/matrix1.adb	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gnat.dg/matrix1.adb	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,16 ----
+ -- { dg-do run }
+ -- { dg-options "-gnata" }
+ 
+ with Ada.Numerics.Generic_Real_Arrays;
+ 
+ procedure Matrix1 is
+ 
+   package GRA is new Ada.Numerics.Generic_Real_Arrays (real => float);
+   use GRA;
+ 
+   M : constant Real_Matrix (1..2, 1..2) := ((1.0, 0.0), (0.0, 2.0));
+   E : constant Real_Vector := Eigenvalues (M);
+ 
+ begin
+   null;
+ end;
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gnat.dg/put_image1.adb gcc-13.4.0/gcc/testsuite/gnat.dg/put_image1.adb
*** gcc-13.3.0/gcc/testsuite/gnat.dg/put_image1.adb	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gnat.dg/put_image1.adb	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,21 ----
+ -- { dg-do run }
+ -- { dg-options "-gnat2022" }
+ 
+ with Ada.Text_IO; use Ada.Text_IO;
+ 
+ procedure Put_Image1 is
+ 
+   type Client_ID_Part is range 0 .. 2**32 - 1 with Size => 32;
+ 
+   type Client_ID is array (1 .. 2) of Client_ID_Part;
+ 
+   A : Client_ID := (1479222903, 3163714999);
+ 
+ begin
+    Put_Line (A'Image);
+    -- { dg-output ".* 1479222903,  3163714999.*\n" }
+    Put_Line (A (1)'Image);
+    -- { dg-output " 1479222903.*\n" }
+    Put_Line (A (2)'Image);
+    -- { dg-output " 3163714999.*\n" }
+ end;
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gnat.dg/specs/array7.ads gcc-13.4.0/gcc/testsuite/gnat.dg/specs/array7.ads
*** gcc-13.3.0/gcc/testsuite/gnat.dg/specs/array7.ads	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gnat.dg/specs/array7.ads	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,14 ----
+ -- { dg-do compile }
+ -- { dg-options "-O" }
+ 
+ package Array7 is
+ 
+   type I is interface;
+ 
+   type Rec (Name_Len : Natural) is new I with record
+     Input : String (1 .. Name_Len);
+   end record;
+ 
+   function Image (R : Rec) return String is ("I" & String (R.Input));
+ 
+ end Array7;
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gnat.dg/specs/generic_inst1.ads gcc-13.4.0/gcc/testsuite/gnat.dg/specs/generic_inst1.ads
*** gcc-13.3.0/gcc/testsuite/gnat.dg/specs/generic_inst1.ads	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gnat.dg/specs/generic_inst1.ads	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,32 ----
+ -- { dg-do compile }
+ 
+ package Generic_Inst1 is
+ 
+    generic
+       type Terminals is (<>);
+       type Nonterminals is (<>);
+    package Types is
+       type Action is record
+          data : Integer;
+       end record;
+    end Types;
+ 
+    generic
+       type States is (<>);
+       type Input_T is (<>);
+       type Action_T is private;
+    package FSM is
+    end FSM;
+ 
+    generic
+       with package Typs is new Types (<>);
+       with package SMs is new FSM
+         (States => <>, Input_T => Typs.Terminals, Action_T => Typs.Action);
+    package Gen is
+    end Gen;
+ 
+    package Typs is new Types (Natural, Integer);
+    package SMs is new FSM (Integer, Natural, Typs.Action);
+    package Generator is new Gen (Typs, SMs);
+ 
+ end Generic_Inst1;
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gnat.dg/specs/generic_inst2-child1.ads gcc-13.4.0/gcc/testsuite/gnat.dg/specs/generic_inst2-child1.ads
*** gcc-13.3.0/gcc/testsuite/gnat.dg/specs/generic_inst2-child1.ads	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gnat.dg/specs/generic_inst2-child1.ads	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,17 ----
+ generic
+ package Generic_Inst2.Child1 is
+ 
+    function Get_Custom return Custom_Type;
+ 
+ private
+ 
+    type Dummy is null record;
+ 
+    Placeholder : constant Dummy := (null record);
+ 
+    -- This type conversion fails (though only when
+    -- instantiated in the other package)
+    function Get_Custom return Custom_Type is 
+       (Custom_Type(Placeholder'Address));
+ 
+ end Generic_Inst2.Child1;
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gnat.dg/specs/generic_inst2-child2.ads gcc-13.4.0/gcc/testsuite/gnat.dg/specs/generic_inst2-child2.ads
*** gcc-13.3.0/gcc/testsuite/gnat.dg/specs/generic_inst2-child2.ads	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gnat.dg/specs/generic_inst2-child2.ads	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,10 ----
+ -- { dg-do compile }
+ 
+ with Generic_Inst2.Child1;
+ 
+ generic
+ package Generic_Inst2.Child2 is
+ 
+    package Second is new Generic_Inst2.Child1;
+ 
+ end Generic_Inst2.Child2;
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gnat.dg/specs/generic_inst2.ads gcc-13.4.0/gcc/testsuite/gnat.dg/specs/generic_inst2.ads
*** gcc-13.3.0/gcc/testsuite/gnat.dg/specs/generic_inst2.ads	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gnat.dg/specs/generic_inst2.ads	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,11 ----
+ private with System;
+ 
+ package Generic_Inst2 is
+ 
+    type Custom_Type is private;
+ 
+ private
+ 
+    type Custom_Type is new System.Address;
+ 
+ end Generic_Inst2;
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gnat.dg/specs/vfa3.ads gcc-13.4.0/gcc/testsuite/gnat.dg/specs/vfa3.ads
*** gcc-13.3.0/gcc/testsuite/gnat.dg/specs/vfa3.ads	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gnat.dg/specs/vfa3.ads	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,25 ----
+ -- { dg-do compile }
+ 
+ package VFA3 is
+ 
+    type Bit is mod 2**1
+      with Size => 1;
+ 
+    type Intr_Level_Field is record
+       Level_Low  : Bit := 0;
+       Level_High : Bit := 0;
+       Edge_Low   : Bit := 0;
+       Edge_High  : Bit := 0;
+    end record with Pack, Size => 4;
+    for Intr_Level_Field use record
+       Level_Low  at 0 range 0 .. 0;
+       Level_High at 0 range 1 .. 1;
+       Edge_Low   at 0 range 2 .. 2;
+       Edge_High  at 0 range 3 .. 3;
+    end record;
+ 
+    type Intr_Level_Cluster is array (0 .. 7) of Intr_Level_Field
+      with Volatile_Full_Access, Pack, Object_Size => 32;
+    --  There are 8 Fields in a 32-bit word.
+ 
+ end VFA3;
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gnat.dg/warn33.adb gcc-13.4.0/gcc/testsuite/gnat.dg/warn33.adb
*** gcc-13.3.0/gcc/testsuite/gnat.dg/warn33.adb	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gnat.dg/warn33.adb	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,9 ----
+ --  { dg-do compile }
+ 
+ with Warn33_Pkg; use Warn33_Pkg;
+ 
+ procedure Warn33 is
+   Var : DerT;
+ begin
+   Var := 1.0 - Var; -- { dg-warning "may be referenced before" }
+ end;
diff -Nrcpad gcc-13.3.0/gcc/testsuite/gnat.dg/warn33_pkg.ads gcc-13.4.0/gcc/testsuite/gnat.dg/warn33_pkg.ads
*** gcc-13.3.0/gcc/testsuite/gnat.dg/warn33_pkg.ads	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/testsuite/gnat.dg/warn33_pkg.ads	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,7 ----
+ package Warn33_Pkg is
+ 
+   type GenT is delta 1.0 range 1.0 .. 10.0;
+   function "-" (X : GenT; Y : GenT) return GenT;
+   type DerT is new GenT;
+ 
+ end Warn33_Pkg;
diff -Nrcpad gcc-13.3.0/gcc/testsuite/lib/gm2.exp gcc-13.4.0/gcc/testsuite/lib/gm2.exp
*** gcc-13.3.0/gcc/testsuite/lib/gm2.exp	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/testsuite/lib/gm2.exp	Thu Jun  5 16:03:01 2025
*************** proc gm2_link_flags { paths } {
*** 281,292 ****
      set shlib_ext [get_shlib_extension]
      verbose "shared lib extension: $shlib_ext"
  
      if { $gccpath == "" } {
        global tool_root_dir
  
        set libstdcpp [lookfor_file ${tool_root_dir} libstdc++]
        if { $libstdcpp != "" } {
!           append flags "-L${libstdcpp} "
            append ld_library_path ":${libstdcpp}"
        }
      } else {
--- 281,315 ----
      set shlib_ext [get_shlib_extension]
      verbose "shared lib extension: $shlib_ext"
  
+ 
+     # We need to add options to locate gm2 libs and libstdc++
+     # Usually '-L' options are added to point to the relevant directories for
+     # the uninstalled libraries.
+ 
+     # In cases where libraries are available as both shared and convenience
+     # some additional checks are made.
+ 
+     # For some targets -static-xxxx options are handled by specs substitution
+     # and need a '-B' option rather than '-L'.  For Darwin, when embedded
+     # runpaths are in use (the default for all versions after macOS 10.11),
+     # '-B' is also needed to provide the runpath.
+     # When '-B' is used, this results in a '-L' for each path that exists (so
+     # that appending a '-L' as well is a needless duplicate).  There are also
+     # cases where tools warn for duplicates, leading to spurious fails.
+     # Therefore the objective of the code below is to add just one '-L' or
+     # '-B' for each of the libraries.
+ 
+     set target_wants_B_option 0
+     if { [istarget *-*-darwin9* ] || [istarget *-*-darwin\[12\]* ] } {
+       set target_wants_B_option 1
+     }
+ 
      if { $gccpath == "" } {
        global tool_root_dir
  
        set libstdcpp [lookfor_file ${tool_root_dir} libstdc++]
        if { $libstdcpp != "" } {
!           append flags " -L${libstdcpp} "
            append ld_library_path ":${libstdcpp}"
        }
      } else {
*************** proc gm2_link_flags { paths } {
*** 294,312 ****
  	    append ld_library_path ":${gccpath}/lib"
  	}
  	if [file exists "${gccpath}/libstdc++/libstdc++.a"] {
! 	    append flags "-L${gccpath}/libstdc++ "
  	    append ld_library_path ":${gccpath}/libstdc++"
  	}
! 	if [file exists "${gccpath}/libstdc++-v3/src/.libs/libstdc++.a"] {
! 	    append flags " -L${gccpath}/libstdc++-v3/src/.libs "
! 	    append ld_library_path ":${gccpath}/libstdc++-v3/src/.libs"
! 	}
! 	# Look for libstdc++.${shlib_ext}.
! 	if [file exists "${gccpath}/libstdc++-v3/src/.libs/libstdc++.${shlib_ext}"] {
! 	    append flags " -L${gccpath}/libstdc++-v3/src/.libs "
  	    append ld_library_path ":${gccpath}/libstdc++-v3/src/.libs"
  	}
  
  	# puts stderr "${gm2_link_libraries}  before foreach"
  	foreach d [list {*}${gm2_link_libraries}] {
  	    # puts stderr "${d}  XXXX"
--- 317,338 ----
  	    append ld_library_path ":${gccpath}/lib"
  	}
  	if [file exists "${gccpath}/libstdc++/libstdc++.a"] {
! 	    append flags " -L${gccpath}/libstdc++ "
  	    append ld_library_path ":${gccpath}/libstdc++"
  	}
! 	# Look for libstdc++.<a,${shlib_ext}>.
!         if { [file exists "${gccpath}/libstdc++-v3/src/.libs/libstdc++.a"] \
! 	     || [file exists "${gccpath}/libstdc++-v3/src/.libs/libstdc++.${shlib_ext}"] } {
!             if { $target_wants_B_option } {
! 	        append flags " -B${gccpath}/libstdc++-v3/src/.libs "
!             } else {
! 	        append flags " -L${gccpath}/libstdc++-v3/src/.libs "
!             }
  	    append ld_library_path ":${gccpath}/libstdc++-v3/src/.libs"
  	}
  
+ 	# Here we are forcing the static libraries, with complete paths so 
+ 	# there's no -L/-B logic needed
  	# puts stderr "${gm2_link_libraries}  before foreach"
  	foreach d [list {*}${gm2_link_libraries}] {
  	    # puts stderr "${d}  XXXX"
*************** proc gm2_link_flags { paths } {
*** 315,321 ****
  	    if [file exists "${gccpath}/libgm2/lib${d}/.libs/lib${d}.a"] {
  		send_log "good found ${gccpath}/libgm2/lib${d}/.libs/lib${d}.a\n"
  		# append flags " -L${gccpath}/libgm2/lib${d}/.libs -l${d}"
! 		append flags " ${gccpath}/libgm2/lib${d}/.libs/lib${d}.a"
  		append ld_library_path ":${gccpath}/libgm2/lib${d}/.libs"
  	    }
  	    send_log "ld_library_path is ${ld_library_path}\n"
--- 341,347 ----
  	    if [file exists "${gccpath}/libgm2/lib${d}/.libs/lib${d}.a"] {
  		send_log "good found ${gccpath}/libgm2/lib${d}/.libs/lib${d}.a\n"
  		# append flags " -L${gccpath}/libgm2/lib${d}/.libs -l${d}"
! 		append flags " ${gccpath}/libgm2/lib${d}/.libs/lib${d}.a "
  		append ld_library_path ":${gccpath}/libgm2/lib${d}/.libs"
  	    }
  	    send_log "ld_library_path is ${ld_library_path}\n"
diff -Nrcpad gcc-13.3.0/gcc/testsuite/lib/target-supports.exp gcc-13.4.0/gcc/testsuite/lib/target-supports.exp
*** gcc-13.3.0/gcc/testsuite/lib/target-supports.exp	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/testsuite/lib/target-supports.exp	Thu Jun  5 16:03:01 2025
*************** foreach { armfunc armflag armdefs } {
*** 5057,5062 ****
--- 5057,5064 ----
  		__ARM_ARCH_8M_BASE__
  	v8m_main "-march=armv8-m.main -mthumb" __ARM_ARCH_8M_MAIN__
  	v8_1m_main "-march=armv8.1-m.main -mthumb" __ARM_ARCH_8M_MAIN__
+ 	v8_1m_main_pacbti "-march=armv8.1-m.main+pacbti+fp -mthumb"
+ 		"__ARM_ARCH_8M_MAIN__ && __ARM_FEATURE_BTI && __ARM_FEATURE_PAUTH"
  	v9a "-march=armv9-a" __ARM_ARCH_9A__ } {
      eval [string map [list FUNC $armfunc FLAG $armflag DEFS $armdefs ] {
  	proc check_effective_target_arm_arch_FUNC_ok { } {
*************** proc check_effective_target_powerpc_elfv
*** 6919,6925 ****
  # Return 1 if this is a PowerPC target supporting -mrop-protect
  
  proc check_effective_target_rop_ok { } {
!     return [check_effective_target_power10_ok] && [check_effective_target_powerpc_elfv2]
  }
  
  # The VxWorks SPARC simulator accepts only EM_SPARC executables and
--- 6921,6927 ----
  # Return 1 if this is a PowerPC target supporting -mrop-protect
  
  proc check_effective_target_rop_ok { } {
!     return [check_effective_target_has_arch_pwr8] && [check_effective_target_powerpc_elfv2]
  }
  
  # The VxWorks SPARC simulator accepts only EM_SPARC executables and
diff -Nrcpad gcc-13.3.0/gcc/tree-assume.cc gcc-13.4.0/gcc/tree-assume.cc
*** gcc-13.3.0/gcc/tree-assume.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/gcc/tree-assume.cc	Thu Jun  5 16:03:01 2025
***************
*** 0 ****
--- 1,650 ----
+ /* Support for C++23 ASSUME keyword functionailty.
+    Copyright (C) 2023-2024 Free Software Foundation, Inc.
+    Contributed by Andrew MacLeod <amacleod@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 "basic-block.h"
+ #include "bitmap.h"
+ #include "options.h"
+ #include "function.h"
+ #include "cfg.h"
+ #include "tree.h"
+ #include "gimple.h"
+ #include "tree-pass.h"
+ #include "ssa.h"
+ #include "gimple-iterator.h"
+ #include "gimple-range.h"
+ #include "tree-dfa.h"
+ #include "gimple-pretty-print.h"
+ #include "tree-cfg.h"
+ #include "value-range-storage.h"
+ 
+ // This global cache is used with the range engine as markers for what
+ // has been visited during this incarnation.  Once the ranger evaluates
+ // a name, it is typically not re-evaluated again.
+ 
+ class ssa_cache : public range_query
+ {
+ public:
+   ssa_cache ();
+   ~ssa_cache ();
+   virtual bool has_range (tree name) const;
+   virtual bool get_range (vrange &r, tree name) const;
+   virtual bool set_range (tree name, const vrange &r);
+   virtual bool merge_range (tree name, const vrange &r);
+   virtual void clear_range (tree name);
+   virtual void clear ();
+   void dump (FILE *f = stderr);
+   virtual bool range_of_expr (vrange &r, tree expr, gimple *stmt = NULL);
+ protected:
+   vec<vrange *> m_tab;
+   vrange_allocator *m_range_allocator;
+ };
+ 
+ // This is the same as global cache, except it maintains an active bitmap
+ // rather than depending on a zero'd out vector of pointers.  This is better
+ // for sparsely/lightly used caches.
+ 
+ class ssa_lazy_cache : public ssa_cache
+ {
+ public:
+   inline ssa_lazy_cache () { active_p = BITMAP_ALLOC (NULL); }
+   inline ~ssa_lazy_cache () { BITMAP_FREE (active_p); }
+   inline bool empty_p () const { return bitmap_empty_p (active_p); }
+   virtual bool has_range (tree name) const;
+   virtual bool set_range (tree name, const vrange &r);
+   virtual bool merge_range (tree name, const vrange &r);
+   virtual bool get_range (vrange &r, tree name) const;
+   virtual void clear_range (tree name);
+   virtual void clear ();
+ protected:
+   bitmap active_p;
+ };
+ 
+ 
+ // --------------------------------------------------------------------------
+ 
+ // Initialize an ssa cache.
+ 
+ ssa_cache::ssa_cache ()
+ {
+   m_tab.create (0);
+   m_range_allocator = new obstack_vrange_allocator;
+ }
+ 
+ // Deconstruct an ssa cache.
+ 
+ ssa_cache::~ssa_cache ()
+ {
+   m_tab.release ();
+   delete m_range_allocator;
+ }
+ 
+ // Enable a query to evaluate staements/ramnges based on picking up ranges
+ // from just an ssa-cache.
+ 
+ bool
+ ssa_cache::range_of_expr (vrange &r, tree expr, gimple *stmt)
+ {
+   if (!gimple_range_ssa_p (expr))
+     return get_tree_range (r, expr, stmt);
+ 
+   if (!get_range (r, expr))
+     gimple_range_global (r, expr, cfun);
+   return true;
+ }
+ 
+ // Return TRUE if the global range of NAME has a cache entry.
+ 
+ bool
+ ssa_cache::has_range (tree name) const
+ {
+   unsigned v = SSA_NAME_VERSION (name);
+   if (v >= m_tab.length ())
+     return false;
+   return m_tab[v] != NULL;
+ }
+ 
+ // Retrieve the global range of NAME from cache memory if it exists.
+ // Return the value in R.
+ 
+ bool
+ ssa_cache::get_range (vrange &r, tree name) const
+ {
+   unsigned v = SSA_NAME_VERSION (name);
+   if (v >= m_tab.length ())
+     return false;
+ 
+   vrange *stow = m_tab[v];
+   if (!stow)
+     return false;
+   r = *stow;
+   return true;
+ }
+ 
+ // Set the range for NAME to R in the ssa cache.
+ // Return TRUE if there was already a range set, otherwise false.
+ 
+ bool
+ ssa_cache::set_range (tree name, const vrange &r)
+ {
+   unsigned v = SSA_NAME_VERSION (name);
+   if (v >= m_tab.length ())
+     m_tab.safe_grow_cleared (num_ssa_names + 1);
+ 
+   vrange *m = m_tab[v];
+   if (m && m->fits_p (r))
+     *m = r;
+   else
+     m_tab[v] = m_range_allocator->clone (r);
+   return m != NULL;
+ }
+ 
+ // If NAME has a range, intersect it with R, otherwise set it to R.
+ // Return TRUE if the range is new or changes.
+ 
+ bool
+ ssa_cache::merge_range (tree name, const vrange &r)
+ {
+   unsigned v = SSA_NAME_VERSION (name);
+   if (v >= m_tab.length ())
+     m_tab.safe_grow_cleared (num_ssa_names + 1);
+ 
+   vrange *m = m_tab[v];
+   // Check if this is a new value.
+   if (!m)
+     m_tab[v] = m_range_allocator->clone (r);
+   else
+     {
+       Value_Range curr (TREE_TYPE (name));
+       curr = *m;
+       // If there is no change, return false.
+       if (!curr.intersect (r))
+ 	return false;
+ 
+       if (m->fits_p (curr))
+ 	*m = curr;
+       else
+ 	m_tab[v] = m_range_allocator->clone ((const vrange &)curr);
+     }
+   return true;
+ }
+ 
+ // Set the range for NAME to R in the ssa cache.
+ 
+ void
+ ssa_cache::clear_range (tree name)
+ {
+   unsigned v = SSA_NAME_VERSION (name);
+   if (v >= m_tab.length ())
+     return;
+   m_tab[v] = NULL;
+ }
+ 
+ // Clear the ssa cache.
+ 
+ void
+ ssa_cache::clear ()
+ {
+   if (m_tab.address ())
+     memset (m_tab.address(), 0, m_tab.length () * sizeof (vrange *));
+ }
+ 
+ // Dump the contents of the ssa cache to F.
+ 
+ void
+ ssa_cache::dump (FILE *f)
+ {
+   for (unsigned x = 1; x < num_ssa_names; x++)
+     {
+       if (!gimple_range_ssa_p (ssa_name (x)))
+ 	continue;
+       Value_Range r (TREE_TYPE (ssa_name (x)));
+       // Dump all non-varying ranges.
+       if (get_range (r, ssa_name (x)) && !r.varying_p ())
+ 	{
+ 	  print_generic_expr (f, ssa_name (x), TDF_NONE);
+ 	  fprintf (f, "  : ");
+ 	  r.dump (f);
+ 	  fprintf (f, "\n");
+ 	}
+     }
+ 
+ }
+ 
+ // Return true if NAME has an active range in the cache.
+ 
+ bool
+ ssa_lazy_cache::has_range (tree name) const
+ {
+   return bitmap_bit_p (active_p, SSA_NAME_VERSION (name));
+ }
+ 
+ // Set range of NAME to R in a lazy cache.  Return FALSE if it did not already
+ // have a range.
+ 
+ bool
+ ssa_lazy_cache::set_range (tree name, const vrange &r)
+ {
+   unsigned v = SSA_NAME_VERSION (name);
+   if (!bitmap_set_bit (active_p, v))
+     {
+       // There is already an entry, simply set it.
+       gcc_checking_assert (v < m_tab.length ());
+       return ssa_cache::set_range (name, r);
+     }
+   if (v >= m_tab.length ())
+     m_tab.safe_grow (num_ssa_names + 1);
+   m_tab[v] = m_range_allocator->clone (r);
+   return false;
+ }
+ 
+ // If NAME has a range, intersect it with R, otherwise set it to R.
+ // Return TRUE if the range is new or changes.
+ 
+ bool
+ ssa_lazy_cache::merge_range (tree name, const vrange &r)
+ {
+   unsigned v = SSA_NAME_VERSION (name);
+   if (!bitmap_set_bit (active_p, v))
+     {
+       // There is already an entry, simply merge it.
+       gcc_checking_assert (v < m_tab.length ());
+       return ssa_cache::merge_range (name, r);
+     }
+   if (v >= m_tab.length ())
+     m_tab.safe_grow (num_ssa_names + 1);
+   m_tab[v] = m_range_allocator->clone (r);
+   return true;
+ }
+ 
+ // Return TRUE if NAME has a range, and return it in R.
+ 
+ bool
+ ssa_lazy_cache::get_range (vrange &r, tree name) const
+ {
+   if (!bitmap_bit_p (active_p, SSA_NAME_VERSION (name)))
+     return false;
+   return ssa_cache::get_range (r, name);
+ }
+ 
+ // Remove NAME from the active range list.
+ 
+ void
+ ssa_lazy_cache::clear_range (tree name)
+ {
+   bitmap_clear_bit (active_p, SSA_NAME_VERSION (name));
+ }
+ 
+ // Remove all ranges from the active range list.
+ 
+ void
+ ssa_lazy_cache::clear ()
+ {
+   bitmap_clear (active_p);
+ }
+ 
+ // An assume query utilizes the current range query to implement the assume
+ // keyword.
+ // For any return value of 1 from the function, it attempts to determine
+ // which paths lead to a 1 value being returned. On those paths, it determines
+ // the ranges of any ssa_names listed in bitmap P (usually the parm list for
+ // the function), and combines them all.
+ // These ranges are then set as the global ranges for those parms in this
+ // function.
+ // Other functions which refer to this function in an assume builtin
+ // will then pick up these ranges for the parameters via the inferred range
+ // mechanism.
+ //   See gimple-range-infer.cc::gimple_infer_range::check_assume_func ()
+ //
+ // my_func (int x)
+ // {
+ //   <...>
+ //   assume [[(x == 1 || x ==4))]]
+ //   if (x ==3)
+ //
+ // a small temporary assume function consisting of
+ // assume_f1 (int x) { return x == 1 || x == 4; }
+ // is constructed by the front end, and optimized, at the very end of
+ // optimization, instead of generating code, we instead invoke the assume pass
+ // which uses this query to set the the global value of parm x to [1,1][4,4]
+ //
+ // Meanwhile., my_func has been rewritten to be:
+ //
+ // my_func (int x_2)
+ // {
+ //   <...>
+ //   assume_builtin_call  assume_f1 (x_2);
+ //   if (x_2 == 3)
+ //
+ // When ranger is processing the assume_builtin_call, it looks up the global
+ // value of the parameter in assume_f1, which is [1,1][4,4].  It then registers
+ // and inferred range at this statement setting the value x_2 to [1,1][4,4]
+ //
+ // Any uses of x_2 after this statement will now utilize this inferred range.
+ //
+ // When VRP processes if (x_2 == 3), it picks up the inferred range, and
+ // determines that x_2 can never be 3, and will rewrite the branch to
+ //   if (0 != 0)
+ 
+ class assume_query
+ {
+ public:
+   assume_query (gimple_ranger *ranger, function *f, bitmap p);
+ protected:
+   inline void process_stmts (gimple *s, vrange &lhs_range)
+   {
+     fur_depend src (s, &(m_ranger->gori ()), m_ranger);
+     calculate_stmt (s, lhs_range, src);
+     update_parms (src);
+   }
+   void update_parms (fur_source &src);
+   void calculate_stmt (gimple *s, vrange &lhs_range, fur_source &src);
+   void calculate_op (tree op, gimple *s, vrange &lhs, fur_source &src);
+   void calculate_phi (gphi *phi, vrange &lhs_range);
+ 
+   ssa_lazy_cache m_path;   // Values found on path
+   ssa_lazy_cache m_parms;  // Cumulative parameter value calculated
+   gimple_ranger *m_ranger;
+   bitmap m_parm_list;	   // Parameter ssa-names list.
+   function *m_func;
+ };
+ 
+ // If function F returns a integral value, and has a single return
+ // statement, try to calculate the range of each value in P that leads
+ // to the return statement returning TRUE.
+ 
+ assume_query::assume_query (gimple_ranger *ranger, function *f, bitmap p)
+   : m_ranger (ranger), m_parm_list (p), m_func (f)
+ {
+   basic_block exit_bb = EXIT_BLOCK_PTR_FOR_FN (f);
+   // If there is more than one predecessor to the exit block, bail.
+   if (!single_pred_p (exit_bb))
+     return;
+ 
+   basic_block bb = single_pred (exit_bb);
+   gimple_stmt_iterator gsi = gsi_last_nondebug_bb (bb);
+   if (gsi_end_p (gsi))
+     return;
+   gimple *s = gsi_stmt (gsi);
+   if (!is_a<greturn *> (s))
+     return;
+ 
+   // Check if the single return value is a symbolic and supported type.
+   greturn *gret = as_a<greturn *> (s);
+   tree op = gimple_return_retval (gret);
+   if (!gimple_range_ssa_p (op))
+     return;
+   tree lhs_type = TREE_TYPE (op);
+   if (!irange::supports_p (lhs_type))
+     return;
+ 
+   // Only values of interest are when the return value is 1.  The definition
+   // of the return value must be in the same block, or we have
+   // complicated flow control we don't understand, and just return.
+   unsigned prec = TYPE_PRECISION (lhs_type);
+   int_range<2> lhs_range (lhs_type, wi::one (prec), wi::one (prec));
+ 
+   gimple *def = SSA_NAME_DEF_STMT (op);
+   if (!def || gimple_get_lhs (def) != op || gimple_bb (def) != bb)
+     return;
+ 
+   // Determine if this is a PHI or a linear sequence to deal with.
+   if (is_a<gphi *> (def))
+     calculate_phi (as_a<gphi *> (def), lhs_range);
+   else
+     process_stmts (def, lhs_range);
+ 
+   if (dump_file)
+     fprintf (dump_file, "Assumptions :\n--------------\n");
+ 
+   // Now export any interesting values that were found.
+   bitmap_iterator bi;
+   unsigned x;
+   EXECUTE_IF_SET_IN_BITMAP (m_parm_list, 0, x, bi)
+     {
+       tree name = ssa_name (x);
+       tree type = TREE_TYPE (name);
+       Value_Range assume_range (type);
+       // Set the global range of NAME to anything calculated.
+       if (m_parms.get_range (assume_range, name) && !assume_range.varying_p ())
+ 	{
+ 	  set_range_info (name, assume_range);
+ 	  if (dump_file)
+ 	    {
+ 	      print_generic_expr (dump_file, name, TDF_SLIM);
+ 	      fprintf (dump_file, " -> ");
+ 	      assume_range.dump (dump_file);
+ 	      fputc ('\n', dump_file);
+ 	    }
+ 	}
+     }
+ }
+ 
+ // This function will update all the current values of interesting parameters.
+ // It tries, in order:
+ //    a) a range found via path calculations.
+ //    b) range of the parm at SRC point in the IL. (either edge or stmt)
+ //    c) VARYING if those options fail.
+ //  The value is then unioned with any existing value, allowing for the
+ //  cumulation of all ranges leading to the return that return 1.
+ 
+ void
+ assume_query::update_parms (fur_source &src)
+ {
+   // Merge any parameter values.
+   bitmap_iterator bi;
+   unsigned x;
+   EXECUTE_IF_SET_IN_BITMAP (m_parm_list, 0, x, bi)
+     {
+       tree name = ssa_name (x);
+       tree type = TREE_TYPE (name);
+ 
+       // Find a valu efrom calculations.
+       Value_Range glob_range (type);
+       if (!m_path.get_range (glob_range, name)
+ 	  && !src.get_operand (glob_range, name))
+ 	glob_range.set_varying (type);
+ 
+       // Find any current value of parm, and combine them.
+       Value_Range parm_range (type);
+       if (m_parms.get_range (parm_range, name))
+ 	glob_range.union_ (parm_range);
+ 
+       // Set this new value.
+       m_parms.set_range (name, glob_range);
+     }
+   // Now reset the path values for the next path.
+   m_path.clear ();
+ }
+ 
+ 
+ // Evaluate PHI statement, using the provided LHS range.
+ // Only process edge that are both taken and returns the LHS of the PHI.
+ 
+ void
+ assume_query::calculate_phi (gphi *phi, vrange &lhs_range)
+ {
+   for (unsigned x= 0; x < gimple_phi_num_args (phi); x++)
+     {
+       tree arg = gimple_phi_arg_def (phi, x);
+       Value_Range arg_range (TREE_TYPE (arg));
+       edge e = gimple_phi_arg_edge (phi, x);
+       Value_Range edge_range (TREE_TYPE (arg));
+       // If we can't get an edge range, be conservative and assume the
+       // edge can be taken.
+       // NOte this can be either an ssa_name or a constant.
+       if (m_ranger->range_on_edge (edge_range, e, arg))
+ 	{
+ 	  if (gimple_range_ssa_p (arg))
+ 	    {
+ 	      arg_range = lhs_range;
+ 	      range_cast (arg_range, TREE_TYPE (arg));
+ 
+ 	      // An SSA_NAME arg will start with the LHS value.
+ 	      // Check the range of ARG on the edge leading here.  If that range
+ 	      // cannot be any value from the LHS of the PHI, then this branch
+ 	      // will not  be taken to return the LHS value and can be ignored.
+ 	      arg_range.intersect (edge_range);
+ 	      if (arg_range.undefined_p ())
+ 		continue;
+ 
+ 	      // If the def is in the immediate preceeding block, process it
+ 	      // with GORI to determine what values can produce this
+ 	      // argument value.  Otherwise there is more flow, so just query
+ 	      // the edge for parm ranges and be conservative.
+ 	      gimple *def_stmt = SSA_NAME_DEF_STMT (arg);
+ 	      if (def_stmt && gimple_get_lhs (def_stmt) == arg
+ 		  && gimple_bb (def_stmt) == e->src)
+ 		{
+ 		  process_stmts (def_stmt, arg_range);
+ 		  continue;
+ 		}
+ 	      // Fall through to process the edge.
+ 	    }
+ 	  else
+ 	    {
+ 	      // If this is a constant value that differs from LHS, this
+ 	      // edge cannot be taken and we can ignore it. Otherwise fall
+ 	      // thorugh and process the edge.
+ 	      edge_range.intersect (lhs_range);
+ 	      if (edge_range.undefined_p ())
+ 		continue;
+ 	    }
+ 	}
+       // If this point is reached the edge needs processing.
+       fur_edge src (e, m_ranger);
+       update_parms (src);
+     }
+ }
+ 
+ // Evaluate operand OP on statement S, using the provided LHS range.
+ // If successful, set the range in path table, then visit OP's def stmt
+ // if it is in the same BB.
+ 
+ void
+ assume_query::calculate_op (tree op, gimple *s, vrange &lhs, fur_source &src)
+ {
+   basic_block bb = gimple_bb (s);
+   Value_Range op_range (TREE_TYPE (op));
+   if (src.gori () &&
+       src.gori ()->compute_operand_range (op_range, s, lhs, op, src)
+       && !op_range.varying_p ())
+     {
+       // Set the global range, merging if there is already a range.
+       m_path.merge_range (op, op_range);
+       gimple *def_stmt = SSA_NAME_DEF_STMT (op);
+       // Terminate if the patway leads to a different block as we
+       // are not analyzing flow.
+       if (def_stmt && gimple_get_lhs (def_stmt) == op
+ 	  && gimple_bb (def_stmt) == bb)
+ 	calculate_stmt (def_stmt, op_range, src);
+     }
+ }
+ 
+ 
+ // Evaluate statement S which produces range LHS_RANGE.  Use GORI to
+ // determine what values the operands can have to produce the LHS,
+ // and set these in the M_PATH table.
+ 
+ void
+ assume_query::calculate_stmt (gimple *s, vrange &lhs_range, fur_source &src)
+ {
+   gimple_range_op_handler handler (s);
+   if (handler)
+     {
+       tree op = gimple_range_ssa_p (handler.operand1 ());
+       if (op)
+ 	calculate_op (op, s, lhs_range, src);
+       op = gimple_range_ssa_p (handler.operand2 ());
+       if (op)
+ 	calculate_op (op, s, lhs_range, src);
+     }
+ }
+ 
+ namespace {
+ 
+ const pass_data pass_data_assumptions =
+ {
+   GIMPLE_PASS, /* type */
+   "assumptions", /* name */
+   OPTGROUP_NONE, /* optinfo_flags */
+   TV_TREE_ASSUMPTIONS, /* tv_id */
+   PROP_ssa, /* properties_required */
+   PROP_assumptions_done, /* properties_provided */
+   0, /* properties_destroyed */
+   0, /* todo_flags_start */
+   0, /* todo_flags_end */
+ };
+ 
+ 
+ class pass_assumptions : public gimple_opt_pass
+ {
+ public:
+   pass_assumptions (gcc::context *ctxt)
+     : gimple_opt_pass (pass_data_assumptions, ctxt)
+   {}
+ 
+   /* opt_pass methods: */
+   bool gate (function *fun) final override { return fun->assume_function; }
+   unsigned int execute (function *fun) final override
+     {
+       // Create a bitmap of all the parameters in this function.
+       // Invoke the assume_query to determine what values these parameters
+       // have when the function returns TRUE, and set the global values of
+       // those parameters in this function based on that.  This will later be
+       // utilized by ranger when prcessing the builtin_assumer function.
+       auto_bitmap decls;
+       for (tree arg = DECL_ARGUMENTS (fun->decl); arg; arg = DECL_CHAIN (arg))
+ 	{
+ 	  tree name = ssa_default_def (fun, arg);
+ 	  if (!name || !gimple_range_ssa_p (name))
+ 	    continue;
+ 	  tree type = TREE_TYPE (name);
+ 	  if (!Value_Range::supports_type_p (type))
+ 	    continue;
+ 	  bitmap_set_bit (decls, SSA_NAME_VERSION (name));
+ 	}
+       // If there are no parameters to map, simply return;
+       if (bitmap_empty_p (decls))
+ 	return TODO_discard_function;
+ 
+       gimple_ranger *ranger = enable_ranger (fun);
+ 
+       // This assume query will set any global values required.
+       assume_query query (ranger, fun, decls);
+ 
+       disable_ranger (fun);
+       if (dump_file)
+ 	gimple_dump_cfg (dump_file, dump_flags & ~TDF_DETAILS);
+ 
+       return TODO_discard_function;
+     }
+ 
+ }; // class pass_assumptions
+ 
+ } // anon namespace
+ 
+ gimple_opt_pass *
+ make_pass_assumptions (gcc::context *ctx)
+ {
+   return new pass_assumptions (ctx);
+ }
diff -Nrcpad gcc-13.3.0/gcc/tree-call-cdce.cc gcc-13.4.0/gcc/tree-call-cdce.cc
*** gcc-13.3.0/gcc/tree-call-cdce.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/tree-call-cdce.cc	Thu Jun  5 16:03:01 2025
*************** check_pow (gcall *pow_call)
*** 260,266 ****
        /* If the type of the base is too wide,
           the resulting shrink wrapping condition
  	 will be too conservative.  */
!       if (bit_sz > MAX_BASE_INT_BIT_SIZE)
          return false;
  
        return true;
--- 260,266 ----
        /* If the type of the base is too wide,
           the resulting shrink wrapping condition
  	 will be too conservative.  */
!       if (bit_sz != 8 && bit_sz != 16 && bit_sz != MAX_BASE_INT_BIT_SIZE)
          return false;
  
        return true;
diff -Nrcpad gcc-13.3.0/gcc/tree-cfg.cc gcc-13.4.0/gcc/tree-cfg.cc
*** gcc-13.3.0/gcc/tree-cfg.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/tree-cfg.cc	Thu Jun  5 16:03:01 2025
*************** static edge gimple_try_redirect_by_repla
*** 167,173 ****
  static inline bool stmt_starts_bb_p (gimple *, gimple *);
  static int gimple_verify_flow_info (void);
  static void gimple_make_forwarder_block (edge);
! static gimple *first_non_label_stmt (basic_block);
  static bool verify_gimple_transaction (gtransaction *);
  static bool call_can_make_abnormal_goto (gimple *);
  
--- 167,173 ----
  static inline bool stmt_starts_bb_p (gimple *, gimple *);
  static int gimple_verify_flow_info (void);
  static void gimple_make_forwarder_block (edge);
! static gimple *first_non_label_nondebug_stmt (basic_block);
  static bool verify_gimple_transaction (gtransaction *);
  static bool call_can_make_abnormal_goto (gimple *);
  
*************** assign_discriminators (void)
*** 1246,1252 ****
  
        FOR_EACH_EDGE (e, ei, bb->succs)
  	{
! 	  gimple *first = first_non_label_stmt (e->dest);
  	  gimple *last = last_stmt (e->dest);
  
  	  gimple *stmt_on_same_line = NULL;
--- 1246,1252 ----
  
        FOR_EACH_EDGE (e, ei, bb->succs)
  	{
! 	  gimple *first = first_non_label_nondebug_stmt (e->dest);
  	  gimple *last = last_stmt (e->dest);
  
  	  gimple *stmt_on_same_line = NULL;
*************** first_stmt (basic_block bb)
*** 2936,2949 ****
    return stmt;
  }
  
! /* Return the first non-label statement in basic block BB.  */
  
  static gimple *
! first_non_label_stmt (basic_block bb)
  {
!   gimple_stmt_iterator i = gsi_start_bb (bb);
!   while (!gsi_end_p (i) && gimple_code (gsi_stmt (i)) == GIMPLE_LABEL)
!     gsi_next (&i);
    return !gsi_end_p (i) ? gsi_stmt (i) : NULL;
  }
  
--- 2936,2948 ----
    return stmt;
  }
  
! /* Return the first non-label/non-debug statement in basic block BB.  */
  
  static gimple *
! first_non_label_nondebug_stmt (basic_block bb)
  {
!   gimple_stmt_iterator i;
!   i = gsi_start_nondebug_after_labels_bb (bb);
    return !gsi_end_p (i) ? gsi_stmt (i) : NULL;
  }
  
diff -Nrcpad gcc-13.3.0/gcc/tree-chrec.cc gcc-13.4.0/gcc/tree-chrec.cc
*** gcc-13.3.0/gcc/tree-chrec.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/tree-chrec.cc	Thu Jun  5 16:03:01 2025
*************** eq_evolutions_p (const_tree chrec0, cons
*** 1612,1618 ****
        || TREE_CODE (chrec0) != TREE_CODE (chrec1))
      return false;
  
!   if (chrec0 == chrec1)
      return true;
  
    if (! types_compatible_p (TREE_TYPE (chrec0), TREE_TYPE (chrec1)))
--- 1612,1618 ----
        || TREE_CODE (chrec0) != TREE_CODE (chrec1))
      return false;
  
!   if (operand_equal_p (chrec0, chrec1, 0))
      return true;
  
    if (! types_compatible_p (TREE_TYPE (chrec0), TREE_TYPE (chrec1)))
*************** eq_evolutions_p (const_tree chrec0, cons
*** 1639,1645 ****
  			      TREE_OPERAND (chrec1, 0));
  
      default:
!       return operand_equal_p (chrec0, chrec1, 0);
      }
  }
  
--- 1639,1645 ----
  			      TREE_OPERAND (chrec1, 0));
  
      default:
!       return false;
      }
  }
  
diff -Nrcpad gcc-13.3.0/gcc/tree-data-ref.cc gcc-13.4.0/gcc/tree-data-ref.cc
*** gcc-13.3.0/gcc/tree-data-ref.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/tree-data-ref.cc	Thu Jun  5 16:03:01 2025
*************** along with GCC; see the file COPYING3.
*** 73,78 ****
--- 73,79 ----
  
  */
  
+ #define INCLUDE_ALGORITHM
  #include "config.h"
  #include "system.h"
  #include "coretypes.h"
*************** split_constant_offset_1 (tree type, tree
*** 762,767 ****
--- 763,776 ----
    if (INTEGRAL_TYPE_P (type) && TYPE_OVERFLOW_TRAPS (type))
      return false;
  
+   if (TREE_CODE (op0) == SSA_NAME
+       && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (op0))
+     return false;
+   if (op1
+       && TREE_CODE (op1) == SSA_NAME
+       && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (op1))
+     return false;
+ 
    switch (code)
      {
      case INTEGER_CST:
*************** split_constant_offset_1 (tree type, tree
*** 854,862 ****
  
      case SSA_NAME:
        {
- 	if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (op0))
- 	  return false;
- 
  	gimple *def_stmt = SSA_NAME_DEF_STMT (op0);
  	enum tree_code subcode;
  
--- 863,868 ----
*************** create_waw_or_war_checks (tree *cond_exp
*** 2481,2489 ****
    limit = fold_build2 (PLUS_EXPR, sizetype, limit,
  		       size_int (last_chunk_a + last_chunk_b));
  
!   tree subject = fold_build2 (POINTER_DIFF_EXPR, ssizetype, addr_b, addr_a);
!   subject = fold_build2 (PLUS_EXPR, sizetype,
! 			 fold_convert (sizetype, subject), bias);
  
    *cond_expr = fold_build2 (GT_EXPR, boolean_type_node, subject, limit);
    if (dump_enabled_p ())
--- 2487,2496 ----
    limit = fold_build2 (PLUS_EXPR, sizetype, limit,
  		       size_int (last_chunk_a + last_chunk_b));
  
!   tree subject = fold_build2 (MINUS_EXPR, sizetype,
! 			      fold_convert (sizetype, addr_b),
! 			      fold_convert (sizetype, addr_a));
!   subject = fold_build2 (PLUS_EXPR, sizetype, subject, bias);
  
    *cond_expr = fold_build2 (GT_EXPR, boolean_type_node, subject, limit);
    if (dump_enabled_p ())
*************** create_intersect_range_checks (class loo
*** 2629,2635 ****
  	 Because the maximum values are inclusive, there is an alias
  	 if the maximum value of one segment is equal to the minimum
  	 value of the other.  */
!       min_align = MIN (dr_a.align, dr_b.align);
        cmp_code = LT_EXPR;
      }
  
--- 2636,2642 ----
  	 Because the maximum values are inclusive, there is an alias
  	 if the maximum value of one segment is equal to the minimum
  	 value of the other.  */
!       min_align = std::min (dr_a.align, dr_b.align);
        cmp_code = LT_EXPR;
      }
  
*************** dr_may_alias_p (const struct data_refere
*** 2984,2989 ****
--- 2991,2998 ----
  	  && DR_BASE_ADDRESS (b)
  	  && operand_equal_p (DR_BASE_ADDRESS (a), DR_BASE_ADDRESS (b))
  	  && operand_equal_p (DR_OFFSET (a), DR_OFFSET (b))
+ 	  && tree_size_a
+ 	  && tree_size_b
  	  && poly_int_tree_p (tree_size_a)
  	  && poly_int_tree_p (tree_size_b)
  	  && !ranges_maybe_overlap_p (wi::to_poly_widest (DR_INIT (a)),
*************** initialize_matrix_A (lambda_matrix A, tr
*** 4045,4051 ****
        }
  
      case INTEGER_CST:
!       return chrec;
  
      default:
        gcc_unreachable ();
--- 4054,4060 ----
        }
  
      case INTEGER_CST:
!       return cst_and_fits_in_hwi (chrec) ? chrec : chrec_dont_know;
  
      default:
        gcc_unreachable ();
*************** build_classic_dist_vector_1 (struct data
*** 5181,5188 ****
  	  non_affine_dependence_relation (ddr);
  	  return false;
  	}
-       else
- 	*init_b = true;
      }
  
    return true;
--- 5190,5195 ----
diff -Nrcpad gcc-13.3.0/gcc/tree-eh.cc gcc-13.4.0/gcc/tree-eh.cc
*** gcc-13.3.0/gcc/tree-eh.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/tree-eh.cc	Thu Jun  5 16:03:01 2025
*************** add_stmt_to_eh_lp_fn (struct function *i
*** 76,82 ****
    if (!get_eh_throw_stmt_table (ifun))
      set_eh_throw_stmt_table (ifun, hash_map<gimple *, int>::create_ggc (31));
  
!   gcc_assert (!get_eh_throw_stmt_table (ifun)->put (t, num));
  }
  
  /* Add statement T in the current function (cfun) to EH landing pad NUM.  */
--- 76,83 ----
    if (!get_eh_throw_stmt_table (ifun))
      set_eh_throw_stmt_table (ifun, hash_map<gimple *, int>::create_ggc (31));
  
!   bool existed = get_eh_throw_stmt_table (ifun)->put (t, num);
!   gcc_assert (!existed);
  }
  
  /* Add statement T in the current function (cfun) to EH landing pad NUM.  */
*************** tree_could_trap_p (tree expr)
*** 2728,2738 ****
  	  if (TREE_CODE (base) == STRING_CST)
  	    return maybe_le (TREE_STRING_LENGTH (base), off);
  	  tree size = DECL_SIZE_UNIT (base);
  	  if (size == NULL_TREE
  	      || !poly_int_tree_p (size)
! 	      || maybe_le (wi::to_poly_offset (size), off))
  	    return true;
! 	  /* Now we are sure the first byte of the access is inside
  	     the object.  */
  	  return false;
  	}
--- 2729,2744 ----
  	  if (TREE_CODE (base) == STRING_CST)
  	    return maybe_le (TREE_STRING_LENGTH (base), off);
  	  tree size = DECL_SIZE_UNIT (base);
+ 	  tree refsz = TYPE_SIZE_UNIT (TREE_TYPE (expr));
  	  if (size == NULL_TREE
+ 	      || refsz == NULL_TREE
  	      || !poly_int_tree_p (size)
! 	      || !poly_int_tree_p (refsz)
! 	      || maybe_le (wi::to_poly_offset (size), off)
! 	      || maybe_gt (off + wi::to_poly_offset (refsz),
! 			   wi::to_poly_offset (size)))
  	    return true;
! 	  /* Now we are sure the whole base of the access is inside
  	     the object.  */
  	  return false;
  	}
diff -Nrcpad gcc-13.3.0/gcc/tree-if-conv.cc gcc-13.4.0/gcc/tree-if-conv.cc
*** gcc-13.3.0/gcc/tree-if-conv.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/tree-if-conv.cc	Thu Jun  5 16:03:01 2025
*************** predicate_statements (loop_p loop)
*** 2649,2654 ****
--- 2649,2655 ----
  		 This will cause the vectorizer to match the "in branch"
  		 clone variants, and serves to build the mask vector
  		 in a natural way.  */
+ 	      tree mask = cond;
  	      gcall *call = dyn_cast <gcall *> (gsi_stmt (gsi));
  	      tree orig_fn = gimple_call_fn (call);
  	      int orig_nargs = gimple_call_num_args (call);
*************** predicate_statements (loop_p loop)
*** 2656,2662 ****
  	      args.safe_push (orig_fn);
  	      for (int i = 0; i < orig_nargs; i++)
  		args.safe_push (gimple_call_arg (call, i));
! 	      args.safe_push (cond);
  
  	      /* Replace the call with a IFN_MASK_CALL that has the extra
  		 condition parameter. */
--- 2657,2674 ----
  	      args.safe_push (orig_fn);
  	      for (int i = 0; i < orig_nargs; i++)
  		args.safe_push (gimple_call_arg (call, i));
! 	      /* If `swap', we invert the mask used for the if branch for use
! 		 when masking the function call.  */
! 	      if (swap)
! 		{
! 		  gimple_seq stmts = NULL;
! 		  tree true_val
! 		    = constant_boolean_node (true, TREE_TYPE (mask));
! 		  mask = gimple_build (&stmts, BIT_XOR_EXPR,
! 				       TREE_TYPE (mask), mask, true_val);
! 		  gsi_insert_seq_before (&gsi, stmts, GSI_SAME_STMT);
! 		}
! 	      args.safe_push (mask);
  
  	      /* Replace the call with a IFN_MASK_CALL that has the extra
  		 condition parameter. */
*************** ifcvt_local_dce (class loop *loop)
*** 3194,3200 ****
        gimple_stmt_iterator gsiprev = gsi;
        gsi_prev (&gsiprev);
        stmt = gsi_stmt (gsi);
!       if (gimple_store_p (stmt) && gimple_vdef (stmt))
  	{
  	  tree lhs = gimple_get_lhs (stmt);
  	  ao_ref write;
--- 3206,3214 ----
        gimple_stmt_iterator gsiprev = gsi;
        gsi_prev (&gsiprev);
        stmt = gsi_stmt (gsi);
!       if (!gimple_has_volatile_ops (stmt)
! 	  && gimple_store_p (stmt)
! 	  && gimple_vdef (stmt))
  	{
  	  tree lhs = gimple_get_lhs (stmt);
  	  ao_ref write;
diff -Nrcpad gcc-13.3.0/gcc/tree-inline.cc gcc-13.4.0/gcc/tree-inline.cc
*** gcc-13.3.0/gcc/tree-inline.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/tree-inline.cc	Thu Jun  5 16:03:01 2025
*************** copy_edges_for_bb (basic_block bb, profi
*** 2679,2686 ****
  		   && gimple_call_arg (copy_stmt, 0) == boolean_true_node)
  	    nonlocal_goto = false;
  	  else
! 	    make_single_succ_edge (copy_stmt_bb, abnormal_goto_dest,
! 				   EDGE_ABNORMAL);
  	}
  
        if ((can_throw || nonlocal_goto)
--- 2679,2689 ----
  		   && gimple_call_arg (copy_stmt, 0) == boolean_true_node)
  	    nonlocal_goto = false;
  	  else
! 	    {
! 	      make_single_succ_edge (copy_stmt_bb, abnormal_goto_dest,
! 				     EDGE_ABNORMAL);
! 	      gimple_call_set_ctrl_altering (copy_stmt, true);
! 	    }
  	}
  
        if ((can_throw || nonlocal_goto)
diff -Nrcpad gcc-13.3.0/gcc/tree-loop-distribution.cc gcc-13.4.0/gcc/tree-loop-distribution.cc
*** gcc-13.3.0/gcc/tree-loop-distribution.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/tree-loop-distribution.cc	Thu Jun  5 16:03:01 2025
*************** copy_loop_before (class loop *loop, bool
*** 963,970 ****
  	  if (virtual_operand_p (gimple_phi_result (phi)))
  	    continue;
  	  use_operand_p use_p = PHI_ARG_DEF_PTR_FROM_EDGE (phi, exit);
! 	  tree new_def = get_current_def (USE_FROM_PTR (use_p));
! 	  SET_USE (use_p, new_def);
  	}
      }
  
--- 963,976 ----
  	  if (virtual_operand_p (gimple_phi_result (phi)))
  	    continue;
  	  use_operand_p use_p = PHI_ARG_DEF_PTR_FROM_EDGE (phi, exit);
! 	  if (TREE_CODE (USE_FROM_PTR (use_p)) == SSA_NAME)
! 	    {
! 	      tree new_def = get_current_def (USE_FROM_PTR (use_p));
! 	      if (!new_def)
! 		/* Something defined outside of the loop.  */
! 		continue;
! 	      SET_USE (use_p, new_def);
! 	    }
  	}
      }
  
*************** loop_distribution::pg_add_dependence_edg
*** 2157,2181 ****
  		 gcc.dg/tree-ssa/pr94969.c.  */
  	      if (DDR_NUM_DIST_VECTS (ddr) != 1)
  		this_dir = 2;
- 	      /* If the overlap is exact preserve stmt order.  */
- 	      else if (lambda_vector_zerop (DDR_DIST_VECT (ddr, 0),
- 					    DDR_NB_LOOPS (ddr)))
- 		;
- 	      /* Else as the distance vector is lexicographic positive swap
- 		 the dependence direction.  */
  	      else
  		{
! 		  if (DDR_REVERSED_P (ddr))
! 		    this_dir = -this_dir;
! 		  this_dir = -this_dir;
! 
  		  /* When then dependence distance of the innermost common
! 		     loop of the DRs is zero we have a conflict.  */
  		  auto l1 = gimple_bb (DR_STMT (dr1))->loop_father;
  		  auto l2 = gimple_bb (DR_STMT (dr2))->loop_father;
  		  int idx = index_in_loop_nest (find_common_loop (l1, l2)->num,
  						DDR_LOOP_NEST (ddr));
! 		  if (DDR_DIST_VECT (ddr, 0)[idx] == 0)
  		    this_dir = 2;
  		}
  	    }
--- 2163,2194 ----
  		 gcc.dg/tree-ssa/pr94969.c.  */
  	      if (DDR_NUM_DIST_VECTS (ddr) != 1)
  		this_dir = 2;
  	      else
  		{
! 		  /* If the overlap is exact preserve stmt order.  */
! 		  if (lambda_vector_zerop (DDR_DIST_VECT (ddr, 0),
! 					   DDR_NB_LOOPS (ddr)))
! 		    ;
! 		  /* Else as the distance vector is lexicographic positive swap
! 		     the dependence direction.  */
! 		  else
! 		    {
! 		      if (DDR_REVERSED_P (ddr))
! 			this_dir = -this_dir;
! 		      this_dir = -this_dir;
! 		    }
  		  /* When then dependence distance of the innermost common
! 		     loop of the DRs is zero we have a conflict.  This is
! 		     due to wonky dependence analysis which sometimes
! 		     ends up using a zero distance in place of unknown.  */
  		  auto l1 = gimple_bb (DR_STMT (dr1))->loop_father;
  		  auto l2 = gimple_bb (DR_STMT (dr2))->loop_father;
  		  int idx = index_in_loop_nest (find_common_loop (l1, l2)->num,
  						DDR_LOOP_NEST (ddr));
! 		  if (DDR_DIST_VECT (ddr, 0)[idx] == 0
! 		      /* Unless it is the outermost loop which is the one
! 			 we eventually distribute.  */
! 		      && idx != 0)
  		    this_dir = 2;
  		}
  	    }
*************** determine_reduction_stmt_1 (const loop_p
*** 3530,3536 ****
        basic_block bb = bbs[i];
  
        for (gphi_iterator bsi = gsi_start_phis (bb); !gsi_end_p (bsi);
! 	   gsi_next_nondebug (&bsi))
  	{
  	  gphi *phi = bsi.phi ();
  	  if (virtual_operand_p (gimple_phi_result (phi)))
--- 3543,3549 ----
        basic_block bb = bbs[i];
  
        for (gphi_iterator bsi = gsi_start_phis (bb); !gsi_end_p (bsi);
! 	   gsi_next (&bsi))
  	{
  	  gphi *phi = bsi.phi ();
  	  if (virtual_operand_p (gimple_phi_result (phi)))
*************** determine_reduction_stmt_1 (const loop_p
*** 3543,3550 ****
  	    }
  	}
  
!       for (gimple_stmt_iterator bsi = gsi_start_bb (bb); !gsi_end_p (bsi);
! 	   gsi_next_nondebug (&bsi), ++ninsns)
  	{
  	  /* Bail out early for loops which are unlikely to match.  */
  	  if (ninsns > 16)
--- 3556,3563 ----
  	    }
  	}
  
!       for (gimple_stmt_iterator bsi = gsi_start_nondebug_bb (bb);
! 	   !gsi_end_p (bsi); gsi_next_nondebug (&bsi), ++ninsns)
  	{
  	  /* Bail out early for loops which are unlikely to match.  */
  	  if (ninsns > 16)
diff -Nrcpad gcc-13.3.0/gcc/tree-sra.cc gcc-13.4.0/gcc/tree-sra.cc
*** gcc-13.3.0/gcc/tree-sra.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/tree-sra.cc	Thu Jun  5 16:03:01 2025
*************** along with GCC; see the file COPYING3.
*** 100,105 ****
--- 100,106 ----
  #include "builtins.h"
  #include "tree-sra.h"
  #include "opts.h"
+ #include "tree-ssa-alias-compare.h"
  
  /* Enumeration of all aggregate reductions we can do.  */
  enum sra_mode { SRA_MODE_EARLY_IPA,   /* early call regularization */
*************** create_access (tree expr, gimple *stmt,
*** 968,973 ****
--- 969,975 ----
    access->type = TREE_TYPE (expr);
    access->write = write;
    access->grp_unscalarizable_region = unscalarizable_region;
+   access->grp_same_access_path = true;
    access->stmt = stmt;
    access->reverse = reverse;
  
*************** build_accesses_from_assign (gimple *stmt
*** 1394,1399 ****
--- 1396,1404 ----
    racc = build_access_from_expr_1 (rhs, stmt, false);
    lacc = build_access_from_expr_1 (lhs, stmt, true);
  
+   bool tbaa_hazard
+     = !types_equal_for_same_type_for_tbaa_p (TREE_TYPE (lhs), TREE_TYPE (rhs));
+ 
    if (lacc)
      {
        lacc->grp_assignment_write = 1;
*************** build_accesses_from_assign (gimple *stmt
*** 1408,1413 ****
--- 1413,1420 ----
  	    bitmap_set_bit (cannot_scalarize_away_bitmap,
  			    DECL_UID (lacc->base));
  	}
+       if (tbaa_hazard)
+ 	lacc->grp_same_access_path = false;
      }
  
    if (racc)
*************** build_accesses_from_assign (gimple *stmt
*** 1427,1432 ****
--- 1434,1441 ----
  	}
        if (storage_order_barrier_p (lhs))
  	racc->grp_unscalarizable_region = 1;
+       if (tbaa_hazard)
+ 	racc->grp_same_access_path = false;
      }
  
    if (lacc && racc
*************** scan_function (void)
*** 1504,1512 ****
  	      break;
  
  	    case GIMPLE_CALL:
! 	      for (i = 0; i < gimple_call_num_args (stmt); i++)
! 		ret |= build_access_from_expr (gimple_call_arg (stmt, i),
! 					       stmt, false);
  
  	      t = gimple_call_lhs (stmt);
  	      if (t && !disqualify_if_bad_bb_terminating_stmt (stmt, t, NULL))
--- 1513,1528 ----
  	      break;
  
  	    case GIMPLE_CALL:
! 	      if (gimple_call_flags (stmt) & ECF_RETURNS_TWICE)
! 		{
! 		  for (i = 0; i < gimple_call_num_args (stmt); i++)
! 		    disqualify_base_of_expr (gimple_call_arg (stmt, i),
! 					     "Passed to a returns_twice call.");
! 		}
! 	      else
! 		for (i = 0; i < gimple_call_num_args (stmt); i++)
! 		  ret |= build_access_from_expr (gimple_call_arg (stmt, i),
! 						 stmt, false);
  
  	      t = gimple_call_lhs (stmt);
  	      if (t && !disqualify_if_bad_bb_terminating_stmt (stmt, t, NULL))
*************** sort_and_splice_var_accesses (tree var)
*** 2215,2221 ****
        bool grp_partial_lhs = access->grp_partial_lhs;
        bool first_scalar = is_gimple_reg_type (access->type);
        bool unscalarizable_region = access->grp_unscalarizable_region;
!       bool grp_same_access_path = true;
        bool bf_non_full_precision
  	= (INTEGRAL_TYPE_P (access->type)
  	   && TYPE_PRECISION (access->type) != access->size
--- 2231,2237 ----
        bool grp_partial_lhs = access->grp_partial_lhs;
        bool first_scalar = is_gimple_reg_type (access->type);
        bool unscalarizable_region = access->grp_unscalarizable_region;
!       bool grp_same_access_path = access->grp_same_access_path;
        bool bf_non_full_precision
  	= (INTEGRAL_TYPE_P (access->type)
  	   && TYPE_PRECISION (access->type) != access->size
*************** sort_and_splice_var_accesses (tree var)
*** 2234,2240 ****
  	gcc_assert (access->offset >= low
  		    && access->offset + access->size <= high);
  
!       grp_same_access_path = path_comparable_for_same_access (access->expr);
  
        j = i + 1;
        while (j < access_count)
--- 2250,2257 ----
  	gcc_assert (access->offset >= low
  		    && access->offset + access->size <= high);
  
!       if (grp_same_access_path)
! 	grp_same_access_path = path_comparable_for_same_access (access->expr);
  
        j = i + 1;
        while (j < access_count)
*************** sort_and_splice_var_accesses (tree var)
*** 2287,2293 ****
  	    }
  
  	  if (grp_same_access_path
! 	      && !same_access_path_p (access->expr, ac2->expr))
  	    grp_same_access_path = false;
  
  	  ac2->group_representative = access;
--- 2304,2311 ----
  	    }
  
  	  if (grp_same_access_path
! 	      && (!ac2->grp_same_access_path
! 		  || !same_access_path_p (access->expr, ac2->expr)))
  	    grp_same_access_path = false;
  
  	  ac2->group_representative = access;
*************** create_total_scalarization_access (struc
*** 3235,3241 ****
    access->grp_write = parent->grp_write;
    access->grp_total_scalarization = 1;
    access->grp_hint = 1;
!   access->grp_same_access_path = path_comparable_for_same_access (expr);
    access->reverse = reverse_storage_order_for_component_p (expr);
  
    access->next_sibling = next_sibling;
--- 3253,3259 ----
    access->grp_write = parent->grp_write;
    access->grp_total_scalarization = 1;
    access->grp_hint = 1;
!   access->grp_same_access_path = 0;
    access->reverse = reverse_storage_order_for_component_p (expr);
  
    access->next_sibling = next_sibling;
*************** sra_modify_expr (tree *expr, gimple_stmt
*** 3970,3977 ****
  	    }
  	  else
  	    {
! 	      gassign *stmt;
  
  	      if (access->grp_partial_lhs)
  		repl = force_gimple_operand_gsi (gsi, repl, true, NULL_TREE,
  						 true, GSI_SAME_STMT);
--- 3988,3997 ----
  	    }
  	  else
  	    {
! 	      if (TREE_READONLY (access->base))
! 		return false;
  
+ 	      gassign *stmt;
  	      if (access->grp_partial_lhs)
  		repl = force_gimple_operand_gsi (gsi, repl, true, NULL_TREE,
  						 true, GSI_SAME_STMT);
diff -Nrcpad gcc-13.3.0/gcc/tree-ssa-alias-compare.h gcc-13.4.0/gcc/tree-ssa-alias-compare.h
*** gcc-13.3.0/gcc/tree-ssa-alias-compare.h	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/tree-ssa-alias-compare.h	Thu Jun  5 16:03:01 2025
*************** class ao_compare : public operand_compar
*** 40,43 ****
--- 40,45 ----
  		    inchash::hash &hstate);
  };
  
+ bool types_equal_for_same_type_for_tbaa_p (tree type1, tree type2);
+ 
  #endif
diff -Nrcpad gcc-13.3.0/gcc/tree-ssa-alias.cc gcc-13.4.0/gcc/tree-ssa-alias.cc
*** gcc-13.3.0/gcc/tree-ssa-alias.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/tree-ssa-alias.cc	Thu Jun  5 16:03:01 2025
*************** along with GCC; see the file COPYING3.
*** 48,53 ****
--- 48,54 ----
  #include "tree-ssa-alias-compare.h"
  #include "builtins.h"
  #include "internal-fn.h"
+ #include "ipa-utils.h"
  
  /* Broad overview of how alias analysis on gimple works:
  
*************** view_converted_memref_p (tree base)
*** 2045,2052 ****
  {
    if (TREE_CODE (base) != MEM_REF && TREE_CODE (base) != TARGET_MEM_REF)
      return false;
!   return same_type_for_tbaa (TREE_TYPE (base),
! 			     TREE_TYPE (TREE_OPERAND (base, 1))) != 1;
  }
  
  /* Return true if an indirect reference based on *PTR1 constrained
--- 2046,2054 ----
  {
    if (TREE_CODE (base) != MEM_REF && TREE_CODE (base) != TARGET_MEM_REF)
      return false;
!   return (same_type_for_tbaa (TREE_TYPE (base),
! 			      TREE_TYPE (TREE_TYPE (TREE_OPERAND (base, 1))))
! 	  != 1);
  }
  
  /* Return true if an indirect reference based on *PTR1 constrained
*************** attr_fnspec::verify ()
*** 4101,4107 ****
  }
  
  /* Return ture if TYPE1 and TYPE2 will always give the same answer
!    when compared wit hother types using same_type_for_tbaa_p.  */
  
  static bool
  types_equal_for_same_type_for_tbaa_p (tree type1, tree type2,
--- 4103,4109 ----
  }
  
  /* Return ture if TYPE1 and TYPE2 will always give the same answer
!    when compared with other types using same_type_for_tbaa.  */
  
  static bool
  types_equal_for_same_type_for_tbaa_p (tree type1, tree type2,
*************** types_equal_for_same_type_for_tbaa_p (tr
*** 4124,4129 ****
--- 4126,4141 ----
      return TYPE_CANONICAL (type1) == TYPE_CANONICAL (type2);
  }
  
+ /* Return ture if TYPE1 and TYPE2 will always give the same answer
+    when compared with other types using same_type_for_tbaa.  */
+ 
+ bool
+ types_equal_for_same_type_for_tbaa_p (tree type1, tree type2)
+ {
+   return types_equal_for_same_type_for_tbaa_p (type1, type2,
+ 					       lto_streaming_expected_p ());
+ }
+ 
  /* Compare REF1 and REF2 and return flags specifying their differences.
     If LTO_STREAMING_SAFE is true do not use alias sets and canonical
     types that are going to be recomputed.
*************** ao_compare::compare_ao_refs (ao_ref *ref
*** 4291,4302 ****
  	c1 = p1, nskipped1 = i;
        i++;
      }
    for (tree p2 = ref2->ref; handled_component_p (p2); p2 = TREE_OPERAND (p2, 0))
      {
        if (component_ref_to_zero_sized_trailing_array_p (p2))
  	end_struct_ref2 = p2;
        if (ends_tbaa_access_path_p (p2))
! 	c2 = p2, nskipped1 = i;
        i++;
      }
  
--- 4303,4315 ----
  	c1 = p1, nskipped1 = i;
        i++;
      }
+   i = 0;
    for (tree p2 = ref2->ref; handled_component_p (p2); p2 = TREE_OPERAND (p2, 0))
      {
        if (component_ref_to_zero_sized_trailing_array_p (p2))
  	end_struct_ref2 = p2;
        if (ends_tbaa_access_path_p (p2))
! 	c2 = p2, nskipped2 = i;
        i++;
      }
  
diff -Nrcpad gcc-13.3.0/gcc/tree-ssa-ccp.cc gcc-13.4.0/gcc/tree-ssa-ccp.cc
*** gcc-13.3.0/gcc/tree-ssa-ccp.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/tree-ssa-ccp.cc	Thu Jun  5 16:03:01 2025
*************** likely_value (gimple *stmt)
*** 759,764 ****
--- 759,775 ----
  	continue;
        if (is_gimple_min_invariant (op))
  	has_constant_operand = true;
+       else if (TREE_CODE (op) == CONSTRUCTOR)
+ 	{
+ 	  unsigned j;
+ 	  tree val;
+ 	  FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (op), j, val)
+ 	    if (CONSTANT_CLASS_P (val))
+ 	      {
+ 		has_constant_operand = true;
+ 		break;
+ 	      }
+ 	}
      }
  
    if (has_constant_operand)
*************** convert_atomic_bit_not (enum internal_fn
*** 3321,3329 ****
      return nullptr;
  
    gimple_stmt_iterator gsi;
-   gsi = gsi_for_stmt (use_stmt);
-   gsi_remove (&gsi, true);
    tree var = make_ssa_name (TREE_TYPE (lhs));
    use_stmt = gimple_build_assign (var, BIT_AND_EXPR, lhs, and_mask);
    gsi = gsi_for_stmt (use_not_stmt);
    gsi_insert_before (&gsi, use_stmt, GSI_NEW_STMT);
--- 3332,3341 ----
      return nullptr;
  
    gimple_stmt_iterator gsi;
    tree var = make_ssa_name (TREE_TYPE (lhs));
+   /* use_stmt need to be removed after use_nop_stmt,
+      so use_lhs can be released.  */
+   gimple *use_stmt_removal = use_stmt;
    use_stmt = gimple_build_assign (var, BIT_AND_EXPR, lhs, and_mask);
    gsi = gsi_for_stmt (use_not_stmt);
    gsi_insert_before (&gsi, use_stmt, GSI_NEW_STMT);
*************** convert_atomic_bit_not (enum internal_fn
*** 3333,3338 ****
--- 3345,3352 ----
    gsi_insert_after (&gsi, g, GSI_NEW_STMT);
    gsi = gsi_for_stmt (use_not_stmt);
    gsi_remove (&gsi, true);
+   gsi = gsi_for_stmt (use_stmt_removal);
+   gsi_remove (&gsi, true);
    return use_stmt;
  }
  
*************** optimize_atomic_bit_test_and (gimple_stm
*** 3635,3642 ****
  		       */
  		    }
  		  var = make_ssa_name (TREE_TYPE (use_rhs));
! 		  gsi = gsi_for_stmt (use_stmt);
! 		  gsi_remove (&gsi, true);
  		  g = gimple_build_assign (var, BIT_AND_EXPR, use_rhs,
  					   and_mask);
  		  gsi = gsi_for_stmt (use_nop_stmt);
--- 3649,3655 ----
  		       */
  		    }
  		  var = make_ssa_name (TREE_TYPE (use_rhs));
! 		  gimple* use_stmt_removal = use_stmt;
  		  g = gimple_build_assign (var, BIT_AND_EXPR, use_rhs,
  					   and_mask);
  		  gsi = gsi_for_stmt (use_nop_stmt);
*************** optimize_atomic_bit_test_and (gimple_stm
*** 3653,3658 ****
--- 3666,3673 ----
  		  gsi_insert_after (&gsi, g, GSI_NEW_STMT);
  		  gsi = gsi_for_stmt (use_nop_stmt);
  		  gsi_remove (&gsi, true);
+ 		  gsi = gsi_for_stmt (use_stmt_removal);
+ 		  gsi_remove (&gsi, true);
  		}
  	    }
  	  else
diff -Nrcpad gcc-13.3.0/gcc/tree-ssa-copy.cc gcc-13.4.0/gcc/tree-ssa-copy.cc
*** gcc-13.3.0/gcc/tree-ssa-copy.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/tree-ssa-copy.cc	Thu Jun  5 16:03:01 2025
*************** fini_copy_prop (void)
*** 527,564 ****
  	  || copy_of[i].value == var)
  	continue;
  
!       /* In theory the points-to solution of all members of the
!          copy chain is their intersection.  For now we do not bother
! 	 to compute this but only make sure we do not lose points-to
! 	 information completely by setting the points-to solution
! 	 of the representative to the first solution we find if
! 	 it doesn't have one already.  */
        if (copy_of[i].value != var
  	  && TREE_CODE (copy_of[i].value) == SSA_NAME)
! 	{
! 	  basic_block copy_of_bb
! 	    = gimple_bb (SSA_NAME_DEF_STMT (copy_of[i].value));
! 	  basic_block var_bb = gimple_bb (SSA_NAME_DEF_STMT (var));
! 	  if (POINTER_TYPE_P (TREE_TYPE (var))
! 	      && SSA_NAME_PTR_INFO (var)
! 	      && !SSA_NAME_PTR_INFO (copy_of[i].value))
! 	    {
! 	      duplicate_ssa_name_ptr_info (copy_of[i].value,
! 					   SSA_NAME_PTR_INFO (var));
! 	      /* Points-to information is cfg insensitive,
! 		 but [E]VRP might record context sensitive alignment
! 		 info, non-nullness, etc.  So reset context sensitive
! 		 info if the two SSA_NAMEs aren't defined in the same
! 		 basic block.  */
! 	      if (var_bb != copy_of_bb)
! 		reset_flow_sensitive_info (copy_of[i].value);
! 	    }
! 	  else if (!POINTER_TYPE_P (TREE_TYPE (var))
! 		   && SSA_NAME_RANGE_INFO (var)
! 		   && !SSA_NAME_RANGE_INFO (copy_of[i].value)
! 		   && var_bb == copy_of_bb)
! 	    duplicate_ssa_name_range_info (copy_of[i].value, var);
! 	}
      }
  
    class copy_folder copy_folder;
--- 527,536 ----
  	  || copy_of[i].value == var)
  	continue;
  
!       /* Duplicate points-to and range info appropriately.  */
        if (copy_of[i].value != var
  	  && TREE_CODE (copy_of[i].value) == SSA_NAME)
! 	maybe_duplicate_ssa_info_at_copy (var, copy_of[i].value);
      }
  
    class copy_folder copy_folder;
diff -Nrcpad gcc-13.3.0/gcc/tree-ssa-dce.cc gcc-13.4.0/gcc/tree-ssa-dce.cc
*** gcc-13.3.0/gcc/tree-ssa-dce.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/tree-ssa-dce.cc	Thu Jun  5 16:03:01 2025
*************** make_forwarders_with_degenerate_phis (fu
*** 1857,1868 ****
--- 1857,1878 ----
  		    }
  		  free_dominance_info (fn, CDI_DOMINATORS);
  		  basic_block forwarder = split_edge (args[start].first);
+ 		  bool irr = false;
  		  for (unsigned j = start + 1; j < i; ++j)
  		    {
  		      edge e = args[j].first;
+ 		      if (e->flags & EDGE_IRREDUCIBLE_LOOP)
+ 			irr = true;
  		      redirect_edge_and_branch_force (e, forwarder);
  		      redirect_edge_var_map_clear (e);
  		    }
+ 		  if (irr)
+ 		    {
+ 		      forwarder->flags |= BB_IRREDUCIBLE_LOOP;
+ 		      single_succ_edge (forwarder)->flags
+ 			|= EDGE_IRREDUCIBLE_LOOP;
+ 		    }
+ 
  		  if (vphi)
  		    {
  		      tree def = copy_ssa_name (vphi_args[0]);
diff -Nrcpad gcc-13.3.0/gcc/tree-ssa-dom.cc gcc-13.4.0/gcc/tree-ssa-dom.cc
*** gcc-13.3.0/gcc/tree-ssa-dom.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/tree-ssa-dom.cc	Thu Jun  5 16:03:01 2025
*************** dom_opt_dom_walker::optimize_stmt (basic
*** 2389,2395 ****
  
        /* Perform simple redundant store elimination.  */
        if (gimple_assign_single_p (stmt)
! 	  && TREE_CODE (gimple_assign_lhs (stmt)) != SSA_NAME)
  	{
  	  tree lhs = gimple_assign_lhs (stmt);
  	  tree rhs = gimple_assign_rhs1 (stmt);
--- 2389,2397 ----
  
        /* Perform simple redundant store elimination.  */
        if (gimple_assign_single_p (stmt)
! 	  && TREE_CODE (gimple_assign_lhs (stmt)) != SSA_NAME
! 	  && (TREE_CODE (gimple_assign_lhs (stmt)) != VAR_DECL
! 	      || !DECL_HARD_REGISTER (gimple_assign_lhs (stmt))))
  	{
  	  tree lhs = gimple_assign_lhs (stmt);
  	  tree rhs = gimple_assign_rhs1 (stmt);
diff -Nrcpad gcc-13.3.0/gcc/tree-ssa-forwprop.cc gcc-13.4.0/gcc/tree-ssa-forwprop.cc
*** gcc-13.3.0/gcc/tree-ssa-forwprop.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/tree-ssa-forwprop.cc	Thu Jun  5 16:03:01 2025
*************** pass_forwprop::execute (function *fun)
*** 3639,3646 ****
  	  else if (TREE_CODE (TREE_TYPE (lhs)) == COMPLEX_TYPE
  		   && gimple_assign_load_p (stmt)
  		   && !gimple_has_volatile_ops (stmt)
! 		   && (TREE_CODE (gimple_assign_rhs1 (stmt))
! 		       != TARGET_MEM_REF)
  		   && !stmt_can_throw_internal (fun, stmt))
  	    {
  	      /* Rewrite loads used only in real/imagpart extractions to
--- 3639,3646 ----
  	  else if (TREE_CODE (TREE_TYPE (lhs)) == COMPLEX_TYPE
  		   && gimple_assign_load_p (stmt)
  		   && !gimple_has_volatile_ops (stmt)
! 		   && TREE_CODE (rhs) != TARGET_MEM_REF
! 		   && TREE_CODE (rhs) != BIT_FIELD_REF
  		   && !stmt_can_throw_internal (fun, stmt))
  	    {
  	      /* Rewrite loads used only in real/imagpart extractions to
*************** pass_forwprop::execute (function *fun)
*** 3722,3727 ****
--- 3722,3729 ----
  		  && gimple_store_p (use_stmt)
  		  && !gimple_has_volatile_ops (use_stmt)
  		  && is_gimple_assign (use_stmt)
+ 		  && (TREE_CODE (TREE_TYPE (gimple_assign_lhs (use_stmt)))
+ 		      == COMPLEX_TYPE)
  		  && (TREE_CODE (gimple_assign_lhs (use_stmt))
  		      != TARGET_MEM_REF))
  		{
diff -Nrcpad gcc-13.3.0/gcc/tree-ssa-loop-ivopts.cc gcc-13.4.0/gcc/tree-ssa-loop-ivopts.cc
*** gcc-13.3.0/gcc/tree-ssa-loop-ivopts.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/tree-ssa-loop-ivopts.cc	Thu Jun  5 16:03:01 2025
*************** find_givs_in_bb (struct ivopts_data *dat
*** 1458,1464 ****
    gimple_stmt_iterator bsi;
  
    for (bsi = gsi_start_bb (bb); !gsi_end_p (bsi); gsi_next (&bsi))
!     find_givs_in_stmt (data, gsi_stmt (bsi));
  }
  
  /* Finds general ivs.  */
--- 1458,1465 ----
    gimple_stmt_iterator bsi;
  
    for (bsi = gsi_start_bb (bb); !gsi_end_p (bsi); gsi_next (&bsi))
!     if (!is_gimple_debug (gsi_stmt (bsi)))
!       find_givs_in_stmt (data, gsi_stmt (bsi));
  }
  
  /* Finds general ivs.  */
*************** get_alias_ptr_type_for_ptr_address (iv_u
*** 7556,7562 ****
      case IFN_LEN_LOAD:
      case IFN_LEN_STORE:
        /* The second argument contains the correct alias type.  */
!       gcc_assert (use->op_p = gimple_call_arg_ptr (call, 0));
        return TREE_TYPE (gimple_call_arg (call, 1));
  
      default:
--- 7557,7563 ----
      case IFN_LEN_LOAD:
      case IFN_LEN_STORE:
        /* The second argument contains the correct alias type.  */
!       gcc_assert (use->op_p == gimple_call_arg_ptr (call, 0));
        return TREE_TYPE (gimple_call_arg (call, 1));
  
      default:
diff -Nrcpad gcc-13.3.0/gcc/tree-ssa-loop-niter.cc gcc-13.4.0/gcc/tree-ssa-loop-niter.cc
*** gcc-13.3.0/gcc/tree-ssa-loop-niter.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/tree-ssa-loop-niter.cc	Thu Jun  5 16:03:01 2025
*************** number_of_iterations_lt_to_ne (tree type
*** 1210,1226 ****
  	  if (integer_zerop (assumption))
  	    goto end;
  	}
-       if (mpz_cmp (mmod, bnds->below) < 0)
- 	noloop = boolean_false_node;
-       else if (POINTER_TYPE_P (type))
- 	noloop = fold_build2 (GT_EXPR, boolean_type_node,
- 			      iv0->base,
- 			      fold_build_pointer_plus (iv1->base, tmod));
-       else
- 	noloop = fold_build2 (GT_EXPR, boolean_type_node,
- 			      iv0->base,
- 			      fold_build2 (PLUS_EXPR, type1,
- 					   iv1->base, tmod));
      }
    else
      {
--- 1210,1215 ----
*************** number_of_iterations_lt_to_ne (tree type
*** 1236,1256 ****
  	  if (integer_zerop (assumption))
  	    goto end;
  	}
-       if (mpz_cmp (mmod, bnds->below) < 0)
- 	noloop = boolean_false_node;
-       else if (POINTER_TYPE_P (type))
- 	noloop = fold_build2 (GT_EXPR, boolean_type_node,
- 			      fold_build_pointer_plus (iv0->base,
- 						       fold_build1 (NEGATE_EXPR,
- 								    type1, tmod)),
- 			      iv1->base);
-       else
- 	noloop = fold_build2 (GT_EXPR, boolean_type_node,
- 			      fold_build2 (MINUS_EXPR, type1,
- 					   iv0->base, tmod),
- 			      iv1->base);
      }
  
    if (!integer_nonzerop (assumption))
      niter->assumptions = fold_build2 (TRUTH_AND_EXPR, boolean_type_node,
  				      niter->assumptions,
--- 1225,1239 ----
  	  if (integer_zerop (assumption))
  	    goto end;
  	}
      }
  
+   /* IV0 < IV1 does not loop if IV0->base >= IV1->base.  */
+   if (mpz_cmp (mmod, bnds->below) < 0)
+     noloop = boolean_false_node;
+   else
+     noloop = fold_build2 (GE_EXPR, boolean_type_node,
+ 			  iv0->base, iv1->base);
+ 
    if (!integer_nonzerop (assumption))
      niter->assumptions = fold_build2 (TRUTH_AND_EXPR, boolean_type_node,
  				      niter->assumptions,
*************** build_cltz_expr (tree src, bool leading,
*** 2265,2270 ****
--- 2248,2255 ----
  			      build_int_cst (integer_type_node, prec));
  	}
      }
+   else if (fn == NULL_TREE)
+     return NULL_TREE;
    else if (prec == 2 * lli_prec)
      {
        tree src1 = fold_convert (long_long_unsigned_type_node,
*************** maybe_lower_iteration_bound (class loop
*** 4697,4703 ****
            FOR_EACH_EDGE (e, ei, bb->succs)
  	    {
  	      if (loop_exit_edge_p (loop, e)
! 		  || e == loop_latch_edge (loop))
  		{
  		  found_exit = true;
  		  break;
--- 4682,4695 ----
            FOR_EACH_EDGE (e, ei, bb->succs)
  	    {
  	      if (loop_exit_edge_p (loop, e)
! 		  || e == loop_latch_edge (loop)
! 		  /* When exiting an inner loop, verify it is finite.  */
! 		  || (!flow_bb_inside_loop_p (bb->loop_father, e->dest)
! 		      && !finite_loop_p (bb->loop_father))
! 		  /* When we enter an irreducible region and the entry
! 		     does not contain a bounding stmt assume it might be
! 		     infinite.  */
! 		  || (bb->flags & BB_IRREDUCIBLE_LOOP))
  		{
  		  found_exit = true;
  		  break;
diff -Nrcpad gcc-13.3.0/gcc/tree-ssa-phiopt.cc gcc-13.4.0/gcc/tree-ssa-phiopt.cc
*** gcc-13.3.0/gcc/tree-ssa-phiopt.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/tree-ssa-phiopt.cc	Thu Jun  5 16:03:01 2025
*************** along with GCC; see the file COPYING3.
*** 54,59 ****
--- 54,60 ----
  #include "dbgcnt.h"
  #include "tree-ssa-propagate.h"
  #include "tree-ssa-dce.h"
+ #include "tree-ssa-loop-niter.h"
  
  static unsigned int tree_ssa_phiopt_worker (bool, bool, bool);
  static bool two_value_replacement (basic_block, basic_block, edge, gphi *,
*************** replace_phi_edge_with_variable (basic_bl
*** 455,460 ****
--- 456,471 ----
    else
      gcc_unreachable ();
  
+   /* If we are removing the cond on a loop exit,
+      reset number of iteration information of the loop. */
+   if (loop_exits_from_bb_p (cond_block->loop_father, cond_block))
+     {
+       auto loop = cond_block->loop_father;
+       free_numbers_of_iterations_estimates (loop);
+       loop->any_upper_bound = false;
+       loop->any_likely_upper_bound = false;
+     }
+ 
    if (edge_to_remove && EDGE_COUNT (edge_to_remove->dest->preds) == 1)
      {
        e->flags |= EDGE_FALLTHRU;
*************** value_replacement (basic_block cond_bb,
*** 1353,1358 ****
--- 1364,1373 ----
  	empty_or_with_defined_p = false;
      }
  
+   /* The middle bb is not empty if there are any phi nodes. */
+   if (phi_nodes (middle_bb))
+     empty_or_with_defined_p = false;
+ 
    cond = last_stmt (cond_bb);
    code = gimple_cond_code (cond);
  
*************** minmax_replacement (basic_block cond_bb,
*** 2106,2111 ****
--- 2121,2130 ----
  	  || gimple_code (assign) != GIMPLE_ASSIGN)
  	return false;
  
+       /* There cannot be any phi nodes in the middle bb. */
+       if (!gimple_seq_empty_p (phi_nodes (middle_bb)))
+ 	return false;
+ 
        lhs = gimple_assign_lhs (assign);
        ass_code = gimple_assign_rhs_code (assign);
        if (ass_code != MAX_EXPR && ass_code != MIN_EXPR)
*************** minmax_replacement (basic_block cond_bb,
*** 2119,2124 ****
--- 2138,2147 ----
  	  || gimple_code (assign) != GIMPLE_ASSIGN)
  	return false;
  
+       /* There cannot be any phi nodes in the alt middle bb. */
+       if (!gimple_seq_empty_p (phi_nodes (alt_middle_bb)))
+ 	return false;
+ 
        alt_lhs = gimple_assign_lhs (assign);
        if (ass_code != gimple_assign_rhs_code (assign))
  	return false;
*************** minmax_replacement (basic_block cond_bb,
*** 2229,2234 ****
--- 2252,2261 ----
  	  || gimple_code (assign) != GIMPLE_ASSIGN)
  	return false;
  
+       /* There cannot be any phi nodes in the middle bb. */
+       if (!gimple_seq_empty_p (phi_nodes (middle_bb)))
+ 	return false;
+ 
        lhs = gimple_assign_lhs (assign);
        ass_code = gimple_assign_rhs_code (assign);
        if (ass_code != MAX_EXPR && ass_code != MIN_EXPR)
*************** spaceship_replacement (basic_block cond_
*** 2719,2725 ****
  	}
        else if (tree_to_shwi (arg1) != 2
  	       || absu_hwi (tree_to_shwi (arg0)) != 1
! 	       || wi::to_widest (arg0) == wi::to_widest (arg1))
  	return false;
        switch (cmp2)
  	{
--- 2746,2752 ----
  	}
        else if (tree_to_shwi (arg1) != 2
  	       || absu_hwi (tree_to_shwi (arg0)) != 1
! 	       || wi::to_widest (arg0) == wi::to_widest (arg2))
  	return false;
        switch (cmp2)
  	{
*************** cond_if_else_store_replacement_1 (basic_
*** 3541,3547 ****
        || else_assign == NULL
        || !gimple_assign_single_p (else_assign)
        || gimple_clobber_p (else_assign)
!       || gimple_has_volatile_ops (else_assign))
      return false;
  
    lhs = gimple_assign_lhs (then_assign);
--- 3568,3576 ----
        || else_assign == NULL
        || !gimple_assign_single_p (else_assign)
        || gimple_clobber_p (else_assign)
!       || gimple_has_volatile_ops (else_assign)
!       || stmt_references_abnormal_ssa_name (then_assign)
!       || stmt_references_abnormal_ssa_name (else_assign))
      return false;
  
    lhs = gimple_assign_lhs (then_assign);
diff -Nrcpad gcc-13.3.0/gcc/tree-ssa-pre.cc gcc-13.4.0/gcc/tree-ssa-pre.cc
*** gcc-13.3.0/gcc/tree-ssa-pre.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/tree-ssa-pre.cc	Thu Jun  5 16:03:01 2025
*************** clean (bitmap_set_t set1, bitmap_set_t s
*** 2008,2017 ****
  }
  
  /* Clean the set of expressions that are no longer valid in SET because
!    they are clobbered in BLOCK or because they trap and may not be executed.  */
  
  static void
! prune_clobbered_mems (bitmap_set_t set, basic_block block)
  {
    bitmap_iterator bi;
    unsigned i;
--- 2008,2018 ----
  }
  
  /* Clean the set of expressions that are no longer valid in SET because
!    they are clobbered in BLOCK or because they trap and may not be executed.
!    When CLEAN_TRAPS is true remove all possibly trapping expressions.  */
  
  static void
! prune_clobbered_mems (bitmap_set_t set, basic_block block, bool clean_traps)
  {
    bitmap_iterator bi;
    unsigned i;
*************** prune_clobbered_mems (bitmap_set_t set,
*** 2049,2055 ****
  	     a possible exit point.
  	     ???  This is overly conservative if we translate AVAIL_OUT
  	     as the available expression might be after the exit point.  */
! 	  if (BB_MAY_NOTRETURN (block)
  	      && vn_reference_may_trap (ref))
  	    to_remove = i;
  	}
--- 2050,2056 ----
  	     a possible exit point.
  	     ???  This is overly conservative if we translate AVAIL_OUT
  	     as the available expression might be after the exit point.  */
! 	  if ((BB_MAY_NOTRETURN (block) || clean_traps)
  	      && vn_reference_may_trap (ref))
  	    to_remove = i;
  	}
*************** prune_clobbered_mems (bitmap_set_t set,
*** 2060,2066 ****
  	     a possible exit point.
  	     ???  This is overly conservative if we translate AVAIL_OUT
  	     as the available expression might be after the exit point.  */
! 	  if (BB_MAY_NOTRETURN (block)
  	      && vn_nary_may_trap (nary))
  	    to_remove = i;
  	}
--- 2061,2067 ----
  	     a possible exit point.
  	     ???  This is overly conservative if we translate AVAIL_OUT
  	     as the available expression might be after the exit point.  */
! 	  if ((BB_MAY_NOTRETURN (block) || clean_traps)
  	      && vn_nary_may_trap (nary))
  	    to_remove = i;
  	}
*************** compute_antic_aux (basic_block block, bo
*** 2114,2119 ****
--- 2115,2122 ----
  
    bool was_visited = BB_VISITED (block);
    bool changed = ! BB_VISITED (block);
+   bool any_max_on_edge = false;
+ 
    BB_VISITED (block) = 1;
    old = ANTIC_OUT = S = NULL;
  
*************** compute_antic_aux (basic_block block, bo
*** 2158,2163 ****
--- 2161,2167 ----
  		 maximal set to arrive at a maximum ANTIC_IN solution.
  		 We can ignore them in the intersection operation and thus
  		 need not explicitely represent that maximum solution.  */
+ 	      any_max_on_edge = true;
  	      if (dump_file && (dump_flags & TDF_DETAILS))
  		fprintf (dump_file, "ANTIC_IN is MAX on %d->%d\n",
  			 e->src->index, e->dest->index);
*************** compute_antic_aux (basic_block block, bo
*** 2219,2225 ****
  
    /* Prune expressions that are clobbered in block and thus become
       invalid if translated from ANTIC_OUT to ANTIC_IN.  */
!   prune_clobbered_mems (ANTIC_OUT, block);
  
    /* Generate ANTIC_OUT - TMP_GEN.  */
    S = bitmap_set_subtract_expressions (ANTIC_OUT, TMP_GEN (block));
--- 2223,2229 ----
  
    /* Prune expressions that are clobbered in block and thus become
       invalid if translated from ANTIC_OUT to ANTIC_IN.  */
!   prune_clobbered_mems (ANTIC_OUT, block, any_max_on_edge);
  
    /* Generate ANTIC_OUT - TMP_GEN.  */
    S = bitmap_set_subtract_expressions (ANTIC_OUT, TMP_GEN (block));
*************** compute_partial_antic_aux (basic_block b
*** 2395,2401 ****
  
    /* Prune expressions that are clobbered in block and thus become
       invalid if translated from PA_OUT to PA_IN.  */
!   prune_clobbered_mems (PA_OUT, block);
  
    /* PA_IN starts with PA_OUT - TMP_GEN.
       Then we subtract things from ANTIC_IN.  */
--- 2399,2405 ----
  
    /* Prune expressions that are clobbered in block and thus become
       invalid if translated from PA_OUT to PA_IN.  */
!   prune_clobbered_mems (PA_OUT, block, false);
  
    /* PA_IN starts with PA_OUT - TMP_GEN.
       Then we subtract things from ANTIC_IN.  */
diff -Nrcpad gcc-13.3.0/gcc/tree-ssa-reassoc.cc gcc-13.4.0/gcc/tree-ssa-reassoc.cc
*** gcc-13.3.0/gcc/tree-ssa-reassoc.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/tree-ssa-reassoc.cc	Thu Jun  5 16:03:01 2025
*************** static inline void
*** 403,409 ****
  insert_operand_rank (tree e, int64_t rank)
  {
    gcc_assert (rank > 0);
!   gcc_assert (!operand_rank->put (e, rank));
  }
  
  /* Given an expression E, return the rank of the expression.  */
--- 403,410 ----
  insert_operand_rank (tree e, int64_t rank)
  {
    gcc_assert (rank > 0);
!   bool existed = operand_rank->put (e, rank);
!   gcc_assert (!existed);
  }
  
  /* Given an expression E, return the rank of the expression.  */
*************** optimize_range_tests_to_bit_test (enum t
*** 3356,3362 ****
  	    continue;
  	  highj = ranges[j].high;
  	  if (highj == NULL_TREE)
! 	    highj = TYPE_MAX_VALUE (type);
  	  wide_int mask2;
  	  exp2 = extract_bit_test_mask (ranges[j].exp, prec, lowi, lowj,
  					highj, &mask2, NULL);
--- 3357,3363 ----
  	    continue;
  	  highj = ranges[j].high;
  	  if (highj == NULL_TREE)
! 	    highj = TYPE_MAX_VALUE (TREE_TYPE (lowj));
  	  wide_int mask2;
  	  exp2 = extract_bit_test_mask (ranges[j].exp, prec, lowi, lowj,
  					highj, &mask2, NULL);
diff -Nrcpad gcc-13.3.0/gcc/tree-ssa-sccvn.cc gcc-13.4.0/gcc/tree-ssa-sccvn.cc
*** gcc-13.3.0/gcc/tree-ssa-sccvn.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/tree-ssa-sccvn.cc	Thu Jun  5 16:03:01 2025
*************** copy_reference_ops_from_ref (tree ref, v
*** 955,965 ****
  		    poly_offset_int off
  		      = (wi::to_poly_offset (this_offset)
  			 + (wi::to_offset (bit_offset) >> LOG2_BITS_PER_UNIT));
! 		    /* Probibit value-numbering zero offset components
  		       of addresses the same before the pass folding
! 		       __builtin_object_size had a chance to run.  */
  		    if (TREE_CODE (orig) != ADDR_EXPR
! 			|| maybe_ne (off, 0)
  			|| (cfun->curr_properties & PROP_objsz))
  		      off.to_shwi (&temp.off);
  		  }
--- 955,968 ----
  		    poly_offset_int off
  		      = (wi::to_poly_offset (this_offset)
  			 + (wi::to_offset (bit_offset) >> LOG2_BITS_PER_UNIT));
! 		    /* Prohibit value-numbering zero offset components
  		       of addresses the same before the pass folding
! 		       __builtin_object_size had a chance to run.  Likewise
! 		       for components of zero size at arbitrary offset.  */
  		    if (TREE_CODE (orig) != ADDR_EXPR
! 			|| (TYPE_SIZE (temp.type)
! 			    && integer_nonzerop (TYPE_SIZE (temp.type))
! 			    && maybe_ne (off, 0))
  			|| (cfun->curr_properties & PROP_objsz))
  		      off.to_shwi (&temp.off);
  		  }
*************** copy_reference_ops_from_ref (tree ref, v
*** 980,988 ****
  	    if (! temp.op2)
  	      temp.op2 = size_binop (EXACT_DIV_EXPR, TYPE_SIZE_UNIT (eltype),
  				     size_int (TYPE_ALIGN_UNIT (eltype)));
  	    if (poly_int_tree_p (temp.op0)
  		&& poly_int_tree_p (temp.op1)
! 		&& TREE_CODE (temp.op2) == INTEGER_CST)
  	      {
  		poly_offset_int off = ((wi::to_poly_offset (temp.op0)
  					- wi::to_poly_offset (temp.op1))
--- 983,1013 ----
  	    if (! temp.op2)
  	      temp.op2 = size_binop (EXACT_DIV_EXPR, TYPE_SIZE_UNIT (eltype),
  				     size_int (TYPE_ALIGN_UNIT (eltype)));
+ 	    /* Prohibit value-numbering addresses of one-after-the-last
+ 	       element ARRAY_REFs the same as addresses of other components
+ 	       before the pass folding __builtin_object_size had a chance
+ 	       to run.  */
+ 	    bool avoid_oob = true;
+ 	    if (TREE_CODE (orig) != ADDR_EXPR
+ 		|| cfun->curr_properties & PROP_objsz)
+ 	      avoid_oob = false;
+ 	    else if (poly_int_tree_p (temp.op0))
+ 	      {
+ 		tree ub = array_ref_up_bound (ref);
+ 		if (ub
+ 		    && poly_int_tree_p (ub)
+ 		    /* ???  The C frontend for T[0] uses [0:] and the
+ 		       C++ frontend [0:-1U].  See layout_type for how
+ 		       awkward this is.  */
+ 		    && !integer_minus_onep (ub)
+ 		    && known_le (wi::to_poly_offset (temp.op0),
+ 				 wi::to_poly_offset (ub)))
+ 		  avoid_oob = false;
+ 	      }
  	    if (poly_int_tree_p (temp.op0)
  		&& poly_int_tree_p (temp.op1)
! 		&& TREE_CODE (temp.op2) == INTEGER_CST
! 		&& !avoid_oob)
  	      {
  		poly_offset_int off = ((wi::to_poly_offset (temp.op0)
  					- wi::to_poly_offset (temp.op1))
*************** re_valueize:
*** 1718,1723 ****
--- 1743,1766 ----
  	       && poly_int_tree_p (vro->op1)
  	       && TREE_CODE (vro->op2) == INTEGER_CST)
  	{
+ 	    /* Prohibit value-numbering addresses of one-after-the-last
+ 	       element ARRAY_REFs the same as addresses of other components
+ 	       before the pass folding __builtin_object_size had a chance
+ 	       to run.  */
+ 	  if (!(cfun->curr_properties & PROP_objsz)
+ 	      && (*orig)[0].opcode == ADDR_EXPR)
+ 	    {
+ 	      tree dom = TYPE_DOMAIN ((*orig)[i + 1].type);
+ 	      if (!dom
+ 		  || !TYPE_MAX_VALUE (dom)
+ 		  || !poly_int_tree_p (TYPE_MAX_VALUE (dom))
+ 		  || integer_minus_onep (TYPE_MAX_VALUE (dom)))
+ 		continue;
+ 	      if (!known_le (wi::to_poly_offset (vro->op0),
+ 			     wi::to_poly_offset (TYPE_MAX_VALUE (dom))))
+ 		continue;
+ 	    }
+ 
  	  poly_offset_int off = ((wi::to_poly_offset (vro->op0)
  				  - wi::to_poly_offset (vro->op1))
  				 * wi::to_offset (vro->op2)
*************** eliminate_dom_walker::eliminate_stmt (ba
*** 6771,6797 ****
  
        /* If this now constitutes a copy duplicate points-to
  	 and range info appropriately.  This is especially
! 	 important for inserted code.  See tree-ssa-copy.cc
! 	 for similar code.  */
        if (sprime
  	  && TREE_CODE (sprime) == SSA_NAME)
! 	{
! 	  basic_block sprime_b = gimple_bb (SSA_NAME_DEF_STMT (sprime));
! 	  if (POINTER_TYPE_P (TREE_TYPE (lhs))
! 	      && SSA_NAME_PTR_INFO (lhs)
! 	      && ! SSA_NAME_PTR_INFO (sprime))
! 	    {
! 	      duplicate_ssa_name_ptr_info (sprime,
! 					   SSA_NAME_PTR_INFO (lhs));
! 	      if (b != sprime_b)
! 		reset_flow_sensitive_info (sprime);
! 	    }
! 	  else if (INTEGRAL_TYPE_P (TREE_TYPE (lhs))
! 		   && SSA_NAME_RANGE_INFO (lhs)
! 		   && ! SSA_NAME_RANGE_INFO (sprime)
! 		   && b == sprime_b)
! 	    duplicate_ssa_name_range_info (sprime, lhs);
! 	}
  
        /* Inhibit the use of an inserted PHI on a loop header when
  	 the address of the memory reference is a simple induction
--- 6814,6823 ----
  
        /* If this now constitutes a copy duplicate points-to
  	 and range info appropriately.  This is especially
! 	 important for inserted code.  */
        if (sprime
  	  && TREE_CODE (sprime) == SSA_NAME)
! 	maybe_duplicate_ssa_info_at_copy (lhs, sprime);
  
        /* Inhibit the use of an inserted PHI on a loop header when
  	 the address of the memory reference is a simple induction
*************** eliminate_dom_walker::eliminate_stmt (ba
*** 6958,6963 ****
--- 6984,6991 ----
    if (gimple_assign_single_p (stmt)
        && !gimple_has_volatile_ops (stmt)
        && !is_gimple_reg (gimple_assign_lhs (stmt))
+       && (TREE_CODE (gimple_assign_lhs (stmt)) != VAR_DECL
+ 	  || !DECL_HARD_REGISTER (gimple_assign_lhs (stmt)))
        && (TREE_CODE (gimple_assign_rhs1 (stmt)) == SSA_NAME
  	  || is_gimple_min_invariant (gimple_assign_rhs1 (stmt))))
      {
diff -Nrcpad gcc-13.3.0/gcc/tree-ssa-sink.cc gcc-13.4.0/gcc/tree-ssa-sink.cc
*** gcc-13.3.0/gcc/tree-ssa-sink.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/tree-ssa-sink.cc	Thu Jun  5 16:03:01 2025
*************** along with GCC; see the file COPYING3.
*** 35,40 ****
--- 35,41 ----
  #include "tree-cfg.h"
  #include "cfgloop.h"
  #include "tree-eh.h"
+ #include "tree-dfa.h"
  
  /* TODO:
     1. Sinking store only using scalar promotion (IE without moving the RHS):
*************** sink_common_stores_to_bb (basic_block bb
*** 529,535 ****
  	      gimple *def = SSA_NAME_DEF_STMT (arg);
  	      if (! is_gimple_assign (def)
  		  || stmt_can_throw_internal (cfun, def)
! 		  || (gimple_phi_arg_edge (phi, i)->flags & EDGE_ABNORMAL))
  		{
  		  /* ???  We could handle some cascading with the def being
  		     another PHI.  We'd have to insert multiple PHIs for
--- 530,537 ----
  	      gimple *def = SSA_NAME_DEF_STMT (arg);
  	      if (! is_gimple_assign (def)
  		  || stmt_can_throw_internal (cfun, def)
! 		  || (gimple_phi_arg_edge (phi, i)->flags & EDGE_ABNORMAL)
! 		  || stmt_references_abnormal_ssa_name (def))
  		{
  		  /* ???  We could handle some cascading with the def being
  		     another PHI.  We'd have to insert multiple PHIs for
diff -Nrcpad gcc-13.3.0/gcc/tree-ssa-strlen.cc gcc-13.4.0/gcc/tree-ssa-strlen.cc
*** gcc-13.3.0/gcc/tree-ssa-strlen.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/tree-ssa-strlen.cc	Thu Jun  5 16:03:01 2025
*************** strlen_pass::count_nonzero_bytes_addr (t
*** 4836,4842 ****
        if (maxlen + 1 < nbytes)
  	return false;
  
!       if (nbytes <= minlen)
  	*nulterm = false;
  
        if (nbytes < minlen)
--- 4836,4842 ----
        if (maxlen + 1 < nbytes)
  	return false;
  
!       if (nbytes <= minlen || !si->full_string_p)
  	*nulterm = false;
  
        if (nbytes < minlen)
*************** strlen_pass::count_nonzero_bytes_addr (t
*** 4846,4851 ****
--- 4846,4854 ----
  	    maxlen = nbytes;
  	}
  
+       if (!si->full_string_p)
+ 	maxlen = nbytes;
+ 
        if (minlen < lenrange[0])
  	lenrange[0] = minlen;
        if (lenrange[1] < maxlen)
diff -Nrcpad gcc-13.3.0/gcc/tree-ssa-structalias.cc gcc-13.4.0/gcc/tree-ssa-structalias.cc
*** gcc-13.3.0/gcc/tree-ssa-structalias.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/tree-ssa-structalias.cc	Thu Jun  5 16:03:01 2025
*************** static void
*** 2889,2895 ****
  insert_vi_for_tree (tree t, varinfo_t vi)
  {
    gcc_assert (vi);
!   gcc_assert (!vi_for_tree->put (t, vi));
  }
  
  /* Find the variable info for tree T in VI_FOR_TREE.  If T does not
--- 2889,2896 ----
  insert_vi_for_tree (tree t, varinfo_t vi)
  {
    gcc_assert (vi);
!   bool existed = vi_for_tree->put (t, vi);
!   gcc_assert (!existed);
  }
  
  /* Find the variable info for tree T in VI_FOR_TREE.  If T does not
diff -Nrcpad gcc-13.3.0/gcc/tree-ssa-tail-merge.cc gcc-13.4.0/gcc/tree-ssa-tail-merge.cc
*** gcc-13.3.0/gcc/tree-ssa-tail-merge.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/tree-ssa-tail-merge.cc	Thu Jun  5 16:03:01 2025
*************** stmt_local_def (gimple *stmt)
*** 336,345 ****
--- 336,348 ----
  
    def_bb = gimple_bb (stmt);
  
+   bool any_use = false;
    FOR_EACH_IMM_USE_FAST (use_p, iter, val)
      {
        if (is_gimple_debug (USE_STMT (use_p)))
  	continue;
+ 
+       any_use = true;
        bb = gimple_bb (USE_STMT (use_p));
        if (bb == def_bb)
  	continue;
*************** stmt_local_def (gimple *stmt)
*** 351,356 ****
--- 354,364 ----
        return false;
      }
  
+   /* When there is no use avoid making the stmt live on other paths.
+      This can happen with DCE disabled or not done as seen in PR98845.  */
+   if (!any_use)
+     return false;
+ 
    return true;
  }
  
diff -Nrcpad gcc-13.3.0/gcc/tree-ssa.cc gcc-13.4.0/gcc/tree-ssa.cc
*** gcc-13.3.0/gcc/tree-ssa.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/tree-ssa.cc	Thu Jun  5 16:03:01 2025
*************** maybe_rewrite_mem_ref_base (tree *tp, bi
*** 1529,1535 ****
  	}
        else if (TREE_CODE (TREE_TYPE (sym)) == COMPLEX_TYPE
  	       && useless_type_conversion_p (TREE_TYPE (*tp),
! 					     TREE_TYPE (TREE_TYPE (sym))))
  	{
  	  *tp = build1 (integer_zerop (TREE_OPERAND (*tp, 1))
  			? REALPART_EXPR : IMAGPART_EXPR,
--- 1529,1538 ----
  	}
        else if (TREE_CODE (TREE_TYPE (sym)) == COMPLEX_TYPE
  	       && useless_type_conversion_p (TREE_TYPE (*tp),
! 					     TREE_TYPE (TREE_TYPE (sym)))
! 	       && (integer_zerop (TREE_OPERAND (*tp, 1))
! 		   || tree_int_cst_equal (TREE_OPERAND (*tp, 1),
! 					  TYPE_SIZE_UNIT (TREE_TYPE (*tp)))))
  	{
  	  *tp = build1 (integer_zerop (TREE_OPERAND (*tp, 1))
  			? REALPART_EXPR : IMAGPART_EXPR,
diff -Nrcpad gcc-13.3.0/gcc/tree-ssanames.cc gcc-13.4.0/gcc/tree-ssanames.cc
*** gcc-13.3.0/gcc/tree-ssanames.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/tree-ssanames.cc	Thu Jun  5 16:03:01 2025
*************** duplicate_ssa_name_range_info (tree name
*** 752,757 ****
--- 752,779 ----
      }
  }
  
+ /* For a SSA copy DEST = SRC duplicate SSA info present on DEST to SRC
+    to preserve it in case DEST is eliminated to SRC.  */
+ 
+ void
+ maybe_duplicate_ssa_info_at_copy (tree dest, tree src)
+ {
+   /* While points-to info is flow-insensitive we have to avoid copying
+      info from not executed regions invoking UB to dominating defs.  */
+   if (gimple_bb (SSA_NAME_DEF_STMT (src))
+       != gimple_bb (SSA_NAME_DEF_STMT (dest)))
+     return;
+ 
+   if (POINTER_TYPE_P (TREE_TYPE (dest))
+       && SSA_NAME_PTR_INFO (dest)
+       && ! SSA_NAME_PTR_INFO (src))
+     duplicate_ssa_name_ptr_info (src, SSA_NAME_PTR_INFO (dest));
+   else if (INTEGRAL_TYPE_P (TREE_TYPE (dest))
+ 	   && SSA_NAME_RANGE_INFO (dest)
+ 	   && ! SSA_NAME_RANGE_INFO (src))
+     duplicate_ssa_name_range_info (src, dest);
+ }
+ 
  
  /* Creates a duplicate of a ssa name NAME tobe defined by statement STMT
     in function FN.  */
diff -Nrcpad gcc-13.3.0/gcc/tree-ssanames.h gcc-13.4.0/gcc/tree-ssanames.h
*** gcc-13.3.0/gcc/tree-ssanames.h	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/tree-ssanames.h	Thu Jun  5 16:03:01 2025
*************** extern struct ptr_info_def *get_ptr_info
*** 78,86 ****
  extern void set_ptr_nonnull (tree);
  
  extern tree copy_ssa_name_fn (struct function *, tree, gimple *);
- extern void duplicate_ssa_name_ptr_info (tree, struct ptr_info_def *);
  extern tree duplicate_ssa_name_fn (struct function *, tree, gimple *);
  extern void duplicate_ssa_name_range_info (tree dest, tree src);
  extern void reset_flow_sensitive_info (tree);
  extern void reset_flow_sensitive_info_in_bb (basic_block);
  extern void release_defs (gimple *);
--- 78,87 ----
  extern void set_ptr_nonnull (tree);
  
  extern tree copy_ssa_name_fn (struct function *, tree, gimple *);
  extern tree duplicate_ssa_name_fn (struct function *, tree, gimple *);
+ extern void duplicate_ssa_name_ptr_info (tree, struct ptr_info_def *);
  extern void duplicate_ssa_name_range_info (tree dest, tree src);
+ extern void maybe_duplicate_ssa_info_at_copy (tree dest, tree src);
  extern void reset_flow_sensitive_info (tree);
  extern void reset_flow_sensitive_info_in_bb (basic_block);
  extern void release_defs (gimple *);
diff -Nrcpad gcc-13.3.0/gcc/tree-vect-data-refs.cc gcc-13.4.0/gcc/tree-vect-data-refs.cc
*** gcc-13.3.0/gcc/tree-vect-data-refs.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/tree-vect-data-refs.cc	Thu Jun  5 16:03:01 2025
*************** You should have received a copy of the G
*** 19,24 ****
--- 19,25 ----
  along with GCC; see the file COPYING3.  If not see
  <http://www.gnu.org/licenses/>.  */
  
+ #define INCLUDE_ALGORITHM
  #include "config.h"
  #include "system.h"
  #include "coretypes.h"
*************** vect_analyze_data_ref_accesses (vec_info
*** 3255,3266 ****
  	  DR_GROUP_NEXT_ELEMENT (lastinfo) = stmtinfo_b;
  	  lastinfo = stmtinfo_b;
  
! 	  STMT_VINFO_SLP_VECT_ONLY (stmtinfo_a)
! 	    = !can_group_stmts_p (stmtinfo_a, stmtinfo_b, false);
  
! 	  if (dump_enabled_p () && STMT_VINFO_SLP_VECT_ONLY (stmtinfo_a))
! 	    dump_printf_loc (MSG_NOTE, vect_location,
! 			     "Load suitable for SLP vectorization only.\n");
  
  	  if (init_b == init_prev
  	      && !to_fixup.add (DR_GROUP_FIRST_ELEMENT (stmtinfo_a))
--- 3256,3270 ----
  	  DR_GROUP_NEXT_ELEMENT (lastinfo) = stmtinfo_b;
  	  lastinfo = stmtinfo_b;
  
! 	  if (! STMT_VINFO_SLP_VECT_ONLY (stmtinfo_a))
! 	    {
! 	      STMT_VINFO_SLP_VECT_ONLY (stmtinfo_a)
! 		= !can_group_stmts_p (stmtinfo_a, stmtinfo_b, false);
  
! 	      if (dump_enabled_p () && STMT_VINFO_SLP_VECT_ONLY (stmtinfo_a))
! 		dump_printf_loc (MSG_NOTE, vect_location,
! 				 "Load suitable for SLP vectorization only.\n");
! 	    }
  
  	  if (init_b == init_prev
  	      && !to_fixup.add (DR_GROUP_FIRST_ELEMENT (stmtinfo_a))
*************** vect_analyze_data_ref_accesses (vec_info
*** 3304,3310 ****
  	    {
  	      DR_GROUP_NEXT_ELEMENT (g) = DR_GROUP_NEXT_ELEMENT (next);
  	      if (!newgroup)
! 		newgroup = next;
  	      else
  		DR_GROUP_NEXT_ELEMENT (ng) = next;
  	      ng = next;
--- 3308,3318 ----
  	    {
  	      DR_GROUP_NEXT_ELEMENT (g) = DR_GROUP_NEXT_ELEMENT (next);
  	      if (!newgroup)
! 		{
! 		  newgroup = next;
! 		  STMT_VINFO_SLP_VECT_ONLY (newgroup)
! 		    = STMT_VINFO_SLP_VECT_ONLY (grp);
! 		}
  	      else
  		DR_GROUP_NEXT_ELEMENT (ng) = next;
  	      ng = next;
*************** vect_prune_runtime_alias_test_list (loop
*** 3655,3661 ****
        poly_uint64 lower_bound;
        tree segment_length_a, segment_length_b;
        unsigned HOST_WIDE_INT access_size_a, access_size_b;
!       unsigned int align_a, align_b;
  
        /* Ignore the alias if the VF we chose ended up being no greater
  	 than the dependence distance.  */
--- 3663,3669 ----
        poly_uint64 lower_bound;
        tree segment_length_a, segment_length_b;
        unsigned HOST_WIDE_INT access_size_a, access_size_b;
!       unsigned HOST_WIDE_INT align_a, align_b;
  
        /* Ignore the alias if the VF we chose ended up being no greater
  	 than the dependence distance.  */
*************** vect_prune_runtime_alias_test_list (loop
*** 3812,3817 ****
--- 3820,3832 ----
  					   stmt_info_b->stmt);
  	}
  
+       /* dr_with_seg_len requires the alignment to apply to the segment length
+ 	 and access size, not just the start address.  The access size can be
+ 	 smaller than the pointer alignment for grouped accesses and bitfield
+ 	 references; see PR115192 and PR116125 respectively.  */
+       align_a = std::min (align_a, least_bit_hwi (access_size_a));
+       align_b = std::min (align_b, least_bit_hwi (access_size_b));
+ 
        dr_with_seg_len dr_a (dr_info_a->dr, segment_length_a,
  			    access_size_a, align_a);
        dr_with_seg_len dr_b (dr_info_b->dr, segment_length_b,
diff -Nrcpad gcc-13.3.0/gcc/tree-vect-generic.cc gcc-13.4.0/gcc/tree-vect-generic.cc
*** gcc-13.3.0/gcc/tree-vect-generic.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/tree-vect-generic.cc	Thu Jun  5 16:03:01 2025
*************** do_unop (gimple_stmt_iterator *gsi, tree
*** 193,199 ****
  	 tree b ATTRIBUTE_UNUSED, tree bitpos, tree bitsize,
  	 enum tree_code code, tree type ATTRIBUTE_UNUSED)
  {
!   a = tree_vec_extract (gsi, inner_type, a, bitsize, bitpos);
    return gimplify_build1 (gsi, code, inner_type, a);
  }
  
--- 193,207 ----
  	 tree b ATTRIBUTE_UNUSED, tree bitpos, tree bitsize,
  	 enum tree_code code, tree type ATTRIBUTE_UNUSED)
  {
!   tree rhs_type = inner_type;
! 
!   /* For ABSU_EXPR, use the signed type for the rhs if the rhs was signed. */
!   if (code == ABSU_EXPR
!       && ANY_INTEGRAL_TYPE_P (TREE_TYPE (a))
!       && !TYPE_UNSIGNED (TREE_TYPE (a)))
!     rhs_type = signed_type_for (rhs_type);
! 
!   a = tree_vec_extract (gsi, rhs_type, a, bitsize, bitpos);
    return gimplify_build1 (gsi, code, inner_type, a);
  }
  
diff -Nrcpad gcc-13.3.0/gcc/tree-vect-loop.cc gcc-13.4.0/gcc/tree-vect-loop.cc
*** gcc-13.3.0/gcc/tree-vect-loop.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/tree-vect-loop.cc	Thu Jun  5 16:03:01 2025
*************** needs_fold_left_reduction_p (tree type,
*** 3552,3558 ****
  static bool
  check_reduction_path (dump_user_location_t loc, loop_p loop, gphi *phi,
  		      tree loop_arg, code_helper *code,
! 		      vec<std::pair<ssa_op_iter, use_operand_p> > &path)
  {
    auto_bitmap visited;
    tree lookfor = PHI_RESULT (phi);
--- 3552,3559 ----
  static bool
  check_reduction_path (dump_user_location_t loc, loop_p loop, gphi *phi,
  		      tree loop_arg, code_helper *code,
! 		      vec<std::pair<ssa_op_iter, use_operand_p> > &path,
! 		      bool inner_loop_of_double_reduc)
  {
    auto_bitmap visited;
    tree lookfor = PHI_RESULT (phi);
*************** pop:
*** 3682,3688 ****
  	  break;
  	}
        /* Check there's only a single stmt the op is used on.  For the
! 	 not value-changing tail and the last stmt allow out-of-loop uses.
  	 ???  We could relax this and handle arbitrary live stmts by
  	 forcing a scalar epilogue for example.  */
        imm_use_iterator imm_iter;
--- 3683,3690 ----
  	  break;
  	}
        /* Check there's only a single stmt the op is used on.  For the
! 	 not value-changing tail and the last stmt allow out-of-loop uses,
! 	 but not when this is the inner loop of a double reduction.
  	 ???  We could relax this and handle arbitrary live stmts by
  	 forcing a scalar epilogue for example.  */
        imm_use_iterator imm_iter;
*************** pop:
*** 3691,3697 ****
        unsigned cnt = 0;
        FOR_EACH_IMM_USE_STMT (op_use_stmt, imm_iter, op.ops[opi])
  	if (!is_gimple_debug (op_use_stmt)
! 	    && (*code != ERROR_MARK
  		|| flow_bb_inside_loop_p (loop, gimple_bb (op_use_stmt))))
  	  FOR_EACH_IMM_USE_ON_STMT (use_p, imm_iter)
  	    cnt++;
--- 3693,3699 ----
        unsigned cnt = 0;
        FOR_EACH_IMM_USE_STMT (op_use_stmt, imm_iter, op.ops[opi])
  	if (!is_gimple_debug (op_use_stmt)
! 	    && ((*code != ERROR_MARK || inner_loop_of_double_reduc)
  		|| flow_bb_inside_loop_p (loop, gimple_bb (op_use_stmt))))
  	  FOR_EACH_IMM_USE_ON_STMT (use_p, imm_iter)
  	    cnt++;
*************** check_reduction_path (dump_user_location
*** 3710,3716 ****
  {
    auto_vec<std::pair<ssa_op_iter, use_operand_p> > path;
    code_helper code_;
!   return (check_reduction_path (loc, loop, phi, loop_arg, &code_, path)
  	  && code_ == code);
  }
  
--- 3712,3718 ----
  {
    auto_vec<std::pair<ssa_op_iter, use_operand_p> > path;
    code_helper code_;
!   return (check_reduction_path (loc, loop, phi, loop_arg, &code_, path, false)
  	  && code_ == code);
  }
  
*************** vect_is_simple_reduction (loop_vec_info
*** 3914,3920 ****
    auto_vec<std::pair<ssa_op_iter, use_operand_p> > path;
    code_helper code;
    if (check_reduction_path (vect_location, loop, phi, latch_def, &code,
! 			    path))
      {
        STMT_VINFO_REDUC_CODE (phi_info) = code;
        if (code == COND_EXPR && !nested_in_vect_loop)
--- 3916,3922 ----
    auto_vec<std::pair<ssa_op_iter, use_operand_p> > path;
    code_helper code;
    if (check_reduction_path (vect_location, loop, phi, latch_def, &code,
! 			    path, inner_loop_of_double_reduc))
      {
        STMT_VINFO_REDUC_CODE (phi_info) = code;
        if (code == COND_EXPR && !nested_in_vect_loop)
*************** vect_transform_cycle_phi (loop_vec_info
*** 8148,8161 ****
  	  /* And the reduction could be carried out using a different sign.  */
  	  if (!useless_type_conversion_p (vectype_out, TREE_TYPE (def)))
  	    def = gimple_convert (&stmts, vectype_out, def);
! 	  if (loop_vinfo->main_loop_edge)
  	    {
  	      /* While we'd like to insert on the edge this will split
  		 blocks and disturb bookkeeping, we also will eventually
  		 need this on the skip edge.  Rely on sinking to
  		 fixup optimal placement and insert in the pred.  */
! 	      gimple_stmt_iterator gsi
! 		= gsi_last_bb (loop_vinfo->main_loop_edge->src);
  	      /* Insert before a cond that eventually skips the
  		 epilogue.  */
  	      if (!gsi_end_p (gsi) && stmt_ends_bb_p (gsi_stmt (gsi)))
--- 8150,8164 ----
  	  /* And the reduction could be carried out using a different sign.  */
  	  if (!useless_type_conversion_p (vectype_out, TREE_TYPE (def)))
  	    def = gimple_convert (&stmts, vectype_out, def);
! 	  edge e;
! 	  if ((e = loop_vinfo->main_loop_edge)
! 	      || (e = loop_vinfo->skip_this_loop_edge))
  	    {
  	      /* While we'd like to insert on the edge this will split
  		 blocks and disturb bookkeeping, we also will eventually
  		 need this on the skip edge.  Rely on sinking to
  		 fixup optimal placement and insert in the pred.  */
! 	      gimple_stmt_iterator gsi = gsi_last_bb (e->src);
  	      /* Insert before a cond that eventually skips the
  		 epilogue.  */
  	      if (!gsi_end_p (gsi) && stmt_ends_bb_p (gsi_stmt (gsi)))
diff -Nrcpad gcc-13.3.0/gcc/tree-vect-patterns.cc gcc-13.4.0/gcc/tree-vect-patterns.cc
*** gcc-13.3.0/gcc/tree-vect-patterns.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/tree-vect-patterns.cc	Thu Jun  5 16:03:01 2025
*************** vect_truncatable_operation_p (tree_code
*** 5491,5499 ****
--- 5491,5501 ----
  {
    switch (code)
      {
+     case NEGATE_EXPR:
      case PLUS_EXPR:
      case MINUS_EXPR:
      case MULT_EXPR:
+     case BIT_NOT_EXPR:
      case BIT_AND_EXPR:
      case BIT_IOR_EXPR:
      case BIT_XOR_EXPR:
*************** vect_determine_precisions_from_range (st
*** 5652,5689 ****
    unsigned int nops = gimple_num_ops (stmt);
  
    if (!vect_truncatable_operation_p (code))
!     /* Check that all relevant input operands are compatible, and update
!        [MIN_VALUE, MAX_VALUE] to include their ranges.  */
!     for (unsigned int i = 1; i < nops; ++i)
!       {
! 	tree op = gimple_op (stmt, i);
! 	if (TREE_CODE (op) == INTEGER_CST)
! 	  {
! 	    /* Don't require the integer to have RHS_TYPE (which it might
! 	       not for things like shift amounts, etc.), but do require it
! 	       to fit the type.  */
! 	    if (!int_fits_type_p (op, type))
! 	      return;
! 
! 	    min_value = wi::min (min_value, wi::to_wide (op, precision), sign);
! 	    max_value = wi::max (max_value, wi::to_wide (op, precision), sign);
! 	  }
! 	else if (TREE_CODE (op) == SSA_NAME)
! 	  {
! 	    /* Ignore codes that don't take uniform arguments.  */
! 	    if (!types_compatible_p (TREE_TYPE (op), type))
! 	      return;
  
! 	    wide_int op_min_value, op_max_value;
! 	    if (!vect_get_range_info (op, &op_min_value, &op_max_value))
! 	      return;
  
! 	    min_value = wi::min (min_value, op_min_value, sign);
! 	    max_value = wi::max (max_value, op_max_value, sign);
! 	  }
! 	else
  	  return;
!       }
  
    /* Try to switch signed types for unsigned types if we can.
       This is better for two reasons.  First, unsigned ops tend
--- 5654,5738 ----
    unsigned int nops = gimple_num_ops (stmt);
  
    if (!vect_truncatable_operation_p (code))
!     {
!       /* Handle operations that can be computed in type T if all inputs
! 	 and outputs can be represented in type T.  Also handle left and
! 	 right shifts, where (in addition) the maximum shift amount must
! 	 be less than the number of bits in T.  */
!       bool is_shift;
!       switch (code)
! 	{
! 	case LSHIFT_EXPR:
! 	case RSHIFT_EXPR:
! 	  is_shift = true;
! 	  break;
  
! 	case ABS_EXPR:
! 	case MIN_EXPR:
! 	case MAX_EXPR:
! 	case TRUNC_DIV_EXPR:
! 	case CEIL_DIV_EXPR:
! 	case FLOOR_DIV_EXPR:
! 	case ROUND_DIV_EXPR:
! 	case EXACT_DIV_EXPR:
! 	  /* Modulus is excluded because it is typically calculated by doing
! 	     a division, for which minimum signed / -1 isn't representable in
! 	     the original signed type.  We could take the division range into
! 	     account instead, if handling modulus ever becomes important.  */
! 	  is_shift = false;
! 	  break;
  
! 	default:
  	  return;
! 	}
!       for (unsigned int i = 1; i < nops; ++i)
! 	{
! 	  tree op = gimple_op (stmt, i);
! 	  wide_int op_min_value, op_max_value;
! 	  if (TREE_CODE (op) == INTEGER_CST)
! 	    {
! 	      unsigned int op_precision = TYPE_PRECISION (TREE_TYPE (op));
! 	      op_min_value = op_max_value = wi::to_wide (op, op_precision);
! 	    }
! 	  else if (TREE_CODE (op) == SSA_NAME)
! 	    {
! 	      if (!vect_get_range_info (op, &op_min_value, &op_max_value))
! 		return;
! 	    }
! 	  else
! 	    return;
! 
! 	  if (is_shift && i == 2)
! 	    {
! 	      /* There needs to be one more bit than the maximum shift amount.
! 
! 		 If the maximum shift amount is already 1 less than PRECISION
! 		 then we can't narrow the shift further.  Dealing with that
! 		 case first ensures that we can safely use an unsigned range
! 		 below.
! 
! 		 op_min_value isn't relevant, since shifts by negative amounts
! 		 are UB.  */
! 	      if (wi::geu_p (op_max_value, precision - 1))
! 		return;
! 	      unsigned int min_bits = op_max_value.to_uhwi () + 1;
! 
! 	      /* As explained below, we can convert a signed shift into an
! 		 unsigned shift if the sign bit is always clear.  At this
! 		 point we've already processed the ranges of the output and
! 		 the first input.  */
! 	      auto op_sign = sign;
! 	      if (sign == SIGNED && !wi::neg_p (min_value))
! 		op_sign = UNSIGNED;
! 	      op_min_value = wide_int::from (wi::min_value (min_bits, op_sign),
! 					     precision, op_sign);
! 	      op_max_value = wide_int::from (wi::max_value (min_bits, op_sign),
! 					     precision, op_sign);
! 	    }
! 	  min_value = wi::min (min_value, op_min_value, sign);
! 	  max_value = wi::max (max_value, op_max_value, sign);
! 	}
!     }
  
    /* Try to switch signed types for unsigned types if we can.
       This is better for two reasons.  First, unsigned ops tend
diff -Nrcpad gcc-13.3.0/gcc/tree-vect-slp.cc gcc-13.4.0/gcc/tree-vect-slp.cc
*** gcc-13.3.0/gcc/tree-vect-slp.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/tree-vect-slp.cc	Thu Jun  5 16:03:02 2025
*************** vect_build_slp_tree_2 (vec_info *vinfo,
*** 1897,1902 ****
--- 1897,1905 ----
    else if (is_a <loop_vec_info> (vinfo)
  	   /* ???  We don't handle !vect_internal_def defs below.  */
  	   && STMT_VINFO_DEF_TYPE (stmt_info) == vect_internal_def
+ 	   /* ???  Do not associate a reduction, this will wreck REDUC_IDX
+ 	      mapping as long as that exists on the stmt_info level.  */
+ 	   && STMT_VINFO_REDUC_IDX (stmt_info) == -1
  	   && is_gimple_assign (stmt_info->stmt)
  	   && (associative_tree_code (gimple_assign_rhs_code (stmt_info->stmt))
  	       || gimple_assign_rhs_code (stmt_info->stmt) == MINUS_EXPR)
*************** vect_slp_function (function *fun)
*** 7711,7716 ****
--- 7714,7730 ----
  			     bbs[0]->loop_father->num, bb->index);
  	  split = true;
  	}
+       else if (!bbs.is_empty ()
+ 	       && bb->loop_father->header == bb
+ 	       && bb->loop_father->dont_vectorize)
+ 	{
+ 	  if (dump_enabled_p ())
+ 	    dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
+ 			     "splitting region at dont-vectorize loop %d "
+ 			     "entry at bb%d\n",
+ 			     bb->loop_father->num, bb->index);
+ 	  split = true;
+ 	}
  
        if (split && !bbs.is_empty ())
  	{
*************** vect_slp_function (function *fun)
*** 7718,7736 ****
  	  bbs.truncate (0);
  	}
  
-       /* We need to be able to insert at the head of the region which
- 	 we cannot for region starting with a returns-twice call.  */
        if (bbs.is_empty ())
! 	if (gcall *first = safe_dyn_cast <gcall *> (first_stmt (bb)))
! 	  if (gimple_call_flags (first) & ECF_RETURNS_TWICE)
! 	    {
! 	      if (dump_enabled_p ())
! 		dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
! 				 "skipping bb%d as start of region as it "
! 				 "starts with returns-twice call\n",
! 				 bb->index);
! 	      continue;
! 	    }
  
        bbs.safe_push (bb);
  
--- 7732,7756 ----
  	  bbs.truncate (0);
  	}
  
        if (bbs.is_empty ())
! 	{
! 	  /* We need to be able to insert at the head of the region which
! 	     we cannot for region starting with a returns-twice call.  */
! 	  if (gcall *first = safe_dyn_cast <gcall *> (first_stmt (bb)))
! 	    if (gimple_call_flags (first) & ECF_RETURNS_TWICE)
! 	      {
! 		if (dump_enabled_p ())
! 		  dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
! 				   "skipping bb%d as start of region as it "
! 				   "starts with returns-twice call\n",
! 				   bb->index);
! 		continue;
! 	      }
! 	  /* If the loop this BB belongs to is marked as not to be vectorized
! 	     honor that also for BB vectorization.  */
! 	  if (bb->loop_father->dont_vectorize)
! 	    continue;
! 	}
  
        bbs.safe_push (bb);
  
diff -Nrcpad gcc-13.3.0/gcc/tree-vect-stmts.cc gcc-13.4.0/gcc/tree-vect-stmts.cc
*** gcc-13.3.0/gcc/tree-vect-stmts.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/tree-vect-stmts.cc	Thu Jun  5 16:03:02 2025
*************** get_load_store_type (vec_info  *vinfo, s
*** 2513,2518 ****
--- 2513,2519 ----
  	  else if (!TYPE_VECTOR_SUBPARTS (vectype).is_constant ()
  		   || !TYPE_VECTOR_SUBPARTS
  			 (gs_info->offset_vectype).is_constant ()
+ 		   || VECTOR_BOOLEAN_TYPE_P (gs_info->offset_vectype)
  		   || !constant_multiple_p (TYPE_VECTOR_SUBPARTS
  					      (gs_info->offset_vectype),
  					    TYPE_VECTOR_SUBPARTS (vectype)))
*************** vectorizable_assignment (vec_info *vinfo
*** 5585,5598 ****
    if (!vectype_in)
      vectype_in = get_vectype_for_scalar_type (vinfo, TREE_TYPE (op), slp_node);
  
!   /* We can handle NOP_EXPR conversions that do not change the number
!      of elements or the vector size.  */
!   if ((CONVERT_EXPR_CODE_P (code)
!        || code == VIEW_CONVERT_EXPR)
!       && (!vectype_in
! 	  || maybe_ne (TYPE_VECTOR_SUBPARTS (vectype_in), nunits)
! 	  || maybe_ne (GET_MODE_SIZE (TYPE_MODE (vectype)),
! 		       GET_MODE_SIZE (TYPE_MODE (vectype_in)))))
      return false;
  
    if (VECTOR_BOOLEAN_TYPE_P (vectype) != VECTOR_BOOLEAN_TYPE_P (vectype_in))
--- 5586,5602 ----
    if (!vectype_in)
      vectype_in = get_vectype_for_scalar_type (vinfo, TREE_TYPE (op), slp_node);
  
!   /* We can handle VIEW_CONVERT conversions that do not change the number
!      of elements or the vector size or other conversions when the component
!      types are nop-convertible.  */
!   if (!vectype_in
!       || maybe_ne (TYPE_VECTOR_SUBPARTS (vectype_in), nunits)
!       || (code == VIEW_CONVERT_EXPR
! 	  && maybe_ne (GET_MODE_SIZE (TYPE_MODE (vectype)),
! 		       GET_MODE_SIZE (TYPE_MODE (vectype_in))))
!       || (CONVERT_EXPR_CODE_P (code)
! 	  && !tree_nop_conversion_p (TREE_TYPE (vectype),
! 				     TREE_TYPE (vectype_in))))
      return false;
  
    if (VECTOR_BOOLEAN_TYPE_P (vectype) != VECTOR_BOOLEAN_TYPE_P (vectype_in))
diff -Nrcpad gcc-13.3.0/gcc/tree-vectorizer.cc gcc-13.4.0/gcc/tree-vectorizer.cc
*** gcc-13.3.0/gcc/tree-vectorizer.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/tree-vectorizer.cc	Thu Jun  5 16:03:02 2025
*************** try_vectorize_loop_1 (hash_table<simduid
*** 1103,1109 ****
  	      if (call && gimple_call_internal_p (call))
  		{
  		  internal_fn ifn = gimple_call_internal_fn (call);
! 		  if (ifn == IFN_MASK_LOAD || ifn == IFN_MASK_STORE
  		      /* Don't keep the if-converted parts when the ifn with
  			 specifc type is not supported by the backend.  */
  		      || (direct_internal_fn_p (ifn)
--- 1103,1111 ----
  	      if (call && gimple_call_internal_p (call))
  		{
  		  internal_fn ifn = gimple_call_internal_fn (call);
! 		  if (ifn == IFN_MASK_LOAD
! 		      || ifn == IFN_MASK_STORE
! 		      || ifn == IFN_MASK_CALL
  		      /* Don't keep the if-converted parts when the ifn with
  			 specifc type is not supported by the backend.  */
  		      || (direct_internal_fn_p (ifn)
diff -Nrcpad gcc-13.3.0/gcc/tree-vrp.cc gcc-13.4.0/gcc/tree-vrp.cc
*** gcc-13.3.0/gcc/tree-vrp.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/tree-vrp.cc	Thu Jun  5 16:03:02 2025
*************** public:
*** 1196,1263 ****
    int my_pass;
  }; // class pass_vrp
  
- const pass_data pass_data_assumptions =
- {
-   GIMPLE_PASS, /* type */
-   "assumptions", /* name */
-   OPTGROUP_NONE, /* optinfo_flags */
-   TV_TREE_ASSUMPTIONS, /* tv_id */
-   PROP_ssa, /* properties_required */
-   PROP_assumptions_done, /* properties_provided */
-   0, /* properties_destroyed */
-   0, /* todo_flags_start */
-   0, /* todo_flags_end */
- };
- 
- class pass_assumptions : public gimple_opt_pass
- {
- public:
-   pass_assumptions (gcc::context *ctxt)
-     : gimple_opt_pass (pass_data_assumptions, ctxt)
-   {}
- 
-   /* opt_pass methods: */
-   bool gate (function *fun) final override { return fun->assume_function; }
-   unsigned int execute (function *) final override
-     {
-       assume_query query;
-       if (dump_file)
- 	fprintf (dump_file, "Assumptions :\n--------------\n");
- 
-       for (tree arg = DECL_ARGUMENTS (cfun->decl); arg; arg = DECL_CHAIN (arg))
- 	{
- 	  tree name = ssa_default_def (cfun, arg);
- 	  if (!name || !gimple_range_ssa_p (name))
- 	    continue;
- 	  tree type = TREE_TYPE (name);
- 	  if (!Value_Range::supports_type_p (type))
- 	    continue;
- 	  Value_Range assume_range (type);
- 	  if (query.assume_range_p (assume_range, name))
- 	    {
- 	      // Set the global range of NAME to anything calculated.
- 	      set_range_info (name, assume_range);
- 	      if (dump_file)
- 		{
- 		  print_generic_expr (dump_file, name, TDF_SLIM);
- 		  fprintf (dump_file, " -> ");
- 		  assume_range.dump (dump_file);
- 		  fputc ('\n', dump_file);
- 		}
- 	    }
- 	}
-       if (dump_file)
- 	{
- 	  fputc ('\n', dump_file);
- 	  gimple_dump_cfg (dump_file, dump_flags & ~TDF_DETAILS);
- 	  if (dump_flags & TDF_DETAILS)
- 	    query.dump (dump_file);
- 	}
-       return TODO_discard_function;
-     }
- 
- }; // class pass_assumptions
- 
  } // anon namespace
  
  gimple_opt_pass *
--- 1196,1201 ----
*************** make_pass_early_vrp (gcc::context *ctxt)
*** 1271,1279 ****
  {
    return new pass_vrp (ctxt, pass_data_early_vrp);
  }
- 
- gimple_opt_pass *
- make_pass_assumptions (gcc::context *ctx)
- {
-   return new pass_assumptions (ctx);
- }
--- 1209,1211 ----
diff -Nrcpad gcc-13.3.0/gcc/tree.cc gcc-13.4.0/gcc/tree.cc
*** gcc-13.3.0/gcc/tree.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/tree.cc	Thu Jun  5 16:03:02 2025
*************** skip_simple_arithmetic (tree expr)
*** 3978,3984 ****
  	expr = TREE_OPERAND (expr, 0);
        else if (BINARY_CLASS_P (expr))
  	{
! 	  if (tree_invariant_p (TREE_OPERAND (expr, 1)))
  	    expr = TREE_OPERAND (expr, 0);
  	  else if (tree_invariant_p (TREE_OPERAND (expr, 0)))
  	    expr = TREE_OPERAND (expr, 1);
--- 3978,3996 ----
  	expr = TREE_OPERAND (expr, 0);
        else if (BINARY_CLASS_P (expr))
  	{
! 	  /* Before commutative binary operands are canonicalized,
! 	     it is quite common to have constants in the first operand.
! 	     Check for that common case first so that we don't walk
! 	     large expressions with tree_invariant_p unnecessarily.
! 	     This can still have terrible compile time complexity,
! 	     we should limit the depth of the tree_invariant_p and
! 	     skip_simple_arithmetic recursion.  */
! 	  if ((TREE_CONSTANT (TREE_OPERAND (expr, 0))
! 	       || (TREE_READONLY (TREE_OPERAND (expr, 0))
! 		   && !TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 0))))
! 	      && tree_invariant_p (TREE_OPERAND (expr, 0)))
! 	    expr = TREE_OPERAND (expr, 1);
! 	  else if (tree_invariant_p (TREE_OPERAND (expr, 1)))
  	    expr = TREE_OPERAND (expr, 0);
  	  else if (tree_invariant_p (TREE_OPERAND (expr, 0)))
  	    expr = TREE_OPERAND (expr, 1);
diff -Nrcpad gcc-13.3.0/gcc/ubsan.cc gcc-13.4.0/gcc/ubsan.cc
*** gcc-13.3.0/gcc/ubsan.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/ubsan.cc	Thu Jun  5 16:03:02 2025
*************** instrument_bool_enum_load (gimple_stmt_i
*** 1719,1731 ****
        || TREE_CODE (gimple_assign_lhs (stmt)) != SSA_NAME)
      return;
  
    bool ends_bb = stmt_ends_bb_p (stmt);
    location_t loc = gimple_location (stmt);
    tree lhs = gimple_assign_lhs (stmt);
    tree ptype = build_pointer_type (TREE_TYPE (rhs));
    tree atype = reference_alias_ptr_type (rhs);
    gimple *g = gimple_build_assign (make_ssa_name (ptype),
! 				  build_fold_addr_expr (rhs));
    gimple_set_location (g, loc);
    gsi_insert_before (gsi, g, GSI_SAME_STMT);
    tree mem = build2 (MEM_REF, utype, gimple_assign_lhs (g),
--- 1719,1735 ----
        || TREE_CODE (gimple_assign_lhs (stmt)) != SSA_NAME)
      return;
  
+   addr_space_t as = TYPE_ADDR_SPACE (TREE_TYPE (rhs));
+   if (as != TYPE_ADDR_SPACE (utype))
+     utype = build_qualified_type (utype, TYPE_QUALS (utype)
+ 					 | ENCODE_QUAL_ADDR_SPACE (as));
    bool ends_bb = stmt_ends_bb_p (stmt);
    location_t loc = gimple_location (stmt);
    tree lhs = gimple_assign_lhs (stmt);
    tree ptype = build_pointer_type (TREE_TYPE (rhs));
    tree atype = reference_alias_ptr_type (rhs);
    gimple *g = gimple_build_assign (make_ssa_name (ptype),
! 				   build_fold_addr_expr (rhs));
    gimple_set_location (g, loc);
    gsi_insert_before (gsi, g, GSI_SAME_STMT);
    tree mem = build2 (MEM_REF, utype, gimple_assign_lhs (g),
diff -Nrcpad gcc-13.3.0/gcc/value-range.cc gcc-13.4.0/gcc/value-range.cc
*** gcc-13.3.0/gcc/value-range.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/value-range.cc	Thu Jun  5 16:03:02 2025
*************** irange::invert ()
*** 2833,2846 ****
    wide_int type_min = wi::min_value (prec, sign);
    wide_int type_max = wi::max_value (prec, sign);
    m_nonzero_mask = NULL;
-   if (m_num_ranges == m_max_ranges
-       && lower_bound () != type_min
-       && upper_bound () != type_max)
-     {
-       m_base[1] = wide_int_to_tree (ttype, type_max);
-       m_num_ranges = 1;
-       return;
-     }
  
    // At this point, we need one extra sub-range to represent the
    // inverse.
--- 2833,2838 ----
diff -Nrcpad gcc-13.3.0/gcc/value-range.h gcc-13.4.0/gcc/value-range.h
*** gcc-13.3.0/gcc/value-range.h	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/value-range.h	Thu Jun  5 16:03:02 2025
*************** inline
*** 504,510 ****
  int_range<N, RESIZABLE>::~int_range ()
  {
    if (RESIZABLE && m_base != m_ranges)
!     delete m_base;
  }
  
  // This is an "infinite" precision irange for use in temporary
--- 504,510 ----
  int_range<N, RESIZABLE>::~int_range ()
  {
    if (RESIZABLE && m_base != m_ranges)
!     delete[] m_base;
  }
  
  // This is an "infinite" precision irange for use in temporary
diff -Nrcpad gcc-13.3.0/gcc/varasm.cc gcc-13.4.0/gcc/varasm.cc
*** gcc-13.3.0/gcc/varasm.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gcc/varasm.cc	Thu Jun  5 16:03:02 2025
*************** decl_binds_to_current_def_p (const_tree
*** 7632,7637 ****
--- 7632,7639 ----
       for all other declaration types.  */
    if (DECL_WEAK (decl))
      return false;
+   if (DECL_COMDAT_GROUP (decl))
+     return false;
    if (DECL_COMMON (decl)
        && (DECL_INITIAL (decl) == NULL
  	  || (!in_lto_p && DECL_INITIAL (decl) == error_mark_node)))
diff -Nrcpad gcc-13.3.0/gnattools/ChangeLog gcc-13.4.0/gnattools/ChangeLog
*** gcc-13.3.0/gnattools/ChangeLog	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gnattools/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/gotools/ChangeLog gcc-13.4.0/gotools/ChangeLog
*** gcc-13.3.0/gotools/ChangeLog	Tue May 21 07:47:41 2024
--- gcc-13.4.0/gotools/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/include/ChangeLog gcc-13.4.0/include/ChangeLog
*** gcc-13.3.0/include/ChangeLog	Tue May 21 07:47:41 2024
--- gcc-13.4.0/include/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/intl/ChangeLog gcc-13.4.0/intl/ChangeLog
*** gcc-13.3.0/intl/ChangeLog	Tue May 21 07:47:41 2024
--- gcc-13.4.0/intl/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/libada/ChangeLog gcc-13.4.0/libada/ChangeLog
*** gcc-13.3.0/libada/ChangeLog	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libada/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/libatomic/ChangeLog gcc-13.4.0/libatomic/ChangeLog
*** gcc-13.3.0/libatomic/ChangeLog	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libatomic/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,33 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-04-16  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR libgcc/101075
+ 	PR libgcc/119796
+ 	* config/mingw/lock.c (libat_lock_n, libat_unlock_n): Start with
+ 	computing how many locks will be needed and take into account
+ 	((uintptr_t)ptr % WATCH_SIZE).  If some locks from the end of the
+ 	locks array and others from the start of it will be needed, first
+ 	lock the ones from the start followed by ones from the end.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-04-16  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR libgcc/101075
+ 	PR libgcc/119796
+ 	* config/posix/lock.c (libat_lock_n, libat_unlock_n): Start with
+ 	computing how many locks will be needed and take into account
+ 	((uintptr_t)ptr % WATCH_SIZE).  If some locks from the end of the
+ 	locks array and others from the start of it will be needed, first
+ 	lock the ones from the start followed by ones from the end.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/libatomic/config/mingw/lock.c gcc-13.4.0/libatomic/config/mingw/lock.c
*** gcc-13.3.0/libatomic/config/mingw/lock.c	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libatomic/config/mingw/lock.c	Thu Jun  5 16:03:02 2025
*************** libat_lock_n (void *ptr, size_t n)
*** 87,107 ****
  {
    uintptr_t h = addr_hash (ptr);
    size_t i = 0;
  
    /* Don't lock more than all the locks we have.  */
!   if (n > PAGE_SIZE)
!     n = PAGE_SIZE;
  
!   do
      {
        if (!locks[h].mutex)
! 	locks[h].mutex = CreateMutex  (NULL, FALSE, NULL);
!       WaitForSingleObject (locks[h].mutex, INFINITE);
!       if (++h == NLOCKS)
! 	h = 0;
!       i += WATCH_SIZE;
      }
-   while (i < n);
  }
  
  void
--- 87,116 ----
  {
    uintptr_t h = addr_hash (ptr);
    size_t i = 0;
+   size_t nlocks
+     = (n + ((uintptr_t)ptr % WATCH_SIZE) + WATCH_SIZE - 1) / WATCH_SIZE;
  
    /* Don't lock more than all the locks we have.  */
!   if (nlocks > NLOCKS)
!     nlocks = NLOCKS;
  
!   if (__builtin_expect (h + nlocks > NLOCKS, 0))
!     {
!       size_t j = h + nlocks - NLOCKS;
!       for (; i < j; ++i)
! 	{
! 	  if (!locks[i].mutex)
! 	    locks[i].mutex = CreateMutex (NULL, FALSE, NULL);
! 	  WaitForSingleObject (locks[i].mutex, INFINITE);
! 	}
!     }
! 
!   for (; i < nlocks; ++i)
      {
        if (!locks[h].mutex)
! 	locks[h].mutex = CreateMutex (NULL, FALSE, NULL);
!       WaitForSingleObject (locks[h++].mutex, INFINITE);
      }
  }
  
  void
*************** libat_unlock_n (void *ptr, size_t n)
*** 109,125 ****
  {
    uintptr_t h = addr_hash (ptr);
    size_t i = 0;
  
!   if (n > PAGE_SIZE)
!     n = PAGE_SIZE;
  
!   do
      {
!       if (locks[h].mutex)
! 	ReleaseMutex (locks[h].mutex);
!       if (++h == NLOCKS)
! 	h = 0;
!       i += WATCH_SIZE;
      }
!   while (i < n);
  }
--- 118,139 ----
  {
    uintptr_t h = addr_hash (ptr);
    size_t i = 0;
+   size_t nlocks
+     = (n + ((uintptr_t)ptr % WATCH_SIZE) + WATCH_SIZE - 1) / WATCH_SIZE;
  
!   /* Don't lock more than all the locks we have.  */
!   if (nlocks > NLOCKS)
!     nlocks = NLOCKS;
  
!   if (__builtin_expect (h + nlocks > NLOCKS, 0))
      {
!       size_t j = h + nlocks - NLOCKS;
!       for (; i < j; ++i)
! 	if (locks[i].mutex)
! 	  ReleaseMutex (locks[i].mutex);
      }
! 
!   for (; i < nlocks; ++i, ++h)
!     if (locks[h].mutex)
!       ReleaseMutex (locks[h].mutex);
  }
diff -Nrcpad gcc-13.3.0/libatomic/config/posix/lock.c gcc-13.4.0/libatomic/config/posix/lock.c
*** gcc-13.3.0/libatomic/config/posix/lock.c	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libatomic/config/posix/lock.c	Thu Jun  5 16:03:02 2025
*************** libat_lock_n (void *ptr, size_t n)
*** 81,99 ****
  {
    uintptr_t h = addr_hash (ptr);
    size_t i = 0;
  
    /* Don't lock more than all the locks we have.  */
!   if (n > PAGE_SIZE)
!     n = PAGE_SIZE;
  
!   do
      {
!       pthread_mutex_lock (&locks[h].mutex);
!       if (++h == NLOCKS)
! 	h = 0;
!       i += WATCH_SIZE;
      }
!   while (i < n);
  }
  
  void
--- 81,102 ----
  {
    uintptr_t h = addr_hash (ptr);
    size_t i = 0;
+   size_t nlocks
+     = (n + ((uintptr_t)ptr % WATCH_SIZE) + WATCH_SIZE - 1) / WATCH_SIZE;
  
    /* Don't lock more than all the locks we have.  */
!   if (nlocks > NLOCKS)
!     nlocks = NLOCKS;
  
!   if (__builtin_expect (h + nlocks > NLOCKS, 0))
      {
!       size_t j = h + nlocks - NLOCKS;
!       for (; i < j; ++i)
! 	pthread_mutex_lock (&locks[i].mutex);
      }
! 
!   for (; i < nlocks; ++i)
!     pthread_mutex_lock (&locks[h++].mutex);
  }
  
  void
*************** libat_unlock_n (void *ptr, size_t n)
*** 101,116 ****
  {
    uintptr_t h = addr_hash (ptr);
    size_t i = 0;
  
!   if (n > PAGE_SIZE)
!     n = PAGE_SIZE;
  
!   do
      {
!       pthread_mutex_unlock (&locks[h].mutex);
!       if (++h == NLOCKS)
! 	h = 0;
!       i += WATCH_SIZE;
      }
!   while (i < n);
  }
--- 104,123 ----
  {
    uintptr_t h = addr_hash (ptr);
    size_t i = 0;
+   size_t nlocks
+     = (n + ((uintptr_t)ptr % WATCH_SIZE) + WATCH_SIZE - 1) / WATCH_SIZE;
  
!   /* Don't lock more than all the locks we have.  */
!   if (nlocks > NLOCKS)
!     nlocks = NLOCKS;
  
!   if (__builtin_expect (h + nlocks > NLOCKS, 0))
      {
!       size_t j = h + nlocks - NLOCKS;
!       for (; i < j; ++i)
! 	pthread_mutex_unlock (&locks[i].mutex);
      }
! 
!   for (; i < nlocks; ++i)
!     pthread_mutex_unlock (&locks[h++].mutex);
  }
diff -Nrcpad gcc-13.3.0/libbacktrace/ChangeLog gcc-13.4.0/libbacktrace/ChangeLog
*** gcc-13.3.0/libbacktrace/ChangeLog	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libbacktrace/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/libcc1/ChangeLog gcc-13.4.0/libcc1/ChangeLog
*** gcc-13.3.0/libcc1/ChangeLog	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libcc1/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/libcody/ChangeLog gcc-13.4.0/libcody/ChangeLog
*** gcc-13.3.0/libcody/ChangeLog	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libcody/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/libcpp/ChangeLog gcc-13.4.0/libcpp/ChangeLog
*** gcc-13.3.0/libcpp/ChangeLog	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libcpp/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,13 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
+ 2024-11-25  Lewis Hyatt  <lhyatt@gmail.com>
+ 
+ 	PR preprocessor/117118
+ 	* lex.cc (lex_raw_string): Treat an unterminated raw string the same
+ 	way for a deferred pragma as is done for other directives.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/libcpp/lex.cc gcc-13.4.0/libcpp/lex.cc
*** gcc-13.3.0/libcpp/lex.cc	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libcpp/lex.cc	Thu Jun  5 16:03:02 2025
*************** lex_raw_string (cpp_reader *pfile, cpp_t
*** 2704,2710 ****
  	{
  	  pos--;
  	  pfile->buffer->cur = pos;
! 	  if ((pfile->state.in_directive || pfile->state.parsing_args)
  	      && pfile->buffer->next_line >= pfile->buffer->rlimit)
  	    {
  	      cpp_error_with_line (pfile, CPP_DL_ERROR, token->src_loc, 0,
--- 2704,2711 ----
  	{
  	  pos--;
  	  pfile->buffer->cur = pos;
! 	  if ((pfile->state.in_directive || pfile->state.parsing_args
! 	       || pfile->state.in_deferred_pragma)
  	      && pfile->buffer->next_line >= pfile->buffer->rlimit)
  	    {
  	      cpp_error_with_line (pfile, CPP_DL_ERROR, token->src_loc, 0,
diff -Nrcpad gcc-13.3.0/libcpp/po/ChangeLog gcc-13.4.0/libcpp/po/ChangeLog
*** gcc-13.3.0/libcpp/po/ChangeLog	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libcpp/po/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/libdecnumber/ChangeLog gcc-13.4.0/libdecnumber/ChangeLog
*** gcc-13.3.0/libdecnumber/ChangeLog	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libdecnumber/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/libffi/ChangeLog gcc-13.4.0/libffi/ChangeLog
*** gcc-13.3.0/libffi/ChangeLog	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libffi/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/libffi/doc/libffi.info gcc-13.4.0/libffi/doc/libffi.info
*** gcc-13.3.0/libffi/doc/libffi.info	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libffi/doc/libffi.info	Thu Jun  5 16:30:35 2025
***************
*** 0 ****
--- 1,1062 ----
+ This is libffi.info, produced by makeinfo version 6.8 from libffi.texi.
+ 
+ This manual is for libffi, a portable foreign function interface
+ library.
+ 
+    Copyright (C) 2008-2019, 2021 Anthony Green and Red Hat, Inc.
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+ 
+    The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+ 
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ 
+ INFO-DIR-SECTION Development
+ START-INFO-DIR-ENTRY
+ * libffi: (libffi).             Portable foreign function interface library.
+ END-INFO-DIR-ENTRY
+ 
+ 
+ File: libffi.info,  Node: Top,  Next: Introduction,  Up: (dir)
+ 
+ libffi
+ ******
+ 
+ This manual is for libffi, a portable foreign function interface
+ library.
+ 
+    Copyright (C) 2008-2019, 2021 Anthony Green and Red Hat, Inc.
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+ 
+    The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+ 
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ 
+ * Menu:
+ 
+ * Introduction::                What is libffi?
+ * Using libffi::                How to use libffi.
+ * Memory Usage::                Where memory for closures comes from.
+ * Missing Features::            Things libffi can't do.
+ * Index::                       Index.
+ 
+ 
+ File: libffi.info,  Node: Introduction,  Next: Using libffi,  Prev: Top,  Up: Top
+ 
+ 1 What is libffi?
+ *****************
+ 
+ Compilers for high level languages generate code that follow certain
+ conventions.  These conventions are necessary, in part, for separate
+ compilation to work.  One such convention is the "calling convention".
+ The calling convention is a set of assumptions made by the compiler
+ about where function arguments will be found on entry to a function.  A
+ calling convention also specifies where the return value for a function
+ is found.  The calling convention is also sometimes called the "ABI" or
+ "Application Binary Interface".
+ 
+    Some programs may not know at the time of compilation what arguments
+ are to be passed to a function.  For instance, an interpreter may be
+ told at run-time about the number and types of arguments used to call a
+ given function.  'Libffi' can be used in such programs to provide a
+ bridge from the interpreter program to compiled code.
+ 
+    The 'libffi' library provides a portable, high level programming
+ interface to various calling conventions.  This allows a programmer to
+ call any function specified by a call interface description at run time.
+ 
+    FFI stands for Foreign Function Interface.  A foreign function
+ interface is the popular name for the interface that allows code written
+ in one language to call code written in another language.  The 'libffi'
+ library really only provides the lowest, machine dependent layer of a
+ fully featured foreign function interface.  A layer must exist above
+ 'libffi' that handles type conversions for values passed between the two
+ languages.
+ 
+ 
+ File: libffi.info,  Node: Using libffi,  Next: Memory Usage,  Prev: Introduction,  Up: Top
+ 
+ 2 Using libffi
+ **************
+ 
+ * Menu:
+ 
+ * The Basics::                  The basic libffi API.
+ * Simple Example::              A simple example.
+ * Types::                       libffi type descriptions.
+ * Multiple ABIs::               Different passing styles on one platform.
+ * The Closure API::             Writing a generic function.
+ * Closure Example::             A closure example.
+ * Thread Safety::               Thread safety.
+ 
+ 
+ File: libffi.info,  Node: The Basics,  Next: Simple Example,  Up: Using libffi
+ 
+ 2.1 The Basics
+ ==============
+ 
+ 'Libffi' assumes that you have a pointer to the function you wish to
+ call and that you know the number and types of arguments to pass it, as
+ well as the return type of the function.
+ 
+    The first thing you must do is create an 'ffi_cif' object that
+ matches the signature of the function you wish to call.  This is a
+ separate step because it is common to make multiple calls using a single
+ 'ffi_cif'.  The "cif" in 'ffi_cif' stands for Call InterFace.  To
+ prepare a call interface object, use the function 'ffi_prep_cif'.
+ 
+  -- Function: ffi_status ffi_prep_cif (ffi_cif *CIF, ffi_abi ABI,
+           unsigned int NARGS, ffi_type *RTYPE, ffi_type **ARGTYPES)
+      This initializes CIF according to the given parameters.
+ 
+      ABI is the ABI to use; normally 'FFI_DEFAULT_ABI' is what you want.
+      *note Multiple ABIs:: for more information.
+ 
+      NARGS is the number of arguments that this function accepts.
+ 
+      RTYPE is a pointer to an 'ffi_type' structure that describes the
+      return type of the function.  *Note Types::.
+ 
+      ARGTYPES is a vector of 'ffi_type' pointers.  ARGTYPES must have
+      NARGS elements.  If NARGS is 0, this argument is ignored.
+ 
+      'ffi_prep_cif' returns a 'libffi' status code, of type
+      'ffi_status'.  This will be either 'FFI_OK' if everything worked
+      properly; 'FFI_BAD_TYPEDEF' if one of the 'ffi_type' objects is
+      incorrect; or 'FFI_BAD_ABI' if the ABI parameter is invalid.
+ 
+    If the function being called is variadic (varargs) then
+ 'ffi_prep_cif_var' must be used instead of 'ffi_prep_cif'.
+ 
+  -- Function: ffi_status ffi_prep_cif_var (ffi_cif *CIF, ffi_abi ABI,
+           unsigned int NFIXEDARGS, unsigned int NTOTALARGS, ffi_type
+           *RTYPE, ffi_type **ARGTYPES)
+      This initializes CIF according to the given parameters for a call
+      to a variadic function.  In general its operation is the same as
+      for 'ffi_prep_cif' except that:
+ 
+      NFIXEDARGS is the number of fixed arguments, prior to any variadic
+      arguments.  It must be greater than zero.
+ 
+      NTOTALARGS the total number of arguments, including variadic and
+      fixed arguments.  ARGTYPES must have this many elements.
+ 
+      'ffi_prep_cif_var' will return 'FFI_BAD_ARGTYPE' if any of the
+      variable argument types are 'ffi_type_float' (promote to
+      'ffi_type_double' first), or any integer type small than an int
+      (promote to an int-sized type first).
+ 
+      Note that, different cif's must be prepped for calls to the same
+      function when different numbers of arguments are passed.
+ 
+      Also note that a call to 'ffi_prep_cif_var' with
+      NFIXEDARGS=NOTOTALARGS is NOT equivalent to a call to
+      'ffi_prep_cif'.
+ 
+    Note that the resulting 'ffi_cif' holds pointers to all the
+ 'ffi_type' objects that were used during initialization.  You must
+ ensure that these type objects have a lifetime at least as long as that
+ of the 'ffi_cif'.
+ 
+    To call a function using an initialized 'ffi_cif', use the 'ffi_call'
+ function:
+ 
+  -- Function: void ffi_call (ffi_cif *CIF, void *FN, void *RVALUE, void
+           **AVALUES)
+      This calls the function FN according to the description given in
+      CIF.  CIF must have already been prepared using 'ffi_prep_cif'.
+ 
+      RVALUE is a pointer to a chunk of memory that will hold the result
+      of the function call.  This must be large enough to hold the
+      result, no smaller than the system register size (generally 32 or
+      64 bits), and must be suitably aligned; it is the caller's
+      responsibility to ensure this.  If CIF declares that the function
+      returns 'void' (using 'ffi_type_void'), then RVALUE is ignored.
+ 
+      In most situations, 'libffi' will handle promotion according to the
+      ABI. However, for historical reasons, there is a special case with
+      return values that must be handled by your code.  In particular,
+      for integral (not 'struct') types that are narrower than the system
+      register size, the return value will be widened by 'libffi'.
+      'libffi' provides a type, 'ffi_arg', that can be used as the return
+      type.  For example, if the CIF was defined with a return type of
+      'char', 'libffi' will try to store a full 'ffi_arg' into the return
+      value.
+ 
+      AVALUES is a vector of 'void *' pointers that point to the memory
+      locations holding the argument values for a call.  If CIF declares
+      that the function has no arguments (i.e., NARGS was 0), then
+      AVALUES is ignored.  Note that argument values may be modified by
+      the callee (for instance, structs passed by value); the burden of
+      copying pass-by-value arguments is placed on the caller.
+ 
+      Note that while the return value must be register-sized, arguments
+      should exactly match their declared type.  For example, if an
+      argument is a 'short', then the entry in AVALUES should point to an
+      object declared as 'short'; but if the return type is 'short', then
+      RVALUE should point to an object declared as a larger type -
+      usually 'ffi_arg'.
+ 
+ 
+ File: libffi.info,  Node: Simple Example,  Next: Types,  Prev: The Basics,  Up: Using libffi
+ 
+ 2.2 Simple Example
+ ==================
+ 
+ Here is a trivial example that calls 'puts' a few times.
+ 
+      #include <stdio.h>
+      #include <ffi.h>
+ 
+      int main()
+      {
+        ffi_cif cif;
+        ffi_type *args[1];
+        void *values[1];
+        char *s;
+        ffi_arg rc;
+ 
+        /* Initialize the argument info vectors */
+        args[0] = &ffi_type_pointer;
+        values[0] = &s;
+ 
+        /* Initialize the cif */
+        if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
+      		       &ffi_type_sint, args) == FFI_OK)
+          {
+            s = "Hello World!";
+            ffi_call(&cif, puts, &rc, values);
+            /* rc now holds the result of the call to puts */
+ 
+            /* values holds a pointer to the function's arg, so to
+               call puts() again all we need to do is change the
+               value of s */
+            s = "This is cool!";
+            ffi_call(&cif, puts, &rc, values);
+          }
+ 
+        return 0;
+      }
+ 
+ 
+ File: libffi.info,  Node: Types,  Next: Multiple ABIs,  Prev: Simple Example,  Up: Using libffi
+ 
+ 2.3 Types
+ =========
+ 
+ * Menu:
+ 
+ * Primitive Types::             Built-in types.
+ * Structures::                  Structure types.
+ * Size and Alignment::          Size and alignment of types.
+ * Arrays Unions Enums::         Arrays, unions, and enumerations.
+ * Type Example::                Structure type example.
+ * Complex::                     Complex types.
+ * Complex Type Example::        Complex type example.
+ 
+ 
+ File: libffi.info,  Node: Primitive Types,  Next: Structures,  Up: Types
+ 
+ 2.3.1 Primitive Types
+ ---------------------
+ 
+ 'Libffi' provides a number of built-in type descriptors that can be used
+ to describe argument and return types:
+ 
+ 'ffi_type_void'
+      The type 'void'.  This cannot be used for argument types, only for
+      return values.
+ 
+ 'ffi_type_uint8'
+      An unsigned, 8-bit integer type.
+ 
+ 'ffi_type_sint8'
+      A signed, 8-bit integer type.
+ 
+ 'ffi_type_uint16'
+      An unsigned, 16-bit integer type.
+ 
+ 'ffi_type_sint16'
+      A signed, 16-bit integer type.
+ 
+ 'ffi_type_uint32'
+      An unsigned, 32-bit integer type.
+ 
+ 'ffi_type_sint32'
+      A signed, 32-bit integer type.
+ 
+ 'ffi_type_uint64'
+      An unsigned, 64-bit integer type.
+ 
+ 'ffi_type_sint64'
+      A signed, 64-bit integer type.
+ 
+ 'ffi_type_float'
+      The C 'float' type.
+ 
+ 'ffi_type_double'
+      The C 'double' type.
+ 
+ 'ffi_type_uchar'
+      The C 'unsigned char' type.
+ 
+ 'ffi_type_schar'
+      The C 'signed char' type.  (Note that there is not an exact
+      equivalent to the C 'char' type in 'libffi'; ordinarily you should
+      either use 'ffi_type_schar' or 'ffi_type_uchar' depending on
+      whether 'char' is signed.)
+ 
+ 'ffi_type_ushort'
+      The C 'unsigned short' type.
+ 
+ 'ffi_type_sshort'
+      The C 'short' type.
+ 
+ 'ffi_type_uint'
+      The C 'unsigned int' type.
+ 
+ 'ffi_type_sint'
+      The C 'int' type.
+ 
+ 'ffi_type_ulong'
+      The C 'unsigned long' type.
+ 
+ 'ffi_type_slong'
+      The C 'long' type.
+ 
+ 'ffi_type_longdouble'
+      On platforms that have a C 'long double' type, this is defined.  On
+      other platforms, it is not.
+ 
+ 'ffi_type_pointer'
+      A generic 'void *' pointer.  You should use this for all pointers,
+      regardless of their real type.
+ 
+ 'ffi_type_complex_float'
+      The C '_Complex float' type.
+ 
+ 'ffi_type_complex_double'
+      The C '_Complex double' type.
+ 
+ 'ffi_type_complex_longdouble'
+      The C '_Complex long double' type.  On platforms that have a C
+      'long double' type, this is defined.  On other platforms, it is
+      not.
+ 
+    Each of these is of type 'ffi_type', so you must take the address
+ when passing to 'ffi_prep_cif'.
+ 
+ 
+ File: libffi.info,  Node: Structures,  Next: Size and Alignment,  Prev: Primitive Types,  Up: Types
+ 
+ 2.3.2 Structures
+ ----------------
+ 
+ 'libffi' is perfectly happy passing structures back and forth.  You must
+ first describe the structure to 'libffi' by creating a new 'ffi_type'
+ object for it.
+ 
+  -- Data type: ffi_type
+      The 'ffi_type' has the following members:
+      'size_t size'
+           This is set by 'libffi'; you should initialize it to zero.
+ 
+      'unsigned short alignment'
+           This is set by 'libffi'; you should initialize it to zero.
+ 
+      'unsigned short type'
+           For a structure, this should be set to 'FFI_TYPE_STRUCT'.
+ 
+      'ffi_type **elements'
+           This is a 'NULL'-terminated array of pointers to 'ffi_type'
+           objects.  There is one element per field of the struct.
+ 
+           Note that 'libffi' has no special support for bit-fields.  You
+           must manage these manually.
+ 
+    The 'size' and 'alignment' fields will be filled in by 'ffi_prep_cif'
+ or 'ffi_prep_cif_var', as needed.
+ 
+ 
+ File: libffi.info,  Node: Size and Alignment,  Next: Arrays Unions Enums,  Prev: Structures,  Up: Types
+ 
+ 2.3.3 Size and Alignment
+ ------------------------
+ 
+ 'libffi' will set the 'size' and 'alignment' fields of an 'ffi_type'
+ object for you.  It does so using its knowledge of the ABI.
+ 
+    You might expect that you can simply read these fields for a type
+ that has been laid out by 'libffi'.  However, there are some caveats.
+ 
+    * The size or alignment of some of the built-in types may vary
+      depending on the chosen ABI.
+ 
+    * The size and alignment of a new structure type will not be set by
+      'libffi' until it has been passed to 'ffi_prep_cif' or
+      'ffi_get_struct_offsets'.
+ 
+    * A structure type cannot be shared across ABIs.  Instead each ABI
+      needs its own copy of the structure type.
+ 
+    So, before examining these fields, it is safest to pass the
+ 'ffi_type' object to 'ffi_prep_cif' or 'ffi_get_struct_offsets' first.
+ This function will do all the needed setup.
+ 
+      ffi_type *desired_type;
+      ffi_abi desired_abi;
+      ...
+      ffi_cif cif;
+      if (ffi_prep_cif (&cif, desired_abi, 0, desired_type, NULL) == FFI_OK)
+        {
+          size_t size = desired_type->size;
+          unsigned short alignment = desired_type->alignment;
+        }
+ 
+    'libffi' also provides a way to get the offsets of the members of a
+ structure.
+ 
+  -- Function: ffi_status ffi_get_struct_offsets (ffi_abi abi, ffi_type
+           *struct_type, size_t *offsets)
+      Compute the offset of each element of the given structure type.
+      ABI is the ABI to use; this is needed because in some cases the
+      layout depends on the ABI.
+ 
+      OFFSETS is an out parameter.  The caller is responsible for
+      providing enough space for all the results to be written - one
+      element per element type in STRUCT_TYPE.  If OFFSETS is 'NULL',
+      then the type will be laid out but not otherwise modified.  This
+      can be useful for accessing the type's size or layout, as mentioned
+      above.
+ 
+      This function returns 'FFI_OK' on success; 'FFI_BAD_ABI' if ABI is
+      invalid; or 'FFI_BAD_TYPEDEF' if STRUCT_TYPE is invalid in some
+      way.  Note that only 'FFI_STRUCT' types are valid here.
+ 
+ 
+ File: libffi.info,  Node: Arrays Unions Enums,  Next: Type Example,  Prev: Size and Alignment,  Up: Types
+ 
+ 2.3.4 Arrays, Unions, and Enumerations
+ --------------------------------------
+ 
+ 2.3.4.1 Arrays
+ ..............
+ 
+ 'libffi' does not have direct support for arrays or unions.  However,
+ they can be emulated using structures.
+ 
+    To emulate an array, simply create an 'ffi_type' using
+ 'FFI_TYPE_STRUCT' with as many members as there are elements in the
+ array.
+ 
+      ffi_type array_type;
+      ffi_type **elements
+      int i;
+ 
+      elements = malloc ((n + 1) * sizeof (ffi_type *));
+      for (i = 0; i < n; ++i)
+        elements[i] = array_element_type;
+      elements[n] = NULL;
+ 
+      array_type.size = array_type.alignment = 0;
+      array_type.type = FFI_TYPE_STRUCT;
+      array_type.elements = elements;
+ 
+    Note that arrays cannot be passed or returned by value in C -
+ structure types created like this should only be used to refer to
+ members of real 'FFI_TYPE_STRUCT' objects.
+ 
+    However, a phony array type like this will not cause any errors from
+ 'libffi' if you use it as an argument or return type.  This may be
+ confusing.
+ 
+ 2.3.4.2 Unions
+ ..............
+ 
+ A union can also be emulated using 'FFI_TYPE_STRUCT'.  In this case,
+ however, you must make sure that the size and alignment match the real
+ requirements of the union.
+ 
+    One simple way to do this is to ensue that each element type is laid
+ out.  Then, give the new structure type a single element; the size of
+ the largest element; and the largest alignment seen as well.
+ 
+    This example uses the 'ffi_prep_cif' trick to ensure that each
+ element type is laid out.
+ 
+      ffi_abi desired_abi;
+      ffi_type union_type;
+      ffi_type **union_elements;
+ 
+      int i;
+      ffi_type element_types[2];
+ 
+      element_types[1] = NULL;
+ 
+      union_type.size = union_type.alignment = 0;
+      union_type.type = FFI_TYPE_STRUCT;
+      union_type.elements = element_types;
+ 
+      for (i = 0; union_elements[i]; ++i)
+        {
+          ffi_cif cif;
+          if (ffi_prep_cif (&cif, desired_abi, 0, union_elements[i], NULL) == FFI_OK)
+            {
+              if (union_elements[i]->size > union_type.size)
+                {
+                  union_type.size = union_elements[i];
+                  size = union_elements[i]->size;
+                }
+              if (union_elements[i]->alignment > union_type.alignment)
+                union_type.alignment = union_elements[i]->alignment;
+            }
+        }
+ 
+ 2.3.4.3 Enumerations
+ ....................
+ 
+ 'libffi' does not have any special support for C 'enum's.  Although any
+ given 'enum' is implemented using a specific underlying integral type,
+ exactly which type will be used cannot be determined by 'libffi' - it
+ may depend on the values in the enumeration or on compiler flags such as
+ '-fshort-enums'.  *Note (gcc)Structures unions enumerations and
+ bit-fields implementation::, for more information about how GCC handles
+ enumerations.
+ 
+ 
+ File: libffi.info,  Node: Type Example,  Next: Complex,  Prev: Arrays Unions Enums,  Up: Types
+ 
+ 2.3.5 Type Example
+ ------------------
+ 
+ The following example initializes a 'ffi_type' object representing the
+ 'tm' struct from Linux's 'time.h'.
+ 
+    Here is how the struct is defined:
+ 
+      struct tm {
+          int tm_sec;
+          int tm_min;
+          int tm_hour;
+          int tm_mday;
+          int tm_mon;
+          int tm_year;
+          int tm_wday;
+          int tm_yday;
+          int tm_isdst;
+          /* Those are for future use. */
+          long int __tm_gmtoff__;
+          __const char *__tm_zone__;
+      };
+ 
+    Here is the corresponding code to describe this struct to 'libffi':
+ 
+          {
+            ffi_type tm_type;
+            ffi_type *tm_type_elements[12];
+            int i;
+ 
+            tm_type.size = tm_type.alignment = 0;
+            tm_type.type = FFI_TYPE_STRUCT;
+            tm_type.elements = &tm_type_elements;
+ 
+            for (i = 0; i < 9; i++)
+                tm_type_elements[i] = &ffi_type_sint;
+ 
+            tm_type_elements[9] = &ffi_type_slong;
+            tm_type_elements[10] = &ffi_type_pointer;
+            tm_type_elements[11] = NULL;
+ 
+            /* tm_type can now be used to represent tm argument types and
+      	 return types for ffi_prep_cif() */
+          }
+ 
+ 
+ File: libffi.info,  Node: Complex,  Next: Complex Type Example,  Prev: Type Example,  Up: Types
+ 
+ 2.3.6 Complex Types
+ -------------------
+ 
+ 'libffi' supports the complex types defined by the C99 standard
+ ('_Complex float', '_Complex double' and '_Complex long double' with the
+ built-in type descriptors 'ffi_type_complex_float',
+ 'ffi_type_complex_double' and 'ffi_type_complex_longdouble'.
+ 
+    Custom complex types like '_Complex int' can also be used.  An
+ 'ffi_type' object has to be defined to describe the complex type to
+ 'libffi'.
+ 
+  -- Data type: ffi_type
+      'size_t size'
+           This must be manually set to the size of the complex type.
+ 
+      'unsigned short alignment'
+           This must be manually set to the alignment of the complex
+           type.
+ 
+      'unsigned short type'
+           For a complex type, this must be set to 'FFI_TYPE_COMPLEX'.
+ 
+      'ffi_type **elements'
+ 
+           This is a 'NULL'-terminated array of pointers to 'ffi_type'
+           objects.  The first element is set to the 'ffi_type' of the
+           complex's base type.  The second element must be set to
+           'NULL'.
+ 
+    The section *note Complex Type Example:: shows a way to determine the
+ 'size' and 'alignment' members in a platform independent way.
+ 
+    For platforms that have no complex support in 'libffi' yet, the
+ functions 'ffi_prep_cif' and 'ffi_prep_args' abort the program if they
+ encounter a complex type.
+ 
+ 
+ File: libffi.info,  Node: Complex Type Example,  Prev: Complex,  Up: Types
+ 
+ 2.3.7 Complex Type Example
+ --------------------------
+ 
+ This example demonstrates how to use complex types:
+ 
+      #include <stdio.h>
+      #include <ffi.h>
+      #include <complex.h>
+ 
+      void complex_fn(_Complex float cf,
+                      _Complex double cd,
+                      _Complex long double cld)
+      {
+        printf("cf=%f+%fi\ncd=%f+%fi\ncld=%f+%fi\n",
+               (float)creal (cf), (float)cimag (cf),
+               (float)creal (cd), (float)cimag (cd),
+               (float)creal (cld), (float)cimag (cld));
+      }
+ 
+      int main()
+      {
+        ffi_cif cif;
+        ffi_type *args[3];
+        void *values[3];
+        _Complex float cf;
+        _Complex double cd;
+        _Complex long double cld;
+ 
+        /* Initialize the argument info vectors */
+        args[0] = &ffi_type_complex_float;
+        args[1] = &ffi_type_complex_double;
+        args[2] = &ffi_type_complex_longdouble;
+        values[0] = &cf;
+        values[1] = &cd;
+        values[2] = &cld;
+ 
+        /* Initialize the cif */
+        if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3,
+                         &ffi_type_void, args) == FFI_OK)
+          {
+            cf = 1.0 + 20.0 * I;
+            cd = 300.0 + 4000.0 * I;
+            cld = 50000.0 + 600000.0 * I;
+            /* Call the function */
+            ffi_call(&cif, (void (*)(void))complex_fn, 0, values);
+          }
+ 
+        return 0;
+      }
+ 
+    This is an example for defining a custom complex type descriptor for
+ compilers that support them:
+ 
+      /*
+       * This macro can be used to define new complex type descriptors
+       * in a platform independent way.
+       *
+       * name: Name of the new descriptor is ffi_type_complex_<name>.
+       * type: The C base type of the complex type.
+       */
+      #define FFI_COMPLEX_TYPEDEF(name, type, ffitype)             \
+        static ffi_type *ffi_elements_complex_##name [2] = {      \
+          (ffi_type *)(&ffitype), NULL                             \
+        };                                                        \
+        struct struct_align_complex_##name {                      \
+          char c;                                                  \
+          _Complex type x;                                         \
+        };                                                        \
+        ffi_type ffi_type_complex_##name = {                      \
+          sizeof(_Complex type),                                   \
+          offsetof(struct struct_align_complex_##name, x),         \
+          FFI_TYPE_COMPLEX,                                        \
+          (ffi_type **)ffi_elements_complex_##name                 \
+        }
+ 
+      /* Define new complex type descriptors using the macro: */
+      /* ffi_type_complex_sint */
+      FFI_COMPLEX_TYPEDEF(sint, int, ffi_type_sint);
+      /* ffi_type_complex_uchar */
+      FFI_COMPLEX_TYPEDEF(uchar, unsigned char, ffi_type_uint8);
+ 
+    The new type descriptors can then be used like one of the built-in
+ type descriptors in the previous example.
+ 
+ 
+ File: libffi.info,  Node: Multiple ABIs,  Next: The Closure API,  Prev: Types,  Up: Using libffi
+ 
+ 2.4 Multiple ABIs
+ =================
+ 
+ A given platform may provide multiple different ABIs at once.  For
+ instance, the x86 platform has both 'stdcall' and 'fastcall' functions.
+ 
+    'libffi' provides some support for this.  However, this is
+ necessarily platform-specific.
+ 
+ 
+ File: libffi.info,  Node: The Closure API,  Next: Closure Example,  Prev: Multiple ABIs,  Up: Using libffi
+ 
+ 2.5 The Closure API
+ ===================
+ 
+ 'libffi' also provides a way to write a generic function - a function
+ that can accept and decode any combination of arguments.  This can be
+ useful when writing an interpreter, or to provide wrappers for arbitrary
+ functions.
+ 
+    This facility is called the "closure API". Closures are not supported
+ on all platforms; you can check the 'FFI_CLOSURES' define to determine
+ whether they are supported on the current platform.
+ 
+    Because closures work by assembling a tiny function at runtime, they
+ require special allocation on platforms that have a non-executable heap.
+ Memory management for closures is handled by a pair of functions:
+ 
+  -- Function: void *ffi_closure_alloc (size_t SIZE, void **CODE)
+      Allocate a chunk of memory holding SIZE bytes.  This returns a
+      pointer to the writable address, and sets *CODE to the
+      corresponding executable address.
+ 
+      SIZE should be sufficient to hold a 'ffi_closure' object.
+ 
+  -- Function: void ffi_closure_free (void *WRITABLE)
+      Free memory allocated using 'ffi_closure_alloc'.  The argument is
+      the writable address that was returned.
+ 
+    Once you have allocated the memory for a closure, you must construct
+ a 'ffi_cif' describing the function call.  Finally you can prepare the
+ closure function:
+ 
+  -- Function: ffi_status ffi_prep_closure_loc (ffi_closure *CLOSURE,
+           ffi_cif *CIF, void (*FUN) (ffi_cif *CIF, void *RET, void
+           **ARGS, void *USER_DATA), void *USER_DATA, void *CODELOC)
+      Prepare a closure function.  The arguments to
+      'ffi_prep_closure_loc' are:
+ 
+      CLOSURE
+           The address of a 'ffi_closure' object; this is the writable
+           address returned by 'ffi_closure_alloc'.
+ 
+      CIF
+           The 'ffi_cif' describing the function parameters.  Note that
+           this object, and the types to which it refers, must be kept
+           alive until the closure itself is freed.
+ 
+      USER_DATA
+           An arbitrary datum that is passed, uninterpreted, to your
+           closure function.
+ 
+      CODELOC
+           The executable address returned by 'ffi_closure_alloc'.
+ 
+      FUN
+           The function which will be called when the closure is invoked.
+           It is called with the arguments:
+ 
+           CIF
+                The 'ffi_cif' passed to 'ffi_prep_closure_loc'.
+ 
+           RET
+                A pointer to the memory used for the function's return
+                value.
+ 
+                If the function is declared as returning 'void', then
+                this value is garbage and should not be used.
+ 
+                Otherwise, FUN must fill the object to which this points,
+                following the same special promotion behavior as
+                'ffi_call'.  That is, in most cases, RET points to an
+                object of exactly the size of the type specified when CIF
+                was constructed.  However, integral types narrower than
+                the system register size are widened.  In these cases
+                your program may assume that RET points to an 'ffi_arg'
+                object.
+ 
+           ARGS
+                A vector of pointers to memory holding the arguments to
+                the function.
+ 
+           USER_DATA
+                The same USER_DATA that was passed to
+                'ffi_prep_closure_loc'.
+ 
+      'ffi_prep_closure_loc' will return 'FFI_OK' if everything went ok,
+      and one of the other 'ffi_status' values on error.
+ 
+      After calling 'ffi_prep_closure_loc', you can cast CODELOC to the
+      appropriate pointer-to-function type.
+ 
+    You may see old code referring to 'ffi_prep_closure'.  This function
+ is deprecated, as it cannot handle the need for separate writable and
+ executable addresses.
+ 
+ 
+ File: libffi.info,  Node: Closure Example,  Next: Thread Safety,  Prev: The Closure API,  Up: Using libffi
+ 
+ 2.6 Closure Example
+ ===================
+ 
+ A trivial example that creates a new 'puts' by binding 'fputs' with
+ 'stdout'.
+ 
+      #include <stdio.h>
+      #include <ffi.h>
+ 
+      /* Acts like puts with the file given at time of enclosure. */
+      void puts_binding(ffi_cif *cif, void *ret, void* args[],
+                        void *stream)
+      {
+        *(ffi_arg *)ret = fputs(*(char **)args[0], (FILE *)stream);
+      }
+ 
+      typedef int (*puts_t)(char *);
+ 
+      int main()
+      {
+        ffi_cif cif;
+        ffi_type *args[1];
+        ffi_closure *closure;
+ 
+        void *bound_puts;
+        int rc;
+ 
+        /* Allocate closure and bound_puts */
+        closure = ffi_closure_alloc(sizeof(ffi_closure), &bound_puts);
+ 
+        if (closure)
+          {
+            /* Initialize the argument info vectors */
+            args[0] = &ffi_type_pointer;
+ 
+            /* Initialize the cif */
+            if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
+                             &ffi_type_sint, args) == FFI_OK)
+              {
+                /* Initialize the closure, setting stream to stdout */
+                if (ffi_prep_closure_loc(closure, &cif, puts_binding,
+                                         stdout, bound_puts) == FFI_OK)
+                  {
+                    rc = ((puts_t)bound_puts)("Hello World!");
+                    /* rc now holds the result of the call to fputs */
+                  }
+              }
+          }
+ 
+        /* Deallocate both closure, and bound_puts */
+        ffi_closure_free(closure);
+ 
+        return 0;
+      }
+ 
+ 
+ 
+ File: libffi.info,  Node: Thread Safety,  Prev: Closure Example,  Up: Using libffi
+ 
+ 2.7 Thread Safety
+ =================
+ 
+ 'libffi' is not completely thread-safe.  However, many parts are, and if
+ you follow some simple rules, you can use it safely in a multi-threaded
+ program.
+ 
+    * 'ffi_prep_cif' may modify the 'ffi_type' objects passed to it.  It
+      is best to ensure that only a single thread prepares a given
+      'ffi_cif' at a time.
+ 
+    * On some platforms, 'ffi_prep_cif' may modify the size and alignment
+      of some types, depending on the chosen ABI. On these platforms, if
+      you switch between ABIs, you must ensure that there is only one
+      call to 'ffi_prep_cif' at a time.
+ 
+      Currently the only affected platform is PowerPC and the only
+      affected type is 'long double'.
+ 
+ 
+ File: libffi.info,  Node: Memory Usage,  Next: Missing Features,  Prev: Using libffi,  Up: Top
+ 
+ 3 Memory Usage
+ **************
+ 
+ Note that memory allocated by 'ffi_closure_alloc' and freed by
+ 'ffi_closure_free' does not come from the same general pool of memory
+ that 'malloc' and 'free' use.  To accomodate security settings, 'libffi'
+ may aquire memory, for example, by mapping temporary files into multiple
+ places in the address space (once to write out the closure, a second to
+ execute it).  The search follows this list, using the first that works:
+ 
+    * A anonymous mapping (i.e.  not file-backed)
+ 
+    * 'memfd_create()', if the kernel supports it.
+ 
+    * A file created in the directory referenced by the environment
+      variable 'LIBFFI_TMPDIR'.
+ 
+    * Likewise for the environment variable 'TMPDIR'.
+ 
+    * A file created in '/tmp'.
+ 
+    * A file created in '/var/tmp'.
+ 
+    * A file created in '/dev/shm'.
+ 
+    * A file created in the user's home directory ('$HOME').
+ 
+    * A file created in any directory listed in '/etc/mtab'.
+ 
+    * A file created in any directory listed in '/proc/mounts'.
+ 
+    If security settings prohibit using any of these for closures,
+ 'ffi_closure_alloc' will fail.
+ 
+ 
+ File: libffi.info,  Node: Missing Features,  Next: Index,  Prev: Memory Usage,  Up: Top
+ 
+ 4 Missing Features
+ ******************
+ 
+ 'libffi' is missing a few features.  We welcome patches to add support
+ for these.
+ 
+    * Variadic closures.
+ 
+    * There is no support for bit fields in structures.
+ 
+    * The "raw" API is undocumented.
+ 
+    * The Go API is undocumented.
+ 
+ 
+ File: libffi.info,  Node: Index,  Prev: Missing Features,  Up: Top
+ 
+ Index
+ *****
+ 
+ [index]
+ * Menu:
+ 
+ * ABI:                                   Introduction.         (line 13)
+ * Application Binary Interface:          Introduction.         (line 13)
+ * calling convention:                    Introduction.         (line 13)
+ * cif:                                   The Basics.           (line 14)
+ * closure API:                           The Closure API.      (line 13)
+ * closures:                              The Closure API.      (line 13)
+ * FFI:                                   Introduction.         (line 31)
+ * ffi_call:                              The Basics.           (line 72)
+ * FFI_CLOSURES:                          The Closure API.      (line 13)
+ * ffi_closure_alloc:                     The Closure API.      (line 19)
+ * ffi_closure_free:                      The Closure API.      (line 26)
+ * ffi_get_struct_offsets:                Size and Alignment.   (line 39)
+ * ffi_prep_cif:                          The Basics.           (line 16)
+ * ffi_prep_cif_var:                      The Basics.           (line 39)
+ * ffi_prep_closure_loc:                  The Closure API.      (line 34)
+ * ffi_status:                            The Basics.           (line 16)
+ * ffi_status <1>:                        The Basics.           (line 39)
+ * ffi_status <2>:                        Size and Alignment.   (line 39)
+ * ffi_status <3>:                        The Closure API.      (line 34)
+ * ffi_type:                              Structures.           (line 10)
+ * ffi_type <1>:                          Structures.           (line 10)
+ * ffi_type <2>:                          Complex.              (line 15)
+ * ffi_type <3>:                          Complex.              (line 15)
+ * ffi_type_complex_double:               Primitive Types.      (line 82)
+ * ffi_type_complex_float:                Primitive Types.      (line 79)
+ * ffi_type_complex_longdouble:           Primitive Types.      (line 85)
+ * ffi_type_double:                       Primitive Types.      (line 41)
+ * ffi_type_float:                        Primitive Types.      (line 38)
+ * ffi_type_longdouble:                   Primitive Types.      (line 71)
+ * ffi_type_pointer:                      Primitive Types.      (line 75)
+ * ffi_type_schar:                        Primitive Types.      (line 47)
+ * ffi_type_sint:                         Primitive Types.      (line 62)
+ * ffi_type_sint16:                       Primitive Types.      (line 23)
+ * ffi_type_sint32:                       Primitive Types.      (line 29)
+ * ffi_type_sint64:                       Primitive Types.      (line 35)
+ * ffi_type_sint8:                        Primitive Types.      (line 17)
+ * ffi_type_slong:                        Primitive Types.      (line 68)
+ * ffi_type_sshort:                       Primitive Types.      (line 56)
+ * ffi_type_uchar:                        Primitive Types.      (line 44)
+ * ffi_type_uint:                         Primitive Types.      (line 59)
+ * ffi_type_uint16:                       Primitive Types.      (line 20)
+ * ffi_type_uint32:                       Primitive Types.      (line 26)
+ * ffi_type_uint64:                       Primitive Types.      (line 32)
+ * ffi_type_uint8:                        Primitive Types.      (line 14)
+ * ffi_type_ulong:                        Primitive Types.      (line 65)
+ * ffi_type_ushort:                       Primitive Types.      (line 53)
+ * ffi_type_void:                         Primitive Types.      (line 10)
+ * Foreign Function Interface:            Introduction.         (line 31)
+ * void:                                  The Basics.           (line 72)
+ * void <1>:                              The Closure API.      (line 19)
+ * void <2>:                              The Closure API.      (line 26)
+ 
+ 
+ 
+ Tag Table:
+ Node: Top1394
+ Node: Introduction2923
+ Node: Using libffi4555
+ Node: The Basics5084
+ Node: Simple Example10191
+ Node: Types11222
+ Node: Primitive Types11733
+ Node: Structures13854
+ Node: Size and Alignment14893
+ Node: Arrays Unions Enums17090
+ Node: Type Example20019
+ Node: Complex21310
+ Node: Complex Type Example22728
+ Node: Multiple ABIs25780
+ Node: The Closure API26151
+ Node: Closure Example29977
+ Node: Thread Safety31609
+ Node: Memory Usage32410
+ Node: Missing Features33605
+ Node: Index33970
+ 
+ End Tag Table
+ 
+ 
+ Local Variables:
+ coding: utf-8
+ End:
diff -Nrcpad gcc-13.3.0/libgcc/ChangeLog gcc-13.4.0/libgcc/ChangeLog
*** gcc-13.3.0/libgcc/ChangeLog	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgcc/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,45 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
+ 2025-05-28  Mark Mentovai  <mark@mentovai.com>
+ 
+ 	Backported from master:
+ 	2024-09-24  Mark Mentovai  <mark@mentovai.com>
+ 
+ 	PR target/116809
+ 	* config.host: Build legacy libgcc_s.1 on hosts before macOS 10.12.
+ 	* config/i386/t-darwin: Remove reference to legacy libgcc_s.1
+ 	* config/rs6000/t-darwin: Likewise.
+ 	* config/t-darwin-libgccs1: New file.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-03-10  Jakub Jelinek  <jakub@redhat.com>
+ 		    Michael Leuchtenburg  <michael@slashhome.org>
+ 
+ 	PR libgcc/119151
+ 	* unwind-dw2-btree.h (btree_split_inner): Add size argument.  If
+ 	left_fence is in the middle of [target,target + size - 1] range,
+ 	increase it to target + size - 1.
+ 	(btree_insert): Adjust btree_split_inner caller.  If fence is smaller
+ 	than base + size - 1, increase it and separator of the slot to
+ 	base + size - 1.
+ 
+ 2025-02-17  Dimitry Andric  <dimitry@andric.com>
+ 
+ 	PR target/118685
+ 	* config.host (*-*-freebsd*): Add crtbeginT.o to extra_parts.
+ 
+ 2024-06-12  Andre Vieira  <andre.simoesdiasvieira@arm.com>
+ 
+ 	Backported from master:
+ 	2024-06-06  Andre Vieira  <andre.simoesdiasvieira@arm.com>
+ 
+ 	PR target/115360
+ 	* config/arm/cmse_nonsecure_call.S: Add .type and .size directives.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/libgcc/config/arm/cmse_nonsecure_call.S gcc-13.4.0/libgcc/config/arm/cmse_nonsecure_call.S
*** gcc-13.3.0/libgcc/config/arm/cmse_nonsecure_call.S	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgcc/config/arm/cmse_nonsecure_call.S	Thu Jun  5 16:03:02 2025
***************
*** 33,38 ****
--- 33,39 ----
  #endif
  
  .thumb
+ .type __gnu_cmse_nonsecure_call, %function
  .global __gnu_cmse_nonsecure_call
  __gnu_cmse_nonsecure_call:
  #if defined(__ARM_ARCH_8M_MAIN__)
*************** pop	    {r5-r7, pc}
*** 142,144 ****
--- 143,146 ----
  #else
  #error "This should only be used for armv8-m base- and mainline."
  #endif
+ .size __gnu_cmse_nonsecure_call, .-__gnu_cmse_nonsecure_call
diff -Nrcpad gcc-13.3.0/libgcc/config/avr/libf7/ChangeLog gcc-13.4.0/libgcc/config/avr/libf7/ChangeLog
*** gcc-13.3.0/libgcc/config/avr/libf7/ChangeLog	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgcc/config/avr/libf7/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,23 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
+ 2025-05-27  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2025-05-27  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/120441
+ 	* libf7.c (f7_exp): Limit aa->expo to 10 (not to 9).
+ 
+ 2024-06-01  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backported from master:
+ 	2024-06-01  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/115317
+ 	* libf7-asm.sx (__isinf): Map -Inf to -1.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/libgcc/config/avr/libf7/libf7-asm.sx gcc-13.4.0/libgcc/config/avr/libf7/libf7-asm.sx
*** gcc-13.3.0/libgcc/config/avr/libf7/libf7-asm.sx	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgcc/config/avr/libf7/libf7-asm.sx	Thu Jun  5 16:03:02 2025
*************** _ENDF __copysign
*** 1639,1657 ****
  
  
  #ifdef F7MOD_D_isinf_
  _DEFUN __isinf
      DALIAS isinf
      LALIAS isinfl
      F7call  class_D
      ;; Inf: T = Z = 1.
!     brtc 0f
      ldi     R24,    1
!     breq 1f
! 0:
!     clr     R24
! 1:
!     clr     R25
!     ret
  _ENDF __isinf
  #endif /* F7MOD_D_isinf_ */
  
--- 1639,1662 ----
  
  
  #ifdef F7MOD_D_isinf_
+ ;;; +Inf  ->  +1
+ ;;; -Inf  ->  -1
  _DEFUN __isinf
      DALIAS isinf
      LALIAS isinfl
+     ;; Save sign for later
+     push    R25
      F7call  class_D
+     pop     TMP
+     ldi     R24,    0
+     ldi     R25,    0
      ;; Inf: T = Z = 1.
!     brtc 0f                     ; ordinary number
!     brne 0f                     ; Nan
      ldi     R24,    1
!     sbrc    TMP,    7
!     sbiw    R24,    2
! 0:  ret
  _ENDF __isinf
  #endif /* F7MOD_D_isinf_ */
  
diff -Nrcpad gcc-13.3.0/libgcc/config/avr/libf7/libf7.c gcc-13.4.0/libgcc/config/avr/libf7/libf7.c
*** gcc-13.3.0/libgcc/config/avr/libf7/libf7.c	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgcc/config/avr/libf7/libf7.c	Thu Jun  5 16:03:02 2025
*************** void f7_exp (f7_t *cc, const f7_t *aa)
*** 1636,1645 ****
      return f7_set_nan (cc);
  
    /* The maximal exponent of 2 for a double is 1023, hence we may limit
!      to  |A| < 1023 * ln2 ~ 709.  We limit to  1024 ~ 1.99 * 2^9  */
  
    if (f7_class_inf (a_class)
!       || (f7_class_nonzero (a_class) && aa->expo >= 9))
      {
        if (f7_class_sign (a_class))
  	return f7_clr (cc);
--- 1636,1645 ----
      return f7_set_nan (cc);
  
    /* The maximal exponent of 2 for a double is 1023, hence we may limit
!      to  |A| < 1023 * ln2 ~ 709.  We limit to  1024 = 2^10  */
  
    if (f7_class_inf (a_class)
!       || (f7_class_nonzero (a_class) && aa->expo >= 10))
      {
        if (f7_class_sign (a_class))
  	return f7_clr (cc);
diff -Nrcpad gcc-13.3.0/libgcc/config/i386/t-darwin gcc-13.4.0/libgcc/config/i386/t-darwin
*** gcc-13.3.0/libgcc/config/i386/t-darwin	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgcc/config/i386/t-darwin	Thu Jun  5 16:03:02 2025
*************** LIB2FUNCS_EXCLUDE = _fixtfdi _fixunstfdi
*** 4,9 ****
  
  # Extra symbols for this port.
  SHLIB_MAPFILES += $(srcdir)/config/i386/libgcc-darwin.ver
- 
- # Build a legacy libgcc_s.1
- BUILD_LIBGCCS1 = YES
--- 4,6 ----
diff -Nrcpad gcc-13.3.0/libgcc/config/libbid/ChangeLog gcc-13.4.0/libgcc/config/libbid/ChangeLog
*** gcc-13.3.0/libgcc/config/libbid/ChangeLog	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgcc/config/libbid/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/libgcc/config/rs6000/t-darwin gcc-13.4.0/libgcc/config/rs6000/t-darwin
*** gcc-13.3.0/libgcc/config/rs6000/t-darwin	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgcc/config/rs6000/t-darwin	Thu Jun  5 16:03:02 2025
*************** unwind-dw2_s.o: HOST_LIBGCC2_CFLAGS += -
*** 56,61 ****
  unwind-dw2.o: HOST_LIBGCC2_CFLAGS += -maltivec
  
  LIB2ADDEH += $(srcdir)/config/rs6000/darwin-fallback.c
- 
- # Build a legacy libgcc_s.1
- BUILD_LIBGCCS1 = YES
--- 56,58 ----
diff -Nrcpad gcc-13.3.0/libgcc/config/t-darwin-libgccs1 gcc-13.4.0/libgcc/config/t-darwin-libgccs1
*** gcc-13.3.0/libgcc/config/t-darwin-libgccs1	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libgcc/config/t-darwin-libgccs1	Thu Jun  5 16:03:02 2025
***************
*** 0 ****
--- 1,3 ----
+ 
+ # Build a legacy libgcc_s.1
+ BUILD_LIBGCCS1 = YES
diff -Nrcpad gcc-13.3.0/libgcc/config.host gcc-13.4.0/libgcc/config.host
*** gcc-13.3.0/libgcc/config.host	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgcc/config.host	Thu Jun  5 16:03:02 2025
*************** case ${host} in
*** 238,253 ****
      *-*-darwin1[89]* | *-*-darwin2* )
        tmake_file="t-darwin-min-8 $tmake_file"
        ;;
!     *-*-darwin9* | *-*-darwin1[0-7]*)
        tmake_file="t-darwin-min-5 $tmake_file"
        ;;
      *-*-darwin[4-8]*)
!       tmake_file="t-darwin-min-1 $tmake_file"
        ;;
      *)
        # Fall back to configuring for the oldest system known to work with
        # all archs and the current sources.
!       tmake_file="t-darwin-min-5 $tmake_file"
        echo "Warning: libgcc configured to support macOS 10.5" 1>&2
        ;;
    esac
--- 238,256 ----
      *-*-darwin1[89]* | *-*-darwin2* )
        tmake_file="t-darwin-min-8 $tmake_file"
        ;;
!     *-*-darwin1[67]]*)
        tmake_file="t-darwin-min-5 $tmake_file"
        ;;
+     *-*-darwin9* | *-*-darwin1[0-5]*)
+       tmake_file="t-darwin-min-5 t-darwin-libgccs1 $tmake_file"
+       ;;
      *-*-darwin[4-8]*)
!       tmake_file="t-darwin-min-1 t-darwin-libgccs1 $tmake_file"
        ;;
      *)
        # Fall back to configuring for the oldest system known to work with
        # all archs and the current sources.
!       tmake_file="t-darwin-min-5 t-darwin-libgccs1 $tmake_file"
        echo "Warning: libgcc configured to support macOS 10.5" 1>&2
        ;;
    esac
*************** case ${host} in
*** 263,269 ****
    # machine-specific sections may refine and add to this
    # configuration.
    tmake_file="$tmake_file t-freebsd t-crtstuff-pic t-libgcc-pic t-eh-dw2-dip t-slibgcc t-slibgcc-gld t-slibgcc-elf-ver"
!   extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o"
    case ${target_thread_file} in
      posix)
        tmake_file="${tmake_file} t-freebsd-thread"
--- 266,272 ----
    # machine-specific sections may refine and add to this
    # configuration.
    tmake_file="$tmake_file t-freebsd t-crtstuff-pic t-libgcc-pic t-eh-dw2-dip t-slibgcc t-slibgcc-gld t-slibgcc-elf-ver"
!   extra_parts="crtbegin.o crtend.o crtbeginS.o crtbeginT.o crtendS.o"
    case ${target_thread_file} in
      posix)
        tmake_file="${tmake_file} t-freebsd-thread"
diff -Nrcpad gcc-13.3.0/libgcc/unwind-dw2-btree.h gcc-13.4.0/libgcc/unwind-dw2-btree.h
*** gcc-13.3.0/libgcc/unwind-dw2-btree.h	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgcc/unwind-dw2-btree.h	Thu Jun  5 16:03:02 2025
*************** btree_handle_root_split (struct btree *t
*** 474,480 ****
  // Split an inner node.
  static void
  btree_split_inner (struct btree *t, struct btree_node **inner,
! 		   struct btree_node **parent, uintptr_type target)
  {
    // Check for the root.
    btree_handle_root_split (t, inner, parent);
--- 474,481 ----
  // Split an inner node.
  static void
  btree_split_inner (struct btree *t, struct btree_node **inner,
! 		   struct btree_node **parent, uintptr_type target,
! 		   uintptr_type size)
  {
    // Check for the root.
    btree_handle_root_split (t, inner, parent);
*************** btree_split_inner (struct btree *t, stru
*** 490,495 ****
--- 491,499 ----
        = left_inner->content.children[split + index];
    left_inner->entry_count = split;
    uintptr_type left_fence = btree_node_get_fence_key (left_inner);
+   if (left_fence >= target && left_fence < target + size - 1)
+     // See the PR119151 comment in btree_insert.
+     left_fence = target + size - 1;
    btree_node_update_separator_after_split (*parent, right_fence, left_fence,
  					   right_inner);
    if (target <= left_fence)
*************** btree_insert (struct btree *t, uintptr_t
*** 753,765 ****
      {
        // Use eager splits to avoid lock coupling up.
        if (iter->entry_count == max_fanout_inner)
! 	btree_split_inner (t, &iter, &parent, base);
  
        unsigned slot = btree_node_find_inner_slot (iter, base);
        if (parent)
  	btree_node_unlock_exclusive (parent);
        parent = iter;
        fence = iter->content.children[slot].separator;
        iter = iter->content.children[slot].child;
        btree_node_lock_exclusive (iter);
      }
--- 757,784 ----
      {
        // Use eager splits to avoid lock coupling up.
        if (iter->entry_count == max_fanout_inner)
! 	btree_split_inner (t, &iter, &parent, base, size);
  
        unsigned slot = btree_node_find_inner_slot (iter, base);
        if (parent)
  	btree_node_unlock_exclusive (parent);
        parent = iter;
        fence = iter->content.children[slot].separator;
+       if (fence < base + size - 1)
+ 	// The separator was set to the base - 1 of the leftmost leaf child
+ 	// at some point but such an entry could have been removed afterwards.
+ 	// As both insertion and removal are just walking down the tree with
+ 	// only a few current nodes locked at a time, updating the separator
+ 	// on removal is not possible, especially because btree_remove does
+ 	// not know the size until it reaches leaf node.  We must ensure that
+ 	// the separator is not in a middle of some entry though, as
+ 	// btree_lookup can look up any address in the entry's range and if
+ 	// the separator is in the middle, addresses below it or equal to it
+ 	// would be found while addresses above it would result in failed
+ 	// lookup.  Update the separator now.  Assumption that users
+ 	// ensure no overlapping registered ranges, there should be no
+ 	// current entry for any address in the range.  See PR119151.
+ 	fence = iter->content.children[slot].separator = base + size - 1;
        iter = iter->content.children[slot].child;
        btree_node_lock_exclusive (iter);
      }
diff -Nrcpad gcc-13.3.0/libgfortran/ChangeLog gcc-13.4.0/libgfortran/ChangeLog
*** gcc-13.3.0/libgfortran/ChangeLog	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgfortran/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,61 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
+ 2025-05-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-05-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR libfortran/120196
+ 	* m4/ifindloc2.m4 (header1, header2): For back use i > 0 rather than
+ 	i >= 0 as for condition.
+ 	* generated/findloc2_s1.c: Regenerate.
+ 	* generated/findloc2_s4.c: Regenerate.
+ 
+ 2025-05-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-05-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR fortran/120191
+ 	* m4/ifunction-s.m4 (SCALAR_ARRAY_FUNCTION): Don't multiply
+ 	GFC_DESCRIPTOR_EXTENT(array,) by string_len.
+ 	* generated/maxloc1_4_s1.c: Regenerate.
+ 	* generated/maxloc1_4_s4.c: Regenerate.
+ 	* generated/maxloc1_8_s1.c: Regenerate.
+ 	* generated/maxloc1_8_s4.c: Regenerate.
+ 	* generated/maxloc1_16_s1.c: Regenerate.
+ 	* generated/maxloc1_16_s4.c: Regenerate.
+ 	* generated/minloc1_4_s1.c: Regenerate.
+ 	* generated/minloc1_4_s4.c: Regenerate.
+ 	* generated/minloc1_8_s1.c: Regenerate.
+ 	* generated/minloc1_8_s4.c: Regenerate.
+ 	* generated/minloc1_16_s1.c: Regenerate.
+ 	* generated/minloc1_16_s4.c: Regenerate.
+ 
+ 2025-05-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-05-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR fortran/120191
+ 	* m4/maxloc2s.m4: For smaxloc2 call maxloc2 if mask is NULL or *mask.
+ 	Swap back and len arguments.
+ 	* m4/minloc2s.m4: Likewise.
+ 	* generated/maxloc2_4_s1.c: Regenerate.
+ 	* generated/maxloc2_4_s4.c: Regenerate.
+ 	* generated/maxloc2_8_s1.c: Regenerate.
+ 	* generated/maxloc2_8_s4.c: Regenerate.
+ 	* generated/maxloc2_16_s1.c: Regenerate.
+ 	* generated/maxloc2_16_s4.c: Regenerate.
+ 	* generated/minloc2_4_s1.c: Regenerate.
+ 	* generated/minloc2_4_s4.c: Regenerate.
+ 	* generated/minloc2_8_s1.c: Regenerate.
+ 	* generated/minloc2_8_s4.c: Regenerate.
+ 	* generated/minloc2_16_s1.c: Regenerate.
+ 	* generated/minloc2_16_s4.c: Regenerate.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/libgfortran/generated/findloc2_s1.c gcc-13.4.0/libgfortran/generated/findloc2_s1.c
*** gcc-13.3.0/libgfortran/generated/findloc2_s1.c	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgfortran/generated/findloc2_s1.c	Thu Jun  5 16:03:02 2025
*************** findloc2_s1 (gfc_array_s1 * const restri
*** 49,55 ****
    if (back)
      {
        src = array->base_addr + (extent - 1) * sstride;
!       for (i = extent; i >= 0; i--)
  	{
  	  if (compare_string (len_array, (char *) src, len_value, (char *) value) == 0)
  	    return i;
--- 49,55 ----
    if (back)
      {
        src = array->base_addr + (extent - 1) * sstride;
!       for (i = extent; i > 0; i--)
  	{
  	  if (compare_string (len_array, (char *) src, len_value, (char *) value) == 0)
  	    return i;
*************** mfindloc2_s1 (gfc_array_s1 * const restr
*** 112,118 ****
      {
        src = array->base_addr + (extent - 1) * sstride;
        mbase += (extent - 1) * mstride;
!       for (i = extent; i >= 0; i--)
  	{
  	  if (*mbase && (compare_string (len_array, (char *) src, len_value, (char *) value) == 0))
  	    return i;
--- 112,118 ----
      {
        src = array->base_addr + (extent - 1) * sstride;
        mbase += (extent - 1) * mstride;
!       for (i = extent; i > 0; i--)
  	{
  	  if (*mbase && (compare_string (len_array, (char *) src, len_value, (char *) value) == 0))
  	    return i;
diff -Nrcpad gcc-13.3.0/libgfortran/generated/findloc2_s4.c gcc-13.4.0/libgfortran/generated/findloc2_s4.c
*** gcc-13.3.0/libgfortran/generated/findloc2_s4.c	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgfortran/generated/findloc2_s4.c	Thu Jun  5 16:03:02 2025
*************** findloc2_s4 (gfc_array_s4 * const restri
*** 49,55 ****
    if (back)
      {
        src = array->base_addr + (extent - 1) * sstride;
!       for (i = extent; i >= 0; i--)
  	{
  	  if (compare_string_char4 (len_array, src, len_value, value) == 0)
  	    return i;
--- 49,55 ----
    if (back)
      {
        src = array->base_addr + (extent - 1) * sstride;
!       for (i = extent; i > 0; i--)
  	{
  	  if (compare_string_char4 (len_array, src, len_value, value) == 0)
  	    return i;
*************** mfindloc2_s4 (gfc_array_s4 * const restr
*** 112,118 ****
      {
        src = array->base_addr + (extent - 1) * sstride;
        mbase += (extent - 1) * mstride;
!       for (i = extent; i >= 0; i--)
  	{
  	  if (*mbase && (compare_string_char4 (len_array, src, len_value, value) == 0))
  	    return i;
--- 112,118 ----
      {
        src = array->base_addr + (extent - 1) * sstride;
        mbase += (extent - 1) * mstride;
!       for (i = extent; i > 0; i--)
  	{
  	  if (*mbase && (compare_string_char4 (len_array, src, len_value, value) == 0))
  	    return i;
diff -Nrcpad gcc-13.3.0/libgfortran/generated/maxloc1_16_s1.c gcc-13.4.0/libgfortran/generated/maxloc1_16_s1.c
*** gcc-13.3.0/libgfortran/generated/maxloc1_16_s1.c	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgfortran/generated/maxloc1_16_s1.c	Thu Jun  5 16:03:02 2025
*************** smaxloc1_16_s1 (gfc_array_i16 * const re
*** 468,474 ****
  
    for (n = 0; n < dim; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n) * string_len;
  
        if (extent[n] <= 0)
  	extent[n] = 0;
--- 468,474 ----
  
    for (n = 0; n < dim; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
  
        if (extent[n] <= 0)
  	extent[n] = 0;
*************** smaxloc1_16_s1 (gfc_array_i16 * const re
*** 476,483 ****
  
    for (n = dim; n < rank; n++)
      {
!       extent[n] =
! 	GFC_DESCRIPTOR_EXTENT(array,n + 1) * string_len;
  
        if (extent[n] <= 0)
  	extent[n] = 0;
--- 476,482 ----
  
    for (n = dim; n < rank; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n + 1);
  
        if (extent[n] <= 0)
  	extent[n] = 0;
diff -Nrcpad gcc-13.3.0/libgfortran/generated/maxloc1_16_s4.c gcc-13.4.0/libgfortran/generated/maxloc1_16_s4.c
*** gcc-13.3.0/libgfortran/generated/maxloc1_16_s4.c	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgfortran/generated/maxloc1_16_s4.c	Thu Jun  5 16:03:02 2025
*************** smaxloc1_16_s4 (gfc_array_i16 * const re
*** 468,474 ****
  
    for (n = 0; n < dim; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n) * string_len;
  
        if (extent[n] <= 0)
  	extent[n] = 0;
--- 468,474 ----
  
    for (n = 0; n < dim; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
  
        if (extent[n] <= 0)
  	extent[n] = 0;
*************** smaxloc1_16_s4 (gfc_array_i16 * const re
*** 476,483 ****
  
    for (n = dim; n < rank; n++)
      {
!       extent[n] =
! 	GFC_DESCRIPTOR_EXTENT(array,n + 1) * string_len;
  
        if (extent[n] <= 0)
  	extent[n] = 0;
--- 476,482 ----
  
    for (n = dim; n < rank; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n + 1);
  
        if (extent[n] <= 0)
  	extent[n] = 0;
diff -Nrcpad gcc-13.3.0/libgfortran/generated/maxloc1_4_s1.c gcc-13.4.0/libgfortran/generated/maxloc1_4_s1.c
*** gcc-13.3.0/libgfortran/generated/maxloc1_4_s1.c	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgfortran/generated/maxloc1_4_s1.c	Thu Jun  5 16:03:02 2025
*************** smaxloc1_4_s1 (gfc_array_i4 * const rest
*** 468,474 ****
  
    for (n = 0; n < dim; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n) * string_len;
  
        if (extent[n] <= 0)
  	extent[n] = 0;
--- 468,474 ----
  
    for (n = 0; n < dim; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
  
        if (extent[n] <= 0)
  	extent[n] = 0;
*************** smaxloc1_4_s1 (gfc_array_i4 * const rest
*** 476,483 ****
  
    for (n = dim; n < rank; n++)
      {
!       extent[n] =
! 	GFC_DESCRIPTOR_EXTENT(array,n + 1) * string_len;
  
        if (extent[n] <= 0)
  	extent[n] = 0;
--- 476,482 ----
  
    for (n = dim; n < rank; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n + 1);
  
        if (extent[n] <= 0)
  	extent[n] = 0;
diff -Nrcpad gcc-13.3.0/libgfortran/generated/maxloc1_4_s4.c gcc-13.4.0/libgfortran/generated/maxloc1_4_s4.c
*** gcc-13.3.0/libgfortran/generated/maxloc1_4_s4.c	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgfortran/generated/maxloc1_4_s4.c	Thu Jun  5 16:03:02 2025
*************** smaxloc1_4_s4 (gfc_array_i4 * const rest
*** 468,474 ****
  
    for (n = 0; n < dim; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n) * string_len;
  
        if (extent[n] <= 0)
  	extent[n] = 0;
--- 468,474 ----
  
    for (n = 0; n < dim; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
  
        if (extent[n] <= 0)
  	extent[n] = 0;
*************** smaxloc1_4_s4 (gfc_array_i4 * const rest
*** 476,483 ****
  
    for (n = dim; n < rank; n++)
      {
!       extent[n] =
! 	GFC_DESCRIPTOR_EXTENT(array,n + 1) * string_len;
  
        if (extent[n] <= 0)
  	extent[n] = 0;
--- 476,482 ----
  
    for (n = dim; n < rank; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n + 1);
  
        if (extent[n] <= 0)
  	extent[n] = 0;
diff -Nrcpad gcc-13.3.0/libgfortran/generated/maxloc1_8_s1.c gcc-13.4.0/libgfortran/generated/maxloc1_8_s1.c
*** gcc-13.3.0/libgfortran/generated/maxloc1_8_s1.c	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgfortran/generated/maxloc1_8_s1.c	Thu Jun  5 16:03:02 2025
*************** smaxloc1_8_s1 (gfc_array_i8 * const rest
*** 468,474 ****
  
    for (n = 0; n < dim; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n) * string_len;
  
        if (extent[n] <= 0)
  	extent[n] = 0;
--- 468,474 ----
  
    for (n = 0; n < dim; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
  
        if (extent[n] <= 0)
  	extent[n] = 0;
*************** smaxloc1_8_s1 (gfc_array_i8 * const rest
*** 476,483 ****
  
    for (n = dim; n < rank; n++)
      {
!       extent[n] =
! 	GFC_DESCRIPTOR_EXTENT(array,n + 1) * string_len;
  
        if (extent[n] <= 0)
  	extent[n] = 0;
--- 476,482 ----
  
    for (n = dim; n < rank; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n + 1);
  
        if (extent[n] <= 0)
  	extent[n] = 0;
diff -Nrcpad gcc-13.3.0/libgfortran/generated/maxloc1_8_s4.c gcc-13.4.0/libgfortran/generated/maxloc1_8_s4.c
*** gcc-13.3.0/libgfortran/generated/maxloc1_8_s4.c	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgfortran/generated/maxloc1_8_s4.c	Thu Jun  5 16:03:02 2025
*************** smaxloc1_8_s4 (gfc_array_i8 * const rest
*** 468,474 ****
  
    for (n = 0; n < dim; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n) * string_len;
  
        if (extent[n] <= 0)
  	extent[n] = 0;
--- 468,474 ----
  
    for (n = 0; n < dim; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
  
        if (extent[n] <= 0)
  	extent[n] = 0;
*************** smaxloc1_8_s4 (gfc_array_i8 * const rest
*** 476,483 ****
  
    for (n = dim; n < rank; n++)
      {
!       extent[n] =
! 	GFC_DESCRIPTOR_EXTENT(array,n + 1) * string_len;
  
        if (extent[n] <= 0)
  	extent[n] = 0;
--- 476,482 ----
  
    for (n = dim; n < rank; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n + 1);
  
        if (extent[n] <= 0)
  	extent[n] = 0;
diff -Nrcpad gcc-13.3.0/libgfortran/generated/maxloc2_16_s1.c gcc-13.4.0/libgfortran/generated/maxloc2_16_s1.c
*** gcc-13.3.0/libgfortran/generated/maxloc2_16_s1.c	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgfortran/generated/maxloc2_16_s1.c	Thu Jun  5 16:03:02 2025
*************** GFC_INTEGER_16
*** 152,159 ****
  smaxloc2_16_s1 (gfc_array_s1 * const restrict array,
  				 GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len)
  {
!   if (mask)
!     return maxloc2_16_s1 (array, len, back);
    else
      return 0;
  }
--- 152,159 ----
  smaxloc2_16_s1 (gfc_array_s1 * const restrict array,
  				 GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len)
  {
!   if (mask == NULL || *mask)
!     return maxloc2_16_s1 (array, back, len);
    else
      return 0;
  }
diff -Nrcpad gcc-13.3.0/libgfortran/generated/maxloc2_16_s4.c gcc-13.4.0/libgfortran/generated/maxloc2_16_s4.c
*** gcc-13.3.0/libgfortran/generated/maxloc2_16_s4.c	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgfortran/generated/maxloc2_16_s4.c	Thu Jun  5 16:03:02 2025
*************** GFC_INTEGER_16
*** 152,159 ****
  smaxloc2_16_s4 (gfc_array_s4 * const restrict array,
  				 GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len)
  {
!   if (mask)
!     return maxloc2_16_s4 (array, len, back);
    else
      return 0;
  }
--- 152,159 ----
  smaxloc2_16_s4 (gfc_array_s4 * const restrict array,
  				 GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len)
  {
!   if (mask == NULL || *mask)
!     return maxloc2_16_s4 (array, back, len);
    else
      return 0;
  }
diff -Nrcpad gcc-13.3.0/libgfortran/generated/maxloc2_4_s1.c gcc-13.4.0/libgfortran/generated/maxloc2_4_s1.c
*** gcc-13.3.0/libgfortran/generated/maxloc2_4_s1.c	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgfortran/generated/maxloc2_4_s1.c	Thu Jun  5 16:03:02 2025
*************** GFC_INTEGER_4
*** 152,159 ****
  smaxloc2_4_s1 (gfc_array_s1 * const restrict array,
  				 GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len)
  {
!   if (mask)
!     return maxloc2_4_s1 (array, len, back);
    else
      return 0;
  }
--- 152,159 ----
  smaxloc2_4_s1 (gfc_array_s1 * const restrict array,
  				 GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len)
  {
!   if (mask == NULL || *mask)
!     return maxloc2_4_s1 (array, back, len);
    else
      return 0;
  }
diff -Nrcpad gcc-13.3.0/libgfortran/generated/maxloc2_4_s4.c gcc-13.4.0/libgfortran/generated/maxloc2_4_s4.c
*** gcc-13.3.0/libgfortran/generated/maxloc2_4_s4.c	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgfortran/generated/maxloc2_4_s4.c	Thu Jun  5 16:03:02 2025
*************** GFC_INTEGER_4
*** 152,159 ****
  smaxloc2_4_s4 (gfc_array_s4 * const restrict array,
  				 GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len)
  {
!   if (mask)
!     return maxloc2_4_s4 (array, len, back);
    else
      return 0;
  }
--- 152,159 ----
  smaxloc2_4_s4 (gfc_array_s4 * const restrict array,
  				 GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len)
  {
!   if (mask == NULL || *mask)
!     return maxloc2_4_s4 (array, back, len);
    else
      return 0;
  }
diff -Nrcpad gcc-13.3.0/libgfortran/generated/maxloc2_8_s1.c gcc-13.4.0/libgfortran/generated/maxloc2_8_s1.c
*** gcc-13.3.0/libgfortran/generated/maxloc2_8_s1.c	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgfortran/generated/maxloc2_8_s1.c	Thu Jun  5 16:03:02 2025
*************** GFC_INTEGER_8
*** 152,159 ****
  smaxloc2_8_s1 (gfc_array_s1 * const restrict array,
  				 GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len)
  {
!   if (mask)
!     return maxloc2_8_s1 (array, len, back);
    else
      return 0;
  }
--- 152,159 ----
  smaxloc2_8_s1 (gfc_array_s1 * const restrict array,
  				 GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len)
  {
!   if (mask == NULL || *mask)
!     return maxloc2_8_s1 (array, back, len);
    else
      return 0;
  }
diff -Nrcpad gcc-13.3.0/libgfortran/generated/maxloc2_8_s4.c gcc-13.4.0/libgfortran/generated/maxloc2_8_s4.c
*** gcc-13.3.0/libgfortran/generated/maxloc2_8_s4.c	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgfortran/generated/maxloc2_8_s4.c	Thu Jun  5 16:03:02 2025
*************** GFC_INTEGER_8
*** 152,159 ****
  smaxloc2_8_s4 (gfc_array_s4 * const restrict array,
  				 GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len)
  {
!   if (mask)
!     return maxloc2_8_s4 (array, len, back);
    else
      return 0;
  }
--- 152,159 ----
  smaxloc2_8_s4 (gfc_array_s4 * const restrict array,
  				 GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len)
  {
!   if (mask == NULL || *mask)
!     return maxloc2_8_s4 (array, back, len);
    else
      return 0;
  }
diff -Nrcpad gcc-13.3.0/libgfortran/generated/minloc1_16_s1.c gcc-13.4.0/libgfortran/generated/minloc1_16_s1.c
*** gcc-13.3.0/libgfortran/generated/minloc1_16_s1.c	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgfortran/generated/minloc1_16_s1.c	Thu Jun  5 16:03:02 2025
*************** sminloc1_16_s1 (gfc_array_i16 * const re
*** 468,474 ****
  
    for (n = 0; n < dim; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n) * string_len;
  
        if (extent[n] <= 0)
  	extent[n] = 0;
--- 468,474 ----
  
    for (n = 0; n < dim; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
  
        if (extent[n] <= 0)
  	extent[n] = 0;
*************** sminloc1_16_s1 (gfc_array_i16 * const re
*** 476,483 ****
  
    for (n = dim; n < rank; n++)
      {
!       extent[n] =
! 	GFC_DESCRIPTOR_EXTENT(array,n + 1) * string_len;
  
        if (extent[n] <= 0)
  	extent[n] = 0;
--- 476,482 ----
  
    for (n = dim; n < rank; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n + 1);
  
        if (extent[n] <= 0)
  	extent[n] = 0;
diff -Nrcpad gcc-13.3.0/libgfortran/generated/minloc1_16_s4.c gcc-13.4.0/libgfortran/generated/minloc1_16_s4.c
*** gcc-13.3.0/libgfortran/generated/minloc1_16_s4.c	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgfortran/generated/minloc1_16_s4.c	Thu Jun  5 16:03:02 2025
*************** sminloc1_16_s4 (gfc_array_i16 * const re
*** 468,474 ****
  
    for (n = 0; n < dim; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n) * string_len;
  
        if (extent[n] <= 0)
  	extent[n] = 0;
--- 468,474 ----
  
    for (n = 0; n < dim; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
  
        if (extent[n] <= 0)
  	extent[n] = 0;
*************** sminloc1_16_s4 (gfc_array_i16 * const re
*** 476,483 ****
  
    for (n = dim; n < rank; n++)
      {
!       extent[n] =
! 	GFC_DESCRIPTOR_EXTENT(array,n + 1) * string_len;
  
        if (extent[n] <= 0)
  	extent[n] = 0;
--- 476,482 ----
  
    for (n = dim; n < rank; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n + 1);
  
        if (extent[n] <= 0)
  	extent[n] = 0;
diff -Nrcpad gcc-13.3.0/libgfortran/generated/minloc1_4_s1.c gcc-13.4.0/libgfortran/generated/minloc1_4_s1.c
*** gcc-13.3.0/libgfortran/generated/minloc1_4_s1.c	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgfortran/generated/minloc1_4_s1.c	Thu Jun  5 16:03:02 2025
*************** sminloc1_4_s1 (gfc_array_i4 * const rest
*** 468,474 ****
  
    for (n = 0; n < dim; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n) * string_len;
  
        if (extent[n] <= 0)
  	extent[n] = 0;
--- 468,474 ----
  
    for (n = 0; n < dim; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
  
        if (extent[n] <= 0)
  	extent[n] = 0;
*************** sminloc1_4_s1 (gfc_array_i4 * const rest
*** 476,483 ****
  
    for (n = dim; n < rank; n++)
      {
!       extent[n] =
! 	GFC_DESCRIPTOR_EXTENT(array,n + 1) * string_len;
  
        if (extent[n] <= 0)
  	extent[n] = 0;
--- 476,482 ----
  
    for (n = dim; n < rank; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n + 1);
  
        if (extent[n] <= 0)
  	extent[n] = 0;
diff -Nrcpad gcc-13.3.0/libgfortran/generated/minloc1_4_s4.c gcc-13.4.0/libgfortran/generated/minloc1_4_s4.c
*** gcc-13.3.0/libgfortran/generated/minloc1_4_s4.c	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgfortran/generated/minloc1_4_s4.c	Thu Jun  5 16:03:02 2025
*************** sminloc1_4_s4 (gfc_array_i4 * const rest
*** 468,474 ****
  
    for (n = 0; n < dim; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n) * string_len;
  
        if (extent[n] <= 0)
  	extent[n] = 0;
--- 468,474 ----
  
    for (n = 0; n < dim; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
  
        if (extent[n] <= 0)
  	extent[n] = 0;
*************** sminloc1_4_s4 (gfc_array_i4 * const rest
*** 476,483 ****
  
    for (n = dim; n < rank; n++)
      {
!       extent[n] =
! 	GFC_DESCRIPTOR_EXTENT(array,n + 1) * string_len;
  
        if (extent[n] <= 0)
  	extent[n] = 0;
--- 476,482 ----
  
    for (n = dim; n < rank; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n + 1);
  
        if (extent[n] <= 0)
  	extent[n] = 0;
diff -Nrcpad gcc-13.3.0/libgfortran/generated/minloc1_8_s1.c gcc-13.4.0/libgfortran/generated/minloc1_8_s1.c
*** gcc-13.3.0/libgfortran/generated/minloc1_8_s1.c	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgfortran/generated/minloc1_8_s1.c	Thu Jun  5 16:03:02 2025
*************** sminloc1_8_s1 (gfc_array_i8 * const rest
*** 468,474 ****
  
    for (n = 0; n < dim; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n) * string_len;
  
        if (extent[n] <= 0)
  	extent[n] = 0;
--- 468,474 ----
  
    for (n = 0; n < dim; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
  
        if (extent[n] <= 0)
  	extent[n] = 0;
*************** sminloc1_8_s1 (gfc_array_i8 * const rest
*** 476,483 ****
  
    for (n = dim; n < rank; n++)
      {
!       extent[n] =
! 	GFC_DESCRIPTOR_EXTENT(array,n + 1) * string_len;
  
        if (extent[n] <= 0)
  	extent[n] = 0;
--- 476,482 ----
  
    for (n = dim; n < rank; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n + 1);
  
        if (extent[n] <= 0)
  	extent[n] = 0;
diff -Nrcpad gcc-13.3.0/libgfortran/generated/minloc1_8_s4.c gcc-13.4.0/libgfortran/generated/minloc1_8_s4.c
*** gcc-13.3.0/libgfortran/generated/minloc1_8_s4.c	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgfortran/generated/minloc1_8_s4.c	Thu Jun  5 16:03:02 2025
*************** sminloc1_8_s4 (gfc_array_i8 * const rest
*** 468,474 ****
  
    for (n = 0; n < dim; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n) * string_len;
  
        if (extent[n] <= 0)
  	extent[n] = 0;
--- 468,474 ----
  
    for (n = 0; n < dim; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
  
        if (extent[n] <= 0)
  	extent[n] = 0;
*************** sminloc1_8_s4 (gfc_array_i8 * const rest
*** 476,483 ****
  
    for (n = dim; n < rank; n++)
      {
!       extent[n] =
! 	GFC_DESCRIPTOR_EXTENT(array,n + 1) * string_len;
  
        if (extent[n] <= 0)
  	extent[n] = 0;
--- 476,482 ----
  
    for (n = dim; n < rank; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n + 1);
  
        if (extent[n] <= 0)
  	extent[n] = 0;
diff -Nrcpad gcc-13.3.0/libgfortran/generated/minloc2_16_s1.c gcc-13.4.0/libgfortran/generated/minloc2_16_s1.c
*** gcc-13.3.0/libgfortran/generated/minloc2_16_s1.c	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgfortran/generated/minloc2_16_s1.c	Thu Jun  5 16:03:02 2025
*************** GFC_INTEGER_16
*** 154,161 ****
  sminloc2_16_s1 (gfc_array_s1 * const restrict array,
  				 GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len)
  {
!   if (mask)
!     return minloc2_16_s1 (array, len, back);
    else
      return 0;
  }
--- 154,161 ----
  sminloc2_16_s1 (gfc_array_s1 * const restrict array,
  				 GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len)
  {
!   if (mask == NULL || *mask)
!     return minloc2_16_s1 (array, back, len);
    else
      return 0;
  }
diff -Nrcpad gcc-13.3.0/libgfortran/generated/minloc2_16_s4.c gcc-13.4.0/libgfortran/generated/minloc2_16_s4.c
*** gcc-13.3.0/libgfortran/generated/minloc2_16_s4.c	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgfortran/generated/minloc2_16_s4.c	Thu Jun  5 16:03:02 2025
*************** GFC_INTEGER_16
*** 154,161 ****
  sminloc2_16_s4 (gfc_array_s4 * const restrict array,
  				 GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len)
  {
!   if (mask)
!     return minloc2_16_s4 (array, len, back);
    else
      return 0;
  }
--- 154,161 ----
  sminloc2_16_s4 (gfc_array_s4 * const restrict array,
  				 GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len)
  {
!   if (mask == NULL || *mask)
!     return minloc2_16_s4 (array, back, len);
    else
      return 0;
  }
diff -Nrcpad gcc-13.3.0/libgfortran/generated/minloc2_4_s1.c gcc-13.4.0/libgfortran/generated/minloc2_4_s1.c
*** gcc-13.3.0/libgfortran/generated/minloc2_4_s1.c	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgfortran/generated/minloc2_4_s1.c	Thu Jun  5 16:03:02 2025
*************** GFC_INTEGER_4
*** 154,161 ****
  sminloc2_4_s1 (gfc_array_s1 * const restrict array,
  				 GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len)
  {
!   if (mask)
!     return minloc2_4_s1 (array, len, back);
    else
      return 0;
  }
--- 154,161 ----
  sminloc2_4_s1 (gfc_array_s1 * const restrict array,
  				 GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len)
  {
!   if (mask == NULL || *mask)
!     return minloc2_4_s1 (array, back, len);
    else
      return 0;
  }
diff -Nrcpad gcc-13.3.0/libgfortran/generated/minloc2_4_s4.c gcc-13.4.0/libgfortran/generated/minloc2_4_s4.c
*** gcc-13.3.0/libgfortran/generated/minloc2_4_s4.c	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgfortran/generated/minloc2_4_s4.c	Thu Jun  5 16:03:02 2025
*************** GFC_INTEGER_4
*** 154,161 ****
  sminloc2_4_s4 (gfc_array_s4 * const restrict array,
  				 GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len)
  {
!   if (mask)
!     return minloc2_4_s4 (array, len, back);
    else
      return 0;
  }
--- 154,161 ----
  sminloc2_4_s4 (gfc_array_s4 * const restrict array,
  				 GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len)
  {
!   if (mask == NULL || *mask)
!     return minloc2_4_s4 (array, back, len);
    else
      return 0;
  }
diff -Nrcpad gcc-13.3.0/libgfortran/generated/minloc2_8_s1.c gcc-13.4.0/libgfortran/generated/minloc2_8_s1.c
*** gcc-13.3.0/libgfortran/generated/minloc2_8_s1.c	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgfortran/generated/minloc2_8_s1.c	Thu Jun  5 16:03:02 2025
*************** GFC_INTEGER_8
*** 154,161 ****
  sminloc2_8_s1 (gfc_array_s1 * const restrict array,
  				 GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len)
  {
!   if (mask)
!     return minloc2_8_s1 (array, len, back);
    else
      return 0;
  }
--- 154,161 ----
  sminloc2_8_s1 (gfc_array_s1 * const restrict array,
  				 GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len)
  {
!   if (mask == NULL || *mask)
!     return minloc2_8_s1 (array, back, len);
    else
      return 0;
  }
diff -Nrcpad gcc-13.3.0/libgfortran/generated/minloc2_8_s4.c gcc-13.4.0/libgfortran/generated/minloc2_8_s4.c
*** gcc-13.3.0/libgfortran/generated/minloc2_8_s4.c	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgfortran/generated/minloc2_8_s4.c	Thu Jun  5 16:03:02 2025
*************** GFC_INTEGER_8
*** 154,161 ****
  sminloc2_8_s4 (gfc_array_s4 * const restrict array,
  				 GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len)
  {
!   if (mask)
!     return minloc2_8_s4 (array, len, back);
    else
      return 0;
  }
--- 154,161 ----
  sminloc2_8_s4 (gfc_array_s4 * const restrict array,
  				 GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len)
  {
!   if (mask == NULL || *mask)
!     return minloc2_8_s4 (array, back, len);
    else
      return 0;
  }
diff -Nrcpad gcc-13.3.0/libgfortran/m4/ifindloc2.m4 gcc-13.4.0/libgfortran/m4/ifindloc2.m4
*** gcc-13.3.0/libgfortran/m4/ifindloc2.m4	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgfortran/m4/ifindloc2.m4	Thu Jun  5 16:03:02 2025
*************** see the files COPYING3 and COPYING.RUNTI
*** 41,47 ****
    if (back)
      {
        src = array->base_addr + (extent - 1) * sstride;
!       for (i = extent; i >= 0; i--)
  	{
  	  if ('comparison`'`)
  	    return i;
--- 41,47 ----
    if (back)
      {
        src = array->base_addr + (extent - 1) * sstride;
!       for (i = extent; i > 0; i--)
  	{
  	  if ('comparison`'`)
  	    return i;
*************** see the files COPYING3 and COPYING.RUNTI
*** 94,100 ****
      {
        src = array->base_addr + (extent - 1) * sstride;
        mbase += (extent - 1) * mstride;
!       for (i = extent; i >= 0; i--)
  	{
  	  if (*mbase && ('comparison`'`))
  	    return i;
--- 94,100 ----
      {
        src = array->base_addr + (extent - 1) * sstride;
        mbase += (extent - 1) * mstride;
!       for (i = extent; i > 0; i--)
  	{
  	  if (*mbase && ('comparison`'`))
  	    return i;
diff -Nrcpad gcc-13.3.0/libgfortran/m4/ifunction-s.m4 gcc-13.4.0/libgfortran/m4/ifunction-s.m4
*** gcc-13.3.0/libgfortran/m4/ifunction-s.m4	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgfortran/m4/ifunction-s.m4	Thu Jun  5 16:03:02 2025
*************** s'name`'rtype_qual`_'atype_code` ('rtype
*** 432,438 ****
  
    for (n = 0; n < dim; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n) * string_len;
  
        if (extent[n] <= 0)
  	extent[n] = 0;
--- 432,438 ----
  
    for (n = 0; n < dim; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
  
        if (extent[n] <= 0)
  	extent[n] = 0;
*************** s'name`'rtype_qual`_'atype_code` ('rtype
*** 440,447 ****
  
    for (n = dim; n < rank; n++)
      {
!       extent[n] =
! 	GFC_DESCRIPTOR_EXTENT(array,n + 1) * string_len;
  
        if (extent[n] <= 0)
  	extent[n] = 0;
--- 440,446 ----
  
    for (n = dim; n < rank; n++)
      {
!       extent[n] = GFC_DESCRIPTOR_EXTENT(array,n + 1);
  
        if (extent[n] <= 0)
  	extent[n] = 0;
diff -Nrcpad gcc-13.3.0/libgfortran/m4/maxloc2s.m4 gcc-13.4.0/libgfortran/m4/maxloc2s.m4
*** gcc-13.3.0/libgfortran/m4/maxloc2s.m4	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgfortran/m4/maxloc2s.m4	Thu Jun  5 16:03:02 2025
*************** export_proto(s'name`'rtype_qual`_'atype_
*** 153,160 ****
  s'name`'rtype_qual`_'atype_code` ('atype` * const restrict array,
  				 GFC_LOGICAL_4 *mask'back_arg`, gfc_charlen_type len)
  {
!   if (mask)
!     return 'name`'rtype_qual`_'atype_code` (array, len, back);
    else
      return 0;
  }
--- 153,160 ----
  s'name`'rtype_qual`_'atype_code` ('atype` * const restrict array,
  				 GFC_LOGICAL_4 *mask'back_arg`, gfc_charlen_type len)
  {
!   if (mask == NULL || *mask)
!     return 'name`'rtype_qual`_'atype_code` (array, back, len);
    else
      return 0;
  }
diff -Nrcpad gcc-13.3.0/libgfortran/m4/minloc2s.m4 gcc-13.4.0/libgfortran/m4/minloc2s.m4
*** gcc-13.3.0/libgfortran/m4/minloc2s.m4	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgfortran/m4/minloc2s.m4	Thu Jun  5 16:03:02 2025
*************** export_proto(s'name`'rtype_qual`_'atype_
*** 155,162 ****
  s'name`'rtype_qual`_'atype_code` ('atype` * const restrict array,
  				 GFC_LOGICAL_4 *mask'back_arg`, gfc_charlen_type len)
  {
!   if (mask)
!     return 'name`'rtype_qual`_'atype_code` (array, len, back);
    else
      return 0;
  }
--- 155,162 ----
  s'name`'rtype_qual`_'atype_code` ('atype` * const restrict array,
  				 GFC_LOGICAL_4 *mask'back_arg`, gfc_charlen_type len)
  {
!   if (mask == NULL || *mask)
!     return 'name`'rtype_qual`_'atype_code` (array, back, len);
    else
      return 0;
  }
diff -Nrcpad gcc-13.3.0/libgm2/ChangeLog gcc-13.4.0/libgm2/ChangeLog
*** gcc-13.3.0/libgm2/ChangeLog	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgm2/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/libgo/go/crypto/tls/handshake_client_test.go gcc-13.4.0/libgo/go/crypto/tls/handshake_client_test.go
*** gcc-13.3.0/libgo/go/crypto/tls/handshake_client_test.go	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgo/go/crypto/tls/handshake_client_test.go	Thu Jun  5 16:03:02 2025
*************** func testResumption(t *testing.T, versio
*** 881,886 ****
--- 881,887 ----
  		MaxVersion:   version,
  		CipherSuites: []uint16{TLS_RSA_WITH_RC4_128_SHA, TLS_ECDHE_RSA_WITH_RC4_128_SHA},
  		Certificates: testConfig.Certificates,
+ 		Time:         testTime,
  	}
  
  	issuer, err := x509.ParseCertificate(testRSACertificateIssuer)
*************** func testResumption(t *testing.T, versio
*** 897,902 ****
--- 898,904 ----
  		ClientSessionCache: NewLRUClientSessionCache(32),
  		RootCAs:            rootCAs,
  		ServerName:         "example.golang",
+ 		Time:               testTime,
  	}
  
  	testResumeState := func(test string, didResume bool) {
*************** func testResumption(t *testing.T, versio
*** 944,963 ****
  	}
  
  	// An old session ticket can resume, but the server will provide a ticket encrypted with a fresh key.
! 	serverConfig.Time = func() time.Time { return time.Now().Add(24*time.Hour + time.Minute) }
  	testResumeState("ResumeWithOldTicket", true)
  	if bytes.Equal(ticket[:ticketKeyNameLen], getTicket()[:ticketKeyNameLen]) {
  		t.Fatal("old first ticket matches the fresh one")
  	}
  
  	// Now the session tickey key is expired, so a full handshake should occur.
! 	serverConfig.Time = func() time.Time { return time.Now().Add(24*8*time.Hour + time.Minute) }
  	testResumeState("ResumeWithExpiredTicket", false)
  	if bytes.Equal(ticket, getTicket()) {
  		t.Fatal("expired first ticket matches the fresh one")
  	}
  
! 	serverConfig.Time = func() time.Time { return time.Now() } // reset the time back
  	key1 := randomKey()
  	serverConfig.SetSessionTicketKeys([][32]byte{key1})
  
--- 946,965 ----
  	}
  
  	// An old session ticket can resume, but the server will provide a ticket encrypted with a fresh key.
! 	serverConfig.Time = func() time.Time { return testTime().Add(24*time.Hour + time.Minute) }
  	testResumeState("ResumeWithOldTicket", true)
  	if bytes.Equal(ticket[:ticketKeyNameLen], getTicket()[:ticketKeyNameLen]) {
  		t.Fatal("old first ticket matches the fresh one")
  	}
  
  	// Now the session tickey key is expired, so a full handshake should occur.
! 	serverConfig.Time = func() time.Time { return testTime().Add(24*8*time.Hour + time.Minute) }
  	testResumeState("ResumeWithExpiredTicket", false)
  	if bytes.Equal(ticket, getTicket()) {
  		t.Fatal("expired first ticket matches the fresh one")
  	}
  
! 	serverConfig.Time = func() time.Time { return testTime() } // reset the time back
  	key1 := randomKey()
  	serverConfig.SetSessionTicketKeys([][32]byte{key1})
  
*************** func testResumption(t *testing.T, versio
*** 974,984 ****
  	testResumeState("KeyChangeFinish", true)
  
  	// Age the session ticket a bit, but not yet expired.
! 	serverConfig.Time = func() time.Time { return time.Now().Add(24*time.Hour + time.Minute) }
  	testResumeState("OldSessionTicket", true)
  	ticket = getTicket()
  	// Expire the session ticket, which would force a full handshake.
! 	serverConfig.Time = func() time.Time { return time.Now().Add(24*8*time.Hour + time.Minute) }
  	testResumeState("ExpiredSessionTicket", false)
  	if bytes.Equal(ticket, getTicket()) {
  		t.Fatal("new ticket wasn't provided after old ticket expired")
--- 976,986 ----
  	testResumeState("KeyChangeFinish", true)
  
  	// Age the session ticket a bit, but not yet expired.
! 	serverConfig.Time = func() time.Time { return testTime().Add(24*time.Hour + time.Minute) }
  	testResumeState("OldSessionTicket", true)
  	ticket = getTicket()
  	// Expire the session ticket, which would force a full handshake.
! 	serverConfig.Time = func() time.Time { return testTime().Add(24*8*time.Hour + 2*time.Minute) }
  	testResumeState("ExpiredSessionTicket", false)
  	if bytes.Equal(ticket, getTicket()) {
  		t.Fatal("new ticket wasn't provided after old ticket expired")
*************** func testResumption(t *testing.T, versio
*** 988,994 ****
  	d := 0 * time.Hour
  	for i := 0; i < 13; i++ {
  		d += 12 * time.Hour
! 		serverConfig.Time = func() time.Time { return time.Now().Add(d) }
  		testResumeState("OldSessionTicket", true)
  	}
  	// Expire it (now a little more than 7 days) and make sure a full
--- 990,996 ----
  	d := 0 * time.Hour
  	for i := 0; i < 13; i++ {
  		d += 12 * time.Hour
! 		serverConfig.Time = func() time.Time { return testTime().Add(d) }
  		testResumeState("OldSessionTicket", true)
  	}
  	// Expire it (now a little more than 7 days) and make sure a full
*************** func testResumption(t *testing.T, versio
*** 996,1002 ****
  	// TLS 1.3 since the client should be using a fresh ticket sent over
  	// by the server.
  	d += 12 * time.Hour
! 	serverConfig.Time = func() time.Time { return time.Now().Add(d) }
  	if version == VersionTLS13 {
  		testResumeState("ExpiredSessionTicket", true)
  	} else {
--- 998,1004 ----
  	// TLS 1.3 since the client should be using a fresh ticket sent over
  	// by the server.
  	d += 12 * time.Hour
! 	serverConfig.Time = func() time.Time { return testTime().Add(d) }
  	if version == VersionTLS13 {
  		testResumeState("ExpiredSessionTicket", true)
  	} else {
*************** func testResumption(t *testing.T, versio
*** 1012,1017 ****
--- 1014,1020 ----
  		MaxVersion:   version,
  		CipherSuites: []uint16{TLS_RSA_WITH_RC4_128_SHA, TLS_ECDHE_RSA_WITH_RC4_128_SHA},
  		Certificates: testConfig.Certificates,
+ 		Time:         testTime,
  	}
  	serverConfig.SetSessionTicketKeys([][32]byte{key2})
  
*************** func testVerifyConnection(t *testing.T,
*** 1698,1703 ****
--- 1701,1707 ----
  		serverConfig := &Config{
  			MaxVersion:   version,
  			Certificates: []Certificate{testConfig.Certificates[0]},
+ 			Time:         testTime,
  			ClientCAs:    rootCAs,
  			NextProtos:   []string{"protocol1"},
  		}
*************** func testVerifyConnection(t *testing.T,
*** 1711,1716 ****
--- 1715,1721 ----
  			RootCAs:            rootCAs,
  			ServerName:         "example.golang",
  			Certificates:       []Certificate{testConfig.Certificates[0]},
+ 			Time:               testTime,
  			NextProtos:         []string{"protocol1"},
  		}
  		test.configureClient(clientConfig, &clientCalled)
*************** func testVerifyPeerCertificate(t *testin
*** 1753,1760 ****
  	rootCAs := x509.NewCertPool()
  	rootCAs.AddCert(issuer)
  
- 	now := func() time.Time { return time.Unix(1476984729, 0) }
- 
  	sentinelErr := errors.New("TestVerifyPeerCertificate")
  
  	verifyPeerCertificateCallback := func(called *bool, rawCerts [][]byte, validatedChains [][]*x509.Certificate) error {
--- 1758,1763 ----
*************** func testVerifyPeerCertificate(t *testin
*** 2000,2006 ****
  			config.ServerName = "example.golang"
  			config.ClientAuth = RequireAndVerifyClientCert
  			config.ClientCAs = rootCAs
! 			config.Time = now
  			config.MaxVersion = version
  			config.Certificates = make([]Certificate, 1)
  			config.Certificates[0].Certificate = [][]byte{testRSACertificate}
--- 2003,2009 ----
  			config.ServerName = "example.golang"
  			config.ClientAuth = RequireAndVerifyClientCert
  			config.ClientCAs = rootCAs
! 			config.Time = testTime
  			config.MaxVersion = version
  			config.Certificates = make([]Certificate, 1)
  			config.Certificates[0].Certificate = [][]byte{testRSACertificate}
*************** func testVerifyPeerCertificate(t *testin
*** 2017,2023 ****
  		config := testConfig.Clone()
  		config.ServerName = "example.golang"
  		config.RootCAs = rootCAs
! 		config.Time = now
  		config.MaxVersion = version
  		test.configureClient(config, &clientCalled)
  		clientErr := Client(c, config).Handshake()
--- 2020,2026 ----
  		config := testConfig.Clone()
  		config.ServerName = "example.golang"
  		config.RootCAs = rootCAs
! 		config.Time = testTime
  		config.MaxVersion = version
  		test.configureClient(config, &clientCalled)
  		clientErr := Client(c, config).Handshake()
*************** func testGetClientCertificate(t *testing
*** 2330,2336 ****
  		serverConfig.RootCAs = x509.NewCertPool()
  		serverConfig.RootCAs.AddCert(issuer)
  		serverConfig.ClientCAs = serverConfig.RootCAs
! 		serverConfig.Time = func() time.Time { return time.Unix(1476984729, 0) }
  		serverConfig.MaxVersion = version
  
  		clientConfig := testConfig.Clone()
--- 2333,2339 ----
  		serverConfig.RootCAs = x509.NewCertPool()
  		serverConfig.RootCAs.AddCert(issuer)
  		serverConfig.ClientCAs = serverConfig.RootCAs
! 		serverConfig.Time = testTime
  		serverConfig.MaxVersion = version
  
  		clientConfig := testConfig.Clone()
*************** func testResumptionKeepsOCSPAndSCT(t *te
*** 2501,2506 ****
--- 2504,2510 ----
  		ClientSessionCache: NewLRUClientSessionCache(32),
  		ServerName:         "example.golang",
  		RootCAs:            roots,
+ 		Time:               testTime,
  	}
  	serverConfig := testConfig.Clone()
  	serverConfig.MaxVersion = ver
diff -Nrcpad gcc-13.3.0/libgo/go/crypto/tls/handshake_server_test.go gcc-13.4.0/libgo/go/crypto/tls/handshake_server_test.go
*** gcc-13.3.0/libgo/go/crypto/tls/handshake_server_test.go	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgo/go/crypto/tls/handshake_server_test.go	Thu Jun  5 16:03:02 2025
*************** func testCrossVersionResume(t *testing.T
*** 483,488 ****
--- 483,489 ----
  	serverConfig := &Config{
  		CipherSuites: []uint16{TLS_RSA_WITH_AES_128_CBC_SHA},
  		Certificates: testConfig.Certificates,
+ 		Time:         testTime,
  	}
  	clientConfig := &Config{
  		CipherSuites:       []uint16{TLS_RSA_WITH_AES_128_CBC_SHA},
*************** func testCrossVersionResume(t *testing.T
*** 490,495 ****
--- 491,497 ----
  		ClientSessionCache: NewLRUClientSessionCache(1),
  		ServerName:         "servername",
  		MinVersion:         VersionTLS10,
+ 		Time:               testTime,
  	}
  
  	// Establish a session at TLS 1.1.
diff -Nrcpad gcc-13.3.0/libgo/go/crypto/tls/handshake_test.go gcc-13.4.0/libgo/go/crypto/tls/handshake_test.go
*** gcc-13.3.0/libgo/go/crypto/tls/handshake_test.go	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgo/go/crypto/tls/handshake_test.go	Thu Jun  5 16:03:02 2025
*************** func fromHex(s string) []byte {
*** 429,434 ****
--- 429,439 ----
  	return b
  }
  
+ // testTime is 2016-10-20T17:32:09.000Z, which is within the validity period of
+ // [testRSACertificate], [testRSACertificateIssuer], [testRSA2048Certificate],
+ // [testRSA2048CertificateIssuer], and [testECDSACertificate].
+ var testTime = func() time.Time { return time.Unix(1476984729, 0) }
+ 
  var testRSACertificate = fromHex(" ")
  
  var testRSACertificateIssuer = fromHex(" ")
diff -Nrcpad gcc-13.3.0/libgo/go/crypto/tls/tls_test.go gcc-13.4.0/libgo/go/crypto/tls/tls_test.go
*** gcc-13.3.0/libgo/go/crypto/tls/tls_test.go	Tue May 21 07:47:41 2024
--- gcc-13.4.0/libgo/go/crypto/tls/tls_test.go	Thu Jun  5 16:03:02 2025
*************** func TestConnectionState(t *testing.T) {
*** 1058,1065 ****
  	rootCAs := x509.NewCertPool()
  	rootCAs.AddCert(issuer)
  
- 	now := func() time.Time { return time.Unix(1476984729, 0) }
- 
  	const alpnProtocol = "golang"
  	const serverName = "example.golang"
  	var scts = [][]byte{[]byte("dummy sct 1"), []byte("dummy sct 2")}
--- 1058,1063 ----
*************** func TestConnectionState(t *testing.T) {
*** 1075,1081 ****
  		}
  		t.Run(name, func(t *testing.T) {
  			config := &Config{
! 				Time:         now,
  				Rand:         zeroSource{},
  				Certificates: make([]Certificate, 1),
  				MaxVersion:   v,
--- 1073,1079 ----
  		}
  		t.Run(name, func(t *testing.T) {
  			config := &Config{
! 				Time:         testTime,
  				Rand:         zeroSource{},
  				Certificates: make([]Certificate, 1),
  				MaxVersion:   v,
diff -Nrcpad gcc-13.3.0/libgomp/ChangeLog gcc-13.4.0/libgomp/ChangeLog
*** gcc-13.3.0/libgomp/ChangeLog	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libgomp/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,16 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
+ 2024-08-05  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-07-19  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	* testsuite/libgomp.oacc-fortran/privatized-ref-2.f90: Cut
+ 	dg-note about 'a' and remove bogus warnings about its array
+ 	descriptor components being used uninitialized.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/libgomp/testsuite/libgomp.oacc-fortran/privatized-ref-2.f90 gcc-13.4.0/libgomp/testsuite/libgomp.oacc-fortran/privatized-ref-2.f90
*** gcc-13.3.0/libgomp/testsuite/libgomp.oacc-fortran/privatized-ref-2.f90	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libgomp/testsuite/libgomp.oacc-fortran/privatized-ref-2.f90	Thu Jun  5 16:03:02 2025
*************** program main
*** 29,44 ****
    implicit none (type, external)
    integer :: j
    integer, allocatable :: A(:)
-   ! { dg-note {'a' declared here} {} { target *-*-* } .-1 }
    character(len=:), allocatable :: my_str
    character(len=15), allocatable :: my_str15
  
    A = [(3*j, j=1, 10)]
-   ! { dg-bogus {'a\.offset' is used uninitialized} {PR77504 etc.} { xfail *-*-* } .-1 }
-   ! { dg-bogus {'a\.dim\[0\]\.lbound' is used uninitialized} {PR77504 etc.} { xfail *-*-* } .-2 }
-   ! { dg-bogus {'a\.dim\[0\]\.ubound' is used uninitialized} {PR77504 etc.} { xfail *-*-* } .-3 }
-   ! { dg-bogus {'a\.dim\[0\]\.lbound' may be used uninitialized} {PR77504 etc.} { xfail { ! __OPTIMIZE__ } } .-4 }
-   ! { dg-bogus {'a\.dim\[0\]\.ubound' may be used uninitialized} {PR77504 etc.} { xfail { ! __OPTIMIZE__ } } .-5 }
    call foo (A, size(A))
    call bar (A)
    my_str = "1234567890"
--- 29,38 ----
diff -Nrcpad gcc-13.3.0/libiberty/ChangeLog gcc-13.4.0/libiberty/ChangeLog
*** gcc-13.3.0/libiberty/ChangeLog	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libiberty/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,31 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
+ 2024-09-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-09-07  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR lto/116614
+ 	* simple-object-elf.c (SHN_COMMON): Align comment with neighbouring
+ 	comments.
+ 	(SHN_HIRESERVE): Use uppercase hex digits instead of lowercase for
+ 	consistency.
+ 	(simple_object_elf_find_sections): Formatting fixes.
+ 	(simple_object_elf_fetch_attributes): Likewise.
+ 	(simple_object_elf_attributes_merge): Likewise.
+ 	(simple_object_elf_start_write): Likewise.
+ 	(simple_object_elf_write_ehdr): Likewise.
+ 	(simple_object_elf_write_shdr): Likewise.
+ 	(simple_object_elf_write_to_file): Likewise.
+ 	(simple_object_elf_copy_lto_debug_section): Likewise.  Don't fail for
+ 	new_i - 1 >= SHN_LORESERVE, instead arrange in that case to copy
+ 	over .symtab_shndx sections, though emit those last and compute their
+ 	section content when processing associated .symtab sections.  Handle
+ 	simple_object_internal_read failure even in the .symtab_shndx reading
+ 	case.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/libiberty/simple-object-elf.c gcc-13.4.0/libiberty/simple-object-elf.c
*** gcc-13.3.0/libiberty/simple-object-elf.c	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libiberty/simple-object-elf.c	Thu Jun  5 16:03:02 2025
*************** typedef struct {
*** 128,136 ****
  
  #define SHN_UNDEF	0		/* Undefined section */
  #define SHN_LORESERVE	0xFF00		/* Begin range of reserved indices */
! #define SHN_COMMON	0xFFF2	/* Associated symbol is in common */
  #define SHN_XINDEX	0xFFFF		/* Section index is held elsewhere */
! #define SHN_HIRESERVE	0xffff		/* End of reserved indices */
  
  
  /* 32-bit ELF program header.  */
--- 128,136 ----
  
  #define SHN_UNDEF	0		/* Undefined section */
  #define SHN_LORESERVE	0xFF00		/* Begin range of reserved indices */
! #define SHN_COMMON	0xFFF2		/* Associated symbol is in common */
  #define SHN_XINDEX	0xFFFF		/* Section index is held elsewhere */
! #define SHN_HIRESERVE	0xFFFF		/* End of reserved indices */
  
  
  /* 32-bit ELF program header.  */
*************** simple_object_elf_find_sections (simple_
*** 569,576 ****
  				 void *data,
  				 int *err)
  {
!   struct simple_object_elf_read *eor =
!     (struct simple_object_elf_read *) sobj->data;
    const struct elf_type_functions *type_functions = eor->type_functions;
    unsigned char ei_class = eor->ei_class;
    size_t shdr_size;
--- 569,576 ----
  				 void *data,
  				 int *err)
  {
!   struct simple_object_elf_read *eor
!     = (struct simple_object_elf_read *) sobj->data;
    const struct elf_type_functions *type_functions = eor->type_functions;
    unsigned char ei_class = eor->ei_class;
    size_t shdr_size;
*************** simple_object_elf_fetch_attributes (simp
*** 662,669 ****
  				    const char **errmsg ATTRIBUTE_UNUSED,
  				    int *err ATTRIBUTE_UNUSED)
  {
!   struct simple_object_elf_read *eor =
!     (struct simple_object_elf_read *) sobj->data;
    struct simple_object_elf_attributes *ret;
  
    ret = XNEW (struct simple_object_elf_attributes);
--- 662,669 ----
  				    const char **errmsg ATTRIBUTE_UNUSED,
  				    int *err ATTRIBUTE_UNUSED)
  {
!   struct simple_object_elf_read *eor
!     = (struct simple_object_elf_read *) sobj->data;
    struct simple_object_elf_attributes *ret;
  
    ret = XNEW (struct simple_object_elf_attributes);
*************** simple_object_elf_release_read (void *da
*** 689,698 ****
  static const char *
  simple_object_elf_attributes_merge (void *todata, void *fromdata, int *err)
  {
!   struct simple_object_elf_attributes *to =
!     (struct simple_object_elf_attributes *) todata;
!   struct simple_object_elf_attributes *from =
!     (struct simple_object_elf_attributes *) fromdata;
  
    if (to->ei_data != from->ei_data || to->ei_class != from->ei_class)
      {
--- 689,698 ----
  static const char *
  simple_object_elf_attributes_merge (void *todata, void *fromdata, int *err)
  {
!   struct simple_object_elf_attributes *to
!     = (struct simple_object_elf_attributes *) todata;
!   struct simple_object_elf_attributes *from
!     = (struct simple_object_elf_attributes *) fromdata;
  
    if (to->ei_data != from->ei_data || to->ei_class != from->ei_class)
      {
*************** simple_object_elf_start_write (void *att
*** 751,758 ****
  			       const char **errmsg ATTRIBUTE_UNUSED,
  			       int *err ATTRIBUTE_UNUSED)
  {
!   struct simple_object_elf_attributes *attrs =
!     (struct simple_object_elf_attributes *) attributes_data;
    struct simple_object_elf_write *ret;
  
    /* We're just going to record the attributes, but we need to make a
--- 751,758 ----
  			       const char **errmsg ATTRIBUTE_UNUSED,
  			       int *err ATTRIBUTE_UNUSED)
  {
!   struct simple_object_elf_attributes *attrs
!     = (struct simple_object_elf_attributes *) attributes_data;
    struct simple_object_elf_write *ret;
  
    /* We're just going to record the attributes, but we need to make a
*************** static int
*** 769,776 ****
  simple_object_elf_write_ehdr (simple_object_write *sobj, int descriptor,
  			      const char **errmsg, int *err)
  {
!   struct simple_object_elf_attributes *attrs =
!     (struct simple_object_elf_attributes *) sobj->data;
    const struct elf_type_functions* fns;
    unsigned char cl;
    size_t ehdr_size;
--- 769,776 ----
  simple_object_elf_write_ehdr (simple_object_write *sobj, int descriptor,
  			      const char **errmsg, int *err)
  {
!   struct simple_object_elf_attributes *attrs
!     = (struct simple_object_elf_attributes *) sobj->data;
    const struct elf_type_functions* fns;
    unsigned char cl;
    size_t ehdr_size;
*************** simple_object_elf_write_shdr (simple_obj
*** 852,859 ****
  			      size_t sh_entsize,
  			      const char **errmsg, int *err)
  {
!   struct simple_object_elf_attributes *attrs =
!     (struct simple_object_elf_attributes *) sobj->data;
    const struct elf_type_functions* fns;
    unsigned char cl;
    size_t shdr_size;
--- 852,859 ----
  			      size_t sh_entsize,
  			      const char **errmsg, int *err)
  {
!   struct simple_object_elf_attributes *attrs
!     = (struct simple_object_elf_attributes *) sobj->data;
    const struct elf_type_functions* fns;
    unsigned char cl;
    size_t shdr_size;
*************** static const char *
*** 894,901 ****
  simple_object_elf_write_to_file (simple_object_write *sobj, int descriptor,
  				 int *err)
  {
!   struct simple_object_elf_write *eow =
!     (struct simple_object_elf_write *) sobj->data;
    struct simple_object_elf_attributes *attrs = &eow->attrs;
    unsigned char cl;
    size_t ehdr_size;
--- 894,901 ----
  simple_object_elf_write_to_file (simple_object_write *sobj, int descriptor,
  				 int *err)
  {
!   struct simple_object_elf_write *eow
!     = (struct simple_object_elf_write *) sobj->data;
    struct simple_object_elf_attributes *attrs = &eow->attrs;
    unsigned char cl;
    size_t ehdr_size;
*************** simple_object_elf_copy_lto_debug_section
*** 1088,1098 ****
  					   char *(*pfn) (const char *),
  					   int *err)
  {
!   struct simple_object_elf_read *eor =
!     (struct simple_object_elf_read *) sobj->data;
    const struct elf_type_functions *type_functions = eor->type_functions;
!   struct simple_object_elf_write *eow =
!     (struct simple_object_elf_write *) dobj->data;
    unsigned char ei_class = eor->ei_class;
    size_t shdr_size;
    unsigned int shnum;
--- 1088,1098 ----
  					   char *(*pfn) (const char *),
  					   int *err)
  {
!   struct simple_object_elf_read *eor
!     = (struct simple_object_elf_read *) sobj->data;
    const struct elf_type_functions *type_functions = eor->type_functions;
!   struct simple_object_elf_write *eow
!     = (struct simple_object_elf_write *) dobj->data;
    unsigned char ei_class = eor->ei_class;
    size_t shdr_size;
    unsigned int shnum;
*************** simple_object_elf_copy_lto_debug_section
*** 1106,1115 ****
    int changed;
    int *pfnret;
    const char **pfnname;
!   unsigned new_i;
    unsigned *sh_map;
    unsigned first_shndx = 0;
    unsigned int *symtab_indices_shndx;
  
    shdr_size = (ei_class == ELFCLASS32
  	       ? sizeof (Elf32_External_Shdr)
--- 1106,1118 ----
    int changed;
    int *pfnret;
    const char **pfnname;
!   unsigned new_i, new_count;
    unsigned *sh_map;
    unsigned first_shndx = 0;
    unsigned int *symtab_indices_shndx;
+   int pass_symtab_indices_shndx;
+   unsigned int first_symtab_indices_shndx;
+   unsigned char **symtab_indices_shndx_buf;
  
    shdr_size = (ei_class == ELFCLASS32
  	       ? sizeof (Elf32_External_Shdr)
*************** simple_object_elf_copy_lto_debug_section
*** 1179,1186 ****
        ret = (*pfn) (name);
        pfnret[i - 1] = ret == NULL ? -1 : 0;
        pfnname[i - 1] = ret == NULL ? name : ret;
!       if (first_shndx == 0
! 	  && pfnret[i - 1] == 0)
  	first_shndx = i;
  
        /* Remember the indexes of existing SHT_SYMTAB_SHNDX sections.  */
--- 1182,1188 ----
        ret = (*pfn) (name);
        pfnret[i - 1] = ret == NULL ? -1 : 0;
        pfnname[i - 1] = ret == NULL ? name : ret;
!       if (first_shndx == 0 && pfnret[i - 1] == 0)
  	first_shndx = i;
  
        /* Remember the indexes of existing SHT_SYMTAB_SHNDX sections.  */
*************** simple_object_elf_copy_lto_debug_section
*** 1191,1201 ****
  	  unsigned int sh_link;
  	  sh_link = ELF_FETCH_FIELD (type_functions, ei_class, Shdr,
  				     shdr, sh_link, Elf_Word);
! 	  symtab_indices_shndx[sh_link - 1] = i - 1;
! 	  /* Always discard the extended index sections, after
! 	     copying it will not be needed.  This way we don't need to
! 	     update it and deal with the ordering constraints of
! 	     processing the existing symtab and changing the index.  */
  	  pfnret[i - 1] = -1;
  	}
      }
--- 1193,1204 ----
  	  unsigned int sh_link;
  	  sh_link = ELF_FETCH_FIELD (type_functions, ei_class, Shdr,
  				     shdr, sh_link, Elf_Word);
! 	  symtab_indices_shndx[sh_link - 1] = i;
! 	  /* Discard the extended index sections, after copying it will not
! 	     be needed, unless we need more than SHN_LORESERVE - 1 sections
! 	     in the output.  This way we don't need to update it and deal with
! 	     the ordering constraints of processing the existing symtab and
! 	     changing the index.  */
  	  pfnret[i - 1] = -1;
  	}
      }
*************** simple_object_elf_copy_lto_debug_section
*** 1291,1306 ****
        else
  	sh_map[i] = new_i++;
      }
    if (new_i - 1 >= SHN_LORESERVE)
!     {
!       *err = ENOTSUP;
!       return "Too many copied sections";
!     }
!   eow->shdrs = XNEWVEC (unsigned char, shdr_size * (new_i - 1));
  
    /* Then perform the actual copying.  */
    new_i = 0;
!   for (i = 1; i < shnum; ++i)
      {
        unsigned char *shdr;
        unsigned int sh_name, sh_type;
--- 1294,1318 ----
        else
  	sh_map[i] = new_i++;
      }
+   first_symtab_indices_shndx = new_i;
+   symtab_indices_shndx_buf = NULL;
    if (new_i - 1 >= SHN_LORESERVE)
!     for (i = 1; i < shnum; ++i)
!       if (pfnret[i - 1] == 0 && symtab_indices_shndx[i - 1] != 0)
! 	{
! 	  pfnret[symtab_indices_shndx[i - 1] - 1] = 0;
! 	  sh_map[symtab_indices_shndx[i - 1]] = new_i++;
! 	}
!   new_count = new_i;
!   if (new_count != first_symtab_indices_shndx)
!     symtab_indices_shndx_buf
!       = XNEWVEC (unsigned char *, new_count - first_symtab_indices_shndx);
!   eow->shdrs = XNEWVEC (unsigned char, shdr_size * (new_count - 1));
  
    /* Then perform the actual copying.  */
    new_i = 0;
!   pass_symtab_indices_shndx = 0;
!   for (i = 1; i <= shnum; ++i)
      {
        unsigned char *shdr;
        unsigned int sh_name, sh_type;
*************** simple_object_elf_copy_lto_debug_section
*** 1311,1321 ****
        off_t flags;
        unsigned char *buf;
  
        if (pfnret[i - 1])
  	continue;
  
-       new_i++;
        shdr = shdrs + (i - 1) * shdr_size;
        sh_name = ELF_FETCH_FIELD (type_functions, ei_class, Shdr,
  				 shdr, sh_name, Elf_Word);
        if (sh_name >= name_size)
--- 1323,1352 ----
        off_t flags;
        unsigned char *buf;
  
+       if (i == shnum)
+ 	{
+ 	  if (new_count - 1 < SHN_LORESERVE || pass_symtab_indices_shndx)
+ 	    break;
+ 	  i = 0;
+ 	  pass_symtab_indices_shndx = 1;
+ 	  continue;
+ 	}
+ 
        if (pfnret[i - 1])
  	continue;
  
        shdr = shdrs + (i - 1) * shdr_size;
+       sh_type = ELF_FETCH_FIELD (type_functions, ei_class, Shdr,
+ 				 shdr, sh_type, Elf_Word);
+       if (sh_type == SHT_SYMTAB_SHNDX)
+ 	{
+ 	  if (!pass_symtab_indices_shndx)
+ 	    continue;
+ 	}
+       else if (pass_symtab_indices_shndx)
+ 	continue;
+ 
+       new_i++;
        sh_name = ELF_FETCH_FIELD (type_functions, ei_class, Shdr,
  				 shdr, sh_name, Elf_Word);
        if (sh_name >= name_size)
*************** simple_object_elf_copy_lto_debug_section
*** 1324,1329 ****
--- 1355,1361 ----
  	  XDELETEVEC (names);
  	  XDELETEVEC (shdrs);
  	  XDELETEVEC (symtab_indices_shndx);
+ 	  XDELETEVEC (symtab_indices_shndx_buf);
  	  return "ELF section name out of range";
  	}
  
*************** simple_object_elf_copy_lto_debug_section
*** 1332,1347 ****
  				shdr, sh_offset, Elf_Addr);
        length = ELF_FETCH_FIELD (type_functions, ei_class, Shdr,
  				shdr, sh_size, Elf_Addr);
-       sh_type = ELF_FETCH_FIELD (type_functions, ei_class, Shdr,
- 				 shdr, sh_type, Elf_Word);
  
!       dest = simple_object_write_create_section (dobj, pfnname[i - 1],
! 						 0, &errmsg, err);
        if (dest == NULL)
  	{
  	  XDELETEVEC (names);
  	  XDELETEVEC (shdrs);
  	  XDELETEVEC (symtab_indices_shndx);
  	  return errmsg;
  	}
  
--- 1364,1377 ----
  				shdr, sh_offset, Elf_Addr);
        length = ELF_FETCH_FIELD (type_functions, ei_class, Shdr,
  				shdr, sh_size, Elf_Addr);
  
!       dest = simple_object_write_create_section (dobj, name, 0, &errmsg, err);
        if (dest == NULL)
  	{
  	  XDELETEVEC (names);
  	  XDELETEVEC (shdrs);
  	  XDELETEVEC (symtab_indices_shndx);
+ 	  XDELETEVEC (symtab_indices_shndx_buf);
  	  return errmsg;
  	}
  
*************** simple_object_elf_copy_lto_debug_section
*** 1363,1368 ****
--- 1393,1399 ----
  	  XDELETEVEC (names);
  	  XDELETEVEC (shdrs);
  	  XDELETEVEC (symtab_indices_shndx);
+ 	  XDELETEVEC (symtab_indices_shndx_buf);
  	  return errmsg;
  	}
  
*************** simple_object_elf_copy_lto_debug_section
*** 1378,1384 ****
  	  /* Read the section index table if present.  */
  	  if (symtab_indices_shndx[i - 1] != 0)
  	    {
! 	      unsigned char *sidxhdr = shdrs + symtab_indices_shndx[i - 1] * shdr_size;
  	      off_t sidxoff = ELF_FETCH_FIELD (type_functions, ei_class, Shdr,
  					       sidxhdr, sh_offset, Elf_Addr);
  	      size_t sidxsz = ELF_FETCH_FIELD (type_functions, ei_class, Shdr,
--- 1409,1416 ----
  	  /* Read the section index table if present.  */
  	  if (symtab_indices_shndx[i - 1] != 0)
  	    {
! 	      unsigned char *sidxhdr
! 		= shdrs + (symtab_indices_shndx[i - 1] - 1) * shdr_size;
  	      off_t sidxoff = ELF_FETCH_FIELD (type_functions, ei_class, Shdr,
  					       sidxhdr, sh_offset, Elf_Addr);
  	      size_t sidxsz = ELF_FETCH_FIELD (type_functions, ei_class, Shdr,
*************** simple_object_elf_copy_lto_debug_section
*** 1388,1398 ****
  				   sidxhdr, sh_type, Elf_Word);
  	      if (shndx_type != SHT_SYMTAB_SHNDX)
  		return "Wrong section type of a SYMTAB SECTION INDICES section";
! 	      shndx_table = (unsigned *)XNEWVEC (char, sidxsz);
! 	      simple_object_internal_read (sobj->descriptor,
! 					   sobj->offset + sidxoff,
! 					   (unsigned char *)shndx_table,
! 					   sidxsz, &errmsg, err);
  	    }
  
  	  /* Find a WEAK HIDDEN symbol which name we will use for removed
--- 1420,1439 ----
  				   sidxhdr, sh_type, Elf_Word);
  	      if (shndx_type != SHT_SYMTAB_SHNDX)
  		return "Wrong section type of a SYMTAB SECTION INDICES section";
! 	      shndx_table = (unsigned *) XNEWVEC (char, sidxsz);
! 	      if (!simple_object_internal_read (sobj->descriptor,
! 						sobj->offset + sidxoff,
! 						(unsigned char *) shndx_table,
! 						sidxsz, &errmsg, err))
! 		{
! 		  XDELETEVEC (buf);
! 		  XDELETEVEC (names);
! 		  XDELETEVEC (shdrs);
! 		  XDELETEVEC (symtab_indices_shndx);
! 		  XDELETEVEC (shndx_table);
! 		  XDELETEVEC (symtab_indices_shndx_buf);
! 		  return errmsg;
! 		}
  	    }
  
  	  /* Find a WEAK HIDDEN symbol which name we will use for removed
*************** simple_object_elf_copy_lto_debug_section
*** 1407,1423 ****
  	      unsigned char *st_other;
  	      if (ei_class == ELFCLASS32)
  		{
! 		  st_info = &((Elf32_External_Sym *)ent)->st_info;
! 		  st_other = &((Elf32_External_Sym *)ent)->st_other;
  		}
  	      else
  		{
! 		  st_info = &((Elf64_External_Sym *)ent)->st_info;
! 		  st_other = &((Elf64_External_Sym *)ent)->st_other;
  		}
  	      if (st_shndx == SHN_XINDEX)
! 		st_shndx = type_functions->fetch_Elf_Word
! 		    ((unsigned char *)(shndx_table + (ent - buf) / entsize));
  
  	      if (st_shndx != SHN_COMMON
  		  && !(st_shndx != SHN_UNDEF
--- 1448,1467 ----
  	      unsigned char *st_other;
  	      if (ei_class == ELFCLASS32)
  		{
! 		  st_info = &((Elf32_External_Sym *) ent)->st_info;
! 		  st_other = &((Elf32_External_Sym *) ent)->st_other;
  		}
  	      else
  		{
! 		  st_info = &((Elf64_External_Sym *) ent)->st_info;
! 		  st_other = &((Elf64_External_Sym *) ent)->st_other;
  		}
  	      if (st_shndx == SHN_XINDEX)
! 		{
! 		  unsigned char *ndx_ptr
! 		    = (unsigned char *) (shndx_table + (ent - buf) / entsize);
! 		  st_shndx = type_functions->fetch_Elf_Word (ndx_ptr);
! 		}
  
  	      if (st_shndx != SHN_COMMON
  		  && !(st_shndx != SHN_UNDEF
*************** simple_object_elf_copy_lto_debug_section
*** 1442,1460 ****
  	      unsigned char *st_info;
  	      unsigned char *st_other;
  	      int discard = 0;
  	      if (ei_class == ELFCLASS32)
  		{
! 		  st_info = &((Elf32_External_Sym *)ent)->st_info;
! 		  st_other = &((Elf32_External_Sym *)ent)->st_other;
  		}
  	      else
  		{
! 		  st_info = &((Elf64_External_Sym *)ent)->st_info;
! 		  st_other = &((Elf64_External_Sym *)ent)->st_other;
  		}
  	      if (st_shndx == SHN_XINDEX)
! 		st_shndx = type_functions->fetch_Elf_Word
! 		    ((unsigned char *)(shndx_table + (ent - buf) / entsize));
  	      /* Eliminate all COMMONs - this includes __gnu_lto_slim
  		 which otherwise cause endless LTO plugin invocation.
  		 FIXME: remove the condition once we remove emission
--- 1486,1511 ----
  	      unsigned char *st_info;
  	      unsigned char *st_other;
  	      int discard = 0;
+ 	      unsigned char *ndx_ptr = NULL;
  	      if (ei_class == ELFCLASS32)
  		{
! 		  st_info = &((Elf32_External_Sym *) ent)->st_info;
! 		  st_other = &((Elf32_External_Sym *) ent)->st_other;
  		}
  	      else
  		{
! 		  st_info = &((Elf64_External_Sym *) ent)->st_info;
! 		  st_other = &((Elf64_External_Sym *) ent)->st_other;
  		}
+ 	      if (shndx_table)
+ 		ndx_ptr
+ 		  = (unsigned char *) (shndx_table + (ent - buf) / entsize);
+ 
  	      if (st_shndx == SHN_XINDEX)
! 		{
! 		  st_shndx = type_functions->fetch_Elf_Word (ndx_ptr);
! 		  type_functions->set_Elf_Word (ndx_ptr, SHN_UNDEF);
! 		}
  	      /* Eliminate all COMMONs - this includes __gnu_lto_slim
  		 which otherwise cause endless LTO plugin invocation.
  		 FIXME: remove the condition once we remove emission
*************** simple_object_elf_copy_lto_debug_section
*** 1488,1496 ****
  			 defined in the first prevailing section.  */
  		      ELF_SET_FIELD (type_functions, ei_class, Sym,
  				     ent, st_name, Elf_Word, 0);
  		      ELF_SET_FIELD (type_functions, ei_class, Sym,
! 				     ent, st_shndx, Elf_Half,
! 				     sh_map[first_shndx]);
  		    }
  		  else
  		    {
--- 1539,1552 ----
  			 defined in the first prevailing section.  */
  		      ELF_SET_FIELD (type_functions, ei_class, Sym,
  				     ent, st_name, Elf_Word, 0);
+ 		      st_shndx = sh_map[first_shndx];
+ 		      if (st_shndx >= SHN_LORESERVE)
+ 			{
+ 			  type_functions->set_Elf_Word (ndx_ptr, st_shndx);
+ 			  st_shndx = SHN_XINDEX;
+ 			}
  		      ELF_SET_FIELD (type_functions, ei_class, Sym,
! 				     ent, st_shndx, Elf_Half, st_shndx);
  		    }
  		  else
  		    {
*************** simple_object_elf_copy_lto_debug_section
*** 1514,1524 ****
  		}
  	      else if (raw_st_shndx < SHN_LORESERVE
  		       || raw_st_shndx == SHN_XINDEX)
! 		/* Remap the section reference.  */
! 		ELF_SET_FIELD (type_functions, ei_class, Sym,
! 			       ent, st_shndx, Elf_Half, sh_map[st_shndx]);
  	    }
! 	  XDELETEVEC (shndx_table);
  	}
        else if (sh_type == SHT_GROUP)
  	{
--- 1570,1593 ----
  		}
  	      else if (raw_st_shndx < SHN_LORESERVE
  		       || raw_st_shndx == SHN_XINDEX)
! 		{
! 		  /* Remap the section reference.  */
! 		  st_shndx = sh_map[st_shndx];
! 		  if (st_shndx >= SHN_LORESERVE)
! 		    {
! 		      type_functions->set_Elf_Word (ndx_ptr, st_shndx);
! 		      st_shndx = SHN_XINDEX;
! 		    }
! 		  ELF_SET_FIELD (type_functions, ei_class, Sym,
! 				 ent, st_shndx, Elf_Half, st_shndx);
! 		}
  	    }
! 	  if (symtab_indices_shndx_buf)
! 	    symtab_indices_shndx_buf[sh_map[symtab_indices_shndx[i - 1]]
! 				     - first_symtab_indices_shndx]
! 	      = (unsigned char *) shndx_table;
! 	  else
! 	    XDELETEVEC (shndx_table);
  	}
        else if (sh_type == SHT_GROUP)
  	{
*************** simple_object_elf_copy_lto_debug_section
*** 1538,1552 ****
  	  /* Adjust the length.  */
  	  length = dst - buf;
  	}
  
!       errmsg = simple_object_write_add_data (dobj, dest,
! 					     buf, length, 1, err);
        XDELETEVEC (buf);
        if (errmsg)
  	{
  	  XDELETEVEC (names);
  	  XDELETEVEC (shdrs);
  	  XDELETEVEC (symtab_indices_shndx);
  	  return errmsg;
  	}
  
--- 1607,1627 ----
  	  /* Adjust the length.  */
  	  length = dst - buf;
  	}
+       else if (sh_type == SHT_SYMTAB_SHNDX)
+ 	{
+ 	  XDELETEVEC (buf);
+ 	  buf = symtab_indices_shndx_buf[new_i - first_symtab_indices_shndx];
+ 	  symtab_indices_shndx_buf[new_i - first_symtab_indices_shndx] = NULL;
+ 	}
  
!       errmsg = simple_object_write_add_data (dobj, dest, buf, length, 1, err);
        XDELETEVEC (buf);
        if (errmsg)
  	{
  	  XDELETEVEC (names);
  	  XDELETEVEC (shdrs);
  	  XDELETEVEC (symtab_indices_shndx);
+ 	  XDELETEVEC (symtab_indices_shndx_buf);
  	  return errmsg;
  	}
  
*************** simple_object_elf_copy_lto_debug_section
*** 1586,1591 ****
--- 1661,1667 ----
    XDELETEVEC (pfnname);
    XDELETEVEC (symtab_indices_shndx);
    XDELETEVEC (sh_map);
+   XDELETEVEC (symtab_indices_shndx_buf);
  
    return NULL;
  }
diff -Nrcpad gcc-13.3.0/libitm/ChangeLog gcc-13.4.0/libitm/ChangeLog
*** gcc-13.3.0/libitm/ChangeLog	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libitm/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/libobjc/ChangeLog gcc-13.4.0/libobjc/ChangeLog
*** gcc-13.3.0/libobjc/ChangeLog	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libobjc/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/libphobos/ChangeLog gcc-13.4.0/libphobos/ChangeLog
*** gcc-13.3.0/libphobos/ChangeLog	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libphobos/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/libquadmath/ChangeLog gcc-13.4.0/libquadmath/ChangeLog
*** gcc-13.3.0/libquadmath/ChangeLog	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libquadmath/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,14 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-04-09  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* math/expq.c (C): Fix up THREEp96 constant.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/libquadmath/math/expq.c gcc-13.4.0/libquadmath/math/expq.c
*** gcc-13.3.0/libquadmath/math/expq.c	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libquadmath/math/expq.c	Thu Jun  5 16:03:02 2025
*************** static const __float128 C[] = {
*** 74,80 ****
  
  /* 3x2^96 */
  #define THREEp96 C[2]
!  59421121885698253195157962752.0Q,
  
  /* 3x2^103 */
  #define THREEp103 C[3]
--- 74,80 ----
  
  /* 3x2^96 */
  #define THREEp96 C[2]
!  237684487542793012780631851008.0Q,
  
  /* 3x2^103 */
  #define THREEp103 C[3]
diff -Nrcpad gcc-13.3.0/libsanitizer/ChangeLog gcc-13.4.0/libsanitizer/ChangeLog
*** gcc-13.3.0/libsanitizer/ChangeLog	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libsanitizer/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/libssp/ChangeLog gcc-13.4.0/libssp/ChangeLog
*** gcc-13.3.0/libssp/ChangeLog	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libssp/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/libstdc++-v3/ChangeLog gcc-13.4.0/libstdc++-v3/ChangeLog
*** gcc-13.3.0/libstdc++-v3/ChangeLog	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,1362 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
+ 2025-05-27  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR libstdc++/112490
+ 	* testsuite/24_iterators/const_iterator/112490.cc: Add
+ 	dg-options directive.
+ 
+ 2025-05-27  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-10-29  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR libstdc++/112641
+ 	* include/std/ranges (drop_view::begin): Reimplement const
+ 	overload so that it's O(1) always.
+ 	* testsuite/std/ranges/adaptors/drop.cc (test10): New test.
+ 
+ 2025-05-27  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-04-09  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR libstdc++/115046
+ 	PR libstdc++/112490
+ 	* include/bits/stl_iterator.h (basic_const_iterator::operator-):
+ 	Replace non-dependent basic_const_iterator function parameter with
+ 	a dependent one of type basic_const_iterator<_It2> where _It2
+ 	matches _It.
+ 	* testsuite/std/ranges/adaptors/as_const/1.cc (test04): New test.
+ 
+ 2025-05-27  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-02-28  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR libstdc++/112490
+ 	* include/bits/stl_iterator.h (basic_const_iterator::operator<):
+ 	Replace non-dependent basic_const_iterator function parameter with
+ 	a dependent one of type basic_const_iterator<_It3> where _It3
+ 	matches _It.
+ 	(basic_const_iterator::operator>): Likewise.
+ 	(basic_const_iterator::operator<=): Likewise.
+ 	(basic_const_iterator::operator>=): Likewise.
+ 	* testsuite/24_iterators/const_iterator/112490.cc: New test.
+ 
+ 2025-05-27  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-03-13  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR libstdc++/119135
+ 	* include/std/ranges: Include <utility>.
+ 	(views::__detail::__is_ref_view): Replace with ...
+ 	(views::__detail::__is_constable_ref_view): ... this.
+ 	(views::_AsConst::operator()): Replace bogus use of element_type
+ 	in the ref_view branch.
+ 	* testsuite/std/ranges/adaptors/as_const/1.cc (test03): Extend
+ 	test.
+ 
+ 2025-05-27  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-01-17  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	* include/std/ranges (views::_CartesianProduct::operator()):
+ 	Adjust identity case as per P2540R1.
+ 	* testsuite/std/ranges/cartesian_product/1.cc (test01):
+ 	Adjust expected result of the identity case.
+ 
+ 2025-05-27  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-01-15  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	* include/bits/stl_iterator.h (const_iterator): Define conversion
+ 	operators as per P2836R1.
+ 	* include/std/ranges (__cpp_lib_ranges_as_const): Update value.
+ 	* include/std/version (__cpp_lib_ranges_as_const): Likewise.
+ 	* testsuite/24_iterators/const_iterator/1.cc (test04): New test.
+ 	* testsuite/std/ranges/adaptors/as_const/1.cc: Adjust expected
+ 	value of __cpp_lib_ranges_as_const.
+ 	* testsuite/std/ranges/version_c++23.cc: Likewise.
+ 
+ 2025-05-27  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-10-05  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	* include/bits/ranges_base.h (__distance_fn::operator()):
+ 	Adjust iterator/sentinel overloads as per LWG 3664.
+ 	* testsuite/24_iterators/range_operations/distance.cc:
+ 	Test LWG 3664 example.
+ 
+ 2025-05-12  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* doc/xml/manual/status_cxx2023.xml: Update status of proposals
+ 	implemented for GCC 13.
+ 	* doc/html/manual/status.html: Regenerate.
+ 
+ 2025-05-08  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2023-11-07  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR libstdc++/112351
+ 	* src/c++98/locale.cc (locale::facet::_S_initialize_once):
+ 	Check whether _S_c_locale is already initialized.
+ 	(locale::facet::_S_get_c_locale): Always perform non-threadsafe
+ 	init when threadsafe init failed.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-11-04  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR libstdc++/117406
+ 	* testsuite/26_numerics/headers/cmath/117406.cc: Use
+ 	std::numeric_limits<int>::max() instead of INT_MAX.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-11-02  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR libstdc++/117406
+ 	* include/c_global/cmath (std::ilogb(_Float16), std::llrint(_Float16),
+ 	std::llround(_Float16), std::lrint(_Float16), std::lround(_Float16)):
+ 	Don't cast __builtin_* return to _Float16.
+ 	(std::ilogb(__gnu_cxx::__bfloat16_t),
+ 	std::llrint(__gnu_cxx::__bfloat16_t),
+ 	std::llround(__gnu_cxx::__bfloat16_t),
+ 	std::lrint(__gnu_cxx::__bfloat16_t),
+ 	std::lround(__gnu_cxx::__bfloat16_t)): Don't cast __builtin_* return to
+ 	__gnu_cxx::__bfloat16_t.
+ 	* testsuite/26_numerics/headers/cmath/117406.cc: New test.
+ 
+ 2025-04-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-10-29  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR libstdc++/117321
+ 	* include/c_global/cmath (nextafter(_Float16, _Float16)): Use
+ 	if consteval rather than if (std::__is_constant_evaluated()) around
+ 	the __builtin_nextafterf16 call.
+ 	(nextafter(__gnu_cxx::__bfloat16_t, __gnu_cxx::__bfloat16_t)): Use
+ 	if consteval rather than if (std::__is_constant_evaluated()) around
+ 	the __builtin_nextafterf16b call.
+ 	* testsuite/26_numerics/headers/cmath/117321.cc: New test.
+ 
+ 2025-04-18  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	* include/std/format (basic_format_arg::_S_to_arg_type): Normalize
+ 	_Float32 and _Float64 only to float and double respectivelly.
+ 	(basic_format_arg::_S_to_enum): Remove handling of _Float32 and _Float64.
+ 	(cherry picked with modifications from commit 445128c12cf22081223f7385196ee3889ef4c4b2)
+ 
+ 2025-04-16  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* testsuite/20_util/integer_sequence/112473.cc: Compile with
+ 	-std=gnu++20.
+ 	* testsuite/21_strings/char_traits/requirements/113200.cc:
+ 	Likewise.
+ 	* testsuite/23_containers/array/comparison_operators/106212.cc:
+ 	Likewise.
+ 	* testsuite/23_containers/array/creation/115522.cc: Likewise.
+ 	* testsuite/23_containers/span/117966.cc: Likewise.
+ 	* testsuite/23_containers/span/nodiscard.cc: Likewise. Remove
+ 	dg-warning directives for et c++23.
+ 	* testsuite/23_containers/vector/cons/113841.cc: Compile with
+ 	-std=gnu++20.
+ 	* testsuite/24_iterators/common_iterator/101527.cc: Likewise.
+ 	* testsuite/24_iterators/counted_iterator/101527.cc: Likewise.
+ 	* testsuite/24_iterators/move_iterator/lwg3736.cc: Likewise.
+ 	* testsuite/25_algorithms/lexicographical_compare_three_way/113960.cc:
+ 	Likewise.
+ 	* testsuite/27_io/filesystem/iterators/lwg3480.cc: Likewise.
+ 	* testsuite/29_atomics/headers/stdatomic.h/115807.cc: Compile
+ 	with -std=gnu++23.
+ 	* testsuite/experimental/scopeguard/114152.cc: Compile with
+ 	-std=gnu++20.
+ 	* testsuite/std/format/arguments/112607.cc: Likewise.
+ 	* testsuite/std/format/arguments/args_neg.cc: Likewise.
+ 	* testsuite/std/format/context.cc: Likewise.
+ 	* testsuite/std/format/formatter/112832.cc: Likewise.
+ 	* testsuite/std/format/formatter/basic.cc: Likewise.
+ 	* testsuite/std/ranges/subrange/111948.cc: Likewise.
+ 	* testsuite/std/ranges/subrange/lwg3589.cc: Likewise.
+ 	* testsuite/std/time/format/pr117085.cc: Likewise.
+ 	* testsuite/std/time/month/2.cc: Likewise.
+ 	* testsuite/std/time/time_zone/sys_info_abbrev.cc: Likewise.
+ 	* testsuite/std/time/tzdb/links.cc: Likewise.
+ 	* testsuite/std/time/weekday/2.cc: Likewise.
+ 
+ 2025-04-16  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* testsuite/17_intro/names.cc: Check ranges is not used as an
+ 	identifier before C++20.
+ 
+ 2025-04-16  Michael Levine  <mlevine55@bloomberg.net>
+ 
+ 	Backported from master:
+ 	2024-06-08  Michael Levine  <mlevine55@bloomberg.net>
+ 
+ 	PR libstdc++/108760
+ 	* include/bits/ranges_algo.h (ranges::out_value_result)
+ 	(ranges::iota_result, ranges::__iota_fn, ranges::iota): Move to
+ 	<bits/ranges_algobase.h>.
+ 	* include/bits/ranges_algobase.h (ranges::out_value_result):
+ 	(ranges::iota_result, ranges::__iota_fn, ranges::iota): Move to
+ 	here.
+ 	* include/std/numeric: Include <bits/ranges_algobase.h>.
+ 	* testsuite/25_algorithms/iota/1.cc: Renamed to ...
+ 	* testsuite/26_numerics/iota/2.cc: ... here.
+ 
+ 2025-04-16  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-02-28  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/105609
+ 	* include/bits/ranges_algobase.h (__detail::__assign_one): New
+ 	helper function.
+ 	(__copy_or_move, __copy_or_move_backward): Use new function
+ 	instead of std::__assign_one.
+ 	* testsuite/25_algorithms/move/constrained.cc: Check that
+ 	ADL iter_move is used in preference to std::move.
+ 	* testsuite/25_algorithms/move_backward/constrained.cc:
+ 	Likewise.
+ 
+ 2025-04-16  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-10-18  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/bits/ranges_algobase.h (ranges::__assign_one): Remove.
+ 	(__copy_or_move, __copy_or_move_backward): Use std::__assign_one
+ 	instead of ranges::__assign_one.
+ 
+ 2025-04-16  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-10-13  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/117121
+ 	* include/bits/ranges_algobase.h (copy_backward): Decrement
+ 	output iterator before assigning one element through it.
+ 	* testsuite/25_algorithms/copy/108846.cc: Ensure the algorithm's
+ 	effects are correct for a single memcpyable element.
+ 	* testsuite/25_algorithms/copy_backward/108846.cc: Likewise.
+ 	* testsuite/25_algorithms/copy_n/108846.cc: Likewise.
+ 
+ 2025-04-16  Giuseppe D'Angelo  <giuseppe.dangelo@kdab.com>
+ 
+ 	Backported from master:
+ 	2024-09-13  Giuseppe D'Angelo  <giuseppe.dangelo@kdab.com>
+ 
+ 	PR libstdc++/108846
+ 	PR libstdc++/116471
+ 	* include/bits/ranges_algobase.h (__assign_one): New helper
+ 	function.
+ 	(__copy_or_move): Remove a spurious static_assert; use
+ 	__assign_one for memcpyable ranges of length 1.
+ 	(__copy_or_move_backward): Likewise.
+ 	* testsuite/25_algorithms/copy/108846.cc: Extend to range-based
+ 	algorithms, and cover both memcpyable and non-memcpyable
+ 	cases.
+ 	* testsuite/25_algorithms/copy_backward/108846.cc: Likewise.
+ 	* testsuite/25_algorithms/copy_n/108846.cc: Likewise.
+ 	* testsuite/25_algorithms/move/108846.cc: Likewise.
+ 	* testsuite/25_algorithms/move_backward/108846.cc: Likewise.
+ 
+ 2025-04-16  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-06-07  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/bits/ranges_algobase.h: Include <bits/stl_algobase.h>.
+ 
+ 2025-04-16  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-02-28  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/106612
+ 	* include/bits/iterator_concepts.h (_IterMove::__iter_ref_t):
+ 	New alias template.
+ 	(_IterMove::__result): Use __iter_ref_t instead of
+ 	std::iter_reference_t.
+ 	(_IterMove::__type): Remove incorrect __dereferenceable
+ 	constraint.
+ 	(_IterMove::operator()): Likewise. Add correct constraints. Use
+ 	__iter_ref_t instead of std::iter_reference_t. Forward parameter
+ 	as correct value category.
+ 	(iter_swap): Add comments.
+ 	* testsuite/24_iterators/customization_points/iter_move.cc: Test
+ 	that iter_move is found by ADL and that rvalue arguments are
+ 	handled correctly.
+ 
+ 2025-04-16  Arsen Arsenović  <arsen@aarsen.me>
+ 
+ 	Backported from master:
+ 	2023-12-21  Arsen Arsenović  <arsen@aarsen.me>
+ 
+ 	* include/bits/ranges_util.h: Add missing <bits/invoke.h>
+ 	include.
+ 
+ 2025-04-16  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-01-08  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/118093
+ 	* include/bits/atomic_futex.h (_M_load_and_test_until_impl):
+ 	Return false for times before the epoch.
+ 	* src/c++11/futex.cc (_M_futex_wait_until): Extend check for
+ 	negative times to check for subsecond times. Add unlikely
+ 	attribute.
+ 	(_M_futex_wait_until_steady): Likewise.
+ 	* testsuite/30_threads/future/members/118093.cc: New test.
+ 
+ 2025-04-16  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-06-28  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/104395
+ 	* include/bits/new_allocator.h: Disable extended alignment
+ 	support in C++98 mode.
+ 	* include/ext/bitmap_allocator.h: Likewise.
+ 	* include/ext/malloc_allocator.h: Likewise.
+ 	* include/ext/mt_allocator.h: Likewise.
+ 	* include/ext/pool_allocator.h: Likewise.
+ 	* testsuite/ext/104395.cc: New test.
+ 
+ 2025-04-16  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-06-21  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/bits/memory_resource.h (polymorphic_allocator::destroy):
+ 	Remove deprecated attribute.
+ 
+ 2025-04-15  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-04-14  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/21334
+ 	* doc/xml/manual/using.xml: Document that container data race
+ 	avoidance rules do not apply to COW std::string.
+ 	* doc/html/*: Regenerate.
+ 
+ 2025-04-08  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-04-08  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/119671
+ 	* include/std/format (__formatter_fp::format): Do not invalidate
+ 	__wstr unless _M_localized returns a valid string.
+ 	* testsuite/std/format/functions/format.cc: Check wide string
+ 	formatting of floating-point types with classic locale.
+ 
+ 2025-04-08  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-04-04  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/101587
+ 	* include/bits/ranges_uninitialized.h (__detail::__mindist):
+ 	Remove.
+ 	(ranges::uninitialized_copy, ranges::uninitialized_copy_n)
+ 	(ranges::uninitialized_move, ranges::uninitialized_move_n): Use
+ 	comparison and assignment instead of __mindist.
+ 	* testsuite/20_util/specialized_algorithms/uninitialized_copy/constrained.cc:
+ 	Check with ranges that use integer-like class type for
+ 	difference type.
+ 	* testsuite/20_util/specialized_algorithms/uninitialized_move/constrained.cc:
+ 	Likewise.
+ 
+ 2025-04-08  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-03-27  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/101587
+ 	* include/bits/ranges_uninitialized.h (__detail::__mindist):
+ 	New function object.
+ 	(ranges::uninitialized_copy, ranges::uninitialized_copy_n)
+ 	(ranges::uninitialized_move, ranges::uninitialized_move_n): Use
+ 	__mindist instead of std::min.
+ 	* testsuite/20_util/specialized_algorithms/uninitialized_copy/constrained.cc:
+ 	Check ranges with difference difference types.
+ 	* testsuite/20_util/specialized_algorithms/uninitialized_move/constrained.cc:
+ 	Likewise.
+ 
+ 2025-04-02  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/std/bit (bit_cast): Use library trait instead of
+ 	__is_trivially_copyable built-in.
+ 
+ 2025-04-02  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-03-31  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/110498
+ 	* include/bits/vector.tcc (vector<bool, A>::_M_reallocate):
+ 	Hoist loads of begin() and end() before allocation and use them
+ 	to state an unreachable condition.
+ 	* testsuite/23_containers/vector/bool/capacity/110498.cc: New
+ 	test.
+ 
+ 2025-04-02  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-03-31  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/114758
+ 	* include/bits/vector.tcc (vector<bool, A>::_M_fill_insert):
+ 	Hoist loads of begin() and end() before allocation.
+ 	* testsuite/23_containers/vector/bool/capacity/114758.cc: New
+ 	test.
+ 
+ 2025-04-02  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-03-28  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/117983
+ 	* include/bits/vector.tcc (vector::_M_range_insert): Add
+ 	unreachable condition to tell the compiler begin() <= end().
+ 	* testsuite/23_containers/vector/modifiers/insert/117983.cc: New
+ 	test.
+ 
+ 2025-04-02  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/116212
+ 	* testsuite/20_util/specialized_algorithms/uninitialized_move/constrained.cc:
+ 	Use unsigned for vector size.
+ 
+ 2025-04-02  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-06-13  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/bits/ranges_base.h (range_common_reference_t): New
+ 	alias template, as per LWG 3860.
+ 	* testsuite/std/ranges/range.cc: Check it.
+ 
+ 2025-03-31  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-03-07  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/std/forward_list (erase): Change lambda to have
+ 	explicit return type and const parameter type.
+ 	* include/std/list (erase): Likewise.
+ 	* testsuite/23_containers/forward_list/erasure.cc: Check lambda
+ 	is correct.
+ 	* testsuite/23_containers/list/erasure.cc: Likewise.
+ 
+ 2025-03-31  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-03-25  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/119429
+ 	* include/std/format (__format::_Scanner::_Scanner): Cast
+ 	default argument to size_t.
+ 
+ 2025-03-31  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-03-27  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* src/c++20/tzdata.zi: Import new file from 2025b release.
+ 
+ 2025-03-31  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-03-12  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/std/chrono (__detail::__get_leap_second_info): Update
+ 	expiry date for leap seconds list.
+ 	* src/c++20/tzdata.zi: Import new file from 2025a release.
+ 	* src/c++20/tzdb.cc (tzdb_list::_Node::_S_read_leap_seconds)
+ 	Update expiry date for leap seconds list.
+ 
+ 2025-03-31  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-03-20  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* testsuite/18_support/numeric_limits/traps.cc (main): Fix comment
+ 	typo.
+ 
+ 2025-03-31  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-03-19  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/bits/locale_facets_nonio.tcc (time_put::do_put): Fix
+ 	typo in comment.
+ 
+ 2025-03-31  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-09-22  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/bits/stl_vector.h (operator<=>): Use constexpr
+ 	instead of _GLIBCXX20_CONSTEXPR macro.
+ 
+ 2025-03-31  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-09-26  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/std/stacktrace (basic_stacktrace::_Impl::_M_allocate):
+ 	Do not assume allocators only throw std::bad_alloc.
+ 
+ 2025-03-31  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-12-03  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/108236
+ 	* include/pstl/glue_numeric_impl.h (exclusive_scan): Pass __init
+ 	as rvalue.
+ 	* include/pstl/numeric_impl.h (__brick_transform_scan): Do not
+ 	write through __result until after reading through __first. Move
+ 	__init into return value.
+ 	(__pattern_transform_scan): Pass __init as rvalue.
+ 	* include/std/numeric (exclusive_scan): Move construct instead
+ 	of copy constructing.
+ 	* testsuite/26_numerics/exclusive_scan/2.cc: New test.
+ 	* testsuite/26_numerics/pstl/numeric_ops/108236.cc: New test.
+ 
+ 2025-03-31  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-12-11  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/109517
+ 	PR libstdc++/109976
+ 	* include/debug/helper_functions.h (__valid_range_aux): Treat
+ 	all input iterator ranges as valid during constant evaluation.
+ 
+ 2025-03-31  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-12-11  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/106212
+ 	* include/std/array (operator==): Use std::__equal_aux1 instead
+ 	of std::equal.
+ 	* testsuite/23_containers/array/comparison_operators/106212.cc:
+ 	New test.
+ 
+ 2025-03-31  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-12-11  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/117966
+ 	* include/std/span (span(T (&)[N])): Do not delegate to
+ 	constructor that performs redundant checks.
+ 	(span(array<T, N>&), span(const array<T, N>&)): Likewise.
+ 	(span(Range&&), span(const span<T, N>&)): Likewise.
+ 	* testsuite/23_containers/span/117966.cc: New test.
+ 
+ 2025-03-31  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-01-08  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/90389
+ 	* include/bits/deque.tcc (_M_insert_aux): Rename variadic
+ 	overload to _M_emplace_aux.
+ 	* include/bits/stl_deque.h (_M_insert_aux): Define inline.
+ 	(_M_emplace_aux): Declare.
+ 	* testsuite/23_containers/deque/modifiers/emplace/90389.cc: New
+ 	test.
+ 
+ 2025-03-31  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-12-17  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/118035
+ 	* include/bits/deque.tcc (_M_range_insert_aux): Return
+ 	immediately if inserting an empty range.
+ 	* testsuite/23_containers/deque/modifiers/insert/118035.cc: New
+ 	test.
+ 
+ 2025-03-31  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-01-16  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/118158
+ 	* src/c++17/fs_ops.cc (fs::equivalent): Remove error reporting
+ 	for is_other(s1) && is_other(s2) case, as per LWG 2937.
+ 	* testsuite/27_io/filesystem/operations/pr118158.cc: New test.
+ 
+ 2025-03-31  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-03-24  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/101527
+ 	* testsuite/24_iterators/common_iterator/101527.cc: New test.
+ 	* testsuite/24_iterators/counted_iterator/101527.cc: New test.
+ 
+ 2025-03-31  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-03-24  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* doc/xml/manual/policy_data_structures_biblio.xml: Fix two
+ 	broken links.
+ 	* doc/html/manual/policy_data_structures.html: Regenerate.
+ 
+ 2025-03-31  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-10-30  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* doc/xml/manual/using_exceptions.xml: Fix typos and grammatical
+ 	errors.
+ 	* doc/html/manual/using_exceptions.html: Regenerate.
+ 
+ 2025-03-31  Gerald Pfeifer  <gerald@pfeifer.com>
+ 
+ 	Backported from master:
+ 	2024-08-17  Gerald Pfeifer  <gerald@pfeifer.com>
+ 
+ 	* doc/xml/manual/abi.xml: Update reference to
+ 	gcc.gnu.org/onlinedocs.
+ 	* doc/xml/manual/concurrency_extensions.xml (interface): Ditto.
+ 	* doc/xml/manual/extensions.xml: Ditto.
+ 	* doc/xml/manual/parallel_mode.xml: Ditto.
+ 	* doc/xml/manual/shared_ptr.xml: Ditto.
+ 	* doc/xml/manual/using_exceptions.xml: Ditto. And change GNU GCC
+ 	to GCC.
+ 	* doc/html/*: Regenerate.
+ 
+ 2025-03-31  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-03-04  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* doc/xml/manual/test.xml: Remove stray comma.
+ 	* doc/html/manual/test.html: Regenerate.
+ 
+ 2025-03-31  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-03-19  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* doc/xml/manual/test.xml: Fix default for -std option.
+ 	* doc/html/manual/test.html: Regenerate.
+ 
+ 2025-03-17  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-12-12  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* src/c++17/fs_dir.cc: Fix typo in comment.
+ 
+ 2025-03-17  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-05-14  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* doc/xml/manual/strings.xml: Clarify that GCC 4.5 added
+ 	std::string::shrink_to_fit.
+ 	* doc/html/manual/strings.html: Regenerate.
+ 
+ 2025-01-10  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	Backported from master:
+ 	2025-01-10  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* include/bits/hashtable.h (find): Add inline keyword.
+ 
+ 2025-01-09  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-01-08  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* doc/xml/manual/evolution.xml: Replace invalid <variable>
+ 	elements with <varname>.
+ 	* doc/html/*: Regenerate.
+ 
+ 2024-12-07  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-09-22  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/std/format (__format::__is_formattable_integer): New
+ 	variable template and specializations.
+ 	(template<integral, __char> struct formatter): Replace
+ 	constraints on first arg with __is_formattable_integer.
+ 	* testsuite/std/format/formatter/requirements.cc: Check that
+ 	std::formatter specializations for char8_t and const int are
+ 	disabled.
+ 
+ 2024-12-07  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-11-14  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/bits/ranges_util.h (subrange::begin): Fix constraint,
+ 	as per LWG 3589.
+ 	* testsuite/std/ranges/subrange/lwg3589.cc: New test.
+ 
+ 2024-12-07  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-11-14  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/bits/stl_iterator.h (operator+): Add constraint to
+ 	move_iterator operator.
+ 	* testsuite/24_iterators/move_iterator/rel_ops_c++20.cc: Check
+ 	it's constrained.
+ 
+ 2024-12-07  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-11-28  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/117822
+ 	* include/std/stacktrace (stacktrace(stacktrace&&, const A&)):
+ 	Fix typo in qualified-id for is_always_equal trait.
+ 	* testsuite/19_diagnostics/stacktrace/stacktrace.cc: Test
+ 	allocator-extended constructors and allocator propagation.
+ 
+ 2024-12-07  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-10-27  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/bits/stl_bvector.h (emplace_back, emplace): Forward
+ 	parameter pack to preserve value category.
+ 	* testsuite/23_containers/vector/bool/emplace_rvalue.cc: New
+ 	test.
+ 
+ 2024-12-07  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-11-13  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* testsuite/util/testsuite_performance.h: Use
+ 	__gnu_cxx::__is_single_threaded instead of __gthread_active_p().
+ 
+ 2024-12-07  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-11-13  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* testsuite/util/testsuite_performance.h (time_counter): Add
+ 	comment about times.
+ 	(time_counter::system_time): Use correct split value.
+ 
+ 2024-12-07  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-11-08  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/bits/hashtable_policy.h (_Insert_base::try_emplace):
+ 	Do not define for C++11 and C++14.
+ 	* include/debug/map.h (try_emplace): Use feature test macro.
+ 	* include/debug/unordered_map (try_emplace): Likewise.
+ 	* testsuite/17_intro/names.cc: Define try_emplace before C++17.
+ 
+ 2024-12-07  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-11-14  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/117560
+ 	* include/bits/fs_dir.h (enable_borrowed_range, enable_view):
+ 	Define specializations for directory iterators, as per LWG 3480.
+ 	* testsuite/27_io/filesystem/iterators/lwg3480.cc: New test.
+ 
+ 2024-12-07  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-03-22  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/114394
+ 	* include/std/functional (bind): Use __invoke_result_t instead
+ 	of result_of::type.
+ 	* include/std/type_traits (__invoke_result_t): New alias
+ 	template.
+ 	* testsuite/20_util/bind/ref_neg.cc: Adjust prune pattern.
+ 
+ 2024-11-13  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-03-19  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/101228
+ 	* include/pstl/parallel_backend_tbb.h (TBB_SUPPRESS_DEPRECATED_MESSAGES):
+ 	Define before including <tbb/task.h> then undef afterwards.
+ 
+ 2024-10-16  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-10-14  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/117135
+ 	* config/locale/generic/time_members.cc
+ 	(__timepunct<wchar_t>::_M_initialize_timepunc): Set
+ 	_M_date_time_format for C locale. Set %Ex formats to the same
+ 	values as the %x formats.
+ 
+ 2024-10-16  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-10-02  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* config/locale/dragonfly/time_members.cc
+ 	(__timepunct<char>::_M_initialize_timepunc)
+ 	(__timepunct<wchar_t>::_M_initialize_timepunc): Set
+ 	_M_date_time_format for C locale. Set %Ex formats to the same
+ 	values as the %x formats.
+ 	* config/locale/generic/time_members.cc: Likewise.
+ 	* config/locale/gnu/time_members.cc: Likewise.
+ 	* testsuite/22_locale/time_get/get/char/5.cc: New test.
+ 	* testsuite/22_locale/time_get/get/wchar_t/5.cc: New test.
+ 
+ 2024-10-16  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-09-20  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/116777
+ 	* doc/xml/manual/using.xml: Document features that are not
+ 	supported for the gcc4-compatible ABI.
+ 	* doc/html/manual/using_dual_abi.html: Regenerate.
+ 
+ 2024-10-16  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-09-03  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* src/c++17/fs_ops.cc (auto_win_file_handle): Add error_code&
+ 	member and set it if CreateFileW or GetFileInformationByHandle
+ 	fails.
+ 	(fs::equiv_files) [_GLIBCXX_FILESYSTEM_IS_WINDOWS]: Simplify
+ 	control flow.
+ 	(fs::hard_link_count) [_GLIBCXX_FILESYSTEM_IS_WINDOWS]: Clear ec
+ 	on success.
+ 	* testsuite/27_io/filesystem/operations/hard_link_count.cc:
+ 	Check error handling.
+ 
+ 2024-10-16  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-07-30  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* src/c++17/fs_ops.cc (auto_win_file_handle): Change constructor
+ 	parameter from const path& to const wchar_t*.
+ 	(fs::equiv_files): New function.
+ 	(fs::equivalent): Use equiv_files.
+ 	* src/filesystem/ops-common.h (fs::equiv_files): Declare.
+ 	(do_copy_file): Use equiv_files.
+ 	* src/filesystem/ops.cc (fs::equiv_files): Define.
+ 	(fs::copy, fs::equivalent): Use equiv_files.
+ 	* testsuite/27_io/filesystem/operations/copy.cc: Test
+ 	overwriting directory contents recursively.
+ 	* testsuite/27_io/filesystem/operations/copy_file.cc: Test
+ 	overwriting existing files.
+ 
+ 2024-10-16  Lennox Shou Hao Ho  <lennoxhoe@gmail.com>
+ 
+ 	Backported from master:
+ 	2024-07-30  Lennox Shou Hao Ho  <lennoxhoe@gmail.com>
+ 
+ 	PR libstdc++/113663
+ 	* src/c++17/fs_ops.cc (fs::equivalent): Moved helper class
+ 	auto_handle to anonymous namespace as auto_win_file_handle.
+ 	(fs::hard_link_count): Changed Windows implementation to use
+ 	information provided by GetFileInformationByHandle which is more
+ 	reliable.
+ 	* testsuite/27_io/filesystem/operations/hard_link_count.cc: New
+ 	test.
+ 
+ 2024-10-16  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-07-25  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/std/format (basic_format_args): Remove default
+ 	constructor, as per LWG 4106.
+ 	* testsuite/std/format/arguments/args.cc: Check it isn't default
+ 	constructible.
+ 
+ 2024-10-16  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-07-10  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/114387
+ 	* include/std/format (basic_format_context): Define copy
+ 	operations as deleted, as per LWG 4061.
+ 	* testsuite/std/format/context.cc: New test.
+ 
+ 2024-10-16  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-07-10  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/115854
+ 	* include/bits/stl_bvector.h (_Bvector_base): Convert allocator
+ 	to rebound type explicitly.
+ 	* testsuite/23_containers/vector/allocator/115854.cc: New test.
+ 	* testsuite/23_containers/vector/bool/allocator/115854.cc: New test.
+ 
+ 2024-10-16  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-09-03  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/116549
+ 	* include/bits/stl_iterator.h (disable_sized_sentinel_for):
+ 	Define specialization for two move_iterator types, as per LWG
+ 	3736.
+ 	* testsuite/24_iterators/move_iterator/lwg3736.cc: New test.
+ 
+ 2024-10-16  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-10-16  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* python/libstdcxx/v6/printers.py (strip_fundts_namespace): New.
+ 	(StdExpAnyPrinter, StdExpOptionalPrinter): Use it.
+ 
+ 2024-10-16  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-08-23  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR c++/116369
+ 	* include/debug/safe_base.h (_Safe_sequence_base::_M_iterators):
+ 	Add mutable specifier.
+ 	(_Safe_sequence_base::_M_const_iterators): Likewise.
+ 
+ 2024-10-16  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-10-14  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/std/ranges (transform_view:_Iterator): Use const F&
+ 	to determine value_type and iterator_category of
+ 	_Iterator<true>, as per LWG 3564.
+ 	* testsuite/std/ranges/adaptors/transform.cc: Check value_type
+ 	and iterator_category.
+ 
+ 2024-10-16  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-10-14  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/117094
+ 	* include/bits/ranges_algobase.h (__fill_fn): Use std::move for
+ 	iterator that might not be copyable.
+ 	* testsuite/25_algorithms/fill/constrained.cc: Check
+ 	non-copyable iterator with sized sentinel.
+ 
+ 2024-10-16  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-09-22  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/116754
+ 	* include/bits/ranges_algobase.h (__copy_or_move): Fix order of
+ 	arguments to __memcpyable.
+ 
+ 2024-10-16  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-10-11  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/117085
+ 	* include/bits/chrono_io.h (__formatter_chrono::_M_c): Add L
+ 	option to format string.
+ 	* testsuite/std/time/format.cc: Move to...
+ 	* testsuite/std/time/format/format.cc: ...here.
+ 	* testsuite/std/time/format/pr117085.cc: New test.
+ 
+ 2024-10-16  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-10-09  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/bits/chrono_io.h (__formatter_chrono::_M_c): Add
+ 	[[unlikely]] attribute to condition for missing %c format in
+ 	locale. Use %T instead of %H:%M:%S in fallback.
+ 
+ 2024-10-04  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-06-21  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* testsuite/util/testsuite_allocator.h (tracker_allocator):
+ 	Initialize base class in copy constructor.
+ 
+ 2024-10-04  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* src/c++17/fs_ops.cc (remove_all) [__FreeBSD__ || __DragonFly__]:
+ 	Check for EMLINK as well as ELOOP.
+ 	[__NetBSD__]: Check for EFTYPE as well as ELOOP.
+ 
+ 2024-10-04  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-06-12  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/115399
+ 	* include/tr2/dynamic_bitset (operator>>=): Remove redundant
+ 	call to _M_do_sanitize.
+ 	* include/tr2/dynamic_bitset.tcc (_M_do_left_shift): Zero out
+ 	low bits in words that should no longer be populated.
+ 	(_M_do_right_shift): Likewise for high bits.
+ 	* testsuite/tr2/dynamic_bitset/pr115399.cc: New test.
+ 
+ 2024-10-04  Kim Gräsman  <kim.grasman@gmail.com>
+ 
+ 	Backported from master:
+ 	2024-08-28  Kim Gräsman  <kim.grasman@gmail.com>
+ 
+ 	* include/bits/cpp_type_traits.h: Improve doxygen file docs.
+ 
+ 2024-10-04  Kim Gräsman  <kim.grasman@gmail.com>
+ 
+ 	Backported from master:
+ 	2024-08-28  Kim Gräsman  <kim.grasman@gmail.com>
+ 
+ 	* config/cpu/aarch64/opt/ext/opt_random.h: Improve doxygen file
+ 	docs.
+ 	* config/cpu/i486/opt/ext/opt_random.h: Likewise.
+ 
+ 2024-10-04  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-07-06  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/std/variant (_Variant_storage::_M_reset): Use
+ 	__unlikely__ form of attribute instead of unlikely.
+ 
+ 2024-10-04  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-08-28  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* configure.ac: Fix check for O_NONBLOCK.
+ 	* config.h.in: Regenerate.
+ 	* configure: Regenerate.
+ 
+ 2024-10-04  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-09-10  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/116641
+ 	* include/bits/basic_string.h (operator=(basic_string&&)): Call
+ 	_M_assign instead of assign.
+ 	* testsuite/21_strings/basic_string/allocator/116641.cc: New
+ 	test.
+ 
+ 2024-10-03  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-09-26  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/116857
+ 	* libsupc++/guard.cc (__cxa_guard_acquire): Remove
+ 	_GLIBCXX_NOTHROW to match declaration in <cxxabi.h>.
+ 
+ 2024-10-03  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-09-22  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/116755
+ 	* include/bits/chrono_io.h (formatter<duration<R,P>>::format):
+ 	Cast negative integral durations to unsigned rep.
+ 	* testsuite/20_util/duration/io.cc: Test the most negative
+ 	integer durations.
+ 
+ 2024-09-10  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-06-26  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* src/c++20/tzdb.cc (minmax_year, minmax_year2): Remove.
+ 	(years_from_to): New class replacing minmax_year and
+ 	minmax_year2.
+ 	(format_abbrev_str, select_std_or_dst_abbrev): Move earlier in
+ 	the file. Handle "-" for letters.
+ 	(ZoneInfo::to): Use format_abbrev_str to expand %z.
+ 	(ZoneInfo::set_abbrev): Remove exception. Change parameter from
+ 	reference to value.
+ 	(operator>>(istream&, Rule&)): Do not clear letters when it
+ 	contains "-".
+ 	(time_zone::_M_get_sys_info): Add missing logic to find the Rule
+ 	in effect before the time point.
+ 	* testsuite/std/time/tzdb/1.cc: Adjust for vanguard format using
+ 	"GMT" as the Zone name, not as a Link to "Etc/GMT".
+ 	* testsuite/std/time/time_zone/sys_info_abbrev.cc: New test.
+ 
+ 2024-09-10  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-04-19  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/114770
+ 	* src/c++20/tzdb.cc (do_locate_zone): Support links that have
+ 	another link as their target.
+ 	* testsuite/std/time/tzdb/1.cc: Check that all zones and links
+ 	can be found by locate_zone.
+ 	* testsuite/std/time/tzdb/links.cc: New test.
+ 
+ 2024-09-10  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	Backported from master:
+ 	2024-04-18  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* src/c++20/tzdb.cc (__gnu_cxx::zoneinfo_dir_override): Define
+ 	on VxWorks non-RTP.
+ 
+ 2024-07-24  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-07-24  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/116070
+ 	* include/bits/stl_bvector.h: Check feature test macro before
+ 	using is_default_constructible_v.
+ 
+ 2024-07-12  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-06-21  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/115522
+ 	* include/std/array (to_array): Workaround the fact that
+ 	std::is_trivial is not sufficient to check that a type is
+ 	trivially default constructible and assignable.
+ 	* testsuite/23_containers/array/creation/115522.cc: New test.
+ 
+ 2024-07-09  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-07-08  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/115807
+ 	* include/c_compatibility/stdatomic.h (_Atomic): Ensure it
+ 	refers to std::atomic in the global namespace.
+ 	* testsuite/29_atomics/headers/stdatomic.h/115807.cc: New test.
+ 
+ 2024-07-09  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-06-28  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/115585
+ 	* src/c++11/assert_fail.cc (__glibcxx_assert_fail): Add
+ 	definition for non-verbose builds.
+ 
+ 2024-06-28  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-06-25  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* doc/xml/faq.xml: Replace viewcvs links with cgit links.
+ 	* doc/xml/manual/allocator.xml: Likewise.
+ 	* doc/xml/manual/mt_allocator.xml: Likewise.
+ 	* doc/html/*: Regenerate.
+ 
+ 2024-06-28  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-06-27  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/115668
+ 	* include/bits/chrono_io.h (formatter<duration<R,P, C>::format):
+ 	Do not use chrono::abs.
+ 	* testsuite/20_util/duration/io.cc: Check formatting a duration
+ 	with unsigned rep.
+ 
+ 2024-06-27  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	Backported from master:
+ 	2024-06-27  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	PR libstdc++/115454
+ 	* testsuite/experimental/simd/pr115454_find_last_set.cc: Defer
+ 	to check_vect_support_and_set_flags's default dg-do action.
+ 
+ 2024-06-25  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* doc/xml/manual/status_cxx1998.xml: Remove confusing "not in
+ 	any particular release" text.
+ 	* doc/xml/manual/status_cxx2011.xml: Likewise.
+ 	* doc/xml/manual/status_cxx2014.xml: Likewise.
+ 	* doc/xml/manual/status_cxx2017.xml: Likewise.
+ 	* doc/xml/manual/status_cxx2020.xml: Likewise.
+ 	* doc/xml/manual/status_cxx2023.xml: Likewise.
+ 	* doc/xml/manual/status_cxxtr1.xml: Likewise.
+ 	* doc/xml/manual/status_cxxtr24733.xml: Likewise.
+ 	* doc/html/manual/status.html: Regenerate.
+ 
+ 2024-06-21  Matthias Kretz  <m.kretz@gsi.de>
+ 
+ 	Backported from master:
+ 	2024-06-21  Matthias Kretz  <m.kretz@gsi.de>
+ 
+ 	PR libstdc++/115575
+ 	* testsuite/experimental/simd/pr115454_find_last_set.cc: Require
+ 	avx512f_runtime. Don't memcpy fixed_size masks.
+ 
+ 2024-06-21  Matthias Kretz  <m.kretz@gsi.de>
+ 
+ 	Backported from master:
+ 	2024-06-20  Matthias Kretz  <m.kretz@gsi.de>
+ 
+ 	PR libstdc++/115454
+ 	* include/experimental/bits/simd_x86.h (_S_not_equal_to): Use
+ 	neq comparison instead of bitwise negation after eq.
+ 	(_S_find_last_set): Clear unused high bits before computing
+ 	bit_width.
+ 	* testsuite/experimental/simd/pr115454_find_last_set.cc: New
+ 	test.
+ 
+ 2024-06-14  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-06-14  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* libsupc++/new_opa.cc [!_GLIBCXX_HOSTED]: Fix declaration of
+ 	posix_memalign.
+ 
+ 2024-06-11  Matthias Kretz  <m.kretz@gsi.de>
+ 
+ 	Backported from master:
+ 	2024-06-04  Matthias Kretz  <m.kretz@gsi.de>
+ 
+ 	PR libstdc++/115308
+ 	* include/experimental/bits/simd.h (__int_for_sizeof): Remove
+ 	special cases for __clang__.
+ 	(_SimdWrapper): Change constructor overload set to allow
+ 	conversion from vector types with integral conversions via bit
+ 	reinterpretation.
+ 
+ 2024-06-11  Matthias Kretz  <m.kretz@gsi.de>
+ 
+ 	Backported from master:
+ 	2024-05-29  Matthias Kretz  <m.kretz@gsi.de>
+ 
+ 	PR libstdc++/115247
+ 	* include/experimental/bits/simd.h (__as_vector): Don't use
+ 	vector_size(8) on __i386__.
+ 	(__vec_shuffle): Never return MMX vectors, widen to 16 bytes
+ 	instead.
+ 	(concat): Fix padding calculation to pick up widening logic from
+ 	__as_vector.
+ 
+ 2024-06-11  Matthias Kretz  <m.kretz@gsi.de>
+ 
+ 	Backported from master:
+ 	2024-05-13  Matthias Kretz  <m.kretz@gsi.de>
+ 
+ 	PR libstdc++/114958
+ 	* include/experimental/bits/simd.h (__as_vector): Return scalar
+ 	simd as one-element vector. Return vector from single-vector
+ 	fixed_size simd.
+ 	(__vec_shuffle): New.
+ 	(__extract_part): Adjust return type signature.
+ 	(split): Use __extract_part for any split into non-fixed_size
+ 	simds.
+ 	(concat): If the return type stores a single vector, use
+ 	__vec_shuffle (which calls __builtin_shufflevector) to produce
+ 	the return value.
+ 	* include/experimental/bits/simd_builtin.h
+ 	(__shift_elements_right): Removed.
+ 	(__extract_part): Return single elements directly. Use
+ 	__vec_shuffle (which calls __builtin_shufflevector) to for all
+ 	non-trivial cases.
+ 	* include/experimental/bits/simd_fixed_size.h (__extract_part):
+ 	Return single elements directly.
+ 	* testsuite/experimental/simd/pr114958.cc: New test.
+ 
+ 2024-06-01  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-06-01  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/115269
+ 	* doc/xml/manual/using.xml: Replace link to gcc-4.3.2 docs.
+ 	Replace list of -std=... options with a single entry for -std.
+ 	* doc/html/manual/using.html: Regenerate.
+ 
+ 2024-05-28  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* testsuite/19_diagnostics/stacktrace/hash.cc: Adjust
+ 	dg-options to use -lstdc++exp.
+ 
+ 2024-05-28  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2024-05-22  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/114940
+ 	* include/std/stacktrace (_GLIBCXX_SIZED_DELETE): New macro.
+ 	(basic_stacktrace::_Impl::_M_deallocate): Use it.
+ 
+ 2024-05-21  Dimitrij Mijoski  <dmjpp@hotmail.com>
+ 
+ 	Backported from master:
+ 	2023-10-21  Dimitrij Mijoski  <dmjpp@hotmail.com>
+ 
+ 	* testsuite/22_locale/codecvt/codecvt_unicode.h: Test length()
+ 
+ 2024-05-21  Dimitrij Mijoski  <dmjpp@hotmail.com>
+ 
+ 	Backported from master:
+ 	2023-09-29  Dimitrij Mijoski  <dmjpp@hotmail.com>
+ 
+ 	PR libstdc++/108976
+ 	* src/c++11/codecvt.cc (read_utf8_code_point): Fix handing of
+ 	surrogates in UTF-8.
+ 	(ucs4_out): Fix handling of surrogates in UCS-4 -> UTF-8.
+ 	(ucs4_in): Fix handling of range with odd number of bytes.
+ 	(ucs4_out): Fix handling of surrogates in UCS-4 -> UTF-16.
+ 	(ucs2_out): Fix handling of surrogates in UCS-2 -> UTF-16.
+ 	(ucs2_in): Fix handling of range with odd number of bytes.
+ 	(__codecvt_utf16_base<char16_t>::do_in): Likewise.
+ 	(__codecvt_utf16_base<char32_t>::do_in): Likewise.
+ 	(__codecvt_utf16_base<wchar_t>::do_in): Likewise.
+ 	* testsuite/22_locale/codecvt/codecvt_unicode.cc: Renames, add
+ 	tests for codecvt_utf16<char16_t> and codecvt_utf16<char32_t>.
+ 	* testsuite/22_locale/codecvt/codecvt_unicode.h: Refactor UTF-8
+ 	testing functions for char8_t, add more test cases for errors,
+ 	add testing functions for codecvt_utf16.
+ 	* testsuite/22_locale/codecvt/codecvt_unicode_wchar_t.cc:
+ 	Renames, add tests for codecvt_utf16<whchar_t>.
+ 	* testsuite/22_locale/codecvt/codecvt_utf16/79980.cc (test06):
+ 	Fix test.
+ 	* testsuite/22_locale/codecvt/codecvt_unicode_char8_t.cc: New
+ 	test.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/libstdc++-v3/config/cpu/aarch64/opt/ext/opt_random.h gcc-13.4.0/libstdc++-v3/config/cpu/aarch64/opt/ext/opt_random.h
*** gcc-13.3.0/libstdc++-v3/config/cpu/aarch64/opt/ext/opt_random.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/config/cpu/aarch64/opt/ext/opt_random.h	Thu Jun  5 16:03:03 2025
***************
*** 22,28 ****
  // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
  // <http://www.gnu.org/licenses/>.
  
! /** @file ext/random.tcc
   *  This is an internal header file, included by other library headers.
   *  Do not attempt to use it directly. @headername{ext/random}
   */
--- 22,28 ----
  // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
  // <http://www.gnu.org/licenses/>.
  
! /** @file ext/opt_random.h
   *  This is an internal header file, included by other library headers.
   *  Do not attempt to use it directly. @headername{ext/random}
   */
diff -Nrcpad gcc-13.3.0/libstdc++-v3/config/cpu/i486/opt/ext/opt_random.h gcc-13.4.0/libstdc++-v3/config/cpu/i486/opt/ext/opt_random.h
*** gcc-13.3.0/libstdc++-v3/config/cpu/i486/opt/ext/opt_random.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/config/cpu/i486/opt/ext/opt_random.h	Thu Jun  5 16:03:03 2025
***************
*** 22,28 ****
  // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
  // <http://www.gnu.org/licenses/>.
  
! /** @file ext/random.tcc
   *  This is an internal header file, included by other library headers.
   *  Do not attempt to use it directly. @headername{ext/random}
   */
--- 22,28 ----
  // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
  // <http://www.gnu.org/licenses/>.
  
! /** @file ext/opt_random.h
   *  This is an internal header file, included by other library headers.
   *  Do not attempt to use it directly. @headername{ext/random}
   */
diff -Nrcpad gcc-13.3.0/libstdc++-v3/config/locale/dragonfly/time_members.cc gcc-13.4.0/libstdc++-v3/config/locale/dragonfly/time_members.cc
*** gcc-13.3.0/libstdc++-v3/config/locale/dragonfly/time_members.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/config/locale/dragonfly/time_members.cc	Thu Jun  5 16:03:03 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 67,77 ****
  	  _M_c_locale_timepunct = _S_get_c_locale();
  
  	  _M_data->_M_date_format = "%m/%d/%y";
! 	  _M_data->_M_date_era_format = "%m/%d/%y";
  	  _M_data->_M_time_format = "%H:%M:%S";
! 	  _M_data->_M_time_era_format = "%H:%M:%S";
! 	  _M_data->_M_date_time_format = "";
! 	  _M_data->_M_date_time_era_format = "";
  	  _M_data->_M_am = "AM";
  	  _M_data->_M_pm = "PM";
  	  _M_data->_M_am_pm_format = "%I:%M:%S %p";
--- 67,77 ----
  	  _M_c_locale_timepunct = _S_get_c_locale();
  
  	  _M_data->_M_date_format = "%m/%d/%y";
! 	  _M_data->_M_date_era_format = _M_data->_M_date_format;
  	  _M_data->_M_time_format = "%H:%M:%S";
! 	  _M_data->_M_time_era_format = _M_data->_M_time_format;
! 	  _M_data->_M_date_time_format = "%a %b %e %T %Y";
! 	  _M_data->_M_date_time_era_format = _M_data->_M_date_time_format;
  	  _M_data->_M_am = "AM";
  	  _M_data->_M_pm = "PM";
  	  _M_data->_M_am_pm_format = "%I:%M:%S %p";
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 224,234 ****
  	  _M_c_locale_timepunct = _S_get_c_locale();
  
  	  _M_data->_M_date_format = L"%m/%d/%y";
! 	  _M_data->_M_date_era_format = L"%m/%d/%y";
  	  _M_data->_M_time_format = L"%H:%M:%S";
! 	  _M_data->_M_time_era_format = L"%H:%M:%S";
! 	  _M_data->_M_date_time_format = L"";
! 	  _M_data->_M_date_time_era_format = L"";
  	  _M_data->_M_am = L"AM";
  	  _M_data->_M_pm = L"PM";
  	  _M_data->_M_am_pm_format = L"%I:%M:%S %p";
--- 224,234 ----
  	  _M_c_locale_timepunct = _S_get_c_locale();
  
  	  _M_data->_M_date_format = L"%m/%d/%y";
! 	  _M_data->_M_date_era_format = _M_data->_M_date_format;
  	  _M_data->_M_time_format = L"%H:%M:%S";
! 	  _M_data->_M_time_era_format = _M_data->_M_time_format;
! 	  _M_data->_M_date_time_format = L"%a %b %e %T %Y";
! 	  _M_data->_M_date_time_era_format = _M_data->_M_date_time_format;
  	  _M_data->_M_am = L"AM";
  	  _M_data->_M_pm = L"PM";
  	  _M_data->_M_am_pm_format = L"%I:%M:%S %p";
diff -Nrcpad gcc-13.3.0/libstdc++-v3/config/locale/generic/time_members.cc gcc-13.4.0/libstdc++-v3/config/locale/generic/time_members.cc
*** gcc-13.3.0/libstdc++-v3/config/locale/generic/time_members.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/config/locale/generic/time_members.cc	Thu Jun  5 16:03:03 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 65,75 ****
  	_M_data = new __timepunct_cache<char>;
  
        _M_data->_M_date_format = "%m/%d/%y";
!       _M_data->_M_date_era_format = "%m/%d/%y";
        _M_data->_M_time_format = "%H:%M:%S";
!       _M_data->_M_time_era_format = "%H:%M:%S";
!       _M_data->_M_date_time_format = "";
!       _M_data->_M_date_time_era_format = "";
        _M_data->_M_am = "AM";
        _M_data->_M_pm = "PM";
        _M_data->_M_am_pm_format = "%I:%M:%S %p";
--- 65,75 ----
  	_M_data = new __timepunct_cache<char>;
  
        _M_data->_M_date_format = "%m/%d/%y";
!       _M_data->_M_date_era_format = _M_data->_M_date_format;
        _M_data->_M_time_format = "%H:%M:%S";
!       _M_data->_M_time_era_format = _M_data->_M_time_format;
!       _M_data->_M_date_time_format = "%a %b %e %T %Y";
!       _M_data->_M_date_time_era_format = _M_data->_M_date_time_format;
        _M_data->_M_am = "AM";
        _M_data->_M_pm = "PM";
        _M_data->_M_am_pm_format = "%I:%M:%S %p";
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 150,160 ****
  	_M_data = new __timepunct_cache<wchar_t>;
  
        _M_data->_M_date_format = L"%m/%d/%y";
!       _M_data->_M_date_era_format = L"%m/%d/%y";
        _M_data->_M_time_format = L"%H:%M:%S";
!       _M_data->_M_time_era_format = L"%H:%M:%S";
!       _M_data->_M_date_time_format = L"";
!       _M_data->_M_date_time_era_format = L"";
        _M_data->_M_am = L"AM";
        _M_data->_M_pm = L"PM";
        _M_data->_M_am_pm_format = L"%I:%M:%S %p";
--- 150,160 ----
  	_M_data = new __timepunct_cache<wchar_t>;
  
        _M_data->_M_date_format = L"%m/%d/%y";
!       _M_data->_M_date_era_format = _M_data->_M_date_format;
        _M_data->_M_time_format = L"%H:%M:%S";
!       _M_data->_M_time_era_format = _M_data->_M_time_format;
!       _M_data->_M_date_time_format = L"%a %b %e %T %Y";
!       _M_data->_M_date_time_era_format = _M_data->_M_date_time_format;
        _M_data->_M_am = L"AM";
        _M_data->_M_pm = L"PM";
        _M_data->_M_am_pm_format = L"%I:%M:%S %p";
diff -Nrcpad gcc-13.3.0/libstdc++-v3/config/locale/gnu/time_members.cc gcc-13.4.0/libstdc++-v3/config/locale/gnu/time_members.cc
*** gcc-13.3.0/libstdc++-v3/config/locale/gnu/time_members.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/config/locale/gnu/time_members.cc	Thu Jun  5 16:03:03 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 73,83 ****
  	  _M_c_locale_timepunct = _S_get_c_locale();
  
  	  _M_data->_M_date_format = "%m/%d/%y";
! 	  _M_data->_M_date_era_format = "%m/%d/%y";
  	  _M_data->_M_time_format = "%H:%M:%S";
! 	  _M_data->_M_time_era_format = "%H:%M:%S";
! 	  _M_data->_M_date_time_format = "";
! 	  _M_data->_M_date_time_era_format = "";
  	  _M_data->_M_am = "AM";
  	  _M_data->_M_pm = "PM";
  	  _M_data->_M_am_pm_format = "%I:%M:%S %p";
--- 73,83 ----
  	  _M_c_locale_timepunct = _S_get_c_locale();
  
  	  _M_data->_M_date_format = "%m/%d/%y";
! 	  _M_data->_M_date_era_format = _M_data->_M_date_format;
  	  _M_data->_M_time_format = "%H:%M:%S";
! 	  _M_data->_M_time_era_format = _M_data->_M_time_format;
! 	  _M_data->_M_date_time_format = "%a %b %e %T %Y";
! 	  _M_data->_M_date_time_era_format = _M_data->_M_date_time_format;
  	  _M_data->_M_am = "AM";
  	  _M_data->_M_pm = "PM";
  	  _M_data->_M_am_pm_format = "%I:%M:%S %p";
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 229,239 ****
  	  _M_c_locale_timepunct = _S_get_c_locale();
  
  	  _M_data->_M_date_format = L"%m/%d/%y";
! 	  _M_data->_M_date_era_format = L"%m/%d/%y";
  	  _M_data->_M_time_format = L"%H:%M:%S";
! 	  _M_data->_M_time_era_format = L"%H:%M:%S";
! 	  _M_data->_M_date_time_format = L"";
! 	  _M_data->_M_date_time_era_format = L"";
  	  _M_data->_M_am = L"AM";
  	  _M_data->_M_pm = L"PM";
  	  _M_data->_M_am_pm_format = L"%I:%M:%S %p";
--- 229,239 ----
  	  _M_c_locale_timepunct = _S_get_c_locale();
  
  	  _M_data->_M_date_format = L"%m/%d/%y";
! 	  _M_data->_M_date_era_format = _M_data->_M_date_format;
  	  _M_data->_M_time_format = L"%H:%M:%S";
! 	  _M_data->_M_time_era_format = _M_data->_M_time_format;
! 	  _M_data->_M_date_time_format = L"%a %b %e %T %Y";
! 	  _M_data->_M_date_time_era_format = _M_data->_M_date_time_format;
  	  _M_data->_M_am = L"AM";
  	  _M_data->_M_pm = L"PM";
  	  _M_data->_M_am_pm_format = L"%I:%M:%S %p";
diff -Nrcpad gcc-13.3.0/libstdc++-v3/config.h.in gcc-13.4.0/libstdc++-v3/config.h.in
*** gcc-13.3.0/libstdc++-v3/config.h.in	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/config.h.in	Thu Jun  5 16:03:03 2025
***************
*** 295,300 ****
--- 295,303 ----
  /* Define if openat is available in <fcntl.h>. */
  #undef HAVE_OPENAT
  
+ /* Define if O_NONBLOCK is defined in <fcntl.h> */
+ #undef HAVE_O_NONBLOCK
+ 
  /* Define if poll is available in <poll.h>. */
  #undef HAVE_POLL
  
diff -Nrcpad gcc-13.3.0/libstdc++-v3/configure gcc-13.4.0/libstdc++-v3/configure
*** gcc-13.3.0/libstdc++-v3/configure	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/configure	Thu Jun  5 16:03:03 2025
*************** if test "$ac_cv_have_decl_F_GETFL$ac_cv_
*** 71665,71670 ****
--- 71665,71672 ----
  "
  if test "x$ac_cv_have_decl_O_NONBLOCK" = xyes; then :
  
+ $as_echo "#define HAVE_O_NONBLOCK 1" >>confdefs.h
+ 
  fi
  
  fi
diff -Nrcpad gcc-13.3.0/libstdc++-v3/configure.ac gcc-13.4.0/libstdc++-v3/configure.ac
*** gcc-13.3.0/libstdc++-v3/configure.ac	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/configure.ac	Thu Jun  5 16:03:03 2025
*************** AC_CHECK_HEADERS([fcntl.h sys/ioctl.h sy
*** 530,536 ****
  AC_CHECK_DECL(F_GETFL,,,[#include <fcntl.h>])
  AC_CHECK_DECL(F_SETFL,,,[#include <fcntl.h>])
  if test "$ac_cv_have_decl_F_GETFL$ac_cv_have_decl_F_SETFL" = yesyes ; then
!   AC_CHECK_DECL(O_NONBLOCK,,,[#include <fcntl.h>])
  fi
  
  # For Transactional Memory TS
--- 530,539 ----
  AC_CHECK_DECL(F_GETFL,,,[#include <fcntl.h>])
  AC_CHECK_DECL(F_SETFL,,,[#include <fcntl.h>])
  if test "$ac_cv_have_decl_F_GETFL$ac_cv_have_decl_F_SETFL" = yesyes ; then
!   AC_CHECK_DECL(O_NONBLOCK,
!     AC_DEFINE(HAVE_O_NONBLOCK,1,[Define if O_NONBLOCK is defined in <fcntl.h>]),
!     [],
!     [#include <fcntl.h>])
  fi
  
  # For Transactional Memory TS
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/html/faq.html gcc-13.4.0/libstdc++-v3/doc/html/faq.html
*** gcc-13.3.0/libstdc++-v3/doc/html/faq.html	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/html/faq.html	Thu Jun  5 16:03:03 2025
***************
*** 148,154 ****
       The libstdc++ project is contributed to by several developers
       all over the world, in the same way as GCC or the Linux kernel.
       The current maintainers are listed in the
!      <a class="link" href="https://gcc.gnu.org/viewcvs/gcc/trunk/MAINTAINERS?view=co" target="_top"><code class="filename">MAINTAINERS</code></a>
       file (look for "c++ runtime libs").
      </p><p>
      Development and discussion is held on the libstdc++ mailing
--- 148,154 ----
       The libstdc++ project is contributed to by several developers
       all over the world, in the same way as GCC or the Linux kernel.
       The current maintainers are listed in the
!      <a class="link" href="https://gcc.gnu.org/cgit/gcc/tree/MAINTAINERS" target="_top"><code class="filename">MAINTAINERS</code></a>
       file (look for "c++ runtime libs").
      </p><p>
      Development and discussion is held on the libstdc++ mailing
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/html/manual/abi.html gcc-13.4.0/libstdc++-v3/doc/html/manual/abi.html
*** gcc-13.3.0/libstdc++-v3/doc/html/manual/abi.html	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/html/manual/abi.html	Thu Jun  5 16:03:03 2025
***************
*** 28,34 ****
    g++ command line options may change the ABI as a side-effect of
    use. Such flags include <code class="code">-fpack-struct</code> and
    <code class="code">-fno-exceptions</code>, but include others: see the complete
!   list in the GCC manual under the heading <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code%20Gen%20Options" target="_top">Options
    for Code Generation Conventions</a>.
  </p><p>
    The configure options used when building a specific libstdc++
--- 28,34 ----
    g++ command line options may change the ABI as a side-effect of
    use. Such flags include <code class="code">-fpack-struct</code> and
    <code class="code">-fno-exceptions</code>, but include others: see the complete
!   list in the GCC manual under the heading <a class="link" href="https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code%20Gen%20Options" target="_top">Options
    for Code Generation Conventions</a>.
  </p><p>
    The configure options used when building a specific libstdc++
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/html/manual/api.html gcc-13.4.0/libstdc++-v3/doc/html/manual/api.html
*** gcc-13.3.0/libstdc++-v3/doc/html/manual/api.html	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/html/manual/api.html	Thu Jun  5 16:03:03 2025
*************** the process.
*** 483,490 ****
  Calling a <code class="code">std::bind</code> result as volatile is ill-formed for C++20
  and later.
  </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_131"></a><code class="constant">13</code></h3></div></div></div><p>
! Tunables <span style="color: red">&lt;variable&gt;glibcxx.eh_pool.obj_count&lt;/variable&gt;</span> and
! <span style="color: red">&lt;variable&gt;glibcxx.eh_pool.obj_size&lt;/variable&gt;</span> were added.
  </p><p>Static library <code class="filename">libstdc++exp.a</code> was added
  to provide the symbols for the experimental C++ Contracts support.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_133"></a><code class="constant">13.3</code></h3></div></div></div><p>
  Symbols for the Filesystem TS and C++23 <code class="filename">&lt;stacktrace&gt;</code>
--- 483,490 ----
  Calling a <code class="code">std::bind</code> result as volatile is ill-formed for C++20
  and later.
  </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_131"></a><code class="constant">13</code></h3></div></div></div><p>
! Tunables <code class="varname">glibcxx.eh_pool.obj_count</code> and
! <code class="varname">glibcxx.eh_pool.obj_size</code> were added.
  </p><p>Static library <code class="filename">libstdc++exp.a</code> was added
  to provide the symbols for the experimental C++ Contracts support.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_133"></a><code class="constant">13.3</code></h3></div></div></div><p>
  Symbols for the Filesystem TS and C++23 <code class="filename">&lt;stacktrace&gt;</code>
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/html/manual/ext_concurrency_impl.html gcc-13.4.0/libstdc++-v3/doc/html/manual/ext_concurrency_impl.html
*** gcc-13.3.0/libstdc++-v3/doc/html/manual/ext_concurrency_impl.html	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/html/manual/ext_concurrency_impl.html	Thu Jun  5 16:03:03 2025
*************** non-ancient x86 hardware, <code class="c
*** 34,40 ****
  trick.</p><p> For hosts without compiler intrinsics, but with capable
  hardware, hand-crafted assembly is selected. This is the case for the following hosts:
  </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>cris</p></li><li class="listitem"><p>hppa</p></li><li class="listitem"><p>i386</p></li><li class="listitem"><p>i486</p></li><li class="listitem"><p>m48k</p></li><li class="listitem"><p>mips</p></li><li class="listitem"><p>sparc</p></li></ul></div><p>And for the rest, a simulated atomic lock via pthreads.
! </p><p> Detailed information about compiler intrinsics for atomic operations can be found in the GCC <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html" target="_top"> documentation</a>.
  </p><p> More details on the library fallbacks from the porting <a class="link" href="internals.html#internals.thread_safety" title="Thread Safety">section</a>.
  </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.impl.thread"></a>Thread Abstraction</h3></div></div></div><p>A thin layer above IEEE 1003.1 (i.e. pthreads) is used to abstract
  the thread interface for GCC. This layer is called "gthread," and is
--- 34,40 ----
  trick.</p><p> For hosts without compiler intrinsics, but with capable
  hardware, hand-crafted assembly is selected. This is the case for the following hosts:
  </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>cris</p></li><li class="listitem"><p>hppa</p></li><li class="listitem"><p>i386</p></li><li class="listitem"><p>i486</p></li><li class="listitem"><p>m48k</p></li><li class="listitem"><p>mips</p></li><li class="listitem"><p>sparc</p></li></ul></div><p>And for the rest, a simulated atomic lock via pthreads.
! </p><p>Detailed information about compiler intrinsics for atomic operations can be found in the GCC <a class="link" href="https://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html" target="_top"> documentation</a>.
  </p><p> More details on the library fallbacks from the porting <a class="link" href="internals.html#internals.thread_safety" title="Thread Safety">section</a>.
  </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.impl.thread"></a>Thread Abstraction</h3></div></div></div><p>A thin layer above IEEE 1003.1 (i.e. pthreads) is used to abstract
  the thread interface for GCC. This layer is called "gthread," and is
*************** a POSIX-like interface.
*** 44,50 ****
  the current host. In libstdc++ implementation files,
  &lt;bits/gthr.h&gt; is used to select the proper gthreads file.
  </p><p>Within libstdc++ sources, all calls to underlying thread functionality
! use this layer. More detail as to the specific interface can be found in the source <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/index.html" target="_top">documentation</a>.
  </p><p>By design, the gthread layer is interoperable with the types,
  functions, and usage found in the usual &lt;pthread.h&gt; file,
  including <code class="code">pthread_t</code>, <code class="code">pthread_once_t</code>, <code class="code">pthread_create</code>,
--- 44,50 ----
  the current host. In libstdc++ implementation files,
  &lt;bits/gthr.h&gt; is used to select the proper gthreads file.
  </p><p>Within libstdc++ sources, all calls to underlying thread functionality
! use this layer. More detail as to the specific interface can be found in the source <a class="link" href="https://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/index.html" target="_top">documentation</a>.
  </p><p>By design, the gthread layer is interoperable with the types,
  functions, and usage found in the usual &lt;pthread.h&gt; file,
  including <code class="code">pthread_t</code>, <code class="code">pthread_once_t</code>, <code class="code">pthread_create</code>,
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/html/manual/ext_demangling.html gcc-13.4.0/libstdc++-v3/doc/html/manual/ext_demangling.html
*** gcc-13.3.0/libstdc++-v3/doc/html/manual/ext_demangling.html	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/html/manual/ext_demangling.html	Thu Jun  5 16:03:03 2025
***************
*** 7,13 ****
      original C++ source identifiers is called
      <span class="quote">“<span class="quote">demangling.</span>”</span>
    </p><p>
!     If you have read the <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/namespaces.html" target="_top">source
      documentation for <code class="code">namespace abi</code></a> then you are
      aware of the cross-vendor C++ ABI in use by GCC.  One of the
      exposed functions is used for demangling,
--- 7,13 ----
      original C++ source identifiers is called
      <span class="quote">“<span class="quote">demangling.</span>”</span>
    </p><p>
!     If you have read the <a class="link" href="https://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/namespaces.html" target="_top">source
      documentation for <code class="code">namespace abi</code></a> then you are
      aware of the cross-vendor C++ ABI in use by GCC.  One of the
      exposed functions is used for demangling,
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/html/manual/memory.html gcc-13.4.0/libstdc++-v3/doc/html/manual/memory.html
*** gcc-13.3.0/libstdc++-v3/doc/html/manual/memory.html	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/html/manual/memory.html	Thu Jun  5 16:03:03 2025
***************
*** 120,127 ****
         Over multiple iterations, various STL container
       objects have elements inserted to some maximum amount. A variety
       of allocators are tested.
!      Test source for <a class="link" href="http://gcc.gnu.org/viewcvs/gcc/trunk/libstdc%2B%2B-v3/testsuite/performance/23_containers/insert/sequence.cc?view=markup" target="_top">sequence</a>
!      and <a class="link" href="http://gcc.gnu.org/viewcvs/gcc/trunk/libstdc%2B%2B-v3/testsuite/performance/23_containers/insert/associative.cc?view=markup" target="_top">associative</a>
       containers.
         </p></li><li class="listitem"><p>
         Insertion and erasure in a multi-threaded environment.
--- 120,127 ----
         Over multiple iterations, various STL container
       objects have elements inserted to some maximum amount. A variety
       of allocators are tested.
!      Test source for <a class="link" href="https://gcc.gnu.org/cgit/gcc/tree/libstdc++-v3/testsuite/performance/23_containers/insert/sequence.cc?h=releases%2Fgcc-13" target="_top">sequence</a>
!      and <a class="link" href="https://gcc.gnu.org/cgit/gcc/tree/libstdc++-v3/testsuite/performance/23_containers/insert/associative.cc?h=releases%2Fgcc-13" target="_top">associative</a>
       containers.
         </p></li><li class="listitem"><p>
         Insertion and erasure in a multi-threaded environment.
***************
*** 130,143 ****
       on a per-thread basis, as well as measuring thread contention
       for memory resources.
       Test source
!     <a class="link" href="http://gcc.gnu.org/viewcvs/gcc/trunk/libstdc%2B%2B-v3/testsuite/performance/23_containers/insert_erase/associative.cc?view=markup" target="_top">here</a>.
         </p></li><li class="listitem"><p>
  	 A threaded producer/consumer model.
         </p><p>
         Test source for
!      <a class="link" href="http://gcc.gnu.org/viewcvs/gcc/trunk/libstdc++-v3/testsuite/performance/23_containers/producer_consumer/sequence.cc?view=markup" target="_top">sequence</a>
       and
!      <a class="link" href="http://gcc.gnu.org/viewcvs/gcc/trunk/libstdc++-v3/testsuite/performance/23_containers/producer_consumer/associative.cc?view=markup" target="_top">associative</a>
       containers.
       </p></li></ol></div><p>
       Since GCC 12 the default choice for
--- 130,143 ----
       on a per-thread basis, as well as measuring thread contention
       for memory resources.
       Test source
!     <a class="link" href="https://gcc.gnu.org/cgit/gcc/tree/libstdc++-v3/testsuite/performance/23_containers/insert_erase/associative.cc?h=releases%2Fgcc-13" target="_top">here</a>.
         </p></li><li class="listitem"><p>
  	 A threaded producer/consumer model.
         </p><p>
         Test source for
!      <a class="link" href="https://gcc.gnu.org/cgit/gcc/tree/libstdc++-v3/testsuite/performance/23_containers/producer_consumer/sequence.cc?h=releases%2Fgcc-13" target="_top">sequence</a>
       and
!      <a class="link" href="https://gcc.gnu.org/cgit/gcc/tree/libstdc++-v3/testsuite/performance/23_containers/producer_consumer/associative.cc?h=releases%2Fgcc-13" target="_top">associative</a>
       containers.
       </p></li></ol></div><p>
       Since GCC 12 the default choice for
*************** available policies are:
*** 525,531 ****
         <code class="constant">_S_atomic</code>
         </p><p>
  Selected when GCC supports a builtin atomic compare-and-swap operation
! on the target processor (see <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html" target="_top">Atomic
  Builtins</a>.)  The reference counts are maintained using a lock-free
  algorithm and GCC's atomic builtins, which provide the required memory
  synchronisation.
--- 525,531 ----
         <code class="constant">_S_atomic</code>
         </p><p>
  Selected when GCC supports a builtin atomic compare-and-swap operation
! on the target processor (see <a class="link" href="https://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html" target="_top">Atomic
  Builtins</a>.)  The reference counts are maintained using a lock-free
  algorithm and GCC's atomic builtins, which provide the required memory
  synchronisation.
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/html/manual/mt_allocator_impl.html gcc-13.4.0/libstdc++-v3/doc/html/manual/mt_allocator_impl.html
*** gcc-13.3.0/libstdc++-v3/doc/html/manual/mt_allocator_impl.html	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/html/manual/mt_allocator_impl.html	Thu Jun  5 16:03:03 2025
*************** that uses it is fully constructed. For m
*** 155,161 ****
  containers, this works, as an instance of the allocator is constructed
  as part of a container's constructor. However, this assumption is
  implementation-specific, and subject to change. For an example of a
! pool that frees memory, see the following
!     <a class="link" href="http://gcc.gnu.org/viewcvs/gcc/trunk/libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local-6.cc?view=markup" target="_top">
!     example.</a>
  </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="mt_allocator_design.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="mt_allocator.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="mt_allocator_ex_single.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design Issues </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Single Thread Example</td></tr></table></div></body></html>
\ No newline at end of file
--- 155,161 ----
  containers, this works, as an instance of the allocator is constructed
  as part of a container's constructor. However, this assumption is
  implementation-specific, and subject to change. For an example of a
! pool that frees memory, see the
!     <a class="link" href="https://gcc.gnu.org/cgit/gcc/tree/libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local-6.cc?h=releases%2Fgcc-13" target="_top"><code class="filename">ext/mt_allocator/deallocate_local-6.cc</code></a>
!     example.
  </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="mt_allocator_design.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="mt_allocator.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="mt_allocator_ex_single.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design Issues </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Single Thread Example</td></tr></table></div></body></html>
\ No newline at end of file
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/html/manual/parallel_mode_design.html gcc-13.4.0/libstdc++-v3/doc/html/manual/parallel_mode_design.html
*** gcc-13.3.0/libstdc++-v3/doc/html/manual/parallel_mode_design.html	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/html/manual/parallel_mode_design.html	Thu Jun  5 16:03:03 2025
*************** i. e. it is a singleton. It can be read
*** 174,180 ****
  <code class="code">__gnu_parallel::_Settings::set</code>, respectively.
  Please note that the first call return a const object, so direct manipulation
  is forbidden.
! See <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/index.html" target="_top">
    <code class="filename">&lt;parallel/settings.h&gt;</code></a>
  for complete details.
  </p><p>
--- 174,180 ----
  <code class="code">__gnu_parallel::_Settings::set</code>, respectively.
  Please note that the first call return a const object, so direct manipulation
  is forbidden.
! See <a class="link" href="https://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/index.html" target="_top">
    <code class="filename">&lt;parallel/settings.h&gt;</code></a>
  for complete details.
  </p><p>
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/html/manual/parallel_mode_using.html gcc-13.4.0/libstdc++-v3/doc/html/manual/parallel_mode_using.html
*** gcc-13.3.0/libstdc++-v3/doc/html/manual/parallel_mode_using.html	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/html/manual/parallel_mode_using.html	Thu Jun  5 16:03:03 2025
***************
*** 5,11 ****
    not difficult: just compile your application with the compiler
    flag <code class="literal">-fopenmp</code>. This will link
    in <code class="code">libgomp</code>, the
!   <a class="link" href="http://gcc.gnu.org/onlinedocs/libgomp/" target="_top">GNU Offloading and
      Multi Processing Runtime Library</a>,
    whose presence is mandatory.
  </p><p>
--- 5,11 ----
    not difficult: just compile your application with the compiler
    flag <code class="literal">-fopenmp</code>. This will link
    in <code class="code">libgomp</code>, the
!   <a class="link" href="https://gcc.gnu.org/onlinedocs/libgomp/" target="_top">GNU Offloading and
      Multi Processing Runtime Library</a>,
    whose presence is mandatory.
  </p><p>
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/html/manual/policy_data_structures.html gcc-13.4.0/libstdc++-v3/doc/html/manual/policy_data_structures.html
*** gcc-13.3.0/libstdc++-v3/doc/html/manual/policy_data_structures.html	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/html/manual/policy_data_structures.html	Thu Jun  5 16:03:03 2025
***************
*** 1037,1043 ****
  	  </span>. </span><span class="publisher"><span class="publishername">
  	  Addison-Wesley Publishing Company
  	. </span></span></p></div><div class="biblioentry"><a id="biblio.kt99fat_heaps"></a><p>[biblio.kt99fat_heaps] <span class="title"><em>
! 	<a class="link" href="https://www.cs.princeton.edu/research/techreps/TR-597-99" target="_top">
  	  New Heap Data Structures
  	</a>
        </em>. </span><span class="date">
--- 1037,1043 ----
  	  </span>. </span><span class="publisher"><span class="publishername">
  	  Addison-Wesley Publishing Company
  	. </span></span></p></div><div class="biblioentry"><a id="biblio.kt99fat_heaps"></a><p>[biblio.kt99fat_heaps] <span class="title"><em>
! 	<a class="link" href="https://www.cs.princeton.edu/research/techreps/293" target="_top">
  	  New Heap Data Structures
  	</a>
        </em>. </span><span class="date">
***************
*** 1185,1191 ****
  	    </span>. </span><span class="publisher"><span class="publishername">
  	  Addison-Wesley Publishing Company
  	. </span></span></p></div><div class="biblioentry"><a id="biblio.nelson96stlpq"></a><p>[biblio.nelson96stlpq] <span class="title"><em>
! 	<a class="link" href="https://marknelson.us/posts/1996/01/01/priority-queues.html" target="_top">Priority Queues and the STL
  	</a>
        </em>. </span><span class="date">
  	January 1996
--- 1185,1191 ----
  	    </span>. </span><span class="publisher"><span class="publishername">
  	  Addison-Wesley Publishing Company
  	. </span></span></p></div><div class="biblioentry"><a id="biblio.nelson96stlpq"></a><p>[biblio.nelson96stlpq] <span class="title"><em>
! 	<a class="link" href="https://web.archive.org/web/20240806213010/https://marknelson.us/posts/1996/01/01/priority-queues.html" target="_top">Priority Queues and the STL
  	</a>
        </em>. </span><span class="date">
  	January 1996
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/html/manual/status.html gcc-13.4.0/libstdc++-v3/doc/html/manual/status.html
*** gcc-13.3.0/libstdc++-v3/doc/html/manual/status.html	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/html/manual/status.html	Thu Jun  5 16:03:03 2025
***************
*** 6,12 ****
  This status table is based on the table of contents of ISO/IEC 14882:2003.
  </p><p>
  This section describes the C++ support in
! the GCC 13 release series, not in any particular release.
  </p><div class="table"><a id="table.cxx98_status"></a><p class="title"><strong>Table 1.1. C++ 1998/2003 Implementation Status</strong></p><div class="table-contents"><table class="table" summary="C++ 1998/2003 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
  	<span class="emphasis"><em>18</em></span>
        </td><td colspan="3" align="left">
--- 6,12 ----
  This status table is based on the table of contents of ISO/IEC 14882:2003.
  </p><p>
  This section describes the C++ support in
! the GCC 13 release series.
  </p><div class="table"><a id="table.cxx98_status"></a><p class="title"><strong>Table 1.1. C++ 1998/2003 Implementation Status</strong></p><div class="table-contents"><table class="table" summary="C++ 1998/2003 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
  	<span class="emphasis"><em>18</em></span>
        </td><td colspan="3" align="left">
*************** since that release.
*** 161,167 ****
  This status table is based on the table of contents of ISO/IEC 14882:2011.
  </p><p>
  This section describes the C++11 support in
! the GCC 13 release series, not in any particular release.
  </p><div class="table"><a id="table.cxx11_status"></a><p class="title"><strong>Table 1.2. C++ 2011 Implementation Status</strong></p><div class="table-contents"><table class="table" summary="C++ 2011 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
  	<span class="emphasis"><em>18</em></span>
        </td><td colspan="3" align="left">
--- 161,167 ----
  This status table is based on the table of contents of ISO/IEC 14882:2011.
  </p><p>
  This section describes the C++11 support in
! the GCC 13 release series.
  </p><div class="table"><a id="table.cxx11_status"></a><p class="title"><strong>Table 1.2. C++ 2011 Implementation Status</strong></p><div class="table-contents"><table class="table" summary="C++ 2011 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
  	<span class="emphasis"><em>18</em></span>
        </td><td colspan="3" align="left">
*************** Some subclauses are not shown in the tab
*** 434,440 ****
  since C++11 and the implementation is complete.
  </p><p>
  This section describes the C++14 and library TS support in
! the GCC 13 release series, not in any particular release.
  </p><div class="table"><a id="table.cxx14_status"></a><p class="title"><strong>Table 1.3. C++ 2014 Implementation Status</strong></p><div class="table-contents"><table class="table" summary="C++ 2014 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
  	<span class="emphasis"><em>18</em></span>
        </td><td colspan="3" align="left">
--- 434,440 ----
  since C++11 and the implementation is complete.
  </p><p>
  This section describes the C++14 and library TS support in
! the GCC 13 release series.
  </p><div class="table"><a id="table.cxx14_status"></a><p class="title"><strong>Table 1.3. C++ 2014 Implementation Status</strong></p><div class="table-contents"><table class="table" summary="C++ 2014 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
  	<span class="emphasis"><em>18</em></span>
        </td><td colspan="3" align="left">
*************** so the API and ABI of features added in
*** 579,585 ****
  since that release.
  </p><p>
  This section describes the C++17 and library TS support in
! the GCC 13 release series, not in any particular release.
  </p><p>
  The following table lists new library features that are included in
  the C++17 standard. The "Proposal" column provides a link to the
--- 579,585 ----
  since that release.
  </p><p>
  This section describes the C++17 and library TS support in
! the GCC 13 release series.
  </p><p>
  The following table lists new library features that are included in
  the C++17 standard. The "Proposal" column provides a link to the
*************** options. The pre-defined symbol
*** 1255,1261 ****
  presence of the required flag.
  </p><p>
  This section describes the C++20 and library TS support in
! the GCC 13 release series, not in any particular release.
  </p><p>
  The following table lists new library features that are included in
  the C++20 standard. The "Proposal" column provides a link to the
--- 1255,1261 ----
  presence of the required flag.
  </p><p>
  This section describes the C++20 and library TS support in
! the GCC 13 release series.
  </p><p>
  The following table lists new library features that are included in
  the C++20 standard. The "Proposal" column provides a link to the
*************** options. The pre-defined symbol
*** 1725,1731 ****
  presence of the required flag.
  </p><p>
  This section describes the C++23 and library TS support in
! the GCC 13 release series, not in any particular release.
  </p><p>
  The following table lists new library features that have been accepted into
  the C++23 working draft. The "Proposal" column provides a link to the
--- 1725,1731 ----
  presence of the required flag.
  </p><p>
  This section describes the C++23 and library TS support in
! the GCC 13 release series.
  </p><p>
  The following table lists new library features that have been accepted into
  the C++23 working draft. The "Proposal" column provides a link to the
*************** or any notes about the implementation.
*** 1895,1905 ****
          <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p0533r9.pdf" target="_top">
          P0533R9
          </a>
!       </td><td align="center"> </td><td align="left"> <code class="code">__cpp_lib_constexpr_cmath &gt;= 202202L</code> </td></tr><tr bgcolor="#C8B0B0"><td align="left"> Deprecate std::aligned_storage and std::aligned_union </td><td align="left">
          <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1413r3.pdf" target="_top">
          P1413R3
          </a>
!       </td><td align="center"> </td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left"> A type trait to detect reference binding to temporary </td><td align="left">
          <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2255r2.html" target="_top">
          P2255R2
          </a>
--- 1895,1905 ----
          <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p0533r9.pdf" target="_top">
          P0533R9
          </a>
!       </td><td align="center"> </td><td align="left"> <code class="code">__cpp_lib_constexpr_cmath &gt;= 202202L</code> </td></tr><tr><td align="left"> Deprecate std::aligned_storage and std::aligned_union </td><td align="left">
          <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1413r3.pdf" target="_top">
          P1413R3
          </a>
!       </td><td align="center"> 13.1 </td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left"> A type trait to detect reference binding to temporary </td><td align="left">
          <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2255r2.html" target="_top">
          P2255R2
          </a>
*************** or any notes about the implementation.
*** 1990,1996 ****
          <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2508r1.html" target="_top">
          P2508R1
          </a>
!       </td><td align="center"> 13.1 (feature test macro not defined)</td><td align="left"> <code class="code">__cpp_lib_format &gt;= 202207L</code> </td></tr><tr bgcolor="#C8B0B0"><td align="left">
  	Clarify handling of encodings in localized formatting of chrono types
        </td><td align="left">
          <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2419r2.html" target="_top">
--- 1990,1996 ----
          <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2508r1.html" target="_top">
          P2508R1
          </a>
!       </td><td align="center"> 13.1 (feature test macro not updated)</td><td align="left"> <code class="code">__cpp_lib_format &gt;= 202207L</code> </td></tr><tr bgcolor="#C8B0B0"><td align="left">
  	Clarify handling of encodings in localized formatting of chrono types
        </td><td align="left">
          <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2419r2.html" target="_top">
*************** In this implementation the header names
*** 2123,2129 ****
  <code class="code">&lt;tr1/memory&gt;</code>, and so on.
  </p><p>
  This page describes the TR1 support in
! the GCC 13 release series, not in any particular release.
  </p><div class="table"><a id="table.tr1_status"></a><p class="title"><strong>Table 1.11. C++ TR1 Implementation Status</strong></p><div class="table-contents"><table class="table" summary="C++ TR1 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left"><span class="emphasis"><em>2</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>General Utilities</em></span></td></tr><tr><td align="left">2.1</td><td align="left">Reference wrappers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.1.1</td><td align="left">Additions to header <code class="code">&lt;functional&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2</td><td align="left">Class template <code class="code">reference_wrapper</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.1.2.1</td><td align="left"><code class="code">reference_wrapper</code> construct/copy/destroy</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.2</td><td align="left"><code class="code">reference_wrapper</code> assignment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.3</td><td align="left"><code class="code">reference_wrapper</code> access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.4</td><td align="left"><code class="code">reference_wrapper</code> invocation</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.5</td><td align="left"><code class="code">reference_wrapper</code> helper functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2</td><td align="left">Smart pointers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.2.1</td><td align="left">Additions to header <code class="code">&lt;memory&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.2</td><td align="left">Class <code class="code">bad_weak_ptr</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3</td><td align="left">Class template <code class="code">shared_ptr</code></td><td align="left"> </td><td align="left">
  	<p>
  	  Uses code from
--- 2123,2129 ----
  <code class="code">&lt;tr1/memory&gt;</code>, and so on.
  </p><p>
  This page describes the TR1 support in
! the GCC 13 release series.
  </p><div class="table"><a id="table.tr1_status"></a><p class="title"><strong>Table 1.11. C++ TR1 Implementation Status</strong></p><div class="table-contents"><table class="table" summary="C++ TR1 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left"><span class="emphasis"><em>2</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>General Utilities</em></span></td></tr><tr><td align="left">2.1</td><td align="left">Reference wrappers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.1.1</td><td align="left">Additions to header <code class="code">&lt;functional&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2</td><td align="left">Class template <code class="code">reference_wrapper</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.1.2.1</td><td align="left"><code class="code">reference_wrapper</code> construct/copy/destroy</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.2</td><td align="left"><code class="code">reference_wrapper</code> assignment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.3</td><td align="left"><code class="code">reference_wrapper</code> access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.4</td><td align="left"><code class="code">reference_wrapper</code> invocation</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.5</td><td align="left"><code class="code">reference_wrapper</code> helper functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2</td><td align="left">Smart pointers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.2.1</td><td align="left">Additions to header <code class="code">&lt;memory&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.2</td><td align="left">Class <code class="code">bad_weak_ptr</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3</td><td align="left">Class template <code class="code">shared_ptr</code></td><td align="left"> </td><td align="left">
  	<p>
  	  Uses code from
*************** ISO/IEC TR 24733:2011,
*** 2144,2150 ****
  decimal floating-point arithmetic".
  </p><p>
  This page describes the TR 24733 support in
! the GCC 13 release series, not in any particular release.
  </p><div class="table"><a id="table.decfp_status"></a><p class="title"><strong>Table 1.12. C++ TR 24733 Implementation Status</strong></p><div class="table-contents"><table class="table" summary="C++ TR 24733 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
  	<span class="emphasis"><em>0</em></span>
        </td><td colspan="3" align="left">
--- 2144,2150 ----
  decimal floating-point arithmetic".
  </p><p>
  This page describes the TR 24733 support in
! the GCC 13 release series.
  </p><div class="table"><a id="table.decfp_status"></a><p class="title"><strong>Table 1.12. C++ TR 24733 Implementation Status</strong></p><div class="table-contents"><table class="table" summary="C++ TR 24733 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
  	<span class="emphasis"><em>0</em></span>
        </td><td colspan="3" align="left">
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/html/manual/strings.html gcc-13.4.0/libstdc++-v3/doc/html/manual/strings.html
*** gcc-13.3.0/libstdc++-v3/doc/html/manual/strings.html	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/html/manual/strings.html	Thu Jun  5 16:03:03 2025
*************** stringtok(Container &amp;container, stri
*** 269,276 ****
        (see <a class="link" href="../faq.html#faq.size_equals_capacity" title="7.8.">this FAQ
        entry</a>) but the regular copy constructor cannot be used
        because libstdc++'s <code class="code">string</code> is Copy-On-Write in GCC 3.
!    </p><p>In <a class="link" href="status.html#status.iso.2011" title="C++ 2011">C++11</a> mode you can call
!       <code class="code">s.shrink_to_fit()</code> to achieve the same effect as
        <code class="code">s.reserve(s.size())</code>.
     </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.Cstring"></a>CString (MFC)</h3></div></div></div><p>
      </p><p>A common lament seen in various newsgroups deals with the Standard
--- 269,276 ----
        (see <a class="link" href="../faq.html#faq.size_equals_capacity" title="7.8.">this FAQ
        entry</a>) but the regular copy constructor cannot be used
        because libstdc++'s <code class="code">string</code> is Copy-On-Write in GCC 3.
!    </p><p>From GCC 4.5 in <a class="link" href="status.html#status.iso.2011" title="C++ 2011">C++11</a> mode you
!       can call <code class="code">s.shrink_to_fit()</code> to achieve the same effect as
        <code class="code">s.reserve(s.size())</code>.
     </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.Cstring"></a>CString (MFC)</h3></div></div></div><p>
      </p><p>A common lament seen in various newsgroups deals with the Standard
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/html/manual/test.html gcc-13.4.0/libstdc++-v3/doc/html/manual/test.html
*** gcc-13.3.0/libstdc++-v3/doc/html/manual/test.html	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/html/manual/test.html	Thu Jun  5 16:03:03 2025
*************** cat 27_io/objects/char/3_xin.in | a.out<
*** 232,238 ****
  </pre><p>
      </p><p>
        The testsuite will create a number of files in the directory in
!       which you run this command,.  Some of those files might use the
        same name as files created by other testsuites (like the ones
        for GCC and G++), so you should not try to run all the
        testsuites in parallel from the same directory.
--- 232,238 ----
  </pre><p>
      </p><p>
        The testsuite will create a number of files in the directory in
!       which you run this command.  Some of those files might use the
        same name as files created by other testsuites (like the ones
        for GCC and G++), so you should not try to run all the
        testsuites in parallel from the same directory.
*************** cat 27_io/objects/char/3_xin.in | a.out<
*** 345,355 ****
        tests multiple times in different variations. For example, to run the
        entire testsuite three times using <code class="option">-O3</code> but with
        different <code class="option">-std</code> options:
! </p><pre class="programlisting">    make check 'RUNTESTFLAGS=--target_board=unix/-O3\"{-std=gnu++98,-std=gnu++11,-std=gnu++14}\"'</pre><p>
        N.B. that set of variations could also be written as
        <code class="literal">unix/-O3\"{-std=gnu++98,-std=gnu++11,}\"</code> so that
        the third variation would use the default for <code class="option">-std</code>
!       (which is <code class="option">-std=gnu++14</code> as of GCC 6).
      </p><p>
        To run the libstdc++ test suite under the
        <a class="link" href="debug_mode.html" title="Chapter 17. Debug Mode">debug mode</a>, use
--- 345,355 ----
        tests multiple times in different variations. For example, to run the
        entire testsuite three times using <code class="option">-O3</code> but with
        different <code class="option">-std</code> options:
! </p><pre class="programlisting">    make check 'RUNTESTFLAGS=--target_board=unix/-O3\"{-std=gnu++98,-std=gnu++11,-std=gnu++17}\"'</pre><p>
        N.B. that set of variations could also be written as
        <code class="literal">unix/-O3\"{-std=gnu++98,-std=gnu++11,}\"</code> so that
        the third variation would use the default for <code class="option">-std</code>
!       (which is <code class="option">-std=gnu++17</code> as of GCC 11).
      </p><p>
        To run the libstdc++ test suite under the
        <a class="link" href="debug_mode.html" title="Chapter 17. Debug Mode">debug mode</a>, use
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/html/manual/using.html gcc-13.4.0/libstdc++-v3/doc/html/manual/using.html
*** gcc-13.3.0/libstdc++-v3/doc/html/manual/using.html	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/html/manual/using.html	Thu Jun  5 16:03:03 2025
***************
*** 4,10 ****
    
  </th><td width="20%" align="right"> <a accesskey="n" href="using_headers.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.using"></a>Chapter 3. Using</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_dual_abi.html">Dual ABI</a></span></dt><dd><dl><dt><span class="section"><a href="using_dual_abi.html#manual.intro.using.abi.trouble">Troubleshooting</a></span></dt></dl></dd><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.experimental">Experimental Library Extensions</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.alloc">Memory allocation</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.memory.mtalloc">Non-memory leaks in Pool and MT allocators</a></span></dt></dl></dd><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.flags"></a>Command Options</h2></div></div></div><p>
        The set of features available in the GNU C++ library is shaped by
!       several <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Invoking-GCC.html" target="_top">GCC
        Command Options</a>. Options that impact libstdc++ are
        enumerated and detailed in the table below.
      </p><p>
--- 4,10 ----
    
  </th><td width="20%" align="right"> <a accesskey="n" href="using_headers.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.using"></a>Chapter 3. Using</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_dual_abi.html">Dual ABI</a></span></dt><dd><dl><dt><span class="section"><a href="using_dual_abi.html#manual.intro.using.abi.trouble">Troubleshooting</a></span></dt></dl></dd><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.experimental">Experimental Library Extensions</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.alloc">Memory allocation</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.memory.mtalloc">Non-memory leaks in Pool and MT allocators</a></span></dt></dl></dd><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.flags"></a>Command Options</h2></div></div></div><p>
        The set of features available in the GNU C++ library is shaped by
!       several <a class="link" href="https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Invoking-GCC.html" target="_top">GCC
        Command Options</a>. Options that impact libstdc++ are
        enumerated and detailed in the table below.
      </p><p>
***************
*** 14,22 ****
        <span class="command"><strong>g++ -std=gnu++17</strong></span> since GCC 11, and
        <span class="command"><strong>g++ -std=gnu++14</strong></span> in GCC 6, 7, 8, 9, and 10, and
        <span class="command"><strong>g++ -std=gnu++98</strong></span> for older releases.
!     </p><div class="table"><a id="table.cmd_options"></a><p class="title"><strong>Table 3.1. C++ Command Options</strong></p><div class="table-contents"><table class="table" summary="C++ Command Options" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Option Flags</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><code class="literal">-std=c++98</code> or <code class="literal">-std=c++03</code>
!       </td><td align="left">Use the 1998 ISO C++ standard plus amendments.</td></tr><tr><td align="left"><code class="literal">-std=gnu++98</code> or <code class="literal">-std=gnu++03</code>
!       </td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left"><code class="literal">-std=c++11</code></td><td align="left">Use the 2011 ISO C++ standard.</td></tr><tr><td align="left"><code class="literal">-std=gnu++11</code></td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left"><code class="literal">-std=c++14</code></td><td align="left">Use the 2014 ISO C++ standard.</td></tr><tr><td align="left"><code class="literal">-std=gnu++14</code></td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left">
  	<code class="literal">-fno-exceptions</code>
        </td><td align="left">See <a class="link" href="using_exceptions.html#intro.using.exception.no" title="Doing without">exception-free dialect</a></td></tr><tr><td align="left">
  	<code class="literal">-fno-rtti</code>
--- 14,24 ----
        <span class="command"><strong>g++ -std=gnu++17</strong></span> since GCC 11, and
        <span class="command"><strong>g++ -std=gnu++14</strong></span> in GCC 6, 7, 8, 9, and 10, and
        <span class="command"><strong>g++ -std=gnu++98</strong></span> for older releases.
!     </p><div class="table"><a id="table.cmd_options"></a><p class="title"><strong>Table 3.1. C++ Command Options</strong></p><div class="table-contents"><table class="table" summary="C++ Command Options" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Option Flags</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><code class="literal">-std</code>
!       </td><td align="left">
! 	Select the C++ standard, and whether to use the base standard
! 	or GNU dialect.
!       </td></tr><tr><td align="left">
  	<code class="literal">-fno-exceptions</code>
        </td><td align="left">See <a class="link" href="using_exceptions.html#intro.using.exception.no" title="Doing without">exception-free dialect</a></td></tr><tr><td align="left">
  	<code class="literal">-fno-rtti</code>
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/html/manual/using_concurrency.html gcc-13.4.0/libstdc++-v3/doc/html/manual/using_concurrency.html
*** gcc-13.3.0/libstdc++-v3/doc/html/manual/using_concurrency.html	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/html/manual/using_concurrency.html	Thu Jun  5 16:03:03 2025
*************** gcc version 4.1.2 20070925 (Red Hat 4.1.
*** 126,131 ****
--- 126,141 ----
           the container the iterator refers to (for example incrementing a
           list iterator must access the pointers between nodes, which are part
           of the container and so conflict with other accesses to the container).
+       </p><p>
+ 	 The Copy-On-Write <code class="classname">std::string</code> implementation
+ 	 used before GCC 5 (and with
+ 	 <a class="link" href="using_dual_abi.html" title="Dual ABI">_GLIBCXX_USE_CXX11_ABI=0</a>)
+ 	 is not a standard container and does not conform to the data race
+ 	 avoidance rules described above. For the Copy-On-Write
+ 	 <code class="classname">std::string</code>, non-const member functions such as
+ 	 <code class="function">begin()</code> are considered to be modifying accesses
+ 	 and so must not be used concurrently with any other accesses to the
+ 	 same object.
        </p><p>Programs which follow the rules above will not encounter data
           races in library code, even when using library types which share
           state between distinct objects.  In the example below the
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/html/manual/using_dual_abi.html gcc-13.4.0/libstdc++-v3/doc/html/manual/using_dual_abi.html
*** gcc-13.3.0/libstdc++-v3/doc/html/manual/using_dual_abi.html	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/html/manual/using_dual_abi.html	Thu Jun  5 16:03:03 2025
***************
*** 22,28 ****
    of the macro is <code class="literal">1</code> which causes the new ABI to be active,
    so to use the old ABI you must explicitly define the macro to
    <code class="literal">0</code> before including any library headers.
!   (Be aware that some GNU/Linux distributions configure GCC 5 differently so
    that the default value of the macro is <code class="literal">0</code> and users must
    define it to <code class="literal">1</code> to enable the new ABI.)
  </p><p> Although the changes were made for C++11 conformance, the choice of ABI
--- 22,28 ----
    of the macro is <code class="literal">1</code> which causes the new ABI to be active,
    so to use the old ABI you must explicitly define the macro to
    <code class="literal">0</code> before including any library headers.
!   (Be aware that some GNU/Linux distributions configured GCC 5 differently so
    that the default value of the macro is <code class="literal">0</code> and users must
    define it to <code class="literal">1</code> to enable the new ABI.)
  </p><p> Although the changes were made for C++11 conformance, the choice of ABI
***************
*** 72,77 ****
--- 72,93 ----
    Handlers for <code class="classname">std::exception</code> will always catch
    iostreams exceptions, because the old and new type both inherit from
    <code class="classname">std::exception</code>.
+ </p><p>
+   Some features are not supported when using the old ABI, including:
+   </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+     Using <code class="classname">std::string::const_iterator</code> for
+     positional arguments to member functions such as
+     <code class="function">std::string::erase</code>.
+   </li><li class="listitem">
+     Allocator propagation in <code class="classname">std::string</code>.
+   </li><li class="listitem">
+     Using <code class="classname">std::string</code> at compile-time in
+     <code class="code">constexpr</code> functions.
+   </li><li class="listitem">
+     Class <code class="classname">std::chrono::time_zone</code> and all related APIs.
+   </li><li class="listitem">
+     The <code class="filename">&lt;syncstream&gt;</code> header.
+   </li></ul></div><p>
  </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.abi.trouble"></a>Troubleshooting</h3></div></div></div><p> If you get linker errors about undefined references to symbols
    that involve types in the <code class="code">std::__cxx11</code> namespace or the tag
    <code class="code">[abi:cxx11]</code> then it probably indicates that you are trying to
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/html/manual/using_exceptions.html gcc-13.4.0/libstdc++-v3/doc/html/manual/using_exceptions.html
*** gcc-13.3.0/libstdc++-v3/doc/html/manual/using_exceptions.html	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/html/manual/using_exceptions.html	Thu Jun  5 16:03:03 2025
*************** exception neutrality and exception safet
*** 158,164 ****
    </dd></dl></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.no"></a>Doing without</h3></div></div></div><p>
      C++ is a language that strives to be as efficient as is possible
      in delivering features. As such, considerable care is used by both
!     language implementer and designers to make sure unused features
      not impose hidden or unexpected costs. The GNU system tries to be
      as flexible and as configurable as possible. So, it should come as
      no surprise that GNU C++ provides an optional language extension,
--- 158,164 ----
    </dd></dl></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.no"></a>Doing without</h3></div></div></div><p>
      C++ is a language that strives to be as efficient as is possible
      in delivering features. As such, considerable care is used by both
!     language implementer and designers to make sure unused features do
      not impose hidden or unexpected costs. The GNU system tries to be
      as flexible and as configurable as possible. So, it should come as
      no surprise that GNU C++ provides an optional language extension,
*************** exception neutrality and exception safet
*** 166,173 ****
      implicitly generated magic necessary to
      support <code class="literal">try</code> and <code class="literal">catch</code> blocks
      and thrown objects. (Language support
!     for <code class="literal">-fno-exceptions</code> is documented in the GNU
!     GCC <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code-Gen-Options" target="_top">manual</a>.)
    </p><p>Before detailing the library support
      for <code class="literal">-fno-exceptions</code>, first a passing note on
      the things lost when this flag is used: it will break exceptions
--- 166,173 ----
      implicitly generated magic necessary to
      support <code class="literal">try</code> and <code class="literal">catch</code> blocks
      and thrown objects. (Language support
!     for <code class="literal">-fno-exceptions</code> is documented in the GCC
!     <a class="link" href="https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code-Gen-Options" target="_top">manual</a>.)
    </p><p>Before detailing the library support
      for <code class="literal">-fno-exceptions</code>, first a passing note on
      the things lost when this flag is used: it will break exceptions
*************** exception neutrality and exception safet
*** 179,185 ****
      uses <code class="literal">try</code> or <code class="literal">catch</code>, you
      shouldn't use <code class="literal">-fno-exceptions</code>.
    </p><p>
!     And what it to be gained, tinkering in the back alleys with a
      language like this? Exception handling overhead can be measured
      in the size of the executable binary, and varies with the
      capabilities of the underlying operating system and specific
--- 179,185 ----
      uses <code class="literal">try</code> or <code class="literal">catch</code>, you
      shouldn't use <code class="literal">-fno-exceptions</code>.
    </p><p>
!     And what is to be gained, tinkering in the back alleys with a
      language like this? Exception handling overhead can be measured
      in the size of the executable binary, and varies with the
      capabilities of the underlying operating system and specific
*************** exception neutrality and exception safet
*** 216,230 ****
  # define __throw_exception_again
  #endif
  </pre><p>
!   In addition, for every object derived from
    class <code class="classname">exception</code>, there exists a corresponding
    function with C language linkage. An example:
  </p><pre class="programlisting">
  #if __cpp_exceptions
!   void __throw_bad_exception(void)
    { throw bad_exception(); }
  #else
!   void __throw_bad_exception(void)
    { abort(); }
  #endif
  </pre><p>
--- 216,230 ----
  # define __throw_exception_again
  #endif
  </pre><p>
!   In addition, for most of the classes derived from
    class <code class="classname">exception</code>, there exists a corresponding
    function with C language linkage. An example:
  </p><pre class="programlisting">
  #if __cpp_exceptions
!   void __throw_bad_exception()
    { throw bad_exception(); }
  #else
!   void __throw_bad_exception()
    { abort(); }
  #endif
  </pre><p>
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/xml/faq.xml gcc-13.4.0/libstdc++-v3/doc/xml/faq.xml
*** gcc-13.3.0/libstdc++-v3/doc/xml/faq.xml	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/xml/faq.xml	Thu Jun  5 16:03:03 2025
***************
*** 91,97 ****
       The libstdc++ project is contributed to by several developers
       all over the world, in the same way as GCC or the Linux kernel.
       The current maintainers are listed in the
!      <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://gcc.gnu.org/viewcvs/gcc/trunk/MAINTAINERS?view=co"><filename>MAINTAINERS</filename></link>
       file (look for "c++ runtime libs").
      </para>
      <para>
--- 91,97 ----
       The libstdc++ project is contributed to by several developers
       all over the world, in the same way as GCC or the Linux kernel.
       The current maintainers are listed in the
!      <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://gcc.gnu.org/cgit/gcc/tree/MAINTAINERS"><filename>MAINTAINERS</filename></link>
       file (look for "c++ runtime libs").
      </para>
      <para>
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/xml/manual/abi.xml gcc-13.4.0/libstdc++-v3/doc/xml/manual/abi.xml
*** gcc-13.3.0/libstdc++-v3/doc/xml/manual/abi.xml	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/xml/manual/abi.xml	Thu Jun  5 16:03:03 2025
***************
*** 52,58 ****
    g++ command line options may change the ABI as a side-effect of
    use. Such flags include <code>-fpack-struct</code> and
    <code>-fno-exceptions</code>, but include others: see the complete
!   list in the GCC manual under the heading <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code%20Gen%20Options">Options
    for Code Generation Conventions</link>.
  </para>
  
--- 52,58 ----
    g++ command line options may change the ABI as a side-effect of
    use. Such flags include <code>-fpack-struct</code> and
    <code>-fno-exceptions</code>, but include others: see the complete
!   list in the GCC manual under the heading <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code%20Gen%20Options">Options
    for Code Generation Conventions</link>.
  </para>
  
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/xml/manual/allocator.xml gcc-13.4.0/libstdc++-v3/doc/xml/manual/allocator.xml
*** gcc-13.3.0/libstdc++-v3/doc/xml/manual/allocator.xml	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/xml/manual/allocator.xml	Thu Jun  5 16:03:03 2025
***************
*** 184,191 ****
         Over multiple iterations, various STL container
       objects have elements inserted to some maximum amount. A variety
       of allocators are tested.
!      Test source for <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/viewcvs/gcc/trunk/libstdc%2B%2B-v3/testsuite/performance/23_containers/insert/sequence.cc?view=markup">sequence</link>
!      and <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/viewcvs/gcc/trunk/libstdc%2B%2B-v3/testsuite/performance/23_containers/insert/associative.cc?view=markup">associative</link>
       containers.
         </para>
  
--- 184,191 ----
         Over multiple iterations, various STL container
       objects have elements inserted to some maximum amount. A variety
       of allocators are tested.
!      Test source for <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://gcc.gnu.org/cgit/gcc/tree/libstdc++-v3/testsuite/performance/23_containers/insert/sequence.cc?h=releases%2Fgcc-13">sequence</link>
!      and <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://gcc.gnu.org/cgit/gcc/tree/libstdc++-v3/testsuite/performance/23_containers/insert/associative.cc?h=releases%2Fgcc-13">associative</link>
       containers.
         </para>
  
***************
*** 200,206 ****
       on a per-thread basis, as well as measuring thread contention
       for memory resources.
       Test source
!     <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/viewcvs/gcc/trunk/libstdc%2B%2B-v3/testsuite/performance/23_containers/insert_erase/associative.cc?view=markup">here</link>.
         </para>
       </listitem>
  
--- 200,206 ----
       on a per-thread basis, as well as measuring thread contention
       for memory resources.
       Test source
!     <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://gcc.gnu.org/cgit/gcc/tree/libstdc++-v3/testsuite/performance/23_containers/insert_erase/associative.cc?h=releases%2Fgcc-13">here</link>.
         </para>
       </listitem>
  
***************
*** 210,218 ****
         </para>
         <para>
         Test source for
!      <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/viewcvs/gcc/trunk/libstdc++-v3/testsuite/performance/23_containers/producer_consumer/sequence.cc?view=markup">sequence</link>
       and
!      <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/viewcvs/gcc/trunk/libstdc++-v3/testsuite/performance/23_containers/producer_consumer/associative.cc?view=markup">associative</link>
       containers.
       </para>
       </listitem>
--- 210,218 ----
         </para>
         <para>
         Test source for
!      <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://gcc.gnu.org/cgit/gcc/tree/libstdc++-v3/testsuite/performance/23_containers/producer_consumer/sequence.cc?h=releases%2Fgcc-13">sequence</link>
       and
!      <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://gcc.gnu.org/cgit/gcc/tree/libstdc++-v3/testsuite/performance/23_containers/producer_consumer/associative.cc?h=releases%2Fgcc-13">associative</link>
       containers.
       </para>
       </listitem>
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/xml/manual/concurrency_extensions.xml gcc-13.4.0/libstdc++-v3/doc/xml/manual/concurrency_extensions.xml
*** gcc-13.3.0/libstdc++-v3/doc/xml/manual/concurrency_extensions.xml	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/xml/manual/concurrency_extensions.xml	Thu Jun  5 16:03:03 2025
*************** hardware, hand-crafted assembly is selec
*** 267,273 ****
  <para>And for the rest, a simulated atomic lock via pthreads.
  </para>
  
! <para> Detailed information about compiler intrinsics for atomic operations can be found in the GCC <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html"> documentation</link>.
  </para>
  
  <para> More details on the library fallbacks from the porting <link linkend="internals.thread_safety">section</link>.
--- 267,273 ----
  <para>And for the rest, a simulated atomic lock via pthreads.
  </para>
  
! <para>Detailed information about compiler intrinsics for atomic operations can be found in the GCC <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html"> documentation</link>.
  </para>
  
  <para> More details on the library fallbacks from the porting <link linkend="internals.thread_safety">section</link>.
*************** the current host. In libstdc++ implement
*** 290,296 ****
  </para>
  
  <para>Within libstdc++ sources, all calls to underlying thread functionality
! use this layer. More detail as to the specific interface can be found in the source <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/index.html">documentation</link>.
  </para>
  
  <para>By design, the gthread layer is interoperable with the types,
--- 290,296 ----
  </para>
  
  <para>Within libstdc++ sources, all calls to underlying thread functionality
! use this layer. More detail as to the specific interface can be found in the source <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/index.html">documentation</link>.
  </para>
  
  <para>By design, the gthread layer is interoperable with the types,
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/xml/manual/evolution.xml gcc-13.4.0/libstdc++-v3/doc/xml/manual/evolution.xml
*** gcc-13.3.0/libstdc++-v3/doc/xml/manual/evolution.xml	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/xml/manual/evolution.xml	Thu Jun  5 16:03:03 2025
*************** and later.
*** 1096,1103 ****
  <section xml:id="api.rel_131"><info><title><constant>13</constant></title></info>
  
  <para>
! Tunables <variable>glibcxx.eh_pool.obj_count</variable> and
! <variable>glibcxx.eh_pool.obj_size</variable> were added.
  </para>
  
  <para>Static library <filename>libstdc++exp.a</filename> was added
--- 1096,1103 ----
  <section xml:id="api.rel_131"><info><title><constant>13</constant></title></info>
  
  <para>
! Tunables <varname>glibcxx.eh_pool.obj_count</varname> and
! <varname>glibcxx.eh_pool.obj_size</varname> were added.
  </para>
  
  <para>Static library <filename>libstdc++exp.a</filename> was added
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/xml/manual/extensions.xml gcc-13.4.0/libstdc++-v3/doc/xml/manual/extensions.xml
*** gcc-13.3.0/libstdc++-v3/doc/xml/manual/extensions.xml	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/xml/manual/extensions.xml	Thu Jun  5 16:03:03 2025
*************** get_temporary_buffer(5, (int*)0);
*** 498,504 ****
      <quote>demangling.</quote>
    </para>
    <para>
!     If you have read the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/namespaces.html">source
      documentation for <code>namespace abi</code></link> then you are
      aware of the cross-vendor C++ ABI in use by GCC.  One of the
      exposed functions is used for demangling,
--- 498,504 ----
      <quote>demangling.</quote>
    </para>
    <para>
!     If you have read the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/namespaces.html">source
      documentation for <code>namespace abi</code></link> then you are
      aware of the cross-vendor C++ ABI in use by GCC.  One of the
      exposed functions is used for demangling,
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/xml/manual/mt_allocator.xml gcc-13.4.0/libstdc++-v3/doc/xml/manual/mt_allocator.xml
*** gcc-13.3.0/libstdc++-v3/doc/xml/manual/mt_allocator.xml	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/xml/manual/mt_allocator.xml	Thu Jun  5 16:03:03 2025
*************** that uses it is fully constructed. For m
*** 307,315 ****
  containers, this works, as an instance of the allocator is constructed
  as part of a container's constructor. However, this assumption is
  implementation-specific, and subject to change. For an example of a
! pool that frees memory, see the following
!     <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/viewcvs/gcc/trunk/libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local-6.cc?view=markup">
!     example.</link>
  </para>
  
  </section>
--- 307,315 ----
  containers, this works, as an instance of the allocator is constructed
  as part of a container's constructor. However, this assumption is
  implementation-specific, and subject to change. For an example of a
! pool that frees memory, see the
!     <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://gcc.gnu.org/cgit/gcc/tree/libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local-6.cc?h=releases%2Fgcc-13"><filename>ext/mt_allocator/deallocate_local-6.cc</filename></link>
!     example.
  </para>
  
  </section>
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/xml/manual/parallel_mode.xml gcc-13.4.0/libstdc++-v3/doc/xml/manual/parallel_mode.xml
*** gcc-13.3.0/libstdc++-v3/doc/xml/manual/parallel_mode.xml	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/xml/manual/parallel_mode.xml	Thu Jun  5 16:03:03 2025
*************** It might work with other compilers, thou
*** 121,127 ****
    flag <literal>-fopenmp</literal>. This will link
    in <code>libgomp</code>, the
    <link xmlns:xlink="http://www.w3.org/1999/xlink"
!     xlink:href="http://gcc.gnu.org/onlinedocs/libgomp/">GNU Offloading and
      Multi Processing Runtime Library</link>,
    whose presence is mandatory.
  </para>
--- 121,127 ----
    flag <literal>-fopenmp</literal>. This will link
    in <code>libgomp</code>, the
    <link xmlns:xlink="http://www.w3.org/1999/xlink"
!     xlink:href="https://gcc.gnu.org/onlinedocs/libgomp/">GNU Offloading and
      Multi Processing Runtime Library</link>,
    whose presence is mandatory.
  </para>
*************** i. e. it is a singleton. It can be read
*** 739,745 ****
  <code>__gnu_parallel::_Settings::set</code>, respectively.
  Please note that the first call return a const object, so direct manipulation
  is forbidden.
! See <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/index.html">
    <filename class="headerfile">&lt;parallel/settings.h&gt;</filename></link>
  for complete details.
  </para>
--- 739,745 ----
  <code>__gnu_parallel::_Settings::set</code>, respectively.
  Please note that the first call return a const object, so direct manipulation
  is forbidden.
! See <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/index.html">
    <filename class="headerfile">&lt;parallel/settings.h&gt;</filename></link>
  for complete details.
  </para>
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/xml/manual/policy_data_structures_biblio.xml gcc-13.4.0/libstdc++-v3/doc/xml/manual/policy_data_structures_biblio.xml
*** gcc-13.3.0/libstdc++-v3/doc/xml/manual/policy_data_structures_biblio.xml	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/xml/manual/policy_data_structures_biblio.xml	Thu Jun  5 16:03:03 2025
***************
*** 737,743 ****
      <biblioentry xml:id="biblio.kt99fat_heaps">
        <title>
  	<link xmlns:xlink="http://www.w3.org/1999/xlink"
! 	      xlink:href="https://www.cs.princeton.edu/research/techreps/TR-597-99">
  	  New Heap Data Structures
  	</link>
        </title>
--- 737,743 ----
      <biblioentry xml:id="biblio.kt99fat_heaps">
        <title>
  	<link xmlns:xlink="http://www.w3.org/1999/xlink"
! 	      xlink:href="https://www.cs.princeton.edu/research/techreps/293">
  	  New Heap Data Structures
  	</link>
        </title>
***************
*** 1138,1144 ****
      <biblioentry xml:id="biblio.nelson96stlpq">
        <title>
  	<link xmlns:xlink="http://www.w3.org/1999/xlink"
! 	      xlink:href="https://marknelson.us/posts/1996/01/01/priority-queues.html">Priority Queues and the STL
  	</link>
        </title>
        <date>
--- 1138,1144 ----
      <biblioentry xml:id="biblio.nelson96stlpq">
        <title>
  	<link xmlns:xlink="http://www.w3.org/1999/xlink"
! 	      xlink:href="https://web.archive.org/web/20240806213010/https://marknelson.us/posts/1996/01/01/priority-queues.html">Priority Queues and the STL
  	</link>
        </title>
        <date>
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/xml/manual/shared_ptr.xml gcc-13.4.0/libstdc++-v3/doc/xml/manual/shared_ptr.xml
*** gcc-13.3.0/libstdc++-v3/doc/xml/manual/shared_ptr.xml	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/xml/manual/shared_ptr.xml	Thu Jun  5 16:03:03 2025
*************** available policies are:
*** 243,249 ****
         </para>
         <para>
  Selected when GCC supports a builtin atomic compare-and-swap operation
! on the target processor (see <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html">Atomic
  Builtins</link>.)  The reference counts are maintained using a lock-free
  algorithm and GCC's atomic builtins, which provide the required memory
  synchronisation.
--- 243,249 ----
         </para>
         <para>
  Selected when GCC supports a builtin atomic compare-and-swap operation
! on the target processor (see <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html">Atomic
  Builtins</link>.)  The reference counts are maintained using a lock-free
  algorithm and GCC's atomic builtins, which provide the required memory
  synchronisation.
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/xml/manual/status_cxx1998.xml gcc-13.4.0/libstdc++-v3/doc/xml/manual/status_cxx1998.xml
*** gcc-13.3.0/libstdc++-v3/doc/xml/manual/status_cxx1998.xml	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/xml/manual/status_cxx1998.xml	Thu Jun  5 16:03:03 2025
*************** This status table is based on the table
*** 19,25 ****
  
  <para>
  This section describes the C++ support in
! the GCC 13 release series, not in any particular release.
  </para>
  
  <!-- Status is Yes or No, Broken/Partial-->
--- 19,25 ----
  
  <para>
  This section describes the C++ support in
! the GCC 13 release series.
  </para>
  
  <!-- Status is Yes or No, Broken/Partial-->
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/xml/manual/status_cxx2011.xml gcc-13.4.0/libstdc++-v3/doc/xml/manual/status_cxx2011.xml
*** gcc-13.3.0/libstdc++-v3/doc/xml/manual/status_cxx2011.xml	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/xml/manual/status_cxx2011.xml	Thu Jun  5 16:03:03 2025
*************** This status table is based on the table
*** 35,41 ****
  
  <para>
  This section describes the C++11 support in
! the GCC 13 release series, not in any particular release.
  </para>
  
  <!-- Status is Yes or No, Broken/Partial-->
--- 35,41 ----
  
  <para>
  This section describes the C++11 support in
! the GCC 13 release series.
  </para>
  
  <!-- Status is Yes or No, Broken/Partial-->
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/xml/manual/status_cxx2014.xml gcc-13.4.0/libstdc++-v3/doc/xml/manual/status_cxx2014.xml
*** gcc-13.3.0/libstdc++-v3/doc/xml/manual/status_cxx2014.xml	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/xml/manual/status_cxx2014.xml	Thu Jun  5 16:03:03 2025
*************** since C++11 and the implementation is co
*** 30,36 ****
  
  <para>
  This section describes the C++14 and library TS support in
! the GCC 13 release series, not in any particular release.
  </para>
  
  <!-- Status is Yes or No, Broken/Partial-->
--- 30,36 ----
  
  <para>
  This section describes the C++14 and library TS support in
! the GCC 13 release series.
  </para>
  
  <!-- Status is Yes or No, Broken/Partial-->
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/xml/manual/status_cxx2017.xml gcc-13.4.0/libstdc++-v3/doc/xml/manual/status_cxx2017.xml
*** gcc-13.3.0/libstdc++-v3/doc/xml/manual/status_cxx2017.xml	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/xml/manual/status_cxx2017.xml	Thu Jun  5 16:03:03 2025
*************** since that release.
*** 24,30 ****
  
  <para>
  This section describes the C++17 and library TS support in
! the GCC 13 release series, not in any particular release.
  </para>
  
  <para>
--- 24,30 ----
  
  <para>
  This section describes the C++17 and library TS support in
! the GCC 13 release series.
  </para>
  
  <para>
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/xml/manual/status_cxx2020.xml gcc-13.4.0/libstdc++-v3/doc/xml/manual/status_cxx2020.xml
*** gcc-13.3.0/libstdc++-v3/doc/xml/manual/status_cxx2020.xml	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/xml/manual/status_cxx2020.xml	Thu Jun  5 16:03:03 2025
*************** presence of the required flag.
*** 21,27 ****
  
  <para>
  This section describes the C++20 and library TS support in
! the GCC 13 release series, not in any particular release.
  </para>
  
  <para>
--- 21,27 ----
  
  <para>
  This section describes the C++20 and library TS support in
! the GCC 13 release series.
  </para>
  
  <para>
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/xml/manual/status_cxx2023.xml gcc-13.4.0/libstdc++-v3/doc/xml/manual/status_cxx2023.xml
*** gcc-13.3.0/libstdc++-v3/doc/xml/manual/status_cxx2023.xml	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/xml/manual/status_cxx2023.xml	Thu Jun  5 16:03:03 2025
*************** presence of the required flag.
*** 21,27 ****
  
  <para>
  This section describes the C++23 and library TS support in
! the GCC 13 release series, not in any particular release.
  </para>
  
  <para>
--- 21,27 ----
  
  <para>
  This section describes the C++23 and library TS support in
! the GCC 13 release series.
  </para>
  
  <para>
*************** or any notes about the implementation.
*** 472,485 ****
      </row>
  
      <row>
-       <?dbhtml bgcolor="#C8B0B0" ?>
        <entry> Deprecate std::aligned_storage and std::aligned_union </entry>
        <entry>
          <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1413r3.pdf">
          P1413R3
          </link>
        </entry>
!       <entry align="center"> </entry>
        <entry />
      </row>
  
--- 472,484 ----
      </row>
  
      <row>
        <entry> Deprecate std::aligned_storage and std::aligned_union </entry>
        <entry>
          <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1413r3.pdf">
          P1413R3
          </link>
        </entry>
!       <entry align="center"> 13.1 </entry>
        <entry />
      </row>
  
*************** or any notes about the implementation.
*** 717,723 ****
          P2508R1
          </link>
        </entry>
!       <entry align="center"> 13.1 (feature test macro not defined)</entry>
        <entry> <code>__cpp_lib_format &gt;= 202207L</code> </entry>
      </row>
  
--- 716,722 ----
          P2508R1
          </link>
        </entry>
!       <entry align="center"> 13.1 (feature test macro not updated)</entry>
        <entry> <code>__cpp_lib_format &gt;= 202207L</code> </entry>
      </row>
  
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/xml/manual/status_cxxtr1.xml gcc-13.4.0/libstdc++-v3/doc/xml/manual/status_cxxtr1.xml
*** gcc-13.3.0/libstdc++-v3/doc/xml/manual/status_cxxtr1.xml	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/xml/manual/status_cxxtr1.xml	Thu Jun  5 16:03:03 2025
*************** In this implementation the header names
*** 23,29 ****
  
  <para>
  This page describes the TR1 support in
! the GCC 13 release series, not in any particular release.
  </para>
  
  <!-- Status is Yes or No, Broken/Partial-->
--- 23,29 ----
  
  <para>
  This page describes the TR1 support in
! the GCC 13 release series.
  </para>
  
  <!-- Status is Yes or No, Broken/Partial-->
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/xml/manual/status_cxxtr24733.xml gcc-13.4.0/libstdc++-v3/doc/xml/manual/status_cxxtr24733.xml
*** gcc-13.3.0/libstdc++-v3/doc/xml/manual/status_cxxtr24733.xml	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/xml/manual/status_cxxtr24733.xml	Thu Jun  5 16:03:03 2025
*************** decimal floating-point arithmetic".
*** 18,24 ****
  
  <para>
  This page describes the TR 24733 support in
! the GCC 13 release series, not in any particular release.
  </para>
  
  <!-- Status is Yes or No, Broken/Partial-->
--- 18,24 ----
  
  <para>
  This page describes the TR 24733 support in
! the GCC 13 release series.
  </para>
  
  <!-- Status is Yes or No, Broken/Partial-->
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/xml/manual/strings.xml gcc-13.4.0/libstdc++-v3/doc/xml/manual/strings.xml
*** gcc-13.3.0/libstdc++-v3/doc/xml/manual/strings.xml	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/xml/manual/strings.xml	Thu Jun  5 16:03:03 2025
*************** stringtok(Container &amp;container, stri
*** 356,363 ****
        entry</link>) but the regular copy constructor cannot be used
        because libstdc++'s <code>string</code> is Copy-On-Write in GCC 3.
     </para>
!    <para>In <link linkend="status.iso.2011">C++11</link> mode you can call
!       <code>s.shrink_to_fit()</code> to achieve the same effect as
        <code>s.reserve(s.size())</code>.
     </para>
  
--- 356,363 ----
        entry</link>) but the regular copy constructor cannot be used
        because libstdc++'s <code>string</code> is Copy-On-Write in GCC 3.
     </para>
!    <para>From GCC 4.5 in <link linkend="status.iso.2011">C++11</link> mode you
!       can call <code>s.shrink_to_fit()</code> to achieve the same effect as
        <code>s.reserve(s.size())</code>.
     </para>
  
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/xml/manual/test.xml gcc-13.4.0/libstdc++-v3/doc/xml/manual/test.xml
*** gcc-13.3.0/libstdc++-v3/doc/xml/manual/test.xml	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/xml/manual/test.xml	Thu Jun  5 16:03:03 2025
*************** cat 27_io/objects/char/3_xin.in | a.out<
*** 383,389 ****
  
      <para>
        The testsuite will create a number of files in the directory in
!       which you run this command,.  Some of those files might use the
        same name as files created by other testsuites (like the ones
        for GCC and G++), so you should not try to run all the
        testsuites in parallel from the same directory.
--- 383,389 ----
  
      <para>
        The testsuite will create a number of files in the directory in
!       which you run this command.  Some of those files might use the
        same name as files created by other testsuites (like the ones
        for GCC and G++), so you should not try to run all the
        testsuites in parallel from the same directory.
*************** cat 27_io/objects/char/3_xin.in | a.out<
*** 591,601 ****
        tests multiple times in different variations. For example, to run the
        entire testsuite three times using <option>-O3</option> but with
        different <option>-std</option> options:
! <programlisting>    make check 'RUNTESTFLAGS=--target_board=unix/-O3\"{-std=gnu++98,-std=gnu++11,-std=gnu++14}\"'</programlisting>
        N.B. that set of variations could also be written as
        <literal>unix/-O3\"{-std=gnu++98,-std=gnu++11,}\"</literal> so that
        the third variation would use the default for <option>-std</option>
!       (which is <option>-std=gnu++14</option> as of GCC 6).
      </para>
  
      <para>
--- 591,601 ----
        tests multiple times in different variations. For example, to run the
        entire testsuite three times using <option>-O3</option> but with
        different <option>-std</option> options:
! <programlisting>    make check 'RUNTESTFLAGS=--target_board=unix/-O3\"{-std=gnu++98,-std=gnu++11,-std=gnu++17}\"'</programlisting>
        N.B. that set of variations could also be written as
        <literal>unix/-O3\"{-std=gnu++98,-std=gnu++11,}\"</literal> so that
        the third variation would use the default for <option>-std</option>
!       (which is <option>-std=gnu++17</option> as of GCC 11).
      </para>
  
      <para>
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/xml/manual/using.xml gcc-13.4.0/libstdc++-v3/doc/xml/manual/using.xml
*** gcc-13.3.0/libstdc++-v3/doc/xml/manual/using.xml	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/xml/manual/using.xml	Thu Jun  5 16:03:03 2025
***************
*** 7,13 ****
  
      <para>
        The set of features available in the GNU C++ library is shaped by
!       several <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Invoking-GCC.html">GCC
        Command Options</link>. Options that impact libstdc++ are
        enumerated and detailed in the table below.
      </para>
--- 7,13 ----
  
      <para>
        The set of features available in the GNU C++ library is shaped by
!       several <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Invoking-GCC.html">GCC
        Command Options</link>. Options that impact libstdc++ are
        enumerated and detailed in the table below.
      </para>
***************
*** 37,71 ****
  
    <tbody>
      <row>
!       <entry><literal>-std=c++98</literal> or <literal>-std=c++03</literal>
        </entry>
!       <entry>Use the 1998 ISO C++ standard plus amendments.</entry>
!     </row>
! 
!     <row>
!       <entry><literal>-std=gnu++98</literal> or <literal>-std=gnu++03</literal>
        </entry>
-       <entry>As directly above, with GNU extensions.</entry>
-     </row>
- 
-     <row>
-       <entry><literal>-std=c++11</literal></entry>
-       <entry>Use the 2011 ISO C++ standard.</entry>
-     </row>
- 
-     <row>
-       <entry><literal>-std=gnu++11</literal></entry>
-       <entry>As directly above, with GNU extensions.</entry>
-     </row>
- 
-     <row>
-       <entry><literal>-std=c++14</literal></entry>
-       <entry>Use the 2014 ISO C++ standard.</entry>
-     </row>
- 
-     <row>
-       <entry><literal>-std=gnu++14</literal></entry>
-       <entry>As directly above, with GNU extensions.</entry>
      </row>
  
      <row>
--- 37,48 ----
  
    <tbody>
      <row>
!       <entry><literal>-std</literal>
        </entry>
!       <entry>
! 	Select the C++ standard, and whether to use the base standard
! 	or GNU dialect.
        </entry>
      </row>
  
      <row>
*************** g++ -Winvalid-pch -I. -include stdc++.h
*** 1246,1252 ****
    of the macro is <literal>1</literal> which causes the new ABI to be active,
    so to use the old ABI you must explicitly define the macro to
    <literal>0</literal> before including any library headers.
!   (Be aware that some GNU/Linux distributions configure GCC 5 differently so
    that the default value of the macro is <literal>0</literal> and users must
    define it to <literal>1</literal> to enable the new ABI.)
  </para>
--- 1223,1229 ----
    of the macro is <literal>1</literal> which causes the new ABI to be active,
    so to use the old ABI you must explicitly define the macro to
    <literal>0</literal> before including any library headers.
!   (Be aware that some GNU/Linux distributions configured GCC 5 differently so
    that the default value of the macro is <literal>0</literal> and users must
    define it to <literal>1</literal> to enable the new ABI.)
  </para>
*************** g++ -Winvalid-pch -I. -include stdc++.h
*** 1306,1311 ****
--- 1283,1312 ----
    <classname>std::exception</classname>.
  </para>
  
+ <para>
+   Some features are not supported when using the old ABI, including:
+   <itemizedlist>
+   <listitem>
+     Using <classname>std::string::const_iterator</classname> for
+     positional arguments to member functions such as
+     <function>std::string::erase</function>.
+   </listitem>
+   <listitem>
+     Allocator propagation in <classname>std::string</classname>.
+   </listitem>
+   <listitem>
+     Using <classname>std::string</classname> at compile-time in
+     <code>constexpr</code> functions.
+   </listitem>
+   <listitem>
+     Class <classname>std::chrono::time_zone</classname> and all related APIs.
+   </listitem>
+   <listitem>
+     The <filename class="headerfile">&lt;syncstream&gt;</filename> header.
+   </listitem>
+   </itemizedlist>
+ </para>
+ 
  <section xml:id="manual.intro.using.abi.trouble" xreflabel="Dual ABI Troubleshooting"><info><title>Troubleshooting</title></info>
  
  <para> If you get linker errors about undefined references to symbols
*************** gcc version 4.1.2 20070925 (Red Hat 4.1.
*** 1913,1918 ****
--- 1914,1931 ----
           of the container and so conflict with other accesses to the container).
        </para>
  
+       <para>
+ 	 The Copy-On-Write <classname>std::string</classname> implementation
+ 	 used before GCC 5 (and with
+ 	 <link linkend="manual.intro.using.abi">_GLIBCXX_USE_CXX11_ABI=0</link>)
+ 	 is not a standard container and does not conform to the data race
+ 	 avoidance rules described above. For the Copy-On-Write
+ 	 <classname>std::string</classname>, non-const member functions such as
+ 	 <function>begin()</function> are considered to be modifying accesses
+ 	 and so must not be used concurrently with any other accesses to the
+ 	 same object.
+       </para>
+ 
        <para>Programs which follow the rules above will not encounter data
           races in library code, even when using library types which share
           state between distinct objects.  In the example below the
diff -Nrcpad gcc-13.3.0/libstdc++-v3/doc/xml/manual/using_exceptions.xml gcc-13.4.0/libstdc++-v3/doc/xml/manual/using_exceptions.xml
*** gcc-13.3.0/libstdc++-v3/doc/xml/manual/using_exceptions.xml	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/doc/xml/manual/using_exceptions.xml	Thu Jun  5 16:03:03 2025
*************** exception neutrality and exception safet
*** 274,280 ****
    <para>
      C++ is a language that strives to be as efficient as is possible
      in delivering features. As such, considerable care is used by both
!     language implementer and designers to make sure unused features
      not impose hidden or unexpected costs. The GNU system tries to be
      as flexible and as configurable as possible. So, it should come as
      no surprise that GNU C++ provides an optional language extension,
--- 274,280 ----
    <para>
      C++ is a language that strives to be as efficient as is possible
      in delivering features. As such, considerable care is used by both
!     language implementer and designers to make sure unused features do
      not impose hidden or unexpected costs. The GNU system tries to be
      as flexible and as configurable as possible. So, it should come as
      no surprise that GNU C++ provides an optional language extension,
*************** exception neutrality and exception safet
*** 282,289 ****
      implicitly generated magic necessary to
      support <literal>try</literal> and <literal>catch</literal> blocks
      and thrown objects. (Language support
!     for <literal>-fno-exceptions</literal> is documented in the GNU
!     GCC <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code-Gen-Options">manual</link>.)
    </para>
  
    <para>Before detailing the library support
--- 282,289 ----
      implicitly generated magic necessary to
      support <literal>try</literal> and <literal>catch</literal> blocks
      and thrown objects. (Language support
!     for <literal>-fno-exceptions</literal> is documented in the GCC
!     <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code-Gen-Options">manual</link>.)
    </para>
  
    <para>Before detailing the library support
*************** exception neutrality and exception safet
*** 299,305 ****
    </para>
  
    <para>
!     And what it to be gained, tinkering in the back alleys with a
      language like this? Exception handling overhead can be measured
      in the size of the executable binary, and varies with the
      capabilities of the underlying operating system and specific
--- 299,305 ----
    </para>
  
    <para>
!     And what is to be gained, tinkering in the back alleys with a
      language like this? Exception handling overhead can be measured
      in the size of the executable binary, and varies with the
      capabilities of the underlying operating system and specific
*************** exception neutrality and exception safet
*** 344,360 ****
  </programlisting>
  
  <para>
!   In addition, for every object derived from
    class <classname>exception</classname>, there exists a corresponding
    function with C language linkage. An example:
  </para>
  
  <programlisting>
  #if __cpp_exceptions
!   void __throw_bad_exception(void)
    { throw bad_exception(); }
  #else
!   void __throw_bad_exception(void)
    { abort(); }
  #endif
  </programlisting>
--- 344,360 ----
  </programlisting>
  
  <para>
!   In addition, for most of the classes derived from
    class <classname>exception</classname>, there exists a corresponding
    function with C language linkage. An example:
  </para>
  
  <programlisting>
  #if __cpp_exceptions
!   void __throw_bad_exception()
    { throw bad_exception(); }
  #else
!   void __throw_bad_exception()
    { abort(); }
  #endif
  </programlisting>
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/bits/atomic_futex.h gcc-13.4.0/libstdc++-v3/include/bits/atomic_futex.h
*** gcc-13.3.0/libstdc++-v3/include/bits/atomic_futex.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/bits/atomic_futex.h	Thu Jun  5 16:03:03 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 170,180 ****
  	bool __equal, memory_order __mo,
  	const chrono::time_point<std::chrono::system_clock, _Dur>& __atime)
      {
!       auto __s = chrono::time_point_cast<chrono::seconds>(__atime);
!       auto __ns = chrono::duration_cast<chrono::nanoseconds>(__atime - __s);
!       // XXX correct?
        return _M_load_and_test_until(__assumed, __operand, __equal, __mo,
! 	  true, __s.time_since_epoch(), __ns);
      }
  
      template<typename _Dur>
--- 170,182 ----
  	bool __equal, memory_order __mo,
  	const chrono::time_point<std::chrono::system_clock, _Dur>& __atime)
      {
!       auto __d = __atime.time_since_epoch();
!       if (__d < __d.zero()) [[__unlikely__]]
! 	return false;
!       auto __s = chrono::duration_cast<chrono::seconds>(__d);
!       auto __ns = chrono::duration_cast<chrono::nanoseconds>(__d - __s);
        return _M_load_and_test_until(__assumed, __operand, __equal, __mo,
! 				    true, __s, __ns);
      }
  
      template<typename _Dur>
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 183,193 ****
  	bool __equal, memory_order __mo,
  	const chrono::time_point<std::chrono::steady_clock, _Dur>& __atime)
      {
!       auto __s = chrono::time_point_cast<chrono::seconds>(__atime);
!       auto __ns = chrono::duration_cast<chrono::nanoseconds>(__atime - __s);
!       // XXX correct?
        return _M_load_and_test_until_steady(__assumed, __operand, __equal, __mo,
! 	  true, __s.time_since_epoch(), __ns);
      }
  
    public:
--- 185,197 ----
  	bool __equal, memory_order __mo,
  	const chrono::time_point<std::chrono::steady_clock, _Dur>& __atime)
      {
!       auto __d = __atime.time_since_epoch();
!       if (__d < __d.zero()) [[__unlikely__]]
! 	return false;
!       auto __s = chrono::duration_cast<chrono::seconds>(__d);
!       auto __ns = chrono::duration_cast<chrono::nanoseconds>(__d - __s);
        return _M_load_and_test_until_steady(__assumed, __operand, __equal, __mo,
! 	  true, __s, __ns);
      }
  
    public:
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/bits/basic_string.h gcc-13.4.0/libstdc++-v3/include/bits/basic_string.h
*** gcc-13.3.0/libstdc++-v3/include/bits/basic_string.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/bits/basic_string.h	Thu Jun  5 16:03:03 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_CXX11
*** 907,913 ****
  	      __str._M_data(__str._M_use_local_data());
  	  }
  	else // Need to do a deep copy
! 	  assign(__str);
  	__str.clear();
  	return *this;
        }
--- 907,913 ----
  	      __str._M_data(__str._M_use_local_data());
  	  }
  	else // Need to do a deep copy
! 	  _M_assign(__str);
  	__str.clear();
  	return *this;
        }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/bits/chrono_io.h gcc-13.4.0/libstdc++-v3/include/bits/chrono_io.h
*** gcc-13.3.0/libstdc++-v3/include/bits/chrono_io.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/bits/chrono_io.h	Thu Jun  5 16:03:03 2025
*************** namespace __format
*** 788,804 ****
  	  // %c  Locale's date and time representation.
  	  // %Ec Locale's alternate date and time representation.
  
  	  auto __t = _S_floor_seconds(__tt);
  	  locale __loc = _M_locale(__ctx);
  	  const auto& __tp = use_facet<__timepunct<_CharT>>(__loc);
  	  const _CharT* __formats[2];
  	  __tp._M_date_time_formats(__formats);
! 	  const _CharT* __rep = __formats[__mod];
! 	  if (!*__rep)
! 	    __rep = _GLIBCXX_WIDEN("%a %b %e %H:%M:%S %Y");
! 	  basic_string<_CharT> __fmt(_S_empty_spec);
! 	  __fmt.insert(1u, 1u, _S_colon);
! 	  __fmt.insert(2u, __rep);
  	  return std::vformat_to(std::move(__out), __loc, __fmt,
  				 std::make_format_args<_FormatContext>(__t));
  	}
--- 788,806 ----
  	  // %c  Locale's date and time representation.
  	  // %Ec Locale's alternate date and time representation.
  
+ 	  basic_string<_CharT> __fmt;
  	  auto __t = _S_floor_seconds(__tt);
  	  locale __loc = _M_locale(__ctx);
  	  const auto& __tp = use_facet<__timepunct<_CharT>>(__loc);
  	  const _CharT* __formats[2];
  	  __tp._M_date_time_formats(__formats);
! 	  if (*__formats[__mod]) [[likely]]
! 	    {
! 	      __fmt = _GLIBCXX_WIDEN("{:L}");
! 	      __fmt.insert(3u, __formats[__mod]);
! 	    }
! 	  else
! 	    __fmt = _GLIBCXX_WIDEN("{:L%a %b %e %T %Y}");
  	  return std::vformat_to(std::move(__out), __loc, __fmt,
  				 std::make_format_args<_FormatContext>(__t));
  	}
*************** namespace __format
*** 1608,1614 ****
  	format(const chrono::duration<_Rep, _Period>& __d,
  	       basic_format_context<_Out, _CharT>& __fc) const
  	{
! 	  return _M_f._M_format(chrono::abs(__d), __fc, __d < __d.zero());
  	}
  
      private:
--- 1610,1631 ----
  	format(const chrono::duration<_Rep, _Period>& __d,
  	       basic_format_context<_Out, _CharT>& __fc) const
  	{
! 	  if constexpr (numeric_limits<_Rep>::is_signed)
! 	    if (__d < __d.zero()) [[unlikely]]
! 	      {
! 		if constexpr (is_integral_v<_Rep>)
! 		  {
! 		    // -d is undefined for the most negative integer.
! 		    // Convert duration to corresponding unsigned rep.
! 		    using _URep = make_unsigned_t<_Rep>;
! 		    auto __ucnt = -static_cast<_URep>(__d.count());
! 		    auto __ud = chrono::duration<_URep, _Period>(__ucnt);
! 		    return _M_f._M_format(__ud, __fc, true);
! 		  }
! 		else
! 		  return _M_f._M_format(-__d, __fc, true);
! 	      }
! 	  return _M_f._M_format(__d, __fc, false);
  	}
  
      private:
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/bits/cpp_type_traits.h gcc-13.4.0/libstdc++-v3/include/bits/cpp_type_traits.h
*** gcc-13.3.0/libstdc++-v3/include/bits/cpp_type_traits.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/bits/cpp_type_traits.h	Thu Jun  5 16:03:03 2025
***************
*** 24,30 ****
  
  /** @file bits/cpp_type_traits.h
   *  This is an internal header file, included by other library headers.
!  *  Do not attempt to use it directly. @headername{ext/type_traits}
   */
  
  // Written by Gabriel Dos Reis <dosreis@cmla.ens-cachan.fr>
--- 24,30 ----
  
  /** @file bits/cpp_type_traits.h
   *  This is an internal header file, included by other library headers.
!  *  Do not attempt to use it directly. @headername{ext/type_traits.h}
   */
  
  // Written by Gabriel Dos Reis <dosreis@cmla.ens-cachan.fr>
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/bits/deque.tcc gcc-13.4.0/libstdc++-v3/include/bits/deque.tcc
*** gcc-13.3.0/libstdc++-v3/include/bits/deque.tcc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/bits/deque.tcc	Thu Jun  5 16:03:03 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 200,207 ****
  	    return __tmp;
  	  }
  	else
! 	  return _M_insert_aux(__position._M_const_cast(),
! 			       std::forward<_Args>(__args)...);
        }
  #endif
  
--- 200,207 ----
  	    return __tmp;
  	  }
  	else
! 	  return _M_emplace_aux(__position._M_const_cast(),
! 				std::forward<_Args>(__args)...);
        }
  #endif
  
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 601,606 ****
--- 601,609 ----
  			  std::forward_iterator_tag)
        {
  	const size_type __n = std::distance(__first, __last);
+ 	if (__builtin_expect(__n == 0, 0))
+ 	  return;
+ 
  	if (__pos._M_cur == this->_M_impl._M_start._M_cur)
  	  {
  	    iterator __new_start = _M_reserve_elements_at_front(__n);
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 643,649 ****
      template<typename... _Args>
        typename deque<_Tp, _Alloc>::iterator
        deque<_Tp, _Alloc>::
!       _M_insert_aux(iterator __pos, _Args&&... __args)
        {
  	value_type __x_copy(std::forward<_Args>(__args)...); // XXX copy
  #else
--- 646,652 ----
      template<typename... _Args>
        typename deque<_Tp, _Alloc>::iterator
        deque<_Tp, _Alloc>::
!       _M_emplace_aux(iterator __pos, _Args&&... __args)
        {
  	value_type __x_copy(std::forward<_Args>(__args)...); // XXX copy
  #else
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/bits/fs_dir.h gcc-13.4.0/libstdc++-v3/include/bits/fs_dir.h
*** gcc-13.3.0/libstdc++-v3/include/bits/fs_dir.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/bits/fs_dir.h	Thu Jun  5 16:03:03 2025
***************
*** 39,44 ****
--- 39,45 ----
  #if __cplusplus >= 202002L
  # include <compare>	// std::strong_ordering
  # include <bits/iterator_concepts.h>	// std::default_sentinel_t
+ # include <bits/ranges_base.h> // enable_view, enable_borrowed_range
  #endif
  
  namespace std _GLIBCXX_VISIBILITY(default)
*************** _GLIBCXX_END_NAMESPACE_CXX11
*** 626,631 ****
--- 627,653 ----
    extern template class
      __shared_ptr<filesystem::recursive_directory_iterator::_Dir_stack>;
  
+ #ifdef __cpp_lib_concepts // >= C++20
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 3480. directory_iterator and recursive_directory_iterator are not ranges
+ namespace ranges
+ {
+   template<>
+     inline constexpr bool
+     enable_borrowed_range<filesystem::directory_iterator> = true;
+   template<>
+     inline constexpr bool
+     enable_borrowed_range<filesystem::recursive_directory_iterator> = true;
+ 
+   template<>
+     inline constexpr bool
+     enable_view<filesystem::directory_iterator> = true;
+   template<>
+     inline constexpr bool
+     enable_view<filesystem::recursive_directory_iterator> = true;
+ } // namespace ranges
+ #endif // concepts
+ 
  _GLIBCXX_END_NAMESPACE_VERSION
  } // namespace std
  
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/bits/hashtable.h gcc-13.4.0/libstdc++-v3/include/bits/hashtable.h
*** gcc-13.3.0/libstdc++-v3/include/bits/hashtable.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/bits/hashtable.h	Thu Jun  5 16:03:03 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1660,1666 ****
  	   typename _ExtractKey, typename _Equal,
  	   typename _Hash, typename _RangeHash, typename _Unused,
  	   typename _RehashPolicy, typename _Traits>
!     auto
      _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
  	       _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
      find(const key_type& __k)
--- 1660,1666 ----
  	   typename _ExtractKey, typename _Equal,
  	   typename _Hash, typename _RangeHash, typename _Unused,
  	   typename _RehashPolicy, typename _Traits>
!     auto inline
      _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
  	       _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
      find(const key_type& __k)
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1683,1689 ****
  	   typename _ExtractKey, typename _Equal,
  	   typename _Hash, typename _RangeHash, typename _Unused,
  	   typename _RehashPolicy, typename _Traits>
!     auto
      _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
  	       _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
      find(const key_type& __k) const
--- 1683,1689 ----
  	   typename _ExtractKey, typename _Equal,
  	   typename _Hash, typename _RangeHash, typename _Unused,
  	   typename _RehashPolicy, typename _Traits>
!     auto inline
      _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
  	       _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
      find(const key_type& __k) const
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/bits/hashtable_policy.h gcc-13.4.0/libstdc++-v3/include/bits/hashtable_policy.h
*** gcc-13.3.0/libstdc++-v3/include/bits/hashtable_policy.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/bits/hashtable_policy.h	Thu Jun  5 16:03:03 2025
*************** namespace __detail
*** 941,946 ****
--- 941,947 ----
  	return __h._M_insert(__hint, __v, __node_gen, __unique_keys{});
        }
  
+ #if __cplusplus >= 201703L && _GLIBCXX_HOSTED
        template<typename _KType, typename... _Args>
  	std::pair<iterator, bool>
  	try_emplace(const_iterator, _KType&& __k, _Args&&... __args)
*************** namespace __detail
*** 962,967 ****
--- 963,969 ----
  	  __node._M_node = nullptr;
  	  return { __it, true };
  	}
+ #endif
  
        void
        insert(initializer_list<value_type> __l)
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/bits/iterator_concepts.h gcc-13.4.0/libstdc++-v3/include/bits/iterator_concepts.h
*** gcc-13.3.0/libstdc++-v3/include/bits/iterator_concepts.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/bits/iterator_concepts.h	Thu Jun  5 16:03:03 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 97,128 ****
  
    namespace ranges
    {
      namespace __cust_imove
      {
        void iter_move();
  
        template<typename _Tp>
  	concept __adl_imove
  	  = (std::__detail::__class_or_enum<remove_reference_t<_Tp>>)
! 	  && requires(_Tp&& __t) { iter_move(static_cast<_Tp&&>(__t)); };
  
        struct _IMove
        {
        private:
  	template<typename _Tp>
  	  struct __result
! 	  { using type = iter_reference_t<_Tp>; };
  
  	template<typename _Tp>
  	  requires __adl_imove<_Tp>
  	  struct __result<_Tp>
  	  { using type = decltype(iter_move(std::declval<_Tp>())); };
  
  	template<typename _Tp>
  	  requires (!__adl_imove<_Tp>)
! 	  && is_lvalue_reference_v<iter_reference_t<_Tp>>
  	  struct __result<_Tp>
! 	  { using type = remove_reference_t<iter_reference_t<_Tp>>&&; };
  
  	template<typename _Tp>
  	  static constexpr bool
--- 97,139 ----
  
    namespace ranges
    {
+     /// @cond undocumented
+     // Implementation of std::ranges::iter_move, [iterator.cust.move].
      namespace __cust_imove
      {
        void iter_move();
  
+       // Satisfied if _Tp is a class or enumeration type and iter_move
+       // can be found by argument-dependent lookup.
        template<typename _Tp>
  	concept __adl_imove
  	  = (std::__detail::__class_or_enum<remove_reference_t<_Tp>>)
! 	      && requires(_Tp&& __t) { iter_move(static_cast<_Tp&&>(__t)); };
  
        struct _IMove
        {
        private:
+ 	// The type returned by dereferencing a value of type _Tp.
+ 	// Unlike iter_reference_t this preserves the value category of _Tp.
+ 	template<typename _Tp>
+ 	  using __iter_ref_t = decltype(*std::declval<_Tp>());
+ 
  	template<typename _Tp>
  	  struct __result
! 	  { using type = __iter_ref_t<_Tp>; };
  
+ 	// Use iter_move(E) if that works.
  	template<typename _Tp>
  	  requires __adl_imove<_Tp>
  	  struct __result<_Tp>
  	  { using type = decltype(iter_move(std::declval<_Tp>())); };
  
+ 	// Otherwise, if *E if an lvalue, use std::move(*E).
  	template<typename _Tp>
  	  requires (!__adl_imove<_Tp>)
! 	    && is_lvalue_reference_v<__iter_ref_t<_Tp>>
  	  struct __result<_Tp>
! 	  { using type = remove_reference_t<__iter_ref_t<_Tp>>&&; };
  
  	template<typename _Tp>
  	  static constexpr bool
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 136,159 ****
  
        public:
  	// The result type of iter_move(std::declval<_Tp>())
! 	template<std::__detail::__dereferenceable _Tp>
  	  using __type = typename __result<_Tp>::type;
  
! 	template<std::__detail::__dereferenceable _Tp>
! 	  [[nodiscard]]
  	  constexpr __type<_Tp>
! 	  operator()(_Tp&& __e) const
  	  noexcept(_S_noexcept<_Tp>())
  	  {
  	    if constexpr (__adl_imove<_Tp>)
  	      return iter_move(static_cast<_Tp&&>(__e));
! 	    else if constexpr (is_lvalue_reference_v<iter_reference_t<_Tp>>)
! 	      return static_cast<__type<_Tp>>(*__e);
  	    else
! 	      return *__e;
  	  }
        };
      } // namespace __cust_imove
  
      inline namespace __cust
      {
--- 147,171 ----
  
        public:
  	// The result type of iter_move(std::declval<_Tp>())
! 	template<typename _Tp>
  	  using __type = typename __result<_Tp>::type;
  
! 	template<typename _Tp>
! 	  requires __adl_imove<_Tp> || requires { typename __iter_ref_t<_Tp>; }
  	  constexpr __type<_Tp>
! 	  operator() [[nodiscard]] (_Tp&& __e) const
  	  noexcept(_S_noexcept<_Tp>())
  	  {
  	    if constexpr (__adl_imove<_Tp>)
  	      return iter_move(static_cast<_Tp&&>(__e));
! 	    else if constexpr (is_lvalue_reference_v<__iter_ref_t<_Tp>>)
! 	      return std::move(*static_cast<_Tp&&>(__e));
  	    else
! 	      return *static_cast<_Tp&&>(__e);
  	  }
        };
      } // namespace __cust_imove
+     /// @endcond
  
      inline namespace __cust
      {
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 161,166 ****
--- 173,179 ----
      } // inline namespace __cust
    } // namespace ranges
  
+   /// The result type of ranges::iter_move(std::declval<_Tp&>())
    template<__detail::__dereferenceable _Tp>
      requires __detail::
        __can_reference<ranges::__cust_imove::_IMove::__type<_Tp&>>
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 832,842 ****
--- 845,859 ----
  
  namespace ranges
  {
+   /// @cond undocumented
+   // Implementation of std::ranges::iter_swap, [iterator.cust.swap].
    namespace __cust_iswap
    {
      template<typename _It1, typename _It2>
        void iter_swap(_It1, _It2) = delete;
  
+     // Satisfied if _Tp and _Up are class or enumeration types and iter_swap
+     // can be found by argument-dependent lookup.
      template<typename _Tp, typename _Up>
        concept __adl_iswap
  	= (std::__detail::__class_or_enum<remove_reference_t<_Tp>>
*************** namespace ranges
*** 900,905 ****
--- 917,923 ----
  	}
      };
    } // namespace __cust_iswap
+   /// @endcond
  
    inline namespace __cust
    {
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/bits/locale_facets_nonio.tcc gcc-13.4.0/libstdc++-v3/include/bits/locale_facets_nonio.tcc
*** gcc-13.3.0/libstdc++-v3/include/bits/locale_facets_nonio.tcc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/bits/locale_facets_nonio.tcc	Thu Jun  5 16:03:03 2025
*************** _GLIBCXX_END_NAMESPACE_LDBL_OR_CXX11
*** 1648,1654 ****
        const size_t __maxlen = 128;
        char_type __res[__maxlen];
  
!       // NB: In IEE 1003.1-200x, and perhaps other locale models, it
        // is possible that the format character will be longer than one
        // character. Possibilities include 'E' or 'O' followed by a
        // format character: if __mod is not the default argument, assume
--- 1648,1654 ----
        const size_t __maxlen = 128;
        char_type __res[__maxlen];
  
!       // NB: In IEEE 1003.1-200x, and perhaps other locale models, it
        // is possible that the format character will be longer than one
        // character. Possibilities include 'E' or 'O' followed by a
        // format character: if __mod is not the default argument, assume
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/bits/memory_resource.h gcc-13.4.0/libstdc++-v3/include/bits/memory_resource.h
*** gcc-13.3.0/libstdc++-v3/include/bits/memory_resource.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/bits/memory_resource.h	Thu Jun  5 16:03:03 2025
*************** namespace pmr
*** 305,311 ****
  #endif
  
        template<typename _Up>
- 	_GLIBCXX20_DEPRECATED_SUGGEST("allocator_traits::destroy")
  	__attribute__((__nonnull__))
  	void
  	destroy(_Up* __p)
--- 305,310 ----
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/bits/new_allocator.h gcc-13.4.0/libstdc++-v3/include/bits/new_allocator.h
*** gcc-13.3.0/libstdc++-v3/include/bits/new_allocator.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/bits/new_allocator.h	Thu Jun  5 16:03:03 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 140,146 ****
  	    std::__throw_bad_alloc();
  	  }
  
! #if __cpp_aligned_new
  	if (alignof(_Tp) > __STDCPP_DEFAULT_NEW_ALIGNMENT__)
  	  {
  	    std::align_val_t __al = std::align_val_t(alignof(_Tp));
--- 140,146 ----
  	    std::__throw_bad_alloc();
  	  }
  
! #if __cpp_aligned_new && __cplusplus >= 201103L
  	if (alignof(_Tp) > __STDCPP_DEFAULT_NEW_ALIGNMENT__)
  	  {
  	    std::align_val_t __al = std::align_val_t(alignof(_Tp));
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 161,167 ****
  # define _GLIBCXX_SIZED_DEALLOC(p, n) (p)
  #endif
  
! #if __cpp_aligned_new
  	if (alignof(_Tp) > __STDCPP_DEFAULT_NEW_ALIGNMENT__)
  	  {
  	    _GLIBCXX_OPERATOR_DELETE(_GLIBCXX_SIZED_DEALLOC(__p, __n),
--- 161,167 ----
  # define _GLIBCXX_SIZED_DEALLOC(p, n) (p)
  #endif
  
! #if __cpp_aligned_new && __cplusplus >= 201103L
  	if (alignof(_Tp) > __STDCPP_DEFAULT_NEW_ALIGNMENT__)
  	  {
  	    _GLIBCXX_OPERATOR_DELETE(_GLIBCXX_SIZED_DEALLOC(__p, __n),
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/bits/ranges_algo.h gcc-13.4.0/libstdc++-v3/include/bits/ranges_algo.h
*** gcc-13.3.0/libstdc++-v3/include/bits/ranges_algo.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/bits/ranges_algo.h	Thu Jun  5 16:03:03 2025
*************** namespace ranges
*** 3524,3579 ****
  
    inline constexpr __contains_subrange_fn contains_subrange{};
  
- #define __cpp_lib_ranges_iota 202202L
- 
-   template<typename _Out, typename _Tp>
-     struct out_value_result
-     {
-       [[no_unique_address]] _Out out;
-       [[no_unique_address]] _Tp value;
- 
-       template<typename _Out2, typename _Tp2>
- 	requires convertible_to<const _Out&, _Out2>
- 	  && convertible_to<const _Tp&, _Tp2>
- 	constexpr
- 	operator out_value_result<_Out2, _Tp2>() const &
- 	{ return {out, value}; }
- 
-       template<typename _Out2, typename _Tp2>
- 	requires convertible_to<_Out, _Out2>
- 	  && convertible_to<_Tp, _Tp2>
- 	constexpr
- 	operator out_value_result<_Out2, _Tp2>() &&
- 	{ return {std::move(out), std::move(value)}; }
-     };
- 
-   template<typename _Out, typename _Tp>
-     using iota_result = out_value_result<_Out, _Tp>;
- 
-   struct __iota_fn
-   {
-     template<input_or_output_iterator _Out, sentinel_for<_Out> _Sent, weakly_incrementable _Tp>
-       requires indirectly_writable<_Out, const _Tp&>
-       constexpr iota_result<_Out, _Tp>
-       operator()(_Out __first, _Sent __last, _Tp __value) const
-       {
- 	while (__first != __last)
- 	  {
- 	    *__first = static_cast<const _Tp&>(__value);
- 	    ++__first;
- 	    ++__value;
- 	  }
- 	return {std::move(__first), std::move(__value)};
-       }
- 
-     template<weakly_incrementable _Tp, output_range<const _Tp&> _Range>
-       constexpr iota_result<borrowed_iterator_t<_Range>, _Tp>
-       operator()(_Range&& __r, _Tp __value) const
-       { return (*this)(ranges::begin(__r), ranges::end(__r), std::move(__value)); }
-   };
- 
-   inline constexpr __iota_fn iota{};
- 
  #define __cpp_lib_ranges_find_last 202207L
  
    struct __find_last_fn
--- 3524,3529 ----
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/bits/ranges_algobase.h gcc-13.4.0/libstdc++-v3/include/bits/ranges_algobase.h
*** gcc-13.3.0/libstdc++-v3/include/bits/ranges_algobase.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/bits/ranges_algobase.h	Thu Jun  5 16:03:03 2025
***************
*** 38,43 ****
--- 38,44 ----
  #include <bits/ranges_base.h> // ranges::begin, ranges::range etc.
  #include <bits/invoke.h>      // __invoke
  #include <bits/cpp_type_traits.h> // __is_byte
+ #include <bits/stl_algobase.h> // __memcmp
  
  #if __cpp_lib_concepts
  namespace std _GLIBCXX_VISIBILITY(default)
*************** namespace ranges
*** 70,75 ****
--- 71,128 ----
  	__is_move_iterator<move_iterator<_Iterator>> = true;
    } // namespace __detail
  
+ #if __cplusplus > 202002L
+   template<typename _Out, typename _Tp>
+     struct out_value_result
+     {
+       [[no_unique_address]] _Out out;
+       [[no_unique_address]] _Tp value;
+ 
+       template<typename _Out2, typename _Tp2>
+ 	requires convertible_to<const _Out&, _Out2>
+ 	  && convertible_to<const _Tp&, _Tp2>
+ 	constexpr
+ 	operator out_value_result<_Out2, _Tp2>() const &
+ 	{ return {out, value}; }
+ 
+       template<typename _Out2, typename _Tp2>
+ 	requires convertible_to<_Out, _Out2>
+ 	  && convertible_to<_Tp, _Tp2>
+ 	constexpr
+ 	operator out_value_result<_Out2, _Tp2>() &&
+ 	{ return {std::move(out), std::move(value)}; }
+     };
+ 
+ #define __cpp_lib_ranges_iota 202202L
+ 
+   template<typename _Out, typename _Tp>
+     using iota_result = out_value_result<_Out, _Tp>;
+ 
+   struct __iota_fn
+   {
+     template<input_or_output_iterator _Out, sentinel_for<_Out> _Sent, weakly_incrementable _Tp>
+       requires indirectly_writable<_Out, const _Tp&>
+       constexpr iota_result<_Out, _Tp>
+       operator()(_Out __first, _Sent __last, _Tp __value) const
+       {
+ 	while (__first != __last)
+ 	  {
+ 	    *__first = static_cast<const _Tp&>(__value);
+ 	    ++__first;
+ 	    ++__value;
+ 	  }
+ 	return {std::move(__first), std::move(__value)};
+       }
+ 
+     template<weakly_incrementable _Tp, output_range<const _Tp&> _Range>
+       constexpr iota_result<borrowed_iterator_t<_Range>, _Tp>
+       operator()(_Range&& __r, _Tp __value) const
+       { return (*this)(ranges::begin(__r), ranges::end(__r), std::move(__value)); }
+   };
+ 
+   inline constexpr __iota_fn iota{};
+ #endif // C++23
+ 
    struct __equal_fn
    {
      template<input_iterator _Iter1, sentinel_for<_Iter1> _Sent1,
*************** namespace ranges
*** 157,162 ****
--- 210,229 ----
  
    inline constexpr __equal_fn equal{};
  
+ namespace __detail
+ {
+   template<bool _IsMove, typename _OutIter, typename _InIter>
+     [[__gnu__::__always_inline__]]
+     constexpr void
+     __assign_one(_OutIter& __out, _InIter& __in)
+     {
+       if constexpr (_IsMove)
+ 	*__out = ranges::iter_move(__in);
+       else
+ 	*__out = *__in;
+     }
+ } // namespace __detail
+ 
    template<typename _Iter, typename _Out>
      struct in_out_result
      {
*************** namespace ranges
*** 252,277 ****
  	{
  	  if (!std::__is_constant_evaluated())
  	    {
! 	      if constexpr (__memcpyable<_Iter, _Out>::__value)
  		{
  		  using _ValueTypeI = iter_value_t<_Iter>;
- 		  static_assert(_IsMove
- 		      ? is_move_assignable_v<_ValueTypeI>
- 		      : is_copy_assignable_v<_ValueTypeI>);
  		  auto __num = __last - __first;
! 		  if (__num)
  		    __builtin_memmove(__result, __first,
! 			sizeof(_ValueTypeI) * __num);
  		  return {__first + __num, __result + __num};
  		}
  	    }
  
  	  for (auto __n = __last - __first; __n > 0; --__n)
  	    {
! 	      if constexpr (_IsMove)
! 		*__result = std::move(*__first);
! 	      else
! 		*__result = *__first;
  	      ++__first;
  	      ++__result;
  	    }
--- 319,340 ----
  	{
  	  if (!std::__is_constant_evaluated())
  	    {
! 	      if constexpr (__memcpyable<_Out, _Iter>::__value)
  		{
  		  using _ValueTypeI = iter_value_t<_Iter>;
  		  auto __num = __last - __first;
! 		  if (__num > 1) [[likely]]
  		    __builtin_memmove(__result, __first,
! 				      sizeof(_ValueTypeI) * __num);
! 		  else if (__num == 1)
! 		    __detail::__assign_one<_IsMove>(__result, __first);
  		  return {__first + __num, __result + __num};
  		}
  	    }
  
  	  for (auto __n = __last - __first; __n > 0; --__n)
  	    {
! 	      __detail::__assign_one<_IsMove>(__result, __first);
  	      ++__first;
  	      ++__result;
  	    }
*************** namespace ranges
*** 281,290 ****
  	{
  	  while (__first != __last)
  	    {
! 	      if constexpr (_IsMove)
! 		*__result = std::move(*__first);
! 	      else
! 		*__result = *__first;
  	      ++__first;
  	      ++__result;
  	    }
--- 344,350 ----
  	{
  	  while (__first != __last)
  	    {
! 	      __detail::__assign_one<_IsMove>(__result, __first);
  	      ++__first;
  	      ++__result;
  	    }
*************** namespace ranges
*** 390,403 ****
  	      if constexpr (__memcpyable<_Out, _Iter>::__value)
  		{
  		  using _ValueTypeI = iter_value_t<_Iter>;
- 		  static_assert(_IsMove
- 		      ? is_move_assignable_v<_ValueTypeI>
- 		      : is_copy_assignable_v<_ValueTypeI>);
  		  auto __num = __last - __first;
! 		  if (__num)
! 		    __builtin_memmove(__result - __num, __first,
  				      sizeof(_ValueTypeI) * __num);
! 		  return {__first + __num, __result - __num};
  		}
  	    }
  
--- 450,463 ----
  	      if constexpr (__memcpyable<_Out, _Iter>::__value)
  		{
  		  using _ValueTypeI = iter_value_t<_Iter>;
  		  auto __num = __last - __first;
! 		  __result -= __num;
! 		  if (__num > 1) [[likely]]
! 		    __builtin_memmove(__result, __first,
  				      sizeof(_ValueTypeI) * __num);
! 		  else if (__num == 1)
! 		    __detail::__assign_one<_IsMove>(__result, __first);
! 		  return {__first + __num, __result};
  		}
  	    }
  
*************** namespace ranges
*** 408,417 ****
  	    {
  	      --__tail;
  	      --__result;
! 	      if constexpr (_IsMove)
! 		*__result = std::move(*__tail);
! 	      else
! 		*__result = *__tail;
  	    }
  	  return {std::move(__lasti), std::move(__result)};
  	}
--- 468,474 ----
  	    {
  	      --__tail;
  	      --__result;
! 	      __detail::__assign_one<_IsMove>(__result, __tail);
  	    }
  	  return {std::move(__lasti), std::move(__result)};
  	}
*************** namespace ranges
*** 424,433 ****
  	    {
  	      --__tail;
  	      --__result;
! 	      if constexpr (_IsMove)
! 		*__result = std::move(*__tail);
! 	      else
! 		*__result = *__tail;
  	    }
  	  return {std::move(__lasti), std::move(__result)};
  	}
--- 481,487 ----
  	    {
  	      --__tail;
  	      --__result;
! 	      __detail::__assign_one<_IsMove>(__result, __tail);
  	    }
  	  return {std::move(__lasti), std::move(__result)};
  	}
*************** namespace ranges
*** 567,573 ****
  	if constexpr (sized_sentinel_for<_Sent, _Out>)
  	  {
  	    const auto __len = __last - __first;
! 	    return ranges::fill_n(__first, __len, __value);
  	  }
  	else if constexpr (is_scalar_v<_Tp>)
  	  {
--- 621,627 ----
  	if constexpr (sized_sentinel_for<_Sent, _Out>)
  	  {
  	    const auto __len = __last - __first;
! 	    return ranges::fill_n(std::move(__first), __len, __value);
  	  }
  	else if constexpr (is_scalar_v<_Tp>)
  	  {
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/bits/ranges_base.h gcc-13.4.0/libstdc++-v3/include/bits/ranges_base.h
*** gcc-13.3.0/libstdc++-v3/include/bits/ranges_base.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/bits/ranges_base.h	Thu Jun  5 16:03:03 2025
*************** namespace ranges
*** 539,544 ****
--- 539,550 ----
      using range_rvalue_reference_t
        = iter_rvalue_reference_t<iterator_t<_Range>>;
  
+   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+   // 3860. range_common_reference_t is missing
+   template<range _Range>
+     using range_common_reference_t
+       = iter_common_reference_t<iterator_t<_Range>>;
+ 
    /// [range.sized] The sized_range concept.
    template<typename _Tp>
      concept sized_range = range<_Tp>
*************** namespace ranges
*** 933,939 ****
  
    struct __distance_fn final
    {
!     template<input_or_output_iterator _It, sentinel_for<_It> _Sent>
        requires (!sized_sentinel_for<_Sent, _It>)
        constexpr iter_difference_t<_It>
        operator()[[nodiscard]](_It __first, _Sent __last) const
--- 939,947 ----
  
    struct __distance_fn final
    {
!     // _GLIBCXX_RESOLVE_LIB_DEFECTS
!     // 3664. LWG 3392 broke std::ranges::distance(a, a+3)
!     template<typename _It, sentinel_for<_It> _Sent>
        requires (!sized_sentinel_for<_Sent, _It>)
        constexpr iter_difference_t<_It>
        operator()[[nodiscard]](_It __first, _Sent __last) const
*************** namespace ranges
*** 947,959 ****
  	return __n;
        }
  
!     template<input_or_output_iterator _It, sized_sentinel_for<_It> _Sent>
        [[nodiscard]]
!       constexpr iter_difference_t<_It>
!       operator()(const _It& __first, const _Sent& __last) const
!       {
! 	return __last - __first;
!       }
  
      template<range _Range>
        [[nodiscard]]
--- 955,965 ----
  	return __n;
        }
  
!     template<typename _It, sized_sentinel_for<decay_t<_It>> _Sent>
        [[nodiscard]]
!       constexpr iter_difference_t<decay_t<_It>>
!       operator()(_It&& __first, _Sent __last) const
!       { return __last - static_cast<const decay_t<_It>&>(__first); }
  
      template<range _Range>
        [[nodiscard]]
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/bits/ranges_uninitialized.h gcc-13.4.0/libstdc++-v3/include/bits/ranges_uninitialized.h
*** gcc-13.3.0/libstdc++-v3/include/bits/ranges_uninitialized.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/bits/ranges_uninitialized.h	Thu Jun  5 16:03:03 2025
*************** namespace ranges
*** 272,281 ****
  		      && is_nothrow_assignable_v<_OutType&,
  						 iter_reference_t<_Iter>>)
  	  {
! 	    auto __d1 = __ilast - __ifirst;
! 	    auto __d2 = __olast - __ofirst;
! 	    return ranges::copy_n(std::move(__ifirst), std::min(__d1, __d2),
! 				  __ofirst);
  	  }
  	else
  	  {
--- 272,281 ----
  		      && is_nothrow_assignable_v<_OutType&,
  						 iter_reference_t<_Iter>>)
  	  {
! 	    auto __d = __ilast - __ifirst;
! 	    if (auto __d2 = __olast - __ofirst; __d2 < __d)
! 	      __d = static_cast<iter_difference_t<_Iter>>(__d2);
! 	    return ranges::copy_n(std::move(__ifirst), __d, __ofirst);
  	  }
  	else
  	  {
*************** namespace ranges
*** 320,328 ****
  		      && is_nothrow_assignable_v<_OutType&,
  						 iter_reference_t<_Iter>>)
  	  {
! 	    auto __d = __olast - __ofirst;
! 	    return ranges::copy_n(std::move(__ifirst), std::min(__n, __d),
! 				  __ofirst);
  	  }
  	else
  	  {
--- 320,328 ----
  		      && is_nothrow_assignable_v<_OutType&,
  						 iter_reference_t<_Iter>>)
  	  {
! 	    if (auto __d = __olast - __ofirst; __d < __n)
! 	      __n = static_cast<iter_difference_t<_Iter>>(__d);
! 	    return ranges::copy_n(std::move(__ifirst), __n, __ofirst);
  	  }
  	else
  	  {
*************** namespace ranges
*** 359,369 ****
  		      && is_nothrow_assignable_v<_OutType&,
  						 iter_rvalue_reference_t<_Iter>>)
  	  {
! 	    auto __d1 = __ilast - __ifirst;
! 	    auto __d2 = __olast - __ofirst;
  	    auto [__in, __out]
  	      = ranges::copy_n(std::make_move_iterator(std::move(__ifirst)),
! 			       std::min(__d1, __d2), __ofirst);
  	    return {std::move(__in).base(), __out};
  	  }
  	else
--- 359,370 ----
  		      && is_nothrow_assignable_v<_OutType&,
  						 iter_rvalue_reference_t<_Iter>>)
  	  {
! 	    auto __d = __ilast - __ifirst;
! 	    if (auto __d2 = __olast - __ofirst; __d2 < __d)
! 	      __d = static_cast<iter_difference_t<_Iter>>(__d2);
  	    auto [__in, __out]
  	      = ranges::copy_n(std::make_move_iterator(std::move(__ifirst)),
! 			       __d, __ofirst);
  	    return {std::move(__in).base(), __out};
  	  }
  	else
*************** namespace ranges
*** 411,420 ****
  		      && is_nothrow_assignable_v<_OutType&,
  						 iter_rvalue_reference_t<_Iter>>)
  	  {
! 	    auto __d = __olast - __ofirst;
  	    auto [__in, __out]
  	      = ranges::copy_n(std::make_move_iterator(std::move(__ifirst)),
! 			       std::min(__n, __d), __ofirst);
  	    return {std::move(__in).base(), __out};
  	  }
  	else
--- 412,422 ----
  		      && is_nothrow_assignable_v<_OutType&,
  						 iter_rvalue_reference_t<_Iter>>)
  	  {
! 	    if (auto __d = __olast - __ofirst; __d < __n)
! 	      __n = static_cast<iter_difference_t<_Iter>>(__d);
  	    auto [__in, __out]
  	      = ranges::copy_n(std::make_move_iterator(std::move(__ifirst)),
! 			       __n, __ofirst);
  	    return {std::move(__in).base(), __out};
  	  }
  	else
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/bits/ranges_util.h gcc-13.4.0/libstdc++-v3/include/bits/ranges_util.h
*** gcc-13.3.0/libstdc++-v3/include/bits/ranges_util.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/bits/ranges_util.h	Thu Jun  5 16:03:03 2025
***************
*** 33,38 ****
--- 33,39 ----
  #if __cplusplus > 201703L
  # include <bits/ranges_base.h>
  # include <bits/utility.h>
+ # include <bits/invoke.h>
  
  #ifdef __cpp_lib_ranges
  namespace std _GLIBCXX_VISIBILITY(default)
*************** namespace ranges
*** 432,439 ****
  	     __detail::__make_unsigned_like_t<range_difference_t<_Rng>>)
        -> subrange<iterator_t<_Rng>, sentinel_t<_Rng>, subrange_kind::sized>;
  
    template<size_t _Num, class _It, class _Sent, subrange_kind _Kind>
!     requires (_Num < 2)
      constexpr auto
      get(const subrange<_It, _Sent, _Kind>& __r)
      {
--- 433,443 ----
  	     __detail::__make_unsigned_like_t<range_difference_t<_Rng>>)
        -> subrange<iterator_t<_Rng>, sentinel_t<_Rng>, subrange_kind::sized>;
  
+   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+   // 3589. The const lvalue reference overload of get for subrange does not
+   // constrain I to be copyable when N == 0
    template<size_t _Num, class _It, class _Sent, subrange_kind _Kind>
!     requires ((_Num == 0 && copyable<_It>) || _Num == 1)
      constexpr auto
      get(const subrange<_It, _Sent, _Kind>& __r)
      {
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/bits/stl_bvector.h gcc-13.4.0/libstdc++-v3/include/bits/stl_bvector.h
*** gcc-13.3.0/libstdc++-v3/include/bits/stl_bvector.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/bits/stl_bvector.h	Thu Jun  5 16:03:03 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 593,599 ****
  	_GLIBCXX20_CONSTEXPR
  	_Bvector_impl() _GLIBCXX_NOEXCEPT_IF(
  	  is_nothrow_default_constructible<_Bit_alloc_type>::value)
! #if __cpp_concepts
  	requires is_default_constructible_v<_Bit_alloc_type>
  #endif
  	: _Bit_alloc_type()
--- 593,599 ----
  	_GLIBCXX20_CONSTEXPR
  	_Bvector_impl() _GLIBCXX_NOEXCEPT_IF(
  	  is_nothrow_default_constructible<_Bit_alloc_type>::value)
! #if __cpp_concepts && __cpp_lib_type_trait_variable_templates
  	requires is_default_constructible_v<_Bit_alloc_type>
  #endif
  	: _Bit_alloc_type()
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 654,660 ****
  
        _GLIBCXX20_CONSTEXPR
        _Bvector_base(const allocator_type& __a)
!       : _M_impl(__a) { }
  
  #if __cplusplus >= 201103L
        _Bvector_base(_Bvector_base&&) = default;
--- 654,660 ----
  
        _GLIBCXX20_CONSTEXPR
        _Bvector_base(const allocator_type& __a)
!       : _M_impl(_Bit_alloc_type(__a)) { }
  
  #if __cplusplus >= 201103L
        _Bvector_base(_Bvector_base&&) = default;
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 1319,1325 ****
  #endif
  	emplace_back(_Args&&... __args)
  	{
! 	  push_back(bool(__args...));
  #if __cplusplus > 201402L
  	  return back();
  #endif
--- 1319,1325 ----
  #endif
  	emplace_back(_Args&&... __args)
  	{
! 	  push_back(bool(std::forward<_Args>(__args)...));
  #if __cplusplus > 201402L
  	  return back();
  #endif
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 1329,1335 ****
  	_GLIBCXX20_CONSTEXPR
  	iterator
  	emplace(const_iterator __pos, _Args&&... __args)
! 	{ return insert(__pos, bool(__args...)); }
  #endif
  
      protected:
--- 1329,1335 ----
  	_GLIBCXX20_CONSTEXPR
  	iterator
  	emplace(const_iterator __pos, _Args&&... __args)
! 	{ return insert(__pos, bool(std::forward<_Args>(__args)...)); }
  #endif
  
      protected:
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/bits/stl_deque.h gcc-13.4.0/libstdc++-v3/include/bits/stl_deque.h
*** gcc-13.3.0/libstdc++-v3/include/bits/stl_deque.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/bits/stl_deque.h	Thu Jun  5 16:03:03 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 2054,2062 ****
        iterator
        _M_insert_aux(iterator __pos, const value_type& __x);
  #else
        template<typename... _Args>
  	iterator
! 	_M_insert_aux(iterator __pos, _Args&&... __args);
  #endif
  
        // called by insert(p,n,x) via fill_insert
--- 2054,2066 ----
        iterator
        _M_insert_aux(iterator __pos, const value_type& __x);
  #else
+       iterator
+       _M_insert_aux(iterator __pos, const value_type& __x)
+       { return _M_emplace_aux(__pos, __x); }
+ 
        template<typename... _Args>
  	iterator
! 	_M_emplace_aux(iterator __pos, _Args&&... __args);
  #endif
  
        // called by insert(p,n,x) via fill_insert
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/bits/stl_iterator.h gcc-13.4.0/libstdc++-v3/include/bits/stl_iterator.h
*** gcc-13.3.0/libstdc++-v3/include/bits/stl_iterator.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/bits/stl_iterator.h	Thu Jun  5 16:03:03 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1747,1752 ****
--- 1747,1753 ----
      inline _GLIBCXX17_CONSTEXPR bool
      operator==(const move_iterator<_Iterator>& __x,
  	       const move_iterator<_Iterator>& __y)
+     // N.B. No contraints, x.base() == y.base() is always well-formed.
      { return __x.base() == __y.base(); }
  
  #if __cpp_lib_three_way_comparison
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1807,1812 ****
--- 1808,1816 ----
      inline _GLIBCXX17_CONSTEXPR move_iterator<_Iterator>
      operator+(typename move_iterator<_Iterator>::difference_type __n,
  	      const move_iterator<_Iterator>& __x)
+ #ifdef __cpp_lib_concepts
+     requires requires { { __x.base() + __n } -> same_as<_Iterator>; }
+ #endif
      { return __x + __n; }
  
    template<typename _Iterator>
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1833,1838 ****
--- 1837,1850 ----
      { return _ReturnType(__i); }
  
  #if __cplusplus > 201703L && __cpp_lib_concepts
+   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+   // 3736.  move_iterator missing disable_sized_sentinel_for specialization
+   template<typename _Iterator1, typename _Iterator2>
+     requires (!sized_sentinel_for<_Iterator1, _Iterator2>)
+     inline constexpr bool
+     disable_sized_sentinel_for<move_iterator<_Iterator1>,
+ 			       move_iterator<_Iterator2>> = true;
+ 
    // [iterators.common] Common iterators
  
    namespace __detail
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 2786,2791 ****
--- 2798,2815 ----
        noexcept(noexcept(_M_current == __s))
        { return _M_current == __s; }
  
+     template<__detail::__not_a_const_iterator _CIt>
+       requires __detail::__constant_iterator<_CIt> && convertible_to<_It, _CIt>
+     constexpr
+     operator _CIt() const&
+     { return _M_current; }
+ 
+     template<__detail::__not_a_const_iterator _CIt>
+       requires __detail::__constant_iterator<_CIt> && convertible_to<_It, _CIt>
+     constexpr
+     operator _CIt() &&
+     { return std::move(_M_current); }
+ 
      constexpr bool
      operator<(const basic_const_iterator& __y) const
      noexcept(noexcept(_M_current < __y._M_current))
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 2852,2881 ****
  	&& three_way_comparable_with<_It, _It2>
        { return _M_current <=> __y; }
  
!     template<__detail::__not_a_const_iterator _It2>
        friend constexpr bool
!       operator<(const _It2& __x, const basic_const_iterator& __y)
        noexcept(noexcept(__x < __y._M_current))
        requires random_access_iterator<_It> && totally_ordered_with<_It, _It2>
        { return __x < __y._M_current; }
  
!     template<__detail::__not_a_const_iterator _It2>
        friend constexpr bool
!       operator>(const _It2& __x, const basic_const_iterator& __y)
        noexcept(noexcept(__x > __y._M_current))
        requires random_access_iterator<_It> && totally_ordered_with<_It, _It2>
        { return __x > __y._M_current; }
  
!     template<__detail::__not_a_const_iterator _It2>
        friend constexpr bool
!       operator<=(const _It2& __x, const basic_const_iterator& __y)
        noexcept(noexcept(__x <= __y._M_current))
        requires random_access_iterator<_It> && totally_ordered_with<_It, _It2>
        { return __x <= __y._M_current; }
  
!     template<__detail::__not_a_const_iterator _It2>
        friend constexpr bool
!       operator>=(const _It2& __x, const basic_const_iterator& __y)
        noexcept(noexcept(__x >= __y._M_current))
        requires random_access_iterator<_It> && totally_ordered_with<_It, _It2>
        { return __x >= __y._M_current; }
--- 2876,2905 ----
  	&& three_way_comparable_with<_It, _It2>
        { return _M_current <=> __y; }
  
!     template<__detail::__not_a_const_iterator _It2, same_as<_It> _It3>
        friend constexpr bool
!       operator<(const _It2& __x, const basic_const_iterator<_It3>& __y)
        noexcept(noexcept(__x < __y._M_current))
        requires random_access_iterator<_It> && totally_ordered_with<_It, _It2>
        { return __x < __y._M_current; }
  
!     template<__detail::__not_a_const_iterator _It2, same_as<_It> _It3>
        friend constexpr bool
!       operator>(const _It2& __x, const basic_const_iterator<_It3>& __y)
        noexcept(noexcept(__x > __y._M_current))
        requires random_access_iterator<_It> && totally_ordered_with<_It, _It2>
        { return __x > __y._M_current; }
  
!     template<__detail::__not_a_const_iterator _It2, same_as<_It> _It3>
        friend constexpr bool
!       operator<=(const _It2& __x, const basic_const_iterator<_It3>& __y)
        noexcept(noexcept(__x <= __y._M_current))
        requires random_access_iterator<_It> && totally_ordered_with<_It, _It2>
        { return __x <= __y._M_current; }
  
!     template<__detail::__not_a_const_iterator _It2, same_as<_It> _It3>
        friend constexpr bool
!       operator>=(const _It2& __x, const basic_const_iterator<_It3>& __y)
        noexcept(noexcept(__x >= __y._M_current))
        requires random_access_iterator<_It> && totally_ordered_with<_It, _It2>
        { return __x >= __y._M_current; }
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 2904,2913 ****
        noexcept(noexcept(_M_current - __y))
        { return _M_current - __y; }
  
!     template<__detail::__not_a_const_iterator _Sent>
        requires sized_sentinel_for<_Sent, _It>
        friend constexpr difference_type
!       operator-(const _Sent& __x, const basic_const_iterator& __y)
        noexcept(noexcept(__x - __y._M_current))
        { return __x - __y._M_current; }
  
--- 2928,2937 ----
        noexcept(noexcept(_M_current - __y))
        { return _M_current - __y; }
  
!     template<__detail::__not_a_const_iterator _Sent, same_as<_It> _It2>
        requires sized_sentinel_for<_Sent, _It>
        friend constexpr difference_type
!       operator-(const _Sent& __x, const basic_const_iterator<_It2>& __y)
        noexcept(noexcept(__x - __y._M_current))
        { return __x - __y._M_current; }
  
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/bits/stl_vector.h gcc-13.4.0/libstdc++-v3/include/bits/stl_vector.h
*** gcc-13.3.0/libstdc++-v3/include/bits/stl_vector.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/bits/stl_vector.h	Thu Jun  5 16:03:03 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 2041,2047 ****
      { return (__x.size() == __y.size()
  	      && std::equal(__x.begin(), __x.end(), __y.begin())); }
  
! #if __cpp_lib_three_way_comparison
    /**
     *  @brief  Vector ordering relation.
     *  @param  __x  A `vector`.
--- 2041,2047 ----
      { return (__x.size() == __y.size()
  	      && std::equal(__x.begin(), __x.end(), __y.begin())); }
  
! #if __cpp_lib_three_way_comparison // >= C++20
    /**
     *  @brief  Vector ordering relation.
     *  @param  __x  A `vector`.
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 2054,2061 ****
     *  `<` and `>=` etc.
    */
    template<typename _Tp, typename _Alloc>
!     _GLIBCXX20_CONSTEXPR
!     inline __detail::__synth3way_t<_Tp>
      operator<=>(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
      {
        return std::lexicographical_compare_three_way(__x.begin(), __x.end(),
--- 2054,2060 ----
     *  `<` and `>=` etc.
    */
    template<typename _Tp, typename _Alloc>
!     constexpr __detail::__synth3way_t<_Tp>
      operator<=>(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
      {
        return std::lexicographical_compare_three_way(__x.begin(), __x.end(),
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/bits/vector.tcc gcc-13.4.0/libstdc++-v3/include/bits/vector.tcc
*** gcc-13.3.0/libstdc++-v3/include/bits/vector.tcc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/bits/vector.tcc	Thu Jun  5 16:03:03 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 799,804 ****
--- 799,806 ----
  		// reachable.
  		pointer __old_start = this->_M_impl._M_start;
  		pointer __old_finish = this->_M_impl._M_finish;
+ 		if ((__old_finish - __old_start) < 0)
+ 		  __builtin_unreachable();
  
  		const size_type __len =
  		  _M_check_len(__n, "vector::_M_range_insert");
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 846,854 ****
      vector<bool, _Alloc>::
      _M_reallocate(size_type __n)
      {
        _Bit_pointer __q = this->_M_allocate(__n);
        iterator __start(std::__addressof(*__q), 0);
!       iterator __finish(_M_copy_aligned(begin(), end(), __start));
        this->_M_deallocate();
        this->_M_impl._M_start = __start;
        this->_M_impl._M_finish = __finish;
--- 848,859 ----
      vector<bool, _Alloc>::
      _M_reallocate(size_type __n)
      {
+       const iterator __begin = begin(), __end = end();
+       if (size_type(__end - __begin) > __n)
+ 	__builtin_unreachable();
        _Bit_pointer __q = this->_M_allocate(__n);
        iterator __start(std::__addressof(*__q), 0);
!       iterator __finish(_M_copy_aligned(__begin, __end, __start));
        this->_M_deallocate();
        this->_M_impl._M_start = __start;
        this->_M_impl._M_finish = __finish;
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 874,884 ****
  	{
  	  const size_type __len = 
  	    _M_check_len(__n, "vector<bool>::_M_fill_insert");
  	  _Bit_pointer __q = this->_M_allocate(__len);
  	  iterator __start(std::__addressof(*__q), 0);
! 	  iterator __i = _M_copy_aligned(begin(), __position, __start);
  	  std::fill(__i, __i + difference_type(__n), __x);
! 	  iterator __finish = std::copy(__position, end(),
  					__i + difference_type(__n));
  	  this->_M_deallocate();
  	  this->_M_impl._M_end_of_storage = __q + _S_nword(__len);
--- 879,890 ----
  	{
  	  const size_type __len = 
  	    _M_check_len(__n, "vector<bool>::_M_fill_insert");
+ 	  iterator __begin = begin(), __end = end();
  	  _Bit_pointer __q = this->_M_allocate(__len);
  	  iterator __start(std::__addressof(*__q), 0);
! 	  iterator __i = _M_copy_aligned(__begin, __position, __start);
  	  std::fill(__i, __i + difference_type(__n), __x);
! 	  iterator __finish = std::copy(__position, __end,
  					__i + difference_type(__n));
  	  this->_M_deallocate();
  	  this->_M_impl._M_end_of_storage = __q + _S_nword(__len);
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/c_compatibility/stdatomic.h gcc-13.4.0/libstdc++-v3/include/c_compatibility/stdatomic.h
*** gcc-13.3.0/libstdc++-v3/include/c_compatibility/stdatomic.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/c_compatibility/stdatomic.h	Thu Jun  5 16:03:03 2025
***************
*** 34,40 ****
  
  #define __cpp_lib_stdatomic_h 202011L
  
! #define _Atomic(_Tp) std::atomic<_Tp>
  
  using std::memory_order;
  using std::memory_order_relaxed;
--- 34,40 ----
  
  #define __cpp_lib_stdatomic_h 202011L
  
! #define _Atomic(_Tp) ::std::atomic<_Tp>
  
  using std::memory_order;
  using std::memory_order_relaxed;
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/c_global/cmath gcc-13.4.0/libstdc++-v3/include/c_global/cmath
*** gcc-13.3.0/libstdc++-v3/include/c_global/cmath	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/c_global/cmath	Thu Jun  5 16:03:03 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 2626,2632 ****
  
    constexpr int
    ilogb(_Float16 __x)
!   { return _Float16(__builtin_ilogbf(__x)); }
  
    constexpr _Float16
    lgamma(_Float16 __x)
--- 2626,2632 ----
  
    constexpr int
    ilogb(_Float16 __x)
!   { return __builtin_ilogbf(__x); }
  
    constexpr _Float16
    lgamma(_Float16 __x)
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 2634,2644 ****
  
    constexpr long long
    llrint(_Float16 __x)
!   { return _Float16(__builtin_llrintf(__x)); }
  
    constexpr long long
    llround(_Float16 __x)
!   { return _Float16(__builtin_llroundf(__x)); }
  
    constexpr _Float16
    log1p(_Float16 __x)
--- 2634,2644 ----
  
    constexpr long long
    llrint(_Float16 __x)
!   { return __builtin_llrintf(__x); }
  
    constexpr long long
    llround(_Float16 __x)
!   { return __builtin_llroundf(__x); }
  
    constexpr _Float16
    log1p(_Float16 __x)
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 2655,2665 ****
  
    constexpr long
    lrint(_Float16 __x)
!   { return _Float16(__builtin_lrintf(__x)); }
  
    constexpr long
    lround(_Float16 __x)
!   { return _Float16(__builtin_lroundf(__x)); }
  
    constexpr _Float16
    nearbyint(_Float16 __x)
--- 2655,2665 ----
  
    constexpr long
    lrint(_Float16 __x)
!   { return __builtin_lrintf(__x); }
  
    constexpr long
    lround(_Float16 __x)
!   { return __builtin_lroundf(__x); }
  
    constexpr _Float16
    nearbyint(_Float16 __x)
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 2668,2675 ****
    constexpr _Float16
    nextafter(_Float16 __x, _Float16 __y)
    {
!     if (std::__is_constant_evaluated())
!       return __builtin_nextafterf16(__x, __y);
  #ifdef __INT16_TYPE__
      using __float16_int_type = __INT16_TYPE__;
  #else
--- 2668,2679 ----
    constexpr _Float16
    nextafter(_Float16 __x, _Float16 __y)
    {
! #if __cpp_if_consteval >= 202106L
!     // Can't use if (std::__is_constant_evaluated()) here, as it
!     // doesn't guarantee optimizing the body away at -O0 and
!     // nothing defines nextafterf16.
!     if consteval { return __builtin_nextafterf16(__x, __y); }
! #endif
  #ifdef __INT16_TYPE__
      using __float16_int_type = __INT16_TYPE__;
  #else
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 3344,3350 ****
  
    constexpr int
    ilogb(__gnu_cxx::__bfloat16_t __x)
!   { return __gnu_cxx::__bfloat16_t(__builtin_ilogbf(__x)); }
  
    constexpr __gnu_cxx::__bfloat16_t
    lgamma(__gnu_cxx::__bfloat16_t __x)
--- 3348,3354 ----
  
    constexpr int
    ilogb(__gnu_cxx::__bfloat16_t __x)
!   { return __builtin_ilogbf(__x); }
  
    constexpr __gnu_cxx::__bfloat16_t
    lgamma(__gnu_cxx::__bfloat16_t __x)
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 3352,3362 ****
  
    constexpr long long
    llrint(__gnu_cxx::__bfloat16_t __x)
!   { return __gnu_cxx::__bfloat16_t(__builtin_llrintf(__x)); }
  
    constexpr long long
    llround(__gnu_cxx::__bfloat16_t __x)
!   { return __gnu_cxx::__bfloat16_t(__builtin_llroundf(__x)); }
  
    constexpr __gnu_cxx::__bfloat16_t
    log1p(__gnu_cxx::__bfloat16_t __x)
--- 3356,3366 ----
  
    constexpr long long
    llrint(__gnu_cxx::__bfloat16_t __x)
!   { return __builtin_llrintf(__x); }
  
    constexpr long long
    llround(__gnu_cxx::__bfloat16_t __x)
!   { return __builtin_llroundf(__x); }
  
    constexpr __gnu_cxx::__bfloat16_t
    log1p(__gnu_cxx::__bfloat16_t __x)
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 3373,3383 ****
  
    constexpr long
    lrint(__gnu_cxx::__bfloat16_t __x)
!   { return __gnu_cxx::__bfloat16_t(__builtin_lrintf(__x)); }
  
    constexpr long
    lround(__gnu_cxx::__bfloat16_t __x)
!   { return __gnu_cxx::__bfloat16_t(__builtin_lroundf(__x)); }
  
    constexpr __gnu_cxx::__bfloat16_t
    nearbyint(__gnu_cxx::__bfloat16_t __x)
--- 3377,3387 ----
  
    constexpr long
    lrint(__gnu_cxx::__bfloat16_t __x)
!   { return __builtin_lrintf(__x); }
  
    constexpr long
    lround(__gnu_cxx::__bfloat16_t __x)
!   { return __builtin_lroundf(__x); }
  
    constexpr __gnu_cxx::__bfloat16_t
    nearbyint(__gnu_cxx::__bfloat16_t __x)
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 3386,3393 ****
    constexpr __gnu_cxx::__bfloat16_t
    nextafter(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y)
    {
!     if (std::__is_constant_evaluated())
!       return __builtin_nextafterf16b(__x, __y);
  #ifdef __INT16_TYPE__
      using __bfloat16_int_type = __INT16_TYPE__;
  #else
--- 3390,3401 ----
    constexpr __gnu_cxx::__bfloat16_t
    nextafter(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y)
    {
! #if __cpp_if_consteval >= 202106L
!     // Can't use if (std::__is_constant_evaluated()) here, as it
!     // doesn't guarantee optimizing the body away at -O0 and
!     // nothing defines nextafterf16b.
!     if consteval { return __builtin_nextafterf16b(__x, __y); }
! #endif
  #ifdef __INT16_TYPE__
      using __bfloat16_int_type = __INT16_TYPE__;
  #else
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/debug/helper_functions.h gcc-13.4.0/libstdc++-v3/include/debug/helper_functions.h
*** gcc-13.3.0/libstdc++-v3/include/debug/helper_functions.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/debug/helper_functions.h	Thu Jun  5 16:03:03 2025
*************** namespace __gnu_debug
*** 169,174 ****
--- 169,179 ----
      __valid_range_aux(_InputIterator __first, _InputIterator __last,
  		      std::input_iterator_tag)
      {
+       // FIXME: The checks for singular iterators fail during constant eval
+       // due to PR c++/85944. e.g. PR libstdc++/109517 and PR libstdc++/109976.
+       if (std::__is_constant_evaluated())
+ 	return true;
+ 
        return __first == __last
  	|| (!__gnu_debug::__check_singular(__first)
  	      && !__gnu_debug::__check_singular(__last));
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/debug/map.h gcc-13.4.0/libstdc++-v3/include/debug/map.h
*** gcc-13.3.0/libstdc++-v3/include/debug/map.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/debug/map.h	Thu Jun  5 16:03:03 2025
*************** namespace __debug
*** 344,350 ****
  	}
  
  
! #if __cplusplus > 201402L
        template <typename... _Args>
          pair<iterator, bool>
          try_emplace(const key_type& __k, _Args&&... __args)
--- 344,350 ----
  	}
  
  
! #if __cplusplus >= 201703L && _GLIBCXX_HOSTED
        template <typename... _Args>
          pair<iterator, bool>
          try_emplace(const key_type& __k, _Args&&... __args)
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/debug/safe_base.h gcc-13.4.0/libstdc++-v3/include/debug/safe_base.h
*** gcc-13.3.0/libstdc++-v3/include/debug/safe_base.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/debug/safe_base.h	Thu Jun  5 16:03:03 2025
*************** namespace __gnu_debug
*** 191,200 ****
  
    public:
      /// The list of mutable iterators that reference this container
!     _Safe_iterator_base* _M_iterators;
  
      /// The list of constant iterators that reference this container
!     _Safe_iterator_base* _M_const_iterators;
  
      /// The container version number. This number may never be 0.
      mutable unsigned int _M_version;
--- 191,200 ----
  
    public:
      /// The list of mutable iterators that reference this container
!     mutable _Safe_iterator_base* _M_iterators;
  
      /// The list of constant iterators that reference this container
!     mutable _Safe_iterator_base* _M_const_iterators;
  
      /// The container version number. This number may never be 0.
      mutable unsigned int _M_version;
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/debug/unordered_map gcc-13.4.0/libstdc++-v3/include/debug/unordered_map
*** gcc-13.3.0/libstdc++-v3/include/debug/unordered_map	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/debug/unordered_map	Thu Jun  5 16:03:03 2025
*************** namespace __debug
*** 440,446 ****
  	  _M_check_rehashed(__bucket_count);
  	}
  
! #if __cplusplus > 201402L
        template <typename... _Args>
  	pair<iterator, bool>
  	try_emplace(const key_type& __k, _Args&&... __args)
--- 440,446 ----
  	  _M_check_rehashed(__bucket_count);
  	}
  
! #if __cplusplus >= 201703L && _GLIBCXX_HOSTED
        template <typename... _Args>
  	pair<iterator, bool>
  	try_emplace(const key_type& __k, _Args&&... __args)
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/experimental/bits/simd.h gcc-13.4.0/libstdc++-v3/include/experimental/bits/simd.h
*** gcc-13.3.0/libstdc++-v3/include/experimental/bits/simd.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/experimental/bits/simd.h	Thu Jun  5 16:03:03 2025
*************** template <size_t _Bytes>
*** 584,602 ****
      static_assert(_Bytes > 0);
      if constexpr (_Bytes == sizeof(int))
        return int();
-   #ifdef __clang__
-     else if constexpr (_Bytes == sizeof(char))
-       return char();
-   #else
      else if constexpr (_Bytes == sizeof(_SChar))
        return _SChar();
-   #endif
      else if constexpr (_Bytes == sizeof(short))
        return short();
-   #ifndef __clang__
      else if constexpr (_Bytes == sizeof(long))
        return long();
-   #endif
      else if constexpr (_Bytes == sizeof(_LLong))
        return _LLong();
    #ifdef __SIZEOF_INT128__
--- 584,595 ----
*************** template <typename _V>
*** 1616,1622 ****
      if constexpr (__is_vector_type_v<_V>)
        return __x;
      else if constexpr (is_simd<_V>::value || is_simd_mask<_V>::value)
!       return __data(__x)._M_data;
      else if constexpr (__is_vectorizable_v<_V>)
        return __vector_type_t<_V, 2>{__x};
      else
--- 1609,1637 ----
      if constexpr (__is_vector_type_v<_V>)
        return __x;
      else if constexpr (is_simd<_V>::value || is_simd_mask<_V>::value)
!       {
! 	if constexpr (__is_fixed_size_abi_v<typename _V::abi_type>)
! 	  {
! 	    static_assert(is_simd<_V>::value);
! 	    static_assert(_V::abi_type::template __traits<
! 			    typename _V::value_type>::_SimdMember::_S_tuple_size == 1);
! 	    return __as_vector(__data(__x).first);
! 	  }
! 	else if constexpr (_V::size() > 1)
! 	  return __data(__x)._M_data;
! 	else
! 	  {
! 	    static_assert(is_simd<_V>::value);
! 	    using _Tp = typename _V::value_type;
! #ifdef __i386__
! 	    constexpr auto __bytes = sizeof(_Tp) == 8 ? 16 : sizeof(_Tp);
! 	    using _RV [[__gnu__::__vector_size__(__bytes)]] = _Tp;
! #else
! 	    using _RV [[__gnu__::__vector_size__(sizeof(_Tp))]] = _Tp;
! #endif
! 	    return _RV{__data(__x)};
! 	  }
!       }
      else if constexpr (__is_vectorizable_v<_V>)
        return __vector_type_t<_V, 2>{__x};
      else
*************** template <typename _Tp, typename _TVT =
*** 2027,2032 ****
--- 2042,2113 ----
    }
  
  // }}}
+ // __vec_shuffle{{{
+ template <typename _T0, typename _T1, typename _Fun, size_t... _Is>
+   _GLIBCXX_SIMD_INTRINSIC constexpr
+   __vector_type_t<remove_reference_t<decltype(declval<_T0>()[0])>, sizeof...(_Is)>
+   __vec_shuffle(_T0 __x, _T1 __y, index_sequence<_Is...> __seq, _Fun __idx_perm)
+   {
+     constexpr int _N0 = sizeof(__x) / sizeof(__x[0]);
+     constexpr int _N1 = sizeof(__y) / sizeof(__y[0]);
+     using _Tp = remove_reference_t<decltype(declval<_T0>()[0])>;
+     using _RV [[maybe_unused]] = __vector_type_t<_Tp, sizeof...(_Is)>;
+ #if __has_builtin(__builtin_shufflevector)
+ #ifdef __clang__
+     // Clang requires _T0 == _T1
+     if constexpr (sizeof(__x) > sizeof(__y) and _N1 == 1)
+       return __vec_shuffle(__x, _T0{__y[0]}, __seq, __idx_perm);
+     else if constexpr (sizeof(__x) > sizeof(__y))
+       return __vec_shuffle(__x, __intrin_bitcast<_T0>(__y), __seq, __idx_perm);
+     else if constexpr (sizeof(__x) < sizeof(__y) and _N0 == 1)
+       return __vec_shuffle(_T1{__x[0]}, __y, __seq, [=](int __i) {
+ 	       __i = __idx_perm(__i);
+ 	       return __i < _N0 ? __i : __i - _N0 + _N1;
+ 	     });
+     else if constexpr (sizeof(__x) < sizeof(__y))
+       return __vec_shuffle(__intrin_bitcast<_T1>(__x), __y, __seq, [=](int __i) {
+ 	       __i = __idx_perm(__i);
+ 	       return __i < _N0 ? __i : __i - _N0 + _N1;
+ 	     });
+     else
+ #endif
+       {
+ 	const auto __r = __builtin_shufflevector(__x, __y, [=] {
+ 			   constexpr int __j = __idx_perm(_Is);
+ 			   static_assert(__j < _N0 + _N1);
+ 			   return __j;
+ 			 }()...);
+ #ifdef __i386__
+ 	if constexpr (sizeof(__r) == sizeof(_RV))
+ 	  return __r;
+ 	else
+ 	  return _RV {__r[_Is]...};
+ #else
+ 	return __r;
+ #endif
+       }
+ #else
+     return _RV {
+       [=]() -> _Tp {
+ 	constexpr int __j = __idx_perm(_Is);
+ 	static_assert(__j < _N0 + _N1);
+ 	if constexpr (__j < 0)
+ 	  return 0;
+ 	else if constexpr (__j < _N0)
+ 	  return __x[__j];
+ 	else
+ 	  return __y[__j - _N0];
+       }()...
+     };
+ #endif
+   }
+ 
+ template <typename _T0, typename _Fun, typename _Seq>
+   _GLIBCXX_SIMD_INTRINSIC constexpr auto
+   __vec_shuffle(_T0 __x, _Seq __seq, _Fun __idx_perm)
+   { return __vec_shuffle(__x, _T0(), __seq, __idx_perm); }
+ 
+ // }}}
  // __concat{{{
  template <typename _Tp, typename _TVT = _VectorTraits<_Tp>,
  	  typename _R = __vector_type_t<typename _TVT::value_type, _TVT::_S_full_size * 2>>
*************** template <typename _BuiltinType>
*** 2624,2629 ****
--- 2705,2712 ----
  
  // }}}
  // _SimdWrapper{{{
+ struct _DisabledSimdWrapper;
+ 
  template <typename _Tp, size_t _Width>
    struct _SimdWrapper<
      _Tp, _Width,
*************** template <typename _Tp, size_t _Width>
*** 2633,2648 ****
  			      == sizeof(__vector_type_t<_Tp, _Width>),
  		       __vector_type_t<_Tp, _Width>>
    {
!     using _Base
!       = _SimdWrapperBase<__has_iec559_behavior<__signaling_NaN, _Tp>::value
! 			   && sizeof(_Tp) * _Width
! 				== sizeof(__vector_type_t<_Tp, _Width>),
! 			 __vector_type_t<_Tp, _Width>>;
  
      static_assert(__is_vectorizable_v<_Tp>);
      static_assert(_Width >= 2); // 1 doesn't make sense, use _Tp directly then
  
-     using _BuiltinType = __vector_type_t<_Tp, _Width>;
      using value_type = _Tp;
  
      static inline constexpr size_t _S_full_size
--- 2716,2732 ----
  			      == sizeof(__vector_type_t<_Tp, _Width>),
  		       __vector_type_t<_Tp, _Width>>
    {
!     static constexpr bool _S_need_default_init
!       = __has_iec559_behavior<__signaling_NaN, _Tp>::value
! 	  and sizeof(_Tp) * _Width == sizeof(__vector_type_t<_Tp, _Width>);
! 
!     using _BuiltinType = __vector_type_t<_Tp, _Width>;
! 
!     using _Base = _SimdWrapperBase<_S_need_default_init, _BuiltinType>;
  
      static_assert(__is_vectorizable_v<_Tp>);
      static_assert(_Width >= 2); // 1 doesn't make sense, use _Tp directly then
  
      using value_type = _Tp;
  
      static inline constexpr size_t _S_full_size
*************** template <typename _Tp, size_t _Width>
*** 2678,2690 ****
      _GLIBCXX_SIMD_INTRINSIC constexpr _SimdWrapper&
      operator=(_SimdWrapper&&) = default;
  
!     template <typename _V, typename = enable_if_t<disjunction_v<
! 			     is_same<_V, __vector_type_t<_Tp, _Width>>,
! 			     is_same<_V, __intrinsic_type_t<_Tp, _Width>>>>>
        _GLIBCXX_SIMD_INTRINSIC constexpr
        _SimdWrapper(_V __x)
!       // __vector_bitcast can convert e.g. __m128 to __vector(2) float
!       : _Base(__vector_bitcast<_Tp, _Width>(__x)) {}
  
      template <typename... _As,
  	      typename = enable_if_t<((is_same_v<simd_abi::scalar, _As> && ...)
--- 2762,2787 ----
      _GLIBCXX_SIMD_INTRINSIC constexpr _SimdWrapper&
      operator=(_SimdWrapper&&) = default;
  
!     // Convert from exactly matching __vector_type_t
!     using _SimdWrapperBase<_S_need_default_init, _BuiltinType>::_SimdWrapperBase;
! 
!     // Convert from __intrinsic_type_t if __intrinsic_type_t and __vector_type_t differ, otherwise
!     // this ctor should not exist. Making the argument type unusable is our next best solution.
!     _GLIBCXX_SIMD_INTRINSIC constexpr
!     _SimdWrapper(conditional_t<is_same_v<_BuiltinType, __intrinsic_type_t<_Tp, _Width>>,
! 			       _DisabledSimdWrapper, __intrinsic_type_t<_Tp, _Width>> __x)
!     : _Base(__vector_bitcast<_Tp, _Width>(__x)) {}
! 
!     // Convert from different __vector_type_t, but only if bit reinterpretation is a correct
!     // conversion of the value_type
!     template <typename _V, typename _TVT = _VectorTraits<_V>,
! 	      typename = enable_if_t<sizeof(typename _TVT::value_type) == sizeof(_Tp)
! 				       and sizeof(_V) == sizeof(_BuiltinType)
! 				       and is_integral_v<_Tp>
! 				       and is_integral_v<typename _TVT::value_type>>>
        _GLIBCXX_SIMD_INTRINSIC constexpr
        _SimdWrapper(_V __x)
!       : _Base(reinterpret_cast<_BuiltinType>(__x)) {}
  
      template <typename... _As,
  	      typename = enable_if_t<((is_same_v<simd_abi::scalar, _As> && ...)
*************** template <size_t... _Sizes, typename _Tp
*** 3886,3892 ****
  // __extract_part {{{
  template <int _Index, int _Total, int _Combine = 1, typename _Tp, size_t _Np>
    _GLIBCXX_SIMD_INTRINSIC _GLIBCXX_CONST constexpr
!   _SimdWrapper<_Tp, _Np / _Total * _Combine>
    __extract_part(const _SimdWrapper<_Tp, _Np> __x);
  
  template <int _Index, int _Parts, int _Combine = 1, typename _Tp, typename _A0, typename... _As>
--- 3983,3989 ----
  // __extract_part {{{
  template <int _Index, int _Total, int _Combine = 1, typename _Tp, size_t _Np>
    _GLIBCXX_SIMD_INTRINSIC _GLIBCXX_CONST constexpr
!   conditional_t<_Np == _Total and _Combine == 1, _Tp, _SimdWrapper<_Tp, _Np / _Total * _Combine>>
    __extract_part(const _SimdWrapper<_Tp, _Np> __x);
  
  template <int _Index, int _Parts, int _Combine = 1, typename _Tp, typename _A0, typename... _As>
*************** template <size_t... _Sizes, typename _Tp
*** 4150,4197 ****
  			 __split_wrapper(_SL::template _S_pop_front<1>(),
  					 __data(__x).second));
        }
!     else if constexpr ((!is_same_v<simd_abi::scalar,
! 				   simd_abi::deduce_t<_Tp, _Sizes>> && ...)
! 		       && (!__is_fixed_size_abi_v<
! 			     simd_abi::deduce_t<_Tp, _Sizes>> && ...))
        {
! 	if constexpr (((_Sizes * 2 == _Np) && ...))
! 	  return {{__private_init, __extract_part<0, 2>(__data(__x))},
! 		  {__private_init, __extract_part<1, 2>(__data(__x))}};
! 	else if constexpr (is_same_v<_SizeList<_Sizes...>,
! 				     _SizeList<_Np / 3, _Np / 3, _Np / 3>>)
! 	  return {{__private_init, __extract_part<0, 3>(__data(__x))},
! 		  {__private_init, __extract_part<1, 3>(__data(__x))},
! 		  {__private_init, __extract_part<2, 3>(__data(__x))}};
! 	else if constexpr (is_same_v<_SizeList<_Sizes...>,
! 				     _SizeList<2 * _Np / 3, _Np / 3>>)
! 	  return {{__private_init, __extract_part<0, 3, 2>(__data(__x))},
! 		  {__private_init, __extract_part<2, 3>(__data(__x))}};
! 	else if constexpr (is_same_v<_SizeList<_Sizes...>,
! 				     _SizeList<_Np / 3, 2 * _Np / 3>>)
! 	  return {{__private_init, __extract_part<0, 3>(__data(__x))},
! 		  {__private_init, __extract_part<1, 3, 2>(__data(__x))}};
! 	else if constexpr (is_same_v<_SizeList<_Sizes...>,
! 				     _SizeList<_Np / 2, _Np / 4, _Np / 4>>)
! 	  return {{__private_init, __extract_part<0, 2>(__data(__x))},
! 		  {__private_init, __extract_part<2, 4>(__data(__x))},
! 		  {__private_init, __extract_part<3, 4>(__data(__x))}};
! 	else if constexpr (is_same_v<_SizeList<_Sizes...>,
! 				     _SizeList<_Np / 4, _Np / 4, _Np / 2>>)
! 	  return {{__private_init, __extract_part<0, 4>(__data(__x))},
! 		  {__private_init, __extract_part<1, 4>(__data(__x))},
! 		  {__private_init, __extract_part<1, 2>(__data(__x))}};
! 	else if constexpr (is_same_v<_SizeList<_Sizes...>,
! 				     _SizeList<_Np / 4, _Np / 2, _Np / 4>>)
! 	  return {{__private_init, __extract_part<0, 4>(__data(__x))},
! 		  {__private_init, __extract_center(__data(__x))},
! 		  {__private_init, __extract_part<3, 4>(__data(__x))}};
! 	else if constexpr (((_Sizes * 4 == _Np) && ...))
! 	  return {{__private_init, __extract_part<0, 4>(__data(__x))},
! 		  {__private_init, __extract_part<1, 4>(__data(__x))},
! 		  {__private_init, __extract_part<2, 4>(__data(__x))},
! 		  {__private_init, __extract_part<3, 4>(__data(__x))}};
! 	// else fall through
        }
  #ifdef _GLIBCXX_SIMD_USE_ALIASING_LOADS
      const __may_alias<_Tp>* const __element_ptr
--- 4247,4267 ----
  			 __split_wrapper(_SL::template _S_pop_front<1>(),
  					 __data(__x).second));
        }
!     else if constexpr ((!__is_fixed_size_abi_v<simd_abi::deduce_t<_Tp, _Sizes>> && ...))
        {
! 	constexpr array<size_t, sizeof...(_Sizes)> __size = {_Sizes...};
! 	return __generate_from_n_evaluations<sizeof...(_Sizes), _Tuple>(
! 		 [&](auto __i) constexpr {
! 		   constexpr size_t __offset = [&]() {
! 		     size_t __r = 0;
! 		     for (unsigned __j = 0; __j < __i; ++__j)
! 		       __r += __size[__j];
! 		     return __r;
! 		   }();
! 		   return __deduced_simd<_Tp, __size[__i]>(
! 			    __private_init,
! 			    __extract_part<__offset, _Np, __size[__i]>(__data(__x)));
! 		 });
        }
  #ifdef _GLIBCXX_SIMD_USE_ALIASING_LOADS
      const __may_alias<_Tp>* const __element_ptr
*************** template <typename _Tp, typename... _As,
*** 4253,4266 ****
    simd<_Tp, simd_abi::deduce_t<_Tp, (simd_size_v<_Tp, _As> + ...)>>
    concat(const simd<_Tp, _As>&... __xs)
    {
!     using _Rp = __deduced_simd<_Tp, (simd_size_v<_Tp, _As> + ...)>;
      if constexpr (sizeof...(__xs) == 1)
        return simd_cast<_Rp>(__xs...);
      else if ((... && __xs._M_is_constprop()))
!       return simd<_Tp,
! 		  simd_abi::deduce_t<_Tp, (simd_size_v<_Tp, _As> + ...)>>(
! 	       [&](auto __i) constexpr _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA
  	       { return __subscript_in_pack<__i>(__xs...); });
      else
        {
  	_Rp __r{};
--- 4323,4359 ----
    simd<_Tp, simd_abi::deduce_t<_Tp, (simd_size_v<_Tp, _As> + ...)>>
    concat(const simd<_Tp, _As>&... __xs)
    {
!     constexpr int _Np = (simd_size_v<_Tp, _As> + ...);
!     using _Abi = simd_abi::deduce_t<_Tp, _Np>;
!     using _Rp = simd<_Tp, _Abi>;
!     using _RW = typename _SimdTraits<_Tp, _Abi>::_SimdMember;
      if constexpr (sizeof...(__xs) == 1)
        return simd_cast<_Rp>(__xs...);
      else if ((... && __xs._M_is_constprop()))
!       return _Rp([&](auto __i) constexpr _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA
  	       { return __subscript_in_pack<__i>(__xs...); });
+     else if constexpr (__is_simd_wrapper_v<_RW> and sizeof...(__xs) == 2)
+       {
+ 	return {__private_init,
+ 		__vec_shuffle(__as_vector(__xs)..., std::make_index_sequence<_RW::_S_full_size>(),
+ 			      [](int __i) {
+ 				constexpr int __sizes[2] = {int(simd_size_v<_Tp, _As>)...};
+ 				constexpr int __vsizes[2]
+ 				  = {int(sizeof(__as_vector(__xs)) / sizeof(_Tp))...};
+ 				constexpr int __padding0 = __vsizes[0] - __sizes[0];
+ 				return __i >= _Np ? -1 : __i < __sizes[0] ? __i : __i + __padding0;
+ 			      })};
+       }
+     else if constexpr (__is_simd_wrapper_v<_RW> and sizeof...(__xs) == 3)
+       return [](const auto& __x0, const auto& __x1, const auto& __x2)
+ 		 _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA {
+ 	       return concat(concat(__x0, __x1), __x2);
+ 	     }(__xs...);
+     else if constexpr (__is_simd_wrapper_v<_RW> and sizeof...(__xs) > 3)
+       return [](const auto& __x0, const auto& __x1, const auto&... __rest)
+ 		 _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA {
+ 	       return concat(concat(__x0, __x1), concat(__rest...));
+ 	     }(__xs...);
      else
        {
  	_Rp __r{};
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/experimental/bits/simd_builtin.h gcc-13.4.0/libstdc++-v3/include/experimental/bits/simd_builtin.h
*** gcc-13.3.0/libstdc++-v3/include/experimental/bits/simd_builtin.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/experimental/bits/simd_builtin.h	Thu Jun  5 16:03:03 2025
*************** template <typename _Tp, size_t _ToN = 0,
*** 93,215 ****
    }
  
  // }}}
- // __shift_elements_right{{{
- // if (__shift % 2ⁿ == 0) => the low n Bytes are correct
- template <unsigned __shift, typename _Tp, typename _TVT = _VectorTraits<_Tp>>
-   _GLIBCXX_SIMD_INTRINSIC _Tp
-   __shift_elements_right(_Tp __v)
-   {
-     [[maybe_unused]] const auto __iv = __to_intrin(__v);
-     static_assert(__shift <= sizeof(_Tp));
-     if constexpr (__shift == 0)
-       return __v;
-     else if constexpr (__shift == sizeof(_Tp))
-       return _Tp();
- #if _GLIBCXX_SIMD_X86INTRIN // {{{
-     else if constexpr (__have_sse && __shift == 8
- 		       && _TVT::template _S_is<float, 4>)
-       return _mm_movehl_ps(__iv, __iv);
-     else if constexpr (__have_sse2 && __shift == 8
- 		       && _TVT::template _S_is<double, 2>)
-       return _mm_unpackhi_pd(__iv, __iv);
-     else if constexpr (__have_sse2 && sizeof(_Tp) == 16)
-       return reinterpret_cast<typename _TVT::type>(
- 	_mm_srli_si128(reinterpret_cast<__m128i>(__iv), __shift));
-     else if constexpr (__shift == 16 && sizeof(_Tp) == 32)
-       {
- 	/*if constexpr (__have_avx && _TVT::template _S_is<double, 4>)
- 	  return _mm256_permute2f128_pd(__iv, __iv, 0x81);
- 	else if constexpr (__have_avx && _TVT::template _S_is<float, 8>)
- 	  return _mm256_permute2f128_ps(__iv, __iv, 0x81);
- 	else if constexpr (__have_avx)
- 	  return reinterpret_cast<typename _TVT::type>(
- 	    _mm256_permute2f128_si256(__iv, __iv, 0x81));
- 	else*/
- 	return __zero_extend(__hi128(__v));
-       }
-     else if constexpr (__have_avx2 && sizeof(_Tp) == 32 && __shift < 16)
-       {
- 	const auto __vll = __vector_bitcast<_LLong>(__v);
- 	return reinterpret_cast<typename _TVT::type>(
- 	  _mm256_alignr_epi8(_mm256_permute2x128_si256(__vll, __vll, 0x81),
- 			     __vll, __shift));
-       }
-     else if constexpr (__have_avx && sizeof(_Tp) == 32 && __shift < 16)
-       {
- 	const auto __vll = __vector_bitcast<_LLong>(__v);
- 	return reinterpret_cast<typename _TVT::type>(
- 	  __concat(_mm_alignr_epi8(__hi128(__vll), __lo128(__vll), __shift),
- 		   _mm_srli_si128(__hi128(__vll), __shift)));
-       }
-     else if constexpr (sizeof(_Tp) == 32 && __shift > 16)
-       return __zero_extend(__shift_elements_right<__shift - 16>(__hi128(__v)));
-     else if constexpr (sizeof(_Tp) == 64 && __shift == 32)
-       return __zero_extend(__hi256(__v));
-     else if constexpr (__have_avx512f && sizeof(_Tp) == 64)
-       {
- 	if constexpr (__shift >= 48)
- 	  return __zero_extend(
- 	    __shift_elements_right<__shift - 48>(__extract<3, 4>(__v)));
- 	else if constexpr (__shift >= 32)
- 	  return __zero_extend(
- 	    __shift_elements_right<__shift - 32>(__hi256(__v)));
- 	else if constexpr (__shift % 8 == 0)
- 	  return reinterpret_cast<typename _TVT::type>(
- 	    _mm512_alignr_epi64(__m512i(), __intrin_bitcast<__m512i>(__v),
- 				__shift / 8));
- 	else if constexpr (__shift % 4 == 0)
- 	  return reinterpret_cast<typename _TVT::type>(
- 	    _mm512_alignr_epi32(__m512i(), __intrin_bitcast<__m512i>(__v),
- 				__shift / 4));
- 	else if constexpr (__have_avx512bw && __shift < 16)
- 	  {
- 	    const auto __vll = __vector_bitcast<_LLong>(__v);
- 	    return reinterpret_cast<typename _TVT::type>(
- 	      _mm512_alignr_epi8(_mm512_shuffle_i32x4(__vll, __vll, 0xf9),
- 				 __vll, __shift));
- 	  }
- 	else if constexpr (__have_avx512bw && __shift < 32)
- 	  {
- 	    const auto __vll = __vector_bitcast<_LLong>(__v);
- 	    return reinterpret_cast<typename _TVT::type>(
- 	      _mm512_alignr_epi8(_mm512_shuffle_i32x4(__vll, __m512i(), 0xee),
- 				 _mm512_shuffle_i32x4(__vll, __vll, 0xf9),
- 				 __shift - 16));
- 	  }
- 	else
- 	  __assert_unreachable<_Tp>();
-       }
-   /*
-       } else if constexpr (__shift % 16 == 0 && sizeof(_Tp) == 64)
- 	  return __auto_bitcast(__extract<__shift / 16, 4>(__v));
-   */
- #endif // _GLIBCXX_SIMD_X86INTRIN }}}
-     else
-       {
- 	constexpr int __chunksize = __shift % 8 == 0   ? 8
- 				    : __shift % 4 == 0 ? 4
- 				    : __shift % 2 == 0 ? 2
- 						       : 1;
- 	auto __w = __vector_bitcast<__int_with_sizeof_t<__chunksize>>(__v);
- 	using _Up = decltype(__w);
- 	return __intrin_bitcast<_Tp>(
- 	  __call_with_n_evaluations<(sizeof(_Tp) - __shift) / __chunksize>(
- 	    [](auto... __chunks) _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA {
- 	      return _Up{__chunks...};
- 	    }, [&](auto __i) _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA {
- 	      return __w[__shift / __chunksize + __i];
- 	    }));
-       }
-   }
- 
- // }}}
  // __extract_part(_SimdWrapper<_Tp, _Np>) {{{
  template <int _Index, int _Total, int _Combine, typename _Tp, size_t _Np>
    _GLIBCXX_SIMD_INTRINSIC _GLIBCXX_CONST constexpr
!   _SimdWrapper<_Tp, _Np / _Total * _Combine>
    __extract_part(const _SimdWrapper<_Tp, _Np> __x)
    {
!     if constexpr (_Index % 2 == 0 && _Total % 2 == 0 && _Combine % 2 == 0)
        return __extract_part<_Index / 2, _Total / 2, _Combine / 2>(__x);
      else
        {
--- 93,107 ----
    }
  
  // }}}
  // __extract_part(_SimdWrapper<_Tp, _Np>) {{{
  template <int _Index, int _Total, int _Combine, typename _Tp, size_t _Np>
    _GLIBCXX_SIMD_INTRINSIC _GLIBCXX_CONST constexpr
!   conditional_t<_Np == _Total and _Combine == 1, _Tp, _SimdWrapper<_Tp, _Np / _Total * _Combine>>
    __extract_part(const _SimdWrapper<_Tp, _Np> __x)
    {
!     if constexpr (_Np == _Total and _Combine == 1)
!       return __x[_Index];
!     else if constexpr (_Index % 2 == 0 && _Total % 2 == 0 && _Combine % 2 == 0)
        return __extract_part<_Index / 2, _Total / 2, _Combine / 2>(__x);
      else
        {
*************** template <int _Index, int _Total, int _C
*** 235,273 ****
  	  return __x;
  	else if constexpr (_Index == 0)
  	  return __intrin_bitcast<_R>(__as_vector(__x));
- #if _GLIBCXX_SIMD_X86INTRIN // {{{
- 	else if constexpr (sizeof(__x) == 32
- 			   && __return_size * sizeof(_Tp) <= 16)
- 	  {
- 	    constexpr size_t __bytes_to_skip = __values_to_skip * sizeof(_Tp);
- 	    if constexpr (__bytes_to_skip == 16)
- 	      return __vector_bitcast<_Tp, __return_size>(
- 		__hi128(__as_vector(__x)));
- 	    else
- 	      return __vector_bitcast<_Tp, __return_size>(
- 		_mm_alignr_epi8(__hi128(__vector_bitcast<_LLong>(__x)),
- 				__lo128(__vector_bitcast<_LLong>(__x)),
- 				__bytes_to_skip));
- 	  }
- #endif // _GLIBCXX_SIMD_X86INTRIN }}}
- 	else if constexpr (_Index > 0
- 			   && (__values_to_skip % __return_size != 0
- 			       || sizeof(_R) >= 8)
- 			   && (__values_to_skip + __return_size) * sizeof(_Tp)
- 				<= 64
- 			   && sizeof(__x) >= 16)
- 	  return __intrin_bitcast<_R>(
- 	    __shift_elements_right<__values_to_skip * sizeof(_Tp)>(
- 	      __as_vector(__x)));
  	else
! 	  {
! 	    _R __r = {};
! 	    __builtin_memcpy(&__r,
! 			     reinterpret_cast<const char*>(&__x)
! 			       + sizeof(_Tp) * __values_to_skip,
! 			     __return_size * sizeof(_Tp));
! 	    return __r;
! 	  }
        }
    }
  
--- 127,137 ----
  	  return __x;
  	else if constexpr (_Index == 0)
  	  return __intrin_bitcast<_R>(__as_vector(__x));
  	else
! 	  return __vec_shuffle(__as_vector(__x), make_index_sequence<__bit_ceil(__return_size)>(),
! 			       [](size_t __i) {
! 				 return __i + __values_to_skip;
! 			       });
        }
    }
  
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/experimental/bits/simd_fixed_size.h gcc-13.4.0/libstdc++-v3/include/experimental/bits/simd_fixed_size.h
*** gcc-13.3.0/libstdc++-v3/include/experimental/bits/simd_fixed_size.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/experimental/bits/simd_fixed_size.h	Thu Jun  5 16:03:03 2025
*************** template <int _Index, int _Total, int _C
*** 927,933 ****
      using _RetAbi = simd_abi::deduce_t<_Tp, __return_size>;
  
      // handle (optimize) the simple cases
!     if constexpr (_Index == 0 && _Tuple::_S_first_size == __return_size)
        return __x.first._M_data;
      else if constexpr (_Index == 0 && _Total == _Combine)
        return __x;
--- 927,935 ----
      using _RetAbi = simd_abi::deduce_t<_Tp, __return_size>;
  
      // handle (optimize) the simple cases
!     if constexpr (__return_size == 1)
!       return __x[integral_constant<size_t, __values_to_skip>()];
!     else if constexpr (_Index == 0 && _Tuple::_S_first_size == __return_size)
        return __x.first._M_data;
      else if constexpr (_Index == 0 && _Total == _Combine)
        return __x;
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/experimental/bits/simd_x86.h gcc-13.4.0/libstdc++-v3/include/experimental/bits/simd_x86.h
*** gcc-13.3.0/libstdc++-v3/include/experimental/bits/simd_x86.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/experimental/bits/simd_x86.h	Thu Jun  5 16:03:03 2025
*************** template <typename _Abi, typename>
*** 2339,2367 ****
  		  __assert_unreachable<_Tp>();
  	      }
  	    else if constexpr (sizeof(__xi) == 64 && sizeof(_Tp) == 8)
! 	      return ~_mm512_mask_cmpeq_epi64_mask(__k1, __xi, __yi);
  	    else if constexpr (sizeof(__xi) == 64 && sizeof(_Tp) == 4)
! 	      return ~_mm512_mask_cmpeq_epi32_mask(__k1, __xi, __yi);
  	    else if constexpr (sizeof(__xi) == 64 && sizeof(_Tp) == 2)
! 	      return ~_mm512_mask_cmpeq_epi16_mask(__k1, __xi, __yi);
  	    else if constexpr (sizeof(__xi) == 64 && sizeof(_Tp) == 1)
! 	      return ~_mm512_mask_cmpeq_epi8_mask(__k1, __xi, __yi);
  	    else if constexpr (sizeof(__xi) == 32 && sizeof(_Tp) == 8)
! 	      return ~_mm256_mask_cmpeq_epi64_mask(__k1, __xi, __yi);
  	    else if constexpr (sizeof(__xi) == 32 && sizeof(_Tp) == 4)
! 	      return ~_mm256_mask_cmpeq_epi32_mask(__k1, __xi, __yi);
  	    else if constexpr (sizeof(__xi) == 32 && sizeof(_Tp) == 2)
! 	      return ~_mm256_mask_cmpeq_epi16_mask(__k1, __xi, __yi);
  	    else if constexpr (sizeof(__xi) == 32 && sizeof(_Tp) == 1)
! 	      return ~_mm256_mask_cmpeq_epi8_mask(__k1, __xi, __yi);
  	    else if constexpr (sizeof(__xi) == 16 && sizeof(_Tp) == 8)
! 	      return ~_mm_mask_cmpeq_epi64_mask(__k1, __xi, __yi);
  	    else if constexpr (sizeof(__xi) == 16 && sizeof(_Tp) == 4)
! 	      return ~_mm_mask_cmpeq_epi32_mask(__k1, __xi, __yi);
  	    else if constexpr (sizeof(__xi) == 16 && sizeof(_Tp) == 2)
! 	      return ~_mm_mask_cmpeq_epi16_mask(__k1, __xi, __yi);
  	    else if constexpr (sizeof(__xi) == 16 && sizeof(_Tp) == 1)
! 	      return ~_mm_mask_cmpeq_epi8_mask(__k1, __xi, __yi);
  	    else
  	      __assert_unreachable<_Tp>();
  	  }                                                   // }}}
--- 2339,2367 ----
  		  __assert_unreachable<_Tp>();
  	      }
  	    else if constexpr (sizeof(__xi) == 64 && sizeof(_Tp) == 8)
! 	      return _mm512_mask_cmpneq_epi64_mask(__k1, __xi, __yi);
  	    else if constexpr (sizeof(__xi) == 64 && sizeof(_Tp) == 4)
! 	      return _mm512_mask_cmpneq_epi32_mask(__k1, __xi, __yi);
  	    else if constexpr (sizeof(__xi) == 64 && sizeof(_Tp) == 2)
! 	      return _mm512_mask_cmpneq_epi16_mask(__k1, __xi, __yi);
  	    else if constexpr (sizeof(__xi) == 64 && sizeof(_Tp) == 1)
! 	      return _mm512_mask_cmpneq_epi8_mask(__k1, __xi, __yi);
  	    else if constexpr (sizeof(__xi) == 32 && sizeof(_Tp) == 8)
! 	      return _mm256_mask_cmpneq_epi64_mask(__k1, __xi, __yi);
  	    else if constexpr (sizeof(__xi) == 32 && sizeof(_Tp) == 4)
! 	      return _mm256_mask_cmpneq_epi32_mask(__k1, __xi, __yi);
  	    else if constexpr (sizeof(__xi) == 32 && sizeof(_Tp) == 2)
! 	      return _mm256_mask_cmpneq_epi16_mask(__k1, __xi, __yi);
  	    else if constexpr (sizeof(__xi) == 32 && sizeof(_Tp) == 1)
! 	      return _mm256_mask_cmpneq_epi8_mask(__k1, __xi, __yi);
  	    else if constexpr (sizeof(__xi) == 16 && sizeof(_Tp) == 8)
! 	      return _mm_mask_cmpneq_epi64_mask(__k1, __xi, __yi);
  	    else if constexpr (sizeof(__xi) == 16 && sizeof(_Tp) == 4)
! 	      return _mm_mask_cmpneq_epi32_mask(__k1, __xi, __yi);
  	    else if constexpr (sizeof(__xi) == 16 && sizeof(_Tp) == 2)
! 	      return _mm_mask_cmpneq_epi16_mask(__k1, __xi, __yi);
  	    else if constexpr (sizeof(__xi) == 16 && sizeof(_Tp) == 1)
! 	      return _mm_mask_cmpneq_epi8_mask(__k1, __xi, __yi);
  	    else
  	      __assert_unreachable<_Tp>();
  	  }                                                   // }}}
*************** template <typename _Abi, typename>
*** 5292,5298 ****
        _S_find_last_set(simd_mask<_Tp, _Abi> __k)
        {
  	if constexpr (__is_avx512_abi<_Abi>())
! 	  return std::__bit_width(__k._M_data._M_data) - 1;
  	else
  	  return _Base::_S_find_last_set(__k);
        }
--- 5292,5298 ----
        _S_find_last_set(simd_mask<_Tp, _Abi> __k)
        {
  	if constexpr (__is_avx512_abi<_Abi>())
! 	  return std::__bit_width(_Abi::_S_masked(__k._M_data)._M_data) - 1;
  	else
  	  return _Base::_S_find_last_set(__k);
        }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/ext/bitmap_allocator.h gcc-13.4.0/libstdc++-v3/include/ext/bitmap_allocator.h
*** gcc-13.3.0/libstdc++-v3/include/ext/bitmap_allocator.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/ext/bitmap_allocator.h	Thu Jun  5 16:03:03 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1017,1023 ****
  	if (__n > this->max_size())
  	  std::__throw_bad_alloc();
  
! #if __cpp_aligned_new
  	if (alignof(value_type) > __STDCPP_DEFAULT_NEW_ALIGNMENT__)
  	  {
  	    const size_type __b = __n * sizeof(value_type);
--- 1017,1023 ----
  	if (__n > this->max_size())
  	  std::__throw_bad_alloc();
  
! #if __cpp_aligned_new && __cplusplus >= 201103L
  	if (alignof(value_type) > __STDCPP_DEFAULT_NEW_ALIGNMENT__)
  	  {
  	    const size_type __b = __n * sizeof(value_type);
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1044,1050 ****
        {
  	if (__builtin_expect(__p != 0, true))
  	  {
! #if __cpp_aligned_new
  	    // Types with extended alignment are handled by operator delete.
  	    if (alignof(value_type) > __STDCPP_DEFAULT_NEW_ALIGNMENT__)
  	      {
--- 1044,1050 ----
        {
  	if (__builtin_expect(__p != 0, true))
  	  {
! #if __cpp_aligned_new && __cplusplus >= 201103L
  	    // Types with extended alignment are handled by operator delete.
  	    if (alignof(value_type) > __STDCPP_DEFAULT_NEW_ALIGNMENT__)
  	      {
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/ext/malloc_allocator.h gcc-13.4.0/libstdc++-v3/include/ext/malloc_allocator.h
*** gcc-13.3.0/libstdc++-v3/include/ext/malloc_allocator.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/ext/malloc_allocator.h	Thu Jun  5 16:03:03 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 120,126 ****
  	  }
  
  	_Tp* __ret = 0;
! #if __cpp_aligned_new
  #if __cplusplus > 201402L && _GLIBCXX_HAVE_ALIGNED_ALLOC
  	if (alignof(_Tp) > alignof(std::max_align_t))
  	  {
--- 120,126 ----
  	  }
  
  	_Tp* __ret = 0;
! #if __cpp_aligned_new && __cplusplus >= 201103L
  #if __cplusplus > 201402L && _GLIBCXX_HAVE_ALIGNED_ALLOC
  	if (alignof(_Tp) > alignof(std::max_align_t))
  	  {
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/ext/mt_allocator.h gcc-13.4.0/libstdc++-v3/include/ext/mt_allocator.h
*** gcc-13.3.0/libstdc++-v3/include/ext/mt_allocator.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/ext/mt_allocator.h	Thu Jun  5 16:03:03 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 693,699 ****
        if (__n > this->max_size())
  	std::__throw_bad_alloc();
  
! #if __cpp_aligned_new
        // Types with extended alignment are handled by operator new/delete.
        if (alignof(_Tp) > __STDCPP_DEFAULT_NEW_ALIGNMENT__)
  	{
--- 693,699 ----
        if (__n > this->max_size())
  	std::__throw_bad_alloc();
  
! #if __cpp_aligned_new && __cplusplus >= 201103L
        // Types with extended alignment are handled by operator new/delete.
        if (alignof(_Tp) > __STDCPP_DEFAULT_NEW_ALIGNMENT__)
  	{
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 748,754 ****
      {
        if (__builtin_expect(__p != 0, true))
  	{
! #if __cpp_aligned_new
  	  // Types with extended alignment are handled by operator new/delete.
  	  if (alignof(_Tp) > __STDCPP_DEFAULT_NEW_ALIGNMENT__)
  	    {
--- 748,754 ----
      {
        if (__builtin_expect(__p != 0, true))
  	{
! #if __cpp_aligned_new && __cplusplus >= 201103L
  	  // Types with extended alignment are handled by operator new/delete.
  	  if (alignof(_Tp) > __STDCPP_DEFAULT_NEW_ALIGNMENT__)
  	    {
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/ext/pool_allocator.h gcc-13.4.0/libstdc++-v3/include/ext/pool_allocator.h
*** gcc-13.3.0/libstdc++-v3/include/ext/pool_allocator.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/ext/pool_allocator.h	Thu Jun  5 16:03:03 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 224,230 ****
  
  	  const size_t __bytes = __n * sizeof(_Tp);
  
! #if __cpp_aligned_new
  	  if (alignof(_Tp) > __STDCPP_DEFAULT_NEW_ALIGNMENT__)
  	    {
  	      std::align_val_t __al = std::align_val_t(alignof(_Tp));
--- 224,230 ----
  
  	  const size_t __bytes = __n * sizeof(_Tp);
  
! #if __cpp_aligned_new && __cplusplus >= 201103L
  	  if (alignof(_Tp) > __STDCPP_DEFAULT_NEW_ALIGNMENT__)
  	    {
  	      std::align_val_t __al = std::align_val_t(alignof(_Tp));
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 272,278 ****
        using std::size_t;
        if (__builtin_expect(__n != 0 && __p != 0, true))
  	{
! #if __cpp_aligned_new
  	  if (alignof(_Tp) > __STDCPP_DEFAULT_NEW_ALIGNMENT__)
  	    {
  	      ::operator delete(__p, std::align_val_t(alignof(_Tp)));
--- 272,278 ----
        using std::size_t;
        if (__builtin_expect(__n != 0 && __p != 0, true))
  	{
! #if __cpp_aligned_new && __cplusplus >= 201103L
  	  if (alignof(_Tp) > __STDCPP_DEFAULT_NEW_ALIGNMENT__)
  	    {
  	      ::operator delete(__p, std::align_val_t(alignof(_Tp)));
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/pstl/glue_numeric_impl.h gcc-13.4.0/libstdc++-v3/include/pstl/glue_numeric_impl.h
*** gcc-13.3.0/libstdc++-v3/include/pstl/glue_numeric_impl.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/pstl/glue_numeric_impl.h	Thu Jun  5 16:03:03 2025
*************** exclusive_scan(_ExecutionPolicy&& __exec
*** 111,117 ****
  {
      using namespace __pstl;
      return __internal::__pattern_transform_scan(
!         std::forward<_ExecutionPolicy>(__exec), __first, __last, __result, __pstl::__internal::__no_op(), __init,
          __binary_op, /*inclusive=*/std::false_type(),
          __internal::__is_vectorization_preferred<_ExecutionPolicy, _ForwardIterator1, _ForwardIterator2>(__exec),
          __internal::__is_parallelization_preferred<_ExecutionPolicy, _ForwardIterator1, _ForwardIterator2>(__exec));
--- 111,117 ----
  {
      using namespace __pstl;
      return __internal::__pattern_transform_scan(
!         std::forward<_ExecutionPolicy>(__exec), __first, __last, __result, __pstl::__internal::__no_op(), std::move(__init),
          __binary_op, /*inclusive=*/std::false_type(),
          __internal::__is_vectorization_preferred<_ExecutionPolicy, _ForwardIterator1, _ForwardIterator2>(__exec),
          __internal::__is_parallelization_preferred<_ExecutionPolicy, _ForwardIterator1, _ForwardIterator2>(__exec));
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/pstl/numeric_impl.h gcc-13.4.0/libstdc++-v3/include/pstl/numeric_impl.h
*** gcc-13.3.0/libstdc++-v3/include/pstl/numeric_impl.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/pstl/numeric_impl.h	Thu Jun  5 16:03:03 2025
*************** __brick_transform_scan(_ForwardIterator
*** 149,159 ****
  {
      for (; __first != __last; ++__first, ++__result)
      {
!         *__result = __init;
          _PSTL_PRAGMA_FORCEINLINE
!         __init = __binary_op(__init, __unary_op(*__first));
      }
!     return std::make_pair(__result, __init);
  }
  
  // Inclusive form
--- 149,160 ----
  {
      for (; __first != __last; ++__first, ++__result)
      {
! 	_Tp __v = std::move(__init);
          _PSTL_PRAGMA_FORCEINLINE
!         __init = __binary_op(__v, __unary_op(*__first));
!         *__result = std::move(__v);
      }
!     return std::make_pair(__result, std::move(__init));
  }
  
  // Inclusive form
*************** __pattern_transform_scan(_ExecutionPolic
*** 214,220 ****
                           _OutputIterator __result, _UnaryOperation __unary_op, _Tp __init, _BinaryOperation __binary_op,
                           _Inclusive, _IsVector __is_vector, /*is_parallel=*/std::false_type) noexcept
  {
!     return __internal::__brick_transform_scan(__first, __last, __result, __unary_op, __init, __binary_op, _Inclusive(),
                                                __is_vector)
          .first;
  }
--- 215,221 ----
                           _OutputIterator __result, _UnaryOperation __unary_op, _Tp __init, _BinaryOperation __binary_op,
                           _Inclusive, _IsVector __is_vector, /*is_parallel=*/std::false_type) noexcept
  {
!   return __internal::__brick_transform_scan(__first, __last, __result, __unary_op, std::move(__init), __binary_op, _Inclusive(),
                                                __is_vector)
          .first;
  }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/pstl/parallel_backend_tbb.h gcc-13.4.0/libstdc++-v3/include/pstl/parallel_backend_tbb.h
*** gcc-13.3.0/libstdc++-v3/include/pstl/parallel_backend_tbb.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/pstl/parallel_backend_tbb.h	Thu Jun  5 16:03:03 2025
***************
*** 15,20 ****
--- 15,25 ----
  
  #include "parallel_backend_utils.h"
  
+ #ifndef TBB_SUPPRESS_DEPRECATED_MESSAGES
+ # define TBB_SUPPRESS_DEPRECATED_MESSAGES 1
+ # define _GLIBCXX_UNDEF_SUPPRESS
+ #endif
+ 
  // Bring in minimal required subset of Intel TBB
  #include <tbb/blocked_range.h>
  #include <tbb/parallel_for.h>
***************
*** 25,30 ****
--- 30,40 ----
  #include <tbb/tbb_allocator.h>
  #include <tbb/task.h>
  
+ #ifdef _GLIBCXX_UNDEF_SUPPRESS
+ # undef TBB_SUPPRESS_DEPRECATED_MESSAGES
+ # undef _GLIBCXX_UNDEF_SUPPRESS
+ #endif
+ 
  #if TBB_INTERFACE_VERSION < 10000
  #    error Intel(R) Threading Building Blocks 2018 is required; older versions are not supported.
  #endif
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/std/array gcc-13.4.0/libstdc++-v3/include/std/array
*** gcc-13.3.0/libstdc++-v3/include/std/array	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/std/array	Thu Jun  5 16:03:03 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 295,301 ****
      _GLIBCXX20_CONSTEXPR
      inline bool
      operator==(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
!     { return std::equal(__one.begin(), __one.end(), __two.begin()); }
  
  #if __cpp_lib_three_way_comparison && __cpp_lib_concepts
    template<typename _Tp, size_t _Nm>
--- 295,301 ----
      _GLIBCXX20_CONSTEXPR
      inline bool
      operator==(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
!     { return std::__equal_aux1(__one.begin(), __one.end(), __two.begin()); }
  
  #if __cpp_lib_three_way_comparison && __cpp_lib_concepts
    template<typename _Tp, size_t _Nm>
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 426,432 ****
        static_assert(is_constructible_v<_Tp, _Tp&>);
        if constexpr (is_constructible_v<_Tp, _Tp&>)
  	{
! 	  if constexpr (is_trivial_v<_Tp>)
  	    {
  	      array<remove_cv_t<_Tp>, _Nm> __arr;
  	      if (!__is_constant_evaluated() && _Nm != 0)
--- 426,434 ----
        static_assert(is_constructible_v<_Tp, _Tp&>);
        if constexpr (is_constructible_v<_Tp, _Tp&>)
  	{
! 	  if constexpr (is_trivially_copyable_v<_Tp>
! 			  && is_trivially_default_constructible_v<_Tp>
! 			  && is_copy_assignable_v<_Tp>)
  	    {
  	      array<remove_cv_t<_Tp>, _Nm> __arr;
  	      if (!__is_constant_evaluated() && _Nm != 0)
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 455,461 ****
        static_assert(is_move_constructible_v<_Tp>);
        if constexpr (is_move_constructible_v<_Tp>)
  	{
! 	  if constexpr (is_trivial_v<_Tp>)
  	    {
  	      array<remove_cv_t<_Tp>, _Nm> __arr;
  	      if (!__is_constant_evaluated() && _Nm != 0)
--- 457,465 ----
        static_assert(is_move_constructible_v<_Tp>);
        if constexpr (is_move_constructible_v<_Tp>)
  	{
! 	  if constexpr (is_trivially_copyable_v<_Tp>
! 			  && is_trivially_default_constructible_v<_Tp>
! 			  && is_copy_assignable_v<_Tp>)
  	    {
  	      array<remove_cv_t<_Tp>, _Nm> __arr;
  	      if (!__is_constant_evaluated() && _Nm != 0)
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/std/bit gcc-13.4.0/libstdc++-v3/include/std/bit
*** gcc-13.3.0/libstdc++-v3/include/std/bit	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/std/bit	Thu Jun  5 16:03:03 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 81,87 ****
      bit_cast(const _From& __from) noexcept
  #ifdef __cpp_concepts
      requires (sizeof(_To) == sizeof(_From))
!       && __is_trivially_copyable(_To) && __is_trivially_copyable(_From)
  #endif
      {
        return __builtin_bit_cast(_To, __from);
--- 81,87 ----
      bit_cast(const _From& __from) noexcept
  #ifdef __cpp_concepts
      requires (sizeof(_To) == sizeof(_From))
!       && is_trivially_copyable_v<_To> && is_trivially_copyable_v<_From>
  #endif
      {
        return __builtin_bit_cast(_To, __from);
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/std/chrono gcc-13.4.0/libstdc++-v3/include/std/chrono
*** gcc-13.3.0/libstdc++-v3/include/std/chrono	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/std/chrono	Thu Jun  5 16:03:03 2025
*************** namespace __detail
*** 3253,3259 ****
        };
        // The list above is known to be valid until (at least) this date
        // and only contains positive leap seconds.
!       const sys_seconds __expires(1735344000s); // 2024-12-28 00:00:00 UTC
  
  #if _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI
        if (__ss > __expires)
--- 3253,3259 ----
        };
        // The list above is known to be valid until (at least) this date
        // and only contains positive leap seconds.
!       const sys_seconds __expires(1766880000s); // 2025-12-28 00:00:00 UTC
  
  #if _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI
        if (__ss > __expires)
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/std/format gcc-13.4.0/libstdc++-v3/include/std/format
*** gcc-13.3.0/libstdc++-v3/include/std/format	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/std/format	Thu Jun  5 16:03:03 2025
*************** namespace __format
*** 1315,1322 ****
  
    // We can format a floating-point type iff it is usable with to_chars.
    template<typename _Tp>
!     concept __formattable_float = requires (_Tp __t, char* __p)
!     { __format::to_chars(__p, __p, __t, chars_format::scientific, 6); };
  
    template<__char _CharT>
      struct __formatter_fp
--- 1315,1323 ----
  
    // We can format a floating-point type iff it is usable with to_chars.
    template<typename _Tp>
!     concept __formattable_float
!       = is_same_v<remove_cv_t<_Tp>, _Tp> && requires (_Tp __t, char* __p)
!       { __format::to_chars(__p, __p, __t, chars_format::scientific, 6); };
  
    template<__char _CharT>
      struct __formatter_fp
*************** namespace __format
*** 1668,1679 ****
  
  	  if (_M_spec._M_localized && __builtin_isfinite(__v))
  	    {
  	      if constexpr (is_same_v<char, _CharT>)
! 		__wstr = _M_localize(__str, __expc, __fc.locale());
  	      else
! 		__wstr = _M_localize(__str, __expc, __loc.value());
! 	      if (!__wstr.empty())
! 		__str = __wstr;
  	    }
  
  	  size_t __width = _M_spec._M_get_width(__fc);
--- 1669,1681 ----
  
  	  if (_M_spec._M_localized && __builtin_isfinite(__v))
  	    {
+ 	      basic_string<_CharT> __s;
  	      if constexpr (is_same_v<char, _CharT>)
! 		__s = _M_localize(__str, __expc, __fc.locale());
  	      else
! 		__s = _M_localize(__str, __expc, __loc.value());
! 	      if (!__s.empty())
! 		__str = __wstr = std::move(__s);
  	    }
  
  	  size_t __width = _M_spec._M_get_width(__fc);
*************** namespace __format
*** 2029,2060 ****
      };
    /// @}
  
!   /// Format an integer.
!   template<integral _Tp, __format::__char _CharT>
!     requires (!__is_one_of<_Tp, char, wchar_t, char16_t, char32_t>::value)
!     struct formatter<_Tp, _CharT>
!     {
!       formatter() = default;
! 
!       [[__gnu__::__always_inline__]]
!       constexpr typename basic_format_parse_context<_CharT>::iterator
!       parse(basic_format_parse_context<_CharT>& __pc)
!       {
! 	return _M_f.template _M_parse<_Tp>(__pc);
!       }
  
!       template<typename _Out>
! 	typename basic_format_context<_Out, _CharT>::iterator
! 	format(_Tp __u, basic_format_context<_Out, _CharT>& __fc) const
! 	{ return _M_f.format(__u, __fc); }
  
!     private:
!       __format::__formatter_int<_CharT> _M_f;
!     };
  
! #if defined __SIZEOF_INT128__ && defined __STRICT_ANSI__
    template<typename _Tp, __format::__char _CharT>
!     requires (__is_one_of<_Tp, __int128, unsigned __int128>::value)
      struct formatter<_Tp, _CharT>
      {
        formatter() = default;
--- 2031,2063 ----
      };
    /// @}
  
! /// @cond undocumented
! namespace __format
! {
!   // each cv-unqualified arithmetic type ArithmeticT other than
!   // char, wchar_t, char8_t, char16_t, or char32_t
!   template<typename _Tp>
!     constexpr bool __is_formattable_integer = __is_integer<_Tp>::__value;
  
! #if defined __SIZEOF_INT128__
!   template<> inline constexpr bool __is_formattable_integer<__int128>  = true;
!   template<> inline constexpr bool __is_formattable_integer<unsigned __int128>
!       = true;
! #endif
  
!   template<> inline constexpr bool __is_formattable_integer<char> = false;
!   template<> inline constexpr bool __is_formattable_integer<wchar_t> = false;
! #ifdef _GLIBCXX_USE_CHAR8_T
!   template<> inline constexpr bool __is_formattable_integer<char8_t> = false;
! #endif
!   template<> inline constexpr bool __is_formattable_integer<char16_t> = false;
!   template<> inline constexpr bool __is_formattable_integer<char32_t> = false;
! }
! /// @endcond
  
!   /// Format an integer.
    template<typename _Tp, __format::__char _CharT>
!     requires __format::__is_formattable_integer<_Tp>
      struct formatter<_Tp, _CharT>
      {
        formatter() = default;
*************** namespace __format
*** 2074,2080 ****
      private:
        __format::__formatter_int<_CharT> _M_f;
      };
- #endif
  
    /// Format a floating-point value.
    template<__format::__formattable_float _Tp, __format::__char _CharT>
--- 2077,2082 ----
*************** namespace __format
*** 2309,2314 ****
--- 2311,2318 ----
  } // namespace __format
  /// @endcond
  
+ // Concept std::formattable was introduced by P2286R8 "Formatting Ranges",
+ // but we can't guard it with __cpp_lib_format_ranges until we define that!
  #if __cplusplus > 202002L
    // [format.formattable], concept formattable
    template<typename _Tp, typename _CharT>
*************** namespace __format
*** 2975,2996 ****
  
  	  // TODO bfloat16 and float16
  
! #ifdef __FLT32_DIG__
  	  else if constexpr (is_same_v<_Td, _Float32>)
- # ifdef _GLIBCXX_FLOAT_IS_IEEE_BINARY32
  	    return type_identity<float>();
- # else
- 	    return type_identity<_Float32>();
- # endif
  #endif
! #ifdef __FLT64_DIG__
  	  else if constexpr (is_same_v<_Td, _Float64>)
- # ifdef _GLIBCXX_DOUBLE_IS_IEEE_BINARY64
  	    return type_identity<double>();
- # else
- 	    return type_identity<_Float64>();
- # endif
  #endif
  #if _GLIBCXX_FORMAT_F128
  # if __FLT128_DIG__
  	  else if constexpr (is_same_v<_Td, _Float128>)
--- 2979,2994 ----
  
  	  // TODO bfloat16 and float16
  
! #if defined(__FLT32_DIG__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
  	  else if constexpr (is_same_v<_Td, _Float32>)
  	    return type_identity<float>();
  #endif
! 
! #if defined(__FLT64_DIG__) && defined(_GLIBCXX_DOUBLE_IS_IEEE_BINARY64)
  	  else if constexpr (is_same_v<_Td, _Float64>)
  	    return type_identity<double>();
  #endif
+ 
  #if _GLIBCXX_FORMAT_F128
  # if __FLT128_DIG__
  	  else if constexpr (is_same_v<_Td, _Float128>)
*************** namespace __format
*** 3070,3085 ****
  	    return _Arg_u128;
  #endif
  
- 	  // N.B. some of these types will never actually be used here,
- 	  // because they get normalized to a standard floating-point type.
- #if defined __FLT32_DIG__ && ! _GLIBCXX_FLOAT_IS_IEEE_BINARY32
- 	  else if constexpr (is_same_v<_Tp, _Float32>)
- 	    return _Arg_f32;
- #endif
- #if defined __FLT64_DIG__ && ! _GLIBCXX_DOUBLE_IS_IEEE_BINARY64
- 	  else if constexpr (is_same_v<_Tp, _Float64>)
- 	    return _Arg_f64;
- #endif
  #if _GLIBCXX_FORMAT_F128 == 2
  	  else if constexpr (is_same_v<_Tp, __format::__float128_t>)
  	    return _Arg_f128;
--- 3068,3073 ----
*************** namespace __format
*** 3292,3299 ****
  	{ return {_Format_arg::template _S_to_enum<_Args>()...}; }
  
      public:
-       basic_format_args() noexcept = default;
- 
        template<typename... _Args>
  	basic_format_args(const _Store<_Args...>& __store) noexcept;
  
--- 3280,3285 ----
*************** namespace __format
*** 3461,3466 ****
--- 3447,3458 ----
        : _M_args(__args), _M_out(std::move(__out)), _M_loc(__loc)
        { }
  
+       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+       // 4061. Should std::basic_format_context be
+       //       default-constructible/copyable/movable?
+       basic_format_context(const basic_format_context&) = delete;
+       basic_format_context& operator=(const basic_format_context&) = delete;
+ 
        template<typename _Out2, typename _CharT2, typename _Context2>
  	friend _Out2
  	__format::__do_vformat_to(_Out2, basic_string_view<_CharT2>,
*************** namespace __format
*** 3468,3474 ****
  				  const locale*);
  
      public:
-       basic_format_context() = default;
        ~basic_format_context() = default;
  
        using iterator = _Out;
--- 3460,3465 ----
*************** namespace __format
*** 3507,3513 ****
        basic_format_parse_context<_CharT> _M_pc;
  
        constexpr explicit
!       _Scanner(basic_string_view<_CharT> __str, size_t __nargs = -1)
        : _M_pc(__str, __nargs)
        { }
  
--- 3498,3504 ----
        basic_format_parse_context<_CharT> _M_pc;
  
        constexpr explicit
!       _Scanner(basic_string_view<_CharT> __str, size_t __nargs = (size_t)-1)
        : _M_pc(__str, __nargs)
        { }
  
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/std/forward_list gcc-13.4.0/libstdc++-v3/include/std/forward_list
*** gcc-13.3.0/libstdc++-v3/include/std/forward_list	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/std/forward_list	Thu Jun  5 16:03:03 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 75,82 ****
      inline typename forward_list<_Tp, _Alloc>::size_type
      erase(forward_list<_Tp, _Alloc>& __cont, const _Up& __value)
      {
!       using __elem_type = typename forward_list<_Tp, _Alloc>::value_type;
!       return std::erase_if(__cont, [&](__elem_type& __elem) {
  	  return __elem == __value;
        });
      }
--- 75,83 ----
      inline typename forward_list<_Tp, _Alloc>::size_type
      erase(forward_list<_Tp, _Alloc>& __cont, const _Up& __value)
      {
!       // _GLIBCXX_RESOLVE_LIB_DEFECTS
!       // 4135. helper lambda of std::erase for list should specify return type
!       return std::erase_if(__cont, [&](const auto& __elem) -> bool {
  	  return __elem == __value;
        });
      }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/std/functional gcc-13.4.0/libstdc++-v3/include/std/functional
*** gcc-13.3.0/libstdc++-v3/include/std/functional	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/std/functional	Thu Jun  5 16:03:03 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 550,556 ****
  
        template<typename _Fn, typename _CallArgs, typename... _BArgs>
  	using _Res_type_impl
! 	  = typename result_of< _Fn&(_Mu_type<_BArgs, _CallArgs>&&...) >::type;
  
        template<typename _CallArgs>
  	using _Res_type = _Res_type_impl<_Functor, _CallArgs, _Bound_args...>;
--- 550,556 ----
  
        template<typename _Fn, typename _CallArgs, typename... _BArgs>
  	using _Res_type_impl
! 	  = __invoke_result_t<_Fn&, _Mu_type<_BArgs, _CallArgs>&&...>;
  
        template<typename _CallArgs>
  	using _Res_type = _Res_type_impl<_Functor, _CallArgs, _Bound_args...>;
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/std/list gcc-13.4.0/libstdc++-v3/include/std/list
*** gcc-13.3.0/libstdc++-v3/include/std/list	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/std/list	Thu Jun  5 16:03:03 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 99,106 ****
      inline typename list<_Tp, _Alloc>::size_type
      erase(list<_Tp, _Alloc>& __cont, const _Up& __value)
      {
!       using __elem_type = typename list<_Tp, _Alloc>::value_type;
!       return std::erase_if(__cont, [&](__elem_type& __elem) {
  	  return __elem == __value;
        });
      }
--- 99,107 ----
      inline typename list<_Tp, _Alloc>::size_type
      erase(list<_Tp, _Alloc>& __cont, const _Up& __value)
      {
!       // _GLIBCXX_RESOLVE_LIB_DEFECTS
!       // 4135. helper lambda of std::erase for list should specify return type
!       return std::erase_if(__cont, [&](const auto& __elem) -> bool {
  	  return __elem == __value;
        });
      }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/std/numeric gcc-13.4.0/libstdc++-v3/include/std/numeric
*** gcc-13.3.0/libstdc++-v3/include/std/numeric	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/std/numeric	Thu Jun  5 16:03:03 2025
***************
*** 79,84 ****
--- 79,88 ----
  # include <limits>
  #endif
  
+ #if __cplusplus > 202002L
+ # include <bits/ranges_algobase.h> // for ranges::iota
+ #endif
+ 
  /**
   * @defgroup numerics Numerics
   *
*************** namespace __detail
*** 485,492 ****
      {
        while (__first != __last)
  	{
! 	  auto __v = __init;
! 	  __init = __binary_op(__init, *__first);
  	  ++__first;
  	  *__result++ = std::move(__v);
  	}
--- 489,496 ----
      {
        while (__first != __last)
  	{
! 	  _Tp __v = std::move(__init);
! 	  __init = __binary_op(__v, *__first);
  	  ++__first;
  	  *__result++ = std::move(__v);
  	}
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/std/ranges gcc-13.4.0/libstdc++-v3/include/std/ranges
*** gcc-13.3.0/libstdc++-v3/include/std/ranges	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/std/ranges	Thu Jun  5 16:03:03 2025
***************
*** 46,51 ****
--- 46,52 ----
  #include <string_view>
  #include <tuple>
  #if __cplusplus > 202002L
+ #include <utility>
  #include <variant>
  #endif
  #include <bits/ranges_util.h>
*************** namespace views::__adaptor
*** 1749,1756 ****
  	  static auto
  	  _S_iter_cat()
  	  {
  	    using _Base = transform_view::_Base<_Const>;
! 	    using _Res = invoke_result_t<_Fp&, range_reference_t<_Base>>;
  	    if constexpr (is_lvalue_reference_v<_Res>)
  	      {
  		using _Cat
--- 1750,1761 ----
  	  static auto
  	  _S_iter_cat()
  	  {
+ 	    // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ 	    // 3564. transform_view::iterator<true>::value_type and
+ 	    // iterator_category should use const F&
  	    using _Base = transform_view::_Base<_Const>;
! 	    using _Res = invoke_result_t<__maybe_const_t<_Const, _Fp>&,
! 					 range_reference_t<_Base>>;
  	    if constexpr (is_lvalue_reference_v<_Res>)
  	      {
  		using _Cat
*************** namespace views::__adaptor
*** 1799,1805 ****
  	  using iterator_concept = decltype(_S_iter_concept());
  	  // iterator_category defined in __transform_view_iter_cat
  	  using value_type
! 	    = remove_cvref_t<invoke_result_t<_Fp&, range_reference_t<_Base>>>;
  	  using difference_type = range_difference_t<_Base>;
  
  	  _Iterator() requires default_initializable<_Base_iter> = default;
--- 1804,1811 ----
  	  using iterator_concept = decltype(_S_iter_concept());
  	  // iterator_category defined in __transform_view_iter_cat
  	  using value_type
! 	    = remove_cvref_t<invoke_result_t<__maybe_const_t<_Const, _Fp>&,
! 					     range_reference_t<_Base>>>;
  	  using difference_type = range_difference_t<_Base>;
  
  	  _Iterator() requires default_initializable<_Base_iter> = default;
*************** namespace views::__adaptor
*** 2524,2531 ****
        begin() const
  	requires random_access_range<const _Vp> && sized_range<const _Vp>
        {
! 	return ranges::next(ranges::begin(_M_base), _M_count,
! 			    ranges::end(_M_base));
        }
  
        constexpr auto
--- 2530,2537 ----
        begin() const
  	requires random_access_range<const _Vp> && sized_range<const _Vp>
        {
! 	return ranges::begin(_M_base) + ranges::min(ranges::distance(_M_base),
! 						    _M_count);
        }
  
        constexpr auto
*************** namespace views::__adaptor
*** 8544,8550 ****
  	operator() [[nodiscard]] (_Ts&&... __ts) const
  	{
  	  if constexpr (sizeof...(_Ts) == 0)
! 	    return views::empty<tuple<>>;
  	  else
  	    return cartesian_product_view<all_t<_Ts>...>(std::forward<_Ts>(__ts)...);
  	}
--- 8550,8556 ----
  	operator() [[nodiscard]] (_Ts&&... __ts) const
  	{
  	  if constexpr (sizeof...(_Ts) == 0)
! 	    return views::single(tuple{});
  	  else
  	    return cartesian_product_view<all_t<_Ts>...>(std::forward<_Ts>(__ts)...);
  	}
*************** namespace views::__adaptor
*** 8948,8954 ****
      inline constexpr _Enumerate enumerate;
    }
  
! #define __cpp_lib_ranges_as_const 202207L
  
    template<view _Vp>
      requires input_range<_Vp>
--- 8954,8960 ----
      inline constexpr _Enumerate enumerate;
    }
  
! #define __cpp_lib_ranges_as_const 202311L
  
    template<view _Vp>
      requires input_range<_Vp>
*************** namespace views::__adaptor
*** 9013,9022 ****
      namespace __detail
      {
        template<typename _Tp>
! 	inline constexpr bool __is_ref_view = false;
  
        template<typename _Range>
! 	inline constexpr bool __is_ref_view<ref_view<_Range>> = true;
  
        template<typename _Range>
  	concept __can_as_const_view = requires { as_const_view(std::declval<_Range>()); };
--- 9019,9029 ----
      namespace __detail
      {
        template<typename _Tp>
! 	inline constexpr bool __is_constable_ref_view = false;
  
        template<typename _Range>
! 	inline constexpr bool __is_constable_ref_view<ref_view<_Range>>
! 	  = constant_range<const _Range>;
  
        template<typename _Range>
  	concept __can_as_const_view = requires { as_const_view(std::declval<_Range>()); };
*************** namespace views::__adaptor
*** 9038,9047 ****
  	  return views::empty<const element_type>;
  	else if constexpr (std::__detail::__is_span<_Tp>)
  	  return span<const element_type, _Tp::extent>(std::forward<_Range>(__r));
! 	else if constexpr (__detail::__is_ref_view<_Tp>
! 			   && constant_range<const element_type>)
! 	  return ref_view(static_cast<const element_type&>
! 			  (std::forward<_Range>(__r).base()));
  	else if constexpr (is_lvalue_reference_v<_Range>
  			   && constant_range<const _Tp>
  			   && !view<_Tp>)
--- 9045,9052 ----
  	  return views::empty<const element_type>;
  	else if constexpr (std::__detail::__is_span<_Tp>)
  	  return span<const element_type, _Tp::extent>(std::forward<_Range>(__r));
! 	else if constexpr (__detail::__is_constable_ref_view<_Tp>)
! 	  return ref_view(std::as_const(std::forward<_Range>(__r).base()));
  	else if constexpr (is_lvalue_reference_v<_Range>
  			   && constant_range<const _Tp>
  			   && !view<_Tp>)
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/std/span gcc-13.4.0/libstdc++-v3/include/std/span
*** gcc-13.3.0/libstdc++-v3/include/std/span	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/std/span	Thu Jun  5 16:03:03 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 187,207 ****
  	requires (_Extent == dynamic_extent || _ArrayExtent == _Extent)
  	constexpr
  	span(type_identity_t<element_type> (&__arr)[_ArrayExtent]) noexcept
! 	: span(static_cast<pointer>(__arr), _ArrayExtent)
  	{ }
  
        template<typename _Tp, size_t _ArrayExtent>
  	requires __is_compatible_array<_Tp, _ArrayExtent>::value
  	constexpr
  	span(array<_Tp, _ArrayExtent>& __arr) noexcept
! 	: span(static_cast<pointer>(__arr.data()), _ArrayExtent)
  	{ }
  
        template<typename _Tp, size_t _ArrayExtent>
  	requires __is_compatible_array<const _Tp, _ArrayExtent>::value
  	constexpr
  	span(const array<_Tp, _ArrayExtent>& __arr) noexcept
! 	: span(static_cast<pointer>(__arr.data()), _ArrayExtent)
  	{ }
  
        template<typename _Range>
--- 187,207 ----
  	requires (_Extent == dynamic_extent || _ArrayExtent == _Extent)
  	constexpr
  	span(type_identity_t<element_type> (&__arr)[_ArrayExtent]) noexcept
! 	: _M_ptr(__arr), _M_extent(_ArrayExtent)
  	{ }
  
        template<typename _Tp, size_t _ArrayExtent>
  	requires __is_compatible_array<_Tp, _ArrayExtent>::value
  	constexpr
  	span(array<_Tp, _ArrayExtent>& __arr) noexcept
! 	: _M_ptr(__arr.data()), _M_extent(_ArrayExtent)
  	{ }
  
        template<typename _Tp, size_t _ArrayExtent>
  	requires __is_compatible_array<const _Tp, _ArrayExtent>::value
  	constexpr
  	span(const array<_Tp, _ArrayExtent>& __arr) noexcept
! 	: _M_ptr(__arr.data()), _M_extent(_ArrayExtent)
  	{ }
  
        template<typename _Range>
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 215,221 ****
  	span(_Range&& __range)
  	noexcept(noexcept(ranges::data(__range))
  		  && noexcept(ranges::size(__range)))
! 	: span(ranges::data(__range), ranges::size(__range))
  	{
  	  if constexpr (extent != dynamic_extent)
  	    {
--- 215,221 ----
  	span(_Range&& __range)
  	noexcept(noexcept(ranges::data(__range))
  		  && noexcept(ranges::size(__range)))
! 	: _M_ptr(ranges::data(__range)), _M_extent(ranges::size(__range))
  	{
  	  if constexpr (extent != dynamic_extent)
  	    {
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 233,239 ****
  	constexpr
  	explicit(extent != dynamic_extent && _OExtent == dynamic_extent)
  	span(const span<_OType, _OExtent>& __s) noexcept
! 	: _M_extent(__s.size()), _M_ptr(__s.data())
  	{
  	  if constexpr (extent != dynamic_extent)
  	    {
--- 233,239 ----
  	constexpr
  	explicit(extent != dynamic_extent && _OExtent == dynamic_extent)
  	span(const span<_OType, _OExtent>& __s) noexcept
! 	: _M_ptr(__s.data()), _M_extent(__s.size())
  	{
  	  if constexpr (extent != dynamic_extent)
  	    {
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/std/stacktrace gcc-13.4.0/libstdc++-v3/include/std/stacktrace
*** gcc-13.3.0/libstdc++-v3/include/std/stacktrace	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/std/stacktrace	Thu Jun  5 16:03:03 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 354,360 ****
  		       const allocator_type& __alloc) noexcept
        : _M_alloc(__alloc)
        {
! 	if constexpr (_Allocator::is_always_equal::value)
  	  _M_impl = std::__exchange(__other._M_impl, {});
  	else if (_M_alloc == __other._M_alloc)
  	  _M_impl = std::__exchange(__other._M_impl, {});
--- 354,360 ----
  		       const allocator_type& __alloc) noexcept
        : _M_alloc(__alloc)
        {
! 	if constexpr (_AllocTraits::is_always_equal::value)
  	  _M_impl = std::__exchange(__other._M_impl, {});
  	else if (_M_alloc == __other._M_alloc)
  	  _M_impl = std::__exchange(__other._M_impl, {});
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 602,607 ****
--- 602,614 ----
  # define _GLIBCXX_OPERATOR_DELETE ::operator delete
  #endif
  
+ #if __cpp_sized_deallocation
+ # define _GLIBCXX_SIZED_DELETE(T, p, n) \
+   _GLIBCXX_OPERATOR_DELETE((p), (n) * sizeof(T))
+ #else
+ # define _GLIBCXX_SIZED_DELETE(T, p, n) _GLIBCXX_OPERATOR_DELETE(p)
+ #endif
+ 
  	// Precondition: _M_frames == nullptr && __n != 0
  	pointer
  	_M_allocate(allocator_type& __alloc, size_type __n) noexcept
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 611,617 ****
  	      if constexpr (is_same_v<allocator_type, allocator<value_type>>)
  		{
  		  // For std::allocator we use nothrow-new directly so we
! 		  // don't need to handle bad_alloc exceptions.
  		  size_t __nb = __n * sizeof(value_type);
  		  void* const __p = _GLIBCXX_OPERATOR_NEW (__nb, nothrow_t{});
  		  if (__p == nullptr) [[unlikely]]
--- 618,624 ----
  	      if constexpr (is_same_v<allocator_type, allocator<value_type>>)
  		{
  		  // For std::allocator we use nothrow-new directly so we
! 		  // don't need to handle exceptions from __alloc.allocate(n).
  		  size_t __nb = __n * sizeof(value_type);
  		  void* const __p = _GLIBCXX_OPERATOR_NEW (__nb, nothrow_t{});
  		  if (__p == nullptr) [[unlikely]]
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 624,630 ****
  		    {
  		      _M_frames = __alloc.allocate(__n);
  		    }
! 		  __catch (const std::bad_alloc&)
  		    {
  		      return nullptr;
  		    }
--- 631,637 ----
  		    {
  		      _M_frames = __alloc.allocate(__n);
  		    }
! 		  __catch (...)
  		    {
  		      return nullptr;
  		    }
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 641,648 ****
  	  if (_M_capacity)
  	    {
  	      if constexpr (is_same_v<allocator_type, allocator<value_type>>)
! 		_GLIBCXX_OPERATOR_DELETE (static_cast<void*>(_M_frames),
! 					  _M_capacity * sizeof(value_type));
  	      else
  		__alloc.deallocate(_M_frames, _M_capacity);
  	      _M_frames = nullptr;
--- 648,656 ----
  	  if (_M_capacity)
  	    {
  	      if constexpr (is_same_v<allocator_type, allocator<value_type>>)
! 		_GLIBCXX_SIZED_DELETE(value_type,
! 				      static_cast<void*>(_M_frames),
! 				      _M_capacity);
  	      else
  		__alloc.deallocate(_M_frames, _M_capacity);
  	      _M_frames = nullptr;
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 650,655 ****
--- 658,664 ----
  	    }
  	}
  
+ #undef _GLIBCXX_SIZED_DELETE
  #undef _GLIBCXX_OPERATOR_DELETE
  #undef _GLIBCXX_OPERATOR_NEW
  
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/std/type_traits gcc-13.4.0/libstdc++-v3/include/std/type_traits
*** gcc-13.3.0/libstdc++-v3/include/std/type_traits	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/std/type_traits	Thu Jun  5 16:03:03 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 2582,2587 ****
--- 2582,2591 ----
  	_Functor, _ArgTypes...
        >::type
      { };
+ 
+   // __invoke_result_t (std::invoke_result_t for C++11)
+   template<typename _Fn, typename... _Args>
+     using __invoke_result_t = typename __invoke_result<_Fn, _Args...>::type;
    /// @endcond
  
    template<typename _Functor, typename... _ArgTypes>
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/std/variant gcc-13.4.0/libstdc++-v3/include/std/variant
*** gcc-13.3.0/libstdc++-v3/include/std/variant	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/std/variant	Thu Jun  5 16:03:03 2025
*************** namespace __variant
*** 490,496 ****
        constexpr void
        _M_reset()
        {
! 	if (!_M_valid()) [[unlikely]]
  	  return;
  
  	std::__do_visit<void>([](auto&& __this_mem) mutable
--- 490,496 ----
        constexpr void
        _M_reset()
        {
! 	if (!_M_valid()) [[__unlikely__]]
  	  return;
  
  	std::__do_visit<void>([](auto&& __this_mem) mutable
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/std/version gcc-13.4.0/libstdc++-v3/include/std/version
*** gcc-13.3.0/libstdc++-v3/include/std/version	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/std/version	Thu Jun  5 16:03:03 2025
***************
*** 341,347 ****
  #define __cpp_lib_ranges_stride 202207L
  #define __cpp_lib_ranges_cartesian_product 202207L
  #define __cpp_lib_ranges_as_rvalue 202207L
! #define __cpp_lib_ranges_as_const 202207L
  #define __cpp_lib_ranges_enumerate 202302L
  #define __cpp_lib_ranges_contains 202207L
  #define __cpp_lib_ranges_iota 202202L
--- 341,347 ----
  #define __cpp_lib_ranges_stride 202207L
  #define __cpp_lib_ranges_cartesian_product 202207L
  #define __cpp_lib_ranges_as_rvalue 202207L
! #define __cpp_lib_ranges_as_const 202311L
  #define __cpp_lib_ranges_enumerate 202302L
  #define __cpp_lib_ranges_contains 202207L
  #define __cpp_lib_ranges_iota 202202L
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/tr2/dynamic_bitset gcc-13.4.0/libstdc++-v3/include/tr2/dynamic_bitset
*** gcc-13.3.0/libstdc++-v3/include/tr2/dynamic_bitset	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/tr2/dynamic_bitset	Thu Jun  5 16:03:03 2025
*************** namespace tr2
*** 815,824 ****
        operator>>=(size_type __pos)
        {
  	if (__builtin_expect(__pos < this->_M_Nb, 1))
! 	  {
! 	    this->_M_do_right_shift(__pos);
! 	    this->_M_do_sanitize();
! 	  }
  	else
  	  this->_M_do_reset();
  	return *this;
--- 815,821 ----
        operator>>=(size_type __pos)
        {
  	if (__builtin_expect(__pos < this->_M_Nb, 1))
! 	  this->_M_do_right_shift(__pos);
  	else
  	  this->_M_do_reset();
  	return *this;
diff -Nrcpad gcc-13.3.0/libstdc++-v3/include/tr2/dynamic_bitset.tcc gcc-13.4.0/libstdc++-v3/include/tr2/dynamic_bitset.tcc
*** gcc-13.3.0/libstdc++-v3/include/tr2/dynamic_bitset.tcc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/include/tr2/dynamic_bitset.tcc	Thu Jun  5 16:03:03 2025
*************** namespace tr2
*** 60,67 ****
  	      this->_M_w[__wshift] = this->_M_w[0] << __offset;
  	    }
  
! 	  //// std::fill(this->_M_w.begin(), this->_M_w.begin() + __wshift,
! 	  ////          static_cast<_WordT>(0));
  	}
      }
  
--- 60,66 ----
  	      this->_M_w[__wshift] = this->_M_w[0] << __offset;
  	    }
  
! 	  std::fill_n(this->_M_w.begin(), __wshift, _WordT(0));
  	}
      }
  
*************** namespace tr2
*** 88,95 ****
  	      this->_M_w[__limit] = this->_M_w[_M_w.size()-1] >> __offset;
  	    }
  
! 	  ////std::fill(this->_M_w.begin() + __limit + 1, this->_M_w.end(),
! 	  ////          static_cast<_WordT>(0));
  	}
      }
  
--- 87,93 ----
  	      this->_M_w[__limit] = this->_M_w[_M_w.size()-1] >> __offset;
  	    }
  
! 	  std::fill_n(this->_M_w.end() - __wshift, __wshift, _WordT(0));
  	}
      }
  
diff -Nrcpad gcc-13.3.0/libstdc++-v3/libsupc++/guard.cc gcc-13.4.0/libstdc++-v3/libsupc++/guard.cc
*** gcc-13.3.0/libstdc++-v3/libsupc++/guard.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/libsupc++/guard.cc	Thu Jun  5 16:03:03 2025
***************
*** 36,57 ****
  namespace __cxxabiv1 {
  
  extern "C" int
! __cxa_guard_acquire (__guard* g) _GLIBCXX_NOTHROW
!   {
!     return __MCF_cxa_guard_acquire(g);
!   }
  
  extern "C" void
  __cxa_guard_release (__guard* g) _GLIBCXX_NOTHROW
!   {
!     __MCF_cxa_guard_release(g);
!   }
  
  extern "C" void
  __cxa_guard_abort (__guard* g) _GLIBCXX_NOTHROW
!   {
!     __MCF_cxa_guard_abort(g);
!   }
  
  }  // namespace __cxxabiv1
  
--- 36,57 ----
  namespace __cxxabiv1 {
  
  extern "C" int
! __cxa_guard_acquire (__guard* g)
! {
!   return __MCF_cxa_guard_acquire(g);
! }
  
  extern "C" void
  __cxa_guard_release (__guard* g) _GLIBCXX_NOTHROW
! {
!   __MCF_cxa_guard_release(g);
! }
  
  extern "C" void
  __cxa_guard_abort (__guard* g) _GLIBCXX_NOTHROW
! {
!   __MCF_cxa_guard_abort(g);
! }
  
  }  // namespace __cxxabiv1
  
diff -Nrcpad gcc-13.3.0/libstdc++-v3/libsupc++/new_opa.cc gcc-13.4.0/libstdc++-v3/libsupc++/new_opa.cc
*** gcc-13.3.0/libstdc++-v3/libsupc++/new_opa.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/libsupc++/new_opa.cc	Thu Jun  5 16:03:03 2025
*************** using std::size_t;
*** 47,53 ****
  extern "C"
  {
  # if _GLIBCXX_HAVE_POSIX_MEMALIGN
!   void *posix_memalign(void **, size_t alignment, size_t size);
  # elif _GLIBCXX_HAVE_ALIGNED_ALLOC
    void *aligned_alloc(size_t alignment, size_t size);
  # elif _GLIBCXX_HAVE__ALIGNED_MALLOC
--- 47,53 ----
  extern "C"
  {
  # if _GLIBCXX_HAVE_POSIX_MEMALIGN
!   int posix_memalign(void **, size_t alignment, size_t size);
  # elif _GLIBCXX_HAVE_ALIGNED_ALLOC
    void *aligned_alloc(size_t alignment, size_t size);
  # elif _GLIBCXX_HAVE__ALIGNED_MALLOC
diff -Nrcpad gcc-13.3.0/libstdc++-v3/python/libstdcxx/v6/printers.py gcc-13.4.0/libstdc++-v3/python/libstdcxx/v6/printers.py
*** gcc-13.3.0/libstdc++-v3/python/libstdcxx/v6/printers.py	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/python/libstdcxx/v6/printers.py	Thu Jun  5 16:03:03 2025
*************** def strip_versioned_namespace(typename):
*** 220,225 ****
--- 220,235 ----
      return typename.replace(_versioned_namespace, '')
  
  
+ def strip_fundts_namespace(typ):
+     """Remove "fundamentals_vN" inline namespace from qualified type name."""
+     pattern = r'^std::experimental::fundamentals_v\d::'
+     repl = 'std::experimental::'
+     if sys.version_info[0] == 2:
+         return re.sub(pattern, repl, typ, 1)
+     else: # Technically this needs Python 3.1 but nobody should be using 3.0
+         return re.sub(pattern, repl, typ, count=1)
+ 
+ 
  def strip_inline_namespaces(type_str):
      """Remove known inline namespaces from the canonical name of a type."""
      type_str = strip_versioned_namespace(type_str)
*************** class StdExpAnyPrinter(SingleObjContaine
*** 1352,1359 ****
  
      def __init__(self, typename, val):
          self._typename = strip_versioned_namespace(typename)
!         self._typename = re.sub(r'^std::experimental::fundamentals_v\d::',
!                                 'std::experimental::', self._typename, 1)
          self._val = val
          self._contained_type = None
          contained_value = None
--- 1362,1368 ----
  
      def __init__(self, typename, val):
          self._typename = strip_versioned_namespace(typename)
!         self._typename = strip_fundts_namespace(self._typename)
          self._val = val
          self._contained_type = None
          contained_value = None
*************** class StdExpOptionalPrinter(SingleObjCon
*** 1446,1455 ****
      """Print a std::optional or std::experimental::optional."""
  
      def __init__(self, typename, val):
!         typename = strip_versioned_namespace(typename)
!         self._typename = re.sub(
!             r'^std::(experimental::|)(fundamentals_v\d::|)(.*)',
!             r'std::\1\3', typename, 1)
          payload = val['_M_payload']
          if self._typename.startswith('std::experimental'):
              engaged = val['_M_engaged']
--- 1455,1462 ----
      """Print a std::optional or std::experimental::optional."""
  
      def __init__(self, typename, val):
!         self._typename = strip_versioned_namespace(typename)
!         self._typename = strip_fundts_namespace(self._typename)
          payload = val['_M_payload']
          if self._typename.startswith('std::experimental'):
              engaged = val['_M_engaged']
diff -Nrcpad gcc-13.3.0/libstdc++-v3/src/c++11/assert_fail.cc gcc-13.4.0/libstdc++-v3/src/c++11/assert_fail.cc
*** gcc-13.3.0/libstdc++-v3/src/c++11/assert_fail.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/src/c++11/assert_fail.cc	Thu Jun  5 16:03:03 2025
***************
*** 22,31 ****
  // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
  // <http://www.gnu.org/licenses/>.
  
- #include <cstdio>	// for std::fprintf, stderr
  #include <cstdlib>	// for std::abort
  
  #ifdef _GLIBCXX_VERBOSE_ASSERT
  namespace std
  {
    [[__noreturn__]]
--- 22,31 ----
  // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
  // <http://www.gnu.org/licenses/>.
  
  #include <cstdlib>	// for std::abort
  
  #ifdef _GLIBCXX_VERBOSE_ASSERT
+ #include <cstdio>	// for std::fprintf, stderr
  namespace std
  {
    [[__noreturn__]]
*************** namespace std
*** 41,44 ****
--- 41,52 ----
      abort();
    }
  }
+ #else
+ namespace std
+ {
+   [[__noreturn__]]
+   void
+   __glibcxx_assert_fail(const char*, int, const char*, const char*) noexcept
+   { abort(); }
+ }
  #endif
diff -Nrcpad gcc-13.3.0/libstdc++-v3/src/c++11/codecvt.cc gcc-13.4.0/libstdc++-v3/src/c++11/codecvt.cc
*** gcc-13.3.0/libstdc++-v3/src/c++11/codecvt.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/src/c++11/codecvt.cc	Thu Jun  5 16:03:03 2025
*************** namespace
*** 284,289 ****
--- 284,291 ----
  	return invalid_mb_sequence;
        if (c1 == 0xE0 && c2 < 0xA0) [[unlikely]] // overlong
  	return invalid_mb_sequence;
+       if (c1 == 0xED && c2 >= 0xA0) [[unlikely]] // surrogate
+ 	return invalid_mb_sequence;
        if (avail < 3) [[unlikely]]
  	return incomplete_mb_character;
        char32_t c3 = (unsigned char) from[2];
*************** namespace
*** 484,489 ****
--- 486,493 ----
      while (from.size())
        {
  	const char32_t c = from[0];
+ 	if (0xD800 <= c && c <= 0xDFFF) [[unlikely]]
+ 	  return codecvt_base::error;
  	if (c > maxcode) [[unlikely]]
  	  return codecvt_base::error;
  	if (!write_utf8_code_point(to, c)) [[unlikely]]
*************** namespace
*** 508,514 ****
  	  return codecvt_base::error;
  	to = codepoint;
        }
!     return from.size() ? codecvt_base::partial : codecvt_base::ok;
    }
  
    // ucs4 -> utf16
--- 512,518 ----
  	  return codecvt_base::error;
  	to = codepoint;
        }
!     return from.nbytes() ? codecvt_base::partial : codecvt_base::ok;
    }
  
    // ucs4 -> utf16
*************** namespace
*** 521,526 ****
--- 525,532 ----
      while (from.size())
        {
  	const char32_t c = from[0];
+ 	if (0xD800 <= c && c <= 0xDFFF) [[unlikely]]
+ 	  return codecvt_base::error;
  	if (c > maxcode) [[unlikely]]
  	  return codecvt_base::error;
  	if (!write_utf16_code_point(to, c, mode)) [[unlikely]]
*************** namespace
*** 653,659 ****
      while (from.size() && to.size())
        {
  	char16_t c = from[0];
! 	if (is_high_surrogate(c))
  	  return codecvt_base::error;
  	if (c > maxcode)
  	  return codecvt_base::error;
--- 659,665 ----
      while (from.size() && to.size())
        {
  	char16_t c = from[0];
! 	if (0xD800 <= c && c <= 0xDFFF)
  	  return codecvt_base::error;
  	if (c > maxcode)
  	  return codecvt_base::error;
*************** namespace
*** 680,686 ****
  	  return codecvt_base::error;
  	to = c;
        }
!     return from.size() == 0 ? codecvt_base::ok : codecvt_base::partial;
    }
  
    const char16_t*
--- 686,692 ----
  	  return codecvt_base::error;
  	to = c;
        }
!     return from.nbytes() == 0 ? codecvt_base::ok : codecvt_base::partial;
    }
  
    const char16_t*
*************** do_in(state_type&, const extern_type* __
*** 1344,1351 ****
    auto res = ucs2_in(from, to, _M_maxcode, _M_mode);
    __from_next = reinterpret_cast<const char*>(from.next);
    __to_next = to.next;
-   if (res == codecvt_base::ok && __from_next != __from_end)
-     res = codecvt_base::error;
    return res;
  }
  
--- 1350,1355 ----
*************** do_in(state_type&, const extern_type* __
*** 1419,1426 ****
    auto res = ucs4_in(from, to, _M_maxcode, _M_mode);
    __from_next = reinterpret_cast<const char*>(from.next);
    __to_next = to.next;
-   if (res == codecvt_base::ok && __from_next != __from_end)
-     res = codecvt_base::error;
    return res;
  }
  
--- 1423,1428 ----
*************** do_in(state_type&, const extern_type* __
*** 1521,1528 ****
  #endif
    __from_next = reinterpret_cast<const char*>(from.next);
    __to_next = reinterpret_cast<wchar_t*>(to.next);
-   if (res == codecvt_base::ok && __from_next != __from_end)
-     res = codecvt_base::error;
    return res;
  }
  
--- 1523,1528 ----
diff -Nrcpad gcc-13.3.0/libstdc++-v3/src/c++11/futex.cc gcc-13.4.0/libstdc++-v3/src/c++11/futex.cc
*** gcc-13.3.0/libstdc++-v3/src/c++11/futex.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/src/c++11/futex.cc	Thu Jun  5 16:03:03 2025
*************** namespace
*** 128,134 ****
  	if (!futex_clock_realtime_unavailable.load(std::memory_order_relaxed))
  	  {
  	    // futex sets errno=EINVAL for absolute timeouts before the epoch.
! 	    if (__s.count() < 0)
  	      return false;
  
  	    syscall_timespec rt;
--- 128,134 ----
  	if (!futex_clock_realtime_unavailable.load(std::memory_order_relaxed))
  	  {
  	    // futex sets errno=EINVAL for absolute timeouts before the epoch.
! 	    if (__s.count() < 0 || __ns.count() < 0) [[unlikely]]
  	      return false;
  
  	    syscall_timespec rt;
*************** namespace
*** 204,210 ****
  	if (!futex_clock_monotonic_unavailable.load(std::memory_order_relaxed))
  	  {
  	    // futex sets errno=EINVAL for absolute timeouts before the epoch.
! 	    if (__s.count() < 0) [[unlikely]]
  	      return false;
  
  	    syscall_timespec rt;
--- 204,210 ----
  	if (!futex_clock_monotonic_unavailable.load(std::memory_order_relaxed))
  	  {
  	    // futex sets errno=EINVAL for absolute timeouts before the epoch.
! 	    if (__s.count() < 0 || __ns.count() < 0) [[unlikely]]
  	      return false;
  
  	    syscall_timespec rt;
diff -Nrcpad gcc-13.3.0/libstdc++-v3/src/c++17/fs_dir.cc gcc-13.4.0/libstdc++-v3/src/c++17/fs_dir.cc
*** gcc-13.3.0/libstdc++-v3/src/c++17/fs_dir.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/src/c++17/fs_dir.cc	Thu Jun  5 16:03:03 2025
*************** fs::recursive_directory_iterator::__eras
*** 479,485 ****
  
  #if _GLIBCXX_FILESYSTEM_IS_WINDOWS
        // _Dir::unlink uses fs::remove which uses std::system_category() for
!       // Windows errror codes, so we can't just check for EPERM and EISDIR.
        // Use directory_entry::refresh() here to check if we have a directory.
        // This can be a TOCTTOU race, but we don't have openat or unlinkat to
        // solve that on Windows, and generally don't support symlinks anyway.
--- 479,485 ----
  
  #if _GLIBCXX_FILESYSTEM_IS_WINDOWS
        // _Dir::unlink uses fs::remove which uses std::system_category() for
!       // Windows error codes, so we can't just check for EPERM and EISDIR.
        // Use directory_entry::refresh() here to check if we have a directory.
        // This can be a TOCTTOU race, but we don't have openat or unlinkat to
        // solve that on Windows, and generally don't support symlinks anyway.
diff -Nrcpad gcc-13.3.0/libstdc++-v3/src/c++17/fs_ops.cc gcc-13.4.0/libstdc++-v3/src/c++17/fs_ops.cc
*** gcc-13.3.0/libstdc++-v3/src/c++17/fs_ops.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/src/c++17/fs_ops.cc	Thu Jun  5 16:03:03 2025
*************** fs::copy(const path& from, const path& t
*** 351,357 ****
    f = make_file_status(from_st);
  
    if (exists(t) && !is_other(t) && !is_other(f)
!       && to_st.st_dev == from_st.st_dev && to_st.st_ino == from_st.st_ino)
      {
        ec = std::make_error_code(std::errc::file_exists);
        return;
--- 351,357 ----
    f = make_file_status(from_st);
  
    if (exists(t) && !is_other(t) && !is_other(f)
!       && fs::equiv_files(from.c_str(), from_st, to.c_str(), to_st, ec))
      {
        ec = std::make_error_code(std::errc::file_exists);
        return;
*************** fs::equivalent(const path& p1, const pat
*** 823,828 ****
--- 823,899 ----
    return result;
  }
  
+ #if _GLIBCXX_FILESYSTEM_IS_WINDOWS
+ namespace
+ {
+   // An RAII type that opens a handle for an existing file.
+   struct auto_win_file_handle
+   {
+     explicit
+     auto_win_file_handle(const wchar_t* p, std::error_code& ec) noexcept
+     : handle(CreateFileW(p, 0,
+ 			 FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
+ 			 0, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0)),
+       ec(ec)
+     {
+       if (handle == INVALID_HANDLE_VALUE)
+ 	ec = std::__last_system_error();
+     }
+ 
+     ~auto_win_file_handle()
+     { if (*this) CloseHandle(handle); }
+ 
+     explicit operator bool() const noexcept
+     { return handle != INVALID_HANDLE_VALUE; }
+ 
+     bool get_info() noexcept
+     {
+       if (GetFileInformationByHandle(handle, &info))
+ 	return true;
+       ec = std::__last_system_error();
+       return false;
+     }
+ 
+     HANDLE handle;
+     BY_HANDLE_FILE_INFORMATION info;
+     // Like errno, we only set this on error and never clear it.
+     // This propagates an error_code to the caller when something goes wrong,
+     // but the caller should not assume a non-zero ec means an error happened
+     // unless they explicitly cleared it before passing it to our constructor.
+     std::error_code& ec;
+   };
+ }
+ #endif
+ 
+ #ifdef _GLIBCXX_HAVE_SYS_STAT_H
+ #ifdef NEED_DO_COPY_FILE // Only define this once, not in cow-fs_ops.o too
+ bool
+ fs::equiv_files([[maybe_unused]] const char_type* p1, const stat_type& st1,
+ 		[[maybe_unused]] const char_type* p2, const stat_type& st2,
+ 		[[maybe_unused]] error_code& ec)
+ {
+ #if ! _GLIBCXX_FILESYSTEM_IS_WINDOWS
+   // For POSIX the device ID and inode number uniquely identify a file.
+   return st1.st_dev == st2.st_dev && st1.st_ino == st2.st_ino;
+ #else
+   // For Windows st_ino is not set, so can't be used to distinguish files.
+   // We can compare modes and device IDs as a cheap initial check:
+   if (st1.st_mode != st2.st_mode || st1.st_dev != st2.st_dev)
+     return false;
+ 
+   // Use GetFileInformationByHandle to get more info about the files.
+   if (auto_win_file_handle h1{p1, ec})
+     if (auto_win_file_handle h2{p2, ec})
+       if (h1.get_info() && h2.get_info())
+ 	return h1.info.dwVolumeSerialNumber == h2.info.dwVolumeSerialNumber
+ 		 && h1.info.nFileIndexHigh == h2.info.nFileIndexHigh
+ 		 && h1.info.nFileIndexLow == h2.info.nFileIndexLow;
+   return false;
+ #endif // _GLIBCXX_FILESYSTEM_IS_WINDOWS
+ }
+ #endif // NEED_DO_COPY_FILE
+ #endif // _GLIBCXX_HAVE_SYS_STAT_H
+ 
  bool
  fs::equivalent(const path& p1, const path& p2, error_code& ec) noexcept
  {
*************** fs::equivalent(const path& p1, const pat
*** 844,909 ****
    else
      err = errno;
  
!   if (exists(s1) && exists(s2))
!     {
!       if (is_other(s1) && is_other(s2))
! 	{
! 	  ec = std::__unsupported();
! 	  return false;
! 	}
!       ec.clear();
!       if (is_other(s1) || is_other(s2))
! 	return false;
! #if _GLIBCXX_FILESYSTEM_IS_WINDOWS
!       // st_ino is not set, so can't be used to distinguish files
!       if (st1.st_mode != st2.st_mode || st1.st_dev != st2.st_dev)
! 	return false;
! 
!       struct auto_handle {
! 	explicit auto_handle(const path& p_)
! 	: handle(CreateFileW(p_.c_str(), 0,
! 	      FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
! 	      0, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0))
! 	{ }
! 
! 	~auto_handle()
! 	{ if (*this) CloseHandle(handle); }
! 
! 	explicit operator bool() const
! 	{ return handle != INVALID_HANDLE_VALUE; }
! 
! 	bool get_info()
! 	{ return GetFileInformationByHandle(handle, &info); }
! 
! 	HANDLE handle;
! 	BY_HANDLE_FILE_INFORMATION info;
!       };
!       auto_handle h1(p1);
!       auto_handle h2(p2);
!       if (!h1 || !h2)
! 	{
! 	  if (!h1 && !h2)
! 	    ec = __last_system_error();
! 	  return false;
! 	}
!       if (!h1.get_info() || !h2.get_info())
! 	{
! 	  ec = __last_system_error();
! 	  return false;
! 	}
!       return h1.info.dwVolumeSerialNumber == h2.info.dwVolumeSerialNumber
! 	&& h1.info.nFileIndexHigh == h2.info.nFileIndexHigh
! 	&& h1.info.nFileIndexLow == h2.info.nFileIndexLow;
! #else
!       return st1.st_dev == st2.st_dev && st1.st_ino == st2.st_ino;
! #endif
!     }
    else if (!exists(s1) || !exists(s2))
      ec = std::make_error_code(std::errc::no_such_file_or_directory);
-   else if (err)
-     ec.assign(err, std::generic_category());
    else
!     ec.clear();
    return false;
  #else
    ec = std::make_error_code(std::errc::function_not_supported);
--- 915,930 ----
    else
      err = errno;
  
!   if (err)
!     ec.assign(err, std::generic_category());
    else if (!exists(s1) || !exists(s2))
      ec = std::make_error_code(std::errc::no_such_file_or_directory);
    else
!     {
!       ec.clear();
!       if (s1.type() == s2.type())
! 	return fs::equiv_files(p1.c_str(), st1, p2.c_str(), st2, ec);
!     }
    return false;
  #else
    ec = std::make_error_code(std::errc::function_not_supported);
*************** fs::hard_link_count(const path& p)
*** 983,989 ****
  std::uintmax_t
  fs::hard_link_count(const path& p, error_code& ec) noexcept
  {
! #ifdef _GLIBCXX_HAVE_SYS_STAT_H
    return do_stat(p, ec, std::mem_fn(&stat_type::st_nlink),
  		 static_cast<uintmax_t>(-1));
  #else
--- 1004,1018 ----
  std::uintmax_t
  fs::hard_link_count(const path& p, error_code& ec) noexcept
  {
! #if _GLIBCXX_FILESYSTEM_IS_WINDOWS
!   auto_win_file_handle h(p.c_str(), ec);
!   if (h && h.get_info())
!     {
!       ec.clear();
!       return static_cast<uintmax_t>(h.info.nNumberOfLinks);
!     }
!   return static_cast<uintmax_t>(-1);
! #elif defined _GLIBCXX_HAVE_SYS_STAT_H
    return do_stat(p, ec, std::mem_fn(&stat_type::st_nlink),
  		 static_cast<uintmax_t>(-1));
  #else
*************** fs::remove_all(const path& p)
*** 1311,1317 ****
      // Our work here is done.
      return 0;
    case ENOTDIR:
!   case ELOOP:
      // Not a directory, will remove below.
      break;
  #endif
--- 1340,1352 ----
      // Our work here is done.
      return 0;
    case ENOTDIR:
!   case ELOOP:  // POSIX says openat with O_NOFOLLOW sets ELOOP for a symlink.
! #if defined __FreeBSD__ || defined __DragonFly__
!   case EMLINK: // Used instead of ELOOP
! #endif
! #if defined __NetBSD__ && defined EFTYPE
!   case EFTYPE: // Used instead of ELOOP
! #endif
      // Not a directory, will remove below.
      break;
  #endif
*************** fs::remove_all(const path& p, error_code
*** 1351,1357 ****
      ec.clear();
      return 0;
    case ENOTDIR:
!   case ELOOP:
      // Not a directory, will remove below.
      break;
  #endif
--- 1386,1398 ----
      ec.clear();
      return 0;
    case ENOTDIR:
!   case ELOOP:  // POSIX says openat with O_NOFOLLOW sets ELOOP for a symlink.
! #if defined __FreeBSD__ || defined __DragonFly__
!   case EMLINK: // Used instead of ELOOP
! #endif
! #if defined __NetBSD__ && defined EFTYPE
!   case EFTYPE: // Used instead of ELOOP
! #endif
      // Not a directory, will remove below.
      break;
  #endif
diff -Nrcpad gcc-13.3.0/libstdc++-v3/src/c++20/tzdata.zi gcc-13.4.0/libstdc++-v3/src/c++20/tzdata.zi
*** gcc-13.3.0/libstdc++-v3/src/c++20/tzdata.zi	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/src/c++20/tzdata.zi	Thu Jun  5 16:03:03 2025
***************
*** 1,4 ****
! # version 2024a
  # This zic input file is in the public domain.
  R d 1916 o - Jun 14 23s 1 S
  R d 1916 1919 - O Su>=1 23s 0 -
--- 1,4 ----
! # version 2025b
  # This zic input file is in the public domain.
  R d 1916 o - Jun 14 23s 1 S
  R d 1916 1919 - O Su>=1 23s 0 -
*************** R P 2085 o - Ap 21 2 0 -
*** 721,732 ****
  R P 2085 o - Jun 9 2 1 S
  R P 2086 o - Ap 13 2 0 -
  R P 2086 o - May 25 2 1 S
! R PH 1936 o - N 1 0 1 D
! R PH 1937 o - F 1 0 0 S
! R PH 1954 o - Ap 12 0 1 D
! R PH 1954 o - Jul 1 0 0 S
! R PH 1978 o - Mar 22 0 1 D
! R PH 1978 o - S 21 0 0 S
  R S 1920 1923 - Ap Su>=15 2 1 S
  R S 1920 1923 - O Su>=1 2 0 -
  R S 1962 o - Ap 29 2 1 S
--- 721,736 ----
  R P 2085 o - Jun 9 2 1 S
  R P 2086 o - Ap 13 2 0 -
  R P 2086 o - May 25 2 1 S
! R PH 1936 o - O 31 24 1 D
! R PH 1937 o - Ja 15 24 0 S
! R PH 1941 o - D 15 24 1 D
! R PH 1945 o - N 30 24 0 S
! R PH 1954 o - Ap 11 24 1 D
! R PH 1954 o - Jun 4 24 0 S
! R PH 1977 o - Mar 27 24 1 D
! R PH 1977 o - S 21 24 0 S
! R PH 1990 o - May 21 0 1 D
! R PH 1990 o - Jul 28 24 0 S
  R S 1920 1923 - Ap Su>=15 2 1 S
  R S 1920 1923 - O Su>=1 2 0 -
  R S 1962 o - Ap 29 2 1 S
*************** R O 1961 1964 - May lastSu 1s 1 S
*** 1324,1337 ****
  R O 1962 1964 - S lastSu 1s 0 -
  R p 1916 o - Jun 17 23 1 S
  R p 1916 o - N 1 1 0 -
! R p 1917 o - F 28 23s 1 S
! R p 1917 1921 - O 14 23s 0 -
! R p 1918 o - Mar 1 23s 1 S
! R p 1919 o - F 28 23s 1 S
! R p 1920 o - F 29 23s 1 S
! R p 1921 o - F 28 23s 1 S
  R p 1924 o - Ap 16 23s 1 S
! R p 1924 o - O 14 23s 0 -
  R p 1926 o - Ap 17 23s 1 S
  R p 1926 1929 - O Sa>=1 23s 0 -
  R p 1927 o - Ap 9 23s 1 S
--- 1328,1337 ----
  R O 1962 1964 - S lastSu 1s 0 -
  R p 1916 o - Jun 17 23 1 S
  R p 1916 o - N 1 1 0 -
! R p 1917 1921 - Mar 1 0 1 S
! R p 1917 1921 - O 14 24 0 -
  R p 1924 o - Ap 16 23s 1 S
! R p 1924 o - O 4 23s 0 -
  R p 1926 o - Ap 17 23s 1 S
  R p 1926 1929 - O Sa>=1 23s 0 -
  R p 1927 o - Ap 9 23s 1 S
*************** R p 1938 o - Mar 26 23s 1 S
*** 1349,1356 ****
  R p 1939 o - Ap 15 23s 1 S
  R p 1939 o - N 18 23s 0 -
  R p 1940 o - F 24 23s 1 S
! R p 1940 1941 - O 5 23s 0 -
  R p 1941 o - Ap 5 23s 1 S
  R p 1942 1945 - Mar Sa>=8 23s 1 S
  R p 1942 o - Ap 25 22s 2 M
  R p 1942 o - Au 15 22s 1 S
--- 1349,1357 ----
  R p 1939 o - Ap 15 23s 1 S
  R p 1939 o - N 18 23s 0 -
  R p 1940 o - F 24 23s 1 S
! R p 1940 o - O 7 23s 0 -
  R p 1941 o - Ap 5 23s 1 S
+ R p 1941 o - O 5 23s 0 -
  R p 1942 1945 - Mar Sa>=8 23s 1 S
  R p 1942 o - Ap 25 22s 2 M
  R p 1942 o - Au 15 22s 1 S
*************** R p 1943 1945 - Au Sa>=25 22s 1 S
*** 1360,1375 ****
  R p 1944 1945 - Ap Sa>=21 22s 2 M
  R p 1946 o - Ap Sa>=1 23s 1 S
  R p 1946 o - O Sa>=1 23s 0 -
! R p 1947 1965 - Ap Su>=1 2s 1 S
  R p 1947 1965 - O Su>=1 2s 0 -
! R p 1977 o - Mar 27 0s 1 S
! R p 1977 o - S 25 0s 0 -
! R p 1978 1979 - Ap Su>=1 0s 1 S
! R p 1978 o - O 1 0s 0 -
! R p 1979 1982 - S lastSu 1s 0 -
! R p 1980 o - Mar lastSu 0s 1 S
! R p 1981 1982 - Mar lastSu 1s 1 S
! R p 1983 o - Mar lastSu 2s 1 S
  R z 1932 o - May 21 0s 1 S
  R z 1932 1939 - O Su>=1 0s 0 -
  R z 1933 1939 - Ap Su>=2 0s 1 S
--- 1361,1376 ----
  R p 1944 1945 - Ap Sa>=21 22s 2 M
  R p 1946 o - Ap Sa>=1 23s 1 S
  R p 1946 o - O Sa>=1 23s 0 -
! R p 1947 1966 - Ap Su>=1 2s 1 S
  R p 1947 1965 - O Su>=1 2s 0 -
! R p 1976 o - S lastSu 1 0 -
! R p 1977 o - Mar lastSu 0s 1 S
! R p 1977 o - S lastSu 0s 0 -
! R p 1978 1980 - Ap Su>=1 1s 1 S
! R p 1978 o - O 1 1s 0 -
! R p 1979 1980 - S lastSu 1s 0 -
! R p 1981 1986 - Mar lastSu 0s 1 S
! R p 1981 1985 - S lastSu 0s 0 -
  R z 1932 o - May 21 0s 1 S
  R z 1932 1939 - O Su>=1 0s 0 -
  R z 1933 1939 - Ap Su>=2 0s 1 S
*************** R Y 1972 2006 - O lastSu 2 0 S
*** 1728,1734 ****
  R Y 1987 2006 - Ap Su>=1 2 1 D
  R Yu 1965 o - Ap lastSu 0 2 DD
  R Yu 1965 o - O lastSu 2 0 S
! R m 1931 o - May 1 23 1 D
  R m 1931 o - O 1 0 0 S
  R m 1939 o - F 5 0 1 D
  R m 1939 o - Jun 25 0 0 S
--- 1729,1735 ----
  R Y 1987 2006 - Ap Su>=1 2 1 D
  R Yu 1965 o - Ap lastSu 0 2 DD
  R Yu 1965 o - O lastSu 2 0 S
! R m 1931 o - Ap 30 0 1 D
  R m 1931 o - O 1 0 0 S
  R m 1939 o - F 5 0 1 D
  R m 1939 o - Jun 25 0 0 S
*************** R y 2002 2004 - Ap Su>=1 0 0 -
*** 2022,2030 ****
  R y 2002 2003 - S Su>=1 0 1 -
  R y 2004 2009 - O Su>=15 0 1 -
  R y 2005 2009 - Mar Su>=8 0 0 -
! R y 2010 ma - O Su>=1 0 1 -
  R y 2010 2012 - Ap Su>=8 0 0 -
! R y 2013 ma - Mar Su>=22 0 0 -
  R PE 1938 o - Ja 1 0 1 -
  R PE 1938 o - Ap 1 0 0 -
  R PE 1938 1939 - S lastSu 0 1 -
--- 2023,2031 ----
  R y 2002 2003 - S Su>=1 0 1 -
  R y 2004 2009 - O Su>=15 0 1 -
  R y 2005 2009 - Mar Su>=8 0 0 -
! R y 2010 2024 - O Su>=1 0 1 -
  R y 2010 2012 - Ap Su>=8 0 0 -
! R y 2013 2024 - Mar Su>=22 0 0 -
  R PE 1938 o - Ja 1 0 1 -
  R PE 1938 o - Ap 1 0 0 -
  R PE 1938 1939 - S lastSu 0 1 -
*************** Z Africa/Algiers 0:12:12 - LMT 1891 Mar
*** 2096,2110 ****
  0 d WE%sT 1981 May
  1 - CET
  Z Africa/Bissau -1:2:20 - LMT 1912 Ja 1 1u
! -1 - -01 1975
  0 - GMT
  Z Africa/Cairo 2:5:9 - LMT 1900 O
  2 K EE%sT
  Z Africa/Casablanca -0:30:20 - LMT 1913 O 26
! 0 M +00/+01 1984 Mar 16
! 1 - +01 1986
! 0 M +00/+01 2018 O 28 3
! 1 M +01/+00
  Z Africa/Ceuta -0:21:16 - LMT 1901 Ja 1 0u
  0 - WET 1918 May 6 23
  0 1 WEST 1918 O 7 23
--- 2097,2111 ----
  0 d WE%sT 1981 May
  1 - CET
  Z Africa/Bissau -1:2:20 - LMT 1912 Ja 1 1u
! -1 - %z 1975
  0 - GMT
  Z Africa/Cairo 2:5:9 - LMT 1900 O
  2 K EE%sT
  Z Africa/Casablanca -0:30:20 - LMT 1913 O 26
! 0 M %z 1984 Mar 16
! 1 - %z 1986
! 0 M %z 2018 O 28 3
! 1 M %z
  Z Africa/Ceuta -0:21:16 - LMT 1901 Ja 1 0u
  0 - WET 1918 May 6 23
  0 1 WEST 1918 O 7 23
*************** Z Africa/Ceuta -0:21:16 - LMT 1901 Ja 1
*** 2115,2123 ****
  1 - CET 1986
  1 E CE%sT
  Z Africa/El_Aaiun -0:52:48 - LMT 1934
! -1 - -01 1976 Ap 14
! 0 M +00/+01 2018 O 28 3
! 1 M +01/+00
  Z Africa/Johannesburg 1:52 - LMT 1892 F 8
  1:30 - SAST 1903 Mar
  2 SA SAST
--- 2116,2124 ----
  1 - CET 1986
  1 E CE%sT
  Z Africa/El_Aaiun -0:52:48 - LMT 1934
! -1 - %z 1976 Ap 14
! 0 M %z 2018 O 28 3
! 1 M %z
  Z Africa/Johannesburg 1:52 - LMT 1892 F 8
  1:30 - SAST 1903 Mar
  2 SA SAST
*************** Z Africa/Khartoum 2:10:8 - LMT 1931
*** 2132,2150 ****
  Z Africa/Lagos 0:13:35 - LMT 1905 Jul
  0 - GMT 1908 Jul
  0:13:35 - LMT 1914
! 0:30 - +0030 1919 S
  1 - WAT
! Z Africa/Maputo 2:10:20 - LMT 1903 Mar
  2 - CAT
  Z Africa/Monrovia -0:43:8 - LMT 1882
  -0:43:8 - MMT 1919 Mar
  -0:44:30 - MMT 1972 Ja 7
  0 - GMT
  Z Africa/Nairobi 2:27:16 - LMT 1908 May
! 2:30 - +0230 1928 Jun 30 24
  3 - EAT 1930 Ja 4 24
! 2:30 - +0230 1936 D 31 24
! 2:45 - +0245 1942 Jul 31 24
  3 - EAT
  Z Africa/Ndjamena 1:0:12 - LMT 1912
  1 - WAT 1979 O 14
--- 2133,2151 ----
  Z Africa/Lagos 0:13:35 - LMT 1905 Jul
  0 - GMT 1908 Jul
  0:13:35 - LMT 1914
! 0:30 - %z 1919 S
  1 - WAT
! Z Africa/Maputo 2:10:18 - LMT 1909
  2 - CAT
  Z Africa/Monrovia -0:43:8 - LMT 1882
  -0:43:8 - MMT 1919 Mar
  -0:44:30 - MMT 1972 Ja 7
  0 - GMT
  Z Africa/Nairobi 2:27:16 - LMT 1908 May
! 2:30 - %z 1928 Jun 30 24
  3 - EAT 1930 Ja 4 24
! 2:30 - %z 1936 D 31 24
! 2:45 - %z 1942 Jul 31 24
  3 - EAT
  Z Africa/Ndjamena 1:0:12 - LMT 1912
  1 - WAT 1979 O 14
*************** Z Africa/Tunis 0:40:44 - LMT 1881 May 12
*** 2168,2174 ****
  0:9:21 - PMT 1911 Mar 11
  1 n CE%sT
  Z Africa/Windhoek 1:8:24 - LMT 1892 F 8
! 1:30 - +0130 1903 Mar
  2 - SAST 1942 S 20 2
  2 1 SAST 1943 Mar 21 2
  2 - SAST 1990 Mar 21
--- 2169,2175 ----
  0:9:21 - PMT 1911 Mar 11
  1 n CE%sT
  Z Africa/Windhoek 1:8:24 - LMT 1892 F 8
! 1:30 - %z 1903 Mar
  2 - SAST 1942 S 20 2
  2 1 SAST 1943 Mar 21 2
  2 - SAST 1990 Mar 21
*************** Z America/Anchorage 14:0:24 - LMT 1867 O
*** 2191,2357 ****
  -9 u Y%sT 1983 N 30
  -9 u AK%sT
  Z America/Araguaina -3:12:48 - LMT 1914
! -3 B -03/-02 1990 S 17
! -3 - -03 1995 S 14
! -3 B -03/-02 2003 S 24
! -3 - -03 2012 O 21
! -3 B -03/-02 2013 S
! -3 - -03
  Z America/Argentina/Buenos_Aires -3:53:48 - LMT 1894 O 31
  -4:16:48 - CMT 1920 May
! -4 - -04 1930 D
! -4 A -04/-03 1969 O 5
! -3 A -03/-02 1999 O 3
! -4 A -04/-03 2000 Mar 3
! -3 A -03/-02
  Z America/Argentina/Catamarca -4:23:8 - LMT 1894 O 31
  -4:16:48 - CMT 1920 May
! -4 - -04 1930 D
! -4 A -04/-03 1969 O 5
! -3 A -03/-02 1991 Mar 3
! -4 - -04 1991 O 20
! -3 A -03/-02 1999 O 3
! -4 A -04/-03 2000 Mar 3
! -3 - -03 2004 Jun
! -4 - -04 2004 Jun 20
! -3 A -03/-02 2008 O 18
! -3 - -03
  Z America/Argentina/Cordoba -4:16:48 - LMT 1894 O 31
  -4:16:48 - CMT 1920 May
! -4 - -04 1930 D
! -4 A -04/-03 1969 O 5
! -3 A -03/-02 1991 Mar 3
! -4 - -04 1991 O 20
! -3 A -03/-02 1999 O 3
! -4 A -04/-03 2000 Mar 3
! -3 A -03/-02
  Z America/Argentina/Jujuy -4:21:12 - LMT 1894 O 31
  -4:16:48 - CMT 1920 May
! -4 - -04 1930 D
! -4 A -04/-03 1969 O 5
! -3 A -03/-02 1990 Mar 4
! -4 - -04 1990 O 28
! -4 1 -03 1991 Mar 17
! -4 - -04 1991 O 6
! -3 1 -02 1992
! -3 A -03/-02 1999 O 3
! -4 A -04/-03 2000 Mar 3
! -3 A -03/-02 2008 O 18
! -3 - -03
  Z America/Argentina/La_Rioja -4:27:24 - LMT 1894 O 31
  -4:16:48 - CMT 1920 May
! -4 - -04 1930 D
! -4 A -04/-03 1969 O 5
! -3 A -03/-02 1991 Mar
! -4 - -04 1991 May 7
! -3 A -03/-02 1999 O 3
! -4 A -04/-03 2000 Mar 3
! -3 - -03 2004 Jun
! -4 - -04 2004 Jun 20
! -3 A -03/-02 2008 O 18
! -3 - -03
  Z America/Argentina/Mendoza -4:35:16 - LMT 1894 O 31
  -4:16:48 - CMT 1920 May
! -4 - -04 1930 D
! -4 A -04/-03 1969 O 5
! -3 A -03/-02 1990 Mar 4
! -4 - -04 1990 O 15
! -4 1 -03 1991 Mar
! -4 - -04 1991 O 15
! -4 1 -03 1992 Mar
! -4 - -04 1992 O 18
! -3 A -03/-02 1999 O 3
! -4 A -04/-03 2000 Mar 3
! -3 - -03 2004 May 23
! -4 - -04 2004 S 26
! -3 A -03/-02 2008 O 18
! -3 - -03
  Z America/Argentina/Rio_Gallegos -4:36:52 - LMT 1894 O 31
  -4:16:48 - CMT 1920 May
! -4 - -04 1930 D
! -4 A -04/-03 1969 O 5
! -3 A -03/-02 1999 O 3
! -4 A -04/-03 2000 Mar 3
! -3 - -03 2004 Jun
! -4 - -04 2004 Jun 20
! -3 A -03/-02 2008 O 18
! -3 - -03
  Z America/Argentina/Salta -4:21:40 - LMT 1894 O 31
  -4:16:48 - CMT 1920 May
! -4 - -04 1930 D
! -4 A -04/-03 1969 O 5
! -3 A -03/-02 1991 Mar 3
! -4 - -04 1991 O 20
! -3 A -03/-02 1999 O 3
! -4 A -04/-03 2000 Mar 3
! -3 A -03/-02 2008 O 18
! -3 - -03
  Z America/Argentina/San_Juan -4:34:4 - LMT 1894 O 31
  -4:16:48 - CMT 1920 May
! -4 - -04 1930 D
! -4 A -04/-03 1969 O 5
! -3 A -03/-02 1991 Mar
! -4 - -04 1991 May 7
! -3 A -03/-02 1999 O 3
! -4 A -04/-03 2000 Mar 3
! -3 - -03 2004 May 31
! -4 - -04 2004 Jul 25
! -3 A -03/-02 2008 O 18
! -3 - -03
  Z America/Argentina/San_Luis -4:25:24 - LMT 1894 O 31
  -4:16:48 - CMT 1920 May
! -4 - -04 1930 D
! -4 A -04/-03 1969 O 5
! -3 A -03/-02 1990
! -3 1 -02 1990 Mar 14
! -4 - -04 1990 O 15
! -4 1 -03 1991 Mar
! -4 - -04 1991 Jun
! -3 - -03 1999 O 3
! -4 1 -03 2000 Mar 3
! -3 - -03 2004 May 31
! -4 - -04 2004 Jul 25
! -3 A -03/-02 2008 Ja 21
! -4 Sa -04/-03 2009 O 11
! -3 - -03
  Z America/Argentina/Tucuman -4:20:52 - LMT 1894 O 31
  -4:16:48 - CMT 1920 May
! -4 - -04 1930 D
! -4 A -04/-03 1969 O 5
! -3 A -03/-02 1991 Mar 3
! -4 - -04 1991 O 20
! -3 A -03/-02 1999 O 3
! -4 A -04/-03 2000 Mar 3
! -3 - -03 2004 Jun
! -4 - -04 2004 Jun 13
! -3 A -03/-02
  Z America/Argentina/Ushuaia -4:33:12 - LMT 1894 O 31
  -4:16:48 - CMT 1920 May
! -4 - -04 1930 D
! -4 A -04/-03 1969 O 5
! -3 A -03/-02 1999 O 3
! -4 A -04/-03 2000 Mar 3
! -3 - -03 2004 May 30
! -4 - -04 2004 Jun 20
! -3 A -03/-02 2008 O 18
! -3 - -03
  Z America/Asuncion -3:50:40 - LMT 1890
  -3:50:40 - AMT 1931 O 10
! -4 - -04 1972 O
! -3 - -03 1974 Ap
! -4 y -04/-03
  Z America/Bahia -2:34:4 - LMT 1914
! -3 B -03/-02 2003 S 24
! -3 - -03 2011 O 16
! -3 B -03/-02 2012 O 21
! -3 - -03
  Z America/Bahia_Banderas -7:1 - LMT 1922 Ja 1 7u
! -7 - MST 1927 Jun 10 23
  -6 - CST 1930 N 15
  -7 m M%sT 1932 Ap
  -6 - CST 1942 Ap 24
! -7 - MST 1949 Ja 14
! -8 - PST 1970
  -7 m M%sT 2010 Ap 4 2
  -6 m C%sT
  Z America/Barbados -3:58:29 - LMT 1911 Au 28
--- 2192,2358 ----
  -9 u Y%sT 1983 N 30
  -9 u AK%sT
  Z America/Araguaina -3:12:48 - LMT 1914
! -3 B %z 1990 S 17
! -3 - %z 1995 S 14
! -3 B %z 2003 S 24
! -3 - %z 2012 O 21
! -3 B %z 2013 S
! -3 - %z
  Z America/Argentina/Buenos_Aires -3:53:48 - LMT 1894 O 31
  -4:16:48 - CMT 1920 May
! -4 - %z 1930 D
! -4 A %z 1969 O 5
! -3 A %z 1999 O 3
! -4 A %z 2000 Mar 3
! -3 A %z
  Z America/Argentina/Catamarca -4:23:8 - LMT 1894 O 31
  -4:16:48 - CMT 1920 May
! -4 - %z 1930 D
! -4 A %z 1969 O 5
! -3 A %z 1991 Mar 3
! -4 - %z 1991 O 20
! -3 A %z 1999 O 3
! -4 A %z 2000 Mar 3
! -3 - %z 2004 Jun
! -4 - %z 2004 Jun 20
! -3 A %z 2008 O 18
! -3 - %z
  Z America/Argentina/Cordoba -4:16:48 - LMT 1894 O 31
  -4:16:48 - CMT 1920 May
! -4 - %z 1930 D
! -4 A %z 1969 O 5
! -3 A %z 1991 Mar 3
! -4 - %z 1991 O 20
! -3 A %z 1999 O 3
! -4 A %z 2000 Mar 3
! -3 A %z
  Z America/Argentina/Jujuy -4:21:12 - LMT 1894 O 31
  -4:16:48 - CMT 1920 May
! -4 - %z 1930 D
! -4 A %z 1969 O 5
! -3 A %z 1990 Mar 4
! -4 - %z 1990 O 28
! -4 1 %z 1991 Mar 17
! -4 - %z 1991 O 6
! -3 1 %z 1992
! -3 A %z 1999 O 3
! -4 A %z 2000 Mar 3
! -3 A %z 2008 O 18
! -3 - %z
  Z America/Argentina/La_Rioja -4:27:24 - LMT 1894 O 31
  -4:16:48 - CMT 1920 May
! -4 - %z 1930 D
! -4 A %z 1969 O 5
! -3 A %z 1991 Mar
! -4 - %z 1991 May 7
! -3 A %z 1999 O 3
! -4 A %z 2000 Mar 3
! -3 - %z 2004 Jun
! -4 - %z 2004 Jun 20
! -3 A %z 2008 O 18
! -3 - %z
  Z America/Argentina/Mendoza -4:35:16 - LMT 1894 O 31
  -4:16:48 - CMT 1920 May
! -4 - %z 1930 D
! -4 A %z 1969 O 5
! -3 A %z 1990 Mar 4
! -4 - %z 1990 O 15
! -4 1 %z 1991 Mar
! -4 - %z 1991 O 15
! -4 1 %z 1992 Mar
! -4 - %z 1992 O 18
! -3 A %z 1999 O 3
! -4 A %z 2000 Mar 3
! -3 - %z 2004 May 23
! -4 - %z 2004 S 26
! -3 A %z 2008 O 18
! -3 - %z
  Z America/Argentina/Rio_Gallegos -4:36:52 - LMT 1894 O 31
  -4:16:48 - CMT 1920 May
! -4 - %z 1930 D
! -4 A %z 1969 O 5
! -3 A %z 1999 O 3
! -4 A %z 2000 Mar 3
! -3 - %z 2004 Jun
! -4 - %z 2004 Jun 20
! -3 A %z 2008 O 18
! -3 - %z
  Z America/Argentina/Salta -4:21:40 - LMT 1894 O 31
  -4:16:48 - CMT 1920 May
! -4 - %z 1930 D
! -4 A %z 1969 O 5
! -3 A %z 1991 Mar 3
! -4 - %z 1991 O 20
! -3 A %z 1999 O 3
! -4 A %z 2000 Mar 3
! -3 A %z 2008 O 18
! -3 - %z
  Z America/Argentina/San_Juan -4:34:4 - LMT 1894 O 31
  -4:16:48 - CMT 1920 May
! -4 - %z 1930 D
! -4 A %z 1969 O 5
! -3 A %z 1991 Mar
! -4 - %z 1991 May 7
! -3 A %z 1999 O 3
! -4 A %z 2000 Mar 3
! -3 - %z 2004 May 31
! -4 - %z 2004 Jul 25
! -3 A %z 2008 O 18
! -3 - %z
  Z America/Argentina/San_Luis -4:25:24 - LMT 1894 O 31
  -4:16:48 - CMT 1920 May
! -4 - %z 1930 D
! -4 A %z 1969 O 5
! -3 A %z 1990
! -3 1 %z 1990 Mar 14
! -4 - %z 1990 O 15
! -4 1 %z 1991 Mar
! -4 - %z 1991 Jun
! -3 - %z 1999 O 3
! -4 1 %z 2000 Mar 3
! -3 - %z 2004 May 31
! -4 - %z 2004 Jul 25
! -3 A %z 2008 Ja 21
! -4 Sa %z 2009 O 11
! -3 - %z
  Z America/Argentina/Tucuman -4:20:52 - LMT 1894 O 31
  -4:16:48 - CMT 1920 May
! -4 - %z 1930 D
! -4 A %z 1969 O 5
! -3 A %z 1991 Mar 3
! -4 - %z 1991 O 20
! -3 A %z 1999 O 3
! -4 A %z 2000 Mar 3
! -3 - %z 2004 Jun
! -4 - %z 2004 Jun 13
! -3 A %z
  Z America/Argentina/Ushuaia -4:33:12 - LMT 1894 O 31
  -4:16:48 - CMT 1920 May
! -4 - %z 1930 D
! -4 A %z 1969 O 5
! -3 A %z 1999 O 3
! -4 A %z 2000 Mar 3
! -3 - %z 2004 May 30
! -4 - %z 2004 Jun 20
! -3 A %z 2008 O 18
! -3 - %z
  Z America/Asuncion -3:50:40 - LMT 1890
  -3:50:40 - AMT 1931 O 10
! -4 - %z 1972 O
! -3 - %z 1974 Ap
! -4 y %z 2024 O 15
! -3 - %z
  Z America/Bahia -2:34:4 - LMT 1914
! -3 B %z 2003 S 24
! -3 - %z 2011 O 16
! -3 B %z 2012 O 21
! -3 - %z
  Z America/Bahia_Banderas -7:1 - LMT 1922 Ja 1 7u
! -7 - MST 1927 Jun 10
  -6 - CST 1930 N 15
  -7 m M%sT 1932 Ap
  -6 - CST 1942 Ap 24
! -7 - MST 1970
  -7 m M%sT 2010 Ap 4 2
  -6 m C%sT
  Z America/Barbados -3:58:29 - LMT 1911 Au 28
*************** Z America/Barbados -3:58:29 - LMT 1911 A
*** 2359,2376 ****
  -4 BB AST/-0330 1945
  -4 BB A%sT
  Z America/Belem -3:13:56 - LMT 1914
! -3 B -03/-02 1988 S 12
! -3 - -03
  Z America/Belize -5:52:48 - LMT 1912 Ap
  -6 BZ %s
  Z America/Boa_Vista -4:2:40 - LMT 1914
! -4 B -04/-03 1988 S 12
! -4 - -04 1999 S 30
! -4 B -04/-03 2000 O 15
! -4 - -04
  Z America/Bogota -4:56:16 - LMT 1884 Mar 13
  -4:56:16 - BMT 1914 N 23
! -5 CO -05/-04
  Z America/Boise -7:44:49 - LMT 1883 N 18 20u
  -8 u P%sT 1923 May 13 2
  -7 u M%sT 1974
--- 2360,2377 ----
  -4 BB AST/-0330 1945
  -4 BB A%sT
  Z America/Belem -3:13:56 - LMT 1914
! -3 B %z 1988 S 12
! -3 - %z
  Z America/Belize -5:52:48 - LMT 1912 Ap
  -6 BZ %s
  Z America/Boa_Vista -4:2:40 - LMT 1914
! -4 B %z 1988 S 12
! -4 - %z 1999 S 30
! -4 B %z 2000 O 15
! -4 - %z
  Z America/Bogota -4:56:16 - LMT 1884 Mar 13
  -4:56:16 - BMT 1914 N 23
! -5 CO %z
  Z America/Boise -7:44:49 - LMT 1883 N 18 20u
  -8 u P%sT 1923 May 13 2
  -7 u M%sT 1974
*************** Z America/Cambridge_Bay 0 - -00 1920
*** 2383,2403 ****
  -6 - CST 2001 Ap 1 3
  -7 C M%sT
  Z America/Campo_Grande -3:38:28 - LMT 1914
! -4 B -04/-03
  Z America/Cancun -5:47:4 - LMT 1922 Ja 1 6u
! -6 - CST 1981 D 23
  -5 m E%sT 1998 Au 2 2
  -6 m C%sT 2015 F 1 2
  -5 - EST
  Z America/Caracas -4:27:44 - LMT 1890
  -4:27:40 - CMT 1912 F 12
! -4:30 - -0430 1965
! -4 - -04 2007 D 9 3
! -4:30 - -0430 2016 May 1 2:30
! -4 - -04
  Z America/Cayenne -3:29:20 - LMT 1911 Jul
! -4 - -04 1967 O
! -3 - -03
  Z America/Chicago -5:50:36 - LMT 1883 N 18 18u
  -6 u C%sT 1920
  -6 Ch C%sT 1936 Mar 1 2
--- 2384,2406 ----
  -6 - CST 2001 Ap 1 3
  -7 C M%sT
  Z America/Campo_Grande -3:38:28 - LMT 1914
! -4 B %z
  Z America/Cancun -5:47:4 - LMT 1922 Ja 1 6u
! -6 - CST 1981 D 26 2
! -5 - EST 1983 Ja 4
! -6 m C%sT 1997 O 26 2
  -5 m E%sT 1998 Au 2 2
  -6 m C%sT 2015 F 1 2
  -5 - EST
  Z America/Caracas -4:27:44 - LMT 1890
  -4:27:40 - CMT 1912 F 12
! -4:30 - %z 1965
! -4 - %z 2007 D 9 3
! -4:30 - %z 2016 May 1 2:30
! -4 - %z
  Z America/Cayenne -3:29:20 - LMT 1911 Jul
! -4 - %z 1967 O
! -3 - %z
  Z America/Chicago -5:50:36 - LMT 1883 N 18 18u
  -6 u C%sT 1920
  -6 Ch C%sT 1936 Mar 1 2
*************** Z America/Chicago -5:50:36 - LMT 1883 N
*** 2407,2413 ****
  -6 Ch C%sT 1967
  -6 u C%sT
  Z America/Chihuahua -7:4:20 - LMT 1922 Ja 1 7u
! -7 - MST 1927 Jun 10 23
  -6 - CST 1930 N 15
  -7 m M%sT 1932 Ap
  -6 - CST 1996
--- 2410,2416 ----
  -6 Ch C%sT 1967
  -6 u C%sT
  Z America/Chihuahua -7:4:20 - LMT 1922 Ja 1 7u
! -7 - MST 1927 Jun 10
  -6 - CST 1930 N 15
  -7 m M%sT 1932 Ap
  -6 - CST 1996
*************** Z America/Chihuahua -7:4:20 - LMT 1922 J
*** 2416,2422 ****
  -7 m M%sT 2022 O 30 2
  -6 - CST
  Z America/Ciudad_Juarez -7:5:56 - LMT 1922 Ja 1 7u
! -7 - MST 1927 Jun 10 23
  -6 - CST 1930 N 15
  -7 m M%sT 1932 Ap
  -6 - CST 1996
--- 2419,2425 ----
  -7 m M%sT 2022 O 30 2
  -6 - CST
  Z America/Ciudad_Juarez -7:5:56 - LMT 1922 Ja 1 7u
! -7 - MST 1927 Jun 10
  -6 - CST 1930 N 15
  -7 m M%sT 1932 Ap
  -6 - CST 1996
*************** Z America/Ciudad_Juarez -7:5:56 - LMT 19
*** 2429,2441 ****
  Z America/Costa_Rica -5:36:13 - LMT 1890
  -5:36:13 - SJMT 1921 Ja 15
  -6 CR C%sT
  Z America/Cuiaba -3:44:20 - LMT 1914
! -4 B -04/-03 2003 S 24
! -4 - -04 2004 O
! -4 B -04/-03
  Z America/Danmarkshavn -1:14:40 - LMT 1916 Jul 28
! -3 - -03 1980 Ap 6 2
! -3 E -03/-02 1996
  0 - GMT
  Z America/Dawson -9:17:40 - LMT 1900 Au 20
  -9 Y Y%sT 1965
--- 2432,2458 ----
  Z America/Costa_Rica -5:36:13 - LMT 1890
  -5:36:13 - SJMT 1921 Ja 15
  -6 CR C%sT
+ Z America/Coyhaique -4:48:16 - LMT 1890
+ -4:42:45 - SMT 1910 Ja 10
+ -5 - %z 1916 Jul
+ -4:42:45 - SMT 1918 S 10
+ -4 - %z 1919 Jul
+ -4:42:45 - SMT 1927 S
+ -5 x %z 1932 S
+ -4 - %z 1942 Jun
+ -5 - %z 1942 Au
+ -4 - %z 1946 Au 28 24
+ -5 1 %z 1947 Mar 31 24
+ -5 - %z 1947 May 21 23
+ -4 x %z 2025 Mar 20
+ -3 - %z
  Z America/Cuiaba -3:44:20 - LMT 1914
! -4 B %z 2003 S 24
! -4 - %z 2004 O
! -4 B %z
  Z America/Danmarkshavn -1:14:40 - LMT 1916 Jul 28
! -3 - %z 1980 Ap 6 2
! -3 E %z 1996
  0 - GMT
  Z America/Dawson -9:17:40 - LMT 1900 Au 20
  -9 Y Y%sT 1965
*************** Z America/Edmonton -7:33:52 - LMT 1906 S
*** 2467,2478 ****
  -7 Ed M%sT 1987
  -7 C M%sT
  Z America/Eirunepe -4:39:28 - LMT 1914
! -5 B -05/-04 1988 S 12
! -5 - -05 1993 S 28
! -5 B -05/-04 1994 S 22
! -5 - -05 2008 Jun 24
! -4 - -04 2013 N 10
! -5 - -05
  Z America/El_Salvador -5:56:48 - LMT 1921
  -6 SV C%sT
  Z America/Fort_Nelson -8:10:47 - LMT 1884
--- 2484,2495 ----
  -7 Ed M%sT 1987
  -7 C M%sT
  Z America/Eirunepe -4:39:28 - LMT 1914
! -5 B %z 1988 S 12
! -5 - %z 1993 S 28
! -5 B %z 1994 S 22
! -5 - %z 2008 Jun 24
! -4 - %z 2013 N 10
! -5 - %z
  Z America/El_Salvador -5:56:48 - LMT 1921
  -6 SV C%sT
  Z America/Fort_Nelson -8:10:47 - LMT 1884
*************** Z America/Fort_Nelson -8:10:47 - LMT 188
*** 2482,2493 ****
  -8 C P%sT 2015 Mar 8 2
  -7 - MST
  Z America/Fortaleza -2:34 - LMT 1914
! -3 B -03/-02 1990 S 17
! -3 - -03 1999 S 30
! -3 B -03/-02 2000 O 22
! -3 - -03 2001 S 13
! -3 B -03/-02 2002 O
! -3 - -03
  Z America/Glace_Bay -3:59:48 - LMT 1902 Jun 15
  -4 C A%sT 1953
  -4 H A%sT 1954
--- 2499,2510 ----
  -8 C P%sT 2015 Mar 8 2
  -7 - MST
  Z America/Fortaleza -2:34 - LMT 1914
! -3 B %z 1990 S 17
! -3 - %z 1999 S 30
! -3 B %z 2000 O 22
! -3 - %z 2001 S 13
! -3 B %z 2002 O
! -3 - %z
  Z America/Glace_Bay -3:59:48 - LMT 1902 Jun 15
  -4 C A%sT 1953
  -4 H A%sT 1954
*************** Z America/Guatemala -6:2:4 - LMT 1918 O
*** 2514,2525 ****
  -6 GT C%sT
  Z America/Guayaquil -5:19:20 - LMT 1890
  -5:14 - QMT 1931
! -5 EC -05/-04
  Z America/Guyana -3:52:39 - LMT 1911 Au
! -4 - -04 1915 Mar
! -3:45 - -0345 1975 Au
! -3 - -03 1992 Mar 29 1
! -4 - -04
  Z America/Halifax -4:14:24 - LMT 1902 Jun 15
  -4 H A%sT 1918
  -4 C A%sT 1919
--- 2531,2542 ----
  -6 GT C%sT
  Z America/Guayaquil -5:19:20 - LMT 1890
  -5:14 - QMT 1931
! -5 EC %z
  Z America/Guyana -3:52:39 - LMT 1911 Au
! -4 - %z 1915 Mar
! -3:45 - %z 1975 Au
! -3 - %z 1992 Mar 29 1
! -4 - %z
  Z America/Halifax -4:14:24 - LMT 1902 Jun 15
  -4 H A%sT 1918
  -4 C A%sT 1919
*************** Z America/Havana -5:29:28 - LMT 1890
*** 2531,2542 ****
  -5:29:36 - HMT 1925 Jul 19 12
  -5 Q C%sT
  Z America/Hermosillo -7:23:52 - LMT 1922 Ja 1 7u
! -7 - MST 1927 Jun 10 23
  -6 - CST 1930 N 15
  -7 m M%sT 1932 Ap
  -6 - CST 1942 Ap 24
! -7 - MST 1949 Ja 14
! -8 - PST 1970
  -7 m M%sT 1999
  -7 - MST
  Z America/Indiana/Indianapolis -5:44:38 - LMT 1883 N 18 18u
--- 2548,2558 ----
  -5:29:36 - HMT 1925 Jul 19 12
  -5 Q C%sT
  Z America/Hermosillo -7:23:52 - LMT 1922 Ja 1 7u
! -7 - MST 1927 Jun 10
  -6 - CST 1930 N 15
  -7 m M%sT 1932 Ap
  -6 - CST 1942 Ap 24
! -7 - MST 1996
  -7 m M%sT 1999
  -7 - MST
  Z America/Indiana/Indianapolis -5:44:38 - LMT 1883 N 18 18u
*************** Z America/Kentucky/Monticello -5:39:24 -
*** 2644,2666 ****
  Z America/La_Paz -4:32:36 - LMT 1890
  -4:32:36 - CMT 1931 O 15
  -4:32:36 1 BST 1932 Mar 21
! -4 - -04
  Z America/Lima -5:8:12 - LMT 1890
  -5:8:36 - LMT 1908 Jul 28
! -5 PE -05/-04
  Z America/Los_Angeles -7:52:58 - LMT 1883 N 18 20u
  -8 u P%sT 1946
  -8 CA P%sT 1967
  -8 u P%sT
  Z America/Maceio -2:22:52 - LMT 1914
! -3 B -03/-02 1990 S 17
! -3 - -03 1995 O 13
! -3 B -03/-02 1996 S 4
! -3 - -03 1999 S 30
! -3 B -03/-02 2000 O 22
! -3 - -03 2001 S 13
! -3 B -03/-02 2002 O
! -3 - -03
  Z America/Managua -5:45:8 - LMT 1890
  -5:45:12 - MMT 1934 Jun 23
  -6 - CST 1973 May
--- 2660,2682 ----
  Z America/La_Paz -4:32:36 - LMT 1890
  -4:32:36 - CMT 1931 O 15
  -4:32:36 1 BST 1932 Mar 21
! -4 - %z
  Z America/Lima -5:8:12 - LMT 1890
  -5:8:36 - LMT 1908 Jul 28
! -5 PE %z
  Z America/Los_Angeles -7:52:58 - LMT 1883 N 18 20u
  -8 u P%sT 1946
  -8 CA P%sT 1967
  -8 u P%sT
  Z America/Maceio -2:22:52 - LMT 1914
! -3 B %z 1990 S 17
! -3 - %z 1995 O 13
! -3 B %z 1996 S 4
! -3 - %z 1999 S 30
! -3 B %z 2000 O 22
! -3 - %z 2001 S 13
! -3 B %z 2002 O
! -3 - %z
  Z America/Managua -5:45:8 - LMT 1890
  -5:45:12 - MMT 1934 Jun 23
  -6 - CST 1973 May
*************** Z America/Managua -5:45:8 - LMT 1890
*** 2671,2680 ****
  -5 - EST 1997
  -6 NI C%sT
  Z America/Manaus -4:0:4 - LMT 1914
! -4 B -04/-03 1988 S 12
! -4 - -04 1993 S 28
! -4 B -04/-03 1994 S 22
! -4 - -04
  Z America/Martinique -4:4:20 - LMT 1890
  -4:4:20 - FFMT 1911 May
  -4 - AST 1980 Ap 6
--- 2687,2696 ----
  -5 - EST 1997
  -6 NI C%sT
  Z America/Manaus -4:0:4 - LMT 1914
! -4 B %z 1988 S 12
! -4 - %z 1993 S 28
! -4 B %z 1994 S 22
! -4 - %z
  Z America/Martinique -4:4:20 - LMT 1890
  -4:4:20 - FFMT 1911 May
  -4 - AST 1980 Ap 6
*************** Z America/Matamoros -6:30 - LMT 1922 Ja
*** 2686,2697 ****
  -6 m C%sT 2010
  -6 u C%sT
  Z America/Mazatlan -7:5:40 - LMT 1922 Ja 1 7u
! -7 - MST 1927 Jun 10 23
  -6 - CST 1930 N 15
  -7 m M%sT 1932 Ap
  -6 - CST 1942 Ap 24
! -7 - MST 1949 Ja 14
! -8 - PST 1970
  -7 m M%sT
  Z America/Menominee -5:50:27 - LMT 1885 S 18 12
  -6 u C%sT 1946
--- 2702,2712 ----
  -6 m C%sT 2010
  -6 u C%sT
  Z America/Mazatlan -7:5:40 - LMT 1922 Ja 1 7u
! -7 - MST 1927 Jun 10
  -6 - CST 1930 N 15
  -7 m M%sT 1932 Ap
  -6 - CST 1942 Ap 24
! -7 - MST 1970
  -7 m M%sT
  Z America/Menominee -5:50:27 - LMT 1885 S 18 12
  -6 u C%sT 1946
*************** Z America/Menominee -5:50:27 - LMT 1885
*** 2699,2706 ****
  -5 - EST 1973 Ap 29 2
  -6 u C%sT
  Z America/Merida -5:58:28 - LMT 1922 Ja 1 6u
! -6 - CST 1981 D 23
! -5 - EST 1982 D 2
  -6 m C%sT
  Z America/Metlakatla 15:13:42 - LMT 1867 O 19 15:44:55
  -8:46:18 - LMT 1900 Au 20 12
--- 2714,2721 ----
  -5 - EST 1973 Ap 29 2
  -6 u C%sT
  Z America/Merida -5:58:28 - LMT 1922 Ja 1 6u
! -6 - CST 1981 D 26 2
! -5 - EST 1982 N 2 2
  -6 m C%sT
  Z America/Metlakatla 15:13:42 - LMT 1867 O 19 15:44:55
  -8:46:18 - LMT 1900 Au 20 12
*************** Z America/Metlakatla 15:13:42 - LMT 1867
*** 2713,2719 ****
  -8 - PST 2019 Ja 20 2
  -9 u AK%sT
  Z America/Mexico_City -6:36:36 - LMT 1922 Ja 1 7u
! -7 - MST 1927 Jun 10 23
  -6 - CST 1930 N 15
  -7 m M%sT 1932 Ap
  -6 m C%sT 2001 S 30 2
--- 2728,2734 ----
  -8 - PST 2019 Ja 20 2
  -9 u AK%sT
  Z America/Mexico_City -6:36:36 - LMT 1922 Ja 1 7u
! -7 - MST 1927 Jun 10
  -6 - CST 1930 N 15
  -7 m M%sT 1932 Ap
  -6 m C%sT 2001 S 30 2
*************** Z America/Mexico_City -6:36:36 - LMT 192
*** 2721,2728 ****
  -6 m C%sT
  Z America/Miquelon -3:44:40 - LMT 1911 Jun 15
  -4 - AST 1980 May
! -3 - -03 1987
! -3 C -03/-02
  Z America/Moncton -4:19:8 - LMT 1883 D 9
  -5 - EST 1902 Jun 15
  -4 C A%sT 1933
--- 2736,2743 ----
  -6 m C%sT
  Z America/Miquelon -3:44:40 - LMT 1911 Jun 15
  -4 - AST 1980 May
! -3 - %z 1987
! -3 C %z
  Z America/Moncton -4:19:8 - LMT 1883 D 9
  -5 - EST 1902 Jun 15
  -4 C A%sT 1933
*************** Z America/Moncton -4:19:8 - LMT 1883 D 9
*** 2733,2752 ****
  -4 o A%sT 2007
  -4 C A%sT
  Z America/Monterrey -6:41:16 - LMT 1922 Ja 1 6u
  -6 - CST 1988
  -6 u C%sT 1989
  -6 m C%sT
  Z America/Montevideo -3:44:51 - LMT 1908 Jun 10
  -3:44:51 - MMT 1920 May
! -4 - -04 1923 O
! -3:30 U -0330/-03 1942 D 14
! -3 U -03/-0230 1960
! -3 U -03/-02 1968
! -3 U -03/-0230 1970
! -3 U -03/-02 1974
! -3 U -03/-0130 1974 Mar 10
! -3 U -03/-0230 1974 D 22
! -3 U -03/-02
  Z America/New_York -4:56:2 - LMT 1883 N 18 17u
  -5 u E%sT 1920
  -5 NY E%sT 1942
--- 2748,2770 ----
  -4 o A%sT 2007
  -4 C A%sT
  Z America/Monterrey -6:41:16 - LMT 1922 Ja 1 6u
+ -7 - MST 1927 Jun 10
+ -6 - CST 1930 N 15
+ -7 m M%sT 1932 Ap
  -6 - CST 1988
  -6 u C%sT 1989
  -6 m C%sT
  Z America/Montevideo -3:44:51 - LMT 1908 Jun 10
  -3:44:51 - MMT 1920 May
! -4 - %z 1923 O
! -3:30 U %z 1942 D 14
! -3 U %z 1960
! -3 U %z 1968
! -3 U %z 1970
! -3 U %z 1974
! -3 U %z 1974 Mar 10
! -3 U %z 1974 D 22
! -3 U %z
  Z America/New_York -4:56:2 - LMT 1883 N 18 17u
  -5 u E%sT 1920
  -5 NY E%sT 1942
*************** Z America/Nome 12:58:22 - LMT 1867 O 19
*** 2763,2774 ****
  -9 u Y%sT 1983 N 30
  -9 u AK%sT
  Z America/Noronha -2:9:40 - LMT 1914
! -2 B -02/-01 1990 S 17
! -2 - -02 1999 S 30
! -2 B -02/-01 2000 O 15
! -2 - -02 2001 S 13
! -2 B -02/-01 2002 O
! -2 - -02
  Z America/North_Dakota/Beulah -6:47:7 - LMT 1883 N 18 19u
  -7 u M%sT 2010 N 7 2
  -6 u C%sT
--- 2781,2792 ----
  -9 u Y%sT 1983 N 30
  -9 u AK%sT
  Z America/Noronha -2:9:40 - LMT 1914
! -2 B %z 1990 S 17
! -2 - %z 1999 S 30
! -2 B %z 2000 O 15
! -2 - %z 2001 S 13
! -2 B %z 2002 O
! -2 - %z
  Z America/North_Dakota/Beulah -6:47:7 - LMT 1883 N 18 19u
  -7 u M%sT 2010 N 7 2
  -6 u C%sT
*************** Z America/North_Dakota/New_Salem -6:45:3
*** 2779,2790 ****
  -7 u M%sT 2003 O 26 2
  -6 u C%sT
  Z America/Nuuk -3:26:56 - LMT 1916 Jul 28
! -3 - -03 1980 Ap 6 2
! -3 E -03/-02 2023 Mar 26 1u
! -2 - -02 2023 O 29 1u
! -2 E -02/-01
  Z America/Ojinaga -6:57:40 - LMT 1922 Ja 1 7u
! -7 - MST 1927 Jun 10 23
  -6 - CST 1930 N 15
  -7 m M%sT 1932 Ap
  -6 - CST 1996
--- 2797,2808 ----
  -7 u M%sT 2003 O 26 2
  -6 u C%sT
  Z America/Nuuk -3:26:56 - LMT 1916 Jul 28
! -3 - %z 1980 Ap 6 2
! -3 E %z 2023 Mar 26 1u
! -2 - %z 2023 O 29 1u
! -2 E %z
  Z America/Ojinaga -6:57:40 - LMT 1922 Ja 1 7u
! -7 - MST 1927 Jun 10
  -6 - CST 1930 N 15
  -7 m M%sT 1932 Ap
  -6 - CST 1996
*************** Z America/Panama -5:18:8 - LMT 1890
*** 2800,2807 ****
  Z America/Paramaribo -3:40:40 - LMT 1911
  -3:40:52 - PMT 1935
  -3:40:36 - PMT 1945 O
! -3:30 - -0330 1984 O
! -3 - -03
  Z America/Phoenix -7:28:18 - LMT 1883 N 18 19u
  -7 u M%sT 1944 Ja 1 0:1
  -7 - MST 1944 Ap 1 0:1
--- 2818,2825 ----
  Z America/Paramaribo -3:40:40 - LMT 1911
  -3:40:52 - PMT 1935
  -3:40:36 - PMT 1945 O
! -3:30 - %z 1984 O
! -3 - %z
  Z America/Phoenix -7:28:18 - LMT 1883 N 18 19u
  -7 u M%sT 1944 Ja 1 0:1
  -7 - MST 1944 Ap 1 0:1
*************** Z America/Port-au-Prince -4:49:20 - LMT
*** 2813,2849 ****
  -4:49 - PPMT 1917 Ja 24 12
  -5 HT E%sT
  Z America/Porto_Velho -4:15:36 - LMT 1914
! -4 B -04/-03 1988 S 12
! -4 - -04
  Z America/Puerto_Rico -4:24:25 - LMT 1899 Mar 28 12
  -4 - AST 1942 May 3
  -4 u A%sT 1946
  -4 - AST
  Z America/Punta_Arenas -4:43:40 - LMT 1890
  -4:42:45 - SMT 1910 Ja 10
! -5 - -05 1916 Jul
  -4:42:45 - SMT 1918 S 10
! -4 - -04 1919 Jul
  -4:42:45 - SMT 1927 S
! -5 x -05/-04 1932 S
! -4 - -04 1942 Jun
! -5 - -05 1942 Au
! -4 - -04 1946 Au 28 24
! -5 1 -04 1947 Mar 31 24
! -5 - -05 1947 May 21 23
! -4 x -04/-03 2016 D 4
! -3 - -03
  Z America/Rankin_Inlet 0 - -00 1957
  -6 Y C%sT 2000 O 29 2
  -5 - EST 2001 Ap 1 3
  -6 C C%sT
  Z America/Recife -2:19:36 - LMT 1914
! -3 B -03/-02 1990 S 17
! -3 - -03 1999 S 30
! -3 B -03/-02 2000 O 15
! -3 - -03 2001 S 13
! -3 B -03/-02 2002 O
! -3 - -03
  Z America/Regina -6:58:36 - LMT 1905 S
  -7 r M%sT 1960 Ap lastSu 2
  -6 - CST
--- 2831,2867 ----
  -4:49 - PPMT 1917 Ja 24 12
  -5 HT E%sT
  Z America/Porto_Velho -4:15:36 - LMT 1914
! -4 B %z 1988 S 12
! -4 - %z
  Z America/Puerto_Rico -4:24:25 - LMT 1899 Mar 28 12
  -4 - AST 1942 May 3
  -4 u A%sT 1946
  -4 - AST
  Z America/Punta_Arenas -4:43:40 - LMT 1890
  -4:42:45 - SMT 1910 Ja 10
! -5 - %z 1916 Jul
  -4:42:45 - SMT 1918 S 10
! -4 - %z 1919 Jul
  -4:42:45 - SMT 1927 S
! -5 x %z 1932 S
! -4 - %z 1942 Jun
! -5 - %z 1942 Au
! -4 - %z 1946 Au 28 24
! -5 1 %z 1947 Mar 31 24
! -5 - %z 1947 May 21 23
! -4 x %z 2016 D 4
! -3 - %z
  Z America/Rankin_Inlet 0 - -00 1957
  -6 Y C%sT 2000 O 29 2
  -5 - EST 2001 Ap 1 3
  -6 C C%sT
  Z America/Recife -2:19:36 - LMT 1914
! -3 B %z 1990 S 17
! -3 - %z 1999 S 30
! -3 B %z 2000 O 15
! -3 - %z 2001 S 13
! -3 B %z 2002 O
! -3 - %z
  Z America/Regina -6:58:36 - LMT 1905 S
  -7 r M%sT 1960 Ap lastSu 2
  -6 - CST
*************** Z America/Resolute 0 - -00 1947 Au 31
*** 2854,2881 ****
  -5 - EST 2007 Mar 11 3
  -6 C C%sT
  Z America/Rio_Branco -4:31:12 - LMT 1914
! -5 B -05/-04 1988 S 12
! -5 - -05 2008 Jun 24
! -4 - -04 2013 N 10
! -5 - -05
  Z America/Santarem -3:38:48 - LMT 1914
! -4 B -04/-03 1988 S 12
! -4 - -04 2008 Jun 24
! -3 - -03
  Z America/Santiago -4:42:45 - LMT 1890
  -4:42:45 - SMT 1910 Ja 10
! -5 - -05 1916 Jul
  -4:42:45 - SMT 1918 S 10
! -4 - -04 1919 Jul
  -4:42:45 - SMT 1927 S
! -5 x -05/-04 1932 S
! -4 - -04 1942 Jun
! -5 - -05 1942 Au
! -4 - -04 1946 Jul 14 24
! -4 1 -03 1946 Au 28 24
! -5 1 -04 1947 Mar 31 24
! -5 - -05 1947 May 21 23
! -4 x -04/-03
  Z America/Santo_Domingo -4:39:36 - LMT 1890
  -4:40 - SDMT 1933 Ap 1 12
  -5 DO %s 1974 O 27
--- 2872,2899 ----
  -5 - EST 2007 Mar 11 3
  -6 C C%sT
  Z America/Rio_Branco -4:31:12 - LMT 1914
! -5 B %z 1988 S 12
! -5 - %z 2008 Jun 24
! -4 - %z 2013 N 10
! -5 - %z
  Z America/Santarem -3:38:48 - LMT 1914
! -4 B %z 1988 S 12
! -4 - %z 2008 Jun 24
! -3 - %z
  Z America/Santiago -4:42:45 - LMT 1890
  -4:42:45 - SMT 1910 Ja 10
! -5 - %z 1916 Jul
  -4:42:45 - SMT 1918 S 10
! -4 - %z 1919 Jul
  -4:42:45 - SMT 1927 S
! -5 x %z 1932 S
! -4 - %z 1942 Jun
! -5 - %z 1942 Au
! -4 - %z 1946 Jul 14 24
! -4 1 %z 1946 Au 28 24
! -5 1 %z 1947 Mar 31 24
! -5 - %z 1947 May 21 23
! -4 x %z
  Z America/Santo_Domingo -4:39:36 - LMT 1890
  -4:40 - SDMT 1933 Ap 1 12
  -5 DO %s 1974 O 27
*************** Z America/Santo_Domingo -4:39:36 - LMT 1
*** 2883,2896 ****
  -5 u E%sT 2000 D 3 1
  -4 - AST
  Z America/Sao_Paulo -3:6:28 - LMT 1914
! -3 B -03/-02 1963 O 23
! -3 1 -02 1964
! -3 B -03/-02
  Z America/Scoresbysund -1:27:52 - LMT 1916 Jul 28
! -2 - -02 1980 Ap 6 2
! -2 c -02/-01 1981 Mar 29
! -1 E -01/+00 2024 Mar 31
! -2 E -02/-01
  Z America/Sitka 14:58:47 - LMT 1867 O 19 15:30
  -9:1:13 - LMT 1900 Au 20 12
  -8 - PST 1942
--- 2901,2914 ----
  -5 u E%sT 2000 D 3 1
  -4 - AST
  Z America/Sao_Paulo -3:6:28 - LMT 1914
! -3 B %z 1963 O 23
! -3 1 %z 1964
! -3 B %z
  Z America/Scoresbysund -1:27:52 - LMT 1916 Jul 28
! -2 - %z 1980 Ap 6 2
! -2 c %z 1981 Mar 29
! -1 E %z 2024 Mar 31
! -2 E %z
  Z America/Sitka 14:58:47 - LMT 1867 O 19 15:30
  -9:1:13 - LMT 1900 Au 20 12
  -8 - PST 1942
*************** Z America/Thule -4:35:8 - LMT 1916 Jul 2
*** 2918,2932 ****
  -4 Th A%sT
  Z America/Tijuana -7:48:4 - LMT 1922 Ja 1 7u
  -7 - MST 1924
! -8 - PST 1927 Jun 10 23
  -7 - MST 1930 N 15
  -8 - PST 1931 Ap
  -8 1 PDT 1931 S 30
  -8 - PST 1942 Ap 24
  -8 1 PWT 1945 Au 14 23u
! -8 1 PPT 1945 N 12
  -8 - PST 1948 Ap 5
  -8 1 PDT 1949 Ja 14
  -8 - PST 1954
  -8 CA P%sT 1961
  -8 - PST 1976
--- 2936,2956 ----
  -4 Th A%sT
  Z America/Tijuana -7:48:4 - LMT 1922 Ja 1 7u
  -7 - MST 1924
! -8 - PST 1927 Jun 10
  -7 - MST 1930 N 15
  -8 - PST 1931 Ap
  -8 1 PDT 1931 S 30
  -8 - PST 1942 Ap 24
  -8 1 PWT 1945 Au 14 23u
! -8 1 PPT 1945 N 15
  -8 - PST 1948 Ap 5
  -8 1 PDT 1949 Ja 14
+ -8 - PST 1950 May
+ -8 1 PDT 1950 S 24
+ -8 - PST 1951 Ap 29 2
+ -8 1 PDT 1951 S 30 2
+ -8 - PST 1952 Ap 27 2
+ -8 1 PDT 1952 S 28 2
  -8 - PST 1954
  -8 CA P%sT 1961
  -8 - PST 1976
*************** Z America/Yakutat 14:41:5 - LMT 1867 O 1
*** 2961,2991 ****
  -9 u Y%sT 1983 N 30
  -9 u AK%sT
  Z Antarctica/Casey 0 - -00 1969
! 8 - +08 2009 O 18 2
! 11 - +11 2010 Mar 5 2
! 8 - +08 2011 O 28 2
! 11 - +11 2012 F 21 17u
! 8 - +08 2016 O 22
! 11 - +11 2018 Mar 11 4
! 8 - +08 2018 O 7 4
! 11 - +11 2019 Mar 17 3
! 8 - +08 2019 O 4 3
! 11 - +11 2020 Mar 8 3
! 8 - +08 2020 O 4 0:1
! 11 - +11 2021 Mar 14
! 8 - +08 2021 O 3 0:1
! 11 - +11 2022 Mar 13
! 8 - +08 2022 O 2 0:1
! 11 - +11 2023 Mar 9 3
! 8 - +08
  Z Antarctica/Davis 0 - -00 1957 Ja 13
! 7 - +07 1964 N
  0 - -00 1969 F
! 7 - +07 2009 O 18 2
! 5 - +05 2010 Mar 10 20u
! 7 - +07 2011 O 28 2
! 5 - +05 2012 F 21 20u
! 7 - +07
  Z Antarctica/Macquarie 0 - -00 1899 N
  10 - AEST 1916 O 1 2
  10 1 AEDT 1917 F
--- 2985,3015 ----
  -9 u Y%sT 1983 N 30
  -9 u AK%sT
  Z Antarctica/Casey 0 - -00 1969
! 8 - %z 2009 O 18 2
! 11 - %z 2010 Mar 5 2
! 8 - %z 2011 O 28 2
! 11 - %z 2012 F 21 17u
! 8 - %z 2016 O 22
! 11 - %z 2018 Mar 11 4
! 8 - %z 2018 O 7 4
! 11 - %z 2019 Mar 17 3
! 8 - %z 2019 O 4 3
! 11 - %z 2020 Mar 8 3
! 8 - %z 2020 O 4 0:1
! 11 - %z 2021 Mar 14
! 8 - %z 2021 O 3 0:1
! 11 - %z 2022 Mar 13
! 8 - %z 2022 O 2 0:1
! 11 - %z 2023 Mar 9 3
! 8 - %z
  Z Antarctica/Davis 0 - -00 1957 Ja 13
! 7 - %z 1964 N
  0 - -00 1969 F
! 7 - %z 2009 O 18 2
! 5 - %z 2010 Mar 10 20u
! 7 - %z 2011 O 28 2
! 5 - %z 2012 F 21 20u
! 7 - %z
  Z Antarctica/Macquarie 0 - -00 1899 N
  10 - AEST 1916 O 1 2
  10 1 AEDT 1917 F
*************** Z Antarctica/Macquarie 0 - -00 1899 N
*** 2996,3146 ****
  10 1 AEDT 2011
  10 AT AE%sT
  Z Antarctica/Mawson 0 - -00 1954 F 13
! 6 - +06 2009 O 18 2
! 5 - +05
  Z Antarctica/Palmer 0 - -00 1965
! -4 A -04/-03 1969 O 5
! -3 A -03/-02 1982 May
! -4 x -04/-03 2016 D 4
! -3 - -03
  Z Antarctica/Rothera 0 - -00 1976 D
! -3 - -03
  Z Antarctica/Troll 0 - -00 2005 F 12
  0 Tr %s
  Z Antarctica/Vostok 0 - -00 1957 D 16
! 7 - +07 1994 F
  0 - -00 1994 N
! 7 - +07 2023 D 18 2
! 5 - +05
  Z Asia/Almaty 5:7:48 - LMT 1924 May 2
! 5 - +05 1930 Jun 21
! 6 R +06/+07 1991 Mar 31 2s
! 5 R +05/+06 1992 Ja 19 2s
! 6 R +06/+07 2004 O 31 2s
! 6 - +06 2024 Mar
! 5 - +05
  Z Asia/Amman 2:23:44 - LMT 1931
  2 J EE%sT 2022 O 28 0s
! 3 - +03
  Z Asia/Anadyr 11:49:56 - LMT 1924 May 2
! 12 - +12 1930 Jun 21
! 13 R +13/+14 1982 Ap 1 0s
! 12 R +12/+13 1991 Mar 31 2s
! 11 R +11/+12 1992 Ja 19 2s
! 12 R +12/+13 2010 Mar 28 2s
! 11 R +11/+12 2011 Mar 27 2s
! 12 - +12
  Z Asia/Aqtau 3:21:4 - LMT 1924 May 2
! 4 - +04 1930 Jun 21
! 5 - +05 1981 O
! 6 - +06 1982 Ap
! 5 R +05/+06 1991 Mar 31 2s
! 4 R +04/+05 1992 Ja 19 2s
! 5 R +05/+06 1994 S 25 2s
! 4 R +04/+05 2004 O 31 2s
! 5 - +05
  Z Asia/Aqtobe 3:48:40 - LMT 1924 May 2
! 4 - +04 1930 Jun 21
! 5 - +05 1981 Ap
! 5 1 +06 1981 O
! 6 - +06 1982 Ap
! 5 R +05/+06 1991 Mar 31 2s
! 4 R +04/+05 1992 Ja 19 2s
! 5 R +05/+06 2004 O 31 2s
! 5 - +05
  Z Asia/Ashgabat 3:53:32 - LMT 1924 May 2
! 4 - +04 1930 Jun 21
! 5 R +05/+06 1991 Mar 31 2
! 4 R +04/+05 1992 Ja 19 2
! 5 - +05
  Z Asia/Atyrau 3:27:44 - LMT 1924 May 2
! 3 - +03 1930 Jun 21
! 5 - +05 1981 O
! 6 - +06 1982 Ap
! 5 R +05/+06 1991 Mar 31 2s
! 4 R +04/+05 1992 Ja 19 2s
! 5 R +05/+06 1999 Mar 28 2s
! 4 R +04/+05 2004 O 31 2s
! 5 - +05
  Z Asia/Baghdad 2:57:40 - LMT 1890
  2:57:36 - BMT 1918
! 3 - +03 1982 May
! 3 IQ +03/+04
  Z Asia/Baku 3:19:24 - LMT 1924 May 2
! 3 - +03 1957 Mar
! 4 R +04/+05 1991 Mar 31 2s
! 3 R +03/+04 1992 S lastSu 2s
! 4 - +04 1996
! 4 E +04/+05 1997
! 4 AZ +04/+05
  Z Asia/Bangkok 6:42:4 - LMT 1880
  6:42:4 - BMT 1920 Ap
! 7 - +07
  Z Asia/Barnaul 5:35 - LMT 1919 D 10
! 6 - +06 1930 Jun 21
! 7 R +07/+08 1991 Mar 31 2s
! 6 R +06/+07 1992 Ja 19 2s
! 7 R +07/+08 1995 May 28
! 6 R +06/+07 2011 Mar 27 2s
! 7 - +07 2014 O 26 2s
! 6 - +06 2016 Mar 27 2s
! 7 - +07
  Z Asia/Beirut 2:22 - LMT 1880
  2 l EE%sT
  Z Asia/Bishkek 4:58:24 - LMT 1924 May 2
! 5 - +05 1930 Jun 21
! 6 R +06/+07 1991 Mar 31 2s
! 5 R +05/+06 1991 Au 31 2
! 5 KG +05/+06 2005 Au 12
! 6 - +06
  Z Asia/Chita 7:33:52 - LMT 1919 D 15
! 8 - +08 1930 Jun 21
! 9 R +09/+10 1991 Mar 31 2s
! 8 R +08/+09 1992 Ja 19 2s
! 9 R +09/+10 2011 Mar 27 2s
! 10 - +10 2014 O 26 2s
! 8 - +08 2016 Mar 27 2
! 9 - +09
! Z Asia/Choibalsan 7:38 - LMT 1905 Au
! 7 - +07 1978
! 8 - +08 1983 Ap
! 9 X +09/+10 2008 Mar 31
! 8 X +08/+09
  Z Asia/Colombo 5:19:24 - LMT 1880
  5:19:32 - MMT 1906
! 5:30 - +0530 1942 Ja 5
! 5:30 0:30 +06 1942 S
! 5:30 1 +0630 1945 O 16 2
! 5:30 - +0530 1996 May 25
! 6:30 - +0630 1996 O 26 0:30
! 6 - +06 2006 Ap 15 0:30
! 5:30 - +0530
  Z Asia/Damascus 2:25:12 - LMT 1920
  2 S EE%sT 2022 O 28
! 3 - +03
  Z Asia/Dhaka 6:1:40 - LMT 1890
  5:53:20 - HMT 1941 O
! 6:30 - +0630 1942 May 15
! 5:30 - +0530 1942 S
! 6:30 - +0630 1951 S 30
! 6 - +06 2009
! 6 BD +06/+07
! Z Asia/Dili 8:22:20 - LMT 1912
! 8 - +08 1942 F 21 23
! 9 - +09 1976 May 3
! 8 - +08 2000 S 17
! 9 - +09
  Z Asia/Dubai 3:41:12 - LMT 1920
! 4 - +04
  Z Asia/Dushanbe 4:35:12 - LMT 1924 May 2
! 5 - +05 1930 Jun 21
! 6 R +06/+07 1991 Mar 31 2s
! 5 1 +06 1991 S 9 2s
! 5 - +05
  Z Asia/Famagusta 2:15:48 - LMT 1921 N 14
  2 CY EE%sT 1998 S
  2 E EE%sT 2016 S 8
! 3 - +03 2017 O 29 1u
  2 E EE%sT
  Z Asia/Gaza 2:17:52 - LMT 1900 O
  2 Z EET/EEST 1948 May 15
--- 3020,3165 ----
  10 1 AEDT 2011
  10 AT AE%sT
  Z Antarctica/Mawson 0 - -00 1954 F 13
! 6 - %z 2009 O 18 2
! 5 - %z
  Z Antarctica/Palmer 0 - -00 1965
! -4 A %z 1969 O 5
! -3 A %z 1982 May
! -4 x %z 2016 D 4
! -3 - %z
  Z Antarctica/Rothera 0 - -00 1976 D
! -3 - %z
  Z Antarctica/Troll 0 - -00 2005 F 12
  0 Tr %s
  Z Antarctica/Vostok 0 - -00 1957 D 16
! 7 - %z 1994 F
  0 - -00 1994 N
! 7 - %z 2023 D 18 2
! 5 - %z
  Z Asia/Almaty 5:7:48 - LMT 1924 May 2
! 5 - %z 1930 Jun 21
! 6 R %z 1991 Mar 31 2s
! 5 R %z 1992 Ja 19 2s
! 6 R %z 2004 O 31 2s
! 6 - %z 2024 Mar
! 5 - %z
  Z Asia/Amman 2:23:44 - LMT 1931
  2 J EE%sT 2022 O 28 0s
! 3 - %z
  Z Asia/Anadyr 11:49:56 - LMT 1924 May 2
! 12 - %z 1930 Jun 21
! 13 R %z 1982 Ap 1 0s
! 12 R %z 1991 Mar 31 2s
! 11 R %z 1992 Ja 19 2s
! 12 R %z 2010 Mar 28 2s
! 11 R %z 2011 Mar 27 2s
! 12 - %z
  Z Asia/Aqtau 3:21:4 - LMT 1924 May 2
! 4 - %z 1930 Jun 21
! 5 - %z 1981 O
! 6 - %z 1982 Ap
! 5 R %z 1991 Mar 31 2s
! 4 R %z 1992 Ja 19 2s
! 5 R %z 1994 S 25 2s
! 4 R %z 2004 O 31 2s
! 5 - %z
  Z Asia/Aqtobe 3:48:40 - LMT 1924 May 2
! 4 - %z 1930 Jun 21
! 5 - %z 1981 Ap
! 5 1 %z 1981 O
! 6 - %z 1982 Ap
! 5 R %z 1991 Mar 31 2s
! 4 R %z 1992 Ja 19 2s
! 5 R %z 2004 O 31 2s
! 5 - %z
  Z Asia/Ashgabat 3:53:32 - LMT 1924 May 2
! 4 - %z 1930 Jun 21
! 5 R %z 1991 Mar 31 2
! 4 R %z 1992 Ja 19 2
! 5 - %z
  Z Asia/Atyrau 3:27:44 - LMT 1924 May 2
! 3 - %z 1930 Jun 21
! 5 - %z 1981 O
! 6 - %z 1982 Ap
! 5 R %z 1991 Mar 31 2s
! 4 R %z 1992 Ja 19 2s
! 5 R %z 1999 Mar 28 2s
! 4 R %z 2004 O 31 2s
! 5 - %z
  Z Asia/Baghdad 2:57:40 - LMT 1890
  2:57:36 - BMT 1918
! 3 - %z 1982 May
! 3 IQ %z
  Z Asia/Baku 3:19:24 - LMT 1924 May 2
! 3 - %z 1957 Mar
! 4 R %z 1991 Mar 31 2s
! 3 R %z 1992 S lastSu 2s
! 4 - %z 1996
! 4 E %z 1997
! 4 AZ %z
  Z Asia/Bangkok 6:42:4 - LMT 1880
  6:42:4 - BMT 1920 Ap
! 7 - %z
  Z Asia/Barnaul 5:35 - LMT 1919 D 10
! 6 - %z 1930 Jun 21
! 7 R %z 1991 Mar 31 2s
! 6 R %z 1992 Ja 19 2s
! 7 R %z 1995 May 28
! 6 R %z 2011 Mar 27 2s
! 7 - %z 2014 O 26 2s
! 6 - %z 2016 Mar 27 2s
! 7 - %z
  Z Asia/Beirut 2:22 - LMT 1880
  2 l EE%sT
  Z Asia/Bishkek 4:58:24 - LMT 1924 May 2
! 5 - %z 1930 Jun 21
! 6 R %z 1991 Mar 31 2s
! 5 R %z 1991 Au 31 2
! 5 KG %z 2005 Au 12
! 6 - %z
  Z Asia/Chita 7:33:52 - LMT 1919 D 15
! 8 - %z 1930 Jun 21
! 9 R %z 1991 Mar 31 2s
! 8 R %z 1992 Ja 19 2s
! 9 R %z 2011 Mar 27 2s
! 10 - %z 2014 O 26 2s
! 8 - %z 2016 Mar 27 2
! 9 - %z
  Z Asia/Colombo 5:19:24 - LMT 1880
  5:19:32 - MMT 1906
! 5:30 - %z 1942 Ja 5
! 5:30 0:30 %z 1942 S
! 5:30 1 %z 1945 O 16 2
! 5:30 - %z 1996 May 25
! 6:30 - %z 1996 O 26 0:30
! 6 - %z 2006 Ap 15 0:30
! 5:30 - %z
  Z Asia/Damascus 2:25:12 - LMT 1920
  2 S EE%sT 2022 O 28
! 3 - %z
  Z Asia/Dhaka 6:1:40 - LMT 1890
  5:53:20 - HMT 1941 O
! 6:30 - %z 1942 May 15
! 5:30 - %z 1942 S
! 6:30 - %z 1951 S 30
! 6 - %z 2009
! 6 BD %z
! Z Asia/Dili 8:22:20 - LMT 1911 D 31 16u
! 8 - %z 1942 F 21 23
! 9 - %z 1976 May 3
! 8 - %z 2000 S 17
! 9 - %z
  Z Asia/Dubai 3:41:12 - LMT 1920
! 4 - %z
  Z Asia/Dushanbe 4:35:12 - LMT 1924 May 2
! 5 - %z 1930 Jun 21
! 6 R %z 1991 Mar 31 2s
! 5 1 %z 1991 S 9 2s
! 5 - %z
  Z Asia/Famagusta 2:15:48 - LMT 1921 N 14
  2 CY EE%sT 1998 S
  2 E EE%sT 2016 S 8
! 3 - %z 2017 O 29 1u
  2 E EE%sT
  Z Asia/Gaza 2:17:52 - LMT 1900 O
  2 Z EET/EEST 1948 May 15
*************** Z Asia/Hebron 2:20:23 - LMT 1900 O
*** 3162,3175 ****
  2 P EE%sT
  Z Asia/Ho_Chi_Minh 7:6:30 - LMT 1906 Jul
  7:6:30 - PLMT 1911 May
! 7 - +07 1942 D 31 23
! 8 - +08 1945 Mar 14 23
! 9 - +09 1945 S 1 24
! 7 - +07 1947 Ap
! 8 - +08 1955 Jul 1 1
! 7 - +07 1959 D 31 23
! 8 - +08 1975 Jun 13
! 7 - +07
  Z Asia/Hong_Kong 7:36:42 - LMT 1904 O 29 17u
  8 - HKT 1941 Jun 15 3
  8 1 HKST 1941 O 1 4
--- 3181,3194 ----
  2 P EE%sT
  Z Asia/Ho_Chi_Minh 7:6:30 - LMT 1906 Jul
  7:6:30 - PLMT 1911 May
! 7 - %z 1942 D 31 23
! 8 - %z 1945 Mar 14 23
! 9 - %z 1945 S 1 24
! 7 - %z 1947 Ap
! 8 - %z 1955 Jul 1 1
! 7 - %z 1959 D 31 23
! 8 - %z 1975 Jun 13
! 7 - %z
  Z Asia/Hong_Kong 7:36:42 - LMT 1904 O 29 17u
  8 - HKT 1941 Jun 15 3
  8 1 HKST 1941 O 1 4
*************** Z Asia/Hong_Kong 7:36:42 - LMT 1904 O 29
*** 3177,3321 ****
  9 - JST 1945 N 18 2
  8 HK HK%sT
  Z Asia/Hovd 6:6:36 - LMT 1905 Au
! 6 - +06 1978
! 7 X +07/+08
  Z Asia/Irkutsk 6:57:5 - LMT 1880
  6:57:5 - IMT 1920 Ja 25
! 7 - +07 1930 Jun 21
! 8 R +08/+09 1991 Mar 31 2s
! 7 R +07/+08 1992 Ja 19 2s
! 8 R +08/+09 2011 Mar 27 2s
! 9 - +09 2014 O 26 2s
! 8 - +08
  Z Asia/Jakarta 7:7:12 - LMT 1867 Au 10
  7:7:12 - BMT 1923 D 31 16:40u
! 7:20 - +0720 1932 N
! 7:30 - +0730 1942 Mar 23
! 9 - +09 1945 S 23
! 7:30 - +0730 1948 May
! 8 - +08 1950 May
! 7:30 - +0730 1964
  7 - WIB
  Z Asia/Jayapura 9:22:48 - LMT 1932 N
! 9 - +09 1944 S
! 9:30 - +0930 1964
  9 - WIT
  Z Asia/Jerusalem 2:20:54 - LMT 1880
  2:20:40 - JMT 1918
  2 Z I%sT
  Z Asia/Kabul 4:36:48 - LMT 1890
! 4 - +04 1945
! 4:30 - +0430
  Z Asia/Kamchatka 10:34:36 - LMT 1922 N 10
! 11 - +11 1930 Jun 21
! 12 R +12/+13 1991 Mar 31 2s
! 11 R +11/+12 1992 Ja 19 2s
! 12 R +12/+13 2010 Mar 28 2s
! 11 R +11/+12 2011 Mar 27 2s
! 12 - +12
  Z Asia/Karachi 4:28:12 - LMT 1907
! 5:30 - +0530 1942 S
! 5:30 1 +0630 1945 O 15
! 5:30 - +0530 1951 S 30
! 5 - +05 1971 Mar 26
  5 PK PK%sT
  Z Asia/Kathmandu 5:41:16 - LMT 1920
! 5:30 - +0530 1986
! 5:45 - +0545
  Z Asia/Khandyga 9:2:13 - LMT 1919 D 15
! 8 - +08 1930 Jun 21
! 9 R +09/+10 1991 Mar 31 2s
! 8 R +08/+09 1992 Ja 19 2s
! 9 R +09/+10 2004
! 10 R +10/+11 2011 Mar 27 2s
! 11 - +11 2011 S 13 0s
! 10 - +10 2014 O 26 2s
! 9 - +09
  Z Asia/Kolkata 5:53:28 - LMT 1854 Jun 28
  5:53:20 - HMT 1870
  5:21:10 - MMT 1906
  5:30 - IST 1941 O
! 5:30 1 +0630 1942 May 15
  5:30 - IST 1942 S
! 5:30 1 +0630 1945 O 15
  5:30 - IST
  Z Asia/Krasnoyarsk 6:11:26 - LMT 1920 Ja 6
! 6 - +06 1930 Jun 21
! 7 R +07/+08 1991 Mar 31 2s
! 6 R +06/+07 1992 Ja 19 2s
! 7 R +07/+08 2011 Mar 27 2s
! 8 - +08 2014 O 26 2s
! 7 - +07
  Z Asia/Kuching 7:21:20 - LMT 1926 Mar
! 7:30 - +0730 1933
! 8 NB +08/+0820 1942 F 16
! 9 - +09 1945 S 12
! 8 - +08
  Z Asia/Macau 7:34:10 - LMT 1904 O 30
  8 - CST 1941 D 21 23
! 9 _ +09/+10 1945 S 30 24
  8 _ C%sT
  Z Asia/Magadan 10:3:12 - LMT 1924 May 2
! 10 - +10 1930 Jun 21
! 11 R +11/+12 1991 Mar 31 2s
! 10 R +10/+11 1992 Ja 19 2s
! 11 R +11/+12 2011 Mar 27 2s
! 12 - +12 2014 O 26 2s
! 10 - +10 2016 Ap 24 2s
! 11 - +11
  Z Asia/Makassar 7:57:36 - LMT 1920
  7:57:36 - MMT 1932 N
! 8 - +08 1942 F 9
! 9 - +09 1945 S 23
  8 - WITA
! Z Asia/Manila -15:56 - LMT 1844 D 31
! 8:4 - LMT 1899 May 11
! 8 PH P%sT 1942 May
! 9 - JST 1944 N
  8 PH P%sT
  Z Asia/Nicosia 2:13:28 - LMT 1921 N 14
  2 CY EE%sT 1998 S
  2 E EE%sT
  Z Asia/Novokuznetsk 5:48:48 - LMT 1924 May
! 6 - +06 1930 Jun 21
! 7 R +07/+08 1991 Mar 31 2s
! 6 R +06/+07 1992 Ja 19 2s
! 7 R +07/+08 2010 Mar 28 2s
! 6 R +06/+07 2011 Mar 27 2s
! 7 - +07
  Z Asia/Novosibirsk 5:31:40 - LMT 1919 D 14 6
! 6 - +06 1930 Jun 21
! 7 R +07/+08 1991 Mar 31 2s
! 6 R +06/+07 1992 Ja 19 2s
! 7 R +07/+08 1993 May 23
! 6 R +06/+07 2011 Mar 27 2s
! 7 - +07 2014 O 26 2s
! 6 - +06 2016 Jul 24 2s
! 7 - +07
  Z Asia/Omsk 4:53:30 - LMT 1919 N 14
! 5 - +05 1930 Jun 21
! 6 R +06/+07 1991 Mar 31 2s
! 5 R +05/+06 1992 Ja 19 2s
! 6 R +06/+07 2011 Mar 27 2s
! 7 - +07 2014 O 26 2s
! 6 - +06
  Z Asia/Oral 3:25:24 - LMT 1924 May 2
! 3 - +03 1930 Jun 21
! 5 - +05 1981 Ap
! 5 1 +06 1981 O
! 6 - +06 1982 Ap
! 5 R +05/+06 1989 Mar 26 2s
! 4 R +04/+05 1992 Ja 19 2s
! 5 R +05/+06 1992 Mar 29 2s
! 4 R +04/+05 2004 O 31 2s
! 5 - +05
  Z Asia/Pontianak 7:17:20 - LMT 1908 May
  7:17:20 - PMT 1932 N
! 7:30 - +0730 1942 Ja 29
! 9 - +09 1945 S 23
! 7:30 - +0730 1948 May
! 8 - +08 1950 May
! 7:30 - +0730 1964
  8 - WITA 1988
  7 - WIB
  Z Asia/Pyongyang 8:23 - LMT 1908 Ap
--- 3196,3340 ----
  9 - JST 1945 N 18 2
  8 HK HK%sT
  Z Asia/Hovd 6:6:36 - LMT 1905 Au
! 6 - %z 1978
! 7 X %z
  Z Asia/Irkutsk 6:57:5 - LMT 1880
  6:57:5 - IMT 1920 Ja 25
! 7 - %z 1930 Jun 21
! 8 R %z 1991 Mar 31 2s
! 7 R %z 1992 Ja 19 2s
! 8 R %z 2011 Mar 27 2s
! 9 - %z 2014 O 26 2s
! 8 - %z
  Z Asia/Jakarta 7:7:12 - LMT 1867 Au 10
  7:7:12 - BMT 1923 D 31 16:40u
! 7:20 - %z 1932 N
! 7:30 - %z 1942 Mar 23
! 9 - %z 1945 S 23
! 7:30 - %z 1948 May
! 8 - %z 1950 May
! 7:30 - %z 1964
  7 - WIB
  Z Asia/Jayapura 9:22:48 - LMT 1932 N
! 9 - %z 1944 S
! 9:30 - %z 1964
  9 - WIT
  Z Asia/Jerusalem 2:20:54 - LMT 1880
  2:20:40 - JMT 1918
  2 Z I%sT
  Z Asia/Kabul 4:36:48 - LMT 1890
! 4 - %z 1945
! 4:30 - %z
  Z Asia/Kamchatka 10:34:36 - LMT 1922 N 10
! 11 - %z 1930 Jun 21
! 12 R %z 1991 Mar 31 2s
! 11 R %z 1992 Ja 19 2s
! 12 R %z 2010 Mar 28 2s
! 11 R %z 2011 Mar 27 2s
! 12 - %z
  Z Asia/Karachi 4:28:12 - LMT 1907
! 5:30 - %z 1942 S
! 5:30 1 %z 1945 O 15
! 5:30 - %z 1951 S 30
! 5 - %z 1971 Mar 26
  5 PK PK%sT
  Z Asia/Kathmandu 5:41:16 - LMT 1920
! 5:30 - %z 1986
! 5:45 - %z
  Z Asia/Khandyga 9:2:13 - LMT 1919 D 15
! 8 - %z 1930 Jun 21
! 9 R %z 1991 Mar 31 2s
! 8 R %z 1992 Ja 19 2s
! 9 R %z 2004
! 10 R %z 2011 Mar 27 2s
! 11 - %z 2011 S 13 0s
! 10 - %z 2014 O 26 2s
! 9 - %z
  Z Asia/Kolkata 5:53:28 - LMT 1854 Jun 28
  5:53:20 - HMT 1870
  5:21:10 - MMT 1906
  5:30 - IST 1941 O
! 5:30 1 %z 1942 May 15
  5:30 - IST 1942 S
! 5:30 1 %z 1945 O 15
  5:30 - IST
  Z Asia/Krasnoyarsk 6:11:26 - LMT 1920 Ja 6
! 6 - %z 1930 Jun 21
! 7 R %z 1991 Mar 31 2s
! 6 R %z 1992 Ja 19 2s
! 7 R %z 2011 Mar 27 2s
! 8 - %z 2014 O 26 2s
! 7 - %z
  Z Asia/Kuching 7:21:20 - LMT 1926 Mar
! 7:30 - %z 1933
! 8 NB %z 1942 F 16
! 9 - %z 1945 S 12
! 8 - %z
  Z Asia/Macau 7:34:10 - LMT 1904 O 30
  8 - CST 1941 D 21 23
! 9 _ %z 1945 S 30 24
  8 _ C%sT
  Z Asia/Magadan 10:3:12 - LMT 1924 May 2
! 10 - %z 1930 Jun 21
! 11 R %z 1991 Mar 31 2s
! 10 R %z 1992 Ja 19 2s
! 11 R %z 2011 Mar 27 2s
! 12 - %z 2014 O 26 2s
! 10 - %z 2016 Ap 24 2s
! 11 - %z
  Z Asia/Makassar 7:57:36 - LMT 1920
  7:57:36 - MMT 1932 N
! 8 - %z 1942 F 9
! 9 - %z 1945 S 23
  8 - WITA
! Z Asia/Manila -15:56:8 - LMT 1844 D 31
! 8:3:52 - LMT 1899 S 6 4u
! 8 PH P%sT 1942 F 11 24
! 9 - JST 1945 Mar 4
  8 PH P%sT
  Z Asia/Nicosia 2:13:28 - LMT 1921 N 14
  2 CY EE%sT 1998 S
  2 E EE%sT
  Z Asia/Novokuznetsk 5:48:48 - LMT 1924 May
! 6 - %z 1930 Jun 21
! 7 R %z 1991 Mar 31 2s
! 6 R %z 1992 Ja 19 2s
! 7 R %z 2010 Mar 28 2s
! 6 R %z 2011 Mar 27 2s
! 7 - %z
  Z Asia/Novosibirsk 5:31:40 - LMT 1919 D 14 6
! 6 - %z 1930 Jun 21
! 7 R %z 1991 Mar 31 2s
! 6 R %z 1992 Ja 19 2s
! 7 R %z 1993 May 23
! 6 R %z 2011 Mar 27 2s
! 7 - %z 2014 O 26 2s
! 6 - %z 2016 Jul 24 2s
! 7 - %z
  Z Asia/Omsk 4:53:30 - LMT 1919 N 14
! 5 - %z 1930 Jun 21
! 6 R %z 1991 Mar 31 2s
! 5 R %z 1992 Ja 19 2s
! 6 R %z 2011 Mar 27 2s
! 7 - %z 2014 O 26 2s
! 6 - %z
  Z Asia/Oral 3:25:24 - LMT 1924 May 2
! 3 - %z 1930 Jun 21
! 5 - %z 1981 Ap
! 5 1 %z 1981 O
! 6 - %z 1982 Ap
! 5 R %z 1989 Mar 26 2s
! 4 R %z 1992 Ja 19 2s
! 5 R %z 1992 Mar 29 2s
! 4 R %z 2004 O 31 2s
! 5 - %z
  Z Asia/Pontianak 7:17:20 - LMT 1908 May
  7:17:20 - PMT 1932 N
! 7:30 - %z 1942 Ja 29
! 9 - %z 1945 S 23
! 7:30 - %z 1948 May
! 8 - %z 1950 May
! 7:30 - %z 1964
  8 - WITA 1988
  7 - WIB
  Z Asia/Pyongyang 8:23 - LMT 1908 Ap
*************** Z Asia/Pyongyang 8:23 - LMT 1908 Ap
*** 3325,3372 ****
  8:30 - KST 2018 May 4 23:30
  9 - KST
  Z Asia/Qatar 3:26:8 - LMT 1920
! 4 - +04 1972 Jun
! 3 - +03
  Z Asia/Qostanay 4:14:28 - LMT 1924 May 2
! 4 - +04 1930 Jun 21
! 5 - +05 1981 Ap
! 5 1 +06 1981 O
! 6 - +06 1982 Ap
! 5 R +05/+06 1991 Mar 31 2s
! 4 R +04/+05 1992 Ja 19 2s
! 5 R +05/+06 2004 O 31 2s
! 6 - +06 2024 Mar
! 5 - +05
  Z Asia/Qyzylorda 4:21:52 - LMT 1924 May 2
! 4 - +04 1930 Jun 21
! 5 - +05 1981 Ap
! 5 1 +06 1981 O
! 6 - +06 1982 Ap
! 5 R +05/+06 1991 Mar 31 2s
! 4 R +04/+05 1991 S 29 2s
! 5 R +05/+06 1992 Ja 19 2s
! 6 R +06/+07 1992 Mar 29 2s
! 5 R +05/+06 2004 O 31 2s
! 6 - +06 2018 D 21
! 5 - +05
  Z Asia/Riyadh 3:6:52 - LMT 1947 Mar 14
! 3 - +03
  Z Asia/Sakhalin 9:30:48 - LMT 1905 Au 23
! 9 - +09 1945 Au 25
! 11 R +11/+12 1991 Mar 31 2s
! 10 R +10/+11 1992 Ja 19 2s
! 11 R +11/+12 1997 Mar lastSu 2s
! 10 R +10/+11 2011 Mar 27 2s
! 11 - +11 2014 O 26 2s
! 10 - +10 2016 Mar 27 2s
! 11 - +11
  Z Asia/Samarkand 4:27:53 - LMT 1924 May 2
! 4 - +04 1930 Jun 21
! 5 - +05 1981 Ap
! 5 1 +06 1981 O
! 6 - +06 1982 Ap
! 5 R +05/+06 1992
! 5 - +05
  Z Asia/Seoul 8:27:52 - LMT 1908 Ap
  8:30 - KST 1912
  9 - JST 1945 S 8
--- 3344,3391 ----
  8:30 - KST 2018 May 4 23:30
  9 - KST
  Z Asia/Qatar 3:26:8 - LMT 1920
! 4 - %z 1972 Jun
! 3 - %z
  Z Asia/Qostanay 4:14:28 - LMT 1924 May 2
! 4 - %z 1930 Jun 21
! 5 - %z 1981 Ap
! 5 1 %z 1981 O
! 6 - %z 1982 Ap
! 5 R %z 1991 Mar 31 2s
! 4 R %z 1992 Ja 19 2s
! 5 R %z 2004 O 31 2s
! 6 - %z 2024 Mar
! 5 - %z
  Z Asia/Qyzylorda 4:21:52 - LMT 1924 May 2
! 4 - %z 1930 Jun 21
! 5 - %z 1981 Ap
! 5 1 %z 1981 O
! 6 - %z 1982 Ap
! 5 R %z 1991 Mar 31 2s
! 4 R %z 1991 S 29 2s
! 5 R %z 1992 Ja 19 2s
! 6 R %z 1992 Mar 29 2s
! 5 R %z 2004 O 31 2s
! 6 - %z 2018 D 21
! 5 - %z
  Z Asia/Riyadh 3:6:52 - LMT 1947 Mar 14
! 3 - %z
  Z Asia/Sakhalin 9:30:48 - LMT 1905 Au 23
! 9 - %z 1945 Au 25
! 11 R %z 1991 Mar 31 2s
! 10 R %z 1992 Ja 19 2s
! 11 R %z 1997 Mar lastSu 2s
! 10 R %z 2011 Mar 27 2s
! 11 - %z 2014 O 26 2s
! 10 - %z 2016 Mar 27 2s
! 11 - %z
  Z Asia/Samarkand 4:27:53 - LMT 1924 May 2
! 4 - %z 1930 Jun 21
! 5 - %z 1981 Ap
! 5 1 %z 1981 O
! 6 - %z 1982 Ap
! 5 R %z 1992
! 5 - %z
  Z Asia/Seoul 8:27:52 - LMT 1908 Ap
  8:30 - KST 1912
  9 - JST 1945 S 8
*************** Z Asia/Shanghai 8:5:43 - LMT 1901
*** 3378,3538 ****
  8 CN C%sT
  Z Asia/Singapore 6:55:25 - LMT 1901
  6:55:25 - SMT 1905 Jun
! 7 - +07 1933
! 7 0:20 +0720 1936
! 7:20 - +0720 1941 S
! 7:30 - +0730 1942 F 16
! 9 - +09 1945 S 12
! 7:30 - +0730 1981 D 31 16u
! 8 - +08
  Z Asia/Srednekolymsk 10:14:52 - LMT 1924 May 2
! 10 - +10 1930 Jun 21
! 11 R +11/+12 1991 Mar 31 2s
! 10 R +10/+11 1992 Ja 19 2s
! 11 R +11/+12 2011 Mar 27 2s
! 12 - +12 2014 O 26 2s
! 11 - +11
  Z Asia/Taipei 8:6 - LMT 1896
  8 - CST 1937 O
  9 - JST 1945 S 21 1
  8 f C%sT
  Z Asia/Tashkent 4:37:11 - LMT 1924 May 2
! 5 - +05 1930 Jun 21
! 6 R +06/+07 1991 Mar 31 2
! 5 R +05/+06 1992
! 5 - +05
  Z Asia/Tbilisi 2:59:11 - LMT 1880
  2:59:11 - TBMT 1924 May 2
! 3 - +03 1957 Mar
! 4 R +04/+05 1991 Mar 31 2s
! 3 R +03/+04 1992
! 3 e +03/+04 1994 S lastSu
! 4 e +04/+05 1996 O lastSu
! 4 1 +05 1997 Mar lastSu
! 4 e +04/+05 2004 Jun 27
! 3 R +03/+04 2005 Mar lastSu 2
! 4 - +04
  Z Asia/Tehran 3:25:44 - LMT 1916
  3:25:44 - TMT 1935 Jun 13
! 3:30 i +0330/+0430 1977 O 20 24
! 4 i +04/+05 1979
! 3:30 i +0330/+0430
  Z Asia/Thimphu 5:58:36 - LMT 1947 Au 15
! 5:30 - +0530 1987 O
! 6 - +06
  Z Asia/Tokyo 9:18:59 - LMT 1887 D 31 15u
  9 JP J%sT
  Z Asia/Tomsk 5:39:51 - LMT 1919 D 22
! 6 - +06 1930 Jun 21
! 7 R +07/+08 1991 Mar 31 2s
! 6 R +06/+07 1992 Ja 19 2s
! 7 R +07/+08 2002 May 1 3
! 6 R +06/+07 2011 Mar 27 2s
! 7 - +07 2014 O 26 2s
! 6 - +06 2016 May 29 2s
! 7 - +07
  Z Asia/Ulaanbaatar 7:7:32 - LMT 1905 Au
! 7 - +07 1978
! 8 X +08/+09
  Z Asia/Urumqi 5:50:20 - LMT 1928
! 6 - +06
  Z Asia/Ust-Nera 9:32:54 - LMT 1919 D 15
! 8 - +08 1930 Jun 21
! 9 R +09/+10 1981 Ap
! 11 R +11/+12 1991 Mar 31 2s
! 10 R +10/+11 1992 Ja 19 2s
! 11 R +11/+12 2011 Mar 27 2s
! 12 - +12 2011 S 13 0s
! 11 - +11 2014 O 26 2s
! 10 - +10
  Z Asia/Vladivostok 8:47:31 - LMT 1922 N 15
! 9 - +09 1930 Jun 21
! 10 R +10/+11 1991 Mar 31 2s
! 9 R +09/+10 1992 Ja 19 2s
! 10 R +10/+11 2011 Mar 27 2s
! 11 - +11 2014 O 26 2s
! 10 - +10
  Z Asia/Yakutsk 8:38:58 - LMT 1919 D 15
! 8 - +08 1930 Jun 21
! 9 R +09/+10 1991 Mar 31 2s
! 8 R +08/+09 1992 Ja 19 2s
! 9 R +09/+10 2011 Mar 27 2s
! 10 - +10 2014 O 26 2s
! 9 - +09
  Z Asia/Yangon 6:24:47 - LMT 1880
  6:24:47 - RMT 1920
! 6:30 - +0630 1942 May
! 9 - +09 1945 May 3
! 6:30 - +0630
  Z Asia/Yekaterinburg 4:2:33 - LMT 1916 Jul 3
  3:45:5 - PMT 1919 Jul 15 4
! 4 - +04 1930 Jun 21
! 5 R +05/+06 1991 Mar 31 2s
! 4 R +04/+05 1992 Ja 19 2s
! 5 R +05/+06 2011 Mar 27 2s
! 6 - +06 2014 O 26 2s
! 5 - +05
  Z Asia/Yerevan 2:58 - LMT 1924 May 2
! 3 - +03 1957 Mar
! 4 R +04/+05 1991 Mar 31 2s
! 3 R +03/+04 1995 S 24 2s
! 4 - +04 1997
! 4 R +04/+05 2011
! 4 AM +04/+05
  Z Atlantic/Azores -1:42:40 - LMT 1884
  -1:54:32 - HMT 1912 Ja 1 2u
! -2 p -02/-01 1942 Ap 25 22s
! -2 p +00 1942 Au 15 22s
! -2 p -02/-01 1943 Ap 17 22s
! -2 p +00 1943 Au 28 22s
! -2 p -02/-01 1944 Ap 22 22s
! -2 p +00 1944 Au 26 22s
! -2 p -02/-01 1945 Ap 21 22s
! -2 p +00 1945 Au 25 22s
! -2 p -02/-01 1966 Ap 3 2
! -1 p -01/+00 1983 S 25 1s
! -1 W- -01/+00 1992 S 27 1s
! 0 E WE%sT 1993 Mar 28 1u
! -1 E -01/+00
  Z Atlantic/Bermuda -4:19:18 - LMT 1890
  -4:19:18 Be BMT/BST 1930 Ja 1 2
  -4 Be A%sT 1974 Ap 28 2
  -4 C A%sT 1976
  -4 u A%sT
  Z Atlantic/Canary -1:1:36 - LMT 1922 Mar
! -1 - -01 1946 S 30 1
  0 - WET 1980 Ap 6 0s
  0 1 WEST 1980 S 28 1u
  0 E WE%sT
  Z Atlantic/Cape_Verde -1:34:4 - LMT 1912 Ja 1 2u
! -2 - -02 1942 S
! -2 1 -01 1945 O 15
! -2 - -02 1975 N 25 2
! -1 - -01
  Z Atlantic/Faroe -0:27:4 - LMT 1908 Ja 11
  0 - WET 1981
  0 E WE%sT
  Z Atlantic/Madeira -1:7:36 - LMT 1884
  -1:7:36 - FMT 1912 Ja 1 1u
! -1 p -01/+00 1942 Ap 25 22s
! -1 p +01 1942 Au 15 22s
! -1 p -01/+00 1943 Ap 17 22s
! -1 p +01 1943 Au 28 22s
! -1 p -01/+00 1944 Ap 22 22s
! -1 p +01 1944 Au 26 22s
! -1 p -01/+00 1945 Ap 21 22s
! -1 p +01 1945 Au 25 22s
! -1 p -01/+00 1966 Ap 3 2
! 0 p WE%sT 1983 S 25 1s
  0 E WE%sT
  Z Atlantic/South_Georgia -2:26:8 - LMT 1890
! -2 - -02
  Z Atlantic/Stanley -3:51:24 - LMT 1890
  -3:51:24 - SMT 1912 Mar 12
! -4 FK -04/-03 1983 May
! -3 FK -03/-02 1985 S 15
! -4 FK -04/-03 2010 S 5 2
! -3 - -03
  Z Australia/Adelaide 9:14:20 - LMT 1895 F
  9 - ACST 1899 May
  9:30 AU AC%sT 1971
--- 3397,3543 ----
  8 CN C%sT
  Z Asia/Singapore 6:55:25 - LMT 1901
  6:55:25 - SMT 1905 Jun
! 7 - %z 1933
! 7 0:20 %z 1936
! 7:20 - %z 1941 S
! 7:30 - %z 1942 F 16
! 9 - %z 1945 S 12
! 7:30 - %z 1981 D 31 16u
! 8 - %z
  Z Asia/Srednekolymsk 10:14:52 - LMT 1924 May 2
! 10 - %z 1930 Jun 21
! 11 R %z 1991 Mar 31 2s
! 10 R %z 1992 Ja 19 2s
! 11 R %z 2011 Mar 27 2s
! 12 - %z 2014 O 26 2s
! 11 - %z
  Z Asia/Taipei 8:6 - LMT 1896
  8 - CST 1937 O
  9 - JST 1945 S 21 1
  8 f C%sT
  Z Asia/Tashkent 4:37:11 - LMT 1924 May 2
! 5 - %z 1930 Jun 21
! 6 R %z 1991 Mar 31 2
! 5 R %z 1992
! 5 - %z
  Z Asia/Tbilisi 2:59:11 - LMT 1880
  2:59:11 - TBMT 1924 May 2
! 3 - %z 1957 Mar
! 4 R %z 1991 Mar 31 2s
! 3 R %z 1992
! 3 e %z 1994 S lastSu
! 4 e %z 1996 O lastSu
! 4 1 %z 1997 Mar lastSu
! 4 e %z 2004 Jun 27
! 3 R %z 2005 Mar lastSu 2
! 4 - %z
  Z Asia/Tehran 3:25:44 - LMT 1916
  3:25:44 - TMT 1935 Jun 13
! 3:30 i %z 1977 O 20 24
! 4 i %z 1978 N 10 24
! 3:30 i %z
  Z Asia/Thimphu 5:58:36 - LMT 1947 Au 15
! 5:30 - %z 1987 O
! 6 - %z
  Z Asia/Tokyo 9:18:59 - LMT 1887 D 31 15u
  9 JP J%sT
  Z Asia/Tomsk 5:39:51 - LMT 1919 D 22
! 6 - %z 1930 Jun 21
! 7 R %z 1991 Mar 31 2s
! 6 R %z 1992 Ja 19 2s
! 7 R %z 2002 May 1 3
! 6 R %z 2011 Mar 27 2s
! 7 - %z 2014 O 26 2s
! 6 - %z 2016 May 29 2s
! 7 - %z
  Z Asia/Ulaanbaatar 7:7:32 - LMT 1905 Au
! 7 - %z 1978
! 8 X %z
  Z Asia/Urumqi 5:50:20 - LMT 1928
! 6 - %z
  Z Asia/Ust-Nera 9:32:54 - LMT 1919 D 15
! 8 - %z 1930 Jun 21
! 9 R %z 1981 Ap
! 11 R %z 1991 Mar 31 2s
! 10 R %z 1992 Ja 19 2s
! 11 R %z 2011 Mar 27 2s
! 12 - %z 2011 S 13 0s
! 11 - %z 2014 O 26 2s
! 10 - %z
  Z Asia/Vladivostok 8:47:31 - LMT 1922 N 15
! 9 - %z 1930 Jun 21
! 10 R %z 1991 Mar 31 2s
! 9 R %z 1992 Ja 19 2s
! 10 R %z 2011 Mar 27 2s
! 11 - %z 2014 O 26 2s
! 10 - %z
  Z Asia/Yakutsk 8:38:58 - LMT 1919 D 15
! 8 - %z 1930 Jun 21
! 9 R %z 1991 Mar 31 2s
! 8 R %z 1992 Ja 19 2s
! 9 R %z 2011 Mar 27 2s
! 10 - %z 2014 O 26 2s
! 9 - %z
  Z Asia/Yangon 6:24:47 - LMT 1880
  6:24:47 - RMT 1920
! 6:30 - %z 1942 May
! 9 - %z 1945 May 3
! 6:30 - %z
  Z Asia/Yekaterinburg 4:2:33 - LMT 1916 Jul 3
  3:45:5 - PMT 1919 Jul 15 4
! 4 - %z 1930 Jun 21
! 5 R %z 1991 Mar 31 2s
! 4 R %z 1992 Ja 19 2s
! 5 R %z 2011 Mar 27 2s
! 6 - %z 2014 O 26 2s
! 5 - %z
  Z Asia/Yerevan 2:58 - LMT 1924 May 2
! 3 - %z 1957 Mar
! 4 R %z 1991 Mar 31 2s
! 3 R %z 1995 S 24 2s
! 4 - %z 1997
! 4 R %z 2011
! 4 AM %z
  Z Atlantic/Azores -1:42:40 - LMT 1884
  -1:54:32 - HMT 1912 Ja 1 2u
! -2 p %z 1966 O 2 2s
! -1 - %z 1982 Mar 28 0s
! -1 p %z 1986
! -1 E %z 1992 D 27 1s
! 0 E WE%sT 1993 Jun 17 1u
! -1 E %z
  Z Atlantic/Bermuda -4:19:18 - LMT 1890
  -4:19:18 Be BMT/BST 1930 Ja 1 2
  -4 Be A%sT 1974 Ap 28 2
  -4 C A%sT 1976
  -4 u A%sT
  Z Atlantic/Canary -1:1:36 - LMT 1922 Mar
! -1 - %z 1946 S 30 1
  0 - WET 1980 Ap 6 0s
  0 1 WEST 1980 S 28 1u
  0 E WE%sT
  Z Atlantic/Cape_Verde -1:34:4 - LMT 1912 Ja 1 2u
! -2 - %z 1942 S
! -2 1 %z 1945 O 15
! -2 - %z 1975 N 25 2
! -1 - %z
  Z Atlantic/Faroe -0:27:4 - LMT 1908 Ja 11
  0 - WET 1981
  0 E WE%sT
  Z Atlantic/Madeira -1:7:36 - LMT 1884
  -1:7:36 - FMT 1912 Ja 1 1u
! -1 p %z 1966 O 2 2s
! 0 - WET 1982 Ap 4
! 0 p WE%sT 1986 Jul 31
  0 E WE%sT
  Z Atlantic/South_Georgia -2:26:8 - LMT 1890
! -2 - %z
  Z Atlantic/Stanley -3:51:24 - LMT 1890
  -3:51:24 - SMT 1912 Mar 12
! -4 FK %z 1983 May
! -3 FK %z 1985 S 15
! -4 FK %z 2010 S 5 2
! -3 - %z
  Z Australia/Adelaide 9:14:20 - LMT 1895 F
  9 - ACST 1899 May
  9:30 AU AC%sT 1971
*************** Z Australia/Darwin 8:43:20 - LMT 1895 F
*** 3550,3557 ****
  9 - ACST 1899 May
  9:30 AU AC%sT
  Z Australia/Eucla 8:35:28 - LMT 1895 D
! 8:45 AU +0845/+0945 1943 Jul
! 8:45 AW +0845/+0945
  Z Australia/Hobart 9:49:16 - LMT 1895 S
  10 AT AE%sT 1919 O 24
  10 AU AE%sT 1967
--- 3555,3562 ----
  9 - ACST 1899 May
  9:30 AU AC%sT
  Z Australia/Eucla 8:35:28 - LMT 1895 D
! 8:45 AU %z 1943 Jul
! 8:45 AW %z
  Z Australia/Hobart 9:49:16 - LMT 1895 S
  10 AT AE%sT 1919 O 24
  10 AU AE%sT 1967
*************** Z Australia/Lindeman 9:55:56 - LMT 1895
*** 3562,3569 ****
  10 Ho AE%sT
  Z Australia/Lord_Howe 10:36:20 - LMT 1895 F
  10 - AEST 1981 Mar
! 10:30 LH +1030/+1130 1985 Jul
! 10:30 LH +1030/+11
  Z Australia/Melbourne 9:39:52 - LMT 1895 F
  10 AU AE%sT 1971
  10 AV AE%sT
--- 3567,3574 ----
  10 Ho AE%sT
  Z Australia/Lord_Howe 10:36:20 - LMT 1895 F
  10 - AEST 1981 Mar
! 10:30 LH %z 1985 Jul
! 10:30 LH %z
  Z Australia/Melbourne 9:39:52 - LMT 1895 F
  10 AU AE%sT 1971
  10 AV AE%sT
*************** Z Australia/Perth 7:43:24 - LMT 1895 D
*** 3573,3624 ****
  Z Australia/Sydney 10:4:52 - LMT 1895 F
  10 AU AE%sT 1971
  10 AN AE%sT
- Z CET 1 c CE%sT
- Z CST6CDT -6 u C%sT
- Z EET 2 E EE%sT
- Z EST -5 - EST
- Z EST5EDT -5 u E%sT
  Z Etc/GMT 0 - GMT
! Z Etc/GMT+1 -1 - -01
! Z Etc/GMT+10 -10 - -10
! Z Etc/GMT+11 -11 - -11
! Z Etc/GMT+12 -12 - -12
! Z Etc/GMT+2 -2 - -02
! Z Etc/GMT+3 -3 - -03
! Z Etc/GMT+4 -4 - -04
! Z Etc/GMT+5 -5 - -05
! Z Etc/GMT+6 -6 - -06
! Z Etc/GMT+7 -7 - -07
! Z Etc/GMT+8 -8 - -08
! Z Etc/GMT+9 -9 - -09
! Z Etc/GMT-1 1 - +01
! Z Etc/GMT-10 10 - +10
! Z Etc/GMT-11 11 - +11
! Z Etc/GMT-12 12 - +12
! Z Etc/GMT-13 13 - +13
! Z Etc/GMT-14 14 - +14
! Z Etc/GMT-2 2 - +02
! Z Etc/GMT-3 3 - +03
! Z Etc/GMT-4 4 - +04
! Z Etc/GMT-5 5 - +05
! Z Etc/GMT-6 6 - +06
! Z Etc/GMT-7 7 - +07
! Z Etc/GMT-8 8 - +08
! Z Etc/GMT-9 9 - +09
  Z Etc/UTC 0 - UTC
  Z Europe/Andorra 0:6:4 - LMT 1901
  0 - WET 1946 S 30
  1 - CET 1985 Mar 31 2
  1 E CE%sT
  Z Europe/Astrakhan 3:12:12 - LMT 1924 May
! 3 - +03 1930 Jun 21
! 4 R +04/+05 1989 Mar 26 2s
! 3 R +03/+04 1991 Mar 31 2s
! 4 - +04 1992 Mar 29 2s
! 3 R +03/+04 2011 Mar 27 2s
! 4 - +04 2014 O 26 2s
! 3 - +03 2016 Mar 27 2s
! 4 - +04
  Z Europe/Athens 1:34:52 - LMT 1895 S 14
  1:34:52 - AMT 1916 Jul 28 0:1
  2 g EE%sT 1941 Ap 30
--- 3578,3624 ----
  Z Australia/Sydney 10:4:52 - LMT 1895 F
  10 AU AE%sT 1971
  10 AN AE%sT
  Z Etc/GMT 0 - GMT
! Z Etc/GMT+1 -1 - %z
! Z Etc/GMT+10 -10 - %z
! Z Etc/GMT+11 -11 - %z
! Z Etc/GMT+12 -12 - %z
! Z Etc/GMT+2 -2 - %z
! Z Etc/GMT+3 -3 - %z
! Z Etc/GMT+4 -4 - %z
! Z Etc/GMT+5 -5 - %z
! Z Etc/GMT+6 -6 - %z
! Z Etc/GMT+7 -7 - %z
! Z Etc/GMT+8 -8 - %z
! Z Etc/GMT+9 -9 - %z
! Z Etc/GMT-1 1 - %z
! Z Etc/GMT-10 10 - %z
! Z Etc/GMT-11 11 - %z
! Z Etc/GMT-12 12 - %z
! Z Etc/GMT-13 13 - %z
! Z Etc/GMT-14 14 - %z
! Z Etc/GMT-2 2 - %z
! Z Etc/GMT-3 3 - %z
! Z Etc/GMT-4 4 - %z
! Z Etc/GMT-5 5 - %z
! Z Etc/GMT-6 6 - %z
! Z Etc/GMT-7 7 - %z
! Z Etc/GMT-8 8 - %z
! Z Etc/GMT-9 9 - %z
  Z Etc/UTC 0 - UTC
  Z Europe/Andorra 0:6:4 - LMT 1901
  0 - WET 1946 S 30
  1 - CET 1985 Mar 31 2
  1 E CE%sT
  Z Europe/Astrakhan 3:12:12 - LMT 1924 May
! 3 - %z 1930 Jun 21
! 4 R %z 1989 Mar 26 2s
! 3 R %z 1991 Mar 31 2s
! 4 - %z 1992 Mar 29 2s
! 3 R %z 2011 Mar 27 2s
! 4 - %z 2014 O 26 2s
! 3 - %z 2016 Mar 27 2s
! 4 - %z
  Z Europe/Athens 1:34:52 - LMT 1895 S 14
  1:34:52 - AMT 1916 Jul 28 0:1
  2 g EE%sT 1941 Ap 30
*************** Z Europe/Helsinki 1:39:49 - LMT 1878 May
*** 3691,3697 ****
  Z Europe/Istanbul 1:55:52 - LMT 1880
  1:56:56 - IMT 1910 O
  2 T EE%sT 1978 Jun 29
! 3 T +03/+04 1984 N 1 2
  2 T EE%sT 2007
  2 E EE%sT 2011 Mar 27 1u
  2 - EET 2011 Mar 28 1u
--- 3691,3697 ----
  Z Europe/Istanbul 1:55:52 - LMT 1880
  1:56:56 - IMT 1910 O
  2 T EE%sT 1978 Jun 29
! 3 T %z 1984 N 1 2
  2 T EE%sT 2007
  2 E EE%sT 2011 Mar 27 1u
  2 - EET 2011 Mar 28 1u
*************** Z Europe/Istanbul 1:55:52 - LMT 1880
*** 3700,3718 ****
  2 E EE%sT 2015 O 25 1u
  2 1 EEST 2015 N 8 1u
  2 E EE%sT 2016 S 7
! 3 - +03
  Z Europe/Kaliningrad 1:22 - LMT 1893 Ap
  1 c CE%sT 1945 Ap 10
  2 O EE%sT 1946 Ap 7
  3 R MSK/MSD 1989 Mar 26 2s
  2 R EE%sT 2011 Mar 27 2s
! 3 - +03 2014 O 26 2s
  2 - EET
  Z Europe/Kirov 3:18:48 - LMT 1919 Jul 1 0u
! 3 - +03 1930 Jun 21
! 4 R +04/+05 1989 Mar 26 2s
  3 R MSK/MSD 1991 Mar 31 2s
! 4 - +04 1992 Mar 29 2s
  3 R MSK/MSD 2011 Mar 27 2s
  4 - MSK 2014 O 26 2s
  3 - MSK
--- 3700,3718 ----
  2 E EE%sT 2015 O 25 1u
  2 1 EEST 2015 N 8 1u
  2 E EE%sT 2016 S 7
! 3 - %z
  Z Europe/Kaliningrad 1:22 - LMT 1893 Ap
  1 c CE%sT 1945 Ap 10
  2 O EE%sT 1946 Ap 7
  3 R MSK/MSD 1989 Mar 26 2s
  2 R EE%sT 2011 Mar 27 2s
! 3 - %z 2014 O 26 2s
  2 - EET
  Z Europe/Kirov 3:18:48 - LMT 1919 Jul 1 0u
! 3 - %z 1930 Jun 21
! 4 R %z 1989 Mar 26 2s
  3 R MSK/MSD 1991 Mar 31 2s
! 4 - %z 1992 Mar 29 2s
  3 R MSK/MSD 2011 Mar 27 2s
  4 - MSK 2014 O 26 2s
  3 - MSK
*************** Z Europe/Kyiv 2:2:4 - LMT 1880
*** 3727,3736 ****
  2 E EE%sT
  Z Europe/Lisbon -0:36:45 - LMT 1884
  -0:36:45 - LMT 1912 Ja 1 0u
! 0 p WE%sT 1966 Ap 3 2
  1 - CET 1976 S 26 1
! 0 p WE%sT 1983 S 25 1s
! 0 W- WE%sT 1992 S 27 1s
  1 E CE%sT 1996 Mar 31 1u
  0 E WE%sT
  Z Europe/London -0:1:15 - LMT 1847 D
--- 3727,3736 ----
  2 E EE%sT
  Z Europe/Lisbon -0:36:45 - LMT 1884
  -0:36:45 - LMT 1912 Ja 1 0u
! 0 p WE%sT 1966 O 2 2s
  1 - CET 1976 S 26 1
! 0 p WE%sT 1986
! 0 E WE%sT 1992 S 27 1u
  1 E CE%sT 1996 Mar 31 1u
  0 E WE%sT
  Z Europe/London -0:1:15 - LMT 1847 D
*************** Z Europe/Minsk 1:50:16 - LMT 1880
*** 3754,3760 ****
  3 R MSK/MSD 1990
  3 - MSK 1991 Mar 31 2s
  2 R EE%sT 2011 Mar 27 2s
! 3 - +03
  Z Europe/Moscow 2:30:17 - LMT 1880
  2:30:17 - MMT 1916 Jul 3
  2:31:19 R %s 1919 Jul 1 0u
--- 3754,3760 ----
  3 R MSK/MSD 1990
  3 - MSK 1991 Mar 31 2s
  2 R EE%sT 2011 Mar 27 2s
! 3 - %z
  Z Europe/Moscow 2:30:17 - LMT 1880
  2:30:17 - MMT 1916 Jul 3
  2:31:19 R %s 1919 Jul 1 0u
*************** Z Europe/Rome 0:49:56 - LMT 1866 D 12
*** 3802,3825 ****
  1 I CE%sT 1980
  1 E CE%sT
  Z Europe/Samara 3:20:20 - LMT 1919 Jul 1 0u
! 3 - +03 1930 Jun 21
! 4 - +04 1935 Ja 27
! 4 R +04/+05 1989 Mar 26 2s
! 3 R +03/+04 1991 Mar 31 2s
! 2 R +02/+03 1991 S 29 2s
! 3 - +03 1991 O 20 3
! 4 R +04/+05 2010 Mar 28 2s
! 3 R +03/+04 2011 Mar 27 2s
! 4 - +04
  Z Europe/Saratov 3:4:18 - LMT 1919 Jul 1 0u
! 3 - +03 1930 Jun 21
! 4 R +04/+05 1988 Mar 27 2s
! 3 R +03/+04 1991 Mar 31 2s
! 4 - +04 1992 Mar 29 2s
! 3 R +03/+04 2011 Mar 27 2s
! 4 - +04 2014 O 26 2s
! 3 - +03 2016 D 4 2s
! 4 - +04
  Z Europe/Simferopol 2:16:24 - LMT 1880
  2:16 - SMT 1924 May 2
  2 - EET 1930 Jun 21
--- 3802,3825 ----
  1 I CE%sT 1980
  1 E CE%sT
  Z Europe/Samara 3:20:20 - LMT 1919 Jul 1 0u
! 3 - %z 1930 Jun 21
! 4 - %z 1935 Ja 27
! 4 R %z 1989 Mar 26 2s
! 3 R %z 1991 Mar 31 2s
! 2 R %z 1991 S 29 2s
! 3 - %z 1991 O 20 3
! 4 R %z 2010 Mar 28 2s
! 3 R %z 2011 Mar 27 2s
! 4 - %z
  Z Europe/Saratov 3:4:18 - LMT 1919 Jul 1 0u
! 3 - %z 1930 Jun 21
! 4 R %z 1988 Mar 27 2s
! 3 R %z 1991 Mar 31 2s
! 4 - %z 1992 Mar 29 2s
! 3 R %z 2011 Mar 27 2s
! 4 - %z 2014 O 26 2s
! 3 - %z 2016 D 4 2s
! 4 - %z
  Z Europe/Simferopol 2:16:24 - LMT 1880
  2:16 - SMT 1924 May 2
  2 - EET 1930 Jun 21
*************** Z Europe/Tirane 1:19:20 - LMT 1914
*** 3863,3876 ****
  1 q CE%sT 1984 Jul
  1 E CE%sT
  Z Europe/Ulyanovsk 3:13:36 - LMT 1919 Jul 1 0u
! 3 - +03 1930 Jun 21
! 4 R +04/+05 1989 Mar 26 2s
! 3 R +03/+04 1991 Mar 31 2s
! 2 R +02/+03 1992 Ja 19 2s
! 3 R +03/+04 2011 Mar 27 2s
! 4 - +04 2014 O 26 2s
! 3 - +03 2016 Mar 27 2s
! 4 - +04
  Z Europe/Vienna 1:5:21 - LMT 1893 Ap
  1 c CE%sT 1920
  1 a CE%sT 1940 Ap 1 2s
--- 3863,3876 ----
  1 q CE%sT 1984 Jul
  1 E CE%sT
  Z Europe/Ulyanovsk 3:13:36 - LMT 1919 Jul 1 0u
! 3 - %z 1930 Jun 21
! 4 R %z 1989 Mar 26 2s
! 3 R %z 1991 Mar 31 2s
! 2 R %z 1992 Ja 19 2s
! 3 R %z 2011 Mar 27 2s
! 4 - %z 2014 O 26 2s
! 3 - %z 2016 Mar 27 2s
! 4 - %z
  Z Europe/Vienna 1:5:21 - LMT 1893 Ap
  1 c CE%sT 1920
  1 a CE%sT 1940 Ap 1 2s
*************** Z Europe/Vilnius 1:41:16 - LMT 1880
*** 3895,3909 ****
  2 - EET 2003
  2 E EE%sT
  Z Europe/Volgograd 2:57:40 - LMT 1920 Ja 3
! 3 - +03 1930 Jun 21
! 4 - +04 1961 N 11
! 4 R +04/+05 1988 Mar 27 2s
  3 R MSK/MSD 1991 Mar 31 2s
! 4 - +04 1992 Mar 29 2s
  3 R MSK/MSD 2011 Mar 27 2s
  4 - MSK 2014 O 26 2s
  3 - MSK 2018 O 28 2s
! 4 - +04 2020 D 27 2s
  3 - MSK
  Z Europe/Warsaw 1:24 - LMT 1880
  1:24 - WMT 1915 Au 5
--- 3895,3909 ----
  2 - EET 2003
  2 E EE%sT
  Z Europe/Volgograd 2:57:40 - LMT 1920 Ja 3
! 3 - %z 1930 Jun 21
! 4 - %z 1961 N 11
! 4 R %z 1988 Mar 27 2s
  3 R MSK/MSD 1991 Mar 31 2s
! 4 - %z 1992 Mar 29 2s
  3 R MSK/MSD 2011 Mar 27 2s
  4 - MSK 2014 O 26 2s
  3 - MSK 2018 O 28 2s
! 4 - %z 2020 D 27 2s
  3 - MSK
  Z Europe/Warsaw 1:24 - LMT 1880
  1:24 - WMT 1915 Au 5
*************** Z Europe/Zurich 0:34:8 - LMT 1853 Jul 16
*** 3919,3976 ****
  1 CH CE%sT 1981
  1 E CE%sT
  Z Factory 0 - -00
- Z HST -10 - HST
  Z Indian/Chagos 4:49:40 - LMT 1907
! 5 - +05 1996
! 6 - +06
  Z Indian/Maldives 4:54 - LMT 1880
  4:54 - MMT 1960
! 5 - +05
  Z Indian/Mauritius 3:50 - LMT 1907
! 4 MU +04/+05
! Z MET 1 c ME%sT
! Z MST -7 - MST
! Z MST7MDT -7 u M%sT
! Z PST8PDT -8 u P%sT
  Z Pacific/Apia 12:33:4 - LMT 1892 Jul 5
  -11:26:56 - LMT 1911
! -11:30 - -1130 1950
! -11 WS -11/-10 2011 D 29 24
! 13 WS +13/+14
  Z Pacific/Auckland 11:39:4 - LMT 1868 N 2
  11:30 NZ NZ%sT 1946
  12 NZ NZ%sT
  Z Pacific/Bougainville 10:22:16 - LMT 1880
  9:48:32 - PMMT 1895
! 10 - +10 1942 Jul
! 9 - +09 1945 Au 21
! 10 - +10 2014 D 28 2
! 11 - +11
  Z Pacific/Chatham 12:13:48 - LMT 1868 N 2
! 12:15 - +1215 1946
! 12:45 k +1245/+1345
  Z Pacific/Easter -7:17:28 - LMT 1890
  -7:17:28 - EMT 1932 S
! -7 x -07/-06 1982 Mar 14 3u
! -6 x -06/-05
  Z Pacific/Efate 11:13:16 - LMT 1912 Ja 13
! 11 VU +11/+12
  Z Pacific/Fakaofo -11:24:56 - LMT 1901
! -11 - -11 2011 D 30
! 13 - +13
  Z Pacific/Fiji 11:55:44 - LMT 1915 O 26
! 12 FJ +12/+13
  Z Pacific/Galapagos -5:58:24 - LMT 1931
! -5 - -05 1986
! -6 EC -06/-05
  Z Pacific/Gambier -8:59:48 - LMT 1912 O
! -9 - -09
  Z Pacific/Guadalcanal 10:39:48 - LMT 1912 O
! 11 - +11
  Z Pacific/Guam -14:21 - LMT 1844 D 31
  9:39 - LMT 1901
  10 - GST 1941 D 10
! 9 - +09 1944 Jul 31
  10 Gu G%sT 2000 D 23
  10 - ChST
  Z Pacific/Honolulu -10:31:26 - LMT 1896 Ja 13 12
--- 3919,3971 ----
  1 CH CE%sT 1981
  1 E CE%sT
  Z Factory 0 - -00
  Z Indian/Chagos 4:49:40 - LMT 1907
! 5 - %z 1996
! 6 - %z
  Z Indian/Maldives 4:54 - LMT 1880
  4:54 - MMT 1960
! 5 - %z
  Z Indian/Mauritius 3:50 - LMT 1907
! 4 MU %z
  Z Pacific/Apia 12:33:4 - LMT 1892 Jul 5
  -11:26:56 - LMT 1911
! -11:30 - %z 1950
! -11 WS %z 2011 D 29 24
! 13 WS %z
  Z Pacific/Auckland 11:39:4 - LMT 1868 N 2
  11:30 NZ NZ%sT 1946
  12 NZ NZ%sT
  Z Pacific/Bougainville 10:22:16 - LMT 1880
  9:48:32 - PMMT 1895
! 10 - %z 1942 Jul
! 9 - %z 1945 Au 21
! 10 - %z 2014 D 28 2
! 11 - %z
  Z Pacific/Chatham 12:13:48 - LMT 1868 N 2
! 12:15 - %z 1946
! 12:45 k %z
  Z Pacific/Easter -7:17:28 - LMT 1890
  -7:17:28 - EMT 1932 S
! -7 x %z 1982 Mar 14 3u
! -6 x %z
  Z Pacific/Efate 11:13:16 - LMT 1912 Ja 13
! 11 VU %z
  Z Pacific/Fakaofo -11:24:56 - LMT 1901
! -11 - %z 2011 D 30
! 13 - %z
  Z Pacific/Fiji 11:55:44 - LMT 1915 O 26
! 12 FJ %z
  Z Pacific/Galapagos -5:58:24 - LMT 1931
! -5 - %z 1986
! -6 EC %z
  Z Pacific/Gambier -8:59:48 - LMT 1912 O
! -9 - %z
  Z Pacific/Guadalcanal 10:39:48 - LMT 1912 O
! 11 - %z
  Z Pacific/Guam -14:21 - LMT 1844 D 31
  9:39 - LMT 1901
  10 - GST 1941 D 10
! 9 - %z 1944 Jul 31
  10 Gu G%sT 2000 D 23
  10 - ChST
  Z Pacific/Honolulu -10:31:26 - LMT 1896 Ja 13 12
*************** Z Pacific/Honolulu -10:31:26 - LMT 1896
*** 3979,4052 ****
  -10:30 u H%sT 1947 Jun 8 2
  -10 - HST
  Z Pacific/Kanton 0 - -00 1937 Au 31
! -12 - -12 1979 O
! -11 - -11 1994 D 31
! 13 - +13
  Z Pacific/Kiritimati -10:29:20 - LMT 1901
! -10:40 - -1040 1979 O
! -10 - -10 1994 D 31
! 14 - +14
  Z Pacific/Kosrae -13:8:4 - LMT 1844 D 31
  10:51:56 - LMT 1901
! 11 - +11 1914 O
! 9 - +09 1919 F
! 11 - +11 1937
! 10 - +10 1941 Ap
! 9 - +09 1945 Au
! 11 - +11 1969 O
! 12 - +12 1999
! 11 - +11
  Z Pacific/Kwajalein 11:9:20 - LMT 1901
! 11 - +11 1937
! 10 - +10 1941 Ap
! 9 - +09 1944 F 6
! 11 - +11 1969 O
! -12 - -12 1993 Au 20 24
! 12 - +12
  Z Pacific/Marquesas -9:18 - LMT 1912 O
! -9:30 - -0930
  Z Pacific/Nauru 11:7:40 - LMT 1921 Ja 15
! 11:30 - +1130 1942 Au 29
! 9 - +09 1945 S 8
! 11:30 - +1130 1979 F 10 2
! 12 - +12
  Z Pacific/Niue -11:19:40 - LMT 1952 O 16
! -11:20 - -1120 1964 Jul
! -11 - -11
  Z Pacific/Norfolk 11:11:52 - LMT 1901
! 11:12 - +1112 1951
! 11:30 - +1130 1974 O 27 2s
! 11:30 1 +1230 1975 Mar 2 2s
! 11:30 - +1130 2015 O 4 2s
! 11 - +11 2019 Jul
! 11 AN +11/+12
  Z Pacific/Noumea 11:5:48 - LMT 1912 Ja 13
! 11 NC +11/+12
  Z Pacific/Pago_Pago 12:37:12 - LMT 1892 Jul 5
  -11:22:48 - LMT 1911
  -11 - SST
  Z Pacific/Palau -15:2:4 - LMT 1844 D 31
  8:57:56 - LMT 1901
! 9 - +09
  Z Pacific/Pitcairn -8:40:20 - LMT 1901
! -8:30 - -0830 1998 Ap 27
! -8 - -08
  Z Pacific/Port_Moresby 9:48:40 - LMT 1880
  9:48:32 - PMMT 1895
! 10 - +10
  Z Pacific/Rarotonga 13:20:56 - LMT 1899 D 26
  -10:39:4 - LMT 1952 O 16
! -10:30 - -1030 1978 N 12
! -10 CK -10/-0930
  Z Pacific/Tahiti -9:58:16 - LMT 1912 O
! -10 - -10
  Z Pacific/Tarawa 11:32:4 - LMT 1901
! 12 - +12
  Z Pacific/Tongatapu 12:19:12 - LMT 1945 S 10
! 12:20 - +1220 1961
! 13 - +13 1999
! 13 TO +13/+14
! Z WET 0 E WE%sT
  L Etc/GMT GMT
  L Australia/Sydney Australia/ACT
  L Australia/Lord_Howe Australia/LHI
--- 3974,4046 ----
  -10:30 u H%sT 1947 Jun 8 2
  -10 - HST
  Z Pacific/Kanton 0 - -00 1937 Au 31
! -12 - %z 1979 O
! -11 - %z 1994 D 31
! 13 - %z
  Z Pacific/Kiritimati -10:29:20 - LMT 1901
! -10:40 - %z 1979 O
! -10 - %z 1994 D 31
! 14 - %z
  Z Pacific/Kosrae -13:8:4 - LMT 1844 D 31
  10:51:56 - LMT 1901
! 11 - %z 1914 O
! 9 - %z 1919 F
! 11 - %z 1937
! 10 - %z 1941 Ap
! 9 - %z 1945 Au
! 11 - %z 1969 O
! 12 - %z 1999
! 11 - %z
  Z Pacific/Kwajalein 11:9:20 - LMT 1901
! 11 - %z 1937
! 10 - %z 1941 Ap
! 9 - %z 1944 F 6
! 11 - %z 1969 O
! -12 - %z 1993 Au 20 24
! 12 - %z
  Z Pacific/Marquesas -9:18 - LMT 1912 O
! -9:30 - %z
  Z Pacific/Nauru 11:7:40 - LMT 1921 Ja 15
! 11:30 - %z 1942 Au 29
! 9 - %z 1945 S 8
! 11:30 - %z 1979 F 10 2
! 12 - %z
  Z Pacific/Niue -11:19:40 - LMT 1952 O 16
! -11:20 - %z 1964 Jul
! -11 - %z
  Z Pacific/Norfolk 11:11:52 - LMT 1901
! 11:12 - %z 1951
! 11:30 - %z 1974 O 27 2s
! 11:30 1 %z 1975 Mar 2 2s
! 11:30 - %z 2015 O 4 2s
! 11 - %z 2019 Jul
! 11 AN %z
  Z Pacific/Noumea 11:5:48 - LMT 1912 Ja 13
! 11 NC %z
  Z Pacific/Pago_Pago 12:37:12 - LMT 1892 Jul 5
  -11:22:48 - LMT 1911
  -11 - SST
  Z Pacific/Palau -15:2:4 - LMT 1844 D 31
  8:57:56 - LMT 1901
! 9 - %z
  Z Pacific/Pitcairn -8:40:20 - LMT 1901
! -8:30 - %z 1998 Ap 27
! -8 - %z
  Z Pacific/Port_Moresby 9:48:40 - LMT 1880
  9:48:32 - PMMT 1895
! 10 - %z
  Z Pacific/Rarotonga 13:20:56 - LMT 1899 D 26
  -10:39:4 - LMT 1952 O 16
! -10:30 - %z 1978 N 12
! -10 CK %z
  Z Pacific/Tahiti -9:58:16 - LMT 1912 O
! -10 - %z
  Z Pacific/Tarawa 11:32:4 - LMT 1901
! 12 - %z
  Z Pacific/Tongatapu 12:19:12 - LMT 1945 S 10
! 12:20 - %z 1961
! 13 - %z 1999
! 13 TO %z
  L Etc/GMT GMT
  L Australia/Sydney Australia/ACT
  L Australia/Lord_Howe Australia/LHI
*************** L America/Rio_Branco Brazil/Acre
*** 4062,4067 ****
--- 4056,4063 ----
  L America/Noronha Brazil/DeNoronha
  L America/Sao_Paulo Brazil/East
  L America/Manaus Brazil/West
+ L Europe/Brussels CET
+ L America/Chicago CST6CDT
  L America/Halifax Canada/Atlantic
  L America/Winnipeg Canada/Central
  L America/Toronto Canada/Eastern
*************** L America/Whitehorse Canada/Yukon
*** 4073,4078 ****
--- 4069,4077 ----
  L America/Santiago Chile/Continental
  L Pacific/Easter Chile/EasterIsland
  L America/Havana Cuba
+ L Europe/Athens EET
+ L America/Panama EST
+ L America/New_York EST5EDT
  L Africa/Cairo Egypt
  L Europe/Dublin Eire
  L Etc/GMT Etc/GMT+0
*************** L America/Jamaica Jamaica
*** 4096,4101 ****
--- 4095,4103 ----
  L Asia/Tokyo Japan
  L Pacific/Kwajalein Kwajalein
  L Africa/Tripoli Libya
+ L Europe/Brussels MET
+ L America/Phoenix MST
+ L America/Denver MST7MDT
  L America/Tijuana Mexico/BajaNorte
  L America/Mazatlan Mexico/BajaSur
  L America/Mexico_City Mexico/General
*************** L America/Denver America/Shiprock
*** 4259,4264 ****
--- 4261,4267 ----
  L America/Toronto America/Thunder_Bay
  L America/Edmonton America/Yellowknife
  L Pacific/Auckland Antarctica/South_Pole
+ L Asia/Ulaanbaatar Asia/Choibalsan
  L Asia/Shanghai Asia/Chongqing
  L Asia/Shanghai Asia/Harbin
  L Asia/Urumqi Asia/Kashgar
*************** L Europe/Kyiv Europe/Zaporozhye
*** 4273,4278 ****
--- 4276,4282 ----
  L Pacific/Kanton Pacific/Enderbury
  L Pacific/Honolulu Pacific/Johnston
  L Pacific/Port_Moresby Pacific/Yap
+ L Europe/Lisbon WET
  L Africa/Nairobi Africa/Asmera
  L America/Nuuk America/Godthab
  L Asia/Ashgabat Asia/Ashkhabad
*************** L Asia/Ulaanbaatar Asia/Ulan_Bator
*** 4290,4294 ****
--- 4294,4300 ----
  L Atlantic/Faroe Atlantic/Faeroe
  L Europe/Kyiv Europe/Kiev
  L Asia/Nicosia Europe/Nicosia
+ L Pacific/Honolulu HST
+ L America/Los_Angeles PST8PDT
  L Pacific/Guadalcanal Pacific/Ponape
  L Pacific/Port_Moresby Pacific/Truk
diff -Nrcpad gcc-13.3.0/libstdc++-v3/src/c++20/tzdb.cc gcc-13.4.0/libstdc++-v3/src/c++20/tzdb.cc
*** gcc-13.3.0/libstdc++-v3/src/c++20/tzdb.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/src/c++20/tzdb.cc	Thu Jun  5 16:03:03 2025
*************** namespace __gnu_cxx
*** 70,77 ****
  #else
    [[gnu::weak]] const char* zoneinfo_dir_override();
  
! #if defined(__APPLE__) || defined(__hpux__)
!   // Need a weak definition for Mach-O.
    [[gnu::weak]] const char* zoneinfo_dir_override()
    {
  #ifdef _GLIBCXX_ZONEINFO_DIR
--- 70,78 ----
  #else
    [[gnu::weak]] const char* zoneinfo_dir_override();
  
! #if defined(__APPLE__) || defined(__hpux__) \
!   || (defined(__VXWORKS__) && !defined(__RTP__))
!   // Need a weak definition for Mach-O et al.
    [[gnu::weak]] const char* zoneinfo_dir_override()
    {
  #ifdef _GLIBCXX_ZONEINFO_DIR
*************** namespace std::chrono
*** 341,391 ****
        friend istream& operator>>(istream&, on_day&);
      };
  
!     // Wrapper for chrono::year that reads a year, or one of the keywords
!     // "minimum" or "maximum", or an unambiguous prefix of a keyword.
!     struct minmax_year
      {
!       year& y;
  
!       friend istream& operator>>(istream& in, minmax_year&& y)
        {
! 	if (ws(in).peek() == 'm') // keywords "minimum" or "maximum"
  	  {
! 	    string s;
! 	    in >> s; // extract the rest of the word, but only look at s[1]
! 	    if (s[1] == 'a')
! 	      y.y = year::max();
! 	    else if (s[1] == 'i')
! 	      y.y = year::min();
! 	    else
! 	      in.setstate(ios::failbit);
  	  }
  	else if (int num = 0; in >> num)
! 	  y.y = year{num};
  	return in;
        }
      };
  
!     // As above for minmax_year, but also supports the keyword "only",
!     // meaning that the TO year is the same as the FROM year.
!     struct minmax_year2
      {
!       minmax_year to;
!       year from;
  
!       friend istream& operator>>(istream& in, minmax_year2&& y)
!       {
! 	if (ws(in).peek() == 'o') // keyword "only"
! 	  {
! 	    string s;
! 	    in >> s; // extract the whole keyword
! 	    y.to.y = y.from;
! 	  }
! 	else
! 	  in >> std::move(y.to);
! 	return in;
!       }
!     };
  
      // A time zone information record.
      // Zone  NAME        STDOFF  RULES   FORMAT  [UNTIL]
--- 342,444 ----
        friend istream& operator>>(istream&, on_day&);
      };
  
!     // Wrapper for two chrono::year values, which reads the FROM and TO
!     // fields of a Rule line. The FROM field is a year and TO is a year or
!     // one of the keywords "maximum" or "only" (or an abbreviation of those).
!     // For backwards compatibility, the keyword "minimum" is recognized
!     // for FROM and interpreted as 1900.
!     struct years_from_to
      {
!       year& from;
!       year& to;
  
!       friend istream& operator>>(istream& in, years_from_to&& yy)
        {
! 	string s;
! 	auto c = ws(in).peek();
! 	if (c == 'm') [[unlikely]] // keyword "minimum"
  	  {
! 	    in >> s; // extract the rest of the word
! 	    yy.from = year(1900);
! 	  }
! 	else if (int num = 0; in >> num) [[likely]]
! 	  yy.from = year{num};
! 
! 	c = ws(in).peek();
! 	if (c == 'm') // keyword "maximum"
! 	  {
! 	    in >> s; // extract the rest of the word
! 	    yy.to = year::max();
! 	  }
! 	else if (c == 'o') // keyword "only"
! 	  {
! 	    in >> s; // extract the rest of the word
! 	    yy.to = yy.from;
  	  }
  	else if (int num = 0; in >> num)
! 	  yy.to = year{num};
! 
  	return in;
        }
      };
  
!     bool
!     select_std_or_dst_abbrev(string& abbrev, minutes save)
      {
!       if (size_t pos = abbrev.find('/'); pos != string::npos)
! 	{
! 	  // Select one of "STD/DST" for standard or daylight.
! 	  if (save == 0min)
! 	    abbrev.erase(pos);
! 	  else
! 	    abbrev.erase(0, pos + 1);
! 	  return true;
! 	}
!       return false;
!     }
  
!     // Set the sys_info::abbrev string by expanding any placeholders.
!     void
!     format_abbrev_str(sys_info& info, string_view letters = {})
!     {
!       if (size_t pos = info.abbrev.find('%'); pos != string::npos)
! 	{
! 	  if (info.abbrev[pos + 1] == 's')
! 	    {
! 	      // Expand "%s" to the variable part, given by Rule::letters.
! 	      if (letters == "-")
! 		info.abbrev.erase(pos, 2);
! 	      else
! 		info.abbrev.replace(pos, 2, letters);
! 	    }
! 	  else if (info.abbrev[pos + 1] == 'z')
! 	    {
! 	      // Expand "%z" to the UT offset as +/-hh, +/-hhmm, or +/-hhmmss.
! 	      hh_mm_ss<seconds> t(info.offset);
! 	      string z(1, "+-"[t.is_negative()]);
! 	      long val = t.hours().count();
! 	      int digits = 2;
! 	      if (int m = t.minutes().count())
! 		{
! 		  digits = 4;
! 		  val *= 100;
! 		  val += m;
! 		  if (int s = t.seconds().count())
! 		    {
! 		      digits = 6;
! 		      val *= 100;
! 		      val += s;
! 		    }
! 		}
! 	      auto sval = std::to_string(val);
! 	      z += string(digits - sval.size(), '0');
! 	      z += sval;
! 	      info.abbrev.replace(pos, 2, z);
! 	    }
! 	}
!       else
! 	select_std_or_dst_abbrev(info.abbrev, info.save);
!     }
  
      // A time zone information record.
      // Zone  NAME        STDOFF  RULES   FORMAT  [UNTIL]
*************** namespace std::chrono
*** 461,466 ****
--- 514,520 ----
  	info.offset = offset();
  	info.save = minutes(m_save);
  	info.abbrev = format();
+ 	format_abbrev_str(info); // expand %z
  	return true;
        }
  
*************** namespace std::chrono
*** 468,479 ****
        friend class time_zone;
  
        void
!       set_abbrev(const string& abbrev)
        {
! 	// In practice, the FORMAT field never needs expanding here.
! 	if (abbrev.find_first_of("/%") != abbrev.npos)
! 	  __throw_runtime_error("std::chrono::time_zone: invalid data");
! 	m_buf = abbrev;
  	m_pos = 0;
  	m_expanded = true;
        }
--- 522,530 ----
        friend class time_zone;
  
        void
!       set_abbrev(string abbrev)
        {
! 	m_buf = std::move(abbrev);
  	m_pos = 0;
  	m_expanded = true;
        }
*************** namespace std::chrono
*** 543,551 ****
  
  	// Rule  NAME  FROM  TO  TYPE  IN  ON  AT  SAVE  LETTER/S
  
! 	in >> quoted(rule.name)
! 	   >> minmax_year{rule.from}
! 	   >> minmax_year2{rule.to, rule.from};
  
  	if (char type; in >> type && type != '-')
  	  in.setstate(ios::failbit);
--- 594,600 ----
  
  	// Rule  NAME  FROM  TO  TYPE  IN  ON  AT  SAVE  LETTER/S
  
! 	in >> quoted(rule.name) >> years_from_to{rule.from, rule.to};
  
  	if (char type; in >> type && type != '-')
  	  in.setstate(ios::failbit);
*************** namespace std::chrono
*** 556,562 ****
  	if (save_time.indicator != at_time::Wall)
  	  {
  	    // We don't actually store the save_time.indicator, because we
! 	    // assume that it's always deducable from the actual offset value.
  	    auto expected = save_time.time == 0s
  			      ? at_time::Standard
  			      : at_time::Daylight;
--- 605,611 ----
  	if (save_time.indicator != at_time::Wall)
  	  {
  	    // We don't actually store the save_time.indicator, because we
! 	    // assume that it's always deducible from the offset value.
  	    auto expected = save_time.time == 0s
  			      ? at_time::Standard
  			      : at_time::Daylight;
*************** namespace std::chrono
*** 566,573 ****
  	rule.save = save_time.time;
  
  	in >> rule.letters;
- 	if (rule.letters == "-")
- 	  rule.letters.clear();
  	return in;
        }
  
--- 615,620 ----
*************** namespace std::chrono
*** 713,770 ****
  #endif // TZDB_DISABLED
    };
  
- #ifndef TZDB_DISABLED
-   namespace
-   {
-     bool
-     select_std_or_dst_abbrev(string& abbrev, minutes save)
-     {
-       if (size_t pos = abbrev.find('/'); pos != string::npos)
- 	{
- 	  // Select one of "STD/DST" for standard or daylight.
- 	  if (save == 0min)
- 	    abbrev.erase(pos);
- 	  else
- 	    abbrev.erase(0, pos + 1);
- 	  return true;
- 	}
-       return false;
-     }
- 
-     // Set the sys_info::abbrev string by expanding any placeholders.
-     void
-     format_abbrev_str(sys_info& info, string_view letters = {})
-     {
-       if (size_t pos = info.abbrev.find("%s"); pos != string::npos)
- 	{
- 	  // Expand "%s" to the variable part, given by Rule::letters.
- 	  info.abbrev.replace(pos, 2, letters);
- 	}
-       else if (size_t pos = info.abbrev.find("%z"); pos != string::npos)
- 	{
- 	  // Expand "%z" to the UT offset as +/-hh, +/-hhmm, or +/-hhmmss.
- 	  hh_mm_ss<seconds> t(info.offset);
- 	  string z(1, "+-"[t.is_negative()]);
- 	  long val = t.hours().count();
- 	  if (minutes m = t.minutes(); m != m.zero())
- 	    {
- 	      val *= 100;
- 	      val += m.count();
- 	      if (seconds s = t.seconds(); s != s.zero())
- 		{
- 		  val *= 100;
- 		  val += s.count();
- 		}
- 	    }
- 	  z += std::to_string(val);
- 	  info.abbrev.replace(pos, 2, z);
- 	}
-       else
- 	select_std_or_dst_abbrev(info.abbrev, info.save);
-     }
-   }
- #endif // TZDB_DISABLED
- 
    // Implementation of std::chrono::time_zone::get_info(const sys_time<D>&)
    sys_info
    time_zone::_M_get_sys_info(sys_seconds tp) const
--- 760,765 ----
*************** namespace std::chrono
*** 833,844 ****
      info.abbrev = ri.format();
  
      string_view letters;
!     if (i != infos.begin())
        {
! 	if (i[-1].expanded())
! 	  letters = i[-1].next_letters();
! 	// XXX else need to find Rule active before this time and use it
! 	// to know the initial offset, save, and letters.
        }
  
      const Rule* curr_rule = nullptr;
--- 828,899 ----
      info.abbrev = ri.format();
  
      string_view letters;
!     if (i != infos.begin() && i[-1].expanded())
!       letters = i[-1].next_letters();
! 
!     if (letters.empty())
        {
! 	sys_seconds t = info.begin - seconds(1);
! 	const year_month_day date(chrono::floor<days>(t));
! 
! 	// Try to find a Rule active before this time, to get initial
! 	// SAVE and LETTERS values. There may not be a Rule for the period
! 	// before the first DST transition, so find the earliest DST->STD
! 	// transition and use the LETTERS from that.
! 	const Rule* active_rule = nullptr;
! 	sys_seconds active_rule_start = sys_seconds::min();
! 	const Rule* first_std = nullptr;
! 	for (const auto& rule : rules)
! 	  {
! 	    if (rule.save == minutes(0))
! 	      {
! 		if (!first_std)
! 		  first_std = &rule;
! 		else if (rule.from < first_std->from)
! 		  first_std = &rule;
! 		else if (rule.from == first_std->from)
! 		  {
! 		    if (rule.start_time(rule.from, {})
! 			  < first_std->start_time(first_std->from, {}))
! 		      first_std = &rule;
! 		  }
! 	      }
! 
! 	    year y = date.year();
! 
! 	    if (y > rule.to) // rule no longer applies at time t
! 	      continue;
! 	    if (y < rule.from) // rule doesn't apply yet at time t
! 	      continue;
! 
! 	    sys_seconds rule_start;
! 
! 	    seconds offset{}; // appropriate for at_time::Universal
! 	    if (rule.when.indicator == at_time::Wall)
! 	      offset = info.offset;
! 	    else if (rule.when.indicator == at_time::Standard)
! 	      offset = ri.offset();
! 
! 	    // Time the rule takes effect this year:
! 	    rule_start = rule.start_time(y, offset);
! 
! 	    if (rule_start >= t && rule.from < y)
! 	      {
! 		// Try this rule in the previous year.
! 		rule_start = rule.start_time(--y, offset);
! 	      }
! 
! 	    if (active_rule_start < rule_start && rule_start < t)
! 	      {
! 		active_rule_start = rule_start;
! 		active_rule = &rule;
! 	      }
! 	  }
! 
! 	if (active_rule)
! 	  letters = active_rule->letters;
! 	else if (first_std)
! 	  letters = first_std->letters;
        }
  
      const Rule* curr_rule = nullptr;
*************** namespace std::chrono
*** 1136,1143 ****
    pair<vector<leap_second>, bool>
    tzdb_list::_Node::_S_read_leap_seconds()
    {
!     // This list is valid until at least 2024-12-28 00:00:00 UTC.
!     auto expires = sys_days{2024y/12/28};
      vector<leap_second> leaps
      {
        (leap_second)  78796800, // 1 Jul 1972
--- 1191,1198 ----
    pair<vector<leap_second>, bool>
    tzdb_list::_Node::_S_read_leap_seconds()
    {
!     // This list is valid until at least 2025-12-28 00:00:00 UTC.
!     auto expires = sys_days{2025y/12/28};
      vector<leap_second> leaps
      {
        (leap_second)  78796800, // 1 Jul 1972
*************** namespace std::chrono
*** 1593,1599 ****
      const time_zone*
      do_locate_zone(const vector<time_zone>& zones,
  		   const vector<time_zone_link>& links,
! 		   string_view tz_name) noexcept
      {
        // Lambda mangling changed between -fabi-version=2 and -fabi-version=18
        auto search = []<class Vec>(const Vec& v, string_view name) {
--- 1648,1654 ----
      const time_zone*
      do_locate_zone(const vector<time_zone>& zones,
  		   const vector<time_zone_link>& links,
! 		   string_view tz_name)
      {
        // Lambda mangling changed between -fabi-version=2 and -fabi-version=18
        auto search = []<class Vec>(const Vec& v, string_view name) {
*************** namespace std::chrono
*** 1604,1616 ****
  	return ptr;
        };
  
        if (auto tz = search(zones, tz_name))
  	return tz;
  
        if (auto tz_l = search(links, tz_name))
! 	return search(zones, tz_l->target());
  
!       return nullptr;
      }
    } // namespace
  
--- 1659,1720 ----
  	return ptr;
        };
  
+       // Search zones first.
        if (auto tz = search(zones, tz_name))
  	return tz;
  
+       // Search links second.
        if (auto tz_l = search(links, tz_name))
! 	{
! 	  // Handle the common case of a link that has a zone as the target.
! 	  if (auto tz = search(zones, tz_l->target())) [[likely]]
! 	    return tz;
  
! 	  // Either tz_l->target() doesn't exist, or we have a chain of links.
! 	  // Use Floyd's cycle-finding algorithm to avoid infinite loops,
! 	  // at the cost of extra lookups. In the common case we expect a
! 	  // chain of links to be short so the loop won't run many times.
! 	  // In particular, the duplicate lookups to move the tortoise
! 	  // never happen unless the chain has four or more links.
! 	  // When a chain contains a cycle we do multiple duplicate lookups,
! 	  // but that case should never happen with correct tzdata.zi,
! 	  // so there's no need to optimize cycle detection.
! 
! 	  const time_zone_link* tortoise = tz_l;
! 	  const time_zone_link* hare = search(links, tz_l->target());
! 	  while (hare)
! 	    {
! 	      // Chains should be short, so first check if it ends here:
! 	      if (auto tz = search(zones, hare->target())) [[likely]]
! 		return tz;
! 
! 	      // Otherwise follow the chain:
! 	      hare = search(links, hare->target());
! 	      if (!hare)
! 		break;
! 
! 	      // Again, first check if the chain ends at a zone here:
! 	      if (auto tz = search(zones, hare->target())) [[likely]]
! 		return tz;
! 
! 	      // Follow the chain again:
! 	      hare = search(links, hare->target());
! 
! 	      if (hare == tortoise)
! 		{
! 		  string_view err = "std::chrono::tzdb: link cycle: ";
! 		  string str;
! 		  str.reserve(err.size() + tz_name.size());
! 		  str += err;
! 		  str += tz_name;
! 		  __throw_runtime_error(str.c_str());
! 		}
! 	      // Plod along the chain one step:
! 	      tortoise = search(links, tortoise->target());
! 	    }
! 	}
! 
!       return nullptr; // not found
      }
    } // namespace
  
*************** namespace std::chrono
*** 1620,1626 ****
    {
      if (auto tz = do_locate_zone(zones, links, tz_name))
        return tz;
!     string_view err = "tzdb: cannot locate zone: ";
      string str;
      str.reserve(err.size() + tz_name.size());
      str += err;
--- 1724,1730 ----
    {
      if (auto tz = do_locate_zone(zones, links, tz_name))
        return tz;
!     string_view err = "std::chrono::tzdb: cannot locate zone: ";
      string str;
      str.reserve(err.size() + tz_name.size());
      str += err;
*************** namespace std::chrono
*** 2014,2022 ****
  	      istringstream in2(std::move(rules));
  	      in2 >> rules_time;
  	      inf.m_save = duration_cast<minutes>(rules_time.time);
  	      select_std_or_dst_abbrev(fmt, inf.m_save);
  	    }
! 	  inf.set_abbrev(fmt);
  	}
  
        // YEAR [MONTH [DAY [TIME]]]
--- 2118,2128 ----
  	      istringstream in2(std::move(rules));
  	      in2 >> rules_time;
  	      inf.m_save = duration_cast<minutes>(rules_time.time);
+ 	      // If the FORMAT is "STD/DST" then we can choose the right one
+ 	      // now, so that we store a shorter string.
  	      select_std_or_dst_abbrev(fmt, inf.m_save);
  	    }
! 	  inf.set_abbrev(std::move(fmt));
  	}
  
        // YEAR [MONTH [DAY [TIME]]]
*************** namespace std::chrono
*** 2027,2033 ****
--- 2133,2144 ----
  	  abbrev_month m{January};
  	  int d = 1;
  	  at_time t{};
+ 	  // XXX DAY should support ON format, e.g. lastSun or Sun>=8
  	  in >> m >> d >> t;
+ 	  // XXX UNTIL field should be interpreted
+ 	  // "using the rules in effect just before the transition"
+ 	  // so might need to store as year_month_day and hh_mm_ss and only
+ 	  // convert to a sys_time once we know the offset in effect.
  	  inf.m_until = sys_days(year(y)/m.m/day(d)) + seconds(t.time);
  	}
        else
diff -Nrcpad gcc-13.3.0/libstdc++-v3/src/c++98/locale.cc gcc-13.4.0/libstdc++-v3/src/c++98/locale.cc
*** gcc-13.3.0/libstdc++-v3/src/c++98/locale.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/src/c++98/locale.cc	Thu Jun  5 16:03:03 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 206,211 ****
--- 206,217 ----
    void
    locale::facet::_S_initialize_once()
    {
+     // Need to check this because we could get called once from
+     // _S_get_c_locale() when the program is single-threaded, and then again
+     // (via __gthread_once) when it's multi-threaded.
+     if (_S_c_locale)
+       return;
+ 
      // Initialize the underlying locale model.
      _S_create_c_locale(_S_c_locale, _S_c_name);
    }
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 216,227 ****
  #ifdef __GTHREADS
      if (__gthread_active_p())
        __gthread_once(&_S_once, _S_initialize_once);
-     else
  #endif
!       {
! 	if (!_S_c_locale)
! 	  _S_initialize_once();
!       }
      return _S_c_locale;
    }
  
--- 222,230 ----
  #ifdef __GTHREADS
      if (__gthread_active_p())
        __gthread_once(&_S_once, _S_initialize_once);
  #endif
!     if (__builtin_expect (!_S_c_locale, 0))
!       _S_initialize_once();
      return _S_c_locale;
    }
  
diff -Nrcpad gcc-13.3.0/libstdc++-v3/src/filesystem/ops-common.h gcc-13.4.0/libstdc++-v3/src/filesystem/ops-common.h
*** gcc-13.3.0/libstdc++-v3/src/filesystem/ops-common.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/src/filesystem/ops-common.h	Thu Jun  5 16:03:03 2025
*************** namespace __gnu_posix
*** 299,305 ****
    {
      bool skip, update, overwrite;
    };
- 
  #endif // _GLIBCXX_HAVE_SYS_STAT_H
  
  } // namespace filesystem
--- 299,304 ----
*************** _GLIBCXX_BEGIN_NAMESPACE_FILESYSTEM
*** 323,328 ****
--- 322,333 ----
  	   std::error_code&);
  
  
+   // Test whether two files are the same file.
+   bool
+   equiv_files(const char_type*, const stat_type&,
+ 	      const char_type*, const stat_type&,
+ 	      error_code&);
+ 
    inline file_type
    make_file_type(const stat_type& st) noexcept
    {
*************** _GLIBCXX_BEGIN_NAMESPACE_FILESYSTEM
*** 431,438 ****
  	    return false;
  	  }
  
! 	if (to_st->st_dev == from_st->st_dev
! 	    && to_st->st_ino == from_st->st_ino)
  	  {
  	    ec = std::make_error_code(std::errc::file_exists);
  	    return false;
--- 436,442 ----
  	    return false;
  	  }
  
! 	if (equiv_files(from, *from_st, to, *to_st, ec))
  	  {
  	    ec = std::make_error_code(std::errc::file_exists);
  	    return false;
diff -Nrcpad gcc-13.3.0/libstdc++-v3/src/filesystem/ops.cc gcc-13.4.0/libstdc++-v3/src/filesystem/ops.cc
*** gcc-13.3.0/libstdc++-v3/src/filesystem/ops.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/src/filesystem/ops.cc	Thu Jun  5 16:03:03 2025
*************** namespace
*** 257,262 ****
--- 257,276 ----
  
  } // namespace
  
+ #ifdef _GLIBCXX_HAVE_SYS_STAT_H
+ #ifdef NEED_DO_COPY_FILE // Only define this once, not in cow-ops.o too
+ bool
+ fs::equiv_files([[maybe_unused]] const char_type* p1, const stat_type& st1,
+ 		[[maybe_unused]] const char_type* p2, const stat_type& st2,
+ 		[[maybe_unused]] error_code& ec)
+ {
+   // For POSIX the device ID and inode number uniquely identify a file.
+   // This doesn't work on Windows (see equiv_files in src/c++17/fs_ops.cc).
+   return st1.st_dev == st2.st_dev && st1.st_ino == st2.st_ino;
+ }
+ #endif
+ #endif
+ 
  void
  fs::copy(const path& from, const path& to, copy_options options,
  	 error_code& ec) noexcept
*************** fs::copy(const path& from, const path& t
*** 293,299 ****
    f = make_file_status(from_st);
  
    if (exists(t) && !is_other(t) && !is_other(f)
!       && to_st.st_dev == from_st.st_dev && to_st.st_ino == from_st.st_ino)
      {
        ec = std::make_error_code(std::errc::file_exists);
        return;
--- 307,313 ----
    f = make_file_status(from_st);
  
    if (exists(t) && !is_other(t) && !is_other(f)
!       && fs::equiv_files(from.c_str(), from_st, to.c_str(), to_st, ec))
      {
        ec = std::make_error_code(std::errc::file_exists);
        return;
*************** fs::equivalent(const path& p1, const pat
*** 763,769 ****
        ec.clear();
        if (is_other(s1) || is_other(s2))
  	return false;
!       return st1.st_dev == st2.st_dev && st1.st_ino == st2.st_ino;
      }
    else if (!exists(s1) || !exists(s2))
      ec = std::make_error_code(std::errc::no_such_file_or_directory);
--- 777,783 ----
        ec.clear();
        if (is_other(s1) || is_other(s2))
  	return false;
!       return fs::equiv_files(p1.c_str(), st1, p2.c_str(), st2, ec);
      }
    else if (!exists(s1) || !exists(s2))
      ec = std::make_error_code(std::errc::no_such_file_or_directory);
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/17_intro/names.cc gcc-13.4.0/libstdc++-v3/testsuite/17_intro/names.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/17_intro/names.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/17_intro/names.cc	Thu Jun  5 16:03:03 2025
***************
*** 136,141 ****
--- 136,147 ----
  // <charconv> defines to_chars_result::ptr and to_chars_result::ec
  #define ec (
  #define ptr (
+ // <map> and <unordered_map> define try_emplace
+ #define try_emplace (
+ #endif
+ 
+ #if __cplusplus < 202002L
+ #define ranges (
  #endif
  
  // These clash with newlib so don't use them.
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/18_support/numeric_limits/traps.cc gcc-13.4.0/libstdc++-v3/testsuite/18_support/numeric_limits/traps.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/18_support/numeric_limits/traps.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/18_support/numeric_limits/traps.cc	Thu Jun  5 16:03:03 2025
*************** int main()
*** 48,54 ****
      For floating points, trapping is a different, more complicated
      story.  If is_iecxxx is true, then division by zero would not trap
      (infinity).  If is_iecxxx is false, we don't know (VAX may trap for
!     0/0 -- I have to check).  For most cases (i.e. IEE-754), trapping
      for floating points have to do with whether there is a support for
      signaling NaN.
      - Gaby.
--- 48,54 ----
      For floating points, trapping is a different, more complicated
      story.  If is_iecxxx is true, then division by zero would not trap
      (infinity).  If is_iecxxx is false, we don't know (VAX may trap for
!     0/0 -- I have to check).  For most cases (i.e. IEEE-754), trapping
      for floating points have to do with whether there is a support for
      signaling NaN.
      - Gaby.
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/19_diagnostics/stacktrace/hash.cc gcc-13.4.0/libstdc++-v3/testsuite/19_diagnostics/stacktrace/hash.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/19_diagnostics/stacktrace/hash.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/19_diagnostics/stacktrace/hash.cc	Thu Jun  5 16:03:03 2025
***************
*** 1,4 ****
! // { dg-options "-std=gnu++23 -lstdc++_libbacktrace" }
  // { dg-do run { target c++23 } }
  // { dg-require-effective-target stacktrace }
  
--- 1,4 ----
! // { dg-options "-std=gnu++23 -lstdc++exp" }
  // { dg-do run { target c++23 } }
  // { dg-require-effective-target stacktrace }
  
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/19_diagnostics/stacktrace/stacktrace.cc gcc-13.4.0/libstdc++-v3/testsuite/19_diagnostics/stacktrace/stacktrace.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/19_diagnostics/stacktrace/stacktrace.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/19_diagnostics/stacktrace/stacktrace.cc	Thu Jun  5 16:03:03 2025
*************** test_cons()
*** 106,117 ****
      VERIFY( s5 != s0 );
      VERIFY( s3 == s0 );
  
!     // TODO test allocator-extended copy/move
  
!     // TODO test allocator propagation
    }
- }
  
  
  void
  test_assign()
--- 106,269 ----
      VERIFY( s5 != s0 );
      VERIFY( s3 == s0 );
  
!     Stacktrace s6(s5, Alloc{6});
!     VERIFY( ! s6.empty() );
!     VERIFY( s6.size() != 0 );
!     VERIFY( s6.begin() != s6.end() );
!     VERIFY( s6 == s5 );
!     VERIFY( s5 != s0 );
!     VERIFY( s6.get_allocator().get_personality() == 6 );
  
!     Stacktrace s7(std::move(s6), Alloc{7});
!     VERIFY( ! s7.empty() );
!     VERIFY( s7.size() != 0 );
!     VERIFY( s7.begin() != s7.end() );
!     VERIFY( s7 == s5 );
!     VERIFY( s5 != s0 );
!     VERIFY( s7.get_allocator().get_personality() == 7 );
    }
  
+   {
+     using Alloc = __gnu_test::SimpleAllocator<std::stacktrace_entry>;
+     using Stacktrace = std::basic_stacktrace<Alloc>;
+ 
+     Stacktrace s0;
+     VERIFY( s0.empty() );
+     VERIFY( s0.size() == 0 );
+     VERIFY( s0.begin() == s0.end() );
+ 
+     Stacktrace s1(Alloc{});
+     VERIFY( s1.empty() );
+     VERIFY( s1.size() == 0 );
+     VERIFY( s1.begin() == s1.end() );
+ 
+     VERIFY( s0 == s1 );
+ 
+     Stacktrace s2(s0);
+     VERIFY( s2 == s0 );
+ 
+     const Stacktrace curr = Stacktrace::current();
+ 
+     Stacktrace s3(curr);
+     VERIFY( ! s3.empty() );
+     VERIFY( s3.size() != 0 );
+     VERIFY( s3.begin() != s3.end() );
+     VERIFY( s3 != s0 );
+ 
+     Stacktrace s4(s3);
+     VERIFY( ! s4.empty() );
+     VERIFY( s4.size() != 0 );
+     VERIFY( s4.begin() != s4.end() );
+     VERIFY( s4 == s3 );
+     VERIFY( s4 != s0 );
+ 
+     Stacktrace s5(std::move(s3));
+     VERIFY( ! s5.empty() );
+     VERIFY( s5.size() != 0 );
+     VERIFY( s5.begin() != s5.end() );
+     VERIFY( s5 == s4 );
+     VERIFY( s5 != s0 );
+     VERIFY( s3 == s0 );
+ 
+     Stacktrace s6(s5, Alloc{});
+     VERIFY( ! s6.empty() );
+     VERIFY( s6.size() != 0 );
+     VERIFY( s6.begin() != s6.end() );
+     VERIFY( s6 == s5 );
+     VERIFY( s5 != s0 );
+ 
+     Stacktrace s7(std::move(s6), Alloc{});
+     VERIFY( ! s7.empty() );
+     VERIFY( s7.size() != 0 );
+     VERIFY( s7.begin() != s7.end() );
+     VERIFY( s7 == s5 );
+     VERIFY( s5 != s0 );
+   }
+ 
+ {
+     using Stacktrace = std::pmr::stacktrace;
+     using Alloc = Stacktrace::allocator_type;
+ 
+     Stacktrace s0;
+     VERIFY( s0.empty() );
+     VERIFY( s0.size() == 0 );
+     VERIFY( s0.begin() == s0.end() );
+ 
+     Stacktrace s1(Alloc{});
+     VERIFY( s1.empty() );
+     VERIFY( s1.size() == 0 );
+     VERIFY( s1.begin() == s1.end() );
+ 
+     VERIFY( s0 == s1 );
+ 
+     Stacktrace s2(s0);
+     VERIFY( s2 == s0 );
+ 
+     const Stacktrace curr = Stacktrace::current();
+ 
+     Stacktrace s3(curr);
+     VERIFY( ! s3.empty() );
+     VERIFY( s3.size() != 0 );
+     VERIFY( s3.begin() != s3.end() );
+     VERIFY( s3 != s0 );
+ 
+     Stacktrace s4(s3);
+     VERIFY( ! s4.empty() );
+     VERIFY( s4.size() != 0 );
+     VERIFY( s4.begin() != s4.end() );
+     VERIFY( s4 == s3 );
+     VERIFY( s4 != s0 );
+ 
+     Stacktrace s5(std::move(s3));
+     VERIFY( ! s5.empty() );
+     VERIFY( s5.size() != 0 );
+     VERIFY( s5.begin() != s5.end() );
+     VERIFY( s5 == s4 );
+     VERIFY( s5 != s0 );
+     VERIFY( s3 == s0 );
+ 
+     __gnu_test::memory_resource mr;
+     Stacktrace s6(s5, &mr);
+     VERIFY( ! s6.empty() );
+     VERIFY( s6.size() != 0 );
+     VERIFY( s6.begin() != s6.end() );
+     VERIFY( s6 == s5 );
+     VERIFY( s5 != s0 );
+     VERIFY( s6.get_allocator() != s5.get_allocator() );
+ 
+     Stacktrace s7(std::move(s6), Alloc{});
+     VERIFY( ! s7.empty() );
+     VERIFY( s7.size() != 0 );
+     VERIFY( s7.begin() != s7.end() );
+     VERIFY( s7 == s5 );
+     VERIFY( s5 != s0 );
+     VERIFY( s7.get_allocator() != s6.get_allocator() );
+   }
+ 
+   {
+     using Alloc
+       = __gnu_test::propagating_allocator<std::stacktrace_entry, false>;
+     using Stacktrace = std::basic_stacktrace<Alloc>;
+ 
+     Stacktrace s1 = Stacktrace::current(Alloc{1});
+     Stacktrace s2(s1);
+     VERIFY( s2.get_allocator() != s1.get_allocator() );
+     Stacktrace s3(std::move(s1));
+     VERIFY( s3.get_allocator() == s1.get_allocator() );
+   }
+ 
+   {
+     using Alloc
+       = __gnu_test::propagating_allocator<std::stacktrace_entry, true>;
+     using Stacktrace = std::basic_stacktrace<Alloc>;
+ 
+     Stacktrace s1 = Stacktrace::current(Alloc{1});
+     Stacktrace s2(s1);
+     VERIFY( s2.get_allocator() == s1.get_allocator() );
+     Stacktrace s3(std::move(s1));
+     VERIFY( s3.get_allocator() == s1.get_allocator() );
+   }
+ }
  
  void
  test_assign()
*************** test_assign()
*** 167,172 ****
--- 319,350 ----
      VERIFY( s2.at(0).source_line() == s2.get_allocator().get_personality() );
      VERIFY( s0 == s3 ); // ISO C++: valid but unspecified, GCC: swapped.
    }
+ 
+   {
+     using Alloc
+       = __gnu_test::propagating_allocator<std::stacktrace_entry, false>;
+     using Stacktrace = std::basic_stacktrace<Alloc>;
+ 
+     Stacktrace s1 = Stacktrace::current(Alloc{1});
+     Stacktrace s2(Alloc{2});
+     s2 = s1;
+     VERIFY( s2.get_allocator() != s1.get_allocator() );
+     s1 = std::move(s2);
+     VERIFY( s1.get_allocator() != s2.get_allocator() );
+   }
+ 
+   {
+     using Alloc
+       = __gnu_test::propagating_allocator<std::stacktrace_entry, true>;
+     using Stacktrace = std::basic_stacktrace<Alloc>;
+ 
+     Stacktrace s1 = Stacktrace::current(Alloc{1});
+     Stacktrace s2(Alloc{2});
+     s2 = s1;
+     VERIFY( s2.get_allocator() == s1.get_allocator() );
+     s1 = Stacktrace::current(Alloc{3});
+     VERIFY( s1.get_allocator().get_personality() == 3 );
+   }
  }
  
  void
*************** test_swap()
*** 191,198 ****
      swap(s0, s1);
      VERIFY( s1.empty() );
      VERIFY( ! s0.empty() );
  
!     // TODO test allocator propagation
    }
  }
  
--- 369,397 ----
      swap(s0, s1);
      VERIFY( s1.empty() );
      VERIFY( ! s0.empty() );
+   }
  
!   {
!     using Alloc
!       = __gnu_test::propagating_allocator<std::stacktrace_entry, false>;
!     using Stacktrace = std::basic_stacktrace<Alloc>;
! 
!     Stacktrace s1 = Stacktrace::current(Alloc{1});
!     Stacktrace s2(Alloc{1}); // Must use equal allocators when not propagating.
!     swap(s1, s2);
!     VERIFY( s1.get_allocator() == s2.get_allocator() );
!   }
! 
!   {
!     using Alloc
!       = __gnu_test::propagating_allocator<std::stacktrace_entry, true>;
!     using Stacktrace = std::basic_stacktrace<Alloc>;
! 
!     Stacktrace s1 = Stacktrace::current(Alloc{1});
!     Stacktrace s2(Alloc{2});
!     swap(s1, s2);
!     VERIFY( s1.get_allocator().get_personality() == 2 );
!     VERIFY( s2.get_allocator().get_personality() == 1 );
    }
  }
  
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/20_util/bind/ref_neg.cc gcc-13.4.0/libstdc++-v3/testsuite/20_util/bind/ref_neg.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/20_util/bind/ref_neg.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/20_util/bind/ref_neg.cc	Thu Jun  5 16:03:03 2025
*************** void test02()
*** 50,56 ****
  
  // Ignore the reasons for deduction/substitution failure in the headers.
  // Arrange for the match to work on installed trees as well as build trees.
! // { dg-prune-output "no type named 'type' in 'struct std::result_of" }
  
  int main()
  {
--- 50,56 ----
  
  // Ignore the reasons for deduction/substitution failure in the headers.
  // Arrange for the match to work on installed trees as well as build trees.
! // { dg-prune-output "no type named 'type' in 'struct std::__invoke_result" }
  
  int main()
  {
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/20_util/duration/io.cc gcc-13.4.0/libstdc++-v3/testsuite/20_util/duration/io.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/20_util/duration/io.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/20_util/duration/io.cc	Thu Jun  5 16:03:03 2025
*************** test_format()
*** 101,106 ****
--- 101,120 ----
    std::chrono::duration<float, std::milli> d{0.5};
    s = std::format("{}", d);
    VERIFY( s == "0.5ms" );
+ 
+   std::chrono::duration<unsigned, std::milli> u{500}; // PR libstdc++/115668
+   s = std::format("{}", u);
+   VERIFY( s == "500ms" );
+   s = std::format("{:%Q %q}", u);
+   VERIFY( s == "500 ms" );
+ 
+   // PR libstdc++/116755 extra minus sign for most negative value
+   auto minsec = std::chrono::seconds::min();
+   s = std::format("{}", minsec);
+   auto expected = std::format("{}s", minsec.count());
+   VERIFY( s == expected );
+   s = std::format("{:%Q%q}", minsec);
+   VERIFY( s == expected );
  }
  
  int main()
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/20_util/integer_sequence/112473.cc gcc-13.4.0/libstdc++-v3/testsuite/20_util/integer_sequence/112473.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/20_util/integer_sequence/112473.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/20_util/integer_sequence/112473.cc	Thu Jun  5 16:03:03 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-options "-std=gnu++20" }
  // { dg-do compile { target c++20 } }
  
  // PR libstdc++/112473 - integer_sequence accepts non-integer types
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/constrained.cc gcc-13.4.0/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/constrained.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/constrained.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/constrained.cc	Thu Jun  5 16:03:03 2025
*************** test03()
*** 176,181 ****
--- 176,220 ----
      }
  }
  
+ void
+ test_pr101587()
+ {
+   short in[1]{};
+   __gnu_test::test_contiguous_range r(in); // difference_type is integer-like
+   long out[1];
+   std::span<long> o(out); // difference_type is ptrdiff_t
+   ranges::uninitialized_copy(r, o);
+   ranges::uninitialized_copy_n(ranges::begin(r), 0, o.begin(), o.end());
+ 
+   // iterator that has an integer-like class type for difference_type
+   struct Iter
+   {
+     using value_type = long;
+     using difference_type = std::ranges::__detail::__max_diff_type;
+ 
+     long& operator*() const { return *p; }
+ 
+     Iter& operator++() { ++p; return *this; }
+     Iter operator++(int) { return Iter{p++}; }
+ 
+     difference_type operator-(Iter i) const { return p - i.p; }
+     bool operator==(const Iter&) const = default;
+ 
+     long* p = nullptr;
+   };
+   static_assert(std::sized_sentinel_for<Iter, Iter>);
+ 
+   std::ranges::subrange<Iter> rmax(Iter{out+0}, Iter{out+1});
+   // Check with integer-like class type for output range:
+   std::ranges::uninitialized_copy(in, rmax);
+   std::ranges::uninitialized_copy_n(in+0, 1, rmax.begin(), rmax.end());
+ 
+   int to[1];
+   // And for input range:
+   std::ranges::uninitialized_copy(rmax, to);
+   std::ranges::uninitialized_copy_n(rmax.begin(), 1, to+0, to+1);
+ }
+ 
  int
  main()
  {
*************** main()
*** 189,192 ****
--- 228,233 ----
  
    test02<false>();
    test02<true>();
+ 
+   test_pr101587();
  }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_move/constrained.cc gcc-13.4.0/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_move/constrained.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_move/constrained.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_move/constrained.cc	Thu Jun  5 16:03:03 2025
*************** test01(std::vector<T> ix)
*** 51,57 ****
      {
        ix = saved_ix;
  
!       int size = ix.size();
        auto buffer = std::unique_ptr<char[]>(new char[sizeof(T)*size]);
        std::span<T> rx((T *)buffer.get(), size);
  
--- 51,57 ----
      {
        ix = saved_ix;
  
!       unsigned size = ix.size();
        auto buffer = std::unique_ptr<char[]>(new char[sizeof(T)*size]);
        std::span<T> rx((T *)buffer.get(), size);
  
*************** test03()
*** 186,191 ****
--- 186,229 ----
      }
  }
  
+ void
+ test_pr101587()
+ {
+   short in[1]{};
+   __gnu_test::test_contiguous_range r(in); // difference_type is integer-like
+   long out[1];
+   std::span<long> o(out); // difference_type is ptrdiff_t
+   ranges::uninitialized_move(r, o);
+   ranges::uninitialized_move_n(ranges::begin(r), 0, o.begin(), o.end());
+ 
+   struct Iter
+   {
+     using value_type = long;
+     using difference_type = std::ranges::__detail::__max_diff_type;
+ 
+     long& operator*() const { return *p; }
+ 
+     Iter& operator++() { ++p; return *this; }
+     Iter operator++(int) { return Iter{p++}; }
+ 
+     difference_type operator-(Iter i) const { return p - i.p; }
+     bool operator==(const Iter&) const = default;
+ 
+     long* p = nullptr;
+   };
+   static_assert(std::sized_sentinel_for<Iter, Iter>);
+ 
+   std::ranges::subrange<Iter> rmax(Iter{out+0}, Iter{out+1});
+   // Check with integer-like class type for output range:
+   std::ranges::uninitialized_move(in, rmax);
+   std::ranges::uninitialized_move_n(in+0, 1, rmax.begin(), rmax.end());
+ 
+   int to[1];
+   // And for input range:
+   std::ranges::uninitialized_copy(rmax, to);
+   std::ranges::uninitialized_copy_n(rmax.begin(), 1, to+0, to+1);
+ }
+ 
  int
  main()
  {
*************** main()
*** 199,202 ****
--- 237,242 ----
  
    test02<false>();
    test02<true>();
+ 
+   test_pr101587();
  }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/21_strings/basic_string/allocator/116641.cc gcc-13.4.0/libstdc++-v3/testsuite/21_strings/basic_string/allocator/116641.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/21_strings/basic_string/allocator/116641.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/21_strings/basic_string/allocator/116641.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,53 ----
+ // { dg-do run { target c++11 } }
+ // { dg-require-effective-target cxx11_abi }
+ 
+ // Bug 116641 - std::string move assignment incorrectly depends on POCCA
+ 
+ #include <string>
+ #include <testsuite_hooks.h>
+ 
+ template<typename T>
+ struct Alloc
+ {
+   using value_type = T;
+   using propagate_on_container_swap = std::false_type;
+   using propagate_on_container_copy_assignment = std::true_type;
+   using propagate_on_container_move_assignment = std::false_type;
+ 
+   Alloc(int id) : id(id) { }
+ 
+   template<typename U>
+     Alloc(const Alloc<U>& a) : id(a.id) { }
+ 
+   T* allocate(unsigned long n)
+   { return std::allocator<T>().allocate(n); }
+ 
+   void deallocate(T* p, unsigned long n)
+   { std::allocator<T>().deallocate(p, n); }
+ 
+   Alloc& operator=(const Alloc&) { throw; }
+ 
+   bool operator==(const Alloc& a) const { return id == a.id; }
+   bool operator!=(const Alloc& a) const { return id != a.id; }
+ 
+   int id;
+ };
+ 
+ void
+ test_pr116641()
+ {
+   Alloc<char> a1(1), a2(2);
+   std::basic_string<char, std::char_traits<char>, Alloc<char>> s1(a1), s2(a2);
+ 
+   s1 = "allocator should not propagate on move assignment";
+   VERIFY( s1.get_allocator() == a1 );
+   VERIFY( s2.get_allocator() == a2 );
+   s2 = std::move(s1);
+   VERIFY( s1.get_allocator() == a1 );
+   VERIFY( s2.get_allocator() == a2 );
+ }
+ 
+ int main()
+ {
+   test_pr116641();
+ }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/21_strings/char_traits/requirements/113200.cc gcc-13.4.0/libstdc++-v3/testsuite/21_strings/char_traits/requirements/113200.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/21_strings/char_traits/requirements/113200.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/21_strings/char_traits/requirements/113200.cc	Thu Jun  5 16:03:03 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-options "-std=gnu++20" }
  // { dg-do compile { target c++20 } }
  
  // PR libstdc++/113200
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_unicode.cc gcc-13.4.0/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_unicode.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_unicode.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_unicode.cc	Thu Jun  5 16:03:03 2025
*************** void
*** 27,64 ****
  test_utf8_utf32_codecvts ()
  {
    using codecvt_c32 = codecvt<char32_t, char, mbstate_t>;
!   auto loc_c = locale::classic ();
    VERIFY (has_facet<codecvt_c32> (loc_c));
  
    auto &cvt = use_facet<codecvt_c32> (loc_c);
!   test_utf8_utf32_codecvts (cvt);
  
    codecvt_utf8<char32_t> cvt2;
!   test_utf8_utf32_codecvts (cvt2);
  }
  
  void
  test_utf8_utf16_codecvts ()
  {
    using codecvt_c16 = codecvt<char16_t, char, mbstate_t>;
!   auto loc_c = locale::classic ();
    VERIFY (has_facet<codecvt_c16> (loc_c));
  
    auto &cvt = use_facet<codecvt_c16> (loc_c);
!   test_utf8_utf16_cvts (cvt);
  
    codecvt_utf8_utf16<char16_t> cvt2;
!   test_utf8_utf16_cvts (cvt2);
  
    codecvt_utf8_utf16<char32_t> cvt3;
!   test_utf8_utf16_cvts (cvt3);
  }
  
  void
  test_utf8_ucs2_codecvts ()
  {
    codecvt_utf8<char16_t> cvt;
!   test_utf8_ucs2_cvts (cvt);
  }
  
  int
--- 27,84 ----
  test_utf8_utf32_codecvts ()
  {
    using codecvt_c32 = codecvt<char32_t, char, mbstate_t>;
!   auto &loc_c = locale::classic ();
    VERIFY (has_facet<codecvt_c32> (loc_c));
  
    auto &cvt = use_facet<codecvt_c32> (loc_c);
!   test_utf8_utf32_cvt (cvt);
  
    codecvt_utf8<char32_t> cvt2;
!   test_utf8_utf32_cvt (cvt2);
  }
  
  void
  test_utf8_utf16_codecvts ()
  {
    using codecvt_c16 = codecvt<char16_t, char, mbstate_t>;
!   auto &loc_c = locale::classic ();
    VERIFY (has_facet<codecvt_c16> (loc_c));
  
    auto &cvt = use_facet<codecvt_c16> (loc_c);
!   test_utf8_utf16_cvt (cvt);
  
    codecvt_utf8_utf16<char16_t> cvt2;
!   test_utf8_utf16_cvt (cvt2);
  
    codecvt_utf8_utf16<char32_t> cvt3;
!   test_utf8_utf16_cvt (cvt3);
  }
  
  void
  test_utf8_ucs2_codecvts ()
  {
    codecvt_utf8<char16_t> cvt;
!   test_utf8_ucs2_cvt (cvt);
! }
! 
! void
! test_utf16_utf32_codecvts ()
! {
!   codecvt_utf16<char32_t> cvt;
!   test_utf16_utf32_cvt (cvt, utf16_big_endian);
! 
!   codecvt_utf16<char32_t, 0x10FFFF, codecvt_mode::little_endian> cvt2;
!   test_utf16_utf32_cvt (cvt2, utf16_little_endian);
! }
! 
! void
! test_utf16_ucs2_codecvts ()
! {
!   codecvt_utf16<char16_t> cvt;
!   test_utf16_ucs2_cvt (cvt, utf16_big_endian);
! 
!   codecvt_utf16<char16_t, 0x10FFFF, codecvt_mode::little_endian> cvt2;
!   test_utf16_ucs2_cvt (cvt2, utf16_little_endian);
  }
  
  int
*************** main ()
*** 67,70 ****
--- 87,92 ----
    test_utf8_utf32_codecvts ();
    test_utf8_utf16_codecvts ();
    test_utf8_ucs2_codecvts ();
+   test_utf16_utf32_codecvts ();
+   test_utf16_ucs2_codecvts ();
  }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_unicode.h gcc-13.4.0/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_unicode.h
*** gcc-13.3.0/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_unicode.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_unicode.h	Thu Jun  5 16:03:03 2025
***************
*** 17,23 ****
  
  #include <algorithm>
  #include <locale>
- #include <string>
  #include <testsuite_hooks.h>
  
  struct test_offsets_ok
--- 17,22 ----
*************** auto constexpr array_size (const T (&)[N
*** 42,74 ****
    return N;
  }
  
! template <class CharT>
  void
! utf8_to_utf32_in_ok (const std::codecvt<CharT, char, mbstate_t> &cvt)
  {
    using namespace std;
    // UTF-8 string of 1-byte CP, 2-byte CP, 3-byte CP and 4-byte CP
!   const char in[] = "bш\uAAAA\U0010AAAA";
!   const char32_t exp_literal[] = U"bш\uAAAA\U0010AAAA";
!   CharT exp[array_size (exp_literal)] = {};
!   std::copy (begin (exp_literal), end (exp_literal), begin (exp));
  
!   static_assert (array_size (in) == 11, "");
!   static_assert (array_size (exp_literal) == 5, "");
!   static_assert (array_size (exp) == 5, "");
!   VERIFY (char_traits<char>::length (in) == 10);
!   VERIFY (char_traits<char32_t>::length (exp_literal) == 4);
!   VERIFY (char_traits<CharT>::length (exp) == 4);
  
    test_offsets_ok offsets[] = {{0, 0}, {1, 1}, {3, 2}, {6, 3}, {10, 4}};
    for (auto t : offsets)
      {
!       CharT out[array_size (exp) - 1] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        auto state = mbstate_t{};
!       auto in_next = (const char *) nullptr;
!       auto out_next = (CharT *) nullptr;
        auto res = codecvt_base::result ();
  
        res = cvt.in (state, in, in + t.in_size, in_next, out, out + t.out_size,
--- 41,73 ----
    return N;
  }
  
! template <class InternT, class ExternT>
  void
! utf8_to_utf32_in_ok (const std::codecvt<InternT, ExternT, mbstate_t> &cvt)
  {
    using namespace std;
    // UTF-8 string of 1-byte CP, 2-byte CP, 3-byte CP and 4-byte CP
!   const unsigned char input[] = "b\u0448\uAAAA\U0010AAAA";
!   const char32_t expected[] = U"b\u0448\uAAAA\U0010AAAA";
!   static_assert (array_size (input) == 11, "");
!   static_assert (array_size (expected) == 5, "");
  
!   ExternT in[array_size (input)];
!   InternT exp[array_size (expected)];
!   copy (begin (input), end (input), begin (in));
!   copy (begin (expected), end (expected), begin (exp));
!   VERIFY (char_traits<ExternT>::length (in) == 10);
!   VERIFY (char_traits<InternT>::length (exp) == 4);
  
    test_offsets_ok offsets[] = {{0, 0}, {1, 1}, {3, 2}, {6, 3}, {10, 4}};
    for (auto t : offsets)
      {
!       InternT out[array_size (exp) - 1] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        auto state = mbstate_t{};
!       auto in_next = (const ExternT *) nullptr;
!       auto out_next = (InternT *) nullptr;
        auto res = codecvt_base::result ();
  
        res = cvt.in (state, in, in + t.in_size, in_next, out, out + t.out_size,
*************** utf8_to_utf32_in_ok (const std::codecvt<
*** 76,94 ****
        VERIFY (res == cvt.ok);
        VERIFY (in_next == in + t.in_size);
        VERIFY (out_next == out + t.out_size);
!       VERIFY (char_traits<CharT>::compare (out, exp, t.out_size) == 0);
        if (t.out_size < array_size (out))
  	VERIFY (out[t.out_size] == 0);
      }
  
    for (auto t : offsets)
      {
!       CharT out[array_size (exp)] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        auto state = mbstate_t{};
!       auto in_next = (const char *) nullptr;
!       auto out_next = (CharT *) nullptr;
        auto res = codecvt_base::result ();
  
        res
--- 75,98 ----
        VERIFY (res == cvt.ok);
        VERIFY (in_next == in + t.in_size);
        VERIFY (out_next == out + t.out_size);
!       VERIFY (char_traits<InternT>::compare (out, exp, t.out_size) == 0);
        if (t.out_size < array_size (out))
  	VERIFY (out[t.out_size] == 0);
+ 
+       state = {};
+       auto len = cvt.length (state, in, in + t.in_size, t.out_size);
+       VERIFY (len >= 0);
+       VERIFY (static_cast<size_t> (len) == t.in_size);
      }
  
    for (auto t : offsets)
      {
!       InternT out[array_size (exp)] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        auto state = mbstate_t{};
!       auto in_next = (const ExternT *) nullptr;
!       auto out_next = (InternT *) nullptr;
        auto res = codecvt_base::result ();
  
        res
*************** utf8_to_utf32_in_ok (const std::codecvt<
*** 96,124 ****
        VERIFY (res == cvt.ok);
        VERIFY (in_next == in + t.in_size);
        VERIFY (out_next == out + t.out_size);
!       VERIFY (char_traits<CharT>::compare (out, exp, t.out_size) == 0);
        if (t.out_size < array_size (out))
  	VERIFY (out[t.out_size] == 0);
      }
  }
  
! template <class CharT>
  void
! utf8_to_utf32_in_partial (const std::codecvt<CharT, char, mbstate_t> &cvt)
  {
    using namespace std;
    // UTF-8 string of 1-byte CP, 2-byte CP, 3-byte CP and 4-byte CP
!   const char in[] = "bш\uAAAA\U0010AAAA";
!   const char32_t exp_literal[] = U"bш\uAAAA\U0010AAAA";
!   CharT exp[array_size (exp_literal)] = {};
!   std::copy (begin (exp_literal), end (exp_literal), begin (exp));
  
!   static_assert (array_size (in) == 11, "");
!   static_assert (array_size (exp_literal) == 5, "");
!   static_assert (array_size (exp) == 5, "");
!   VERIFY (char_traits<char>::length (in) == 10);
!   VERIFY (char_traits<char32_t>::length (exp_literal) == 4);
!   VERIFY (char_traits<CharT>::length (exp) == 4);
  
    test_offsets_partial offsets[] = {
      {1, 0, 0, 0}, // no space for first CP
--- 100,133 ----
        VERIFY (res == cvt.ok);
        VERIFY (in_next == in + t.in_size);
        VERIFY (out_next == out + t.out_size);
!       VERIFY (char_traits<InternT>::compare (out, exp, t.out_size) == 0);
        if (t.out_size < array_size (out))
  	VERIFY (out[t.out_size] == 0);
+ 
+       state = {};
+       auto len = cvt.length (state, in, in + t.in_size, array_size (out));
+       VERIFY (len >= 0);
+       VERIFY (static_cast<size_t> (len) == t.in_size);
      }
  }
  
! template <class InternT, class ExternT>
  void
! utf8_to_utf32_in_partial (const std::codecvt<InternT, ExternT, mbstate_t> &cvt)
  {
    using namespace std;
    // UTF-8 string of 1-byte CP, 2-byte CP, 3-byte CP and 4-byte CP
!   const unsigned char input[] = "b\u0448\uAAAA\U0010AAAA";
!   const char32_t expected[] = U"b\u0448\uAAAA\U0010AAAA";
!   static_assert (array_size (input) == 11, "");
!   static_assert (array_size (expected) == 5, "");
  
!   ExternT in[array_size (input)];
!   InternT exp[array_size (expected)];
!   copy (begin (input), end (input), begin (in));
!   copy (begin (expected), end (expected), begin (exp));
!   VERIFY (char_traits<ExternT>::length (in) == 10);
!   VERIFY (char_traits<InternT>::length (exp) == 4);
  
    test_offsets_partial offsets[] = {
      {1, 0, 0, 0}, // no space for first CP
*************** utf8_to_utf32_in_partial (const std::cod
*** 144,157 ****
  
    for (auto t : offsets)
      {
!       CharT out[array_size (exp) - 1] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        VERIFY (t.expected_in_next <= t.in_size);
        VERIFY (t.expected_out_next <= t.out_size);
        auto state = mbstate_t{};
!       auto in_next = (const char *) nullptr;
!       auto out_next = (CharT *) nullptr;
        auto res = codecvt_base::result ();
  
        res = cvt.in (state, in, in + t.in_size, in_next, out, out + t.out_size,
--- 153,166 ----
  
    for (auto t : offsets)
      {
!       InternT out[array_size (exp) - 1] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        VERIFY (t.expected_in_next <= t.in_size);
        VERIFY (t.expected_out_next <= t.out_size);
        auto state = mbstate_t{};
!       auto in_next = (const ExternT *) nullptr;
!       auto out_next = (InternT *) nullptr;
        auto res = codecvt_base::result ();
  
        res = cvt.in (state, in, in + t.in_size, in_next, out, out + t.out_size,
*************** utf8_to_utf32_in_partial (const std::cod
*** 159,195 ****
        VERIFY (res == cvt.partial);
        VERIFY (in_next == in + t.expected_in_next);
        VERIFY (out_next == out + t.expected_out_next);
!       VERIFY (char_traits<CharT>::compare (out, exp, t.expected_out_next) == 0);
        if (t.expected_out_next < array_size (out))
  	VERIFY (out[t.expected_out_next] == 0);
      }
  }
  
! template <class CharT>
  void
! utf8_to_utf32_in_error (const std::codecvt<CharT, char, mbstate_t> &cvt)
  {
    using namespace std;
!   // UTF-8 string of 1-byte CP, 2-byte CP, 3-byte CP and 4-byte CP
!   const char valid_in[] = "bш\uAAAA\U0010AAAA";
!   const char32_t exp_literal[] = U"bш\uAAAA\U0010AAAA";
!   CharT exp[array_size (exp_literal)] = {};
!   std::copy (begin (exp_literal), end (exp_literal), begin (exp));
  
!   static_assert (array_size (valid_in) == 11, "");
!   static_assert (array_size (exp_literal) == 5, "");
!   static_assert (array_size (exp) == 5, "");
!   VERIFY (char_traits<char>::length (valid_in) == 10);
!   VERIFY (char_traits<char32_t>::length (exp_literal) == 4);
!   VERIFY (char_traits<CharT>::length (exp) == 4);
  
!   test_offsets_error<char> offsets[] = {
  
      // replace leading byte with invalid byte
!     {1, 4, 0, 0, '\xFF', 0},
!     {3, 4, 1, 1, '\xFF', 1},
!     {6, 4, 3, 2, '\xFF', 3},
!     {10, 4, 6, 3, '\xFF', 6},
  
      // replace first trailing byte with ASCII byte
      {3, 4, 1, 1, 'z', 2},
--- 168,230 ----
        VERIFY (res == cvt.partial);
        VERIFY (in_next == in + t.expected_in_next);
        VERIFY (out_next == out + t.expected_out_next);
!       VERIFY (char_traits<InternT>::compare (out, exp, t.expected_out_next)
! 	      == 0);
        if (t.expected_out_next < array_size (out))
  	VERIFY (out[t.expected_out_next] == 0);
+ 
+       state = {};
+       auto len = cvt.length (state, in, in + t.in_size, t.out_size);
+       VERIFY (len >= 0);
+       VERIFY (static_cast<size_t> (len) == t.expected_in_next);
      }
  }
  
! template <class InternT, class ExternT>
  void
! utf8_to_utf32_in_error (const std::codecvt<InternT, ExternT, mbstate_t> &cvt)
  {
    using namespace std;
!   // UTF-8 string of 1-byte CP, 2-byte CP, 3-byte CP, 4-byte CP
!   const unsigned char input[] = "b\u0448\uD700\U0010AAAA";
!   const char32_t expected[] = U"b\u0448\uD700\U0010AAAA";
!   static_assert (array_size (input) == 11, "");
!   static_assert (array_size (expected) == 5, "");
  
!   ExternT in[array_size (input)];
!   InternT exp[array_size (expected)];
!   copy (begin (input), end (input), begin (in));
!   copy (begin (expected), end (expected), begin (exp));
!   VERIFY (char_traits<ExternT>::length (in) == 10);
!   VERIFY (char_traits<InternT>::length (exp) == 4);
  
!   // There are 5 classes of errors in UTF-8 decoding
!   // 1. Missing leading byte
!   // 2. Missing trailing byte
!   // 3. Surrogate CP
!   // 4. Overlong sequence
!   // 5. CP out of Unicode range
!   test_offsets_error<unsigned char> offsets[] = {
! 
!     // 1. Missing leading byte. We will replace the leading byte with
!     // non-leading byte, such as a byte that is always invalid or a trailing
!     // byte.
  
      // replace leading byte with invalid byte
!     {1, 4, 0, 0, 0xFF, 0},
!     {3, 4, 1, 1, 0xFF, 1},
!     {6, 4, 3, 2, 0xFF, 3},
!     {10, 4, 6, 3, 0xFF, 6},
! 
!     // replace leading byte with trailing byte
!     {1, 4, 0, 0, 0b10101010, 0},
!     {3, 4, 1, 1, 0b10101010, 1},
!     {6, 4, 3, 2, 0b10101010, 3},
!     {10, 4, 6, 3, 0b10101010, 6},
! 
!     // 2. Missing trailing byte. We will replace the trailing byte with
!     // non-trailing byte, such as a byte that is always invalid or a leading
!     // byte (simple ASCII byte in our case).
  
      // replace first trailing byte with ASCII byte
      {3, 4, 1, 1, 'z', 2},
*************** utf8_to_utf32_in_error (const std::codec
*** 197,217 ****
      {10, 4, 6, 3, 'z', 7},
  
      // replace first trailing byte with invalid byte
!     {3, 4, 1, 1, '\xFF', 2},
!     {6, 4, 3, 2, '\xFF', 4},
!     {10, 4, 6, 3, '\xFF', 7},
  
      // replace second trailing byte with ASCII byte
      {6, 4, 3, 2, 'z', 5},
      {10, 4, 6, 3, 'z', 8},
  
      // replace second trailing byte with invalid byte
!     {6, 4, 3, 2, '\xFF', 5},
!     {10, 4, 6, 3, '\xFF', 8},
  
      // replace third trailing byte
      {10, 4, 6, 3, 'z', 9},
!     {10, 4, 6, 3, '\xFF', 9},
  
      // replace first trailing byte with ASCII byte, also incomplete at end
      {5, 4, 3, 2, 'z', 4},
--- 232,258 ----
      {10, 4, 6, 3, 'z', 7},
  
      // replace first trailing byte with invalid byte
!     {3, 4, 1, 1, 0xFF, 2},
!     {6, 4, 3, 2, 0xFF, 4},
!     {10, 4, 6, 3, 0xFF, 7},
  
      // replace second trailing byte with ASCII byte
      {6, 4, 3, 2, 'z', 5},
      {10, 4, 6, 3, 'z', 8},
  
      // replace second trailing byte with invalid byte
!     {6, 4, 3, 2, 0xFF, 5},
!     {10, 4, 6, 3, 0xFF, 8},
  
      // replace third trailing byte
      {10, 4, 6, 3, 'z', 9},
!     {10, 4, 6, 3, 0xFF, 9},
! 
!     // 2.1 The following test-cases raise doubt whether error or partial should
!     // be returned. For example, we have 4-byte sequence with valid leading
!     // byte. If we hide the last byte we need to return partial. But, if the
!     // second or third byte, which are visible to the call to codecvt, are
!     // malformed then error should be returned.
  
      // replace first trailing byte with ASCII byte, also incomplete at end
      {5, 4, 3, 2, 'z', 4},
*************** utf8_to_utf32_in_error (const std::codec
*** 219,248 ****
      {9, 4, 6, 3, 'z', 7},
  
      // replace first trailing byte with invalid byte, also incomplete at end
!     {5, 4, 3, 2, '\xFF', 4},
!     {8, 4, 6, 3, '\xFF', 7},
!     {9, 4, 6, 3, '\xFF', 7},
  
      // replace second trailing byte with ASCII byte, also incomplete at end
      {9, 4, 6, 3, 'z', 8},
  
      // replace second trailing byte with invalid byte, also incomplete at end
!     {9, 4, 6, 3, '\xFF', 8},
    };
    for (auto t : offsets)
      {
!       char in[array_size (valid_in)] = {};
!       CharT out[array_size (exp) - 1] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        VERIFY (t.expected_in_next <= t.in_size);
        VERIFY (t.expected_out_next <= t.out_size);
!       char_traits<char>::copy (in, valid_in, array_size (valid_in));
        in[t.replace_pos] = t.replace_char;
  
        auto state = mbstate_t{};
!       auto in_next = (const char *) nullptr;
!       auto out_next = (CharT *) nullptr;
        auto res = codecvt_base::result ();
  
        res = cvt.in (state, in, in + t.in_size, in_next, out, out + t.out_size,
--- 260,310 ----
      {9, 4, 6, 3, 'z', 7},
  
      // replace first trailing byte with invalid byte, also incomplete at end
!     {5, 4, 3, 2, 0xFF, 4},
!     {8, 4, 6, 3, 0xFF, 7},
!     {9, 4, 6, 3, 0xFF, 7},
  
      // replace second trailing byte with ASCII byte, also incomplete at end
      {9, 4, 6, 3, 'z', 8},
  
      // replace second trailing byte with invalid byte, also incomplete at end
!     {9, 4, 6, 3, 0xFF, 8},
! 
!     // 3. Surrogate CP. We modify the second byte (first trailing) of the 3-byte
!     // CP U+D700
!     {6, 4, 3, 2, 0b10100000, 4}, // turn U+D700 into U+D800
!     {6, 4, 3, 2, 0b10101100, 4}, // turn U+D700 into U+DB00
!     {6, 4, 3, 2, 0b10110000, 4}, // turn U+D700 into U+DC00
!     {6, 4, 3, 2, 0b10111100, 4}, // turn U+D700 into U+DF00
! 
!     // 4. Overlong sequence. The CPs in the input are chosen such as modifying
!     // just the leading byte is enough to make them overlong, i.e. for the
!     // 3-byte and 4-byte CP the second byte (first trailing) has enough leading
!     // zeroes.
!     {3, 4, 1, 1, 0b11000000, 1},  // make the 2-byte CP overlong
!     {3, 4, 1, 1, 0b11000001, 1},  // make the 2-byte CP overlong
!     {6, 4, 3, 2, 0b11100000, 3},  // make the 3-byte CP overlong
!     {10, 4, 6, 3, 0b11110000, 6}, // make the 4-byte CP overlong
! 
!     // 5. CP above range
!     // turn U+10AAAA into U+14AAAA by changing its leading byte
!     {10, 4, 6, 3, 0b11110101, 6},
!     // turn U+10AAAA into U+11AAAA by changing its 2nd byte
!     {10, 4, 6, 3, 0b10011010, 7},
    };
    for (auto t : offsets)
      {
!       InternT out[array_size (exp) - 1] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        VERIFY (t.expected_in_next <= t.in_size);
        VERIFY (t.expected_out_next <= t.out_size);
!       auto old_char = in[t.replace_pos];
        in[t.replace_pos] = t.replace_char;
  
        auto state = mbstate_t{};
!       auto in_next = (const ExternT *) nullptr;
!       auto out_next = (InternT *) nullptr;
        auto res = codecvt_base::result ();
  
        res = cvt.in (state, in, in + t.in_size, in_next, out, out + t.out_size,
*************** utf8_to_utf32_in_error (const std::codec
*** 250,297 ****
        VERIFY (res == cvt.error);
        VERIFY (in_next == in + t.expected_in_next);
        VERIFY (out_next == out + t.expected_out_next);
!       VERIFY (char_traits<CharT>::compare (out, exp, t.expected_out_next) == 0);
        if (t.expected_out_next < array_size (out))
  	VERIFY (out[t.expected_out_next] == 0);
      }
  }
  
! template <class CharT>
  void
! utf8_to_utf32_in (const std::codecvt<CharT, char, mbstate_t> &cvt)
  {
    utf8_to_utf32_in_ok (cvt);
    utf8_to_utf32_in_partial (cvt);
    utf8_to_utf32_in_error (cvt);
  }
  
! template <class CharT>
  void
! utf32_to_utf8_out_ok (const std::codecvt<CharT, char, mbstate_t> &cvt)
  {
    using namespace std;
    // UTF-8 string of 1-byte CP, 2-byte CP, 3-byte CP and 4-byte CP
!   const char32_t in_literal[] = U"bш\uAAAA\U0010AAAA";
!   const char exp[] = "bш\uAAAA\U0010AAAA";
!   CharT in[array_size (in_literal)] = {};
!   copy (begin (in_literal), end (in_literal), begin (in));
  
!   static_assert (array_size (in_literal) == 5, "");
!   static_assert (array_size (in) == 5, "");
!   static_assert (array_size (exp) == 11, "");
!   VERIFY (char_traits<char32_t>::length (in_literal) == 4);
!   VERIFY (char_traits<CharT>::length (in) == 4);
!   VERIFY (char_traits<char>::length (exp) == 10);
  
!   const test_offsets_ok offsets[] = {{0, 0}, {1, 1}, {2, 3}, {3, 6}, {4, 10}};
    for (auto t : offsets)
      {
!       char out[array_size (exp) - 1] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        auto state = mbstate_t{};
!       auto in_next = (const CharT *) nullptr;
!       auto out_next = (char *) nullptr;
        auto res = codecvt_base::result ();
  
        res = cvt.out (state, in, in + t.in_size, in_next, out, out + t.out_size,
--- 312,367 ----
        VERIFY (res == cvt.error);
        VERIFY (in_next == in + t.expected_in_next);
        VERIFY (out_next == out + t.expected_out_next);
!       VERIFY (char_traits<InternT>::compare (out, exp, t.expected_out_next)
! 	      == 0);
        if (t.expected_out_next < array_size (out))
  	VERIFY (out[t.expected_out_next] == 0);
+ 
+       state = {};
+       auto len = cvt.length (state, in, in + t.in_size, t.out_size);
+       VERIFY (len >= 0);
+       VERIFY (static_cast<size_t> (len) == t.expected_in_next);
+ 
+       in[t.replace_pos] = old_char;
      }
  }
  
! template <class InternT, class ExternT>
  void
! utf8_to_utf32_in (const std::codecvt<InternT, ExternT, mbstate_t> &cvt)
  {
    utf8_to_utf32_in_ok (cvt);
    utf8_to_utf32_in_partial (cvt);
    utf8_to_utf32_in_error (cvt);
  }
  
! template <class InternT, class ExternT>
  void
! utf32_to_utf8_out_ok (const std::codecvt<InternT, ExternT, mbstate_t> &cvt)
  {
    using namespace std;
    // UTF-8 string of 1-byte CP, 2-byte CP, 3-byte CP and 4-byte CP
!   const char32_t input[] = U"b\u0448\uAAAA\U0010AAAA";
!   const unsigned char expected[] = "b\u0448\uAAAA\U0010AAAA";
!   static_assert (array_size (input) == 5, "");
!   static_assert (array_size (expected) == 11, "");
  
!   InternT in[array_size (input)];
!   ExternT exp[array_size (expected)];
!   copy (begin (input), end (input), begin (in));
!   copy (begin (expected), end (expected), begin (exp));
!   VERIFY (char_traits<InternT>::length (in) == 4);
!   VERIFY (char_traits<ExternT>::length (exp) == 10);
  
!   test_offsets_ok offsets[] = {{0, 0}, {1, 1}, {2, 3}, {3, 6}, {4, 10}};
    for (auto t : offsets)
      {
!       ExternT out[array_size (exp) - 1] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        auto state = mbstate_t{};
!       auto in_next = (const InternT *) nullptr;
!       auto out_next = (ExternT *) nullptr;
        auto res = codecvt_base::result ();
  
        res = cvt.out (state, in, in + t.in_size, in_next, out, out + t.out_size,
*************** utf32_to_utf8_out_ok (const std::codecvt
*** 299,329 ****
        VERIFY (res == cvt.ok);
        VERIFY (in_next == in + t.in_size);
        VERIFY (out_next == out + t.out_size);
!       VERIFY (char_traits<char>::compare (out, exp, t.out_size) == 0);
        if (t.out_size < array_size (out))
  	VERIFY (out[t.out_size] == 0);
      }
  }
  
! template <class CharT>
  void
! utf32_to_utf8_out_partial (const std::codecvt<CharT, char, mbstate_t> &cvt)
  {
    using namespace std;
    // UTF-8 string of 1-byte CP, 2-byte CP, 3-byte CP and 4-byte CP
!   const char32_t in_literal[] = U"bш\uAAAA\U0010AAAA";
!   const char exp[] = "bш\uAAAA\U0010AAAA";
!   CharT in[array_size (in_literal)] = {};
!   copy (begin (in_literal), end (in_literal), begin (in));
  
!   static_assert (array_size (in_literal) == 5, "");
!   static_assert (array_size (in) == 5, "");
!   static_assert (array_size (exp) == 11, "");
!   VERIFY (char_traits<char32_t>::length (in_literal) == 4);
!   VERIFY (char_traits<CharT>::length (in) == 4);
!   VERIFY (char_traits<char>::length (exp) == 10);
  
!   const test_offsets_partial offsets[] = {
      {1, 0, 0, 0}, // no space for first CP
  
      {2, 1, 1, 1}, // no space for second CP
--- 369,399 ----
        VERIFY (res == cvt.ok);
        VERIFY (in_next == in + t.in_size);
        VERIFY (out_next == out + t.out_size);
!       VERIFY (char_traits<ExternT>::compare (out, exp, t.out_size) == 0);
        if (t.out_size < array_size (out))
  	VERIFY (out[t.out_size] == 0);
      }
  }
  
! template <class InternT, class ExternT>
  void
! utf32_to_utf8_out_partial (const std::codecvt<InternT, ExternT, mbstate_t> &cvt)
  {
    using namespace std;
    // UTF-8 string of 1-byte CP, 2-byte CP, 3-byte CP and 4-byte CP
!   const char32_t input[] = U"b\u0448\uAAAA\U0010AAAA";
!   const unsigned char expected[] = "b\u0448\uAAAA\U0010AAAA";
!   static_assert (array_size (input) == 5, "");
!   static_assert (array_size (expected) == 11, "");
  
!   InternT in[array_size (input)];
!   ExternT exp[array_size (expected)];
!   copy (begin (input), end (input), begin (in));
!   copy (begin (expected), end (expected), begin (exp));
!   VERIFY (char_traits<InternT>::length (in) == 4);
!   VERIFY (char_traits<ExternT>::length (exp) == 10);
  
!   test_offsets_partial offsets[] = {
      {1, 0, 0, 0}, // no space for first CP
  
      {2, 1, 1, 1}, // no space for second CP
*************** utf32_to_utf8_out_partial (const std::co
*** 340,353 ****
    };
    for (auto t : offsets)
      {
!       char out[array_size (exp) - 1] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        VERIFY (t.expected_in_next <= t.in_size);
        VERIFY (t.expected_out_next <= t.out_size);
        auto state = mbstate_t{};
!       auto in_next = (const CharT *) nullptr;
!       auto out_next = (char *) nullptr;
        auto res = codecvt_base::result ();
  
        res = cvt.out (state, in, in + t.in_size, in_next, out, out + t.out_size,
--- 410,423 ----
    };
    for (auto t : offsets)
      {
!       ExternT out[array_size (exp) - 1] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        VERIFY (t.expected_in_next <= t.in_size);
        VERIFY (t.expected_out_next <= t.out_size);
        auto state = mbstate_t{};
!       auto in_next = (const InternT *) nullptr;
!       auto out_next = (ExternT *) nullptr;
        auto res = codecvt_base::result ();
  
        res = cvt.out (state, in, in + t.in_size, in_next, out, out + t.out_size,
*************** utf32_to_utf8_out_partial (const std::co
*** 355,398 ****
        VERIFY (res == cvt.partial);
        VERIFY (in_next == in + t.expected_in_next);
        VERIFY (out_next == out + t.expected_out_next);
!       VERIFY (char_traits<char>::compare (out, exp, t.expected_out_next) == 0);
        if (t.expected_out_next < array_size (out))
  	VERIFY (out[t.expected_out_next] == 0);
      }
  }
  
! template <class CharT>
  void
! utf32_to_utf8_out_error (const std::codecvt<CharT, char, mbstate_t> &cvt)
  {
    using namespace std;
!   const char32_t valid_in[] = U"bш\uAAAA\U0010AAAA";
!   const char exp[] = "bш\uAAAA\U0010AAAA";
  
!   static_assert (array_size (valid_in) == 5, "");
!   static_assert (array_size (exp) == 11, "");
!   VERIFY (char_traits<char32_t>::length (valid_in) == 4);
!   VERIFY (char_traits<char>::length (exp) == 10);
  
!   test_offsets_error<CharT> offsets[] = {{4, 10, 0, 0, 0x00110000, 0},
! 					 {4, 10, 1, 1, 0x00110000, 1},
! 					 {4, 10, 2, 3, 0x00110000, 2},
! 					 {4, 10, 3, 6, 0x00110000, 3}};
  
    for (auto t : offsets)
      {
!       CharT in[array_size (valid_in)] = {};
!       char out[array_size (exp) - 1] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        VERIFY (t.expected_in_next <= t.in_size);
        VERIFY (t.expected_out_next <= t.out_size);
!       copy (begin (valid_in), end (valid_in), begin (in));
        in[t.replace_pos] = t.replace_char;
  
        auto state = mbstate_t{};
!       auto in_next = (const CharT *) nullptr;
!       auto out_next = (char *) nullptr;
        auto res = codecvt_base::result ();
  
        res = cvt.out (state, in, in + t.in_size, in_next, out, out + t.out_size,
--- 425,482 ----
        VERIFY (res == cvt.partial);
        VERIFY (in_next == in + t.expected_in_next);
        VERIFY (out_next == out + t.expected_out_next);
!       VERIFY (char_traits<ExternT>::compare (out, exp, t.expected_out_next)
! 	      == 0);
        if (t.expected_out_next < array_size (out))
  	VERIFY (out[t.expected_out_next] == 0);
      }
  }
  
! template <class InternT, class ExternT>
  void
! utf32_to_utf8_out_error (const std::codecvt<InternT, ExternT, mbstate_t> &cvt)
  {
    using namespace std;
!   // UTF-8 string of 1-byte CP, 2-byte CP, 3-byte CP and 4-byte CP
!   const char32_t input[] = U"b\u0448\uAAAA\U0010AAAA";
!   const unsigned char expected[] = "b\u0448\uAAAA\U0010AAAA";
!   static_assert (array_size (input) == 5, "");
!   static_assert (array_size (expected) == 11, "");
  
!   InternT in[array_size (input)];
!   ExternT exp[array_size (expected)];
!   copy (begin (input), end (input), begin (in));
!   copy (begin (expected), end (expected), begin (exp));
!   VERIFY (char_traits<InternT>::length (in) == 4);
!   VERIFY (char_traits<ExternT>::length (exp) == 10);
  
!   test_offsets_error<InternT> offsets[] = {
! 
!     // Surrogate CP
!     {4, 10, 0, 0, 0xD800, 0},
!     {4, 10, 1, 1, 0xDBFF, 1},
!     {4, 10, 2, 3, 0xDC00, 2},
!     {4, 10, 3, 6, 0xDFFF, 3},
! 
!     // CP out of range
!     {4, 10, 0, 0, 0x00110000, 0},
!     {4, 10, 1, 1, 0x00110000, 1},
!     {4, 10, 2, 3, 0x00110000, 2},
!     {4, 10, 3, 6, 0x00110000, 3}};
  
    for (auto t : offsets)
      {
!       ExternT out[array_size (exp) - 1] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        VERIFY (t.expected_in_next <= t.in_size);
        VERIFY (t.expected_out_next <= t.out_size);
!       auto old_char = in[t.replace_pos];
        in[t.replace_pos] = t.replace_char;
  
        auto state = mbstate_t{};
!       auto in_next = (const InternT *) nullptr;
!       auto out_next = (ExternT *) nullptr;
        auto res = codecvt_base::result ();
  
        res = cvt.out (state, in, in + t.in_size, in_next, out, out + t.out_size,
*************** utf32_to_utf8_out_error (const std::code
*** 400,455 ****
        VERIFY (res == cvt.error);
        VERIFY (in_next == in + t.expected_in_next);
        VERIFY (out_next == out + t.expected_out_next);
!       VERIFY (char_traits<char>::compare (out, exp, t.expected_out_next) == 0);
        if (t.expected_out_next < array_size (out))
  	VERIFY (out[t.expected_out_next] == 0);
      }
  }
  
! template <class CharT>
  void
! utf32_to_utf8_out (const std::codecvt<CharT, char, mbstate_t> &cvt)
  {
    utf32_to_utf8_out_ok (cvt);
    utf32_to_utf8_out_partial (cvt);
    utf32_to_utf8_out_error (cvt);
  }
  
! template <class CharT>
  void
! test_utf8_utf32_codecvts (const std::codecvt<CharT, char, mbstate_t> &cvt)
  {
    utf8_to_utf32_in (cvt);
    utf32_to_utf8_out (cvt);
  }
  
! template <class CharT>
  void
! utf8_to_utf16_in_ok (const std::codecvt<CharT, char, mbstate_t> &cvt)
  {
    using namespace std;
    // UTF-8 string of 1-byte CP, 2-byte CP, 3-byte CP and 4-byte CP
!   const char in[] = "bш\uAAAA\U0010AAAA";
!   const char16_t exp_literal[] = u"bш\uAAAA\U0010AAAA";
!   CharT exp[array_size (exp_literal)] = {};
!   copy (begin (exp_literal), end (exp_literal), begin (exp));
  
!   static_assert (array_size (in) == 11, "");
!   static_assert (array_size (exp_literal) == 6, "");
!   static_assert (array_size (exp) == 6, "");
!   VERIFY (char_traits<char>::length (in) == 10);
!   VERIFY (char_traits<char16_t>::length (exp_literal) == 5);
!   VERIFY (char_traits<CharT>::length (exp) == 5);
  
    test_offsets_ok offsets[] = {{0, 0}, {1, 1}, {3, 2}, {6, 3}, {10, 5}};
    for (auto t : offsets)
      {
!       CharT out[array_size (exp) - 1] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        auto state = mbstate_t{};
!       auto in_next = (const char *) nullptr;
!       auto out_next = (CharT *) nullptr;
        auto res = codecvt_base::result ();
  
        res = cvt.in (state, in, in + t.in_size, in_next, out, out + t.out_size,
--- 484,542 ----
        VERIFY (res == cvt.error);
        VERIFY (in_next == in + t.expected_in_next);
        VERIFY (out_next == out + t.expected_out_next);
!       VERIFY (char_traits<ExternT>::compare (out, exp, t.expected_out_next)
! 	      == 0);
        if (t.expected_out_next < array_size (out))
  	VERIFY (out[t.expected_out_next] == 0);
+ 
+       in[t.replace_pos] = old_char;
      }
  }
  
! template <class InternT, class ExternT>
  void
! utf32_to_utf8_out (const std::codecvt<InternT, ExternT, mbstate_t> &cvt)
  {
    utf32_to_utf8_out_ok (cvt);
    utf32_to_utf8_out_partial (cvt);
    utf32_to_utf8_out_error (cvt);
  }
  
! template <class InternT, class ExternT>
  void
! test_utf8_utf32_cvt (const std::codecvt<InternT, ExternT, mbstate_t> &cvt)
  {
    utf8_to_utf32_in (cvt);
    utf32_to_utf8_out (cvt);
  }
  
! template <class InternT, class ExternT>
  void
! utf8_to_utf16_in_ok (const std::codecvt<InternT, ExternT, mbstate_t> &cvt)
  {
    using namespace std;
    // UTF-8 string of 1-byte CP, 2-byte CP, 3-byte CP and 4-byte CP
!   const unsigned char input[] = "b\u0448\uAAAA\U0010AAAA";
!   const char16_t expected[] = u"b\u0448\uAAAA\U0010AAAA";
!   static_assert (array_size (input) == 11, "");
!   static_assert (array_size (expected) == 6, "");
  
!   ExternT in[array_size (input)];
!   InternT exp[array_size (expected)];
!   copy (begin (input), end (input), begin (in));
!   copy (begin (expected), end (expected), begin (exp));
!   VERIFY (char_traits<ExternT>::length (in) == 10);
!   VERIFY (char_traits<InternT>::length (exp) == 5);
  
    test_offsets_ok offsets[] = {{0, 0}, {1, 1}, {3, 2}, {6, 3}, {10, 5}};
    for (auto t : offsets)
      {
!       InternT out[array_size (exp) - 1] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        auto state = mbstate_t{};
!       auto in_next = (const ExternT *) nullptr;
!       auto out_next = (InternT *) nullptr;
        auto res = codecvt_base::result ();
  
        res = cvt.in (state, in, in + t.in_size, in_next, out, out + t.out_size,
*************** utf8_to_utf16_in_ok (const std::codecvt<
*** 457,475 ****
        VERIFY (res == cvt.ok);
        VERIFY (in_next == in + t.in_size);
        VERIFY (out_next == out + t.out_size);
!       VERIFY (char_traits<CharT>::compare (out, exp, t.out_size) == 0);
        if (t.out_size < array_size (out))
  	VERIFY (out[t.out_size] == 0);
      }
  
    for (auto t : offsets)
      {
!       CharT out[array_size (exp)] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        auto state = mbstate_t{};
!       auto in_next = (const char *) nullptr;
!       auto out_next = (CharT *) nullptr;
        auto res = codecvt_base::result ();
  
        res
--- 544,567 ----
        VERIFY (res == cvt.ok);
        VERIFY (in_next == in + t.in_size);
        VERIFY (out_next == out + t.out_size);
!       VERIFY (char_traits<InternT>::compare (out, exp, t.out_size) == 0);
        if (t.out_size < array_size (out))
  	VERIFY (out[t.out_size] == 0);
+ 
+       state = {};
+       auto len = cvt.length (state, in, in + t.in_size, t.out_size);
+       VERIFY (len >= 0);
+       VERIFY (static_cast<size_t> (len) == t.in_size);
      }
  
    for (auto t : offsets)
      {
!       InternT out[array_size (exp)] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        auto state = mbstate_t{};
!       auto in_next = (const ExternT *) nullptr;
!       auto out_next = (InternT *) nullptr;
        auto res = codecvt_base::result ();
  
        res
*************** utf8_to_utf16_in_ok (const std::codecvt<
*** 477,505 ****
        VERIFY (res == cvt.ok);
        VERIFY (in_next == in + t.in_size);
        VERIFY (out_next == out + t.out_size);
!       VERIFY (char_traits<CharT>::compare (out, exp, t.out_size) == 0);
        if (t.out_size < array_size (out))
  	VERIFY (out[t.out_size] == 0);
      }
  }
  
! template <class CharT>
  void
! utf8_to_utf16_in_partial (const std::codecvt<CharT, char, mbstate_t> &cvt)
  {
    using namespace std;
    // UTF-8 string of 1-byte CP, 2-byte CP, 3-byte CP and 4-byte CP
!   const char in[] = "bш\uAAAA\U0010AAAA";
!   const char16_t exp_literal[] = u"bш\uAAAA\U0010AAAA";
!   CharT exp[array_size (exp_literal)] = {};
!   copy (begin (exp_literal), end (exp_literal), begin (exp));
  
!   static_assert (array_size (in) == 11, "");
!   static_assert (array_size (exp_literal) == 6, "");
!   static_assert (array_size (exp) == 6, "");
!   VERIFY (char_traits<char>::length (in) == 10);
!   VERIFY (char_traits<char16_t>::length (exp_literal) == 5);
!   VERIFY (char_traits<CharT>::length (exp) == 5);
  
    test_offsets_partial offsets[] = {
      {1, 0, 0, 0}, // no space for first CP
--- 569,602 ----
        VERIFY (res == cvt.ok);
        VERIFY (in_next == in + t.in_size);
        VERIFY (out_next == out + t.out_size);
!       VERIFY (char_traits<InternT>::compare (out, exp, t.out_size) == 0);
        if (t.out_size < array_size (out))
  	VERIFY (out[t.out_size] == 0);
+ 
+       state = {};
+       auto len = cvt.length (state, in, in + t.in_size, array_size (out));
+       VERIFY (len >= 0);
+       VERIFY (static_cast<size_t> (len) == t.in_size);
      }
  }
  
! template <class InternT, class ExternT>
  void
! utf8_to_utf16_in_partial (const std::codecvt<InternT, ExternT, mbstate_t> &cvt)
  {
    using namespace std;
    // UTF-8 string of 1-byte CP, 2-byte CP, 3-byte CP and 4-byte CP
!   const unsigned char input[] = "b\u0448\uAAAA\U0010AAAA";
!   const char16_t expected[] = u"b\u0448\uAAAA\U0010AAAA";
!   static_assert (array_size (input) == 11, "");
!   static_assert (array_size (expected) == 6, "");
  
!   ExternT in[array_size (input)];
!   InternT exp[array_size (expected)];
!   copy (begin (input), end (input), begin (in));
!   copy (begin (expected), end (expected), begin (exp));
!   VERIFY (char_traits<ExternT>::length (in) == 10);
!   VERIFY (char_traits<InternT>::length (exp) == 5);
  
    test_offsets_partial offsets[] = {
      {1, 0, 0, 0}, // no space for first CP
*************** utf8_to_utf16_in_partial (const std::cod
*** 530,543 ****
  
    for (auto t : offsets)
      {
!       CharT out[array_size (exp) - 1] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        VERIFY (t.expected_in_next <= t.in_size);
        VERIFY (t.expected_out_next <= t.out_size);
        auto state = mbstate_t{};
!       auto in_next = (const char *) nullptr;
!       auto out_next = (CharT *) nullptr;
        auto res = codecvt_base::result ();
  
        res = cvt.in (state, in, in + t.in_size, in_next, out, out + t.out_size,
--- 627,640 ----
  
    for (auto t : offsets)
      {
!       InternT out[array_size (exp) - 1] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        VERIFY (t.expected_in_next <= t.in_size);
        VERIFY (t.expected_out_next <= t.out_size);
        auto state = mbstate_t{};
!       auto in_next = (const ExternT *) nullptr;
!       auto out_next = (InternT *) nullptr;
        auto res = codecvt_base::result ();
  
        res = cvt.in (state, in, in + t.in_size, in_next, out, out + t.out_size,
*************** utf8_to_utf16_in_partial (const std::cod
*** 545,580 ****
        VERIFY (res == cvt.partial);
        VERIFY (in_next == in + t.expected_in_next);
        VERIFY (out_next == out + t.expected_out_next);
!       VERIFY (char_traits<CharT>::compare (out, exp, t.expected_out_next) == 0);
        if (t.expected_out_next < array_size (out))
  	VERIFY (out[t.expected_out_next] == 0);
      }
  }
  
! template <class CharT>
  void
! utf8_to_utf16_in_error (const std::codecvt<CharT, char, mbstate_t> &cvt)
  {
    using namespace std;
!   const char valid_in[] = "bш\uAAAA\U0010AAAA";
!   const char16_t exp_literal[] = u"bш\uAAAA\U0010AAAA";
!   CharT exp[array_size (exp_literal)] = {};
!   copy (begin (exp_literal), end (exp_literal), begin (exp));
  
!   static_assert (array_size (valid_in) == 11, "");
!   static_assert (array_size (exp_literal) == 6, "");
!   static_assert (array_size (exp) == 6, "");
!   VERIFY (char_traits<char>::length (valid_in) == 10);
!   VERIFY (char_traits<char16_t>::length (exp_literal) == 5);
!   VERIFY (char_traits<CharT>::length (exp) == 5);
  
!   test_offsets_error<char> offsets[] = {
  
      // replace leading byte with invalid byte
!     {1, 5, 0, 0, '\xFF', 0},
!     {3, 5, 1, 1, '\xFF', 1},
!     {6, 5, 3, 2, '\xFF', 3},
!     {10, 5, 6, 3, '\xFF', 6},
  
      // replace first trailing byte with ASCII byte
      {3, 5, 1, 1, 'z', 2},
--- 642,704 ----
        VERIFY (res == cvt.partial);
        VERIFY (in_next == in + t.expected_in_next);
        VERIFY (out_next == out + t.expected_out_next);
!       VERIFY (char_traits<InternT>::compare (out, exp, t.expected_out_next)
! 	      == 0);
        if (t.expected_out_next < array_size (out))
  	VERIFY (out[t.expected_out_next] == 0);
+ 
+       state = {};
+       auto len = cvt.length (state, in, in + t.in_size, t.out_size);
+       VERIFY (len >= 0);
+       VERIFY (static_cast<size_t> (len) == t.expected_in_next);
      }
  }
  
! template <class InternT, class ExternT>
  void
! utf8_to_utf16_in_error (const std::codecvt<InternT, ExternT, mbstate_t> &cvt)
  {
    using namespace std;
!   // UTF-8 string of 1-byte CP, 2-byte CP, 3-byte CP, 4-byte CP
!   const unsigned char input[] = "b\u0448\uD700\U0010AAAA";
!   const char16_t expected[] = u"b\u0448\uD700\U0010AAAA";
!   static_assert (array_size (input) == 11, "");
!   static_assert (array_size (expected) == 6, "");
  
!   ExternT in[array_size (input)];
!   InternT exp[array_size (expected)];
!   copy (begin (input), end (input), begin (in));
!   copy (begin (expected), end (expected), begin (exp));
!   VERIFY (char_traits<ExternT>::length (in) == 10);
!   VERIFY (char_traits<InternT>::length (exp) == 5);
  
!   // There are 5 classes of errors in UTF-8 decoding
!   // 1. Missing leading byte
!   // 2. Missing trailing byte
!   // 3. Surrogate CP
!   // 4. Overlong sequence
!   // 5. CP out of Unicode range
!   test_offsets_error<unsigned char> offsets[] = {
! 
!     // 1. Missing leading byte. We will replace the leading byte with
!     // non-leading byte, such as a byte that is always invalid or a trailing
!     // byte.
  
      // replace leading byte with invalid byte
!     {1, 5, 0, 0, 0xFF, 0},
!     {3, 5, 1, 1, 0xFF, 1},
!     {6, 5, 3, 2, 0xFF, 3},
!     {10, 5, 6, 3, 0xFF, 6},
! 
!     // replace leading byte with trailing byte
!     {1, 5, 0, 0, 0b10101010, 0},
!     {3, 5, 1, 1, 0b10101010, 1},
!     {6, 5, 3, 2, 0b10101010, 3},
!     {10, 5, 6, 3, 0b10101010, 6},
! 
!     // 2. Missing trailing byte. We will replace the trailing byte with
!     // non-trailing byte, such as a byte that is always invalid or a leading
!     // byte (simple ASCII byte in our case).
  
      // replace first trailing byte with ASCII byte
      {3, 5, 1, 1, 'z', 2},
*************** utf8_to_utf16_in_error (const std::codec
*** 582,602 ****
      {10, 5, 6, 3, 'z', 7},
  
      // replace first trailing byte with invalid byte
!     {3, 5, 1, 1, '\xFF', 2},
!     {6, 5, 3, 2, '\xFF', 4},
!     {10, 5, 6, 3, '\xFF', 7},
  
      // replace second trailing byte with ASCII byte
      {6, 5, 3, 2, 'z', 5},
      {10, 5, 6, 3, 'z', 8},
  
      // replace second trailing byte with invalid byte
!     {6, 5, 3, 2, '\xFF', 5},
!     {10, 5, 6, 3, '\xFF', 8},
  
      // replace third trailing byte
      {10, 5, 6, 3, 'z', 9},
!     {10, 5, 6, 3, '\xFF', 9},
  
      // replace first trailing byte with ASCII byte, also incomplete at end
      {5, 5, 3, 2, 'z', 4},
--- 706,732 ----
      {10, 5, 6, 3, 'z', 7},
  
      // replace first trailing byte with invalid byte
!     {3, 5, 1, 1, 0xFF, 2},
!     {6, 5, 3, 2, 0xFF, 4},
!     {10, 5, 6, 3, 0xFF, 7},
  
      // replace second trailing byte with ASCII byte
      {6, 5, 3, 2, 'z', 5},
      {10, 5, 6, 3, 'z', 8},
  
      // replace second trailing byte with invalid byte
!     {6, 5, 3, 2, 0xFF, 5},
!     {10, 5, 6, 3, 0xFF, 8},
  
      // replace third trailing byte
      {10, 5, 6, 3, 'z', 9},
!     {10, 5, 6, 3, 0xFF, 9},
! 
!     // 2.1 The following test-cases raise doubt whether error or partial should
!     // be returned. For example, we have 4-byte sequence with valid leading
!     // byte. If we hide the last byte we need to return partial. But, if the
!     // second or third byte, which are visible to the call to codecvt, are
!     // malformed then error should be returned.
  
      // replace first trailing byte with ASCII byte, also incomplete at end
      {5, 5, 3, 2, 'z', 4},
*************** utf8_to_utf16_in_error (const std::codec
*** 604,633 ****
      {9, 5, 6, 3, 'z', 7},
  
      // replace first trailing byte with invalid byte, also incomplete at end
!     {5, 5, 3, 2, '\xFF', 4},
!     {8, 5, 6, 3, '\xFF', 7},
!     {9, 5, 6, 3, '\xFF', 7},
  
      // replace second trailing byte with ASCII byte, also incomplete at end
      {9, 5, 6, 3, 'z', 8},
  
      // replace second trailing byte with invalid byte, also incomplete at end
!     {9, 5, 6, 3, '\xFF', 8},
    };
    for (auto t : offsets)
      {
!       char in[array_size (valid_in)] = {};
!       CharT out[array_size (exp) - 1] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        VERIFY (t.expected_in_next <= t.in_size);
        VERIFY (t.expected_out_next <= t.out_size);
!       char_traits<char>::copy (in, valid_in, array_size (valid_in));
        in[t.replace_pos] = t.replace_char;
  
        auto state = mbstate_t{};
!       auto in_next = (const char *) nullptr;
!       auto out_next = (CharT *) nullptr;
        auto res = codecvt_base::result ();
  
        res = cvt.in (state, in, in + t.in_size, in_next, out, out + t.out_size,
--- 734,784 ----
      {9, 5, 6, 3, 'z', 7},
  
      // replace first trailing byte with invalid byte, also incomplete at end
!     {5, 5, 3, 2, 0xFF, 4},
!     {8, 5, 6, 3, 0xFF, 7},
!     {9, 5, 6, 3, 0xFF, 7},
  
      // replace second trailing byte with ASCII byte, also incomplete at end
      {9, 5, 6, 3, 'z', 8},
  
      // replace second trailing byte with invalid byte, also incomplete at end
!     {9, 5, 6, 3, 0xFF, 8},
! 
!     // 3. Surrogate CP. We modify the second byte (first trailing) of the 3-byte
!     // CP U+D700
!     {6, 5, 3, 2, 0b10100000, 4}, // turn U+D700 into U+D800
!     {6, 5, 3, 2, 0b10101100, 4}, // turn U+D700 into U+DB00
!     {6, 5, 3, 2, 0b10110000, 4}, // turn U+D700 into U+DC00
!     {6, 5, 3, 2, 0b10111100, 4}, // turn U+D700 into U+DF00
! 
!     // 4. Overlong sequence. The CPs in the input are chosen such as modifying
!     // just the leading byte is enough to make them overlong, i.e. for the
!     // 3-byte and 4-byte CP the second byte (first trailing) has enough leading
!     // zeroes.
!     {3, 5, 1, 1, 0b11000000, 1},  // make the 2-byte CP overlong
!     {3, 5, 1, 1, 0b11000001, 1},  // make the 2-byte CP overlong
!     {6, 5, 3, 2, 0b11100000, 3},  // make the 3-byte CP overlong
!     {10, 5, 6, 3, 0b11110000, 6}, // make the 4-byte CP overlong
! 
!     // 5. CP above range
!     // turn U+10AAAA into U+14AAAA by changing its leading byte
!     {10, 5, 6, 3, 0b11110101, 6},
!     // turn U+10AAAA into U+11AAAA by changing its 2nd byte
!     {10, 5, 6, 3, 0b10011010, 7},
    };
    for (auto t : offsets)
      {
!       InternT out[array_size (exp) - 1] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        VERIFY (t.expected_in_next <= t.in_size);
        VERIFY (t.expected_out_next <= t.out_size);
!       auto old_char = in[t.replace_pos];
        in[t.replace_pos] = t.replace_char;
  
        auto state = mbstate_t{};
!       auto in_next = (const ExternT *) nullptr;
!       auto out_next = (InternT *) nullptr;
        auto res = codecvt_base::result ();
  
        res = cvt.in (state, in, in + t.in_size, in_next, out, out + t.out_size,
*************** utf8_to_utf16_in_error (const std::codec
*** 635,682 ****
        VERIFY (res == cvt.error);
        VERIFY (in_next == in + t.expected_in_next);
        VERIFY (out_next == out + t.expected_out_next);
!       VERIFY (char_traits<CharT>::compare (out, exp, t.expected_out_next) == 0);
        if (t.expected_out_next < array_size (out))
  	VERIFY (out[t.expected_out_next] == 0);
      }
  }
  
! template <class CharT>
  void
! utf8_to_utf16_in (const std::codecvt<CharT, char, mbstate_t> &cvt)
  {
    utf8_to_utf16_in_ok (cvt);
    utf8_to_utf16_in_partial (cvt);
    utf8_to_utf16_in_error (cvt);
  }
  
! template <class CharT>
  void
! utf16_to_utf8_out_ok (const std::codecvt<CharT, char, mbstate_t> &cvt)
  {
    using namespace std;
    // UTF-8 string of 1-byte CP, 2-byte CP, 3-byte CP and 4-byte CP
!   const char16_t in_literal[] = u"bш\uAAAA\U0010AAAA";
!   const char exp[] = "bш\uAAAA\U0010AAAA";
!   CharT in[array_size (in_literal)];
!   copy (begin (in_literal), end (in_literal), begin (in));
  
!   static_assert (array_size (in_literal) == 6, "");
!   static_assert (array_size (exp) == 11, "");
!   static_assert (array_size (in) == 6, "");
!   VERIFY (char_traits<char16_t>::length (in_literal) == 5);
!   VERIFY (char_traits<char>::length (exp) == 10);
!   VERIFY (char_traits<CharT>::length (in) == 5);
  
!   const test_offsets_ok offsets[] = {{0, 0}, {1, 1}, {2, 3}, {3, 6}, {5, 10}};
    for (auto t : offsets)
      {
!       char out[array_size (exp) - 1] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        auto state = mbstate_t{};
!       auto in_next = (const CharT *) nullptr;
!       auto out_next = (char *) nullptr;
        auto res = codecvt_base::result ();
  
        res = cvt.out (state, in, in + t.in_size, in_next, out, out + t.out_size,
--- 786,841 ----
        VERIFY (res == cvt.error);
        VERIFY (in_next == in + t.expected_in_next);
        VERIFY (out_next == out + t.expected_out_next);
!       VERIFY (char_traits<InternT>::compare (out, exp, t.expected_out_next)
! 	      == 0);
        if (t.expected_out_next < array_size (out))
  	VERIFY (out[t.expected_out_next] == 0);
+ 
+       state = {};
+       auto len = cvt.length (state, in, in + t.in_size, t.out_size);
+       VERIFY (len >= 0);
+       VERIFY (static_cast<size_t> (len) == t.expected_in_next);
+ 
+       in[t.replace_pos] = old_char;
      }
  }
  
! template <class InternT, class ExternT>
  void
! utf8_to_utf16_in (const std::codecvt<InternT, ExternT, mbstate_t> &cvt)
  {
    utf8_to_utf16_in_ok (cvt);
    utf8_to_utf16_in_partial (cvt);
    utf8_to_utf16_in_error (cvt);
  }
  
! template <class InternT, class ExternT>
  void
! utf16_to_utf8_out_ok (const std::codecvt<InternT, ExternT, mbstate_t> &cvt)
  {
    using namespace std;
    // UTF-8 string of 1-byte CP, 2-byte CP, 3-byte CP and 4-byte CP
!   const char16_t input[] = u"b\u0448\uAAAA\U0010AAAA";
!   const unsigned char expected[] = "b\u0448\uAAAA\U0010AAAA";
!   static_assert (array_size (input) == 6, "");
!   static_assert (array_size (expected) == 11, "");
  
!   InternT in[array_size (input)];
!   ExternT exp[array_size (expected)];
!   copy (begin (input), end (input), begin (in));
!   copy (begin (expected), end (expected), begin (exp));
!   VERIFY (char_traits<InternT>::length (in) == 5);
!   VERIFY (char_traits<ExternT>::length (exp) == 10);
  
!   test_offsets_ok offsets[] = {{0, 0}, {1, 1}, {2, 3}, {3, 6}, {5, 10}};
    for (auto t : offsets)
      {
!       ExternT out[array_size (exp) - 1] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        auto state = mbstate_t{};
!       auto in_next = (const InternT *) nullptr;
!       auto out_next = (ExternT *) nullptr;
        auto res = codecvt_base::result ();
  
        res = cvt.out (state, in, in + t.in_size, in_next, out, out + t.out_size,
*************** utf16_to_utf8_out_ok (const std::codecvt
*** 684,714 ****
        VERIFY (res == cvt.ok);
        VERIFY (in_next == in + t.in_size);
        VERIFY (out_next == out + t.out_size);
!       VERIFY (char_traits<char>::compare (out, exp, t.out_size) == 0);
        if (t.out_size < array_size (out))
  	VERIFY (out[t.out_size] == 0);
      }
  }
  
! template <class CharT>
  void
! utf16_to_utf8_out_partial (const std::codecvt<CharT, char, mbstate_t> &cvt)
  {
    using namespace std;
    // UTF-8 string of 1-byte CP, 2-byte CP, 3-byte CP and 4-byte CP
!   const char16_t in_literal[] = u"bш\uAAAA\U0010AAAA";
!   const char exp[] = "bш\uAAAA\U0010AAAA";
!   CharT in[array_size (in_literal)];
!   copy (begin (in_literal), end (in_literal), begin (in));
  
!   static_assert (array_size (in_literal) == 6, "");
!   static_assert (array_size (exp) == 11, "");
!   static_assert (array_size (in) == 6, "");
!   VERIFY (char_traits<char16_t>::length (in_literal) == 5);
!   VERIFY (char_traits<char>::length (exp) == 10);
!   VERIFY (char_traits<CharT>::length (in) == 5);
  
!   const test_offsets_partial offsets[] = {
      {1, 0, 0, 0}, // no space for first CP
  
      {2, 1, 1, 1}, // no space for second CP
--- 843,873 ----
        VERIFY (res == cvt.ok);
        VERIFY (in_next == in + t.in_size);
        VERIFY (out_next == out + t.out_size);
!       VERIFY (char_traits<ExternT>::compare (out, exp, t.out_size) == 0);
        if (t.out_size < array_size (out))
  	VERIFY (out[t.out_size] == 0);
      }
  }
  
! template <class InternT, class ExternT>
  void
! utf16_to_utf8_out_partial (const std::codecvt<InternT, ExternT, mbstate_t> &cvt)
  {
    using namespace std;
    // UTF-8 string of 1-byte CP, 2-byte CP, 3-byte CP and 4-byte CP
!   const char16_t input[] = u"b\u0448\uAAAA\U0010AAAA";
!   const unsigned char expected[] = "b\u0448\uAAAA\U0010AAAA";
!   static_assert (array_size (input) == 6, "");
!   static_assert (array_size (expected) == 11, "");
  
!   InternT in[array_size (input)];
!   ExternT exp[array_size (expected)];
!   copy (begin (input), end (input), begin (in));
!   copy (begin (expected), end (expected), begin (exp));
!   VERIFY (char_traits<InternT>::length (in) == 5);
!   VERIFY (char_traits<ExternT>::length (exp) == 10);
  
!   test_offsets_partial offsets[] = {
      {1, 0, 0, 0}, // no space for first CP
  
      {2, 1, 1, 1}, // no space for second CP
*************** utf16_to_utf8_out_partial (const std::co
*** 732,745 ****
    };
    for (auto t : offsets)
      {
!       char out[array_size (exp) - 1] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        VERIFY (t.expected_in_next <= t.in_size);
        VERIFY (t.expected_out_next <= t.out_size);
        auto state = mbstate_t{};
!       auto in_next = (const CharT *) nullptr;
!       auto out_next = (char *) nullptr;
        auto res = codecvt_base::result ();
  
        res = cvt.out (state, in, in + t.in_size, in_next, out, out + t.out_size,
--- 891,904 ----
    };
    for (auto t : offsets)
      {
!       ExternT out[array_size (exp) - 1] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        VERIFY (t.expected_in_next <= t.in_size);
        VERIFY (t.expected_out_next <= t.out_size);
        auto state = mbstate_t{};
!       auto in_next = (const InternT *) nullptr;
!       auto out_next = (ExternT *) nullptr;
        auto res = codecvt_base::result ();
  
        res = cvt.out (state, in, in + t.in_size, in_next, out, out + t.out_size,
*************** utf16_to_utf8_out_partial (const std::co
*** 747,772 ****
        VERIFY (res == cvt.partial);
        VERIFY (in_next == in + t.expected_in_next);
        VERIFY (out_next == out + t.expected_out_next);
!       VERIFY (char_traits<char>::compare (out, exp, t.expected_out_next) == 0);
        if (t.expected_out_next < array_size (out))
  	VERIFY (out[t.expected_out_next] == 0);
      }
  }
  
! template <class CharT>
  void
! utf16_to_utf8_out_error (const std::codecvt<CharT, char, mbstate_t> &cvt)
  {
    using namespace std;
!   const char16_t valid_in[] = u"bш\uAAAA\U0010AAAA";
!   const char exp[] = "bш\uAAAA\U0010AAAA";
  
!   static_assert (array_size (valid_in) == 6, "");
!   static_assert (array_size (exp) == 11, "");
!   VERIFY (char_traits<char16_t>::length (valid_in) == 5);
!   VERIFY (char_traits<char>::length (exp) == 10);
  
!   test_offsets_error<CharT> offsets[] = {
      {5, 10, 0, 0, 0xD800, 0},
      {5, 10, 0, 0, 0xDBFF, 0},
      {5, 10, 0, 0, 0xDC00, 0},
--- 906,939 ----
        VERIFY (res == cvt.partial);
        VERIFY (in_next == in + t.expected_in_next);
        VERIFY (out_next == out + t.expected_out_next);
!       VERIFY (char_traits<ExternT>::compare (out, exp, t.expected_out_next)
! 	      == 0);
        if (t.expected_out_next < array_size (out))
  	VERIFY (out[t.expected_out_next] == 0);
      }
  }
  
! template <class InternT, class ExternT>
  void
! utf16_to_utf8_out_error (const std::codecvt<InternT, ExternT, mbstate_t> &cvt)
  {
    using namespace std;
!   // UTF-8 string of 1-byte CP, 2-byte CP, 3-byte CP and 4-byte CP
!   const char16_t input[] = u"b\u0448\uAAAA\U0010AAAA";
!   const unsigned char expected[] = "b\u0448\uAAAA\U0010AAAA";
!   static_assert (array_size (input) == 6, "");
!   static_assert (array_size (expected) == 11, "");
  
!   InternT in[array_size (input)];
!   ExternT exp[array_size (expected)];
!   copy (begin (input), end (input), begin (in));
!   copy (begin (expected), end (expected), begin (exp));
!   VERIFY (char_traits<InternT>::length (in) == 5);
!   VERIFY (char_traits<ExternT>::length (exp) == 10);
  
!   // The only possible error in UTF-16 is unpaired surrogate code units.
!   // So we replace valid code points (scalar values) with lone surrogate CU.
!   test_offsets_error<InternT> offsets[] = {
      {5, 10, 0, 0, 0xD800, 0},
      {5, 10, 0, 0, 0xDBFF, 0},
      {5, 10, 0, 0, 0xDC00, 0},
*************** utf16_to_utf8_out_error (const std::code
*** 796,813 ****
  
    for (auto t : offsets)
      {
!       CharT in[array_size (valid_in)] = {};
!       char out[array_size (exp) - 1] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        VERIFY (t.expected_in_next <= t.in_size);
        VERIFY (t.expected_out_next <= t.out_size);
!       copy (begin (valid_in), end (valid_in), begin (in));
        in[t.replace_pos] = t.replace_char;
  
        auto state = mbstate_t{};
!       auto in_next = (const CharT *) nullptr;
!       auto out_next = (char *) nullptr;
        auto res = codecvt_base::result ();
  
        res = cvt.out (state, in, in + t.in_size, in_next, out, out + t.out_size,
--- 963,979 ----
  
    for (auto t : offsets)
      {
!       ExternT out[array_size (exp) - 1] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        VERIFY (t.expected_in_next <= t.in_size);
        VERIFY (t.expected_out_next <= t.out_size);
!       auto old_char = in[t.replace_pos];
        in[t.replace_pos] = t.replace_char;
  
        auto state = mbstate_t{};
!       auto in_next = (const InternT *) nullptr;
!       auto out_next = (ExternT *) nullptr;
        auto res = codecvt_base::result ();
  
        res = cvt.out (state, in, in + t.in_size, in_next, out, out + t.out_size,
*************** utf16_to_utf8_out_error (const std::code
*** 815,870 ****
        VERIFY (res == cvt.error);
        VERIFY (in_next == in + t.expected_in_next);
        VERIFY (out_next == out + t.expected_out_next);
!       VERIFY (char_traits<char>::compare (out, exp, t.expected_out_next) == 0);
        if (t.expected_out_next < array_size (out))
  	VERIFY (out[t.expected_out_next] == 0);
      }
  }
  
! template <class CharT>
  void
! utf16_to_utf8_out (const std::codecvt<CharT, char, mbstate_t> &cvt)
  {
    utf16_to_utf8_out_ok (cvt);
    utf16_to_utf8_out_partial (cvt);
    utf16_to_utf8_out_error (cvt);
  }
  
! template <class CharT>
  void
! test_utf8_utf16_cvts (const std::codecvt<CharT, char, mbstate_t> &cvt)
  {
    utf8_to_utf16_in (cvt);
    utf16_to_utf8_out (cvt);
  }
  
! template <class CharT>
  void
! utf8_to_ucs2_in_ok (const std::codecvt<CharT, char, mbstate_t> &cvt)
  {
    using namespace std;
    // UTF-8 string of 1-byte CP, 2-byte CP and 3-byte CP
!   const char in[] = "bш\uAAAA";
!   const char16_t exp_literal[] = u"bш\uAAAA";
!   CharT exp[array_size (exp_literal)] = {};
!   copy (begin (exp_literal), end (exp_literal), begin (exp));
  
!   static_assert (array_size (in) == 7, "");
!   static_assert (array_size (exp_literal) == 4, "");
!   static_assert (array_size (exp) == 4, "");
!   VERIFY (char_traits<char>::length (in) == 6);
!   VERIFY (char_traits<char16_t>::length (exp_literal) == 3);
!   VERIFY (char_traits<CharT>::length (exp) == 3);
  
    test_offsets_ok offsets[] = {{0, 0}, {1, 1}, {3, 2}, {6, 3}};
    for (auto t : offsets)
      {
!       CharT out[array_size (exp) - 1] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        auto state = mbstate_t{};
!       auto in_next = (const char *) nullptr;
!       auto out_next = (CharT *) nullptr;
        auto res = codecvt_base::result ();
  
        res = cvt.in (state, in, in + t.in_size, in_next, out, out + t.out_size,
--- 981,1039 ----
        VERIFY (res == cvt.error);
        VERIFY (in_next == in + t.expected_in_next);
        VERIFY (out_next == out + t.expected_out_next);
!       VERIFY (char_traits<ExternT>::compare (out, exp, t.expected_out_next)
! 	      == 0);
        if (t.expected_out_next < array_size (out))
  	VERIFY (out[t.expected_out_next] == 0);
+ 
+       in[t.replace_pos] = old_char;
      }
  }
  
! template <class InternT, class ExternT>
  void
! utf16_to_utf8_out (const std::codecvt<InternT, ExternT, mbstate_t> &cvt)
  {
    utf16_to_utf8_out_ok (cvt);
    utf16_to_utf8_out_partial (cvt);
    utf16_to_utf8_out_error (cvt);
  }
  
! template <class InternT, class ExternT>
  void
! test_utf8_utf16_cvt (const std::codecvt<InternT, ExternT, mbstate_t> &cvt)
  {
    utf8_to_utf16_in (cvt);
    utf16_to_utf8_out (cvt);
  }
  
! template <class InternT, class ExternT>
  void
! utf8_to_ucs2_in_ok (const std::codecvt<InternT, ExternT, mbstate_t> &cvt)
  {
    using namespace std;
    // UTF-8 string of 1-byte CP, 2-byte CP and 3-byte CP
!   const unsigned char input[] = "b\u0448\uAAAA";
!   const char16_t expected[] = u"b\u0448\uAAAA";
!   static_assert (array_size (input) == 7, "");
!   static_assert (array_size (expected) == 4, "");
  
!   ExternT in[array_size (input)];
!   InternT exp[array_size (expected)];
!   copy (begin (input), end (input), begin (in));
!   copy (begin (expected), end (expected), begin (exp));
!   VERIFY (char_traits<ExternT>::length (in) == 6);
!   VERIFY (char_traits<InternT>::length (exp) == 3);
  
    test_offsets_ok offsets[] = {{0, 0}, {1, 1}, {3, 2}, {6, 3}};
    for (auto t : offsets)
      {
!       InternT out[array_size (exp) - 1] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        auto state = mbstate_t{};
!       auto in_next = (const ExternT *) nullptr;
!       auto out_next = (InternT *) nullptr;
        auto res = codecvt_base::result ();
  
        res = cvt.in (state, in, in + t.in_size, in_next, out, out + t.out_size,
*************** utf8_to_ucs2_in_ok (const std::codecvt<C
*** 872,890 ****
        VERIFY (res == cvt.ok);
        VERIFY (in_next == in + t.in_size);
        VERIFY (out_next == out + t.out_size);
!       VERIFY (char_traits<CharT>::compare (out, exp, t.out_size) == 0);
        if (t.out_size < array_size (out))
  	VERIFY (out[t.out_size] == 0);
      }
  
    for (auto t : offsets)
      {
!       CharT out[array_size (exp)] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        auto state = mbstate_t{};
!       auto in_next = (const char *) nullptr;
!       auto out_next = (CharT *) nullptr;
        auto res = codecvt_base::result ();
  
        res
--- 1041,1064 ----
        VERIFY (res == cvt.ok);
        VERIFY (in_next == in + t.in_size);
        VERIFY (out_next == out + t.out_size);
!       VERIFY (char_traits<InternT>::compare (out, exp, t.out_size) == 0);
        if (t.out_size < array_size (out))
  	VERIFY (out[t.out_size] == 0);
+ 
+       state = {};
+       auto len = cvt.length (state, in, in + t.in_size, t.out_size);
+       VERIFY (len >= 0);
+       VERIFY (static_cast<size_t> (len) == t.in_size);
      }
  
    for (auto t : offsets)
      {
!       InternT out[array_size (exp)] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        auto state = mbstate_t{};
!       auto in_next = (const ExternT *) nullptr;
!       auto out_next = (InternT *) nullptr;
        auto res = codecvt_base::result ();
  
        res
*************** utf8_to_ucs2_in_ok (const std::codecvt<C
*** 892,920 ****
        VERIFY (res == cvt.ok);
        VERIFY (in_next == in + t.in_size);
        VERIFY (out_next == out + t.out_size);
!       VERIFY (char_traits<CharT>::compare (out, exp, t.out_size) == 0);
        if (t.out_size < array_size (out))
  	VERIFY (out[t.out_size] == 0);
      }
  }
  
! template <class CharT>
  void
! utf8_to_ucs2_in_partial (const std::codecvt<CharT, char, mbstate_t> &cvt)
  {
    using namespace std;
    // UTF-8 string of 1-byte CP, 2-byte CP and 3-byte CP
!   const char in[] = "bш\uAAAA";
!   const char16_t exp_literal[] = u"bш\uAAAA";
!   CharT exp[array_size (exp_literal)] = {};
!   copy (begin (exp_literal), end (exp_literal), begin (exp));
  
!   static_assert (array_size (in) == 7, "");
!   static_assert (array_size (exp_literal) == 4, "");
!   static_assert (array_size (exp) == 4, "");
!   VERIFY (char_traits<char>::length (in) == 6);
!   VERIFY (char_traits<char16_t>::length (exp_literal) == 3);
!   VERIFY (char_traits<CharT>::length (exp) == 3);
  
    test_offsets_partial offsets[] = {
      {1, 0, 0, 0}, // no space for first CP
--- 1066,1099 ----
        VERIFY (res == cvt.ok);
        VERIFY (in_next == in + t.in_size);
        VERIFY (out_next == out + t.out_size);
!       VERIFY (char_traits<InternT>::compare (out, exp, t.out_size) == 0);
        if (t.out_size < array_size (out))
  	VERIFY (out[t.out_size] == 0);
+ 
+       state = {};
+       auto len = cvt.length (state, in, in + t.in_size, array_size (out));
+       VERIFY (len >= 0);
+       VERIFY (static_cast<size_t> (len) == t.in_size);
      }
  }
  
! template <class InternT, class ExternT>
  void
! utf8_to_ucs2_in_partial (const std::codecvt<InternT, ExternT, mbstate_t> &cvt)
  {
    using namespace std;
    // UTF-8 string of 1-byte CP, 2-byte CP and 3-byte CP
!   const unsigned char input[] = "b\u0448\uAAAA";
!   const char16_t expected[] = u"b\u0448\uAAAA";
!   static_assert (array_size (input) == 7, "");
!   static_assert (array_size (expected) == 4, "");
  
!   ExternT in[array_size (input)];
!   InternT exp[array_size (expected)];
!   copy (begin (input), end (input), begin (in));
!   copy (begin (expected), end (expected), begin (exp));
!   VERIFY (char_traits<ExternT>::length (in) == 6);
!   VERIFY (char_traits<InternT>::length (exp) == 3);
  
    test_offsets_partial offsets[] = {
      {1, 0, 0, 0}, // no space for first CP
*************** utf8_to_ucs2_in_partial (const std::code
*** 932,945 ****
  
    for (auto t : offsets)
      {
!       CharT out[array_size (exp) - 1] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        VERIFY (t.expected_in_next <= t.in_size);
        VERIFY (t.expected_out_next <= t.out_size);
        auto state = mbstate_t{};
!       auto in_next = (const char *) nullptr;
!       auto out_next = (CharT *) nullptr;
        auto res = codecvt_base::result ();
  
        res = cvt.in (state, in, in + t.in_size, in_next, out, out + t.out_size,
--- 1111,1124 ----
  
    for (auto t : offsets)
      {
!       InternT out[array_size (exp) - 1] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        VERIFY (t.expected_in_next <= t.in_size);
        VERIFY (t.expected_out_next <= t.out_size);
        auto state = mbstate_t{};
!       auto in_next = (const ExternT *) nullptr;
!       auto out_next = (InternT *) nullptr;
        auto res = codecvt_base::result ();
  
        res = cvt.in (state, in, in + t.in_size, in_next, out, out + t.out_size,
*************** utf8_to_ucs2_in_partial (const std::code
*** 947,982 ****
        VERIFY (res == cvt.partial);
        VERIFY (in_next == in + t.expected_in_next);
        VERIFY (out_next == out + t.expected_out_next);
!       VERIFY (char_traits<CharT>::compare (out, exp, t.expected_out_next) == 0);
        if (t.expected_out_next < array_size (out))
  	VERIFY (out[t.expected_out_next] == 0);
      }
  }
  
! template <class CharT>
  void
! utf8_to_ucs2_in_error (const std::codecvt<CharT, char, mbstate_t> &cvt)
  {
    using namespace std;
!   const char valid_in[] = "bш\uAAAA\U0010AAAA";
!   const char16_t exp_literal[] = u"bш\uAAAA\U0010AAAA";
!   CharT exp[array_size (exp_literal)] = {};
!   copy (begin (exp_literal), end (exp_literal), begin (exp));
  
!   static_assert (array_size (valid_in) == 11, "");
!   static_assert (array_size (exp_literal) == 6, "");
!   static_assert (array_size (exp) == 6, "");
!   VERIFY (char_traits<char>::length (valid_in) == 10);
!   VERIFY (char_traits<char16_t>::length (exp_literal) == 5);
!   VERIFY (char_traits<CharT>::length (exp) == 5);
  
!   test_offsets_error<char> offsets[] = {
  
      // replace leading byte with invalid byte
!     {1, 5, 0, 0, '\xFF', 0},
!     {3, 5, 1, 1, '\xFF', 1},
!     {6, 5, 3, 2, '\xFF', 3},
!     {10, 5, 6, 3, '\xFF', 6},
  
      // replace first trailing byte with ASCII byte
      {3, 5, 1, 1, 'z', 2},
--- 1126,1187 ----
        VERIFY (res == cvt.partial);
        VERIFY (in_next == in + t.expected_in_next);
        VERIFY (out_next == out + t.expected_out_next);
!       VERIFY (char_traits<InternT>::compare (out, exp, t.expected_out_next)
! 	      == 0);
        if (t.expected_out_next < array_size (out))
  	VERIFY (out[t.expected_out_next] == 0);
+ 
+       state = {};
+       auto len = cvt.length (state, in, in + t.in_size, t.out_size);
+       VERIFY (len >= 0);
+       VERIFY (static_cast<size_t> (len) == t.expected_in_next);
      }
  }
  
! template <class InternT, class ExternT>
  void
! utf8_to_ucs2_in_error (const std::codecvt<InternT, ExternT, mbstate_t> &cvt)
  {
    using namespace std;
!   const unsigned char input[] = "b\u0448\uD700\U0010AAAA";
!   const char16_t expected[] = u"b\u0448\uD700\U0010AAAA";
!   static_assert (array_size (input) == 11, "");
!   static_assert (array_size (expected) == 6, "");
  
!   ExternT in[array_size (input)];
!   InternT exp[array_size (expected)];
!   copy (begin (input), end (input), begin (in));
!   copy (begin (expected), end (expected), begin (exp));
!   VERIFY (char_traits<ExternT>::length (in) == 10);
!   VERIFY (char_traits<InternT>::length (exp) == 5);
  
!   // There are 5 classes of errors in UTF-8 decoding
!   // 1. Missing leading byte
!   // 2. Missing trailing byte
!   // 3. Surrogate CP
!   // 4. Overlong sequence
!   // 5. CP out of Unicode range
!   test_offsets_error<unsigned char> offsets[] = {
! 
!     // 1. Missing leading byte. We will replace the leading byte with
!     // non-leading byte, such as a byte that is always invalid or a trailing
!     // byte.
  
      // replace leading byte with invalid byte
!     {1, 5, 0, 0, 0xFF, 0},
!     {3, 5, 1, 1, 0xFF, 1},
!     {6, 5, 3, 2, 0xFF, 3},
!     {10, 5, 6, 3, 0xFF, 6},
! 
!     // replace leading byte with trailing byte
!     {1, 5, 0, 0, 0b10101010, 0},
!     {3, 5, 1, 1, 0b10101010, 1},
!     {6, 5, 3, 2, 0b10101010, 3},
!     {10, 5, 6, 3, 0b10101010, 6},
! 
!     // 2. Missing trailing byte. We will replace the trailing byte with
!     // non-trailing byte, such as a byte that is always invalid or a leading
!     // byte (simple ASCII byte in our case).
  
      // replace first trailing byte with ASCII byte
      {3, 5, 1, 1, 'z', 2},
*************** utf8_to_ucs2_in_error (const std::codecv
*** 984,1055 ****
      {10, 5, 6, 3, 'z', 7},
  
      // replace first trailing byte with invalid byte
!     {3, 5, 1, 1, '\xFF', 2},
!     {6, 5, 3, 2, '\xFF', 4},
!     {10, 5, 6, 3, '\xFF', 7},
  
      // replace second trailing byte with ASCII byte
      {6, 5, 3, 2, 'z', 5},
      {10, 5, 6, 3, 'z', 8},
  
      // replace second trailing byte with invalid byte
!     {6, 5, 3, 2, '\xFF', 5},
!     {10, 5, 6, 3, '\xFF', 8},
  
      // replace third trailing byte
      {10, 5, 6, 3, 'z', 9},
!     {10, 5, 6, 3, '\xFF', 9},
! 
!     // When we see a leading byte of 4-byte CP, we should return error, no
!     // matter if it is incomplete at the end or has errors in the trailing
!     // bytes.
! 
!     // Don't replace anything, show full 4-byte CP
!     {10, 4, 6, 3, 'b', 0},
!     {10, 5, 6, 3, 'b', 0},
  
!     // Don't replace anything, show incomplete 4-byte CP at the end
!     {7, 4, 6, 3, 'b', 0}, // incomplete fourth CP
!     {8, 4, 6, 3, 'b', 0}, // incomplete fourth CP
!     {9, 4, 6, 3, 'b', 0}, // incomplete fourth CP
!     {7, 5, 6, 3, 'b', 0}, // incomplete fourth CP
!     {8, 5, 6, 3, 'b', 0}, // incomplete fourth CP
!     {9, 5, 6, 3, 'b', 0}, // incomplete fourth CP
  
      // replace first trailing byte with ASCII byte, also incomplete at end
      {5, 5, 3, 2, 'z', 4},
- 
-     // replace first trailing byte with invalid byte, also incomplete at end
-     {5, 5, 3, 2, '\xFF', 4},
- 
-     // replace first trailing byte with ASCII byte, also incomplete at end
      {8, 5, 6, 3, 'z', 7},
      {9, 5, 6, 3, 'z', 7},
  
      // replace first trailing byte with invalid byte, also incomplete at end
!     {8, 5, 6, 3, '\xFF', 7},
!     {9, 5, 6, 3, '\xFF', 7},
  
      // replace second trailing byte with ASCII byte, also incomplete at end
      {9, 5, 6, 3, 'z', 8},
  
      // replace second trailing byte with invalid byte, also incomplete at end
!     {9, 5, 6, 3, '\xFF', 8},
    };
    for (auto t : offsets)
      {
!       char in[array_size (valid_in)] = {};
!       CharT out[array_size (exp) - 1] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        VERIFY (t.expected_in_next <= t.in_size);
        VERIFY (t.expected_out_next <= t.out_size);
!       char_traits<char>::copy (in, valid_in, array_size (valid_in));
        in[t.replace_pos] = t.replace_char;
  
        auto state = mbstate_t{};
!       auto in_next = (const char *) nullptr;
!       auto out_next = (CharT *) nullptr;
        auto res = codecvt_base::result ();
  
        res = cvt.in (state, in, in + t.in_size, in_next, out, out + t.out_size,
--- 1189,1278 ----
      {10, 5, 6, 3, 'z', 7},
  
      // replace first trailing byte with invalid byte
!     {3, 5, 1, 1, 0xFF, 2},
!     {6, 5, 3, 2, 0xFF, 4},
!     {10, 5, 6, 3, 0xFF, 7},
  
      // replace second trailing byte with ASCII byte
      {6, 5, 3, 2, 'z', 5},
      {10, 5, 6, 3, 'z', 8},
  
      // replace second trailing byte with invalid byte
!     {6, 5, 3, 2, 0xFF, 5},
!     {10, 5, 6, 3, 0xFF, 8},
  
      // replace third trailing byte
      {10, 5, 6, 3, 'z', 9},
!     {10, 5, 6, 3, 0xFF, 9},
  
!     // 2.1 The following test-cases raise doubt whether error or partial should
!     // be returned. For example, we have 4-byte sequence with valid leading
!     // byte. If we hide the last byte we need to return partial. But, if the
!     // second or third byte, which are visible to the call to codecvt, are
!     // malformed then error should be returned.
  
      // replace first trailing byte with ASCII byte, also incomplete at end
      {5, 5, 3, 2, 'z', 4},
      {8, 5, 6, 3, 'z', 7},
      {9, 5, 6, 3, 'z', 7},
  
      // replace first trailing byte with invalid byte, also incomplete at end
!     {5, 5, 3, 2, 0xFF, 4},
!     {8, 5, 6, 3, 0xFF, 7},
!     {9, 5, 6, 3, 0xFF, 7},
  
      // replace second trailing byte with ASCII byte, also incomplete at end
      {9, 5, 6, 3, 'z', 8},
  
      // replace second trailing byte with invalid byte, also incomplete at end
!     {9, 5, 6, 3, 0xFF, 8},
! 
!     // 3. Surrogate CP. We modify the second byte (first trailing) of the 3-byte
!     // CP U+D700
!     {6, 5, 3, 2, 0b10100000, 4}, // turn U+D700 into U+D800
!     {6, 5, 3, 2, 0b10101100, 4}, // turn U+D700 into U+DB00
!     {6, 5, 3, 2, 0b10110000, 4}, // turn U+D700 into U+DC00
!     {6, 5, 3, 2, 0b10111100, 4}, // turn U+D700 into U+DF00
! 
!     // 4. Overlong sequence. The CPs in the input are chosen such as modifying
!     // just the leading byte is enough to make them overlong, i.e. for the
!     // 3-byte and 4-byte CP the second byte (first trailing) has enough leading
!     // zeroes.
!     {3, 5, 1, 1, 0b11000000, 1},  // make the 2-byte CP overlong
!     {3, 5, 1, 1, 0b11000001, 1},  // make the 2-byte CP overlong
!     {6, 5, 3, 2, 0b11100000, 3},  // make the 3-byte CP overlong
!     {10, 5, 6, 3, 0b11110000, 6}, // make the 4-byte CP overlong
! 
!     // 5. CP above range
!     // turn U+10AAAA into U+14AAAA by changing its leading byte
!     {10, 5, 6, 3, 0b11110101, 6},
!     // turn U+10AAAA into U+11AAAA by changing its 2nd byte
!     {10, 5, 6, 3, 0b10011010, 7},
!     // Don't replace anything, show full 4-byte CP U+10AAAA
!     {10, 4, 6, 3, 'b', 0},
!     {10, 5, 6, 3, 'b', 0},
!     // Don't replace anything, show incomplete 4-byte CP at the end. It's still
!     // out of UCS2 range just by seeing the first byte.
!     {7, 4, 6, 3, 'b', 0}, // incomplete fourth CP
!     {8, 4, 6, 3, 'b', 0}, // incomplete fourth CP
!     {9, 4, 6, 3, 'b', 0}, // incomplete fourth CP
!     {7, 5, 6, 3, 'b', 0}, // incomplete fourth CP
!     {8, 5, 6, 3, 'b', 0}, // incomplete fourth CP
!     {9, 5, 6, 3, 'b', 0}, // incomplete fourth CP
    };
    for (auto t : offsets)
      {
!       InternT out[array_size (exp) - 1] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        VERIFY (t.expected_in_next <= t.in_size);
        VERIFY (t.expected_out_next <= t.out_size);
!       auto old_char = in[t.replace_pos];
        in[t.replace_pos] = t.replace_char;
  
        auto state = mbstate_t{};
!       auto in_next = (const ExternT *) nullptr;
!       auto out_next = (InternT *) nullptr;
        auto res = codecvt_base::result ();
  
        res = cvt.in (state, in, in + t.in_size, in_next, out, out + t.out_size,
*************** utf8_to_ucs2_in_error (const std::codecv
*** 1057,1104 ****
        VERIFY (res == cvt.error);
        VERIFY (in_next == in + t.expected_in_next);
        VERIFY (out_next == out + t.expected_out_next);
!       VERIFY (char_traits<CharT>::compare (out, exp, t.expected_out_next) == 0);
        if (t.expected_out_next < array_size (out))
  	VERIFY (out[t.expected_out_next] == 0);
      }
  }
  
! template <class CharT>
  void
! utf8_to_ucs2_in (const std::codecvt<CharT, char, mbstate_t> &cvt)
  {
    utf8_to_ucs2_in_ok (cvt);
    utf8_to_ucs2_in_partial (cvt);
    utf8_to_ucs2_in_error (cvt);
  }
  
! template <class CharT>
  void
! ucs2_to_utf8_out_ok (const std::codecvt<CharT, char, mbstate_t> &cvt)
  {
    using namespace std;
    // UTF-8 string of 1-byte CP, 2-byte CP and 3-byte CP
!   const char16_t in_literal[] = u"bш\uAAAA";
!   const char exp[] = "bш\uAAAA";
!   CharT in[array_size (in_literal)] = {};
!   copy (begin (in_literal), end (in_literal), begin (in));
  
!   static_assert (array_size (in_literal) == 4, "");
!   static_assert (array_size (exp) == 7, "");
!   static_assert (array_size (in) == 4, "");
!   VERIFY (char_traits<char16_t>::length (in_literal) == 3);
!   VERIFY (char_traits<char>::length (exp) == 6);
!   VERIFY (char_traits<CharT>::length (in) == 3);
  
!   const test_offsets_ok offsets[] = {{0, 0}, {1, 1}, {2, 3}, {3, 6}};
    for (auto t : offsets)
      {
!       char out[array_size (exp) - 1] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        auto state = mbstate_t{};
!       auto in_next = (const CharT *) nullptr;
!       auto out_next = (char *) nullptr;
        auto res = codecvt_base::result ();
  
        res = cvt.out (state, in, in + t.in_size, in_next, out, out + t.out_size,
--- 1280,1335 ----
        VERIFY (res == cvt.error);
        VERIFY (in_next == in + t.expected_in_next);
        VERIFY (out_next == out + t.expected_out_next);
!       VERIFY (char_traits<InternT>::compare (out, exp, t.expected_out_next)
! 	      == 0);
        if (t.expected_out_next < array_size (out))
  	VERIFY (out[t.expected_out_next] == 0);
+ 
+       state = {};
+       auto len = cvt.length (state, in, in + t.in_size, t.out_size);
+       VERIFY (len >= 0);
+       VERIFY (static_cast<size_t> (len) == t.expected_in_next);
+ 
+       in[t.replace_pos] = old_char;
      }
  }
  
! template <class InternT, class ExternT>
  void
! utf8_to_ucs2_in (const std::codecvt<InternT, ExternT, mbstate_t> &cvt)
  {
    utf8_to_ucs2_in_ok (cvt);
    utf8_to_ucs2_in_partial (cvt);
    utf8_to_ucs2_in_error (cvt);
  }
  
! template <class InternT, class ExternT>
  void
! ucs2_to_utf8_out_ok (const std::codecvt<InternT, ExternT, mbstate_t> &cvt)
  {
    using namespace std;
    // UTF-8 string of 1-byte CP, 2-byte CP and 3-byte CP
!   const char16_t input[] = u"b\u0448\uAAAA";
!   const unsigned char expected[] = "b\u0448\uAAAA";
!   static_assert (array_size (input) == 4, "");
!   static_assert (array_size (expected) == 7, "");
  
!   InternT in[array_size (input)];
!   ExternT exp[array_size (expected)];
!   copy (begin (input), end (input), begin (in));
!   copy (begin (expected), end (expected), begin (exp));
!   VERIFY (char_traits<InternT>::length (in) == 3);
!   VERIFY (char_traits<ExternT>::length (exp) == 6);
  
!   test_offsets_ok offsets[] = {{0, 0}, {1, 1}, {2, 3}, {3, 6}};
    for (auto t : offsets)
      {
!       ExternT out[array_size (exp) - 1] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        auto state = mbstate_t{};
!       auto in_next = (const InternT *) nullptr;
!       auto out_next = (ExternT *) nullptr;
        auto res = codecvt_base::result ();
  
        res = cvt.out (state, in, in + t.in_size, in_next, out, out + t.out_size,
*************** ucs2_to_utf8_out_ok (const std::codecvt<
*** 1106,1136 ****
        VERIFY (res == cvt.ok);
        VERIFY (in_next == in + t.in_size);
        VERIFY (out_next == out + t.out_size);
!       VERIFY (char_traits<char>::compare (out, exp, t.out_size) == 0);
        if (t.out_size < array_size (out))
  	VERIFY (out[t.out_size] == 0);
      }
  }
  
! template <class CharT>
  void
! ucs2_to_utf8_out_partial (const std::codecvt<CharT, char, mbstate_t> &cvt)
  {
    using namespace std;
    // UTF-8 string of 1-byte CP, 2-byte CP and 3-byte CP
!   const char16_t in_literal[] = u"bш\uAAAA";
!   const char exp[] = "bш\uAAAA";
!   CharT in[array_size (in_literal)] = {};
!   copy (begin (in_literal), end (in_literal), begin (in));
  
!   static_assert (array_size (in_literal) == 4, "");
!   static_assert (array_size (exp) == 7, "");
!   static_assert (array_size (in) == 4, "");
!   VERIFY (char_traits<char16_t>::length (in_literal) == 3);
!   VERIFY (char_traits<char>::length (exp) == 6);
!   VERIFY (char_traits<CharT>::length (in) == 3);
  
!   const test_offsets_partial offsets[] = {
      {1, 0, 0, 0}, // no space for first CP
  
      {2, 1, 1, 1}, // no space for second CP
--- 1337,1367 ----
        VERIFY (res == cvt.ok);
        VERIFY (in_next == in + t.in_size);
        VERIFY (out_next == out + t.out_size);
!       VERIFY (char_traits<ExternT>::compare (out, exp, t.out_size) == 0);
        if (t.out_size < array_size (out))
  	VERIFY (out[t.out_size] == 0);
      }
  }
  
! template <class InternT, class ExternT>
  void
! ucs2_to_utf8_out_partial (const std::codecvt<InternT, ExternT, mbstate_t> &cvt)
  {
    using namespace std;
    // UTF-8 string of 1-byte CP, 2-byte CP and 3-byte CP
!   const char16_t input[] = u"b\u0448\uAAAA";
!   const unsigned char expected[] = "b\u0448\uAAAA";
!   static_assert (array_size (input) == 4, "");
!   static_assert (array_size (expected) == 7, "");
  
!   InternT in[array_size (input)];
!   ExternT exp[array_size (expected)];
!   copy (begin (input), end (input), begin (in));
!   copy (begin (expected), end (expected), begin (exp));
!   VERIFY (char_traits<InternT>::length (in) == 3);
!   VERIFY (char_traits<ExternT>::length (exp) == 6);
  
!   test_offsets_partial offsets[] = {
      {1, 0, 0, 0}, // no space for first CP
  
      {2, 1, 1, 1}, // no space for second CP
*************** ucs2_to_utf8_out_partial (const std::cod
*** 1142,1155 ****
    };
    for (auto t : offsets)
      {
!       char out[array_size (exp) - 1] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        VERIFY (t.expected_in_next <= t.in_size);
        VERIFY (t.expected_out_next <= t.out_size);
        auto state = mbstate_t{};
!       auto in_next = (const CharT *) nullptr;
!       auto out_next = (char *) nullptr;
        auto res = codecvt_base::result ();
  
        res = cvt.out (state, in, in + t.in_size, in_next, out, out + t.out_size,
--- 1373,1386 ----
    };
    for (auto t : offsets)
      {
!       ExternT out[array_size (exp) - 1] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        VERIFY (t.expected_in_next <= t.in_size);
        VERIFY (t.expected_out_next <= t.out_size);
        auto state = mbstate_t{};
!       auto in_next = (const InternT *) nullptr;
!       auto out_next = (ExternT *) nullptr;
        auto res = codecvt_base::result ();
  
        res = cvt.out (state, in, in + t.in_size, in_next, out, out + t.out_size,
*************** ucs2_to_utf8_out_partial (const std::cod
*** 1157,1199 ****
        VERIFY (res == cvt.partial);
        VERIFY (in_next == in + t.expected_in_next);
        VERIFY (out_next == out + t.expected_out_next);
!       VERIFY (char_traits<char>::compare (out, exp, t.expected_out_next) == 0);
        if (t.expected_out_next < array_size (out))
  	VERIFY (out[t.expected_out_next] == 0);
      }
  }
  
! template <class CharT>
  void
! ucs2_to_utf8_out_error (const std::codecvt<CharT, char, mbstate_t> &cvt)
  {
    using namespace std;
!   const char16_t valid_in[] = u"bш\uAAAA\U0010AAAA";
!   const char exp[] = "bш\uAAAA\U0010AAAA";
! 
!   static_assert (array_size (valid_in) == 6, "");
!   static_assert (array_size (exp) == 11, "");
!   VERIFY (char_traits<char16_t>::length (valid_in) == 5);
!   VERIFY (char_traits<char>::length (exp) == 10);
  
!   test_offsets_error<CharT> offsets[] = {
!     {5, 10, 0, 0, 0xD800, 0},
!     {5, 10, 0, 0, 0xDBFF, 0},
!     {5, 10, 0, 0, 0xDC00, 0},
!     {5, 10, 0, 0, 0xDFFF, 0},
  
!     {5, 10, 1, 1, 0xD800, 1},
!     {5, 10, 1, 1, 0xDBFF, 1},
!     {5, 10, 1, 1, 0xDC00, 1},
!     {5, 10, 1, 1, 0xDFFF, 1},
  
!     {5, 10, 2, 3, 0xD800, 2},
!     {5, 10, 2, 3, 0xDBFF, 2},
!     {5, 10, 2, 3, 0xDC00, 2},
!     {5, 10, 2, 3, 0xDFFF, 2},
  
!     // dont replace anything, just show the surrogate pair
!     {5, 10, 3, 6, u'b', 0},
  
      // make the leading surrogate a trailing one
      {5, 10, 3, 6, 0xDC00, 3},
--- 1388,1432 ----
        VERIFY (res == cvt.partial);
        VERIFY (in_next == in + t.expected_in_next);
        VERIFY (out_next == out + t.expected_out_next);
!       VERIFY (char_traits<ExternT>::compare (out, exp, t.expected_out_next)
! 	      == 0);
        if (t.expected_out_next < array_size (out))
  	VERIFY (out[t.expected_out_next] == 0);
      }
  }
  
! template <class InternT, class ExternT>
  void
! ucs2_to_utf8_out_error (const std::codecvt<InternT, ExternT, mbstate_t> &cvt)
  {
    using namespace std;
!   const char16_t input[] = u"b\u0448\uAAAA\U0010AAAA";
!   const unsigned char expected[] = "b\u0448\uAAAA\U0010AAAA";
!   static_assert (array_size (input) == 6, "");
!   static_assert (array_size (expected) == 11, "");
  
!   InternT in[array_size (input)];
!   ExternT exp[array_size (expected)];
!   copy (begin (input), end (input), begin (in));
!   copy (begin (expected), end (expected), begin (exp));
!   VERIFY (char_traits<InternT>::length (in) == 5);
!   VERIFY (char_traits<ExternT>::length (exp) == 10);
  
!   test_offsets_error<InternT> offsets[] = {
!     {3, 6, 0, 0, 0xD800, 0},
!     {3, 6, 0, 0, 0xDBFF, 0},
!     {3, 6, 0, 0, 0xDC00, 0},
!     {3, 6, 0, 0, 0xDFFF, 0},
  
!     {3, 6, 1, 1, 0xD800, 1},
!     {3, 6, 1, 1, 0xDBFF, 1},
!     {3, 6, 1, 1, 0xDC00, 1},
!     {3, 6, 1, 1, 0xDFFF, 1},
  
!     {3, 6, 2, 3, 0xD800, 2},
!     {3, 6, 2, 3, 0xDBFF, 2},
!     {3, 6, 2, 3, 0xDC00, 2},
!     {3, 6, 2, 3, 0xDFFF, 2},
  
      // make the leading surrogate a trailing one
      {5, 10, 3, 6, 0xDC00, 3},
*************** ucs2_to_utf8_out_error (const std::codec
*** 1206,1211 ****
--- 1439,1447 ----
      // make the trailing surrogate a BMP char
      {5, 10, 3, 6, u'z', 4},
  
+     // don't replace anything in the test cases bellow, just show the surrogate
+     // pair (fourth CP) fully or partially
+     {5, 10, 3, 6, u'b', 0},
      {5, 7, 3, 6, u'b', 0}, // no space for fourth CP
      {5, 8, 3, 6, u'b', 0}, // no space for fourth CP
      {5, 9, 3, 6, u'b', 0}, // no space for fourth CP
*************** ucs2_to_utf8_out_error (const std::codec
*** 1214,1236 ****
      {4, 7, 3, 6, u'b', 0},  // incomplete fourth CP, and no space for it
      {4, 8, 3, 6, u'b', 0},  // incomplete fourth CP, and no space for it
      {4, 9, 3, 6, u'b', 0},  // incomplete fourth CP, and no space for it
- 
    };
  
    for (auto t : offsets)
      {
!       CharT in[array_size (valid_in)] = {};
!       char out[array_size (exp) - 1] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        VERIFY (t.expected_in_next <= t.in_size);
        VERIFY (t.expected_out_next <= t.out_size);
!       copy (begin (valid_in), end (valid_in), begin (in));
        in[t.replace_pos] = t.replace_char;
  
        auto state = mbstate_t{};
!       auto in_next = (const CharT *) nullptr;
!       auto out_next = (char *) nullptr;
        auto res = codecvt_base::result ();
  
        res = cvt.out (state, in, in + t.in_size, in_next, out, out + t.out_size,
--- 1450,1470 ----
      {4, 7, 3, 6, u'b', 0},  // incomplete fourth CP, and no space for it
      {4, 8, 3, 6, u'b', 0},  // incomplete fourth CP, and no space for it
      {4, 9, 3, 6, u'b', 0},  // incomplete fourth CP, and no space for it
    };
  
    for (auto t : offsets)
      {
!       ExternT out[array_size (exp) - 1] = {};
        VERIFY (t.in_size <= array_size (in));
        VERIFY (t.out_size <= array_size (out));
        VERIFY (t.expected_in_next <= t.in_size);
        VERIFY (t.expected_out_next <= t.out_size);
!       auto old_char = in[t.replace_pos];
        in[t.replace_pos] = t.replace_char;
  
        auto state = mbstate_t{};
!       auto in_next = (const InternT *) nullptr;
!       auto out_next = (ExternT *) nullptr;
        auto res = codecvt_base::result ();
  
        res = cvt.out (state, in, in + t.in_size, in_next, out, out + t.out_size,
*************** ucs2_to_utf8_out_error (const std::codec
*** 1238,1262 ****
        VERIFY (res == cvt.error);
        VERIFY (in_next == in + t.expected_in_next);
        VERIFY (out_next == out + t.expected_out_next);
!       VERIFY (char_traits<char>::compare (out, exp, t.expected_out_next) == 0);
        if (t.expected_out_next < array_size (out))
  	VERIFY (out[t.expected_out_next] == 0);
      }
  }
  
! template <class CharT>
  void
! ucs2_to_utf8_out (const std::codecvt<CharT, char, mbstate_t> &cvt)
  {
    ucs2_to_utf8_out_ok (cvt);
    ucs2_to_utf8_out_partial (cvt);
    ucs2_to_utf8_out_error (cvt);
  }
  
! template <class CharT>
  void
! test_utf8_ucs2_cvts (const std::codecvt<CharT, char, mbstate_t> &cvt)
  {
    utf8_to_ucs2_in (cvt);
    ucs2_to_utf8_out (cvt);
  }
--- 1472,2302 ----
        VERIFY (res == cvt.error);
        VERIFY (in_next == in + t.expected_in_next);
        VERIFY (out_next == out + t.expected_out_next);
!       VERIFY (char_traits<ExternT>::compare (out, exp, t.expected_out_next)
! 	      == 0);
        if (t.expected_out_next < array_size (out))
  	VERIFY (out[t.expected_out_next] == 0);
+ 
+       in[t.replace_pos] = old_char;
      }
  }
  
! template <class InternT, class ExternT>
  void
! ucs2_to_utf8_out (const std::codecvt<InternT, ExternT, mbstate_t> &cvt)
  {
    ucs2_to_utf8_out_ok (cvt);
    ucs2_to_utf8_out_partial (cvt);
    ucs2_to_utf8_out_error (cvt);
  }
  
! template <class InternT, class ExternT>
  void
! test_utf8_ucs2_cvt (const std::codecvt<InternT, ExternT, mbstate_t> &cvt)
  {
    utf8_to_ucs2_in (cvt);
    ucs2_to_utf8_out (cvt);
  }
+ 
+ enum utf16_endianess
+ {
+   utf16_big_endian,
+   utf16_little_endian
+ };
+ 
+ template <class Iter1, class Iter2>
+ Iter2
+ utf16_to_bytes (Iter1 f, Iter1 l, Iter2 o, utf16_endianess e)
+ {
+   if (e == utf16_big_endian)
+     for (; f != l; ++f)
+       {
+ 	*o++ = (*f >> 8) & 0xFF;
+ 	*o++ = *f & 0xFF;
+       }
+   else
+     for (; f != l; ++f)
+       {
+ 	*o++ = *f & 0xFF;
+ 	*o++ = (*f >> 8) & 0xFF;
+       }
+   return o;
+ }
+ 
+ template <class InternT>
+ void
+ utf16_to_utf32_in_ok (const std::codecvt<InternT, char, mbstate_t> &cvt,
+ 		      utf16_endianess endianess)
+ {
+   using namespace std;
+   const char16_t input[] = u"b\u0448\uAAAA\U0010AAAA";
+   const char32_t expected[] = U"b\u0448\uAAAA\U0010AAAA";
+   static_assert (array_size (input) == 6, "");
+   static_assert (array_size (expected) == 5, "");
+ 
+   char in[array_size (input) * 2];
+   InternT exp[array_size (expected)];
+   utf16_to_bytes (begin (input), end (input), begin (in), endianess);
+   copy (begin (expected), end (expected), begin (exp));
+ 
+   test_offsets_ok offsets[] = {{0, 0}, {2, 1}, {4, 2}, {6, 3}, {10, 4}};
+   for (auto t : offsets)
+     {
+       InternT out[array_size (exp) - 1] = {};
+       VERIFY (t.in_size <= array_size (in));
+       VERIFY (t.out_size <= array_size (out));
+       auto state = mbstate_t{};
+       auto in_next = (const char *) nullptr;
+       auto out_next = (InternT *) nullptr;
+       auto res = codecvt_base::result ();
+ 
+       res = cvt.in (state, in, in + t.in_size, in_next, out, out + t.out_size,
+ 		    out_next);
+       VERIFY (res == cvt.ok);
+       VERIFY (in_next == in + t.in_size);
+       VERIFY (out_next == out + t.out_size);
+       VERIFY (char_traits<InternT>::compare (out, exp, t.out_size) == 0);
+       if (t.out_size < array_size (out))
+ 	VERIFY (out[t.out_size] == 0);
+ 
+       state = {};
+       auto len = cvt.length (state, in, in + t.in_size, t.out_size);
+       VERIFY (len >= 0);
+       VERIFY (static_cast<size_t> (len) == t.in_size);
+     }
+ 
+   for (auto t : offsets)
+     {
+       InternT out[array_size (exp)] = {};
+       VERIFY (t.in_size <= array_size (in));
+       VERIFY (t.out_size <= array_size (out));
+       auto state = mbstate_t{};
+       auto in_next = (const char *) nullptr;
+       auto out_next = (InternT *) nullptr;
+       auto res = codecvt_base::result ();
+ 
+       res
+ 	= cvt.in (state, in, in + t.in_size, in_next, out, end (out), out_next);
+       VERIFY (res == cvt.ok);
+       VERIFY (in_next == in + t.in_size);
+       VERIFY (out_next == out + t.out_size);
+       VERIFY (char_traits<InternT>::compare (out, exp, t.out_size) == 0);
+       if (t.out_size < array_size (out))
+ 	VERIFY (out[t.out_size] == 0);
+ 
+       state = {};
+       auto len = cvt.length (state, in, in + t.in_size, array_size (out));
+       VERIFY (len >= 0);
+       VERIFY (static_cast<size_t> (len) == t.in_size);
+     }
+ }
+ 
+ template <class InternT>
+ void
+ utf16_to_utf32_in_partial (const std::codecvt<InternT, char, mbstate_t> &cvt,
+ 			   utf16_endianess endianess)
+ {
+   using namespace std;
+   const char16_t input[] = u"b\u0448\uAAAA\U0010AAAA";
+   const char32_t expected[] = U"b\u0448\uAAAA\U0010AAAA";
+   static_assert (array_size (input) == 6, "");
+   static_assert (array_size (expected) == 5, "");
+ 
+   char in[array_size (input) * 2];
+   InternT exp[array_size (expected)];
+   utf16_to_bytes (begin (input), end (input), begin (in), endianess);
+   copy (begin (expected), end (expected), begin (exp));
+ 
+   test_offsets_partial offsets[] = {
+     {2, 0, 0, 0}, // no space for first CP
+     {1, 1, 0, 0}, // incomplete first CP
+     {1, 0, 0, 0}, // incomplete first CP, and no space for it
+ 
+     {4, 1, 2, 1}, // no space for second CP
+     {3, 2, 2, 1}, // incomplete second CP
+     {3, 1, 2, 1}, // incomplete second CP, and no space for it
+ 
+     {6, 2, 4, 2}, // no space for third CP
+     {5, 3, 4, 2}, // incomplete third CP
+     {5, 2, 4, 2}, // incomplete third CP, and no space for it
+ 
+     {10, 3, 6, 3}, // no space for fourth CP
+     {7, 4, 6, 3},  // incomplete fourth CP
+     {8, 4, 6, 3},  // incomplete fourth CP
+     {9, 4, 6, 3},  // incomplete fourth CP
+     {7, 3, 6, 3},  // incomplete fourth CP, and no space for it
+     {8, 3, 6, 3},  // incomplete fourth CP, and no space for it
+     {9, 3, 6, 3},  // incomplete fourth CP, and no space for it
+   };
+ 
+   for (auto t : offsets)
+     {
+       InternT out[array_size (exp) - 1] = {};
+       VERIFY (t.in_size <= array_size (in));
+       VERIFY (t.out_size <= array_size (out));
+       VERIFY (t.expected_in_next <= t.in_size);
+       VERIFY (t.expected_out_next <= t.out_size);
+       auto state = mbstate_t{};
+       auto in_next = (const char *) nullptr;
+       auto out_next = (InternT *) nullptr;
+       auto res = codecvt_base::result ();
+ 
+       res = cvt.in (state, in, in + t.in_size, in_next, out, out + t.out_size,
+ 		    out_next);
+       VERIFY (res == cvt.partial);
+       VERIFY (in_next == in + t.expected_in_next);
+       VERIFY (out_next == out + t.expected_out_next);
+       VERIFY (char_traits<InternT>::compare (out, exp, t.expected_out_next)
+ 	      == 0);
+       if (t.expected_out_next < array_size (out))
+ 	VERIFY (out[t.expected_out_next] == 0);
+ 
+       state = {};
+       auto len = cvt.length (state, in, in + t.in_size, t.out_size);
+       VERIFY (len >= 0);
+       VERIFY (static_cast<size_t> (len) == t.expected_in_next);
+     }
+ }
+ 
+ template <class InternT>
+ void
+ utf16_to_utf32_in_error (const std::codecvt<InternT, char, mbstate_t> &cvt,
+ 			 utf16_endianess endianess)
+ {
+   using namespace std;
+   char16_t input[] = u"b\u0448\uAAAA\U0010AAAA";
+   const char32_t expected[] = U"b\u0448\uAAAA\U0010AAAA";
+   static_assert (array_size (input) == 6, "");
+   static_assert (array_size (expected) == 5, "");
+ 
+   InternT exp[array_size (expected)];
+   copy (begin (expected), end (expected), begin (exp));
+ 
+   // The only possible error in UTF-16 is unpaired surrogate code units.
+   // So we replace valid code points (scalar values) with lone surrogate CU.
+   test_offsets_error<char16_t> offsets[] = {
+     {10, 4, 0, 0, 0xD800, 0},
+     {10, 4, 0, 0, 0xDBFF, 0},
+     {10, 4, 0, 0, 0xDC00, 0},
+     {10, 4, 0, 0, 0xDFFF, 0},
+ 
+     {10, 4, 2, 1, 0xD800, 1},
+     {10, 4, 2, 1, 0xDBFF, 1},
+     {10, 4, 2, 1, 0xDC00, 1},
+     {10, 4, 2, 1, 0xDFFF, 1},
+ 
+     {10, 4, 4, 2, 0xD800, 2},
+     {10, 4, 4, 2, 0xDBFF, 2},
+     {10, 4, 4, 2, 0xDC00, 2},
+     {10, 4, 4, 2, 0xDFFF, 2},
+ 
+     // make the leading surrogate a trailing one
+     {10, 4, 6, 3, 0xDC00, 3},
+     {10, 4, 6, 3, 0xDFFF, 3},
+ 
+     // make the trailing surrogate a leading one
+     {10, 4, 6, 3, 0xD800, 4},
+     {10, 4, 6, 3, 0xDBFF, 4},
+ 
+     // make the trailing surrogate a BMP char
+     {10, 4, 6, 3, u'z', 4},
+   };
+ 
+   for (auto t : offsets)
+     {
+       char in[array_size (input) * 2];
+       InternT out[array_size (exp) - 1] = {};
+       VERIFY (t.in_size <= array_size (in));
+       VERIFY (t.out_size <= array_size (out));
+       VERIFY (t.expected_in_next <= t.in_size);
+       VERIFY (t.expected_out_next <= t.out_size);
+       auto old_char = input[t.replace_pos];
+       input[t.replace_pos] = t.replace_char; // replace in input, not in in
+       utf16_to_bytes (begin (input), end (input), begin (in), endianess);
+ 
+       auto state = mbstate_t{};
+       auto in_next = (const char *) nullptr;
+       auto out_next = (InternT *) nullptr;
+       auto res = codecvt_base::result ();
+ 
+       res = cvt.in (state, in, in + t.in_size, in_next, out, out + t.out_size,
+ 		    out_next);
+       VERIFY (res == cvt.error);
+       VERIFY (in_next == in + t.expected_in_next);
+       VERIFY (out_next == out + t.expected_out_next);
+       VERIFY (char_traits<InternT>::compare (out, exp, t.expected_out_next)
+ 	      == 0);
+       if (t.expected_out_next < array_size (out))
+ 	VERIFY (out[t.expected_out_next] == 0);
+ 
+       state = {};
+       auto len = cvt.length (state, in, in + t.in_size, t.out_size);
+       VERIFY (len >= 0);
+       VERIFY (static_cast<size_t> (len) == t.expected_in_next);
+ 
+       input[t.replace_pos] = old_char;
+     }
+ }
+ 
+ template <class InternT>
+ void
+ utf32_to_utf16_out_ok (const std::codecvt<InternT, char, mbstate_t> &cvt,
+ 		       utf16_endianess endianess)
+ {
+   using namespace std;
+   const char32_t input[] = U"b\u0448\uAAAA\U0010AAAA";
+   const char16_t expected[] = u"b\u0448\uAAAA\U0010AAAA";
+   static_assert (array_size (input) == 5, "");
+   static_assert (array_size (expected) == 6, "");
+ 
+   InternT in[array_size (input)];
+   char exp[array_size (expected) * 2];
+   copy (begin (input), end (input), begin (in));
+   utf16_to_bytes (begin (expected), end (expected), begin (exp), endianess);
+ 
+   test_offsets_ok offsets[] = {{0, 0}, {1, 2}, {2, 4}, {3, 6}, {4, 10}};
+   for (auto t : offsets)
+     {
+       char out[array_size (exp) - 2] = {};
+       VERIFY (t.in_size <= array_size (in));
+       VERIFY (t.out_size <= array_size (out));
+       auto state = mbstate_t{};
+       auto in_next = (const InternT *) nullptr;
+       auto out_next = (char *) nullptr;
+       auto res = codecvt_base::result ();
+ 
+       res = cvt.out (state, in, in + t.in_size, in_next, out, out + t.out_size,
+ 		     out_next);
+       VERIFY (res == cvt.ok);
+       VERIFY (in_next == in + t.in_size);
+       VERIFY (out_next == out + t.out_size);
+       VERIFY (char_traits<char>::compare (out, exp, t.out_size) == 0);
+       if (t.out_size < array_size (out))
+ 	VERIFY (out[t.out_size] == 0);
+     }
+ }
+ 
+ template <class InternT>
+ void
+ utf32_to_utf16_out_partial (const std::codecvt<InternT, char, mbstate_t> &cvt,
+ 			    utf16_endianess endianess)
+ {
+   using namespace std;
+   const char32_t input[] = U"b\u0448\uAAAA\U0010AAAA";
+   const char16_t expected[] = u"b\u0448\uAAAA\U0010AAAA";
+   static_assert (array_size (input) == 5, "");
+   static_assert (array_size (expected) == 6, "");
+ 
+   InternT in[array_size (input)];
+   char exp[array_size (expected) * 2];
+   copy (begin (input), end (input), begin (in));
+   utf16_to_bytes (begin (expected), end (expected), begin (exp), endianess);
+ 
+   test_offsets_partial offsets[] = {
+     {1, 0, 0, 0}, // no space for first CP
+     {1, 1, 0, 0}, // no space for first CP
+ 
+     {2, 2, 1, 2}, // no space for second CP
+     {2, 3, 1, 2}, // no space for second CP
+ 
+     {3, 4, 2, 4}, // no space for third CP
+     {3, 5, 2, 4}, // no space for third CP
+ 
+     {4, 6, 3, 6}, // no space for fourth CP
+     {4, 7, 3, 6}, // no space for fourth CP
+     {4, 8, 3, 6}, // no space for fourth CP
+     {4, 9, 3, 6}, // no space for fourth CP
+   };
+   for (auto t : offsets)
+     {
+       char out[array_size (exp) - 2] = {};
+       VERIFY (t.in_size <= array_size (in));
+       VERIFY (t.out_size <= array_size (out));
+       VERIFY (t.expected_in_next <= t.in_size);
+       VERIFY (t.expected_out_next <= t.out_size);
+       auto state = mbstate_t{};
+       auto in_next = (const InternT *) nullptr;
+       auto out_next = (char *) nullptr;
+       auto res = codecvt_base::result ();
+ 
+       res = cvt.out (state, in, in + t.in_size, in_next, out, out + t.out_size,
+ 		     out_next);
+       VERIFY (res == cvt.partial);
+       VERIFY (in_next == in + t.expected_in_next);
+       VERIFY (out_next == out + t.expected_out_next);
+       VERIFY (char_traits<char>::compare (out, exp, t.expected_out_next) == 0);
+       if (t.expected_out_next < array_size (out))
+ 	VERIFY (out[t.expected_out_next] == 0);
+     }
+ }
+ 
+ template <class InternT>
+ void
+ utf32_to_utf16_out_error (const std::codecvt<InternT, char, mbstate_t> &cvt,
+ 			  utf16_endianess endianess)
+ {
+   using namespace std;
+   const char32_t input[] = U"b\u0448\uAAAA\U0010AAAA";
+   const char16_t expected[] = u"b\u0448\uAAAA\U0010AAAA";
+   static_assert (array_size (input) == 5, "");
+   static_assert (array_size (expected) == 6, "");
+ 
+   InternT in[array_size (input)];
+   char exp[array_size (expected) * 2];
+   copy (begin (input), end (input), begin (in));
+   utf16_to_bytes (begin (expected), end (expected), begin (exp), endianess);
+ 
+   test_offsets_error<InternT> offsets[] = {
+ 
+     // Surrogate CP
+     {4, 10, 0, 0, 0xD800, 0},
+     {4, 10, 1, 2, 0xDBFF, 1},
+     {4, 10, 2, 4, 0xDC00, 2},
+     {4, 10, 3, 6, 0xDFFF, 3},
+ 
+     // CP out of range
+     {4, 10, 0, 0, 0x00110000, 0},
+     {4, 10, 1, 2, 0x00110000, 1},
+     {4, 10, 2, 4, 0x00110000, 2},
+     {4, 10, 3, 6, 0x00110000, 3}};
+ 
+   for (auto t : offsets)
+     {
+       char out[array_size (exp) - 2] = {};
+       VERIFY (t.in_size <= array_size (in));
+       VERIFY (t.out_size <= array_size (out));
+       VERIFY (t.expected_in_next <= t.in_size);
+       VERIFY (t.expected_out_next <= t.out_size);
+       auto old_char = in[t.replace_pos];
+       in[t.replace_pos] = t.replace_char;
+ 
+       auto state = mbstate_t{};
+       auto in_next = (const InternT *) nullptr;
+       auto out_next = (char *) nullptr;
+       auto res = codecvt_base::result ();
+ 
+       res = cvt.out (state, in, in + t.in_size, in_next, out, out + t.out_size,
+ 		     out_next);
+       VERIFY (res == cvt.error);
+       VERIFY (in_next == in + t.expected_in_next);
+       VERIFY (out_next == out + t.expected_out_next);
+       VERIFY (char_traits<char>::compare (out, exp, t.expected_out_next) == 0);
+       if (t.expected_out_next < array_size (out))
+ 	VERIFY (out[t.expected_out_next] == 0);
+ 
+       in[t.replace_pos] = old_char;
+     }
+ }
+ 
+ template <class InternT>
+ void
+ test_utf16_utf32_cvt (const std::codecvt<InternT, char, mbstate_t> &cvt,
+ 		      utf16_endianess endianess)
+ {
+   utf16_to_utf32_in_ok (cvt, endianess);
+   utf16_to_utf32_in_partial (cvt, endianess);
+   utf16_to_utf32_in_error (cvt, endianess);
+   utf32_to_utf16_out_ok (cvt, endianess);
+   utf32_to_utf16_out_partial (cvt, endianess);
+   utf32_to_utf16_out_error (cvt, endianess);
+ }
+ 
+ template <class InternT>
+ void
+ utf16_to_ucs2_in_ok (const std::codecvt<InternT, char, mbstate_t> &cvt,
+ 		     utf16_endianess endianess)
+ {
+   using namespace std;
+   const char16_t input[] = u"b\u0448\uAAAA";
+   const char16_t expected[] = u"b\u0448\uAAAA";
+   static_assert (array_size (input) == 4, "");
+   static_assert (array_size (expected) == 4, "");
+ 
+   char in[array_size (input) * 2];
+   InternT exp[array_size (expected)];
+   utf16_to_bytes (begin (input), end (input), begin (in), endianess);
+   copy (begin (expected), end (expected), begin (exp));
+ 
+   test_offsets_ok offsets[] = {{0, 0}, {2, 1}, {4, 2}, {6, 3}};
+   for (auto t : offsets)
+     {
+       InternT out[array_size (exp) - 1] = {};
+       VERIFY (t.in_size <= array_size (in));
+       VERIFY (t.out_size <= array_size (out));
+       auto state = mbstate_t{};
+       auto in_next = (const char *) nullptr;
+       auto out_next = (InternT *) nullptr;
+       auto res = codecvt_base::result ();
+ 
+       res = cvt.in (state, in, in + t.in_size, in_next, out, out + t.out_size,
+ 		    out_next);
+       VERIFY (res == cvt.ok);
+       VERIFY (in_next == in + t.in_size);
+       VERIFY (out_next == out + t.out_size);
+       VERIFY (char_traits<InternT>::compare (out, exp, t.out_size) == 0);
+       if (t.out_size < array_size (out))
+ 	VERIFY (out[t.out_size] == 0);
+ 
+       state = {};
+       auto len = cvt.length (state, in, in + t.in_size, t.out_size);
+       VERIFY (len >= 0);
+       VERIFY (static_cast<size_t> (len) == t.in_size);
+     }
+ 
+   for (auto t : offsets)
+     {
+       InternT out[array_size (exp)] = {};
+       VERIFY (t.in_size <= array_size (in));
+       VERIFY (t.out_size <= array_size (out));
+       auto state = mbstate_t{};
+       auto in_next = (const char *) nullptr;
+       auto out_next = (InternT *) nullptr;
+       auto res = codecvt_base::result ();
+ 
+       res
+ 	= cvt.in (state, in, in + t.in_size, in_next, out, end (out), out_next);
+       VERIFY (res == cvt.ok);
+       VERIFY (in_next == in + t.in_size);
+       VERIFY (out_next == out + t.out_size);
+       VERIFY (char_traits<InternT>::compare (out, exp, t.out_size) == 0);
+       if (t.out_size < array_size (out))
+ 	VERIFY (out[t.out_size] == 0);
+ 
+       state = {};
+       auto len = cvt.length (state, in, in + t.in_size, array_size (out));
+       VERIFY (len >= 0);
+       VERIFY (static_cast<size_t> (len) == t.in_size);
+     }
+ }
+ 
+ template <class InternT>
+ void
+ utf16_to_ucs2_in_partial (const std::codecvt<InternT, char, mbstate_t> &cvt,
+ 			  utf16_endianess endianess)
+ {
+   using namespace std;
+   const char16_t input[] = u"b\u0448\uAAAA";
+   const char16_t expected[] = u"b\u0448\uAAAA";
+   static_assert (array_size (input) == 4, "");
+   static_assert (array_size (expected) == 4, "");
+ 
+   char in[array_size (input) * 2];
+   InternT exp[array_size (expected)];
+   utf16_to_bytes (begin (input), end (input), begin (in), endianess);
+   copy (begin (expected), end (expected), begin (exp));
+ 
+   test_offsets_partial offsets[] = {
+     {2, 0, 0, 0}, // no space for first CP
+     {1, 1, 0, 0}, // incomplete first CP
+     {1, 0, 0, 0}, // incomplete first CP, and no space for it
+ 
+     {4, 1, 2, 1}, // no space for second CP
+     {3, 2, 2, 1}, // incomplete second CP
+     {3, 1, 2, 1}, // incomplete second CP, and no space for it
+ 
+     {6, 2, 4, 2}, // no space for third CP
+     {5, 3, 4, 2}, // incomplete third CP
+     {5, 2, 4, 2}, // incomplete third CP, and no space for it
+   };
+ 
+   for (auto t : offsets)
+     {
+       InternT out[array_size (exp) - 1] = {};
+       VERIFY (t.in_size <= array_size (in));
+       VERIFY (t.out_size <= array_size (out));
+       VERIFY (t.expected_in_next <= t.in_size);
+       VERIFY (t.expected_out_next <= t.out_size);
+       auto state = mbstate_t{};
+       auto in_next = (const char *) nullptr;
+       auto out_next = (InternT *) nullptr;
+       auto res = codecvt_base::result ();
+ 
+       res = cvt.in (state, in, in + t.in_size, in_next, out, out + t.out_size,
+ 		    out_next);
+       VERIFY (res == cvt.partial);
+       VERIFY (in_next == in + t.expected_in_next);
+       VERIFY (out_next == out + t.expected_out_next);
+       VERIFY (char_traits<InternT>::compare (out, exp, t.expected_out_next)
+ 	      == 0);
+       if (t.expected_out_next < array_size (out))
+ 	VERIFY (out[t.expected_out_next] == 0);
+ 
+       state = {};
+       auto len = cvt.length (state, in, in + t.in_size, t.out_size);
+       VERIFY (len >= 0);
+       VERIFY (static_cast<size_t> (len) == t.expected_in_next);
+     }
+ }
+ 
+ template <class InternT>
+ void
+ utf16_to_ucs2_in_error (const std::codecvt<InternT, char, mbstate_t> &cvt,
+ 			utf16_endianess endianess)
+ {
+   using namespace std;
+   char16_t input[] = u"b\u0448\uAAAA\U0010AAAA";
+   const char16_t expected[] = u"b\u0448\uAAAA\U0010AAAA";
+   static_assert (array_size (input) == 6, "");
+   static_assert (array_size (expected) == 6, "");
+ 
+   InternT exp[array_size (expected)];
+   copy (begin (expected), end (expected), begin (exp));
+ 
+   // The only possible error in UTF-16 is unpaired surrogate code units.
+   // Additionally, because the target encoding is UCS-2, a proper pair of
+   // surrogates is also error. Simply, any surrogate CU is error.
+   test_offsets_error<char16_t> offsets[] = {
+     {6, 3, 0, 0, 0xD800, 0},
+     {6, 3, 0, 0, 0xDBFF, 0},
+     {6, 3, 0, 0, 0xDC00, 0},
+     {6, 3, 0, 0, 0xDFFF, 0},
+ 
+     {6, 3, 2, 1, 0xD800, 1},
+     {6, 3, 2, 1, 0xDBFF, 1},
+     {6, 3, 2, 1, 0xDC00, 1},
+     {6, 3, 2, 1, 0xDFFF, 1},
+ 
+     {6, 3, 4, 2, 0xD800, 2},
+     {6, 3, 4, 2, 0xDBFF, 2},
+     {6, 3, 4, 2, 0xDC00, 2},
+     {6, 3, 4, 2, 0xDFFF, 2},
+ 
+     // make the leading surrogate a trailing one
+     {10, 5, 6, 3, 0xDC00, 3},
+     {10, 5, 6, 3, 0xDFFF, 3},
+ 
+     // make the trailing surrogate a leading one
+     {10, 5, 6, 3, 0xD800, 4},
+     {10, 5, 6, 3, 0xDBFF, 4},
+ 
+     // make the trailing surrogate a BMP char
+     {10, 5, 6, 3, u'z', 4},
+ 
+     // don't replace anything in the test cases bellow, just show the surrogate
+     // pair (fourth CP) fully or partially (just the first surrogate)
+     {10, 5, 6, 3, u'b', 0},
+     {8, 5, 6, 3, u'b', 0},
+     {9, 5, 6, 3, u'b', 0},
+ 
+     {10, 4, 6, 3, u'b', 0},
+     {8, 4, 6, 3, u'b', 0},
+     {9, 4, 6, 3, u'b', 0},
+   };
+ 
+   for (auto t : offsets)
+     {
+       char in[array_size (input) * 2];
+       InternT out[array_size (exp) - 1] = {};
+       VERIFY (t.in_size <= array_size (in));
+       VERIFY (t.out_size <= array_size (out));
+       VERIFY (t.expected_in_next <= t.in_size);
+       VERIFY (t.expected_out_next <= t.out_size);
+       auto old_char = input[t.replace_pos];
+       input[t.replace_pos] = t.replace_char; // replace in input, not in in
+       utf16_to_bytes (begin (input), end (input), begin (in), endianess);
+ 
+       auto state = mbstate_t{};
+       auto in_next = (const char *) nullptr;
+       auto out_next = (InternT *) nullptr;
+       auto res = codecvt_base::result ();
+ 
+       res = cvt.in (state, in, in + t.in_size, in_next, out, out + t.out_size,
+ 		    out_next);
+       VERIFY (res == cvt.error);
+       VERIFY (in_next == in + t.expected_in_next);
+       VERIFY (out_next == out + t.expected_out_next);
+       VERIFY (char_traits<InternT>::compare (out, exp, t.expected_out_next)
+ 	      == 0);
+       if (t.expected_out_next < array_size (out))
+ 	VERIFY (out[t.expected_out_next] == 0);
+ 
+       state = {};
+       auto len = cvt.length (state, in, in + t.in_size, t.out_size);
+       VERIFY (len >= 0);
+       VERIFY (static_cast<size_t> (len) == t.expected_in_next);
+ 
+       input[t.replace_pos] = old_char;
+     }
+ }
+ 
+ template <class InternT>
+ void
+ ucs2_to_utf16_out_ok (const std::codecvt<InternT, char, mbstate_t> &cvt,
+ 		      utf16_endianess endianess)
+ {
+   using namespace std;
+   const char16_t input[] = u"b\u0448\uAAAA";
+   const char16_t expected[] = u"b\u0448\uAAAA";
+   static_assert (array_size (input) == 4, "");
+   static_assert (array_size (expected) == 4, "");
+ 
+   InternT in[array_size (input)];
+   char exp[array_size (expected) * 2];
+   copy (begin (input), end (input), begin (in));
+   utf16_to_bytes (begin (expected), end (expected), begin (exp), endianess);
+ 
+   test_offsets_ok offsets[] = {{0, 0}, {1, 2}, {2, 4}, {3, 6}};
+   for (auto t : offsets)
+     {
+       char out[array_size (exp) - 2] = {};
+       VERIFY (t.in_size <= array_size (in));
+       VERIFY (t.out_size <= array_size (out));
+       auto state = mbstate_t{};
+       auto in_next = (const InternT *) nullptr;
+       auto out_next = (char *) nullptr;
+       auto res = codecvt_base::result ();
+ 
+       res = cvt.out (state, in, in + t.in_size, in_next, out, out + t.out_size,
+ 		     out_next);
+       VERIFY (res == cvt.ok);
+       VERIFY (in_next == in + t.in_size);
+       VERIFY (out_next == out + t.out_size);
+       VERIFY (char_traits<char>::compare (out, exp, t.out_size) == 0);
+       if (t.out_size < array_size (out))
+ 	VERIFY (out[t.out_size] == 0);
+     }
+ }
+ 
+ template <class InternT>
+ void
+ ucs2_to_utf16_out_partial (const std::codecvt<InternT, char, mbstate_t> &cvt,
+ 			   utf16_endianess endianess)
+ {
+   using namespace std;
+   const char16_t input[] = u"b\u0448\uAAAA";
+   const char16_t expected[] = u"b\u0448\uAAAA";
+   static_assert (array_size (input) == 4, "");
+   static_assert (array_size (expected) == 4, "");
+ 
+   InternT in[array_size (input)];
+   char exp[array_size (expected) * 2];
+   copy (begin (input), end (input), begin (in));
+   utf16_to_bytes (begin (expected), end (expected), begin (exp), endianess);
+ 
+   test_offsets_partial offsets[] = {
+     {1, 0, 0, 0}, // no space for first CP
+     {1, 1, 0, 0}, // no space for first CP
+ 
+     {2, 2, 1, 2}, // no space for second CP
+     {2, 3, 1, 2}, // no space for second CP
+ 
+     {3, 4, 2, 4}, // no space for third CP
+     {3, 5, 2, 4}, // no space for third CP
+   };
+   for (auto t : offsets)
+     {
+       char out[array_size (exp) - 2] = {};
+       VERIFY (t.in_size <= array_size (in));
+       VERIFY (t.out_size <= array_size (out));
+       VERIFY (t.expected_in_next <= t.in_size);
+       VERIFY (t.expected_out_next <= t.out_size);
+       auto state = mbstate_t{};
+       auto in_next = (const InternT *) nullptr;
+       auto out_next = (char *) nullptr;
+       auto res = codecvt_base::result ();
+ 
+       res = cvt.out (state, in, in + t.in_size, in_next, out, out + t.out_size,
+ 		     out_next);
+       VERIFY (res == cvt.partial);
+       VERIFY (in_next == in + t.expected_in_next);
+       VERIFY (out_next == out + t.expected_out_next);
+       VERIFY (char_traits<char>::compare (out, exp, t.expected_out_next) == 0);
+       if (t.expected_out_next < array_size (out))
+ 	VERIFY (out[t.expected_out_next] == 0);
+     }
+ }
+ 
+ template <class InternT>
+ void
+ ucs2_to_utf16_out_error (const std::codecvt<InternT, char, mbstate_t> &cvt,
+ 			 utf16_endianess endianess)
+ {
+   using namespace std;
+   const char16_t input[] = u"b\u0448\uAAAA\U0010AAAA";
+   const char16_t expected[] = u"b\u0448\uAAAA\U0010AAAA";
+   static_assert (array_size (input) == 6, "");
+   static_assert (array_size (expected) == 6, "");
+ 
+   InternT in[array_size (input)];
+   char exp[array_size (expected) * 2];
+   copy (begin (input), end (input), begin (in));
+   utf16_to_bytes (begin (expected), end (expected), begin (exp), endianess);
+ 
+   test_offsets_error<InternT> offsets[] = {
+     {3, 6, 0, 0, 0xD800, 0},
+     {3, 6, 0, 0, 0xDBFF, 0},
+     {3, 6, 0, 0, 0xDC00, 0},
+     {3, 6, 0, 0, 0xDFFF, 0},
+ 
+     {3, 6, 1, 2, 0xD800, 1},
+     {3, 6, 1, 2, 0xDBFF, 1},
+     {3, 6, 1, 2, 0xDC00, 1},
+     {3, 6, 1, 2, 0xDFFF, 1},
+ 
+     {3, 6, 2, 4, 0xD800, 2},
+     {3, 6, 2, 4, 0xDBFF, 2},
+     {3, 6, 2, 4, 0xDC00, 2},
+     {3, 6, 2, 4, 0xDFFF, 2},
+ 
+     // make the leading surrogate a trailing one
+     {5, 10, 3, 6, 0xDC00, 3},
+     {5, 10, 3, 6, 0xDFFF, 3},
+ 
+     // make the trailing surrogate a leading one
+     {5, 10, 3, 6, 0xD800, 4},
+     {5, 10, 3, 6, 0xDBFF, 4},
+ 
+     // make the trailing surrogate a BMP char
+     {5, 10, 3, 6, u'z', 4},
+ 
+     // don't replace anything in the test cases bellow, just show the surrogate
+     // pair (fourth CP) fully or partially (just the first surrogate)
+     {5, 10, 3, 6, u'b', 0},
+     {5, 8, 3, 6, u'b', 0},
+     {5, 9, 3, 6, u'b', 0},
+ 
+     {4, 10, 3, 6, u'b', 0},
+     {4, 8, 3, 6, u'b', 0},
+     {4, 9, 3, 6, u'b', 0},
+   };
+ 
+   for (auto t : offsets)
+     {
+       char out[array_size (exp) - 2] = {};
+       VERIFY (t.in_size <= array_size (in));
+       VERIFY (t.out_size <= array_size (out));
+       VERIFY (t.expected_in_next <= t.in_size);
+       VERIFY (t.expected_out_next <= t.out_size);
+       auto old_char = in[t.replace_pos];
+       in[t.replace_pos] = t.replace_char;
+ 
+       auto state = mbstate_t{};
+       auto in_next = (const InternT *) nullptr;
+       auto out_next = (char *) nullptr;
+       auto res = codecvt_base::result ();
+ 
+       res = cvt.out (state, in, in + t.in_size, in_next, out, out + t.out_size,
+ 		     out_next);
+       VERIFY (res == cvt.error);
+       VERIFY (in_next == in + t.expected_in_next);
+       VERIFY (out_next == out + t.expected_out_next);
+       VERIFY (char_traits<char>::compare (out, exp, t.expected_out_next) == 0);
+       if (t.expected_out_next < array_size (out))
+ 	VERIFY (out[t.expected_out_next] == 0);
+ 
+       in[t.replace_pos] = old_char;
+     }
+ }
+ 
+ template <class InternT>
+ void
+ test_utf16_ucs2_cvt (const std::codecvt<InternT, char, mbstate_t> &cvt,
+ 		     utf16_endianess endianess)
+ {
+   utf16_to_ucs2_in_ok (cvt, endianess);
+   utf16_to_ucs2_in_partial (cvt, endianess);
+   utf16_to_ucs2_in_error (cvt, endianess);
+   ucs2_to_utf16_out_ok (cvt, endianess);
+   ucs2_to_utf16_out_partial (cvt, endianess);
+   ucs2_to_utf16_out_error (cvt, endianess);
+ }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_unicode_char8_t.cc gcc-13.4.0/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_unicode_char8_t.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_unicode_char8_t.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_unicode_char8_t.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,53 ----
+ // Copyright (C) 2020-2023 Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library.  This library 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.
+ 
+ // This library 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 this library; see the file COPYING3.  If not see
+ // <http://www.gnu.org/licenses/>.
+ 
+ // { dg-do run { target c++11 } }
+ // { dg-require-cstdint "" }
+ // { dg-options "-fchar8_t" }
+ 
+ #include "codecvt_unicode.h"
+ 
+ using namespace std;
+ 
+ void
+ test_utf8_utf32_codecvts ()
+ {
+   using codecvt_c32_c8 = codecvt<char32_t, char8_t, mbstate_t>;
+   auto &loc_c = locale::classic ();
+   VERIFY (has_facet<codecvt_c32_c8> (loc_c));
+ 
+   auto &cvt = use_facet<codecvt_c32_c8> (loc_c);
+   test_utf8_utf32_cvt (cvt);
+ }
+ 
+ void
+ test_utf8_utf16_codecvts ()
+ {
+   using codecvt_c16_c8 = codecvt<char16_t, char8_t, mbstate_t>;
+   auto &loc_c = locale::classic ();
+   VERIFY (has_facet<codecvt_c16_c8> (loc_c));
+ 
+   auto &cvt = use_facet<codecvt_c16_c8> (loc_c);
+   test_utf8_utf16_cvt (cvt);
+ }
+ 
+ int
+ main ()
+ {
+   test_utf8_utf32_codecvts ();
+   test_utf8_utf16_codecvts ();
+ }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_unicode_wchar_t.cc gcc-13.4.0/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_unicode_wchar_t.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_unicode_wchar_t.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_unicode_wchar_t.cc	Thu Jun  5 16:03:03 2025
*************** test_utf8_utf32_codecvts ()
*** 28,34 ****
  {
  #if __SIZEOF_WCHAR_T__ == 4
    codecvt_utf8<wchar_t> cvt;
!   test_utf8_utf32_codecvts (cvt);
  #endif
  }
  
--- 28,34 ----
  {
  #if __SIZEOF_WCHAR_T__ == 4
    codecvt_utf8<wchar_t> cvt;
!   test_utf8_utf32_cvt (cvt);
  #endif
  }
  
*************** test_utf8_utf16_codecvts ()
*** 37,43 ****
  {
  #if __SIZEOF_WCHAR_T__ >= 2
    codecvt_utf8_utf16<wchar_t> cvt;
!   test_utf8_utf16_cvts (cvt);
  #endif
  }
  
--- 37,43 ----
  {
  #if __SIZEOF_WCHAR_T__ >= 2
    codecvt_utf8_utf16<wchar_t> cvt;
!   test_utf8_utf16_cvt (cvt);
  #endif
  }
  
*************** test_utf8_ucs2_codecvts ()
*** 46,52 ****
  {
  #if __SIZEOF_WCHAR_T__ == 2
    codecvt_utf8<wchar_t> cvt;
!   test_utf8_ucs2_cvts (cvt);
  #endif
  }
  
--- 46,76 ----
  {
  #if __SIZEOF_WCHAR_T__ == 2
    codecvt_utf8<wchar_t> cvt;
!   test_utf8_ucs2_cvt (cvt);
! #endif
! }
! 
! void
! test_utf16_utf32_codecvts ()
! {
! #if __SIZEOF_WCHAR_T__ == 4
!   codecvt_utf16<wchar_t> cvt3;
!   test_utf16_utf32_cvt (cvt3, utf16_big_endian);
! 
!   codecvt_utf16<wchar_t, 0x10FFFF, codecvt_mode::little_endian> cvt4;
!   test_utf16_utf32_cvt (cvt4, utf16_little_endian);
! #endif
! }
! 
! void
! test_utf16_ucs2_codecvts ()
! {
! #if __SIZEOF_WCHAR_T__ == 2
!   codecvt_utf16<wchar_t> cvt3;
!   test_utf16_ucs2_cvt (cvt3, utf16_big_endian);
! 
!   codecvt_utf16<wchar_t, 0x10FFFF, codecvt_mode::little_endian> cvt4;
!   test_utf16_ucs2_cvt (cvt4, utf16_little_endian);
  #endif
  }
  
*************** main ()
*** 56,59 ****
--- 80,85 ----
    test_utf8_utf32_codecvts ();
    test_utf8_utf16_codecvts ();
    test_utf8_ucs2_codecvts ();
+   test_utf16_utf32_codecvts ();
+   test_utf16_ucs2_codecvts ();
  }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/79980.cc gcc-13.4.0/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/79980.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/79980.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/79980.cc	Thu Jun  5 16:03:03 2025
*************** test06()
*** 83,89 ****
    const char src[] = "\0\x61\xAB\xCD";
    Conv<char16_t> conv("to_bytes failed", u"from_bytes failed");
    std::u16string result = conv.from_bytes(src, src+3); // incomplete character
!   VERIFY( result == u"from_bytes failed" );
    VERIFY( conv.converted() == 2 );
  }
  
--- 83,89 ----
    const char src[] = "\0\x61\xAB\xCD";
    Conv<char16_t> conv("to_bytes failed", u"from_bytes failed");
    std::u16string result = conv.from_bytes(src, src+3); // incomplete character
!   VERIFY( result == u"\u0061" );
    VERIFY( conv.converted() == 2 );
  }
  
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/22_locale/time_get/get/char/5.cc gcc-13.4.0/libstdc++-v3/testsuite/22_locale/time_get/get/char/5.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/22_locale/time_get/get/char/5.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/22_locale/time_get/get/char/5.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,37 ----
+ // { dg-do run { target c++11} }
+ 
+ #include <locale>
+ #include <sstream>
+ #include <testsuite_hooks.h>
+ 
+ int main()
+ {
+   using Facet = std::time_get<char>;
+   const Facet& fac = std::use_facet<Facet>(std::locale::classic());
+   std::istringstream ss("Fri Jul 5 14:58:21 2019");
+   std::ios::iostate err = std::ios::goodbit;
+   std::tm tm = {};
+   fac.get(ss, Facet::iter_type(), ss, err, &tm, 'c');
+   VERIFY( err == std::ios::eofbit );
+   VERIFY( tm.tm_year == 119 );
+   VERIFY( tm.tm_mon == 6 );
+   VERIFY( tm.tm_mday == 5 );
+   VERIFY( tm.tm_wday == 5 );
+   VERIFY( tm.tm_hour == 14 );
+   VERIFY( tm.tm_min == 58 );
+   VERIFY( tm.tm_sec == 21 );
+   ss.clear();
+   ss.seekg(0);
+   ss.str(ss.str() + " non-whitespace after the datetime");
+   err = std::ios::goodbit;
+   tm = std::tm();
+   fac.get(ss, Facet::iter_type(), ss, err, &tm, 'c', 'E');
+   VERIFY( err == std::ios::goodbit );
+   VERIFY( tm.tm_year == 119 );
+   VERIFY( tm.tm_mon == 6 );
+   VERIFY( tm.tm_mday == 5 );
+   VERIFY( tm.tm_wday == 5 );
+   VERIFY( tm.tm_hour == 14 );
+   VERIFY( tm.tm_min == 58 );
+   VERIFY( tm.tm_sec == 21 );
+ }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/5.cc gcc-13.4.0/libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/5.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/5.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/5.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,37 ----
+ // { dg-do run { target c++11} }
+ 
+ #include <locale>
+ #include <sstream>
+ #include <testsuite_hooks.h>
+ 
+ int main()
+ {
+   using Facet = std::time_get<wchar_t>;
+   const Facet& fac = std::use_facet<Facet>(std::locale::classic());
+   std::wistringstream ss(L"Fri Jul 5 14:58:21 2019");
+   std::ios::iostate err = std::ios::goodbit;
+   std::tm tm = {};
+   fac.get(ss, Facet::iter_type(), ss, err, &tm, 'c');
+   VERIFY( err == std::ios::eofbit );
+   VERIFY( tm.tm_year == 119 );
+   VERIFY( tm.tm_mon == 6 );
+   VERIFY( tm.tm_mday == 5 );
+   VERIFY( tm.tm_wday == 5 );
+   VERIFY( tm.tm_hour == 14 );
+   VERIFY( tm.tm_min == 58 );
+   VERIFY( tm.tm_sec == 21 );
+   ss.clear();
+   ss.seekg(0);
+   ss.str(ss.str() + L" non-whitespace after the datetime");
+   err = std::ios::goodbit;
+   tm = std::tm();
+   fac.get(ss, Facet::iter_type(), ss, err, &tm, 'c', 'E');
+   VERIFY( err == std::ios::goodbit );
+   VERIFY( tm.tm_year == 119 );
+   VERIFY( tm.tm_mon == 6 );
+   VERIFY( tm.tm_mday == 5 );
+   VERIFY( tm.tm_wday == 5 );
+   VERIFY( tm.tm_hour == 14 );
+   VERIFY( tm.tm_min == 58 );
+   VERIFY( tm.tm_sec == 21 );
+ }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/23_containers/array/comparison_operators/106212.cc gcc-13.4.0/libstdc++-v3/testsuite/23_containers/array/comparison_operators/106212.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/23_containers/array/comparison_operators/106212.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/23_containers/array/comparison_operators/106212.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,15 ----
+ // { dg-options "-D_GLIBCXX_DEBUG -std=gnu++20" }
+ // { dg-do compile { target c++20 } }
+ 
+ // Bug libstdc++/106212 - Code becomes non-constexpr with _GLIBCXX_DEBUG
+ 
+ #include <array>
+ 
+ struct A
+ {
+   constexpr A(int i) : e{i} {}
+   constexpr bool operator==(const A& a) const = default;
+   std::array<int, 1> e;
+ };
+ 
+ static_assert(A{1} != A{2}, "");
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/23_containers/array/creation/115522.cc gcc-13.4.0/libstdc++-v3/testsuite/23_containers/array/creation/115522.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/23_containers/array/creation/115522.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/23_containers/array/creation/115522.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,34 ----
+ // { dg-options "-std=gnu++20" }
+ // { dg-do compile { target c++20 } }
+ 
+ // PR libstdc++/115522 std::to_array no longer works for struct which is
+ // trivial but not default constructible
+ 
+ #include <array>
+ 
+ void
+ test_deleted_ctor()
+ {
+   struct S
+   {
+     S() = delete;
+     S(int) { }
+   };
+ 
+   S arr[1] = {{1}};
+   auto arr1 = std::to_array(arr);
+   auto arr2 = std::to_array(std::move(arr));
+ }
+ 
+ void
+ test_deleted_assignment()
+ {
+   struct S
+   {
+     void operator=(const S&) = delete;
+   };
+ 
+   S arr[1] = {};
+   auto a1 = std::to_array(arr);
+   auto a2 = std::to_array(std::move(arr));
+ }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/23_containers/deque/modifiers/emplace/90389.cc gcc-13.4.0/libstdc++-v3/testsuite/23_containers/deque/modifiers/emplace/90389.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/23_containers/deque/modifiers/emplace/90389.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/23_containers/deque/modifiers/emplace/90389.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,43 ----
+ // { dg-do run { target c++11 } }
+ 
+ // Bug 90389 - std::deque::emplace tries to call wrong overload internally
+ 
+ #include <deque>
+ #include <testsuite_hooks.h>
+ 
+ struct X
+ {
+   X() = default;
+   X(void*, void*, std::size_t) { }
+ };
+ 
+ void
+ test_pr90389()
+ {
+   const int n = 3;
+   std::deque<X> d(n);
+   d.emplace(d.begin(), nullptr, nullptr, d.size());
+   VERIFY( d.size() == n+1 );
+ }
+ 
+ struct Y
+ {
+   Y() = default;
+   Y(std::size_t, const Y&) { }
+ };
+ 
+ void
+ test_pr118079()
+ {
+   const int n = 3;
+   std::deque<Y> d(n);
+   const Y y{};
+   d.emplace(d.begin(), d.size(), y);
+   VERIFY( d.size() == n+1 );
+ }
+ 
+ int main()
+ {
+   test_pr90389();
+   test_pr118079();
+ }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/23_containers/deque/modifiers/insert/118035.cc gcc-13.4.0/libstdc++-v3/testsuite/23_containers/deque/modifiers/insert/118035.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/23_containers/deque/modifiers/insert/118035.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/23_containers/deque/modifiers/insert/118035.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,26 ----
+ // { dg-do run }
+ 
+ #include <deque>
+ #include <testsuite_hooks.h>
+ 
+ struct Sparks
+ {
+   Sparks& operator=(const Sparks& s)
+   {
+     VERIFY( this != &s ); // This town ain't big enough for the both of us.
+     return *this;
+   }
+ };
+ 
+ void
+ test_pr118035()
+ {
+   std::deque<Sparks> d(3, Sparks());
+   Sparks s[1];
+   d.insert(d.begin() + 1, s, s);
+ }
+ 
+ int main()
+ {
+   test_pr118035();
+ }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/23_containers/forward_list/erasure.cc gcc-13.4.0/libstdc++-v3/testsuite/23_containers/forward_list/erasure.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/23_containers/forward_list/erasure.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/23_containers/forward_list/erasure.cc	Thu Jun  5 16:03:03 2025
*************** test02()
*** 52,57 ****
--- 52,79 ----
    VERIFY( num == 0 );
  }
  
+ // LWG 4135.
+ // The helper lambda of std::erase for list should specify return type as bool
+ void
+ test_lwg4135()
+ {
+   struct Bool {
+     Bool() = default;
+     Bool(const Bool&) = delete;
+     operator bool() const { return false; }
+   };
+ 
+   static Bool b;
+ 
+   struct Int {
+     Bool& operator==(Int) const { return b; }
+     void operator==(Int) = delete;
+   };
+ 
+   std::forward_list<Int> l;
+   std::erase(l, Int{});
+ }
+ 
  int
  main()
  {
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/23_containers/list/erasure.cc gcc-13.4.0/libstdc++-v3/testsuite/23_containers/list/erasure.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/23_containers/list/erasure.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/23_containers/list/erasure.cc	Thu Jun  5 16:03:03 2025
*************** test02()
*** 51,56 ****
--- 51,78 ----
    VERIFY( num == 0 );
  }
  
+ // LWG 4135.
+ // The helper lambda of std::erase for list should specify return type as bool
+ void
+ test_lwg4135()
+ {
+   struct Bool {
+     Bool() = default;
+     Bool(const Bool&) = delete;
+     operator bool() const { return false; }
+   };
+ 
+   static Bool b;
+ 
+   struct Int {
+     Bool& operator==(Int) const { return b; }
+     void operator==(Int) = delete;
+   };
+ 
+   std::list<Int> l;
+   std::erase(l, Int{});
+ }
+ 
  int
  main()
  {
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/23_containers/span/117966.cc gcc-13.4.0/libstdc++-v3/testsuite/23_containers/span/117966.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/23_containers/span/117966.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/23_containers/span/117966.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,13 ----
+ // { dg-options "-D_GLIBCXX_DEBUG -std=gnu++20" }
+ // { dg-do compile { target c++20 } }
+ 
+ // Bug 117966
+ // constexpr std::span construction fails to compile with D_GLIBCXX_DEBUG
+ 
+ #include <array>
+ #include <span>
+ 
+ struct A {
+   constexpr A(std::span<const unsigned char>) {}
+ };
+ constexpr A val{std::array<unsigned char, 2>{0x11, 0x22}};
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/23_containers/span/nodiscard.cc gcc-13.4.0/libstdc++-v3/testsuite/23_containers/span/nodiscard.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/23_containers/span/nodiscard.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/23_containers/span/nodiscard.cc	Thu Jun  5 16:03:03 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-options "-std=gnu++20" }
  // { dg-do compile { target c++20 } }
  
  #include <span>
*************** test_iterators(std::span<S> s)
*** 28,40 ****
    s.end(); // { dg-warning "ignoring return value" }
    s.rbegin(); // { dg-warning "ignoring return value" }
    s.rend(); // { dg-warning "ignoring return value" }
- 
- #if __cplusplus > 202002L
-   s.cbegin(); // { dg-warning "ignoring return value" "" { target c++23 } }
-   s.cend(); // { dg-warning "ignoring return value" "" { target c++23 } }
-   s.crbegin(); // { dg-warning "ignoring return value" "" { target c++23 } }
-   s.crend(); // { dg-warning "ignoring return value" "" { target c++23 } }
- #endif
  }
  
  void
--- 29,34 ----
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/23_containers/vector/allocator/115854.cc gcc-13.4.0/libstdc++-v3/testsuite/23_containers/vector/allocator/115854.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/23_containers/vector/allocator/115854.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/23_containers/vector/allocator/115854.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,10 ----
+ // { dg-do compile { target c++11 } }
+ 
+ #include <vector>
+ #include <testsuite_allocator.h>
+ 
+ __gnu_test::ExplicitConsAlloc<int> alloc;
+ std::vector<int, __gnu_test::ExplicitConsAlloc<int>> v;
+ std::vector<int, __gnu_test::ExplicitConsAlloc<int>> v1(alloc);
+ std::vector<int, __gnu_test::ExplicitConsAlloc<int>> v2(v1, alloc);
+ std::vector<int, __gnu_test::ExplicitConsAlloc<int>> v3(std::move(v1), alloc);
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/23_containers/vector/bool/allocator/115854.cc gcc-13.4.0/libstdc++-v3/testsuite/23_containers/vector/bool/allocator/115854.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/23_containers/vector/bool/allocator/115854.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/23_containers/vector/bool/allocator/115854.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,10 ----
+ // { dg-do compile { target c++11 } }
+ 
+ #include <vector>
+ #include <testsuite_allocator.h>
+ 
+ __gnu_test::ExplicitConsAlloc<bool> alloc;
+ std::vector<bool, __gnu_test::ExplicitConsAlloc<bool>> v;
+ std::vector<bool, __gnu_test::ExplicitConsAlloc<bool>> v1(alloc);
+ std::vector<bool, __gnu_test::ExplicitConsAlloc<bool>> v2(v1, alloc);
+ std::vector<bool, __gnu_test::ExplicitConsAlloc<bool>> v3(std::move(v1), alloc);
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/110498.cc gcc-13.4.0/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/110498.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/110498.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/110498.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,18 ----
+ // { dg-options "-O3 -Werror=array-bounds" }
+ // { dg-do compile }
+ 
+ // Bug libstdc++/110498
+ // Spurious warnings stringop-overflow and array-bounds copying data as bytes
+ // into vector::reserve
+ 
+ #include <vector>
+ 
+ void f(std::vector<bool>& v)
+ {
+   // Warning emitted when set to any number in the range [1,64].
+   const std::size_t reserve_size = 30;
+ 
+   v.reserve(reserve_size);
+   v.push_back(0);
+ }
+ 
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/114758.cc gcc-13.4.0/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/114758.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/114758.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/114758.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,12 ----
+ // { dg-options "-O3 -Werror=stringop-overread" }
+ // { dg-do compile }
+ 
+ // Bug libstdc++/114758 The layout of a std::vector<bool> reports a warning
+ 
+ #include <vector>
+ 
+ void pr114758(std::vector<bool>& v)
+ {
+   v.resize(3);
+   v = std::vector<bool>(3, false);
+ }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/23_containers/vector/bool/emplace_rvalue.cc gcc-13.4.0/libstdc++-v3/testsuite/23_containers/vector/bool/emplace_rvalue.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/23_containers/vector/bool/emplace_rvalue.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/23_containers/vector/bool/emplace_rvalue.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,24 ----
+ // { dg-do compile { target c++11 } }
+ 
+ #include <vector>
+ 
+ struct S
+ {
+   explicit operator bool() &&;
+ };
+ 
+ void
+ test_emplace_back()
+ {
+   S s;
+   std::vector<bool> v;
+   v.emplace_back(std::move(s));
+ }
+ 
+ void
+ test_emplace()
+ {
+   S s;
+   std::vector<bool> v;
+   v.emplace(v.begin(), std::move(s));
+ }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/23_containers/vector/cons/113841.cc gcc-13.4.0/libstdc++-v3/testsuite/23_containers/vector/cons/113841.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/23_containers/vector/cons/113841.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/23_containers/vector/cons/113841.cc	Thu Jun  5 16:03:03 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-options "-std=gnu++20" }
  // { dg-do compile { target c++20 } }
  
  #include <vector>
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/117983.cc gcc-13.4.0/libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/117983.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/117983.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/117983.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,17 ----
+ // { dg-options "-O3 -Werror=stringop-overflow" }
+ // { dg-do compile }
+ 
+ // PR libstdc++/117983
+ // -Wstringop-overflow false positive for __builtin_memmove from vector::insert
+ 
+ #include <vector>
+ 
+ typedef std::vector<unsigned char> bytes;
+ 
+ void push(bytes chunk, bytes& data) {
+   if (data.empty()) {
+     data.swap(chunk);
+   } else {
+     data.insert(data.end(), chunk.begin(), chunk.end());
+   }
+ }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/24_iterators/common_iterator/101527.cc gcc-13.4.0/libstdc++-v3/testsuite/24_iterators/common_iterator/101527.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/24_iterators/common_iterator/101527.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/24_iterators/common_iterator/101527.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,15 ----
+ // { dg-options "-std=gnu++20" }
+ // { dg-do compile { target c++20 } }
+ 
+ // PR libstdc++/101527
+ // implementation of std::common_iterator and std::counted_iterator's
+ // operator== seems to be wrong
+ 
+ #include <iterator>
+ 
+ bool test_pr101527()
+ {
+   std::common_iterator<int*, std::unreachable_sentinel_t> it1;
+   std::common_iterator<const int*, std::unreachable_sentinel_t> it2;
+   return it1 == it2;
+ }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/24_iterators/const_iterator/1.cc gcc-13.4.0/libstdc++-v3/testsuite/24_iterators/const_iterator/1.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/24_iterators/const_iterator/1.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/24_iterators/const_iterator/1.cc	Thu Jun  5 16:03:03 2025
***************
*** 2,7 ****
--- 2,8 ----
  // { dg-do run { target c++23 } }
  
  #include <iterator>
+ #include <ranges>
  #include <array>
  #include <concepts>
  #include <string_view>
*************** test03()
*** 98,103 ****
--- 99,124 ----
  			     std::unreachable_sentinel_t> );
  }
  
+ void
+ test04()
+ {
+   // Example from P2836R1
+   auto f = [](std::vector<int>::const_iterator i) {};
+ 
+   auto v = std::vector<int>();
+   {
+     auto i1 = ranges::cbegin(v); // returns vector<T>::const_iterator
+     f(i1); // okay
+   }
+ 
+   auto t = v | std::views::take_while([](int const x) { return x < 100; });
+   {
+     auto i2 = ranges::cbegin(t); // returns basic_const_iterator<vector<T>::iterator>
+     f(i2); // was an error in C++23 before P2836R1
+     f(std::move(i2)); // same
+   }
+ }
+ 
  int
  main()
  {
*************** main()
*** 137,140 ****
--- 158,162 ----
    test02<const std::vector<bool>, true>();
  
    test03();
+   test04();
  }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/24_iterators/const_iterator/112490.cc gcc-13.4.0/libstdc++-v3/testsuite/24_iterators/const_iterator/112490.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/24_iterators/const_iterator/112490.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/24_iterators/const_iterator/112490.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,13 ----
+ // { dg-options "-std=gnu++23" }
+ // { dg-do compile { target c++23 } }
+ 
+ // PR libstdc++/112490 - infinite meta error in
+ // reverse_iterator<basic_const_iterator<vector<int>::iterator>>
+ 
+ #include <iterator>
+ #include <vector>
+ 
+ using I = std::vector<int>::iterator;
+ using CI = std::basic_const_iterator<I>;
+ using RCI = std::reverse_iterator<CI>;
+ static_assert(std::totally_ordered<RCI>);
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/24_iterators/counted_iterator/101527.cc gcc-13.4.0/libstdc++-v3/testsuite/24_iterators/counted_iterator/101527.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/24_iterators/counted_iterator/101527.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/24_iterators/counted_iterator/101527.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,15 ----
+ // { dg-options "-std=gnu++20" }
+ // { dg-do compile { target c++20 } }
+ 
+ // PR libstdc++/101527
+ // implementation of std::common_iterator and std::counted_iterator's
+ // operator== seems to be wrong
+ 
+ #include <iterator>
+ 
+ bool test_pr101527()
+ {
+   std::counted_iterator<int*> it1;
+   std::counted_iterator<const int*> it2;
+   return it1 == it2;
+ }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/24_iterators/customization_points/iter_move.cc gcc-13.4.0/libstdc++-v3/testsuite/24_iterators/customization_points/iter_move.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/24_iterators/customization_points/iter_move.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/24_iterators/customization_points/iter_move.cc	Thu Jun  5 16:03:03 2025
*************** test01()
*** 64,71 ****
--- 64,166 ----
    VERIFY( test_X(3, 4) );
  }
  
+ template<typename T>
+ using rval_ref = std::iter_rvalue_reference_t<T>;
+ 
+ static_assert(std::same_as<rval_ref<int*>, int&&>);
+ static_assert(std::same_as<rval_ref<const int*>, const int&&>);
+ static_assert(std::same_as<rval_ref<std::move_iterator<int*>>, int&&>);
+ 
+ template<typename T>
+ concept iter_movable = requires { std::ranges::iter_move(std::declval<T>()); };
+ 
+ struct Iter
+ {
+   friend int& iter_move(Iter&) { static int i = 1; return i; }
+   friend long iter_move(Iter&&) { return 2; }
+   const short& operator*() const & { static short s = 3; return s; }
+   friend float operator*(const Iter&&) { return 4.0f; }
+ };
+ 
+ void
+ test_adl()
+ {
+   Iter it;
+   const Iter& cit = it;
+ 
+   VERIFY( std::ranges::iter_move(it) == 1 );
+   VERIFY( std::ranges::iter_move(std::move(it)) == 2 );
+   VERIFY( std::ranges::iter_move(cit) == 3 );
+   VERIFY( std::ranges::iter_move(std::move(cit)) == 4.0f );
+ 
+   // The return type should be unchanged for ADL iter_move:
+   static_assert(std::same_as<decltype(std::ranges::iter_move(it)), int&>);
+   static_assert(std::same_as<decltype(std::ranges::iter_move(std::move(it))),
+ 			     long>);
+   // When ADL iter_move is not used, return type should be an rvalue:
+   static_assert(std::same_as<decltype(std::ranges::iter_move(cit)),
+ 			     const short&&>);
+   static_assert(std::same_as<decltype(std::ranges::iter_move(std::move(cit))),
+ 			     float>);
+ 
+   // std::iter_rvalue_reference_t always considers the argument as lvalue.
+   static_assert(std::same_as<rval_ref<Iter>, int&>);
+   static_assert(std::same_as<rval_ref<Iter&>, int&>);
+   static_assert(std::same_as<rval_ref<const Iter>, const short&&>);
+   static_assert(std::same_as<rval_ref<const Iter&>, const short&&>);
+ }
+ 
+ void
+ test_pr106612()
+ {
+   // Bug 106612 ranges::iter_move does not consider iterator's value categories
+ 
+   struct I
+   {
+     int i{};
+     int& operator*() & { return i; }
+     int operator*() const & { return i; }
+     void operator*() && = delete;
+   };
+ 
+   static_assert( iter_movable<I&> );
+   static_assert( iter_movable<I const&> );
+   static_assert( ! iter_movable<I> );
+   static_assert( std::same_as<std::iter_rvalue_reference_t<I>, int&&> );
+   static_assert( std::same_as<std::iter_rvalue_reference_t<const I>, int> );
+ 
+   struct I2
+   {
+     int i{};
+     int& operator*() & { return i; }
+     int operator*() const & { return i; }
+     void operator*() &&;
+   };
+ 
+   static_assert( iter_movable<I2&> );
+   static_assert( iter_movable<I2 const&> );
+   static_assert( iter_movable<I2> );
+   static_assert( std::is_void_v<decltype(std::ranges::iter_move(I2{}))> );
+   static_assert( std::same_as<std::iter_rvalue_reference_t<I2>, int&&> );
+   static_assert( std::same_as<std::iter_rvalue_reference_t<I2 const>, int> );
+ 
+   enum E { e };
+   enum F { f };
+ 
+   struct I3
+   {
+     E operator*() const & { return e; }
+     F operator*() && { return f; }
+   };
+ 
+   static_assert( iter_movable<I3&> );
+   static_assert( iter_movable<I3> );
+   static_assert( std::same_as<decltype(std::ranges::iter_move(I3{})), F> );
+ }
+ 
  int
  main()
  {
    test01();
+   test_adl();
  }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/24_iterators/move_iterator/lwg3736.cc gcc-13.4.0/libstdc++-v3/testsuite/24_iterators/move_iterator/lwg3736.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/24_iterators/move_iterator/lwg3736.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/24_iterators/move_iterator/lwg3736.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,53 ----
+ // { dg-options "-std=gnu++20" }
+ // { dg-do compile { target c++20 } }
+ 
+ // 3736.  move_iterator missing disable_sized_sentinel_for specialization
+ 
+ #include <iterator>
+ 
+ template<typename Iter> using MoveIter = std::move_iterator<Iter>;
+ 
+ using std::sized_sentinel_for;
+ using std::disable_sized_sentinel_for;
+ 
+ // These assertions always passed, even without LWG 3736:
+ static_assert(sized_sentinel_for<MoveIter<int*>, MoveIter<int*>>);
+ static_assert(sized_sentinel_for<MoveIter<int*>, MoveIter<const int*>>);
+ static_assert(not sized_sentinel_for<MoveIter<int*>, MoveIter<long*>>);
+ static_assert(not sized_sentinel_for<MoveIter<int*>, std::default_sentinel_t>);
+ static_assert(not disable_sized_sentinel_for<MoveIter<int*>, MoveIter<int*>>);
+ 
+ // These types don't satisfy sized_sentinel_for anyway (because the subtraction
+ // is ill-formed) but LWG 3736 makes the variable template explicitly false:
+ static_assert(disable_sized_sentinel_for<MoveIter<int*>, MoveIter<long*>>);
+ 
+ struct Iter
+ {
+   using iterator_category = std::random_access_iterator_tag;
+   using value_type = int;
+   using pointer = int*;
+   using reference = int&;
+   using difference_type = long;
+ 
+   Iter() = default;
+   Iter& operator++();
+   Iter operator++(int);
+   Iter& operator--();
+   Iter operator--(int);
+   reference operator*() const;
+   pointer operator->() const;
+   Iter& operator+=(difference_type);
+   Iter& operator-=(difference_type);
+   friend Iter operator+(Iter, difference_type);
+   friend Iter operator+(difference_type, Iter);
+   friend Iter operator-(Iter, difference_type);
+   friend difference_type operator-(Iter, Iter);
+   bool operator==(Iter) const;
+ };
+ 
+ // Specialize the variable template so that Iter is not its own sized sentinel:
+ template<> constexpr bool std::disable_sized_sentinel_for<Iter, Iter> = true;
+ static_assert( not sized_sentinel_for<Iter, Iter> );
+ 
+ // LWG 3736 means that affects std::move_iterator<Iter> as well:
+ static_assert( not sized_sentinel_for<MoveIter<Iter>, MoveIter<Iter>> );
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/24_iterators/move_iterator/rel_ops_c++20.cc gcc-13.4.0/libstdc++-v3/testsuite/24_iterators/move_iterator/rel_ops_c++20.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/24_iterators/move_iterator/rel_ops_c++20.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/24_iterators/move_iterator/rel_ops_c++20.cc	Thu Jun  5 16:03:03 2025
***************
*** 19,24 ****
--- 19,25 ----
  // { dg-do compile { target c++2a } }
  
  #include <iterator>
+ #include <testsuite_iterators.h>
  
  template<int>
  struct Iter
*************** static_assert( cend > beg );
*** 142,144 ****
--- 143,156 ----
  static_assert( beg <= cend );
  static_assert( cend >= beg );
  static_assert( std::is_lt(beg <=> cend) );
+ 
+ template<typename I>
+   concept has_plus = requires(std::iter_difference_t<I> n, I i) {
+ 	{ n + i } -> std::same_as<I>;
+   };
+ 
+ using namespace __gnu_test;
+ using MBI = std::move_iterator<bidirectional_iterator_wrapper<int>>;
+ static_assert( ! has_plus<MBI> );
+ using MRI = std::move_iterator<random_access_iterator_wrapper<int>>;
+ static_assert( has_plus<MRI> );
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/24_iterators/range_operations/distance.cc gcc-13.4.0/libstdc++-v3/testsuite/24_iterators/range_operations/distance.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/24_iterators/range_operations/distance.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/24_iterators/range_operations/distance.cc	Thu Jun  5 16:03:03 2025
*************** test05()
*** 145,150 ****
--- 145,160 ----
    VERIFY( std::ranges::distance(c4) == 5 );
  }
  
+ void
+ test06()
+ {
+   // LWG 3664 - LWG 3392 broke std::ranges::distance(a, a+3)
+   int a[] = {1, 2, 3};
+   VERIFY( std::ranges::distance(a, a+3) == 3 );
+   VERIFY( std::ranges::distance(a, a) == 0 );
+   VERIFY( std::ranges::distance(a+3, a) == -3 );
+ }
+ 
  int
  main()
  {
*************** main()
*** 153,156 ****
--- 163,167 ----
    test03();
    test04();
    test05();
+   test06();
  }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/25_algorithms/copy/108846.cc gcc-13.4.0/libstdc++-v3/testsuite/25_algorithms/copy/108846.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/25_algorithms/copy/108846.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/25_algorithms/copy/108846.cc	Thu Jun  5 16:03:03 2025
*************** test_pr108846()
*** 25,31 ****
--- 25,40 ----
      B *src = &dsrc;
      // If this is optimized to memmove it will overwrite tail padding.
      std::copy(src, src+1, dst);
+     // Check tail padding is unchanged:
+     VERIFY(ddst.x == 3);
+     // Check B subobject was copied:
+     VERIFY(ddst.i == 4 && ddst.j == 5);
+ #if __cpp_lib_ranges >= 201911L
+     ddst.i = ddst.j = 99;
+     std::ranges::copy(src, src+1, dst);
      VERIFY(ddst.x == 3);
+     VERIFY(ddst.i == 4 && ddst.j == 5);
+ #endif
  }
  
  struct B2 {
*************** test_non_const_copy_assign()
*** 48,58 ****
--- 57,111 ----
      B2 *src = &dsrc;
      // Ensure the not-taken trivial copy path works for this type.
      std::copy(src, src+1, dst);
+     // Check tail padding is unchanged:
      VERIFY(ddst.x == 3);
+     // Check B subobject was copied:
+     VERIFY(ddst.i == 4 && ddst.j == 5);
+ #if __cpp_lib_ranges >= 201911L
+     ddst.i = ddst.j = 99;
+     std::ranges::copy(src, src+1, dst);
+     VERIFY(ddst.x == 3);
+     VERIFY(ddst.i == 4 && ddst.j == 5);
+ #endif
+ }
+ 
+ struct B3 {
+     B3(int i, short j) : i(i), j(j) {}
+ #if __cplusplus >= 201103L
+     B3& operator=(B3& b) = default;
+ #endif
+     int i;
+     short j;
+ };
+ struct D3 : B3 {
+     D3(int i, short j, short x) : B3(i, j), x(x) {}
+     short x; // Stored in tail padding of B3
+ };
+ 
+ void
+ test_non_const_copy_assign_trivial()
+ {
+     D3 ddst(1, 2, 3);
+     D3 dsrc(4, 5, 6);
+     B3 *dst = &ddst;
+     B3 *src = &dsrc;
+     // If this is optimized to memmove it will overwrite tail padding.
+     std::copy(src, src+1, dst);
+     // Check tail padding is unchanged:
+     VERIFY(ddst.x == 3);
+     // Check B subobject was copied:
+     VERIFY(ddst.i == 4 && ddst.j == 5);
+ #if __cpp_lib_ranges >= 201911L
+     ddst.i = ddst.j = 99;
+     std::ranges::copy(src, src+1, dst);
+     VERIFY(ddst.x == 3);
+     VERIFY(ddst.i == 4 && ddst.j == 5);
+ #endif
  }
  
  int main()
  {
    test_pr108846();
    test_non_const_copy_assign();
+   test_non_const_copy_assign_trivial();
  }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/25_algorithms/copy_backward/108846.cc gcc-13.4.0/libstdc++-v3/testsuite/25_algorithms/copy_backward/108846.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/25_algorithms/copy_backward/108846.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/25_algorithms/copy_backward/108846.cc	Thu Jun  5 16:03:03 2025
*************** test_pr108846()
*** 25,31 ****
--- 25,40 ----
      B *src = &dsrc;
      // If this is optimized to memmove it will overwrite tail padding.
      std::copy_backward(src, src+1, dst+1);
+     // Check tail padding is unchanged:
+     VERIFY(ddst.x == 3);
+     // Check B subobject was copied:
+     VERIFY(ddst.i == 4 && ddst.j == 5);
+ #if __cpp_lib_ranges >= 201911L
+     ddst.i = ddst.j = 99;
+     std::ranges::copy_backward(src, src+1, dst+1);
      VERIFY(ddst.x == 3);
+     VERIFY(ddst.i == 4 && ddst.j == 5);
+ #endif
  }
  
  struct B2 {
*************** test_non_const_copy_assign()
*** 48,58 ****
--- 57,111 ----
      B2 *src = &dsrc;
      // Ensure the not-taken trivial copy path works for this type.
      std::copy_backward(src, src+1, dst+1);
+     // Check tail padding is unchanged:
      VERIFY(ddst.x == 3);
+     // Check B subobject was copied:
+     VERIFY(ddst.i == 4 && ddst.j == 5);
+ #if __cpp_lib_ranges >= 201911L
+     ddst.i = ddst.j = 99;
+     std::ranges::copy_backward(src, src+1, dst+1);
+     VERIFY(ddst.x == 3);
+     VERIFY(ddst.i == 4 && ddst.j == 5);
+ #endif
+ }
+ 
+ struct B3 {
+     B3(int i, short j) : i(i), j(j) {}
+ #if __cplusplus >= 201103L
+     B3& operator=(B3& b) = default;
+ #endif
+     int i;
+     short j;
+ };
+ struct D3 : B3 {
+     D3(int i, short j, short x) : B3(i, j), x(x) {}
+     short x; // Stored in tail padding of B3
+ };
+ 
+ void
+ test_non_const_copy_assign_trivial()
+ {
+     D3 ddst(1, 2, 3);
+     D3 dsrc(4, 5, 6);
+     B3 *dst = &ddst;
+     B3 *src = &dsrc;
+     // If this is optimized to memmove it will overwrite tail padding.
+     std::copy_backward(src, src+1, dst+1);
+     // Check tail padding is unchanged:
+     VERIFY(ddst.x == 3);
+     // Check B subobject was copied:
+     VERIFY(ddst.i == 4 && ddst.j == 5);
+ #if __cpp_lib_ranges >= 201911L
+     ddst.i = ddst.j = 99;
+     std::ranges::copy_backward(src, src+1, dst+1);
+     VERIFY(ddst.x == 3);
+     VERIFY(ddst.i == 4 && ddst.j == 5);
+ #endif
  }
  
  int main()
  {
    test_pr108846();
    test_non_const_copy_assign();
+   test_non_const_copy_assign_trivial();
  }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/25_algorithms/copy_n/108846.cc gcc-13.4.0/libstdc++-v3/testsuite/25_algorithms/copy_n/108846.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/25_algorithms/copy_n/108846.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/25_algorithms/copy_n/108846.cc	Thu Jun  5 16:03:03 2025
*************** test_pr108846()
*** 25,36 ****
      B *src = &dsrc;
      // If this is optimized to memmove it will overwrite tail padding.
      std::copy_n(src, 1, dst);
      VERIFY(ddst.x == 3);
  }
  
  struct B2 {
      B2(int i, short j) : i(i), j(j) {}
!     B2& operator=(B2&) = default;
      int i;
      short j;
  };
--- 25,45 ----
      B *src = &dsrc;
      // If this is optimized to memmove it will overwrite tail padding.
      std::copy_n(src, 1, dst);
+     // Check tail padding is unchanged:
+     VERIFY(ddst.x == 3);
+     // Check B subobject was copied:
+     VERIFY(ddst.i == 4 && ddst.j == 5);
+ #if __cpp_lib_ranges >= 201911L
+     ddst.i = ddst.j = 99;
+     std::ranges::copy_n(src, 1, dst);
      VERIFY(ddst.x == 3);
+     VERIFY(ddst.i == 4 && ddst.j == 5);
+ #endif
  }
  
  struct B2 {
      B2(int i, short j) : i(i), j(j) {}
!     B2& operator=(B2& b) { i = b.i; j = b.j; return *this; }
      int i;
      short j;
  };
*************** test_non_const_copy_assign()
*** 48,58 ****
--- 57,109 ----
      B2 *src = &dsrc;
      // Ensure the not-taken trivial copy path works for this type.
      std::copy_n(src, 1, dst);
+     // Check tail padding is unchanged:
      VERIFY(ddst.x == 3);
+     // Check B subobject was copied:
+     VERIFY(ddst.i == 4 && ddst.j == 5);
+ #if __cpp_lib_ranges >= 201911L
+     ddst.i = ddst.j = 99;
+     std::ranges::copy_n(src, 1, dst);
+     VERIFY(ddst.x == 3);
+     VERIFY(ddst.i == 4 && ddst.j == 5);
+ #endif
+ }
+ 
+ struct B3 {
+     B3(int i, short j) : i(i), j(j) {}
+     B3& operator=(B3& b) = default;
+     int i;
+     short j;
+ };
+ struct D3 : B3 {
+     D3(int i, short j, short x) : B3(i, j), x(x) {}
+     short x; // Stored in tail padding of B3
+ };
+ 
+ void
+ test_non_const_copy_assign_trivial()
+ {
+     D3 ddst(1, 2, 3);
+     D3 dsrc(4, 5, 6);
+     B3 *dst = &ddst;
+     B3 *src = &dsrc;
+     // If this is optimized to memmove it will overwrite tail padding.
+     std::copy_n(src, 1, dst);
+     // Check tail padding is unchanged:
+     VERIFY(ddst.x == 3);
+     // Check B subobject was copied:
+     VERIFY(ddst.i == 4 && ddst.j == 5);
+ #if __cpp_lib_ranges >= 201911L
+     ddst.i = ddst.j = 99;
+     std::ranges::copy_n(src, 1, dst);
+     VERIFY(ddst.x == 3);
+     VERIFY(ddst.i == 4 && ddst.j == 5);
+ #endif
  }
  
  int main()
  {
    test_pr108846();
    test_non_const_copy_assign();
+   test_non_const_copy_assign_trivial();
  }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/25_algorithms/fill/constrained.cc gcc-13.4.0/libstdc++-v3/testsuite/25_algorithms/fill/constrained.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/25_algorithms/fill/constrained.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/25_algorithms/fill/constrained.cc	Thu Jun  5 16:03:03 2025
*************** test02()
*** 84,92 ****
--- 84,126 ----
    return ok;
  }
  
+ void
+ test03()
+ {
+   // Bug libstdc++/117094 - ranges::fill misses std::move for output_iterator
+ 
+   // Move-only output iterator
+   struct Iterator
+   {
+     using difference_type = long;
+     Iterator(int* p) : p(p) { }
+     Iterator(Iterator&&) = default;
+     Iterator& operator=(Iterator&&) = default;
+     int& operator*() const { return *p; }
+     Iterator& operator++() { ++p; return *this; }
+     Iterator operator++(int) { return Iterator(p++ ); }
+     int* p;
+ 
+     struct Sentinel
+     {
+       const int* p;
+       bool operator==(const Iterator& i) const { return p == i.p; }
+       long operator-(const Iterator& i) const { return p - i.p; }
+     };
+ 
+     long operator-(Sentinel s) const { return p - s.p; }
+   };
+   static_assert(std::sized_sentinel_for<Iterator::Sentinel, Iterator>);
+   int a[2];
+   std::ranges::fill(Iterator(a), Iterator::Sentinel{a+2}, 999);
+   VERIFY( a[0] == 999 );
+   VERIFY( a[1] == 999 );
+ }
+ 
  int
  main()
  {
    test01();
    static_assert(test02());
+   test03();
  }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/25_algorithms/iota/1.cc gcc-13.4.0/libstdc++-v3/testsuite/25_algorithms/iota/1.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/25_algorithms/iota/1.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/25_algorithms/iota/1.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,29 ****
- // { dg-options "-std=gnu++23" }
- // { dg-do run { target c++23 } }
- 
- #include <algorithm>
- #include <testsuite_hooks.h>
- #include <testsuite_iterators.h>
- 
- namespace ranges = std::ranges;
- 
- void
- test01()
- {
-   int x[3] = {};
-   __gnu_test::test_output_range<int> rx(x);
-   auto r0 = ranges::iota(rx, 0);
-   VERIFY( r0.out.ptr == x+3 );
-   VERIFY( r0.value == 3 );
-   VERIFY( ranges::equal(x, (int[]){0,1,2}) );
-   auto r1 = ranges::iota(x, x+2, 5);
-   VERIFY( r1.out == x+2 );
-   VERIFY( r1.value == 7 );
-   VERIFY( ranges::equal(x, (int[]){5,6,2}) );
- }
- 
- int
- main()
- {
-   test01();
- }
--- 0 ----
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/25_algorithms/lexicographical_compare_three_way/113960.cc gcc-13.4.0/libstdc++-v3/testsuite/25_algorithms/lexicographical_compare_three_way/113960.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/25_algorithms/lexicographical_compare_three_way/113960.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/25_algorithms/lexicographical_compare_three_way/113960.cc	Thu Jun  5 16:03:03 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-options "-std=gnu++20" }
  // { dg-do run { target c++20 } }
  
  // PR libstdc++/113960
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/25_algorithms/move/108846.cc gcc-13.4.0/libstdc++-v3/testsuite/25_algorithms/move/108846.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/25_algorithms/move/108846.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/25_algorithms/move/108846.cc	Thu Jun  5 16:03:03 2025
*************** test_pr108846()
*** 26,31 ****
--- 26,62 ----
      // If this is optimized to memmove it will overwrite tail padding.
      std::move(src, src+1, dst);
      VERIFY(ddst.x == 3);
+ #if __cpp_lib_ranges >= 201911L
+     std::ranges::move(src, src+1, dst);
+     VERIFY(ddst.x == 3);
+ #endif
+ }
+ 
+ struct B2 {
+     B2(int i, short j) : i(i), j(j) {}
+     B2& operator=(B2&& b) { i = b.i; j = b.j; return *this; }
+     int i;
+     short j;
+ };
+ struct D2 : B2 {
+     D2(int i, short j, short x) : B2(i, j), x(x) {}
+     short x; // Stored in tail padding of B2
+ };
+ 
+ void
+ test_move_only()
+ {
+     D2 ddst(1, 2, 3);
+     D2 dsrc(4, 5, 6);
+     B2 *dst = &ddst;
+     B2 *src = &dsrc;
+     // Ensure the not-taken trivial copy path works for this type.
+     std::move(src, src+1, dst);
+     VERIFY(ddst.x == 3);
+ #if __cpp_lib_ranges >= 201911L
+     std::ranges::move(src, src+1, dst);
+     VERIFY(ddst.x == 3);
+ #endif
  }
  
  struct B3 {
*************** struct D3 : B3 {
*** 40,58 ****
  };
  
  void
! test_move_only()
  {
      D3 ddst(1, 2, 3);
      D3 dsrc(4, 5, 6);
      B3 *dst = &ddst;
      B3 *src = &dsrc;
!     // Ensure the not-taken trivial copy path works for this type.
      std::move(src, src+1, dst);
      VERIFY(ddst.x == 3);
  }
  
  int main()
  {
    test_pr108846();
    test_move_only();
  }
--- 71,94 ----
  };
  
  void
! test_move_only_trivial()
  {
      D3 ddst(1, 2, 3);
      D3 dsrc(4, 5, 6);
      B3 *dst = &ddst;
      B3 *src = &dsrc;
!     // If this is optimized to memmove it will overwrite tail padding.
      std::move(src, src+1, dst);
      VERIFY(ddst.x == 3);
+ #if __cpp_lib_ranges >= 201911L
+     std::ranges::move(src, src+1, dst);
+     VERIFY(ddst.x == 3);
+ #endif
  }
  
  int main()
  {
    test_pr108846();
    test_move_only();
+   test_move_only_trivial();
  }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/25_algorithms/move/constrained.cc gcc-13.4.0/libstdc++-v3/testsuite/25_algorithms/move/constrained.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/25_algorithms/move/constrained.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/25_algorithms/move/constrained.cc	Thu Jun  5 16:03:03 2025
*************** test05()
*** 205,210 ****
--- 205,239 ----
    VERIFY( ranges::equal(v, (int[]){1,2,3,0}) );
  }
  
+ namespace pr105609
+ {
+   struct I {
+     using value_type = int;
+     using difference_type = std::ptrdiff_t;
+     int operator*() const;
+     I& operator++();
+     I operator++(int);
+     I& operator--();
+     I operator--(int);
+     bool operator==(I) const;
+     friend int& iter_move(const I&);
+   };
+ }
+ 
+ void
+ test06(pr105609::I i)
+ {
+   // PR libstdc++/105609
+   // ranges::move should use ranges::iter_move instead of std::move
+   struct O {
+     O(int&) { }
+     O(int&&) = delete;
+   };
+ 
+   O* o = nullptr;
+   std::ranges::move(i, i, o);
+ }
+ 
  int
  main()
  {
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/25_algorithms/move_backward/108846.cc gcc-13.4.0/libstdc++-v3/testsuite/25_algorithms/move_backward/108846.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/25_algorithms/move_backward/108846.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/25_algorithms/move_backward/108846.cc	Thu Jun  5 16:03:03 2025
*************** test_pr108846()
*** 26,31 ****
--- 26,62 ----
      // If this is optimized to memmove it will overwrite tail padding.
      std::move_backward(src, src+1, dst+1);
      VERIFY(ddst.x == 3);
+ #if __cpp_lib_ranges >= 201911L
+     std::ranges::move_backward(src, src+1, dst+1);
+     VERIFY(ddst.x == 3);
+ #endif
+ }
+ 
+ struct B2 {
+     B2(int i, short j) : i(i), j(j) {}
+     B2& operator=(B2&& b) { i = b.i; j = b.j; return *this; }
+     int i;
+     short j;
+ };
+ struct D2 : B2 {
+     D2(int i, short j, short x) : B2(i, j), x(x) {}
+     short x; // Stored in tail padding of B2
+ };
+ 
+ void
+ test_move_only()
+ {
+     D2 ddst(1, 2, 3);
+     D2 dsrc(4, 5, 6);
+     B2 *dst = &ddst;
+     B2 *src = &dsrc;
+     // Ensure the not-taken trivial copy path works for this type.
+     std::move_backward(src, src+1, dst+1);
+     VERIFY(ddst.x == 3);
+ #if __cpp_lib_ranges >= 201911L
+     std::ranges::move_backward(src, src+1, dst+1);
+     VERIFY(ddst.x == 3);
+ #endif
  }
  
  struct B3 {
*************** struct D3 : B3 {
*** 40,46 ****
  };
  
  void
! test_move_only()
  {
      D3 ddst(1, 2, 3);
      D3 dsrc(4, 5, 6);
--- 71,77 ----
  };
  
  void
! test_move_only_trivial()
  {
      D3 ddst(1, 2, 3);
      D3 dsrc(4, 5, 6);
*************** test_move_only()
*** 49,58 ****
--- 80,94 ----
      // Ensure the not-taken trivial copy path works for this type.
      std::move_backward(src, src+1, dst+1);
      VERIFY(ddst.x == 3);
+ #if __cpp_lib_ranges >= 201911L
+     std::ranges::move_backward(src, src+1, dst+1);
+     VERIFY(ddst.x == 3);
+ #endif
  }
  
  int main()
  {
    test_pr108846();
    test_move_only();
+   test_move_only_trivial();
  }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/25_algorithms/move_backward/constrained.cc gcc-13.4.0/libstdc++-v3/testsuite/25_algorithms/move_backward/constrained.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/25_algorithms/move_backward/constrained.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/25_algorithms/move_backward/constrained.cc	Thu Jun  5 16:03:03 2025
*************** test03()
*** 161,166 ****
--- 161,195 ----
    return ok;
  }
  
+ namespace pr105609
+ {
+   struct I {
+     using value_type = int;
+     using difference_type = std::ptrdiff_t;
+     int operator*() const;
+     I& operator++();
+     I operator++(int);
+     I& operator--();
+     I operator--(int);
+     bool operator==(I) const;
+     friend int& iter_move(const I&);
+   };
+ }
+ 
+ void
+ test04(pr105609::I i)
+ {
+   // PR libstdc++/105609
+   // ranges::move should use ranges::iter_move instead of std::move
+   struct O {
+     O(int&) { }
+     O(int&&) = delete;
+   };
+ 
+   O* o = nullptr;
+   std::ranges::move_backward(i, i, o);
+ }
+ 
  int
  main()
  {
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/26_numerics/exclusive_scan/2.cc gcc-13.4.0/libstdc++-v3/testsuite/26_numerics/exclusive_scan/2.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/26_numerics/exclusive_scan/2.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/26_numerics/exclusive_scan/2.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,46 ----
+ // { dg-do run { target c++17 } }
+ 
+ // C++17 29.8.7 [exclusive.scan]
+ 
+ #include <numeric>
+ #include <testsuite_hooks.h>
+ 
+ struct Mint
+ {
+   Mint(int i = 0) : val(i) { }
+   Mint(Mint&&) = default;
+   Mint& operator=(Mint&&) = default;
+ 
+   operator int() const { return val; }
+ 
+ private:
+   int val;
+ };
+ 
+ void
+ test_move_only()
+ {
+   const int input[]{10, 20, 30};
+   int output[3];
+   std::exclusive_scan(input, input+3, output, Mint(5), std::plus<int>{});
+   VERIFY( output[0] == 5 );
+   VERIFY( output[1] == 15 );
+   VERIFY( output[2] == 35 );
+ }
+ 
+ void
+ test_pr108236()
+ {
+   int vals[]{1, 2, 3};
+   // Output range is the same as the input range:
+   std::exclusive_scan(vals, vals+3, vals, 99);
+   VERIFY( vals[0] == 99 );
+   VERIFY( vals[1] == 100 );
+   VERIFY( vals[2] == 102 );
+ }
+ 
+ int main()
+ {
+   test_move_only();
+   test_pr108236();
+ }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/26_numerics/headers/cmath/117321.cc gcc-13.4.0/libstdc++-v3/testsuite/26_numerics/headers/cmath/117321.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/26_numerics/headers/cmath/117321.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/26_numerics/headers/cmath/117321.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,6 ----
+ // { dg-options "-std=gnu++2b" }
+ // { dg-do run { target c++23 } }
+ // { dg-require-cmath "" }
+ // { dg-additional-options "-O0" }
+ 
+ #include "nextafter_c++23.cc"
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/26_numerics/headers/cmath/117406.cc gcc-13.4.0/libstdc++-v3/testsuite/26_numerics/headers/cmath/117406.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/26_numerics/headers/cmath/117406.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/26_numerics/headers/cmath/117406.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,60 ----
+ // Copyright (C) 2024 Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library.  This library 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.
+ 
+ // This library 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 this library; see the file COPYING3.  If not see
+ // <http://www.gnu.org/licenses/>.
+ 
+ // { dg-options "-std=gnu++2b" }
+ // { dg-do run { target c++23 } }
+ // { dg-require-cmath "" }
+ 
+ #include <stdfloat>
+ #include <cmath>
+ #include <limits>
+ #include <testsuite_hooks.h>
+ 
+ template <typename T>
+ void
+ test ()
+ {
+   using lim = std::numeric_limits<T>;
+   int t0 = std::ilogb(T(4.0));
+   VERIFY( t0 == 2 );
+   int t1 = std::ilogb(lim::infinity());
+   VERIFY( t1 == std::numeric_limits<int>::max() );
+   int t2 = std::ilogb(-lim::infinity());
+   VERIFY( t2 == std::numeric_limits<int>::max() );
+ }
+ 
+ int
+ main ()
+ {
+ #if defined(__STDCPP_FLOAT16_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
+   test <std::float16_t>();
+ #endif
+ #if defined(__STDCPP_FLOAT32_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
+   test <std::float32_t>();
+ #endif
+ #if defined(__STDCPP_FLOAT64_T__) && defined(_GLIBCXX_DOUBLE_IS_IEEE_BINARY64)
+   test <std::float64_t>();
+ #endif
+ #if defined(__STDCPP_FLOAT128_T__) \
+     && (defined(_GLIBCXX_LDOUBLE_IS_IEEE_BINARY128) \
+ 	|| defined(_GLIBCXX_HAVE_FLOAT128_MATH))
+   test <std::float128_t>();
+ #endif
+ #if defined(__STDCPP_BFLOAT16_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
+   test <std::bfloat16_t>();
+ #endif
+ }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/26_numerics/iota/2.cc gcc-13.4.0/libstdc++-v3/testsuite/26_numerics/iota/2.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/26_numerics/iota/2.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/26_numerics/iota/2.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,29 ----
+ // { dg-options "-std=gnu++23" }
+ // { dg-do run { target c++23 } }
+ 
+ #include <numeric>
+ #include <testsuite_hooks.h>
+ #include <testsuite_iterators.h>
+ 
+ namespace ranges = std::ranges;
+ 
+ void
+ test01()
+ {
+   int x[3] = {};
+   __gnu_test::test_output_range<int> rx(x);
+   auto r0 = ranges::iota(rx, 0);
+   VERIFY( r0.out.ptr == x+3 );
+   VERIFY( r0.value == 3 );
+   VERIFY( ranges::equal(x, (int[]){0,1,2}) );
+   auto r1 = ranges::iota(x, x+2, 5);
+   VERIFY( r1.out == x+2 );
+   VERIFY( r1.value == 7 );
+   VERIFY( ranges::equal(x, (int[]){5,6,2}) );
+ }
+ 
+ int
+ main()
+ {
+   test01();
+ }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/26_numerics/pstl/numeric_ops/108236.cc gcc-13.4.0/libstdc++-v3/testsuite/26_numerics/pstl/numeric_ops/108236.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/26_numerics/pstl/numeric_ops/108236.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/26_numerics/pstl/numeric_ops/108236.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,50 ----
+ // { dg-options "-ltbb" }
+ // { dg-do run { target c++17 } }
+ // { dg-require-effective-target tbb_backend }
+ 
+ // Bug 108236 std::exclusive_scan with execution policy does not work in-place
+ 
+ #include <numeric>
+ #include <execution>
+ #include <testsuite_hooks.h>
+ 
+ struct Mint
+ {
+   Mint(int i = 0) : val(i) { }
+   Mint(Mint&&) = default;
+   Mint& operator=(Mint&&) = default;
+ 
+   operator int() const { return val; }
+ 
+ private:
+   int val;
+ };
+ 
+ void
+ test_move_only()
+ {
+   const int input[]{10, 20, 30};
+   int output[3];
+   std::exclusive_scan(std::execution::seq, input, input+3, output, Mint(5),
+ 		      std::plus<int>{});
+   VERIFY( output[0] == 5 );
+   VERIFY( output[1] == 15 );
+   VERIFY( output[2] == 35 );
+ }
+ 
+ void
+ test_pr108236()
+ {
+   int vals[]{1, 2, 3};
+   // Output range is the same as the input range:
+   std::exclusive_scan(std::execution::seq, vals, vals+3, vals, 99);
+   VERIFY( vals[0] == 99 );
+   VERIFY( vals[1] == 100 );
+   VERIFY( vals[2] == 102 );
+ }
+ 
+ int main()
+ {
+   test_move_only();
+   test_pr108236();
+ }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/27_io/filesystem/iterators/lwg3480.cc gcc-13.4.0/libstdc++-v3/testsuite/27_io/filesystem/iterators/lwg3480.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/27_io/filesystem/iterators/lwg3480.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/27_io/filesystem/iterators/lwg3480.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,17 ----
+ // { dg-options "-std=gnu++20" }
+ // { dg-do compile { target c++20 } }
+ // { dg-require-filesystem-ts "" }
+ 
+ // LWG 3480
+ // directory_iterator and recursive_directory_iterator are not C++20 ranges
+ 
+ #include <filesystem>
+ 
+ namespace fs = std::filesystem;
+ namespace rg = std::ranges;
+ 
+ static_assert( rg::borrowed_range<fs::directory_iterator> );
+ static_assert( rg::borrowed_range<fs::recursive_directory_iterator> );
+ 
+ static_assert( rg::view<fs::directory_iterator> );
+ static_assert( rg::view<fs::recursive_directory_iterator> );
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/27_io/filesystem/operations/copy.cc gcc-13.4.0/libstdc++-v3/testsuite/27_io/filesystem/operations/copy.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/27_io/filesystem/operations/copy.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/27_io/filesystem/operations/copy.cc	Thu Jun  5 16:03:03 2025
*************** test_pr99290()
*** 216,221 ****
--- 216,230 ----
    }
  #endif
  
+   // https://github.com/msys2/MSYS2-packages/issues/1937
+   auto copy_opts
+     = fs::copy_options::overwrite_existing | fs::copy_options::recursive;
+   copy(source, dest, copy_opts, ec);
+   VERIFY( !ec );
+ 
+   auto ch = std::ifstream{dest/"file"}.get();
+   VERIFY( ch == 'a' );
+ 
    remove_all(dir);
  }
  
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/27_io/filesystem/operations/copy_file.cc gcc-13.4.0/libstdc++-v3/testsuite/27_io/filesystem/operations/copy_file.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/27_io/filesystem/operations/copy_file.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/27_io/filesystem/operations/copy_file.cc	Thu Jun  5 16:03:03 2025
*************** test01()
*** 76,83 ****
--- 76,205 ----
    remove(to);
  }
  
+ void
+ test_directory()
+ {
+   std::error_code ec;
+ 
+   auto dir = __gnu_test::nonexistent_path();
+   auto file = __gnu_test::nonexistent_path();
+ 
+   // error condition: is_regular_file(from) is false
+   create_directory(dir);
+   bool b = copy_file(dir, file, ec);
+   VERIFY( !b );
+   VERIFY( ec == std::errc::invalid_argument );
+   VERIFY( !exists(file) );
+   VERIFY( is_directory(dir) );
+ 
+   ec = std::make_error_code(std::errc::address_in_use);
+   // error condition: exists(to) is true and is_regular_file(to) is false
+   std::ofstream{file} << "regular file";
+   b = copy_file(file, dir, ec);
+   VERIFY( !b );
+   VERIFY( ec == std::errc::invalid_argument );
+   VERIFY( exists(file) );
+   VERIFY( is_directory(dir) );
+ 
+   remove(dir);
+   remove(file);
+ }
+ 
+ void
+ test_existing()
+ {
+   using std::filesystem::copy_options;
+   std::error_code ec;
+ 
+   auto from = __gnu_test::nonexistent_path();
+   auto to = from;
+ 
+   // error condition: exists(to) is true and equivalent(from, to) is true
+   std::ofstream{from} << "source";
+   bool b = copy_file(from, to, ec);
+   VERIFY( !b );
+   VERIFY( ec == std::errc::file_exists );
+ 
+   to = __gnu_test::nonexistent_path();
+   std::ofstream{to} << "overwrite me";
+ 
+   // error condition: exists(to) is true and options == copy_options::none
+   b = copy_file(from, to, ec);
+   VERIFY( !b );
+   VERIFY( ec == std::errc::file_exists );
+   VERIFY( file_size(to) != file_size(from) );
+ 
+ #if __cpp_exceptions
+   try
+   {
+     (void) copy_file(from, to);
+     VERIFY(false);
+   }
+   catch (const std::filesystem::filesystem_error& e)
+   {
+     std::string_view msg = e.what();
+     VERIFY( msg.find(from.string()) != msg.npos );
+     VERIFY( msg.find(to.string()) != msg.npos );
+     VERIFY( e.code() == std::errc::file_exists );
+   }
+   VERIFY( file_size(to) == 12 );
+ #endif
+ 
+   b = copy_file(from, to, copy_options::skip_existing, ec);
+   VERIFY( !b );
+   VERIFY( !ec );
+   VERIFY( file_size(to) != file_size(from) );
+ 
+   b = copy_file(from, to, copy_options::skip_existing); // doesn't throw
+   VERIFY( !b );
+   VERIFY( file_size(to) != file_size(from) );
+ 
+   b = copy_file(from, to, copy_options::overwrite_existing, ec);
+   VERIFY( b );
+   VERIFY( !ec );
+   VERIFY( file_size(to) == file_size(from) );
+ 
+   std::ofstream{to} << "overwrite me again";
+   b = copy_file(from, to, copy_options::overwrite_existing); // doesn't throw
+   VERIFY( b );
+   VERIFY( file_size(to) == file_size(from) );
+ 
+   ec = std::make_error_code(std::errc::address_in_use);
+   auto time = last_write_time(from);
+   std::ofstream{to} << "touched";
+   last_write_time(to, time + std::chrono::seconds(60));
+   b = copy_file(from, to, copy_options::update_existing, ec);
+   VERIFY( !b );
+   VERIFY( !ec );
+   VERIFY( file_size(to) != file_size(from) );
+ 
+   b = copy_file(from, to, copy_options::update_existing); // doesn't throw
+   VERIFY( !b );
+   VERIFY( file_size(to) != file_size(from) );
+ 
+   ec = std::make_error_code(std::errc::address_in_use);
+   time = last_write_time(to);
+   std::ofstream{from} << "touched more recently";
+   last_write_time(from, time + std::chrono::seconds(60));
+   b = copy_file(from, to, copy_options::update_existing, ec);
+   VERIFY( b );
+   VERIFY( !ec );
+   VERIFY( file_size(to) == file_size(from) );
+ 
+   time = last_write_time(to);
+   std::ofstream{from} << "touched even more recently";
+   last_write_time(from, time + std::chrono::seconds(60));
+   b = copy_file(from, to, copy_options::update_existing); // doesn't throw
+   VERIFY( b );
+   VERIFY( file_size(to) == file_size(from) );
+ 
+   remove(from);
+   remove(to);
+ }
+ 
  int
  main()
  {
    test01();
+   test_existing();
  }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/27_io/filesystem/operations/hard_link_count.cc gcc-13.4.0/libstdc++-v3/testsuite/27_io/filesystem/operations/hard_link_count.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/27_io/filesystem/operations/hard_link_count.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/27_io/filesystem/operations/hard_link_count.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,61 ----
+ // { dg-do run { target c++17 } }
+ // { dg-require-filesystem-ts "" }
+ 
+ #include <filesystem>
+ #include <testsuite_hooks.h>
+ #include <testsuite_fs.h>
+ 
+ namespace fs = std::filesystem;
+ 
+ void test01()
+ {
+   // PR libstdc++/113663
+ 
+   fs::path p1 = __gnu_test::nonexistent_path();
+   VERIFY( !fs::exists(p1) );
+ 
+   __gnu_test::scoped_file f1(p1);
+   VERIFY( fs::exists(p1) );
+ 
+   VERIFY( fs::hard_link_count(p1) == 1 );
+ 
+   fs::path p2 = __gnu_test::nonexistent_path();
+   VERIFY( !fs::exists(p2) );
+ 
+   fs::create_hard_link(p1, p2);
+   __gnu_test::scoped_file f2(p2, __gnu_test::scoped_file::adopt_file);
+   VERIFY( fs::exists(p2) );
+ 
+   VERIFY( fs::hard_link_count(p1) == 2 );
+   VERIFY( fs::hard_link_count(p2) == 2 );
+ }
+ 
+ void
+ test02()
+ {
+   std::error_code ec;
+   fs::path p1 = __gnu_test::nonexistent_path();
+   VERIFY( fs::hard_link_count(p1, ec) == -1 );
+   VERIFY( ec == std::errc::no_such_file_or_directory );
+ 
+ #if __cpp_exceptions
+   try {
+     fs::hard_link_count(p1); // { dg-warning "ignoring return value" }
+     VERIFY( false );
+   } catch (const fs::filesystem_error& e) {
+     VERIFY( e.path1() == p1 );
+     VERIFY( e.path2().empty() );
+   }
+ #endif
+ 
+   __gnu_test::scoped_file f1(p1);
+   fs::hard_link_count(f1.path, ec);  // { dg-warning "ignoring return value" }
+   VERIFY( !ec ); // Should be cleared on success.
+ }
+ 
+ int
+ main()
+ {
+   test01();
+   test02();
+ }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/27_io/filesystem/operations/pr118158.cc gcc-13.4.0/libstdc++-v3/testsuite/27_io/filesystem/operations/pr118158.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/27_io/filesystem/operations/pr118158.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/27_io/filesystem/operations/pr118158.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,62 ----
+ // { dg-do run { target c++17 } }
+ // { dg-require-filesystem-ts "" }
+ 
+ #include <filesystem>
+ #include <testsuite_fs.h>
+ #include <testsuite_hooks.h>
+ 
+ #if defined(_GLIBCXX_HAVE_SYS_STAT_H) && defined(_GLIBCXX_HAVE_SYS_TYPES_H)
+ # include <sys/types.h>
+ # include <sys/stat.h>  // mkfifo
+ #endif
+ 
+ namespace fs = std::filesystem;
+ 
+ void
+ test_pr118158()
+ {
+ #if defined(_GLIBCXX_HAVE_SYS_STAT_H) && defined(_GLIBCXX_HAVE_SYS_TYPES_H) \
+   && defined(S_IWUSR) && defined(S_IRUSR)
+   auto p1 = __gnu_test::nonexistent_path();
+   auto p2 = __gnu_test::nonexistent_path();
+   auto p3 = __gnu_test::nonexistent_path();
+   const std::error_code bad_ec = make_error_code(std::errc::invalid_argument);
+   std::error_code ec;
+   bool result;
+ 
+   VERIFY( ! ::mkfifo(p1.c_str(), S_IWUSR | S_IRUSR) );
+   __gnu_test::scoped_file f1(p1, __gnu_test::scoped_file::adopt_file);
+ 
+   // Special file is equivalent to itself.
+   VERIFY( equivalent(p1, p1) );
+   VERIFY( equivalent(p1, p1, ec) );
+   VERIFY( ! ec );
+ 
+   VERIFY( ! ::mkfifo(p2.c_str(), S_IWUSR | S_IRUSR) );
+   __gnu_test::scoped_file f2(p2, __gnu_test::scoped_file::adopt_file);
+ 
+   ec = bad_ec;
+   // Distinct special files are not equivalent.
+   VERIFY( ! equivalent(p1, p2, ec) );
+   VERIFY( ! ec );
+ 
+   // Non-existent paths are always an error.
+   VERIFY( ! equivalent(p1, p3, ec) );
+   VERIFY( ec == std::errc::no_such_file_or_directory );
+   ec = bad_ec;
+   VERIFY( ! equivalent(p3, p2, ec) );
+   VERIFY( ec == std::errc::no_such_file_or_directory );
+ 
+   // Special file is not equivalent to regular file.
+   __gnu_test::scoped_file f3(p3);
+   ec = bad_ec;
+   VERIFY( ! equivalent(p1, p3, ec) );
+   VERIFY( ! ec );
+ #endif
+ }
+ 
+ int
+ main()
+ {
+   test_pr118158();
+ }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/29_atomics/headers/stdatomic.h/115807.cc gcc-13.4.0/libstdc++-v3/testsuite/29_atomics/headers/stdatomic.h/115807.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/29_atomics/headers/stdatomic.h/115807.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/29_atomics/headers/stdatomic.h/115807.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,15 ----
+ // { dg-options "-std=gnu++23" }
+ // { dg-do compile { target c++23 } }
+ #include <stdatomic.h>
+ namespace other {
+   namespace std {
+     int atomic = 0;
+   }
+   _Atomic(long) a{};
+ }
+ 
+ #include <type_traits>
+ 
+ namespace non::std {
+   static_assert( ::std::is_same_v<_Atomic(int), ::std::atomic<int>> );
+ }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/30_threads/future/members/118093.cc gcc-13.4.0/libstdc++-v3/testsuite/30_threads/future/members/118093.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/30_threads/future/members/118093.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/30_threads/future/members/118093.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,26 ----
+ // { dg-do run { target c++11 } }
+ 
+ #include <chrono>
+ #include <future>
+ 
+ void
+ test_sys()
+ {
+   std::promise<void> p;
+   std::chrono::system_clock::time_point tp(std::chrono::milliseconds{-10});
+   (void) p.get_future().wait_until(tp);
+ }
+ 
+ void
+ test_steady()
+ {
+   std::promise<void> p;
+   std::chrono::steady_clock::time_point tp(std::chrono::milliseconds{-10});
+   (void) p.get_future().wait_until(tp);
+ }
+ 
+ int main()
+ {
+   test_sys();
+   test_steady();
+ }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/experimental/scopeguard/114152.cc gcc-13.4.0/libstdc++-v3/testsuite/experimental/scopeguard/114152.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/experimental/scopeguard/114152.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/experimental/scopeguard/114152.cc	Thu Jun  5 16:03:03 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-options "-std=gnu++20" }
  // { dg-do compile { target c++20 } }
  
  // PR libstdc++/114152
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/experimental/simd/pr114958.cc gcc-13.4.0/libstdc++-v3/testsuite/experimental/simd/pr114958.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/experimental/simd/pr114958.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/experimental/simd/pr114958.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,20 ----
+ // { dg-options "-std=c++17" }
+ // { dg-do compile { target x86_64-*-* } }
+ // { dg-require-effective-target c++17 }
+ // { dg-additional-options "-march=x86-64-v3" { target x86_64-*-* } }
+ // { dg-require-cmath "" }
+ // { dg-final { scan-assembler-times "vperm(?:q|pd)\\s+\\\$144" 1 } }
+ 
+ #include <experimental/simd>
+ 
+ namespace stdx = std::experimental;
+ 
+ using T = std::uint64_t;
+ using V = stdx::simd<T, stdx::simd_abi::_VecBuiltin<32>>;
+ using V1 = stdx::simd<T, stdx::simd_abi::scalar>;
+ 
+ V perm(V data)
+ {
+   auto [carry, _] = stdx::split<3, 1>(data);
+   return concat(V1(), carry);
+ }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/experimental/simd/pr115454_find_last_set.cc gcc-13.4.0/libstdc++-v3/testsuite/experimental/simd/pr115454_find_last_set.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/experimental/simd/pr115454_find_last_set.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/experimental/simd/pr115454_find_last_set.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,50 ----
+ // { dg-options "-std=gnu++17" }
+ // { dg-require-effective-target c++17 }
+ // { dg-additional-options "-march=x86-64-v4" { target avx512f_runtime } }
+ // { dg-require-cmath "" }
+ 
+ #include <experimental/simd>
+ 
+ namespace stdx = std::experimental;
+ 
+ using T = std::uint64_t;
+ 
+ template <typename U, int N>
+ using V = stdx::simd<U, stdx::simd_abi::deduce_t<U, N>>;
+ 
+ [[gnu::noinline, gnu::noipa]]
+ int reduce(V<T, 4> x)
+ {
+   static_assert(stdx::find_last_set(V<T, 4>([](unsigned i) { return i; }) != V<T, 4>(0)) == 3);
+   return stdx::find_last_set(x != -1);
+ }
+ 
+ [[gnu::noinline, gnu::noipa]]
+ int reduce2()
+ {
+   using M8 = typename V<short, 8>::mask_type;
+   using M4 = typename V<int, 4>::mask_type;
+   if constexpr (sizeof(M8) == sizeof(M4)
+ 		  && !std::is_same_v<M4, stdx::fixed_size_simd_mask<int, 4>>)
+     // fixed_size invariant: padding bits of masks are zero, the memcpy would violate that
+     {
+       M4 k;
+       __builtin_memcpy(&__data(k), &__data(M8(true)), sizeof(M4));
+       return stdx::find_last_set(k);
+     }
+   return 3;
+ }
+ 
+ 
+ int main()
+ {
+   const V<T, 4> x {};
+ 
+   const int r = reduce(x);
+   if (r != 3)
+       __builtin_abort();
+ 
+   const int r2 = reduce2();
+   if (r2 != 3)
+       __builtin_abort();
+ }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/ext/104395.cc gcc-13.4.0/libstdc++-v3/testsuite/ext/104395.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/ext/104395.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/ext/104395.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,8 ----
+ // { dg-options "-std=gnu++98 -faligned-new" }
+ // { dg-do compile }
+ #include <ext/memory>
+ #include <ext/bitmap_allocator.h>
+ #include <ext/mt_allocator.h>
+ #include <ext/malloc_allocator.h>
+ #include <ext/new_allocator.h>
+ #include <ext/pool_allocator.h>
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/std/format/arguments/112607.cc gcc-13.4.0/libstdc++-v3/testsuite/std/format/arguments/112607.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/std/format/arguments/112607.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/std/format/arguments/112607.cc	Thu Jun  5 16:03:03 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-options "-std=gnu++20" }
  // { dg-do compile { target c++20 } }
  
  // PR libstdc++/112607
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/std/format/arguments/args.cc gcc-13.4.0/libstdc++-v3/testsuite/std/format/arguments/args.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/std/format/arguments/args.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/std/format/arguments/args.cc	Thu Jun  5 16:03:03 2025
***************
*** 4,9 ****
--- 4,13 ----
  #include <format>
  #include <testsuite_hooks.h>
  
+ // LWG 4106. basic_format_args should not be default-constructible
+ static_assert( ! std::is_default_constructible_v<std::format_args> );
+ static_assert( ! std::is_default_constructible_v<std::wformat_args> );
+ 
  template<typename Ctx, typename T>
  bool equals(std::basic_format_arg<Ctx> fmt_arg, T expected) {
    return std::visit_format_arg([=](auto arg_val) {
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/std/format/arguments/args_neg.cc gcc-13.4.0/libstdc++-v3/testsuite/std/format/arguments/args_neg.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/std/format/arguments/args_neg.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/std/format/arguments/args_neg.cc	Thu Jun  5 16:03:03 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-options "-std=gnu++20" }
  // { dg-do compile { target c++20 } }
  
  // P2905R2 Runtime format strings
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/std/format/context.cc gcc-13.4.0/libstdc++-v3/testsuite/std/format/context.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/std/format/context.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/std/format/context.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,37 ----
+ // { dg-options "-std=gnu++20" }
+ // { dg-do compile { target c++20 } }
+ 
+ #include <format>
+ 
+ template<typename Context>
+ concept format_context_reqs = std::is_destructible_v<Context>
+   && (!std::is_default_constructible_v<Context>)
+   && (!std::is_copy_constructible_v<Context>)
+   && (!std::is_move_constructible_v<Context>)
+   && (!std::is_copy_assignable_v<Context>)
+   && (!std::is_move_assignable_v<Context>)
+   && requires (Context& ctx, const Context& cctx) {
+     typename Context::iterator;
+     typename Context::char_type;
+     requires std::same_as<typename Context::template formatter_type<int>,
+ 			  std::formatter<int, typename Context::char_type>>;
+     { ctx.locale() } -> std::same_as<std::locale>;
+     { ctx.out() } -> std::same_as<typename Context::iterator>;
+     { ctx.advance_to(ctx.out()) } -> std::same_as<void>;
+     { cctx.arg(1) } -> std::same_as<std::basic_format_arg<Context>>;
+   };
+ 
+ template<typename Out, typename charT>
+ constexpr bool
+ check(std::basic_format_context<Out, charT>*)
+ {
+   using context = std::basic_format_context<Out, charT>;
+   static_assert( format_context_reqs<context> );
+   static_assert( std::is_same_v<typename context::iterator, Out> );
+   static_assert( std::is_same_v<typename context::char_type, charT> );
+   return true;
+ }
+ 
+ static_assert( check( (std::format_context*)nullptr) );
+ static_assert( check( (std::wformat_context*)nullptr) );
+ static_assert( check( (std::basic_format_context<char*, char>*)nullptr) );
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/std/format/formatter/112832.cc gcc-13.4.0/libstdc++-v3/testsuite/std/format/formatter/112832.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/std/format/formatter/112832.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/std/format/formatter/112832.cc	Thu Jun  5 16:03:03 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-options "-std=gnu++20" }
  // { dg-do compile { target c++20 } }
  
  #include <format>
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/std/format/formatter/basic.cc gcc-13.4.0/libstdc++-v3/testsuite/std/format/formatter/basic.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/std/format/formatter/basic.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/std/format/formatter/basic.cc	Thu Jun  5 16:03:03 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-options "-std=gnu++20" }
  // { dg-do compile { target c++20 } }
  
  // BasicFormatter requirements do not require a const parameter.
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/std/format/formatter/requirements.cc gcc-13.4.0/libstdc++-v3/testsuite/std/format/formatter/requirements.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/std/format/formatter/requirements.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/std/format/formatter/requirements.cc	Thu Jun  5 16:03:03 2025
*************** test_specializations() // [format.format
*** 27,32 ****
--- 27,42 ----
    static_assert( std::is_copy_assignable_v<Fi> );
    static_assert( std::is_move_assignable_v<Fi> );
  
+ #ifdef _GLIBCXX_USE_CHAR8_T
+   // std::string s0 = std::format("{}", u8'a'); // error: disabled formatter
+   using Fc8 = std::format_context::formatter_type<char8_t>;
+   static_assert( ! std::is_default_constructible_v<Fc8> );
+   static_assert( ! std::is_copy_constructible_v<Fc8> );
+   static_assert( ! std::is_move_constructible_v<Fc8> );
+   static_assert( ! std::is_copy_assignable_v<Fc8> );
+   static_assert( ! std::is_move_assignable_v<Fc8> );
+ #endif
+ 
    // std::string s1 = std::format("{}", L"foo"); // error: disabled formatter
    using Fw = std::format_context::formatter_type<wchar_t>;
    static_assert( ! std::is_default_constructible_v<Fw> );
*************** test_specializations() // [format.format
*** 35,40 ****
--- 45,57 ----
    static_assert( ! std::is_copy_assignable_v<Fw> );
    static_assert( ! std::is_move_assignable_v<Fw> );
  
+   using Fic = std::format_context::formatter_type<const int>; // disabled
+   static_assert( ! std::is_default_constructible_v<Fic> );
+   static_assert( ! std::is_copy_constructible_v<Fic> );
+   static_assert( ! std::is_move_constructible_v<Fic> );
+   static_assert( ! std::is_copy_assignable_v<Fic> );
+   static_assert( ! std::is_move_assignable_v<Fic> );
+ 
    std::string s2 = std::format("{}", red);  // OK, user-provided formatter
    VERIFY( s2 == "red" );
    using Fc = std::format_context::formatter_type<color>;
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/std/format/functions/format.cc gcc-13.4.0/libstdc++-v3/testsuite/std/format/functions/format.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/std/format/functions/format.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/std/format/functions/format.cc	Thu Jun  5 16:03:03 2025
*************** test_wchar()
*** 349,354 ****
--- 349,366 ----
    // P2909R4 Fix formatting of code units as integers (Dude, where’s my char?)
    s = std::format(L"{:d} {:d}", wchar_t(-1), char(-1));
    VERIFY( s.find('-') == std::wstring::npos );
+ 
+   auto ws = std::format(L"{:L}", 0.5);
+   VERIFY( ws == L"0.5" );
+   // The default C locale.
+   std::locale cloc = std::locale::classic();
+   // PR libstdc++/119671 use-after-free formatting floating-point to wstring
+   ws = std::format(cloc, L"{:L}", 0.5);
+   VERIFY( ws == L"0.5" );
+   // A locale with no name, but with the same facets as the C locale.
+   std::locale locx(cloc, &std::use_facet<std::ctype<char>>(cloc));
+   ws = std::format(locx, L"{:L}", 0.5);
+   VERIFY( ws == L"0.5" );
  }
  
  void
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/std/ranges/adaptors/as_const/1.cc gcc-13.4.0/libstdc++-v3/testsuite/std/ranges/adaptors/as_const/1.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/std/ranges/adaptors/as_const/1.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/std/ranges/adaptors/as_const/1.cc	Thu Jun  5 16:03:03 2025
***************
*** 9,15 ****
  #include <testsuite_hooks.h>
  #include <testsuite_iterators.h>
  
! #if __cpp_lib_ranges_as_const != 202207L
  # error "Feature-test macro __cpp_lib_ranges_as_const has wrong value in <ranges>"
  #endif
  
--- 9,15 ----
  #include <testsuite_hooks.h>
  #include <testsuite_iterators.h>
  
! #if __cpp_lib_ranges_as_const != 202311L
  # error "Feature-test macro __cpp_lib_ranges_as_const has wrong value in <ranges>"
  #endif
  
*************** test03()
*** 62,67 ****
--- 62,83 ----
    std::vector<int> v;
    std::same_as<ranges::ref_view<const std::vector<int>>>
      auto r = views::as_const(v);
+ 
+   // PR libstdc++/119135
+   std::same_as<ranges::ref_view<const std::vector<int>>>
+     auto r2 = views::as_const(views::all(v));
+ }
+ 
+ void
+ test04()
+ {
+   // PR libstdc++/115046 - meta-recursion with join_view and as_const_view
+   int x[3] = {1,2,3};
+   auto v = x
+     | views::chunk(3)
+     | views::transform(views::as_const)
+     | views::join;
+   VERIFY( ranges::equal(v, x) );
  }
  
  int
*************** main()
*** 70,73 ****
--- 86,90 ----
    static_assert(test01());
    static_assert(test02());
    test03();
+   test04();
  }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/std/ranges/adaptors/drop.cc gcc-13.4.0/libstdc++-v3/testsuite/std/ranges/adaptors/drop.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/std/ranges/adaptors/drop.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/std/ranges/adaptors/drop.cc	Thu Jun  5 16:03:03 2025
*************** test09()
*** 275,280 ****
--- 275,291 ----
    static_assert(!requires { views::all | drop; });
  }
  
+ constexpr bool
+ test10()
+ {
+   // PR libstdc++/112641 - drop_view::begin const may have O(n) complexity
+   const auto s = ranges::subrange(views::iota(size_t(1)), size_t(-1));
+   const auto r = ranges::drop_view(s, s.size() - 1);
+   const auto b = r.begin(); // time out
+   VERIFY( *b == size_t(-1) );
+   return true;
+ }
+ 
  int
  main()
  {
*************** main()
*** 287,290 ****
--- 298,302 ----
    test07();
    test08();
    test09();
+   static_assert(test10());
  }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/std/ranges/adaptors/transform.cc gcc-13.4.0/libstdc++-v3/testsuite/std/ranges/adaptors/transform.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/std/ranges/adaptors/transform.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/std/ranges/adaptors/transform.cc	Thu Jun  5 16:03:03 2025
*************** test08()
*** 175,180 ****
--- 175,198 ----
    static_assert(!requires { views::all | transform; });
  }
  
+ void
+ test10()
+ {
+   struct F {
+     short operator()(int) { return 0; }
+     const int& operator()(const int& i) const { return i; }
+   };
+ 
+   int x[] {2, 4};
+   const auto xform = x | views::transform(F{});
+   using const_iterator = decltype(xform.begin());
+   // LWG 3564. transform_view::iterator<true>::value_type and iterator_category
+   // should use const F&
+   static_assert(std::same_as<std::iter_value_t<const_iterator>, int>);
+   using cat = std::iterator_traits<const_iterator>::iterator_category;
+   static_assert(std::same_as<cat, std::random_access_iterator_tag>);
+ }
+ 
  int
  main()
  {
*************** main()
*** 186,189 ****
--- 204,208 ----
    test06();
    test07();
    test08();
+   test10();
  }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/std/ranges/cartesian_product/1.cc gcc-13.4.0/libstdc++-v3/testsuite/std/ranges/cartesian_product/1.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/std/ranges/cartesian_product/1.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/std/ranges/cartesian_product/1.cc	Thu Jun  5 16:03:03 2025
*************** test01()
*** 23,31 ****
    int w[] = {9};
  
    auto v0 = views::cartesian_product();
!   VERIFY( ranges::end(v0) - ranges::begin(v0) == 0 );
!   VERIFY( ranges::size(v0) == 0 );
!   VERIFY( ranges::empty(v0) );
  
    auto v1 = views::cartesian_product(x);
    VERIFY( ranges::end(v1) - ranges::begin(v1) == 3 );
--- 23,31 ----
    int w[] = {9};
  
    auto v0 = views::cartesian_product();
!   VERIFY( ranges::end(v0) - ranges::begin(v0) == 1 );
!   VERIFY( ranges::size(v0) == 1 );
!   VERIFY( !ranges::empty(v0) );
  
    auto v1 = views::cartesian_product(x);
    VERIFY( ranges::end(v1) - ranges::begin(v1) == 3 );
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/std/ranges/range.cc gcc-13.4.0/libstdc++-v3/testsuite/std/ranges/range.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/std/ranges/range.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/std/ranges/range.cc	Thu Jun  5 16:03:03 2025
*************** static_assert( same_as<std::ranges::rang
*** 84,86 ****
--- 84,92 ----
  		       char&&> );
  static_assert( same_as<std::ranges::range_rvalue_reference_t<O>,
  		      WritableObject<char>> );
+ 
+ // LWG 3860. range_common_reference_t is missing
+ static_assert( same_as<std::ranges::range_common_reference_t<C>,
+ 		       char&> );
+ static_assert( same_as<std::ranges::range_common_reference_t<I>,
+ 		       char&> );
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/std/ranges/subrange/111948.cc gcc-13.4.0/libstdc++-v3/testsuite/std/ranges/subrange/111948.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/std/ranges/subrange/111948.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/std/ranges/subrange/111948.cc	Thu Jun  5 16:03:03 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-options "-std=gnu++20" }
  // { dg-do compile { target c++20 } }
  
  #include <ranges>
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/std/ranges/subrange/lwg3589.cc gcc-13.4.0/libstdc++-v3/testsuite/std/ranges/subrange/lwg3589.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/std/ranges/subrange/lwg3589.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/std/ranges/subrange/lwg3589.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,31 ----
+ // { dg-options "-std=gnu++20" }
+ // { dg-do compile { target c++20 } }
+ 
+ // LWG 3589. The const lvalue reference overload of get for subrange does not
+ // constrain I to be copyable when N == 0
+ 
+ #include <ranges>
+ #include <testsuite_iterators.h>
+ 
+ void
+ test_lwg3589()
+ {
+   int a[2]{};
+   __gnu_test::test_range<int, __gnu_test::input_iterator_wrapper_nocopy> r(a);
+ 
+   // Use a generic lambda so we have a dependent context.
+   auto test = [](auto& x)
+     {
+       // This was wrong before the LWG 3589 change:
+       if constexpr (requires { std::ranges::get<0>(x); })
+ 	(void) std::ranges::get<0>(x);
+ 
+       // These always worked unconditionally:
+       (void) std::ranges::get<1>(x);
+       (void) std::ranges::get<0>(std::move(x));
+       (void) std::ranges::get<1>(std::move(x));
+     };
+ 
+   std::ranges::subrange sr(r.begin(), r.end());
+   test(sr);
+ }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/std/ranges/version_c++23.cc gcc-13.4.0/libstdc++-v3/testsuite/std/ranges/version_c++23.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/std/ranges/version_c++23.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/std/ranges/version_c++23.cc	Thu Jun  5 16:03:03 2025
***************
*** 45,51 ****
  # error "Feature-test macro __cpp_lib_ranges_as_rvalue has wrong value in <version>"
  #endif
  
! #if __cpp_lib_ranges_as_const != 202207L
  # error "Feature-test macro __cpp_lib_ranges_as_const has wrong value in <version>"
  #endif
  
--- 45,51 ----
  # error "Feature-test macro __cpp_lib_ranges_as_rvalue has wrong value in <version>"
  #endif
  
! #if __cpp_lib_ranges_as_const != 202311L
  # error "Feature-test macro __cpp_lib_ranges_as_const has wrong value in <version>"
  #endif
  
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/std/time/format/format.cc gcc-13.4.0/libstdc++-v3/testsuite/std/time/format/format.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/std/time/format/format.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/std/time/format/format.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,128 ----
+ // { dg-options "-std=gnu++20" }
+ // { dg-do run { target c++20 } }
+ // { dg-timeout-factor 2 }
+ 
+ #include <chrono>
+ #include <testsuite_hooks.h>
+ 
+ void
+ test_format_strings()
+ {
+   using namespace std::chrono_literals;
+ 
+   // valid format strings
+   VERIFY( std::format("{}", 1s) == "1s" );
+   VERIFY( std::format("{:}", 1s) == "1s" );
+   VERIFY( std::format("{:L}", 1s) == "1s" );
+   VERIFY( std::format("{:%%%n%t}", 1s) == "%\n\t" );
+   VERIFY( std::format("{:L%%%n%t}", 1s) == "%\n\t" );
+   VERIFY( std::format("{:4%%}", 1s) == "%   " );
+   VERIFY( std::format("{:4L%%}", 1s) == "%   " );
+   VERIFY( std::format("{: >4}", 1s) == "  1s" );
+   VERIFY( std::format("{: <4}", 1s) == "1s  " );
+   VERIFY( std::format("{: <4L}", 1s) == "1s  " );
+   VERIFY( std::format("{: >4%%}", 1s) == "   %" );
+   VERIFY( std::format("{: >4L%%}", 1s) == "   %" );
+   VERIFY( std::format("{: ^4%%}", 1s) == " %  " );
+ }
+ 
+ template<typename... Args>
+ bool
+ is_format_string_for(const char* str, Args&&... args)
+ {
+   try {
+     (void) std::vformat(str, std::make_format_args(args...));
+     return true;
+   } catch (const std::format_error&) {
+     return false;
+   }
+ }
+ 
+ void
+ test_bad_format_strings()
+ {
+   std::chrono::sys_seconds t{};
+ 
+   // literal '%' must be formatted as "%%"
+   VERIFY( not is_format_string_for("{:%}", t) );
+ 
+   // chrono-specs must start with '%'
+   VERIFY( not is_format_string_for("{:a%}", t) );
+   VERIFY( not is_format_string_for("{:La%}", t) );
+ 
+   // '{' not valid in chrono-specs
+   VERIFY( not is_format_string_for("{:%%{{%%}", t) );
+ 
+   // padding with leading zero not valid for chrono types
+   VERIFY( not is_format_string_for("{:04%T}", t) );
+ 
+   // precision only valid for chrono::duration types with floating-point rep.
+   VERIFY( not is_format_string_for("{:.4}", t) );
+ 
+   // unfinished format string
+   VERIFY( not is_format_string_for("{:", t) );
+ 
+   // dangling modifiers
+   VERIFY( not is_format_string_for("{:%E}", t) );
+   VERIFY( not is_format_string_for("{:%O}", t) );
+ 
+   // modifier not valid for conversion specifier
+   VERIFY( not is_format_string_for("{:%Ea}", t) );
+   VERIFY( not is_format_string_for("{:%Oa}", t) );
+ 
+   // more than one modifier (PR libstdc++/110708)
+   VERIFY( not is_format_string_for("{:%EEc}", t) );
+   VERIFY( not is_format_string_for("{:%EEEc}", t) );
+   VERIFY( not is_format_string_for("{:%OOd}", t) );
+   VERIFY( not is_format_string_for("{:%OOOd}", t) );
+   VERIFY( not is_format_string_for("{:%EEy}", t) );
+   VERIFY( not is_format_string_for("{:%OOy}", t) );
+   VERIFY( not is_format_string_for("{:%OEy}", t) );
+   VERIFY( not is_format_string_for("{:%EOy}", t) );
+ }
+ 
+ template<typename I>
+ struct move_only_iterator
+ {
+   using iterator = I;
+   using value_type = iterator::value_type;
+   using difference_type = iterator::difference_type;
+   using iterator_category = std::output_iterator_tag;
+ 
+   move_only_iterator(iterator b) : base_(b) { }
+   move_only_iterator(move_only_iterator&&) = default;
+   move_only_iterator& operator=(move_only_iterator&&) = default;
+ 
+   move_only_iterator& operator++() { ++base_; return *this; }
+   move_only_iterator operator++(int) { auto tmp = *this; ++base_; return tmp; }
+ 
+   decltype(auto) operator*() { return *base_; }
+ 
+ private:
+   iterator base_;
+ };
+ 
+ void
+ test_move_only_iterator()
+ {
+   using namespace std::chrono;
+   utc_seconds ut(1671543754s);
+   sys_seconds st(1671543727s);
+ 
+   std::string str;
+   move_only_iterator mo(std::back_inserter(str));
+   std::format_to(std::move(mo), "{:%F} {:%T} {:%Q}", ut, st, 1s);
+   VERIFY( str == "2022-12-20 13:42:07 1" );
+ 
+   std::vector<wchar_t> vec;
+   move_only_iterator wmo(std::back_inserter(vec));
+   std::format_to(std::move(wmo), L"{:%F} {:%T} {:%Q}", ut, st, 2s);
+   VERIFY( std::wstring_view(vec.data(), vec.size()) == L"2022-12-20 13:42:07 2" );
+ }
+ 
+ int main()
+ {
+   test_format_strings();
+   test_bad_format_strings();
+   test_move_only_iterator();
+ }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/std/time/format/pr117085.cc gcc-13.4.0/libstdc++-v3/testsuite/std/time/format/pr117085.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/std/time/format/pr117085.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/std/time/format/pr117085.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,20 ----
+ // { dg-options "-std=gnu++20" }
+ // { dg-do run { target c++20 } }
+ // { dg-require-namedlocale "fr_FR.ISO8859-1" }
+ 
+ #include <chrono>
+ #include <locale>
+ #include <testsuite_hooks.h>
+ 
+ void
+ test_c()
+ {
+   std::locale::global(std::locale(ISO_8859(1,fr_FR)));
+   auto s = std::format("{:L%c}", std::chrono::sys_seconds());
+   VERIFY( ! s.starts_with("Thu") );
+ }
+ 
+ int main()
+ {
+   test_c();
+ }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/std/time/format.cc gcc-13.4.0/libstdc++-v3/testsuite/std/time/format.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/std/time/format.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/std/time/format.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,128 ****
- // { dg-options "-std=gnu++20" }
- // { dg-do run { target c++20 } }
- // { dg-timeout-factor 2 }
- 
- #include <chrono>
- #include <testsuite_hooks.h>
- 
- void
- test_format_strings()
- {
-   using namespace std::chrono_literals;
- 
-   // valid format strings
-   VERIFY( std::format("{}", 1s) == "1s" );
-   VERIFY( std::format("{:}", 1s) == "1s" );
-   VERIFY( std::format("{:L}", 1s) == "1s" );
-   VERIFY( std::format("{:%%%n%t}", 1s) == "%\n\t" );
-   VERIFY( std::format("{:L%%%n%t}", 1s) == "%\n\t" );
-   VERIFY( std::format("{:4%%}", 1s) == "%   " );
-   VERIFY( std::format("{:4L%%}", 1s) == "%   " );
-   VERIFY( std::format("{: >4}", 1s) == "  1s" );
-   VERIFY( std::format("{: <4}", 1s) == "1s  " );
-   VERIFY( std::format("{: <4L}", 1s) == "1s  " );
-   VERIFY( std::format("{: >4%%}", 1s) == "   %" );
-   VERIFY( std::format("{: >4L%%}", 1s) == "   %" );
-   VERIFY( std::format("{: ^4%%}", 1s) == " %  " );
- }
- 
- template<typename... Args>
- bool
- is_format_string_for(const char* str, Args&&... args)
- {
-   try {
-     (void) std::vformat(str, std::make_format_args(args...));
-     return true;
-   } catch (const std::format_error&) {
-     return false;
-   }
- }
- 
- void
- test_bad_format_strings()
- {
-   std::chrono::sys_seconds t{};
- 
-   // literal '%' must be formatted as "%%"
-   VERIFY( not is_format_string_for("{:%}", t) );
- 
-   // chrono-specs must start with '%'
-   VERIFY( not is_format_string_for("{:a%}", t) );
-   VERIFY( not is_format_string_for("{:La%}", t) );
- 
-   // '{' not valid in chrono-specs
-   VERIFY( not is_format_string_for("{:%%{{%%}", t) );
- 
-   // padding with leading zero not valid for chrono types
-   VERIFY( not is_format_string_for("{:04%T}", t) );
- 
-   // precision only valid for chrono::duration types with floating-point rep.
-   VERIFY( not is_format_string_for("{:.4}", t) );
- 
-   // unfinished format string
-   VERIFY( not is_format_string_for("{:", t) );
- 
-   // dangling modifiers
-   VERIFY( not is_format_string_for("{:%E}", t) );
-   VERIFY( not is_format_string_for("{:%O}", t) );
- 
-   // modifier not valid for conversion specifier
-   VERIFY( not is_format_string_for("{:%Ea}", t) );
-   VERIFY( not is_format_string_for("{:%Oa}", t) );
- 
-   // more than one modifier (PR libstdc++/110708)
-   VERIFY( not is_format_string_for("{:%EEc}", t) );
-   VERIFY( not is_format_string_for("{:%EEEc}", t) );
-   VERIFY( not is_format_string_for("{:%OOd}", t) );
-   VERIFY( not is_format_string_for("{:%OOOd}", t) );
-   VERIFY( not is_format_string_for("{:%EEy}", t) );
-   VERIFY( not is_format_string_for("{:%OOy}", t) );
-   VERIFY( not is_format_string_for("{:%OEy}", t) );
-   VERIFY( not is_format_string_for("{:%EOy}", t) );
- }
- 
- template<typename I>
- struct move_only_iterator
- {
-   using iterator = I;
-   using value_type = iterator::value_type;
-   using difference_type = iterator::difference_type;
-   using iterator_category = std::output_iterator_tag;
- 
-   move_only_iterator(iterator b) : base_(b) { }
-   move_only_iterator(move_only_iterator&&) = default;
-   move_only_iterator& operator=(move_only_iterator&&) = default;
- 
-   move_only_iterator& operator++() { ++base_; return *this; }
-   move_only_iterator operator++(int) { auto tmp = *this; ++base_; return tmp; }
- 
-   decltype(auto) operator*() { return *base_; }
- 
- private:
-   iterator base_;
- };
- 
- void
- test_move_only_iterator()
- {
-   using namespace std::chrono;
-   utc_seconds ut(1671543754s);
-   sys_seconds st(1671543727s);
- 
-   std::string str;
-   move_only_iterator mo(std::back_inserter(str));
-   std::format_to(std::move(mo), "{:%F} {:%T} {:%Q}", ut, st, 1s);
-   VERIFY( str == "2022-12-20 13:42:07 1" );
- 
-   std::vector<wchar_t> vec;
-   move_only_iterator wmo(std::back_inserter(vec));
-   std::format_to(std::move(wmo), L"{:%F} {:%T} {:%Q}", ut, st, 2s);
-   VERIFY( std::wstring_view(vec.data(), vec.size()) == L"2022-12-20 13:42:07 2" );
- }
- 
- int main()
- {
-   test_format_strings();
-   test_bad_format_strings();
-   test_move_only_iterator();
- }
--- 0 ----
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/std/time/month/2.cc gcc-13.4.0/libstdc++-v3/testsuite/std/time/month/2.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/std/time/month/2.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/std/time/month/2.cc	Thu Jun  5 16:03:03 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-options "-std=gnu++20" }
  // { dg-do run { target c++20 } }
  
  // Class month [time.cal.month]
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/std/time/time_zone/sys_info_abbrev.cc gcc-13.4.0/libstdc++-v3/testsuite/std/time/time_zone/sys_info_abbrev.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/std/time/time_zone/sys_info_abbrev.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/std/time/time_zone/sys_info_abbrev.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,107 ----
+ // { dg-options "-std=gnu++20" }
+ // { dg-do run { target c++20 } }
+ // { dg-require-effective-target tzdb }
+ // { dg-require-effective-target cxx11_abi }
+ // { dg-xfail-run-if "no weak override on AIX" { powerpc-ibm-aix* } }
+ 
+ #include <chrono>
+ #include <fstream>
+ #include <testsuite_hooks.h>
+ 
+ static bool override_used = false;
+ 
+ namespace __gnu_cxx
+ {
+   const char* zoneinfo_dir_override() {
+     override_used = true;
+     return "./";
+   }
+ }
+ 
+ using namespace std::chrono;
+ 
+ void
+ test_format()
+ {
+   std::ofstream("tzdata.zi") << R"(# version test_1
+ Zone Africa/Bissau -1:2:20 - LMT 1912 Ja 1 1u
+                    -1      - %z  1975
+                    0       - GMT
+ Zon Some/Zone 1:2:3   - %z 1900
+               1:23:45 - %z 1950
+ Zo Another/Zone 1:2:3 -     AZ0     1901
+                 1     Roolz A%sZ    2000
+                 1     Roolz SAZ/DAZ 2005
+                 1     Roolz %z
+ Rule Roolz 1950 max - April 1 2 1 D
+ Rul  Roolz 1950 max - Oct   1 1 0 S
+ Z Strange/Zone 1       - X%sX    1980
+                1       - FOO/BAR 1990
+                2:00    - %zzz    1995
+                0:9     - %zzz    1996
+                0:8:7   - %zzz    1997
+                0:6:5.5 - %zzz    1998
+ )";
+ 
+   const auto& db = reload_tzdb();
+   VERIFY( override_used ); // If this fails then XFAIL for the target.
+   VERIFY( db.version == "test_1" );
+ 
+   // Test formatting %z as
+   auto tz = locate_zone("Africa/Bissau");
+   auto inf = tz->get_info(sys_days(1974y/1/1));
+   VERIFY( inf.abbrev == "-01" );
+ 
+   tz = locate_zone("Some/Zone");
+   inf = tz->get_info(sys_days(1899y/1/1));
+   VERIFY( inf.abbrev == "+010203" );
+   inf = tz->get_info(sys_days(1955y/1/1));
+   VERIFY( inf.abbrev == "+012345" );
+ 
+   tz = locate_zone("Another/Zone");
+   // Test formatting %s as the LETTER/S field from the active Rule.
+   inf = tz->get_info(sys_days(1910y/January/1));
+   VERIFY( inf.abbrev == "ASZ" );
+   inf = tz->get_info(sys_days(1950y/January/1));
+   VERIFY( inf.abbrev == "ASZ" );
+   inf = tz->get_info(sys_days(1950y/June/1));
+   VERIFY( inf.abbrev == "ADZ" );
+   inf = tz->get_info(sys_days(1999y/January/1));
+   VERIFY( inf.abbrev == "ASZ" );
+   inf = tz->get_info(sys_days(1999y/July/1));
+   VERIFY( inf.abbrev == "ADZ" );
+   // Test formatting STD/DST according to the active Rule.
+   inf = tz->get_info(sys_days(2000y/January/2));
+   VERIFY( inf.abbrev == "SAZ" );
+   inf = tz->get_info(sys_days(2001y/January/1));
+   VERIFY( inf.abbrev == "SAZ" );
+   inf = tz->get_info(sys_days(2001y/July/1));
+   VERIFY( inf.abbrev == "DAZ" );
+   // Test formatting %z as the offset determined by the active Rule.
+   inf = tz->get_info(sys_days(2005y/January/2));
+   VERIFY( inf.abbrev == "+01" );
+   inf = tz->get_info(sys_days(2006y/January/1));
+   VERIFY( inf.abbrev == "+01" );
+   inf = tz->get_info(sys_days(2006y/July/1));
+   VERIFY( inf.abbrev == "+02" );
+ 
+   // Test formatting %z, %s and S/D for a Zone with no associated Rules.
+   tz = locate_zone("Strange/Zone");
+   inf = tz->get_info(sys_days(1979y/January/1));
+   VERIFY( inf.abbrev == "XX" ); // No Rule means nothing to use for %s.
+   inf = tz->get_info(sys_days(1981y/July/1));
+   VERIFY( inf.abbrev == "FOO" ); // Always standard time means first string.
+   inf = tz->get_info(sys_days(1994y/July/1));
+   VERIFY( inf.abbrev == "+02zz" );
+   inf = tz->get_info(sys_days(1995y/July/1));
+   VERIFY( inf.abbrev == "+0009zz" );
+   inf = tz->get_info(sys_days(1996y/July/1));
+   VERIFY( inf.abbrev == "+000807zz" );
+   inf = tz->get_info(sys_days(1997y/July/1));
+   VERIFY( inf.abbrev == "+000606zz" );
+ }
+ 
+ int main()
+ {
+   test_format();
+ }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/std/time/tzdb/1.cc gcc-13.4.0/libstdc++-v3/testsuite/std/time/tzdb/1.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/std/time/tzdb/1.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/std/time/tzdb/1.cc	Thu Jun  5 16:03:03 2025
*************** test_locate()
*** 40,53 ****
    const tzdb& db = get_tzdb();
    const time_zone* tz = db.locate_zone("GMT");
    VERIFY( tz != nullptr );
-   VERIFY( tz->name() == "Etc/GMT" );
    VERIFY( tz == std::chrono::locate_zone("GMT") );
    VERIFY( tz == db.locate_zone("Etc/GMT") );
    VERIFY( tz == db.locate_zone("Etc/GMT+0") );
  
    VERIFY( db.locate_zone(db.current_zone()->name()) == db.current_zone() );
  }
  
  int main()
  {
    test_version();
--- 40,69 ----
    const tzdb& db = get_tzdb();
    const time_zone* tz = db.locate_zone("GMT");
    VERIFY( tz != nullptr );
    VERIFY( tz == std::chrono::locate_zone("GMT") );
    VERIFY( tz == db.locate_zone("Etc/GMT") );
    VERIFY( tz == db.locate_zone("Etc/GMT+0") );
  
+   // Since 2022f GMT is now a Zone and Etc/GMT a link instead of vice versa,
+   // but only when using the vanguard format. As of 2024a, the main and
+   // rearguard formats still have Etc/GMT as a Zone and GMT as a link.
+   VERIFY( tz->name() == "GMT" || tz->name() == "Etc/GMT" );
+ 
    VERIFY( db.locate_zone(db.current_zone()->name()) == db.current_zone() );
  }
  
+ void
+ test_all_zones()
+ {
+   const tzdb& db = get_tzdb();
+ 
+   for (const auto& zone : db.zones)
+     VERIFY( locate_zone(zone.name())->name() == zone.name() );
+ 
+   for (const auto& link : db.links)
+     VERIFY( locate_zone(link.name()) == locate_zone(link.target()) );
+ }
+ 
  int main()
  {
    test_version();
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/std/time/tzdb/links.cc gcc-13.4.0/libstdc++-v3/testsuite/std/time/tzdb/links.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/std/time/tzdb/links.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/std/time/tzdb/links.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,216 ----
+ // { dg-options "-std=gnu++20" }
+ // { dg-do run { target c++20 } }
+ // { dg-require-effective-target tzdb }
+ // { dg-require-effective-target cxx11_abi }
+ // { dg-xfail-run-if "no weak override on AIX" { powerpc-ibm-aix* } }
+ 
+ #include <chrono>
+ #include <fstream>
+ #include <testsuite_hooks.h>
+ 
+ static bool override_used = false;
+ 
+ namespace __gnu_cxx
+ {
+   const char* zoneinfo_dir_override() {
+     override_used = true;
+     return "./";
+   }
+ }
+ 
+ using namespace std::chrono;
+ 
+ void
+ test_link_chains()
+ {
+   std::ofstream("tzdata.zi") << R"(# version test_1
+ Link  Greenwich  G_M_T
+ Link  Etc/GMT    Greenwich
+ Zone  Etc/GMT  0  -  GMT
+ Zone  A_Zone   1  -  ZON
+ Link  A_Zone L1
+ Link  L1 L2
+ Link  L2 L3
+ Link  L3 L4
+ Link  L4 L5
+ Link  L5 L6
+ Link  L3 L7
+ )";
+ 
+   const auto& db = reload_tzdb();
+   VERIFY( override_used ); // If this fails then XFAIL for the target.
+   VERIFY( db.version == "test_1" );
+ 
+   // Simple case of a link with a zone as its target.
+   VERIFY( locate_zone("Greenwich")->name() == "Etc/GMT" );
+   // Chains of links, where the target may be another link.
+   VERIFY( locate_zone("G_M_T")->name() == "Etc/GMT" );
+   VERIFY( locate_zone("L1")->name() == "A_Zone" );
+   VERIFY( locate_zone("L2")->name() == "A_Zone" );
+   VERIFY( locate_zone("L3")->name() == "A_Zone" );
+   VERIFY( locate_zone("L4")->name() == "A_Zone" );
+   VERIFY( locate_zone("L5")->name() == "A_Zone" );
+   VERIFY( locate_zone("L6")->name() == "A_Zone" );
+   VERIFY( locate_zone("L7")->name() == "A_Zone" );
+ }
+ 
+ void
+ test_bad_links()
+ {
+   // The zic(8) man page says
+   // > the behavior is unspecified if multiple zone or link lines
+   // > define the same name"
+   // For libstdc++ the expected behaviour is described and tested below.
+   std::ofstream("tzdata.zi") << R"(# version test_2
+ Zone A_Zone   1  -  ZA
+ Zone B_Zone   2  -  ZB
+ Link A_Zone B_Zone
+ Link B_Zone C_Link
+ Link C_Link D_Link
+ Link D_Link E_Link
+ )";
+ 
+   const auto& db2 = reload_tzdb();
+   VERIFY( override_used ); // If this fails then XFAIL for the target.
+   VERIFY( db2.version == "test_2" );
+ 
+   // The standard requires locate_zone(name) to search for a zone first,
+   // so this finds the zone B_Zone, not the link that points to zone A_Zone.
+   VERIFY( locate_zone("B_Zone")->name() == "B_Zone" );
+   // And libstdc++ does the same at every step when following chained links:
+   VERIFY( locate_zone("C_Link")->name() == "B_Zone" );
+   VERIFY( locate_zone("D_Link")->name() == "B_Zone" );
+   VERIFY( locate_zone("E_Link")->name() == "B_Zone" );
+ 
+   // The zic(8) man page says
+   // > the behavior is unspecified if a chain of one or more links
+   // > does not terminate in a Zone name.
+   // For libstdc++ we throw std::runtime_error if locate_zone finds an
+   // unterminated chain, including the case of a chain that includes a cycle.
+   std::ofstream("tzdata.zi") << R"(# version test_3
+ Zone A_Zone   1  -  ZON
+ Link A_Zone GoodLink
+ Link No_Zone BadLink
+ Link LinkSelf LinkSelf
+ Link LinkSelf Link1
+ Link Link1 Link2
+ Link Cycle2_A Cycle2_B
+ Link Cycle2_B Cycle2_A
+ Link Cycle3_A Cycle3_B
+ Link Cycle3_B Cycle3_C
+ Link Cycle3_C Cycle3_A
+ Link Cycle3_C Cycle3_D
+ Link Cycle4_A Cycle4_B
+ Link Cycle4_B Cycle4_C
+ Link Cycle4_C Cycle4_D
+ Link Cycle4_D Cycle4_A
+ )";
+ 
+   const auto& db3 = reload_tzdb();
+   VERIFY( db3.version == "test_3" );
+ 
+   // Lookup for valid links should still work even if other links are bad.
+   VERIFY( locate_zone("GoodLink")->name() == "A_Zone" );
+ 
+ #if __cpp_exceptions
+   try {
+     locate_zone("BadLink");
+     VERIFY( false );
+   } catch (const std::runtime_error& e) {
+     std::string_view what(e.what());
+     VERIFY( what.ends_with("cannot locate zone: BadLink") );
+   }
+ 
+   // LinkSelf forms a link cycle with itself.
+   try {
+     locate_zone("LinkSelf");
+     VERIFY( false );
+   } catch (const std::runtime_error& e) {
+     std::string_view what(e.what());
+     VERIFY( what.ends_with("link cycle: LinkSelf") );
+   }
+ 
+   // Any chain that leads to LinkSelf reaches a cycle.
+   try {
+     locate_zone("Link1");
+     VERIFY( false );
+   } catch (const std::runtime_error& e) {
+     std::string_view what(e.what());
+     VERIFY( what.ends_with("link cycle: Link1") );
+   }
+ 
+   try {
+     locate_zone("Link2");
+     VERIFY( false );
+   } catch (const std::runtime_error& e) {
+     std::string_view what(e.what());
+     VERIFY( what.ends_with("link cycle: Link2") );
+   }
+ 
+   // Cycle2_A and Cycle2_B form a cycle of length two.
+   try {
+     locate_zone("Cycle2_A");
+     VERIFY( false );
+   } catch (const std::runtime_error& e) {
+     std::string_view what(e.what());
+     VERIFY( what.ends_with("link cycle: Cycle2_A") );
+   }
+ 
+   try {
+     locate_zone("Cycle2_B");
+     VERIFY( false );
+   } catch (const std::runtime_error& e) {
+     std::string_view what(e.what());
+     VERIFY( what.ends_with("link cycle: Cycle2_B") );
+   }
+ 
+   // Cycle3_A, Cycle3_B and Cycle3_C form a cycle of length three.
+   try {
+     locate_zone("Cycle3_A");
+     VERIFY( false );
+   } catch (const std::runtime_error& e) {
+     std::string_view what(e.what());
+     VERIFY( what.ends_with("link cycle: Cycle3_A") );
+   }
+ 
+   try {
+     locate_zone("Cycle3_B");
+     VERIFY( false );
+   } catch (const std::runtime_error& e) {
+     std::string_view what(e.what());
+     VERIFY( what.ends_with("link cycle: Cycle3_B") );
+   }
+ 
+   try {
+     locate_zone("Cycle3_C");
+     VERIFY( false );
+   } catch (const std::runtime_error& e) {
+     std::string_view what(e.what());
+     VERIFY( what.ends_with("link cycle: Cycle3_C") );
+   }
+ 
+   // Cycle3_D isn't part of the cycle, but it leads to it.
+   try {
+     locate_zone("Cycle3_D");
+     VERIFY( false );
+   } catch (const std::runtime_error& e) {
+     std::string_view what(e.what());
+     VERIFY( what.ends_with("link cycle: Cycle3_D") );
+   }
+ 
+   // Cycle4_* links form a cycle of length four.
+   try {
+     locate_zone("Cycle4_A");
+     VERIFY( false );
+   } catch (const std::runtime_error& e) {
+     std::string_view what(e.what());
+     VERIFY( what.ends_with("link cycle: Cycle4_A") );
+   }
+ #endif
+ }
+ 
+ int main()
+ {
+   test_link_chains();
+   test_bad_links();
+ }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/std/time/weekday/2.cc gcc-13.4.0/libstdc++-v3/testsuite/std/time/weekday/2.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/std/time/weekday/2.cc	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/std/time/weekday/2.cc	Thu Jun  5 16:03:03 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-options "-std=gnu++20" }
  // { dg-do run { target c++20 } }
  
  // Class weekday [time.cal.wd]
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/tr2/dynamic_bitset/pr115399.cc gcc-13.4.0/libstdc++-v3/testsuite/tr2/dynamic_bitset/pr115399.cc
*** gcc-13.3.0/libstdc++-v3/testsuite/tr2/dynamic_bitset/pr115399.cc	Thu Jan  1 00:00:00 1970
--- gcc-13.4.0/libstdc++-v3/testsuite/tr2/dynamic_bitset/pr115399.cc	Thu Jun  5 16:03:03 2025
***************
*** 0 ****
--- 1,37 ----
+ // { dg-do run { target c++11 } }
+ 
+ // PR libstdc++/115399
+ // std::tr2::dynamic_bitset shift behaves differently from std::bitset
+ 
+ #include <tr2/dynamic_bitset>
+ #include <testsuite_hooks.h>
+ 
+ void
+ test_left_shift()
+ {
+   std::tr2::dynamic_bitset<> b(65);
+   b[0] = 1;
+   auto b2 = b << 64;
+   VERIFY(b2[64] == 1);
+   VERIFY(b2[0] == 0);
+   b <<= 64;
+   VERIFY( b2 == b );
+ }
+ 
+ void
+ test_right_shift()
+ {
+   std::tr2::dynamic_bitset<> b(65);
+   b[64] = 1;
+   auto b2 = b >> 64;
+   VERIFY(b2[64] == 0);
+   VERIFY(b2[0] == 1);
+   b >>= 64;
+   VERIFY( b2 == b );
+ }
+ 
+ int main()
+ {
+   test_left_shift();
+   test_right_shift();
+ }
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/util/testsuite_allocator.h gcc-13.4.0/libstdc++-v3/testsuite/util/testsuite_allocator.h
*** gcc-13.3.0/libstdc++-v3/testsuite/util/testsuite_allocator.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/util/testsuite_allocator.h	Thu Jun  5 16:03:03 2025
*************** namespace __gnu_test
*** 154,160 ****
        tracker_allocator()
        { }
  
!       tracker_allocator(const tracker_allocator&)
        { }
  
        ~tracker_allocator()
--- 154,160 ----
        tracker_allocator()
        { }
  
!       tracker_allocator(const tracker_allocator& a) : Alloc(a)
        { }
  
        ~tracker_allocator()
diff -Nrcpad gcc-13.3.0/libstdc++-v3/testsuite/util/testsuite_performance.h gcc-13.4.0/libstdc++-v3/testsuite/util/testsuite_performance.h
*** gcc-13.3.0/libstdc++-v3/testsuite/util/testsuite_performance.h	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libstdc++-v3/testsuite/util/testsuite_performance.h	Thu Jun  5 16:03:03 2025
***************
*** 33,38 ****
--- 33,39 ----
  #include <stdexcept>
  #include <sstream>
  #include <cxxabi.h>
+ #include <ext/atomicity.h>
  #include <testsuite_common_types.h>
  
  #if defined (__linux__) || defined (__GLIBC__)
*************** namespace __gnu_test
*** 72,77 ****
--- 73,81 ----
    class time_counter
    {
    private:
+     // All times are measured in clock ticks.
+     // There are CLOCKS_PER_SEC ticks per second.
+     // POSIX requires CLOCKS_PER_SEC == 1000000 so ticks == microseconds.
      clock_t	elapsed_begin;
      clock_t	elapsed_end;
      tms		tms_begin;
*************** namespace __gnu_test
*** 135,141 ****
  
      std::size_t
      system_time() const
!     { return (tms_end.tms_stime - tms_begin.tms_stime) + splits[1]; }
    };
  
    class resource_counter
--- 139,145 ----
  
      std::size_t
      system_time() const
!     { return (tms_end.tms_stime - tms_begin.tms_stime) + splits[2]; }
    };
  
    class resource_counter
*************** namespace __gnu_test
*** 223,232 ****
  
      std::ofstream out(name, std::ios_base::app);
  
! #ifdef __GTHREADS
!     if (__gthread_active_p())
        testname.append("-thread");
- #endif
  
      out.setf(std::ios_base::left);
      out << std::setw(25) << testname << tab;
--- 227,234 ----
  
      std::ofstream out(name, std::ios_base::app);
  
!     if (!__gnu_cxx::__is_single_threaded())
        testname.append("-thread");
  
      out.setf(std::ios_base::left);
      out << std::setw(25) << testname << tab;
*************** namespace __gnu_test
*** 253,262 ****
  
      std::ofstream out(name, std::ios_base::app);
  
! #ifdef __GTHREADS
!     if (__gthread_active_p ())
        testname.append("-thread");
- #endif
  
      out.setf(std::ios_base::left);
      out << std::setw(25) << testname << tab;
--- 255,262 ----
  
      std::ofstream out(name, std::ios_base::app);
  
!     if (!__gnu_cxx::__is_single_threaded ())
        testname.append("-thread");
  
      out.setf(std::ios_base::left);
      out << std::setw(25) << testname << tab;
diff -Nrcpad gcc-13.3.0/libvtv/ChangeLog gcc-13.4.0/libvtv/ChangeLog
*** gcc-13.3.0/libvtv/ChangeLog	Tue May 21 07:47:42 2024
--- gcc-13.4.0/libvtv/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/lto-plugin/ChangeLog gcc-13.4.0/lto-plugin/ChangeLog
*** gcc-13.3.0/lto-plugin/ChangeLog	Tue May 21 07:47:42 2024
--- gcc-13.4.0/lto-plugin/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/maintainer-scripts/ChangeLog gcc-13.4.0/maintainer-scripts/ChangeLog
*** gcc-13.3.0/maintainer-scripts/ChangeLog	Tue May 21 07:47:42 2024
--- gcc-13.4.0/maintainer-scripts/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
diff -Nrcpad gcc-13.3.0/zlib/ChangeLog gcc-13.4.0/zlib/ChangeLog
*** gcc-13.3.0/zlib/ChangeLog	Tue May 21 07:47:42 2024
--- gcc-13.4.0/zlib/ChangeLog	Thu Jun  5 16:03:57 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-06-05  Release Manager
+ 
+ 	* GCC 13.4.0 released.
+ 
  2024-05-21  Release Manager
  
  	* GCC 13.3.0 released.
